diff -Nru clucene-core-0.9.21b/aclocal.m4 clucene-core-2.3.3.4/aclocal.m4 --- clucene-core-0.9.21b/aclocal.m4 2008-10-23 18:18:19.000000000 +0000 +++ clucene-core-2.3.3.4/aclocal.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,7515 +0,0 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- - -# serial 52 Debian 1.5.26-1ubuntu1 AC_PROG_LIBTOOL - - -# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) -# ----------------------------------------------------------- -# If this macro is not defined by Autoconf, define it here. -m4_ifdef([AC_PROVIDE_IFELSE], - [], - [m4_define([AC_PROVIDE_IFELSE], - [m4_ifdef([AC_PROVIDE_$1], - [$2], [$3])])]) - - -# AC_PROG_LIBTOOL -# --------------- -AC_DEFUN([AC_PROG_LIBTOOL], -[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl -dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX -dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. - AC_PROVIDE_IFELSE([AC_PROG_CXX], - [AC_LIBTOOL_CXX], - [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX - ])]) -dnl And a similar setup for Fortran 77 support - AC_PROVIDE_IFELSE([AC_PROG_F77], - [AC_LIBTOOL_F77], - [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 -])]) - -dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. -dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run -dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. - AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [ifdef([AC_PROG_GCJ], - [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([A][M_PROG_GCJ], - [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([LT_AC_PROG_GCJ], - [define([LT_AC_PROG_GCJ], - defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) -])])# AC_PROG_LIBTOOL - - -# _AC_PROG_LIBTOOL -# ---------------- -AC_DEFUN([_AC_PROG_LIBTOOL], -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl -AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl -AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl -AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Prevent multiple expansion -define([AC_PROG_LIBTOOL], []) -])# _AC_PROG_LIBTOOL - - -# AC_LIBTOOL_SETUP -# ---------------- -AC_DEFUN([AC_LIBTOOL_SETUP], -[AC_PREREQ(2.50)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl - -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl -AC_LIBTOOL_SYS_MAX_CMD_LEN -AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -AC_LIBTOOL_OBJDIR - -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -_LT_AC_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] - -# Same as above, but do not quote variable references. -[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -AC_CHECK_TOOL(AR, ar, false) -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - AC_PATH_MAGIC - fi - ;; -esac - -_LT_REQUIRED_DARWIN_CHECKS - -AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -enable_win32_dll=yes, enable_win32_dll=no) - -AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -AC_ARG_WITH([pic], - [AC_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -AC_LIBTOOL_LANG_C_CONFIG -_LT_AC_TAGCONFIG -])# AC_LIBTOOL_SETUP - - -# _LT_AC_SYS_COMPILER -# ------------------- -AC_DEFUN([_LT_AC_SYS_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_AC_SYS_COMPILER - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -AC_DEFUN([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -AC_DEFUN([_LT_COMPILER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -AC_DEFUN([_LT_LINKER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# -------------------------- -# Check for some things on darwin -AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - echo "int foo(void){return 1;}" > conftest.c - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib ${wl}-single_module conftest.c - if test -f libconftest.dylib; then - lt_cv_apple_cc_single_mod=yes - rm -rf libconftest.dylib* - fi - rm conftest.c - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - case $host_os in - rhapsody* | darwin1.[[0123]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}" - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil="~$DSYMUTIL \$lib || :" - else - _lt_dsymutil= - fi - ;; - esac -]) - -# _LT_AC_SYS_LIBPATH_AIX -# ---------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_AC_SYS_LIBPATH_AIX - - -# _LT_AC_SHELL_INIT(ARG) -# ---------------------- -AC_DEFUN([_LT_AC_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_AC_SHELL_INIT - - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], -[_LT_AC_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -echo=${ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(ECHO) -])])# _LT_AC_PROG_ECHO_BACKSLASH - - -# _LT_AC_LOCK -# ----------- -AC_DEFUN([_LT_AC_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw* | *-*-pw32*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; - ]) -esac - -need_locks="$enable_libtool_lock" - -])# _LT_AC_LOCK - - -# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED]) -AC_CACHE_CHECK([$1], [$2], - [$2=no - ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $rm conftest* -]) - -if test x"[$]$2" = xyes; then - ifelse([$5], , :, [$5]) -else - ifelse([$6], , :, [$6]) -fi -])# AC_LIBTOOL_COMPILER_OPTION - - -# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ------------------------------------------------------------ -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $rm -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - ifelse([$4], , :, [$4]) -else - ifelse([$5], , :, [$5]) -fi -])# AC_LIBTOOL_LINKER_OPTION - - -# AC_LIBTOOL_SYS_MAX_CMD_LEN -# -------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], -[# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -])# AC_LIBTOOL_SYS_MAX_CMD_LEN - - -# _LT_AC_CHECK_DLFCN -# ------------------ -AC_DEFUN([_LT_AC_CHECK_DLFCN], -[AC_CHECK_HEADERS(dlfcn.h)dnl -])# _LT_AC_CHECK_DLFCN - - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# --------------------------------------------------------------------- -AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -}] -EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_AC_TRY_DLOPEN_SELF - - -# AC_LIBTOOL_DLOPEN_SELF -# ---------------------- -AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -])# AC_LIBTOOL_DLOPEN_SELF - - -# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) -# --------------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler -AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* -]) -])# AC_LIBTOOL_PROG_CC_C_O - - -# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) -# ----------------------------------------- -# Check to see if we can do hard links to lock some files if needed -AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], -[AC_REQUIRE([_LT_AC_LOCK])dnl - -hard_links="nottested" -if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS - - -# AC_LIBTOOL_OBJDIR -# ----------------- -AC_DEFUN([AC_LIBTOOL_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -])# AC_LIBTOOL_OBJDIR - - -# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) -# ---------------------------------------------- -# Check hardcoding attributes. -AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_AC_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_AC_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_AC_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_AC_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH - - -# AC_LIBTOOL_SYS_LIB_STRIP -# ------------------------ -AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], -[striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) -fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -])# AC_LIBTOOL_SYS_LIB_STRIP - - -# AC_LIBTOOL_SYS_DYNAMIC_LINKER -# ----------------------------- -# PORTME Fill in your ld.so characteristics -AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -m4_if($1,[],[ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`echo $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec], -[lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"]) -sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec], -[lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"]) -sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -])# AC_LIBTOOL_SYS_DYNAMIC_LINKER - - -# _LT_AC_TAGCONFIG -# ---------------- -AC_DEFUN([_LT_AC_TAGCONFIG], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_ARG_WITH([tags], - [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], - [include additional configurations @<:@automatic@:>@])], - [tagnames="$withval"]) - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - AC_MSG_WARN([output file `$ofile' does not exist]) - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) - else - AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in - "") ;; - *) AC_MSG_ERROR([invalid tag name: $tagname]) - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - AC_MSG_ERROR([tag name \"$tagname\" already exists]) - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_LIBTOOL_LANG_CXX_CONFIG - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - AC_LIBTOOL_LANG_F77_CONFIG - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - AC_LIBTOOL_LANG_GCJ_CONFIG - else - tagname="" - fi - ;; - - RC) - AC_LIBTOOL_LANG_RC_CONFIG - ;; - - *) - AC_MSG_ERROR([Unsupported tag name: $tagname]) - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - AC_MSG_ERROR([unable to update list of available tagged configurations.]) - fi -fi -])# _LT_AC_TAGCONFIG - - -# AC_LIBTOOL_DLOPEN -# ----------------- -# enable checks for dlopen support -AC_DEFUN([AC_LIBTOOL_DLOPEN], - [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_DLOPEN - - -# AC_LIBTOOL_WIN32_DLL -# -------------------- -# declare package support for building win32 DLLs -AC_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_WIN32_DLL - - -# AC_ENABLE_SHARED([DEFAULT]) -# --------------------------- -# implement the --enable-shared flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_SHARED], -[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([shared], - [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]AC_ENABLE_SHARED_DEFAULT) -])# AC_ENABLE_SHARED - - -# AC_DISABLE_SHARED -# ----------------- -# set the default shared flag to --disable-shared -AC_DEFUN([AC_DISABLE_SHARED], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no) -])# AC_DISABLE_SHARED - - -# AC_ENABLE_STATIC([DEFAULT]) -# --------------------------- -# implement the --enable-static flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_STATIC], -[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([static], - [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]AC_ENABLE_STATIC_DEFAULT) -])# AC_ENABLE_STATIC - - -# AC_DISABLE_STATIC -# ----------------- -# set the default static flag to --disable-static -AC_DEFUN([AC_DISABLE_STATIC], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no) -])# AC_DISABLE_STATIC - - -# AC_ENABLE_FAST_INSTALL([DEFAULT]) -# --------------------------------- -# implement the --enable-fast-install flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_FAST_INSTALL], -[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([fast-install], - [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) -])# AC_ENABLE_FAST_INSTALL - - -# AC_DISABLE_FAST_INSTALL -# ----------------------- -# set the default to --disable-fast-install -AC_DEFUN([AC_DISABLE_FAST_INSTALL], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no) -])# AC_DISABLE_FAST_INSTALL - - -# AC_LIBTOOL_PICMODE([MODE]) -# -------------------------- -# implement the --with-pic flag -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -AC_DEFUN([AC_LIBTOOL_PICMODE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -pic_mode=ifelse($#,1,$1,default) -])# AC_LIBTOOL_PICMODE - - -# AC_PROG_EGREP -# ------------- -# This is predefined starting with Autoconf 2.54, so this conditional -# definition can be removed once we require Autoconf 2.54 or later. -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], -[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], - [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi]) - EGREP=$ac_cv_prog_egrep - AC_SUBST([EGREP]) -])]) - - -# AC_PATH_TOOL_PREFIX -# ------------------- -# find a file program which can recognize shared library -AC_DEFUN([AC_PATH_TOOL_PREFIX], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -])# AC_PATH_TOOL_PREFIX - - -# AC_PATH_MAGIC -# ------------- -# find a file program which can recognize a shared library -AC_DEFUN([AC_PATH_MAGIC], -[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# AC_PATH_MAGIC - - -# AC_PROG_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([AC_PROG_LD], -[AC_ARG_WITH([gnu-ld], - [AC_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no]) -AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown -])# AC_DEPLIBS_CHECK_METHOD - - -# AC_PROG_NM -# ---------- -# find the pathname to a BSD-compatible name lister -AC_DEFUN([AC_PROG_NM], -[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi]) -NM="$lt_cv_path_NM" -])# AC_PROG_NM - - -# AC_CHECK_LIBM -# ------------- -# check for math library -AC_DEFUN([AC_CHECK_LIBM], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -])# AC_CHECK_LIBM - - -# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# it is assumed to be `libltdl'. LIBLTDL will be prefixed with -# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' -# (note the single quotes!). If your package is not flat and you're not -# using automake, define top_builddir and top_srcdir appropriately in -# the Makefiles. -AC_DEFUN([AC_LIBLTDL_CONVENIENCE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_CONVENIENCE - - -# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl installable library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# and an installed libltdl is not found, it is assumed to be `libltdl'. -# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and top_srcdir -# appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN([AC_LIBLTDL_INSTALLABLE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, lt_dlinit, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - LTDLINCL= - fi - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_INSTALLABLE - - -# AC_LIBTOOL_CXX -# -------------- -# enable support for C++ libraries -AC_DEFUN([AC_LIBTOOL_CXX], -[AC_REQUIRE([_LT_AC_LANG_CXX]) -])# AC_LIBTOOL_CXX - - -# _LT_AC_LANG_CXX -# --------------- -AC_DEFUN([_LT_AC_LANG_CXX], -[AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) -])# _LT_AC_LANG_CXX - -# _LT_AC_PROG_CXXCPP -# ------------------ -AC_DEFUN([_LT_AC_PROG_CXXCPP], -[ -AC_REQUIRE([AC_PROG_CXX]) -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -fi -])# _LT_AC_PROG_CXXCPP - -# AC_LIBTOOL_F77 -# -------------- -# enable support for Fortran 77 libraries -AC_DEFUN([AC_LIBTOOL_F77], -[AC_REQUIRE([_LT_AC_LANG_F77]) -])# AC_LIBTOOL_F77 - - -# _LT_AC_LANG_F77 -# --------------- -AC_DEFUN([_LT_AC_LANG_F77], -[AC_REQUIRE([AC_PROG_F77]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) -])# _LT_AC_LANG_F77 - - -# AC_LIBTOOL_GCJ -# -------------- -# enable support for GCJ libraries -AC_DEFUN([AC_LIBTOOL_GCJ], -[AC_REQUIRE([_LT_AC_LANG_GCJ]) -])# AC_LIBTOOL_GCJ - - -# _LT_AC_LANG_GCJ -# --------------- -AC_DEFUN([_LT_AC_LANG_GCJ], -[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], - [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], - [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], - [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) -])# _LT_AC_LANG_GCJ - - -# AC_LIBTOOL_RC -# ------------- -# enable support for Windows resource files -AC_DEFUN([AC_LIBTOOL_RC], -[AC_REQUIRE([LT_AC_PROG_RC]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) -])# AC_LIBTOOL_RC - - -# AC_LIBTOOL_LANG_C_CONFIG -# ------------------------ -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) -AC_DEFUN([_LT_AC_LANG_C_CONFIG], -[lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) -AC_LIBTOOL_SYS_LIB_STRIP -AC_LIBTOOL_DLOPEN_SELF - -# Report which library types will actually be built -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_C_CONFIG - - -# AC_LIBTOOL_LANG_CXX_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) -AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], -[AC_LANG_PUSH(C++) -AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Dependencies to place before and after the object being linked: -_LT_AC_TAGVAR(predep_objects, $1)= -_LT_AC_TAGVAR(postdep_objects, $1)= -_LT_AC_TAGVAR(predeps, $1)= -_LT_AC_TAGVAR(postdeps, $1)= -_LT_AC_TAGVAR(compiler_lib_search_path, $1)= -_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' -else - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - AC_PROG_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -_LT_AC_TAGVAR(ld_shlibs, $1)=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - if test "$GXX" = yes ; then - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - freebsd-elf*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - ;; - gnu*) - ;; - hpux9*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) ;; - *) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - interix[[3-9]]*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - m88k*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; -esac -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_AC_TAGVAR(GCC, $1)="$GXX" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_POSTDEP_PREDEP($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -])# AC_LIBTOOL_LANG_CXX_CONFIG - -# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) -# ------------------------------------ -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - # - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - if test "$solaris_use_stlport4" != yes; then - _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) -case " $_LT_AC_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac -])# AC_LIBTOOL_POSTDEP_PREDEP - -# AC_LIBTOOL_LANG_F77_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)]) -AC_DEFUN([_LT_AC_LANG_F77_CONFIG], -[AC_REQUIRE([AC_PROG_F77]) -AC_LANG_PUSH(Fortran 77) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="\ - subroutine t - return - end -" - -# Code to be used in simple link tests -lt_simple_link_test_code="\ - program t - end -" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -_LT_AC_TAGVAR(GCC, $1)="$G77" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_F77_CONFIG - - -# AC_LIBTOOL_LANG_GCJ_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)]) -AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG], -[AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_GCJ_CONFIG - - -# AC_LIBTOOL_LANG_RC_CONFIG -# ------------------------- -# Ensure that the configuration vars for the Windows resource compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)]) -AC_DEFUN([_LT_AC_LANG_RC_CONFIG], -[AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_RC_CONFIG - - -# AC_LIBTOOL_CONFIG([TAGNAME]) -# ---------------------------- -# If TAGNAME is not passed, then create an initial libtool script -# with a default configuration from the untagged config vars. Otherwise -# add code to config.status for appending the configuration named by -# TAGNAME from the matching tagged config vars. -AC_DEFUN([AC_LIBTOOL_CONFIG], -[# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - _LT_AC_TAGVAR(compiler, $1) \ - _LT_AC_TAGVAR(CC, $1) \ - _LT_AC_TAGVAR(LD, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \ - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \ - _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \ - _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \ - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \ - _LT_AC_TAGVAR(old_archive_cmds, $1) \ - _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \ - _LT_AC_TAGVAR(predep_objects, $1) \ - _LT_AC_TAGVAR(postdep_objects, $1) \ - _LT_AC_TAGVAR(predeps, $1) \ - _LT_AC_TAGVAR(postdeps, $1) \ - _LT_AC_TAGVAR(compiler_lib_search_path, $1) \ - _LT_AC_TAGVAR(compiler_lib_search_dirs, $1) \ - _LT_AC_TAGVAR(archive_cmds, $1) \ - _LT_AC_TAGVAR(archive_expsym_cmds, $1) \ - _LT_AC_TAGVAR(postinstall_cmds, $1) \ - _LT_AC_TAGVAR(postuninstall_cmds, $1) \ - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \ - _LT_AC_TAGVAR(allow_undefined_flag, $1) \ - _LT_AC_TAGVAR(no_undefined_flag, $1) \ - _LT_AC_TAGVAR(export_symbols_cmds, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \ - _LT_AC_TAGVAR(hardcode_automatic, $1) \ - _LT_AC_TAGVAR(module_cmds, $1) \ - _LT_AC_TAGVAR(module_expsym_cmds, $1) \ - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \ - _LT_AC_TAGVAR(fix_srcfile_path, $1) \ - _LT_AC_TAGVAR(exclude_expsyms, $1) \ - _LT_AC_TAGVAR(include_expsyms, $1); do - - case $var in - _LT_AC_TAGVAR(old_archive_cmds, $1) | \ - _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \ - _LT_AC_TAGVAR(archive_cmds, $1) | \ - _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \ - _LT_AC_TAGVAR(module_cmds, $1) | \ - _LT_AC_TAGVAR(module_expsym_cmds, $1) | \ - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \ - _LT_AC_TAGVAR(export_symbols_cmds, $1) | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\[$]0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'` - ;; - esac - -ifelse([$1], [], - [cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - AC_MSG_NOTICE([creating $ofile])], - [cfgfile="$ofile"]) - - cat <<__EOF__ >> "$cfgfile" -ifelse([$1], [], -[#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG], -[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) - -# Is the compiler the GNU C compiler? -with_gcc=$_LT_AC_TAGVAR(GCC, $1) - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_[]_LT_AC_TAGVAR(LD, $1) - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) - -# Commands used to build and install a shared archive. -archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) -archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) -module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) - -# The directories searched by this compiler when creating a shared -# library -compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1) - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) - -# The commands to list exported symbols. -export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) - -# Symbols that must always be exported. -include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) - -ifelse([$1],[], -[# ### END LIBTOOL CONFIG], -[# ### END LIBTOOL TAG CONFIG: $tagname]) - -__EOF__ - -ifelse([$1],[], [ - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -]) -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi -])# AC_LIBTOOL_CONFIG - - -# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl - -_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI - - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([LT_AC_PROG_SED]) -AC_REQUIRE([AC_PROG_NM]) -AC_REQUIRE([AC_OBJEXT]) -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[[ABCDGIRSTW]]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[[]] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi -]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - - -# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) -# --------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], -[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) - ifelse([$1],[CXX],[ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler. - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - newsos6) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then - AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], - _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1), - [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" -AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) -]) - - -# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) -# ------------------------------------ -# See if the linker supports building shared libraries. -AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -ifelse([$1],[CXX],[ - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - _LT_AC_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -],[ - runpath_var= - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)= - _LT_AC_TAGVAR(archive_expsym_cmds, $1)= - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_minus_L, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown - _LT_AC_TAGVAR(hardcode_automatic, $1)=no - _LT_AC_TAGVAR(module_cmds, $1)= - _LT_AC_TAGVAR(module_expsym_cmds, $1)= - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_AC_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - _LT_CC_BASENAME([$compiler]) - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - _LT_AC_TAGVAR(link_all_deplibs, $1)=no - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - # see comment about different semantics on the GNU ld section - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - bsdi[[45]]*) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_AC_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) - then - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac -])# AC_LIBTOOL_PROG_LD_SHLIBS - - -# _LT_AC_FILE_LTDLL_C -# ------------------- -# Be careful that the start marker always follows a newline. -AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ -])# _LT_AC_FILE_LTDLL_C - - -# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) -# --------------------------------- -AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) - - -# old names -AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) -AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) -AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) - -# This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL]) - -AC_DEFUN([LT_AC_PROG_GCJ], -[AC_CHECK_TOOL(GCJ, gcj, no) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS) -]) - -AC_DEFUN([LT_AC_PROG_RC], -[AC_CHECK_TOOL(RC, windres, no) -]) - - -# Cheap backport of AS_EXECUTABLE_P and required macros -# from Autoconf 2.59; we should not use $as_executable_p directly. - -# _AS_TEST_PREPARE -# ---------------- -m4_ifndef([_AS_TEST_PREPARE], -[m4_defun([_AS_TEST_PREPARE], -[if test -x / >/dev/null 2>&1; then - as_executable_p='test -x' -else - as_executable_p='test -f' -fi -])])# _AS_TEST_PREPARE - -# AS_EXECUTABLE_P -# --------------- -# Check whether a file is executable. -m4_ifndef([AS_EXECUTABLE_P], -[m4_defun([AS_EXECUTABLE_P], -[AS_REQUIRE([_AS_TEST_PREPARE])dnl -$as_executable_p $1[]dnl -])])# AS_EXECUTABLE_P - -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -# LT_AC_PROG_SED -# -------------- -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -AC_DEFUN([LT_AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -]) - -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 7 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 3 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 12 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.58])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -]) -]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $1 | $1:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 3 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo done -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. -# -# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories -# created by `make install' are always world readable, even if the -# installer happens to have an overly restrictive umask (e.g. 077). -# This was a mistake. There are at least two reasons why we must not -# use `-m 0755': -# - it causes special bits like SGID to be ignored, -# - it may be too restrictive (some setups expect 775 directories). -# -# Do not use -m 0755 and let people choose whatever they expect by -# setting umask. -# -# We cannot accept any implementation of `mkdir' that recognizes `-p'. -# Some implementations (such as Solaris 8's) are not thread-safe: if a -# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' -# concurrently, both version can detect that a/ is missing, but only -# one can create it and the other will error out. Consequently we -# restrict ourselves to GNU make (using the --version option ensures -# this.) -AC_DEFUN([AM_PROG_MKDIR_P], -[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi -AC_SUBST([mkdir_p])]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 3 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ac_cxx_have_std.m4]) -m4_include([m4/ac_cxx_have_stl.m4]) -m4_include([m4/ac_cxx_have_wctype_h.m4]) -m4_include([m4/ac_cxx_namespaces.m4]) -m4_include([m4/ac_define_integer_bits.m4]) -m4_include([m4/acx_pthread.m4]) -m4_include([m4/ax_config_feature.m4]) -m4_include([m4/ax_prefix_config_h.m4]) -m4_include([m4/dps_float_byte.m4]) -m4_include([m4/dps_snprintf_oflow.m4]) -m4_include([m4/dps_static_const_type.m4]) -m4_include([m4/dps_swprintf_works.m4]) -m4_include([m4/mdl_cxx_function_try_blocks.m4]) diff -Nru clucene-core-0.9.21b/AUTHORS clucene-core-2.3.3.4/AUTHORS --- clucene-core-0.9.21b/AUTHORS 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/AUTHORS 2011-03-17 00:21:07.000000000 +0000 @@ -9,11 +9,10 @@ Here is a list of contributors. Please send me an email at ustramooner@users.sourceforge.net if I have left you out. -Ben van Klinken ustramooner@users.sourceforge.net -Doug Cutting cutting@users.sourceforge.net -John Wheeler j_wheeler@users.sourceforge.net -Robert G. Ristroph rgristroph@users.sourceforge.net -David Rushby woodsplitter@users.sourceforge.net +Doug Cutting cutting@users.sourceforge.net +John Wheeler j_wheeler@users.sourceforge.net +Robert G. Ristroph rgristroph@users.sourceforge.net +David Rushby woodsplitter@users.sourceforge.net Jimmy Pritts jpritts@sdf.lonestar.org Peter Edwards peter@dragonstaff.co.uk Jorge Sabater Redondo jsabater@elderecho.com @@ -21,3 +20,4 @@ Peter Gladkikh batyi@mail.ru Pedja amigo@max3d.com Peter Hodges hodges.peter@gmail.com +Itamar Syn-Hershko synhershko@users.sourceforge.net diff -Nru clucene-core-0.9.21b/autogen.sh clucene-core-2.3.3.4/autogen.sh --- clucene-core-0.9.21b/autogen.sh 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/autogen.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -#!/bin/sh -# Bootstrap the CLucene installation. -# Run this to generate all the initial makefiles, etc. -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -ORIGDIR=`pwd` -cd $srcdir -PROJECT=clucene-core -TEST_TYPE=-f -FILE=src/CLucene/StdHeader.h - -DIE=0 - -(autoconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have autoconf installed to call autogen.sh." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -AUTOMAKE=automake-1.9 -ACLOCAL=aclocal-1.9 - -($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { - AUTOMAKE=automake - ACLOCAL=aclocal -} - -($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have automake installed to call autogen.sh." - echo "Get ftp://sourceware.cygnus.com/pub/automake/automake-1.4.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -} - -(libtool --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have \`libtool' installed to call autogen.sh." - echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -} - -if test "$DIE" -eq 1; then - exit 1 -fi - -test $TEST_TYPE $FILE || { - echo "You must run this script in the top-level $PROJECT directory" - exit 1 -} - -if test "$1" = "--clean" || test "$1" = "--clear"; then - make maintainer-clean - rm -fdr build libltdl config autom4te.cache _configs.sed - exit 0 -fi - -#create the temp gcc config dir -mkdir config 2>/dev/null - -set -x -libtoolize --force --copy --ltdl --automake -$ACLOCAL -I m4 -autoconf -autoheader -$AUTOMAKE --add-missing --copy - -cd "$ORIGDIR" diff -Nru clucene-core-0.9.21b/ChangeLog clucene-core-2.3.3.4/ChangeLog --- clucene-core-0.9.21b/ChangeLog 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/ChangeLog 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,17 @@ +Removed jstreams namespace. Sorry, I couldn't think of a way to nicely deprecate jstreams. + +version 0.9.23: +Changes: +* Static object fields have been changed to method accessors (SortField::FIELDDOC now chould be accessed as SortField::FIELDDOC(), for example). Classes changed: FieldCache, ScoreDocComparator, + This was necessary for creating static libraries work on certain platforms. +* Folders were reorganised, this seems like a good time to do it +* Some deprecated functions were removed. +* moved platform configuration type code and utility code into 'shared' project. This enables tests to be built with a shared library on windows +* Moved moved of the platform specific logic into cmake in order to reduce #ifdefs in code (i love cmake!) +* added contributions code into the trunk. this will hopefully mean more exposure to the contributions. need to make clear about the licensing still, though. +* Deletor::Array was renamed to Deletor::vArray. +* re-worked the install location for system-dependent files (clucene-config.h). this was a confusing issue, and i think it's better to stick to the standards rather than push the more compatible (in my opinion) way of doing things. this one has been getting so many complaints from downstream. however, LUCENE_SYS_INCLUDES is available to install the clucene-config.h type files into the library directory (or any other place). + +Here is a summary of changes that you'll need to look at for this release: +* Action deprecated features. Some features that were deprecated for a long time have now been finally removed. +* fix things that may affect you, such as the LUCENE_SYS_INCLUDES change, and the reorganisation of code (install locations are still the same though). Also autotools removals may affect your work, depending on how you use clucene. diff -Nru clucene-core-0.9.21b/cmake/CLuceneBoost.cmake clucene-core-2.3.3.4/cmake/CLuceneBoost.cmake --- clucene-core-0.9.21b/cmake/CLuceneBoost.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/cmake/CLuceneBoost.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,22 @@ +#Locate Boost libs. Windows users: make sure BOOST_ROOT and BOOST_PATH are set correctly on your environment. +#See the site FAQ for more details. + +MACRO (GET_BOOST_INCLUDE_PATH path) + #todo: allow this to fall back on a local distributed copy, so user doesn't have to d/l Boost seperately + SET(Boost_USE_MULTITHREAD ON) + FIND_PACKAGE( Boost ) + + #todo: limit Boost version? + #todo: use COMPONENTS threads to locate boost_threads without breaking the current support + IF(Boost_FOUND) + IF (NOT _boost_IN_CACHE) + MESSAGE( "Boost found" ) + message(STATUS "Boost_INCLUDE_DIR : ${Boost_INCLUDE_DIR}") + ENDIF (NOT _boost_IN_CACHE) + SET(${path} ${Boost_INCLUDE_DIRS} ) + ELSE() + MESSAGE( "Boost not found, using local: ${clucene_SOURCE_DIR}/src/ext" ) + SET(${path} ${clucene_SOURCE_DIR}/src/ext ) + ENDIF() +ENDMACRO (GET_BOOST_INCLUDE_PATH path) + diff -Nru clucene-core-0.9.21b/cmake/CLuceneDocs.cmake clucene-core-2.3.3.4/cmake/CLuceneDocs.cmake --- clucene-core-0.9.21b/cmake/CLuceneDocs.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/cmake/CLuceneDocs.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,151 @@ +# - CLuceneDocs.cmake +# This file provides support for building the CLucene Documentation. +# To build the documention, you will have to enable it +# and then do the equivalent of "make doc". +OPTION(ENABLE_CLDOCS "Build the clucene documentation." OFF) + +MACRO(SET_YESNO) + FOREACH(param ${ARGV}) + IF ( ${param} ) + SET(${param} "YES") + ELSE ( ${param} ) + SET(${param} "NO") + ENDIF ( ${param} ) + ENDFOREACH(param) +ENDMACRO(SET_YESNO) +MACRO(SET_BLANK) + FOREACH(param ${ARGV}) + IF ( NOT ${param} ) + SET(${param} "") + ENDIF ( NOT ${param} ) + ENDFOREACH(param) +ENDMACRO(SET_BLANK) + +IF (ENABLE_CLDOCS) + OPTION(CLDOCS_HTML_HELP + "Doxygen should compile HTML into a Help file (CHM)." NO) + + OPTION(CLDOCS_HTML + "Doxygen should build HTML documentation." YES) + OPTION(CLDOCS_XML + "Doxygen should build XML documentation." NO) + OPTION(CLDOCS_RTF + "Doxygen should build RTF documentation." NO) + OPTION(CLDOCS_MAN + "Doxygen should build man documentation." NO) + OPTION(CLDOCS_TAGFILE + "Doxygen should build a tagfile." NO) + + OPTION(CLDOCS_LATEX + "Doxygen should build Latex documentation." NO ) + + MARK_AS_ADVANCED( + CLDOCS_HTML_HELP + CLDOCS_LATEX + CLDOCS_XML + CLDOCS_HTML + CLDOCS_RTF + CLDOCS_MAN + CLDOCS_TAGFILE + ) + + # + # Check for the tools + # + FIND_PACKAGE(Doxygen) + + IF ( DOXYGEN_FOUND ) + # This creates a new target to build documentation. + # It runs ${DOXYGEN_EXECUTABLE} which is the full path and executable to + # Doxygen on your system, set by the FindDoxygen.cmake module + # (called by FindDocumentation.cmake). + # It runs the final generated Doxyfile against it. + # The DOT_PATH is substituted into the Doxyfile. + ADD_CUSTOM_TARGET(doc + ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/doc/doxyfile + ) + + IF ( CLDOCS_HTML_HELP ) + IF ( NOT CLDOCS_HTML ) + MESSAGE ( FATAL_ERROR "CLDOCS_HTML is required to buidl CLDOCS_HTML_HELP" ) + ENDIF ( NOT CLDOCS_HTML ) + FIND_PACKAGE(HTMLHelp) + IF ( NOT HTML_HELP_COMPILER ) + MESSAGE(FATAL_ERROR "HTML Help compiler not found, turn CLDOCS_HTML_HELP off to proceed") + ENDIF ( NOT HTML_HELP_COMPILER ) + + #make cygwin work with hhc... + IF ( CYGWIN ) + EXECUTE_PROCESS ( COMMAND cygpath "${HTML_HELP_COMPILER}" + OUTPUT_VARIABLE HTML_HELP_COMPILER_EX ) + STRING ( REPLACE "\n" "" HTML_HELP_COMPILER_EX ${HTML_HELP_COMPILER_EX} ) + STRING ( REPLACE "\r" "" HTML_HELP_COMPILER_EX ${HTML_HELP_COMPILER_EX} ) + SET ( HTML_HELP_COMPILER_EX "\"${HTML_HELP_COMPILER_EX}\"" ) + ELSE ( CYGWIN ) + SET ( HTML_HELP_COMPILER_EX ${HTML_HELP_COMPILER} ) + ENDIF ( CYGWIN ) + ENDIF ( CLDOCS_HTML_HELP ) + + IF ( CLDOCS_LATEX ) + FIND_PACKAGE(LATEX) + IF ( NOT LATEX_COMPILER ) + MESSAGE(FATAL_ERROR "Latex compiler not found, turn CLDOCS_LATEX off to proceed") + ENDIF ( NOT LATEX_COMPILER ) + ENDIF ( CLDOCS_LATEX ) + + FIND_PACKAGE(Perl) + + IF ( DOXYGEN_DOT_EXECUTABLE ) + SET ( HAVE_DOT "YES" ) + ELSE ( DOXYGEN_DOT_EXECUTABLE ) + SET ( HAVE_DOT "NO" ) + ENDIF ( DOXYGEN_DOT_EXECUTABLE ) + + #doxygen expects YES/NO parameters + SET_YESNO( + CLDOCS_HTML_HELP + CLDOCS_LATEX + CLDOCS_XML + CLDOCS_HTML + CLDOCS_RTF + CLDOCS_MAN + ) + #empty out paths if not found + SET_BLANK( + PERL_EXECUTABLE + DOXYGEN_DOT_EXECUTABLE + HTML_HELP_COMPILER + LATEX_COMPILER + ) + + IF ( CLDOCS_TAGFILE ) + SET ( CLDOCS_TAGFILE_LOCATION "${PROJECT_BINARY_DIR}/doc/tag/clucene.tag" ) + ENDIF ( CLDOCS_TAGFILE ) + + # This processes our Doxyfile.cmake and substitutes paths to generate a final Doxyfile + CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfile.cmake ${PROJECT_BINARY_DIR}/doc/doxyfile ) + CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/helpheader.htm.cmake ${PROJECT_BINARY_DIR}/doc/helpheader.htm ) + CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/helpfooter.htm.cmake ${PROJECT_BINARY_DIR}/doc/helpfooter.htm ) + CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/doxygen.css.cmake ${PROJECT_BINARY_DIR}/doc/html/doxygen.css ) + + #create a target for tar.gz html help + FIND_PACKAGE(UnixCommands) + IF ( TAR AND GZIP ) + ADD_CUSTOM_TARGET(doc-tarz + COMMAND "${TAR}" "-cf" "doc/clucene-core-doc.tar" "${PROJECT_BINARY_DIR}/doc/html/" + COMMAND "${GZIP}" "doc/clucene-core-doc.tar" + #DEPENDS doc-doxygen + ) + ENDIF ( TAR AND GZIP ) + + #install man if it was built + IF ( CLDOCS_MAN ) + INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/doc/man/ DESTINATION man) + ENDIF ( CLDOCS_MAN ) + + ELSE ( DOXYGEN_FOUND ) + MESSAGE(FATAL_ERROR "Doxygen not found, turn ENABLE_CLDOCS off to proceed") + ENDIF ( DOXYGEN_FOUND ) + + +ENDIF (ENABLE_CLDOCS) diff -Nru clucene-core-0.9.21b/cmake/cmake_uninstall.cmake.in clucene-core-2.3.3.4/cmake/cmake_uninstall.cmake.in --- clucene-core-0.9.21b/cmake/cmake_uninstall.cmake.in 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/cmake/cmake_uninstall.cmake.in 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,23 @@ +IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +STRING(REGEX REPLACE "\n" ";" files "${files}") +FOREACH(file ${files}) + MESSAGE(STATUS "Uninstalling \"${file}\"") + IF(EXISTS "${file}") + EXEC_PROGRAM( + "@CMAKE_COMMAND@" ARGS "-E remove \"${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + IF("${rm_retval}" STREQUAL 0) + ELSE("${rm_retval}" STREQUAL 0) + MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"") + ENDIF("${rm_retval}" STREQUAL 0) + + #ELSE(EXISTS "${file}") + # MESSAGE(STATUS "File \"${file}\" does not exist.") + ENDIF(EXISTS "${file}") +ENDFOREACH(file) diff -Nru clucene-core-0.9.21b/cmake/CreateClucenePackages.cmake clucene-core-2.3.3.4/cmake/CreateClucenePackages.cmake --- clucene-core-0.9.21b/cmake/CreateClucenePackages.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/cmake/CreateClucenePackages.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,91 @@ +#Creates all the relevant packages + +#Rules for version: +#MAJOR and MINOR versions are purely political +#REVISION version MUST be revised if the headers or compatibility change +#PATCH should be 0 unless a patch is made that doesn't affect the public signature (i.e. clients don't need to re-compile). + +SET(CPACK_PACKAGE_VERSION_MAJOR ${CLUCENE_VERSION_MAJOR}) +SET(CPACK_PACKAGE_VERSION_MINOR ${CLUCENE_VERSION_MINOR}) +SET(CPACK_PACKAGE_VERSION_REVISION ${CLUCENE_VERSION_REVISION}) +SET(CPACK_PACKAGE_VERSION_PATCH ${CLUCENE_VERSION_MAJOR}) + +SET(CPACK_PACKAGE_VERSION ${CLUCENE_VERSION}) +SET(CPACK_PACKAGE_SOVERSION ${CLUCENE_SOVERSION}) + +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "library for full-featured text search engine (runtime)") +SET(CPACK_PACKAGE_VENDOR "Ben van Klinken") +SET(CPACK_PACKAGE_CONTACT "clucene-developers@lists.sourceforge.net") +SET(CPACK_PACKAGE_NAME "libclucene1") + +SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.PACKAGE") +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CLucene - a C++ search engine, ported from the popular Apache Lucene") + +SET(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.PACKAGE") +SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") +SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/README.PACKAGE") + +#so, what are we going to install? +SET(CPACK_INSTALL_CMAKE_PROJECTS + "${CMAKE_BINARY_DIR};clucene-core;ALL;/" + "${CMAKE_BINARY_DIR};clucene-shared;ALL;/") +SET(CPACK_COMPONENTS_ALL development runtime) +SET(CPACK_GENERATOR "TGZ") +SET(CPACK_PACKAGE_FILE_NAME "clucene-core-${CPACK_PACKAGE_VERSION}-${CMAKE_SYSTEM_NAME}") + +IF(WIN32 AND NOT UNIX) + SET(CPACK_SOURCE_GENERATOR "ZIP") +ELSE(WIN32 AND NOT UNIX) + SET(CPACK_SOURCE_GENERATOR "TBZ2;TGZ") +ENDIF(WIN32 AND NOT UNIX) +SET(CPACK_SOURCE_PACKAGE_FILE_NAME "clucene-core-${CPACK_PACKAGE_VERSION}-Source") + +#specific packaging requirements: +SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.4), libgcc1 (>= 1:4.1.1-21), libstdc++6 (>= 4.1.1-21), zlib1g") +SET(CPACK_DEBIAN_PACKAGE_SECTION "libs") +SET(CPACK_RPM_PACKAGE_LICENSE "Apache 2.0") +SET(CPACK_RPM_PACKAGE_GROUP "libs") +SET(CPACK_RPM_PACKAGE_REQUIRES "libz") + +#don't include the current binary dir. +get_filename_component(clucene_BINARY_DIR_name ${clucene_BINARY_DIR} NAME) +SET(CPACK_SOURCE_IGNORE_FILES + "/\\\\.svn/" + "/\\\\.git/" + "\\\\.swp$" + "\\\\.#;/#" + ".*~" + ".*\\\\.tmp" + ".*\\\\.save" + "/${clucene_BINARY_DIR_name}/" +) + +IF(WIN32 AND NOT UNIX) + # There is a bug in NSI that does not handle full unix paths properly. Make + # sure there is at least one set of four (4) backlasshes. + SET(CPACK_GENERATOR "${CPACK_GENERATOR};NSIS") + #SET(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") + #SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe") + SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} CLucene Core Library") + SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\clucene.sourceforge.net") + SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\clucene.sourceforge.net") + SET(CPACK_NSIS_CONTACT "clucene-developers@lists.sourceforge.net") + #SET(CPACK_NSIS_MODIFY_PATH ON) +ELSE(WIN32 AND NOT UNIX) +# SET(CPACK_STRIP_FILES "bin/xxx") + SET(CPACK_SOURCE_STRIP_FILES "") +ENDIF(WIN32 AND NOT UNIX) +#SET(CPACK_PACKAGE_EXECUTABLES "MyExecutable" "My Executable") + + +ADD_CUSTOM_TARGET(dist-package + COMMAND rsync -avP -e ssh ${CPACK_PACKAGE_FILE_NAME}.* ustramooner@frs.sourceforge.net:uploads/ +# DEPENDS package +) +ADD_CUSTOM_TARGET(dist-package_source + COMMAND rsync -avP -e ssh ${CPACK_SOURCE_PACKAGE_FILE_NAME}.* ustramooner@frs.sourceforge.net:uploads/ +# DEPENDS package_source +) + +#this must be last +INCLUDE(CPack) diff -Nru clucene-core-0.9.21b/cmake/DefineOptions.cmake clucene-core-2.3.3.4/cmake/DefineOptions.cmake --- clucene-core-0.9.21b/cmake/DefineOptions.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/cmake/DefineOptions.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,53 @@ +#define global options, this makes it easy to use ccmake, or the cmake gui +MACRO (DEFINE_OPTIONS extraOptions extraLibs) + IF(ENABLE_DEBUG) + SET (${extraOptions} "${${extraOptions}} -D_DEBUG") + ENDIF(ENABLE_DEBUG) + + IF(ENABLE_MMAP) + SET (${extraOptions} "${${extraOptions}} -DLUCENE_FS_MMAP") + ENDIF(ENABLE_MMAP) + + IF(ENABLE_DMALLOC) + SET (${extraOptions} "${${extraOptions}} -DDMALLOC") + IF ( DISABLE_MULTITHREADING ) + SET (${extraLibs} ${${extraLibs}} "dmalloccxx") + ELSE( DISABLE_MULTITHREADING ) + SET (${extraLibs} ${${extraLibs}} "dmallocthcxx") + ENDIF ( DISABLE_MULTITHREADING ) + ENDIF(ENABLE_DMALLOC) + + IF(DISABLE_MULTITHREADING) + SET (${extraOptions} "${${extraOptions}} -D_CL_DISABLE_MULTITHREADING") + ELSE(DISABLE_MULTITHREADING) + SET(${extraOptions} "${${extraOptions}} -D_REENTRANT") + ENDIF(DISABLE_MULTITHREADING) + + IF(ENABLE_ASCII_MODE) + SET (${extraOptions} "${${extraOptions}} -D_ASCII") + ELSE(ENABLE_ASCII_MODE) + SET (${extraOptions} "${${extraOptions}} -D_UCS2") + SET (${extraOptions} "${${extraOptions}} -D_UNICODE") + ENDIF(ENABLE_ASCII_MODE) + + IF ( MSVC80 OR MSVC90) + #todo: remove this once crt functions are fixed... + SET (${extraOptions} "${${extraOptions}} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE") + ENDIF ( MSVC80 OR MSVC90 ) + + IF(CYGWIN) + ADD_DEFINITIONS(-D__LARGE64_FILES) + ENDIF(CYGWIN) + + # calm mdown msvc + IF(MSVC) + IF ( NOT MSVC60 ) + #ADD_DEFINITIONS(-wd4251) # 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' + #ADD_DEFINITIONS(-wd4275) # non DLL-interface classkey 'identifier' used as base for DLL-interface classkey 'identifier' + #ADD_DEFINITIONS(-wd4309) # 'conversion' : truncation of constant value + #ADD_DEFINITIONS(-wd4503) # decorated name length exceeded + #ADD_DEFINITIONS(-wd4786) # identifier was truncated to '255' characters in the debug information + ENDIF ( NOT MSVC60 ) + ENDIF(MSVC) + +ENDMACRO (DEFINE_OPTIONS) diff -Nru clucene-core-0.9.21b/cmake/Toolchain-g++32.cmake clucene-core-2.3.3.4/cmake/Toolchain-g++32.cmake --- clucene-core-0.9.21b/cmake/Toolchain-g++32.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/cmake/Toolchain-g++32.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,20 @@ +# Cross compiling from linux using g++-multilib to create 32 bit output +# On ubuntu, you'll need to install the packages: g++-multilib gcc-multilib +# +# Use of this file: +# cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-g++32.cmake .. + +SET(CMAKE_CXX_FLAGS "-m32") +SET(CMAKE_C_FLAGS "-m32") +SET(CMAKE_EXE_LINKER_FLAGS "-m32") +SET(CMAKE_MODULE_LINKER_FLAGS "-m32") + +# here is the target environment located +SET(CMAKE_FIND_ROOT_PATH /usr/lib32 ) + +# adjust the default behaviour of the FIND_XXX() commands: +# search headers and libraries in the target environment, search +# programs in the host environment +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + diff -Nru clucene-core-0.9.21b/cmake/Toolchain-llvm.cmake clucene-core-2.3.3.4/cmake/Toolchain-llvm.cmake --- clucene-core-0.9.21b/cmake/Toolchain-llvm.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/cmake/Toolchain-llvm.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,8 @@ +# Use of this file: +# cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-llvm.cmake .. + +# which compilers to use for C and C++ +SET(CMAKE_C_COMPILER clang) +SET(CMAKE_CXX_COMPILER clang++) + + diff -Nru clucene-core-0.9.21b/cmake/Toolchain-mingw32.cmake clucene-core-2.3.3.4/cmake/Toolchain-mingw32.cmake --- clucene-core-0.9.21b/cmake/Toolchain-mingw32.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/cmake/Toolchain-mingw32.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,32 @@ +# Cross compiling from linux using mingw32 tools +# On ubuntu, you'll need to install the packages: mingw32, mingw32-binutils, mingw32-runtime +# +# Use of this file: +# cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32.cmake -C ../cmake/Define-mingw32.cmake .. + +# the name of the target operating system +SET(CMAKE_SYSTEM_NAME Windows) + +# which compilers to use for C and C++ +SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc) +SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++) + +# here is the target environment located +SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc /home/alex/mingw-install ) + +INCLUDE_DIRECTORIES(/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++) + +# adjust the default behaviour of the FIND_XXX() commands: +# search headers and libraries in the target environment, search +# programs in the host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +SET(_CL_HAVE_GCCVISIBILITYPATCH 0) +SET(_CL_HAVE_NAMESPACES_EXITCODE 0) +SET(_CL_HAVE_NO_SNPRINTF_BUG_EXITCODE 0) +SET(_CL_HAVE_NO_SNWPRINTF_BUG_EXITCODE 0) +SET(LUCENE_STATIC_CONSTANT_SYNTAX_EXITCODE 1) +SET(_CL_HAVE_TRY_BLOCKS_EXITCODE 0) + diff -Nru clucene-core-0.9.21b/CMakeLists.txt clucene-core-2.3.3.4/CMakeLists.txt --- clucene-core-0.9.21b/CMakeLists.txt 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -1,53 +1,182 @@ PROJECT (clucene) -CMAKE_MINIMUM_REQUIRED(VERSION 2.4.2 FATAL_ERROR) +#Rules for version: +#MAJOR and MINOR versions are purely political (tracks JLucene compatibility) +#REVISION version MUST be revised if the headers or compatibility change +#PATCH should be 0 unless a patch is made that doesn't affect the public signature (i.e. clients don't need to re-compile). +SET(CLUCENE_VERSION_MAJOR "2") +SET(CLUCENE_VERSION_MINOR "3") +SET(CLUCENE_VERSION_REVISION "3") +SET(CLUCENE_VERSION_PATCH "4") + +# SOVERSION information +#Must be incremented for releases if the api is not backwards compatible +SET(CLUCENE_SOVERSION "1") + +MATH(EXPR CLUCENE_INT_VERSION "(${CLUCENE_VERSION_MAJOR} * 1000000) + (${CLUCENE_VERSION_MINOR} * 10000) + (${CLUCENE_VERSION_REVISION} * 100) + (${CLUCENE_VERSION_PATCH} * 1)" ) +SET(CLUCENE_VERSION "${CLUCENE_VERSION_MAJOR}.${CLUCENE_VERSION_MINOR}.${CLUCENE_VERSION_REVISION}.${CLUCENE_VERSION_PATCH}") + +#CMake 2.6+ is recommended to an improved Boost module +CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0 FATAL_ERROR) + +if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +endif(COMMAND cmake_policy) + +#set various platform specific global options +if(WIN32) + set(CMAKE_DEBUG_POSTFIX "d") +endif(WIN32) + # include specific modules set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") -# compile in debug mode +#define options... + +Include (CLuceneDocs) +Include (FindThreads) + IF(NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING + SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) ELSE(NOT CMAKE_BUILD_TYPE) - MESSAGE( "Compiling as ${CMAKE_BUILD_TYPE}" ) + MESSAGE( "Compiling as ${CMAKE_BUILD_TYPE}" ) ENDIF(NOT CMAKE_BUILD_TYPE) -INCLUDE_DIRECTORIES( ${clucene_SOURCE_DIR}/src ) -INCLUDE_DIRECTORIES( ${clucene_BINARY_DIR}/src ) - -SUBDIRS (src/CLucene test src/demo) - OPTION(ENABLE_DEBUG "enable debug support" OFF) -IF(ENABLE_DEBUG) - ADD_DEFINITIONS(-D_DEBUG) -ENDIF(ENABLE_DEBUG) - - OPTION(ENABLE_MMAP "enable mmap support (experimental)" OFF) -IF(ENABLE_MMAP) - ADD_DEFINITIONS(-DLUCENE_FS_MMAP) -ENDIF(ENABLE_MMAP) - - OPTION(DISABLE_MULTITHREADING "disable multithreading - remove all locking code" OFF) -IF(ENABLE_MMAP) - ADD_DEFINITIONS(-D_CL_DISABLE_MULTITHREADING) -ENDIF(ENABLE_MMAP) - +OPTION(ENABLE_DMALLOC + "enable dmalloc memory leak checker" + OFF) OPTION(ENABLE_ASCII_MODE "enable ascii support" OFF) -IF(ENABLE_ASCII_MODE) - ADD_DEFINITIONS(-D_ASCII) -ELSEIF(ENABLE_ASCII_MODE) - ADD_DEFINITIONS(-D_UCS2) -ENDIF(ENABLE_ASCII_MODE) - + +SET(ENABLE_ANSI_MODE OFF) +IF(CMAKE_COMPILER_IS_GNUCXX) + SET(ENABLE_ANSI_MODE ON) + + #exceptions: + IF(MINGW OR CYGWIN) + SET(ENABLE_ANSI_MODE OFF) + ENDIF(MINGW OR CYGWIN) +ENDIF(CMAKE_COMPILER_IS_GNUCXX) + +OPTION(ENABLE_ANSI_MODE + "compile with -ansi flag" + ${ENABLE_ANSI_MODE}) +OPTION(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS + "use internal character functions. required to run tests correctly" + ON) +OPTION(ENABLE_PACKAGING + "create build scripts for creating clucene packages" + OFF) +OPTION(BUILD_STATIC_LIBRARIES + "create targets for building static libraries" + OFF) +OPTION(BUILD_CONTRIBS + "create targets for building the clucene-contribs" + OFF) +OPTION(BUILD_CONTRIBS_LIB + "create targets for building the clucene-contribs-lib" + OFF) +SET(LUCENE_SYS_INCLUDES "" CACHE PATH + "location for non-system independent files. defaults to CMAKE_INSTALL_PREFIX. see INSTALL documentation for further information." + ) +#install path options +SET(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" ) +SET(LIB_DESTINATION "lib${LIB_SUFFIX}") + + +SET ( ENABLE_COMPILE_TESTS_VALUE ON ) +IF ( MSVC_IDE ) + #this is annoying... + SET ( ENABLE_COMPILE_TESTS_VALUE OFF ) +ENDIF( MSVC_IDE ) + +OPTION(ENABLE_COMPILE_TESTS + "enable various projects that test alternative build switches" + ${ENABLE_COMPILE_TESTS_VALUE}) + +#check flags... +INCLUDE (TestCXXAcceptsFlag) +IF ( CMAKE_COMPILER_IS_GNUCC ) + CHECK_CXX_ACCEPTS_FLAG(-pg GccFlagPg) + IF ( GccFlagPg ) + OPTION(ENABLE_GPROF + "turn on gprof profiling support" + OFF) + + IF ( ENABLE_GPROF ) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg") + SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -pg") + ENDIF ( ENABLE_GPROF ) + ENDIF ( GccFlagPg ) + + IF("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC" ) + ENDIF("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") + + IF( ENABLE_ANSI_MODE ) + SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ansi") + ENDIF ( ENABLE_ANSI_MODE ) +ENDIF(CMAKE_COMPILER_IS_GNUCC) + + +#Single output directory for building all executables and libraries. +SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE PATH "Executable Output Directory" FORCE) +SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE PATH "Library Output Directory" FORCE) + +#add tests +ENABLE_TESTING() +ADD_TEST(SimpleTest ${EXECUTABLE_OUTPUT_PATH}/cl_test ) + +#use single output directory +INCLUDE_DIRECTORIES( ${clucene_SOURCE_DIR}/src/shared ) +INCLUDE_DIRECTORIES( ${clucene_BINARY_DIR}/src/shared ) +INCLUDE_DIRECTORIES( ${clucene_SOURCE_DIR}/src/core ) + +#set boost path. we need src/ext to be defined before this works... +Include (CLuceneBoost) +GET_BOOST_INCLUDE_PATH(_CL_BOOST_INCLUDE_PATH) +INCLUDE_DIRECTORIES( ${_CL_BOOST_INCLUDE_PATH} ) + +#include the projects +ADD_SUBDIRECTORY (src/ext) +ADD_SUBDIRECTORY (src/shared) +ADD_SUBDIRECTORY (src/core) +ADD_SUBDIRECTORY (src/test) +ADD_SUBDIRECTORY (src/demo EXCLUDE_FROM_ALL) +IF ( BUILD_CONTRIBS ) + ADD_SUBDIRECTORY (src/contribs EXCLUDE_FROM_ALL) + SET(BUILD_CONTRIBS_LIB 1) +ENDIF ( BUILD_CONTRIBS ) +IF ( BUILD_CONTRIBS_LIB ) + ADD_SUBDIRECTORY (src/contribs-lib EXCLUDE_FROM_ALL) +ENDIF ( BUILD_CONTRIBS_LIB ) + + +#add uninstall command +CONFIGURE_FILE( + "${CMAKE_MODULE_PATH}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + +ADD_CUSTOM_TARGET(uninstall + "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + +#this must go last... +IF (ENABLE_PACKAGING) + INCLUDE(CreateClucenePackages) +ENDIF ( ENABLE_PACKAGING) diff -Nru clucene-core-0.9.21b/config/config.guess clucene-core-2.3.3.4/config/config.guess --- clucene-core-0.9.21b/config/config.guess 2007-10-23 19:18:59.000000000 +0000 +++ clucene-core-2.3.3.4/config/config.guess 1970-01-01 00:00:00.000000000 +0000 @@ -1,1516 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. - -timestamp='2007-07-22' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa:Linux:*:*) - echo xtensa-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff -Nru clucene-core-0.9.21b/config/config.sub clucene-core-2.3.3.4/config/config.sub --- clucene-core-0.9.21b/config/config.sub 2007-10-23 19:18:59.000000000 +0000 +++ clucene-core-2.3.3.4/config/config.sub 1970-01-01 00:00:00.000000000 +0000 @@ -1,1626 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. - -timestamp='2007-06-28' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64vr | mips64vrel \ - | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ - | ymp-* \ - | z8k-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff -Nru clucene-core-0.9.21b/config/depcomp clucene-core-2.3.3.4/config/depcomp --- clucene-core-0.9.21b/config/depcomp 2008-10-23 18:06:20.000000000 +0000 +++ clucene-core-2.3.3.4/config/depcomp 1970-01-01 00:00:00.000000000 +0000 @@ -1,530 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2005-07-09.11 - -# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. - "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" - if test "$libtool" = yes; then - "$@" -Wc,-M - else - "$@" -M - fi - stat=$? - - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" - fi - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - - if test -f "$tmpdepfile"; then - outname="$stripped.o" - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mecanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no - for arg in "$@"; do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix="`echo $object | sed 's/^.*\././'`" - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - "$@" || exit $? - IFS=" " - for arg - do - case "$arg" in - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff -Nru clucene-core-0.9.21b/config/install-sh clucene-core-2.3.3.4/config/install-sh --- clucene-core-0.9.21b/config/install-sh 2008-10-23 18:06:20.000000000 +0000 +++ clucene-core-2.3.3.4/config/install-sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,323 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2005-05-14.22 - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -chmodcmd="$chmodprog 0755" -chowncmd= -chgrpcmd= -stripcmd= -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src= -dst= -dir_arg= -dstarg= -no_target_directory= - -usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: --c (ignored) --d create directories instead of installing files. --g GROUP $chgrpprog installed files to GROUP. --m MODE $chmodprog installed files to MODE. --o USER $chownprog installed files to USER. --s $stripprog installed files. --t DIRECTORY install into DIRECTORY. --T report an error if DSTFILE is a directory. ---help display this help and exit. ---version display version info and exit. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG -" - -while test -n "$1"; do - case $1 in - -c) shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - --help) echo "$usage"; exit $?;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -s) stripcmd=$stripprog - shift - continue;; - - -t) dstarg=$2 - shift - shift - continue;; - - -T) no_target_directory=true - shift - continue;; - - --version) echo "$0 $scriptversion"; exit $?;; - - *) # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - test -n "$dir_arg$dstarg" && break - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dstarg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dstarg" - shift # fnord - fi - shift # arg - dstarg=$arg - done - break;; - esac -done - -if test -z "$1"; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src ;; - esac - - if test -n "$dir_arg"; then - dst=$src - src= - - if test -d "$dst"; then - mkdircmd=: - chmodcmd= - else - mkdircmd=$mkdirprog - fi - else - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dstarg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dstarg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst ;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dstarg: Is a directory" >&2 - exit 1 - fi - dst=$dst/`basename "$src"` - fi - fi - - # This sed command emulates the dirname command. - dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` - - # Make sure that the destination directory exists. - - # Skip lots of stat calls in the usual case. - if test ! -d "$dstdir"; then - defaultIFS=' - ' - IFS="${IFS-$defaultIFS}" - - oIFS=$IFS - # Some sh's can't handle IFS=/ for some reason. - IFS='%' - set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` - shift - IFS=$oIFS - - pathcomp= - - while test $# -ne 0 ; do - pathcomp=$pathcomp$1 - shift - if test ! -d "$pathcomp"; then - $mkdirprog "$pathcomp" - # mkdir can fail with a `File exist' error in case several - # install-sh are creating the directory concurrently. This - # is OK. - test -d "$pathcomp" || exit - fi - pathcomp=$pathcomp/ - done - fi - - if test -n "$dir_arg"; then - $doit $mkdircmd "$dst" \ - && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } - - else - dstfile=`basename "$dst"` - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - trap '(exit $?); exit' 1 2 13 15 - - # Copy the file name to the temp name. - $doit $cpprog "$src" "$dsttmp" && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && - - # Now rename the file to the real destination. - { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ - || { - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - if test -f "$dstdir/$dstfile"; then - $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ - || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ - || { - echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 - (exit 1); exit 1 - } - else - : - fi - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" - } - } - fi || { (exit 1); exit 1; } -done - -# The final little trick to "correctly" pass the exit status to the exit trap. -{ - (exit 0); exit 0 -} - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff -Nru clucene-core-0.9.21b/config/ltmain.sh clucene-core-2.3.3.4/config/ltmain.sh --- clucene-core-0.9.21b/config/ltmain.sh 2008-02-08 00:54:46.000000000 +0000 +++ clucene-core-2.3.3.4/config/ltmain.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,6964 +0,0 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun configure. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -basename="s,^.*/,,g" - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# The name of this program: -progname=`echo "$progpath" | $SED $basename` -modename="$progname" - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION="1.5.26 Debian 1.5.26-1ubuntu1" -TIMESTAMP=" (1.1220.2.493 2008/02/01 16:58:18)" - -# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# Check that we have a working $echo. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell, and then maybe $echo will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <&2 - $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit $EXIT_FAILURE -fi - -# Global variables. -mode=$default_mode -nonopt= -prev= -prevopt= -run= -show="$echo" -show_help= -execute_dlfiles= -duplicate_deps=no -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -##################################### -# Shell function definitions: -# This seems to be the best place for them - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $mkdir "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || { - $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 - exit $EXIT_FAILURE - } - fi - - $echo "X$my_tmpdir" | $Xsed -} - - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ - $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | \ - $SED -n -e '1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $echo $win32_libid_type -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - CC_quoted="$CC_quoted $arg" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - CC_quoted="$CC_quoted $arg" - done - case "$@ " in - " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - $echo "$modename: unable to infer tagged configuration" - $echo "$modename: specify a tag with \`--tag'" 1>&2 - exit $EXIT_FAILURE -# else -# $echo "$modename: using $tagname tagged configuration" - fi - ;; - esac - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - - $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" - $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 - exit $EXIT_FAILURE - fi -} - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - my_status="" - - $show "${rm}r $my_gentop" - $run ${rm}r "$my_gentop" - $show "$mkdir $my_gentop" - $run $mkdir "$my_gentop" - my_status=$? - if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then - exit $my_status - fi - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - extracted_serial=`expr $extracted_serial + 1` - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - $show "${rm}r $my_xdir" - $run ${rm}r "$my_xdir" - $show "$mkdir $my_xdir" - $run $mkdir "$my_xdir" - exit_status=$? - if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then - exit $exit_status - fi - case $host in - *-darwin*) - $show "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - if test -z "$run"; then - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` - darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` - if test -n "$darwin_arches"; then - darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - $show "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we have a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - lipo -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - ${rm}r unfat-$$ - cd "$darwin_orig_dir" - else - cd "$darwin_orig_dir" - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - fi # $run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - func_extract_archives_result="$my_oldobjs" -} -# End of Shell function definitions -##################################### - -# Darwin sucks -eval std_shrext=\"$shrext_cmds\" - -disable_libs=no - -# Parse our command line options once, thoroughly. -while test "$#" -gt 0 -do - arg="$1" - shift - - case $arg in - -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - execute_dlfiles) - execute_dlfiles="$execute_dlfiles $arg" - ;; - tag) - tagname="$arg" - preserve_args="${preserve_args}=$arg" - - # Check whether tagname contains only valid characters - case $tagname in - *[!-_A-Za-z0-9,/]*) - $echo "$progname: invalid tag name: $tagname" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - case $tagname in - CC) - # Don't test for the "default" C tag, as we know, it's there, but - # not specially marked. - ;; - *) - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then - taglist="$taglist $tagname" - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" - else - $echo "$progname: ignoring unknown tag $tagname" 1>&2 - fi - ;; - esac - ;; - *) - eval "$prev=\$arg" - ;; - esac - - prev= - prevopt= - continue - fi - - # Have we seen a non-optional argument yet? - case $arg in - --help) - show_help=yes - ;; - - --version) - echo "\ -$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP - -Copyright (C) 2008 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - exit $? - ;; - - --config) - ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath - # Now print the configurations for the tags. - for tagname in $taglist; do - ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" - done - exit $? - ;; - - --debug) - $echo "$progname: enabling shell trace mode" - set -x - preserve_args="$preserve_args $arg" - ;; - - --dry-run | -n) - run=: - ;; - - --features) - $echo "host: $host" - if test "$build_libtool_libs" = yes; then - $echo "enable shared libraries" - else - $echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - $echo "enable static libraries" - else - $echo "disable static libraries" - fi - exit $? - ;; - - --finish) mode="finish" ;; - - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; - - --preserve-dup-deps) duplicate_deps="yes" ;; - - --quiet | --silent) - show=: - preserve_args="$preserve_args $arg" - ;; - - --tag) - prevopt="--tag" - prev=tag - preserve_args="$preserve_args --tag" - ;; - --tag=*) - set tag "$optarg" ${1+"$@"} - shift - prev=tag - preserve_args="$preserve_args --tag" - ;; - - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles - ;; - - -*) - $echo "$modename: unrecognized option \`$arg'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; - - *) - nonopt="$arg" - break - ;; - esac -done - -if test -n "$prevopt"; then - $echo "$modename: option \`$prevopt' requires an argument" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE -fi - -case $disable_libs in -no) - ;; -shared) - build_libtool_libs=no - build_old_libs=yes - ;; -static) - build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` - ;; -esac - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -if test -z "$show_help"; then - - # Infer the operation mode. - if test -z "$mode"; then - $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 - $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 - case $nonopt in - *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) - mode=link - for arg - do - case $arg in - -c) - mode=compile - break - ;; - esac - done - ;; - *db | *dbx | *strace | *truss) - mode=execute - ;; - *install*|cp|mv) - mode=install - ;; - *rm) - mode=uninstall - ;; - *) - # If we have no mode, but dlfiles were specified, then do execute mode. - test -n "$execute_dlfiles" && mode=execute - - # Just use the default operation mode. - if test -z "$mode"; then - if test -n "$nonopt"; then - $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 - else - $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 - fi - fi - ;; - esac - fi - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - $echo "$modename: unrecognized option \`-dlopen'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$modename --help --mode=$mode' for more information." - - # These modes are in order of execution frequency so that they run quickly. - case $mode in - # libtool compile mode - compile) - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; - - target ) - libobj="$arg" - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - if test -n "$libobj" ; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit $EXIT_FAILURE - fi - arg_mode=target - continue - ;; - - -static | -prefer-pic | -prefer-non-pic) - later="$later $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - lastarg="$lastarg $arg" - done - IFS="$save_ifs" - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. - base_compile="$base_compile $lastarg" - continue - ;; - - * ) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg="$srcfile" - srcfile="$arg" - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - - case $lastarg in - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, and some SunOS ksh mistreat backslash-escaping - # in scan sets (worked around with variable expansion), - # and furthermore cannot handle '|' '&' '(' ')' in scan sets - # at all, so we specify them separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - - base_compile="$base_compile $lastarg" - done # for arg - - case $arg_mode in - arg) - $echo "$modename: you must specify an argument for -Xcompile" - exit $EXIT_FAILURE - ;; - target) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit $EXIT_FAILURE - ;; - *) - # Get the name of the library object. - [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - xform='[cCFSifmso]' - case $libobj in - *.ada) xform=ada ;; - *.adb) xform=adb ;; - *.ads) xform=ads ;; - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; - *.ii) xform=ii ;; - *.class) xform=class ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.[fF][09]?) xform=[fF][09]. ;; - *.for) xform=for ;; - *.java) xform=java ;; - *.obj) xform=obj ;; - *.sx) xform=sx ;; - esac - - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` - - case $libobj in - *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; - *) - $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -static) - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` - case $qlibobj in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qlibobj="\"$qlibobj\"" ;; - esac - test "X$libobj" != "X$qlibobj" \ - && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." - objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir= - else - xdir=$xdir/ - fi - lobj=${xdir}$objdir/$objname - - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - $run $rm $removelist - trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - removelist="$removelist $output_obj $lockfile" - trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $run ln "$progpath" "$lockfile" 2>/dev/null; do - $show "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $echo "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit $EXIT_FAILURE - fi - $echo "$srcfile" > "$lockfile" - fi - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` - case $qsrcfile in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qsrcfile="\"$qsrcfile\"" ;; - esac - - $run $rm "$libobj" "${libobj}T" - - # Create a libtool object file (analogous to a ".la" file), - # but don't create it if we're doing a dry run. - test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then - $echo "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - $show "$mv $output_obj $lobj" - if $run $mv $output_obj $lobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Append the name of the PIC object to the libtool object file. - test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then - $echo "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Append the name of the non-PIC object the libtool object file. - # Only append if the libtool object file exists. - test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test - ;; - *) qarg=$arg ;; - esac - libtool_args="$libtool_args $qarg" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - compile_command="$compile_command @OUTPUT@" - finalize_command="$finalize_command @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - compile_command="$compile_command @SYMFILE@" - finalize_command="$finalize_command @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - if test ! -f "$arg"; then - $echo "$modename: symbol file \`$arg' does not exist" - exit $EXIT_FAILURE - fi - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat $save_arg` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - pic_object= - non_pic_object= - - # Read the .lo file - # If there is no directory component, then add one. - case $arg in - */* | *\\*) . $arg ;; - *) . ./$arg ;; - esac - - if test -z "$pic_object" || \ - test -z "$non_pic_object" || - test "$pic_object" = none && \ - test "$non_pic_object" = none; then - $echo "$modename: cannot find name of object for \`$arg'" 1>&2 - exit $EXIT_FAILURE - fi - - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - libobjs="$libobjs $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - non_pic_objects="$non_pic_objects $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if test -z "$run"; then - $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 - exit $EXIT_FAILURE - else - # Dry-run case. - - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi - - pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` - non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` - libobjs="$libobjs $pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - fi - done - else - $echo "$modename: link input file \`$save_arg' does not exist" - exit $EXIT_FAILURE - fi - arg=$save_arg - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit $EXIT_FAILURE - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - compile_command="$compile_command $wl$qarg" - finalize_command="$finalize_command $wl$qarg" - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - darwin_framework|darwin_framework_skip) - test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - prev= - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 - continue - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: more than one -exported-symbols argument is not allowed" - exit $EXIT_FAILURE - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework|-arch|-isysroot) - case " $CC " in - *" ${arg} ${1} "* | *" ${arg} ${1} "*) - prev=darwin_framework_skip ;; - *) compiler_flags="$compiler_flags $arg" - prev=darwin_framework ;; - esac - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; - esac - continue - ;; - - -L*) - dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 - absdir="$dir" - notinst_path="$notinst_path $dir" - fi - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs -framework System" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - -model) - compile_command="$compile_command $arg" - compiler_flags="$compiler_flags $arg" - finalize_command="$finalize_command $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -module) - module=yes - continue - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m* pass through architecture-specific compiler args for GCC - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC - # -F/path gives path to uninstalled frameworks, gcc on darwin - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 - $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit $EXIT_FAILURE - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Wl,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $wl$flag" - linker_flags="$linker_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # Some other compiler flag. - -* | +*) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - pic_object= - non_pic_object= - - # Read the .lo file - # If there is no directory component, then add one. - case $arg in - */* | *\\*) . $arg ;; - *) . ./$arg ;; - esac - - if test -z "$pic_object" || \ - test -z "$non_pic_object" || - test "$pic_object" = none && \ - test "$non_pic_object" = none; then - $echo "$modename: cannot find name of object for \`$arg'" 1>&2 - exit $EXIT_FAILURE - fi - - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - libobjs="$libobjs $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - non_pic_objects="$non_pic_objects $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if test -z "$run"; then - $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 - exit $EXIT_FAILURE - else - # Dry-run case. - - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi - - pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` - non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` - libobjs="$libobjs $pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - done # argument parsing loop - - if test -n "$prev"; then - $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` - if test "X$output_objdir" = "X$output"; then - output_objdir="$objdir" - else - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. - if test ! -d "$output_objdir"; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - exit_status=$? - if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then - exit $exit_status - fi - fi - - # Determine the type of output - case $output in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - case $host in - *cygwin* | *mingw* | *pw32*) - # don't eliminate duplications in $postdeps and $predeps - duplicate_compiler_generated_deps=yes - ;; - *) - duplicate_compiler_generated_deps=$duplicate_deps - ;; - esac - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if test "X$duplicate_deps" = "Xyes" ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - case $linkmode in - lib) - passes="conv link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 - exit $EXIT_FAILURE - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - for pass in $passes; do - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 - continue - fi - name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if (${SED} -e '2q' $lib | - grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - library_names= - old_library= - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - *) - $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method - match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` - if eval $echo \"$deplib\" 2>/dev/null \ - | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $echo - $echo "*** Warning: Trying to link with static lib archive $deplib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have" - $echo "*** because the file extensions .$libext of this argument makes me believe" - $echo "*** that it is just a static archive that I should not used here." - else - $echo - $echo "*** Warning: Linking the shared library $output against the" - $echo "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - if test "$found" = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 - exit $EXIT_FAILURE - fi - - # Check to see that this really is a libtool archive. - if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit $EXIT_FAILURE - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - abs_ladir="$ladir" - fi - ;; - esac - laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - $echo "$modename: warning: library \`$lib' was moved." 1>&2 - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *" $absdir "*) ;; - *) temp_rpath="$temp_rpath $absdir" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes ; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - # This is a shared library - - # Warn about portability, can't link against -module's on - # some systems (darwin) - if test "$shouldnotlink" = yes && test "$pass" = link ; then - $echo - if test "$linkmode" = prog; then - $echo "*** Warning: Linking the executable $output against the loadable module" - else - $echo "*** Warning: Linking the shared library $output against the loadable module" - fi - $echo "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - realname="$2" - shift; shift - libname=`eval \\$echo \"$libname_spec\"` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw*) - major=`expr $current - $age` - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - soname=`$echo $soroot | ${SED} -e 's/^.*\///'` - newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - $show "extracting exported symbol list from \`$soname'" - save_ifs="$IFS"; IFS='~' - cmds=$extract_expsyms_cmds - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - $show "generating import library for \`$soname'" - save_ifs="$IFS"; IFS='~' - cmds=$old_archive_from_expsyms_cmds - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a module then we can not link against - # it, someone is ignoring the new warnings I added - if /usr/bin/file -L $add 2> /dev/null | - $EGREP ": [^:]* bundle" >/dev/null ; then - $echo "** Warning, lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $echo - $echo "** And there doesn't seem to be a static archive available" - $echo "** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - $echo "$modename: configuration error: unsupported hardcode properties" - exit $EXIT_FAILURE - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && \ - test "$hardcode_minus_L" != yes && \ - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $echo - $echo "*** Warning: This system can not link to static lib archive $lib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $echo "*** But as you try to build a module library, libtool will still create " - $echo "*** a static module, that should work as long as the dlopening application" - $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $echo - $echo "*** However, this would only work if libtool was able to extract symbol" - $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - $echo "*** not find such a program. So, this module is probably useless." - $echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in - -L*) path="$deplib" ;; - *.la) - dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$deplib" && dir="." - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 - absdir="$dir" - fi - ;; - esac - if grep "^installed=no" $deplib > /dev/null; then - path="$absdir/$objdir" - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - if test "$absdir" != "$libdir"; then - $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 - fi - path="$absdir" - fi - depdepl= - case $host in - *-*-darwin*) - # we do not want to link against static libs, - # but need to link against shared - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$deplibdir/$depdepl" ; then - depdepl="$deplibdir/$depdepl" - elif test -f "$path/$depdepl" ; then - depdepl="$path/$depdepl" - else - # Can't find it, oh well... - depdepl= - fi - # do not add paths which are already there - case " $newlib_search_path " in - *" $path "*) ;; - *) newlib_search_path="$newlib_search_path $path";; - esac - fi - path="" - ;; - *) - path="-L$path" - ;; - esac - ;; - -l*) - case $host in - *-*-darwin*) - # Again, we only want to link against shared libraries - eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` - for tmp in $newlib_search_path ; do - if test -f "$tmp/lib$tmp_libs.dylib" ; then - eval depdepl="$tmp/lib$tmp_libs.dylib" - break - fi - done - path="" - ;; - *) continue ;; - esac - ;; - *) continue ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - case " $deplibs " in - *" $depdepl "*) ;; - *) deplibs="$depdepl $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - case " $deplibs" in - *\ -l* | *\ -L*) - $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;; - esac - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 - fi - - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 - fi - - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 - fi - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - if test "$module" = no; then - $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 - exit $EXIT_FAILURE - else - $echo - $echo "*** Warning: Linking the shared library $output against the non-libtool" - $echo "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - if test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 - fi - - set dummy $rpath - if test "$#" -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 - fi - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - IFS="$save_ifs" - - if test -n "$8"; then - $echo "$modename: too many parameters to \`-version-info'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$2" - number_minor="$3" - number_revision="$4" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - current=`expr $number_major + $number_minor` - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - current=`expr $number_major + $number_minor` - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - $echo "$modename: unknown library version type \`$version_type'" 1>&2 - $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit $EXIT_FAILURE - ;; - esac - ;; - no) - current="$2" - revision="$3" - age="$4" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - if test "$age" -gt "$current"; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit $EXIT_FAILURE - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - major=.`expr $current - $age` - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - minor_current=`expr $current + 1` - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current"; - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - major=`expr $current - $age` - else - major=`expr $current - $age + 1` - fi - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - iface=`expr $revision - $loop` - loop=`expr $loop - 1` - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - major=.`expr $current - $age` - versuffix="$major.$age.$revision" - ;; - - osf) - major=.`expr $current - $age` - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - major=`expr $current - $age` - versuffix="-$major" - ;; - - *) - $echo "$modename: unknown library version type \`$version_type'" 1>&2 - $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit $EXIT_FAILURE - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - fi - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$echo "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - if test -n "$removelist"; then - $show "${rm}r $removelist" - $run ${rm}r $removelist - fi - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` - # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` - # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs -framework System" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $rm conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null \ - | grep " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ - | ${SED} 10q \ - | $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $echo - $echo "*** Warning: linker path does not have real file for library $a_deplib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have" - $echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $echo "*** with $libname but no candidates were found. (...for file magic test)" - else - $echo "*** with $libname and none of the candidates passed a file format test" - $echo "*** using a file magic. Last file checked: $potlib" - fi - fi - else - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - fi - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method - match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` - for a_deplib in $deplibs; do - name=`expr $a_deplib : '-l\(.*\)'` - # If $name is empty we are operating on a -L argument. - if test -n "$name" && test "$name" != "0"; then - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval $echo \"$potent_lib\" 2>/dev/null \ - | ${SED} 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $echo - $echo "*** Warning: linker path does not have real file for library $a_deplib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have" - $echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $echo "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $echo "*** with $libname and none of the candidates passed a file format test" - $echo "*** using a regex pattern. Last file checked: $potlib" - fi - fi - else - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - fi - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ - -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` - done - fi - if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ - | grep . >/dev/null; then - $echo - if test "X$deplibs_check_method" = "Xnone"; then - $echo "*** Warning: inter-library dependencies are not supported in this platform." - else - $echo "*** Warning: inter-library dependencies are not known to be supported." - fi - $echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - $echo - $echo "*** Warning: libtool could not satisfy all declared inter-library" - $echo "*** dependencies of module $libname. Therefore, libtool will create" - $echo "*** a static module, that should work as long as the dlopening" - $echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - $echo - $echo "*** However, this would only work if libtool was able to extract symbol" - $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - $echo "*** not find such a program. So, this module is probably useless." - $echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - $echo "*** The inter-library dependencies that have been dropped here will be" - $echo "*** automatically added whenever a program is linked with this library" - $echo "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - $echo - $echo "*** Since this library must not contain undefined symbols," - $echo "*** because either the platform does not support them or" - $echo "*** it was explicitly requested with -no-undefined," - $echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - case $archive_cmds in - *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; - *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; - esac - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - realname="$2" - shift; shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - $show "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $run $rm $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - if len=`expr "X$cmd" : ".*"` && - test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then - $show "$cmd" - $run eval "$cmd" || exit $? - skipped_export=false - else - # The command line is too long to execute in one step. - $show "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex"; then - $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" - $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - $show "$mv \"${export_symbols}T\" \"$export_symbols\"" - $run eval '$mv "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - len=`expr "X$test_cmds" : ".*" 2>/dev/null` && - test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise. - $echo "creating reloadable object files..." - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$echo "X$output" | $Xsed -e "$basename"` - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - delfiles= - last_robj= - k=1 - output=$output_objdir/$output_la-${k}.$objext - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - eval test_cmds=\"$reload_cmds $objlist $last_robj\" - if test "X$objlist" = X || - { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && - test "$len" -le "$max_cmd_len"; }; then - objlist="$objlist $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - k=`expr $k + 1` - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - len=1 - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - - if ${skipped_export-false}; then - $show "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $run $rm $export_symbols - libobjs=$output - # Append the command to create the export file. - eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" - fi - - # Set up a command to remove the reloadable object files - # after they are used. - i=0 - while test "$i" -lt "$k" - do - i=`expr $i + 1` - delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" - done - - $echo "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - - # Append the command to remove the reloadable object files - # to the just-reset $cmds. - eval cmds=\"\$cmds~\$rm $delfiles\" - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" - $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - case " $deplibs" in - *\ -l* | *\ -L*) - $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;; - esac - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 - fi - - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 - fi - - case $output in - *.lo) - if test -n "$objs$old_deplibs"; then - $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 - exit $EXIT_FAILURE - fi - libobj="$output" - obj=`$echo "X$output" | $Xsed -e "$lo2o"` - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $run $rm $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - cmds=$reload_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $run eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - cmds=$reload_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; - esac - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 - fi - - if test "$preload" = yes; then - if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && - test "$dlopen_self_static" = unknown; then - $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." - fi - fi - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` - finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` - ;; - esac - - case $host in - *darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - if test "$tagname" = CXX ; then - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - fi - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - dlsyms= - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - dlsyms="${outputname}S.c" - else - $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 - fi - fi - - if test -n "$dlsyms"; then - case $dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${outputname}.nm" - - $show "$rm $nlist ${nlist}S ${nlist}T" - $run $rm "$nlist" "${nlist}S" "${nlist}T" - - # Parse the name list into a source file. - $show "creating $output_objdir/$dlsyms" - - test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ -/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ -/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* Prevent the only kind of declaration conflicts we can make. */ -#define lt_preloaded_symbols some_other_symbol - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - $show "generating symbol list for \`$output'" - - test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for arg in $progfiles; do - $show "extracting global C symbols from \`$arg'" - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi - - if test -n "$export_symbols_regex"; then - $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $run $rm $export_symbols - $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* ) - $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - else - $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* ) - $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - fi - fi - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" - name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` - $run eval '$echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -z "$run"; then - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $mv "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if grep -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - grep -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' - else - $echo '/* NONE */' >> "$output_objdir/$dlsyms" - fi - - $echo >> "$output_objdir/$dlsyms" "\ - -#undef lt_preloaded_symbols - -#if defined (__STDC__) && __STDC__ -# define lt_ptr void * -#else -# define lt_ptr char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -" - - case $host in - *cygwin* | *mingw* ) - $echo >> "$output_objdir/$dlsyms" "\ -/* DATA imports from DLLs on WIN32 can't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs */ -struct { -" - ;; - * ) - $echo >> "$output_objdir/$dlsyms" "\ -const struct { -" - ;; - esac - - - $echo >> "$output_objdir/$dlsyms" "\ - const char *name; - lt_ptr address; -} -lt_preloaded_symbols[] = -{\ -" - - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" - - $echo >> "$output_objdir/$dlsyms" "\ - {0, (lt_ptr) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - fi - - pic_flag_for_symtable= - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag";; - esac - esac - - # Now compile the dynamic symbol file. - $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" - $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" - $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" - - # Transform the symbol file into the correct name. - case $host in - *cygwin* | *mingw* ) - if test -f "$output_objdir/${outputname}.def" ; then - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` - else - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` - fi - ;; - * ) - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` - ;; - esac - ;; - *) - $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 - exit $EXIT_FAILURE - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` - fi - - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - $show "$link_command" - $run eval "$link_command" - exit_status=$? - - # Delete the generated files. - if test -n "$dlsyms"; then - $show "$rm $output_objdir/${outputname}S.${objext}" - $run $rm "$output_objdir/${outputname}S.${objext}" - fi - - exit $exit_status - fi - - if test -n "$shlibpath_var"; then - # We should set the shlibpath_var - rpath= - for dir in $temp_rpath; do - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) - # Absolute path. - rpath="$rpath$dir:" - ;; - *) - # Relative path: add a thisdir entry. - rpath="$rpath\$thisdir/$dir:" - ;; - esac - done - temp_rpath="$rpath" - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $run $rm $output - # Link the executable and exit - $show "$link_command" - $run eval "$link_command" || exit $? - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 - $echo "$modename: \`$output' will be relinked during installation" 1>&2 - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname - - $show "$link_command" - $run eval "$link_command" || exit $? - - # Now create the wrapper script. - $show "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` - fi - - # Quote $echo for shipping. - if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if our run command is non-null. - if test -z "$run"; then - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - output_name=`basename $output` - output_path=`dirname $output` - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $rm $cwrappersource $cwrapper - trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - cat > $cwrappersource <> $cwrappersource<<"EOF" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -/* -DDEBUG is fairly common in CFLAGS. */ -#undef DEBUG -#if defined DEBUGWRAPPER -# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) -#else -# define DEBUG(format, ...) -#endif - -const char *program_name = NULL; - -void * xmalloc (size_t num); -char * xstrdup (const char *string); -const char * base_name (const char *name); -char * find_executable(const char *wrapper); -int check_executable(const char *path); -char * strendzap(char *str, const char *pat); -void lt_fatal (const char *message, ...); - -int -main (int argc, char *argv[]) -{ - char **newargz; - int i; - - program_name = (char *) xstrdup (base_name (argv[0])); - DEBUG("(main) argv[0] : %s\n",argv[0]); - DEBUG("(main) program_name : %s\n",program_name); - newargz = XMALLOC(char *, argc+2); -EOF - - cat >> $cwrappersource <> $cwrappersource <<"EOF" - newargz[1] = find_executable(argv[0]); - if (newargz[1] == NULL) - lt_fatal("Couldn't find %s", argv[0]); - DEBUG("(main) found exe at : %s\n",newargz[1]); - /* we know the script has the same name, without the .exe */ - /* so make sure newargz[1] doesn't end in .exe */ - strendzap(newargz[1],".exe"); - for (i = 1; i < argc; i++) - newargz[i+1] = xstrdup(argv[i]); - newargz[argc+1] = NULL; - - for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" - return 127; -} - -void * -xmalloc (size_t num) -{ - void * p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL -; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char)name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable(const char * path) -{ - struct stat st; - - DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) && - ( - /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ -#if defined (S_IXOTH) - ((st.st_mode & S_IXOTH) == S_IXOTH) || -#endif -#if defined (S_IXGRP) - ((st.st_mode & S_IXGRP) == S_IXGRP) || -#endif - ((st.st_mode & S_IXUSR) == S_IXUSR)) - ) - return 1; - else - return 0; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise */ -char * -find_executable (const char* wrapper) -{ - int has_slash = 0; - const char* p; - const char* p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char* concat_name; - - DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable(concat_name)) - return concat_name; - XFREE(concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable(concat_name)) - return concat_name; - XFREE(concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char* path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char* q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR(*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen(tmp); - concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable(concat_name)) - return concat_name; - XFREE(concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen(tmp); - concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable(concat_name)) - return concat_name; - XFREE(concat_name); - return NULL; -} - -char * -strendzap(char *str, const char *pat) -{ - size_t len, patlen; - - assert(str != NULL); - assert(pat != NULL); - - len = strlen(str); - patlen = strlen(pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp(str, pat) == 0) - *str = '\0'; - } - return str; -} - -static void -lt_error_core (int exit_status, const char * mode, - const char * message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} -EOF - # we should really use a build-platform specific compiler - # here, but OTOH, the wrappers (shell script and this C one) - # are only useful if you want to execute the "real" binary. - # Since the "real" binary is built for $host, then this - # wrapper might as well be built for $host, too. - $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource - ;; - esac - $rm $output - trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 - - $echo > $output "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variable: - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$echo are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - echo=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$echo works! - : - else - # Restart under the correct shell, and then maybe \$echo will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $echo >> $output "\ - - # Find the directory that this script lives in. - thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $echo >> $output "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || \\ - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $mkdir \"\$progdir\" - else - $rm \"\$progdir/\$file\" - fi" - - $echo >> $output "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $echo \"\$relink_command_output\" >&2 - $rm \"\$progdir/\$file\" - exit $EXIT_FAILURE - fi - fi - - $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $rm \"\$progdir/\$program\"; - $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $rm \"\$progdir/\$file\" - fi" - else - $echo >> $output "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $echo >> $output "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $echo >> $output "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $echo >> $output "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $echo >> $output "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2*) - $echo >> $output "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $echo >> $output "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $echo >> $output "\ - \$echo \"\$0: cannot exec \$program \$*\" - exit $EXIT_FAILURE - fi - else - # The program doesn't exist. - \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$echo \"This script is just a wrapper for \$program.\" 1>&2 - $echo \"See the $PACKAGE documentation for more information.\" 1>&2 - exit $EXIT_FAILURE - fi -fi\ -" - chmod +x $output - fi - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - $echo "X$obj" | $Xsed -e 's%^.*/%%' - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $echo "copying selected object files to avoid basename conflicts..." - - if test -z "$gentop"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "$mkdir $gentop" - $run $mkdir "$gentop" - exit_status=$? - if test "$exit_status" -ne 0 && test ! -d "$gentop"; then - exit $exit_status - fi - fi - - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - counter=`expr $counter + 1` - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - $run ln "$obj" "$gentop/$newobj" || - $run cp "$obj" "$gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - - eval cmds=\"$old_archive_cmds\" - - if len=`expr "X$cmds" : ".*"` && - test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - $echo "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - for obj in $save_oldobjs - do - oldobjs="$objlist $obj" - objlist="$objlist $obj" - eval test_cmds=\"$old_archive_cmds\" - if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && - test "$len" -le "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - eval cmd=\"$cmd\" - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$generated"; then - $show "${rm}r$generated" - $run ${rm}r$generated - fi - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - $show "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - - # Only create the output if not a dry run. - if test -z "$run"; then - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - newdlfiles="$newdlfiles $libdir/$name" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - newdlprefiles="$newdlprefiles $libdir/$name" - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $rm $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $echo > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $echo >> $output "\ -relink_command=\"$relink_command\"" - fi - done - fi - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" - $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? - ;; - esac - exit $EXIT_SUCCESS - ;; - - # libtool install mode - install) - modename="$modename: install" - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $echo "X$nonopt" | grep shtool > /dev/null; then - # Aesthetically quote it. - arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - install_prog="$arg " - arg="$1" - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog$arg" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) prev=$arg ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog $arg" - done - - if test -z "$install_prog"; then - $echo "$modename: you must specify an install program" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - if test -n "$prev"; then - $echo "$modename: the \`$prev' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - if test -z "$files"; then - if test -z "$dest"; then - $echo "$modename: no file or destination specified" 1>&2 - else - $echo "$modename: you must specify a destination" 1>&2 - fi - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Strip any trailing slash from the destination. - dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` - test "X$destdir" = "X$dest" && destdir=. - destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` - - # Not a directory, so check to see that there is only one file specified. - set dummy $files - if test "$#" -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - library_names= - old_library= - relink_command= - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ - test "X$dir" = "X$file/" && dir= - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - if test "$inst_prefix_dir" = "$destdir"; then - $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 - exit $EXIT_FAILURE - fi - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` - else - relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` - fi - - $echo "$modename: warning: relinking \`$file'" 1>&2 - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - exit $EXIT_FAILURE - fi - fi - - # See the names of the shared library. - set dummy $library_names - if test -n "$2"; then - realname="$2" - shift - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - $show "$install_prog $dir/$srcname $destdir/$realname" - $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? - if test -n "$stripme" && test -n "$striplib"; then - $show "$striplib $destdir/$realname" - $run eval "$striplib $destdir/$realname" || exit $? - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - if test "$linkname" != "$realname"; then - $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" - $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" - fi - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - cmds=$postinstall_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - fi - - # Install the pseudo-library for information purposes. - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - instname="$dir/$name"i - $show "$install_prog $instname $destdir/$name" - $run eval "$install_prog $instname $destdir/$name" || exit $? - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - # Install the libtool object if requested. - if test -n "$destfile"; then - $show "$install_prog $file $destfile" - $run eval "$install_prog $file $destfile" || exit $? - fi - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` - - $show "$install_prog $staticobj $staticdest" - $run eval "$install_prog \$staticobj \$staticdest" || exit $? - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - file=`$echo $file|${SED} 's,.exe$,,'` - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin*|*mingw*) - wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` - ;; - *) - wrapper=$file - ;; - esac - if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then - notinst_deplibs= - relink_command= - - # Note that it is not necessary on cygwin/mingw to append a dot to - # foo even if both foo and FILE.exe exist: automatic-append-.exe - # behavior happens only for exec(3), not for open(2)! Also, sourcing - # `FILE.' does not work on cygwin managed mounts. - # - # If there is no directory component, then add one. - case $wrapper in - */* | *\\*) . ${wrapper} ;; - *) . ./${wrapper} ;; - esac - - # Check the variables that should have been set. - if test -z "$notinst_deplibs"; then - $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 - exit $EXIT_FAILURE - fi - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - # If there is no directory component, then add one. - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - fi - libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 - finalize=no - fi - done - - relink_command= - # Note that it is not necessary on cygwin/mingw to append a dot to - # foo even if both foo and FILE.exe exist: automatic-append-.exe - # behavior happens only for exec(3), not for open(2)! Also, sourcing - # `FILE.' does not work on cygwin managed mounts. - # - # If there is no directory component, then add one. - case $wrapper in - */* | *\\*) . ${wrapper} ;; - *) . ./${wrapper} ;; - esac - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - if test "$finalize" = yes && test -z "$run"; then - tmpdir=`func_mktempdir` - file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` - - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - ${rm}r "$tmpdir" - continue - fi - file="$outputname" - else - $echo "$modename: warning: cannot relink \`$file'" 1>&2 - fi - else - # Install the binary that we compiled earlier. - file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` - ;; - esac - ;; - esac - $show "$install_prog$stripme $file $destfile" - $run eval "$install_prog\$stripme \$file \$destfile" || exit $? - test -n "$outputname" && ${rm}r "$tmpdir" - ;; - esac - done - - for file in $staticlibs; do - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - $show "$install_prog $file $oldlib" - $run eval "$install_prog \$file \$oldlib" || exit $? - - if test -n "$stripme" && test -n "$old_striplib"; then - $show "$old_striplib $oldlib" - $run eval "$old_striplib $oldlib" || exit $? - fi - - # Do each command in the postinstall commands. - cmds=$old_postinstall_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$future_libdirs"; then - $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 - fi - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - test -n "$run" && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi - ;; - - # libtool finish mode - finish) - modename="$modename: finish" - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - cmds=$finish_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || admincmds="$admincmds - $cmd" - done - IFS="$save_ifs" - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $run eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - test "$show" = : && exit $EXIT_SUCCESS - - $echo "X----------------------------------------------------------------------" | $Xsed - $echo "Libraries have been installed in:" - for libdir in $libdirs; do - $echo " $libdir" - done - $echo - $echo "If you ever happen to want to link against installed libraries" - $echo "in a given directory, LIBDIR, you must either use libtool, and" - $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - $echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - $echo " during execution" - fi - if test -n "$runpath_var"; then - $echo " - add LIBDIR to the \`$runpath_var' environment variable" - $echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $echo " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $echo " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $echo - $echo "See any operating system documentation about shared libraries for" - $echo "more information, such as the ld(1) and ld.so(8) manual pages." - $echo "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS - ;; - - # libtool execute mode - execute) - modename="$modename: execute" - - # The first argument is the command name. - cmd="$nonopt" - if test -z "$cmd"; then - $echo "$modename: you must specify a COMMAND" 1>&2 - $echo "$help" - exit $EXIT_FAILURE - fi - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - if test ! -f "$file"; then - $echo "$modename: \`$file' is not a file" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Read the libtool library. - dlname= - library_names= - - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" - continue - fi - - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 - exit $EXIT_FAILURE - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - ;; - - *) - $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` - args="$args \"$file\"" - done - - if test -z "$run"; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" - $echo "export $shlibpath_var" - fi - $echo "$cmd$args" - exit $EXIT_SUCCESS - fi - ;; - - # libtool clean and uninstall mode - clean | uninstall) - modename="$modename: $mode" - rm="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) rm="$rm $arg"; rmforce=yes ;; - -*) rm="$rm $arg" ;; - *) files="$files $arg" ;; - esac - done - - if test -z "$rm"; then - $echo "$modename: you must specify an RM program" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$file"; then - dir=. - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if (test -L "$file") >/dev/null 2>&1 \ - || (test -h "$file") >/dev/null 2>&1 \ - || test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - cmds=$postuninstall_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" - if test "$?" -ne 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done - IFS="$save_ifs" - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - cmds=$old_postuninstall_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" - if test "$?" -ne 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done - IFS="$save_ifs" - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - - # Read the .lo file - . $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" \ - && test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" \ - && test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - file=`$echo $file|${SED} 's,.exe$,,'` - noexename=`$echo $name|${SED} 's,.exe$,,'` - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$noexename - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - $show "$rm $rmfiles" - $run $rm $rmfiles || exit_status=1 - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - $show "rmdir $dir" - $run rmdir $dir >/dev/null 2>&1 - fi - done - - exit $exit_status - ;; - - "") - $echo "$modename: you must specify a MODE" 1>&2 - $echo "$generic_help" 1>&2 - exit $EXIT_FAILURE - ;; - esac - - if test -z "$exec_cmd"; then - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$generic_help" 1>&2 - exit $EXIT_FAILURE - fi -fi # test -z "$show_help" - -if test -n "$exec_cmd"; then - eval exec $exec_cmd - exit $EXIT_FAILURE -fi - -# We need to display help for each of the modes. -case $mode in -"") $echo \ -"Usage: $modename [OPTION]... [MODE-ARG]... - -Provide generalized library-building support services. - - --config show all configuration variables - --debug enable verbose shell tracing --n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --finish same as \`--mode=finish' - --help display this help message and exit - --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] - --quiet same as \`--silent' - --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - --version print version information - -MODE must be one of the following: - - clean remove files from the build directory - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for -a more detailed description of MODE. - -Report bugs to ." - exit $EXIT_SUCCESS - ;; - -clean) - $echo \ -"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - -compile) - $echo \ -"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -static always build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - -execute) - $echo \ -"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - -finish) - $echo \ -"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - -install) - $echo \ -"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - -link) - $echo \ -"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - -uninstall) - $echo \ -"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - -*) - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; -esac - -$echo -$echo "Try \`$modename --help' for more information about other modes." - -exit $? - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -disable_libs=shared -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -disable_libs=static -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff -Nru clucene-core-0.9.21b/config/missing clucene-core-2.3.3.4/config/missing --- clucene-core-0.9.21b/config/missing 2008-10-23 18:06:20.000000000 +0000 +++ clucene-core-2.3.3.4/config/missing 1970-01-01 00:00:00.000000000 +0000 @@ -1,360 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2005-06-08.21 - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case "$1" in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). -case "$1" in - lex|yacc) - # Not GNU programs, they don't have --version. - ;; - - tar) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case "$1" in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case "$f" in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` - test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if [ ! -f y.tab.h ]; then - echo >y.tab.h - fi - if [ ! -f y.tab.c ]; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if [ ! -f lex.yy.c ]; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` - fi - if [ -f "$file" ]; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case "$firstarg" in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case "$firstarg" in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff -Nru clucene-core-0.9.21b/config.h.tmp.in clucene-core-2.3.3.4/config.h.tmp.in --- clucene-core-0.9.21b/config.h.tmp.in 2008-10-23 18:18:47.000000000 +0000 +++ clucene-core-2.3.3.4/config.h.tmp.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,308 +0,0 @@ -/* config.h.tmp.in. Generated from configure.ac by autoheader. */ - -/* Disable multithreading */ -#undef DISABLE_MULTITHREADING - -/* Define to 1 if you have the header file. */ -#undef HAVE_ALGORITHM - -/* Define to 1 if you have the header file. */ -#undef HAVE_CTYPE_H - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_DIRENT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_ERRNO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_EXT_HASH_MAP - -/* Define to 1 if you have the header file. */ -#undef HAVE_EXT_HASH_SET - -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if the system has the type `float_t'. */ -#undef HAVE_FLOAT_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_FUNCTIONAL - -/* Define to 1 if you have the `getpagesize' function. */ -#undef HAVE_GETPAGESIZE - -/* Define to 1 if you have the header file. */ -#undef HAVE_HASH_MAP - -/* Define to 1 if you have the header file. */ -#undef HAVE_HASH_SET - -/* Define to 1 if the system has the type `intptr_t'. */ -#undef HAVE_INTPTR_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIST - -/* Define to 1 if you have the `lltoa' function. */ -#undef HAVE_LLTOA - -/* Define to 1 if you have the `lltow' function. */ -#undef HAVE_LLTOW - -/* Define to 1 if you have the header file. */ -#undef HAVE_MAP - -/* Define to 1 if you have the header file. */ -#undef HAVE_MATH_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have a working `mmap' system call. */ -#undef HAVE_MMAP - -/* define if the compiler implements namespaces */ -#undef HAVE_NAMESPACES - -/* Define if you have the nanosleep function */ -#undef HAVE_NANOSLEEP - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#undef HAVE_NDIR_H - -/* Does not support new float byte<->float conversions */ -#undef HAVE_NO_FLOAT_BYTE - -/* Does not support try/catch blocks */ -#undef HAVE_NO_FUNCTION_TRY_BLOCKS - -/* Define to 1 if you have the `printf' function. */ -#undef HAVE_PRINTF - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Define if recursive pthread mutexes are available */ -#undef HAVE_PTHREAD_MUTEX_RECURSIVE - -/* Define to 1 if you have the header file. */ -#undef HAVE_SET - -/* Define to 1 if you have the `snprintf' function. */ -#undef HAVE_SNPRINTF - -/* Defined if the snprintf overflow test fails */ -#undef HAVE_SNPRINTF_BUG - -/* Define to 1 if you have the `snwprintf' function. */ -#undef HAVE_SNWPRINTF - -/* define if the compiler supports ISO C++ standard library */ -#undef HAVE_STD - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDARG_H - -/* x */ -#undef HAVE_STDEXCEPT - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* define if the compiler supports Standard Template Library */ -#undef HAVE_STL - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the `strlwr' function. */ -#undef HAVE_STRLWR - -/* Define to 1 if you have the `strtoll' function. */ -#undef HAVE_STRTOLL - -/* Define to 1 if you have the `strupr' function. */ -#undef HAVE_STRUPR - -/* Defined if the swprintf test fails */ -#undef HAVE_SWPRINTF_BUG - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_DIR_H - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_NDIR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIMEB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_TCHAR_H - -/* Define to 1 if you have the `tell' function. */ -#undef HAVE_TELL - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_VECTOR - -/* Define to 1 if you have the `vsnwprintf' function. */ -#undef HAVE_VSNWPRINTF - -/* Define to 1 if you have the header file. */ -#undef HAVE_WCHAR_H - -/* Define to 1 if the system has the type `wchar_t'. */ -#undef HAVE_WCHAR_T - -/* Define to 1 if you have the `wcscasecmp' function. */ -#undef HAVE_WCSCASECMP - -/* Define to 1 if you have the `wcscat' function. */ -#undef HAVE_WCSCAT - -/* Define to 1 if you have the `wcschr' function. */ -#undef HAVE_WCSCHR - -/* Define to 1 if you have the `wcscmp' function. */ -#undef HAVE_WCSCMP - -/* Define to 1 if you have the `wcscpy' function. */ -#undef HAVE_WCSCPY - -/* Define to 1 if you have the `wcscspn' function. */ -#undef HAVE_WCSCSPN - -/* Define to 1 if you have the `wcsicmp' function. */ -#undef HAVE_WCSICMP - -/* Define to 1 if you have the `wcslen' function. */ -#undef HAVE_WCSLEN - -/* Define to 1 if you have the `wcsncmp' function. */ -#undef HAVE_WCSNCMP - -/* Define to 1 if you have the `wcsncpy' function. */ -#undef HAVE_WCSNCPY - -/* Define to 1 if you have the `wcsstr' function. */ -#undef HAVE_WCSSTR - -/* Define to 1 if you have the `wcstod' function. */ -#undef HAVE_WCSTOD - -/* Define to 1 if you have the `wcstoll' function. */ -#undef HAVE_WCSTOLL - -/* Define to 1 if you have the `wcsupr' function. */ -#undef HAVE_WCSUPR - -/* Define to 1 if you have a functioning header file. */ -#undef HAVE_WCTYPE_H - -/* Define to 1 if you have the `wprintf' function. */ -#undef HAVE_WPRINTF - -/* Define to 1 if you have the `_filelength' function. */ -#undef HAVE__FILELENGTH - -/* How to define a static const in a class */ -#undef LUCENE_STATIC_CONSTANT_SYNTAX - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to the necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* The size of `unsigned char', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED_CHAR - -/* The size of `unsigned int', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED_INT - -/* The size of `unsigned long', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED_LONG - -/* The size of `unsigned long long', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED_LONG_LONG - -/* The size of `unsigned __int64', as computed by sizeof. */ -#undef SIZEOF_UNSIGNED___INT64 - -/* Define to 1 if the `S_IS*' macros in do not work properly. */ -#undef STAT_MACROS_BROKEN - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to 1 if you can safely include both and . */ -#undef TIME_WITH_SYS_TIME - -/* Version number of package */ -#undef VERSION - -/* Forces into Ascii mode */ -#undef _ASCII - -/* Conditional Debugging */ -#undef _CND_DEBUG - -/* debuging option */ -#undef _DEBUG - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES - -/* If not already defined, then define as a datatype of *exactly* 32 bits. */ -#undef uint32_t - -/* If not already defined, then define as a datatype of *exactly* 64 bits. */ -#undef uint64_t - -/* If not already defined, then define as a datatype of *exactly* 8 bits. */ -#undef uint8_t diff -Nru clucene-core-0.9.21b/configure clucene-core-2.3.3.4/configure --- clucene-core-0.9.21b/configure 2008-10-23 18:18:23.000000000 +0000 +++ clucene-core-2.3.3.4/configure 1970-01-01 00:00:00.000000000 +0000 @@ -1,28637 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -echo=${ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -tagnames=${tagnames+${tagnames},}CXX - -tagnames=${tagnames+${tagnames},}F77 - -exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="src/CLucene/StdHeader.h" -ac_unique_file="src/CLucene/StdHeader.h" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -CLLIB_VERSION -INSTALL_PROGRAM -INSTALL_SCRIPT -INSTALL_DATA -CYGPATH_W -PACKAGE -VERSION -ACLOCAL -AUTOCONF -AUTOMAKE -AUTOHEADER -MAKEINFO -install_sh -STRIP -INSTALL_STRIP_PROGRAM -mkdir_p -AWK -SET_MAKE -am__leading_dot -AMTAR -am__tar -am__untar -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -DEPDIR -am__include -am__quote -AMDEP_TRUE -AMDEP_FALSE -AMDEPBACKSLASH -CCDEPMODE -am__fastdepCC_TRUE -am__fastdepCC_FALSE -CXX -CXXFLAGS -ac_ct_CXX -CXXDEPMODE -am__fastdepCXX_TRUE -am__fastdepCXX_FALSE -build -build_cpu -build_vendor -build_os -host -host_cpu -host_vendor -host_os -SED -GREP -EGREP -LN_S -ECHO -AR -RANLIB -DSYMUTIL -NMEDIT -CPP -CXXCPP -F77 -FFLAGS -ac_ct_F77 -LIBTOOL -acx_pthread_config -PTHREAD_CC -PTHREAD_LIBS -PTHREAD_CFLAGS -DOXYGEN -DOT -enable_doxygen -enable_dot -POW_LIB -LIBOBJS -LTLIBOBJS' -ac_subst_files='' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -CPP -CXXCPP -F77 -FFLAGS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute directory names. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-debug build with debugging information - --enable-cnddebug build with asserts - --enable-ascii Forces into ascii mode - --disable-multithreading - disable multithreading - --enable-gprof turn on profiling support - --disable-largefile omit support for large files - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-tags[=TAGS] include additional configurations [automatic] - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CPP C preprocessor - CXXCPP C++ preprocessor - F77 Fortran 77 compiler command - FFLAGS Fortran 77 compiler flags - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.61 - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" -else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" -fi -shift -for ac_site_file -do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -VERSION=0.9.21b - -clLIB_current=3 - -clLIB_revision=1 - -clLIB_age=0 - -CLLIB_VERSION=$clLIB_current:$clLIB_revision:$clLIB_age - - -PACKAGE=clucene-core -PROJECT=CLuceneCore -PACKAGE_BUGREPORT=clucene-developers@lists.sourceforge.net -PACKAGE_NAME=CLuceneCore -PACKAGE_VERSION=$VERSION - - -ac_aux_dir= -for ac_dir in config "$srcdir"/config; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&2;} - { (exit 1); exit 1; }; } -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -ac_config_headers="$ac_config_headers config.h.tmp" - - -ac_config_commands="$ac_config_commands src/CLucene/clucene-config.h" - -am__api_version="1.9" -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - done - done - ;; -esac -done -IFS=$as_save_IFS - - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. -# By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm -f conftest.sed - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - SET_MAKE= -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE=$PACKAGE - VERSION=$VERSION - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -install_sh=${install_sh-"$am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { (ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi - -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; - xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; -esac - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo done -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi -fi - - -{ echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - - -if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - - -depcc="$CC" am_compiler_list= - -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - - -if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CXXFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - - -if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -# Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - -# Check whether --enable-static was given. -if test "${enable_static+set}" = set; then - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - -# Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - -{ echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6; } -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -echo "$as_me: error: invalid value of canonical build" >&2;} - { (exit 1); exit 1; }; };; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6; } -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } -fi - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -echo "$as_me: error: invalid value of canonical host" >&2;} - { (exit 1); exit 1; }; };; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 -echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } -if test "${lt_cv_path_SED+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$lt_ac_prog$ac_exec_ext"; }; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done - -fi - -SED=$lt_cv_path_SED - -{ echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6; } - -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue - # Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - - $ac_path_GREP_found && break 3 - done -done - -done -IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - -else - ac_cv_path_GREP=$GREP -fi - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue - # Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - - $ac_path_EGREP_found && break 3 - done -done - -done -IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - -else - ac_cv_path_EGREP=$EGREP -fi - - - fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$LD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - -{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi -fi -{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 -echo "${ECHO_T}$lt_cv_path_NM" >&6; } -NM="$lt_cv_path_NM" - -{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6; } -fi - -{ echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 -echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 4809 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - lt_cv_cc_needs_belf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - lt_cv_cc_needs_belf=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - - -esac - -need_locks="$enable_libtool_lock" - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - { echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$F77" && break - done -fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_F77" && break -done - - if test "x$ac_ct_F77" = x; then - F77="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - F77=$ac_ct_F77 - fi -fi - - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out - -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_f77_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_prog_f77_g=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi -fi - -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! -# find the maximum length of command line arguments -{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } -else - { echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6; } -fi - - - - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 -echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32*) - symcode='[ABCDGISTW]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[ABCDGIRSTW]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { echo "$as_me:$LINENO: result: failed" >&5 -echo "${ECHO_T}failed" >&6; } -else - { echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6; } -fi - -{ echo "$as_me:$LINENO: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } -if test "${lt_cv_objdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { echo "$as_me:$LINENO: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 -echo "${ECHO_T}$DSYMUTIL" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 -echo "${ECHO_T}$ac_ct_DSYMUTIL" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { echo "$as_me:$LINENO: result: $NMEDIT" >&5 -echo "${ECHO_T}$NMEDIT" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 -echo "${ECHO_T}$ac_ct_NMEDIT" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - - { echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 -echo $ECHO_N "checking for -single_module linker flag... $ECHO_C" >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - echo "int foo(void){return 1;}" > conftest.c - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib ${wl}-single_module conftest.c - if test -f libconftest.dylib; then - lt_cv_apple_cc_single_mod=yes - rm -rf libconftest.dylib* - fi - rm conftest.c - fi -fi -{ echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 -echo "${ECHO_T}$lt_cv_apple_cc_single_mod" >&6; } - { echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 -echo $ECHO_N "checking for -exported_symbols_list linker flag... $ECHO_C" >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - lt_cv_ld_exported_symbols_list=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - lt_cv_ld_exported_symbols_list=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 -echo "${ECHO_T}$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[0123]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}" - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil="~$DSYMUTIL \$lib || :" - else - _lt_dsymutil= - fi - ;; - esac - - -enable_dlopen=no -enable_win32_dll=no - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm -r conftest* - - - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7388: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7392: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic='-qnocommon' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7678: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7682: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $rm -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7782: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7786: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag= - enable_shared_with_static_runtimes=no - archive_cmds= - archive_expsym_cmds= - old_archive_From_new_cmds= - old_archive_from_expsyms_cmds= - export_dynamic_flag_spec= - whole_archive_flag_spec= - thread_safe_flag_spec= - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_direct=no - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - link_all_deplibs=unknown - hardcode_automatic=no - module_cmds= - module_expsym_cmds= - always_export_symbols=no - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - link_all_deplibs=no - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld='-rpath $libdir' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 -echo "${ECHO_T}$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`echo $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec" -fi - -sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec" -fi - -sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6; } - -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - ;; - *) - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - ;; - esac -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dl_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - { echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_shl_load || defined __stub___shl_load -choke me -#endif - -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_shl_load=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_shl_load=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - { echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_dlopen || defined __stub___dlopen -choke me -#endif - -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dl_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_svld_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_dld_link=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_dld_link=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - -# Report which library types will actually be built -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler \ - CC \ - LD \ - lt_prog_compiler_wl \ - lt_prog_compiler_pic \ - lt_prog_compiler_static \ - lt_prog_compiler_no_builtin_flag \ - export_dynamic_flag_spec \ - thread_safe_flag_spec \ - whole_archive_flag_spec \ - enable_shared_with_static_runtimes \ - old_archive_cmds \ - old_archive_from_new_cmds \ - predep_objects \ - postdep_objects \ - predeps \ - postdeps \ - compiler_lib_search_path \ - compiler_lib_search_dirs \ - archive_cmds \ - archive_expsym_cmds \ - postinstall_cmds \ - postuninstall_cmds \ - old_archive_from_expsyms_cmds \ - allow_undefined_flag \ - no_undefined_flag \ - export_symbols_cmds \ - hardcode_libdir_flag_spec \ - hardcode_libdir_flag_spec_ld \ - hardcode_libdir_separator \ - hardcode_automatic \ - module_cmds \ - module_expsym_cmds \ - lt_cv_prog_compiler_c_o \ - fix_srcfile_path \ - exclude_expsyms \ - include_expsyms; do - - case $var in - old_archive_cmds | \ - old_archive_from_new_cmds | \ - archive_cmds | \ - archive_expsym_cmds | \ - module_cmds | \ - module_expsym_cmds | \ - old_archive_from_expsyms_cmds | \ - export_symbols_cmds | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - { echo "$as_me:$LINENO: creating $ofile" >&5 -echo "$as_me: creating $ofile" >&6;} - - cat <<__EOF__ >> "$cfgfile" -#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU C compiler? -with_gcc=$GCC - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps - -# The directories searched by this compiler when creating a shared -# library -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# ### END LIBTOOL CONFIG - -__EOF__ - - - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -CC="$lt_save_CC" - - -# Check whether --with-tags was given. -if test "${with_tags+set}" = set; then - withval=$with_tags; tagnames="$withval" -fi - - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} - else - { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 -echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in - "") ;; - *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 -echo "$as_me: error: invalid tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 -echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} - { (exit 1); exit 1; }; } - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= -compiler_lib_search_dirs_CXX= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm -r conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -compiler_CXX=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' -else - lt_prog_compiler_no_builtin_flag_CXX= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$LD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } -ld_shlibs_CXX=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX="$_lt_dar_allow_undefined" - if test "$GXX" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_CXX=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - ld_shlibs_CXX=no - ;; - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - gnu*) - ;; - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - else - ld_shlibs_CXX=no - fi - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; -esac -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -GCC_CXX="$GXX" -LD_CXX="$LD" - -cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - # The `*' in the case matches for architectures that use `case' in - # $output_verbose_cmd can trigger glob expansion during the loop - # eval without this substitution. - output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` - - for p in `eval $output_verbose_link_cmd`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" \ - || test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$rm -f confest.$objext - -compiler_lib_search_dirs_CXX= -if test -n "$compiler_lib_search_path_CXX"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - # - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - -lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_CXX='-qnocommon' - lt_prog_compiler_wl_CXX='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12660: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:12664: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $rm -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12764: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:12768: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - link_all_deplibs_CXX=no - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec" -fi - -sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec" -fi - -sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || \ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 -echo "${ECHO_T}$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_CXX \ - CC_CXX \ - LD_CXX \ - lt_prog_compiler_wl_CXX \ - lt_prog_compiler_pic_CXX \ - lt_prog_compiler_static_CXX \ - lt_prog_compiler_no_builtin_flag_CXX \ - export_dynamic_flag_spec_CXX \ - thread_safe_flag_spec_CXX \ - whole_archive_flag_spec_CXX \ - enable_shared_with_static_runtimes_CXX \ - old_archive_cmds_CXX \ - old_archive_from_new_cmds_CXX \ - predep_objects_CXX \ - postdep_objects_CXX \ - predeps_CXX \ - postdeps_CXX \ - compiler_lib_search_path_CXX \ - compiler_lib_search_dirs_CXX \ - archive_cmds_CXX \ - archive_expsym_cmds_CXX \ - postinstall_cmds_CXX \ - postuninstall_cmds_CXX \ - old_archive_from_expsyms_cmds_CXX \ - allow_undefined_flag_CXX \ - no_undefined_flag_CXX \ - export_symbols_cmds_CXX \ - hardcode_libdir_flag_spec_CXX \ - hardcode_libdir_flag_spec_ld_CXX \ - hardcode_libdir_separator_CXX \ - hardcode_automatic_CXX \ - module_cmds_CXX \ - module_expsym_cmds_CXX \ - lt_cv_prog_compiler_c_o_CXX \ - fix_srcfile_path_CXX \ - exclude_expsyms_CXX \ - include_expsyms_CXX; do - - case $var in - old_archive_cmds_CXX | \ - old_archive_from_new_cmds_CXX | \ - archive_cmds_CXX | \ - archive_expsym_cmds_CXX | \ - module_cmds_CXX | \ - module_expsym_cmds_CXX | \ - old_archive_from_expsyms_cmds_CXX | \ - export_symbols_cmds_CXX | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_CXX - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_CXX -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_CXX - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_CXX - -# The directories searched by this compiler when creating a shared -# library -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld - - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu - - -archive_cmds_need_lc_F77=no -allow_undefined_flag_F77= -always_export_symbols_F77=no -archive_expsym_cmds_F77= -export_dynamic_flag_spec_F77= -hardcode_direct_F77=no -hardcode_libdir_flag_spec_F77= -hardcode_libdir_flag_spec_ld_F77= -hardcode_libdir_separator_F77= -hardcode_minus_L_F77=no -hardcode_automatic_F77=no -module_cmds_F77= -module_expsym_cmds_F77= -link_all_deplibs_F77=unknown -old_archive_cmds_F77=$old_archive_cmds -no_undefined_flag_F77= -whole_archive_flag_spec_F77= -enable_shared_with_static_runtimes_F77=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -objext_F77=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="\ - subroutine t - return - end -" - -# Code to be used in simple link tests -lt_simple_link_test_code="\ - program t - end -" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm -r conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -compiler_F77=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -GCC_F77="$G77" -LD_F77="$LD" - -lt_prog_compiler_wl_F77= -lt_prog_compiler_pic_F77= -lt_prog_compiler_static_F77= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_static_F77='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_F77='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_F77=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_F77=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_F77='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - else - lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_F77='-qnocommon' - lt_prog_compiler_wl_F77='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_F77='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_F77='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-fpic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_F77='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - lt_prog_compiler_wl_F77='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - lt_prog_compiler_wl_F77='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_F77='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static_F77='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_F77='-Qoption ld ';; - *) - lt_prog_compiler_wl_F77='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_F77='-Qoption ld ' - lt_prog_compiler_pic_F77='-PIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_F77='-Kconform_pic' - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_can_build_shared_F77=no - ;; - - uts4*) - lt_prog_compiler_pic_F77='-pic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_F77=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_F77"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_pic_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_pic_works_F77=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_F77" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14362: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:14366: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_F77=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_F77" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then - case $lt_prog_compiler_pic_F77 in - "" | " "*) ;; - *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; - esac -else - lt_prog_compiler_pic_F77= - lt_prog_compiler_can_build_shared_F77=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_F77= - ;; - *) - lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_static_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_static_works_F77=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_F77=yes - fi - else - lt_cv_prog_compiler_static_works_F77=yes - fi - fi - $rm -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_static_works_F77" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then - : -else - lt_prog_compiler_static_F77= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_F77=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14466: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:14470: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_F77=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_F77= - enable_shared_with_static_runtimes_F77=no - archive_cmds_F77= - archive_expsym_cmds_F77= - old_archive_From_new_cmds_F77= - old_archive_from_expsyms_cmds_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - thread_safe_flag_spec_F77= - hardcode_libdir_flag_spec_F77= - hardcode_libdir_flag_spec_ld_F77= - hardcode_libdir_separator_F77= - hardcode_direct_F77=no - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=unsupported - link_all_deplibs_F77=unknown - hardcode_automatic_F77=no - module_cmds_F77= - module_expsym_cmds_F77= - always_export_symbols_F77=no - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_F77= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_F77=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_F77='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_F77= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_F77=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_F77=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_F77='-L$libdir' - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=no - enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_F77=no - fi - ;; - - interix[3-9]*) - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - link_all_deplibs_F77=no - else - ld_shlibs_F77=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_F77=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - - if test "$ld_shlibs_F77" = no; then - runpath_var= - hardcode_libdir_flag_spec_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=yes - archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_F77=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_F77=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_F77='' - hardcode_direct_F77=yes - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_F77=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_F77=yes - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_libdir_separator_F77= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_F77=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_F77='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_F77="-z nodefs" - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_F77=' ${wl}-bernotok' - allow_undefined_flag_F77=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_F77='$convenience' - archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_F77=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_F77=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_F77=' ' - allow_undefined_flag_F77=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_F77='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_F77='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_F77=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_F77=no - hardcode_direct_F77=no - hardcode_automatic_F77=yes - hardcode_shlibpath_var_F77=unsupported - whole_archive_flag_spec_F77='' - link_all_deplibs_F77=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - freebsd1*) - ld_shlibs_F77=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_F77='+b $libdir' - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - ;; - *) - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - link_all_deplibs_F77=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - newsos6) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_shlibpath_var_F77=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs_F77=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - allow_undefined_flag_F77=unsupported - archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_F77='-rpath $libdir' - fi - hardcode_libdir_separator_F77=: - ;; - - solaris*) - no_undefined_flag_F77=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_shlibpath_var_F77=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs_F77=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_F77='$CC -r -o $output$reload_objs' - hardcode_direct_F77=no - ;; - motorola) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv4.3*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_F77=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_F77='${wl}-z,text' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_F77='${wl}-z,text' - allow_undefined_flag_F77='${wl}-z,nodefs' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - export_dynamic_flag_spec_F77='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - *) - ld_shlibs_F77=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 -echo "${ECHO_T}$ld_shlibs_F77" >&6; } -test "$ld_shlibs_F77" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_F77" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_F77=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_F77 in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_F77 - pic_flag=$lt_prog_compiler_pic_F77 - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_F77 - allow_undefined_flag_F77= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_F77=no - else - archive_cmds_need_lc_F77=yes - fi - allow_undefined_flag_F77=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec" -fi - -sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec" -fi - -sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_F77= -if test -n "$hardcode_libdir_flag_spec_F77" || \ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && - test "$hardcode_minus_L_F77" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_F77=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_F77=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_F77=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 -echo "${ECHO_T}$hardcode_action_F77" >&6; } - -if test "$hardcode_action_F77" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_F77 \ - CC_F77 \ - LD_F77 \ - lt_prog_compiler_wl_F77 \ - lt_prog_compiler_pic_F77 \ - lt_prog_compiler_static_F77 \ - lt_prog_compiler_no_builtin_flag_F77 \ - export_dynamic_flag_spec_F77 \ - thread_safe_flag_spec_F77 \ - whole_archive_flag_spec_F77 \ - enable_shared_with_static_runtimes_F77 \ - old_archive_cmds_F77 \ - old_archive_from_new_cmds_F77 \ - predep_objects_F77 \ - postdep_objects_F77 \ - predeps_F77 \ - postdeps_F77 \ - compiler_lib_search_path_F77 \ - compiler_lib_search_dirs_F77 \ - archive_cmds_F77 \ - archive_expsym_cmds_F77 \ - postinstall_cmds_F77 \ - postuninstall_cmds_F77 \ - old_archive_from_expsyms_cmds_F77 \ - allow_undefined_flag_F77 \ - no_undefined_flag_F77 \ - export_symbols_cmds_F77 \ - hardcode_libdir_flag_spec_F77 \ - hardcode_libdir_flag_spec_ld_F77 \ - hardcode_libdir_separator_F77 \ - hardcode_automatic_F77 \ - module_cmds_F77 \ - module_expsym_cmds_F77 \ - lt_cv_prog_compiler_c_o_F77 \ - fix_srcfile_path_F77 \ - exclude_expsyms_F77 \ - include_expsyms_F77; do - - case $var in - old_archive_cmds_F77 | \ - old_archive_from_new_cmds_F77 | \ - archive_cmds_F77 | \ - archive_expsym_cmds_F77 | \ - module_cmds_F77 | \ - module_expsym_cmds_F77 | \ - old_archive_from_expsyms_cmds_F77 | \ - export_symbols_cmds_F77 | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_F77 - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_F77 - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_F77 - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_F77 - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_F77 - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_F77 -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_F77 - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_F77 -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_F77 -archive_expsym_cmds=$lt_archive_expsym_cmds_F77 -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_F77 -module_expsym_cmds=$lt_module_expsym_cmds_F77 - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_F77 - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_F77 - -# The directories searched by this compiler when creating a shared -# library -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77 - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_F77 - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_F77 - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_F77 - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_F77 - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_F77 - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_F77 - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_F77 - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_F77 - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_F77 - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_F77 - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_F77 - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -objext_GCJ=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm -r conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -compiler_GCJ=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -archive_cmds_need_lc_GCJ=no - -old_archive_cmds_GCJ=$old_archive_cmds - - -lt_prog_compiler_no_builtin_flag_GCJ= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' - - -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16686: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:16690: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl_GCJ= -lt_prog_compiler_pic_GCJ= -lt_prog_compiler_static_GCJ= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_static_GCJ='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_GCJ='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_GCJ=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_GCJ=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_GCJ='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - else - lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_GCJ='-qnocommon' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-fpic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - lt_prog_compiler_wl_GCJ='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_GCJ='-Qoption ld ';; - *) - lt_prog_compiler_wl_GCJ='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_GCJ='-Qoption ld ' - lt_prog_compiler_pic_GCJ='-PIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_GCJ='-Kconform_pic' - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_can_build_shared_GCJ=no - ;; - - uts4*) - lt_prog_compiler_pic_GCJ='-pic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_GCJ=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_GCJ"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_pic_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_pic_works_GCJ=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_GCJ" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16976: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:16980: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_GCJ=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_GCJ" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_GCJ" = xyes; then - case $lt_prog_compiler_pic_GCJ in - "" | " "*) ;; - *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; - esac -else - lt_prog_compiler_pic_GCJ= - lt_prog_compiler_can_build_shared_GCJ=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_GCJ= - ;; - *) - lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_static_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_static_works_GCJ=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_GCJ=yes - fi - else - lt_cv_prog_compiler_static_works_GCJ=yes - fi - fi - $rm -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_static_works_GCJ" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_GCJ" = xyes; then - : -else - lt_prog_compiler_static_GCJ= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_GCJ=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17080: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:17084: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_GCJ=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_GCJ= - enable_shared_with_static_runtimes_GCJ=no - archive_cmds_GCJ= - archive_expsym_cmds_GCJ= - old_archive_From_new_cmds_GCJ= - old_archive_from_expsyms_cmds_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - thread_safe_flag_spec_GCJ= - hardcode_libdir_flag_spec_GCJ= - hardcode_libdir_flag_spec_ld_GCJ= - hardcode_libdir_separator_GCJ= - hardcode_direct_GCJ=no - hardcode_minus_L_GCJ=no - hardcode_shlibpath_var_GCJ=unsupported - link_all_deplibs_GCJ=unknown - hardcode_automatic_GCJ=no - module_cmds_GCJ= - module_expsym_cmds_GCJ= - always_export_symbols_GCJ=no - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_GCJ= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_GCJ='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_GCJ=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_GCJ= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_GCJ=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_GCJ=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_GCJ='-L$libdir' - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=no - enable_shared_with_static_runtimes_GCJ=yes - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - interix[3-9]*) - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - link_all_deplibs_GCJ=no - else - ld_shlibs_GCJ=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_GCJ=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - - if test "$ld_shlibs_GCJ" = no; then - runpath_var= - hardcode_libdir_flag_spec_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=yes - archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_GCJ=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_GCJ=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_GCJ='' - hardcode_direct_GCJ=yes - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_GCJ=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_GCJ=yes - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_libdir_separator_GCJ= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_GCJ=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_GCJ='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_GCJ="-z nodefs" - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_GCJ=' ${wl}-bernotok' - allow_undefined_flag_GCJ=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_GCJ='$convenience' - archive_cmds_need_lc_GCJ=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_GCJ=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_GCJ=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_GCJ=' ' - allow_undefined_flag_GCJ=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_GCJ='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_GCJ=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_GCJ=no - hardcode_direct_GCJ=no - hardcode_automatic_GCJ=yes - hardcode_shlibpath_var_GCJ=unsupported - whole_archive_flag_spec_GCJ='' - link_all_deplibs_GCJ=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_GCJ="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_GCJ="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_GCJ="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_GCJ="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_GCJ=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - freebsd1*) - ld_shlibs_GCJ=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_direct_GCJ=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - ;; - *) - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - link_all_deplibs_GCJ=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - newsos6) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_shlibpath_var_GCJ=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - ;; - *) - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs_GCJ=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - allow_undefined_flag_GCJ=unsupported - archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_GCJ='-rpath $libdir' - fi - hardcode_libdir_separator_GCJ=: - ;; - - solaris*) - no_undefined_flag_GCJ=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_shlibpath_var_GCJ=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs_GCJ=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_GCJ='$CC -r -o $output$reload_objs' - hardcode_direct_GCJ=no - ;; - motorola) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4.3*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - export_dynamic_flag_spec_GCJ='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_GCJ=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_GCJ='${wl}-z,text' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_GCJ='${wl}-z,text' - allow_undefined_flag_GCJ='${wl}-z,nodefs' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - *) - ld_shlibs_GCJ=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 -echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } -test "$ld_shlibs_GCJ" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_GCJ" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_GCJ=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_GCJ in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_GCJ - pic_flag=$lt_prog_compiler_pic_GCJ - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ - allow_undefined_flag_GCJ= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_GCJ=no - else - archive_cmds_need_lc_GCJ=yes - fi - allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec" -fi - -sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec" -fi - -sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_GCJ= -if test -n "$hardcode_libdir_flag_spec_GCJ" || \ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && - test "$hardcode_minus_L_GCJ" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_GCJ=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_GCJ=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_GCJ=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 -echo "${ECHO_T}$hardcode_action_GCJ" >&6; } - -if test "$hardcode_action_GCJ" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_GCJ \ - CC_GCJ \ - LD_GCJ \ - lt_prog_compiler_wl_GCJ \ - lt_prog_compiler_pic_GCJ \ - lt_prog_compiler_static_GCJ \ - lt_prog_compiler_no_builtin_flag_GCJ \ - export_dynamic_flag_spec_GCJ \ - thread_safe_flag_spec_GCJ \ - whole_archive_flag_spec_GCJ \ - enable_shared_with_static_runtimes_GCJ \ - old_archive_cmds_GCJ \ - old_archive_from_new_cmds_GCJ \ - predep_objects_GCJ \ - postdep_objects_GCJ \ - predeps_GCJ \ - postdeps_GCJ \ - compiler_lib_search_path_GCJ \ - compiler_lib_search_dirs_GCJ \ - archive_cmds_GCJ \ - archive_expsym_cmds_GCJ \ - postinstall_cmds_GCJ \ - postuninstall_cmds_GCJ \ - old_archive_from_expsyms_cmds_GCJ \ - allow_undefined_flag_GCJ \ - no_undefined_flag_GCJ \ - export_symbols_cmds_GCJ \ - hardcode_libdir_flag_spec_GCJ \ - hardcode_libdir_flag_spec_ld_GCJ \ - hardcode_libdir_separator_GCJ \ - hardcode_automatic_GCJ \ - module_cmds_GCJ \ - module_expsym_cmds_GCJ \ - lt_cv_prog_compiler_c_o_GCJ \ - fix_srcfile_path_GCJ \ - exclude_expsyms_GCJ \ - include_expsyms_GCJ; do - - case $var in - old_archive_cmds_GCJ | \ - old_archive_from_new_cmds_GCJ | \ - archive_cmds_GCJ | \ - archive_expsym_cmds_GCJ | \ - module_cmds_GCJ | \ - module_expsym_cmds_GCJ | \ - old_archive_from_expsyms_cmds_GCJ | \ - export_symbols_cmds_GCJ | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_GCJ - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_GCJ - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_GCJ - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_GCJ - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_GCJ - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_GCJ -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_GCJ - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_GCJ -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_GCJ -archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_GCJ -module_expsym_cmds=$lt_module_expsym_cmds_GCJ - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_GCJ - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_GCJ - -# The directories searched by this compiler when creating a shared -# library -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_GCJ - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_GCJ - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_GCJ - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_GCJ - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_GCJ - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_GCJ - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_GCJ - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_GCJ - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_GCJ - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_GCJ - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_GCJ - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_GCJ - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - RC) - - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -objext_RC=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm -r conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -compiler_RC=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - -lt_cv_prog_compiler_c_o_RC=yes - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_RC \ - CC_RC \ - LD_RC \ - lt_prog_compiler_wl_RC \ - lt_prog_compiler_pic_RC \ - lt_prog_compiler_static_RC \ - lt_prog_compiler_no_builtin_flag_RC \ - export_dynamic_flag_spec_RC \ - thread_safe_flag_spec_RC \ - whole_archive_flag_spec_RC \ - enable_shared_with_static_runtimes_RC \ - old_archive_cmds_RC \ - old_archive_from_new_cmds_RC \ - predep_objects_RC \ - postdep_objects_RC \ - predeps_RC \ - postdeps_RC \ - compiler_lib_search_path_RC \ - compiler_lib_search_dirs_RC \ - archive_cmds_RC \ - archive_expsym_cmds_RC \ - postinstall_cmds_RC \ - postuninstall_cmds_RC \ - old_archive_from_expsyms_cmds_RC \ - allow_undefined_flag_RC \ - no_undefined_flag_RC \ - export_symbols_cmds_RC \ - hardcode_libdir_flag_spec_RC \ - hardcode_libdir_flag_spec_ld_RC \ - hardcode_libdir_separator_RC \ - hardcode_automatic_RC \ - module_cmds_RC \ - module_expsym_cmds_RC \ - lt_cv_prog_compiler_c_o_RC \ - fix_srcfile_path_RC \ - exclude_expsyms_RC \ - include_expsyms_RC; do - - case $var in - old_archive_cmds_RC | \ - old_archive_from_new_cmds_RC | \ - archive_cmds_RC | \ - archive_expsym_cmds_RC | \ - module_cmds_RC | \ - module_expsym_cmds_RC | \ - old_archive_from_expsyms_cmds_RC | \ - export_symbols_cmds_RC | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_RC - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_RC - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_RC - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_RC - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_RC - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_RC -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_RC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_RC -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_RC -archive_expsym_cmds=$lt_archive_expsym_cmds_RC -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_RC -module_expsym_cmds=$lt_module_expsym_cmds_RC - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_RC - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_RC - -# The directories searched by this compiler when creating a shared -# library -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_RC - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_RC - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_RC - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_RC - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_RC - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_RC - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_RC - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_RC - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_RC - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_RC - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_RC - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_RC - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_RC - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_RC - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -CC="$lt_save_CC" - - ;; - - *) - { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 -echo "$as_me: error: Unsupported tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 -echo "$as_me: error: unable to update list of available tagged configurations." >&2;} - { (exit 1); exit 1; }; } - fi -fi - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Prevent multiple expansion - - - - - - - - - - - - - - - - - - - - - - - ax_config_feature_FEATURE_default=yes - - -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then - enableval=$enable_debug; enable_debug=$enableval -else - enable_debug=no -fi - -if test $enable_debug = yes; then - -cat >>confdefs.h <<\_ACEOF -#define _DEBUG 1 -_ACEOF - - if test $ac_cv_prog_cxx_g = yes; then - CXXFLAGS="-g $CXXFLAGS" - fi - echo "enabling debug" -else - echo disabling debug -fi - -# Check whether --enable-cnddebug was given. -if test "${enable_cnddebug+set}" = set; then - enableval=$enable_cnddebug; enable_cnddebug=$enableval -else - enable_cnddebug=no -fi - -if test $enable_cnddebug = yes; then - -cat >>confdefs.h <<\_ACEOF -#define _CND_DEBUG 1 -_ACEOF - - echo "enabling cnddebug" -else - echo disabling cnddebug -fi - -# Check whether --enable-ascii was given. -if test "${enable_ascii+set}" = set; then - enableval=$enable_ascii; enable_ascii=yes -else - enable_ascii=no -fi - -if test $enable_ascii = yes; then - -cat >>confdefs.h <<\_ACEOF -#define _ASCII 1 -_ACEOF - -fi - -# Check whether --enable-multithreading was given. -if test "${enable_multithreading+set}" = set; then - enableval=$enable_multithreading; enable_multithreading=no -else - enable_multithreading=yes -fi - -if test $enable_multithreading = yes; then - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { echo "$as_me:$LINENO: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -echo $ECHO_N "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - acx_pthread_ok=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - { echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5 -echo "${ECHO_T}$acx_pthread_ok" >&6; } - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthread or - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - case $flag in - none) - { echo "$as_me:$LINENO: checking whether pthreads work without any flags" >&5 -echo $ECHO_N "checking whether pthreads work without any flags... $ECHO_C" >&6; } - ;; - - -*) - { echo "$as_me:$LINENO: checking whether pthreads work with $flag" >&5 -echo $ECHO_N "checking whether pthreads work with $flag... $ECHO_C" >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_acx_pthread_config+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$acx_pthread_config"; then - ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_acx_pthread_config="yes" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" -fi -fi -acx_pthread_config=$ac_cv_prog_acx_pthread_config -if test -n "$acx_pthread_config"; then - { echo "$as_me:$LINENO: result: $acx_pthread_config" >&5 -echo "${ECHO_T}$acx_pthread_config" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { echo "$as_me:$LINENO: checking for the pthreads library -l$flag" >&5 -echo $ECHO_N "checking for the pthreads library -l$flag... $ECHO_C" >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th=pthread_self(); pthread_attr_t attr;pthread_join(th, 0); - pthread_attr_init(&attr); - pthread_mutex_t mtx; pthread_mutex_init(&mtx,0); - pthread_mutex_lock(&mtx); pthread_mutex_unlock(&mtx); - pthread_mutex_destroy(&mtx) - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - acx_pthread_ok=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - { echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5 -echo "${ECHO_T}$acx_pthread_ok" >&6; } - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: threads are created detached by default - # and the JOINABLE attribute has a nonstandard name (UNDETACHED). - { echo "$as_me:$LINENO: checking for joinable pthread attribute" >&5 -echo $ECHO_N "checking for joinable pthread attribute... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -int attr=PTHREAD_CREATE_JOINABLE; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ok=PTHREAD_CREATE_JOINABLE -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ok=unknown -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - if test x"$ok" = xunknown; then - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -int attr=PTHREAD_CREATE_UNDETACHED; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ok=PTHREAD_CREATE_UNDETACHED -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ok=unknown -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi - if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<\_ACEOF -#define PTHREAD_CREATE_JOINABLE $ok -_ACEOF - - fi - { echo "$as_me:$LINENO: result: ${ok}" >&5 -echo "${ECHO_T}${ok}" >&6; } - if test x"$ok" = xunknown; then - { echo "$as_me:$LINENO: WARNING: we do not know how to create joinable pthreads" >&5 -echo "$as_me: WARNING: we do not know how to create joinable pthreads" >&2;} - fi - - { echo "$as_me:$LINENO: checking if more special flags are required for pthreads" >&5 -echo $ECHO_N "checking if more special flags are required for pthreads... $ECHO_C" >&6; } - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - { echo "$as_me:$LINENO: result: $flag" >&5 -echo "${ECHO_T}$flag" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - - - { echo "$as_me:$LINENO: checking for recursive mutex support" >&5 -echo $ECHO_N "checking for recursive mutex support... $ECHO_C" >&6; } - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - #include - #include - - int main() { - pthread_mutexattr_t attr; - pthread_mutex_t m; - - exit (pthread_mutexattr_init(&attr) - || pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) - || pthread_mutex_init(&m, &attr)); - } -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - acx_pthreads_recursive=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -acx_pthreads_recursive=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - - if test "$acx_pthreads_recursive" = "yes"; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_PTHREAD_MUTEX_RECURSIVE 1 -_ACEOF - - fi - { echo "$as_me:$LINENO: result: $acx_pthreads_recursive" >&5 -echo "${ECHO_T}$acx_pthreads_recursive" >&6; } - - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: must compile with cc_r - # Extract the first word of "cc_r", so it can be a program name with args. -set dummy cc_r; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PTHREAD_CC="cc_r" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_PTHREAD_CC" && ac_cv_prog_PTHREAD_CC="${CC}" -fi -fi -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { echo "$as_me:$LINENO: result: $PTHREAD_CC" >&5 -echo "${ECHO_T}$PTHREAD_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - -else - case $host in - *-*-mingw32*) - { echo "$as_me:$LINENO: result: MINGW32: use windows threading library!" >&5 -echo "${ECHO_T}MINGW32: use windows threading library!" >&6; } - ;; - *) - { { echo "$as_me:$LINENO: error: Cannot find a working pthread configuration. If you think this is wrong, please review acx_pthread.m4 and report the problem" >&5 -echo "$as_me: error: Cannot find a working pthread configuration. If you think this is wrong, please review acx_pthread.m4 and report the problem" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - PTHREAD_CC="$CC" -fi - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_PTHREAD 1 -_ACEOF - - : -else - acx_pthread_ok=no - -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - LIBS="$PTHREAD_LIBS $LIBS" - CXXFLAGS="$PTHREAD_CFLAGS $CXXFLAGS" - CC="$PTHREAD_CC" - echo "enabled multithreading" -else - -cat >>confdefs.h <<\_ACEOF -#define DISABLE_MULTITHREADING 1 -_ACEOF - - echo "disabled multithreading" -fi - -# Check whether --enable-gprof was given. -if test "${enable_gprof+set}" = set; then - enableval=$enable_gprof; enable_gprof=yes -else - enable_gprof=no -fi - -if test $enable_gprof = yes; then - CXXFLAGS="-pg $CPPFLAGS" - LDFLAGS="-pg $LDFLAGS" - echo "enabled gprof" -fi - -# Extract the first word of "doxygen", so it can be a program name with args. -set dummy doxygen; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_DOXYGEN+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$DOXYGEN"; then - ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DOXYGEN="true" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_DOXYGEN" && ac_cv_prog_DOXYGEN="false" -fi -fi -DOXYGEN=$ac_cv_prog_DOXYGEN -if test -n "$DOXYGEN"; then - { echo "$as_me:$LINENO: result: $DOXYGEN" >&5 -echo "${ECHO_T}$DOXYGEN" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -if test $DOXYGEN = false; then - { echo "$as_me:$LINENO: WARNING: *** doxygen not found, docs will not be available" >&5 -echo "$as_me: WARNING: *** doxygen not found, docs will not be available" >&2;} - enable_doxygen=no -else - enable_doxygen=yes - # Extract the first word of "dot", so it can be a program name with args. -set dummy dot; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_DOT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$DOT"; then - ac_cv_prog_DOT="$DOT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DOT="true" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_DOT" && ac_cv_prog_DOT="false" -fi -fi -DOT=$ac_cv_prog_DOT -if test -n "$DOT"; then - { echo "$as_me:$LINENO: result: $DOT" >&5 -echo "${ECHO_T}$DOT" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - if test $DOT = false; then - enable_dot = no; - { echo "$as_me:$LINENO: WARNING: *** dot not found, graphs will not be available" >&5 -echo "$as_me: WARNING: *** dot not found, graphs will not be available" >&2;} - else - enable_dot = yes; - fi -fi - - - - - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - - - - - - -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 -echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include <$ac_hdr> - -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF - -ac_header_dirent=$ac_hdr; break -fi - -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - { echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' dir; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_opendir=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then - : -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -else - { echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' x; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_opendir=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then - : -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -fi - -{ echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5 -echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6; } -if test "${ac_cv_header_stat_broken+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -#if defined S_ISBLK && defined S_IFDIR -extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; -#endif - -#if defined S_ISBLK && defined S_IFCHR -extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; -#endif - -#if defined S_ISLNK && defined S_IFREG -extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; -#endif - -#if defined S_ISSOCK && defined S_IFREG -extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; -#endif - -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stat_broken=no -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stat_broken=yes -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5 -echo "${ECHO_T}$ac_cv_header_stat_broken" >&6; } -if test $ac_cv_header_stat_broken = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STAT_MACROS_BROKEN 1 -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 -echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; } -if test "${ac_cv_header_time+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_time=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_time=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 -echo "${ECHO_T}$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then - -cat >>confdefs.h <<\_ACEOF -#define TIME_WITH_SYS_TIME 1 -_ACEOF - -fi - - -{ echo "$as_me:$LINENO: checking whether the compiler implements namespaces" >&5 -echo $ECHO_N "checking whether the compiler implements namespaces... $ECHO_C" >&6; } -if test "${ac_cv_cxx_namespaces+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -namespace Outer { namespace Inner { int i = 0; }} -int -main () -{ -using namespace Outer::Inner; return i; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_cxx_namespaces=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_cxx_namespaces=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_namespaces" >&5 -echo "${ECHO_T}$ac_cv_cxx_namespaces" >&6; } -if test "$ac_cv_cxx_namespaces" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_NAMESPACES -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking whether the compiler supports Standard Template Library" >&5 -echo $ECHO_N "checking whether the compiler supports Standard Template Library... $ECHO_C" >&6; } -if test "${ac_cv_cxx_have_stl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#ifdef HAVE_NAMESPACES -using namespace std; -#endif -int -main () -{ -list x; x.push_back(5); -list::iterator iter = x.begin(); if (iter != x.end()) ++iter; return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_cxx_have_stl=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_cxx_have_stl=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_have_stl" >&5 -echo "${ECHO_T}$ac_cv_cxx_have_stl" >&6; } -if test "$ac_cv_cxx_have_stl" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_STL -_ACEOF - -fi - - -{ echo "$as_me:$LINENO: checking for a functioning wctype.h header" >&5 -echo $ECHO_N "checking for a functioning wctype.h header... $ECHO_C" >&6; } -if test "${ac_cv_cxx_have_wctype_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - if test "$cross_compiling" = yes; then - ac_cv_cxx_have_wctype_h=no -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - int main(void){ int x=iswalnum(100); return 0;} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_cxx_have_wctype_h=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_cxx_have_wctype_h=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_have_wctype_h" >&5 -echo "${ECHO_T}$ac_cv_cxx_have_wctype_h" >&6; } -if test "$ac_cv_cxx_have_wctype_h" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_WCTYPE_H -_ACEOF - -fi - - - - - - - - -for ac_header in algorithm functional map vector list set -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -else - { { echo "$as_me:$LINENO: error: A required C++ header file is not found." >&5 -echo "$as_me: error: A required C++ header file is not found." >&2;} - { (exit 1); exit 1; }; } -fi - -done - - - -for ac_header in math.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -else - { { echo "$as_me:$LINENO: error: A required C header file is not found." >&5 -echo "$as_me: error: A required C header file is not found." >&2;} - { (exit 1); exit 1; }; } -fi - -done - - - - - - - - - - - - - - - -for ac_header in hash_map hash_set ext/hash_map ext/hash_set stdarg.h sys/timeb.h wchar.h tchar.h errno.h fcntl.h ctype.h inttypes.h sys/types.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -cat >>confdefs.h <<\_ACEOF -#define HAVE_STDEXCEPT -_ACEOF - - - - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 -echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; } -if test "${ac_cv_sys_largefile_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_largefile_CC=' -n32'; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 -echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; } -if test "${ac_cv_sys_file_offset_bits+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_file_offset_bits=no; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_file_offset_bits=64; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 -echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -f conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 -echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; } -if test "${ac_cv_sys_large_files+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_large_files=no; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_large_files=1; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 -echo "${ECHO_T}$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -f conftest* - fi -fi - - -{ echo "$as_me:$LINENO: checking for working strtod" >&5 -echo $ECHO_N "checking for working strtod... $ECHO_C" >&6; } -if test "${ac_cv_func_strtod+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_strtod=no -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -$ac_includes_default -#ifndef strtod -double strtod (); -#endif -int -main() -{ - { - /* Some versions of Linux strtod mis-parse strings with leading '+'. */ - char *string = " +69"; - char *term; - double value; - value = strtod (string, &term); - if (value != 69 || term != (string + 4)) - return 1; - } - - { - /* Under Solaris 2.4, strtod returns the wrong value for the - terminating character under some conditions. */ - char *string = "NaN"; - char *term; - strtod (string, &term); - if (term != string && *(term - 1) == 0) - return 1; - } - return 0; -} - -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_strtod=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_strtod=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_strtod" >&5 -echo "${ECHO_T}$ac_cv_func_strtod" >&6; } -if test $ac_cv_func_strtod = no; then - case " $LIBOBJS " in - *" strtod.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strtod.$ac_objext" - ;; -esac - -{ echo "$as_me:$LINENO: checking for pow" >&5 -echo $ECHO_N "checking for pow... $ECHO_C" >&6; } -if test "${ac_cv_func_pow+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define pow to an innocuous variant, in case declares pow. - For example, HP-UX 11i declares gettimeofday. */ -#define pow innocuous_pow - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char pow (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef pow - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pow (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_pow || defined __stub___pow -choke me -#endif - -int -main () -{ -return pow (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_pow=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_pow=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_pow" >&5 -echo "${ECHO_T}$ac_cv_func_pow" >&6; } - -if test $ac_cv_func_pow = no; then - { echo "$as_me:$LINENO: checking for pow in -lm" >&5 -echo $ECHO_N "checking for pow in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_pow+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pow (); -int -main () -{ -return pow (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_pow=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_m_pow=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_pow" >&5 -echo "${ECHO_T}$ac_cv_lib_m_pow" >&6; } -if test $ac_cv_lib_m_pow = yes; then - POW_LIB=-lm -else - { echo "$as_me:$LINENO: WARNING: cannot find library containing definition of pow" >&5 -echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} -fi - -fi - -fi - - -{ echo "$as_me:$LINENO: checking whether the compiler implements namespaces" >&5 -echo $ECHO_N "checking whether the compiler implements namespaces... $ECHO_C" >&6; } -if test "${ac_cv_cxx_namespaces+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -namespace Outer { namespace Inner { int i = 0; }} -int -main () -{ -using namespace Outer::Inner; return i; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_cxx_namespaces=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_cxx_namespaces=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_namespaces" >&5 -echo "${ECHO_T}$ac_cv_cxx_namespaces" >&6; } -if test "$ac_cv_cxx_namespaces" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_NAMESPACES -_ACEOF - -fi - - - - -{ echo "$as_me:$LINENO: checking whether ${CXX} supports function try blocks" >&5 -echo $ECHO_N "checking whether ${CXX} supports function try blocks... $ECHO_C" >&6; } -if test "${mdl_cv_have_function_try_blocks+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -void foo() try{} catch( ... ){} -int -main () -{ -foo(); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - mdl_cv_have_function_try_blocks=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - mdl_cv_have_function_try_blocks=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -fi - -{ echo "$as_me:$LINENO: result: $mdl_cv_have_function_try_blocks" >&5 -echo "${ECHO_T}$mdl_cv_have_function_try_blocks" >&6; } -if test "$mdl_cv_have_function_try_blocks" = no; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_NO_FUNCTION_TRY_BLOCKS -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking whether the compiler supports ISO C++ standard library" >&5 -echo $ECHO_N "checking whether the compiler supports ISO C++ standard library... $ECHO_C" >&6; } -if test "${ac_cv_cxx_have_std+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -#ifdef HAVE_NAMESPACES -using namespace std; -#endif -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_cxx_have_std=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_cxx_have_std=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_have_std" >&5 -echo "${ECHO_T}$ac_cv_cxx_have_std" >&6; } -if test "$ac_cv_cxx_have_std" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_STD -_ACEOF - -fi - - -case "$host" in - *cygwin*) - -for ac_func in mmap -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - ;; - *) - - -for ac_header in stdlib.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_func in getpagesize -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -{ echo "$as_me:$LINENO: checking for working mmap" >&5 -echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_mmap_fixed_mapped=no -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -/* malloc might have been renamed as rpl_malloc. */ -#undef malloc - -/* Thanks to Mike Haertel and Jim Avera for this test. - Here is a matrix of mmap possibilities: - mmap private not fixed - mmap private fixed at somewhere currently unmapped - mmap private fixed at somewhere already mapped - mmap shared not fixed - mmap shared fixed at somewhere currently unmapped - mmap shared fixed at somewhere already mapped - For private mappings, we should verify that changes cannot be read() - back from the file, nor mmap's back from the file at a different - address. (There have been systems where private was not correctly - implemented like the infamous i386 svr4.0, and systems where the - VM page cache was not coherent with the file system buffer cache - like early versions of FreeBSD and possibly contemporary NetBSD.) - For shared mappings, we should conversely verify that changes get - propagated back to all the places they're supposed to be. - - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ - -#include -#include - -#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H -char *malloc (); -#endif - -/* This mess was copied from the GNU getpagesize.h. */ -#ifndef HAVE_GETPAGESIZE -/* Assume that all systems that can run configure have sys/param.h. */ -# ifndef HAVE_SYS_PARAM_H -# define HAVE_SYS_PARAM_H 1 -# endif - -# ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ -# ifdef HAVE_SYS_PARAM_H -# include -# ifdef EXEC_PAGESIZE -# define getpagesize() EXEC_PAGESIZE -# else /* no EXEC_PAGESIZE */ -# ifdef NBPG -# define getpagesize() NBPG * CLSIZE -# ifndef CLSIZE -# define CLSIZE 1 -# endif /* no CLSIZE */ -# else /* no NBPG */ -# ifdef NBPC -# define getpagesize() NBPC -# else /* no NBPC */ -# ifdef PAGESIZE -# define getpagesize() PAGESIZE -# endif /* PAGESIZE */ -# endif /* no NBPC */ -# endif /* no NBPG */ -# endif /* no EXEC_PAGESIZE */ -# else /* no HAVE_SYS_PARAM_H */ -# define getpagesize() 8192 /* punt totally */ -# endif /* no HAVE_SYS_PARAM_H */ -# endif /* no _SC_PAGESIZE */ - -#endif /* no HAVE_GETPAGESIZE */ - -int -main () -{ - char *data, *data2, *data3; - int i, pagesize; - int fd; - - pagesize = getpagesize (); - - /* First, make a file with some known garbage in it. */ - data = (char *) malloc (pagesize); - if (!data) - return 1; - for (i = 0; i < pagesize; ++i) - *(data + i) = rand (); - umask (0); - fd = creat ("conftest.mmap", 0600); - if (fd < 0) - return 1; - if (write (fd, data, pagesize) != pagesize) - return 1; - close (fd); - - /* Next, try to mmap the file at a fixed address which already has - something else allocated at it. If we can, also make sure that - we see the same garbage. */ - fd = open ("conftest.mmap", O_RDWR); - if (fd < 0) - return 1; - data2 = (char *) malloc (2 * pagesize); - if (!data2) - return 1; - data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); - if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED, fd, 0L)) - return 1; - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data2 + i)) - return 1; - - /* Finally, make sure that changes to the mapped area do not - percolate back to the file as seen by read(). (This is a bug on - some variants of i386 svr4.0.) */ - for (i = 0; i < pagesize; ++i) - *(data2 + i) = *(data2 + i) + 1; - data3 = (char *) malloc (pagesize); - if (!data3) - return 1; - if (read (fd, data3, pagesize) != pagesize) - return 1; - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data3 + i)) - return 1; - close (fd); - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_mmap_fixed_mapped=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_mmap_fixed_mapped=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } -if test $ac_cv_func_mmap_fixed_mapped = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP 1 -_ACEOF - -fi -rm -f conftest.mmap - - ;; -esac - -if test $enable_ascii = yes; then - - - - -for ac_func in strupr strlwr lltoa strtoll -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -else - - - - - - - - - - - - - - - -for ac_func in wcscpy wcsupr wcsncpy wcscasecmp wcsicmp wcscat wcschr wcstoll lltow wcstod wcsstr wcslen wcscmp wcsncmp wcscspn -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - fi - - -for ac_func in tell _filelength -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - - - -for ac_func in printf snprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else - { { echo "$as_me:$LINENO: error: A required function is not found." >&5 -echo "$as_me: error: A required function is not found." >&2;} - { (exit 1); exit 1; }; } -fi -done - - -{ echo "$as_me:$LINENO: checking whether swprintf is broken" >&5 -echo $ECHO_N "checking whether swprintf is broken... $ECHO_C" >&6; } - if test "${dps_cv_swprintf_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - dps_cv_swprintf_works=2 - -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - #include - #include - - int main(void) - { - wchar_t buf[5]; - swprintf(buf,5,L"%s",L"foo"); - if ( wcslen(buf) != 3 ) - exit(1); - exit(0); - } - -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - dps_cv_swprintf_works=0 -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -dps_cv_swprintf_works=1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - -fi - - if test $dps_cv_swprintf_works -eq 0; then - { echo "$as_me:$LINENO: result: no, swprintf is ok" >&5 -echo "${ECHO_T}no, swprintf is ok" >&6; } - elif test $dps_cv_swprintf_works -eq 1; then - { echo "$as_me:$LINENO: result: yes, swprintf is broken" >&5 -echo "${ECHO_T}yes, swprintf is broken" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SWPRINTF_BUG -_ACEOF - - else - { echo "$as_me:$LINENO: result: unknown, assuming yes" >&5 -echo "${ECHO_T}unknown, assuming yes" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SWPRINTF_BUG -_ACEOF - - fi - -{ echo "$as_me:$LINENO: checking whether snprintf ignores n" >&5 -echo $ECHO_N "checking whether snprintf ignores n... $ECHO_C" >&6; } - if test "${dps_cv_snprintf_bug+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - dps_cv_snprintf_bug=2 - -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - #include - - #ifndef HAVE_SNPRINTF - #ifdef HAVE_VSNPRINTF - #include "vsnprintf.h" - #else /* not HAVE_VSNPRINTF */ - #include "vsnprintf.c" - #endif /* HAVE_VSNPRINTF */ - #endif /* HAVE_SNPRINTF */ - - int main(void) - { - char ovbuf[7]; - int i; - for (i=0; i<7; i++) ovbuf[i]='x'; - snprintf(ovbuf, 4,"foo%s", "bar"); - if (ovbuf[5]!='x') exit(1); - snprintf(ovbuf, 4,"foo%d", 666); - if (ovbuf[5]!='x') exit(1); - exit(0); - } - -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - dps_cv_snprintf_bug=0 -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -dps_cv_snprintf_bug=1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - -fi - - if test $dps_cv_snprintf_bug -eq 0; then - { echo "$as_me:$LINENO: result: no, snprintf is ok" >&5 -echo "${ECHO_T}no, snprintf is ok" >&6; } - elif test $dps_cv_snprintf_bug -eq 1; then - { echo "$as_me:$LINENO: result: yes, snprintf is broken" >&5 -echo "${ECHO_T}yes, snprintf is broken" >&6; } - cat >>confdefs.h <<\_ACEOF -#define HAVE_SNPRINTF_BUG Defined if the snprintf overflow test fails -_ACEOF - - else - { echo "$as_me:$LINENO: result: unknown, assuming yes" >&5 -echo "${ECHO_T}unknown, assuming yes" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SNPRINTF_BUG -_ACEOF - - fi - - -{ echo "$as_me:$LINENO: checking whether ${CXX} supports our byte<->float conversions" >&5 -echo $ECHO_N "checking whether ${CXX} supports our byte<->float conversions... $ECHO_C" >&6; } - if test "${mdl_cv_have_float_byte_support+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - dps_float_byte_fail=2 - -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - - typedef long double float_t; - typedef long int32_t; - typedef char uint8_t; - - //float to bits conversion utilities... - union clvalue { - int32_t i; - float f; //must use a float type, else types dont match up - }; - - int32_t floatToIntBits(float_t value) - { - clvalue u; - int32_t e, f; - u.f = value; - e = u.i & 0x7f800000; - f = u.i & 0x007fffff; - - if (e == 0x7f800000 && f != 0) - u.i = 0x7fc00000; - - return u.i; - } - float_t intBitsToFloat(int32_t bits) - { - clvalue u; - u.i = bits; - return u.f; - } - - float_t byteToFloat(uint8_t b) { - if (b == 0) // zero is a special case - return 0.0f; - int32_t mantissa = b & 7; - int32_t exponent = (b >> 3) & 31; - int32_t bits = ((exponent+(63-15)) << 24) | (mantissa << 21); - return intBitsToFloat(bits); - } - - uint8_t floatToByte(float_t f) { - if (f < 0.0f) // round negatives up to zero - f = 0.0f; - - if (f == 0.0f) // zero is a special case - return 0; - - int32_t bits = floatToIntBits(f); // parse float_t into parts - int32_t mantissa = (bits & 0xffffff) >> 21; - int32_t exponent = (((bits >> 24) & 0x7f) - 63) + 15; - - if (exponent > 31) { // overflow: use max value - exponent = 31; - mantissa = 7; - } - - if (exponent < 0) { // underflow: use min value - exponent = 0; - mantissa = 1; - } - - return (uint8_t)((exponent << 3) | mantissa); // pack into a uint8_t - } - - int main(void) - { - //well know conversion - if ( floatToByte(0.5f) != 120 ) - return 1; - - //converting back works? - if ( floatToByte(byteToFloat(57)) != 57 ) - return 1; - - return 0; - } - - -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - dps_float_byte_fail=0 -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -dps_float_byte_fail=1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - -fi - - - if test $dps_float_byte_fail -eq 0; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - elif test $dps_float_byte_fail -eq 1; then - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define HAVE_NO_FLOAT_BYTE -_ACEOF - - else - { echo "$as_me:$LINENO: result: unknown, assuming broken" >&5 -echo "${ECHO_T}unknown, assuming broken" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define HAVE_NO_FLOAT_BYTE -_ACEOF - - fi - - - -{ echo "$as_me:$LINENO: checking whether ${CXX} supports static const definitions in classes" >&5 -echo $ECHO_N "checking whether ${CXX} supports static const definitions in classes... $ECHO_C" >&6; } - if test "${dps_static_const_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "$cross_compiling" = yes; then - dps_static_const_type=0 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -class x{public: static const int SCI=55; }; int main(){ x a; if ( a.SCI!=55 ) throw "err"; } -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - dps_static_const_type=1 -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -dps_static_const_type=0 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - - if test $dps_static_const_type -eq 0; then - if test "$cross_compiling" = yes; then - dps_static_const_type=0 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -class x{public: enum{ SCI=55 }; }; int main(){ x a; if ( a.SCI!=55 ) throw "err"; } -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - dps_static_const_type=2 -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -dps_static_const_type=0 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - fi - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -fi - - if test $dps_static_const_type -eq 1; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define LUCENE_STATIC_CONSTANT_SYNTAX 1 -_ACEOF - - elif test $dps_static_const_type -eq 2; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define LUCENE_STATIC_CONSTANT_SYNTAX 2 -_ACEOF - - else - { { echo "$as_me:$LINENO: error: Cannot figure out how to write static consts in classes. Check the m4 script or upgrade your compiler" >&5 -echo "$as_me: error: Cannot figure out how to write static consts in classes. Check the m4 script or upgrade your compiler" >&2;} - { (exit 1); exit 1; }; } - fi - - - -if test $dps_cv_snprintf_bug -eq 0; then - if test $dps_cv_swprintf_works -eq 0; then - - - -for ac_func in wprintf snwprintf vsnwprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - fi -fi - - - - - -{ echo "$as_me:$LINENO: checking for uint64_t" >&5 -echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6; } -if test "${ac_cv_type_uint64_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef uint64_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uint64_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uint64_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint64_t" >&6; } -if test $ac_cv_type_uint64_t = yes; then - : -else - - { echo "$as_me:$LINENO: trying to find a suitable 8-byte replacement for uint64_t" >&5 -echo "$as_me: trying to find a suitable 8-byte replacement for uint64_t" >&6;} - uint64_t=no - find_uint64_t () - { - - - { echo "$as_me:$LINENO: checking for unsigned long long" >&5 -echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6; } -if test "${ac_cv_type_unsigned_long_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef unsigned long long ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_unsigned_long_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_unsigned_long_long=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5 -echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of unsigned long long" >&5 -echo $ECHO_N "checking size of unsigned long long... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_unsigned_long_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_unsigned_long_long=$ac_lo;; -'') if test "$ac_cv_type_unsigned_long_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned long long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_long_long=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long long ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_unsigned_long_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_unsigned_long_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned long long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_long_long=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_long_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_unsigned_long_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long -_ACEOF - - - if test "$ac_cv_sizeof_unsigned_long_long" -eq 8; then - uint64_t="unsigned long long" - return - fi - - - { echo "$as_me:$LINENO: checking for unsigned __int64" >&5 -echo $ECHO_N "checking for unsigned __int64... $ECHO_C" >&6; } -if test "${ac_cv_type_unsigned___int64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef unsigned __int64 ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_unsigned___int64=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_unsigned___int64=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned___int64" >&5 -echo "${ECHO_T}$ac_cv_type_unsigned___int64" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of unsigned __int64" >&5 -echo $ECHO_N "checking size of unsigned __int64... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_unsigned___int64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned __int64 ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned __int64 ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned __int64 ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned __int64 ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned __int64 ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_unsigned___int64=$ac_lo;; -'') if test "$ac_cv_type_unsigned___int64" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned __int64) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned __int64) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned___int64=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned __int64 ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_unsigned___int64=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_unsigned___int64" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned __int64) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned __int64) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned___int64=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned___int64" >&5 -echo "${ECHO_T}$ac_cv_sizeof_unsigned___int64" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED___INT64 $ac_cv_sizeof_unsigned___int64 -_ACEOF - - - if test "$ac_cv_sizeof_unsigned___int64" -eq 8; then - uint64_t="unsigned __int64" - return - fi - - - { echo "$as_me:$LINENO: checking for unsigned long" >&5 -echo $ECHO_N "checking for unsigned long... $ECHO_C" >&6; } -if test "${ac_cv_type_unsigned_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef unsigned long ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_unsigned_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_unsigned_long=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long" >&5 -echo "${ECHO_T}$ac_cv_type_unsigned_long" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of unsigned long" >&5 -echo $ECHO_N "checking size of unsigned long... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_unsigned_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_unsigned_long=$ac_lo;; -'') if test "$ac_cv_type_unsigned_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_long=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_unsigned_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_unsigned_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_long=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_unsigned_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long -_ACEOF - - - if test "$ac_cv_sizeof_unsigned_long" -eq 8; then - uint64_t="unsigned long" - return - fi - - - - - - - - - : - } - find_uint64_t - -cat >>confdefs.h <<_ACEOF -#define uint64_t $uint64_t -_ACEOF - - -fi - - -if test "$uint64_t" = no; then - { { echo "$as_me:$LINENO: error: unable to continue without an unsigned 64-bit datatype" >&5 -echo "$as_me: error: unable to continue without an unsigned 64-bit datatype" >&2;} - { (exit 1); exit 1; }; } -fi - - - -{ echo "$as_me:$LINENO: checking for uint32_t" >&5 -echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6; } -if test "${ac_cv_type_uint32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef uint32_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uint32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uint32_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint32_t" >&6; } -if test $ac_cv_type_uint32_t = yes; then - : -else - - { echo "$as_me:$LINENO: trying to find a suitable 4-byte replacement for uint32_t" >&5 -echo "$as_me: trying to find a suitable 4-byte replacement for uint32_t" >&6;} - uint32_t=no - find_uint32_t () - { - - - { echo "$as_me:$LINENO: checking for unsigned int" >&5 -echo $ECHO_N "checking for unsigned int... $ECHO_C" >&6; } -if test "${ac_cv_type_unsigned_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef unsigned int ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_unsigned_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_unsigned_int=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_int" >&5 -echo "${ECHO_T}$ac_cv_type_unsigned_int" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of unsigned int" >&5 -echo $ECHO_N "checking size of unsigned int... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_unsigned_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned int ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned int ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned int ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned int ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned int ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_unsigned_int=$ac_lo;; -'') if test "$ac_cv_type_unsigned_int" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned int) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned int) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_int=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned int ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_unsigned_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_unsigned_int" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned int) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned int) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_int=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_unsigned_int" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int -_ACEOF - - - if test "$ac_cv_sizeof_unsigned_int" -eq 4; then - uint32_t="unsigned int" - return - fi - - - { echo "$as_me:$LINENO: checking for unsigned long" >&5 -echo $ECHO_N "checking for unsigned long... $ECHO_C" >&6; } -if test "${ac_cv_type_unsigned_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef unsigned long ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_unsigned_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_unsigned_long=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long" >&5 -echo "${ECHO_T}$ac_cv_type_unsigned_long" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of unsigned long" >&5 -echo $ECHO_N "checking size of unsigned long... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_unsigned_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_unsigned_long=$ac_lo;; -'') if test "$ac_cv_type_unsigned_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_long=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned long ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_unsigned_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_unsigned_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_long=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_unsigned_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long -_ACEOF - - - if test "$ac_cv_sizeof_unsigned_long" -eq 4; then - uint32_t="unsigned long" - return - fi - - - - - - - : - } - find_uint32_t - -cat >>confdefs.h <<_ACEOF -#define uint32_t $uint32_t -_ACEOF - - -fi - - -if test "$uint32_t" = no; then - { { echo "$as_me:$LINENO: error: unable to continue without an unsigned 32-bit datatype" >&5 -echo "$as_me: error: unable to continue without an unsigned 32-bit datatype" >&2;} - { (exit 1); exit 1; }; } -fi - - - -{ echo "$as_me:$LINENO: checking for uint8_t" >&5 -echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6; } -if test "${ac_cv_type_uint8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef uint8_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uint8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uint8_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint8_t" >&6; } -if test $ac_cv_type_uint8_t = yes; then - : -else - - { echo "$as_me:$LINENO: trying to find a suitable 1-byte replacement for uint8_t" >&5 -echo "$as_me: trying to find a suitable 1-byte replacement for uint8_t" >&6;} - uint8_t=no - find_uint8_t () - { - - - { echo "$as_me:$LINENO: checking for unsigned char" >&5 -echo $ECHO_N "checking for unsigned char... $ECHO_C" >&6; } -if test "${ac_cv_type_unsigned_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef unsigned char ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_unsigned_char=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_unsigned_char=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_char" >&5 -echo "${ECHO_T}$ac_cv_type_unsigned_char" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of unsigned char" >&5 -echo $ECHO_N "checking size of unsigned char... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_unsigned_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_unsigned_char=$ac_lo;; -'') if test "$ac_cv_type_unsigned_char" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned char) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned char) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_char=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef unsigned char ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_unsigned_char=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_unsigned_char" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned char) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (unsigned char) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_unsigned_char=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_char" >&5 -echo "${ECHO_T}$ac_cv_sizeof_unsigned_char" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_CHAR $ac_cv_sizeof_unsigned_char -_ACEOF - - - if test "$ac_cv_sizeof_unsigned_char" -eq 1; then - uint8_t="unsigned char" - return - fi - - - - - : - } - find_uint8_t - -cat >>confdefs.h <<_ACEOF -#define uint8_t $uint8_t -_ACEOF - - -fi - - -if test "$uint8_t" = no; then - { { echo "$as_me:$LINENO: error: unable to continue without an unsigned 8-bit datatype" >&5 -echo "$as_me: error: unable to continue without an unsigned 8-bit datatype" >&2;} - { (exit 1); exit 1; }; } -fi - -{ echo "$as_me:$LINENO: checking for float_t" >&5 -echo $ECHO_N "checking for float_t... $ECHO_C" >&6; } -if test "${ac_cv_type_float_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -typedef float_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_float_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_float_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_float_t" >&5 -echo "${ECHO_T}$ac_cv_type_float_t" >&6; } -if test $ac_cv_type_float_t = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_FLOAT_T 1 -_ACEOF - - -fi - - -{ echo "$as_me:$LINENO: checking for wchar_t" >&5 -echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6; } -if test "${ac_cv_type_wchar_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef wchar_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_wchar_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_wchar_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_wchar_t" >&5 -echo "${ECHO_T}$ac_cv_type_wchar_t" >&6; } -if test $ac_cv_type_wchar_t = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_WCHAR_T 1 -_ACEOF - - -fi -{ echo "$as_me:$LINENO: checking for intptr_t" >&5 -echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6; } -if test "${ac_cv_type_intptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef intptr_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_intptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_intptr_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_intptr_t" >&6; } -if test $ac_cv_type_intptr_t = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_INTPTR_T 1 -_ACEOF - - -fi - - - -{ echo "$as_me:$LINENO: checking for library containing nanosleep" >&5 -echo $ECHO_N "checking for library containing nanosleep... $ECHO_C" >&6; } -if test "${ac_cv_search_nanosleep+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char nanosleep (); -int -main () -{ -return nanosleep (); - ; - return 0; -} -_ACEOF -for ac_lib in '' rt; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_nanosleep=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_nanosleep+set}" = set; then - break -fi -done -if test "${ac_cv_search_nanosleep+set}" = set; then - : -else - ac_cv_search_nanosleep=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_nanosleep" >&5 -echo "${ECHO_T}$ac_cv_search_nanosleep" >&6; } -ac_res=$ac_cv_search_nanosleep -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -cat >>confdefs.h <<\_ACEOF -#define HAVE_NANOSLEEP 1 -_ACEOF - -fi - - - - - - -ac_config_files="$ac_config_files Makefile src/Makefile src/demo/Makefile doc/Makefile win32/Makefile test/Makefile test/data/Makefile" - - -ac_config_files="$ac_config_files Doxyfile doc/helpheader.htm" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 - -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2006 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -# -# INIT-COMMANDS -# -PACKAGE="$PACKAGE" -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h.tmp") CONFIG_HEADERS="$CONFIG_HEADERS config.h.tmp" ;; - "src/CLucene/clucene-config.h") CONFIG_COMMANDS="$CONFIG_COMMANDS src/CLucene/clucene-config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "src/demo/Makefile") CONFIG_FILES="$CONFIG_FILES src/demo/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "win32/Makefile") CONFIG_FILES="$CONFIG_FILES win32/Makefile" ;; - "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; - "test/data/Makefile") CONFIG_FILES="$CONFIG_FILES test/data/Makefile" ;; - "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; - "doc/helpheader.htm") CONFIG_FILES="$CONFIG_FILES doc/helpheader.htm" ;; - - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then - -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -CLLIB_VERSION!$CLLIB_VERSION$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -CYGPATH_W!$CYGPATH_W$ac_delim -PACKAGE!$PACKAGE$ac_delim -VERSION!$VERSION$ac_delim -ACLOCAL!$ACLOCAL$ac_delim -AUTOCONF!$AUTOCONF$ac_delim -AUTOMAKE!$AUTOMAKE$ac_delim -AUTOHEADER!$AUTOHEADER$ac_delim -MAKEINFO!$MAKEINFO$ac_delim -install_sh!$install_sh$ac_delim -STRIP!$STRIP$ac_delim -INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -mkdir_p!$mkdir_p$ac_delim -AWK!$AWK$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -am__leading_dot!$am__leading_dot$ac_delim -AMTAR!$AMTAR$ac_delim -am__tar!$am__tar$ac_delim -am__untar!$am__untar$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -DEPDIR!$DEPDIR$ac_delim -am__include!$am__include$ac_delim -am__quote!$am__quote$ac_delim -AMDEP_TRUE!$AMDEP_TRUE$ac_delim -AMDEP_FALSE!$AMDEP_FALSE$ac_delim -AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -CCDEPMODE!$CCDEPMODE$ac_delim -am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -CXX!$CXX$ac_delim -CXXFLAGS!$CXXFLAGS$ac_delim -ac_ct_CXX!$ac_ct_CXX$ac_delim -CXXDEPMODE!$CXXDEPMODE$ac_delim -am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim -am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim -build!$build$ac_delim -build_cpu!$build_cpu$ac_delim -build_vendor!$build_vendor$ac_delim -build_os!$build_os$ac_delim -host!$host$ac_delim -host_cpu!$host_cpu$ac_delim -host_vendor!$host_vendor$ac_delim -host_os!$host_os$ac_delim -SED!$SED$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -LN_S!$LN_S$ac_delim -ECHO!$ECHO$ac_delim -AR!$AR$ac_delim -RANLIB!$RANLIB$ac_delim -DSYMUTIL!$DSYMUTIL$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -CEOF$ac_eof -_ACEOF - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -NMEDIT!$NMEDIT$ac_delim -CPP!$CPP$ac_delim -CXXCPP!$CXXCPP$ac_delim -F77!$F77$ac_delim -FFLAGS!$FFLAGS$ac_delim -ac_ct_F77!$ac_ct_F77$ac_delim -LIBTOOL!$LIBTOOL$ac_delim -acx_pthread_config!$acx_pthread_config$ac_delim -PTHREAD_CC!$PTHREAD_CC$ac_delim -PTHREAD_LIBS!$PTHREAD_LIBS$ac_delim -PTHREAD_CFLAGS!$PTHREAD_CFLAGS$ac_delim -DOXYGEN!$DOXYGEN$ac_delim -DOT!$DOT$ac_delim -enable_doxygen!$enable_doxygen$ac_delim -enable_dot!$enable_dot$ac_delim -POW_LIB!$POW_LIB$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 18; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof -_ACEOF - - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF -fi # test -n "$CONFIG_FILES" - - -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - ac_file_inputs="$ac_file_inputs $ac_f" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - fi - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p -' $ac_file_inputs` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac - ;; - :H) - # - # CONFIG_HEADER - # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail - -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF - if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f $ac_file - mv "$tmp/config.h" $ac_file - fi - else - echo "/* $configure_input */" - cat "$ac_result" - fi - rm -f "$tmp/out12" -# Compute $ac_file's index in $config_headers. -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $ac_file | $ac_file:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| . 2>/dev/null || -echo X$ac_file | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "src/CLucene/clucene-config.h":C) ac_prefix_conf_OUT=`printf '%s\n' src/CLucene/clucene-config.h` -ac_prefix_conf_DEF=`printf '%s\n' _$ac_prefix_conf_OUT | sed -e "y:abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:" -e "s/[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g"` -ac_prefix_conf_PKG=`printf '%s\n' _CL` -ac_prefix_conf_LOW=`printf '%s\n' _$ac_prefix_conf_PKG | sed -e "y:ABCDEFGHIJKLMNOPQRSTUVWXYZ-:abcdefghijklmnopqrstuvwxyz_:"` -ac_prefix_conf_UPP=`printf '%s\n' $ac_prefix_conf_PKG | sed -e "y:abcdefghijklmnopqrstuvwxyz-:ABCDEFGHIJKLMNOPQRSTUVWXYZ_:" -e "/^[0123456789]/s/^/_/"` -ac_prefix_conf_IGN="_ASCII _UCS2 _DEBUG _FILE_OFFSET_BITS _LARGE_FILES uint32_t uint64_t uint8_t int32_t int64_t LUCENE_STATIC_CONSTANT" -ac_prefix_conf_INP=`printf '%s\n' "config.h.tmp" | sed -e 's/ *//'` -if test ".$ac_prefix_conf_INP" = "."; then - for ac_file in : $CONFIG_HEADERS; do test "_$ac_file" = _: && continue - case "$ac_file" in - *.h) ac_prefix_conf_INP=$ac_file ;; - *) - esac - test ".$ac_prefix_conf_INP" != "." && break - done -fi -if test ".$ac_prefix_conf_INP" = "."; then - case "$ac_prefix_conf_OUT" in - */*) ac_prefix_conf_INP=`basename "$ac_prefix_conf_OUT"` - ;; - *-*) ac_prefix_conf_INP=`printf '%s\n' "$ac_prefix_conf_OUT" | sed -e "s/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*-//"` - ;; - *) ac_prefix_conf_INP=config.h - ;; - esac -fi -if test -z "$ac_prefix_conf_PKG" ; then - { { echo "$as_me:$LINENO: error: no prefix for _PREFIX_PKG_CONFIG_H" >&5 -echo "$as_me: error: no prefix for _PREFIX_PKG_CONFIG_H" >&2;} - { (exit 1); exit 1; }; } -else - if test ! -f "$ac_prefix_conf_INP" ; then if test -f "$srcdir/$ac_prefix_conf_INP" ; then - ac_prefix_conf_INP="$srcdir/$ac_prefix_conf_INP" - fi fi - { echo "$as_me:$LINENO: creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines" >&5 -echo "$as_me: creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines" >&6;} - if test -f $ac_prefix_conf_INP ; then - printf '%s\n' "s/#undef *\\([ABCDEFGHIJKLMNOPQRSTUVWXYZ_]\\)/#undef $ac_prefix_conf_UPP""_\\1/" > conftest.prefix - printf '%s\n' "s/#undef *\\([abcdefghijklmnopqrstuvwxyz]\\)/#undef $ac_prefix_conf_LOW""_\\1/" >> conftest.prefix - printf '%s\n' "s/#define *\\([ABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*\\)\\(.*\\)/#ifndef $ac_prefix_conf_UPP""_\\1 \\" >> conftest.prefix - printf '%s\n' "#define $ac_prefix_conf_UPP""_\\1 \\2 \\" >> conftest.prefix - printf '%s\n' "#endif/" >>conftest.prefix - printf '%s\n' "s/#define *\\([abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*\\)\\(.*\\)/#ifndef $ac_prefix_conf_LOW""_\\1 \\" >> conftest.prefix - printf '%s\n' "#define $ac_prefix_conf_LOW""_\\1 \\2 \\" >> conftest.prefix - printf '%s\n' "#endif/" >> conftest.prefix - - #take 4th parameter for the ignore list. - #goes through the list and reverts each item back to its original state - #works for both upper and lower case prefixes - for _IGNx in $ac_prefix_conf_IGN; do - printf '%s\n' "s/#ifndef $ac_prefix_conf_LOW""_$_IGNx/#ifndef $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#define $ac_prefix_conf_LOW""_$_IGNx/#define $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#undef $ac_prefix_conf_LOW""_$_IGNx/#undef $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#ifndef $ac_prefix_conf_UPP""_$_IGNx/#ifndef $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#define $ac_prefix_conf_UPP""_$_IGNx/#define $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#undef $ac_prefix_conf_UPP""_$_IGNx/#undef $_IGNx/" >> conftest.prefix - done - - - # now executing _script on _DEF input to create _OUT output file - printf '%s\n' "#ifndef $ac_prefix_conf_DEF" >$tmp/pconfig.h - printf '%s\n' "#define $ac_prefix_conf_DEF 1" >>$tmp/pconfig.h - printf '%s\n' ' ' >>$tmp/pconfig.h - printf '%s\n' /'*' $ac_prefix_conf_OUT. Generated automatically at end of configure. '*'/ >>$tmp/pconfig.h - - sed -f conftest.prefix $ac_prefix_conf_INP >>$tmp/pconfig.h - printf '%s\n' ' ' >>$tmp/pconfig.h - printf '%s\n' '/* once:' $ac_prefix_conf_DEF '*/' >>$tmp/pconfig.h - printf '%s\n' "#endif" >>$tmp/pconfig.h - if cmp -s $ac_prefix_conf_OUT $tmp/pconfig.h 2>/dev/null; then - { echo "$as_me:$LINENO: $ac_prefix_conf_OUT is unchanged" >&5 -echo "$as_me: $ac_prefix_conf_OUT is unchanged" >&6;} - else - ac_dir=`$as_dirname -- "$ac_prefix_conf_OUT" || -$as_expr X"$ac_prefix_conf_OUT" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_prefix_conf_OUT" : 'X\(//\)[^/]' \| \ - X"$ac_prefix_conf_OUT" : 'X\(//\)$' \| \ - X"$ac_prefix_conf_OUT" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_prefix_conf_OUT" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - rm -f "$ac_prefix_conf_OUT" - mv $tmp/pconfig.h "$ac_prefix_conf_OUT" - fi - cp conftest.prefix _configs.sed - else - { { echo "$as_me:$LINENO: error: input file $ac_prefix_conf_INP does not exist - skip generating $ac_prefix_conf_OUT" >&5 -echo "$as_me: error: input file $ac_prefix_conf_INP does not exist - skip generating $ac_prefix_conf_OUT" >&2;} - { (exit 1); exit 1; }; } - fi - rm -f conftest.* -fi - ;; - "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir=$dirpart/$fdir - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done - ;; - - esac -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - - -echo "configured $PROJECT version $VERSION" - diff -Nru clucene-core-0.9.21b/configure.ac clucene-core-2.3.3.4/configure.ac --- clucene-core-0.9.21b/configure.ac 2008-10-23 18:17:57.000000000 +0000 +++ clucene-core-2.3.3.4/configure.ac 1970-01-01 00:00:00.000000000 +0000 @@ -1,267 +0,0 @@ -dnl ################################################################################ -dnl initialize autoconf and automake -dnl ################################################################################ - -AC_PREREQ([2.57]) -AC_INIT(src/CLucene/StdHeader.h) - -dnl the clucene-core package version -VERSION=0.9.21b - -dnl increment if interfaces have been added, removed or changed -clLIB_current=3 - -dnl increment if source code has changed -dnl - set to zero if current is incremented -clLIB_revision=1 - -dnl increment if interfaces have been added -dnl - set to zero if interfaces have been removed or changed -clLIB_age=0 - -CLLIB_VERSION=$clLIB_current:$clLIB_revision:$clLIB_age -AC_SUBST(CLLIB_VERSION) - -dnl version info -PACKAGE=clucene-core -PROJECT=CLuceneCore -PACKAGE_BUGREPORT=clucene-developers@lists.sourceforge.net -PACKAGE_NAME=CLuceneCore -PACKAGE_VERSION=$VERSION - -AC_CONFIG_SRCDIR([src/CLucene/StdHeader.h]) -AC_CONFIG_AUX_DIR([config]) -AC_CONFIG_HEADER([config.h.tmp]) -AX_PREFIX_CONFIG_H([src/CLucene/clucene-config.h],_CL,[config.h.tmp], - [_ASCII _UCS2 _DEBUG _FILE_OFFSET_BITS _LARGE_FILES uint32_t uint64_t uint8_t int32_t int64_t LUCENE_STATIC_CONSTANT]) -AM_INIT_AUTOMAKE($PACKAGE, $VERSION) - -dnl Check for existence of a C and C++ compilers. -AC_PROG_CC -AC_PROG_CXX -AC_LANG(C++) - -dnl Configure libtool. -AC_PROG_LIBTOOL - -dnl ####################################################################### -dnl # User choices -dnl ####################################################################### -AX_CONFIG_FEATURE_DEFAULT_ENABLED - -AC_ARG_ENABLE(debug, - AC_HELP_STRING([--enable-debug], [build with debugging information]), - [enable_debug=$enableval], [enable_debug=no]) -if test $enable_debug = yes; then - AC_DEFINE(_DEBUG, 1, debuging option) - if test $ac_cv_prog_cxx_g = yes; then - CXXFLAGS="-g $CXXFLAGS" - fi - echo "enabling debug" -else - echo disabling debug -fi - -AC_ARG_ENABLE(cnddebug, - AC_HELP_STRING([--enable-cnddebug], [build with asserts]), - [enable_cnddebug=$enableval], [enable_cnddebug=no]) -if test $enable_cnddebug = yes; then - AC_DEFINE(_CND_DEBUG, 1, [Conditional Debugging]) - echo "enabling cnddebug" -else - echo disabling cnddebug -fi - -AC_ARG_ENABLE(ascii, - AC_HELP_STRING([--enable-ascii], [Forces into ascii mode]), - [enable_ascii=yes], [enable_ascii=no]) -if test $enable_ascii = yes; then - AC_DEFINE(_ASCII, 1, [Forces into Ascii mode]) -fi - -AC_ARG_ENABLE(multithreading, - AC_HELP_STRING([--disable-multithreading], [disable multithreading]), - [enable_multithreading=no], [enable_multithreading=yes]) -if test $enable_multithreading = yes; then - ACX_PTHREAD - LIBS="$PTHREAD_LIBS $LIBS" - CXXFLAGS="$PTHREAD_CFLAGS $CXXFLAGS" - CC="$PTHREAD_CC" - echo "enabled multithreading" -else - AC_DEFINE(DISABLE_MULTITHREADING, 1, [Disable multithreading]) - echo "disabled multithreading" -fi - -AC_ARG_ENABLE(gprof, - AC_HELP_STRING([--enable-gprof], [turn on profiling support]), - [enable_gprof=yes], [enable_gprof=no]) -if test $enable_gprof = yes; then - CXXFLAGS="-pg $CPPFLAGS" - LDFLAGS="-pg $LDFLAGS" - echo "enabled gprof" -fi - -dnl ####################################################################### -dnl # Doxygen Stuff -dnl ####################################################################### -AC_CHECK_PROG(DOXYGEN, doxygen, true, false) -if test $DOXYGEN = false; then - AC_MSG_WARN([*** doxygen not found, docs will not be available]) - enable_doxygen=no -else - enable_doxygen=yes - AC_CHECK_PROG(DOT, dot, true, false) - if test $DOT = false; then - enable_dot = no; - AC_MSG_WARN([*** dot not found, graphs will not be available]) - else - enable_dot = yes; - fi -fi -AC_SUBST(enable_doxygen) -AC_SUBST(enable_dot) - - -dnl ####################################################################### -dnl # Check headers -dnl ####################################################################### - -dnl Check for headers -AC_HEADER_STDC -AC_HEADER_DIRENT -AC_HEADER_STAT -AC_HEADER_TIME - -dnl check for stl -AC_CXX_HAVE_STL - -dnl check for functioning wctype.h -AC_CXX_HAVE_WCTYPE_H - -AC_CHECK_HEADERS([algorithm functional map vector list set],,[AC_MSG_ERROR([A required C++ header file is not found.])]) - -dnl compulsary headers -AC_CHECK_HEADERS([math.h],,[AC_MSG_ERROR([A required C header file is not found.])]) - -dnl optional headers -AC_CHECK_HEADERS([hash_map hash_set ext/hash_map ext/hash_set stdarg.h sys/timeb.h wchar.h tchar.h errno.h fcntl.h ctype.h inttypes.h sys/types.h]) - -dnl seems as though c++ headers aren't being checked properly... -AC_DEFINE([HAVE_STDEXCEPT],[],[x]) - - -dnl ####################################################################### -dnl # Check for compiler features -dnl ####################################################################### - -dnl Check for large file support -AC_SYS_LARGEFILE - -dnl Check for strange function behaviours -AC_FUNC_STRTOD - -dnl check for namespace availability -AC_CXX_NAMESPACES - -dnl check for try/catch availability -MDL_CXX_FUNCTION_TRY_BLOCKS - -dnl check for std namespace -AC_CXX_HAVE_STD - -dnl check for mmap -dnl todo: check that it functions... -case "$host" in - *cygwin*) - AC_CHECK_FUNCS(mmap) - ;; - *) - AC_FUNC_MMAP - ;; -esac - -dnl check for presence of certain optional methods -if test $enable_ascii = yes; then - AC_CHECK_FUNCS(strupr strlwr lltoa strtoll) -else - AC_CHECK_FUNCS(wcscpy wcsupr wcsncpy wcscasecmp wcsicmp wcscat wcschr wcstoll lltow wcstod wcsstr wcslen wcscmp wcsncmp wcscspn) - dnl todo: wcstoq is bsd equiv of wcstoll, we can use that... -fi -dnl always check for file functions -AC_CHECK_FUNCS(tell _filelength) - -dnl check for presence of certain compulsary methods -AC_CHECK_FUNCS(printf snprintf,,[AC_MSG_ERROR([A required function is not found.])]) - -dnl check for broken string functions -dps_swprintf_works -dps_snprintf_oflow - -dnl Test for byte<->float conversions -dps_float_byte - -dnl Define a valid LUCENE_STATIC_CONSTANT macro -dps_static_const - -dnl only try using internal functions if the bugs are not detected -if test $dps_cv_snprintf_bug -eq 0; then - if test $dps_cv_swprintf_works -eq 0; then - AC_CHECK_FUNCS(wprintf snwprintf vsnwprintf) - fi -fi - -dnl ####################################################################### -dnl # Check for types -dnl ####################################################################### - -dnl check for functioning long double type -dnl AC_C_LONG_DOUBLE - not necessary - we dont use long doubles currently - -AC_DEFINE_INTEGER_BITS(uint64_t, unsigned long long, unsigned __int64, unsigned long) -if test "$uint64_t" = no; then - AC_MSG_ERROR([unable to continue without an unsigned 64-bit datatype]) -fi - -AC_DEFINE_INTEGER_BITS(uint32_t, unsigned int, unsigned long) -if test "$uint32_t" = no; then - AC_MSG_ERROR([unable to continue without an unsigned 32-bit datatype]) -fi - -AC_DEFINE_INTEGER_BITS(uint8_t, unsigned char) -if test "$uint8_t" = no; then - AC_MSG_ERROR([unable to continue without an unsigned 8-bit datatype]) -fi - -dnl check for certain types -AC_CHECK_TYPES([float_t],,,[#include ]) - -AC_CHECK_TYPES([wchar_t, intptr_t]) - -dnl ####################################################################### -dnl # Other stuff -dnl ####################################################################### - -dnl Check for nanosleep library -AC_SEARCH_LIBS([nanosleep], [rt], - [AC_DEFINE([HAVE_NANOSLEEP], [1], - [Define if you have the nanosleep function])]) - -dnl check for endian TODO: -dnl AC_C_BIGENDIAN(AC_DEFINE([IS_BIG_ENDIAN],[],[Define if platform is big endian]), -dnl AC_DEFINE([IS_LITTLE_ENDIAN],[],[Define if platform is little endian])) - - - -dnl ####################################################################### -dnl # Finish off -dnl ####################################################################### - -AC_CONFIG_FILES([Makefile src/Makefile src/demo/Makefile - doc/Makefile win32/Makefile - test/Makefile test/data/Makefile]) - -AC_OUTPUT([Doxyfile doc/helpheader.htm]) - -echo "configured $PROJECT version $VERSION" - diff -Nru clucene-core-0.9.21b/COPYING clucene-core-2.3.3.4/COPYING --- clucene-core-0.9.21b/COPYING 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/COPYING 2011-03-17 00:21:07.000000000 +0000 @@ -1,5 +1,11 @@ License +The CLucene code is split into two sections for licensing reasons. The 'Core' +is strictly dual licensed Apache 2 and LGPL. The CLucene Contributions code +could not be licensed under Apache because of the subcomponents it uses. + +CLUCENE CORE: + The CLucene Core Library uses a dual license strategy for the source code. These licenses are the GNU Lesser General Public License (LGPL) and the Apache License (Version 2.0). Users can choose the license they wish to distribute @@ -7,16 +13,23 @@ licenses, but rather than you can choose the license which most suits your needs. -To rephrase this and to make it perfectly clear: +For details of these licenses see APACHE.license and LGPL.license in the root +of the source distribution. + +Some components of CLucene Core use other licenses. See the CLUCENE CORE SUBCOMPONENTS +section for details. We understand that these licenses are compatible with LGPL and/or +Apache v2, but please consult with a lawyer to be certain of this. + +To rephrase the licensing and to make it perfectly clear: CLucene is distributed under the GNU Lesser General Public License (LGPL) *or* the Apache License, Version 2.0 -However, we are an open source project, and we encourage users to use the LGPL -license and participate fully in the free software community. Dual licensing -of the CLucene source code provides open and free access to the technology both -for the GPL community and for other developers or companies that cannot use the -GPL. +However, we are an open source project, and we encourage users to participate fully +in the free software community by contributing their code back to the project. +Dual licensing of the CLucene source code provides open and free access to the +technology both for the GPL community and for other developers or companies +that cannot use the GPL license. You can freely modify, extend, and improve the CLucene source code. The only question is whether or not you must provide the source code and contribute @@ -30,7 +43,7 @@ more information. -CLUCENE SUBCOMPONENTS: +CLUCENE CORE SUBCOMPONENTS: CLucene includes a number of subcomponents with separate copyright notices and license terms. Your use of the source code for the @@ -66,4 +79,48 @@ These notices must be retained in any copies of any part of this documentation and/or software. */ - \ No newline at end of file + + + +the cmake/MacroCheckGccVisibility.cmake and MacroEnsureVersion.cmake components: +# +# Copyright (c) 2006, Alexander Neundorf +# Copyright (c) 2006, Laurent Montel, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +the src/core/util/Compress.cpp component: +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly jloup@gzip.org + Mark Adler madler@alumni.caltech.edu + +*/ + + + +CLUCENE CONTRIBUTIONS CODE: + +PorterStemmer code: couldn't find license. This component is deprecated and will be removed very soon. + +Snowball code: needs to be researched. diff -Nru clucene-core-0.9.21b/debian/changelog clucene-core-2.3.3.4/debian/changelog --- clucene-core-0.9.21b/debian/changelog 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/changelog 2014-02-23 04:09:27.000000000 +0000 @@ -1,3 +1,40 @@ +clucene-core (2.3.3.4-2) precise; urgency=low + + * Backport to precise + + -- Patrick Domack Sat, 22 Feb 2014 23:09:32 -0500 + +clucene-core (2.3.3.4-2) experimental; urgency=low + + * Update multiarch patch: add multiarch path to pkg-config's cflags. + (Closes: #684715) + + -- Fathi Boudra Tue, 14 Aug 2012 17:39:32 +0300 + +clucene-core (2.3.3.4-1) experimental; urgency=low + + * New upstream release (Closes: #661703). + * Convert package to multiarch. + * Drop obsolete patches: + - 01_add_missing_include_bug505667.diff + - 02_posixness_fix_bug530308.diff + * Add patches: + - Fixing_ZLIB_configuration_in_shared_CMakeLists.patch + - Fix-pkgconfig-file-by-adding-clucene-shared-library.patch + - Install-contribs-lib.patch + - multiarch.patch + * Update debian/compat: bump to 8. + * Update debian/control: + - update build dependencies (add cmake, libboost-dev and libz-dev). + - bump Standards-Version to 3.9.3. + - rename packages due to ABI bump: libclucene0ldbl -> libclucene-core1. + - add libclucene-contribs1 package. + * Update debian/rules: + - rewrite to use CMake. + - add multiarch support. + + -- Fathi Boudra Sat, 11 Aug 2012 09:33:38 +0300 + clucene-core (0.9.21b-2) unstable; urgency=low * Restore libclucene0ldbl package name. (Closes: #542337) diff -Nru clucene-core-0.9.21b/debian/compat clucene-core-2.3.3.4/debian/compat --- clucene-core-0.9.21b/debian/compat 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/compat 2012-08-11 11:10:04.000000000 +0000 @@ -1 +1 @@ -7 +8 diff -Nru clucene-core-0.9.21b/debian/control clucene-core-2.3.3.4/debian/control --- clucene-core-0.9.21b/debian/control 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/control 2012-08-11 12:33:51.000000000 +0000 @@ -2,15 +2,18 @@ Priority: optional Maintainer: Fathi Boudra Uploaders: Daniel Glassey -Build-Depends: debhelper (>= 7.3), quilt (>= 0.46-7), autotools-dev -Standards-Version: 3.8.3 +Build-Depends: cmake (>= 2.8.5), debhelper (>= 8.1.3~), libboost-dev, libz-dev +Standards-Version: 3.9.3 Section: libs Homepage: http://clucene.sourceforge.net Package: libclucene-dev Section: libdevel Architecture: any -Depends: ${misc:Depends}, libclucene0ldbl (= ${binary:Version}), libc6-dev +Depends: libc6-dev, + libclucene-contribs1 (= ${binary:Version}), + libclucene-core1 (= ${binary:Version}), + ${misc:Depends} Description: library for full-featured text search engine (development) CLucene is a C++ port of the popular Apache Lucene search engine (http://lucene.apache.org/java). It is released under LGPL or the Apache @@ -25,12 +28,31 @@ This package contains the static libraries and headers for developing applications that use the CLucene search API. -Package: libclucene0ldbl -Section: libs +Package: libclucene-core1 +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Pre-Depends: ${misc:Pre-Depends} +Multi-Arch: same +Description: core library for full-featured text search engine (runtime) + CLucene is a C++ port of the popular Apache Lucene search engine + (http://lucene.apache.org/java). It is released under LGPL or the Apache + License. + . + CLucene aims to be a high-speed alternative to Java Lucene, its API is very + similar to that of the Java version. CLucene has recently been brought up to + date with Lucene 1.4.3. It contains most of the same functionality as the + Java version, except for Socket, Threading and the special caching + modifications. + . + This package contains the files necessary for running applications that + use the CLucene core and shared libraries. + +Package: libclucene-contribs1 Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Replaces: libclucene0 (<< 0.9.21b-2) -Description: library for full-featured text search engine (runtime) +Depends: ${misc:Depends}, ${shlibs:Depends} +Pre-Depends: ${misc:Pre-Depends} +Multi-Arch: same +Description: language specific text analyzers (runtime) CLucene is a C++ port of the popular Apache Lucene search engine (http://lucene.apache.org/java). It is released under LGPL or the Apache License. @@ -42,4 +64,5 @@ modifications. . This package contains the files necessary for running applications that - use the libclucene library. + use the CLucene contribs library (language specific text analyzers for + CLucene). diff -Nru clucene-core-0.9.21b/debian/copyright clucene-core-2.3.3.4/debian/copyright --- clucene-core-0.9.21b/debian/copyright 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/copyright 2012-08-11 12:33:51.000000000 +0000 @@ -25,6 +25,7 @@ Pedja Peter Hodges Jos van den Oever + Itamar Syn-Hershko synhershko@users.sourceforge.net Copyright: @@ -128,7 +129,7 @@ The Debian packaging is: - Copyright (C) 2006-2009 Fathi Boudra + Copyright (C) 2006-2012 Fathi Boudra Copyright (C) 2005-2006 Daniel Glassey and is licensed under the LGPL version 2.1, see above. diff -Nru clucene-core-0.9.21b/debian/libclucene0ldbl.docs clucene-core-2.3.3.4/debian/libclucene0ldbl.docs --- clucene-core-0.9.21b/debian/libclucene0ldbl.docs 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/libclucene0ldbl.docs 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -README -doc/*.htm -doc/*.jpg diff -Nru clucene-core-0.9.21b/debian/libclucene0ldbl.install clucene-core-2.3.3.4/debian/libclucene0ldbl.install --- clucene-core-0.9.21b/debian/libclucene0ldbl.install 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/libclucene0ldbl.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/lib*.so.* diff -Nru clucene-core-0.9.21b/debian/libclucene-contribs1.install clucene-core-2.3.3.4/debian/libclucene-contribs1.install --- clucene-core-0.9.21b/debian/libclucene-contribs1.install 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/libclucene-contribs1.install 2012-08-11 12:33:51.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libclucene-contribs-lib.so.1 +usr/lib/*/libclucene-contribs-lib.so.2.* diff -Nru clucene-core-0.9.21b/debian/libclucene-contribs1.lintian-overrides clucene-core-2.3.3.4/debian/libclucene-contribs1.lintian-overrides --- clucene-core-0.9.21b/debian/libclucene-contribs1.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/libclucene-contribs1.lintian-overrides 2012-08-11 11:40:09.000000000 +0000 @@ -0,0 +1 @@ +package-name-doesnt-match-sonames libclucene-contribs-lib1 diff -Nru clucene-core-0.9.21b/debian/libclucene-core1.docs clucene-core-2.3.3.4/debian/libclucene-core1.docs --- clucene-core-0.9.21b/debian/libclucene-core1.docs 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/libclucene-core1.docs 2012-08-11 06:23:10.000000000 +0000 @@ -0,0 +1,3 @@ +README +doc/*.htm +doc/*.jpg diff -Nru clucene-core-0.9.21b/debian/libclucene-core1.install clucene-core-2.3.3.4/debian/libclucene-core1.install --- clucene-core-0.9.21b/debian/libclucene-core1.install 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/libclucene-core1.install 2012-08-11 12:33:51.000000000 +0000 @@ -0,0 +1,4 @@ +usr/lib/*/libclucene-core.so.1 +usr/lib/*/libclucene-core.so.2.* +usr/lib/*/libclucene-shared.so.1 +usr/lib/*/libclucene-shared.so.2.* diff -Nru clucene-core-0.9.21b/debian/libclucene-dev.install clucene-core-2.3.3.4/debian/libclucene-dev.install --- clucene-core-0.9.21b/debian/libclucene-dev.install 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/libclucene-dev.install 2012-08-11 12:33:51.000000000 +0000 @@ -1,4 +1,6 @@ -usr/include -usr/lib/CLucene/clucene-config.h -usr/lib/libclucene.a -usr/lib/libclucene.so +usr/include/CLucene +usr/include/CLucene.h +usr/lib/*/CLucene/CLuceneConfig.cmake +usr/lib/*/CLucene/clucene-config.h +usr/lib/*/libclucene-*.so +usr/lib/*/pkgconfig/libclucene-core.pc diff -Nru clucene-core-0.9.21b/debian/not-installed clucene-core-2.3.3.4/debian/not-installed --- clucene-core-0.9.21b/debian/not-installed 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/not-installed 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -./usr/lib/libclucene.la - diff -Nru clucene-core-0.9.21b/debian/patches/01_add_missing_include_bug505667.diff clucene-core-2.3.3.4/debian/patches/01_add_missing_include_bug505667.diff --- clucene-core-0.9.21b/debian/patches/01_add_missing_include_bug505667.diff 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/patches/01_add_missing_include_bug505667.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ ---- a/src/CLucene/util/bufferedstream.h -+++ b/src/CLucene/util/bufferedstream.h -@@ -29,6 +29,7 @@ - #include "streambase.h" - #include "inputstreambuffer.h" - #include -+#include - - namespace jstreams { - diff -Nru clucene-core-0.9.21b/debian/patches/02_posixness_fix_bug530308.diff clucene-core-2.3.3.4/debian/patches/02_posixness_fix_bug530308.diff --- clucene-core-0.9.21b/debian/patches/02_posixness_fix_bug530308.diff 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/patches/02_posixness_fix_bug530308.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ ---- a/src/CLucene/config/compiler.h -+++ b/src/CLucene/config/compiler.h -@@ -133,6 +133,10 @@ - #define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL - #define LUCENE_UINT8_MAX_SHOULDBE 0xff - -+#if defined(__GNU__) -+ #define PATH_MAX 4096 -+#endif -+ - //maximum path length. only used for buffers that use fullpath. - //anything else should use a dynamic length. - #if defined(CL_MAX_PATH) diff -Nru clucene-core-0.9.21b/debian/patches/Fixing_ZLIB_configuration_in_shared_CMakeLists.patch clucene-core-2.3.3.4/debian/patches/Fixing_ZLIB_configuration_in_shared_CMakeLists.patch --- clucene-core-0.9.21b/debian/patches/Fixing_ZLIB_configuration_in_shared_CMakeLists.patch 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/patches/Fixing_ZLIB_configuration_in_shared_CMakeLists.patch 2012-08-11 06:40:43.000000000 +0000 @@ -0,0 +1,20 @@ +From 772481ca94071ddfe65102a451926e4f9aeb4d2c Mon Sep 17 00:00:00 2001 +From: Veit Jahns +Date: Thu, 26 May 2011 13:35:28 +0200 +Subject: [PATCH] Fixing ZLIB configuration in shared's CMakeLists + +--- + src/shared/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/src/shared/CMakeLists.txt ++++ b/src/shared/CMakeLists.txt +@@ -42,7 +42,7 @@ INCLUDE (CheckAtomicFunctions) + find_package(ZLIB) + IF ( ZLIB_FOUND ) + SET ( EXTRA_LIBS ${EXTRA_LIBS} ${ZLIB_LIBRARY} ) +-ELSEIF ( ZLIB_FOUND ) ++ELSE ( ZLIB_FOUND ) + MESSAGE( "ZLIB not found, using local: ${clucene-ext_SOURCE_DIR}/zlib" ) + SET(ZLIB_INCLUDE_DIR ${clucene-ext_SOURCE_DIR}/zlib ) + SET(ZLIB_LIBRARY ${clucene-ext_BINARY_DIR}) diff -Nru clucene-core-0.9.21b/debian/patches/Fix-pkgconfig-file-by-adding-clucene-shared-library.patch clucene-core-2.3.3.4/debian/patches/Fix-pkgconfig-file-by-adding-clucene-shared-library.patch --- clucene-core-0.9.21b/debian/patches/Fix-pkgconfig-file-by-adding-clucene-shared-library.patch 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/patches/Fix-pkgconfig-file-by-adding-clucene-shared-library.patch 2012-08-11 06:40:53.000000000 +0000 @@ -0,0 +1,19 @@ +From 7be4a19b76d98260cf95040a47935f854a4ba7a4 Mon Sep 17 00:00:00 2001 +From: Valentin Rusu +Date: Sat, 17 Dec 2011 13:47:58 +0100 +Subject: [PATCH] Fix .pc file by adding clucene-shared library + +--- + src/core/libclucene-core.pc.cmake | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/src/core/libclucene-core.pc.cmake ++++ b/src/core/libclucene-core.pc.cmake +@@ -6,6 +6,6 @@ includedir=${prefix}/include:${prefix}/i + Name: libclucene + Description: CLucene - a C++ search engine, ported from the popular Apache Lucene + Version: @CLUCENE_VERSION_MAJOR@.@CLUCENE_VERSION_MINOR@.@CLUCENE_VERSION_REVISION@.@CLUCENE_VERSION_PATCH@ +-Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core ++Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core -lclucene-shared + Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext + ~ diff -Nru clucene-core-0.9.21b/debian/patches/Install-contribs-lib.patch clucene-core-2.3.3.4/debian/patches/Install-contribs-lib.patch --- clucene-core-0.9.21b/debian/patches/Install-contribs-lib.patch 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/patches/Install-contribs-lib.patch 2012-08-11 06:42:59.000000000 +0000 @@ -0,0 +1,49 @@ +Description: contribs-lib is not built and installed even with config +Author: Vitaliy Filippov +Bug: https://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446 + +--- + CMakeLists.txt | 2 +- + src/contribs-lib/CMakeLists.txt | 17 +++++++++++++++++ + 2 files changed, 18 insertions(+), 1 deletion(-) + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -163,7 +163,7 @@ IF ( BUILD_CONTRIBS ) + SET(BUILD_CONTRIBS_LIB 1) + ENDIF ( BUILD_CONTRIBS ) + IF ( BUILD_CONTRIBS_LIB ) +- ADD_SUBDIRECTORY (src/contribs-lib EXCLUDE_FROM_ALL) ++ ADD_SUBDIRECTORY (src/contribs-lib) + ENDIF ( BUILD_CONTRIBS_LIB ) + + +--- a/src/contribs-lib/CMakeLists.txt ++++ b/src/contribs-lib/CMakeLists.txt +@@ -106,9 +106,26 @@ add_library(clucene-contribs-lib SHARED + ) + TARGET_LINK_LIBRARIES(clucene-contribs-lib ${clucene_contrib_extra_libs}) + ++#install public headers. ++FOREACH(file ${HEADERS}) ++ get_filename_component(apath ${file} PATH) ++ get_filename_component(aname ${file} NAME) ++ file(RELATIVE_PATH relpath ${CMAKE_SOURCE_DIR}/src/contribs-lib ${apath}) ++ IF ( NOT aname MATCHES "^_.*" ) ++ install(FILES ${file} ++ DESTINATION include/${relpath} ++ COMPONENT development) ++ ENDIF ( NOT aname MATCHES "^_.*" ) ++ENDFOREACH(file) ++ + #set properties on the libraries + SET_TARGET_PROPERTIES(clucene-contribs-lib PROPERTIES + VERSION ${CLUCENE_VERSION} + SOVERSION ${CLUCENE_SOVERSION} + COMPILE_DEFINITIONS_DEBUG _DEBUG + ) ++ ++#and install library ++install(TARGETS clucene-contribs-lib ++ DESTINATION ${LIB_DESTINATION} ++ COMPONENT runtime ) diff -Nru clucene-core-0.9.21b/debian/patches/multiarch.patch clucene-core-2.3.3.4/debian/patches/multiarch.patch --- clucene-core-0.9.21b/debian/patches/multiarch.patch 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/patches/multiarch.patch 2012-08-14 14:52:20.000000000 +0000 @@ -0,0 +1,28 @@ +Description: add multiarch support. +Author: Fathi Boudra + +--- + CMakeLists.txt | 2 +- + src/core/libclucene-core.pc.cmake | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -94,7 +94,7 @@ SET(LUCENE_SYS_INCLUDES "" CACHE PATH + ) + #install path options + SET(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" ) +-SET(LIB_DESTINATION "lib${LIB_SUFFIX}") ++SET(LIB_DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}") + + + SET ( ENABLE_COMPILE_TESTS_VALUE ON ) +--- a/src/core/libclucene-core.pc.cmake ++++ b/src/core/libclucene-core.pc.cmake +@@ -7,5 +7,5 @@ Name: libclucene + Description: CLucene - a C++ search engine, ported from the popular Apache Lucene + Version: @CLUCENE_VERSION_MAJOR@.@CLUCENE_VERSION_MINOR@.@CLUCENE_VERSION_REVISION@.@CLUCENE_VERSION_PATCH@ + Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core -lclucene-shared +-Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext ++Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext -I${prefix}/@LIB_DESTINATION@ + ~ diff -Nru clucene-core-0.9.21b/debian/patches/series clucene-core-2.3.3.4/debian/patches/series --- clucene-core-0.9.21b/debian/patches/series 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/patches/series 2012-08-11 12:23:13.000000000 +0000 @@ -1,2 +1,4 @@ -01_add_missing_include_bug505667.diff -02_posixness_fix_bug530308.diff +Fixing_ZLIB_configuration_in_shared_CMakeLists.patch +Fix-pkgconfig-file-by-adding-clucene-shared-library.patch +Install-contribs-lib.patch +multiarch.patch diff -Nru clucene-core-0.9.21b/debian/README.source clucene-core-2.3.3.4/debian/README.source --- clucene-core-0.9.21b/debian/README.source 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/README.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -This package uses quilt for upstream source code patch management. Please read -/usr/share/doc/quilt/README.source for more information how to apply, unapply, -add, modify or remove patches. - -Please note that /usr/share/doc/quilt/README.source is only available in quilt -version 0.46-4.1 or later. diff -Nru clucene-core-0.9.21b/debian/rules clucene-core-2.3.3.4/debian/rules --- clucene-core-0.9.21b/debian/rules 2014-02-23 04:11:12.000000000 +0000 +++ clucene-core-2.3.3.4/debian/rules 2012-08-11 12:21:37.000000000 +0000 @@ -1,12 +1,25 @@ #!/usr/bin/make -f +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + +export CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) +export CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) +export CXXFLAGS:=$(shell dpkg-buildflags --get CXXFLAGS) +export LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS) + %: - dh --with quilt $@ + dh $@ --list-missing --parallel override_dh_auto_configure: - CFLAGS="$(CFLAGS) -ansi" CXXFLAGS="$(CXXFLAGS) -ansi" dh_auto_configure + dh_auto_configure -- \ + -DBUILD_CONTRIBS_LIB=ON \ + -DLIB_DESTINATION:PATH=/usr/lib/$(DEB_HOST_MULTIARCH) \ + -DLUCENE_SYS_INCLUDES:PATH=/usr/lib/$(DEB_HOST_MULTIARCH) override_dh_makeshlibs: dh_makeshlibs -V -.PHONY: override_dh_auto_test +override_dh_auto_test: diff -Nru clucene-core-0.9.21b/debian/source/format clucene-core-2.3.3.4/debian/source/format --- clucene-core-0.9.21b/debian/source/format 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/debian/source/format 2012-08-11 07:02:58.000000000 +0000 @@ -0,0 +1 @@ +3.0 (quilt) diff -Nru clucene-core-0.9.21b/dist-test.sh clucene-core-2.3.3.4/dist-test.sh --- clucene-core-0.9.21b/dist-test.sh 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/dist-test.sh 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,272 @@ +#!/bin/bash +#Check compliance with Coding standards... + +#where to keep the temp files... +TMP=disttest + +function usage { + echo "usage: ../dist-test.sh [all | " + echo " " + echo " " + echo " " + echo " ]" + echo " ]" + echo " ]" + echo " ]" + echo " ]" + exit 1; +} +t_all=0 +t_env=0 +t_c_all=0 +t_inline=0 +t_compile=0 +t_c_h=0 +t_license=0 +t_ifdefs=0 +t_exports=0 +FAIL=0 + +if [ $# -eq 0 ]; then + usage +else + while [ "$1" != "" ]; do + if [ "$1" == "all" ]; then + t_all=1 + elif [ "$1" == "env" ]; then + t_env=1 + elif [ "$1" == "c_all" ]; then + t_c_all=1 + elif [ "$1" == "inline" ]; then + t_inline=1 + elif [ "$1" == "compile" ]; then + t_compile=1 + elif [ "$1" == "c_header" ]; then + t_c_h=1 + elif [ "$1" == "license" ]; then + t_license=1 + elif [ "$1" == "ifdefs" ]; then + t_ifdefs=1 + elif [ "$1" == "exports" ]; then + t_exports=1 + else + usage + fi + shift + done +fi + +if [ $t_all -eq 1 ]; then + t_env=1 + t_c_all=1 + t_c_h=1 + t_inline=1 + t_compile=1 + t_license=1 + t_ifdefs=1 + t_exports=1 +fi + + +#check to see that no #ifdefs exist in headers that don't belong +function checkForIfdefs { + I=0 + grep "#if" $1| grep -v "_UCS2" |grep -v "_CL_HAVE_" |grep -v "_ASCII" |grep -v "_WIN32"|grep -v "_MSC_"|grep -v "__MINGW32__" |grep -v "_WIN64" | while read line; do + I=`expr $I + 1` + if [ $I -gt 1 ]; then + echo $1 might have invalid ifdef: $line + fi + done +} + + +if [ $t_env -eq 1 ]; then + rm -fdr $TMP 2>/dev/null + mkdir $TMP + + #create header file for testing of symbols in headers. + echo "#include \"CLucene/StdHeader.h"\" >$TMP/pub-headers.cpp + + #iterate all headers + for H in `find ../src/shared/CLucene| grep "\.h$"` `find ../src/core/CLucene| grep "\.h$"`; do + BH=`basename "$H"` + DN=`dirname "$H"` + if [ "${BH:0:1}" != "_" ]; then + DH=`dirname "${H:3}"` + + if [ "${H:7}" != "core/CLucene/util/Reader.h" ]; then + #move headers somewhere to compile + mkdir -p "$TMP/$DH" 2>/dev/null + ln -s "`cd "$DN" && pwd`/$BH" "$TMP/${H:3}" 2>/dev/null + + #create pub-headers.cpp + echo "#include \"${H:7}\"" >>$TMP/pub-headers.cpp + fi + fi + done + + echo "int main(){return 0;}" >>$TMP/pub-headers.cpp +fi + + +################################################ +#now the environment is finished being setup... +################################################ +echo "Starting tests..." + +if [ $t_c_h -eq 1 ] || [ $t_ifdefs -eq 1 ] || [ $t_exports -eq 1 ]; then + for H in `find $TMP/src | grep "\.h$"`; do + BH=`basename "$H"` + DH=`dirname "${H:3}"` + + if [ $t_ifdefs -eq 1 ]; then + checkForIfdefs $H + fi + + #check that all classes are exported + if [ $t_exports -eq 1 ]; then + if [ "${H:0:1}" == "_" ]; then + #internal headers... none must be exported + XX=`awk '/^[ \t]*(class|struct)/ { print $line }' $H| grep -v ";$"| grep -v CLUCENE_EXPORT| grep -v CLUCENE_INLINE_EXPORT| grep -v CLUCENE_SHARED_EXPORT| grep -v CLUCENE_SHARED_INLINE_EXPORT` + if [ "$XX" == "" ]; then + echo "$H is internal but has exported class: $XX" + echo "" + FAIL=1 + fi + else + #external headers... all must be exported + XX=`awk '/^[ \t]*(class|struct)/ { print $line }' $H| grep -v ";$"| grep -v CLUCENE_EXPORT| grep -v CLUCENE_INLINE_EXPORT| grep -v CLUCENE_SHARED_EXPORT| grep -v CLUCENE_SHARED_INLINE_EXPORT` + if [ "$XX" != "" ]; then + echo "$H has unexported class: $XX" + echo "" + FAIL=1 + fi + fi + fi + + #test that each header compiles independently... + if [ $t_c_h -eq 1 ]; then + echo "#include \"CLucene/StdHeader.h"\" >$TMP/pub-header.cpp + echo "#include \"$H"\" >>$TMP/pub-header.cpp + echo "int main(){ return 0; }" >>"$TMP/pub-header.cpp" + ERROR=`g++ -I. -I$TMP/src/shared -I./src/shared -I../src/ext -I$TMP/src/core $TMP/pub-header.cpp` + if [ $? -ne 0 ]; then + echo "" + echo "$H doesn't compile seperately..." + echo $ERROR + FAIL=1; + fi + fi + done + + + if [ $t_ifdefs -eq 1 ]; then + echo "Not all ifdefs are invalid, you have to figure it out for yourself :-)" + echo "If defs in classes which change depending on a user setting can cause big problems due to offset changes" + echo "for example:" + echo "class X {" + echo " #ifdef _DEBUG" + echo " int x;" + echo " #endif" + echo " int y;" + echo "}" + echo "If the library is compiled with _DEBUG, and then a user calls y without _DEBUG defined, unexpected behaviour will occur" + fi +fi + +#iterate all our code... +if [ $t_license -eq 1 ]; then + for H in `find ../src`; do + BH=`basename "$H"` + BH_len=${#BH} + + if [ "${BH:BH_len-2}" == ".h" ] || [ "${BH:BH_len-2}" == ".c" ] || [ "${BH:BH_len-4}" == ".cpp" ]; then + + #snowball has its own license... + if [ "echo $H|grep 'snowball/src_c'" != "" ]; then + continue + fi + #snowball has its own license... + if [ "echo $H|grep 'libstemmer'" != "" ]; then + continue + fi + #zlib has its own license... + if [ "echo $H|grep 'CLucene/util/zlib'" != "" ]; then + continue + fi + + if [ "`awk '/\* Copyright \(C\) [0-9]*-[0-9]* .*$/ { print $line }' $H`" == "" ]; then + if [ "`awk '/\* Copyright [0-9]*-[0-9]* .*$/ { print $line }' $H`" == "" ]; then + echo "$H ($BH) has invalid license" + FAIL=1 + fi + fi + fi + done +fi + + +#test if headers can compile together by themselves: +if [ $t_c_all -eq 1 ]; then + g++ -I$TMP/src -I../src/ext -I$TMP/src/shared -I$TMP/src/core $TMP/pub-headers.cpp -I./src/shared +fi + +if [ $t_inline -eq 1 ]; then + if [ ! -d "./doc" ]; then + echo "Couldn't find docs, run:" + echo "# cmake -DENABLE_CLDOCS:BOOLEAN=TRUE ." + echo "# make doc" + echo "and then try again" + exit 1 + fi + + INLINES=0 + grep -c "\[inline" doc/html/*.html|grep -v ":0$"|grep -v "util"|grep -v "jstreams" | while read line; do + + #ignore some actual inlines... + if [ "doc/html/classlucene_1_1index_1_1Term.html:1" == $line ]; then + continue; + fi + if [ "doc/html/classlucene_1_1search_1_1Similarity.html:1" == $line ]; then + continue; + fi + if [ "doc/html/classlucene_1_1store_1_1BufferedIndexInput.html:1" == $line ]; then + continue; + fi + + if [ $INLINES -eq 0 ]; then + echo "These files report inline code:" + INLINES=1 + FAIL=1 + fi + echo $line + done +fi + +if [ $t_compile -eq 1 ]; then + #compile serperately + make cl_test + if [ $? -ne 0 ]; then + FAIL=1; + fi + + echo "Undefines for shared lib:" + nm -u --demangle bin/libclucene-shared.so |grep -E "lucene::" + echo "Undefines for core lib:" + nm -u --demangle bin/libclucene-core.so |grep -E "lucene::"|grep -v "lucene::util::Misc" |grep -v "lucene::util::mutex" |grep -v "lucene::util::StringBuffer"|grep -v "lucene::util::shared_condition" + + #compile together + make test-all + if [ $? -ne 0 ]; then + FAIL=1; + fi + + +fi + + +if [ $FAIL == 1 ]; then + echo "There were errors, please correct them and re-run" + exit 1 +fi +exit 0 Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/doc/clucene.jpg and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/doc/clucene.jpg differ diff -Nru clucene-core-0.9.21b/doc/coding standards.txt clucene-core-2.3.3.4/doc/coding standards.txt --- clucene-core-0.9.21b/doc/coding standards.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/doc/coding standards.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,113 @@ +Coding Style +------------ + +CLucene follows a hybrid coding style. Because of the nature of the code being +a java port, there are naturally some java like syntax. + +* Never use CL_NS_USE(x) in a header file (use CL_NS(x):: for each class), it defeats the purpose of namespaces. +* Use CL_NS_USE(x) in .cpp files if there are more than a few usages of that namespace. + + +Headers: +* _headername.h headers are private, and will not be distributed. Don't include these files from public headers. +* The shared library is not distributed, except for: SharedHeader.h and clucene-config.h +* Keep _ifdef's in public headers to an absolute minimum. +* Public headers should contain only classes that are exported (class CLUCENE_EXPORT classname). +* All classes should have a destructor, + the destructor should be virtual if there is any chance of the class being overridden + +Documentation: +Although CLucene documentation is not complete, it would be nice to see documentation created for new files. +We used doxygen to create documentation. 2 basic formats of documentation are: + +/** documentation must have ** to be included */ +void function(); +void function2(); //< can also document functions retrospectively by adding < + + +/** +* You can also document memory with the special @memory alias. +* @memory you must delete data returned from this function using _CLDELETE +*/ +Object createObject(); + + +Cross platform specifics: +* Use macros provided in shared project. This applies to data types and functions +* static const int32_t x=1; Should be coded as: Use LUCENE_STATIC_CONSTANT (int32_t, x=1). Else it is not portable. +* Static objects should not be initialised in the class header. ( class x{ static object a; }; ). This will not work + everywhere. Instead use a getter. + + class x{ + static object* a; + public: + static Object* getA(); + static void CLUCENE_LOCAL _shutdown(); + }; + + Then in the implementation code + + Object* x::a = NULL; + Object* x::getA(){ + if ( a == NULL ) + x::a = _CLNEW Object; + return a; + } + void x::_shutdown(){ + _CLDELETE(a); + } + + In CLucene/StdHeader.cpp, add x::_shutdown() to the list _lucene_shutdown function. + +* This is bad: + + class x{ + LUCENE_STATIC_CONSTANT(int32_t, x=1) + void func( int32_t value=x); + }; + + This will fail on some platforms. It is better to do: + int32_t value=-1 (-1 should be some logical value, not necessarily -1). + then in the implementation, check if -1 and default to the x static constant. +* Try and use the functions in util/Array.h instead of Void Map/List functions. Void Map/List will be deprecated for public access +* Most compilers don't complain about this (in normal mode), but we require pedantic mode behaviour. Some important things for this are: + 1. Initialise variables in correct order as in the class + class x{ + int a; + int b; + x(): + b(12), + a(11) //THIS IS WRONG! a is initialised after b. + { + } + }; + +Good development tips +--------------------- +When developing, use the available clucene debugging tools: +* _CND_DEBUG - condition debugging, an 'assert' type system (or configure with --enable-cnddebug) + +Good performance tips: +---------------------- +CLucene has a lot of new changes to help improve performance. +Some of them are still being tuned... + +MSVC profiling tutorial: +http://webserver.tc.cornell.edu/services/edu/topics/Performance/Profiling/more.asp + +For GCC see gprof +you can enable gprof by configuring with ENABLE_GPROF + +Developing +---------- +When developing, please keep in mind cross-platform issues and also +character set issues (unicode/ascii). + +Hint: +To do a quick test to see if the code compiles +run this command from the root directory of clucene. +It will compile all the CLucene code monolithically. + + % test-pedantic + +This will do a quick compile then run all the clucene tests. diff -Nru clucene-core-0.9.21b/doc/Doxyfile.cmake clucene-core-2.3.3.4/doc/Doxyfile.cmake --- clucene-core-0.9.21b/doc/Doxyfile.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/doc/Doxyfile.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,237 @@ +# Doxyfile 1.2.18 + +#--------------------------------------------------------------------------- +# General configuration options +#--------------------------------------------------------------------------- + +PROJECT_NAME = CLucene-core +PROJECT_NUMBER = @CPACK_PACKAGE_VERSION@ + +OUTPUT_DIRECTORY = @PROJECT_BINARY_DIR@/doc +OUTPUT_LANGUAGE = English + +EXTRACT_ALL = YES +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +INTERNAL_DOCS = NO +STRIP_CODE_COMMENTS = YES +CASE_SENSE_NAMES = YES +SHORT_NAMES = NO +HIDE_SCOPE_NAMES = NO +VERBATIM_HEADERS = YES +SHOW_INCLUDE_FILES = YES +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ALIASES = "memory=\par Memory management:\n" +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = @PROJECT_BINARY_DIR@/doc/doxygen.warnings.log + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +INPUT = @PROJECT_SOURCE_DIR@/src/core/CLucene +INPUT += @PROJECT_SOURCE_DIR@/src/shared/CLucene +FILE_PATTERNS = *.h +RECURSIVE = YES +#EXCLUDE = mem.h bufferedstream.h fileinputstream.h stringreader.h Misc.h LuceneThreads.h jstreamconfig.h +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = "**/config/**" \ + "**/.svn/**" \ + "**/debug/**" \ + "_*.h" +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +GENERATE_HTML = @CLDOCS_HTML@ +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = @PROJECT_BINARY_DIR@/doc/helpheader.htm +HTML_FOOTER = @PROJECT_BINARY_DIR@/doc/helpfooter.htm +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES + +GENERATE_HTMLHELP = @CLDOCS_HTML_HELP@ +CHM_FILE = ../clucene.chm +HHC_LOCATION = @HTML_HELP_COMPILER_EX@ +GENERATE_CHI = YES +BINARY_TOC = YES +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +GENERATE_LATEX = @CLDOCS_LATEX@ +LATEX_OUTPUT = latex +LATEX_CMD_NAME = @LATEX_COMPILER@ +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +GENERATE_RTF = @CLDOCS_RTF@ +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = @CLDOCS_MAN@ +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +GENERATE_XML = @CLDOCS_XML@ +XML_SCHEMA = +XML_DTD = + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = @PROJECT_SOURCE_DIR@/src/core +INCLUDE_PATH += @PROJECT_SOURCE_DIR@/src/shared +INCLUDE_PATH += @PROJECT_BINARY_DIR@/src/shared +INCLUDE_FILE_PATTERNS = + +PREDEFINED = "_MSC_VER=1400" +PREDEFINED += "WIN32" +PREDEFINED += "_CL_DISABLE_MULTITHREADING" +PREDEFINED += "_CL_DEPRECATED(x)=" + +#namespaces +PREDEFINED += "CL_NS(sub)=lucene::sub" +PREDEFINED += "CL_NS2(sub,sub2)=lucene::sub:sub2" +PREDEFINED += "CL_NS_DEF(sub)=namespace lucene{ namespace sub{" +PREDEFINED += "CL_NS_DEF2(sub,sub2)=namespace lucene{ namespace sub{ namespace sub2 {" +PREDEFINED += "CL_NS_END=}}" +PREDEFINED += "CL_NS_END2=}}}" +PREDEFINED += "CL_NS_USE(sub)=using namespace lucene::sub" +PREDEFINED += "CL_NS_USE2(sub,sub2)=using namespace lucene::sub::sub2" +PREDEFINED += "CL_NS_STD(func)=std::func" +PREDEFINED += "CL_NS_HASHING(func)=std::func" + +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to external references +#--------------------------------------------------------------------------- + +TAGFILES = +GENERATE_TAGFILE = @CLDOCS_TAGFILE_LOCATION@ +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = @PERL_EXECUTABLE@ + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = @HAVE_DOT@ +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = @DOXYGEN_DOT_EXECUTABLE@ +DOTFILE_DIRS = +GENERATE_LEGEND = YES +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to the search engine +#--------------------------------------------------------------------------- + +SEARCHENGINE = NO diff -Nru clucene-core-0.9.21b/doc/doxygen.css.cmake clucene-core-2.3.3.4/doc/doxygen.css.cmake --- clucene-core-0.9.21b/doc/doxygen.css.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/doc/doxygen.css.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,163 @@ +H1 { + text-align: center; + font-family: Arial, Helvetica, sans-serif; +} +H2 { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +CAPTION { font-weight: bold } +DIV.qindex { width: 100%; + background-color: #eeeeff; + border: 4px solid #eeeeff; + text-align: center; + margin-bottom: 2px +} +A.qindex { text-decoration: none; font-weight: bold; } +A.qindex:hover { text-decoration: none; background-color: #ddddff } +A.qindexHL { text-decoration: none; font-weight: bold; + background-color: #6666cc; + color: #ffffff + } +A.qindexHL:hover { text-decoration: none; background-color: #6666cc } +A.qindexRef { text-decoration: none; font-weight: bold; } +A.qindexRef:hover { text-decoration: none; background-color: #ddddff } +A.qindexRefHL { text-decoration: none; font-weight: bold; + background-color: #6666cc; + color: #ffffff + } +A.qindexRefHL:hover { text-decoration: none; background-color: #6666cc } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code { text-decoration: none; font-weight: normal; color: #4444ee } +A.codeRef { font-weight: normal; color: #4444ee } +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +DIV.fragment { + width: 98%; + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + padding-left: 4px; + margin: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; +margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #f2f2ff; font-weight: bold; } +TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; } +TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; +width: 600px; } +DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; +font-weight: bold } +DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #eeeeff; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} +TD.indexvalue { + background-color: #eeeeff; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdTable { + border: 1px solid #868686; + background-color: #f2f2ff; +} +.mdRow { + padding: 8px 20px; +} +.mdescLeft { + font-size: smaller; + font-family: Arial, Helvetica, sans-serif; + background-color: #FAFAFA; + padding-left: 8px; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + font-size: smaller; + font-family: Arial, Helvetica, sans-serif; + font-style: italic; + background-color: #FAFAFA; + padding-left: 4px; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; + padding-bottom: 0px; + padding-right: 8px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 12px; +} +.memItemRight { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 13px; +} diff -Nru clucene-core-0.9.21b/doc/helpfooter.htm clucene-core-2.3.3.4/doc/helpfooter.htm --- clucene-core-0.9.21b/doc/helpfooter.htm 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/doc/helpfooter.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -
-

clucene.sourceforge.net

- - \ No newline at end of file diff -Nru clucene-core-0.9.21b/doc/helpfooter.htm.cmake clucene-core-2.3.3.4/doc/helpfooter.htm.cmake --- clucene-core-0.9.21b/doc/helpfooter.htm.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/doc/helpfooter.htm.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,4 @@ +
+

clucene.sourceforge.net

+ + \ No newline at end of file diff -Nru clucene-core-0.9.21b/doc/helpheader.htm.cmake clucene-core-2.3.3.4/doc/helpheader.htm.cmake --- clucene-core-0.9.21b/doc/helpheader.htm.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/doc/helpheader.htm.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,24 @@ + + + +CLucene API Documentation (Version @CPACK_PACKAGE_VERSION@) + + + + + + + + + + + +

CLucene - a full-featured, c++ search engine
+API Documentation +

+
diff -Nru clucene-core-0.9.21b/doc/helpheader.htm.in clucene-core-2.3.3.4/doc/helpheader.htm.in --- clucene-core-0.9.21b/doc/helpheader.htm.in 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/doc/helpheader.htm.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ - - - -CLucene API Documentation (Version @VERSION@) - - - - - - - - - - -

CLucene - a full-featured, c++ search engine
-API Documentation -

-
diff -Nru clucene-core-0.9.21b/doc/Makefile.am clucene-core-2.3.3.4/doc/Makefile.am --- clucene-core-0.9.21b/doc/Makefile.am 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/doc/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -docsrcdir = $(top_srcdir)/doc -EXTRA_DIST = $(docsrcdir)/*.htm \ - $(docsrcdir)/*.jpg \ - $(docsrcdir)/helpheader.htm.in - -MAINTAINERCLEANFILES = Makefile.in diff -Nru clucene-core-0.9.21b/doc/Makefile.in clucene-core-2.3.3.4/doc/Makefile.in --- clucene-core-0.9.21b/doc/Makefile.in 2008-10-23 18:18:24.000000000 +0000 +++ clucene-core-2.3.3.4/doc/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,350 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/helpheader.htm.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_cxx_have_std.m4 \ - $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ - $(top_srcdir)/m4/ac_cxx_have_wctype_h.m4 \ - $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ - $(top_srcdir)/m4/ac_define_integer_bits.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/ax_config_feature.m4 \ - $(top_srcdir)/m4/ax_prefix_config_h.m4 \ - $(top_srcdir)/m4/dps_float_byte.m4 \ - $(top_srcdir)/m4/dps_snprintf_oflow.m4 \ - $(top_srcdir)/m4/dps_static_const_type.m4 \ - $(top_srcdir)/m4/dps_swprintf_works.m4 \ - $(top_srcdir)/m4/mdl_cxx_function_try_blocks.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h.tmp -CONFIG_CLEAN_FILES = helpheader.htm -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLLIB_VERSION = @CLLIB_VERSION@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GREP = @GREP@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -acx_pthread_config = @acx_pthread_config@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_doxygen = @enable_doxygen@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -docsrcdir = $(top_srcdir)/doc -EXTRA_DIST = $(docsrcdir)/*.htm \ - $(docsrcdir)/*.jpg \ - $(docsrcdir)/helpheader.htm.in - -MAINTAINERCLEANFILES = Makefile.in -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -helpheader.htm: $(top_builddir)/config.status $(srcdir)/helpheader.htm.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/$(docsrcdir) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru clucene-core-0.9.21b/Doxyfile.in clucene-core-2.3.3.4/Doxyfile.in --- clucene-core-0.9.21b/Doxyfile.in 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/Doxyfile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,977 +0,0 @@ -# Doxyfile 1.2.18 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# General configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = @PACKAGE@ - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = @VERSION@ - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ./doc - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these class will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower case letters. If set to YES upper case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are adviced to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explict @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# reimplements. - -INHERIT_DOCS = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = "memory=\par Memory management:\n" - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consist of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = ./src/CLucene - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl - -FILE_PATTERNS = *.h - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = CLBackwards.h mem.h bufferedstream.h fileinputstream.h stringreader.h - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = "**/config/**" - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = ./doc/helpheader.htm - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = ./doc/helpfooter.htm - -# The HTML_STYLESHEET tag can be used to specify a user defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output dir. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non empty doxygen will try to run -# the html help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the Html help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, -# or Internet explorer 4.0+). Note that for large projects the tree generation -# can take a very long time. In such cases it is better to disable this feature. -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimised for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assigments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_XML = NO - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = ./src/ - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = "_MSC_VER=1400" -PREDEFINED += "WIN32" -PREDEFINED += "LUCENE_HIDE_INTERNAL" - -#namespaces -PREDEFINED += "CL_NS(sub)=lucene::sub" -PREDEFINED += "CL_NS2(sub,sub2)=lucene::sub:sub2" -PREDEFINED += "CL_NS_DEF(sub)=namespace lucene{ namespace sub{" -PREDEFINED += "CL_NS_DEF2(sub,sub2)=namespace lucene{ namespace sub{ namespace sub2 {" -PREDEFINED += "CL_NS_END=}}" -PREDEFINED += "CL_NS_END2=}}}" -PREDEFINED += "CL_NS_USE(sub)=using namespace lucene::sub" -PREDEFINED += "CL_NS_USE2(sub,sub2)=using namespace lucene::sub::sub2" -PREDEFINED += "CL_NS_STD(func)=std::func" -PREDEFINED += "CL_NS_HASHING(func)=std::func" - -PREDEFINED += "LUCENE_BASE=public CL_NS(debug)::LuceneBase" -PREDEFINED += "LUCENE_REFBASE=public CL_NS(debug)::LuceneBase" -PREDEFINED += "_CL_DEPRECATED(x)=" - - -# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tagfiles. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superceded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yield more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = @enable_dot@ - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermedate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff -Nru clucene-core-0.9.21b/.gitattributes clucene-core-2.3.3.4/.gitattributes --- clucene-core-0.9.21b/.gitattributes 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/.gitattributes 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1 @@ +french_utf8.txt crlf=input diff -Nru clucene-core-0.9.21b/.gitignore clucene-core-2.3.3.4/.gitignore --- clucene-core-0.9.21b/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/.gitignore 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,11 @@ +# git-ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ +obj +bin +msvc +build +~$* \ No newline at end of file diff -Nru clucene-core-0.9.21b/HACKING clucene-core-2.3.3.4/HACKING --- clucene-core-0.9.21b/HACKING 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/HACKING 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ - -CVS ---- - -CLucene's source repository is in SVN - -For information on CVS, see: -http://sourceforge.net/svn/?group_id=80013 - - -Coding Style ------------- - -CLucene follows a hybrid coding style. Because of the nature of the code being -a java port, there are naturally some java like syntax. - -todo: put the coding standard here - -* Never use CL_NS_USE(x) in a header file (use CL_NS(x):: for each class), it defeats the purpose of namespaces. -* Use CL_NS_USE(x) in .cpp files if there are more than a few usages of that namespace. - -Good development tips ---------------------- -When developing, use the available clucene debugging tools: -* _CND_DEBUG - condition debugging, an 'assert' type system (or configure with --enable-cnddebug) -* LUCENE_ENABLE_MEMLEAKTRACKING - to assist in memory leak tracking (or configure with --enable-debug), - enable this. This keeps track of clucene object creations - and deletions. Always use _CLNEW and _CLDELETE. At the end - of your program, call: - -_lucene_run_objectcheck - -lucene::debug::LuceneBase::__cl_PrintUnclosedObjects(); - which prints all the open clucene objects. Then call -lucene::debug::LuceneBase::__cl_ClearMemory(); - which clears all the clucene memory, so that you can - use other memory tracking tools to further help you - discover memory leaks - -__cl_PrintUnclosedObjects returns a list of objects with -the number that it was created at. If your debugger allows -you to set watches you can add: -_lucene_counter_break -to the watch list and change the value to this number. Then -it will break into CLDebugBreak in the StdHeader.cpp file. - -Another trick is to use set: -_lucene_run_objectcheck - to true. This will check the validity of memory before deleting it. -It can't always help, but may help in some situations. - -Good performance tips: -CLucene has a lot of new changes to help improve performance. -Some of them are still being tuned... - -MSVC profiling tutorial: -http://webserver.tc.cornell.edu/services/edu/topics/Performance/Profiling/more.asp - -For GCC see gprof -you can enable gprof by configuring with --enable-gprof - -Developing ----------- -When developing, please keep in mind cross-platform issues and also -character set issues (unicode/ascii). - -Hint: -To do a quick test to see if the code compiles -run this command from the root directory of clucene. -It will compile all the CLucene code monolithically. - - % cd src; make monolithic; cd ../test; make monolithic; ./cl_test_monolithic - -This will do a quick compile then run all the clucene tests. - -GDB - GNU debugging tool ------------------------- -This is not clucene specific, but useful none the less. - -Because cl_test is a libtool bash script, you can use this command to -run gdb: - -libtool --mode=execute gdb cl_test - -Then type run to start the debug tool. -If a crash occurs, you can type bt to get a backtrace. - -Valgrind - test for memory errors ---------------------------------- -This is not clucene specific, but useful for novices none the less. - -Because cl_test is a libtool bash script, you can use this command to -run valgrind: - -libtool --mode=execute valgrind --leak-check=full cl_test - -If any memory errors occur, they will be printed to the console. - -There are some memory 'errors' which i think are false positives. -This commands supresses those errors: - -libtool --mode=execute valgrind --leak-check=full --suppressions=../valgrind.supp cl_test - diff -Nru clucene-core-0.9.21b/INSTALL clucene-core-2.3.3.4/INSTALL --- clucene-core-0.9.21b/INSTALL 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/INSTALL 2011-03-17 00:21:07.000000000 +0000 @@ -1,69 +1,265 @@ -Linux Build instructions -======================================= +* There are packages available for most linux distributions through the usual channels. +* The Clucene Sourceforge website also has some distributions available. -If you downloaded CLucene as a tar ball you should be able to skip straight -to the section titled 'building', otherwise read the next section +Also in this document is information how to build from source, troubleshooting, +performance, and how to create a new distribution. -Rebuilding the autobuild scripts --------------------------------- -If you made changes to the configure.ac or any of the Makefile.am -files you will also need to run through this process. - -Requirements: -GNU autotools is required. I have the following versions installed: -Autoconf 2.57 -Automake 1.72 -Libtool 1.5a - -If you use significantly older versions, I can almost guarantee -issues. This is because each of the autotools is constantly changing -with little regard to backward compatability or even compatiability -with the other autotools. - -Run the autogen.sh file in the root directory of clucene to run the necessary commands. - - -Building --------- -The following will get you building assuming that you have suffciently -recent buld tools installed. -1.) unpack tarball -2.) cd into clucene -3.) if you downloaded a tar version skip to 5 -4.) run ./autogen.sh -5.) run ./configure -6.) run make -7.) things will churn for a very long time, the clucene library will -be built as well as the examples. -8.) check the src/demo, test and src directory - -In src/demo you should see: -cl_demo - -In test you should see -cl_test - -In src you should see: -libclucene.so.0.0.0 libclucene.la libclucene.a -and symbolic links to these files. - -9.) If you want to run make install to copy the clucene files into the system - include and lib directories -10.) You may have to run -export LD_LIBRARY_PATH=/path/to/clucene/lib - -11.) run ./cl_test in the test directory and check that the tests all run - -Alternative (faster) way of building: -------------------------------------- -This method does not create library files, so depending on your needs you may not -find this method useful. - -* Do steps 1-5 of the previous build process. -* Change directory into src/ -* run make monolithic -* Change directory into test/ (cd ../test/) -* run make monolithic -* You should see cl_test_monolithic in this directory -* run ./cl_test_monolithic and check that the tests all run +Building from source: +-------------------- + +Dependencies: +* CMake version 2.4.2 or later. +* A functioning and fairly new C++ compiler. We test mostly on GCC and Visual Studio 6+. +Anything other than that may not work. +* Something to unzip/untar the source code. + +Build instructions: +1.) Download the latest sourcecode from http://www.sourceforge.net/projects/clucene + [Choose stable if you want the 'time tested' version of code. However, often + the unstable version will suite your needs more since it is newer and has had + more work put into it. The decision is up to you.] +2.) Unpack the tarball/zip/bzip/whatever +3.) Open a command prompt, terminal window, or cygwin session. +4.) Change directory into the root of the sourcecode (from now on referred to as ) +# cd +5.) Create and change directory into an 'out-of-source' directory for your build. + [This is by far the easiest way to build, it has the benefit of being able to + create different types of builds in the same source-tree.] +# mkdir /build-name +# cd /build-name +6.) Configure using cmake. This can be done many different ways, but the basic syntax is +# cmake [-G "Script name"] .. + [Where "Script name" is the name of the scripts to build (e.g. Visual Studio 8 2005). + A list of supported build scripts can be found by] +# cmake --help +7.) You can configure several options such as the build type, debugging information, + mmap support, etc, by using the CMake GUI or by calling +# ccmake .. + Make sure you call configure again if you make any changes. +8.) Start the build. This depends on which build script you specified, but it would be something like +# make +or +# nmake + Or open the solution files with your IDE. + + [You can also specify to just build a certain target (such as cl_test, cl_demo, + clucene-core (shared library), clucene-core-static (static library).] +9.) The binary files will be available in build-name/bin +10.)Test the code. (After building the tests - this is done by default, or by calling make cl_test) +# ctest -V +11.)At this point you can install the library: +# make install + [There are options to do this from the IDE, but I find it easier to create a + distribution (see instructions below) and install that instead.] +or +# make cl_demo + [This creates the demo application, which demonstrates a simple text indexing and searching]. +or + Adjust build values using ccmake or the Cmake GUI and rebuild. + +12.)Now you can develop your own code. This is beyond the scope of this document. + Read the README for information about documentation or to get help on the mailinglist. + +Other platforms: +---------------- +Some platforms require specific actions to get cmake working. Here are some general tips: + +Solaris: +I had problems when using the standard stl library. Using the -stlport4 switch worked. Had +to specify compiler from the command line: cmake -DCXX_COMPILER=xxx -stlport4 + +Building Performance +-------------------- +Use of ccache will speed up build times a lot. I found it easiest to add the /usr/lib/ccache directory to the beginning of your paths. This works for most common compilers. + +PATH=/usr/lib/ccache:$PATH + +Note: you must do this BEFORE you configure the path, since you cannot change the compiler path after it is configured. + +Installing: +----------- +CLucene is installed in CMAKE_INSTALL_PREFIX by default. + +CLucene used to put config headers next to the library. this was done +because these headers are generated and are relevant to the library. +CMAKE_INSTALL_PREFIX was for system-independent files. the idea is that +you could have several versions of the library installed (ascii version, +ucs2 version, multithread, etc) and have only one set of headers. +in version 0.9.24+ we allow this feature, but you have to use +LUCENE_SYS_INCLUDES to specify where to install these files. + +Troubleshooting: +---------------- + +'Too many open files' +Some platforms don't provide enough file handles to run CLucene properly. +To solve this, increase the open file limit: + +On Solaris: +ulimit -n 1024 +set rlim_fd_cur=1024 + +GDB - GNU debugging tool (linux only) +------------------------ +If you get an error, try doing this. More information on GDB can be found on the internet + +#gdb bin/cl_test +# gdb> run +when gdb shows a crash run +# gdb> bt +a backtrace will be printed. This may help to solve any problems. + +Code layout +-------------- +File locations: +* clucene-config.h is required and is distributed next to the library, so that multiple libraries can exist on the + same machine, but use the same header files. +* _HeaderFile.h files are private, and are not to be used or distributed by anything besides the clucene-core library. +* _clucene-config.h should NOT be used, it is also internal +* HeaderFile.h are public and are distributed and the classes within should be exported using CLUCENE_EXPORT. +* The exception to the internal/public conventions is if you use the static library. In this case the internal + symbols will be available (this is the way the tests program tests internal code). However this is not recommended. + +Memory management +------------------ +Memory in CLucene has been a bit of a difficult thing to manage because of the +unclear specification about who owns what memory. This was mostly a result of +CLucene's java-esque coding style resulting from porting from java to c++ without +too much re-writing of the API. However, CLucene is slowly improving +in this respect and we try and follow these development and coding rules (though +we dont guarantee that they are all met at this stage): + +1. Whenever possible the caller must create the object that is being filled. For example: +IndexReader->getDocument(id, document); +As opposed to the old method of document = IndexReader->getDocument(id); + +2. Clone always returns a new object that must be cleaned up manually. + +Questions: +1. What should be the convention for an object taking ownership of memory? + Some documenting is available on this, but not much + +Working with valgrind +---------------------- +Valgrind reports memory leaks and memory problems. Tests should always pass +valgrind before being passed. + +#valgrind --leak-check=full + +Memory leak tracking with dmalloc +--------------------------------- +dmalloc (http://dmalloc.com/) is also a nice tool for finding memory leaks. +To enable, set the ENABLE_DMALLOC flag to ON in cmake. You will of course +have to have the dmalloc lib installed for this to work. + +The cl_test file will by default print a low number of errors and leaks into +the dmalloc.log.txt file (however, this has a tendency to print false positives). +You can override this by setting your environment variable DMALLOC_OPTIONS. +See http://dmalloc.com/ or dmalloc --usage for more information on how to use dmalloc + +For example: +# DMALLOC_OPTIONS=medium,log=dmalloc.log.txt +# export DMALLOC_OPTIONS + +UPDATE: when i upgrade my machine to Ubuntu 9.04, dmalloc stopped working (caused +clucene to crash). + +Performance with callgrind +-------------------------- +Really simple + +valgrind --tool=callgrind +this will create a file like callgrind.out.12345. you can open this with kcachegrind or some +tool like that. + + +Performance with gprof +---------------------- +Note: I recommend callgrind, it works much better. + +Compile with gprof turned on (ENABLE_GPROF in cmake gui or using ccmake). +I've found (at least on windows cygwin) that gprof wasn't working over +dll boundaries, running the cl_test-pedantic monolithic build worked better. + +This is typically what I use to produce some meaningful output after a -pg +compiled application has exited: +# gprof bin/cl_test-pedantic.exe gmon.out >gprof.txt + +Code coverage with gcov +----------------------- +To create a code coverage report of the test, you can use gcov. Here are the +steps I followed to create a nice html report. You'll need the lcov package +installed to generate html. Also, I recommend using an out-of-source build +directory as there are lots of files that will be generated. + +NOTE: you must have lcov installed for this to work + +* It is normally recommended to compile with no optimisations, so change CMAKE_BUILD_TYPE +to Debug. + +* I have created a cl_test-gcov target which contains the necessary gcc switches +already. So all you need to do is +# make test-gcov + +If everything goes well, there will be a directory called code-coverage containing the report. + +If you want to do this process manually, then: +# lcov --directory ./src/test/CMakeFiles/cl_test-gcov.dir/__/core/CLucene -c -o clucene-coverage.info +# lcov --remove clucene-coverage.info "/usr/*" > clucene-coverage.clean +# genhtml -o clucene-coverage clucene-coverage.clean + +If both those commands pass, then there will be a clucene coverage report in the +clucene-coverage directory. + +Benchmarks +---------- +Very little benchmarking has been done on clucene. Andi Vajda posted some +limited statistics on the clucene list a while ago with the following results. + +There are 250 HTML files under $JAVA_HOME/docs/api/java/util for about +6108kb of HTML text. +org.apache.lucene.demo.IndexFiles with java and gcj: +on mac os x 10.3.1 (panther) powerbook g4 1ghz 1gb: + . running with java 1.4.1_01-99 : 20379 ms + . running with gcj 3.3.2 -O2 : 17842 ms + . running clucene 0.8.9's demo : 9930 ms + +I recently did some more tests and came up with these rough tests: +663mb (797 files) of Guttenberg texts +on a Pentium 4 running Windows XP with 1 GB of RAM. Indexing max 100,000 fields +- Jlucene: 646453ms. peak mem usage ~72mb, avg ~14mb ram +- Clucene: 232141. peak mem usage ~60, avg ~4mb ram + +Searching indexing using 10,000 single word queries +- Jlucene: ~60078ms and used ~13mb ram +- Clucene: ~48359ms and used ~4.2mb ram + +Distribution +------------ +CPack is used for creating distributions. +* Create a out-of-source build as per usual +* Make sure the version number is correct (see /CMakeList.txt, right at the top of the file) +* Make sure you are compiling in the correct release mode (check ccmake or the cmake gui) +* Make sure you enable ENABLE_PACKAGING (check ccmake or the cmake gui) +* Next, check that the package is compliant using several tests (must be done from a linux terminal, or cygwin): +# cd /build-name +# ../dist-check.sh +* Make sure the source directory is clean. Make sure there are no unknown svn files: +# svn stat .. +* Run the tests to make sure that the code is ok (documented above) +* If all tests pass, then run +# make package +for the binary package (and header files). This will only create a tar.gz package. +and/or +# make package_source +for the source package. This will create a ZIP on windows, and tar.bz2 and tar.gz packages on other platforms. + +There are also options for create RPM, Cygwin, NSIS, Debian packages, etc. It depends on your version of CPack. +Call +# cpack --help +to get a list of generators. + +Then create a special package by calling +# cpack -G CPackConfig.cmake + diff -Nru clucene-core-0.9.21b/Jamfile clucene-core-2.3.3.4/Jamfile --- clucene-core-0.9.21b/Jamfile 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/Jamfile 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ - -project clucene - : source-location src/ ; - - -lib libclucene : CLucene/CLMonolithic.cpp - : src/ ; - - diff -Nru clucene-core-0.9.21b/Jamfile.v2 clucene-core-2.3.3.4/Jamfile.v2 --- clucene-core-0.9.21b/Jamfile.v2 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/Jamfile.v2 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ - -project clucene - : requirements $(BOOST_ROOT) - : requirements src/ - : usage-requirements $(BOOST_ROOT) - : usage-requirements src/ - : build-dir build - ; -#todo: fix this -build-project build/boost ; -build-project test ; -build-project contributions/demo ; -build-project contributions/logreader ; - diff -Nru clucene-core-0.9.21b/LGPL.license clucene-core-2.3.3.4/LGPL.license --- clucene-core-0.9.21b/LGPL.license 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/LGPL.license 2011-03-17 00:21:07.000000000 +0000 @@ -1,475 +1,475 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - -------------------------------------------------------------------------------- - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - -------------------------------------------------------------------------------- - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - -------------------------------------------------------------------------------- - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - -------------------------------------------------------------------------------- - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - -------------------------------------------------------------------------------- - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - -------------------------------------------------------------------------------- - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - -------------------------------------------------------------------------------- - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - -------------------------------------------------------------------------------- - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + +------------------------------------------------------------------------------- + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +------------------------------------------------------------------------------- + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + +------------------------------------------------------------------------------- + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + +------------------------------------------------------------------------------- + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + +------------------------------------------------------------------------------- + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + +------------------------------------------------------------------------------- + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + +------------------------------------------------------------------------------- + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + +------------------------------------------------------------------------------- + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + diff -Nru clucene-core-0.9.21b/m4/ac_cxx_have_std.m4 clucene-core-2.3.3.4/m4/ac_cxx_have_std.m4 --- clucene-core-0.9.21b/m4/ac_cxx_have_std.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/ac_cxx_have_std.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -dnl AC_CXX_HAVE_STD -AC_DEFUN([AC_CXX_HAVE_STD], -[AC_CACHE_CHECK(whether the compiler supports ISO C++ standard library, -ac_cv_cxx_have_std, -[AC_REQUIRE([AC_CXX_NAMESPACES]) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include -#include -#include -#include -#ifdef HAVE_NAMESPACES -using namespace std; -#endif],[return 0;], - ac_cv_cxx_have_std=yes, ac_cv_cxx_have_std=no) - AC_LANG_RESTORE -]) -if test "$ac_cv_cxx_have_std" = yes; then - AC_DEFINE(HAVE_STD,,[define if the compiler supports ISO C++ standard library]) -fi -]) diff -Nru clucene-core-0.9.21b/m4/ac_cxx_have_stl.m4 clucene-core-2.3.3.4/m4/ac_cxx_have_stl.m4 --- clucene-core-0.9.21b/m4/ac_cxx_have_stl.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/ac_cxx_have_stl.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -dnl AC_CXX_HAVE_STL -AC_DEFUN([AC_CXX_HAVE_STL], -[AC_CACHE_CHECK(whether the compiler supports Standard Template Library, -ac_cv_cxx_have_stl, -[AC_REQUIRE([AC_CXX_NAMESPACES]) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include -#include -#ifdef HAVE_NAMESPACES -using namespace std; -#endif],[list x; x.push_back(5); -list::iterator iter = x.begin(); if (iter != x.end()) ++iter; return 0;], - ac_cv_cxx_have_stl=yes, ac_cv_cxx_have_stl=no) - AC_LANG_RESTORE -]) -if test "$ac_cv_cxx_have_stl" = yes; then - AC_DEFINE(HAVE_STL,,[define if the compiler supports Standard Template Library]) -fi -]) diff -Nru clucene-core-0.9.21b/m4/ac_cxx_have_wctype_h.m4 clucene-core-2.3.3.4/m4/ac_cxx_have_wctype_h.m4 --- clucene-core-0.9.21b/m4/ac_cxx_have_wctype_h.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/ac_cxx_have_wctype_h.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -dnl AC_CXX_HAVE_WCTYPE_H -AC_DEFUN([AC_CXX_HAVE_WCTYPE_H], -[AC_CACHE_CHECK(for a functioning wctype.h header, -ac_cv_cxx_have_wctype_h, -[AC_REQUIRE([AC_CXX_NAMESPACES]) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_RUN([#include - int main(void){ int x=iswalnum(100); return 0;}], - ac_cv_cxx_have_wctype_h=yes, ac_cv_cxx_have_wctype_h=no, ac_cv_cxx_have_wctype_h=no) - AC_LANG_RESTORE -]) -if test "$ac_cv_cxx_have_wctype_h" = yes; then - AC_DEFINE(HAVE_WCTYPE_H,,[Define to 1 if you have a functioning header file.]) -fi -]) diff -Nru clucene-core-0.9.21b/m4/ac_cxx_namespaces.m4 clucene-core-2.3.3.4/m4/ac_cxx_namespaces.m4 --- clucene-core-0.9.21b/m4/ac_cxx_namespaces.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/ac_cxx_namespaces.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -dnl AC_CXX_NAMESPACES -AC_DEFUN([AC_CXX_NAMESPACES], -[AC_CACHE_CHECK(whether the compiler implements namespaces, -ac_cv_cxx_namespaces, -[AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([namespace Outer { namespace Inner { int i = 0; }}], - [using namespace Outer::Inner; return i;], - ac_cv_cxx_namespaces=yes, ac_cv_cxx_namespaces=no) - AC_LANG_RESTORE -]) -if test "$ac_cv_cxx_namespaces" = yes; then - AC_DEFINE(HAVE_NAMESPACES,,[define if the compiler implements namespaces]) -fi -]) diff -Nru clucene-core-0.9.21b/m4/ac_define_integer_bits.m4 clucene-core-2.3.3.4/m4/ac_define_integer_bits.m4 --- clucene-core-0.9.21b/m4/ac_define_integer_bits.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/ac_define_integer_bits.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -dnl AC_DEFINE_INTEGER_BITS -AC_DEFUN([AC_DEFINE_INTEGER_BITS], -[m4_define([ac_datatype_bits], [m4_translit($1, [a-zA-Z_])]) -m4_define([ac_datatype_bytes], [m4_eval(ac_datatype_bits/8)]) -AC_CHECK_TYPE($1, , - [ - AC_MSG_NOTICE([trying to find a suitable ]ac_datatype_bytes[-byte replacement for $1]) - $1=no - find_$1 () - { - _AC_DEFINE_INTEGER_BITS_HELPER($@) - : - } - find_$1 - AC_DEFINE_UNQUOTED($1, $$1, - [If not already defined, then define as a datatype of *exactly* ]ac_datatype_bits[ bits.]) - ]) -]) - -dnl Iterate over arguments $2..$N, trying to find a good match for $1. -m4_define([_AC_DEFINE_INTEGER_BITS_HELPER], -[ifelse($2, , , - [m4_define([ac_datatype_bits], [m4_translit($1, [a-zA-Z_])]) - m4_define([ac_datatype_bytes], [m4_eval(ac_datatype_bits/8)]) - AC_CHECK_SIZEOF($2) - if test "$AS_TR_SH(ac_cv_sizeof_$2)" -eq ac_datatype_bytes; then - $1="$2" - return - fi - _AC_DEFINE_INTEGER_BITS_HELPER($1, m4_shift(m4_shift($@))) - ]) -]) diff -Nru clucene-core-0.9.21b/m4/acx_pthread.m4 clucene-core-2.3.3.4/m4/acx_pthread.m4 --- clucene-core-0.9.21b/m4/acx_pthread.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/acx_pthread.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,234 +0,0 @@ -dnl Available from the GNU Autoconf Macro Archive at: -dnl http://autoconf-archive.cryp.to/acx_pthread.html -dnl Version: 2005-06-15 -dnl -AC_DEFUN([ACX_PTHREAD], [ -AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_SAVE -AC_LANG_C -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) - AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) - AC_MSG_RESULT($acx_pthread_ok) - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthread or - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - case $flag in - none) - AC_MSG_CHECKING([whether pthreads work without any flags]) - ;; - - -*) - AC_MSG_CHECKING([whether pthreads work with $flag]) - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - AC_MSG_CHECKING([for the pthreads library -l$flag]) - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - AC_TRY_LINK([#include ], - [pthread_t th=pthread_self(); pthread_attr_t attr;pthread_join(th, 0); - pthread_attr_init(&attr); - pthread_mutex_t mtx; pthread_mutex_init(&mtx,0); - pthread_mutex_lock(&mtx); pthread_mutex_unlock(&mtx); - pthread_mutex_destroy(&mtx) ], - [acx_pthread_ok=yes]) - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - AC_MSG_RESULT($acx_pthread_ok) - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: threads are created detached by default - # and the JOINABLE attribute has a nonstandard name (UNDETACHED). - AC_MSG_CHECKING([for joinable pthread attribute]) - AC_TRY_LINK([#include ], - [int attr=PTHREAD_CREATE_JOINABLE;], - ok=PTHREAD_CREATE_JOINABLE, ok=unknown) - if test x"$ok" = xunknown; then - AC_TRY_LINK([#include ], - [int attr=PTHREAD_CREATE_UNDETACHED;], - ok=PTHREAD_CREATE_UNDETACHED, ok=unknown) - fi - if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then - AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok, - [Define to the necessary symbol if this constant uses a non-standard name on your system.]) - fi - AC_MSG_RESULT(${ok}) - if test x"$ok" = xunknown; then - AC_MSG_WARN([we do not know how to create joinable pthreads]) - fi - - AC_MSG_CHECKING([if more special flags are required for pthreads]) - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - AC_MSG_RESULT($flag) - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - - - dnl Check for recursive mutex support (per SUSv3). - AC_MSG_CHECKING([for recursive mutex support]) - AC_TRY_RUN([#include - #include - #include - - int main() { - pthread_mutexattr_t attr; - pthread_mutex_t m; - - exit (pthread_mutexattr_init(&attr) - || pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) - || pthread_mutex_init(&m, &attr)); - }], [acx_pthreads_recursive=yes], [acx_pthreads_recursive=no]) - dnl NOTE: pthread_mutexattr_setkind_np is the deprecated name for pthread_mutexattr_settype. old compilers might need it - - if test "$acx_pthreads_recursive" = "yes"; then - AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], 1, - [Define if recursive pthread mutexes are available]) - fi - AC_MSG_RESULT($acx_pthreads_recursive) - - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: must compile with cc_r - AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) - -else - case $host in - *-*-mingw32*) - AC_MSG_RESULT([MINGW32: use windows threading library!]) - ;; - *) - AC_MSG_ERROR([Cannot find a working pthread configuration. If you think this is wrong, please review acx_pthread.m4 and report the problem]) - ;; - esac - PTHREAD_CC="$CC" -fi - -AC_SUBST(PTHREAD_LIBS) -AC_SUBST(PTHREAD_CFLAGS) -AC_SUBST(PTHREAD_CC) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) - : -else - acx_pthread_ok=no - $2 -fi -AC_LANG_RESTORE -])dnl ACX_PTHREAD diff -Nru clucene-core-0.9.21b/m4/ax_config_feature.m4 clucene-core-2.3.3.4/m4/ax_config_feature.m4 --- clucene-core-0.9.21b/m4/ax_config_feature.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/ax_config_feature.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -dnl AX_CONFIG_FEATURE -AC_DEFUN([AX_CONFIG_FEATURE],[ dnl -m4_pushdef([FEATURE], patsubst([$1], -, _))dnl - -AC_ARG_ENABLE([$1],AC_HELP_STRING([--enable-$1],[$2]),[ -case "${enableval}" in - yes) - ax_config_feature_[]FEATURE[]="yes" - ;; - no) - ax_config_feature_[]FEATURE[]="no" - ;; - *) - AC_MSG_ERROR([bad value ${enableval} for feature --$1]) - ;; -esac -]) - -AS_IF([test "$ax_config_feature_[]FEATURE[]" = yes],[ dnl - AC_DEFINE([$3]) - $5 - AS_IF([test "$ax_config_feature_verbose" = yes],[ dnl - AC_MSG_NOTICE([Feature $1 is enabled]) - ]) -],[ dnl - $6 - AS_IF([test "$ax_config_feature_verbose" = yes],[ dnl - AC_MSG_NOTICE([Feature $1 is disabled]) - ]) -]) - -AH_TEMPLATE([$3],[$4]) - -m4_popdef([FEATURE])dnl -]) - -dnl Feature global -AC_DEFUN([AX_CONFIG_FEATURE_VERBOSE],[ dnl - ax_config_feature_verbose=yes -]) - -dnl Feature global -AC_DEFUN([AX_CONFIG_FEATURE_SILENT],[ dnl - ax_config_feature_verbose=no -]) - -dnl Feature specific -AC_DEFUN([AX_CONFIG_FEATURE_DEFAULT_ENABLED], [ - ax_config_feature_[]FEATURE[]_default=yes -]) - -dnl Feature specific -AC_DEFUN([AX_CONFIG_FEATURE_DEFAULT_DISABLED], [ - ax_config_feature_[]FEATURE[]_default=no -]) - -dnl Feature specific -AC_DEFUN([AX_CONFIG_FEATURE_ENABLE],[ dnl - ax_config_feature_[]patsubst([$1], -, _)[]=yes -]) - -dnl Feature specific -AC_DEFUN([AX_CONFIG_FEATURE_DISABLE],[ dnl - ax_config_feature_[]patsubst([$1], -, _)[]=yes -]) diff -Nru clucene-core-0.9.21b/m4/ax_prefix_config_h.m4 clucene-core-2.3.3.4/m4/ax_prefix_config_h.m4 --- clucene-core-0.9.21b/m4/ax_prefix_config_h.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/ax_prefix_config_h.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,195 +0,0 @@ -dnl @synopsis AX_PREFIX_CONFIG_H [(OUTPUT-HEADER [,PREFIX [,ORIG-HEADER]])] -dnl -dnl This is a new variant from ac_prefix_config_ this one will use a -dnl lowercase-prefix if the config-define was starting with a -dnl lowercase-char, e.g. "#define const", "#define restrict", or -dnl "#define off_t", (and this one can live in another directory, e.g. -dnl testpkg/config.h therefore I decided to move the output-header to -dnl be the first arg) -dnl -dnl takes the usual config.h generated header file; looks for each of -dnl the generated "#define SOMEDEF" lines, and prefixes the defined -dnl name (ie. makes it "#define PREFIX_SOMEDEF". The result is written -dnl to the output config.header file. The PREFIX is converted to -dnl uppercase for the conversions. -dnl -dnl Defaults: -dnl -dnl OUTPUT-HEADER = $PACKAGE-config.h -dnl PREFIX = $PACKAGE -dnl ORIG-HEADER, from AM_CONFIG_HEADER(config.h) -dnl -dnl Your configure.ac script should contain both macros in this order, -dnl and unlike the earlier variations of this prefix-macro it is okay -dnl to place the AX_PREFIX_CONFIG_H call before the AC_OUTPUT -dnl invokation. -dnl -dnl Example: -dnl -dnl AC_INIT(config.h.in) # config.h.in as created by "autoheader" -dnl AM_INIT_AUTOMAKE(testpkg, 0.1.1) # makes #undef VERSION and PACKAGE -dnl AM_CONFIG_HEADER(config.h) # prep config.h from config.h.in -dnl AX_PREFIX_CONFIG_H(mylib/_config.h) # prep mylib/_config.h from it.. -dnl AC_MEMORY_H # makes "#undef NEED_MEMORY_H" -dnl AC_C_CONST_H # makes "#undef const" -dnl AC_OUTPUT(Makefile) # creates the "config.h" now -dnl # and also mylib/_config.h -dnl -dnl if the argument to AX_PREFIX_CONFIG_H would have been omitted then -dnl the default outputfile would have been called simply -dnl "testpkg-config.h", but even under the name "mylib/_config.h" it -dnl contains prefix-defines like -dnl -dnl #ifndef TESTPKG_VERSION -dnl #define TESTPKG_VERSION "0.1.1" -dnl #endif -dnl #ifndef TESTPKG_NEED_MEMORY_H -dnl #define TESTPKG_NEED_MEMORY_H 1 -dnl #endif -dnl #ifndef _testpkg_const -dnl #define _testpkg_const _const -dnl #endif -dnl -dnl and this "mylib/_config.h" can be installed along with other -dnl header-files, which is most convenient when creating a shared -dnl library (that has some headers) where some functionality is -dnl dependent on the OS-features detected at compile-time. No need to -dnl invent some "mylib-confdefs.h.in" manually. :-) -dnl -dnl Note that some AC_DEFINEs that end up in the config.h file are -dnl actually self-referential - e.g. AC_C_INLINE, AC_C_CONST, and the -dnl AC_TYPE_OFF_T say that they "will define inline|const|off_t if the -dnl system does not do it by itself". You might want to clean up about -dnl these - consider an extra mylib/conf.h that reads something like: -dnl -dnl #include -dnl #ifndef _testpkg_const -dnl #define _testpkg_const const -dnl #endif -dnl -dnl and then start using _testpkg_const in the header files. That is -dnl also a good thing to differentiate whether some library-user has -dnl starting to take up with a different compiler, so perhaps it could -dnl read something like this: -dnl -dnl #ifdef _MSC_VER -dnl #include -dnl #else -dnl #include -dnl #endif -dnl #ifndef _testpkg_const -dnl #define _testpkg_const const -dnl #endif -dnl -dnl Modified by Ben van Klinken for CLucene. Added a 4th parameter which -dnl should be a list of parameters that should not be prefixed. This -dnl simplifies the usage by not requiring some of the previously documented -dnl workarounds. -dnl -dnl @category Misc -dnl @author Guido Draheim -dnl @author Mårten Svantesson -dnl @version 2005-06-08 -dnl @license GPLWithACException - -AC_DEFUN([AX_PREFIX_CONFIG_H],[AC_REQUIRE([AC_CONFIG_HEADER]) -AC_CONFIG_COMMANDS([ifelse($1,,$PACKAGE-config.h,$1)],[dnl -AS_VAR_PUSHDEF([_OUT],[ac_prefix_conf_OUT])dnl -AS_VAR_PUSHDEF([_DEF],[ac_prefix_conf_DEF])dnl -AS_VAR_PUSHDEF([_PKG],[ac_prefix_conf_PKG])dnl -AS_VAR_PUSHDEF([_LOW],[ac_prefix_conf_LOW])dnl -AS_VAR_PUSHDEF([_UPP],[ac_prefix_conf_UPP])dnl -AS_VAR_PUSHDEF([_IGN],[ac_prefix_conf_IGN])dnl -AS_VAR_PUSHDEF([_INP],[ac_prefix_conf_INP])dnl -m4_pushdef([_script],[conftest.prefix])dnl -m4_pushdef([_symbol],[m4_cr_Letters[]m4_cr_digits[]_])dnl -_OUT=`printf '%s\n' ifelse($1, , $PACKAGE-config.h, $1)` -_DEF=`printf '%s\n' _$_OUT | sed -e "y:m4_cr_letters:m4_cr_LETTERS[]:" -e "s/@<:@^m4_cr_Letters@:>@/_/g"` -_PKG=`printf '%s\n' ifelse($2, , $PACKAGE, $2)` -_LOW=`printf '%s\n' _$_PKG | sed -e "y:m4_cr_LETTERS-:m4_cr_letters[]_:"` -_UPP=`printf '%s\n' $_PKG | sed -e "y:m4_cr_letters-:m4_cr_LETTERS[]_:" -e "/^@<:@m4_cr_digits@:>@/s/^/_/"` -_IGN="$4" -_INP=`printf '%s\n' "ifelse($3,,,$3)" | sed -e 's/ *//'` -if test ".$_INP" = "."; then - for ac_file in : $CONFIG_HEADERS; do test "_$ac_file" = _: && continue - case "$ac_file" in - *.h) _INP=$ac_file ;; - *) - esac - test ".$_INP" != "." && break - done -fi -if test ".$_INP" = "."; then - case "$_OUT" in - */*) _INP=`basename "$_OUT"` - ;; - *-*) _INP=`printf '%s\n' "$_OUT" | sed -e "s/@<:@_symbol@:>@*-//"` - ;; - *) _INP=config.h - ;; - esac -fi -if test -z "$_PKG" ; then - AC_MSG_ERROR([no prefix for _PREFIX_PKG_CONFIG_H]) -else - if test ! -f "$_INP" ; then if test -f "$srcdir/$_INP" ; then - _INP="$srcdir/$_INP" - fi fi - AC_MSG_NOTICE(creating $_OUT - prefix $_UPP for $_INP defines) - if test -f $_INP ; then - printf '%s\n' "s/@%:@undef *\\(@<:@m4_cr_LETTERS[]_@:>@\\)/@%:@undef $_UPP""_\\1/" > _script - printf '%s\n' "s/@%:@undef *\\(@<:@m4_cr_letters@:>@\\)/@%:@undef $_LOW""_\\1/" >> _script - printf '%s\n' "s/@%:@def[]ine *\\(@<:@m4_cr_LETTERS[]_@:>@@<:@_symbol@:>@*\\)\\(.*\\)/@%:@ifndef $_UPP""_\\1 \\" >> _script - printf '%s\n' "@%:@def[]ine $_UPP""_\\1 \\2 \\" >> _script - printf '%s\n' "@%:@endif/" >>_script - printf '%s\n' "s/@%:@def[]ine *\\(@<:@m4_cr_letters@:>@@<:@_symbol@:>@*\\)\\(.*\\)/@%:@ifndef $_LOW""_\\1 \\" >> _script - printf '%s\n' "@%:@define $_LOW""_\\1 \\2 \\" >> _script - printf '%s\n' "@%:@endif/" >> _script - - #take 4th parameter for the ignore list. - #goes through the list and reverts each item back to its original state - #works for both upper and lower case prefixes - for _IGNx in $_IGN; do - printf '%s\n' "s/#ifndef $ac_prefix_conf_LOW""_$_IGNx/#ifndef $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#define $ac_prefix_conf_LOW""_$_IGNx/#define $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#undef $ac_prefix_conf_LOW""_$_IGNx/#undef $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#ifndef $ac_prefix_conf_UPP""_$_IGNx/#ifndef $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#define $ac_prefix_conf_UPP""_$_IGNx/#define $_IGNx/" >> conftest.prefix - printf '%s\n' "s/#undef $ac_prefix_conf_UPP""_$_IGNx/#undef $_IGNx/" >> conftest.prefix - done - - - # now executing _script on _DEF input to create _OUT output file - printf '%s\n' "@%:@ifndef $_DEF" >$tmp/pconfig.h - printf '%s\n' "@%:@def[]ine $_DEF 1" >>$tmp/pconfig.h - printf '%s\n' ' ' >>$tmp/pconfig.h - printf '%s\n' /'*' $_OUT. Generated automatically at end of configure. '*'/ >>$tmp/pconfig.h - - sed -f _script $_INP >>$tmp/pconfig.h - printf '%s\n' ' ' >>$tmp/pconfig.h - printf '%s\n' '/* once:' $_DEF '*/' >>$tmp/pconfig.h - printf '%s\n' "@%:@endif" >>$tmp/pconfig.h - if cmp -s $_OUT $tmp/pconfig.h 2>/dev/null; then - AC_MSG_NOTICE([$_OUT is unchanged]) - else - ac_dir=`AS_DIRNAME(["$_OUT"])` - AS_MKDIR_P(["$ac_dir"]) - rm -f "$_OUT" - mv $tmp/pconfig.h "$_OUT" - fi - cp _script _configs.sed - else - AC_MSG_ERROR([input file $_INP does not exist - skip generating $_OUT]) - fi - rm -f conftest.* -fi -m4_popdef([_symbol])dnl -m4_popdef([_script])dnl -AS_VAR_POPDEF([_INP])dnl -AS_VAR_POPDEF([_UPP])dnl -AS_VAR_POPDEF([_LOW])dnl -AS_VAR_POPDEF([_IGN])dnl -AS_VAR_POPDEF([_PKG])dnl -AS_VAR_POPDEF([_DEF])dnl -AS_VAR_POPDEF([_OUT])dnl -],[PACKAGE="$PACKAGE"])]) diff -Nru clucene-core-0.9.21b/m4/dps_float_byte.m4 clucene-core-2.3.3.4/m4/dps_float_byte.m4 --- clucene-core-0.9.21b/m4/dps_float_byte.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/dps_float_byte.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -dnl dps_float_byte -AC_DEFUN([dps_float_byte], - [AC_MSG_CHECKING(whether ${CXX} supports our byte<->float conversions) - AC_CACHE_VAL(mdl_cv_have_float_byte_support, - [ AC_TRY_RUN( - changequote(<<<, >>>)dnl - <<< - typedef long double float_t; - typedef long int32_t; - typedef char uint8_t; - - //float to bits conversion utilities... - union clvalue { - int32_t i; - float f; //must use a float type, else types dont match up - }; - - int32_t floatToIntBits(float_t value) - { - clvalue u; - int32_t e, f; - u.f = value; - e = u.i & 0x7f800000; - f = u.i & 0x007fffff; - - if (e == 0x7f800000 && f != 0) - u.i = 0x7fc00000; - - return u.i; - } - float_t intBitsToFloat(int32_t bits) - { - clvalue u; - u.i = bits; - return u.f; - } - - float_t byteToFloat(uint8_t b) { - if (b == 0) // zero is a special case - return 0.0f; - int32_t mantissa = b & 7; - int32_t exponent = (b >> 3) & 31; - int32_t bits = ((exponent+(63-15)) << 24) | (mantissa << 21); - return intBitsToFloat(bits); - } - - uint8_t floatToByte(float_t f) { - if (f < 0.0f) // round negatives up to zero - f = 0.0f; - - if (f == 0.0f) // zero is a special case - return 0; - - int32_t bits = floatToIntBits(f); // parse float_t into parts - int32_t mantissa = (bits & 0xffffff) >> 21; - int32_t exponent = (((bits >> 24) & 0x7f) - 63) + 15; - - if (exponent > 31) { // overflow: use max value - exponent = 31; - mantissa = 7; - } - - if (exponent < 0) { // underflow: use min value - exponent = 0; - mantissa = 1; - } - - return (uint8_t)((exponent << 3) | mantissa); // pack into a uint8_t - } - - int main(void) - { - //well know conversion - if ( floatToByte(0.5f) != 120 ) - return 1; - - //converting back works? - if ( floatToByte(byteToFloat(57)) != 57 ) - return 1; - - return 0; - } ->>> - changequote([, ]), dps_float_byte_fail=0, dps_float_byte_fail=1, - dps_float_byte_fail=2 - )] -) - - if test $dps_float_byte_fail -eq 0; then - AC_MSG_RESULT([yes]) - elif test $dps_float_byte_fail -eq 1; then - AC_MSG_RESULT([no]) - AC_DEFINE([HAVE_NO_FLOAT_BYTE], [], [Does not support new float byte<->float conversions]) - else - AC_MSG_RESULT([unknown, assuming broken]) - AC_DEFINE([HAVE_NO_FLOAT_BYTE], [], [Does not support new float byte<->float conversions]) - fi - -]) \ No newline at end of file diff -Nru clucene-core-0.9.21b/m4/dps_snprintf_oflow.m4 clucene-core-2.3.3.4/m4/dps_snprintf_oflow.m4 --- clucene-core-0.9.21b/m4/dps_snprintf_oflow.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/dps_snprintf_oflow.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -dnl dps_snprintf_oflow -AC_DEFUN([dps_snprintf_oflow], - [AC_MSG_CHECKING(whether snprintf ignores n) - AC_CACHE_VAL(dps_cv_snprintf_bug, - [AC_TRY_RUN( - changequote(<<, >>)dnl - <<#include - - #ifndef HAVE_SNPRINTF - #ifdef HAVE_VSNPRINTF - #include "vsnprintf.h" - #else /* not HAVE_VSNPRINTF */ - #include "vsnprintf.c" - #endif /* HAVE_VSNPRINTF */ - #endif /* HAVE_SNPRINTF */ - - int main(void) - { - char ovbuf[7]; - int i; - for (i=0; i<7; i++) ovbuf[i]='x'; - snprintf(ovbuf, 4,"foo%s", "bar"); - if (ovbuf[5]!='x') exit(1); - snprintf(ovbuf, 4,"foo%d", 666); - if (ovbuf[5]!='x') exit(1); - exit(0); - } >> - changequote([, ]), dps_cv_snprintf_bug=0, dps_cv_snprintf_bug=1, - dps_cv_snprintf_bug=2 - ) - ]) - if test $dps_cv_snprintf_bug -eq 0; then - AC_MSG_RESULT([no, snprintf is ok]) - elif test $dps_cv_snprintf_bug -eq 1; then - AC_MSG_RESULT([yes, snprintf is broken]) - AC_DEFINE([HAVE_SNPRINTF_BUG],[][Defined if the snprintf overflow test fails]) - else - AC_MSG_RESULT([unknown, assuming yes]) - AC_DEFINE([HAVE_SNPRINTF_BUG],[],[Defined if the snprintf overflow test fails]) - fi -]) diff -Nru clucene-core-0.9.21b/m4/dps_static_const_type.m4 clucene-core-2.3.3.4/m4/dps_static_const_type.m4 --- clucene-core-0.9.21b/m4/dps_static_const_type.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/dps_static_const_type.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -dnl dps_static_const -AC_DEFUN([dps_static_const], - [AC_MSG_CHECKING(whether ${CXX} supports static const definitions in classes) - AC_CACHE_VAL(dps_static_const_type, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - - AC_TRY_RUN([class x{public: static const int SCI=55; }; int main(){ x a; if ( a.SCI!=55 ) throw "err"; }], - dps_static_const_type=1, - dps_static_const_type=0, - dps_static_const_type=0) - - if test $dps_static_const_type -eq 0; then - AC_TRY_RUN([class x{public: enum{ SCI=55 }; }; int main(){ x a; if ( a.SCI!=55 ) throw "err"; }], - dps_static_const_type=2, - dps_static_const_type=0, - dps_static_const_type=0) - fi - - AC_LANG_RESTORE - ]) - if test $dps_static_const_type -eq 1; then - AC_MSG_RESULT([yes]) - AC_DEFINE([LUCENE_STATIC_CONSTANT_SYNTAX], 1, [How to define a static const in a class]) - elif test $dps_static_const_type -eq 2; then - AC_MSG_RESULT([yes]) - AC_DEFINE([LUCENE_STATIC_CONSTANT_SYNTAX], 2, [How to define a static const in a class]) - else - AC_MSG_ERROR([Cannot figure out how to write static consts in classes. Check the m4 script or upgrade your compiler]) - fi - -]) \ No newline at end of file diff -Nru clucene-core-0.9.21b/m4/dps_swprintf_works.m4 clucene-core-2.3.3.4/m4/dps_swprintf_works.m4 --- clucene-core-0.9.21b/m4/dps_swprintf_works.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/dps_swprintf_works.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -dnl dps_swprintf_works -AC_DEFUN([dps_swprintf_works], - [AC_MSG_CHECKING(whether swprintf is broken) - AC_CACHE_VAL(dps_cv_swprintf_works, - [ AC_TRY_RUN( - changequote(<<, >>)dnl - <<#include - #include - - int main(void) - { - wchar_t buf[5]; - swprintf(buf,5,L"%s",L"foo"); - if ( wcslen(buf) != 3 ) - exit(1); - exit(0); - } >> - changequote([, ]), dps_cv_swprintf_works=0, dps_cv_swprintf_works=1, - dps_cv_swprintf_works=2 - )] - ) - if test $dps_cv_swprintf_works -eq 0; then - AC_MSG_RESULT([no, swprintf is ok]) - elif test $dps_cv_swprintf_works -eq 1; then - AC_MSG_RESULT([yes, swprintf is broken]) - AC_DEFINE([HAVE_SWPRINTF_BUG],[],[Defined if the swprintf test fails]) - else - AC_MSG_RESULT([unknown, assuming yes]) - AC_DEFINE([HAVE_SWPRINTF_BUG],[],[Defined if the swprintf test fails]) - fi -]) diff -Nru clucene-core-0.9.21b/m4/mdl_cxx_function_try_blocks.m4 clucene-core-2.3.3.4/m4/mdl_cxx_function_try_blocks.m4 --- clucene-core-0.9.21b/m4/mdl_cxx_function_try_blocks.m4 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/m4/mdl_cxx_function_try_blocks.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -dnl MDL_CXX_FUNCTION_TRY_BLOCKS -AC_DEFUN([MDL_CXX_FUNCTION_TRY_BLOCKS], -[ -AC_REQUIRE([AC_PROG_CXX]) -AC_MSG_CHECKING(whether ${CXX} supports function try blocks) -AC_CACHE_VAL(mdl_cv_have_function_try_blocks, -[ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([void foo() try{} catch( ... ){}], - [foo();], - mdl_cv_have_function_try_blocks=yes, - mdl_cv_have_function_try_blocks=no) - AC_LANG_RESTORE -]) -AC_MSG_RESULT($mdl_cv_have_function_try_blocks) -if test "$mdl_cv_have_function_try_blocks" = no; then -AC_DEFINE([HAVE_NO_FUNCTION_TRY_BLOCKS], [], [Does not support try/catch blocks]) -fi]) diff -Nru clucene-core-0.9.21b/Makefile.am clucene-core-2.3.3.4/Makefile.am --- clucene-core-0.9.21b/Makefile.am 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,97 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -INCLUDES = -I$(top_srcdir) - -SUBDIRS = src test -DIST_SUBDIRS = src test doc win32 . - -ACLOCAL_AMFLAGS = -I $(top_srcdir)/m4 - -EXTRA_DIST = $(top_srcdir)/APACHE.license \ - $(top_srcdir)/LGPL.license \ - $(top_srcdir)/project-root.jam \ - $(top_srcdir)/Jamfile.v2 \ - $(top_srcdir)/Jamfile \ - $(top_srcdir)/autogen.sh \ - $(top_srcdir)/HACKING \ - $(top_srcdir)/REQUESTS \ - $(top_srcdir)/CMakeLists.txt - -distall: distdir - $(AMTAR) chof - $(distdir) >$(distdir).tar - GZIP=$(GZIP_ENV) gzip -c $(distdir).tar >$(distdir).tar.gz - bzip2 -9 -c $(distdir).tar >$(distdir).tar.bz2 - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - -rm -f $(distdir).tar - $(am__remove_distdir) - -dist-hook: - rm -rfd `find $(distdir)/ -name CVS` - rm -rfd `find $(distdir)/ -name .svn` - rm -rfd `find $(distdir)/ -name .dep` - -MAINTAINERCLEANFILES = Makefile.in \ - aclocal.m4 \ - configure \ - config.h.tmp.in - -DISTCLEANFILES = *.tar.gz \ - *.tar.bz2 \ - *.zip \ - _configs.sed \ - src/CLucene/clucene-config.h \ - config.h.tmp - -upload: - make distcheck - ncftpput -v upload.sourceforge.net /incoming @PACKAGE@-@VERSION@.tar.gz - -doxygen: - rm -fdr ./doc/html - doxygen Doxyfile - cp ./doc/clucene.jpg ./doc/html/clucene.jpg - -test: test-all - -#test-compiles using different compile options -test-all: test-pedantic test-ascii test-singlethreading test-namespace test-mmap test-mtracking test-refcnt test-minqp - -test-do: - @rm -f src/CLMonolithic.$(OBJEXT) - @rm -f test/cl_test_monolithic$(EXEEXT) - @rm -f test/CLMonolithic_Test.$(OBJEXT) - cd src && $(MAKE) $(AM_MAKEFLAGS) CLMonolithic.$(OBJEXT) AM_CPPFLAGS="-pedantic $(AM_CPPFLAGS)" - cd test && $(MAKE) $(AM_MAKEFLAGS) CLMonolithic_Test.$(OBJEXT) AM_CPPFLAGS="-pedantic $(AM_CPPFLAGS)" - cd test && $(MAKE) $(AM_MAKEFLAGS) cl_test_monolithic$(EXEEXT) AM_CPPFLAGS="-pedantic $(AM_CPPFLAGS)" - test/cl_test_monolithic$(EXEEXT) - -test-pedantic: - $(MAKE) test-do AM_CPPFLAGS="" - -test-ascii: - $(MAKE) test-do AM_CPPFLAGS="-D_ASCII" - -test-namespace: - $(MAKE) test-do AM_CPPFLAGS="-DDISABLE_NAMESPACE" - -test-sparsemap: - $(MAKE) test-do AM_CPPFLAGS="-D_CL_HAVE_GOOGLE_DENSE_HASH_MAP" - -test-mmap: - $(MAKE) test-do AM_CPPFLAGS="-DLUCENE_FS_MMAP" - -test-singlethreading: - $(MAKE) test-do AM_CPPFLAGS="-D_CL_DISABLE_MULTITHREADING" - -test-mtracking: - $(MAKE) test-do AM_CPPFLAGS="-DLUCENE_ENABLE_MEMLEAKTRACKING" - -test-refcnt: - $(MAKE) test-do AM_CPPFLAGS="-DLUCENE_ENABLE_REFCOUNT" - -test-minqp: - $(MAKE) test-do AM_CPPFLAGS="-DNO_FUZZY_QUERY -DNO_WILDCARD_QUERY -DNO_PREFIX_QUERY -DNO_RANGE_QUERY" - -test-debug: - $(MAKE) test-do AM_CPPFLAGS="-D_DEBUG" diff -Nru clucene-core-0.9.21b/Makefile.in clucene-core-2.3.3.4/Makefile.in --- clucene-core-0.9.21b/Makefile.in 2008-10-23 18:18:26.000000000 +0000 +++ clucene-core-2.3.3.4/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,739 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Doxyfile.in \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/config.h.tmp.in $(top_srcdir)/configure AUTHORS \ - COPYING ChangeLog INSTALL NEWS config/config.guess \ - config/config.sub config/depcomp config/install-sh \ - config/ltmain.sh config/missing -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_cxx_have_std.m4 \ - $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ - $(top_srcdir)/m4/ac_cxx_have_wctype_h.m4 \ - $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ - $(top_srcdir)/m4/ac_define_integer_bits.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/ax_config_feature.m4 \ - $(top_srcdir)/m4/ax_prefix_config_h.m4 \ - $(top_srcdir)/m4/dps_float_byte.m4 \ - $(top_srcdir)/m4/dps_snprintf_oflow.m4 \ - $(top_srcdir)/m4/dps_static_const_type.m4 \ - $(top_srcdir)/m4/dps_swprintf_works.m4 \ - $(top_srcdir)/m4/mdl_cxx_function_try_blocks.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno configure.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h.tmp -CONFIG_CLEAN_FILES = Doxyfile -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLLIB_VERSION = @CLLIB_VERSION@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GREP = @GREP@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -acx_pthread_config = @acx_pthread_config@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_doxygen = @enable_doxygen@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -INCLUDES = -I$(top_srcdir) -SUBDIRS = src test -DIST_SUBDIRS = src test doc win32 . -ACLOCAL_AMFLAGS = -I $(top_srcdir)/m4 -EXTRA_DIST = $(top_srcdir)/APACHE.license \ - $(top_srcdir)/LGPL.license \ - $(top_srcdir)/project-root.jam \ - $(top_srcdir)/Jamfile.v2 \ - $(top_srcdir)/Jamfile \ - $(top_srcdir)/autogen.sh \ - $(top_srcdir)/HACKING \ - $(top_srcdir)/REQUESTS \ - $(top_srcdir)/CMakeLists.txt - -MAINTAINERCLEANFILES = Makefile.in \ - aclocal.m4 \ - configure \ - config.h.tmp.in - -DISTCLEANFILES = *.tar.gz \ - *.tar.bz2 \ - *.zip \ - _configs.sed \ - src/CLucene/clucene-config.h \ - config.h.tmp - -all: config.h.tmp - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ - cd $(srcdir) && $(AUTOMAKE) --gnu \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) - -config.h.tmp: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.tmp.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h.tmp -$(srcdir)/config.h.tmp.in: $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h.tmp stamp-h1 -Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in - cd $(top_builddir) && $(SHELL) ./config.status $@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.tmp.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.tmp.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.tmp.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) config.h.tmp.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - mkdir $(distdir) - $(mkdir_p) $(distdir)/$(top_srcdir) $(distdir)/. $(distdir)/config $(distdir)/doc $(distdir)/m4 - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' -distuninstallcheck: - @cd $(distuninstallcheck_dir) \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile config.h.tmp -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-recursive - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-info-am - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-am clean clean-generic clean-libtool clean-recursive \ - ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-recursive distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-info-am - - -distall: distdir - $(AMTAR) chof - $(distdir) >$(distdir).tar - GZIP=$(GZIP_ENV) gzip -c $(distdir).tar >$(distdir).tar.gz - bzip2 -9 -c $(distdir).tar >$(distdir).tar.bz2 - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - -rm -f $(distdir).tar - $(am__remove_distdir) - -dist-hook: - rm -rfd `find $(distdir)/ -name CVS` - rm -rfd `find $(distdir)/ -name .svn` - rm -rfd `find $(distdir)/ -name .dep` - -upload: - make distcheck - ncftpput -v upload.sourceforge.net /incoming @PACKAGE@-@VERSION@.tar.gz - -doxygen: - rm -fdr ./doc/html - doxygen Doxyfile - cp ./doc/clucene.jpg ./doc/html/clucene.jpg - -test: test-all - -#test-compiles using different compile options -test-all: test-pedantic test-ascii test-singlethreading test-namespace test-mmap test-mtracking test-refcnt test-minqp - -test-do: - @rm -f src/CLMonolithic.$(OBJEXT) - @rm -f test/cl_test_monolithic$(EXEEXT) - @rm -f test/CLMonolithic_Test.$(OBJEXT) - cd src && $(MAKE) $(AM_MAKEFLAGS) CLMonolithic.$(OBJEXT) AM_CPPFLAGS="-pedantic $(AM_CPPFLAGS)" - cd test && $(MAKE) $(AM_MAKEFLAGS) CLMonolithic_Test.$(OBJEXT) AM_CPPFLAGS="-pedantic $(AM_CPPFLAGS)" - cd test && $(MAKE) $(AM_MAKEFLAGS) cl_test_monolithic$(EXEEXT) AM_CPPFLAGS="-pedantic $(AM_CPPFLAGS)" - test/cl_test_monolithic$(EXEEXT) - -test-pedantic: - $(MAKE) test-do AM_CPPFLAGS="" - -test-ascii: - $(MAKE) test-do AM_CPPFLAGS="-D_ASCII" - -test-namespace: - $(MAKE) test-do AM_CPPFLAGS="-DDISABLE_NAMESPACE" - -test-sparsemap: - $(MAKE) test-do AM_CPPFLAGS="-D_CL_HAVE_GOOGLE_DENSE_HASH_MAP" - -test-mmap: - $(MAKE) test-do AM_CPPFLAGS="-DLUCENE_FS_MMAP" - -test-singlethreading: - $(MAKE) test-do AM_CPPFLAGS="-D_CL_DISABLE_MULTITHREADING" - -test-mtracking: - $(MAKE) test-do AM_CPPFLAGS="-DLUCENE_ENABLE_MEMLEAKTRACKING" - -test-refcnt: - $(MAKE) test-do AM_CPPFLAGS="-DLUCENE_ENABLE_REFCOUNT" - -test-minqp: - $(MAKE) test-do AM_CPPFLAGS="-DNO_FUZZY_QUERY -DNO_WILDCARD_QUERY -DNO_PREFIX_QUERY -DNO_RANGE_QUERY" - -test-debug: - $(MAKE) test-do AM_CPPFLAGS="-D_DEBUG" -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru clucene-core-0.9.21b/project-root.jam clucene-core-2.3.3.4/project-root.jam --- clucene-core-0.9.21b/project-root.jam 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/project-root.jam 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ - - diff -Nru clucene-core-0.9.21b/README clucene-core-2.3.3.4/README --- clucene-core-0.9.21b/README 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/README 2011-03-17 00:21:07.000000000 +0000 @@ -16,11 +16,11 @@ See the LGPL.license and APACHE.license for the respective license information. Read COPYING for more about the license. + Installation ------------ -* For Linux, MacOSX, cygwin and MinGW build information, read INSTALL. -* Boost.Jam files are provided in the root directory and subdirectories. -* Microsoft Visual Studio (6&7) are provided in the win32 folder. +Read the INSTALL file + Mailing List ------------ @@ -31,57 +31,25 @@ Suggestions and bug reports can be made on our bug tracking database (http://sourceforge.net/tracker/?group_id=80013&atid=558446) + The latest version ------------------ Details of the latest version can be found on the CLucene sourceforge project web site: http://www.sourceforge.net/projects/clucene + Documentation ------------- -Documentation is provided at http://clucene.sourceforge.net/doc/doxygen/html/ -You can also build your own documentation by running doxygen from the root directory -of clucene. +You can build your own documentation by running 'make DoxygenDoc' from your +'out-of-source' cmake-configured build directory. CLucene is a very close port of Java Lucene, so you can also try looking at the Java Docs on http://lucene.apache.org/java/ +There is an online version (which won't be as up to date as if you build your +own) at http://clucene.sourceforge.net/doc/html/ -Performance ------------ -Very little benchmarking has been done on clucene. Andi Vajda posted some -limited statistics on the clucene list a while ago with the following results. - -There are 250 HTML files under $JAVA_HOME/docs/api/java/util for about -6108kb of HTML text. -org.apache.lucene.demo.IndexFiles with java and gcj: -on mac os x 10.3.1 (panther) powerbook g4 1ghz 1gb: - . running with java 1.4.1_01-99 : 20379 ms - . running with gcj 3.3.2 -O2 : 17842 ms - . running clucene 0.8.9's demo : 9930 ms - -I recently did some more tests and came up with these rough tests: -663mb (797 files) of Guttenberg texts -on a Pentium 4 running Windows XP with 1 GB of RAM. Indexing max 100,000 fields -• Jlucene: 646453ms. peak mem usage ~72mb, avg ~14mb ram -• Clucene: 232141. peak mem usage ~60, avg ~4mb ram - -Searching indexing using 10,000 single word queries -• Jlucene: ~60078ms and used ~13mb ram -• Clucene: ~48359ms and used ~4.2mb ram - -Platform notes --------------- - -'Too many open files' -Some platforms don't provide enough file handles to run CLucene properly. -To solve this, increase the open file limit: - -On Solaris: -ulimit -n 1024 -set rlim_fd_cur=1024 - Acknowledgments ---------------- - The Apache Lucene project is the basis for this software, so the biggest acknoledgment goes to that project. @@ -91,26 +59,5 @@ This software contains code derived from the RSA Data Security Inc. MD5 Message-Digest Algorithm. -CLucene relies heavily on the use of autoconf and libtool to provide -a build environment. - -Memory Management ------------------- -Memory in CLucene has been a bit of a difficult thing to manage because of the -unclear specification about who owns what memory. This was mostly a result of -CLucene's java-esque coding style that was a result of porting from java to -c++ without too much re-writing of the API. However, CLucene is slowly improving -in this respect and we try and follow these development and coding rules (though -we dont guarantee that they are all met at this stage): - -1. Whenever possible the caller must create the object that is being filled. For example: -IndexReader->getDocument(id, document); -As opposed to the old method of document = IndexReader->getDocument(id); - -2. Clone always returns a new object that must be cleaned up manually. - -Questions: -1. What should be the convention for an object taking ownership of memory? Documenting this would be a minimum. - - +CLucene relies heavily on the use of cmake to provide a stable build environment. diff -Nru clucene-core-0.9.21b/README.PACKAGE clucene-core-2.3.3.4/README.PACKAGE --- clucene-core-0.9.21b/README.PACKAGE 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/README.PACKAGE 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,11 @@ +CLucene is a C++ port of the popular Apache Lucene search engine +(http://lucene.apache.org/java). It is released under LGPL or the Apache +License. + +CLucene aims to be a high-speed alternative to Java Lucene, its API is very +similar to that of the Java version. CLucene has recently been brought up to +date with Lucene 2.3.2. It contains most of the same functionality as the +Java version. + +This package contains the files necessary for running applications that +use the libclucene library. diff -Nru clucene-core-0.9.21b/REQUESTS clucene-core-2.3.3.4/REQUESTS --- clucene-core-0.9.21b/REQUESTS 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/REQUESTS 2011-03-17 00:21:07.000000000 +0000 @@ -1,3 +1,4 @@ The todo list has been moved to the tracker at http://sourceforge.net/tracker/?func=browse&group_id=80013&atid=558449 +You need to be logged into sourceforge to view this list. diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/AnalysisHeader.cpp clucene-core-2.3.3.4/src/CLucene/analysis/AnalysisHeader.cpp --- clucene-core-0.9.21b/src/CLucene/analysis/AnalysisHeader.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/AnalysisHeader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,200 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "AnalysisHeader.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(analysis) - -const TCHAR* Token::defaultType=_T("word"); - -Token::Token(): - _startOffset (0), - _endOffset (0), - _type ( defaultType ), - positionIncrement (1) -{ - _termTextLen = 0; -#ifndef LUCENE_TOKEN_WORD_LENGTH - _termText = NULL; - bufferTextLen = 0; -#else - _termText[0] = 0; //make sure null terminated - bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; -#endif -} - -Token::~Token(){ -#ifndef LUCENE_TOKEN_WORD_LENGTH - free(_termText); -#endif -} - -Token::Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ): - _startOffset (start), - _endOffset (end), - _type ( typ ), - positionIncrement (1) -{ - _termTextLen = 0; -#ifndef LUCENE_TOKEN_WORD_LENGTH - _termText = NULL; - bufferTextLen = 0; -#else - _termText[0] = 0; //make sure null terminated - bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; -#endif - setText(text); -} - -void Token::set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ){ - _startOffset = start; - _endOffset = end; - _type = typ; - positionIncrement = 1; - setText(text); -} - -void Token::setText(const TCHAR* text){ - _termTextLen = _tcslen(text); - -#ifndef LUCENE_TOKEN_WORD_LENGTH - growBuffer(_termTextLen+1); - _tcsncpy(_termText,text,_termTextLen+1); -#else - if ( _termTextLen > LUCENE_TOKEN_WORD_LENGTH ){ - //in the case where this occurs, we will leave the endOffset as it is - //since the actual word still occupies that space. - _termTextLen=LUCENE_TOKEN_WORD_LENGTH; - } - _tcsncpy(_termText,text,_termTextLen+1); -#endif - _termText[_termTextLen] = 0; //make sure null terminated -} - -void Token::growBuffer(size_t size){ - if(bufferTextLen>=size) - return; -#ifndef LUCENE_TOKEN_WORD_LENGTH - if ( _termText == NULL ) - _termText = (TCHAR*)malloc( size * sizeof(TCHAR) ); - else - _termText = (TCHAR*)realloc( _termText, size * sizeof(TCHAR) ); - bufferTextLen = size; -#else - _CLTHROWA(CL_ERR_TokenMgr,"Couldn't grow Token buffer"); -#endif -} - -void Token::setPositionIncrement(int32_t posIncr) { - if (posIncr < 0) { - _CLTHROWA(CL_ERR_IllegalArgument,"positionIncrement must be >= 0"); - } - positionIncrement = posIncr; -} - -int32_t Token::getPositionIncrement() const { return positionIncrement; } - -// Returns the Token's term text. -const TCHAR* Token::termText() const{ - return (const TCHAR*) _termText; -} -size_t Token::termTextLength() { - if ( _termTextLen == -1 ) //it was invalidated by growBuffer - _termTextLen = _tcslen(_termText); - return _termTextLen; -} -void Token::resetTermTextLen(){ - _termTextLen=-1; -} -bool Token::OrderCompare::operator()( Token* t1, Token* t2 ) const{ - if(t1->startOffset()>t2->startOffset()) - return false; - if(t1->startOffset()startOffset()) - return true; - return true; -} -TCHAR* Token::toString() const{ - StringBuffer sb; - sb.append(_T("(")); - sb.append( _termText ); - sb.append(_T(",")); - sb.appendInt( _startOffset ); - sb.append(_T(",")); - sb.appendInt( _endOffset ); - - if (!_tcscmp( _type, _T("word")) == 0 ){ - sb.append(_T(",type=")); - sb.append(_type); - } - if (positionIncrement != 1){ - sb.append(_T(",posIncr=")); - sb.appendInt(positionIncrement); - } - sb.append(_T(")")); - - return sb.toString(); -} - - -Token* TokenStream::next(){ - Token* t = _CLNEW Token; //deprecated - if ( !next(t) ) - _CLDELETE(t); - return t; -} - - -TokenFilter::TokenFilter(TokenStream* in, bool deleteTS): - input(in), - deleteTokenStream(deleteTS) -{ -} -TokenFilter::~TokenFilter(){ - close(); -} - -// Close the input TokenStream. -void TokenFilter::close() { - if ( input != NULL ){ - input->close(); - if ( deleteTokenStream ) - _CLDELETE( input ); - } - input = NULL; -} - - - -Tokenizer::Tokenizer() { - input = NULL; -} - -Tokenizer::Tokenizer(CL_NS(util)::Reader* _input): - input(_input) -{ -} - -void Tokenizer::close(){ - if (input != NULL) { - // ? delete input; - input = NULL; - } -} - -Tokenizer::~Tokenizer(){ - close(); -} - - -int32_t Analyzer::getPositionIncrementGap(const TCHAR* fieldName) -{ - return 0; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/AnalysisHeader.h clucene-core-2.3.3.4/src/CLucene/analysis/AnalysisHeader.h --- clucene-core-0.9.21b/src/CLucene/analysis/AnalysisHeader.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/AnalysisHeader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,234 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_AnalysisHeader_ -#define _lucene_analysis_AnalysisHeader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Reader.h" - -CL_NS_DEF(analysis) - - -/** A Token is an occurence of a term from the text of a field. It consists of -* a term's text, the start and end offset of the term in the text of the field, -* and a type string. -* -* The start and end offsets permit applications to re-associate a token with -* its source text, e.g., to display highlighted query terms in a document -* browser, or to show matching text fragments in a KWIC (KeyWord In Context) -* display, etc. -* -* The type is an interned string, assigned by a lexical analyzer -* (a.k.a. tokenizer), naming the lexical or syntactic class that the token -* belongs to. For example an end of sentence marker token might be implemented -* with type "eos". The default token type is "word". -*/ -class Token:LUCENE_BASE{ -private: - int32_t _startOffset; // start in source text - int32_t _endOffset; // end in source text - const TCHAR* _type; // lexical type - int32_t positionIncrement; - size_t bufferTextLen; - -public: - #ifndef LUCENE_TOKEN_WORD_LENGTH - TCHAR* _termText; // the text of the term - #else - TCHAR _termText[LUCENE_TOKEN_WORD_LENGTH+1]; // the text of the term - #endif - int32_t _termTextLen; - static const TCHAR* defaultType; - - Token(); - ~Token(); - // Constructs a Token with the given text, start and end offsets, & type. - Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=defaultType); - void set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=defaultType); - - size_t bufferLength(){ return bufferTextLen; } - void growBuffer(size_t size); - - /* Set the position increment. This determines the position of this - * token relative to the previous Token in a TokenStream, used in - * phrase searching. - * - * The default value is 1. - * - * Some common uses for this are: - * - * - Set it to zero to put multiple terms in the same position. This is - * useful if, e.g., a word has multiple stems. Searches for phrases - * including either stem will match. In this case, all but the first stem's - * increment should be set to zero: the increment of the first instance - * should be one. Repeating a token with an increment of zero can also be - * used to boost the scores of matches on that token. - * - * - Set it to values greater than one to inhibit exact phrase matches. - * If, for example, one does not want phrases to match across removed stop - * words, then one could build a stop word filter that removes stop words and - * also sets the increment to the number of stop words removed before each - * non-stop word. Then exact phrase queries will only match when the terms - * occur with no intervening stop words. - */ - void setPositionIncrement(int32_t posIncr); - int32_t getPositionIncrement() const; - const TCHAR* termText() const; - size_t termTextLength(); - void resetTermTextLen(); - void setText(const TCHAR* txt); - - /** - * Returns this Token's starting offset, the position of the first character - * corresponding to this token in the source text. - * - * Note that the difference between endOffset() and startOffset() may not be - * equal to termText.length(), as the term text may have been altered by a - * stemmer or some other filter. - */ - int32_t startOffset() const { return _startOffset; } - void setStartOffset(int32_t val){ _startOffset =val; } - - /** - * Returns this Token's ending offset, one greater than the position of the - * last character corresponding to this token in the source text. - */ - int32_t endOffset() const { return _endOffset; } - void setEndOffset(int32_t val){ _endOffset =val; } - - // Returns this Token's lexical type. Defaults to "word". - const TCHAR* type() const { return _type; } /// - { - public: - bool operator()( Token* t1, Token* t2 ) const; - }; -}; - -/** -* A TokenStream enumerates the sequence of tokens, either from -* fields of a document or from query text. -*

-* This is an abstract class. Concrete subclasses are: -*

    -*
  • {@link Tokenizer}, a TokenStream -* whose input is a Reader; and -*
  • {@link TokenFilter}, a TokenStream -* whose input is another TokenStream. -*
-*/ -class TokenStream:LUCENE_BASE { -public: - /** Sets token to the next token in the stream, returns false at the EOS. */ - virtual bool next(Token* token) = 0; - - /** Releases resources associated with this stream. */ - virtual void close() = 0; - - virtual ~TokenStream(){ - } - - /* This is for backwards compatibility only. You should pass the token you want to fill - * to next(), this will save a lot of object construction and destructions. - * @deprecated. use next(token). Kept only to avoid breaking existing code. - */ - _CL_DEPRECATED(next(Token)) Token* next(); -}; - - -/** An Analyzer builds TokenStreams, which analyze text. It thus represents a - * policy for extracting index terms from text. - *

- * Typical implementations first build a Tokenizer, which breaks the stream of - * characters from the Reader into raw Tokens. One or more TokenFilters may - * then be applied to the output of the Tokenizer. - *

- * WARNING: You must override one of the methods defined by this class in your - * subclass or the Analyzer will enter an infinite loop. - */ -class Analyzer:LUCENE_BASE{ -public: - /** Creates a TokenStream which tokenizes all the text in the provided - Reader. Default implementation forwards to tokenStream(Reader) for - compatibility with older version. Override to allow Analyzer to choose - strategy based on document and/or field. Must be able to handle null - field name for backward compatibility. */ - virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader)=0; - - virtual ~Analyzer(){ - } - - /** - * Invoked before indexing a Field instance if - * terms have already been added to that field. This allows custom - * analyzers to place an automatic position increment gap between - * Field instances using the same field name. The default value - * position increment gap is 0. With a 0 position increment gap and - * the typical default token position increment of 1, all terms in a field, - * including across Field instances, are in successive positions, allowing - * exact PhraseQuery matches, for instance, across Field instance boundaries. - * - * @param fieldName Field name being indexed. - * @return position increment gap, added to the next token emitted from {@link #tokenStream(TCHAR*, Reader*)} - */ - virtual int32_t getPositionIncrementGap(const TCHAR* fieldName); -}; - - -/** A Tokenizer is a TokenStream whose input is a Reader. -

-This is an abstract class. -*/ -class Tokenizer:public TokenStream { -protected: - /** The text source for this Tokenizer. */ - CL_NS(util)::Reader* input; - -public: - /** Construct a tokenizer with null input. */ - Tokenizer(); - /** Construct a token stream processing the given input. */ - Tokenizer(CL_NS(util)::Reader* _input); - - // ** By default, closes the input Reader. */ - virtual void close(); - virtual ~Tokenizer(); -}; - -/** A TokenFilter is a TokenStream whose input is another token stream. -

-This is an abstract class. -*/ -class TokenFilter:public TokenStream { -protected: - /** The source of tokens for this filter. */ - TokenStream* input; - /** If true then input will be deleted in the destructor */ - bool deleteTokenStream; - - /** Construct a token stream filtering the given input. - * - * @param in The TokenStream to filter from - * @param deleteTS If true, input will be deleted in the destructor - */ - TokenFilter(TokenStream* in, bool deleteTS=false); - virtual ~TokenFilter(); -public: - /** Close the input TokenStream. */ - void close(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/Analyzers.cpp clucene-core-2.3.3.4/src/CLucene/analysis/Analyzers.cpp --- clucene-core-0.9.21b/src/CLucene/analysis/Analyzers.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/Analyzers.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,388 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Analyzers.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(analysis) - -CharTokenizer::CharTokenizer(Reader* in) : - Tokenizer(in), - offset(0), - bufferIndex(0), - dataLen(0), - ioBuffer(NULL) -{ - buffer[0]=0; -} - -TCHAR CharTokenizer::normalize(const TCHAR c) const -{ - return c; -} -bool CharTokenizer::next(Token* token){ - int32_t length = 0; - int32_t start = offset; - while (true) { - TCHAR c; - offset++; - if (bufferIndex >= dataLen) { - dataLen = input->read(ioBuffer, LUCENE_IO_BUFFER_SIZE); - if (dataLen == -1) - dataLen = 0; - bufferIndex = 0; - } - if (dataLen <= 0 ) { - if (length > 0) - break; - else - return false; - }else - c = ioBuffer[bufferIndex++]; - if (isTokenChar(c)) { // if it's a token TCHAR - - if (length == 0) // start of token - start = offset-1; - - buffer[length++] = normalize(c); // buffer it, normalized - - if (length == LUCENE_MAX_WORD_LEN) // buffer overflow! - break; - - } else if (length > 0) // at non-Letter w/ chars - break; // return 'em - - } - buffer[length]=0; - token->set( buffer, start, start+length); - return true; -} - -bool LetterTokenizer::isTokenChar(const TCHAR c) const { - return _istalpha(c)!=0; -} - - -TCHAR LowerCaseTokenizer::normalize(const TCHAR chr) const { - return _totlower(chr); -} - -bool WhitespaceTokenizer::isTokenChar(const TCHAR c) const{ - return _istspace(c)==0; //(return true if NOT a space) -} - -TokenStream* WhitespaceAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { - return _CLNEW WhitespaceTokenizer(reader); -} - -TokenStream* SimpleAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { - return _CLNEW LowerCaseTokenizer(reader); -} - -bool LowerCaseFilter::next(Token* t){ - if (!input->next(t)) - return false; - stringCaseFold( t->_termText ); - return true; -} - -StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** stopWords): - TokenFilter(in, deleteTokenStream), - table(_CLNEW CLSetList(false)) -{ - fillStopTable( table,stopWords ); -} - -void StopFilter::fillStopTable(CLSetList* stopTable, - const TCHAR** stopWords) { - for (int32_t i = 0; stopWords[i]!=NULL; i++) - stopTable->insert(stopWords[i]); -} - -bool StopFilter::next(Token* token) { - // return the first non-stop word found - while (input->next(token)){ - if (table->find(token->_termText)==table->end()){ - return true; - } - } - - // reached EOS -- return nothing - return false; -} - -StopAnalyzer::StopAnalyzer():stopTable(false) -{ - StopFilter::fillStopTable(&stopTable,ENGLISH_STOP_WORDS); -} -StopAnalyzer::~StopAnalyzer() -{ -} -StopAnalyzer::StopAnalyzer( const TCHAR** stopWords) { - StopFilter::fillStopTable(&stopTable,stopWords); -} -TokenStream* StopAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { - return _CLNEW StopFilter(_CLNEW LowerCaseTokenizer(reader),true, &stopTable); -} - -const TCHAR* StopAnalyzer::ENGLISH_STOP_WORDS[] = -{ - _T("a"), _T("an"), _T("and"), _T("are"), _T("as"), _T("at"), _T("be"), _T("but"), _T("by"), - _T("for"), _T("if"), _T("in"), _T("into"), _T("is"), _T("it"), - _T("no"), _T("not"), _T("of"), _T("on"), _T("or"), _T("s"), _T("such"), - _T("t"), _T("that"), _T("the"), _T("their"), _T("then"), _T("there"), _T("these"), - _T("they"), _T("this"), _T("to"), _T("was"), _T("will"), _T("with"), NULL -}; - -PerFieldAnalyzerWrapper::PerFieldAnalyzerWrapper(Analyzer* defaultAnalyzer): - analyzerMap(true,true) -{ - this->defaultAnalyzer = defaultAnalyzer; -} -PerFieldAnalyzerWrapper::~PerFieldAnalyzerWrapper(){ - analyzerMap.clear(); - _CLDELETE(defaultAnalyzer); -} - -void PerFieldAnalyzerWrapper::addAnalyzer(const TCHAR* fieldName, Analyzer* analyzer) { - analyzerMap.put(STRDUP_TtoT(fieldName), analyzer); -} - -TokenStream* PerFieldAnalyzerWrapper::tokenStream(const TCHAR* fieldName, Reader* reader) { - Analyzer* analyzer = (fieldName==NULL?defaultAnalyzer:analyzerMap.get(fieldName)); - if (analyzer == NULL) { - analyzer = defaultAnalyzer; - } - - return analyzer->tokenStream(fieldName, reader); -} - - - -bool ISOLatin1AccentFilter::next(Token* token){ - if ( input->next(token) ){ - int32_t l = token->termTextLength(); - const TCHAR* chars = token->termText(); - bool doProcess = false; - for (int32_t i = 0; i < l; ++i) { - #ifdef _UCS2 - if ( chars[i] >= 0xC0 && chars[i] <= 0x178 ) { - #else - if ( (chars[i] >= 0xC0 && chars[i] <= 0xFF) || chars[i] < 0 ) { - #endif - doProcess = true; - break; - } - - } - if ( !doProcess ) { - return true; - } - - StringBuffer output(l*2); - for (int32_t j = 0; j < l; j++) { - #ifdef _UCS2 - TCHAR c = chars[j]; - #else - unsigned char c = chars[j]; - #endif - switch (c) { - case 0xC0 : // À - case 0xC1 : // Á - case 0xC2 : //  - case 0xC3 : // à - case 0xC4 : // Ä - case 0xC5 : // Å - output.appendChar('A'); - break; - case 0xC6 : // Æ - output.append(_T("AE")); - break; - case 0xC7 : // Ç - output.appendChar('C'); - break; - case 0xC8 : // È - case 0xC9 : // É - case 0xCA : // Ê - case 0xCB : // Ë - output.appendChar('E'); - break; - case 0xCC : // Ì - case 0xCD : // Í - case 0xCE : // Î - case 0xCF : // Ï - output.appendChar('I'); - break; - case 0xD0 : // Ð - output.appendChar('D'); - break; - case 0xD1 : // Ñ - output.appendChar('N'); - break; - case 0xD2 : // Ò - case 0xD3 : // Ó - case 0xD4 : // Ô - case 0xD5 : // Õ - case 0xD6 : // Ö - case 0xD8 : // Ø - output.appendChar('O'); - break; - case 0xDE : // Þ - output.append(_T("TH")); - break; - case 0xD9 : // Ù - case 0xDA : // Ú - case 0xDB : // Û - case 0xDC : // Ü - output.appendChar('U'); - break; - case 0xDD : // Ý - output.appendChar('Y'); - break; - case 0xE0 : // à - case 0xE1 : // á - case 0xE2 : // â - case 0xE3 : // ã - case 0xE4 : // ä - case 0xE5 : // å - output.appendChar('a'); - break; - case 0xE6 : // æ - output.append(_T("ae")); - break; - case 0xE7 : // ç - output.appendChar('c'); - break; - case 0xE8 : // è - case 0xE9 : // é - case 0xEA : // ê - case 0xEB : // ë - output.appendChar('e'); - break; - case 0xEC : // ì - case 0xED : // í - case 0xEE : // î - case 0xEF : // ï - output.appendChar('i'); - break; - case 0xF0 : // ð - output.appendChar('d'); - break; - case 0xF1 : // ñ - output.appendChar('n'); - break; - case 0xF2 : // ò - case 0xF3 : // ó - case 0xF4 : // ô - case 0xF5 : // õ - case 0xF6 : // ö - case 0xF8 : // ø - output.appendChar('o'); - break; - case 0xDF : // ß - output.append(_T("ss")); - break; - case 0xFE : // þ - output.append(_T("th")); - break; - case 0xF9 : // ù - case 0xFA : // ú - case 0xFB : // û - case 0xFC : // ü - output.appendChar('u'); - break; - case 0xFD : // ý - case 0xFF : // ÿ - output.appendChar('y'); - break; - - #ifdef _UCS2 - case 0x152 : // Œ - output.append(_T("OE")); - break; - case 0x153 : // œ - output.append(_T("oe")); - break; - case 0x178 : // Ÿ - output.appendChar('Y'); - break; - #endif - default : - output.appendChar(c); - break; - } - } - token->setText(output.getBuffer()); - return true; - } - return false; -} - - -TokenStream* KeywordAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader){ - return _CLNEW KeywordTokenizer(reader); -} - -KeywordTokenizer::KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize): - Tokenizer(input) -{ - this->done = false; - if ( bufferSize < 0 ) - this->bufferSize = DEFAULT_BUFFER_SIZE; -} -KeywordTokenizer::~KeywordTokenizer(){ -} - -bool KeywordTokenizer::next(Token* token){ - if (!done) { - done = true; - int32_t rd; - const TCHAR* buffer=0; - while (true) { - rd = input->read(buffer, bufferSize); - if (rd == -1) - break; - token->growBuffer(token->_termTextLen +rd+1); - - int32_t cp = rd; - if ( token->_termTextLen + cp > token->bufferLength() ) - cp = token->bufferLength() - token->_termTextLen; - _tcsncpy(token->_termText+token->_termTextLen,buffer,cp); - token->_termTextLen+=rd; - } - token->_termText[token->_termTextLen]=0; - token->set(token->_termText,0,token->_termTextLen); - return true; - } - return false; -} - - -LengthFilter::LengthFilter(TokenStream* in, int _min, int _max): - TokenFilter(in) -{ - this->_min = _min; - this->_max = _max; -} - -bool LengthFilter::next(Token* token) -{ - // return the first non-stop word found - while ( input->next(token) ) - { - size_t len = token->termTextLength(); - if (len >= _min && len <= _max) - return true; - // note: else we ignore it but should we index each part of it? - } - // reached EOS -- return null - return false; -} - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/Analyzers.h clucene-core-2.3.3.4/src/CLucene/analysis/Analyzers.h --- clucene-core-0.9.21b/src/CLucene/analysis/Analyzers.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/Analyzers.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,309 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_Analyzers_ -#define _lucene_analysis_Analyzers_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Reader.h" -#include "AnalysisHeader.h" -#include "CLucene/util/Misc.h" - -CL_NS_DEF(analysis) - -/** An abstract base class for simple, character-oriented tokenizers.*/ -class CharTokenizer:public Tokenizer { -private: - int32_t offset, bufferIndex, dataLen; - TCHAR buffer[LUCENE_MAX_WORD_LEN+1]; - const TCHAR* ioBuffer; -protected: - - /** Returns true iff a character should be included in a token. This - * tokenizer generates as tokens adjacent sequences of characters which - * satisfy this predicate. Characters for which this is false are used to - * define token boundaries and are not included in tokens. */ - virtual bool isTokenChar(const TCHAR c) const = 0; - - /** Called on each token character to normalize it before it is added to the - * token. The default implementation does nothing. Subclasses may use this - * to, e.g., lowercase tokens. */ - virtual TCHAR normalize(const TCHAR c) const; - -public: - CharTokenizer(CL_NS(util)::Reader* in); - virtual ~CharTokenizer(){ - } - bool next(Token* token); -}; - - -/** A LetterTokenizer is a tokenizer that divides text at non-letters. That's -to say, it defines tokens as maximal strings of adjacent letters, as defined -by java.lang.Character.isLetter() predicate. - -Note: this does a decent job for most European languages, but does a terrible -job for some Asian languages, where words are not separated by spaces. */ -class LetterTokenizer:public CharTokenizer { -public: - // Construct a new LetterTokenizer. - LetterTokenizer(CL_NS(util)::Reader* in): - CharTokenizer(in) {} - - ~LetterTokenizer(){} -protected: - /** Collects only characters which satisfy _istalpha.*/ - bool isTokenChar(const TCHAR c) const; -}; - - - -/** -* LowerCaseTokenizer performs the function of LetterTokenizer -* and LowerCaseFilter together. It divides text at non-letters and converts -* them to lower case. While it is functionally equivalent to the combination -* of LetterTokenizer and LowerCaseFilter, there is a performance advantage -* to doing the two tasks at once, hence this (redundant) implementation. -*

-* Note: this does a decent job for most European languages, but does a terrible -* job for some Asian languages, where words are not separated by spaces. -*/ -class LowerCaseTokenizer:public LetterTokenizer { -public: - /** Construct a new LowerCaseTokenizer. */ - LowerCaseTokenizer(CL_NS(util)::Reader* in): - LetterTokenizer(in) {} - - ~LowerCaseTokenizer(){} -protected: - /** Collects only characters which satisfy _totlower. */ - TCHAR normalize(const TCHAR chr) const; -}; - - -/** A WhitespaceTokenizer is a tokenizer that divides text at whitespace. - * Adjacent sequences of non-Whitespace characters form tokens. */ -class WhitespaceTokenizer: public CharTokenizer { -public: - /** Construct a new WhitespaceTokenizer. */ - WhitespaceTokenizer(CL_NS(util)::Reader* in):CharTokenizer(in) {} - ~WhitespaceTokenizer(){} -protected: - /** Collects only characters which do not satisfy _istspace. - */ - bool isTokenChar(const TCHAR c) const; -}; - - -/** An Analyzer that uses WhitespaceTokenizer. */ -class WhitespaceAnalyzer: public Analyzer { - public: - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); - ~WhitespaceAnalyzer(){} -}; - -/** An Analyzer that filters LetterTokenizer with LowerCaseFilter. */ -class SimpleAnalyzer: public Analyzer { -public: - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); - ~SimpleAnalyzer(){} -}; - - - -/** -* Normalizes token text to lower case. -*/ -class LowerCaseFilter: public TokenFilter { -public: - LowerCaseFilter(TokenStream* in, bool deleteTokenStream):TokenFilter(in,deleteTokenStream) {} - ~LowerCaseFilter(){} - bool next(Token* token); -}; - - -/** - * Removes stop words from a token stream. - */ -class StopFilter: public TokenFilter { -private: - //bvk: i found this to work faster with a non-hash table. the number of items - //in the stop table is not like to make it worth having hashing. - CL_NS(util)::CLSetList* table; -public: - // Constructs a filter which removes words from the input - // TokenStream that are named in the array of words. - StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** stopWords); - - ~StopFilter(){} - - /** Constructs a filter which removes words from the input - * TokenStream that are named in the CLSetList. - */ - StopFilter(TokenStream* in, bool deleteTokenStream, CL_NS(util)::CLSetList* stopTable): - TokenFilter(in, deleteTokenStream), - table(stopTable) - {} - - - /** - * Builds a Hashtable from an array of stop words, appropriate for passing - * into the StopFilter constructor. This permits this table construction to - * be cached once when an Analyzer is constructed. - * Note: the stopWords list must be a static list because the strings are not copied - */ - static void fillStopTable(CL_NS(util)::CLSetList* stopTable, - const TCHAR** stopWords); - - /** - * Returns the next input Token whose termText() is not a stop word. - */ - bool next(Token* token); -}; - - - - -/** Filters LetterTokenizer with LowerCaseFilter and StopFilter. */ -class StopAnalyzer: public Analyzer { - CL_NS(util)::CLSetList stopTable; - -public: - /** Builds an analyzer which removes words in ENGLISH_STOP_WORDS. */ - StopAnalyzer(); - ~StopAnalyzer(); - - /** Builds an analyzer which removes words in the provided array. */ - StopAnalyzer( const TCHAR** stopWords ); - /** Filters LowerCaseTokenizer with StopFilter. */ - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); - - /** An array containing some common English words that are not usually useful - for searching. */ - static const TCHAR* ENGLISH_STOP_WORDS[]; -}; - - - -/** - * This analyzer is used to facilitate scenarios where different - * fields require different analysis techniques. Use {@link #addAnalyzer} - * to add a non-default analyzer on a field name basis. - * - *

Example usage: - * - *

- *   PerFieldAnalyzerWrapper aWrapper =
- *      new PerFieldAnalyzerWrapper(new StandardAnalyzer());
- *   aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
- *   aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
- * 
- * - *

In this example, StandardAnalyzer will be used for all fields except "firstname" - * and "lastname", for which KeywordAnalyzer will be used. - * - *

A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing - * and query parsing. - */ -class PerFieldAnalyzerWrapper : public Analyzer { -private: - Analyzer* defaultAnalyzer; - CL_NS(util)::CLHashMap > analyzerMap; -public: - /** - * Constructs with default analyzer. - * - * @param defaultAnalyzer Any fields not specifically - * defined to use a different analyzer will use the one provided here. - */ - PerFieldAnalyzerWrapper(Analyzer* defaultAnalyzer); - ~PerFieldAnalyzerWrapper(); - - /** - * Defines an analyzer to use for the specified field. - * - * @param fieldName field name requiring a non-default analyzer - * @param analyzer non-default analyzer to use for field - */ - void addAnalyzer(const TCHAR* fieldName, Analyzer* analyzer); - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); -}; - - -/** - * A filter that replaces accented characters in the ISO Latin 1 character set - * (ISO-8859-1) by their unaccented equivalent. The case will not be altered. - *

- * For instance, 'à' will be replaced by 'a'. - *

- */ -class ISOLatin1AccentFilter: public TokenFilter { -public: - ISOLatin1AccentFilter(TokenStream* input, bool deleteTs): - TokenFilter(input,deleteTs) - { - } - - /** - * To replace accented characters in a String by unaccented equivalents. - */ - bool next(Token* token); -}; - - -/** - * Emits the entire input as a single token. - */ -class KeywordTokenizer: public Tokenizer { -private: - LUCENE_STATIC_CONSTANT(int, DEFAULT_BUFFER_SIZE = 256); - bool done; - int bufferSize; -public: - KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize=-1); - virtual ~KeywordTokenizer(); - bool next(Token* token); -}; - -/** - * "Tokenizes" the entire stream as a single token. This is useful - * for data like zip codes, ids, and some product names. - */ -class KeywordAnalyzer: public Analyzer { -public: - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); - virtual ~KeywordAnalyzer(){} -}; - - -/** - * Removes words that are too long and too short from the stream. - * - */ -class LengthFilter: public TokenFilter { -private: - int _min; - int _max; -public: - /** - * Build a filter that removes words that are too long or too - * short from the text. - */ - LengthFilter(TokenStream* in, int _min, int _max); - - /** - * Returns the next input Token whose termText() is the right len - */ - bool next(Token* token); -}; - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/Makefile.am clucene-core-2.3.3.4/src/CLucene/analysis/Makefile.am --- clucene-core-0.9.21b/src/CLucene/analysis/Makefile.am 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -analyzersdir = $(lsrcdir)/analysis -analyzershdir = $(includedir)/CLucene/analysis - -libclucene_la_SOURCES += $(analyzersdir)/Analyzers.cpp -libclucene_la_SOURCES += $(analyzersdir)/AnalysisHeader.cpp - -analyzersh_HEADERS = $(analyzersdir)/*.h diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/standard/Makefile.am clucene-core-2.3.3.4/src/CLucene/analysis/standard/Makefile.am --- clucene-core-0.9.21b/src/CLucene/analysis/standard/Makefile.am 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/standard/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -stdandir = $(lsrcdir)/analysis/standard -stdanhdir = $(includedir)/CLucene/analysis/standard - -libclucene_la_SOURCES += $(stdandir)/StandardAnalyzer.cpp -libclucene_la_SOURCES += $(stdandir)/StandardFilter.cpp -libclucene_la_SOURCES += $(stdandir)/StandardTokenizer.cpp - -stdanh_HEADERS = $(stdandir)/*.h diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardAnalyzer.cpp clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardAnalyzer.cpp --- clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardAnalyzer.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardAnalyzer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "StandardAnalyzer.h" - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Reader.h" -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/analysis/Analyzers.h" -#include "StandardFilter.h" -#include "StandardTokenizer.h" - -CL_NS_USE(util) -CL_NS_USE(analysis) - -CL_NS_DEF2(analysis,standard) - - StandardAnalyzer::StandardAnalyzer(): - stopSet(false) - { - StopFilter::fillStopTable( &stopSet,CL_NS(analysis)::StopAnalyzer::ENGLISH_STOP_WORDS); - } - - StandardAnalyzer::StandardAnalyzer( const TCHAR** stopWords): - stopSet(false) - { - StopFilter::fillStopTable( &stopSet,stopWords ); - } - - StandardAnalyzer::~StandardAnalyzer(){ - } - - - TokenStream* StandardAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) - { - TokenStream* ret = _CLNEW StandardTokenizer(reader); - ret = _CLNEW StandardFilter(ret,true); - ret = _CLNEW LowerCaseFilter(ret,true); - ret = _CLNEW StopFilter(ret,true, &stopSet); - return ret; - } -CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardAnalyzer.h clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardAnalyzer.h --- clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardAnalyzer.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardAnalyzer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_standard_StandardAnalyzer -#define _lucene_analysis_standard_StandardAnalyzer - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Reader.h" -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/analysis/Analyzers.h" -#include "StandardFilter.h" -#include "StandardTokenizer.h" - - -CL_NS_DEF2(analysis,standard) - - /** Represents a standard analyzer. */ - class StandardAnalyzer : public Analyzer - { - private: - CL_NS(util)::CLSetList stopSet; - public: - /** Builds an analyzer.*/ - StandardAnalyzer(); - - /** Builds an analyzer with the given stop words. */ - StandardAnalyzer( const TCHAR** stopWords); - - ~StandardAnalyzer(); - - - /** - * Constructs a StandardTokenizer filtered by a - * StandardFilter, a LowerCaseFilter and a StopFilter. - */ - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) - ; - }; -CL_NS_END2 -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardFilter.cpp clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardFilter.cpp --- clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardFilter.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "StandardFilter.h" - -#include "../AnalysisHeader.h" -#include "../Analyzers.h" -#include "StandardTokenizerConstants.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(analysis) -CL_NS_USE(util) -CL_NS_DEF2(analysis,standard) - - StandardFilter::StandardFilter(TokenStream* in, bool deleteTokenStream): - TokenFilter(in, deleteTokenStream) - { - } - - StandardFilter::~StandardFilter(){ - } - - bool StandardFilter::next(Token* t) { - if (!input->next(t)) - return false; - - TCHAR* text = t->_termText; - const int32_t textLength = t->termTextLength(); - const TCHAR* type = t->type(); - - if ( type == tokenImage[APOSTROPHE] && //we can compare the type directy since the type should always come from the tokenImage - ( textLength >= 2 && _tcsicmp(text+textLength-2, _T("'s"))==0 ) ) - { - // remove 's - text[textLength-2]=0; - t->resetTermTextLen(); - - return true; - - } else if ( type == tokenImage[ACRONYM] ) { // remove dots - int32_t j = 0; - for ( int32_t i=0;iin. - StandardFilter(TokenStream* in, bool deleteTokenStream); - - ~StandardFilter(); - - - /** Returns the next token in the stream, or NULL at EOS. - *

Removes 's from the end of words. - *

Removes dots from acronyms. - */ - bool next(Token* token); - }; -CL_NS_END2 -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardTokenizerConstants.h clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardTokenizerConstants.h --- clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardTokenizerConstants.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardTokenizerConstants.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_standard_StandardTokenizerConstants -#define _lucene_analysis_standard_StandardTokenizerConstants - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF2(analysis,standard) - enum TokenTypes { - _EOF, - UNKNOWN, - ALPHANUM, - APOSTROPHE, - ACRONYM, - COMPANY, - EMAIL, - HOST, - NUM, - CJK - }; - extern const TCHAR** tokenImage; - -CL_NS_END2 -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardTokenizer.cpp clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardTokenizer.cpp --- clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardTokenizer.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardTokenizer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,447 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "StandardTokenizer.h" - -CL_NS_USE(analysis) -CL_NS_USE(util) -CL_NS_DEF2(analysis,standard) - - const TCHAR* tokenImageArray[] = { - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T(""), - _T("") - }; - const TCHAR** tokenImage = tokenImageArray; - - - /* A bunch of shortcut macros, many of which make assumptions about variable - ** names. These macros enhance readability, not just convenience! */ - #define EOS (ch==-1 || rd->Eos()) - #define SPACE (_istspace((TCHAR)ch) != 0) - #define ALPHA (_istalpha((TCHAR)ch) != 0) - #define ALNUM (_istalnum(ch) != 0) - #define DIGIT (_istdigit(ch) != 0) - #define UNDERSCORE (ch == '_') - - #define _CJK ( (ch>=0x3040 && ch<=0x318f) || \ - (ch>=0x3300 && ch<=0x337f) || \ - (ch>=0x3400 && ch<=0x3d2d) || \ - (ch>=0x4e00 && ch<=0x9fff) || \ - (ch>=0xf900 && ch<=0xfaff) || \ - (ch>=0xac00 && ch<=0xd7af) ) //korean - - - #define DASH (ch == '-') - #define NEGATIVE_SIGN_ DASH - //#define POSITIVE_SIGN_ (ch == '+') - //#define SIGN (NEGATIVE_SIGN_ || POSITIVE_SIGN_) - - #define DOT (ch == '.') - #define DECIMAL DOT - - - //freebsd seems to have a problem with defines over multiple lines, so this has to be one long line - #define _CONSUME_AS_LONG_AS(conditionFails) while (true) { ch = readChar(); if (ch==-1 || (!(conditionFails) || str.len >= LUCENE_MAX_WORD_LEN)) { break; } str.appendChar(ch);} - - #define CONSUME_ALPHAS _CONSUME_AS_LONG_AS(ALPHA) - - #define CONSUME_DIGITS _CONSUME_AS_LONG_AS(DIGIT) - - /* otherMatches is a condition (possibly compound) under which a character - ** that's not an ALNUM or UNDERSCORE can be considered not to break the - ** span. Callers should pass false if only ALNUM/UNDERSCORE are acceptable. */ - #define CONSUME_WORD _CONSUME_AS_LONG_AS(ALNUM || UNDERSCORE) - - /* - ** Consume CJK characters - */ - #define CONSUME_CJK _CONSUME_AS_LONG_AS(_CJK) - - - /* It is considered that "nothing of value" has been read if: - ** a) The "read head" hasn't moved since specialCharPos was established. - ** or - ** b) The "read head" has moved by one character, but that character was - ** either whitespace or not among the characters found in the body of - ** a token (deliberately doesn't include the likes of '@'/'&'). */ - #define CONSUMED_NOTHING_OF_VALUE (rdPos == specialCharPos || (rdPos == specialCharPos+1 && ( SPACE || !(ALNUM || DOT || DASH || UNDERSCORE) ))) - - #define RIGHTMOST(sb) (sb.getBuffer()[sb.len-1]) - #define RIGHTMOST_IS(sb, c) (RIGHTMOST(sb) == c) - /* To discard the last character in a StringBuffer, we decrement the buffer's - ** length indicator and move the terminator back by one character. */ - #define SHAVE_RIGHTMOST(sb) (sb.getBuffer()[--sb.len] = '\0') - - //#define REMOVE_TRAILING_CHARS(sb, charMatchesCondition) { TCHAR* sbBuf = sb.getBuffer(); for (int32_t i = sb.len-1; i >= 0; i--) { TCHAR c = sbBuf[i]; if (charMatchesCondition) { sbBuf[--sb.len] = '\0'; } else {break;}}} - - /* Does StringBuffer sb contain any of the characters in string ofThese? */ - #define CONTAINS_ANY(sb, ofThese) (_tcscspn(sb.getBuffer(), _T(ofThese)) != static_cast(sb.len)) - - - StandardTokenizer::StandardTokenizer(Reader* reader): - rd(_CLNEW FastCharStream(reader)), - /* rdPos is zero-based. It starts at -1, and will advance to the first - ** position when readChar() is first called. */ - rdPos(-1), - tokenStart(-1) - { - } - - StandardTokenizer::~StandardTokenizer() { - _CLDELETE(rd); - } - - int StandardTokenizer::readChar() { - /* Increment by 1 because we're speaking in terms of characters, not - ** necessarily bytes: */ - rdPos++; - return rd->GetNext(); - } - - void StandardTokenizer::unReadChar() { - rd->UnGet(); - rdPos--; - } - - inline bool StandardTokenizer::setToken(Token* t, StringBuffer* sb, TokenTypes tokenCode) { - t->setStartOffset(tokenStart); - t->setEndOffset(tokenStart+sb->length()); - t->setType(tokenImage[tokenCode]); - sb->getBuffer(); //null terminates the buffer - t->resetTermTextLen(); - return true; - } - - bool StandardTokenizer::next(Token* t) { - int ch=0; - while (!EOS) { - ch = readChar(); - - if ( ch == 0 || ch == -1 ){ - continue; - } else if (SPACE) { - continue; - } else if (ALPHA || UNDERSCORE) { - tokenStart = rdPos; - return ReadAlphaNum(ch,t); - } else if (DIGIT || NEGATIVE_SIGN_ || DECIMAL) { - tokenStart = rdPos; - /* ReadNumber returns NULL if it fails to extract a valid number; in - ** that case, we just continue. */ - if (ReadNumber(NULL, ch,t)) - return true; - } else if ( _CJK ){ - if ( ReadCJK(ch,t) ) - return true; - } - } - return false; - } - - bool StandardTokenizer::ReadNumber(const TCHAR* previousNumber, const TCHAR prev,Token* t) { - /* previousNumber is only non-NULL if this function already read a complete - ** number in a previous recursion, yet has been asked to read additional - ** numeric segments. For example, in the HOST "192.168.1.3", "192.168" is - ** a complete number, but this function will recurse to read the "1.3", - ** generating a single HOST token "192.168.1.3". */ - t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word - StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText - TokenTypes tokenType; - bool decExhausted; - if (previousNumber != NULL) { - str.prepend(previousNumber); - tokenType = CL_NS2(analysis,standard)::HOST; - decExhausted = false; - } else { - tokenType = CL_NS2(analysis,standard)::NUM; - decExhausted = (prev == '.'); - } - if ( str.len >= LUCENE_MAX_WORD_LEN ){ - //if a number is too long, i would say there is no point - //storing it, because its going to be the wrong number anyway? - //what do people think? - return false; - } - str.appendChar(prev); - - const bool signExhausted = (prev == '-'); - int ch = prev; - - CONSUME_DIGITS; - - if (str.len < 2 /* CONSUME_DIGITS didn't find any digits. */ - && ( - (signExhausted && !DECIMAL) - || (decExhausted /* && !DIGIT is implied, since CONSUME_DIGITS stopped on a non-digit. */) - ) - ) - { - /* We have either: - ** a) a negative sign that's not followed by either digit(s) or a decimal - ** b) a decimal that's not followed by digit(s) - ** so this is not a valid number. */ - if (!EOS) { - /* Unread the character that stopped CONSUME_DIGITS: */ - unReadChar(); - } - return false; - } - - /* We just read a group of digits. Is it followed by a decimal symbol, - ** implying that there might be another group of digits available? */ - if (!EOS) { - if (DECIMAL) { - if ( str.len >= LUCENE_MAX_WORD_LEN ) - return false; //read above for rationale - str.appendChar(ch); - } else { - unReadChar(); - goto SUCCESSFULLY_EXTRACTED_NUMBER; - } - - CONSUME_DIGITS; - if (!DIGIT && !DECIMAL) { - unReadChar(); - } else if (!EOS && DECIMAL && _istdigit(rd->Peek())) { - /* We just read the fractional digit group, but it's also followed by - ** a decimal symbol and at least one more digit, so this must be a - ** HOST rather than a real number. */ - return ReadNumber(str.getBuffer(), '.',t); - } - } - - SUCCESSFULLY_EXTRACTED_NUMBER: - TCHAR rightmost = RIGHTMOST(str); - /* Don't including a trailing decimal point. */ - if (rightmost == '.') { - SHAVE_RIGHTMOST(str); - unReadChar(); - rightmost = RIGHTMOST(str); - } - /* If all we have left is a negative sign, it's not a valid number. */ - if (rightmost == '-') { - CND_PRECONDITION (str.len == 1, "Number is invalid"); - return false; - } - - return setToken(t,&str,tokenType); - } - - bool StandardTokenizer::ReadAlphaNum(const TCHAR prev, Token* t) { - t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word - StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText - if ( str.len < LUCENE_MAX_WORD_LEN ){ - str.appendChar(prev); - int ch = prev; - - CONSUME_WORD; - if (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) { //still have space for 1 more character? - switch(ch) { /* What follows the first alphanum segment? */ - case '.': - str.appendChar('.'); - return ReadDotted(&str, CL_NS2(analysis,standard)::UNKNOWN,t); - case '\'': - str.appendChar('\''); - return ReadApostrophe(&str,t); - case '@': - str.appendChar('@'); - return ReadAt(&str,t); - case '&': - str.appendChar('&'); - return ReadCompany(&str,t); - /* default: fall through to end of this function. */ - } - } - } - return setToken(t,&str,CL_NS2(analysis,standard)::ALPHANUM); - } - - bool StandardTokenizer::ReadCJK(const TCHAR prev, Token* t) { - t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word - StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText - if ( str.len < LUCENE_MAX_WORD_LEN ){ - str.appendChar(prev); - int ch = prev; - - CONSUME_CJK; - } - return setToken(t,&str,CL_NS2(analysis,standard)::CJK); - } - - - bool StandardTokenizer::ReadDotted(StringBuffer* _str, TokenTypes forcedType, Token* t) { - const int32_t specialCharPos = rdPos; - StringBuffer& str=*_str; - - /* A segment of a "dotted" is not allowed to begin with another dot or a dash. - ** Even though hosts, e-mail addresses, etc., could have a dotted-segment - ** that begins with a dot or a dash, it's far more common in source text - ** for a pattern like "abc.--def" to be intended as two tokens. */ - int ch = rd->Peek(); - if (!(DOT || DASH)) { - bool prevWasDot; - bool prevWasDash; - if (str.len == 0) { - prevWasDot = false; - prevWasDash = false; - } else { - prevWasDot = RIGHTMOST(str) == '.'; - prevWasDash = RIGHTMOST(str) == '-'; - } - while (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) { - ch = readChar(); - const bool dot = ch == '.'; - const bool dash = ch == '-'; - - if (!(ALNUM || UNDERSCORE || dot || dash)) { - break; - } - /* Multiple dots or dashes in succession end the token. - ** Consider the following inputs: - ** "Visit windowsupdate.microsoft.com--update today!" - ** "In the U.S.A.--yes, even there!" */ - if ((dot || dash) && (prevWasDot || prevWasDash)) { - /* We're not going to append the character we just read, in any case. - ** As to the character before it (which is currently RIGHTMOST(str)): - ** Unless RIGHTMOST(str) is a dot, in which we need to save it so the - ** acronym-versus-host detection can work, we want to get rid of it. */ - if (!prevWasDot) { - SHAVE_RIGHTMOST(str); - } - break; - } - - str.appendChar(ch); - - prevWasDot = dot; - prevWasDash = dash; - } - } - - /* There's a potential StringBuffer.append call in the code above, which - ** could cause str to reallocate its internal buffer. We must wait to - ** obtain the optimization-oriented strBuf pointer until after the initial - ** potentially realloc-triggering operations on str. - ** Because there can be other such ops much later in this function, strBuf - ** is guarded within a block to prevent its use during or after the calls - ** that would potentially invalidate it. */ - { /* Begin block-guard of strBuf */ - TCHAR* strBuf = str.getBuffer(); - - bool rightmostIsDot = RIGHTMOST_IS(str, '.'); - if (CONSUMED_NOTHING_OF_VALUE) { - /* No more alphanums available for this token; shave trailing dot, if any. */ - if (rightmostIsDot) { - SHAVE_RIGHTMOST(str); - } - /* If there are no dots remaining, this is a generic ALPHANUM. */ - if (_tcschr(strBuf, '.') == NULL) { - forcedType = CL_NS2(analysis,standard)::ALPHANUM; - } - - /* Check the token to see if it's an acronym. An acronym must have a - ** letter in every even slot and a dot in every odd slot, including the - ** last slot (for example, "U.S.A."). */ - } else if (rightmostIsDot) { - bool isAcronym = true; - const int32_t upperCheckLimit = str.len - 1; /* -1 b/c we already checked the last slot. */ - - for (int32_t i = 0; i < upperCheckLimit; i++) { - const bool even = (i % 2 == 0); - ch = strBuf[i]; - if ( (even && !ALPHA) || (!even && !DOT) ) { - isAcronym = false; - break; - } - } - if (isAcronym) { - forcedType = CL_NS2(analysis,standard)::ACRONYM; - } else { - /* If it's not an acronym, we don't want the trailing dot. */ - SHAVE_RIGHTMOST(str); - /* If there are no dots remaining, this is a generic ALPHANUM. */ - if (_tcschr(strBuf, '.') == NULL) { - forcedType = CL_NS2(analysis,standard)::ALPHANUM; - } - } - } - } /* End block-guard of strBuf */ - - if (!EOS) { - if (ch == '@' && str.len < LUCENE_MAX_WORD_LEN-1) { - str.appendChar('@'); - return ReadAt(&str,t); - } else { - unReadChar(); - } - } - - return setToken(t,&str,CL_NS2(analysis,standard)::UNKNOWN - ? forcedType : CL_NS2(analysis,standard)::HOST); - } - - bool StandardTokenizer::ReadApostrophe(StringBuffer* _str, Token* t) { - StringBuffer& str=*_str; - - TokenTypes tokenType = CL_NS2(analysis,standard)::APOSTROPHE; - const int32_t specialCharPos = rdPos; - int ch=0; - - CONSUME_ALPHAS; - if (RIGHTMOST_IS(str, '\'') || CONSUMED_NOTHING_OF_VALUE) { - /* After the apostrophe, no more alphanums were available within this - ** token; shave trailing apostrophe and revert to generic ALPHANUM. */ - SHAVE_RIGHTMOST(str); - tokenType = CL_NS2(analysis,standard)::ALPHANUM; - } - if (!EOS) { - unReadChar(); - } - - return setToken(t,&str,tokenType); - } - - bool StandardTokenizer::ReadAt(StringBuffer* str, Token* t) { - ReadDotted(str, CL_NS2(analysis,standard)::EMAIL,t); - /* JLucene grammar indicates dots/digits not allowed in company name: */ - if (!CONTAINS_ANY((*str), ".0123456789")) { - setToken(t,str,CL_NS2(analysis,standard)::COMPANY); - } - return true; - } - - bool StandardTokenizer::ReadCompany(StringBuffer* _str, Token* t) { - StringBuffer& str = *_str; - const int32_t specialCharPos = rdPos; - int ch=0; - - CONSUME_WORD; - if (CONSUMED_NOTHING_OF_VALUE) { - /* After the ampersand, no more alphanums were available within this - ** token; shave trailing ampersand and revert to ALPHANUM. */ - CND_PRECONDITION(RIGHTMOST_IS(str, '&'),"ReadCompany failed"); - SHAVE_RIGHTMOST(str); - - - return setToken(t,&str,CL_NS2(analysis,standard)::ALPHANUM); - } - if (!EOS) { - unReadChar(); - } - - return setToken(t,&str,CL_NS2(analysis,standard)::COMPANY); - } - -CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardTokenizer.h clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardTokenizer.h --- clucene-core-0.9.21b/src/CLucene/analysis/standard/StandardTokenizer.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/analysis/standard/StandardTokenizer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_analysis_standard_StandardTokenizer -#define _lucene_analysis_standard_StandardTokenizer - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "../AnalysisHeader.h" -#include "../Analyzers.h" -#include "StandardTokenizerConstants.h" -#include "CLucene/util/StringBuffer.h" -#include "CLucene/util/FastCharStream.h" -#include "CLucene/util/Reader.h" - - -CL_NS_DEF2(analysis,standard) - -/** A grammar-based tokenizer constructed with JavaCC. - * - *

This should be a good tokenizer for most European-language documents: - * - *

    - *
  • Splits words at punctuation characters, removing punctuation. However, a - * dot that's not followed by whitespace is considered part of a token. - *
  • Splits words at hyphens, unless there's a number in the token, in which case - * the whole token is interpreted as a product number and is not split. - *
  • Recognizes email addresses and internet hostnames as one token. - *
- * - *

Many applications have specific tokenizer needs. If this tokenizer does - * not suit your application, please consider copying this source code - * directory to your project and maintaining your own grammar-based tokenizer. - */ - class StandardTokenizer: public Tokenizer { - private: - int32_t rdPos; - int32_t tokenStart; - - // Advance by one character, incrementing rdPos and returning the character. - int readChar(); - // Retreat by one character, decrementing rdPos. - void unReadChar(); - - // createToken centralizes token creation for auditing purposes. - //Token* createToken(CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode); - inline bool setToken(Token* t, CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode); - - bool ReadDotted(CL_NS(util)::StringBuffer* str, TokenTypes forcedType,Token* t); - - public: - CL_NS(util)::FastCharStream* rd; - - // Constructs a tokenizer for this Reader. - StandardTokenizer(CL_NS(util)::Reader* reader); - - ~StandardTokenizer(); - - /** Returns the next token in the stream, or false at end-of-stream. - * The returned token's type is set to an element of - * StandardTokenizerConstants::tokenImage. */ - bool next(Token* token); - - // Reads for number like "1"/"1234.567", or IP address like "192.168.1.2". - bool ReadNumber(const TCHAR* previousNumber, const TCHAR prev, Token* t); - - bool ReadAlphaNum(const TCHAR prev, Token* t); - - // Reads for apostrophe-containing word. - bool ReadApostrophe(CL_NS(util)::StringBuffer* str, Token* t); - - // Reads for something@... it may be a COMPANY name or a EMAIL address - bool ReadAt(CL_NS(util)::StringBuffer* str, Token* t); - - // Reads for COMPANY name like AT&T. - bool ReadCompany(CL_NS(util)::StringBuffer* str, Token* t); - - // Reads CJK characters - bool ReadCJK(const TCHAR prev, Token* t); - }; - -CL_NS_END2 -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/CLBackwards.h clucene-core-2.3.3.4/src/CLucene/CLBackwards.h --- clucene-core-0.9.21b/src/CLucene/CLBackwards.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/CLBackwards.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _clucene_backwards_h -#define _clucene_backwards_h - -//In light of the recent major changes to clucene, -//this file should help to maintain some backwards compatibility -//include it after including StdHeader.h -// -//Note: I haven't tested this much, so please send me your changes - -//dirent is one of the most major changes that won't easily port. -//you can use the TCHAR copying macros, STRCPY_TtoA and STRCPY_AtoT -//to copy between different character types. - -//If you use stringPrintF, you will need to add the target string -//size parameter, because it is using _sntprintf... Change this if you -//want, but _sntprintf is much safer - -#define char_t TCHAR -#define uchar_t TCHAR -#define l_byte_t byte_t - -//#define stringSpn _tcsspn //not used in clucene anymore -#define stringCSpn _tcscspn -#define stringLength _tcslen -//#define stringToInteger _ttoi //not used in clucene anymore, use integer w/ base -#define stringFind _tcsstr -#define stringFindChar _tcschr -#define stringCompare _tcscmp -#define stringNCopy _tcsncpy -#define stringCopy _tcscpy -#define stringCat _tcscat -//#define stringToken _tcstok //not used in clucene anymore -#define stringPrintF _sntprintf //you will have errors, because now we used printf w/ bufferlen count -#define printFormatted _tprintf - -//conversion functions -#define integerToString _i64tot -#define stringToIntegerBase _tcstoi64 -#define stringToFloat _tcstod - -//file find structures -#define Cmd_Stat fileStat -#define Struct_Stat fileStat -#define stringICompare _tcsicmp -#define stringNCompare _tcsncmp -#define stringDifference _tcscmp - -//character conversion functions -#define isSpace _istspace -#define isDigit _istwdigit -#define isAlNum _istwalnum -#define toLower _totlower -#define stringUpper _tcsupr -//#define stringLower _tcslwr //not used in clucene anymore - -#define _THROWX(y) _THROWT(y) -#define _THROWC(y) _THROWA(y) - -//file naming stuff - remember we have changed all names to file naming lower case -#define fileRename _rename -#define fileFullName(abs,rel) _realpath(rel,abs) -#define makeDirectory _tmkdir -#define unlinkFile _unlink - -//no longer supported definitions -#ifdef _UNICODE - #define TO_CHAR_T STRDUP_AtoT - #define _cout wcout - #define _cin wcin - #define _cerr wcerr -#else - #define TO_CHAR_T STRDUP_WtoT - #define _cout cout - #define _cin cin - #define _cerr cerr -#endif - -//some headers that used to be automatically included: -#include "CLucene/util/dirent.h" //if we have dirent, then the native one will be used - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/CLConfig.h clucene-core-2.3.3.4/src/CLucene/CLConfig.h --- clucene-core-0.9.21b/src/CLucene/CLConfig.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/CLConfig.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,301 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_Config_ -#define _lucene_Config_ - - -//////////////////////////////////////////////////////////////////// -// this settings should be set up in the compiler, -// but are put here for reference as to what could be defined -//////////////////////////////////////////////////////////////////// -// -//define this if you want debugging code to be enabled -//#define _DEBUG -// -//define this if you want condition debugging to be enabled -#if defined(_DEBUG) && !defined(_CL__CND_DEBUG) - #define _CL__CND_DEBUG -#endif -// -//define this to print out lots of information about merges, etc -//requires __CL__CND_DEBUG to be defined -//#define _CL_DEBUG_INFO stdout -// -//to disable namespaces define this -//#define DISABLE_NAMESPACE -// -//If you have put the google sparse map code in your include path -//somewhere, then define this to use it. -//#define _CL_HAVE_GOOGLE_DENSE_HASH_MAP -// -//////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////// -// These options can be set depending on the particular needs of -// Your application -//////////////////////////////////////////////////////////////////// -// -//define this to force the build into ascii mode -//#define _ASCII -// -//define this to force the build into ucs2 mode -//#define _UCS2 -// -//if a wide character is being converted to a ascii character and it -//cannot fit, this character is used instead. Required. -#define LUCENE_OOR_CHAR(c) ((char)(((unsigned short)c)&0xFF)) -// -//define if you would like to force clucene to use the internal -//character functions. -//Tests may display unpredictable behaviour if this is not defined. -#define LUCENE_USE_INTERNAL_CHAR_FUNCTIONS -// -//define this to enable mmap support in the fsdirectory IndexInput -//todo: only available for windows so far...need to add MMapInput.cpp to project -//EXPERIMENTAL -//#define LUCENE_FS_MMAP -// -//LOCK_DIR implementation: -//define this to set an exact directory for the lock dir (not recommended) -//all other methods of getting the temporary directory will be ignored -//#define LUCENE_LOCK_DIR "/tmp" -// -//define this to try and load the lock dir from this specified environment variable -#define LUCENE_LOCK_DIR_ENV_1 "TEMP" -//define this if you want to have look up this environment variable if the first one fails -#define LUCENE_LOCK_DIR_ENV_2 "TMP" -//define this if you want to have a fallback directory, if not defined then -//the lockdirectory will be the index directory -#define LUCENE_LOCK_DIR_ENV_FALLBACK "/tmp" -// -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// The following are search query options -// THe NO_* options can make CLucene faster and/or smaller -// special queries sometime require longer search times or may -// not be required -//////////////////////////////////////////////////////////////////// -// -//Define this to remove fuzzy query and sloppy scoring -//#define NO_FUZZY_QUERY -// -//Define to remove wildcard t*m or te?m to match term -//#define NO_WILDCARD_QUERY -// -//Define to remove prefix term query - ter* to match term or terms -//#define NO_PREFIX_QUERY -// -//Define to remove range (exlusive and inclusive) -//#define NO_RANGE_QUERY -// -//This must always be defined. They can be adjusted if required. But -//general Wildcard string would be '*' and Wildcard Char would be '?' -//Both are Required. -#define LUCENE_WILDCARDTERMENUM_WILDCARD_STRING '*' -#define LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR '?' -// -//////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////// -// memory handling configurations -//////////////////////////////////////////////////////////////////// -// -//If this is defined, lucene's configurations are changed -//to use less memory, but may run slower. -//todo: i dont think this actualy changes speed much, just memory -#define LUCENE_OPTIMIZE_FOR_MEMORY -// -//define this if you want the pointer tracking to be enabled -//this is a useful tool for memory leak tracking -//The LuceneBase can slow down the code a *lot* -#if defined(_DEBUG) - #if !defined(LUCENE_DISABLE_MEMTRACKING) && !defined(LUCENE_ENABLE_MEMLEAKTRACKING) - #define LUCENE_ENABLE_MEMLEAKTRACKING - #endif -#endif -// -//enable use of rich file/line tracking. use CL_FILELINE to pass -//to functions like stringDuplicate (or use CL_STRDUP* functions instead) and -//CLStringIntern::x. -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) - #define LUCENE_ENABLE_FILELINEINFO -#endif -// -//enable creation of clucene.log file. Logs every -//call to new operator. Must have LUCENE_ENABLE_MEMLEAKTRACKING enabled. -//writes log in this format. -//action,file name,file line,allocation size -//logging can be disabled by setting _lucene_disable_debuglogging to true -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) && defined(_DEBUG) -//#define LUCENE_ENABLE_CONSTRUCTOR_LOG -#endif -// -// -//enable this if you want to enable reference counting. This is -//not necessary or useful in most cases except when implementing wrappers -//which have reference counting. If the wrapper wraps a StringReader, -//for example, it should expect that the wrapped StringReader should not -//be deleted. However, when the stringreader is added into a Field, -//the Field usually takes over the stringReader and deletes it on completion. -//If reference counting is enabled, the wrapper can add a reference to any class -//and when _CLDECDELETE is called, the reference is decremented and only deleted -//if the refcount is zero. -//#define LUCENE_ENABLE_REFCOUNT - - -//////////////////////////////////////////////////////////////////// -// These options allow you to remove certain implementations -// out of clucene so that they can be implemented in the client -// application -//////////////////////////////////////////////////////////////////// -// -//define this to your own setting if you would like to implement your own -//threading locking code. it should have the same sort of functions as -//mutex_default. If not defined, clucene will try and use posix,win32 critical -//sections, or a timer based mutex hack. -//#define _LUCENE_THREADMUTEX CL_NS(util)::mutex_default -// -//define this if you want to implement the _Cnd_OutDebug routine yourself -//you can then easily customise in your own application how to handle debug messages -//#define _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG -// -//define this if you want to implement your own namespace macros -//#define _LUCENE_DONTIMPLEMENT_NS_MACROS -// -//define this if you do not want clucene to include any standard libraries. -//this could be useful if you want to use alternate libraries -//#define LUCENE_DISABLE_INCLUDES -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// These options will be changed depending on your compiler/platform -// but can also be changed here if required -//////////////////////////////////////////////////////////////////// -// -//define this if multi-threading support is not required -//if not defined, multi-thread locking will -//occur (and its related processing overhead) -//note: it is recommended to disable multithreading if you do not need it -//there is a lot of overhead that can be avoided. -//#define _CL_DISABLE_MULTITHREADING -// -//if you want to define your own default file encoding. specify it -//here - normally defined in the platform specific headers -//#define PLATFORM_DEFAULT_READER_ENCODING CL_NS(util)::FileReader::ENCODING_ASCII -// -//disable hash implementations (if available) -//#define LUCENE_DISABLE_HASHING -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// These options should not be changed. But you can experiment with -// them to optimize performance -//////////////////////////////////////////////////////////////////// -// -//some defaults, wouldn't usually need to be changed -//Buffer size for input/output streams. Required. -#define LUCENE_STREAM_BUFFER_SIZE 1024 -// -// DSR:2004.08.19: -// Formerly, StringBuffer used 1024 as the default size of its internal buffer. -// However, StringBuffer is used primarily for token- and term-oriented -// processing, e.g. in StandardTokenizer. I've calculated that the average -// token (as produced by StandardTokenizer) in all .txt files distributed in -// the Project Gutenberg CD Image (August 2003 release) has only 6 characters. -// Although most languages are likely to have a longer average word length than -// English due to the popularity of "non-atomized" conjugation and declension -// mechanisms, 1024 is still vastly excessive. -// I made two changes intended to deliver better overall performance: -// a) Switched to a default StringBuffer character capacity of 32. Though 32 -// is longer than the average token, the high cost of realloc makes a -// slightly liberal default size optimal. I chose the default size of 32 -// after fairly extensive experimentation on the Gutenberg e-texts. The -// results are summarized in the following table: -// ------------------------------------------------------------------------ -// LUCENE_DEFAULT_TOKEN_BUFFER_SIZE value | % faster than default size 1024 -// ------------------------------------------------------------------------ -// 8 : 4% -// 16 : 7% -// 32 : 6% -// 64 : 3% -// A default size of 32 is actually slightly slower than 16, but I was -// experimenting on English text; I expect that 32 will maintain decent -// performance in languages such as German, and in technical documents -// with long tokens. -// -// b) To offset the switch to a smaller default buffer size, I implemented a -// more aggressive growth strategy. A StringBuffer now [at least] doubles -// the size of its internal buffer every time it needs to grow, rather -// than [at least] increasing by LUCENE_DEFAULT_TOKEN_BUFFER_SIZE no -// matter how many times it has already grown. -//Required. -#define LUCENE_DEFAULT_TOKEN_BUFFER_SIZE 32 -//todo: should implement a similar strategy in analysis/token -// -//Expert: The fraction of {@link TermDocs} entries stored in skip tables, -//used to accellerate {@link TermDocs#skipTo(int)}. Larger values result in -//smaller indices, greater acceleration, but fewer accelerable cases, while -//smaller values result in bigger indices, less acceleration and more -//accelerable cases. More detailed experiments would be useful here. */ -#define LUCENE_DEFAULT_TERMDOCS_SKIP_INTERVAL 16 -// -//Size of TermScore cache. Required. -#define LUCENE_SCORE_CACHE_SIZE 32 -// -//analysis options -//maximum length that the CharTokenizer uses. Required. -//By adjusting this value, you can greatly improve the performance of searching -//and especially indexing. Default is 255, but smaller numbers will decrease -//the amount of memory used as well as increasing the speed. -#define LUCENE_MAX_WORD_LEN 255 -//Maximum length of a token word. -//Should be the same or more than LUCENE_MAX_WORD_LEN -//if not defined, then no token limit, but may be slower -//if defined will be faster (up to 15% in some cases), but will use more memory -#ifndef LUCENE_OPTIMIZE_FOR_MEMORY - #define LUCENE_TOKEN_WORD_LENGTH LUCENE_MAX_WORD_LEN -#endif -// -//maximum field length. some optimisation can be done if a maximum field -//length is given... The smaller the better -#define LUCENE_MAX_FIELD_LEN 100 -// -//The initial value set to BooleanQuery::maxClauseCount. Default is 1024 -#define LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT 1024 -// -//bvk: 12.3.2005 -//============================================================================== -//Previously the way the tokenizer has worked has been changed to optionally -//use a a fixed word length. I have implemented this in the Term class as well. -//It seems that by predefining the text length instead of using new TCHAR[x] -//in the constructor greatly improves the performance by 20-30% for certain -//operations. -//Maximum length of a term text. -//Should be the same or more than LUCENE_MAX_WORD_LEN -//if not defined, then no term text limit, but may be slower -//if defined will be faster (up to 30% in some cases), but will use more memory -#ifndef LUCENE_OPTIMIZE_FOR_MEMORY - #define LUCENE_TERM_TEXT_LENGTH LUCENE_MAX_WORD_LEN -#endif -// -//Size of the CharTokenizer buffersize. Required. -#define LUCENE_IO_BUFFER_SIZE 1024 -// -//the minimum amount the segment term enum should grow by. Must be at least 1 -#define LUCENE_SEGMENTTERMENUM_GROWSIZE 8 -// -//////////////////////////////////////////////////////////////////// - -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/CLMonolithic.cpp clucene-core-2.3.3.4/src/CLucene/CLMonolithic.cpp --- clucene-core-0.9.21b/src/CLucene/CLMonolithic.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/CLMonolithic.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,114 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* -* this is a monolithic file that can be used to compile clucene using one source file. -* it simplifies some build processes by avoiding static & dynamic compalation pitfalls. -* -* note: when creating a project add either this file, or all the other .cpp files, not both! -*/ -#include "CLucene/StdHeader.cpp" -#include "CLucene/analysis/Analyzers.cpp" -#include "CLucene/analysis/AnalysisHeader.cpp" -#include "CLucene/analysis/standard/StandardAnalyzer.cpp" -#include "CLucene/analysis/standard/StandardFilter.cpp" -#include "CLucene/analysis/standard/StandardTokenizer.cpp" -#include "CLucene/config/gunichartables.cpp" -#include "CLucene/config/repl_tcscasecmp.cpp" -#include "CLucene/config/repl_tcslwr.cpp" -#include "CLucene/config/repl_tcstod.cpp" -#include "CLucene/config/repl_lltot.cpp" -#include "CLucene/config/repl_tcstoll.cpp" -#include "CLucene/config/repl_tprintf.cpp" -#include "CLucene/config/threads.cpp" -#include "CLucene/config/utf8.cpp" -#include "CLucene/debug/condition.cpp" -#include "CLucene/debug/error.cpp" -#include "CLucene/debug/memtracking.cpp" -#include "CLucene/document/DateField.cpp" -#include "CLucene/document/Document.cpp" -#include "CLucene/document/Field.cpp" -#include "CLucene/index/CompoundFile.cpp" -#include "CLucene/index/DocumentWriter.cpp" -#include "CLucene/index/FieldInfos.cpp" -#include "CLucene/index/FieldsReader.cpp" -#include "CLucene/index/FieldsWriter.cpp" -#include "CLucene/index/IndexWriter.cpp" -#include "CLucene/index/IndexReader.cpp" -#include "CLucene/index/MultiReader.cpp" -#include "CLucene/index/SegmentInfos.cpp" -#include "CLucene/index/SegmentMergeInfo.cpp" -#include "CLucene/index/SegmentMergeQueue.cpp" -#include "CLucene/index/SegmentMerger.cpp" -#include "CLucene/index/SegmentReader.cpp" -#include "CLucene/index/SegmentTermDocs.cpp" -#include "CLucene/index/SegmentTermEnum.cpp" -#include "CLucene/index/SegmentTermPositions.cpp" -#include "CLucene/index/SegmentTermVector.cpp" -#include "CLucene/index/Term.cpp" -#include "CLucene/index/TermInfo.cpp" -#include "CLucene/index/TermInfosReader.cpp" -#include "CLucene/index/TermInfosWriter.cpp" -#include "CLucene/index/TermVectorReader.cpp" -#include "CLucene/index/TermVectorWriter.cpp" -#include "CLucene/queryParser/Lexer.cpp" -#include "CLucene/queryParser/MultiFieldQueryParser.cpp" -#include "CLucene/queryParser/QueryParser.cpp" -#include "CLucene/queryParser/QueryParserBase.cpp" -#include "CLucene/queryParser/QueryToken.cpp" -#include "CLucene/queryParser/TokenList.cpp" -#include "CLucene/search/BooleanQuery.cpp" -#include "CLucene/search/BooleanScorer.cpp" -#include "CLucene/search/CachingWrapperFilter.cpp" -#include "CLucene/search/ChainedFilter.cpp" -#include "CLucene/search/DateFilter.cpp" -#include "CLucene/search/ConjunctionScorer.cpp" -#include "CLucene/search/ExactPhraseScorer.cpp" -#include "CLucene/search/Explanation.cpp" -#include "CLucene/search/FieldCache.cpp" -#include "CLucene/search/FieldCacheImpl.cpp" -#include "CLucene/search/FieldDocSortedHitQueue.cpp" -#include "CLucene/search/FieldSortedHitQueue.cpp" -#include "CLucene/search/FilteredTermEnum.cpp" -#include "CLucene/search/FuzzyQuery.cpp" -#include "CLucene/search/Hits.cpp" -#include "CLucene/search/HitQueue.cpp" -#include "CLucene/search/IndexSearcher.cpp" -#include "CLucene/search/MultiSearcher.cpp" -#include "CLucene/search/MultiTermQuery.cpp" -#include "CLucene/search/PhrasePositions.cpp" -#include "CLucene/search/PhraseQuery.cpp" -#include "CLucene/search/PhraseScorer.cpp" -#include "CLucene/search/PrefixQuery.cpp" -#include "CLucene/search/QueryFilter.cpp" -#include "CLucene/search/RangeQuery.cpp" -#include "CLucene/search/RangeFilter.cpp" -#include "CLucene/search/SearchHeader.cpp" -#include "CLucene/search/Similarity.cpp" -#include "CLucene/search/SloppyPhraseScorer.cpp" -#include "CLucene/search/Sort.cpp" -#include "CLucene/search/TermQuery.cpp" -#include "CLucene/search/TermScorer.cpp" -#include "CLucene/search/WildcardQuery.cpp" -#include "CLucene/search/WildcardTermEnum.cpp" -#include "CLucene/store/FSDirectory.cpp" -#include "CLucene/store/IndexInput.cpp" -#include "CLucene/store/Lock.cpp" -#include "CLucene/store/MMapInput.cpp" -#include "CLucene/store/IndexOutput.cpp" -#include "CLucene/store/RAMDirectory.cpp" -#include "CLucene/store/TransactionalRAMDirectory.cpp" -#include "CLucene/util/BitSet.cpp" -#include "CLucene/util/Equators.cpp" -#include "CLucene/util/FastCharStream.cpp" -#include "CLucene/util/fileinputstream.cpp" -#include "CLucene/util/MD5Digester.cpp" -#include "CLucene/util/Misc.cpp" -#include "CLucene/util/Reader.cpp" -#include "CLucene/util/StringBuffer.cpp" -#include "CLucene/util/StringIntern.cpp" -#include "CLucene/util/dirent.cpp" -#include "CLucene/util/ThreadLocal.cpp" diff -Nru clucene-core-0.9.21b/src/CLucene/clucene-config.h.cmake clucene-core-2.3.3.4/src/CLucene/clucene-config.h.cmake --- clucene-core-0.9.21b/src/CLucene/clucene-config.h.cmake 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/clucene-config.h.cmake 1970-01-01 00:00:00.000000000 +0000 @@ -1,378 +0,0 @@ -#ifndef _SRC_CLUCENE_CLUCENE_CONFIG_H -#define _SRC_CLUCENE_CLUCENE_CONFIG_H 1 - -/* src/CLucene/clucene-config.h. -* Generated automatically at end of cmake. -*/ - -/* Compulsary headers. cmake will fail if these are not found: - * Eventually we will take these out of StdHeader to simplify it all a bit. -*/ -#define _CL_HAVE_ALGORITHM 1 -#define _CL_HAVE_FUNCTIONAL 1 -#define _CL_HAVE_MAP 1 -#define _CL_HAVE_VECTOR 1 -#define _CL_HAVE_LIST 1 -#define _CL_HAVE_SET 1 -#define _CL_HAVE_MATH_H 1 -#define _CL_HAVE_STDARG_H 1 -#define _CL_HAVE_STDEXCEPT 1 -#define _CL_HAVE_FCNTL_H 1 - -#define _CL_HAVE_WCSCPY 1 -#define _CL_HAVE_WCSNCPY 1 -#define _CL_HAVE_WCSCAT 1 -#define _CL_HAVE_WCSCHR 1 -#define _CL_HAVE_WCSSTR 1 -#define _CL_HAVE_WCSLEN 1 -#define _CL_HAVE_WCSCMP 1 -#define _CL_HAVE_WCSNCMP 1 -#define _CL_HAVE_WCSCSPN 1 - -/* CMake will look for these headers: */ - -/* Define to 1 if you have the ANSI C header files. */ -#cmakedefine _CL_STDC_HEADERS 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_MEMORY_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_UNISTD_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_IO_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_DIRECT_H 1 - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#cmakedefine _CL_HAVE_DIRENT_H 1 - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#cmakedefine _CL_HAVE_SYS_DIR_H - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#cmakedefine _CL_HAVE_SYS_NDIR_H - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_ERRNO_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_WCHAR_H 1 - -/* Define to 1 if you have a functioning header file. */ -#cmakedefine _CL_HAVE_WCTYPE_H - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_CTYPE_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_WINDOWS_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_INTTYPES_H 1 - - -/* CMake will look for these symbols: */ - -/* Define to 1 if the system has the type `float_t'. */ -//todo: HACK -#define _CL_HAVE_FLOAT_T 1 - -#ifdef __MINGW32__ -typedef float float_t; -#endif - - -/* Define to 1 if the system has the type `intptr_t'. */ -//todo: HACK -#define _CL_HAVE_INTPTR_T 1 - -/* Define to 1 if the system has the type `wchar_t'. */ -//todo: HACK -#define _CL_HAVE_WCHAR_T 1 - - - -/* CMake will look for these functions: */ - -/* Define to 1 if you have the `printf' function. */ -#cmakedefine _CL_HAVE_PRINTF 1 - -/* Define to 1 if you have the `snprintf' function. */ -#cmakedefine _CL_HAVE_SNPRINTF 1 - - - -/* CMake will determine these module specificics */ - -/* Define if you have POSIX threads libraries and header files. */ -#cmakedefine _CL_HAVE_PTHREAD 1 - -/* Define if you have POSIX threads libraries and header files. */ -#cmakedefine _CL_HAVE_WIN32_THREADS 1 - -/* define if the compiler supports ISO C++ standard library */ -#cmakedefine _CL_HAVE_STD - - - - - - - - - - - - - - -/* Disable multithreading */ -#cmakedefine _CL_DISABLE_MULTITHREADING - - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_DLFCN_H 1 - - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_EXT_HASH_MAP 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_EXT_HASH_SET 1 - - -/* Define to 1 if you have the header file. */ - -/* Does not support new float byte<->float conversions */ -#cmakedefine _CL_HAVE_FUNCTIONING_FLOAT_BYTE - -/* Define to 1 if you have the `getpagesize' function. */ -#cmakedefine _CL_HAVE_GETPAGESIZE - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_HASH_MAP - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_HASH_SET - - -/* Define to 1 if you have the `lltoa' function. */ -#cmakedefine _CL_HAVE_LLTOA - -/* Define to 1 if you have the `lltow' function. */ -#cmakedefine _CL_HAVE_LLTOW - -/* Define to 1 if long double works and has more range or precision than double. */ -#cmakedefine _CL_HAVE_LONG_DOUBLE 1 - - - - -/* Define to 1 if you have a working `mmap' system call. */ -#cmakedefine _CL_HAVE_MMAP 1 - -/* define if the compiler implements namespaces */ -#cmakedefine _CL_HAVE_NAMESPACES - -/* Define if you have the nanosleep function */ -#cmakedefine _CL_HAVE_NANOSLEEP 1 - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#cmakedefine _CL_HAVE_NDIR_H - -/* Does not support new float byte<->float conversions */ -#cmakedefine _CL_HAVE_NO_FLOAT_BYTE - -/* Does not support try/catch blocks */ -#cmakedefine _CL_HAVE_NO_FUNCTION_TRY_BLOCKS - - -/* Define if recursive pthread mutexes are available */ -#cmakedefine _CL_HAVE_PTHREAD_MUTEX_RECURSIVE 1 - - - -/* Defined if the snprintf overflow test fails */ -#cmakedefine _CL_HAVE_SNPRINTF_BUG - -/* Define to 1 if you have the `snwprintf' function. */ -#cmakedefine _CL_HAVE_SNWPRINTF - - - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_STDLIB_H 1 - -/* define if the compiler supports Standard Template Library */ -#cmakedefine _CL_HAVE_STL - - -/* Define to 1 if you have the `strlwr' function. */ -#cmakedefine _CL_HAVE_STRLWR - -/* Define to 1 if you have the `strtoll' function. */ -#cmakedefine _CL_HAVE_STRTOLL - -/* Define to 1 if you have the `strupr' function. */ -#cmakedefine _CL_HAVE_STRUPR - -/* Defined if the swprintf test fails */ -#cmakedefine _CL_HAVE_SWPRINTF_BUG - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_SYS_TIMEB_H 1 - - -/* Define to 1 if you have the header file. */ -#cmakedefine _CL_HAVE_TCHAR_H - -/* Define to 1 if you have the `tell' function. */ -#cmakedefine _CL_HAVE_TELL - - - -/* Define to 1 if you have the `vsnwprintf' function. */ -#cmakedefine _CL_HAVE_VSNWPRINTF - -/* Define to 1 if you have the `wcscasecmp' function. */ -#cmakedefine _CL_HAVE_WCSCASECMP - -/* Define to 1 if you have the `wcscat' function. */ -#cmakedefine _CL_HAVE_WCSCAT 1 - -/* Define to 1 if you have the `wcschr' function. */ -#cmakedefine _CL_HAVE_WCSCHR 1 - -/* Define to 1 if you have the `wcscmp' function. */ -#cmakedefine _CL_HAVE_WCSCMP 1 - -/* Define to 1 if you have the `wcscpy' function. */ -#cmakedefine _CL_HAVE_WCSCPY 1 - -/* Define to 1 if you have the `wcscspn' function. */ -#cmakedefine _CL_HAVE_WCSCSPN 1 - -/* Define to 1 if you have the `wcsicmp' function. */ -#cmakedefine _CL_HAVE_WCSICMP - -/* Define to 1 if you have the `wcslen' function. */ -#cmakedefine _CL_HAVE_WCSLEN 1 - -/* Define to 1 if you have the `wcsncmp' function. */ -#cmakedefine _CL_HAVE_WCSNCMP 1 - -/* Define to 1 if you have the `wcsncpy' function. */ -#cmakedefine _CL_HAVE_WCSNCPY 1 - -/* Define to 1 if you have the `wcsstr' function. */ -#cmakedefine _CL_HAVE_WCSSTR 1 - -/* Define to 1 if you have the `wcstod' function. */ -#cmakedefine _CL_HAVE_WCSTOD - -/* Define to 1 if you have the `wcstoll' function. */ -#cmakedefine _CL_HAVE_WCSTOLL - -/* Define to 1 if you have the `wcsupr' function. */ -#cmakedefine _CL_HAVE_WCSUPR - - -/* Define to 1 if you have the `wprintf' function. */ -#cmakedefine _CL_HAVE_WPRINTF - -/* Define to 1 if you have the `_filelength' function. */ -#cmakedefine _CL_HAVE__FILELENGTH - -/* How to define a static const in a class */ -#cmakedefine LUCENE_STATIC_CONSTANT_SYNTAX 1 - -/* Name of package */ -#cmakedefine _CL_PACKAGE "clucene-core" - -/* Define to the address where bug reports for this package should be sent. */ -#cmakedefine _CL_PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#cmakedefine _CL_PACKAGE_NAME "" - -/* Define to the full name and version of this package. */ -#cmakedefine _CL_PACKAGE_STRING "" - -/* Define to the one symbol short name of this package. */ -#cmakedefine _CL_PACKAGE_TARNAME "" - -/* Define to the version of this package. */ -#cmakedefine _CL_PACKAGE_VERSION "" - -/* Define to the necessary symbol if this constant uses a non-standard name on - your system. */ -#cmakedefine _CL_PTHREAD_CREATE_JOINABLE - -/* The size of a `unsigned char', as computed by sizeof. */ -#cmakedefine _CL_SIZEOF_UNSIGNED_CHAR - -/* The size of a `unsigned int', as computed by sizeof. */ -#cmakedefine _CL_SIZEOF_UNSIGNED_INT - -/* The size of a `unsigned long', as computed by sizeof. */ -#cmakedefine _CL_SIZEOF_UNSIGNED_LONG - -/* The size of a `unsigned long long', as computed by sizeof. */ -#cmakedefine _CL_SIZEOF_UNSIGNED_LONG_LONG - -/* The size of a `unsigned __int64', as computed by sizeof. */ -#cmakedefine _CL_SIZEOF_UNSIGNED___INT64 - -/* Define to 1 if the `S_IS*' macros in do not work properly. */ -#cmakedefine _CL_STAT_MACROS_BROKEN - -/* Define to 1 if you can safely include both and . */ -#cmakedefine _CL_TIME_WITH_SYS_TIME 1 - -/* Version number of package */ -#cmakedefine _CL_VERSION "0.9.15" - -/* Forces into Ascii mode */ -#cmakedefine _ASCII - -/* Conditional Debugging */ -#cmakedefine _CL__CND_DEBUG - -/* debuging option */ -#cmakedefine _DEBUG - -/* Number of bits in a file offset, on hosts where this is settable. */ -#cmakedefine _FILE_OFFSET_BITS - -/* Define for large files, on AIX-style hosts. */ -#cmakedefine _LARGE_FILES - -/* If not already defined, then define as a datatype of *exactly* 32 bits. */ -#cmakedefine uint32_t - -/* If not already defined, then define as a datatype of *exactly* 64 bits. */ -#cmakedefine uint64_t - -/* If not already defined, then define as a datatype of *exactly* 8 bits. */ -#cmakedefine uint8_t - - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/CMakeLists.txt clucene-core-2.3.3.4/src/CLucene/CMakeLists.txt --- clucene-core-0.9.21b/src/CLucene/CMakeLists.txt 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,234 +0,0 @@ -PROJECT(clucene-core) - -INCLUDE (CheckIncludeFiles) -INCLUDE (CheckIncludeFileCXX) - -#todo: check if _CL_TIME_WITH_SYS_TIME works -CHECK_INCLUDE_FILES ("stdlib.h;stddef.h" _CL_STDC_HEADERS) -CHECK_INCLUDE_FILES ("sys/time.h;time.h" _CL_TIME_WITH_SYS_TIME) - -#optional C headers -FOREACH(inc stdlib.h string.h sys/time.h memory.h strings.h sys/types.h inttypes.h stdint.h unistd.h io.h direct.h sys/dir.h sys/ndir.h dirent.h stat.h sys/stat.h stdexcept errno.h fcntl.h windows.h wchar.h wctype.h ctype.h fcntl.h) - STRING(TOUPPER ${inc} INC) - STRING(REPLACE . _ INC ${INC}) - STRING(REPLACE / _ INC ${INC}) - CHECK_INCLUDE_FILES (${inc} _CL_HAVE_${INC}) -ENDFOREACH(inc stdlib.h string.h sys/time.h memory.h strings.h sys/types.h inttypes.h stdint.h unistd.h io.h direct.h sys/dir.h sys/ndir.h dirent.h stat.h sys/stat.h stdexcept errno.h fcntl.h windows.h wchar.h wctype.h ctype.h fcntl.h) - -#compulsary C++ headers -FOREACH(inc algorithm functional map vector list set math.h stdarg.h fcntl.h math.h) - STRING(TOUPPER ${inc} INC) - STRING(REPLACE . _ INC ${INC}) - CHECK_INCLUDE_FILE_CXX (${inc} _CL_HAVE_${INC}) - IF ( NOT _CL_HAVE_${INC} ) - MESSAGE ( FATAL_ERROR, "${inc} could not be found" ) - ENDIF ( NOT _CL_HAVE_${INC} ) -ENDFOREACH(inc algorithm functional map vector list set math.h stdarg.h stdexcept fcntl.h) - -#optional C++ headers -FOREACH(inc hash_map hash_set ext/hash_map ext/hash_set stdarg.h sys/timeb.h wchar.h tchar.h stdexcept) - STRING(TOUPPER ${inc} INC) - STRING(REPLACE . _ INC ${INC}) - STRING(REPLACE / _ INC ${INC}) - CHECK_INCLUDE_FILE_CXX (${inc} _CL_HAVE_${INC}) -ENDFOREACH(inc hash_map hash_set ext/hash_map ext/hash_set stdarg.h sys/timeb.h wchar.h tchar.h) - - -INCLUDE (CheckSymbolExists) -CHECK_SYMBOL_EXISTS(float_t math.h _CL_HAVE_FLOAT_T) -#check wchar and intptr - - -INCLUDE (CheckFunctionExists) - -#check for compulsary functions -FOREACH(inc printf wcscpy wcsncpy wcscat wcschr wcsstr wcslen wcscmp wcsncmp wcscspn) - STRING(TOUPPER ${inc} INC) - STRING(REPLACE . _ INC ${INC}) - CHECK_FUNCTION_EXISTS (${inc} _CL_HAVE_${INC}) - IF ( NOT _CL_HAVE_${INC} ) - MESSAGE ( FATAL_ERROR, "${inc} could not be found" ) - ENDIF ( NOT _CL_HAVE_${INC} ) -ENDFOREACH(inc printf snprintf wcscpy wcsncpy wcscat wcschr wcsstr wcslen wcscmp wcsncmp wcscspn) - -#check for optional functions -#todo: wcstoq is bsd equiv of wcstoll, we can use that... -FOREACH(inc mmap snprintf _snprintf wcsupr wcscasecmp wcsicmp wcstoll lltow wcstod strupr strlwr lltoa strtoll tell _filelength) - STRING(TOUPPER ${inc} INC) - STRING(REPLACE . _ INC ${INC}) - CHECK_FUNCTION_EXISTS (${inc} _CL_HAVE_${INC}) -ENDFOREACH(inc mmap wcsupr wcscasecmp wcsicmp wcstoll lltow wcstod strupr strlwr lltoa strtoll tell _filelength) - - -#check for ansi capabilities -#INCLUDE(TestForANSIForScope) - not really needed, we keep a clean scope -#INCLUDE(TestForANSIStreamHeaders) - not really needed, we dont use streams -INCLUDE(TestForSTDNamespace) -IF ( NOT CMAKE_NO_STD_NAMESPACE ) - SET(_CL_HAVE_STD 1) -ENDIF ( NOT CMAKE_NO_STD_NAMESPACE ) - - -#check for pthreads -find_package(Threads REQUIRED) -IF ( CMAKE_USE_PTHREADS_INIT ) - SET ( _CL_HAVE_PTHREAD 1 ) -ENDIF (CMAKE_USE_PTHREADS_INIT) -IF ( CMAKE_USE_WIN32_THREADS_INIT ) - SET ( _CL_HAVE_WIN32_THREADS 1 ) -ENDIF ( CMAKE_USE_WIN32_THREADS_INIT ) -IF ( CMAKE_USE_SPROC_INIT OR CMAKE_HP_PTHREADS_INIT ) - MESSAGE(FATAL_ERROR "Threads library not implemented") -ENDIF( CMAKE_USE_SPROC_INIT OR CMAKE_HP_PTHREADS_INIT ) - - -#make msvc 8 not complain... needs to be fixed. -IF( MSVC80 ) - ADD_DEFINITIONS( -D_CRT_SECURE_NO_DEPRECATE ) -ENDIF ( MSVC80 ) - - - -#now write out our configuration.... -CONFIGURE_FILE(${clucene-core_SOURCE_DIR}/clucene-config.h.cmake ${clucene-core_BINARY_DIR}/clucene-config.h) - -#add the files to our groups and core -SOURCE_GROUP("analysis\\standard" REGULAR_EXPRESSION ./analysis/standard/*) -SOURCE_GROUP("analysis" ./analysis/*) -SOURCE_GROUP("config" ./config/*) -SOURCE_GROUP("debug" ./debug/*) -SOURCE_GROUP("document" ./document/*) -SOURCE_GROUP("index" ./index/*) -SOURCE_GROUP("queryParser" ./queryParser/*) -SOURCE_GROUP("search" ./search/*) -SOURCE_GROUP("store" ./store/*) -SOURCE_GROUP("util" ./util/*) -SOURCE_GROUP("" FILES ./StdHeader.cpp) - -SET(clucene_core_Files - ./queryParser/Lexer.cpp - ./queryParser/MultiFieldQueryParser.cpp - ./queryParser/QueryParser.cpp - ./queryParser/QueryToken.cpp - ./queryParser/TokenList.cpp - ./queryParser/QueryParserBase.cpp - ./analysis/standard/StandardAnalyzer.cpp - ./analysis/standard/StandardFilter.cpp - ./analysis/standard/StandardTokenizer.cpp - ./analysis/Analyzers.cpp - ./analysis/AnalysisHeader.cpp - ./debug/memtracking.cpp - ./debug/condition.cpp - ./debug/error.cpp - ./store/MMapInput.cpp - ./store/TransactionalRAMDirectory.cpp - ./store/IndexInput.cpp - ./store/Lock.cpp - ./store/IndexOutput.cpp - ./store/FSDirectory.cpp - ./store/RAMDirectory.cpp - ./search/PhraseScorer.cpp - ./search/SloppyPhraseScorer.cpp - ./search/ConjunctionScorer.cpp - ./search/PhraseQuery.cpp - ./search/PrefixQuery.cpp - ./search/ExactPhraseScorer.cpp - ./search/TermScorer.cpp - ./search/Similarity.cpp - ./search/BooleanScorer.cpp - ./search/HitQueue.cpp - ./search/FieldCacheImpl.cpp - ./search/ChainedFilter.cpp - ./search/RangeFilter.cpp - ./search/CachingWrapperFilter.cpp - ./search/QueryFilter.cpp - ./search/TermQuery.cpp - ./search/FuzzyQuery.cpp - ./search/SearchHeader.cpp - ./search/RangeQuery.cpp - ./search/IndexSearcher.cpp - ./search/Sort.cpp - ./search/PhrasePositions.cpp - ./search/FieldDocSortedHitQueue.cpp - ./search/WildcardTermEnum.cpp - ./search/MultiSearcher.cpp - ./search/Hits.cpp - ./search/MultiTermQuery.cpp - ./search/FilteredTermEnum.cpp - ./search/FieldSortedHitQueue.cpp - ./search/WildcardQuery.cpp - ./search/Explanation.cpp - ./search/BooleanQuery.cpp - ./search/FieldCache.cpp - ./search/DateFilter.cpp - ./config/repl_tcslwr.cpp - ./config/repl_tcstoll.cpp - ./config/repl_tcscasecmp.cpp - ./config/repl_tprintf.cpp - ./config/repl_lltot.cpp - ./config/repl_tcstod.cpp - ./config/utf8.cpp - ./config/threads.cpp - ./config/gunichartables.cpp - ./document/Document.cpp - ./document/DateField.cpp - ./document/Field.cpp - ./index/SegmentMergeInfo.cpp - ./index/SegmentInfos.cpp - ./index/SegmentTermDocs.cpp - ./index/FieldsWriter.cpp - ./index/TermInfosWriter.cpp - ./index/Term.cpp - ./index/DocumentWriter.cpp - ./index/SegmentTermVector.cpp - ./index/TermVectorReader.cpp - ./index/FieldInfos.cpp - ./index/CompoundFile.cpp - ./index/SegmentReader.cpp - ./index/TermVectorWriter.cpp - ./index/IndexReader.cpp - ./index/SegmentTermPositions.cpp - ./index/SegmentMerger.cpp - ./index/IndexWriter.cpp - ./index/MultiReader.cpp - ./index/SegmentTermEnum.cpp - ./index/TermInfo.cpp - ./index/IndexModifier.cpp - ./index/SegmentMergeQueue.cpp - ./index/FieldsReader.cpp - ./index/TermInfosReader.cpp - ./util/StringBuffer.cpp - ./util/Reader.cpp - ./util/Equators.cpp - ./util/FastCharStream.cpp - ./util/fileinputstream.cpp - ./util/MD5Digester.cpp - ./util/dirent.cpp - ./util/StringIntern.cpp - ./util/BitSet.cpp - ./util/Misc.cpp - ./util/ThreadLocal.cpp - ./StdHeader.cpp -) -IF( MSVC OR MINGW ) - add_library(clucene-core STATIC - ${clucene_core_Files} - ) -ELSE( MSVC OR MINGW ) - add_library(clucene-core SHARED - ${clucene_core_Files} - ) -ENDIF( MSVC OR MINGW ) - -file(GLOB_RECURSE HEADERS ${CMAKE_SOURCE_DIR}/src/*.h) - -foreach(file ${HEADERS}) - get_filename_component(apath ${file} PATH) - file(RELATIVE_PATH relpath ${CMAKE_SOURCE_DIR}/src ${apath}) - if (relpath STREQUAL "demo") - else (relpath STREQUAL "demo") - install(FILES ${file} DESTINATION include/${relpath} ) - endif (relpath STREQUAL "demo") -endforeach(file) - -install(TARGETS clucene-core DESTINATION lib) diff -Nru clucene-core-0.9.21b/src/CLucene/config/CompilerBcb.h clucene-core-2.3.3.4/src/CLucene/config/CompilerBcb.h --- clucene-core-0.9.21b/src/CLucene/config/CompilerBcb.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/CompilerBcb.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#if !defined(_lucene_COMPILER_BCB) -#define _lucene_COMPILER_BCB - -// It is internal CLucene header - DO NOT include it directly - -#include "CLucene/config/define_std.h" -#undef _CL_HAVE_STRTOLL -#undef _CL_HAVE_WCSTOLL - -#define _LUCENE_PRAGMA_ONCE -#define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning -#define LUCENE_DISABLE_HASHING -#define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment } - -#undef LUCENE_ENABLE_MEMLEAKTRACKING //it has been reported that this causes problems - -#define fileSize filelength -#define fileSeek lseek -#define fileTell tell -#define fileStat stat -#define fileHandleStat fstat - -#define O_RANDOM 0 - -//java long type -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -//java int type -typedef int int32_t; -typedef unsigned int uint32_t; - -//java byte type -typedef unsigned char uint8_t; - -//floating point type -typedef double float_t; - -//required type -typedef int intptr_t; - -#define _CL_ILONG(x) x ## L -#define _ILONGLONG(x) x ## i64 - - -#elif !defined(_lucene_COMPILER_BCB2) -#define _lucene_COMPILER_BCB2 - //second inclusion - - #define _open open - #define _timeb timeb - #define _ftime ::ftime - #define _rename rename - - #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) - -#elif !defined(_lucene_COMPILER_BCB3) -#define _lucene_COMPILER_BCB3 - //third inclusion - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/config/CompilerGcc.h clucene-core-2.3.3.4/src/CLucene/config/CompilerGcc.h --- clucene-core-0.9.21b/src/CLucene/config/CompilerGcc.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/CompilerGcc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,163 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#if !defined(_lucene_COMPILER_GCC) -#define _lucene_COMPILER_GCC - -// It is internal CLucene header - DO NOT include it directly -#if !defined(_SUPPRESS_MAKE_BASED_CONFIG) - #include "CLucene/clucene-config.h" //make clucene-config.h file -#endif - -#if defined(_ASCII) - #undef _UCS2 -#elif defined(_UCS2) -// -#else - #define CL_CHARSET_GUESS -#endif - -//dont allow FS_MMAP if mmap is not available -#if defined(LUCENE_FS_MMAP) && !defined(_CL_HAVE_MMAP) - #error "LUCENE_FS_MMAP is defined and MMap doesn't appear to be available" -#endif - -#ifdef _CL_HAVE_NO_FUNCTION_TRY_BLOCKS - #undef _LUCENE_DISABLE_EXCEPTIONS - #define _LUCENE_DISABLE_EXCEPTIONS - - #error "this is bad if you made it here... your compiler seems not to have try/catch blocks." - #error "maybe you could implement an alternative solution for us? :)" -#endif - -#ifndef _CL_HAVE_NAMESPACES - #define DISABLE_NAMESPACE -#endif - -#define CL_NS_HASHING(func) __gnu_cxx::func -#ifndef _CL_HAVE_GOOGLE_DENSE_HASH_MAP - #define LUCENE_DISABLE_HASHING //we could enable this, but so far test show that the hashing is slower :( -#endif - -//define the file functions -#define fileSeek lseek -#define fileSize _filelength -#define fileStat stat -#define fileHandleStat fstat -#ifdef _CL_HAVE_TELL - #define fileTell tell -#else - //ftell (and probably soon ftell64) are POSIX standard functions, but tell and - //tell64 are not, so we define fileTell in terms of fileSeek. - #define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR) -#endif - -//this is needed early on so that CL_MAX_PATH can be correctly determined -//in the StdHeader.h. This was earlier causing problems with macosx. -//:: crash was due to realpath() that expects an output arguments that -//has at least the size of PATH_MAX (even if the result has a lower size) -#include - -#ifndef _CL_HAVE_WCHAR_T - typedef unsigned short wchar_t; -#endif - -#if defined(__CYGWIN__) - //cygwin seems to incorrectly define that it has wprintf??? - #undef _CL_HAVE_WPRINTF -#elif defined(__MINGW32__) - #ifndef _CL_HAVE_WINDOWS_H - #define _CL_HAVE_WINDOWS_H - #endif -#endif - - -/////////////////////////////////////////////////////////////////////////////// -//end _lucene_COMPILER_GCC1 -#elif !defined(_lucene_COMPILER_GCC2) -#define _lucene_COMPILER_GCC2 - //second inclusion - - //types - #if defined(_CL_HAVE_SYS_TYPES_H) - #include - #endif - #if defined(_CL_HAVE_INTTYPES_H) - #include - #elif defined(_CL_HAVE_STDINT_H) - #include - #else - #if _CL_SIZEOF_UNSIGNED_LONG_LONG==8 - typedef unsigned long long uint64_t; - typedef long long int64_t; - #elif _CL_SIZEOF_UNSIGNED_LONG==8 - typedef unsigned long uint64_t; - typedef long int64_t; - #else - #error I do not know what to use for a uint64_t. - #endif - - /* Give us an unsigned 32-bit data type. */ - #if _CL_SIZEOF_UNSIGNED_LONG==4 - typedef unsigned long uint32_t; - typedef long int32_t; - #elif _CL_SIZEOF_UNSIGNED_INT==4 - typedef unsigned int uint32_t; - typedef int int32_t; - #else - #error I do not know what to use for a uint32_t. - #endif - - /* An unsigned 8-bit data type */ - #if _CL_SIZEOF_UNSIGNED_CHAR==1 - typedef unsigned char uint8_t; - #else - #error I do not know what to use for a uint8_t. - #endif - #endif - - //second chance to fix default settings - //this must be defined later, otherwise it messes up - //the standard libraries - #if !defined(__MINGW32__) - #define _close ::close - #define _read ::read - #endif - - //now that int64_t is defined, we can define this... - #ifndef _CL_HAVE_FILELENGTH - #undef fileSize - #define fileSize lucene_filelength - int64_t lucene_filelength(int handle); - #endif - -#elif !defined(_lucene_COMPILER_GCC3) -#define _lucene_COMPILER_GCC3 - //third inclusion - - #if !defined(__MINGW32__) - //define replacements - #define O_RANDOM 0 - #undef O_BINARY - #define O_BINARY 0 - #define _S_IREAD 0444 - #define _S_IWRITE 0333 // write and execute permissions - - //some functions that are needed - not charset dependent and not tchar type functions - #define _open open - #define _write write - #define _snprintf snprintf - - //clucene uses ascii for filename interactions - #define _realpath(rel,abs) realpath(rel,abs) - #define _mkdir(x) mkdir(x,0777) - #define _unlink unlink - #else - #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) - #endif - //also required by mingw - #define _rename rename -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/config/compiler.h clucene-core-2.3.3.4/src/CLucene/config/compiler.h --- clucene-core-0.9.21b/src/CLucene/config/compiler.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/compiler.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,248 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#if !defined(lucene_compiler_h) -#define lucene_compiler_h - -#if defined(_MBCS) || defined(_ASCII) - #undef _ASCII - #undef _UCS2 - #define _ASCII -#elif defined(_UNICODE) - #define _UCS2 -#elif !defined(_UCS2) - #define _UCS2 -#endif - -//msvc needs unicode define so that it uses unicode library -#ifdef _UCS2 - #undef _UNICODE - #define _UNICODE - #undef _ASCII -#else - #undef _UNICODE - #undef _UCS2 -#endif - - -//////////////////////////////////////////////////////////////////// -// Figure out what compiler we are using -//////////////////////////////////////////////////////////////////// - -#if defined(_MSC_VER) && !defined(__MWERKS__) && !defined (__ICL) && !defined (__COMO__) - #define _CLCOMPILER_MSVC _MSC_VER -#endif - -#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) - #include "CLucene/config/CompilerGcc.h" - -#elif defined(_CLCOMPILER_MSVC) - /* Microsoft Visual C++ */ - #include "CLucene/config/CompilerMsvc.h" - -#elif defined __BORLANDC__ - #include "CLucene/config/CompilerBcb.h" - -#else - //Unable to identify the compiler, issue error diagnostic. - //Edit to set STLport up for your compiler. - //Uncomment this next line - #error "Unable to identify the compiler, issue error diagnostic. Edit to set Lucene up for your compiler." - #include "CLucene/config/LuceneMycomp.h" -#endif /* end of compiler choice */ -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// Now include platform specific definitions -//////////////////////////////////////////////////////////////////// - -/* Operating system recognition (basic) */ -#if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__Lynx__) - #undef _UNIX - #define _UNIX 1 - #include "CLucene/config/PlatformUnix.h" - -#elif defined(macintosh) || defined (_MAC) || defined(__APPLE__) - #undef _MAC - #define _MAC 1 - #include "CLucene/config/PlatformMac.h" - -#elif defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__) - #undef _WIN32 - #define _WIN32 - #include "CLucene/config/PlatformWin32.h" - -#elif defined (__WIN16) || defined (WIN16) || defined (_WIN16) - #undef _WIN16 - #define _WIN16 - #error "CLucene has not been tested on this platform. Please send a report to the lucene administrators if you are able to successfully compile" -#else - #error "CLucene could not identify the platform." -#endif /* platforms */ - - - -//////////////////////////////////////////////////////////////////// -// Now we take all that we have learnt, and define some things -//////////////////////////////////////////////////////////////////// - -//lets just say that we can always do unicode! :) -#ifdef CL_CHARSET_GUESS - #define _UCS2 -#endif - -#if defined(_ASCII) - #undef _UCS2 -#elif defined(_UCS2) - #undef _ASCII -#endif - -#ifndef _LUCENE_NO_NEW_STYLE_CASTS - #define __CONST_CAST(typ,var) const_cast(var) - #define __REINTERPRET_CAST(typ,var) reinterpret_cast(var) -#else - #define __CONST_CAST(typ,var) ((typ)(var)) - #define __REINTERPRET_CAST,var) ((typ)(var)) -#endif - -#ifndef _CL_DEPRECATE_TEXT -#define _CL_DEPRECATE_TEXT(_Text) -#endif -#define _CL_DEPRECATED(_NewItem) _CL_DEPRECATE_TEXT("This function or variable has been superceded by newer library or operating system functionality. Consider using" #_NewItem "instead. See online help for details.") - - -//cnd-debug exit command -#ifndef debugFatalExit - #define debugFatalExit(ret) exit(ret) -#endif - -#ifndef _CL_ILONG - #define _CL_ILONG(x) x ## L -#endif -#ifndef _ILONGLONG - #define _ILONGLONG(x) x ## LL -#endif - -//define whats the values of item intergers *should* be. we can check this in a test -#define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF) -#define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL -#define LUCENE_UINT8_MAX_SHOULDBE 0xff - -//maximum path length. only used for buffers that use fullpath. -//anything else should use a dynamic length. -#if defined(CL_MAX_PATH) -//do nothing... -#elif defined(PATH_MAX) - #define CL_MAX_PATH PATH_MAX -#elif defined(MAX_PATH) - #define CL_MAX_PATH MAX_PATH -#elif defined(_MAX_PATH) - #define CL_MAX_PATH _MAX_PATH -#else - #error "CL_MAX_PATH could not be determined" -#endif - -//this is the max filename... for now its just the same, -//but this could change, so we use a different name -#define CL_MAX_NAME CL_MAX_PATH -//this used to be CL_MAX_NAME * 32, but as Alex Hudson points out, this could come to be 128kb. -//the above logic for CL_MAX_NAME should be correct enough to handle all file names -#define CL_MAX_DIR CL_MAX_PATH - -#ifdef _LARGE_FILES - #define LUCENE_MAX_FILELENGTH LUCENE_INT64_MAX_SHOULDBE -#else - #define LUCENE_MAX_FILELENGTH LUCENE_INT32_MAX_SHOULDBE -#endif - -//use the LUCENE_STATIC_CONSTANT_SYNTAX to determine LUCENE_STATIC_CONSTANT -#ifndef LUCENE_STATIC_CONSTANT - //autoconf is not properly detecting the correct method for this, and since there's no real big - //harm in always using an enum, we'll probably just make this the default. - /*#if LUCENE_STATIC_CONSTANT_SYNTAX == 1 - #define LUCENE_STATIC_CONSTANT(type, assignment) static const type assignment - #elif LUCENE_STATIC_CONSTANT_SYNTAX == 2*/ - #define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment } - /*#else - #error "LUCENE_STATIC_CONSTANT not defined, and/or LUCENE_STATIC_CONSTANT_SYNTAX is not defined to a valid value" - #endif*/ -#endif - -//end of lucene_compiler_h -#elif !defined(lucene_compiler_h2) -#define lucene_compiler_h2 -//here we include the compiler header again, this gives the header a -//second chance at including stuff, after the main inclusions are complete - - #if defined (__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) - #include "CLucene/config/CompilerGcc.h" - - #elif defined(_CLCOMPILER_MSVC) - /* Microsoft Visual C++ */ - #include "CLucene/config/CompilerMsvc.h" - - #elif defined __BORLANDC__ - #include "CLucene/config/CompilerBcb.h" - - #else - //Unable to identify the compiler, issue error diagnostic. - //Edit to set STLport up for your compiler. - //Uncomment this next line - #error "Unable to identify the compiler, issue error diagnostic. Edit to set Lucene up for your compiler." - #include "CLucene/config/LuceneMycomp.h" - #endif /* end of compiler choice */ - - #ifndef _CL_HAVE_FLOAT_T - //#ifdef _CL_HAVE_LONG_DOUBLE - // long double's are not working (reported by Mark Ashworth on Solaris 64) - // typedef long double float_t; /* `float' expressions are evaluated as `long double'. */ - //#else - typedef double float_t; - //#endif - #endif - - /*todo: but need to define SIZEOF_VOID_P #if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8) - #ifndef _CL_HAVE_INTPTR_T - typedef int64_t intptr_t; - #endif - #elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4) - #ifndef _CL_HAVE_INTPTR_T - typedef int32_t intptr_t; - #endif - #else - #error "void * is either >8 bytes or <= 2. In either case, I am confused." - #endif*/ - #ifndef _CL_HAVE_INTPTR_T - typedef int intptr_t; - #endif - -//end of lucene_compiler_h2 -#elif !defined(lucene_compiler_h3) -#define lucene_compiler_h3 -//here we include the compiler header again, this gives the header a -//third chance at including stuff, after the main inclusions are complete - - #if defined (__GNUC__ ) || defined(__SUNPRO_CC) || defined(__xlC__) - #include "CLucene/config/CompilerGcc.h" - - #elif defined(_CLCOMPILER_MSVC) - /* Microsoft Visual C++ */ - #include "CLucene/config/CompilerMsvc.h" - - #elif defined __BORLANDC__ - #include "CLucene/config/CompilerBcb.h" - - #else - //Unable to identify the compiler, issue error diagnostic. - //Edit to set STLport up for your compiler. - //Uncomment this next line - #error "Unable to identify the compiler, issue error diagnostic. Edit to set Lucene up for your compiler." - #include "CLucene/config/LuceneMycomp.h" - #endif /* end of compiler choice */ - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/config/CompilerMsvc.h clucene-core-2.3.3.4/src/CLucene/config/CompilerMsvc.h --- clucene-core-0.9.21b/src/CLucene/config/CompilerMsvc.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/CompilerMsvc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#if !defined(_lucene_COMPILER_MSVC) -#define _lucene_COMPILER_MSVC - -// It is internal CLucene header - DO NOT include it directly - -#include "CLucene/config/define_std.h" - -#if (_MSC_VER >= 1300) -//>= 7.0 - # pragma warning(disable: 4512) // This would be very annoying - # pragma warning(disable: 4290) // Ignore exception specification warning - #pragma warning(disable : 4250) // Ignore 'class1' : inherits 'class2::member' via dominance (e.g. in MultiReader) - #define CL_NS_HASHING(func) stdext::func - #define LUCENE_STATIC_CONSTANT_SYNTAX 1 - - #if _MSC_FULL_VER >= 140050320 - #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) - #else - #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated) - #endif - -#elif (_MSC_VER >= 1200) -//6.0 -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING - #define _CLDELETE_CARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(TCHAR*,x); x=NULL;} - #define _CLDELETE_CaARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(char*,x); x=NULL;} - #define _CLDELETE_LCARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(TCHAR*,x);} - #define _CLDELETE_LCaARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(char*,x);} -#else - #define _CLDELETE_CARRAY(x) if (x!=NULL){delete[] __CONST_CAST(TCHAR*,x); x=NULL;} - #define _CLDELETE_CaARRAY(x) if (x!=NULL){delete[] __CONST_CAST(char*,x); x=NULL;} - #define _CLDELETE_LCARRAY(x) if (x!=NULL){delete[] __CONST_CAST(TCHAR*,x);} - #define _CLDELETE_LCaARRAY(x) if (x!=NULL){delete[] __CONST_CAST(char*,x);} - -#endif - #define LUCENE_STATIC_CONSTANT_SYNTAX 2 - - # pragma warning(disable: 4786) // This would be very annoying - namespace std{ - # undef min // just in case - # undef max // just in case - - #define min(a,b) (a>b?b:a) - #define max(a,b) (a>b?a:b) - } - - //only 7.0+ has these function - #undef _CL_HAVE_LLTOA - #undef _CL_HAVE_LLTOAW - #undef _CL_HAVE_INTPTR_T - #undef _CL_HAVE_WCSTOLL - #undef _CL_HAVE_STRTOLL - #undef _CL_HAVE_HASH_MAP - #undef _CL_HAVE_HASH_SET - -#else -# error "This version of MSVC has not been tested. Please uncomment this line to try anyway. Please send a report to the Clucene's administration if successful" -#endif - -#if _MSC_VER >= 1020 - #define _LUCENE_PRAGMA_ONCE -#endif -#define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning - -//if we are compiling using single-threaded libraries, we can disable multi-threading stuff -#if !defined(_MT) && !defined(_CL_DISABLE_MULTITHREADING) - #define _CL_DISABLE_MULTITHREADING -#endif - -//msvc supports large files -#ifdef _LARGE_FILES -# define fileSize _filelengthi64 -# define fileSeek _lseeki64 -# define fileTell _telli64 -# define fileStat _stati64 -# define fileHandleStat _fstati64 -#else -# define fileSize _filelength -# define fileSeek _lseek -# define fileTell _tell -# define fileStat _stat -# define fileHandleStat _fstat -#endif - -//_rename is not defined??? -#define _rename rename - -#define CL_MAX_PATH 260 //give the windef.h value for this... -#define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) - -//java long type -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -//java int type -typedef int int32_t; -typedef unsigned int uint32_t; - -//java byte type -typedef unsigned char uint8_t; - -//floating point type -typedef double float_t; - -#define _CL_ILONG(x) x ## L -#define _ILONGLONG(x) x ## i64 - - -#elif !defined(_lucene_COMPILER_MSVC2) -#define _lucene_COMPILER_MSVC2 - //second inclusion - - -#elif !defined(_lucene_COMPILER_MSVC3) -#define _lucene_COMPILER_MSVC3 - //third inclusion -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/config/define_std.h clucene-core-2.3.3.4/src/CLucene/config/define_std.h --- clucene-core-0.9.21b/src/CLucene/config/define_std.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/define_std.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef lucene_define_std -#define lucene_define_std -//define a standard list of defines. -//These defines represents a fairly complete compiler. -//Of course it is preferable to use the autoconf generated -//list, but then not all systems can do this :) - -//we support long files - 64 bit file functions -#define _LARGE_FILES - -//support namespaces -#define _CL_HAVE_NAMESPACES - -//support try/catch blocks -#define _CL_HAVE_FUNCTION_TRY_BLOCKS - -//the normal headers -#define _CL_STDC_HEADERS -#define _CL_HAVE_STDARG_H -#define _CL_HAVE_ALGORITHM -#define _CL_HAVE_FUNCTIONAL -#define _CL_HAVE_MATH_H -#define _CL_HAVE_STL -#define _CL_HAVE_HASH_MAP -#define _CL_HAVE_HASH_SET -#define _CL_HAVE_MAP -#define _CL_HAVE_SET -#define _CL_HAVE_LIST -#define _CL_HAVE_VECTOR -#define _CL_HAVE_STDEXCEPT -#define _CL_HAVE_ERRNO_H -#define _CL_HAVE_SYS_STAT_H -#define _CL_HAVE_FCNTL_H - -//character & std tchar support -#define _CL_HAVE_TCHAR_H -#ifdef _UCS2 - #define _CL_HAVE_WCTYPE_H - - #define _CL_HAVE_WCSCPY - #define _CL_HAVE_WCSNCPY - #define _CL_HAVE_WCSCAT - #define _CL_HAVE_WCSCHR - #define _CL_HAVE_WCSSTR - #define _CL_HAVE_WCSLEN - #define _CL_HAVE_WCSCMP - #define _CL_HAVE_WCSNCMP - #define _CL_HAVE_WCSCSPN -#else - #define _CL_HAVE_CTYPE_H -#endif - -//already have the normal structures -#define _CL_HAVE_FLOAT_T -#define _CL_HAVE_INTPTR_T - -//system dependant: -#define _CL_HAVE_STRING_H //could be HAVE_STRINGS_H && HAVE_STRCHR -#define _CL_HAVE_SYS_TIMEB_H -#define _CL_HAVE_TIME_H - -#if defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__) - #define _CL_HAVE_IO_H - #define _CL_HAVE_DIRECT_H - #define _CL_HAVE_WINDOWS_H -#else - #define _CL_HAVE_UNISTD_H -#endif - -//////////////////////////////////////////////// -//now for individual functions. some compilers -//miss these, so must individually define what -//we have -//////////////////////////////////////////////// - -//string functions -#define _CL_HAVE_STRLWR -#define _CL_HAVE_WCSLWR -#define _CL_HAVE_WCSCASECMP -#define _CL_HAVE_STRCASECMP - -//formatting functions -#define _CL_HAVE_SNWPRINTF -#define _CL_HAVE_VSNWPRINTF -#define _CL_HAVE_WPRINTF -#define _CL_HAVE_SNPRINTF -#define _CL_HAVE_PRINTF - - -//conversion functions -#define _CL_HAVE_STRTOLL -#define _CL_HAVE_WCSTOLL -#define _CL_HAVE_WCSTOD -#define _CL_HAVE_LLTOA -#define _CL_HAVE_LLTOW -#define _CL_HAVE_INTPTR_T - -//these ones are not standard (msvc) -//so you will probably need to undefine -//if you are not using msvc -#define _CL_HAVE_FILELENGTH - - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/config/gunichartables.cpp clucene-core-2.3.3.4/src/CLucene/config/gunichartables.cpp --- clucene-core-0.9.21b/src/CLucene/config/gunichartables.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/gunichartables.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,379 +0,0 @@ -/* - * Copyright (C) 1999 Tom Tromey - * Copyright (C) 2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - ************************************************ - * Also licensed with permission from Tom Tromey - * and Owen Taylor under the Apache license. - * Original location: - * http://cvs.gnome.org/viewcvs/glib/glib/guniprop.c?view=log - ************************************************ - * - * Copyright 2003-2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #include "CLucene/StdHeader.h" - -typedef unsigned long gunichar; -typedef unsigned short guint16; -typedef short gint16; -typedef char gchar; -typedef unsigned char guchar; - -/* These are the possible character classifications. - * See http://www.unicode.org/Public/UNIDATA/UnicodeData.txt - or http://www.unicode.org/Public/UNIDATA/UCD.html. - - todo: i think there is a new version of the unicode, which we should use. - data is licensed like this: http://www.unicode.org/copyright.html... not sure but looks apache compatible - */ -typedef enum -{ - G_UNICODE_CONTROL, - G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, - G_UNICODE_PRIVATE_USE, - G_UNICODE_SURROGATE, - G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, - G_UNICODE_TITLECASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_COMBINING_MARK, - G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, - G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_LETTER_NUMBER, - G_UNICODE_OTHER_NUMBER, - G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, - G_UNICODE_LINE_SEPARATOR, - G_UNICODE_PARAGRAPH_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR -} GUnicodeType; - - -#include "gunichartables.h" - -#define ATTR_TABLE(Page) (((Page) <= G_UNICODE_LAST_PAGE_PART1) \ - ? attr_table_part1[Page] \ - : attr_table_part2[(Page) - 0xe00]) - -#define ATTTABLE(Page, Char) \ - ((ATTR_TABLE(Page) == G_UNICODE_MAX_TABLE_INDEX) ? 0 : (attr_data[ATTR_TABLE(Page)][Char])) - - -#define TTYPE_PART1(Page, Char) \ - ((type_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ - ? (type_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \ - : (type_data[type_table_part1[Page]][Char])) - -#define TTYPE_PART2(Page, Char) \ - ((type_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ - ? (type_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \ - : (type_data[type_table_part2[Page]][Char])) - -#define TYPE(Char) \ - (((Char) <= G_UNICODE_LAST_CHAR_PART1) \ - ? TTYPE_PART1 ((Char) >> 8, (Char) & 0xff) \ - : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \ - ? TTYPE_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \ - : G_UNICODE_UNASSIGNED)) - -/* Count the number of elements in an array. The array must be defined - * as such; using this with a dynamically allocated array will give - * incorrect results. - */ -#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0])) - - - - -#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) -#ifdef _LUCENE_PRAGMA_WARNINGS - #pragma message ("===== Using internal character function =====") -#else - #warning "===== Using internal character function =====" -#endif - -bool cl_isletter(gunichar c) -{ - int t = TYPE (c); - switch(t) - { - case G_UNICODE_LOWERCASE_LETTER: return true; - case G_UNICODE_TITLECASE_LETTER: return true; - case G_UNICODE_UPPERCASE_LETTER: return true; - case G_UNICODE_MODIFIER_LETTER: return true; - case G_UNICODE_OTHER_LETTER: return true; - default: return false; - } -} - -bool cl_isalnum(gunichar c) -{ - int t = TYPE (c); - switch(t) - { - case G_UNICODE_LOWERCASE_LETTER: return true; - case G_UNICODE_TITLECASE_LETTER: return true; - case G_UNICODE_UPPERCASE_LETTER: return true; - case G_UNICODE_MODIFIER_LETTER: return true; - case G_UNICODE_OTHER_LETTER: return true; - case G_UNICODE_DECIMAL_NUMBER: return true; - case G_UNICODE_LETTER_NUMBER: return true; - case G_UNICODE_OTHER_NUMBER: return true; - default: return false; - } -} - -bool cl_isdigit(gunichar c) -{ - int t = TYPE (c); - switch(t) - { - case G_UNICODE_DECIMAL_NUMBER: return true; - case G_UNICODE_LETTER_NUMBER: return true; - case G_UNICODE_OTHER_NUMBER: return true; - default: return false; - } -} - -/** - * cl_isspace: - * @c: a Unicode character - * - * Determines whether a character is a space, tab, or line separator - * (newline, carriage return, etc.). Given some UTF-8 text, obtain a - * character value with lucene_utf8towc(). - * - * (Note: don't use this to do word breaking; you have to use - * Pango or equivalent to get word breaking right, the algorithm - * is fairly complex.) - * - * Return value: %TRUE if @c is a punctuation character - **/ -bool cl_isspace (gunichar c) -{ - switch (c) - { - /* special-case these since Unicode thinks they are not spaces */ - case '\t': - case '\n': - case '\r': - case '\f': - return true; - - default: - { - int t = TYPE ((gunichar)c); - return (t == G_UNICODE_SPACE_SEPARATOR || t == G_UNICODE_LINE_SEPARATOR - || t == G_UNICODE_PARAGRAPH_SEPARATOR); - } - } -} - - - -/** - * cl_tolower: - * @c: a Unicode character. - * - * Converts a character to lower case. - * - * Return value: the result of converting @c to lower case. - * If @c is not an upperlower or titlecase character, - * or has no lowercase equivalent @c is returned unchanged. - **/ -TCHAR cl_tolower (TCHAR ch) -{ - gunichar c=ch; - int t = TYPE ((gunichar)c); - if (t == G_UNICODE_UPPERCASE_LETTER) - { - gunichar val = ATTTABLE (c >> 8, c & 0xff); - if (val >= 0x1000000) - { - const gchar *p = special_case_table + val - 0x1000000; - int len=0; - wchar_t ret=0; - lucene_utf8towc(&ret,p,6); -#ifdef _UCS2 - return ret; -#else - return LUCENE_OOR_CHAR(ret); -#endif - //return cl_utf8_get_char (p, &len); - }else - return val ? val : c; - }else if (t == G_UNICODE_TITLECASE_LETTER){ - unsigned int i; - for (i = 0; i < G_N_ELEMENTS (title_table); ++i) - { - if (title_table[i][0] == c) - return title_table[i][2]; - } - } - return c; -} - -/** - * cl_toupper: - * @c: a Unicode character - * - * Converts a character to uppercase. - * - * Return value: the result of converting @c to uppercase. - * If @c is not an lowercase or titlecase character, - * or has no upper case equivalent @c is returned unchanged. - **/ -TCHAR cl_toupper (TCHAR ch) -{ - gunichar c=ch; - int t = TYPE (c); - if (t == G_UNICODE_LOWERCASE_LETTER) - { - gunichar val = ATTTABLE (c >> 8, c & 0xff); - if (val >= 0x1000000) - { - const gchar *p = special_case_table + val - 0x1000000; - - wchar_t ret=0; - lucene_utf8towc(&ret,p,6); -#ifdef _UCS2 - return ret; -#else - return LUCENE_OOR_CHAR(ret); -#endif - //return lucene_utf8towc (p); - } - else - return val ? val : c; - } - else if (t == G_UNICODE_TITLECASE_LETTER) - { - unsigned int i; - for (i = 0; i < G_N_ELEMENTS (title_table); ++i) - { - if (title_table[i][0] == c) - return title_table[i][1]; - } - } - return c; -} - - - -/** - * cl_tcasefold: - * @str: a unicode string - * - * Converts a string into a form that is independent of case. The - * result will not correspond to any particular case, but can be - * compared for equality or ordered with the results of calling - * cl_tcasefold() on other strings. - * - * Note that calling cl_tcasefold() followed by g_utf8_collate() is - * only an approximation to the correct linguistic case insensitive - * ordering, though it is a fairly good one. Getting this exactly - * right would require a more sophisticated collation function that - * takes case sensitivity into account. GLib does not currently - * provide such a function. - * - * Return value: a newly allocated string, that is a - * case independent form of @str. - **/ -TCHAR cl_tcasefold(const TCHAR ch){ - int start = 0; - int end = G_N_ELEMENTS (casefold_table); - - if (ch >= casefold_table[start].ch && - ch <= casefold_table[end - 1].ch) - { - while (1) - { - int half = (start + end) / 2; - if (ch == casefold_table[half].ch) - { - wchar_t ret=0; - lucene_utf8towc(&ret,casefold_table[half].data,6); - - #ifdef _UCS2 - return ret; - #else - LUCENE_OOR_CHAR(ret) - #endif - }else if (half == start){ - break; - }else if (ch > casefold_table[half].ch){ - start = half; - }else{ - end = half; - } - } - } - return cl_tolower(ch); - -} - - -//this function was not taken from gnome -TCHAR* cl_tcscasefold( TCHAR * str, int len ) //len default is -1 -{ - TCHAR *p = str; - while ((len < 0 || p < str + len) && *p) - { - *p = cl_tcasefold(*p); - p++; - } - return str; -} -//this function was not taken from gnome -int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src){ - TCHAR f,l; - - do{ - f = cl_tcasefold( (*(dst++)) ); - l = cl_tcasefold( (*(src++)) ); - } while ( (f) && (f == l) ); - - return (int)(f - l); -} - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/config/gunichartables.h clucene-core-2.3.3.4/src/CLucene/config/gunichartables.h --- clucene-core-0.9.21b/src/CLucene/config/gunichartables.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/gunichartables.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,11264 +0,0 @@ -/* This file is automatically generated. DO NOT EDIT! - Instead, edit gen-unicode-tables.pl and re-run. */ - -#ifndef CHARTABLES_H -#define CHARTABLES_H - -#define G_UNICODE_DATA_VERSION "4.0" - -#define G_UNICODE_LAST_CHAR 0x10ffff - -#define G_UNICODE_MAX_TABLE_INDEX 10000 - -#define G_UNICODE_LAST_CHAR_PART1 0x2FAFF - -#define G_UNICODE_LAST_PAGE_PART1 762 - -static const char type_data[][256] = { - { /* page 0, index 0 */ - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, - G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_FORMAT, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_FINAL_PUNCTUATION, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 1, index 1 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 2, index 2 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL - }, - { /* page 3, index 3 */ - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 4, index 4 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 5, index 5 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 6, index 6 */ - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_FORMAT, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_LETTER - }, - { /* page 7, index 7 */ - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 9, index 8 */ - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 10, index 9 */ - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 11, index 10 */ - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 12, index 11 */ - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 13, index 12 */ - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 14, index 13 */ - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 15, index 14 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 16, index 15 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 17, index 16 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 18, index 17 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER - }, - { /* page 19, index 18 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 20, index 19 */ - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER - }, - { /* page 22, index 20 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 23, index 21 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 24, index 22 */ - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_UNASSIGNED, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 25, index 23 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL - }, - { /* page 29, index 24 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 30, index 25 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 31, index 26 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED - }, - { /* page 32, index 27 */ - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_LINE_SEPARATOR, G_UNICODE_PARAGRAPH_SEPARATOR, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_OTHER_NUMBER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 33, index 28 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL - }, - { /* page 35, index 29 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 36, index 30 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER - }, - { /* page 37, index 31 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL - }, - { /* page 38, index 32 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 39, index 33 */ - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL - }, - { /* page 41, index 34 */ - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL - }, - { /* page 43, index 35 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 46, index 36 */ - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 47, index 37 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 48, index 38 */ - G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_LETTER_NUMBER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER - }, - { /* page 49, index 39 */ - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER - }, - { /* page 50, index 40 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED - }, - { /* page 77, index 41 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL - }, - { /* page 159, index 42 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 164, index 43 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 215, index 44 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 250, index 45 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 251, index 46 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER - }, - { /* page 253, index 47 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 254, index 48 */ - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_DASH_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT - }, - { /* page 255, index 49 */ - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, - G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 256, index 50 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 257, index 51 */ - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 259, index 52 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, - G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 260, index 53 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 264, index 54 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 464, index 55 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 465, index 56 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, - G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 467, index 57 */ - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 468, index 58 */ - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 469, index 59 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 470, index 60 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER - }, - { /* page 471, index 61 */ - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, - G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, - G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER - }, - { /* page 678, index 62 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 762, index 63 */ - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 3584, index 64 */ - G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED - }, - { /* page 3585, index 65 */ - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 4095, index 66 */ - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - }, - { /* page 4351, index 67 */ - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, - G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED, - G_UNICODE_UNASSIGNED - } -}; - -/* U+0000 through U+2FAFF */ -static const gint16 type_table_part1[763] = { - 0 /* page 0 */, - 1 /* page 1 */, - 2 /* page 2 */, - 3 /* page 3 */, - 4 /* page 4 */, - 5 /* page 5 */, - 6 /* page 6 */, - 7 /* page 7 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 8 /* page 9 */, - 9 /* page 10 */, - 10 /* page 11 */, - 11 /* page 12 */, - 12 /* page 13 */, - 13 /* page 14 */, - 14 /* page 15 */, - 15 /* page 16 */, - 16 /* page 17 */, - 17 /* page 18 */, - 18 /* page 19 */, - 19 /* page 20 */, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 20 /* page 22 */, - 21 /* page 23 */, - 22 /* page 24 */, - 23 /* page 25 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 24 /* page 29 */, - 25 /* page 30 */, - 26 /* page 31 */, - 27 /* page 32 */, - 28 /* page 33 */, - G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, - 29 /* page 35 */, - 30 /* page 36 */, - 31 /* page 37 */, - 32 /* page 38 */, - 33 /* page 39 */, - G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, - 34 /* page 41 */, - G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, - 35 /* page 43 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 36 /* page 46 */, - 37 /* page 47 */, - 38 /* page 48 */, - 39 /* page 49 */, - 40 /* page 50 */, - G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 41 /* page 77 */, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 42 /* page 159 */, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 43 /* page 164 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 44 /* page 215 */, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 45 /* page 250 */, - 46 /* page 251 */, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 47 /* page 253 */, - 48 /* page 254 */, - 49 /* page 255 */, - 50 /* page 256 */, - 51 /* page 257 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 52 /* page 259 */, - 53 /* page 260 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 54 /* page 264 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 55 /* page 464 */, - 56 /* page 465 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - 57 /* page 467 */, - 58 /* page 468 */, - 59 /* page 469 */, - 60 /* page 470 */, - 61 /* page 471 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 62 /* page 678 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, - 63 /* page 762 */ -}; - -/* U+E0000 through U+10FFFF */ -static const gint16 type_table_part2[768] = { - 64 /* page 3584 */, - 65 /* page 3585 */, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - 66 /* page 4095 */, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, - 67 /* page 4351 */ -}; - -static const gunichar attr_data[][256] = { - { /* page 0, index 0 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, - 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, - 0x007a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, - 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, - 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x039c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, - 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, - 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0000, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x1000000, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, - 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, - 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0000, 0x00d8, 0x00d9, 0x00da, - 0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178 - }, - { /* page 1, index 1 */ - 0x0101, 0x0100, 0x0103, 0x0102, 0x0105, 0x0104, 0x0107, 0x0106, 0x0109, - 0x0108, 0x010b, 0x010a, 0x010d, 0x010c, 0x010f, 0x010e, 0x0111, 0x0110, - 0x0113, 0x0112, 0x0115, 0x0114, 0x0117, 0x0116, 0x0119, 0x0118, 0x011b, - 0x011a, 0x011d, 0x011c, 0x011f, 0x011e, 0x0121, 0x0120, 0x0123, 0x0122, - 0x0125, 0x0124, 0x0127, 0x0126, 0x0129, 0x0128, 0x012b, 0x012a, 0x012d, - 0x012c, 0x012f, 0x012e, 0x1000007, 0x0049, 0x0133, 0x0132, 0x0135, - 0x0134, 0x0137, 0x0136, 0x0000, 0x013a, 0x0139, 0x013c, 0x013b, 0x013e, - 0x013d, 0x0140, 0x013f, 0x0142, 0x0141, 0x0144, 0x0143, 0x0146, 0x0145, - 0x0148, 0x0147, 0x1000086, 0x014b, 0x014a, 0x014d, 0x014c, 0x014f, - 0x014e, 0x0151, 0x0150, 0x0153, 0x0152, 0x0155, 0x0154, 0x0157, 0x0156, - 0x0159, 0x0158, 0x015b, 0x015a, 0x015d, 0x015c, 0x015f, 0x015e, 0x0161, - 0x0160, 0x0163, 0x0162, 0x0165, 0x0164, 0x0167, 0x0166, 0x0169, 0x0168, - 0x016b, 0x016a, 0x016d, 0x016c, 0x016f, 0x016e, 0x0171, 0x0170, 0x0173, - 0x0172, 0x0175, 0x0174, 0x0177, 0x0176, 0x00ff, 0x017a, 0x0179, 0x017c, - 0x017b, 0x017e, 0x017d, 0x0053, 0x0000, 0x0253, 0x0183, 0x0182, 0x0185, - 0x0184, 0x0254, 0x0188, 0x0187, 0x0256, 0x0257, 0x018c, 0x018b, 0x0000, - 0x01dd, 0x0259, 0x025b, 0x0192, 0x0191, 0x0260, 0x0263, 0x01f6, 0x0269, - 0x0268, 0x0199, 0x0198, 0x0000, 0x0000, 0x026f, 0x0272, 0x0220, 0x0275, - 0x01a1, 0x01a0, 0x01a3, 0x01a2, 0x01a5, 0x01a4, 0x0280, 0x01a8, 0x01a7, - 0x0283, 0x0000, 0x0000, 0x01ad, 0x01ac, 0x0288, 0x01b0, 0x01af, 0x028a, - 0x028b, 0x01b4, 0x01b3, 0x01b6, 0x01b5, 0x0292, 0x01b9, 0x01b8, 0x0000, - 0x0000, 0x01bd, 0x01bc, 0x0000, 0x01f7, 0x0000, 0x0000, 0x0000, 0x0000, - 0x01c6, 0x0000, 0x01c4, 0x01c9, 0x0000, 0x01c7, 0x01cc, 0x0000, 0x01ca, - 0x01ce, 0x01cd, 0x01d0, 0x01cf, 0x01d2, 0x01d1, 0x01d4, 0x01d3, 0x01d6, - 0x01d5, 0x01d8, 0x01d7, 0x01da, 0x01d9, 0x01dc, 0x01db, 0x018e, 0x01df, - 0x01de, 0x01e1, 0x01e0, 0x01e3, 0x01e2, 0x01e5, 0x01e4, 0x01e7, 0x01e6, - 0x01e9, 0x01e8, 0x01eb, 0x01ea, 0x01ed, 0x01ec, 0x01ef, 0x01ee, - 0x10000ad, 0x01f3, 0x0000, 0x01f1, 0x01f5, 0x01f4, 0x0195, 0x01bf, - 0x01f9, 0x01f8, 0x01fb, 0x01fa, 0x01fd, 0x01fc, 0x01ff, 0x01fe - }, - { /* page 2, index 2 */ - 0x0201, 0x0200, 0x0203, 0x0202, 0x0205, 0x0204, 0x0207, 0x0206, 0x0209, - 0x0208, 0x020b, 0x020a, 0x020d, 0x020c, 0x020f, 0x020e, 0x0211, 0x0210, - 0x0213, 0x0212, 0x0215, 0x0214, 0x0217, 0x0216, 0x0219, 0x0218, 0x021b, - 0x021a, 0x021d, 0x021c, 0x021f, 0x021e, 0x019e, 0x0000, 0x0223, 0x0222, - 0x0225, 0x0224, 0x0227, 0x0226, 0x0229, 0x0228, 0x022b, 0x022a, 0x022d, - 0x022c, 0x022f, 0x022e, 0x0231, 0x0230, 0x0233, 0x0232, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0181, 0x0186, 0x0000, 0x0189, 0x018a, 0x0000, 0x018f, - 0x0000, 0x0190, 0x0000, 0x0000, 0x0000, 0x0000, 0x0193, 0x0000, 0x0000, - 0x0194, 0x0000, 0x0000, 0x0000, 0x0000, 0x0197, 0x0196, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x019c, 0x0000, 0x0000, 0x019d, 0x0000, 0x0000, - 0x019f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x01a6, 0x0000, 0x0000, 0x01a9, 0x0000, 0x0000, 0x0000, - 0x0000, 0x01ae, 0x0000, 0x01b1, 0x01b2, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x01b7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 3, index 3 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ac, - 0x0000, 0x03ad, 0x03ae, 0x03af, 0x0000, 0x03cc, 0x0000, 0x03cd, 0x03ce, - 0x100008f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, - 0x03c1, 0x0000, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, - 0x03ca, 0x03cb, 0x0386, 0x0388, 0x0389, 0x038a, 0x100009e, 0x0391, - 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, - 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a3, - 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x038c, - 0x038e, 0x038f, 0x0000, 0x0392, 0x0398, 0x0000, 0x0000, 0x0000, 0x03a6, - 0x03a0, 0x0000, 0x03d9, 0x03d8, 0x03db, 0x03da, 0x03dd, 0x03dc, 0x03df, - 0x03de, 0x03e1, 0x03e0, 0x03e3, 0x03e2, 0x03e5, 0x03e4, 0x03e7, 0x03e6, - 0x03e9, 0x03e8, 0x03eb, 0x03ea, 0x03ed, 0x03ec, 0x03ef, 0x03ee, 0x039a, - 0x03a1, 0x03f9, 0x0000, 0x03b8, 0x0395, 0x0000, 0x03f8, 0x03f7, 0x03f2, - 0x03fb, 0x03fa, 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 4, index 4 */ - 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, - 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0430, 0x0431, - 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, - 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, - 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, - 0x044d, 0x044e, 0x044f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, - 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0400, - 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, - 0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, 0x0461, 0x0460, 0x0463, - 0x0462, 0x0465, 0x0464, 0x0467, 0x0466, 0x0469, 0x0468, 0x046b, 0x046a, - 0x046d, 0x046c, 0x046f, 0x046e, 0x0471, 0x0470, 0x0473, 0x0472, 0x0475, - 0x0474, 0x0477, 0x0476, 0x0479, 0x0478, 0x047b, 0x047a, 0x047d, 0x047c, - 0x047f, 0x047e, 0x0481, 0x0480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x048b, 0x048a, 0x048d, 0x048c, 0x048f, 0x048e, - 0x0491, 0x0490, 0x0493, 0x0492, 0x0495, 0x0494, 0x0497, 0x0496, 0x0499, - 0x0498, 0x049b, 0x049a, 0x049d, 0x049c, 0x049f, 0x049e, 0x04a1, 0x04a0, - 0x04a3, 0x04a2, 0x04a5, 0x04a4, 0x04a7, 0x04a6, 0x04a9, 0x04a8, 0x04ab, - 0x04aa, 0x04ad, 0x04ac, 0x04af, 0x04ae, 0x04b1, 0x04b0, 0x04b3, 0x04b2, - 0x04b5, 0x04b4, 0x04b7, 0x04b6, 0x04b9, 0x04b8, 0x04bb, 0x04ba, 0x04bd, - 0x04bc, 0x04bf, 0x04be, 0x0000, 0x04c2, 0x04c1, 0x04c4, 0x04c3, 0x04c6, - 0x04c5, 0x04c8, 0x04c7, 0x04ca, 0x04c9, 0x04cc, 0x04cb, 0x04ce, 0x04cd, - 0x0000, 0x04d1, 0x04d0, 0x04d3, 0x04d2, 0x04d5, 0x04d4, 0x04d7, 0x04d6, - 0x04d9, 0x04d8, 0x04db, 0x04da, 0x04dd, 0x04dc, 0x04df, 0x04de, 0x04e1, - 0x04e0, 0x04e3, 0x04e2, 0x04e5, 0x04e4, 0x04e7, 0x04e6, 0x04e9, 0x04e8, - 0x04eb, 0x04ea, 0x04ed, 0x04ec, 0x04ef, 0x04ee, 0x04f1, 0x04f0, 0x04f3, - 0x04f2, 0x04f5, 0x04f4, 0x0000, 0x0000, 0x04f9, 0x04f8, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 5, index 5 */ - 0x0501, 0x0500, 0x0503, 0x0502, 0x0505, 0x0504, 0x0507, 0x0506, 0x0509, - 0x0508, 0x050b, 0x050a, 0x050d, 0x050c, 0x050f, 0x050e, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, - 0x0566, 0x0567, 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, - 0x056f, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, - 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580, - 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0531, 0x0532, - 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053a, 0x053b, - 0x053c, 0x053d, 0x053e, 0x053f, 0x0540, 0x0541, 0x0542, 0x0543, 0x0544, - 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d, - 0x054e, 0x054f, 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, - 0x1000044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 6, index 6 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 9, index 7 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 10, index 8 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 11, index 9 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 12, index 10 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 13, index 11 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 14, index 12 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 15, index 13 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 16, index 14 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 19, index 15 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 23, index 16 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 24, index 17 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 25, index 18 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 30, index 19 */ - 0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06, 0x1e09, - 0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e, 0x1e11, 0x1e10, - 0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16, 0x1e19, 0x1e18, 0x1e1b, - 0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e, 0x1e21, 0x1e20, 0x1e23, 0x1e22, - 0x1e25, 0x1e24, 0x1e27, 0x1e26, 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d, - 0x1e2c, 0x1e2f, 0x1e2e, 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34, - 0x1e37, 0x1e36, 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f, - 0x1e3e, 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46, - 0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e, 0x1e51, - 0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56, 0x1e59, 0x1e58, - 0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e, 0x1e61, 0x1e60, 0x1e63, - 0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66, 0x1e69, 0x1e68, 0x1e6b, 0x1e6a, - 0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e, 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75, - 0x1e74, 0x1e77, 0x1e76, 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c, - 0x1e7f, 0x1e7e, 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87, - 0x1e86, 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e, - 0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x10000b6, 0x10000bf, - 0x10000c8, 0x10000d1, 0x10000da, 0x1e60, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6, 0x1ea9, - 0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae, 0x1eb1, 0x1eb0, - 0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6, 0x1eb9, 0x1eb8, 0x1ebb, - 0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe, 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2, - 0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6, 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd, - 0x1ecc, 0x1ecf, 0x1ece, 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4, - 0x1ed7, 0x1ed6, 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf, - 0x1ede, 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6, - 0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee, 0x1ef1, - 0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6, 0x1ef9, 0x1ef8, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 31, index 20 */ - 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f00, - 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f18, 0x1f19, - 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x0000, 0x0000, 0x1f10, 0x1f11, 0x1f12, - 0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, - 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, - 0x1f25, 0x1f26, 0x1f27, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, - 0x1f3e, 0x1f3f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, - 0x1f37, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x0000, 0x0000, - 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000, - 0x10000e3, 0x1f59, 0x10000ee, 0x1f5b, 0x10000fd, 0x1f5d, 0x100010c, - 0x1f5f, 0x0000, 0x1f51, 0x0000, 0x1f53, 0x0000, 0x1f55, 0x0000, 0x1f57, - 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f60, - 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1fba, 0x1fbb, - 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, - 0x1feb, 0x1ffa, 0x1ffb, 0x0000, 0x0000, 0x10001b7, 0x10001c4, 0x10001d1, - 0x10001de, 0x10001eb, 0x10001f8, 0x1000205, 0x1000212, 0x100021f, - 0x1000229, 0x1000233, 0x100023d, 0x1000247, 0x1000251, 0x100025b, - 0x1000265, 0x100026f, 0x100027c, 0x1000289, 0x1000296, 0x10002a3, - 0x10002b0, 0x10002bd, 0x10002ca, 0x10002d7, 0x10002e1, 0x10002eb, - 0x10002f5, 0x10002ff, 0x1000309, 0x1000313, 0x100031d, 0x1000327, - 0x1000334, 0x1000341, 0x100034e, 0x100035b, 0x1000368, 0x1000375, - 0x1000382, 0x100038f, 0x1000399, 0x10003a3, 0x10003ad, 0x10003b7, - 0x10003c1, 0x10003cb, 0x10003d5, 0x1fb8, 0x1fb9, 0x100041e, 0x10003df, - 0x100042b, 0x0000, 0x100011b, 0x1000466, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, - 0x10003eb, 0x0000, 0x0399, 0x0000, 0x0000, 0x0000, 0x1000436, 0x10003f4, - 0x1000443, 0x0000, 0x1000126, 0x1000475, 0x1f72, 0x1f73, 0x1f74, 0x1f75, - 0x1000400, 0x0000, 0x0000, 0x0000, 0x1fd8, 0x1fd9, 0x1000131, 0x1000140, - 0x0000, 0x0000, 0x100014f, 0x100015a, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1fe8, 0x1fe9, 0x1000169, 0x1000178, - 0x1000187, 0x1fec, 0x1000192, 0x100019d, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, - 0x1fe5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100044e, 0x1000409, - 0x100045b, 0x0000, 0x10001ac, 0x1000484, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, - 0x1000415, 0x0000, 0x0000, 0x0000 - }, - { /* page 33, index 21 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x03c9, 0x0000, 0x0000, 0x0000, 0x006b, 0x00e5, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 251, index 22 */ - 0x100000f, 0x1000016, 0x100001d, 0x1000024, 0x100002d, 0x1000036, - 0x100003d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100004f, 0x100005a, 0x1000065, - 0x1000070, 0x100007b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000 - }, - { /* page 255, index 23 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff41, 0xff42, 0xff43, - 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, - 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, - 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, - 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, - 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, - 0xff3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 260, index 24 */ - 0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f, - 0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437, - 0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f, - 0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447, - 0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f, - 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, - 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, - 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, - 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, - 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 - }, - { /* page 471, index 25 */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, - 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, - 0x0007, 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, - 0x0006, 0x0007, 0x0008, 0x0009 - } -}; - -/* U+0000 through U+2FAFF */ -static const gint16 attr_table_part1[763] = { - 0 /* page 0 */, - 1 /* page 1 */, - 2 /* page 2 */, - 3 /* page 3 */, - 4 /* page 4 */, - 5 /* page 5 */, - 6 /* page 6 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 7 /* page 9 */, - 8 /* page 10 */, - 9 /* page 11 */, - 10 /* page 12 */, - 11 /* page 13 */, - 12 /* page 14 */, - 13 /* page 15 */, - 14 /* page 16 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 15 /* page 19 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 16 /* page 23 */, - 17 /* page 24 */, - 18 /* page 25 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 19 /* page 30 */, - 20 /* page 31 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 21 /* page 33 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 22 /* page 251 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 23 /* page 255 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 24 /* page 260 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 25 /* page 471 */, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX -}; - -/* U+E0000 through U+10FFFF */ -static const gint16 attr_table_part2[768] = { - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX, - 0x0000 + G_UNICODE_MAX_TABLE_INDEX -}; - -static const gunichar title_table[][3] = { - { 0x01c5, 0x01c4, 0x01c6 }, - { 0x01c8, 0x01c7, 0x01c9 }, - { 0x01cb, 0x01ca, 0x01cc }, - { 0x01f2, 0x01f1, 0x01f3 }, - { 0x1f88, 0x0000, 0x1f80 }, - { 0x1f89, 0x0000, 0x1f81 }, - { 0x1f8a, 0x0000, 0x1f82 }, - { 0x1f8b, 0x0000, 0x1f83 }, - { 0x1f8c, 0x0000, 0x1f84 }, - { 0x1f8d, 0x0000, 0x1f85 }, - { 0x1f8e, 0x0000, 0x1f86 }, - { 0x1f8f, 0x0000, 0x1f87 }, - { 0x1f98, 0x0000, 0x1f90 }, - { 0x1f99, 0x0000, 0x1f91 }, - { 0x1f9a, 0x0000, 0x1f92 }, - { 0x1f9b, 0x0000, 0x1f93 }, - { 0x1f9c, 0x0000, 0x1f94 }, - { 0x1f9d, 0x0000, 0x1f95 }, - { 0x1f9e, 0x0000, 0x1f96 }, - { 0x1f9f, 0x0000, 0x1f97 }, - { 0x1fa8, 0x0000, 0x1fa0 }, - { 0x1fa9, 0x0000, 0x1fa1 }, - { 0x1faa, 0x0000, 0x1fa2 }, - { 0x1fab, 0x0000, 0x1fa3 }, - { 0x1fac, 0x0000, 0x1fa4 }, - { 0x1fad, 0x0000, 0x1fa5 }, - { 0x1fae, 0x0000, 0x1fa6 }, - { 0x1faf, 0x0000, 0x1fa7 }, - { 0x1fbc, 0x0000, 0x1fb3 }, - { 0x1fcc, 0x0000, 0x1fc3 }, - { 0x1ffc, 0x0000, 0x1ff3 } -}; - - -/* Table of special cases for case conversion; each record contains - * First, the best single character mapping to lowercase if Lu, - * and to uppercase if Ll, followed by the output mapping for the two cases - * other than the case of the codepoint, in the order [Ll],[Lu],[Lt], - * encoded in UTF-8, separated and terminated by a null character. - */ -static const gchar special_case_table[] = { - "\x00\x53\x53\x00\x53\x73\0" /* offset 0 */ - "\x69\x69\xcc\x87\x00\xc4\xb0\0" /* offset 7 */ - "\x00\x46\x46\x00\x46\x66\0" /* offset 15 */ - "\x00\x46\x49\x00\x46\x69\0" /* offset 22 */ - "\x00\x46\x4c\x00\x46\x6c\0" /* offset 29 */ - "\x00\x46\x46\x49\x00\x46\x66\x69\0" /* offset 36 */ - "\x00\x46\x46\x4c\x00\x46\x66\x6c\0" /* offset 45 */ - "\x00\x53\x54\x00\x53\x74\0" /* offset 54 */ - "\x00\x53\x54\x00\x53\x74\0" /* offset 61 */ - "\x00\xd4\xb5\xd5\x92\x00\xd4\xb5\xd6\x82\0" /* offset 68 */ - "\x00\xd5\x84\xd5\x86\x00\xd5\x84\xd5\xb6\0" /* offset 79 */ - "\x00\xd5\x84\xd4\xb5\x00\xd5\x84\xd5\xa5\0" /* offset 90 */ - "\x00\xd5\x84\xd4\xbb\x00\xd5\x84\xd5\xab\0" /* offset 101 */ - "\x00\xd5\x8e\xd5\x86\x00\xd5\x8e\xd5\xb6\0" /* offset 112 */ - "\x00\xd5\x84\xd4\xbd\x00\xd5\x84\xd5\xad\0" /* offset 123 */ - "\x00\xca\xbc\x4e\x00\xca\xbc\x4e\0" /* offset 134 */ - "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 143 */ - "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 158 */ - "\x00\x4a\xcc\x8c\x00\x4a\xcc\x8c\0" /* offset 173 */ - "\x00\x48\xcc\xb1\x00\x48\xcc\xb1\0" /* offset 182 */ - "\x00\x54\xcc\x88\x00\x54\xcc\x88\0" /* offset 191 */ - "\x00\x57\xcc\x8a\x00\x57\xcc\x8a\0" /* offset 200 */ - "\x00\x59\xcc\x8a\x00\x59\xcc\x8a\0" /* offset 209 */ - "\x00\x41\xca\xbe\x00\x41\xca\xbe\0" /* offset 218 */ - "\x00\xce\xa5\xcc\x93\x00\xce\xa5\xcc\x93\0" /* offset 227 */ - "\x00\xce\xa5\xcc\x93\xcc\x80\x00\xce\xa5\xcc\x93\xcc\x80\0" /* offset 238 */ - "\x00\xce\xa5\xcc\x93\xcc\x81\x00\xce\xa5\xcc\x93\xcc\x81\0" /* offset 253 */ - "\x00\xce\xa5\xcc\x93\xcd\x82\x00\xce\xa5\xcc\x93\xcd\x82\0" /* offset 268 */ - "\x00\xce\x91\xcd\x82\x00\xce\x91\xcd\x82\0" /* offset 283 */ - "\x00\xce\x97\xcd\x82\x00\xce\x97\xcd\x82\0" /* offset 294 */ - "\x00\xce\x99\xcc\x88\xcc\x80\x00\xce\x99\xcc\x88\xcc\x80\0" /* offset 305 */ - "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 320 */ - "\x00\xce\x99\xcd\x82\x00\xce\x99\xcd\x82\0" /* offset 335 */ - "\x00\xce\x99\xcc\x88\xcd\x82\x00\xce\x99\xcc\x88\xcd\x82\0" /* offset 346 */ - "\x00\xce\xa5\xcc\x88\xcc\x80\x00\xce\xa5\xcc\x88\xcc\x80\0" /* offset 361 */ - "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 376 */ - "\x00\xce\xa1\xcc\x93\x00\xce\xa1\xcc\x93\0" /* offset 391 */ - "\x00\xce\xa5\xcd\x82\x00\xce\xa5\xcd\x82\0" /* offset 402 */ - "\x00\xce\xa5\xcc\x88\xcd\x82\x00\xce\xa5\xcc\x88\xcd\x82\0" /* offset 413 */ - "\x00\xce\xa9\xcd\x82\x00\xce\xa9\xcd\x82\0" /* offset 428 */ - "\xe1\xbe\x88\xe1\xbc\x88\xce\x99\x00\xe1\xbe\x88\0" /* offset 439 */ - "\xe1\xbe\x89\xe1\xbc\x89\xce\x99\x00\xe1\xbe\x89\0" /* offset 452 */ - "\xe1\xbe\x8a\xe1\xbc\x8a\xce\x99\x00\xe1\xbe\x8a\0" /* offset 465 */ - "\xe1\xbe\x8b\xe1\xbc\x8b\xce\x99\x00\xe1\xbe\x8b\0" /* offset 478 */ - "\xe1\xbe\x8c\xe1\xbc\x8c\xce\x99\x00\xe1\xbe\x8c\0" /* offset 491 */ - "\xe1\xbe\x8d\xe1\xbc\x8d\xce\x99\x00\xe1\xbe\x8d\0" /* offset 504 */ - "\xe1\xbe\x8e\xe1\xbc\x8e\xce\x99\x00\xe1\xbe\x8e\0" /* offset 517 */ - "\xe1\xbe\x8f\xe1\xbc\x8f\xce\x99\x00\xe1\xbe\x8f\0" /* offset 530 */ - "\xe1\xbe\x80\x00\xe1\xbc\x88\xce\x99\0" /* offset 543 */ - "\xe1\xbe\x81\x00\xe1\xbc\x89\xce\x99\0" /* offset 553 */ - "\xe1\xbe\x82\x00\xe1\xbc\x8a\xce\x99\0" /* offset 563 */ - "\xe1\xbe\x83\x00\xe1\xbc\x8b\xce\x99\0" /* offset 573 */ - "\xe1\xbe\x84\x00\xe1\xbc\x8c\xce\x99\0" /* offset 583 */ - "\xe1\xbe\x85\x00\xe1\xbc\x8d\xce\x99\0" /* offset 593 */ - "\xe1\xbe\x86\x00\xe1\xbc\x8e\xce\x99\0" /* offset 603 */ - "\xe1\xbe\x87\x00\xe1\xbc\x8f\xce\x99\0" /* offset 613 */ - "\xe1\xbe\x98\xe1\xbc\xa8\xce\x99\x00\xe1\xbe\x98\0" /* offset 623 */ - "\xe1\xbe\x99\xe1\xbc\xa9\xce\x99\x00\xe1\xbe\x99\0" /* offset 636 */ - "\xe1\xbe\x9a\xe1\xbc\xaa\xce\x99\x00\xe1\xbe\x9a\0" /* offset 649 */ - "\xe1\xbe\x9b\xe1\xbc\xab\xce\x99\x00\xe1\xbe\x9b\0" /* offset 662 */ - "\xe1\xbe\x9c\xe1\xbc\xac\xce\x99\x00\xe1\xbe\x9c\0" /* offset 675 */ - "\xe1\xbe\x9d\xe1\xbc\xad\xce\x99\x00\xe1\xbe\x9d\0" /* offset 688 */ - "\xe1\xbe\x9e\xe1\xbc\xae\xce\x99\x00\xe1\xbe\x9e\0" /* offset 701 */ - "\xe1\xbe\x9f\xe1\xbc\xaf\xce\x99\x00\xe1\xbe\x9f\0" /* offset 714 */ - "\xe1\xbe\x90\x00\xe1\xbc\xa8\xce\x99\0" /* offset 727 */ - "\xe1\xbe\x91\x00\xe1\xbc\xa9\xce\x99\0" /* offset 737 */ - "\xe1\xbe\x92\x00\xe1\xbc\xaa\xce\x99\0" /* offset 747 */ - "\xe1\xbe\x93\x00\xe1\xbc\xab\xce\x99\0" /* offset 757 */ - "\xe1\xbe\x94\x00\xe1\xbc\xac\xce\x99\0" /* offset 767 */ - "\xe1\xbe\x95\x00\xe1\xbc\xad\xce\x99\0" /* offset 777 */ - "\xe1\xbe\x96\x00\xe1\xbc\xae\xce\x99\0" /* offset 787 */ - "\xe1\xbe\x97\x00\xe1\xbc\xaf\xce\x99\0" /* offset 797 */ - "\xe1\xbe\xa8\xe1\xbd\xa8\xce\x99\x00\xe1\xbe\xa8\0" /* offset 807 */ - "\xe1\xbe\xa9\xe1\xbd\xa9\xce\x99\x00\xe1\xbe\xa9\0" /* offset 820 */ - "\xe1\xbe\xaa\xe1\xbd\xaa\xce\x99\x00\xe1\xbe\xaa\0" /* offset 833 */ - "\xe1\xbe\xab\xe1\xbd\xab\xce\x99\x00\xe1\xbe\xab\0" /* offset 846 */ - "\xe1\xbe\xac\xe1\xbd\xac\xce\x99\x00\xe1\xbe\xac\0" /* offset 859 */ - "\xe1\xbe\xad\xe1\xbd\xad\xce\x99\x00\xe1\xbe\xad\0" /* offset 872 */ - "\xe1\xbe\xae\xe1\xbd\xae\xce\x99\x00\xe1\xbe\xae\0" /* offset 885 */ - "\xe1\xbe\xaf\xe1\xbd\xaf\xce\x99\x00\xe1\xbe\xaf\0" /* offset 898 */ - "\xe1\xbe\xa0\x00\xe1\xbd\xa8\xce\x99\0" /* offset 911 */ - "\xe1\xbe\xa1\x00\xe1\xbd\xa9\xce\x99\0" /* offset 921 */ - "\xe1\xbe\xa2\x00\xe1\xbd\xaa\xce\x99\0" /* offset 931 */ - "\xe1\xbe\xa3\x00\xe1\xbd\xab\xce\x99\0" /* offset 941 */ - "\xe1\xbe\xa4\x00\xe1\xbd\xac\xce\x99\0" /* offset 951 */ - "\xe1\xbe\xa5\x00\xe1\xbd\xad\xce\x99\0" /* offset 961 */ - "\xe1\xbe\xa6\x00\xe1\xbd\xae\xce\x99\0" /* offset 971 */ - "\xe1\xbe\xa7\x00\xe1\xbd\xaf\xce\x99\0" /* offset 981 */ - "\xe1\xbe\xbc\xce\x91\xce\x99\x00\xe1\xbe\xbc\0" /* offset 991 */ - "\xe1\xbe\xb3\x00\xce\x91\xce\x99\0" /* offset 1003 */ - "\xe1\xbf\x8c\xce\x97\xce\x99\x00\xe1\xbf\x8c\0" /* offset 1012 */ - "\xe1\xbf\x83\x00\xce\x97\xce\x99\0" /* offset 1024 */ - "\xe1\xbf\xbc\xce\xa9\xce\x99\x00\xe1\xbf\xbc\0" /* offset 1033 */ - "\xe1\xbf\xb3\x00\xce\xa9\xce\x99\0" /* offset 1045 */ - "\x00\xe1\xbe\xba\xce\x99\x00\xe1\xbe\xba\xcd\x85\0" /* offset 1054 */ - "\x00\xce\x86\xce\x99\x00\xce\x86\xcd\x85\0" /* offset 1067 */ - "\x00\xe1\xbf\x8a\xce\x99\x00\xe1\xbf\x8a\xcd\x85\0" /* offset 1078 */ - "\x00\xce\x89\xce\x99\x00\xce\x89\xcd\x85\0" /* offset 1091 */ - "\x00\xe1\xbf\xba\xce\x99\x00\xe1\xbf\xba\xcd\x85\0" /* offset 1102 */ - "\x00\xce\x8f\xce\x99\x00\xce\x8f\xcd\x85\0" /* offset 1115 */ - "\x00\xce\x91\xcd\x82\xce\x99\x00\xce\x91\xcd\x82\xcd\x85\0" /* offset 1126 */ - "\x00\xce\x97\xcd\x82\xce\x99\x00\xce\x97\xcd\x82\xcd\x85\0" /* offset 1141 */ - "\x00\xce\xa9\xcd\x82\xce\x99\x00\xce\xa9\xcd\x82\xcd\x85\0" /* offset 1156 */ -}; - - -/* Table of casefolding cases that can't be derived by lowercasing - */ -static const struct { - guint16 ch; - gchar data[7]; -} casefold_table[] = { - { 0x00b5, "\xce\xbc" }, - { 0x00df, "\x73\x73" }, - { 0x0130, "\x69\xcc\x87" }, - { 0x0149, "\xca\xbc\x6e" }, - { 0x017f, "\x73" }, - { 0x01f0, "\x6a\xcc\x8c" }, - { 0x0345, "\xce\xb9" }, - { 0x0390, "\xce\xb9\xcc\x88\xcc\x81" }, - { 0x03b0, "\xcf\x85\xcc\x88\xcc\x81" }, - { 0x03c2, "\xcf\x83" }, - { 0x03d0, "\xce\xb2" }, - { 0x03d1, "\xce\xb8" }, - { 0x03d5, "\xcf\x86" }, - { 0x03d6, "\xcf\x80" }, - { 0x03f0, "\xce\xba" }, - { 0x03f1, "\xcf\x81" }, - { 0x03f5, "\xce\xb5" }, - { 0x0587, "\xd5\xa5\xd6\x82" }, - { 0x1e96, "\x68\xcc\xb1" }, - { 0x1e97, "\x74\xcc\x88" }, - { 0x1e98, "\x77\xcc\x8a" }, - { 0x1e99, "\x79\xcc\x8a" }, - { 0x1e9a, "\x61\xca\xbe" }, - { 0x1e9b, "\xe1\xb9\xa1" }, - { 0x1f50, "\xcf\x85\xcc\x93" }, - { 0x1f52, "\xcf\x85\xcc\x93\xcc\x80" }, - { 0x1f54, "\xcf\x85\xcc\x93\xcc\x81" }, - { 0x1f56, "\xcf\x85\xcc\x93\xcd\x82" }, - { 0x1f80, "\xe1\xbc\x80\xce\xb9" }, - { 0x1f81, "\xe1\xbc\x81\xce\xb9" }, - { 0x1f82, "\xe1\xbc\x82\xce\xb9" }, - { 0x1f83, "\xe1\xbc\x83\xce\xb9" }, - { 0x1f84, "\xe1\xbc\x84\xce\xb9" }, - { 0x1f85, "\xe1\xbc\x85\xce\xb9" }, - { 0x1f86, "\xe1\xbc\x86\xce\xb9" }, - { 0x1f87, "\xe1\xbc\x87\xce\xb9" }, - { 0x1f88, "\xe1\xbc\x80\xce\xb9" }, - { 0x1f89, "\xe1\xbc\x81\xce\xb9" }, - { 0x1f8a, "\xe1\xbc\x82\xce\xb9" }, - { 0x1f8b, "\xe1\xbc\x83\xce\xb9" }, - { 0x1f8c, "\xe1\xbc\x84\xce\xb9" }, - { 0x1f8d, "\xe1\xbc\x85\xce\xb9" }, - { 0x1f8e, "\xe1\xbc\x86\xce\xb9" }, - { 0x1f8f, "\xe1\xbc\x87\xce\xb9" }, - { 0x1f90, "\xe1\xbc\xa0\xce\xb9" }, - { 0x1f91, "\xe1\xbc\xa1\xce\xb9" }, - { 0x1f92, "\xe1\xbc\xa2\xce\xb9" }, - { 0x1f93, "\xe1\xbc\xa3\xce\xb9" }, - { 0x1f94, "\xe1\xbc\xa4\xce\xb9" }, - { 0x1f95, "\xe1\xbc\xa5\xce\xb9" }, - { 0x1f96, "\xe1\xbc\xa6\xce\xb9" }, - { 0x1f97, "\xe1\xbc\xa7\xce\xb9" }, - { 0x1f98, "\xe1\xbc\xa0\xce\xb9" }, - { 0x1f99, "\xe1\xbc\xa1\xce\xb9" }, - { 0x1f9a, "\xe1\xbc\xa2\xce\xb9" }, - { 0x1f9b, "\xe1\xbc\xa3\xce\xb9" }, - { 0x1f9c, "\xe1\xbc\xa4\xce\xb9" }, - { 0x1f9d, "\xe1\xbc\xa5\xce\xb9" }, - { 0x1f9e, "\xe1\xbc\xa6\xce\xb9" }, - { 0x1f9f, "\xe1\xbc\xa7\xce\xb9" }, - { 0x1fa0, "\xe1\xbd\xa0\xce\xb9" }, - { 0x1fa1, "\xe1\xbd\xa1\xce\xb9" }, - { 0x1fa2, "\xe1\xbd\xa2\xce\xb9" }, - { 0x1fa3, "\xe1\xbd\xa3\xce\xb9" }, - { 0x1fa4, "\xe1\xbd\xa4\xce\xb9" }, - { 0x1fa5, "\xe1\xbd\xa5\xce\xb9" }, - { 0x1fa6, "\xe1\xbd\xa6\xce\xb9" }, - { 0x1fa7, "\xe1\xbd\xa7\xce\xb9" }, - { 0x1fa8, "\xe1\xbd\xa0\xce\xb9" }, - { 0x1fa9, "\xe1\xbd\xa1\xce\xb9" }, - { 0x1faa, "\xe1\xbd\xa2\xce\xb9" }, - { 0x1fab, "\xe1\xbd\xa3\xce\xb9" }, - { 0x1fac, "\xe1\xbd\xa4\xce\xb9" }, - { 0x1fad, "\xe1\xbd\xa5\xce\xb9" }, - { 0x1fae, "\xe1\xbd\xa6\xce\xb9" }, - { 0x1faf, "\xe1\xbd\xa7\xce\xb9" }, - { 0x1fb2, "\xe1\xbd\xb0\xce\xb9" }, - { 0x1fb3, "\xce\xb1\xce\xb9" }, - { 0x1fb4, "\xce\xac\xce\xb9" }, - { 0x1fb6, "\xce\xb1\xcd\x82" }, - { 0x1fb7, "\xce\xb1\xcd\x82\xce\xb9" }, - { 0x1fbc, "\xce\xb1\xce\xb9" }, - { 0x1fbe, "\xce\xb9" }, - { 0x1fc2, "\xe1\xbd\xb4\xce\xb9" }, - { 0x1fc3, "\xce\xb7\xce\xb9" }, - { 0x1fc4, "\xce\xae\xce\xb9" }, - { 0x1fc6, "\xce\xb7\xcd\x82" }, - { 0x1fc7, "\xce\xb7\xcd\x82\xce\xb9" }, - { 0x1fcc, "\xce\xb7\xce\xb9" }, - { 0x1fd2, "\xce\xb9\xcc\x88\xcc\x80" }, - { 0x1fd3, "\xce\xb9\xcc\x88\xcc\x81" }, - { 0x1fd6, "\xce\xb9\xcd\x82" }, - { 0x1fd7, "\xce\xb9\xcc\x88\xcd\x82" }, - { 0x1fe2, "\xcf\x85\xcc\x88\xcc\x80" }, - { 0x1fe3, "\xcf\x85\xcc\x88\xcc\x81" }, - { 0x1fe4, "\xcf\x81\xcc\x93" }, - { 0x1fe6, "\xcf\x85\xcd\x82" }, - { 0x1fe7, "\xcf\x85\xcc\x88\xcd\x82" }, - { 0x1ff2, "\xe1\xbd\xbc\xce\xb9" }, - { 0x1ff3, "\xcf\x89\xce\xb9" }, - { 0x1ff4, "\xcf\x8e\xce\xb9" }, - { 0x1ff6, "\xcf\x89\xcd\x82" }, - { 0x1ff7, "\xcf\x89\xcd\x82\xce\xb9" }, - { 0x1ffc, "\xcf\x89\xce\xb9" }, - { 0x2160, "\xe2\x85\xb0" }, - { 0x2161, "\xe2\x85\xb1" }, - { 0x2162, "\xe2\x85\xb2" }, - { 0x2163, "\xe2\x85\xb3" }, - { 0x2164, "\xe2\x85\xb4" }, - { 0x2165, "\xe2\x85\xb5" }, - { 0x2166, "\xe2\x85\xb6" }, - { 0x2167, "\xe2\x85\xb7" }, - { 0x2168, "\xe2\x85\xb8" }, - { 0x2169, "\xe2\x85\xb9" }, - { 0x216a, "\xe2\x85\xba" }, - { 0x216b, "\xe2\x85\xbb" }, - { 0x216c, "\xe2\x85\xbc" }, - { 0x216d, "\xe2\x85\xbd" }, - { 0x216e, "\xe2\x85\xbe" }, - { 0x216f, "\xe2\x85\xbf" }, - { 0x24b6, "\xe2\x93\x90" }, - { 0x24b7, "\xe2\x93\x91" }, - { 0x24b8, "\xe2\x93\x92" }, - { 0x24b9, "\xe2\x93\x93" }, - { 0x24ba, "\xe2\x93\x94" }, - { 0x24bb, "\xe2\x93\x95" }, - { 0x24bc, "\xe2\x93\x96" }, - { 0x24bd, "\xe2\x93\x97" }, - { 0x24be, "\xe2\x93\x98" }, - { 0x24bf, "\xe2\x93\x99" }, - { 0x24c0, "\xe2\x93\x9a" }, - { 0x24c1, "\xe2\x93\x9b" }, - { 0x24c2, "\xe2\x93\x9c" }, - { 0x24c3, "\xe2\x93\x9d" }, - { 0x24c4, "\xe2\x93\x9e" }, - { 0x24c5, "\xe2\x93\x9f" }, - { 0x24c6, "\xe2\x93\xa0" }, - { 0x24c7, "\xe2\x93\xa1" }, - { 0x24c8, "\xe2\x93\xa2" }, - { 0x24c9, "\xe2\x93\xa3" }, - { 0x24ca, "\xe2\x93\xa4" }, - { 0x24cb, "\xe2\x93\xa5" }, - { 0x24cc, "\xe2\x93\xa6" }, - { 0x24cd, "\xe2\x93\xa7" }, - { 0x24ce, "\xe2\x93\xa8" }, - { 0x24cf, "\xe2\x93\xa9" }, - { 0xfb00, "\x66\x66" }, - { 0xfb01, "\x66\x69" }, - { 0xfb02, "\x66\x6c" }, - { 0xfb03, "\x66\x66\x69" }, - { 0xfb04, "\x66\x66\x6c" }, - { 0xfb05, "\x73\x74" }, - { 0xfb06, "\x73\x74" }, - { 0xfb13, "\xd5\xb4\xd5\xb6" }, - { 0xfb14, "\xd5\xb4\xd5\xa5" }, - { 0xfb15, "\xd5\xb4\xd5\xab" }, - { 0xfb16, "\xd5\xbe\xd5\xb6" }, - { 0xfb17, "\xd5\xb4\xd5\xad" }, -}; - -static const struct { - gunichar ch; - gunichar mirrored_ch; -} bidi_mirroring_table[] = -{ - { 0x0028, 0x0029 }, - { 0x0029, 0x0028 }, - { 0x003c, 0x003e }, - { 0x003e, 0x003c }, - { 0x005b, 0x005d }, - { 0x005d, 0x005b }, - { 0x007b, 0x007d }, - { 0x007d, 0x007b }, - { 0x00ab, 0x00bb }, - { 0x00bb, 0x00ab }, - { 0x2039, 0x203a }, - { 0x203a, 0x2039 }, - { 0x2045, 0x2046 }, - { 0x2046, 0x2045 }, - { 0x207d, 0x207e }, - { 0x207e, 0x207d }, - { 0x208d, 0x208e }, - { 0x208e, 0x208d }, - { 0x2208, 0x220b }, - { 0x2209, 0x220c }, - { 0x220a, 0x220d }, - { 0x220b, 0x2208 }, - { 0x220c, 0x2209 }, - { 0x220d, 0x220a }, - { 0x2215, 0x29f5 }, - { 0x223c, 0x223d }, - { 0x223d, 0x223c }, - { 0x2243, 0x22cd }, - { 0x2252, 0x2253 }, - { 0x2253, 0x2252 }, - { 0x2254, 0x2255 }, - { 0x2255, 0x2254 }, - { 0x2264, 0x2265 }, - { 0x2265, 0x2264 }, - { 0x2266, 0x2267 }, - { 0x2267, 0x2266 }, - { 0x2268, 0x2269 }, - { 0x2269, 0x2268 }, - { 0x226a, 0x226b }, - { 0x226b, 0x226a }, - { 0x226e, 0x226f }, - { 0x226f, 0x226e }, - { 0x2270, 0x2271 }, - { 0x2271, 0x2270 }, - { 0x2272, 0x2273 }, - { 0x2273, 0x2272 }, - { 0x2274, 0x2275 }, - { 0x2275, 0x2274 }, - { 0x2276, 0x2277 }, - { 0x2277, 0x2276 }, - { 0x2278, 0x2279 }, - { 0x2279, 0x2278 }, - { 0x227a, 0x227b }, - { 0x227b, 0x227a }, - { 0x227c, 0x227d }, - { 0x227d, 0x227c }, - { 0x227e, 0x227f }, - { 0x227f, 0x227e }, - { 0x2280, 0x2281 }, - { 0x2281, 0x2280 }, - { 0x2282, 0x2283 }, - { 0x2283, 0x2282 }, - { 0x2284, 0x2285 }, - { 0x2285, 0x2284 }, - { 0x2286, 0x2287 }, - { 0x2287, 0x2286 }, - { 0x2288, 0x2289 }, - { 0x2289, 0x2288 }, - { 0x228a, 0x228b }, - { 0x228b, 0x228a }, - { 0x228f, 0x2290 }, - { 0x2290, 0x228f }, - { 0x2291, 0x2292 }, - { 0x2292, 0x2291 }, - { 0x2298, 0x29b8 }, - { 0x22a2, 0x22a3 }, - { 0x22a3, 0x22a2 }, - { 0x22a6, 0x2ade }, - { 0x22a8, 0x2ae4 }, - { 0x22a9, 0x2ae3 }, - { 0x22ab, 0x2ae5 }, - { 0x22b0, 0x22b1 }, - { 0x22b1, 0x22b0 }, - { 0x22b2, 0x22b3 }, - { 0x22b3, 0x22b2 }, - { 0x22b4, 0x22b5 }, - { 0x22b5, 0x22b4 }, - { 0x22b6, 0x22b7 }, - { 0x22b7, 0x22b6 }, - { 0x22c9, 0x22ca }, - { 0x22ca, 0x22c9 }, - { 0x22cb, 0x22cc }, - { 0x22cc, 0x22cb }, - { 0x22cd, 0x2243 }, - { 0x22d0, 0x22d1 }, - { 0x22d1, 0x22d0 }, - { 0x22d6, 0x22d7 }, - { 0x22d7, 0x22d6 }, - { 0x22d8, 0x22d9 }, - { 0x22d9, 0x22d8 }, - { 0x22da, 0x22db }, - { 0x22db, 0x22da }, - { 0x22dc, 0x22dd }, - { 0x22dd, 0x22dc }, - { 0x22de, 0x22df }, - { 0x22df, 0x22de }, - { 0x22e0, 0x22e1 }, - { 0x22e1, 0x22e0 }, - { 0x22e2, 0x22e3 }, - { 0x22e3, 0x22e2 }, - { 0x22e4, 0x22e5 }, - { 0x22e5, 0x22e4 }, - { 0x22e6, 0x22e7 }, - { 0x22e7, 0x22e6 }, - { 0x22e8, 0x22e9 }, - { 0x22e9, 0x22e8 }, - { 0x22ea, 0x22eb }, - { 0x22eb, 0x22ea }, - { 0x22ec, 0x22ed }, - { 0x22ed, 0x22ec }, - { 0x22f0, 0x22f1 }, - { 0x22f1, 0x22f0 }, - { 0x22f2, 0x22fa }, - { 0x22f3, 0x22fb }, - { 0x22f4, 0x22fc }, - { 0x22f6, 0x22fd }, - { 0x22f7, 0x22fe }, - { 0x22fa, 0x22f2 }, - { 0x22fb, 0x22f3 }, - { 0x22fc, 0x22f4 }, - { 0x22fd, 0x22f6 }, - { 0x22fe, 0x22f7 }, - { 0x2308, 0x2309 }, - { 0x2309, 0x2308 }, - { 0x230a, 0x230b }, - { 0x230b, 0x230a }, - { 0x2329, 0x232a }, - { 0x232a, 0x2329 }, - { 0x2768, 0x2769 }, - { 0x2769, 0x2768 }, - { 0x276a, 0x276b }, - { 0x276b, 0x276a }, - { 0x276c, 0x276d }, - { 0x276d, 0x276c }, - { 0x276e, 0x276f }, - { 0x276f, 0x276e }, - { 0x2770, 0x2771 }, - { 0x2771, 0x2770 }, - { 0x2772, 0x2773 }, - { 0x2773, 0x2772 }, - { 0x2774, 0x2775 }, - { 0x2775, 0x2774 }, - { 0x27d5, 0x27d6 }, - { 0x27d6, 0x27d5 }, - { 0x27dd, 0x27de }, - { 0x27de, 0x27dd }, - { 0x27e2, 0x27e3 }, - { 0x27e3, 0x27e2 }, - { 0x27e4, 0x27e5 }, - { 0x27e5, 0x27e4 }, - { 0x27e6, 0x27e7 }, - { 0x27e7, 0x27e6 }, - { 0x27e8, 0x27e9 }, - { 0x27e9, 0x27e8 }, - { 0x27ea, 0x27eb }, - { 0x27eb, 0x27ea }, - { 0x2983, 0x2984 }, - { 0x2984, 0x2983 }, - { 0x2985, 0x2986 }, - { 0x2986, 0x2985 }, - { 0x2987, 0x2988 }, - { 0x2988, 0x2987 }, - { 0x2989, 0x298a }, - { 0x298a, 0x2989 }, - { 0x298b, 0x298c }, - { 0x298c, 0x298b }, - { 0x298d, 0x2990 }, - { 0x298e, 0x298f }, - { 0x298f, 0x298e }, - { 0x2990, 0x298d }, - { 0x2991, 0x2992 }, - { 0x2992, 0x2991 }, - { 0x2993, 0x2994 }, - { 0x2994, 0x2993 }, - { 0x2995, 0x2996 }, - { 0x2996, 0x2995 }, - { 0x2997, 0x2998 }, - { 0x2998, 0x2997 }, - { 0x29b8, 0x2298 }, - { 0x29c0, 0x29c1 }, - { 0x29c1, 0x29c0 }, - { 0x29c4, 0x29c5 }, - { 0x29c5, 0x29c4 }, - { 0x29cf, 0x29d0 }, - { 0x29d0, 0x29cf }, - { 0x29d1, 0x29d2 }, - { 0x29d2, 0x29d1 }, - { 0x29d4, 0x29d5 }, - { 0x29d5, 0x29d4 }, - { 0x29d8, 0x29d9 }, - { 0x29d9, 0x29d8 }, - { 0x29da, 0x29db }, - { 0x29db, 0x29da }, - { 0x29f5, 0x2215 }, - { 0x29f8, 0x29f9 }, - { 0x29f9, 0x29f8 }, - { 0x29fc, 0x29fd }, - { 0x29fd, 0x29fc }, - { 0x2a2b, 0x2a2c }, - { 0x2a2c, 0x2a2b }, - { 0x2a2d, 0x2a2c }, - { 0x2a2e, 0x2a2d }, - { 0x2a34, 0x2a35 }, - { 0x2a35, 0x2a34 }, - { 0x2a3c, 0x2a3d }, - { 0x2a3d, 0x2a3c }, - { 0x2a64, 0x2a65 }, - { 0x2a65, 0x2a64 }, - { 0x2a79, 0x2a7a }, - { 0x2a7a, 0x2a79 }, - { 0x2a7d, 0x2a7e }, - { 0x2a7e, 0x2a7d }, - { 0x2a7f, 0x2a80 }, - { 0x2a80, 0x2a7f }, - { 0x2a81, 0x2a82 }, - { 0x2a82, 0x2a81 }, - { 0x2a83, 0x2a84 }, - { 0x2a84, 0x2a83 }, - { 0x2a8b, 0x2a8c }, - { 0x2a8c, 0x2a8b }, - { 0x2a91, 0x2a92 }, - { 0x2a92, 0x2a91 }, - { 0x2a93, 0x2a94 }, - { 0x2a94, 0x2a93 }, - { 0x2a95, 0x2a96 }, - { 0x2a96, 0x2a95 }, - { 0x2a97, 0x2a98 }, - { 0x2a98, 0x2a97 }, - { 0x2a99, 0x2a9a }, - { 0x2a9a, 0x2a99 }, - { 0x2a9b, 0x2a9c }, - { 0x2a9c, 0x2a9b }, - { 0x2aa1, 0x2aa2 }, - { 0x2aa2, 0x2aa1 }, - { 0x2aa6, 0x2aa7 }, - { 0x2aa7, 0x2aa6 }, - { 0x2aa8, 0x2aa9 }, - { 0x2aa9, 0x2aa8 }, - { 0x2aaa, 0x2aab }, - { 0x2aab, 0x2aaa }, - { 0x2aac, 0x2aad }, - { 0x2aad, 0x2aac }, - { 0x2aaf, 0x2ab0 }, - { 0x2ab0, 0x2aaf }, - { 0x2ab3, 0x2ab4 }, - { 0x2ab4, 0x2ab3 }, - { 0x2abb, 0x2abc }, - { 0x2abc, 0x2abb }, - { 0x2abd, 0x2abe }, - { 0x2abe, 0x2abd }, - { 0x2abf, 0x2ac0 }, - { 0x2ac0, 0x2abf }, - { 0x2ac1, 0x2ac2 }, - { 0x2ac2, 0x2ac1 }, - { 0x2ac3, 0x2ac4 }, - { 0x2ac4, 0x2ac3 }, - { 0x2ac5, 0x2ac6 }, - { 0x2ac6, 0x2ac5 }, - { 0x2acd, 0x2ace }, - { 0x2ace, 0x2acd }, - { 0x2acf, 0x2ad0 }, - { 0x2ad0, 0x2acf }, - { 0x2ad1, 0x2ad2 }, - { 0x2ad2, 0x2ad1 }, - { 0x2ad3, 0x2ad4 }, - { 0x2ad4, 0x2ad3 }, - { 0x2ad5, 0x2ad6 }, - { 0x2ad6, 0x2ad5 }, - { 0x2ade, 0x22a6 }, - { 0x2ae3, 0x22a9 }, - { 0x2ae4, 0x22a8 }, - { 0x2ae5, 0x22ab }, - { 0x2aec, 0x2aed }, - { 0x2aed, 0x2aec }, - { 0x2af7, 0x2af8 }, - { 0x2af8, 0x2af7 }, - { 0x2af9, 0x2afa }, - { 0x2afa, 0x2af9 }, - { 0x3008, 0x3009 }, - { 0x3009, 0x3008 }, - { 0x300a, 0x300b }, - { 0x300b, 0x300a }, - { 0x300c, 0x300d }, - { 0x300d, 0x300c }, - { 0x300e, 0x300f }, - { 0x300f, 0x300e }, - { 0x3010, 0x3011 }, - { 0x3011, 0x3010 }, - { 0x3014, 0x3015 }, - { 0x3015, 0x3014 }, - { 0x3016, 0x3017 }, - { 0x3017, 0x3016 }, - { 0x3018, 0x3019 }, - { 0x3019, 0x3018 }, - { 0x301a, 0x301b }, - { 0x301b, 0x301a }, - { 0xff08, 0xff09 }, - { 0xff09, 0xff08 }, - { 0xff1c, 0xff1e }, - { 0xff1e, 0xff1c }, - { 0xff3b, 0xff3d }, - { 0xff3d, 0xff3b }, - { 0xff5b, 0xff5d }, - { 0xff5d, 0xff5b }, - { 0xff5f, 0xff60 }, - { 0xff60, 0xff5f }, - { 0xff62, 0xff63 }, - { 0xff63, 0xff62 } -}; - -#endif /* CHARTABLES_H */ diff -Nru clucene-core-0.9.21b/src/CLucene/config/Makefile.am clucene-core-2.3.3.4/src/CLucene/config/Makefile.am --- clucene-core-0.9.21b/src/CLucene/config/Makefile.am 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -configdir = $(lsrcdir)/config -confighdir = $(includedir)/CLucene/config - -libclucene_la_SOURCES += $(configdir)/gunichartables.cpp -libclucene_la_SOURCES += $(configdir)/repl_lltot.cpp -libclucene_la_SOURCES += $(configdir)/repl_tcscasecmp.cpp -libclucene_la_SOURCES += $(configdir)/repl_tcslwr.cpp -libclucene_la_SOURCES += $(configdir)/repl_tcstod.cpp -libclucene_la_SOURCES += $(configdir)/repl_tcstoll.cpp -libclucene_la_SOURCES += $(configdir)/repl_tprintf.cpp -libclucene_la_SOURCES += $(configdir)/threads.cpp -libclucene_la_SOURCES += $(configdir)/utf8.cpp - -configh_HEADERS = $(configdir)/*.h diff -Nru clucene-core-0.9.21b/src/CLucene/config/PlatformMac.h clucene-core-2.3.3.4/src/CLucene/config/PlatformMac.h --- clucene-core-0.9.21b/src/CLucene/config/PlatformMac.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/PlatformMac.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -// It is internal CLucene header - DO NOT include it directly - -# define PATH_DELIMITER _T("/") -# define PATH_DELIMITERA "/" -# define PATH_DELIMITERC '/' - -# if (__GNUC__ < 3) && !defined( __APPLE_CC__) -// GCC strange "ignore std" mode works better if you pretend everything -// is in the std namespace, for the most part. -# define LUCENE_NO_STDC_NAMESPACE -# endif - -#undef _T //apple has something else strange here... diff -Nru clucene-core-0.9.21b/src/CLucene/config/PlatformUnix.h clucene-core-2.3.3.4/src/CLucene/config/PlatformUnix.h --- clucene-core-0.9.21b/src/CLucene/config/PlatformUnix.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/PlatformUnix.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -// It is internal CLucene header - DO NOT include it directly - -# define PATH_DELIMITER _T("/") -# define PATH_DELIMITERA "/" -# define PATH_DELIMITERC '/' - diff -Nru clucene-core-0.9.21b/src/CLucene/config/PlatformWin32.h clucene-core-2.3.3.4/src/CLucene/config/PlatformWin32.h --- clucene-core-0.9.21b/src/CLucene/config/PlatformWin32.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/PlatformWin32.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -// It is internal CLucene header - DO NOT include it directly - -# define PATH_DELIMITER _T("\\") -# define PATH_DELIMITERA "\\" -# define PATH_DELIMITERC '\\' diff -Nru clucene-core-0.9.21b/src/CLucene/config/repl_lltot.cpp clucene-core-2.3.3.4/src/CLucene/config/repl_lltot.cpp --- clucene-core-0.9.21b/src/CLucene/config/repl_lltot.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/repl_lltot.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -TCHAR* lucene_i64tot( - int64_t value, /* [I] Value to be converted */ - TCHAR* str, /* [O] Destination for the converted value */ - int radix) /* [I] Number base for conversion */ -{ - uint64_t val; - int negative; - TCHAR buffer[65]; - TCHAR* pos; - int digit; - - if (value < 0 && radix == 10) { - negative = 1; - val = -value; - } else { - negative = 0; - val = value; - } /* if */ - - pos = &buffer[64]; - *pos = '\0'; - - do { - digit = val % radix; - val = val / radix; - if (digit < 10) { - *--pos = '0' + digit; - } else { - *--pos = 'a' + digit - 10; - } /* if */ - } while (val != 0L); - - if (negative) { - *--pos = '-'; - } /* if */ - - _tcsncpy(str,pos,&buffer[64] - pos + 1); //needed for unicode to work - return str; -} diff -Nru clucene-core-0.9.21b/src/CLucene/config/repl_tchar.h clucene-core-2.3.3.4/src/CLucene/config/repl_tchar.h --- clucene-core-0.9.21b/src/CLucene/config/repl_tchar.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/repl_tchar.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _CL_HAVE_TCHAR_H -#if defined(_UCS2) - #define TCHAR wchar_t - - //note: descriptions with * in front have replacement functions - - //formatting functions - #define _sntprintf swprintf //* make a formatted a string - #define _tprintf wprintf //* print a formatted string - - //this one has no replacement functions yet, but it is only used in the tests - #define _vsntprintf vsnwprintf //* print a formatted string using variable arguments - - //we are using the internal functions of the compiler here - //if LUCENE_USE_INTERNAL_CHAR_FUNCTIONS is defined, thesse - //will be replaced by internal functions - #define _istalnum iswalnum //* alpha/numeric char check - #define _istalpha iswalpha //* alpha char check - #define _istspace iswspace //* space char check - #define _istdigit iswdigit //* digit char check - #define _totlower towlower //* convert char to lower case - #define _totupper towupper //* convert char to lower case - #define _tcslwr wcslwr //* convert string to lower case - - //these are the string handling functions - //we may need to create wide-character/multi-byte replacements for these - #define _tcscpy wcscpy //copy a string to another string - #define _tcsncpy wcsncpy //copy a specified amount of one string to another string. - #define _tcscat wcscat //copy a string onto the end of the other string - #define _tcschr wcschr //find location of one character - #define _tcsstr wcsstr //find location of a string - #define _tcslen wcslen //get length of a string - #define _tcscmp wcscmp //case sensitive compare two strings - #define _tcsncmp wcsncmp //case sensitive compare two strings - #define _tcscspn wcscspn //location of any of a set of character in a string - - #ifdef _CL_HAVE_WCSICMP - #define _tcsicmp wcsicmp //* case insensitive compare two string - #else - #define _tcsicmp wcscasecmp //* case insensitive compare two string - #endif - - //conversion functions - #define _tcstod wcstod //convert a string to a double - #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer - #define _i64tot lltow //* converts a 64 bit integer to a string (with base) - -#else //if defined(_ASCII) - #define TCHAR char - - //formatting functions - #define _sntprintf snprintf - #define _tprintf printf - #define _vsntprintf vsnprintf - - //we are using the internal functions of the compiler here - //if LUCENE_USE_INTERNAL_CHAR_FUNCTIONS is defined, thesse - //will be replaced by internal functions - #define _istalnum isalnum - #define _istalpha isalpha - #define _istspace isspace - #define _istdigit isdigit - #define _totlower tolower - #define _totupper toupper - #define _tcslwr strlwr - - //these are the string handling functions - #define _tcscpy strcpy - #define _tcsncpy strncpy - #define _tcscat strcat - #define _tcschr strchr - #define _tcsstr strstr - #define _tcslen strlen - #define _tcscmp strcmp - #define _tcsncmp strncmp - #define _tcsicmp strcasecmp - #define _tcscspn strcspn - - //converstion methods - #define _tcstod strtod - #define _tcstoi64 strtoll - #define _i64tot lltoa -#endif -#else //HAVE_TCHAR_H - #include - - //some tchar headers miss these... - #ifndef _tcstoi64 - #if defined(_UCS2) - #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer - #else - #define _tcstoi64 strtoll - #endif - #endif - -#endif //HAVE_TCHAR_H diff -Nru clucene-core-0.9.21b/src/CLucene/config/repl_tcscasecmp.cpp clucene-core-2.3.3.4/src/CLucene/config/repl_tcscasecmp.cpp --- clucene-core-0.9.21b/src/CLucene/config/repl_tcscasecmp.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/repl_tcscasecmp.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" - -int lucene_tcscasecmp(const TCHAR * sa, const TCHAR * sb){ - TCHAR ca,cb; - if (sa == sb) - return 0; - - do{ - ca = _totlower( (*(sa++)) ); - cb = _totlower( (*(sb++)) ); - } while ( ca != L'\0' && (ca == cb) ); - - return (int)(ca - cb); -} diff -Nru clucene-core-0.9.21b/src/CLucene/config/repl_tcslwr.cpp clucene-core-2.3.3.4/src/CLucene/config/repl_tcslwr.cpp --- clucene-core-0.9.21b/src/CLucene/config/repl_tcslwr.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/repl_tcslwr.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" - -TCHAR* lucene_tcslwr( TCHAR* str ) -{ - TCHAR* ret = str; - for ( ; *str; str++) *str = _totlower(*str); - return ret; -} diff -Nru clucene-core-0.9.21b/src/CLucene/config/repl_tcstod.cpp clucene-core-2.3.3.4/src/CLucene/config/repl_tcstod.cpp --- clucene-core-0.9.21b/src/CLucene/config/repl_tcstod.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/repl_tcstod.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" - -#ifndef _ASCII -double lucene_tcstod(const TCHAR *value, TCHAR **end){ - int32_t len = _tcslen(value)+1; - char* avalue=_CL_NEWARRAY(char,len); - char* aend=NULL; - STRCPY_TtoA(avalue,value,len); - - double ret = strtod(avalue,&aend); - *end=(TCHAR*)value+(aend-avalue); - _CLDELETE_CaARRAY(avalue); - - return ret; -} -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/config/repl_tcstoll.cpp clucene-core-2.3.3.4/src/CLucene/config/repl_tcstoll.cpp --- clucene-core-0.9.21b/src/CLucene/config/repl_tcstoll.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/repl_tcstoll.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" - -int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix){ - #define LUCENE_TCSTOI64_RADIX(x,r) ((x>=_T('0') && x<=_T('9'))?x-_T('0'):((x>=_T('a') && x<=_T('z'))?x-_T('a')+10:((x>=_T('A') && x<=_T('Z'))?x-_T('A')+10:1000))) - - if (radix < 2 || radix > 36) - return 0; - - /* Skip white space. */ - while (_istspace (*str)) - ++str; - - int sign=1; - if ( str[0] == _T('+') ) - str++; - else if ( str[0] == _T('-') ){ - sign = -1; - str++; - } - - *end=(TCHAR*)str; - long r = -1; - while ( (r=LUCENE_TCSTOI64_RADIX(*end[0],radix)) >=0 && r=str;p-- ){ - int i=LUCENE_TCSTOI64_RADIX(p[0],radix); - if ( pos == 0 ) - ret=i; - else - ret += (int64_t)pow((float_t)radix,(float_t)pos) * i; //todo: might be quicker with a different pow overload - - pos++; - } - return sign*ret; -} diff -Nru clucene-core-0.9.21b/src/CLucene/config/repl_tprintf.cpp clucene-core-2.3.3.4/src/CLucene/config/repl_tprintf.cpp --- clucene-core-0.9.21b/src/CLucene/config/repl_tprintf.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/repl_tprintf.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,149 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/util/StringBuffer.h" - -#ifdef __CL_INCLUDE_TPRINTF - -CL_NS_USE(util) - -//print a variable argument to a stream -//currently special number formatting is not supported. it is very minimalistic -void lucene_vfnwprintf(StringBuffer* buffer, size_t count, const wchar_t * format, va_list& valist){ - const wchar_t *iter = format; - StringBuffer* tmp = NULL; - if ( buffer == NULL ) - tmp = _CLNEW StringBuffer; - else - tmp = buffer; - - while (*iter) - { - while (*iter && *iter != '%') - { - tmp->appendChar(*iter++); - } - if (*iter == '%') - { - if (iter[1] == '%') - { - //just print a % - tmp->appendChar('%'); - iter += 2; - continue; - } - - iter++; - switch (*iter) - { - case 's': - { - //todo: this is faulty. it doesn't heed count - - //print a string or null - TCHAR *wstr = va_arg(valist, TCHAR *); - if ( !wstr ) - wstr = _T("(null)"); - - tmp->append(wstr); - iter++; - break; - } - - case 'c': - tmp->appendChar((TCHAR)va_arg(valist, int)); - iter++; - break; - - default: - { - //todo: this is faulty. it doesn't heed count - - if (*iter == 'p') - tmp->appendInt((int32_t)va_arg(valist, long)); - else - { - if (*iter == 'a' || *iter == 'A' || - *iter == 'e' || *iter == 'E' || - *iter == 'f' || *iter == 'F' || - *iter == 'g' || *iter == 'G') - tmp->appendFloat((float_t)va_arg(valist, double),8); - else if (*iter == 'd' || *iter == 'i' ){ - tmp->appendInt((int32_t)va_arg(valist, int)); - }else if (*iter == 'l' ){ - TCHAR b[100]; - _i64tot((int64_t)va_arg(valist, int64_t),b,10); - tmp->append(b); - }/*else{ - TCHAR b[100]; - _i64tot((int64_t)va_arg(valist, void*),b,10); - tmp->append(b); - }*/ - } - iter++; - break; - } - } - } - } - - - if ( buffer == NULL ){ - //we are supposed to be writing to the console -#ifdef _UCS2 - TCHAR* pointer = tmp->getBuffer(); - char ob[MB_LEN_MAX]; - size_t v; - size_t len = tmp->length(); - for (size_t i=0;i 0 ){ - ob[v]='\0'; - fputs(ob,stdout); - } - pointer++; - } - - -#else - fputs(tmp->getBuffer(),stdout); -#endif - _CLDELETE(tmp); - } -} - -//print a list of arguments to a string -int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...){ - va_list ap; - va_start(ap, format); - StringBuffer buffer; - lucene_vfnwprintf(&buffer,count,format,ap); - va_end(ap); - - size_t ret = min(count,(size_t)(buffer.length()+1)); - _tcsncpy(strbuf,buffer.getBuffer(),ret); - return ret; -} - -//print a list of arguments to the stdout -void lucene_wprintf(const wchar_t * format, ...){ - va_list ap; - va_start(ap, format); - lucene_vfnwprintf(NULL,LUCENE_INT32_MAX_SHOULDBE,format,ap); - va_end(ap); -} - -//print a variable argument to a string -int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap){ - StringBuffer buffer; - lucene_vfnwprintf(&buffer,count,format,ap); - int ret = min((int32_t)count,buffer.length()+1); - _tcsncpy(strbuf,buffer.getBuffer(),ret); - return ret; -} - -#endif //__CL_INCLUDE_TPRINTF diff -Nru clucene-core-0.9.21b/src/CLucene/config/repl_wchar.h clucene-core-2.3.3.4/src/CLucene/config/repl_wchar.h --- clucene-core-0.9.21b/src/CLucene/config/repl_wchar.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/repl_wchar.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_repl_wchar_h -#define _lucene_repl_wchar_h - -#ifdef _UCS2 - -#ifndef _CL_HAVE_WCSCPY - //copy a string to another string - #error wcscpy is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSNCPY - //copy a specified amount of one string to another string. - #error wcsncpy is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSCAT - //copy a string onto the end of the other string - #error wcscat is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSCHR - //find location of one character - #error wcschr is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSSTR - //find location of a string - #error wcspy is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSLEN - //get length of a string - #error wcslen is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSCMP - //case sensitive compare two strings - #error wcscmp is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSNCMP - //case sensitive compare two strings of a specified length - #error wcsncmp is not defined, and a licensed replacement has not been written yet -#endif - -#ifndef _CL_HAVE_WCSCSPN - //Return the length of the maximum initial segment - //of WCS which contains only wide-characters not in REJECT. - #error wcscspn is not defined, and a licensed replacement has not been written yet -#endif - -#endif //_UCS2 - -//string function replacements -#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_WCSCASECMP)) || (defined(_ASCII) && !defined(_CL_HAVE_STRCASECMP)) - int lucene_tcscasecmp(const TCHAR *, const TCHAR *); - #undef _tcsicmp - #define _tcsicmp lucene_tcscasecmp -#endif -#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_WCSLWR)) || (defined(_ASCII) && !defined(_CL_HAVE_STRLWR)) - TCHAR* lucene_tcslwr( TCHAR* str ); - #undef _tcslwr - #define _tcslwr lucene_tcslwr -#endif - -//conversion functions -#if (defined(_ASCII) && !defined(_CL_HAVE_LLTOA)) || (defined(_UCS2) && !defined(_CL_HAVE_LLTOW)) - TCHAR* lucene_i64tot( int64_t value, TCHAR* str, int radix); - #undef _i64tot - #define _i64tot lucene_i64tot -#endif -#if (defined(_UCS2) && !defined(_CL_HAVE_WCSTOLL)) || (defined(_ASCII) && !defined(_CL_HAVE_STRTOLL)) - int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix); - #undef _tcstoi64 - #define _tcstoi64 lucene_tcstoi64 -#endif -#if defined(_UCS2) && !defined(_CL_HAVE_WCSTOD) - double lucene_tcstod(const TCHAR *value, TCHAR **end); - #undef _tcstod - #define _tcstod lucene_tcstod -#endif - -//printf functions -#if defined(_UCS2) && (!defined(_CL_HAVE_SNWPRINTF) || defined(_CL_HAVE_SWPRINTF_BUG) ) - #undef _sntprintf - #define _sntprintf lucene_snwprintf - int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...); - - #ifndef __CL_INCLUDE_TPRINTF - #define __CL_INCLUDE_TPRINTF - #endif -#endif -#if defined(_UCS2) && !defined(_CL_HAVE_WPRINTF) - #undef _tprintf - #define _tprintf lucene_wprintf - void lucene_wprintf(const wchar_t * format, ...); - - #ifndef __CL_INCLUDE_TPRINTF - #define __CL_INCLUDE_TPRINTF - #endif -#endif -#if defined(_UCS2) && (!defined(_CL_HAVE_VSNWPRINTF) || defined(_CL_HAVE_SWPRINTF_BUG) ) - #undef _vsntprintf - #define _vsntprintf lucene_vsnwprintf - int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap); - - #ifndef __CL_INCLUDE_TPRINTF - #define __CL_INCLUDE_TPRINTF - #endif -#endif - -//todo: if _CL_HAVE_SNPRINTF_BUG fails(snprintf overflow),we should use our own -//function. but we don't have it currently, and our functions are dubious anyway... - -#endif //end of _lucene_repl_wchar_h diff -Nru clucene-core-0.9.21b/src/CLucene/config/threadCSection.h clucene-core-2.3.3.4/src/CLucene/config/threadCSection.h --- clucene-core-0.9.21b/src/CLucene/config/threadCSection.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/threadCSection.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -//NOTE: do not include this file directly, it is included from lucene internally. - -#ifndef lucene_config_threadCSection_h -#define lucene_config_threadCSection_h -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(util) - - #if !defined(LUCENE_USE_WINDOWS_H) && !defined(_WINDOWS_) && !defined(__MINGW32__) - //we have not explicity included windows.h and windows.h has - //not been included (check _WINDOWS_), then we must define - //our own definitions to the thread locking functions: - struct CRITICAL_SECTION - { - struct critical_section_debug * DebugInfo; - long LockCount; - long RecursionCount; - void * OwningThread; - void * LockSemaphore; - #if defined(_WIN64) - unsigned __int64 SpinCount; - #else - unsigned long SpinCount; - #endif - }; - #endif - - ///a windows implementation of the lock mutex - ///todo: boost has a InterlockedExchange way of locking too. More backwards compatible/faster??? - class mutex_win32 - { - private: - CRITICAL_SECTION mtx; - public: - mutex_win32(const mutex_win32& clone); - mutex_win32(); - ~mutex_win32(); - void lock(); - void unlock(); - }; - - class CLuceneThreadIdCompare - { - public: - - enum - { // parameters for hash table - bucket_size = 4, // 0 < bucket_size - min_buckets = 8 - }; // min_buckets = 2 ^^ N, 0 < N - - bool operator()( DWORD t1, DWORD t2 ) const{ - return t1 < t2; - } - }; - - #define _LUCENE_SLEEP(x) Sleep(x) - #define _LUCENE_THREADMUTEX CL_NS(util)::mutex_win32 - #define _LUCENE_CURRTHREADID GetCurrentThreadId() - #define _LUCENE_THREADID_TYPE DWORD -CL_NS_END - -#endif //lucene_config_threadCSection_h diff -Nru clucene-core-0.9.21b/src/CLucene/config/threadPthread.h clucene-core-2.3.3.4/src/CLucene/config/threadPthread.h --- clucene-core-0.9.21b/src/CLucene/config/threadPthread.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/threadPthread.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -//NOTE: do not include this file directly, it is included from lucene internally. - -#ifndef lucene_config_threadPthread_h -#define lucene_config_threadPthread_h - -#include - -CL_NS_DEF(util) - -///a posix implementation of the lock mutex -///todo: we need a spinlock implemenation for usage in reference counting -class mutex_pthread -{ -private: - pthread_mutex_t mtx; - -public: - mutex_pthread(const mutex_pthread& clone); - mutex_pthread(); - ~mutex_pthread(); - void lock(); - void unlock(); - -private: - #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - pthread_t lockOwner; - unsigned int lockCount; - #endif -}; - -#define _LUCENE_SLEEP(x) usleep(x*1000) //_LUCENE_SLEEP should be in millis, usleep is in micros -#define _LUCENE_THREADMUTEX CL_NS(util)::mutex_pthread -#define _LUCENE_CURRTHREADID pthread_self() -#define _LUCENE_THREADID_TYPE pthread_t - -class CLuceneThreadIdCompare -{ -public: - enum - { // parameters for hash table - bucket_size = 4, // 0 < bucket_size - min_buckets = 8 - }; // min_buckets = 2 ^^ N, 0 < N - - bool operator()( pthread_t t1, pthread_t t2 ) const{ - return t1 < t2; - } -}; - - -CL_NS_END - -#endif //lucene_config_threadPthread_h diff -Nru clucene-core-0.9.21b/src/CLucene/config/threads.cpp clucene-core-2.3.3.4/src/CLucene/config/threads.cpp --- clucene-core-0.9.21b/src/CLucene/config/threads.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/threads.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,162 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#ifndef _CL_DISABLE_MULTITHREADING -CL_NS_DEF(util) - - -mutexGuard::mutexGuard(const mutexGuard& clone){ - //no autoclone - mrMutex = NULL; -} -mutexGuard::mutexGuard( _LUCENE_THREADMUTEX& rMutex ) : - mrMutex(&rMutex) -{ - mrMutex->lock(); -} -mutexGuard::~mutexGuard() -{ - mrMutex->unlock(); -} - -#if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) - //do nothing - #if defined(_LUCENE_PRAGMA_WARNINGS) - #pragma message ("==================Not implementing any thread mutex==================") - #else - #warning "==================Not implementing any thread mutex==================" - #endif - - - -#elif defined(_CL_HAVE_WIN32_THREADS) - #include "CLucene/config/threadCSection.h" - - #if !defined(LUCENE_USE_WINDOWS_H) && !defined(_WINDOWS_) - //we have not explicity included windows.h and windows.h has - //not been included (check _WINDOWS_), then we must define - //our own definitions to the thread locking functions: - extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(CRITICAL_SECTION *); - extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(CRITICAL_SECTION *); - extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(CRITICAL_SECTION *); - extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(CRITICAL_SECTION *); - extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(); - #endif - - mutex_win32::mutex_win32(const mutex_win32& clone){ - InitializeCriticalSection(&mtx); - } - mutex_win32::mutex_win32() - { - InitializeCriticalSection(&mtx); - } - - mutex_win32::~mutex_win32() - { - DeleteCriticalSection(&mtx); - } - - void mutex_win32::lock() - { - EnterCriticalSection(&mtx); - } - - void mutex_win32::unlock() - { - LeaveCriticalSection(&mtx); - } - - - -#elif defined(_CL_HAVE_PTHREAD) - #include "CLucene/config/threadPthread.h" - - #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - bool mutex_pthread_attr_initd=false; - pthread_mutexattr_t mutex_pthread_attr; - #endif - - #ifdef _CL__CND_DEBUG - #define _CLPTHREAD_CHECK(c,m) CND_PRECONDITION(c==0,m) - #else - #define _CLPTHREAD_CHECK(c,m) c; - #endif - - mutex_pthread::mutex_pthread(const mutex_pthread& clone){ - #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, &mutex_pthread_attr), "mutex_pthread(clone) constructor failed") - #else - #if defined(__hpux) && defined(_DECTHREADS_) - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, pthread_mutexattr_default), "mutex_pthread(clone) constructor failed") - #else - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, 0), "mutex_pthread(clone) constructor failed") - #endif - lockCount=0; - lockOwner=0; - #endif - } - mutex_pthread::mutex_pthread() - { - #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - if ( mutex_pthread_attr_initd == false ){ - pthread_mutexattr_init(&mutex_pthread_attr); - pthread_mutexattr_settype(&mutex_pthread_attr, PTHREAD_MUTEX_RECURSIVE); - mutex_pthread_attr_initd = true; - } - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, &mutex_pthread_attr), "mutex_pthread(clone) constructor failed") - #else - #if defined(__hpux) && defined(_DECTHREADS_) - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, pthread_mutexattr_default), "mutex_pthread(clone) constructor failed") - #else - _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, 0), "mutex_pthread(clone) constructor failed") - #endif - lockCount=0; - lockOwner=0; - #endif - } - - mutex_pthread::~mutex_pthread() - { - _CLPTHREAD_CHECK(pthread_mutex_destroy(&mtx), "~mutex_pthread destructor failed") - } - - void mutex_pthread::lock() - { - #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - pthread_t currentThread = pthread_self(); - if( pthread_equal( lockOwner, currentThread ) ) { - ++lockCount; - } else { - _CLPTHREAD_CHECK(pthread_mutex_lock(&mtx), "mutex_pthread::lock") - lockOwner = currentThread; - lockCount = 1; - } - #else - _CLPTHREAD_CHECK(pthread_mutex_lock(&mtx), "mutex_pthread::lock") - #endif - } - - void mutex_pthread::unlock() - { - #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE - --lockCount; - if( lockCount == 0 ) - { - lockOwner = 0; - _CLPTHREAD_CHECK(pthread_mutex_unlock(&mtx), "mutex_pthread::unlock") - } - #else - _CLPTHREAD_CHECK(pthread_mutex_unlock(&mtx), "mutex_pthread::unlock") - #endif - } - -#endif //thread impl choice - - -CL_NS_END -#endif //!_CL_DISABLE_MULTITHREADING diff -Nru clucene-core-0.9.21b/src/CLucene/config/utf8.cpp clucene-core-2.3.3.4/src/CLucene/config/utf8.cpp --- clucene-core-0.9.21b/src/CLucene/config/utf8.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/config/utf8.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -/* - * Copyright (C) 1999 Tom Tromey - * Copyright (C) 2000 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - ************************************************ - * Also licensed with permission from Tom Tromey - * and Owen Taylor under the Apache license. - * Original location: - * http://cvs.gnome.org/viewcvs/glib/glib/gutf8.c?rev=1.50&view=log - ************************************************ - * - * Copyright 2003-2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #include "CLucene/StdHeader.h" - -typedef unsigned long gunichar; -typedef unsigned char guchar; - -#define UTF8_COMPUTE(Char, Mask, Len) \ - if (Char < 128) \ - { \ - Len = 1; \ - Mask = 0x7f; \ - } \ - else if ((Char & 0xe0) == 0xc0) \ - { \ - Len = 2; \ - Mask = 0x1f; \ - } \ - else if ((Char & 0xf0) == 0xe0) \ - { \ - Len = 3; \ - Mask = 0x0f; \ - } \ - else if ((Char & 0xf8) == 0xf0) \ - { \ - Len = 4; \ - Mask = 0x07; \ - } \ - else if ((Char & 0xfc) == 0xf8) \ - { \ - Len = 5; \ - Mask = 0x03; \ - } \ - else if ((Char & 0xfe) == 0xfc) \ - { \ - Len = 6; \ - Mask = 0x01; \ - } \ - else \ - Len = -1; - -/*#define UTF8_LENGTH(Char) \ - ((Char) < 0x80 ? 1 : \ - ((Char) < 0x800 ? 2 : \ - ((Char) < 0x10000 ? 3 : \ - ((Char) < 0x200000 ? 4 : \ - ((Char) < 0x4000000 ? 5 : 6)))))*/ - - -#define UTF8_GET(Result, Chars, Count, Mask, Len) \ - (Result) = (Chars)[0] & (Mask); \ - for ((Count) = 1; (Count) < (Len); ++(Count)) \ - { \ - if (((Chars)[(Count)] & 0xc0) != 0x80) \ - { \ - (Result) = -1; \ - break; \ - } \ - (Result) <<= 6; \ - (Result) |= ((Chars)[(Count)] & 0x3f); \ - } - - -/** - * lucene_wctoutf8: - * @c: a ISO10646 character code - * @outbuf: output buffer, must have at least 6 bytes of space. - * If %NULL, the length will be computed and returned - * and nothing will be written to @outbuf. - * - * Converts a single character to UTF-8. - * - * Return value: number of bytes written - **/ -size_t lucene_wctoutf8(char * outbuf, const wchar_t ch) -{ - gunichar c = ch; - guchar len = 0; - int first; - int i; - - if (c < 0x80) - { - first = 0; - len = 1; - } - else if (c < 0x800) - { - first = 0xc0; - len = 2; - } - else if (c < 0x10000) - { - first = 0xe0; - len = 3; - } - else if (c < 0x200000) - { - first = 0xf0; - len = 4; - } - else if (c < 0x4000000) - { - first = 0xf8; - len = 5; - } - else - { - first = 0xfc; - len = 6; - } - - if (outbuf) - { - for (i = len - 1; i > 0; --i) - { - outbuf[i] = (char)((c & 0x3f) | 0x80); - c >>= 6; - } - outbuf[0] = c | first; - } - - return len; -} - - -/** - * lucene_utf8towc: - * @p: a pointer to Unicode character encoded as UTF-8 - * - * Converts a sequence of bytes encoded as UTF-8 to a Unicode character. - * If @p does not point to a valid UTF-8 encoded character, results are - * undefined. If you are not sure that the bytes are complete - * valid Unicode characters, you should use lucene_utf8towc_validated() - * instead. - * - * Return value: the resulting character - **/ -size_t lucene_utf8towc(wchar_t *pwc, const char *p, size_t n) -{ - int i, mask = 0; - int result; - unsigned char c = (unsigned char) *p; - int len=0; - - UTF8_COMPUTE (c, mask, len); - if (len == -1) - return 0; - UTF8_GET (result, p, i, mask, len); - - *pwc = result; - return len; -} - - -//this function was not taken from gnome -size_t lucene_wcstoutf8(char * result, const wchar_t * str, size_t result_length){ - char *p=result; - int i = 0; - - while (p < result + result_length-1 && str[i] != 0) - p += lucene_wctoutf8(p,str[i++]); - - *p = '\0'; - - return p-result; -} -//this function was not taken from gnome -size_t lucene_utf8towcs(wchar_t * result, const char * str, size_t result_length){ - char *sp = (char*)str; - wchar_t *rp = result; - int i = 0; - - while (rp < result + result_length && *sp!=0){ - size_t r = lucene_utf8towc(rp,sp,6); - if ( r == -1 ) - return 0; - sp += r; - rp++; - } - - if ( sp-str < result_length ) - *rp = '\0'; - - size_t ret = sp-str; - return ret; -} -//get the number of bytes that make up the utf8 character. -//this function was not taken from gnome -size_t lucene_utf8charlen(const char *p) -{ - int mask = 0; - int len=0; - unsigned char c = (unsigned char) *p; - - UTF8_COMPUTE (c, mask, len); - return len; -} diff -Nru clucene-core-0.9.21b/src/CLucene/debug/condition.cpp clucene-core-2.3.3.4/src/CLucene/debug/condition.cpp --- clucene-core-0.9.21b/src/CLucene/debug/condition.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/debug/condition.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "condition.h" -#include "CLucene/util/Misc.h" -#ifdef _CL__CND_DEBUG - -#define __CND_STR_PRECONDITION "PRECONDITION" -#define __CND_STR_CONDITION "CONDITION" -#define __CND_STR_WARNING "WARNING" -#define __CND_STR_MESSAGE "MESSAGE" -#define __CND_STR_DEBUGMESSAGE "DEBUG MESSAGE" -#define __CND_STR_EXIT "EXIT" - -#ifndef _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG -void _Cnd_OutDebug( const char* FormattedMsg, const char* StrTitle, const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ){ - #ifdef __WINDOWS_H - /*Display a standard messagebox*/ - MessageBox(NULL, FormattedMsg, StrTitle, (fatal==1 ? MB_ICONSTOP:MB_ICONEXCLAMATION) | MB_OK | MB_TASKMODAL); - #else - printf("%s\n",FormattedMsg); - #endif - - #if defined(_CND_DEBUG_WARN_DEBUGGER) /*attempt to signal windows debugger*/ - OutputDebugString(FormattedMsg); - DebugBreak(); /*Position debugger just before exit program*/ - #endif - - if ( fatal ) - debugFatalExit(1); -} -#endif - -void __cnd_FormatDebug( const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ) { - char M[512]; - char* StrTitle = NULL; - - if( Mes2 ) - _snprintf(M,512,"file:%s line:%d\n%s",File,Line,Mes2); - else - _snprintf(M,512,"file:%s line:%d",File,Line); - - /*Determine which title to use*/ - switch( Title ) { - case CND_STR_PRECONDITION: { - StrTitle = __CND_STR_PRECONDITION; - break; - } - case CND_STR_CONDITION: { - StrTitle = __CND_STR_CONDITION; - break; - } - case CND_STR_WARNING: { - StrTitle = __CND_STR_WARNING; - break; - } - case CND_STR_MESSAGE: { - StrTitle = __CND_STR_MESSAGE; - break; - } - case CND_STR_DEBUGMESSAGE: { - StrTitle = __CND_STR_DEBUGMESSAGE; - break; - } - case CND_STR_EXIT: { - StrTitle = __CND_STR_EXIT; - break; - } - default: - break; - }/*switch*/ - - _Cnd_OutDebug(M, StrTitle, File, Line, Title, Mes2, fatal); -} -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/debug/condition.h clucene-core-2.3.3.4/src/CLucene/debug/condition.h --- clucene-core-0.9.21b/src/CLucene/debug/condition.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/debug/condition.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef __CONDITION_H -#define __CONDITION_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -/* -To enable condition debugging uncomment _CND_DEBUG in CLConfig.h -*/ - -#ifdef _CL__CND_DEBUG /* Don't include the debug code */ - #ifndef CND_STR_DEFINES - #define CND_STR_DEFINES - #define CND_STR_PRECONDITION 1 - #define CND_STR_CONDITION 2 - #define CND_STR_WARNING 3 - #define CND_STR_MESSAGE 4 - #define CND_STR_DEBUGMESSAGE 5 - #define CND_STR_EXIT 6 - #endif - - /* _CL__CND_DEBUG defined, include debug code */ - - #ifdef _CND_NODEBUGTEXT - #define CND_PRECONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_PRECONDITION,NULL) - #define CND_CONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_CONDITION,NULL) - #define CND_WARNING(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_WARNING,NULL) - #define CND_MESSAGE(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_MESSAGE,NULL) - #define CND_DEBUGMESSAGE(usermessage) CND__MESSAGE(__FILE__,__LINE__,CND_STR_DEBUGMESSAGE,NULL) - #else - #define CND_PRECONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_PRECONDITION,usermessage) - #define CND_CONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_CONDITION,usermessage) - #define CND_WARNING(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_WARNING,usermessage) - #define CND_MESSAGE(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_MESSAGE,usermessage) - #define CND_DEBUGMESSAGE(usermessage) CND__MESSAGE(__FILE__,__LINE__,CND_STR_DEBUGMESSAGE,usermessage) - #endif - - //if _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG is defined, then you must implement - //this routine in the client application. The debug callback can then - //be better customised to the host application. - //Here is the default implementation: - void _Cnd_OutDebug( const char* FormattedMsg, const char* StrTitle, const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ); - - void __cnd_FormatDebug( const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ); - #define CND__EXIT(file,line,title,mes2) {__cnd_FormatDebug(file,line,title,mes2,1);} - #define CND__EXITCONDITION(cond,file,line,title,mes2) {if(!(cond)){__cnd_FormatDebug(file,line,title,mes2,1);}} - #define CND__CONDITION(cond,file,line,title,mes2) {if(!(cond)){__cnd_FormatDebug(file,line,title,mes2,0);}} - #define CND__MESSAGE(file,line,title,mes2) {__cnd_FormatDebug(file,line,title,mes2,0);} -#else - #define CND_PRECONDITION(cond, usermessage) - #define CND_CONDITION(cond, usermessage) - #define CND_WARNING(cond,usermessage) - #define CND_MESSAGE(cond,usermessage) - #define CND_DEBUGMESSAGE(usermessage) -#endif - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/debug/error.cpp clucene-core-2.3.3.4/src/CLucene/debug/error.cpp --- clucene-core-0.9.21b/src/CLucene/debug/error.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/debug/error.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -CL_NS_USE(util) - - -#ifdef _LUCENE_DISABLE_EXCEPTIONS - #ifdef _LUCENE_PRAGMA_WARNINGS - #pragma message ("==================Lucene exceptions are disabled==================") - #else - #warning "==================Lucene exceptions are disabled==================" - #endif -#else - CLuceneError::CLuceneError(int num, const char* str, bool ownstr) - { - error_number = num; - _awhat=STRDUP_AtoA(str); - _twhat=NULL; - if ( ownstr ) - _CLDELETE_CaARRAY(str); - } - - CLuceneError::CLuceneError(const CLuceneError& clone) - { - this->error_number = clone.error_number; - this->_awhat = NULL; - this->_twhat = NULL; - - if ( clone._awhat != NULL ) - this->_awhat = STRDUP_AtoA(clone._awhat); - if ( clone._twhat != NULL ) - this->_twhat = STRDUP_TtoT(clone._twhat); - } - CLuceneError::~CLuceneError() throw(){ - _CLDELETE_CARRAY(_twhat); - _CLDELETE_CaARRAY(_awhat); - } - char* CLuceneError::what(){ -#ifdef _ASCII - if ( _twhat != NULL ) - return _twhat; -#endif - if ( _awhat == NULL ) - _awhat = STRDUP_TtoA(_twhat); - return _awhat; - } - TCHAR* CLuceneError::twhat(){ -#ifdef _ASCII - if ( _awhat != NULL ) - return _awhat; -#endif - if ( _twhat == NULL ) - _twhat = STRDUP_AtoT(_awhat); - return _twhat; - } - -#ifndef _ASCII - CLuceneError::CLuceneError(int num, const TCHAR* str, bool ownstr) - { - error_number = 0; - _awhat=NULL; - _twhat=STRDUP_TtoT(str); - if ( ownstr ) - _CLDELETE_CARRAY(str); - } -#endif - -#endif //_LUCENE_DISABLE_EXCEPTIONS diff -Nru clucene-core-0.9.21b/src/CLucene/debug/error.h clucene-core-2.3.3.4/src/CLucene/debug/error.h --- clucene-core-0.9.21b/src/CLucene/debug/error.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/debug/error.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_debug_error_ -#define _lucene_debug_error_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#define CL_ERR_UNKNOWN -1 -#define CL_ERR_IO 1 -#define CL_ERR_NullPointer 2 -#define CL_ERR_Runtime 3 -#define CL_ERR_IllegalArgument 4 -#define CL_ERR_Parse 5 -#define CL_ERR_TokenMgr 6 -#define CL_ERR_UnsupportedOperation 7 -#define CL_ERR_InvalidState 8 -#define CL_ERR_IndexOutOfBounds 9 -#define CL_ERR_TooManyClauses 10 -#define CL_ERR_RAMTransaction 11 -#define CL_ERR_InvalidCast 12 -#define CL_ERR_IllegalState 13 - - - -//////////////////////////////////////////////////////// -//error try/throw/catch definitions -//////////////////////////////////////////////////////// -#ifdef _CL_DISABLE_NATIVE_EXCEPTIONS - /*#define try _jpr_Try - #define _CLCATCH _jpr_Catch - #define _CLFINALLY(x) xxxx - #define _CLTHROWA(y) _jpr_Throw - #define _THROWA_DEL(y) _jpr_Throw - #define _RETHROW(x) _jpr_Throw - #define _CLTHROWT(y) _jpr_Throw - - #define _THROWS ,_jpr_Throws*/ -#else - class CLuceneError - { - int error_number; - char* _awhat; - TCHAR* _twhat; - public: - CLuceneError(const CLuceneError& clone); - CLuceneError(int num, const char* str, bool ownstr); -#ifdef _UCS2 - CLuceneError(int num, const TCHAR* str, bool ownstr); -#endif - int number(){return error_number;} - char* what(); - TCHAR* twhat(); - ~CLuceneError() throw(); - }; - - //#define _THROWS //does nothing - #define _CLFINALLY(x) catch(...){ x; throw; } x //note: code x is not run if return is called - #define _CLTHROWA(number, str) throw CLuceneError(number, str,false) - #define _CLTHROWT(number, str) throw CLuceneError(number, str,false) - #define _CLTHROWA_DEL(number, str) throw CLuceneError(number, str,true) //throw a string ensures the value is deleted - #define _CLTHROWT_DEL(number, str) throw CLuceneError(number, str,true) //throw a string ensures the value is deleted - - -#endif //_LUCENE_DISABLE_EXCEPTIONS -// -//////////////////////////////////////////////////////// - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/debug/lucenebase.h clucene-core-2.3.3.4/src/CLucene/debug/lucenebase.h --- clucene-core-0.9.21b/src/CLucene/debug/lucenebase.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/debug/lucenebase.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_debug_lucenebase_ -#define _lucene_debug_lucenebase_ - -#ifdef _LUCENE_PRAGMA_ONCE -# pragma once -#endif - -CL_NS_DEF(debug) - -//Lucenebase is the superclass of all clucene objects. It provides -//memory debugging tracking and/or reference counting -class LuceneBase{ -public: -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING - static void* operator new (size_t size); - static void operator delete (void *p); - int32_t __cl_initnum; ///< The order that the object was created at. This is then used to do a lookup in the objects list - - static void* operator new (size_t size, char const * file, int32_t line); - static void operator delete (void *p, char const * file, int32_t line); - - static void* __cl_voidpadd(void* data, const char* file, int line, size_t size); ///dummy__see_mem_h_for_details -#endif -#define _CL_POINTER(x) (x==NULL?NULL:(x->__cl_addref()>=0?x:x)) //return a add-ref'd object -#define LUCENE_REFBASE public CL_NS(debug)::LuceneBase //this is the base of classes who *always* need refcounting - -#if defined(_DEBUG) - #if !defined(LUCENE_BASE_CHECK) - #define LUCENE_BASE_CHECK(x) - #endif -#else - #undef LUCENE_BASE_CHECK - #define LUCENE_BASE_CHECK(x) -#endif - -//Macro for creating new arrays -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING - #define _CL_NEWARRAY(type,size) (type*)CL_NS(debug)::LuceneBase::__cl_voidpadd(new type[(size_t)size],__FILE__,__LINE__,(size_t)size); - #define _CLDELETE_ARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__); delete [] x; x=NULL;} - #define _CLDELETE_LARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x;} - #ifndef _CLDELETE_CARRAY - #define _CLDELETE_CARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x; x=NULL;} - #define _CLDELETE_LCARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x;} - #endif -#else - #define _CL_NEWARRAY(type,size) new type[size] - #define _CLDELETE_ARRAY(x) if (x!=NULL){delete [] x; x=NULL;} - #define _CLDELETE_LARRAY(x) if (x!=NULL){delete [] x;} - #ifndef _CLDELETE_CARRAY - #define _CLDELETE_CARRAY(x) if (x!=NULL){delete [] x; x=NULL;} - #define _CLDELETE_LCARRAY(x) if (x!=NULL){delete [] x;} - #endif -#endif -//a shortcut for deleting a carray and all its contents -#define _CLDELETE_CARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_CARRAY(x[xcda]);}_CLDELETE_ARRAY(x)}; -#define _CLDELETE_ARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE(x[xcda]);}_CLDELETE_ARRAY(x)}; -#ifndef _CLDELETE_CaARRAY - #define _CLDELETE_CaARRAY _CLDELETE_CARRAY - #define _CLDELETE_LCaARRAY _CLDELETE_LCARRAY -#endif - -//Macro for deleting -#ifdef LUCENE_ENABLE_REFCOUNT - #define _CLDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; x=NULL; } - #define _CLLDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; } -#else - #define _CLDELETE(x) if (x!=NULL){ LUCENE_BASE_CHECK(x); delete x; x=NULL; } - #define _CLLDELETE(x) if (x!=NULL){ LUCENE_BASE_CHECK(x); delete x; } -#endif - -//_CLDECDELETE deletes objects which are *always* refcounted -#define _CLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; x=NULL; } -#define _CLLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; } - -//_VDelete should be used for deleting non-clucene objects. -//when using reference counting, _CLDELETE casts the object -//into a LuceneBase*. -#define _CLVDELETE(x) if(x!=NULL){delete x; x=NULL;} - -template -class Array: LUCENE_BASE{ -public: - T* values; - size_t length; - - void deleteAll(){ - for (size_t i=0;ivalues = values; - this->length = length; - } - Array(size_t length){ - this->values = _CL_NEWARRAY(T,length); - this->length = length; - } - ~Array(){} - - const T operator[](size_t _Pos) const - { - if (length <= _Pos){ - _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); - } - return (*(values + _Pos)); - } - T operator[](size_t _Pos) - { - if (length <= _Pos){ - _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); - } - return (*(values + _Pos)); - } - -}; - -#endif //_lucene_debug_lucenebase_ diff -Nru clucene-core-0.9.21b/src/CLucene/debug/memtracking.cpp clucene-core-2.3.3.4/src/CLucene/debug/memtracking.cpp --- clucene-core-0.9.21b/src/CLucene/debug/memtracking.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/debug/memtracking.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,371 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/util/Misc.h" - -bool _lucene_disable_debuglogging = true; //if LUCENE_ENABLE_CONSTRUCTOR_LOG is on, dont do log if this is true -bool _lucene_run_objectcheck = false; //run a memory check before deleting objects -int _lucene_counter_break = -1; //to break at this item, change this - //and put break points at points below - -CL_NS_USE(util) -CL_NS_DEF(debug) - -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING -int32_t _instance_counter = 0; //counter for initnumber - -struct _file{ - int32_t refcount; ///times this has been used - char* value; ///reference to the the basefile -}; //structure for name counting -struct _pointers{ - _file* file; - int32_t initline; - int32_t initnumber; -};//structure for pointer-filename references - -typedef CL_NS(util)::CLSet > defFile; -typedef CL_NS(util)::CLSet,Deletor::Dummy,Deletor::Void<_pointers> > defPointer; -typedef CL_NS(util)::CLSet,Deletor::Dummy,Deletor::Void<_pointers> > defVoid; - -DEFINE_MUTEX(memleak_lock) -defFile LuceneBase_Files(false,true); //list of filenames used -defPointer LuceneBase_Pointers(false,true); //list of pointers counted -defVoid LuceneBase_Voids(false,true); //list of arbitary data added - -//variables to trim filenames to just the base names -char _files_trim_string[CL_MAX_DIR]; -int32_t _files_trim_start=-1; - -//trim the filename and return the refcounted _file* structure -_file* get_file(const char* file){ - if ( _files_trim_start == -1 ){ - //this trims the start of the name file name so - //that the whole of the filename is not stored - more asthetic :) - //need to find the base - _files_trim_start = strlen(__FILE__) - 21; //(length of debug/memtracking.cpp) - strcpy(_files_trim_string,__FILE__); - _files_trim_string[_files_trim_start] = 0; - } - if ( strncmp(file,_files_trim_string,_files_trim_start) == 0 ){ - //this file should be within the same directory area as we found lucenebase.cpp - //to be, lets trim the start - file+=_files_trim_start; - } - - //now return an existing files structure (with refcount++) or create a new one - defFile::iterator itr = LuceneBase_Files.find((const char*)file); - if ( itr != LuceneBase_Files.end() ){ - _file* bf = itr->second; - bf->refcount++; - return bf; - }else{ - _file* ref = new _file; - ref->value = new char[strlen(file)+1]; //cannot use _CL_NEWARRAY otherwise recursion - strcpy(ref->value,file); - - ref->refcount = 1; - LuceneBase_Files.insert(pair(ref->value,ref)); - return ref; - } -} - -void remove_file(_file* bf){ - bf->refcount--; - if ( bf->refcount <= 0 ){ - defFile::iterator fi = LuceneBase_Files.find(bf->value); - CND_PRECONDITION(fi!=LuceneBase_Files.end(),"fi==NULL"); - delete[] bf->value; - LuceneBase_Files.removeitr(fi); - } -} - -#ifdef LUCENE_ENABLE_CONSTRUCTOR_LOG - void constructor_log(const char* type,const char* file,const int line, const int size){ - if ( _lucene_disable_debuglogging ){ - FILE* f = fopen("clucene.log","a"); - char buf[CL_MAX_DIR+5]; - sprintf(buf,"%s,%s,%d,%d\n",type,file,line,size); - fwrite(buf,sizeof(char),strlen(buf),f); - fclose(f); - } - } - #define CONSTRUCTOR_LOG(type,file,line,size) constructor_log(type,file,line,size) -#else - #define CONSTRUCTOR_LOG(type,file,line,size) -#endif - -//////////////////////////////////////////////////////////////////////////////// -// the _CLNEW&_CLDELETE new/delete operators -//////////////////////////////////////////////////////////////////////////////// -void* LuceneBase::operator new (size_t size, const char * file, int32_t line) -{ - SCOPED_LOCK_MUTEX(memleak_lock) - - void* p = malloc (size); - LuceneBase* lb = (LuceneBase*)p; - - //create the pointer struct - _file* br = get_file(file); - _pointers* bp = new _pointers; - bp->file = br; - bp->initnumber = _instance_counter++; - bp->initline = line; - - //associate this object with the pointer - lb->__cl_initnum = bp->initnumber; - - //break if necessary - if ( _lucene_counter_break == lb->__cl_initnum ) - CLDebugBreak(); //put break point here - - //add the pointer object - LuceneBase_Pointers.insert(pair(lb, bp)); - - CONSTRUCTOR_LOG("newobj",file,line,size); - return p; -} -void LuceneBase::operator delete (void *p, char const * file, int32_t line) -{ - SCOPED_LOCK_MUTEX(memleak_lock) - - LuceneBase* lb=(LuceneBase*)p; - - defPointer::iterator itr = LuceneBase_Pointers.find(lb); - if ( itr != LuceneBase_Pointers.end() ){ - _pointers* bp = itr->second; - remove_file(bp->file); - - LuceneBase_Pointers.removeitr(itr); - }else{ - //break - } - free(p); -} - -/////////////////////////////////////////////////////////////////////////// -// the generic new/delete operators -/////////////////////////////////////////////////////////////////////////// -void* LuceneBase::operator new (size_t size) -{ - SCOPED_LOCK_MUTEX(memleak_lock) - - void* p = malloc (size); - LuceneBase* lb = (LuceneBase*)p; - - //create the pointer struct - _file* br = get_file("undefined"); - _pointers* bp = new _pointers; - bp->file = br; - bp->initnumber = _instance_counter++; - bp->initline = -1; - - //associate this object with the pointer - lb->__cl_initnum = bp->initnumber; - - //break if necessary - if ( _lucene_counter_break == lb->__cl_initnum ) - CLDebugBreak(); - - //add the pointer object - LuceneBase_Pointers.insert(pair(lb,bp)); - - CONSTRUCTOR_LOG("newobj","unknown",-1,size); - return p; -} -void LuceneBase::operator delete (void *p) -{ - SCOPED_LOCK_MUTEX(memleak_lock) - - LuceneBase* lb=(LuceneBase*)p; - - defPointer::iterator itr = LuceneBase_Pointers.find(lb); - if ( itr != LuceneBase_Pointers.end() ){ - _pointers* bp = itr->second; - remove_file(bp->file); - LuceneBase_Pointers.removeitr(itr); - }else{ - CLDebugBreak(); - } - free(p); -} - -/////////////////////////////////////////////////////////////////////////// -// other memtracking functions -/////////////////////////////////////////////////////////////////////////// -void LuceneBase::__cl_unregister(const void* obj){ - SCOPED_LOCK_MUTEX(memleak_lock) - - LuceneBase* lb=(LuceneBase*)obj; - defPointer::iterator itr = LuceneBase_Pointers.find(lb); - CND_PRECONDITION(itr != LuceneBase_Pointers.end(),"__cl_unregister object not found"); - _pointers* bp = itr->second; - LuceneBase_Pointers.removeitr(itr); -} - -void* LuceneBase::__cl_voidpadd(void* data, const char* file, int line,size_t size){ - SCOPED_LOCK_MUTEX(memleak_lock) - - _file* br = get_file(file); - _pointers* bp = new _pointers; - bp->file = br; - bp->initnumber = _instance_counter++; - bp->initline = line; - - LuceneBase_Voids.insert(pair(data,bp)); - CONSTRUCTOR_LOG("newarr",file,line,size); - return data; -} -void LuceneBase::__cl_voidpremove(const void* data, const char* file, int line){ - SCOPED_LOCK_MUTEX(memleak_lock) - defVoid::iterator itr = LuceneBase_Voids.find(data); - if ( itr != LuceneBase_Voids.end() ){ - _pointers* bp = itr->second; - remove_file(bp->file); - LuceneBase_Voids.removeitr(itr); - }else{ - printf("Data deleted when not added with _CL_NEWARRAY in %s at %d\n",file,line); - } -} - - -//////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////// -//The lucene base memory leak printout functions -//////////////////////////////////////////////////////////// -//static -void __internalcl_PrintUnclosedObject(bool isObject, string& sb,_pointers* bp,_file* bf, bool print){ - TCHAR ttmp[100]; - char atmp[100]; - - sb.append(" "); - { - _i64tot(bp->initnumber,ttmp,10); - STRCPY_TtoA(atmp,ttmp,100); - sb.append(atmp); - } - if ( isObject ){ - sb.append("(obj). "); - }else{ - sb.append(". "); - } - sb.append(bf->value); - sb.append(", line "); - { - _i64tot(bp->initline,ttmp,10); - STRCPY_TtoA(atmp,ttmp,100); - sb.append(atmp); - } - sb.append("\n"); - - if ( print && sb.length() > 0 ){ - printf("%s\n", sb.c_str()); - sb = ""; - } -} -char* __internalcl_GetUnclosedObjects(bool print){ - TCHAR ttmp[100]; - char atmp[100]; - SCOPED_LOCK_MUTEX(memleak_lock) - - string sb; - bool unknowns = false; - if ( LuceneBase_Pointers.size() > 0 ){ - { - _i64tot(LuceneBase_Pointers.size(),ttmp,10); - STRCPY_TtoA(atmp,ttmp,100); - sb.append(atmp); - } - sb.append(" clucene objects are still open\n"); - - defPointer::iterator itr = LuceneBase_Pointers.begin(); - while ( itr != LuceneBase_Pointers.end() ){ - _pointers* bp = itr->second; - _file* bf = bp->file; - - if ( bp->initline == -1 ) - unknowns = true; - __internalcl_PrintUnclosedObject(true, sb,bp,bf,print); - - ++itr; - } - - defVoid::iterator itr2 = LuceneBase_Voids.begin(); - while ( itr2 != LuceneBase_Voids.end() ){ - _pointers* bp = itr2->second; - _file* bf = bp->file; - - if ( bp->initline == -1 ) - unknowns = true; - __internalcl_PrintUnclosedObject(false, sb,bp,bf,print); - - itr2++; - } - } - - if ( unknowns == true ){ - sb.append("*** Some memory was not created with _CLNEW and was not tracked... ***\n"); - sb.append("*** Use _CLNEW instead of new when creating CLucene objects ***\n"); - sb.append("*** Memory may also have not been freed in the current context ***\n"); - } - - if ( print ){ - if ( sb.length() > 0 ){ - printf("%s\n", sb.c_str()); - sb = ""; - } - return NULL; - }else{ - if ( sb.length() > 0 ) - return STRDUP_AtoA(sb.c_str()); - else - return NULL; - } -} - -void LuceneBase::__cl_ClearMemory(){ - SCOPED_LOCK_MUTEX(memleak_lock) - - while ( LuceneBase_Files.size() > 0 ){ - defFile::iterator fi = LuceneBase_Files.begin(); - _file* f = fi->second; - delete[] f->value; - LuceneBase_Files.removeitr (fi); - } - LuceneBase_Pointers.clear(); - LuceneBase_Voids.clear(); -} -char* LuceneBase::__cl_GetUnclosedObjects(){ - return __internalcl_GetUnclosedObjects(false); -} -//static -int32_t LuceneBase::__cl_GetUnclosedObjectsCount(){ - return LuceneBase_Pointers.size(); -} - -const char* LuceneBase::__cl_GetUnclosedObject(int32_t item){ - SCOPED_LOCK_MUTEX(memleak_lock) - - defPointer::iterator itr=LuceneBase_Pointers.begin(); - int32_t i=0; - for ( ;itr!=LuceneBase_Pointers.end() && isecond->file->value; - else - return NULL; -} -void LuceneBase::__cl_PrintUnclosedObjects(){ - __internalcl_GetUnclosedObjects(true); -} -//////////////////////////////////////////////////////////// - -#endif //LUCENE_ENABLE_MEMLEAKTRACKING -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/document/DateField.cpp clucene-core-2.3.3.4/src/CLucene/document/DateField.cpp --- clucene-core-0.9.21b/src/CLucene/document/DateField.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/document/DateField.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#include "DateField.h" -#include "CLucene/util/Misc.h" -CL_NS_USE(util) -CL_NS_DEF(document) - -DateField::~DateField(){ -} - -TCHAR* DateField::timeToString(const int64_t time) { - TCHAR* buf = _CL_NEWARRAY(TCHAR,DATEFIELD_DATE_LEN + 1); - timeToString(time,buf); - return buf; -} -void DateField::timeToString(const int64_t time, TCHAR* buf) { - CND_PRECONDITION (buf, "buf == NULL"); - *buf = '\0'; - if (time < 0) - _CLTHROWA (CL_ERR_IllegalArgument,"time too early"); //todo: make richer error - - if (time > DATEFIELD_DATE_MAX) - _CLTHROWA (CL_ERR_IllegalArgument, "time too late (past DATEFIELD_DATE_MAX"); //todo: make richer error - - _i64tot(time, buf, 36); - int32_t bufLen = _tcslen(buf); - - CND_PRECONDITION (bufLen <= DATEFIELD_DATE_LEN, "timeToString length is greater than 9"); - - /* Supply leading zeroes if necessary. */ - if (bufLen < DATEFIELD_DATE_LEN) { - const int32_t nMissingZeroes = DATEFIELD_DATE_LEN - bufLen; - /* Move buffer contents forward to make room for leading zeroes. */ - for (int32_t i = DATEFIELD_DATE_LEN - 1; i >= nMissingZeroes; i--) - buf[i] = buf[i - nMissingZeroes]; - - /* Insert leading zeroes. */ - {// MSVC6 scoping fix - for (int32_t i = 0; i < nMissingZeroes; i++) - buf[i] = '0'; - } - - buf[DATEFIELD_DATE_LEN] = 0; - } - - CND_PRECONDITION (_tcslen(buf) == DATEFIELD_DATE_LEN, "timeToString return is not equal to DATEFIELD_DATE_LEN"); -} - -int64_t DateField::stringToTime(const TCHAR* time) { - TCHAR* end; - return _tcstoi64(time, &end, 36); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/document/DateField.h clucene-core-2.3.3.4/src/CLucene/document/DateField.h --- clucene-core-0.9.21b/src/CLucene/document/DateField.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/document/DateField.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_document_DateField_ -#define _lucene_document_DateField_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(document) - -//here are some constants used throughout clucene -//make date strings long enough to last a millenium -#define DATEFIELD_DATE_MAX _ILONGLONG(31536000000000) //1000L*365*24*60*60*1000 - -#define DATEFIELD_DATE_LEN 9 ////Long.toString(DATEFIELD_DATE_MAX, Character.MAX_RADIX).length() - -/** -* Provides support for converting dates to strings and vice-versa. -* The strings are structured so that lexicographic sorting orders by date, -* which makes them suitable for use as field values and search terms. -* -*

Note that this class saves dates with millisecond granularity, -* which is bad for {@link RangeQuery} and {@link PrefixQuery}, as those -* queries are expanded to a BooleanQuery with a potentially large number -* of terms when searching. Thus you might want to use -* {@link DateTools} instead. -* -*

-* Note: dates before 1970 cannot be used, and therefore cannot be -* indexed when using this class. See {@link DateTools} for an -* alternative without such a limitation. -* -* @deprecated If you build a new index, use {@link DateTools} instead. This class is included for use with existing -* indices and will be removed in a future release. -*/ -class DateField :LUCENE_BASE { -public: - ~DateField(); - - /** - * Converts a millisecond time to a string suitable for indexing. - * @throws RuntimeException if the time specified in the - * method argument is negative, that is, before 1970 - */ - static TCHAR* timeToString(const int64_t time); - - /** - * Converts a millisecond time to a string suitable for indexing. - * @throws CL_ERR_IllegalArgument if the time specified in the - * method argument is negative, that is, before 1970 - * @param str must be a character array DATEFIELD_DATE_LEN+1 or longer - */ - static void timeToString(const int64_t time, TCHAR* str); - - /** Converts a string-encoded date into a millisecond time. */ - static int64_t stringToTime(const TCHAR* s); -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/document/Document.cpp clucene-core-2.3.3.4/src/CLucene/document/Document.cpp --- clucene-core-0.9.21b/src/CLucene/document/Document.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/document/Document.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Document.h" -#include "Field.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(document) - - DocumentFieldEnumeration::DocumentFieldList::DocumentFieldList(Field* f, DocumentFieldList* n ) { - //Func - Constructor - //Pre - f != NULL - // n may be NULL - //Post - Instance has been created - CND_PRECONDITION(f != NULL, "f is NULL"); - - field = f; - next = n; - } - DocumentFieldEnumeration::DocumentFieldList::~DocumentFieldList(){ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - - // Instead of recursively deleting the field list we do - // it iteratively to avoid stack overflows when - // dealing with several thousands of fields. - - if (!field) { - return; // nothing to do; deleted by different invocation of dtor - } - - DocumentFieldList* cur = next; - while (cur != NULL) - { - DocumentFieldList* temp = cur->next; - cur->next = NULL; - - _CLDELETE(cur); - cur = temp; - } - _CLDELETE(field); - } - - - DocumentFieldEnumeration::DocumentFieldEnumeration(const DocumentFieldList* fl){ - //Func - Constructor - //Pre - fl may be NULL - //Post - Instance has been created - - fields = fl; - } - - DocumentFieldEnumeration::~DocumentFieldEnumeration(){ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - } - - bool DocumentFieldEnumeration::hasMoreElements() const { - return fields == NULL ? false : true; - } - - Field* DocumentFieldEnumeration::nextElement() { - //Func - Return the next element in the enumeration - //Pre - true - //Post - The next element is returned or NULL - - - Field* result = NULL; - //Check if fields is still valid - if (fields){ - result = fields->field; - fields = fields->next; - } - return result; - } - - /** Constructs a new document with no fields. */ - Document::Document(){ - //Func - Constructor - //Pre - true - //Post - Instance has been created - boost = 1.0f; - fieldList = NULL; - } - - Document::~Document(){ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - boost = 1.0f; - _CLDELETE(fieldList); - } - - void Document::clear(){ - _CLDELETE(fieldList); - } - - void Document::add(Field& field) { - fieldList = _CLNEW DocumentFieldEnumeration::DocumentFieldList(&field, fieldList); - } - - void Document::setBoost(float_t boost) { - this->boost = boost; - } - - float_t Document::getBoost() const { - return boost; - } - - - Field* Document::getField(const TCHAR* name) const{ - CND_PRECONDITION(name != NULL, "name is NULL"); - - for (DocumentFieldEnumeration::DocumentFieldList* list = fieldList; list != NULL; list = list->next) - //cannot use interning here, because name is probably not interned - if ( _tcscmp(list->field->name(), name) == 0 ){ - return list->field; - } - - return NULL; - } - - const TCHAR* Document::get(const TCHAR* field) const { - CND_PRECONDITION(field != NULL, "field is NULL"); - Field *f = getField(field); - if (f!=NULL) - return f->stringValue(); //this returns null it is a binary(reader) - else - return NULL; - } - - DocumentFieldEnumeration* Document::fields() const { - return _CLNEW DocumentFieldEnumeration(fieldList); - } - - - TCHAR* Document::toString() const { - StringBuffer ret(_T("Document<")); - for (DocumentFieldEnumeration::DocumentFieldList* list = fieldList; list != NULL; list = list->next) { - TCHAR* tmp = list->field->toString(); - ret.append( tmp ); - if (list->next != NULL) - ret.append(_T(" ")); - _CLDELETE_ARRAY( tmp ); - } - ret.append(_T(">")); - return ret.toString(); - } - - - - void Document::removeField(const TCHAR* name) { - CND_PRECONDITION(name != NULL, "name is NULL"); - - DocumentFieldEnumeration::DocumentFieldList* previous = NULL; - DocumentFieldEnumeration::DocumentFieldList* current = fieldList; - while (current != NULL) { - //cannot use interning here, because name is probably not interned - if ( _tcscmp(current->field->name(),name) == 0 ){ - if (previous){ - previous->next = current->next; - }else - fieldList = current->next; - current->next=NULL; //ensure fieldlist destructor doesnt delete it - _CLDELETE(current); - return; - } - previous = current; - current = current->next; - } - } - - void Document::removeFields(const TCHAR* name) { - CND_PRECONDITION(name != NULL, "name is NULL"); - - DocumentFieldEnumeration::DocumentFieldList* previous = NULL; - DocumentFieldEnumeration::DocumentFieldList* current = fieldList; - while (current != NULL) { - //cannot use interning here, because name is probably not interned - if ( _tcscmp(current->field->name(),name) == 0 ){ - if (previous){ - previous->next = current->next; - }else - fieldList = current->next; - - current->next=NULL; //ensure fieldlist destructor doesnt delete it - _CLDELETE(current); - - if ( previous ) - current = previous->next; - else - current = fieldList; - }else{ - previous = current; - current = current->next; - } - } - } - - TCHAR** Document::getValues(const TCHAR* name) { - DocumentFieldEnumeration* it = fields(); - int32_t count = 0; - while ( it->hasMoreElements() ){ - Field* f = it->nextElement(); - //cannot use interning here, because name is probably not interned - if ( _tcscmp(f->name(),name) == 0 && f->stringValue() != NULL ) - count++; - } - _CLDELETE(it); - it = fields(); - - //todo: there must be a better way of doing this, we are doing two iterations of the fields - TCHAR** ret = NULL; - if ( count > 0 ){ - //start again - ret = _CL_NEWARRAY(TCHAR*,count+1); - int32_t i=0; - while ( it->hasMoreElements() ){ - Field* fld=it->nextElement(); - if ( _tcscmp(fld->name(),name)== 0 && fld->stringValue() != NULL ){ - ret[i] = stringDuplicate(fld->stringValue()); - i++; - } - } - ret[count]=NULL; - } - _CLDELETE(it); - return ret; - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/document/Document.h clucene-core-2.3.3.4/src/CLucene/document/Document.h --- clucene-core-0.9.21b/src/CLucene/document/Document.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/document/Document.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_document_Document_ -#define _lucene_document_Document_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Field.h" - -///todo: jlucene has change from using DocumentFieldList/Enumeration -///to using a java List... do we want to do this too? -CL_NS_DEF(document) - -class Document; //predefine -class DocumentFieldEnumeration :LUCENE_BASE{ - class DocumentFieldList :LUCENE_BASE{ - public: - DocumentFieldList(Field* f, DocumentFieldList* n); - ~DocumentFieldList(); - Field* field; - DocumentFieldList* next; - }; - friend class Document; -private: - const DocumentFieldList* fields; -public: - DocumentFieldEnumeration(const DocumentFieldList* fl); - ~DocumentFieldEnumeration(); - bool hasMoreElements() const; - Field* nextElement(); -}; - -/** Documents are the unit of indexing and search. -* -* A Document is a set of fields. Each field has a name and a textual value. -* A field may be {@link Field#isStored() stored} with the document, in which -* case it is returned with search hits on the document. Thus each document -* should typically contain one or more stored fields which uniquely identify -* it. -* -*

Note that fields which are not {@link Field#isStored() stored} are -* not available in documents retrieved from the index, e.g. with {@link -* Hits#doc(int32_t, Document*)}, {@link Searcher#doc(int32_t, Document*)} or {@link -* IndexReader#document(int32_t, Document*)}. -*/ -class Document:LUCENE_BASE { -private: - DocumentFieldEnumeration::DocumentFieldList* fieldList; - float_t boost; -public: - Document(); - ~Document(); - - /** - *

Adds a field to a document. Several fields may be added with - * the same name. In this case, if the fields are indexed, their text is - * treated as though appended for the purposes of search.

- *

Note that add like the removeField(s) methods only makes sense - * prior to adding a document to an index. These methods cannot - * be used to change the content of an existing index! In order to achieve this, - * a document has to be deleted from an index and a new changed version of that - * document has to be added.

- * - */ - void add(Field& field); - /** Returns a field with the given name if any exist in this document, or - * null. If multiple fields exists with this name, this method returns the - * first value added. - * Note: name is case sensitive - */ - Field* getField(const TCHAR* name) const; - - /** Returns the string value of the field with the given name if any exist in - * this document, or null. If multiple fields exist with this name, this - * method returns the first value added. If only binary fields with this name - * exist, returns null. - * Note: name is case sensitive - */ - const TCHAR* get(const TCHAR* field) const; - - /** Returns an Enumeration of all the fields in a document. */ - DocumentFieldEnumeration* fields() const; - /** Prints the fields of a document for human consumption. */ - TCHAR* toString() const; - - /** Sets a boost factor for hits on any field of this document. This value - * will be multiplied into the score of all hits on this document. - * - *

Values are multiplied into the value of {@link Field#getBoost()} of - * each field in this document. Thus, this method in effect sets a default - * boost for the fields of this document. - * - * @see Field#setBoost(float_t) - */ - void setBoost(float_t boost); - - /** Returns the boost factor for hits on any field of this document. - * - *

The default value is 1.0. - * - *

Note: This value is not stored directly with the document in the index. - * Documents returned from {@link IndexReader#document(int32_t, Document*)} and - * {@link Hits#doc(int32_t, Document*)} may thus not have the same value present as when - * this document was indexed. - * - * @see #setBoost(float_t) - */ - float_t getBoost() const; - - - /** - *

Removes field with the specified name from the document. - * If multiple fields exist with this name, this method removes the first field that has been added. - * If there is no field with the specified name, the document remains unchanged.

- *

Note that the removeField(s) methods like the add method only make sense - * prior to adding a document to an index. These methods cannot - * be used to change the content of an existing index! In order to achieve this, - * a document has to be deleted from an index and a new changed version of that - * document has to be added.

- * Note: name is case sensitive - */ - void removeField(const TCHAR* name); - - /** - *

Removes all fields with the given name from the document. - * If there is no field with the specified name, the document remains unchanged.

- *

Note that the removeField(s) methods like the add method only make sense - * prior to adding a document to an index. These methods cannot - * be used to change the content of an existing index! In order to achieve this, - * a document has to be deleted from an index and a new changed version of that - * document has to be added.

- * Note: name is case sensitive - */ - void removeFields(const TCHAR* name); - - /** - * Returns an array of values of the field specified as the method parameter. - * This method can return null. - * Note: name is case sensitive - * - * @param name the name of the field - * @return a String[] of field values - */ - TCHAR** getValues(const TCHAR* name); - - /** - * Empties out the document so that it can be reused - */ - void clear(); -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/document/Field.cpp clucene-core-2.3.3.4/src/CLucene/document/Field.cpp --- clucene-core-0.9.21b/src/CLucene/document/Field.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/document/Field.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,315 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/util/Reader.h" -#include "Field.h" -#include "CLucene/util/Misc.h" -#include "CLucene/util/StringIntern.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(document) - -Field::Field(const TCHAR* Name, const TCHAR* String, bool store, bool index, bool token, const bool storeTermVector) -{ -//Func - Constructor -//Pre - Name != NULL and contains the name of the field -// String != NULL and contains the value of the field -// store indicates if the field must be stored -// index indicates if the field must be indexed -// token indicates if the field must be tokenized -//Post - The instance has been created - - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(String != NULL,"String is NULL"); - CND_PRECONDITION(!(!index && storeTermVector),"cannot store a term vector for fields that are not indexed."); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = stringDuplicate( String ); - _readerValue = NULL; - _streamValue = NULL; - boost=1.0f; - omitNorms = false; - - int cfg = 0; - if ( store ) - cfg |= STORE_YES; - if ( index && token ) - cfg |= INDEX_TOKENIZED; - else if ( index && !token ) - cfg |= INDEX_UNTOKENIZED; - - if ( storeTermVector ) - _CLTHROWA(CL_ERR_IllegalArgument,"Stored term vector is deprecated with using this constructor"); - - setConfig(cfg); -} - -Field::Field(const TCHAR* Name, Reader* reader, bool store, bool index, bool token, const bool storeTermVector) -{ -//Func - Constructor -//Pre - Name != NULL and contains the name of the field -// reader != NULL and contains a Reader -// store indicates if the field must be stored -// index indicates if the field must be indexed -// token indicates if the field must be tokenized -//Post - The instance has been created - - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(reader != NULL, "reader is NULL"); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = NULL; - _readerValue = reader; - _streamValue = NULL; - boost=1.0f; - omitNorms = false; - - int cfg = 0; - if ( store ) - cfg |= STORE_YES; - if ( index && token ) - cfg |= INDEX_TOKENIZED; - else if ( index && !token ) - cfg |= INDEX_UNTOKENIZED; - - if ( storeTermVector ) - _CLTHROWA(CL_ERR_IllegalArgument,"Stored term vector is deprecated with using this constructor"); - - setConfig(cfg); -} - -Field::Field(const TCHAR* Name, Reader* reader, int config) -{ - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(reader != NULL, "reader is NULL"); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = NULL; - _readerValue = reader; - _streamValue = NULL; - boost=1.0f; - omitNorms = false; - - setConfig(config); -} - - -Field::Field(const TCHAR* Name, const TCHAR* Value, int config) -{ - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(Value != NULL, "value is NULL"); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = stringDuplicate( Value ); - _readerValue = NULL; - _streamValue = NULL; - boost=1.0f; - omitNorms = false; - - setConfig(config); -} - -Field::Field(const TCHAR* Name, jstreams::StreamBase* Value, int config) -{ - CND_PRECONDITION(Name != NULL, "Name is NULL"); - CND_PRECONDITION(Value != NULL, "value is NULL"); - - _name = CLStringIntern::intern( Name CL_FILELINE); - _stringValue = NULL; - _readerValue = NULL; - _streamValue = Value; - boost=1.0f; - omitNorms = false; - - setConfig(config); -} - -Field::~Field(){ -//Func - Destructor -//Pre - true -//Post - Instance has been destroyed - - CLStringIntern::unintern(_name); - _CLDELETE_CARRAY(_stringValue); - _CLDELETE(_readerValue); - _CLVDELETE( _streamValue ); -} - - -/*===============FIELDS=======================*/ -const TCHAR* Field::name() { return _name; } ///* Field::streamValue() { return _streamValue; } ///omitNorms=omitNorms; } - -void Field::setBoost(float_t boost) { this->boost = boost; } -float_t Field::getBoost() { return boost; } - -void Field::setConfig(int x){ - int newConfig=0; - - //set storage settings - if ( (x & STORE_YES) || (x & STORE_COMPRESS) ){ - newConfig |= STORE_YES; - if ( x & STORE_COMPRESS ) - newConfig |= STORE_COMPRESS; - }else - newConfig |= STORE_NO; - - if ( (x & INDEX_NO)==0 ){ - bool index=false; - - if ( x & INDEX_NONORMS ){ - newConfig |= INDEX_NONORMS; - index = true; - } - - if ( x & INDEX_TOKENIZED && x & INDEX_UNTOKENIZED ) - _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have an untokenised and tokenised field"); - if ( x & INDEX_TOKENIZED ){ - newConfig |= INDEX_TOKENIZED; - index = true; - } - if ( x & INDEX_UNTOKENIZED ){ - newConfig |= INDEX_UNTOKENIZED; - index = true; - } - if ( !index ) - newConfig |= INDEX_NO; - }else - newConfig |= INDEX_NO; - - if ( newConfig & INDEX_NO && newConfig & STORE_NO ) - _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have a field that is neither indexed nor stored"); - - //set termvector settings - if ( (x & TERMVECTOR_NO) == 0 ){ - bool termVector=false; - if ( x & TERMVECTOR_YES ){ - termVector=true; - } - if ( x & TERMVECTOR_WITH_OFFSETS ){ - newConfig |= TERMVECTOR_WITH_OFFSETS; - termVector=true; - } - if ( x & TERMVECTOR_WITH_POSITIONS ){ - newConfig |= TERMVECTOR_WITH_POSITIONS; - termVector=true; - } - if ( termVector ){ - if ( newConfig & INDEX_NO ) - _CLTHROWA(CL_ERR_IllegalArgument,"cannot store a term vector for fields that are not indexed."); - - newConfig |= TERMVECTOR_YES; - }else - newConfig |= TERMVECTOR_NO; - }else - newConfig |= TERMVECTOR_NO; - - config = newConfig; -} - -TCHAR* Field::toString() { - CL_NS(util)::StringBuffer result; - if (isStored()) { - result.append( _T("stored") ); - } - if (isIndexed()) { - if (result.length() > 0) - result.append( _T(",") ); - result.append( _T("indexed") ); - } - if (isTokenized()) { - if (result.length() > 0) - result.append( _T(",") ); - result.append( _T("tokenized") ); - } - if (isTermVectorStored()) { - if (result.length() > 0) - result.append( _T(",") ); - result.append( _T("termVector") ); - } - if (isStoreOffsetWithTermVector()) { - if (result.length() > 0) - result.appendChar( ',' ); - result.append( _T("termVectorOffsets") ); - } - if (isStorePositionWithTermVector()) { - if (result.length() > 0) - result.appendChar( ',' ); - result.append( _T("termVectorPosition") ); - } - if (isBinary()) { - if (result.length() > 0) - result.appendChar( ',' ); - result.append( _T("binary") ); - } - if (getOmitNorms()) { - result.append( _T(",omitNorms") ); - } - result.appendChar('<'); - result.append(name()); - result.appendChar(':'); - - if (_stringValue != NULL) - result.append(_stringValue); - else if ( _readerValue != NULL ) - result.append( _T("Reader") ); - else if ( _streamValue != NULL ) - result.append( _T("Stream") ); - else - result.append( _T("NULL") ); - - result.appendChar('>'); - return result.toString(); -} - - -Field* Field::Keyword(const TCHAR* Name, const TCHAR* Value) { - return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_UNTOKENIZED); -} - -Field* Field::UnIndexed(const TCHAR* Name, const TCHAR* Value) { - return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_NO); -} - -Field* Field::Text(const TCHAR* Name, const TCHAR* Value, const bool storeTermVector) { - if ( storeTermVector ) - return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES); - else - return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_TOKENIZED); -} - -Field* Field::UnStored(const TCHAR* Name, const TCHAR* Value, const bool storeTermVector) { - if ( storeTermVector ) - return _CLNEW Field(Name,Value,Field::STORE_NO | Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES); - else - return _CLNEW Field(Name,Value,Field::STORE_NO | Field::INDEX_TOKENIZED); -} - -Field* Field::Text(const TCHAR* Name, Reader* Value, const bool storeTermVector) { - if ( storeTermVector ) - return _CLNEW Field(Name,Value,Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES); - else - return _CLNEW Field(Name,Value,Field::INDEX_TOKENIZED); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/document/Field.h clucene-core-2.3.3.4/src/CLucene/document/Field.h --- clucene-core-0.9.21b/src/CLucene/document/Field.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/document/Field.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,262 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_document_Field_ -#define _lucene_document_Field_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Reader.h" -#include "CLucene/util/streambase.h" - -CL_NS_DEF(document) -/** -A field is a section of a Document. Each field has two parts, a name and a -value. Values may be free text, provided as a String or as a Reader, or they -may be atomic keywords, which are not further processed. Such keywords may -be used to represent dates, urls, etc. Fields are optionally stored in the -index, so that they may be returned with hits on the document. - -PORTING: CLucene doesn't directly support compressed fields. However, it is easy -to reproduce this functionality by using the GZip streams in the contrib package. -Also note that binary fields are not read immediately in CLucene, a substream -is pointed directly to the field's data, in affect creating a lazy load ability. -This means that large fields are best saved in binary format (even if they are -text), so that they can be loaded lazily. -*/ -class Field :LUCENE_BASE{ -private: - const TCHAR* _name; - TCHAR* _stringValue; - CL_NS(util)::Reader* _readerValue; - jstreams::StreamBase* _streamValue; - - int config; - float_t boost; - bool omitNorms; -public: - enum Store{ - /** Store the original field value in the index. This is useful for short texts - * like a document's title which should be displayed with the results. The - * value is stored in its original form, i.e. no analyzer is used before it is - * stored. - */ - STORE_YES=1, - /** Do not store the field value in the index. */ - STORE_NO=2, - - /** Store the original field value in the index in a compressed form. This is - * useful for long documents and for binary valued fields. - * NOTE: CLucene does not directly support compressed fields, to store a - * compressed field. - * //TODO: need better documentation on how to add a compressed field - * //because actually we still need to write a GZipOutputStream... - */ - STORE_COMPRESS=4 - }; - - enum Index{ - /** Do not index the field value. This field can thus not be searched, - * but one can still access its contents provided it is - * {@link Field::Store stored}. */ - INDEX_NO=16, - /** Index the field's value so it can be searched. An Analyzer will be used - * to tokenize and possibly further normalize the text before its - * terms will be stored in the index. This is useful for common text. - */ - INDEX_TOKENIZED=32, - /** Index the field's value without using an Analyzer, so it can be searched. - * As no analyzer is used the value will be stored as a single term. This is - * useful for unique Ids like product numbers. - */ - INDEX_UNTOKENIZED=64, - /** Index the field's value without an Analyzer, and disable - * the storing of norms. No norms means that index-time boosting - * and field length normalization will be disabled. The benefit is - * less memory usage as norms take up one byte per indexed field - * for every document in the index. - */ - INDEX_NONORMS=128 - }; - - enum TermVector{ - /** Do not store term vectors. */ - TERMVECTOR_NO=256, - /** Store the term vectors of each document. A term vector is a list - * of the document's terms and their number of occurences in that document. */ - TERMVECTOR_YES=512, - /** - * Store the term vector + token position information - * - * @see #YES - */ - TERMVECTOR_WITH_POSITIONS=1024, - /** - * Store the term vector + Token offset information - * - * @see #YES - */ - TERMVECTOR_WITH_OFFSETS=2048 - }; - - _CL_DEPRECATED( another overload ) Field(const TCHAR* name, const TCHAR* value, bool store, bool index, bool token, const bool storeTermVector=false); - _CL_DEPRECATED( another overload ) Field(const TCHAR* name, CL_NS(util)::Reader* reader, bool store, bool index, bool token, const bool storeTermVector=false); - - Field(const TCHAR* name, const TCHAR* value, int configs); - Field(const TCHAR* name, CL_NS(util)::Reader* reader, int configs); - Field(const TCHAR* name, jstreams::StreamBase* stream, int configs); - ~Field(); - - /** Constructs a String-valued Field that is not tokenized, but is indexed - * and stored. Useful for non-text fields, e.g. date or url. - * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_UNTOKENIZED) - */ - _CL_DEPRECATED( new Field(*) ) static Field* Keyword(const TCHAR* name, const TCHAR* value); - - /** Constructs a String-valued Field that is not tokenized nor indexed, - * but is stored in the index, for return with hits. - * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_NO) - */ - _CL_DEPRECATED( new Field(*) ) static Field* UnIndexed(const TCHAR* name, const TCHAR* value); - - /** Constructs a String-valued Field that is tokenized and indexed, - * and is stored in the index, for return with hits. Useful for short text - * fields, like "title" or "subject". - * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_TOKENIZED) - */ - _CL_DEPRECATED( new Field(*) ) static Field* Text(const TCHAR* name, const TCHAR* value, const bool storeTermVector=false); - - /** Constructs a String-valued Field that is tokenized and indexed, - * but that is not stored in the index. - * @deprecated Use new Field(name,value,Field::STORE_NO | Field::INDEX_TOKENIZED) - */ - _CL_DEPRECATED( new Field(*) ) static Field* UnStored(const TCHAR* name, const TCHAR* value, const bool storeTermVector=false); - - /** Constructs a Reader-valued Field that is tokenized and indexed, but is - * *not* stored in the index verbatim. Useful for longer text fields, like - * "body". - * @deprecated Use new Field(name,value, Field::INDEX_TOKENIZED) - */ - _CL_DEPRECATED( new Field(*) ) static Field* Text(const TCHAR* name, CL_NS(util)::Reader* value, const bool storeTermVector=false); - - /** The name of the field (e.g., "date", "subject", "title", "body", etc.) - * as an interned string. */ - const TCHAR* name(); ///* streamValue(); - - // True iff the value of the field is to be stored in the index for return - // with search hits. It is an error for this to be true if a field is - // Reader-valued. - bool isStored(); - - // True iff the value of the field is to be indexed, so that it may be - // searched on. - bool isIndexed(); - - // True iff the value of the field should be tokenized as text prior to - // indexing. Un-tokenized fields are indexed as a single word and may not be - // Reader-valued. - bool isTokenized(); - - /** True if the value of the field is stored and compressed within the index - * NOTE: CLucene does not actually support compressed fields, Instead, a reader - * will be returned with a pointer to a SubIndexInputStream. A GZipInputStream - * and a UTF8 reader must be used to actually read the content. This flag - * will only be set if the index was created by another lucene implementation. - */ - bool isCompressed(); - - //Set configs using XOR. This resets all the settings - //For example, to use term vectors with positions and offsets do: - //object->setConfig(TERMVECTOR_WITH_POSITIONS | TERMVECTOR_WITH_OFFSETS); - void setConfig(int termVector); - - /** True iff the term or terms used to index this field are stored as a term - * vector, available from {@link IndexReader#getTermFreqVector(int32_t,TCHAR*)}. - * These methods do not provide access to the original content of the field, - * only to terms used to index it. If the original content must be - * preserved, use the stored attribute instead. - * - * @see IndexReader#getTermFreqVector(int32_t, String) - */ - bool isTermVectorStored(); - - /** - * True iff terms are stored as term vector together with their offsets - * (start and end positon in source text). - */ - bool isStoreOffsetWithTermVector(); - - /** - * True iff terms are stored as term vector together with their token positions. - */ - bool isStorePositionWithTermVector(); - - /** Returns the boost factor for hits for this field. - * - *

The default value is 1.0. - * - *

Note: this value is not stored directly with the document in the index. - * Documents returned from {@link IndexReader#document(int)} and - * {@link Hits#doc(int)} may thus not have the same value present as when - * this field was indexed. - * - * @see #setBoost(float) - */ - float_t getBoost(); - - /** Sets the boost factor hits on this field. This value will be - * multiplied into the score of all hits on this this field of this - * document. - * - *

The boost is multiplied by {@link Document#getBoost()} of the document - * containing this field. If a document has multiple fields with the same - * name, all such values are multiplied together. This product is then - * multipled by the value {@link Similarity#lengthNorm(String,int)}, and - * rounded by {@link Similarity#encodeNorm(float)} before it is stored in the - * index. One should attempt to ensure that this product does not overflow - * the range of that encoding. - * - * @see Document#setBoost(float) - * @see Similarity#lengthNorm(String, int) - * @see Similarity#encodeNorm(float) - */ - void setBoost(float_t value); - - /** True iff the value of the filed is stored as binary */ - bool isBinary(); - - /** True if norms are omitted for this indexed field */ - bool getOmitNorms(); - - /** Expert: - * - * If set, omit normalization factors associated with this indexed field. - * This effectively disables indexing boosts and length normalization for this field. - */ - void setOmitNorms(bool omitNorms); - - // Prints a Field for human consumption. - TCHAR* toString(); -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/document/Makefile.am clucene-core-2.3.3.4/src/CLucene/document/Makefile.am --- clucene-core-0.9.21b/src/CLucene/document/Makefile.am 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/document/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -documentdir = $(lsrcdir)/document -documenthdir = $(includedir)/CLucene/document - -libclucene_la_SOURCES += $(documentdir)/DateField.cpp -libclucene_la_SOURCES += $(documentdir)/Document.cpp -libclucene_la_SOURCES += $(documentdir)/Field.cpp - -documenth_HEADERS = $(documentdir)/*.h diff -Nru clucene-core-0.9.21b/src/CLucene/index/CompoundFile.cpp clucene-core-2.3.3.4/src/CLucene/index/CompoundFile.cpp --- clucene-core-0.9.21b/src/CLucene/index/CompoundFile.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/CompoundFile.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,335 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CompoundFile.h" -#include "CLucene/util/Misc.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_DEF(index) - -CompoundFileReader::CSIndexInput::CSIndexInput(CL_NS(store)::IndexInput* base, const int64_t fileOffset, const int64_t length){ - this->base = base; - this->fileOffset = fileOffset; - this->_length = length; -} - -void CompoundFileReader::CSIndexInput::readInternal(uint8_t* b, const int32_t len) -{ - SCOPED_LOCK_MUTEX(base->THIS_LOCK) - - int64_t start = getFilePointer(); - if(start + len > _length) - _CLTHROWA(CL_ERR_IO,"read past EOF"); - base->seek(fileOffset + start); - base->readBytes(b, len); -} -CompoundFileReader::CSIndexInput::~CSIndexInput(){ -} -IndexInput* CompoundFileReader::CSIndexInput::clone() const -{ - return _CLNEW CSIndexInput(*this); -} -CompoundFileReader::CSIndexInput::CSIndexInput(const CSIndexInput& clone): BufferedIndexInput(clone){ - this->base = clone.base; //no need to clone this.. - this->fileOffset = clone.fileOffset; - this->_length = clone._length; -} - -void CompoundFileReader::CSIndexInput::close(){ -} - -CompoundFileReader::CompoundFileReader(Directory* dir, char* name): - entries(true,true) -{ - directory = dir; - STRCPY_AtoA(fileName,name,CL_MAX_PATH); - - bool success = false; - - try { - stream = dir->openInput(name); - - // read the directory and init files - int32_t count = stream->readVInt(); - FileEntry* entry = NULL; - TCHAR tid[CL_MAX_PATH]; - for (int32_t i=0; ireadLong(); - stream->readString(tid,CL_MAX_PATH); - char* aid = STRDUP_TtoA(tid); - - if (entry != NULL) { - // set length of the previous entry - entry->length = offset - entry->offset; - } - - entry = _CLNEW FileEntry(); - entry->offset = offset; - entries.put(aid, entry); - } - - // set the length of the final entry - if (entry != NULL) { - entry->length = stream->length() - entry->offset; - } - - success = true; - - }_CLFINALLY( - if (! success && (stream != NULL)) { - try { - stream->close(); - _CLDELETE(stream); - } catch (CLuceneError& err){ - if ( err.number() != CL_ERR_IO ) - throw err; - //else ignore - } - } - ) -} - -CompoundFileReader::~CompoundFileReader(){ - close(); -} - -Directory* CompoundFileReader::getDirectory(){ - return directory; -} - -const char* CompoundFileReader::getName() const{ - return fileName; -} - -void CompoundFileReader::close(){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - - if (stream != NULL){ - entries.clear(); - stream->close(); - _CLDELETE(stream); - } -} - -IndexInput* CompoundFileReader::openInput(const char* id){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - - if (stream == NULL) - _CLTHROWA(CL_ERR_IO,"Stream closed"); - - const FileEntry* entry = entries.get(id); - if (entry == NULL){ - char buf[CL_MAX_PATH+30]; - strcpy(buf,"No sub-file with id "); - strncat(buf,id,CL_MAX_PATH); - strcat(buf," found"); - _CLTHROWA(CL_ERR_IO,buf); - } - return _CLNEW CSIndexInput(stream, entry->offset, entry->length); -} - -void CompoundFileReader::list(vector* names) const{ - for ( EntriesType::const_iterator i=entries.begin();i!=entries.end();i++ ){ - names->push_back(i->first); - ++i; - } -} - -bool CompoundFileReader::fileExists(const char* name) const{ - return entries.exists(name); -} - -int64_t CompoundFileReader::fileModified(const char* name) const{ - return directory->fileModified(fileName); -} - -void CompoundFileReader::touchFile(const char* name){ - directory->touchFile(fileName); -} - -bool CompoundFileReader::doDeleteFile(const char* name){ - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::doDeleteFile"); -} - -void CompoundFileReader::renameFile(const char* from, const char* to){ - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::renameFile"); -} - -int64_t CompoundFileReader::fileLength(const char* name) const{ - FileEntry* e = entries.get(name); - if (e == NULL){ - char buf[CL_MAX_PATH + 30]; - strcpy(buf,"File "); - strncat(buf,name,CL_MAX_PATH ); - strcat(buf," does not exist"); - _CLTHROWA(CL_ERR_IO,buf); - } - return e->length; -} -IndexOutput* CompoundFileReader::createOutput(const char* name){ - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::createOutput"); -} -LuceneLock* CompoundFileReader::makeLock(const char* name){ - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::makeLock"); -} - -TCHAR* CompoundFileReader::toString() const{ - TCHAR* ret = _CL_NEWARRAY(TCHAR,strlen(fileName)+20); //20=strlen("CompoundFileReader@") - _tcscpy(ret,_T("CompoundFileReader@")); - STRCPY_AtoT(ret+19,fileName,strlen(fileName)); - - return ret; -} - -CompoundFileWriter::CompoundFileWriter(Directory* dir, const char* name): - ids(true),entries(true){ - if (dir == NULL) - _CLTHROWA(CL_ERR_NullPointer,"directory cannot be null"); - if (name == NULL) - _CLTHROWA(CL_ERR_NullPointer,"name cannot be null"); - merged = false; - directory = dir; - strncpy(fileName,name,CL_MAX_PATH); -} - -CompoundFileWriter::~CompoundFileWriter(){ -} - -Directory* CompoundFileWriter::getDirectory(){ - return directory; -} - -/** Returns the name of the compound file. */ -const char* CompoundFileWriter::getName() const{ - return fileName; -} - -void CompoundFileWriter::addFile(const char* file){ - if (merged) - _CLTHROWA(CL_ERR_IO,"Can't add extensions after merge has been called"); - - if (file == NULL) - _CLTHROWA(CL_ERR_NullPointer,"file cannot be null"); - - if (ids.find(file)!=ids.end()){ - char buf[CL_MAX_PATH + 30]; - strcpy(buf,"File "); - strncat(buf,file,CL_MAX_PATH); - strcat(buf," already added"); - _CLTHROWA(CL_ERR_IO,buf); - } - ids.insert(STRDUP_AtoA(file)); - - WriterFileEntry* entry = _CLNEW WriterFileEntry(); - STRCPY_AtoA(entry->file,file,CL_MAX_PATH); - entries.push_back(entry); -} - -void CompoundFileWriter::close(){ - if (merged) - _CLTHROWA(CL_ERR_IO,"Merge already performed"); - - if (entries.size()==0) //isEmpty() - _CLTHROWA(CL_ERR_IO,"No entries to merge have been defined"); - - merged = true; - - // open the compound stream - IndexOutput* os = NULL; - try { - os = directory->createOutput(fileName); - - // Write the number of entries - os->writeVInt(entries.size()); - - // Write the directory with all offsets at 0. - // Remember the positions of directory entries so that we can - // adjust the offsets later - { //msvc6 for scope fix - TCHAR tfile[CL_MAX_PATH]; - for ( CLLinkedList::iterator i=entries.begin();i!=entries.end();i++ ){ - WriterFileEntry* fe = *i; - fe->directoryOffset = os->getFilePointer(); - os->writeLong(0); // for now - STRCPY_AtoT(tfile,fe->file,CL_MAX_PATH); - os->writeString(tfile,_tcslen(tfile)); - } - } - - // Open the files and copy their data into the stream. - // Remember the locations of each file's data section. - { //msvc6 for scope fix - int32_t bufferLength = 1024; - uint8_t buffer[1024]; - for ( CL_NS(util)::CLLinkedList::iterator i=entries.begin();i!=entries.end();i++ ){ - WriterFileEntry* fe = *i; - fe->dataOffset = os->getFilePointer(); - copyFile(fe, os, buffer, bufferLength); - } - } - - { //msvc6 for scope fix - // Write the data offsets into the directory of the compound stream - for ( CLLinkedList::iterator i=entries.begin();i!=entries.end();i++ ){ - WriterFileEntry* fe = *i; - os->seek(fe->directoryOffset); - os->writeLong(fe->dataOffset); - } - } - - - } _CLFINALLY ( - if (os != NULL) try { os->close(); _CLDELETE(os); } catch (...) { } - ); -} - - -void CompoundFileWriter::copyFile(WriterFileEntry* source, IndexOutput* os, uint8_t* buffer, int32_t bufferLength){ - IndexInput* is = NULL; - try { - int64_t startPtr = os->getFilePointer(); - - is = directory->openInput(source->file); - int64_t length = is->length(); - int64_t remainder = length; - int32_t chunk = bufferLength; - - while(remainder > 0) { - int32_t len = (int32_t)min((int64_t)chunk, remainder); - is->readBytes(buffer, len); - os->writeBytes(buffer, len); - remainder -= len; - } - - // Verify that remainder is 0 - if (remainder != 0){ - TCHAR buf[CL_MAX_PATH+100]; - _sntprintf(buf,CL_MAX_PATH+100,_T("Non-zero remainder length after copying") - _T(": %d (id: %s, length: %d, buffer size: %d)"), - remainder,source->file,length,chunk ); - _CLTHROWT(CL_ERR_IO,buf); - } - - // Verify that the output length diff is equal to original file - int64_t endPtr = os->getFilePointer(); - int64_t diff = endPtr - startPtr; - if (diff != length){ - TCHAR buf[100]; - _sntprintf(buf,100,_T("Difference in the output file offsets %d ") - _T("does not match the original file length %d"),diff,length); - _CLTHROWT(CL_ERR_IO,buf); - } - } _CLFINALLY ( - if (is != NULL){ - is->close(); - _CLDELETE(is); - } - ); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/CompoundFile.h clucene-core-2.3.3.4/src/CLucene/index/CompoundFile.h --- clucene-core-0.9.21b/src/CLucene/index/CompoundFile.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/CompoundFile.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,216 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_compoundfile_h -#define _lucene_index_compoundfile_h - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/store/IndexInput.h" -#include "CLucene/store/IndexOutput.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/Lock.h" -#include "CLucene/util/VoidList.h" -#include "CLucene/util/VoidMap.h" - - -CL_NS_DEF(index) - - -/** - * Class for accessing a compound stream. - * This class implements a directory, but is limited to only read operations. - * Directory methods that would normally modify data throw an exception. - * - */ -class CompoundFileReader: public CL_NS(store)::Directory { -private: - /** Implementation of an IndexInput that reads from a portion of the - * compound file. The visibility is left as "package" *only* because - * this helps with testing since JUnit test cases in a different class - * can then access package fields of this class. - */ - class CSIndexInput:public CL_NS(store)::BufferedIndexInput { - private: - CL_NS(store)::IndexInput* base; - int64_t fileOffset; - int64_t _length; - protected: - /** Expert: implements buffer refill. Reads uint8_ts from the current - * position in the input. - * @param b the array to read uint8_ts into - * @param length the number of uint8_ts to read - */ - void readInternal(uint8_t* b, const int32_t len); - void seekInternal(const int64_t pos) - { - } - - public: - CSIndexInput(CL_NS(store)::IndexInput* base, const int64_t fileOffset, const int64_t length); - CSIndexInput(const CSIndexInput& clone); - ~CSIndexInput(); - - /** Closes the stream to futher operations. */ - void close(); - CL_NS(store)::IndexInput* clone() const; - - int64_t length(){ return _length; } - - const char* getDirectoryType() const{ return CompoundFileReader::DirectoryType(); } - }; - - class FileEntry:LUCENE_BASE { - public: - int64_t offset; - int64_t length; - FileEntry(){ - offset=0; - length=0; - } - ~FileEntry(){ - } - }; - - // Base info - CL_NS(store)::Directory* directory; - char fileName[CL_MAX_PATH]; - - CL_NS(store)::IndexInput* stream; - - typedef CL_NS(util)::CLHashMap > EntriesType; - EntriesType entries; -protected: - /** Removes an existing file in the directory-> */ - bool doDeleteFile(const char* name); - -public: - CompoundFileReader(CL_NS(store)::Directory* dir, char* name); - ~CompoundFileReader(); - CL_NS(store)::Directory* getDirectory(); - const char* getName() const; - - void close(); - CL_NS(store)::IndexInput* openInput(const char* id); - - /** Returns an array of strings, one for each file in the directory-> */ - void list(vector* names) const; - /** Returns true iff a file with the given name exists. */ - bool fileExists(const char* name) const; - /** Returns the time the named file was last modified. */ - int64_t fileModified(const char* name) const; - /** Set the modified time of an existing file to now. */ - void touchFile(const char* name); - /** Renames an existing file in the directory-> - If a file already exists with the new name, then it is replaced. - This replacement should be atomic. */ - void renameFile(const char* from, const char* to); - /** Returns the length of a file in the directory. - * @throws IOException if the file does not exist */ - int64_t fileLength(const char* name) const; - /** Not implemented - * @throws UnsupportedOperationException */ - CL_NS(store)::IndexOutput* createOutput(const char* name); - /** Not implemented - * @throws UnsupportedOperationException */ - CL_NS(store)::LuceneLock* makeLock(const char* name); - - TCHAR* toString() const; - - static const char* DirectoryType(){ return "CFS"; } - const char* getDirectoryType() const{ return DirectoryType(); } -}; - - -/** - * Combines multiple files into a single compound file. - * The file format:
- *

    - *
  • VInt fileCount
  • - *
  • {Directory} - * fileCount entries with the following structure:
  • - *
      - *
    • int64_t dataOffset
    • - *
    • UTFString extension
    • - *
    - *
  • {File Data} - * fileCount entries with the raw data of the corresponding file
  • - *
- * - * The fileCount integer indicates how many files are contained in this compound - * file. The {directory} that follows has that many entries. Each directory entry - * contains an encoding identifier, an int64_t pointer to the start of this file's - * data section, and a UTF String with that file's extension. - * - */ -class CompoundFileWriter:LUCENE_BASE { - class WriterFileEntry:LUCENE_BASE { - public: - WriterFileEntry(){ - directoryOffset=0; - dataOffset=0; - } - ~WriterFileEntry(){ - } - /** source file */ - char file[CL_MAX_PATH]; - - /** temporary holder for the start of directory entry for this file */ - int64_t directoryOffset; - - /** temporary holder for the start of this file's data section */ - int64_t dataOffset; - - }; - - CL_NS(store)::Directory* directory; - char fileName[CL_MAX_PATH]; - CL_NS(util)::CLHashSet ids; - CL_NS(util)::CLLinkedList > entries; - bool merged; - /** Copy the contents of the file with specified extension into the - * provided output stream. Use the provided buffer for moving data - * to reduce memory allocation. - */ - void copyFile(WriterFileEntry* source, CL_NS(store)::IndexOutput* os, uint8_t* buffer, int32_t bufferLength); -public: - /** Create the compound stream in the specified file. The file name is the - * entire name (no extensions are added). - */ - CompoundFileWriter(CL_NS(store)::Directory* dir, const char* name); - ~CompoundFileWriter(); - /** Returns the directory of the compound file. */ - CL_NS(store)::Directory* getDirectory(); - const char* getName() const ; - /** Add a source stream. file is the string by which the - * sub-stream will be known in the compound stream. - * - * @throws IllegalStateException if this writer is closed - * @throws NullPointerException if file is null - * @throws IllegalArgumentException if a file with the same name - * has been added already - */ - void addFile(const char* file); - /** Merge files with the extensions added up to now. - * All files with these extensions are combined sequentially into the - * compound stream. After successful merge, the source files - * @throws IllegalStateException if close() had been called before or - * if no file has been added to this object - * are deleted. - */ - void close(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/DocumentWriter.cpp clucene-core-2.3.3.4/src/CLucene/index/DocumentWriter.cpp --- clucene-core-0.9.21b/src/CLucene/index/DocumentWriter.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/DocumentWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,545 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#include "DocumentWriter.h" -#include "FieldInfos.h" -#include "IndexWriter.h" -#include "FieldsWriter.h" -#include "Term.h" -#include "TermInfo.h" -#include "TermInfosWriter.h" - -#include "CLucene/analysis/AnalysisHeader.h" - -#include "CLucene/search/Similarity.h" -#include "TermInfosWriter.h" -#include "FieldsWriter.h" - -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_USE(analysis) -CL_NS_USE(document) -CL_NS_DEF(index) - -/*Posting*/ - -DocumentWriter::Posting::Posting(Term* t, const int32_t position, TermVectorOffsetInfo* offset) -{ -//Func - Constructor -//Pre - t contains a valid reference to a Term -//Post - Instance has been created - freq = 1; - - term = _CL_POINTER(t); - positions.values = (int32_t*)malloc(sizeof(int32_t)); - positions.values[0] = position; - positions.length = 1; - - if ( offset != NULL ){ - this->offsets.values = (TermVectorOffsetInfo*)malloc(sizeof(TermVectorOffsetInfo)); - this->offsets.values[0] = *offset; - this->offsets.length = 1; - } -} -DocumentWriter::Posting::~Posting(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed - - free(this->positions.values); - if ( this->offsets.values != NULL ) - free(this->offsets.values); - _CLDECDELETE(this->term); -} - - - -DocumentWriter::DocumentWriter(Directory* d, Analyzer* a, CL_NS(search)::Similarity* sim, const int32_t mfl): - analyzer(a), - directory(d), - maxFieldLength(mfl), - fieldInfos(NULL), - fieldLengths(NULL), - similarity(sim), - termIndexInterval( IndexWriter::DEFAULT_TERM_INDEX_INTERVAL ), - fieldPositions(NULL), - fieldBoosts(NULL), - termBuffer(_CLNEW Term){ -//Pre - d contains a valid reference to a Directory -// d contains a valid reference to a Analyzer -// mfl > 0 and contains the maximum field length -//Post - Instance has been created - -CND_PRECONDITION(((mfl > 0) || (mfl == IndexWriter::FIELD_TRUNC_POLICY__WARN)), - "mfl is 0 or smaller than IndexWriter::FIELD_TRUNC_POLICY__WARN") - - fieldInfos = NULL; - fieldLengths = NULL; -} - -DocumentWriter::DocumentWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, IndexWriter* writer): - analyzer(a), - directory(d), - maxFieldLength(writer->getMaxFieldLength()), - fieldInfos(NULL), - fieldLengths(NULL), - similarity(writer->getSimilarity()), - termIndexInterval( writer->getTermIndexInterval() ), - fieldPositions(NULL), - fieldBoosts(NULL), - termBuffer(_CLNEW Term){ -//Pre - d contains a valid reference to a Directory -// d contains a valid reference to a Analyzer -// mfl > 0 and contains the maximum field length -//Post - Instance has been created - -CND_PRECONDITION(((maxFieldLength > 0) || (maxFieldLength == IndexWriter::FIELD_TRUNC_POLICY__WARN)), - "mfl is 0 or smaller than IndexWriter::FIELD_TRUNC_POLICY__WARN") - - fieldInfos = NULL; - fieldLengths = NULL; - -} - -DocumentWriter::~DocumentWriter(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed - clearPostingTable(); - _CLDELETE( fieldInfos ); - _CLDELETE_ARRAY(fieldLengths); - _CLDELETE_ARRAY(fieldPositions); - _CLDELETE_ARRAY(fieldBoosts); - _CLDELETE_ARRAY(fieldOffsets); - - _CLDECDELETE(termBuffer); -} - -void DocumentWriter::clearPostingTable(){ - PostingTableType::iterator itr = postingTable.begin(); - while ( itr != postingTable.end() ){ - _CLDELETE(itr->second); - _CLLDECDELETE(itr->first); - - ++itr; - } - postingTable.clear(); -} - -void DocumentWriter::addDocument(const char* segment, Document* doc) { - CND_PRECONDITION(fieldInfos==NULL, "fieldInfos!=NULL") - - // write field names - fieldInfos = _CLNEW FieldInfos(); - fieldInfos->add(doc); - - const char* buf = Misc::segmentname(segment, ".fnm"); - fieldInfos->write(directory, buf); - _CLDELETE_CaARRAY(buf); - - // write field values - FieldsWriter fieldsWriter(directory, segment, fieldInfos); - try { - fieldsWriter.addDocument(doc); - } _CLFINALLY( fieldsWriter.close() ); - - // invert doc into postingTable - clearPostingTable(); // clear postingTable - - size_t size = fieldInfos->size(); - fieldLengths = _CL_NEWARRAY(int32_t,size); // init fieldLengths - fieldPositions = _CL_NEWARRAY(int32_t,size); // init fieldPositions - fieldOffsets = _CL_NEWARRAY(int32_t,size); // init fieldOffsets - memset(fieldPositions, 0, sizeof(int32_t) * size); - - //initialise fieldBoost array with default boost - int32_t fbl = fieldInfos->size(); - float_t fbd = doc->getBoost(); - fieldBoosts = _CL_NEWARRAY(float_t,fbl); // init fieldBoosts - { //msvc6 scope fix - for ( int32_t i=0;isize();i++ ) - fieldLengths[i] = 0; - } //msvc6 scope fix - invertDocument(doc); - - // sort postingTable into an array - Posting** postings = NULL; - int32_t postingsLength = 0; - sortPostingTable(postings,postingsLength); - - //DEBUG: - /*for (int32_t i = 0; i < postingsLength; i++) { - Posting* posting = postings[i]; - - TCHAR* b = posting->term->toString(); - _cout << b << " freq=" << posting->freq; - _CLDELETE(b); - - _cout << " pos=" << posting->positions[0]; - for (int32_t j = 1; j < posting->freq; j++) - _cout <<"," << posting->positions[j]; - - _cout << endl; - }*/ - - - // write postings - writePostings(postings,postingsLength, segment); - - // write norms of indexed fields - writeNorms(segment); - _CLDELETE_ARRAY( postings ); -} - -void DocumentWriter::sortPostingTable(Posting**& array, int32_t& arraySize) { - // copy postingTable into an array - arraySize = postingTable.size(); - array = _CL_NEWARRAY(Posting*,arraySize); - PostingTableType::iterator postings = postingTable.begin(); - int32_t i=0; - while ( postings != postingTable.end() ){ - array[i] = (Posting*)postings->second; - postings++; - i++; - } - // sort the array - quickSort(array, 0, i - 1); -} - - -void DocumentWriter::invertDocument(const Document* doc) { - DocumentFieldEnumeration* fields = doc->fields(); - try { - while (fields->hasMoreElements()) { - Field* field = (Field*)fields->nextElement(); - const TCHAR* fieldName = field->name(); - const int32_t fieldNumber = fieldInfos->fieldNumber(fieldName); - - int32_t length = fieldLengths[fieldNumber]; // length of field - int32_t position = fieldPositions[fieldNumber]; // position in field - if (length>0) - position+=analyzer->getPositionIncrementGap(fieldName); - int32_t offset = fieldOffsets[fieldNumber]; // offset field - - if (field->isIndexed()) { - if (!field->isTokenized()) { // un-tokenized field - //FEATURE: this is bug in java: if using a Reader, then - //field value will not be added. With CLucene, an untokenized - //field with a reader will still be added (if it isn't stored, - //because if it's stored, then the reader has already been read. - const TCHAR* charBuf = NULL; - int64_t dataLen = 0; - - if (field->stringValue() == NULL && !field->isStored() ) { - CL_NS(util)::Reader* r = field->readerValue(); - // this call tries to read the entire stream - // this may invalidate the string for the further calls - // it may be better to do this via a FilterReader - // TODO make a better implementation of this - dataLen = r->read(charBuf, LUCENE_INT32_MAX_SHOULDBE); - if (dataLen == -1) - dataLen = 0; - //todo: would be better to pass the string length, in case - //a null char is passed, but then would need to test the output too. - } else { - charBuf = field->stringValue(); - dataLen = _tcslen(charBuf); - } - - if(field->isStoreOffsetWithTermVector()){ - TermVectorOffsetInfo tio; - tio.setStartOffset(offset); - tio.setEndOffset(offset + dataLen); - addPosition(fieldName, charBuf, position++, &tio ); - }else - addPosition(fieldName, charBuf, position++, NULL); - offset += dataLen; - length++; - } else { // field must be tokenized - CL_NS(util)::Reader* reader; // find or make Reader - bool delReader = false; - if (field->readerValue() != NULL) { - reader = field->readerValue(); - } else if (field->stringValue() != NULL) { - reader = _CLNEW CL_NS(util)::StringReader(field->stringValue(),_tcslen(field->stringValue()),false); - delReader = true; - } else { - _CLTHROWA(CL_ERR_IO,"field must have either String or Reader value"); - } - - try { - // Tokenize field and add to postingTable. - CL_NS(analysis)::TokenStream* stream = analyzer->tokenStream(fieldName, reader); - - try { - CL_NS(analysis)::Token t; - int32_t lastTokenEndOffset = -1; - while (stream->next(&t)) { - position += (t.getPositionIncrement() - 1); - - if(field->isStoreOffsetWithTermVector()){ - TermVectorOffsetInfo tio; - tio.setStartOffset(offset + t.startOffset()); - tio.setEndOffset(offset + t.endOffset()); - addPosition(fieldName, t.termText(), position++, &tio); - }else - addPosition(fieldName, t.termText(), position++, NULL); - - lastTokenEndOffset = t.endOffset(); - length++; - // Apply field truncation policy. - if (maxFieldLength != IndexWriter::FIELD_TRUNC_POLICY__WARN) { - // The client programmer has explicitly authorized us to - // truncate the token stream after maxFieldLength tokens. - if ( length > maxFieldLength) { - break; - } - } else if (length > IndexWriter::DEFAULT_MAX_FIELD_LENGTH) { - const TCHAR* errMsgBase = - _T("Indexing a huge number of tokens from a single") - _T(" field (\"%s\", in this case) can cause CLucene") - _T(" to use memory excessively.") - _T(" By default, CLucene will accept only %s tokens") - _T(" tokens from a single field before forcing the") - _T(" client programmer to specify a threshold at") - _T(" which to truncate the token stream.") - _T(" You should set this threshold via") - _T(" IndexReader::maxFieldLength (set to LUCENE_INT32_MAX") - _T(" to disable truncation, or a value to specify maximum number of fields)."); - - TCHAR defaultMaxAsChar[34]; - _i64tot(IndexWriter::DEFAULT_MAX_FIELD_LENGTH, - defaultMaxAsChar, 10 - ); - int32_t errMsgLen = _tcslen(errMsgBase) - + _tcslen(fieldName) - + _tcslen(defaultMaxAsChar); - TCHAR* errMsg = _CL_NEWARRAY(TCHAR,errMsgLen+1); - - _sntprintf(errMsg, errMsgLen,errMsgBase, fieldName, defaultMaxAsChar); - - _CLTHROWT_DEL(CL_ERR_Runtime,errMsg); - } - } // while token->next - - if(lastTokenEndOffset != -1 ) - offset += lastTokenEndOffset + 1; - } _CLFINALLY ( - stream->close(); - _CLDELETE(stream); - ); - } _CLFINALLY ( - if (delReader) { - _CLDELETE(reader); - } - ); - } // if/else field is to be tokenized - fieldLengths[fieldNumber] = length; // save field length - fieldPositions[fieldNumber] = position; // save field position - fieldBoosts[fieldNumber] *= field->getBoost(); - fieldOffsets[fieldNumber] = offset; - } // if field is to beindexed - } // while more fields available - } _CLFINALLY ( - _CLDELETE(fields); - ); -} // Document:;invertDocument - - -void DocumentWriter::addPosition(const TCHAR* field, - const TCHAR* text, - const int32_t position, - TermVectorOffsetInfo* offset) { - - termBuffer->set(field,text,false); - - Posting* ti = postingTable.get(termBuffer); - if (ti != NULL) { // word seen before - int32_t freq = ti->freq; - if (ti->positions.length == freq) { - // positions array is full, realloc its size - ti->positions.length = freq*2; - ti->positions.values = (int32_t*)realloc(ti->positions.values, ti->positions.length * sizeof(int32_t)); - } - ti->positions.values[freq] = position; // add new position - - if (offset != NULL) { - if (ti->offsets.length == freq){ - ti->offsets.length = freq*2; - ti->offsets.values = (TermVectorOffsetInfo*)realloc(ti->offsets.values, ti->offsets.length * sizeof(TermVectorOffsetInfo)); - } - ti->offsets[freq] = *offset; - } - - ti->freq = freq + 1; // update frequency - } else { // word not seen before - Term* term = _CLNEW Term( field, text, false); - postingTable.put(term, _CLNEW Posting(term, position, offset)); - } -} - -//static -void DocumentWriter::quickSort(Posting**& postings, const int32_t lo, const int32_t hi) { - if(lo >= hi) - return; - - int32_t mid = (lo + hi) / 2; - - if(postings[lo]->term->compareTo(postings[mid]->term) > 0) { - Posting* tmp = postings[lo]; - postings[lo] = postings[mid]; - postings[mid] = tmp; - } - - if(postings[mid]->term->compareTo(postings[hi]->term) > 0) { - Posting* tmp = postings[mid]; - postings[mid] = postings[hi]; - postings[hi] = tmp; - - if(postings[lo]->term->compareTo(postings[mid]->term) > 0) { - Posting* tmp2 = postings[lo]; - postings[lo] = postings[mid]; - postings[mid] = tmp2; - } - } - - int32_t left = lo + 1; - int32_t right = hi - 1; - - if (left >= right) - return; - - const Term* partition = postings[mid]->term; //not kept, so no need to finalize - - for( ;; ) { - while(postings[right]->term->compareTo(partition) > 0) - --right; - - while(left < right && postings[left]->term->compareTo(partition) <= 0) - ++left; - - if(left < right) { - Posting* tmp = postings[left]; - postings[left] = postings[right]; - postings[right] = tmp; - --right; - } else { - break; - } - } - - quickSort(postings, lo, left); - quickSort(postings, left + 1, hi); -} - -void DocumentWriter::writePostings(Posting** postings, const int32_t postingsLength, const char* segment){ - #define __DOCLOSE(obj) if(obj!=NULL){ try{ obj->close(); _CLDELETE(obj);} catch(CLuceneError &e){ierr=e.number();err=e.what();} catch(...){err="Unknown error while closing posting tables";} } - IndexOutput* freq = NULL; - IndexOutput* prox = NULL; - TermInfosWriter* tis = NULL; - TermVectorsWriter* termVectorWriter = NULL; - try { - //open files for inverse index storage - const char* buf = Misc::segmentname( segment, ".frq"); - freq = directory->createOutput( buf ); - _CLDELETE_CaARRAY( buf ); - - buf = Misc::segmentname( segment, ".prx"); - prox = directory->createOutput( buf ); - _CLDELETE_CaARRAY( buf ); - - tis = _CLNEW TermInfosWriter(directory, segment, fieldInfos, - termIndexInterval); - TermInfo* ti = _CLNEW TermInfo(); - const TCHAR* currentField = NULL; - for (int32_t i = 0; i < postingsLength; i++) { - Posting* posting = postings[i]; - - // add an entry to the dictionary with pointers to prox and freq files - ti->set(1, freq->getFilePointer(), prox->getFilePointer(), -1); - tis->add(posting->term, ti); - - // add an entry to the freq file - int32_t postingFreq = posting->freq; - if (postingFreq == 1) // optimize freq=1 - freq->writeVInt(1); // set low bit of doc num. - else { - freq->writeVInt(0); // the document number - freq->writeVInt(postingFreq); // frequency in doc - } - - int32_t lastPosition = 0; // write positions - for (int32_t j = 0; j < postingFreq; ++j) { // use delta-encoding - prox->writeVInt(posting->positions.values[j] - lastPosition); - lastPosition = posting->positions.values[j]; - } - - // check to see if we switched to a new field - const TCHAR* termField = posting->term->field(); - if ( currentField == NULL || _tcscmp(currentField,termField) != 0 ) { //todo, can we do an intern'd check? - // changing field - see if there is something to save - currentField = termField; - FieldInfo* fi = fieldInfos->fieldInfo(currentField); - - if (fi->storeTermVector) { - if (termVectorWriter == NULL) { - termVectorWriter = - _CLNEW TermVectorsWriter(directory, segment, fieldInfos); - termVectorWriter->openDocument(); - } - termVectorWriter->openField(currentField); - } else if (termVectorWriter != NULL) { - termVectorWriter->closeField(); - } - } - if (termVectorWriter != NULL && termVectorWriter->isFieldOpen()) { - termVectorWriter->addTerm(posting->term->text(), postingFreq, &posting->positions, &posting->offsets); - } - } - if (termVectorWriter != NULL) - termVectorWriter->closeDocument(); - _CLDELETE(ti); - }_CLFINALLY ( - const char* err=NULL; - int32_t ierr=0; - - // make an effort to close all streams we can but remember and re-throw - // the first exception encountered in this process - __DOCLOSE(freq); - __DOCLOSE(prox); - __DOCLOSE(tis); - __DOCLOSE(termVectorWriter); - if ( err != NULL ) - _CLTHROWA(ierr,err); - ); -} - -void DocumentWriter::writeNorms(const char* segment) { - char fn[CL_MAX_PATH]; - for(int32_t n = 0; n < fieldInfos->size(); n++){ - FieldInfo* fi = fieldInfos->fieldInfo(n); - if(fi->isIndexed && !fi->omitNorms){ - float_t norm = fieldBoosts[n] * similarity->lengthNorm(fi->name, fieldLengths[n]); - - _snprintf(fn,CL_MAX_PATH,"%s.f%d",segment,n); - IndexOutput* norms = directory->createOutput(fn); - try { - norms->writeByte(CL_NS(search)::Similarity::encodeNorm(norm)); - }_CLFINALLY ( - norms->close(); - _CLDELETE(norms); - ) - } - } -} -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/DocumentWriter.h clucene-core-2.3.3.4/src/CLucene/index/DocumentWriter.h --- clucene-core-0.9.21b/src/CLucene/index/DocumentWriter.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/DocumentWriter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_DocumentWriter_ -#define _lucene_index_DocumentWriter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/document/Document.h" -#include "CLucene/store/Directory.h" -#include "FieldInfos.h" -#include "IndexWriter.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/document/Field.h" -#include "TermInfo.h" -#include "CLucene/search/Similarity.h" -#include "TermInfosWriter.h" -#include "FieldsWriter.h" -#include "Term.h" - -CL_NS_DEF(index) - - -class DocumentWriter :LUCENE_BASE{ -public: - class Posting :LUCENE_BASE{ // info about a Term in a doc - public: - Term* term; // the Term - int32_t freq; // its frequency in doc - Array positions; // positions it occurs at - Array offsets; - - Posting(Term* t, const int32_t position, TermVectorOffsetInfo* offset); - ~Posting(); - }; - -private: - CL_NS(analysis)::Analyzer* analyzer; - CL_NS(store)::Directory* directory; - FieldInfos* fieldInfos; //array - const int32_t maxFieldLength; - CL_NS(search)::Similarity* similarity; - int32_t termIndexInterval; - - // Keys are Terms, values are Postings. - // Used to buffer a document before it is written to the index. - typedef CL_NS(util)::CLHashtable PostingTableType; - PostingTableType postingTable; - int32_t* fieldLengths; //array - int32_t* fieldPositions; //array - int32_t* fieldOffsets; //array - float_t* fieldBoosts; //array - - Term* termBuffer; -public: - /** This ctor used by test code only. - * - * @param directory The directory to write the document information to - * @param analyzer The analyzer to use for the document - * @param similarity The Similarity function - * @param maxFieldLength The maximum number of tokens a field may have - */ - DocumentWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, CL_NS(search)::Similarity* similarity, const int32_t maxFieldLength); - - DocumentWriter(CL_NS(store)::Directory* directory, CL_NS(analysis)::Analyzer* analyzer, IndexWriter* writer); - ~DocumentWriter(); - - void addDocument(const char* segment, CL_NS(document)::Document* doc); - - -private: - // Tokenizes the fields of a document into Postings. - void invertDocument(const CL_NS(document)::Document* doc); - - void addPosition(const TCHAR* field, const TCHAR* text, const int32_t position, TermVectorOffsetInfo* offset); - - void sortPostingTable(Posting**& array, int32_t& arraySize); - - static void quickSort(Posting**& postings, const int32_t lo, const int32_t hi); - - void writePostings(Posting** postings, const int32_t postingsLength, const char* segment); - - void writeNorms(const char* segment); - - void clearPostingTable(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/FieldInfo.h clucene-core-2.3.3.4/src/CLucene/index/FieldInfo.h --- clucene-core-0.9.21b/src/CLucene/index/FieldInfo.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/FieldInfo.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_FieldInfo_ -#define _lucene_index_FieldInfo_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#error "This header is deprecated, use FieldInfos.h instead" - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/FieldInfos.cpp clucene-core-2.3.3.4/src/CLucene/index/FieldInfos.cpp --- clucene-core-0.9.21b/src/CLucene/index/FieldInfos.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/FieldInfos.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,196 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldInfos.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Misc.h" -#include "CLucene/util/StringIntern.h" - -CL_NS_USE(store) -CL_NS_USE(document) -CL_NS_USE(util) -CL_NS_DEF(index) - - -FieldInfo::FieldInfo( const TCHAR* _fieldName, - const bool _isIndexed, - const int32_t _fieldNumber, - const bool _storeTermVector, - const bool _storeOffsetWithTermVector, - const bool _storePositionWithTermVector, - const bool _omitNorms): - name(CLStringIntern::intern(_fieldName CL_FILELINE)), - isIndexed(_isIndexed), - number(_fieldNumber), - storeTermVector(_storeTermVector), - storeOffsetWithTermVector(_storeOffsetWithTermVector), - storePositionWithTermVector(_storeTermVector), - omitNorms(_omitNorms) -{ -} - -FieldInfo::~FieldInfo(){ - CL_NS(util)::CLStringIntern::unintern(name); -} - -FieldInfos::FieldInfos(): - byName(false,false),byNumber(true) { -} - -FieldInfos::~FieldInfos(){ - byName.clear(); - byNumber.clear(); -} - -FieldInfos::FieldInfos(Directory* d, const char* name): - byName(false,false),byNumber(true) -{ - IndexInput* input = d->openInput(name); - try { - read(input); - } _CLFINALLY ( - input->close(); - _CLDELETE(input); - ); -} - -void FieldInfos::add(const Document* doc) { - DocumentFieldEnumeration* fields = doc->fields(); - Field* field; - while (fields->hasMoreElements()) { - field = fields->nextElement(); - add(field->name(), field->isIndexed(), field->isTermVectorStored()); - } - _CLDELETE(fields); -} - -void FieldInfos::add( const TCHAR* name, const bool isIndexed, const bool storeTermVector, - bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool omitNorms) { - FieldInfo* fi = fieldInfo(name); - if (fi == NULL) { - addInternal(name, isIndexed, storeTermVector, - storePositionWithTermVector, - storeOffsetWithTermVector, omitNorms); - } else { - if (fi->isIndexed != isIndexed) { - fi->isIndexed = true; // once indexed, always index - } - if (fi->storeTermVector != storeTermVector) { - fi->storeTermVector = true; // once vector, always vector - } - if (fi->storePositionWithTermVector != storePositionWithTermVector) { - fi->storePositionWithTermVector = true; // once vector, always vector - } - if (fi->storeOffsetWithTermVector != storeOffsetWithTermVector) { - fi->storeOffsetWithTermVector = true; // once vector, always vector - } - if (fi->omitNorms != omitNorms) { - fi->omitNorms = false; // once norms are stored, always store - } - } -} - -void FieldInfos::add(const TCHAR** names,const bool isIndexed, const bool storeTermVectors, - bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool omitNorms) { - int32_t i=0; - while ( names[i] != NULL ){ - add(names[i], isIndexed, storeTermVectors, storePositionWithTermVector, - storeOffsetWithTermVector, omitNorms); - ++i; - } -} - -int32_t FieldInfos::fieldNumber(const TCHAR* fieldName)const { - FieldInfo* fi = fieldInfo(fieldName); - return (fi!=NULL)?fi->number:-1; -} - - -FieldInfo* FieldInfos::fieldInfo(const TCHAR* fieldName) const { - FieldInfo* ret = byName.get(fieldName); - return ret; -} -const TCHAR* FieldInfos::fieldName(const int32_t fieldNumber)const { - FieldInfo* fi = fieldInfo(fieldNumber); - return (fi==NULL)?LUCENE_BLANK_STRING:fi->name; -} - -FieldInfo* FieldInfos::fieldInfo(const int32_t fieldNumber) const { - if ( fieldNumber < 0 || (size_t)fieldNumber >= byNumber.size() ) - return NULL; - return byNumber[fieldNumber]; -} - -int32_t FieldInfos::size()const { - return byNumber.size(); -} - -void FieldInfos::write(Directory* d, const char* name) const{ - IndexOutput* output = d->createOutput(name); - try { - write(output); - } _CLFINALLY ( - output->close(); - _CLDELETE(output); - ); -} - -void FieldInfos::write(IndexOutput* output) const{ - output->writeVInt(size()); - FieldInfo* fi; - uint8_t bits; - for (int32_t i = 0; i < size(); ++i) { - fi = fieldInfo(i); - bits = 0x0; - if (fi->isIndexed) bits |= IS_INDEXED; - if (fi->storeTermVector) bits |= STORE_TERMVECTOR; - if (fi->storePositionWithTermVector) bits |= STORE_POSITIONS_WITH_TERMVECTOR; - if (fi->storeOffsetWithTermVector) bits |= STORE_OFFSET_WITH_TERMVECTOR; - if (fi->omitNorms) bits |= OMIT_NORMS; - - output->writeString(fi->name,_tcslen(fi->name)); - output->writeByte(bits); - } -} - -void FieldInfos::read(IndexInput* input) { - int32_t size = input->readVInt(); - uint8_t bits; - bool isIndexed,storeTermVector,storePositionsWithTermVector,storeOffsetWithTermVector,omitNorms; - for (int32_t i = 0; i < size; ++i){ - TCHAR* name = input->readString(); //we could read name into a string buffer, but we can't be sure what the maximum field length will be. - bits = input->readByte(); - isIndexed = (bits & IS_INDEXED) != 0; - storeTermVector = (bits & STORE_TERMVECTOR) != 0; - storePositionsWithTermVector = (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0; - storeOffsetWithTermVector = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0; - omitNorms = (bits & OMIT_NORMS) != 0; - - addInternal(name, isIndexed, storeTermVector, storePositionsWithTermVector, storeOffsetWithTermVector, omitNorms); - _CLDELETE_CARRAY(name); - } -} -void FieldInfos::addInternal( const TCHAR* name, const bool isIndexed, const bool storeTermVector, - bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool omitNorms) { - FieldInfo* fi = _CLNEW FieldInfo(name, isIndexed, byNumber.size(), storeTermVector, - storePositionWithTermVector, storeOffsetWithTermVector, omitNorms); - byNumber.push_back(fi); - byName.put( fi->name, fi); -} - -bool FieldInfos::hasVectors() const{ - for (int32_t i = 0; i < size(); i++) { - if (fieldInfo(i)->storeTermVector) - return true; - } - return false; -} -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/FieldInfos.h clucene-core-2.3.3.4/src/CLucene/index/FieldInfos.h --- clucene-core-0.9.21b/src/CLucene/index/FieldInfos.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/FieldInfos.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,172 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_FieldInfos_ -#define _lucene_index_FieldInfos_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/VoidList.h" - -CL_NS_DEF(index) - -class FieldInfo :LUCENE_BASE{ - public: - //name of the field - const TCHAR* name; - - //Is field indexed? true = yes false = no - bool isIndexed; - - //field number - const int32_t number; - - // true if term vector for this field should be stored - bool storeTermVector; - bool storeOffsetWithTermVector; - bool storePositionWithTermVector; - - bool omitNorms; // omit norms associated with indexed fields - - //Func - Constructor - // Initialises FieldInfo. - // na holds the name of the field - // tk indicates whether this field is indexed or not - // nu indicates its number - //Pre - na != NULL and holds the name of the field - // tk is true or false - // number >= 0 - //Post - The FieldInfo instance has been created and initialized. - // name holds the duplicated string of na - // isIndexed = tk - // number = nu - FieldInfo(const TCHAR* fieldName, - const bool isIndexed, - const int32_t fieldNumber, - const bool storeTermVector, - const bool storeOffsetWithTermVector, - const bool storePositionWithTermVector, - const bool omitNorms); - - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - ~FieldInfo(); -}; - -/** Access to the Field Info file that describes document fields and whether or -* not they are indexed. Each segment has a separate Field Info file. Objects -* of this class are thread-safe for multiple readers, but only one thread can -* be adding documents at a time, with no other reader or writer threads -* accessing this object. -*/ -class FieldInfos :LUCENE_BASE{ -private: - //we now use internd field names, so we can use the voidCompare - //to directly compare the strings - typedef CL_NS(util)::CLHashMap defByName; - defByName byName; - - CL_NS(util)::CLArrayList > byNumber; - -public: - enum{ - IS_INDEXED = 0x1, - STORE_TERMVECTOR = 0x2, - STORE_POSITIONS_WITH_TERMVECTOR = 0x4, - STORE_OFFSET_WITH_TERMVECTOR = 0x8, - OMIT_NORMS = 0x10 - }; - - FieldInfos(); - ~FieldInfos(); - - /** - * Construct a FieldInfos object using the directory and the name of the file - * IndexInput - * @param d The directory to open the IndexInput from - * @param name The name of the file to open the IndexInput from in the Directory - * @throws IOException - * - * @see #read - */ - FieldInfos(CL_NS(store)::Directory* d, const char* name); - - int32_t fieldNumber(const TCHAR* fieldName)const; - - /** - * Return the fieldinfo object referenced by the fieldNumber. - * @param fieldNumber - * @return the FieldInfo object or null when the given fieldNumber - * doesn't exist. - */ - FieldInfo* fieldInfo(const TCHAR* fieldName) const; - - /** - * Return the fieldName identified by its number. - * - * @param fieldNumber - * @return the fieldName or an empty string when the field - * with the given number doesn't exist. - */ - const TCHAR* fieldName(const int32_t fieldNumber)const; - - FieldInfo* fieldInfo(const int32_t fieldNumber) const; - - int32_t size()const; - - bool hasVectors() const; - - // Adds field info for a Document. - void add(const CL_NS(document)::Document* doc); - - // Merges in information from another FieldInfos. - void add(FieldInfos* other); - - - /** If the field is not yet known, adds it. If it is known, checks to make - * sure that the isIndexed flag is the same as was given previously for this - * field. If not - marks it as being indexed. Same goes for the TermVector - * parameters. - * - * @param name The name of the field - * @param isIndexed true if the field is indexed - * @param storeTermVector true if the term vector should be stored - * @param storePositionWithTermVector true if the term vector with positions should be stored - * @param storeOffsetWithTermVector true if the term vector with offsets should be stored - */ - void add(const TCHAR* name, const bool isIndexed, const bool storeTermVector=false, - bool storePositionWithTermVector=false, bool storeOffsetWithTermVector=false, bool omitNorms=false); - - /** - * Assumes the fields are not storing term vectors - * @param names The names of the fields - * @param isIndexed true if the field is indexed - * @param storeTermVector true if the term vector should be stored - * - * @see #add(String, boolean) - */ - void add(const TCHAR** names, const bool isIndexed, const bool storeTermVector=false, - bool storePositionWithTermVector=false, bool storeOffsetWithTermVector=false, bool omitNorms=false); - - void write(CL_NS(store)::Directory* d, const char* name) const; - void write(CL_NS(store)::IndexOutput* output) const; - -private: - void read(CL_NS(store)::IndexInput* input); - void addInternal( const TCHAR* name,const bool isIndexed, const bool storeTermVector, - const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms); - -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/FieldsReader.cpp clucene-core-2.3.3.4/src/CLucene/index/FieldsReader.cpp --- clucene-core-0.9.21b/src/CLucene/index/FieldsReader.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/FieldsReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,207 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldsReader.h" - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Misc.h" -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "FieldInfos.h" -#include "FieldsWriter.h" - -CL_NS_USE(store) -CL_NS_USE(document) -CL_NS_USE(util) -CL_NS_DEF(index) - -FieldsReader::FieldsReader(Directory* d, const char* segment, FieldInfos* fn): - fieldInfos(fn) -{ -//Func - Constructor -//Pre - d contains a valid reference to a Directory -// segment != NULL -// fn contains a valid reference to a FieldInfos -//Post - The instance has been created - - CND_PRECONDITION(segment != NULL, "segment != NULL"); - - const char* buf = Misc::segmentname(segment,".fdt"); - fieldsStream = d->openInput( buf ); - _CLDELETE_CaARRAY( buf ); - - buf = Misc::segmentname(segment,".fdx"); - indexStream = d->openInput( buf ); - _CLDELETE_CaARRAY( buf ); - - _size = (int32_t)indexStream->length()/8; -} - -FieldsReader::~FieldsReader(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed - - close(); -} - -void FieldsReader::close() { -//Func - Closes the FieldsReader -//Pre - true -//Post - The FieldsReader has been closed - - if (fieldsStream){ - fieldsStream->close(); - _CLDELETE(fieldsStream); - } - if(indexStream){ - indexStream->close(); - _CLDELETE(indexStream); - } -} - -int32_t FieldsReader::size() const{ - return _size; -} - -bool FieldsReader::doc(int32_t n, Document* doc) { - if ( n * 8L > indexStream->length() ) - return false; - indexStream->seek(n * 8L); - int64_t position = indexStream->readLong(); - fieldsStream->seek(position); - - int32_t numFields = fieldsStream->readVInt(); - for (int32_t i = 0; i < numFields; i++) { - int32_t fieldNumber = fieldsStream->readVInt(); - FieldInfo* fi = fieldInfos->fieldInfo(fieldNumber); - - if ( fi == NULL ) - _CLTHROWA(CL_ERR_IO, "Field stream is invalid"); - - uint8_t bits = fieldsStream->readByte(); - if ((bits & FieldsWriter::FIELD_IS_BINARY) != 0) { - int32_t fieldLen = fieldsStream->readVInt(); - FieldsReader::FieldsStreamHolder* subStream = new FieldsReader::FieldsStreamHolder(fieldsStream, fieldLen); - uint8_t bits = Field::STORE_YES; - Field* f = _CLNEW Field( - fi->name, // name - subStream, // read value - bits); - - doc->add(*f); - - //now skip over the rest of the field - if ( fieldsStream->getFilePointer() + fieldLen == fieldsStream->length() ){ - fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen - 1); //set to eof - fieldsStream->readByte(); - }else - fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen); - }else{ - uint8_t bits = Field::STORE_YES; - - if (fi->isIndexed && (bits & FieldsWriter::FIELD_IS_TOKENIZED)!=0 ) - bits |= Field::INDEX_TOKENIZED; - else if (fi->isIndexed && (bits & FieldsWriter::FIELD_IS_TOKENIZED)==0 ) - bits |= Field::INDEX_UNTOKENIZED; - else - bits |= Field::INDEX_NO; - - if (fi->storeTermVector) { - if (fi->storeOffsetWithTermVector) { - if (fi->storePositionWithTermVector) { - bits |= Field::TERMVECTOR_WITH_OFFSETS; - bits |= Field::TERMVECTOR_WITH_POSITIONS; - }else { - bits |= Field::TERMVECTOR_WITH_OFFSETS; - } - }else if (fi->storePositionWithTermVector) { - bits |= Field::TERMVECTOR_WITH_POSITIONS; - }else { - bits |= Field::TERMVECTOR_YES; - } - }else { - bits |= Field::TERMVECTOR_NO; - } - if ( (bits & FieldsWriter::FIELD_IS_COMPRESSED) != 0 ) { - bits |= Field::STORE_COMPRESS; - int32_t fieldLen = fieldsStream->readVInt(); - FieldsStreamHolder* subStream = new FieldsStreamHolder(fieldsStream, fieldLen); - - //todo: we dont have gzip inputstream available, must alert user - //to somehow use a gzip inputstream - Field* f = _CLNEW Field( - fi->name, // name - subStream, // read value - bits); - - f->setOmitNorms(fi->omitNorms); - doc->add(*f); - - //now skip over the rest of the field - if ( fieldsStream->getFilePointer() + fieldLen == fieldsStream->length() ){ - fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen - 1); //set to eof - fieldsStream->readByte(); - }else - fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen); - }else { - TCHAR* fvalue = fieldsStream->readString(true); - Field* f = _CLNEW Field( - fi->name, // name - fvalue, // read value - bits); - _CLDELETE_CARRAY(fvalue); //todo: could optimise this - f->setOmitNorms(fi->omitNorms); - doc->add(*f); - } - - } - } - return true; -} - -FieldsReader::FieldsStreamHolder::FieldsStreamHolder(IndexInput* indexInput, int32_t subLength){ - this->indexInput = indexInput->clone(); - this->indexInputStream = new IndexInputStream(this->indexInput); - this->subStream = new jstreams::SubInputStream(indexInputStream, subLength); - - this->size = subStream->getSize(); - this->position = subStream->getPosition(); - this->error = subStream->getError(); - this->status = subStream->getStatus(); -} -FieldsReader::FieldsStreamHolder::~FieldsStreamHolder(){ - delete subStream; - delete indexInputStream; - - indexInput->close(); - _CLDELETE(indexInput); -} -int32_t FieldsReader::FieldsStreamHolder::read(const char*& start, int32_t _min, int32_t _max){ - int32_t ret = subStream->read(start,_min,_max); - this->position = subStream->getPosition(); - this->error = subStream->getError(); - this->status = subStream->getStatus(); - return ret; -} -int64_t FieldsReader::FieldsStreamHolder::skip(int64_t ntoskip){ - int64_t ret = subStream->skip(ntoskip); - this->position = subStream->getPosition(); - this->error = subStream->getError(); - this->status = subStream->getStatus(); - return ret; -} -int64_t FieldsReader::FieldsStreamHolder::reset(int64_t pos){ - int64_t ret = subStream->reset(pos); - this->position = subStream->getPosition(); - this->error = subStream->getError(); - this->status = subStream->getStatus(); - return ret; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/FieldsReader.h clucene-core-2.3.3.4/src/CLucene/index/FieldsReader.h --- clucene-core-0.9.21b/src/CLucene/index/FieldsReader.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/FieldsReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_FieldsReader_ -#define _lucene_index_FieldsReader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidMap.h" -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "FieldInfos.h" -#include "CLucene/util/subinputstream.h" -#include "CLucene/store/IndexInput.h" - -CL_NS_DEF(index) - - /** - * Class responsible for access to stored document fields. - * - * It uses <segment>.fdt and <segment>.fdx; files. - */ - class FieldsReader :LUCENE_BASE{ - private: - const FieldInfos* fieldInfos; - CL_NS(store)::IndexInput* fieldsStream; - CL_NS(store)::IndexInput* indexStream; - int32_t _size; - - class FieldsStreamHolder: public jstreams::StreamBase{ - CL_NS(store)::IndexInput* indexInput; - CL_NS(store)::IndexInputStream* indexInputStream; - jstreams::SubInputStream* subStream; - public: - FieldsStreamHolder(CL_NS(store)::IndexInput* indexInput, int32_t subLength); - ~FieldsStreamHolder(); - int32_t read(const char*& start, int32_t _min, int32_t _max); - int64_t skip(int64_t ntoskip); - int64_t reset(int64_t pos); - }; - public: - FieldsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fn); - ~FieldsReader(); - void close(); - int32_t size() const; - ///loads the fields from n'th document into doc. returns true on success. - bool doc(int32_t n, CL_NS(document)::Document* doc); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/FieldsWriter.cpp clucene-core-2.3.3.4/src/CLucene/index/FieldsWriter.cpp --- clucene-core-0.9.21b/src/CLucene/index/FieldsWriter.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/FieldsWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,171 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldsWriter.h" - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Reader.h" -#include "CLucene/util/Misc.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/IndexOutput.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "FieldInfos.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_USE(document) -CL_NS_DEF(index) - -FieldsWriter::FieldsWriter(Directory* d, const char* segment, FieldInfos* fn): - fieldInfos(fn) -{ -//Func - Constructor -//Pre - d contains a valid reference to a directory -// segment != NULL and contains the name of the segment -//Post - fn contains a valid reference toa a FieldInfos - - CND_PRECONDITION(segment != NULL,"segment is NULL"); - - const char* buf = Misc::segmentname(segment,".fdt"); - fieldsStream = d->createOutput ( buf ); - _CLDELETE_CaARRAY( buf ); - - buf = Misc::segmentname(segment,".fdx"); - indexStream = d->createOutput( buf ); - _CLDELETE_CaARRAY( buf ); - - CND_CONDITION(indexStream != NULL,"indexStream is NULL"); -} - -FieldsWriter::~FieldsWriter(){ -//Func - Destructor -//Pre - true -//Post - Instance has been destroyed - - close(); -} - -void FieldsWriter::close() { -//Func - Closes all streams and frees all resources -//Pre - true -//Post - All streams have been closed all resources have been freed - - //Check if fieldsStream is valid - if (fieldsStream){ - //Close fieldsStream - fieldsStream->close(); - _CLDELETE( fieldsStream ); - } - - //Check if indexStream is valid - if (indexStream){ - //Close indexStream - indexStream->close(); - _CLDELETE( indexStream ); - } -} - -void FieldsWriter::addDocument(Document* doc) { -//Func - Adds a document -//Pre - doc contains a valid reference to a Document -// indexStream != NULL -// fieldsStream != NULL -//Post - The document doc has been added - - CND_PRECONDITION(indexStream != NULL,"indexStream is NULL"); - CND_PRECONDITION(fieldsStream != NULL,"fieldsStream is NULL"); - - indexStream->writeLong(fieldsStream->getFilePointer()); - - int32_t storedCount = 0; - DocumentFieldEnumeration* fields = doc->fields(); - while (fields->hasMoreElements()) { - Field* field = fields->nextElement(); - if (field->isStored()) - storedCount++; - } - _CLDELETE(fields); - fieldsStream->writeVInt(storedCount); - - fields = doc->fields(); - while (fields->hasMoreElements()) { - Field* field = fields->nextElement(); - if (field->isStored()) { - fieldsStream->writeVInt(fieldInfos->fieldNumber(field->name())); - - uint8_t bits = 0; - if (field->isTokenized()) - bits |= FieldsWriter::FIELD_IS_TOKENIZED; - if (field->isBinary()) - bits |= FieldsWriter::FIELD_IS_BINARY; - if (field->isCompressed()) - bits |= FieldsWriter::FIELD_IS_COMPRESSED; - - fieldsStream->writeByte(bits); - - if ( field->isCompressed() ){ - _CLTHROWA(CL_ERR_Runtime, "CLucene does not directly support compressed fields. Write a compressed byte array instead"); - }else{ - - //FEATURE: this problem in Java Lucene too, if using Reader, data is not stored. - //todo: this is a logic bug... - //if the field is stored, and indexed, and is using a reader the field wont get indexed - // - //if we could write zero prefixed vints (therefore static length), then we could - //write a reader directly to the field indexoutput and then go back and write the data - //length. however this is not supported in lucene yet... - //if this is ever implemented, then it would make sense to also be able to combine the - //FieldsWriter and DocumentWriter::invertDocument process, and use a streamfilter to - //write the field data while the documentwrite analyses the document! how cool would - //that be! it would cut out all these buffers!!! - - - // compression is disabled for the current field - if (field->isBinary()) { - //todo: since we currently don't support static length vints, we have to - //read the entire stream into memory first.... ugly! - jstreams::StreamBase* stream = field->streamValue(); - const char* sd; - //how do wemake sure we read the entire index in now??? - //todo: we need to have a max amount, and guarantee its all in or throw an error... - int32_t rl = stream->read(sd,10000000,0); - - if ( rl < 0 ){ - fieldsStream->writeVInt(0); //todo: could we detect this earlier and not actually write the field?? - }else{ - //todo: if this int could be written with a constant length, then - //the stream could be read and written a bit at a time then the length - //is re-written at the end. - fieldsStream->writeVInt(rl); - fieldsStream->writeBytes((uint8_t*)sd, rl); - } - - }else if ( field->stringValue() == NULL ){ //we must be using readerValue - CND_PRECONDITION(!field->isIndexed(), "Cannot store reader if it is indexed too") - Reader* r = field->readerValue(); - - //read the entire string - const TCHAR* rv; - int64_t rl = r->read(rv, LUCENE_INT32_MAX_SHOULDBE); - if ( rl > LUCENE_INT32_MAX_SHOULDBE ) - _CLTHROWA(CL_ERR_Runtime,"Field length too long"); - else if ( rl < 0 ) - rl = 0; - - fieldsStream->writeString( rv, (int32_t)rl); - }else if ( field->stringValue() != NULL ){ - fieldsStream->writeString(field->stringValue(),_tcslen(field->stringValue())); - }else - _CLTHROWA(CL_ERR_Runtime, "No values are set for the field"); - } - } - } - _CLDELETE(fields); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/FieldsWriter.h clucene-core-2.3.3.4/src/CLucene/index/FieldsWriter.h --- clucene-core-0.9.21b/src/CLucene/index/FieldsWriter.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/FieldsWriter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_FieldsWriter_ -#define _lucene_index_FieldsWriter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidMap.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/IndexOutput.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "FieldInfos.h" - -CL_NS_DEF(index) -class FieldsWriter :LUCENE_BASE{ -private: - FieldInfos* fieldInfos; - - CL_NS(store)::IndexOutput* fieldsStream; - CL_NS(store)::IndexOutput* indexStream; - -public: - LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_TOKENIZED = 0x1); - LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_BINARY = 0x2); - LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_COMPRESSED = 0x4); - - FieldsWriter(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fn); - ~FieldsWriter(); - - void close(); - - void addDocument(CL_NS(document)::Document* doc); -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/IndexModifier.cpp clucene-core-2.3.3.4/src/CLucene/index/IndexModifier.cpp --- clucene-core-0.9.21b/src/CLucene/index/IndexModifier.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/IndexModifier.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,251 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "IndexModifier.h" - -CL_NS_DEF(index) -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_USE(analysis) -CL_NS_USE(document) - -IndexModifier::IndexModifier(Directory* directory, Analyzer* analyzer, bool create) { - init(directory, analyzer, create); -} - -IndexModifier::IndexModifier(const char* dirName, Analyzer* analyzer, bool create) { - Directory* dir = FSDirectory::getDirectory(dirName, create); - init(dir, analyzer, create); -} - -void IndexModifier::init(Directory* directory, Analyzer* analyzer, bool create) { - indexWriter = NULL; - indexReader = NULL; - this->analyzer = analyzer; - open = false; - - useCompoundFile = true; - int32_t maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS; - this->maxFieldLength = IndexWriter::DEFAULT_MAX_FIELD_LENGTH; - int32_t mergeFactor = IndexWriter::DEFAULT_MERGE_FACTOR; - - this->directory = _CL_POINTER(directory); - createIndexReader(); - open = true; -} - -IndexModifier::~IndexModifier(){ - close(); -} - -void IndexModifier::assureOpen() const{ - if (!open) { - _CLTHROWA(CL_ERR_IllegalState,"Index is closed"); - } -} - -void IndexModifier::createIndexWriter() { - if (indexWriter == NULL) { - if (indexReader != NULL) { - indexReader->close(); - _CLDELETE(indexReader); - } - indexWriter = _CLNEW IndexWriter(directory, analyzer, false); - indexWriter->setUseCompoundFile(useCompoundFile); - //indexWriter->setMaxBufferedDocs(maxBufferedDocs); - indexWriter->setMaxFieldLength(maxFieldLength); - //indexWriter->setMergeFactor(mergeFactor); - } -} - -void IndexModifier::createIndexReader() { - if (indexReader == NULL) { - if (indexWriter != NULL) { - indexWriter->close(); - _CLDELETE(indexWriter); - } - indexReader = IndexReader::open(directory); - } -} - -void IndexModifier::flush() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) { - indexWriter->close(); - _CLDELETE(indexWriter); - createIndexWriter(); - } else { - indexReader->close(); - _CLDELETE(indexReader); - createIndexReader(); - } -} - -void IndexModifier::addDocument(Document* doc, Analyzer* docAnalyzer) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - if (docAnalyzer != NULL) - indexWriter->addDocument(doc, docAnalyzer); - else - indexWriter->addDocument(doc); -} - -int32_t IndexModifier::deleteDocuments(Term* term) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - return indexReader->deleteDocuments(term); -} - -void IndexModifier::deleteDocument(int32_t docNum) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - indexReader->deleteDocument(docNum); -} - -int32_t IndexModifier::docCount() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - return indexWriter->docCount(); - else - return indexReader->numDocs(); -} - -void IndexModifier::optimize() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - indexWriter->optimize(); -} - -void IndexModifier::setUseCompoundFile(bool useCompoundFile) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - indexWriter->setUseCompoundFile(useCompoundFile); - this->useCompoundFile = useCompoundFile; -} - -bool IndexModifier::getUseCompoundFile() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - return indexWriter->getUseCompoundFile(); -} - -void IndexModifier::setMaxFieldLength(int32_t maxFieldLength) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - indexWriter->setMaxFieldLength(maxFieldLength); - this->maxFieldLength = maxFieldLength; -} - -int32_t IndexModifier::getMaxFieldLength() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - return indexWriter->getMaxFieldLength(); -} - -void IndexModifier::setMaxBufferedDocs(int32_t maxBufferedDocs) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - indexWriter->setMaxBufferedDocs(maxBufferedDocs); - this->maxBufferedDocs = maxBufferedDocs; -} - -int32_t IndexModifier::getMaxBufferedDocs() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - return indexWriter->getMaxBufferedDocs(); -} -void IndexModifier::setMergeFactor(int32_t mergeFactor) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - if (indexWriter != NULL) - indexWriter->setMergeFactor(mergeFactor); - this->mergeFactor = mergeFactor; -} - -int32_t IndexModifier::getMergeFactor() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexWriter(); - return indexWriter->getMergeFactor(); -} - -void IndexModifier::close() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - if (indexWriter != NULL) { - indexWriter->close(); - _CLDELETE(indexWriter); - } else { - indexReader->close(); - _CLDELETE(indexReader); - } - _CLDECDELETE(directory) - open = false; -} - -TCHAR* IndexModifier::toString() const{ - TCHAR* dir = directory->toString(); - TCHAR* ret = _CL_NEWARRAY(TCHAR,_tcslen(dir)+7); //strlen("Index@") - _tcscpy(ret,_T("Index@")); - _tcscat(ret,dir); - _CLDELETE_CARRAY(dir); - return ret; -} - - - -int64_t IndexModifier::getCurrentVersion() const{ - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - return IndexReader::getCurrentVersion(directory); -} - -TermDocs* IndexModifier::termDocs(Term* term){ - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - return indexReader->termDocs(term); -} - -TermEnum* IndexModifier::terms(Term* term){ - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - if ( term != NULL ) - return indexReader->terms(term); - else - return indexReader->terms(); -} - - - CL_NS(document)::Document* IndexModifier::document(const int32_t n){ - Document* ret = _CLNEW Document; - if (!document(n,ret) ) - _CLDELETE(ret); - return ret; - } -bool IndexModifier::document(int32_t n, CL_NS(document)::Document* doc){ - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - assureOpen(); - createIndexReader(); - return indexReader->document(n, doc); -} -CL_NS(store)::Directory* IndexModifier::getDirectory(){ - return directory; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/IndexModifier.h clucene-core-2.3.3.4/src/CLucene/index/IndexModifier.h --- clucene-core-0.9.21b/src/CLucene/index/IndexModifier.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/IndexModifier.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,324 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_IndexModifier_ -#define _lucene_index_IndexModifier_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/analysis/AnalysisHeader.h" -#include "Term.h" -#include "IndexWriter.h" -#include "IndexReader.h" - -CL_NS_DEF(index) - -/** -* A class to modify an index, i.e. to delete and add documents. This -* class hides {@link IndexReader} and {@link IndexWriter} so that you -* do not need to care about implementation details such as that adding -* documents is done via IndexWriter and deletion is done via IndexReader. -* -*

Note that you cannot create more than one IndexModifier object -* on the same directory at the same time. -* -*

Example usage: -* -*

-* -* -* -* -*
-* -* //note this code will leak memory :) -* Analyzer* analyzer = new StandardAnalyzer();
-* // create an index in /tmp/index, overwriting an existing one:
-* IndexModifier* indexModifier = new IndexModifier("/tmp/index", analyzer, true);
-* Document* doc = new Document*();
-* doc->add(*new Field("id", "1", Field::STORE_YES| Field::INDEX_UNTOKENIZED));
-* doc->add(*new Field("body", "a simple test", Field::STORE_YES, Field::INDEX_TOKENIZED));
-* indexModifier->addDocument(doc);
-* int32_t deleted = indexModifier->deleteDocuments(new Term("id", "1"));
-* printf("Deleted %d document", deleted);
-* indexModifier->flush();
-* printf( "$d docs in index", indexModifier->docCount() );
-* indexModifier->close(); -*
-*
-* -*

Not all methods of IndexReader and IndexWriter are offered by this -* class. If you need access to additional methods, either use those classes -* directly or implement your own class that extends IndexModifier. -* -*

Although an instance of this class can be used from more than one -* thread, you will not get the best performance. You might want to use -* IndexReader and IndexWriter directly for that (but you will need to -* care about synchronization yourself then). -* -*

While you can freely mix calls to add() and delete() using this class, -* you should batch you calls for best performance. For example, if you -* want to update 20 documents, you should first delete all those documents, -* then add all the new documents. -* -*/ -class IndexModifier :LUCENE_BASE{ -protected: - IndexWriter* indexWriter; - IndexReader* indexReader; - - CL_NS(store)::Directory* directory; - CL_NS(analysis)::Analyzer* analyzer; - bool open; - - // Lucene defaults: - bool useCompoundFile; - int32_t maxBufferedDocs; - int32_t maxFieldLength; - int32_t mergeFactor; - -public: - - /** - * Open an index with write access. - * - * @param directory the index directory - * @param analyzer the analyzer to use for adding new documents - * @param create true to create the index or overwrite the existing one; - * false to append to the existing index - */ - IndexModifier(CL_NS(store)::Directory* directory, CL_NS(analysis)::Analyzer* analyzer, bool create); - - ~IndexModifier(); - - /** - * Open an index with write access. - * - * @param dirName the index directory - * @param analyzer the analyzer to use for adding new documents - * @param create true to create the index or overwrite the existing one; - * false to append to the existing index - */ - IndexModifier(const char* dirName, CL_NS(analysis)::Analyzer* analyzer, bool create); - -protected: - - /** - * Initialize an IndexWriter. - * @throws IOException - */ - void init(CL_NS(store)::Directory* directory, CL_NS(analysis)::Analyzer* analyzer, bool create); - - /** - * Throw an IllegalStateException if the index is closed. - * @throws IllegalStateException - */ - void assureOpen() const; - - /** - * Close the IndexReader and open an IndexWriter. - * @throws IOException - */ - void createIndexWriter(); - - /** - * Close the IndexWriter and open an IndexReader. - * @throws IOException - */ - void createIndexReader(); - -public: - /** - * Make sure all changes are written to disk. - * @throws IOException - */ - void flush(); - - /** - * Adds a document to this index, using the provided analyzer instead of the - * one specific in the constructor. If the document contains more than - * {@link #setMaxFieldLength(int32_t)} terms for a given field, the remainder are - * discarded. - * @see IndexWriter#addDocument(Document*, Analyzer*) - * @throws IllegalStateException if the index is closed - */ - void addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* docAnalyzer=NULL); - - - /** - * Deletes all documents containing term. - * This is useful if one uses a document field to hold a unique ID string for - * the document. Then to delete such a document, one merely constructs a - * term with the appropriate field and the unique ID string as its text and - * passes it to this method. Returns the number of documents deleted. - * @return the number of documents deleted - * @see IndexReader#deleteDocuments(Term*) - * @throws IllegalStateException if the index is closed - */ - int32_t deleteDocuments(Term* term); - - /** - * Deletes the document numbered docNum. - * @see IndexReader#deleteDocument(int32_t) - * @throws IllegalStateException if the index is closed - */ - void deleteDocument(int32_t docNum); - - /** - * Returns the number of documents currently in this index. - * @see IndexWriter#docCount() - * @see IndexReader#numDocs() - * @throws IllegalStateException if the index is closed - */ - int32_t docCount(); - - /** - * Merges all segments together into a single segment, optimizing an index - * for search. - * @see IndexWriter#optimize() - * @throws IllegalStateException if the index is closed - */ - void optimize(); - - /** - * Setting to turn on usage of a compound file. When on, multiple files - * for each segment are merged into a single file once the segment creation - * is finished. This is done regardless of what directory is in use. - * @see IndexWriter#setUseCompoundFile(bool) - * @throws IllegalStateException if the index is closed - */ - void setUseCompoundFile(bool useCompoundFile); - - /** - * @throws IOException - * @see IndexModifier#setUseCompoundFile(bool) - */ - bool getUseCompoundFile(); - - /** - * The maximum number of terms that will be indexed for a single field in a - * document. This limits the amount of memory required for indexing, so that - * collections with very large files will not crash the indexing process by - * running out of memory.

- * Note that this effectively truncates large documents, excluding from the - * index terms that occur further in the document. If you know your source - * documents are large, be sure to set this value high enough to accomodate - * the expected size. If you set it to Integer.MAX_VALUE, then the only limit - * is your memory, but you should anticipate an OutOfMemoryError.

- * By default, no more than 10,000 terms will be indexed for a field. - * @see IndexWriter#setMaxFieldLength(int32_t) - * @throws IllegalStateException if the index is closed - */ - void setMaxFieldLength(int32_t maxFieldLength); - - /** - * @throws IOException - * @see IndexModifier#setMaxFieldLength(int32_t) - */ - int32_t getMaxFieldLength(); - - /** - * The maximum number of terms that will be indexed for a single field in a - * document. This limits the amount of memory required for indexing, so that - * collections with very large files will not crash the indexing process by - * running out of memory.

- * Note that this effectively truncates large documents, excluding from the - * index terms that occur further in the document. If you know your source - * documents are large, be sure to set this value high enough to accomodate - * the expected size. If you set it to Integer.MAX_VALUE, then the only limit - * is your memory, but you should anticipate an OutOfMemoryError.

- * By default, no more than 10,000 terms will be indexed for a field. - * @see IndexWriter#setMaxBufferedDocs(int32_t) - * @throws IllegalStateException if the index is closed - */ - void setMaxBufferedDocs(int32_t maxBufferedDocs); - - /** - * @throws IOException - * @see IndexModifier#setMaxBufferedDocs(int32_t) - */ - int32_t getMaxBufferedDocs(); - - /** - * Determines how often segment indices are merged by addDocument(). With - * smaller values, less RAM is used while indexing, and searches on - * unoptimized indices are faster, but indexing speed is slower. With larger - * values, more RAM is used during indexing, and while searches on unoptimized - * indices are slower, indexing is faster. Thus larger values (> 10) are best - * for batch index creation, and smaller values (< 10) for indices that are - * interactively maintained. - *

This must never be less than 2. The default value is 10. - * - * @see IndexWriter#setMergeFactor(int32_t) - * @throws IllegalStateException if the index is closed - */ - void setMergeFactor(int32_t mergeFactor); - - /** - * @throws IOException - * @see IndexModifier#setMergeFactor(int32_t) - */ - int32_t getMergeFactor(); - - /** - * Close this index, writing all pending changes to disk. - * - * @throws IllegalStateException if the index has been closed before already - */ - void close(); - - TCHAR* toString() const; - - /** - * Gets the version number of the currently open index. - */ - int64_t getCurrentVersion() const; - - /** - * Returns an enumeration of all the documents which contain term. - * - * Warning: This is not threadsafe. Make sure you lock the modifier object - * while using the TermDocs. If the IndexReader that the modifier manages - * is closed, the TermDocs object will fail. - */ - TermDocs* termDocs(Term* term=NULL); - - /** - * Returns an enumeration of all terms after a given term. - * If no term is given, an enumeration of all the terms - * in the index is returned. - * The enumeration is ordered by Term.compareTo(). Each term - * is greater than all that precede it in the enumeration. - * - * Warning: This is not threadsafe. Make sure you lock the modifier object - * while using the TermDocs. If the IndexReader that the modifier manages - * is closed, the Document will be invalid - */ - TermEnum* terms(Term* term=NULL); - - /** - * Returns the stored fields of the n-th Document in this index. - * - * Warning: This is not threadsafe. Make sure you lock the modifier object - * while using the TermDocs. If the IndexReader that the modifier manages - * is closed, the Document will be invalid - */ - bool document(const int32_t n, CL_NS(document)::Document* doc); - _CL_DEPRECATED( document(i, document) ) CL_NS(document)::Document* document(const int32_t n); - - /** - * Returns the directory used by this index. - */ - CL_NS(store)::Directory* getDirectory(); -}; -CL_NS_END -#endif - - diff -Nru clucene-core-0.9.21b/src/CLucene/index/IndexReader.cpp clucene-core-2.3.3.4/src/CLucene/index/IndexReader.cpp --- clucene-core-0.9.21b/src/CLucene/index/IndexReader.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/IndexReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,656 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "IndexReader.h" -#include "IndexWriter.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/store/FSDirectory.h" -#include "CLucene/store/Lock.h" -#include "CLucene/document/Document.h" -#include "CLucene/search/Similarity.h" -#include "SegmentInfos.h" -#include "MultiReader.h" -#include "Terms.h" - -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_DEF(index) - - IndexReader::IndexReader(Directory* dir): - directory(_CL_POINTER(dir)){ - //Constructor. - //Func - Creates an instance of IndexReader - //Pre - true - //Post - An instance has been created with writeLock = NULL - - writeLock = NULL; - segmentInfos = NULL; - directoryOwner = false; - closeDirectory = false; - stale = false; - hasChanges = false; - } - - IndexReader::IndexReader(Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory) { - this->directory = _CL_POINTER(directory); - this->segmentInfos = segmentInfos; - directoryOwner = true; - this->closeDirectory = closeDirectory; - stale = false; - hasChanges = false; - writeLock = NULL; - } - - IndexReader::~IndexReader(){ - //Func - Destructor - // Destroys the instance and releases the writeLock if needed - //Pre - true - //Post - The instance has been destroyed if pre(writeLock) exists is has been released - if (writeLock != NULL) { - //release writeLock - writeLock->release(); - _CLDELETE(writeLock); - } - _CLDELETE(segmentInfos); - _CLDECDELETE(directory); - } - - IndexReader* IndexReader::open(const char* path){ - //Func - Static method. - // Returns an IndexReader reading the index in an FSDirectory in the named path. - //Pre - path != NULL and contains the path of the index for which an IndexReader must be - // instantiated - // closeDir indicates if the directory needs to be closed - //Post - An IndexReader has been returned that reads tnhe index located at path - - CND_PRECONDITION(path != NULL, "path is NULL"); - - Directory* dir = FSDirectory::getDirectory(path,false); - IndexReader* reader = open(dir,true); - //because fsdirectory will now have a refcount of 1 more than - //if the reader had been opened with a directory object, - //we need to do a refdec - _CLDECDELETE(dir); - return reader; - } - - IndexReader* IndexReader::open( Directory* directory, bool closeDirectory){ - //Func - Static method. - // Returns an IndexReader reading the index in an FSDirectory in the named path. - //Pre - directory represents a directory - // closeDir indicates if the directory needs to be closed - //Post - An IndexReader has been returned that reads the index located at directory - - // in- & inter-process sync - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) - - IndexReader* ret = NULL; - - LuceneLock* lock = directory->makeLock("commit.lock"); - - //Instantiate an IndexReader::LockWith which can produce an IndexReader - IndexReader::LockWith with(lock,directory); - - try{ - //Create an IndexReader reading the index - ret = with.runAndReturn(); - }_CLFINALLY( - _CLDELETE( lock ); - ); - - ret->closeDirectory = closeDirectory; - - CND_CONDITION(ret != NULL,"ret is NULL"); - //return reference - return ret; - } - - CL_NS(document)::Document* IndexReader::document(const int32_t n){ - CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; - if (!document(n,ret) ) - _CLDELETE(ret); - return ret; - } - - IndexReader* IndexReader::LockWith::doBody() { - //Func - Reads the segmentinfo file and depending on the number of segments found - // it returns a SegmentsReader or a SegmentReader - //Pre - directory != NULL - //Post - Depending on the number of Segments present in directory this method - // returns an empty SegmentsReader when there are no segments, a SegmentReader when - // directory contains 1 segment and a nonempty SegmentsReader when directory - // contains multiple segements - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - - //Instantiate SegmentInfos - SegmentInfos* infos = _CLNEW SegmentInfos; - try{ - //Have SegmentInfos read the segments file in directory - infos->read(directory); - }catch(...){ - //make sure infos is cleaned up - _CLDELETE(infos); - throw; - } - - // If there is at least one segment (if infos.size() >= 1), the last - // SegmentReader object will close the directory when the SegmentReader - // object itself is closed (see SegmentReader::doClose). - // If there are no segments, there will be no "last SegmentReader object" - // to fulfill this responsibility, so we need to explicitly close the - // directory in the segmentsreader.close - - //Count the number segments in the directory - const uint32_t nSegs = infos->size(); - - if (nSegs == 1 ) { - // index is optimized - return _CLNEW SegmentReader(infos, infos->info(0)); - }else{ - //Instantiate an array of pointers to SegmentReaders of size nSegs (The number of segments in the index) - IndexReader** readers = NULL; - - if (nSegs > 0){ - uint32_t infosize=infos->size(); - readers = _CL_NEWARRAY(IndexReader*,infosize+1); - for (uint32_t i = 0; i < infosize; ++i) { - //Instantiate a SegementReader responsible for reading the i-th segment and store it in - //the readers array - readers[i] = _CLNEW SegmentReader(infos->info(i)); - } - readers[infosize] = NULL; - } - - //return an instance of SegmentsReader which is a reader that manages all Segments - return _CLNEW MultiReader(directory, infos, readers); - }// end if - } - - uint64_t IndexReader::lastModified(const char* directory) { - //Func - Static method - // Returns the time the index in the named directory was last modified. - //Pre - directory != NULL and contains the path name of the directory to check - //Post - The last modified time of the index has been returned - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - - return FSDirectory::fileModified(directory,"segments"); - } - - int64_t IndexReader::getCurrentVersion(Directory* directory) { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - LuceneLock* commitLock=directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - bool locked=false; - int64_t ret = 0; - try { - locked=commitLock->obtain(IndexWriter::COMMIT_LOCK_TIMEOUT); - ret = SegmentInfos::readCurrentVersion(directory); - }_CLFINALLY( - if (locked) { - commitLock->release(); - } - _CLDELETE(commitLock); - ) - return ret; - } - - - int64_t IndexReader::getCurrentVersion(const char* directory){ - Directory* dir = FSDirectory::getDirectory(directory, false); - int64_t version = getCurrentVersion(dir); - dir->close(); - _CLDECDELETE(dir); - return version; - } - int64_t IndexReader::getVersion() { - return segmentInfos->getVersion(); - } - - bool IndexReader::isCurrent() { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - LuceneLock* commitLock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - bool locked=false; - bool ret = false; - try { - locked=commitLock->obtain(IndexWriter::COMMIT_LOCK_TIMEOUT); - ret = SegmentInfos::readCurrentVersion(directory) == segmentInfos->getVersion(); - } _CLFINALLY( - if (locked) { - commitLock->release(); - } - ) - return ret; - } - - uint64_t IndexReader::lastModified(const Directory* directory) { - //Func - Static method - // Returns the time the index in this directory was last modified. - //Pre - directory contains a valid reference - //Post - The last modified time of the index has been returned - - return directory->fileModified("segments"); - } - - - bool IndexReader::indexExists(const char* directory){ - //Func - Static method - // Checks if an index exists in the named directory - //Pre - directory != NULL - //Post - Returns true if an index exists at the specified directory-> - // If the directory does not exist or if there is no index in it. - // false is returned. - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - - //Create a buffer of length CL_MAXDIR - char f[CL_MAX_PATH]; - //Copy the directory string to the buffer. leave room for /segments - strncpy(f,directory,CL_MAX_PATH-10); - //Cat the name of the segments to buffer - strcat(f, "/segments"); - //Check if the segments file exists - return Misc::dir_Exists(f); - } - - - void IndexReader::setNorm(int32_t doc, const TCHAR* field, uint8_t value){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - if(directoryOwner) - aquireWriteLock(); - doSetNorm(doc, field, value); - hasChanges = true; - } - - void IndexReader::aquireWriteLock() { - if (stale) - _CLTHROWA(CL_ERR_IO,"IndexReader out of date and no longer valid for delete, undelete, or setNorm operations"); - - if (writeLock == NULL) { - LuceneLock* writeLock = directory->makeLock("write.lock"); - if (!writeLock->obtain(IndexWriter::WRITE_LOCK_TIMEOUT)) // obtain write lock - _CLTHROWA(CL_ERR_IO,"Index locked for write"); // + writeLock - this->writeLock = writeLock; - - // we have to check whether index has changed since this reader was opened. - // if so, this reader is no longer valid for deletion - if (SegmentInfos::readCurrentVersion(directory) > segmentInfos->getVersion()) { - stale = true; - this->writeLock->release(); - _CLDELETE(this->writeLock); - _CLTHROWA(CL_ERR_IO,"IndexReader out of date and no longer valid for delete, undelete, or setNorm operations"); - } - } - } - - - void IndexReader::setNorm(int32_t doc, const TCHAR* field, float_t value){ - setNorm(doc, field, CL_NS(search)::Similarity::encodeNorm(value)); - } - - bool IndexReader::indexExists(const Directory* directory){ - //Func - Static method - // Checks if an index exists in the directory - //Pre - directory is a valid reference - //Post - Returns true if an index exists at the specified directory-> - // If the directory does not exist or if there is no index in it. - // false is returned. - - return directory->fileExists("segments"); - } - - TermDocs* IndexReader::termDocs(Term* term) const { - //Func - Returns an enumeration of all the documents which contain - // term. For each document, the document number, the frequency of - // the term in that document is also provided, for use in search scoring. - // Thus, this method implements the mapping: - // - // Term => * - // The enumeration is ordered by document number. Each document number - // is greater than all that precede it in the enumeration. - //Pre - term != NULL - //Post - A reference to TermDocs containing an enumeration of all found documents - // has been returned - - CND_PRECONDITION(term != NULL, "term is NULL"); - - //Reference an instantiated TermDocs instance - TermDocs* _termDocs = termDocs(); - //Seek all documents containing term - _termDocs->seek(term); - //return the enumaration - return _termDocs; - } - - TermPositions* IndexReader::termPositions(Term* term) const{ - //Func - Returns an enumeration of all the documents which contain term. For each - // document, in addition to the document number and frequency of the term in - // that document, a list of all of the ordinal positions of the term in the document - // is available. Thus, this method implements the mapping: - // - // Term => >* - // - // This positional information faciliates phrase and proximity searching. - // The enumeration is ordered by document number. Each document number is greater than - // all that precede it in the enumeration. - //Pre - term != NULL - //Post - A reference to TermPositions containing an enumeration of all found documents - // has been returned - - CND_PRECONDITION(term != NULL, "term is NULL"); - - //Reference an instantiated termPositions instance - TermPositions* _termPositions = termPositions(); - //Seek all documents containing term - _termPositions->seek(term); - //return the enumeration - return _termPositions; - } - - void IndexReader::deleteDocument(const int32_t docNum) { - //Func - Deletes the document numbered docNum. Once a document is deleted it will not appear - // in TermDocs or TermPostitions enumerations. Attempts to read its field with the document - // method will result in an error. The presence of this document may still be reflected in - // the docFreq statistic, though this will be corrected eventually as the index is further modified. - //Pre - docNum >= 0 - //Post - If successful the document identified by docNum has been deleted. If no writelock - // could be obtained an exception has been thrown stating that the index was locked or has no write access - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(docNum >= 0, "docNum is negative"); - - if (directoryOwner) - aquireWriteLock(); - - //Have the document identified by docNum deleted - doDelete(docNum); - hasChanges = true; - } - - /** - * Commit changes resulting from delete, undeleteAll, or setNorm operations - * - * @throws IOException - */ - void IndexReader::commit(){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - if(hasChanges){ - if(directoryOwner){ - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - - LuceneLock* commitLock = directory->makeLock("commit.lock"); - IndexReader::CommitLockWith cl(commitLock,this); - cl.run(); - _CLDELETE(commitLock); - - } - if (writeLock != NULL) { - writeLock->release(); // release write lock - _CLDELETE(writeLock); - } - }else - doCommit(); - } - hasChanges = false; - } - - - void IndexReader::undeleteAll(){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - if(directoryOwner) - aquireWriteLock(); - doUndeleteAll(); - hasChanges = true; - } - - int32_t IndexReader::deleteDocuments(Term* term) { - //Func - Deletes all documents containing term. This is useful if one uses a - // document field to hold a unique ID string for the document. Then to delete such - // a document, one merely constructs a term with the appropriate field and the unique - // ID string as its text and passes it to this method. - //Pre - term != NULL - //Post - All documents containing term have been deleted. The number of deleted documents - // has been returned - - CND_PRECONDITION(term != NULL, "term is NULL"); - - //Search for the documents contain term - TermDocs* docs = termDocs(term); - - //Check if documents have been found - if ( docs == NULL ){ - return 0; - } - - //initialize - int32_t Counter = 0; - try { - //iterate through the found documents - while (docs->next()) { - //Delete the document - deleteDocument(docs->doc()); - ++Counter; - } - }_CLFINALLY( - //Close the enumeration - docs->close(); - ); - - //Delete the enumeration of found documents - _CLDELETE( docs ); - - //Return the number of deleted documents - return Counter; - } - - TCHAR** IndexReader::getFieldNames(){ - CL_NS(util)::StringArrayWithDeletor array; - getFieldNames(IndexReader::ALL, array); - - array.setDoDelete(false); - TCHAR** ret = _CL_NEWARRAY(TCHAR*,array.size()+1); - int j=0; - CL_NS(util)::StringArrayWithDeletor::iterator itr = array.begin(); - while ( itr != array.end() ){ - ret[j]=*itr; - ++j;++itr; - } - ret[j]=NULL; - return ret; - } - TCHAR** IndexReader::getFieldNames(bool indexed){ - CL_NS(util)::StringArrayWithDeletor array; - getFieldNames(indexed?IndexReader::INDEXED:IndexReader::UNINDEXED, array); - - array.setDoDelete(false); - TCHAR** ret = _CL_NEWARRAY(TCHAR*,array.size()+1); - int j=0; - CL_NS(util)::StringArrayWithDeletor::iterator itr = array.begin(); - while ( itr != array.end() ){ - ret[j]=*itr; - ++j;++itr; - } - ret[j]=NULL; - return ret; - } - - - void IndexReader::close() { - //Func - Closes files associated with this index and also saves any new deletions to disk. - // No other methods should be called after this has been called. - //Pre - true - //Post - All files associated with this index have been deleted and new deletions have been - // saved to disk - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CloseCallbackMap::iterator iter = closeCallbacks.begin(); - for ( ;iter!=closeCallbacks.end();iter++){ - CloseCallback callback = *iter->first; - callback(this,iter->second); - } - - commit(); - doClose(); - - if(closeDirectory){ - directory->close(); - _CLDECDELETE(directory); - } - } - - bool IndexReader::isLocked(Directory* directory) { - //Func - Static method - // Checks if the index in the directory is currently locked. - //Pre - directory is a valid reference to a directory to check for a lock - //Post - Returns true if the index in the named directory is locked otherwise false - - //Check the existence of the file write.lock and return true when it does and false - //when it doesn't - LuceneLock* l1 = directory->makeLock("write.lock"); - LuceneLock* l2 = directory->makeLock("commit.lock"); - - bool ret = l1->isLocked() || l2->isLocked(); - - _CLDELETE(l1); - _CLDELETE(l2); - return ret; - } - - bool IndexReader::isLocked(const char* directory) { - //Func - Static method - // Checks if the index in the named directory is currently locked. - //Pre - directory != NULL and contains the directory to check for a lock - //Post - Returns true if the index in the named directory is locked otherwise false - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - - //Create a buffer of length CL_MAXDIR - char f[CL_MAX_PATH]; //todo: potential buffer overflow - //Copy the directory string to the buffer. leave room for /write.lock - strncpy(f,directory,CL_MAX_PATH-12); - //Cat the name of the write.lock file to buffer - strcat ( f,"/write.lock" ); - - Directory* dir = FSDirectory::getDirectory(directory,false); - bool ret = isLocked(dir); - dir->close(); - _CLDECDELETE(dir); - - return ret; - } - -/** Returns true if there are norms stored for this field. */ -bool IndexReader::hasNorms(const TCHAR* field) { - // backward compatible implementation. - // SegmentReader has an efficient implementation. - return norms(field) != NULL; -} - -void IndexReader::unlock(const char* path){ - FSDirectory* dir = FSDirectory::getDirectory(path,false); - unlock(dir); - dir->close(); - _CLDECDELETE(dir); -} - void IndexReader::unlock(Directory* directory){ - //Func - Static method - // Forcibly unlocks the index in the named directory-> - // Caution: this should only be used by failure recovery code, - // when it is known that no other process nor thread is in fact - // currently accessing this index. - //Pre - directory is a valid reference to a directory - //Post - The directory has been forcibly unlocked - LuceneLock* lock; - - lock = directory->makeLock("write.lock"); - lock->release(); - _CLDELETE(lock); - - lock = directory->makeLock("commit.lock"); - lock->release(); - _CLDELETE(lock); - } - -bool IndexReader::isLuceneFile(const char* filename){ - if ( !filename ) - return false; - size_t len = strlen(filename); - if ( len < 6 ) //need at least x.frx - return false; - const char* ext=filename+len; - while(*ext != '.' && ext!=filename) - ext--; - - if ( strcmp(ext, ".cfs") == 0 ) - return true; - else if ( strcmp(ext, ".fnm") == 0 ) - return true; - else if ( strcmp(ext, ".fdx") == 0 ) - return true; - else if ( strcmp(ext, ".fdt") == 0 ) - return true; - else if ( strcmp(ext, ".tii") == 0 ) - return true; - else if ( strcmp(ext, ".tis") == 0 ) - return true; - else if ( strcmp(ext, ".frq") == 0 ) - return true; - else if ( strcmp(ext, ".prx") == 0 ) - return true; - else if ( strcmp(ext, ".del") == 0 ) - return true; - else if ( strcmp(ext, ".tvx") == 0 ) - return true; - else if ( strcmp(ext, ".tvd") == 0 ) - return true; - else if ( strcmp(ext, ".tvf") == 0 ) - return true; - else if ( strcmp(ext, ".tvp") == 0 ) - return true; - - else if ( strcmp(filename, "segments") == 0 ) - return true; - else if ( strcmp(filename, "segments.new") == 0 ) - return true; - else if ( strcmp(filename, "deletable") == 0 ) - return true; - - else if ( strncmp(ext,".f",2)==0 ){ - const char* n = ext+2; - if ( *n && _istdigit(*n) ) - return true; - } - - return false; -} - - void IndexReader::addCloseCallback(CloseCallback callback, void* parameter){ - closeCallbacks.put(callback, parameter); - } - - - //Constructor - IndexReader::LockWith::LockWith(CL_NS(store)::LuceneLock* lock, CL_NS(store)::Directory* dir): - CL_NS(store)::LuceneLockWith(lock,IndexWriter::COMMIT_LOCK_TIMEOUT) - { - this->directory = dir; - } - //Constructor - IndexReader::CommitLockWith::CommitLockWith( CL_NS(store)::LuceneLock* lock, IndexReader* r ): - CL_NS(store)::LuceneLockWith(lock,IndexWriter::COMMIT_LOCK_TIMEOUT), - reader(r) - { - } - void IndexReader::CommitLockWith::doBody(){ - reader->doCommit(); - reader->segmentInfos->write(reader->getDirectory()); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/IndexReader.h clucene-core-2.3.3.4/src/CLucene/index/IndexReader.h --- clucene-core-0.9.21b/src/CLucene/index/IndexReader.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/IndexReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,482 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_IndexReader_ -#define _lucene_index_IndexReader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/store/Directory.h" -#include "CLucene/store/FSDirectory.h" -#include "CLucene/store/Lock.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/TermVector.h" -#include "SegmentInfos.h" -#include "Terms.h" - - -CL_NS_DEF(index) - - -/** IndexReader is an abstract class, providing an interface for accessing an - index. Search of an index is done entirely through this abstract interface, - so that any subclass which implements it is searchable. - -

Concrete subclasses of IndexReader are usually constructed with a call to - one of the static open() methods, e.g. {@link #open(String)}. - -

For efficiency, in this API documents are often referred to via - document numbers, non-negative integers which each name a unique - document in the index. These document numbers are ephemeral--they may change - as documents are added to and deleted from an index. Clients should thus not - rely on a given document having the same number between sessions. - -

An IndexReader can be opened on a directory for which an IndexWriter is - opened already, but it cannot be used to delete documents from the index then. -*/ -class IndexReader :LUCENE_BASE{ -public: - //Callback for classes that need to know if IndexReader is closing. - typedef void (*CloseCallback)(IndexReader*, void*); - - class CloseCallbackCompare:public CL_NS(util)::Compare::_base{ - public: - bool operator()( CloseCallback t1, CloseCallback t2 ) const{ - return t1 > t2; - } - static void doDelete(CloseCallback dummy){ - } - }; - - - enum FieldOption { - // all fields - ALL = 1, - // all indexed fields - INDEXED = 2, - // all fields which are not indexed - UNINDEXED = 4, - // all fields which are indexed with termvectors enables - INDEXED_WITH_TERMVECTOR = 8, - // all fields which are indexed but don't have termvectors enabled - INDEXED_NO_TERMVECTOR = 16, - // all fields where termvectors are enabled. Please note that only standard termvector fields are returned - TERMVECTOR = 32, - // all field with termvectors wiht positions enabled - TERMVECTOR_WITH_POSITION = 64, - // all fields where termvectors with offset position are set - TERMVECTOR_WITH_OFFSET = 128, - // all fields where termvectors with offset and position values set - TERMVECTOR_WITH_POSITION_OFFSET = 256 - }; - - -private: - CL_NS(store)::LuceneLock* writeLock; - - bool directoryOwner; - bool stale; - bool hasChanges; - bool closeDirectory; - - SegmentInfos* segmentInfos; - - CL_NS(store)::Directory* directory; - typedef CL_NS(util)::CLSet CloseCallbackMap; - CloseCallbackMap closeCallbacks; - - /** Internal use. Implements commit */ - virtual void doCommit() = 0; - - /** - * Tries to acquire the WriteLock on this directory. - * this method is only valid if this IndexReader is directory owner. - * - * @throws IOException If WriteLock cannot be acquired. - */ - void aquireWriteLock(); -protected: - /** - * Constructor used if IndexReader is not owner of its directory. - * This is used for IndexReaders that are used within other IndexReaders that take care or locking directories. - * - * @param directory Directory where IndexReader files reside. - */ - IndexReader(CL_NS(store)::Directory* dir); - - /** - * Constructor used if IndexReader is owner of its directory. - * If IndexReader is owner of its directory, it locks its directory in case of write operations. - * - * @param directory Directory where IndexReader files reside. - * @param segmentInfos Used for write-l - * @param closeDirectory - */ - IndexReader(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory); - - - /// Implements close. - virtual void doClose() = 0; - - /** Implements setNorm in subclass.*/ - virtual void doSetNorm(int32_t doc, const TCHAR* field, uint8_t value) = 0; - - /** Implements actual undeleteAll() in subclass. */ - virtual void doUndeleteAll() = 0; - - - /** Implements deletion of the document numbered docNum. - * Applications should call {@link #deleteDocument(int32_t)} or {@link #deleteDocuments(Term*)}. - */ - virtual void doDelete(const int32_t docNum) = 0; - -public: - - DEFINE_MUTEX(THIS_LOCK) - - ///Do not access this directly, only public so that MultiReader can access it - virtual void commit(); - - - /** Undeletes all documents currently marked as deleted in this index.*/ - void undeleteAll(); - - /** - * Get a list of unique field names that exist in this index and have the specified - * field option information. - * @param fldOption specifies which field option should be available for the returned fields - * @return Collection of Strings indicating the names of the fields. - * @see IndexReader.FieldOption - */ - virtual void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray) = 0; - - _CL_DEPRECATED( getFieldNames(FieldOption, StringArrayWithDeletor&) ) virtual TCHAR** getFieldNames(); - _CL_DEPRECATED( getFieldNames(FieldOption, StringArrayWithDeletor&) ) virtual TCHAR** getFieldNames(bool indexed); - - /** Returns the byte-encoded normalization factor for the named field of - * every document. This is used by the search code to score documents. - * - * The number of bytes returned is the size of the IndexReader->maxDoc() - * MEMORY: The values are cached, so don't delete the returned byte array. - * @see Field#setBoost(float_t) - */ - virtual uint8_t* norms(const TCHAR* field) = 0; - - - /** Reads the byte-encoded normalization factor for the named field of every - * document. This is used by the search code to score documents. - * - * @see Field#setBoost(float_t) - */ - virtual void norms(const TCHAR* field, uint8_t* bytes) = 0; - - /** Expert: Resets the normalization factor for the named field of the named - * document. - * - * @see #norms(TCHAR*) - * @see Similarity#decodeNorm(uint8_t) - */ - void setNorm(int32_t doc, const TCHAR* field, float_t value); - - /** Expert: Resets the normalization factor for the named field of the named - * document. The norm represents the product of the field's {@link - * Field#setBoost(float_t) boost} and its {@link Similarity#lengthNorm(TCHAR*, - * int32_t) length normalization}. Thus, to preserve the length normalization - * values when resetting this, one should base the new value upon the old. - * - * @see #norms(TCHAR*) - * @see Similarity#decodeNorm(uint8_t) - */ - void setNorm(int32_t doc, const TCHAR* field, uint8_t value); - - /// Release the write lock, if needed. - virtual ~IndexReader(); - - /// Returns an IndexReader reading the index in an FSDirectory in the named path. - static IndexReader* open(const char* path); - - /// Returns an IndexReader reading the index in the given Directory. - static IndexReader* open( CL_NS(store)::Directory* directory, bool closeDirectory=false); - - /** - * Returns the time the index in the named directory was last modified. - * Do not use this to check whether the reader is still up-to-date, use - * {@link #isCurrent()} instead. - */ - static uint64_t lastModified(const char* directory); - - /** - * Returns the time the index in the named directory was last modified. - * Do not use this to check whether the reader is still up-to-date, use - * {@link #isCurrent()} instead. - */ - static uint64_t lastModified(const CL_NS(store)::Directory* directory); - - - /** - * Reads version number from segments files. The version number is - * initialized with a timestamp and then increased by one for each change of - * the index. - * - * @param directory where the index resides. - * @return version number. - * @throws IOException if segments file cannot be read - */ - static int64_t getCurrentVersion(CL_NS(store)::Directory* directory); - - /** - * Reads version number from segments files. The version number is - * initialized with a timestamp and then increased by one for each change of - * the index. - * - * @param directory where the index resides. - * @return version number. - * @throws IOException if segments file cannot be read - */ - static int64_t getCurrentVersion(const char* directory); - - /** - * Version number when this IndexReader was opened. - */ - int64_t getVersion(); - - /** - * Check whether this IndexReader still works on a current version of the index. - * If this is not the case you will need to re-open the IndexReader to - * make sure you see the latest changes made to the index. - * - * @throws IOException - */ - bool isCurrent(); - - - /** - * Return an array of term frequency vectors for the specified document. - * The array contains a vector for each vectorized field in the document. - * Each vector contains terms and frequencies for all terms in a given vectorized field. - * If no such fields existed, the method returns null. The term vectors that are - * returned my either be of type TermFreqVector or of type TermPositionsVector if - * positions or offsets have been stored. - * - * @param docNumber document for which term frequency vectors are returned - * @return array of term frequency vectors. May be null if no term vectors have been - * stored for the specified document. - * @throws IOException if index cannot be accessed - * @see org.apache.lucene.document.Field.TermVector - */ - virtual bool getTermFreqVectors(int32_t docNumber, Array& result) =0; - - /** - * Return a term frequency vector for the specified document and field. The - * returned vector contains terms and frequencies for the terms in - * the specified field of this document, if the field had the storeTermVector - * flag set. If termvectors had been stored with positions or offsets, a - * TermPositionsVector is returned. - * - * @param docNumber document for which the term frequency vector is returned - * @param field field for which the term frequency vector is returned. - * @return term frequency vector May be null if field does not exist in the specified - * document or term vector was not stored. - * @throws IOException if index cannot be accessed - * @see org.apache.lucene.document.Field.TermVector - */ - virtual TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field) = 0; - - /** - * Returns true if an index exists at the specified directory. - * If the directory does not exist or if there is no index in it. - * @param directory the directory to check for an index - * @return true if an index exists; false otherwise - */ - static bool indexExists(const char* directory); - - /** - * Returns true if an index exists at the specified directory. - * If the directory does not exist or if there is no index in it. - * @param directory the directory to check for an index - * @return true if an index exists; false otherwise - * @throws IOException if there is a problem with accessing the index - */ - static bool indexExists(const CL_NS(store)::Directory* directory); - - /** Returns the number of documents in this index. */ - virtual int32_t numDocs() = 0; - - /** Returns one greater than the largest possible document number. - * This may be used to, e.g., determine how big to allocate an array which - * will have an element for every document number in an index. - */ - virtual int32_t maxDoc() const = 0; - - /** Gets the stored fields of the nth - * Document in this index. - * The fields are not cleared before retrieving the document, so the - * object should be new or just cleared. - */ - virtual bool document(int32_t n, CL_NS(document)::Document*) =0; - - _CL_DEPRECATED( document(i, document) ) CL_NS(document)::Document* document(const int32_t n); - - /** Returns true if document n has been deleted */ - virtual bool isDeleted(const int32_t n) = 0; - - /** Returns true if any documents have been deleted */ - virtual bool hasDeletions() const = 0; - - /** Returns true if there are norms stored for this field. */ - virtual bool hasNorms(const TCHAR* field); - - /** Returns an enumeration of all the terms in the index. - * The enumeration is ordered by Term.compareTo(). Each term - * is greater than all that precede it in the enumeration. - * @memory Caller must clean up - */ - virtual TermEnum* terms() const =0; - - /** Returns an enumeration of all terms after a given term. - * The enumeration is ordered by Term.compareTo(). Each term - * is greater than all that precede it in the enumeration. - * @memory Caller must clean up - */ - virtual TermEnum* terms(const Term* t) const = 0; - - /** Returns the number of documents containing the term t. */ - virtual int32_t docFreq(const Term* t) const = 0; - - /* Returns an unpositioned TermPositions enumerator. - * @memory Caller must clean up - */ - virtual TermPositions* termPositions() const = 0; - - /** Returns an enumeration of all the documents which contain - * term. For each document, in addition to the document number - * and frequency of the term in that document, a list of all of the ordinal - * positions of the term in the document is available. Thus, this method - * implements the mapping: - * - *

    - * Term    =>    <docNum, freq, - * <pos1, pos2, ... - * posfreq-1> - * >* - *
- *

This positional information faciliates phrase and proximity searching. - *

The enumeration is ordered by document number. Each document number is - * greater than all that precede it in the enumeration. - * @memory Caller must clean up - */ - TermPositions* termPositions(Term* term) const; - - /** Returns an unpositioned {@link TermDocs} enumerator. - * @memory Caller must clean up - */ - virtual TermDocs* termDocs() const = 0; - - /** Returns an enumeration of all the documents which contain - * term. For each document, the document number, the frequency of - * the term in that document is also provided, for use in search scoring. - * Thus, this method implements the mapping: - *

    Term    =>    <docNum, freq>*
- *

The enumeration is ordered by document number. Each document number - * is greater than all that precede it in the enumeration. - * @memory Caller must clean up - */ - TermDocs* termDocs(Term* term) const; - - /** Deletes the document numbered docNum. Once a document is - * deleted it will not appear in TermDocs or TermPostitions enumerations. - * Attempts to read its field with the {@link #document} - * method will result in an error. The presence of this document may still be - * reflected in the {@link #docFreq} statistic, though - * this will be corrected eventually as the index is further modified. - */ - void deleteDocument(const int32_t docNum); - - ///@deprecated. Use deleteDocument instead. - _CL_DEPRECATED( deleteDocument ) void deleteDoc(const int32_t docNum){ deleteDocument(docNum); } - - /** Deletes all documents containing term. - * This is useful if one uses a document field to hold a unique ID string for - * the document. Then to delete such a document, one merely constructs a - * term with the appropriate field and the unique ID string as its text and - * passes it to this method. - * See {@link #deleteDocument(int)} for information about when this deletion will - * become effective. - * @return the number of documents deleted - */ - int32_t deleteDocuments(Term* term); - - ///@deprecated. Use deleteDocuments instead. - _CL_DEPRECATED( deleteDocuments ) int32_t deleteTerm(Term* term){ return deleteDocuments(term); } - - /** - * Closes files associated with this index and also saves any new deletions to disk. - * No other methods should be called after this has been called. - */ - void close(); - - ///Checks if the index in the named directory is currently locked. - static bool isLocked(CL_NS(store)::Directory* directory); - - ///Checks if the index in the named directory is currently locked. - static bool isLocked(const char* directory); - - - ///Forcibly unlocks the index in the named directory. - ///Caution: this should only be used by failure recovery code, - ///when it is known that no other process nor thread is in fact - ///currently accessing this index. - static void unlock(CL_NS(store)::Directory* directory); - static void unlock(const char* path); - - /** Returns the directory this index resides in. */ - CL_NS(store)::Directory* getDirectory() { return directory; } - - /** Returns true if the file is a lucene filename (based on extension or filename) */ - static bool isLuceneFile(const char* filename); - - /** - * For classes that need to know when the IndexReader closes (such as caches, etc), - * should pass their callback function to this. - */ - void addCloseCallback(CloseCallback callback, void* parameter); - -protected: - class LockWith:public CL_NS(store)::LuceneLockWith{ - public: - CL_NS(store)::Directory* directory; - IndexReader* indexReader; - - //Constructor - LockWith(CL_NS(store)::LuceneLock* lock, CL_NS(store)::Directory* dir); - - //Reads the segmentinfo file and depending on the number of segments found - //it returns a MultiReader or a SegmentReader - IndexReader* doBody(); - - }; - friend class IndexReader::LockWith; - - class CommitLockWith:public CL_NS(store)::LuceneLockWith{ - private: - IndexReader* reader; - public: - - //Constructor - CommitLockWith( CL_NS(store)::LuceneLock* lock, IndexReader* r ); - void doBody(); - }; - friend class IndexReader::CommitLockWith; -}; - -CL_NS_END -#endif - - diff -Nru clucene-core-0.9.21b/src/CLucene/index/IndexWriter.cpp clucene-core-2.3.3.4/src/CLucene/index/IndexWriter.cpp --- clucene-core-0.9.21b/src/CLucene/index/IndexWriter.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/IndexWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,690 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "IndexWriter.h" - -#include "CLucene/document/Document.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/Lock.h" -#include "CLucene/util/VoidList.h" -#include "DocumentWriter.h" -#include "SegmentInfos.h" -#include "SegmentMerger.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_USE(document) -CL_NS_USE(analysis) -CL_NS_DEF(index) - - - const char* IndexWriter::WRITE_LOCK_NAME = "write.lock"; - const char* IndexWriter::COMMIT_LOCK_NAME = "commit.lock"; - - IndexWriter::IndexWriter(const char* path, Analyzer* a, const bool create, const bool _closeDir): - directory( FSDirectory::getDirectory(path, create) ), - analyzer(a), - segmentInfos (_CLNEW SegmentInfos), - closeDir(_closeDir){ - //Func - Constructor - // Constructs an IndexWriter for the index in path. - //Pre - path != NULL and contains a named directory path - // a holds a valid reference to an analyzer and analyzes the text to be indexed - // create indicates if the indexWriter must create a new index located at path or just open it - //Post - If create is true, then a new, empty index has been created in path, replacing the index - // already there, if any. The named directory path is owned by this Instance - - CND_PRECONDITION(path != NULL, "path is NULL"); - - //Continue initializing the instance by _IndexWriter - _IndexWriter ( create ); - } - - IndexWriter::IndexWriter(Directory* d, Analyzer* a, const bool create, const bool _closeDir): - directory(_CL_POINTER(d)), - analyzer(a), - segmentInfos (_CLNEW SegmentInfos), - closeDir(_closeDir) - { - //Func - Constructor - // Constructs an IndexWriter for the index in path. - //Pre - d contains a valid reference to a directory - // a holds a valid reference to an analyzer and analyzes the text to be indexed - // create indicates if the indexWriter must create a new index located at path or just open it - //Post - If create is true, then a new, empty index has been created in path, replacing the index - // already there, if any. The directory d is not owned by this Instance - - //Continue initializing the instance by _IndexWriter - _IndexWriter ( create ); - } - - void IndexWriter::_IndexWriter(const bool create){ - //Func - Initialises the instances - //Pre - create indicates if the indexWriter must create a new index located at path or just open it - //Post - - - similarity = CL_NS(search)::Similarity::getDefault(); - - useCompoundFile = true; - if ( directory->getDirectoryType() == RAMDirectory::DirectoryType() ) - useCompoundFile = false; - - //Create a ramDirectory - ramDirectory = _CLNEW TransactionalRAMDirectory; - - CND_CONDITION(ramDirectory != NULL,"ramDirectory is NULL"); - - //Initialize the writeLock to - writeLock = NULL; - - //initialise the settings... - maxFieldLength = DEFAULT_MAX_FIELD_LENGTH; - mergeFactor = DEFAULT_MERGE_FACTOR; - maxMergeDocs = DEFAULT_MAX_MERGE_DOCS; - writeLockTimeout = WRITE_LOCK_TIMEOUT; - commitLockTimeout = COMMIT_LOCK_TIMEOUT; - minMergeDocs = DEFAULT_MAX_BUFFERED_DOCS; - termIndexInterval = DEFAULT_TERM_INDEX_INTERVAL; - - //Create a new lock using the name "write.lock" - LuceneLock* newLock = directory->makeLock(IndexWriter::WRITE_LOCK_NAME); - - //Condition check to see if newLock has been allocated properly - CND_CONDITION(newLock != NULL, "No memory could be allocated for LuceneLock newLock"); - - //Try to obtain a write lock - if (!newLock->obtain(writeLockTimeout)){ - //Write lock could not be obtained so delete it - _CLDELETE(newLock); - //Reset the instance - _finalize(); - //throw an exception because no writelock could be created or obtained - _CLTHROWA(CL_ERR_IO, "Index locked for write or no write access." ); - } - - //The Write Lock has been obtained so save it for later use - this->writeLock = newLock; - - //Create a new lock using the name "commit.lock" - LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - - //Condition check to see if lock has been allocated properly - CND_CONDITION(lock != NULL, "No memory could be allocated for LuceneLock lock"); - - LockWith2 with ( lock,commitLockTimeout,this, NULL, create ); - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - with.run(); - } - - //Release the commit lock - _CLDELETE(lock); - - isOpen = true; - } - - void IndexWriter::_finalize(){ - //Func - Releases all the resources of the instance - //Pre - true - //Post - All the releases have been released - - if(writeLock != NULL){ - //release write lock - writeLock->release(); - _CLDELETE( writeLock ); - } - - //Delete the ramDirectory - if ( ramDirectory != NULL ){ - ramDirectory->close(); - _CLDECDELETE(ramDirectory); - } - - //clear segmentInfos and delete it - _CLDELETE(segmentInfos); - - } - - IndexWriter::~IndexWriter() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - close(); - _finalize(); - } - - - void IndexWriter::close( ) { - //Func - Flushes all changes to an index, closes all associated files, and closes - // the directory that the index is stored in. - //Pre - closeDir indicates if the directory must be closed or not - //Post - All the changes have been flushed to disk and the write lock has been released - // The ramDirectory has also been closed. The directory has been closed - // if the reference count of the directory reaches zero - - SCOPED_LOCK_MUTEX(THIS_LOCK) - if ( isOpen ){ - //Flush the Ram Segments - flushRamSegments(); - //Close the ram directory - if ( ramDirectory != NULL ){ - ramDirectory->close(); - _CLDECDELETE(ramDirectory); - } - - //Check if this instance must close the directory - if ( closeDir ){ - directory->close(); - } - _CLDECDELETE(directory); - - // release write lock - if (writeLock != NULL){ - writeLock->release(); - _CLDELETE( writeLock ); - } - - isOpen = false; - } - } - - - int32_t IndexWriter::docCount(){ - //Func - Counts the number of documents in the index - //Pre - true - //Post - The number of documents have been returned - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - //Initialize count - int32_t count = 0; - - //Iterate through all segmentInfos - for (int32_t i = 0; i < segmentInfos->size(); i++) { - //Get the i-th SegmentInfo - SegmentInfo* si = segmentInfos->info(i); - //Retrieve the number of documents of the segment and add it to count - count += si->docCount; - } - return count; - } - - void IndexWriter::addDocument(Document* doc, Analyzer* analyzer) { - //Func - Adds a document to the index - //Pre - doc contains a valid reference to a document - // ramDirectory != NULL - //Post - The document has been added to the index of this IndexWriter - CND_PRECONDITION(ramDirectory != NULL,"ramDirectory is NULL"); - - if ( analyzer == NULL ) - analyzer = this->analyzer; - - ramDirectory->transStart(); - try { - char* segmentName = newSegmentName(); - CND_CONDITION(segmentName != NULL, "segmentName is NULL"); - try { - //Create the DocumentWriter using a ramDirectory and analyzer - // supplied by the IndexWriter (this). - DocumentWriter* dw = _CLNEW DocumentWriter( - ramDirectory, analyzer, this ); - CND_CONDITION(dw != NULL, "dw is NULL"); - try { - //Add the client-supplied document to the new segment. - dw->addDocument(segmentName, doc); - } _CLFINALLY( - _CLDELETE(dw); - ); - - //Create a new SegmentInfo instance about this new segment. - SegmentInfo* si = _CLNEW SegmentInfo(segmentName, 1, ramDirectory); - CND_CONDITION(si != NULL, "Si is NULL"); - - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - - //Add the info object for this particular segment to the list - // of all segmentInfos-> - segmentInfos->add(si); - - //Check to see if the segments must be merged - maybeMergeSegments(); - } - } _CLFINALLY( - _CLDELETE_CaARRAY(segmentName); - ); - - } catch (...) { - ramDirectory->transAbort(); - throw; - } - ramDirectory->transCommit(); - } - - - void IndexWriter::optimize() { - //Func - Optimizes the index for which this Instance is responsible - //Pre - true - //Post - - SCOPED_LOCK_MUTEX(THIS_LOCK) - //Flush the RamSegments to disk - flushRamSegments(); - while (segmentInfos->size() > 1 || - (segmentInfos->size() == 1 && - (SegmentReader::hasDeletions(segmentInfos->info(0)) || - segmentInfos->info(0)->getDir()!=directory || - (useCompoundFile && - (!SegmentReader::usesCompoundFile(segmentInfos->info(0)) || - SegmentReader::hasSeparateNorms(segmentInfos->info(0))))))) { - - int32_t minSegment = segmentInfos->size() - mergeFactor; - - mergeSegments(minSegment < 0 ? 0 : minSegment); - } - } - - - char* IndexWriter::newSegmentName() { - SCOPED_LOCK_MUTEX(THIS_LOCK) - - TCHAR buf[9]; - _i64tot(segmentInfos->counter++,buf,36); //36 is RADIX of 10 digits and 26 numbers - - int32_t rlen = _tcslen(buf) + 2; - char* ret = _CL_NEWARRAY(char,rlen); - strcpy(ret,"_"); - STRCPY_TtoA(ret+1,buf,rlen-1); //write at 2nd character, for a maximum of 9 characters - return ret; - } - - void IndexWriter::flushRamSegments() { - //Func - Merges all RAM-resident segments. - //Pre - ramDirectory != NULL - //Post - The RAM-resident segments have been merged to disk - - CND_PRECONDITION(ramDirectory != NULL, "ramDirectory is NULL"); - - int32_t minSegment = segmentInfos->size()-1; //don't make this unsigned... - CND_CONDITION(minSegment >= -1, "minSegment must be >= -1"); - - int32_t docCount = 0; - //Iterate through all the segements and check if the directory is a ramDirectory - while (minSegment >= 0 && - segmentInfos->info(minSegment)->getDir() == ramDirectory) { - docCount += segmentInfos->info(minSegment)->docCount; - minSegment--; - } - if (minSegment < 0 || // add one FS segment? - (docCount + segmentInfos->info(minSegment)->docCount) > mergeFactor || - !(segmentInfos->info(segmentInfos->size()-1)->getDir() == ramDirectory)) - minSegment++; - - CND_CONDITION(minSegment >= 0, "minSegment must be >= 0"); - if (minSegment >= segmentInfos->size()) - return; // none to merge - mergeSegments(minSegment); - } - - void IndexWriter::maybeMergeSegments() { - //Func - Incremental Segment Merger - //Pre - - //Post - - - int64_t targetMergeDocs = minMergeDocs; - - // find segments smaller than current target size - while (targetMergeDocs <= maxMergeDocs) { - int32_t minSegment = segmentInfos->size(); - int32_t mergeDocs = 0; - - while (--minSegment >= 0) { - SegmentInfo* si = segmentInfos->info(minSegment); - if (si->docCount >= targetMergeDocs) - break; - mergeDocs += si->docCount; - } - - if (mergeDocs >= targetMergeDocs){ - // found a merge to do - mergeSegments(minSegment+1); - }else - break; - - //increase target size - targetMergeDocs *= mergeFactor; - } - } - - void IndexWriter::mergeSegments(const uint32_t minSegment) { - mergeSegments(minSegment, segmentInfos->size()); - } - - void IndexWriter::mergeSegments(const uint32_t minSegment, const uint32_t end) { - CLVector segmentsToDelete(false); - const char* mergedName = newSegmentName(); -#ifdef _CL_DEBUG_INFO - fprintf(_CL_DEBUG_INFO, "merging segments\n"); -#endif - SegmentMerger merger(this, mergedName); - for (size_t i = minSegment; i < end; i++) { - SegmentInfo* si = segmentInfos->info(i); -#ifdef _CL_DEBUG_INFO - fprintf(_CL_DEBUG_INFO, " %s (%d docs)\n",si->name,si->docCount); -#endif - SegmentReader* reader = _CLNEW SegmentReader(si); - merger.add(reader); - if ((reader->getDirectory() == this->directory) || // if we own the directory - (reader->getDirectory() == this->ramDirectory)){ - segmentsToDelete.push_back(reader); // queue segment for deletion - } - } - - int32_t mergedDocCount = merger.merge(); - -#ifdef _CL_DEBUG_INFO - fprintf(_CL_DEBUG_INFO,"\n into %s (%d docs)\n",mergedName, mergedDocCount); -#endif - - segmentInfos->clearto(minSegment);// remove old infos & add new - segmentInfos->add( _CLNEW SegmentInfo(mergedName, mergedDocCount, directory) ); - - // close readers before we attempt to delete now-obsolete segments - merger.closeReaders(); - - LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - LockWith2 with ( lock, commitLockTimeout,this, &segmentsToDelete, true ); - - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - with.run(); - } - _CLDELETE( lock ); - - - - if (useCompoundFile) { - char cmpdTmpName[CL_MAX_PATH]; - strcpy(cmpdTmpName,mergedName); - strcat(cmpdTmpName,".tmp"); - - AStringArrayWithDeletor filesToDelete; - merger.createCompoundFile(cmpdTmpName, filesToDelete); - - LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - LockWithCFS with ( lock,commitLockTimeout,directory, this, mergedName, &filesToDelete); - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - with.run(); - } - _CLDELETE(lock); - } - - _CLDELETE_CaARRAY( mergedName ); - } - - void IndexWriter::deleteSegments(CLVector* segments) { - AStringArrayWithDeletor deletable; - - {//scope delete deleteArray object - AStringArrayWithDeletor deleteArray; - readDeleteableFiles(deleteArray); - deleteFiles(deleteArray, deletable); // try to delete deleteable - } - - AStringArrayWithDeletor files; - for (uint32_t i = 0; i < segments->size(); i++) { - SegmentReader* reader = (*segments)[i]; - files.clear(); - reader->files(files); - if (reader->getDirectory() == this->directory) - deleteFiles(files, deletable); // try to delete our files - else - deleteFiles(files, reader->getDirectory()); // delete, eg, RAM files - } - - writeDeleteableFiles(deletable); // note files we can't delete - } - - void IndexWriter::readDeleteableFiles(AStringArrayWithDeletor& result) { - if (!directory->fileExists("deletable")) - return; - - IndexInput* input = directory->openInput("deletable"); - try { - TCHAR tname[CL_MAX_PATH]; - for (int32_t i = input->readInt(); i > 0; i--){ // read file names - input->readString(tname,CL_MAX_PATH); - result.push_back(STRDUP_TtoA(tname)); - } - } _CLFINALLY( - input->close(); - _CLDELETE(input); - ); - } - - void IndexWriter::writeDeleteableFiles(AStringArrayWithDeletor& files) { - IndexOutput* output = directory->createOutput("deleteable.new"); - try { - output->writeInt(files.size()); - TCHAR tfile[CL_MAX_PATH]; //temporary space for tchar file name - for (uint32_t i = 0; i < files.size(); i++){ - STRCPY_AtoT(tfile,files[i],CL_MAX_PATH); - output->writeString( tfile, _tcslen(tfile) ); - } - } _CLFINALLY( - output->close(); - _CLDELETE(output); - ); - - directory->renameFile("deleteable.new", "deletable"); - } - - void IndexWriter::deleteFiles(AStringArrayWithDeletor& files){ - AStringArrayWithDeletor deletable; - AStringArrayWithDeletor currDeletable; - readDeleteableFiles(currDeletable); - deleteFiles(currDeletable, deletable); // try to delete deleteable - deleteFiles(files, deletable); // try to delete our files - writeDeleteableFiles(deletable); // note files we can't delete - } - - void IndexWriter::deleteFiles(AStringArrayWithDeletor& files, Directory* directory) { - AStringArrayWithDeletor::iterator itr = files.begin(); - while ( itr != files.end() ){ - directory->deleteFile( *itr, true ); - ++itr; - } - } - - void IndexWriter::deleteFiles(AStringArrayWithDeletor& files, AStringArrayWithDeletor& deletable) { - AStringArrayWithDeletor::iterator itr=files.begin(); - while ( itr != files.end() ){ - const char* file = *itr; - if ( getDirectory()->fileExists(file) ){ - if ( !getDirectory()->deleteFile(file, false) ){ - if (directory->fileExists(file)) { - #ifdef _CL_DEBUG_INFO - fprintf(_CL_DEBUG_INFO,"%s; Will re-try later.\n", err.what()); - #endif - deletable.push_back(STRDUP_AtoA(file)); // add to deletable - } - } - } - ++itr; - } - } - - - - void IndexWriter::addIndexes(Directory** dirs) { - //Func - Add several indexes located in different directories into the current - // one managed by this instance - //Pre - dirs != NULL and contains directories of several indexes - // dirsLength > 0 and contains the number of directories - //Post - The indexes located in the directories in dirs have been merged with - // the pre(current) index. The Resulting index has also been optimized - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(dirs != NULL, "dirs is NULL"); - - // start with zero or 1 seg so optimize the current - optimize(); - - int32_t start = segmentInfos->size(); - - //Iterate through the directories - int32_t i = 0; - while ( dirs[i] != NULL ) { - // DSR: Changed SegmentInfos constructor arg (see bug discussion below). - SegmentInfos sis(false); - sis.read( dirs[i]); - - for (int32_t j = 0; j < sis.size(); j++) { - segmentInfos->add(sis.info(j)); // add each info - } - i++; - } - -// commented out by tbusch to solve a bug and to be conform with -// java lucene - - // merge newly added segments in log(n) passes -// while (segmentInfos->size() > start+mergeFactor) { -// for (int32_t base = start; base < segmentInfos->size(); base++) { -// int32_t end = min(segmentInfos->size(), base+mergeFactor); -// if (end-base > 1) { -// mergeSegments(base, end); -// } -// } -// } - - optimize(); // cleanup - } - - - void IndexWriter::addIndexes(IndexReader** readers){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - optimize(); // start with zero or 1 seg - - char* mergedName = newSegmentName(); - SegmentMerger merger(this, mergedName); - - CLVector segmentsToDelete; - SegmentReader* sReader = NULL; - if (segmentInfos->size() == 1){ // add existing index, if any - sReader = _CLNEW SegmentReader(segmentInfos->info(0)); - merger.add(sReader); - segmentsToDelete.push_back(sReader); // queue segment for deletion - } - - int32_t readersLength = 0; - while ( readers[readersLength] != NULL ) - merger.add(readers[readersLength++]); - - int32_t docCount = merger.merge(); // merge 'em - - // pop old infos & add new - segmentInfos->clearto(0); - segmentInfos->add(_CLNEW SegmentInfo(mergedName, docCount, directory)); - - if ( sReader != NULL ){ - sReader->close(); - _CLDELETE(sReader); - } - - LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - LockWith2 with ( lock,commitLockTimeout,this, &segmentsToDelete, true); - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - with.run(); - } - _CLDELETE(lock); - - if (useCompoundFile) { - char cmpdTmpName[CL_MAX_PATH]; - strcpy(cmpdTmpName,mergedName); - strcat(cmpdTmpName,".tmp"); - - AStringArrayWithDeletor filesToDelete; - merger.createCompoundFile(cmpdTmpName, filesToDelete); - - LuceneLock* cfslock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME); - LockWithCFS with ( lock,commitLockTimeout,directory, this, mergedName, &filesToDelete); - { - SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync - with.run(); - } - _CLDELETE(cfslock); - } - _CLDELETE_CaARRAY(mergedName); - } - - - IndexWriter::LockWith2::LockWith2(CL_NS(store)::LuceneLock* lock, int64_t lockWaitTimeout, - IndexWriter* wr, - CL_NS(util)::CLVector* std, - bool create): - CL_NS(store)::LuceneLockWith(lock,lockWaitTimeout) - { - this->writer = wr; - this->segmentsToDelete = std; - this->create = create; - } - - void IndexWriter::LockWith2::doBody() { - //Func - Writes segmentInfos to or reads segmentInfos from disk - //Pre - writer != NULL - //Post - if create is true then segementInfos has been written to disk otherwise - // segmentInfos has been read from disk - - CND_PRECONDITION(writer != NULL, "writer is NULL"); - - if (create){ - writer->segmentInfos->write(writer->getDirectory()); - if ( segmentsToDelete != NULL ) - writer->deleteSegments(segmentsToDelete); // delete now-unused segments - }else - writer->segmentInfos->read(writer->getDirectory()); - } - - IndexWriter::LockWithCFS::LockWithCFS(CL_NS(store)::LuceneLock* lock, int64_t lockWaitTimeout, - CL_NS(store)::Directory* dir, - IndexWriter* wr, - const char* segName, - CL_NS(util)::AStringArrayWithDeletor* ftd): - CL_NS(store)::LuceneLockWith(lock,lockWaitTimeout) - { - this->segName = segName; - this->directory = dir; - this->writer = wr; - this->filesToDelete = ftd; - } - void IndexWriter::LockWithCFS::doBody() { - //Func - Writes segmentInfos to or reads segmentInfos from disk - //Pre - writer != NULL - //Post - if create is true then segementInfos has been written to disk otherwise - // segmentInfos has been read from disk - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - CND_PRECONDITION(segName != NULL, "mergedName is NULL"); - - char from[CL_MAX_PATH]; - char nu[CL_MAX_PATH]; - - strcpy(from,segName); - strcat(from,".tmp"); - strcpy(nu,segName); - strcat(nu,".cfs"); - - // make compound file visible for SegmentReaders - directory->renameFile(from, nu); - // delete now unused files of segment - writer->deleteFiles(*filesToDelete); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/IndexWriter.h clucene-core-2.3.3.4/src/CLucene/index/IndexWriter.h --- clucene-core-0.9.21b/src/CLucene/index/IndexWriter.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/IndexWriter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,411 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_IndexWriter_ -#define _lucene_index_IndexWriter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/util/VoidList.h" -#include "CLucene/search/Similarity.h" -#include "CLucene/store/Lock.h" -#include "CLucene/store/TransactionalRAMDirectory.h" - -#include "SegmentHeader.h" - -CL_NS_DEF(index) - -/** -An IndexWriter creates and maintains an index. - -The third argument to the -constructor -determines whether a new index is created, or whether an existing index is -opened for the addition of new documents. - -In either case, documents are added with the addDocument method. -When finished adding documents, close should be called. - -

If an index will not have more documents added for a while and optimal search -performance is desired, then the optimize -method should be called before the index is closed. - -

Opening an IndexWriter creates a lock file for the directory in use. Trying to open -another IndexWriter on the same directory will lead to an IOException. The IOException -is also thrown if an IndexReader on the same directory is used to delete documents -from the index. - -@see IndexModifier IndexModifier supports the important methods of IndexWriter plus deletion -*/ -class IndexWriter:LUCENE_BASE { - class LockWith2:public CL_NS(store)::LuceneLockWith{ - public: - CL_NS(util)::CLVector* segmentsToDelete; - IndexWriter* writer; - bool create; - void doBody(); - LockWith2(CL_NS(store)::LuceneLock* lock, int64_t lockWaitTimeout, - IndexWriter* wr, - CL_NS(util)::CLVector* std, - bool create); - ~LockWith2(){ - } - }; - friend class LockWith2; - - class LockWithCFS:public CL_NS(store)::LuceneLockWith{ - public: - CL_NS(store)::Directory* directory; - IndexWriter* writer; - const char* segName; - CL_NS(util)::AStringArrayWithDeletor* filesToDelete; - void doBody(); - LockWithCFS(CL_NS(store)::LuceneLock* lock, int64_t lockWaitTimeout, - CL_NS(store)::Directory* dir, - IndexWriter* wr, - const char* segName, - CL_NS(util)::AStringArrayWithDeletor* ftd); - ~LockWithCFS(){ - } - }; - friend class IndexWriter::LockWithCFS; - - bool isOpen; //indicates if the writers is open - this way close can be called multiple times - - // how to analyze text - CL_NS(analysis)::Analyzer* analyzer; - - CL_NS(search)::Similarity* similarity; // how to normalize - - /** Use compound file setting. Normally defaults to true, except when - * using a RAMDirectory. This minimizes the number of files used. - * Setting this to false may improve indexing performance, but - * may also cause file handle problems. - */ - bool useCompoundFile; - bool closeDir; - - CL_NS(store)::TransactionalRAMDirectory* ramDirectory; // for temp segs - - CL_NS(store)::LuceneLock* writeLock; - - void _IndexWriter(const bool create); - - void _finalize(); - - // where this index resides - CL_NS(store)::Directory* directory; - - - int32_t getSegmentsCounter(){ return segmentInfos->counter; } - int32_t maxFieldLength; - int32_t mergeFactor; - int32_t minMergeDocs; - int32_t maxMergeDocs; - int32_t termIndexInterval; - - int64_t writeLockTimeout; - int64_t commitLockTimeout; -public: - DEFINE_MUTEX(THIS_LOCK) - - // Release the write lock, if needed. - SegmentInfos* segmentInfos; - - // Release the write lock, if needed. - ~IndexWriter(); - - /** - * The Java implementation of Lucene silently truncates any tokenized - * field if the number of tokens exceeds a certain threshold. Although - * that threshold is adjustable, it is easy for the client programmer - * to be unaware that such a threshold exists, and to become its - * unwitting victim. - * CLucene implements a less insidious truncation policy. Up to - * DEFAULT_MAX_FIELD_LENGTH tokens, CLucene behaves just as JLucene - * does. If the number of tokens exceeds that threshold without any - * indication of a truncation preference by the client programmer, - * CLucene raises an exception, prompting the client programmer to - * explicitly set a truncation policy by adjusting maxFieldLength. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_FIELD_LENGTH = 10000); - LUCENE_STATIC_CONSTANT(int32_t, FIELD_TRUNC_POLICY__WARN = -1); - int32_t getMaxFieldLength() const{ return maxFieldLength; } - void setMaxFieldLength(int32_t val){ maxFieldLength = val; } - - /** - * Default value is 10. Change using {@link #setMaxBufferedDocs(int)}. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_BUFFERED_DOCS = 10); - /** Determines the minimal number of documents required before the buffered - * in-memory documents are merging and a new Segment is created. - * Since Documents are merged in a {@link RAMDirectory}, - * large value gives faster indexing. At the same time, mergeFactor limits - * the number of files open in a FSDirectory. - * - *

The default value is DEFAULT_MAX_BUFFERED_DOCS.*/ - void setMaxBufferedDocs(int32_t val){ minMergeDocs = val; } - /** - * @see #setMaxBufferedDocs - */ - int32_t getMaxBufferedDocs(){ return minMergeDocs; } - - /** - * Default value for the write lock timeout (1,000). - */ - LUCENE_STATIC_CONSTANT(int64_t, WRITE_LOCK_TIMEOUT = 1000); - /** - * Sets the maximum time to wait for a write lock (in milliseconds). - */ - void setWriteLockTimeout(int64_t writeLockTimeout) { this->writeLockTimeout = writeLockTimeout; } - /** - * @see #setWriteLockTimeout - */ - int64_t getWriteLockTimeout() { return writeLockTimeout; } - - /** - * Default value for the commit lock timeout (10,000). - */ - LUCENE_STATIC_CONSTANT(int64_t, COMMIT_LOCK_TIMEOUT = 10000); - /** - * Sets the maximum time to wait for a commit lock (in milliseconds). - */ - void setCommitLockTimeout(int64_t commitLockTimeout) { this->commitLockTimeout = commitLockTimeout; } - /** - * @see #setCommitLockTimeout - */ - int64_t getCommitLockTimeout() { return commitLockTimeout; } - - static const char* WRITE_LOCK_NAME; //"write.lock"; - static const char* COMMIT_LOCK_NAME; //"commit.lock"; - - /** - * Default value is 10. Change using {@link #setMergeFactor(int)}. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MERGE_FACTOR = 10); - /* Determines how often segment indices are merged by addDocument(). With - * smaller values, less RAM is used while indexing, and searches on - * unoptimized indices are faster, but indexing speed is slower. With larger - * values more RAM is used while indexing and searches on unoptimized indices - * are slower, but indexing is faster. Thus larger values (> 10) are best - * for batched index creation, and smaller values (< 10) for indices that are - * interactively maintained. - * - *

This must never be less than 2. The default value is 10. - */ - int32_t getMergeFactor() const{ return mergeFactor; } - void setMergeFactor(int32_t val){ mergeFactor = val; } - - - /** Expert: The fraction of terms in the "dictionary" which should be stored - * in RAM. Smaller values use more memory, but make searching slightly - * faster, while larger values use less memory and make searching slightly - * slower. Searching is typically not dominated by dictionary lookup, so - * tweaking this is rarely useful. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_TERM_INDEX_INTERVAL = 128); - /** Expert: Set the interval between indexed terms. Large values cause less - * memory to be used by IndexReader, but slow random-access to terms. Small - * values cause more memory to be used by an IndexReader, and speed - * random-access to terms. - * - * This parameter determines the amount of computation required per query - * term, regardless of the number of documents that contain that term. In - * particular, it is the maximum number of other terms that must be - * scanned before a term is located and its frequency and position information - * may be processed. In a large index with user-entered query terms, query - * processing time is likely to be dominated not by term lookup but rather - * by the processing of frequency and positional data. In a small index - * or when many uncommon query terms are generated (e.g., by wildcard - * queries) term lookup may become a dominant cost. - * - * In particular, numUniqueTerms/interval terms are read into - * memory by an IndexReader, and, on average, interval/2 terms - * must be scanned for each random term access. - * - * @see #DEFAULT_TERM_INDEX_INTERVAL - */ - void setTermIndexInterval(int32_t interval) { termIndexInterval = interval; } - /** Expert: Return the interval between indexed terms. - * - * @see #setTermIndexInterval(int) - */ - int32_t getTermIndexInterval() { return termIndexInterval; } - - /** Determines the minimal number of documents required before the buffered - * in-memory documents are merging and a new Segment is created. - * Since Documents are merged in a {@link RAMDirectory}, - * large value gives faster indexing. At the same time, mergeFactor limits - * the number of files open in a FSDirectory. - * - *

The default value is 10.*/ - int32_t getMinMergeDocs() const{ return minMergeDocs; } - void setMinMergeDocs(int32_t val){ minMergeDocs = val; } - - /** Determines the largest number of documents ever merged by addDocument(). - * Small values (e.g., less than 10,000) are best for interactive indexing, - * as this limits the length of pauses while indexing to a few seconds. - * Larger values are best for batched indexing and speedier searches. - * - *

The default value is {@link #DEFAULT_MAX_MERGE_DOCS}. - */ - LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_MERGE_DOCS = LUCENE_INT32_MAX_SHOULDBE); - /**Determines the largest number of documents ever merged by addDocument(). - * Small values (e.g., less than 10,000) are best for interactive indexing, - * as this limits the length of pauses while indexing to a few seconds. - * Larger values are best for batched indexing and speedier searches. - * - *

The default value is {@link Integer#MAX_VALUE}. - */ - int32_t getMaxMergeDocs() const{ return maxMergeDocs; } - void setMaxMergeDocs(int32_t val){ maxMergeDocs = val; } - - /** - * Constructs an IndexWriter for the index in path. - * Text will be analyzed with a. If create - * is true, then a new, empty index will be created in - * path, replacing the index already there, if any. - * - * @param path the path to the index directory - * @param a the analyzer to use - * @param create true to create the index or overwrite - * the existing one; false to append to the existing - * index - * @throws IOException if the directory cannot be read/written to, or - * if it does not exist, and create is - * false - */ - IndexWriter(const char* path, CL_NS(analysis)::Analyzer* a, const bool create, const bool closeDir=true); - - - /**Constructs an IndexWriter for the index in d. Text will be - * analyzed with a. If create is true, then a new, - * empty index will be created in d, replacing the index already - * there, if any. - */ - IndexWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, const bool create, const bool closeDir=false); - - /** - * Flushes all changes to an index, closes all associated files, and closes - * the directory that the index is stored in. - */ - void close(); - - /**Returns the number of documents currently in this index. - * synchronized - */ - int32_t docCount(); - - - /** - * Adds a document to this index, using the provided analyzer instead of the - * value of {@link #getAnalyzer()}. If the document contains more than - * {@link #setMaxFieldLength(int)} terms for a given field, the remainder are - * discarded. - */ - void addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer=NULL); - - - /**Merges all segments together into a single segment, optimizing an index - * for search. - *@synchronized - */ - void optimize(); - - - /**Merges all segments from an array of indices into this index. - * - *

This may be used to parallelize batch indexing. A large document - * collection can be broken into sub-collections. Each sub-collection can be - * indexed in parallel, on a different thread, process or machine. The - * complete index can then be created by merging sub-collection indices - * with this method. - * - *

After this completes, the index is optimized. - *@synchronized - */ - void addIndexes(CL_NS(store)::Directory** dirs); - - /** Merges the provided indexes into this index. - *

After this completes, the index is optimized.

- *

The provided IndexReaders are not closed.

- */ - void addIndexes(IndexReader** readers); - - - /** Returns the directory this index resides in. */ - CL_NS(store)::Directory* getDirectory() { return directory; } - - /** Get the current setting of whether to use the compound file format. - * Note that this just returns the value you set with setUseCompoundFile(boolean) - * or the default. You cannot use this to query the status of an existing index. - * @see #setUseCompoundFile(boolean) - */ - bool getUseCompoundFile() { return useCompoundFile; } - - /** Setting to turn on usage of a compound file. When on, multiple files - * for each segment are merged into a single file once the segment creation - * is finished. This is done regardless of what directory is in use. - */ - void setUseCompoundFile(bool value) { useCompoundFile = value; } - - - /** Expert: Set the Similarity implementation used by this IndexWriter. - * - * @see Similarity#setDefault(Similarity) - */ - void setSimilarity(CL_NS(search)::Similarity* similarity) { this->similarity = similarity; } - - /** Expert: Return the Similarity implementation used by this IndexWriter. - * - *

This defaults to the current value of {@link Similarity#getDefault()}. - */ - CL_NS(search)::Similarity* getSimilarity() { return this->similarity; } - - /** Returns the analyzer used by this index. */ - CL_NS(analysis)::Analyzer* getAnalyzer() { return analyzer; } - -private: - /** Merges all RAM-resident segments. */ - void flushRamSegments(); - - /** Incremental segment merger. */ - void maybeMergeSegments(); - - /** Pops segments off of segmentInfos stack down to minSegment, merges them, - * and pushes the merged index onto the top of the segmentInfos stack. - */ - void mergeSegments(const uint32_t minSegment); - - /** Merges the named range of segments, replacing them in the stack with a - * single segment. */ - void mergeSegments(const uint32_t minSegment, const uint32_t end); - - void deleteFiles(CL_NS(util)::AStringArrayWithDeletor& files); - void readDeleteableFiles(CL_NS(util)::AStringArrayWithDeletor& files); - void writeDeleteableFiles(CL_NS(util)::AStringArrayWithDeletor& files); - - /* - * Some operating systems (e.g. Windows) don't permit a file to be deleted - * while it is opened for read (e.g. by another process or thread). So we - * assume that when a delete fails it is because the file is open in another - * process, and queue the file for subsequent deletion. - */ - void deleteSegments(CL_NS(util)::CLVector* segments); - void deleteFiles(CL_NS(util)::AStringArrayWithDeletor& files, CL_NS(store)::Directory* directory); - void deleteFiles(CL_NS(util)::AStringArrayWithDeletor& files, CL_NS(util)::AStringArrayWithDeletor& deletable); - - - // synchronized - char* newSegmentName(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/Makefile.am clucene-core-2.3.3.4/src/CLucene/index/Makefile.am --- clucene-core-0.9.21b/src/CLucene/index/Makefile.am 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -indexdir = $(lsrcdir)/index -indexhdir = $(includedir)/CLucene/index - -libclucene_la_SOURCES += $(indexdir)/CompoundFile.cpp -libclucene_la_SOURCES += $(indexdir)/DocumentWriter.cpp -libclucene_la_SOURCES += $(indexdir)/FieldInfos.cpp -libclucene_la_SOURCES += $(indexdir)/FieldsReader.cpp -libclucene_la_SOURCES += $(indexdir)/FieldsWriter.cpp -libclucene_la_SOURCES += $(indexdir)/IndexModifier.cpp -libclucene_la_SOURCES += $(indexdir)/IndexReader.cpp -libclucene_la_SOURCES += $(indexdir)/IndexWriter.cpp -libclucene_la_SOURCES += $(indexdir)/MultiReader.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentInfos.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentMergeInfo.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentMerger.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentMergeQueue.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentReader.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentTermDocs.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentTermEnum.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentTermPositions.cpp -libclucene_la_SOURCES += $(indexdir)/SegmentTermVector.cpp -libclucene_la_SOURCES += $(indexdir)/Term.cpp -libclucene_la_SOURCES += $(indexdir)/TermInfo.cpp -libclucene_la_SOURCES += $(indexdir)/TermInfosReader.cpp -libclucene_la_SOURCES += $(indexdir)/TermInfosWriter.cpp -libclucene_la_SOURCES += $(indexdir)/TermVectorReader.cpp -libclucene_la_SOURCES += $(indexdir)/TermVectorWriter.cpp - -indexh_HEADERS = $(indexdir)/*.h diff -Nru clucene-core-0.9.21b/src/CLucene/index/MultiReader.cpp clucene-core-2.3.3.4/src/CLucene/index/MultiReader.cpp --- clucene-core-0.9.21b/src/CLucene/index/MultiReader.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/MultiReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,722 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "MultiReader.h" - -#include "IndexReader.h" -#include "CLucene/document/Document.h" -#include "Terms.h" -#include "SegmentMergeQueue.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_DEF(index) - -MultiReader::MultiReader(IndexReader** subReaders): - IndexReader(subReaders == NULL || subReaders[0] == NULL ? NULL : subReaders[0]->getDirectory()), - normsCache(true, true) -{ - initialize(subReaders); -} - -MultiReader::MultiReader(Directory* directory, SegmentInfos* sis, IndexReader** subReaders): - IndexReader(directory, sis, false), - normsCache(true, true) -{ - initialize(subReaders); -} - - -MultiReader::~MultiReader() { -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed all IndexReader instances -// this instance managed have been destroyed to - - _CLDELETE_ARRAY(ones); - _CLDELETE_ARRAY(starts); - - //Iterate through the subReaders and destroy each reader - if (subReaders && subReadersLength > 0) { - for (int32_t i = 0; i < subReadersLength; i++) { - _CLDELETE(subReaders[i]); - } - } - //Destroy the subReaders array - _CLDELETE_ARRAY(subReaders); -} - -void MultiReader::initialize(IndexReader** subReaders){ - this->subReadersLength = 0; - this->subReaders = subReaders; - - //count the subReaders size - if ( subReaders != NULL ){ - while ( subReaders[subReadersLength] != NULL ){ - subReadersLength++; - } - } - _maxDoc = 0; - _numDocs = -1; - ones = NULL; - - starts = _CL_NEWARRAY(int32_t,subReadersLength + 1); // build starts array - for (int32_t i = 0; i < subReadersLength; i++) { - starts[i] = _maxDoc; - - // compute maxDocs - _maxDoc += subReaders[i]->maxDoc(); - if (subReaders[i]->hasDeletions()) - _hasDeletions = true; - } - starts[subReadersLength] = _maxDoc; -} - -bool MultiReader::getTermFreqVectors(int32_t n, Array& result){ - int32_t i = readerIndex(n); // find segment num - return subReaders[i]->getTermFreqVectors(n - starts[i], result); // dispatch to segment -} - -TermFreqVector* MultiReader::getTermFreqVector(int32_t n, const TCHAR* field){ - int32_t i = readerIndex(n); // find segment num - return subReaders[i]->getTermFreqVector(n - starts[i], field); -} - - -int32_t MultiReader::numDocs() { - SCOPED_LOCK_MUTEX(THIS_LOCK) - if (_numDocs == -1) { // check cache - int32_t n = 0; // cache miss--recompute - for (int32_t i = 0; i < subReadersLength; i++) - n += subReaders[i]->numDocs(); // sum from readers - _numDocs = n; - } - return _numDocs; -} - -int32_t MultiReader::maxDoc() const { - return _maxDoc; -} - -bool MultiReader::document(int32_t n, CL_NS(document)::Document* doc){ - int32_t i = readerIndex(n); // find segment num - return subReaders[i]->document(n - starts[i],doc); // dispatch to segment reader -} - -bool MultiReader::isDeleted(const int32_t n) { - int32_t i = readerIndex(n); // find segment num - return subReaders[i]->isDeleted(n - starts[i]); // dispatch to segment reader -} - -uint8_t* MultiReader::norms(const TCHAR* field){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - uint8_t* bytes; - bytes = normsCache.get(field); - if (bytes != NULL){ - return bytes; // cache hit - } - - if ( !hasNorms(field) ) - return fakeNorms(); - - bytes = _CL_NEWARRAY(uint8_t,maxDoc()); - for (int32_t i = 0; i < subReadersLength; i++) - subReaders[i]->norms(field, bytes + starts[i]); - - //Unfortunately the data in the normCache can get corrupted, since it's being loaded with string - //keys that may be deleted while still in use by the map. To prevent this field is duplicated - //and then stored in the normCache - TCHAR* key = STRDUP_TtoT(field); - //update cache - normsCache.put(key, bytes); - - return bytes; -} - -void MultiReader::norms(const TCHAR* field, uint8_t* result) { - SCOPED_LOCK_MUTEX(THIS_LOCK) - uint8_t* bytes = normsCache.get(field); - if (bytes==NULL && !hasNorms(field)) - bytes=fakeNorms(); - - if (bytes != NULL){ // cache hit - int32_t len = maxDoc(); - memcpy(result,bytes,len * sizeof(int32_t)); - } - - for (int32_t i = 0; i < subReadersLength; i++) // read from segments - subReaders[i]->norms(field, result + starts[i]); -} - - -void MultiReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){ - normsCache.remove(field); // clear cache - int32_t i = readerIndex(n); // find segment num - subReaders[i]->setNorm(n-starts[i], field, value); // dispatch -} - -TermEnum* MultiReader::terms() const { - return _CLNEW MultiTermEnum(subReaders, starts, NULL); -} - -TermEnum* MultiReader::terms(const Term* term) const { - return _CLNEW MultiTermEnum(subReaders, starts, term); -} - -int32_t MultiReader::docFreq(const Term* t) const { - int32_t total = 0; // sum freqs in Multi - for (int32_t i = 0; i < subReadersLength; i++) - total += subReaders[i]->docFreq(t); - return total; -} - -TermDocs* MultiReader::termDocs() const { - TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts); - return ret; -} - -TermPositions* MultiReader::termPositions() const { - TermPositions* ret = (TermPositions*)_CLNEW MultiTermPositions(subReaders, starts); - return ret; -} - -void MultiReader::doDelete(const int32_t n) { - _numDocs = -1; // invalidate cache - int32_t i = readerIndex(n); // find segment num - subReaders[i]->deleteDocument(n - starts[i]); // dispatch to segment reader - _hasDeletions = true; -} - -int32_t MultiReader::readerIndex(const int32_t n) const { // find reader for doc n: - int32_t lo = 0; // search starts array - int32_t hi = subReadersLength - 1; // for first element less - // than n, return its index - while (hi >= lo) { - int32_t mid = (lo + hi) >> 1; - int32_t midValue = starts[mid]; - if (n < midValue) - hi = mid - 1; - else if (n > midValue) - lo = mid + 1; - else{ // found a match - while (mid+1 < subReadersLength && starts[mid+1] == midValue) { - mid++; // scan to last match - } - return mid; - } - } - return hi; -} - -bool MultiReader::hasNorms(const TCHAR* field) { - for (int i = 0; i < subReadersLength; i++) { - if (subReaders[i]->hasNorms(field)) - return true; - } - return false; -} -uint8_t* MultiReader::fakeNorms() { - if (ones==NULL) - ones=SegmentReader::createFakeNorms(maxDoc()); - return ones; -} - -void MultiReader::doUndeleteAll(){ - for (int32_t i = 0; i < subReadersLength; i++) - subReaders[i]->undeleteAll(); - _hasDeletions = false; - _numDocs = -1; -} -void MultiReader::doCommit() { - for (int32_t i = 0; i < subReadersLength; i++) - subReaders[i]->commit(); -} - -void MultiReader::doClose() { - SCOPED_LOCK_MUTEX(THIS_LOCK) - for (int32_t i = 0; i < subReadersLength; i++){ - subReaders[i]->close(); - } -} - - -void MultiReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ - StringArrayWithDeletor temp; - CLHashList hashList; - for (int32_t i = 0; i < subReadersLength; i++) { - IndexReader* reader = subReaders[i]; - reader->getFieldNames(fldOption, temp); - - //create a unique list of names. - StringArrayWithDeletor::iterator itr = temp.begin(); - while ( itr != temp.end() ){ - if ( hashList.find(*itr) == hashList.end() ) - hashList.insert(STRDUP_TtoT(*itr)); - itr++; - } - } - //move the items into the return - CLHashList::iterator itr = hashList.begin(); - while ( itr != hashList.end() ){ - retarray.push_back(*itr);//no need to copy, already done! - itr++; - } -} - - -MultiTermDocs::MultiTermDocs(){ -//Func - Default constructor -// Initialises an empty MultiTermDocs. -// This constructor is needed to allow the constructor of MultiTermPositions -// initialise the instance by itself -//Pre - true -//Post - An empty - - subReaders = NULL; - subReadersLength = 0; - starts = NULL; - base = 0; - pointer = 0; - current = NULL; - term = NULL; - readerTermDocs = NULL; -} - -MultiTermDocs::MultiTermDocs(IndexReader** r, const int32_t* s){ -//Func - Constructor -//Pre - if r is NULL then rLen must be 0 else if r != NULL then rLen > 0 -// s != NULL -//Post - The instance has been created - - //count readers - subReadersLength = 0; - subReaders = r; - - CND_PRECONDITION(s != NULL, "s is NULL"); - - if ( subReaders != NULL ){ - while ( subReaders[subReadersLength] != NULL ) - subReadersLength++; - } - - starts = s; - base = 0; - pointer = 0; - current = NULL; - term = NULL; - - readerTermDocs = NULL; - - //Check if there are subReaders - if(subReaders != NULL && subReadersLength > 0){ - readerTermDocs = _CL_NEWARRAY(TermDocs*, subReadersLength+1); - - CND_CONDITION(readerTermDocs != NULL,"No memory could be allocated for readerTermDocs"); - - //Initialize the readerTermDocs pointer array to NULLs - for ( int32_t i=0;idoc(); -} -int32_t MultiTermDocs::freq() const { - CND_PRECONDITION(current!=NULL,"current==NULL, check that next() was called"); - return current->freq(); -} - -void MultiTermDocs::seek(TermEnum* termEnum){ - seek(termEnum->term(false)); -} - -void MultiTermDocs::seek( Term* tterm) { -//Func - Resets the instance for a new search -//Pre - tterm != NULL -//Post - The instance has been reset for a new search - - CND_PRECONDITION(tterm != NULL, "tterm is NULL"); - - //Assigning tterm is done as below for a reason - //The construction ensures that if seek is called from within - //MultiTermDocs with as argument this->term (seek(this->term)) that the assignment - //will succeed and all referencecounters represent the correct situation - - //Get a pointer from tterm and increase its reference counter - Term *TempTerm = _CL_POINTER(tterm); - - //Finialize term to ensure we decrease the reference counter of the instance which term points to - _CLDECDELETE(term); - - //Assign TempTerm to term - term = TempTerm; - - base = 0; - pointer = 0; - current = NULL; -} - -bool MultiTermDocs::next() { - if (current != NULL && current->next()) { - return true; - } else if (pointer < subReadersLength) { - base = starts[pointer]; - current = termDocs(pointer++); - return next(); - } else - return false; -} - -int32_t MultiTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) { - while (true) { - while (current == NULL) { - if (pointer < subReadersLength) { // try next segment - base = starts[pointer]; - current = termDocs(pointer++); - } else { - return 0; - } - } - int32_t end = current->read(docs, freqs,length); - if (end == 0) { // none left in segment - current = NULL; - } else { // got some - int32_t b = base; // adjust doc numbers - for (int32_t i = 0; i < end; i++) - docs[i] += b; - return end; - } - } -} - -bool MultiTermDocs::skipTo(const int32_t target) { - do { - if (!next()) - return false; - } while (target > doc()); - return true; -} - -void MultiTermDocs::close() { -//Func - Closes all MultiTermDocs managed by this instance -//Pre - true -//Post - All the MultiTermDocs have been closed - - - //Check if readerTermDocs is valid - if (readerTermDocs){ - TermDocs* curTD = NULL; - //iterate through the readerTermDocs array - for (int32_t i = 0; i < subReadersLength; i++) { - //Retrieve the i-th TermDocs instance - curTD = readerTermDocs[i]; - - //Check if it is a valid pointer - if (curTD != NULL) { - //Close it - curTD->close(); - _CLDELETE(curTD); - } - } - - _CLDELETE_ARRAY(readerTermDocs); - } - - //current previously pointed to a member of readerTermDocs; ensure that - //it doesn't now point to invalid memory. - current = NULL; - base = 0; - pointer = 0; - - _CLDECDELETE(term); -} - -TermDocs* MultiTermDocs::termDocs(const IndexReader* reader) const { - TermDocs* ret = reader->termDocs(); - return ret; -} - -TermDocs* MultiTermDocs::termDocs(const int32_t i) const { - if (term == NULL) - return NULL; - TermDocs* result = readerTermDocs[i]; - if (result == NULL){ - readerTermDocs[i] = termDocs(subReaders[i]); - result = readerTermDocs[i]; - } - result->seek(term); - - return result; -} - - -MultiTermEnum::MultiTermEnum( - IndexReader** subReaders, const int32_t *starts, const Term* t){ -//Func - Constructor -// Opens all enumerations of all readers -//Pre - readers != NULL and contains an array of IndexReader instances each responsible for -// reading a single segment -// subReadersLength >= 0 and represents the number of readers in the readers array -// starts is an array of -//Post - An instance of has been created - -//Pre - if readers is NULL then subReadersLength must be 0 else if readers != NULL then subReadersLength > 0 -// s != NULL -//Post - The instance has been created - - int32_t subReadersLength = 0; - if ( subReaders != NULL ){ - while ( subReaders[subReadersLength] != NULL ) - subReadersLength++; - } - CND_PRECONDITION(starts != NULL,"starts is NULL"); - - //Temporary variables - IndexReader* reader = NULL; - TermEnum* termEnum = NULL; - SegmentMergeInfo* smi = NULL; - _docFreq = 0; - _term = NULL; - queue = _CLNEW SegmentMergeQueue(subReadersLength); - - CND_CONDITION (queue != NULL, "Could not allocate memory for queue"); - - //iterate through all the readers - for ( int32_t i=0;iterms(t); - }else{ - //termEnum is an enumeration of all the Terms and TermInfos in the set. - termEnum = reader->terms(); - } - - //Instantiate an new SegmentMerginfo - smi = _CLNEW SegmentMergeInfo(starts[i], termEnum, reader); - - // Note that in the call termEnum->getTerm(false) below false is required because - // otherwise a reference is leaked. By passing false getTerm is - // ordered to return an unowned reference instead. (Credits for DSR) - if (t == NULL ? smi->next() : termEnum->term(false) != NULL){ - // initialize queue - queue->put(smi); - } else{ - //Close the SegmentMergeInfo - smi->close(); - //And have it deleted - _CLDELETE(smi); - } - } - - //Check if the queue has elements - if (t != NULL && queue->size() > 0) { - next(); - } -} - -MultiTermEnum::~MultiTermEnum(){ -//Func - Destructor -//Pre - true -//Post - All the resource have been freed and the instance has been deleted - - //Close the enumeration - close(); - - //Delete the queue - _CLDELETE(queue); -} - -bool MultiTermEnum::next(){ -//Func - Move the current term to the next in the set of enumerations -//Pre - true -//Post - Returns true if term has been moved to the next in the set of enumerations -// Returns false if this was not possible - - SegmentMergeInfo* top = queue->top(); - if (top == NULL) { - _CLDECDELETE(_term); - _term = NULL; - return false; - } - - //The getTerm method requires the client programmer to indicate whether he - // owns the returned reference, so we can discard ours - // right away. - _CLDECDELETE(_term); - - //Assign term the term of top and make sure the reference counter is increased - _term = _CL_POINTER(top->term); - _docFreq = 0; - - //Find the next term - while (top != NULL && _term->compareTo(top->term) == 0) { - //don't delete, this is the top - queue->pop(); - // increment freq - _docFreq += top->termEnum->docFreq(); - if (top->next()){ - // restore queue - queue->put(top); - }else{ - // done with a segment - top->close(); - _CLDELETE(top); - } - top = queue->top(); - } - - return true; -} - - -Term* MultiTermEnum::term() { -//Func - Returns the current term of the set of enumerations -//Pre - pointer is true or false and indicates if the reference counter -// of term must be increased or not -// next() must have been called once! -//Post - pointer = true -> term has been returned with an increased reference counter -// pointer = false -> term has been returned - - return _CL_POINTER(_term); -} - -Term* MultiTermEnum::term(bool pointer) { - if ( pointer ) - return _CL_POINTER(_term); - else - return _term; -} - -int32_t MultiTermEnum::docFreq() const { -//Func - Returns the document frequency of the current term in the set -//Pre - termInfo != NULL -// next() must have been called once -//Post - The document frequency of the current enumerated term has been returned - - return _docFreq; -} - - -void MultiTermEnum::close() { -//Func - Closes the set of enumerations in the queue -//Pre - queue holds a valid reference to a SegmentMergeQueue -//Post - The queue has been closed all SegmentMergeInfo instance have been deleted by -// the closing of the queue -// term has been finalized and reset to NULL - - // Needed when this enumeration hasn't actually been exhausted yet - _CLDECDELETE(_term); - - //Close the queue This will destroy all SegmentMergeInfo instances! - queue->close(); - -} - - - - - -MultiTermPositions::MultiTermPositions(IndexReader** r, const int32_t* s){ -//Func - Constructor -//Pre - if r is NULL then rLen must be 0 else if r != NULL then rLen > 0 -// s != NULL -//Post - The instance has been created - - subReaders = r; - subReadersLength = 0; - if ( subReaders != NULL ){ - while ( subReaders[subReadersLength] != NULL ) - subReadersLength ++ ; - } - - CND_PRECONDITION(s != NULL, "s is NULL"); - - starts = s; - base = 0; - pointer = 0; - current = NULL; - term = NULL; - - readerTermDocs = NULL; - - //Check if there are readers - if(subReaders != NULL && subReadersLength > 0){ - readerTermDocs = (TermDocs**)_CL_NEWARRAY(SegmentTermPositions*,subReadersLength); - - CND_CONDITION(readerTermDocs != NULL,"No memory could be allocated for readerTermDocs"); - - //Initialize the readerTermDocs pointer array - for ( int32_t i=0;icurrent to always -// be a SegmentTermPositions rather than merely a SegmentTermDocs. -// To that end, we override the termDocs(IndexReader&) method to produce -// a SegmentTermPositions via the underlying reader's termPositions method -// rather merely producing a SegmentTermDocs via the reader's termDocs -// method. - - TermPositions* tp = reader->termPositions(); - TermDocs* ret = tp->__asTermDocs(); - - CND_CONDITION(ret != NULL, - "Dynamic downcast in MultiTermPositions::termDocs from" - " TermPositions to TermDocs failed." - ); - return ret; - } - -int32_t MultiTermPositions::nextPosition() { - //Func - - //Pre - current != NULL - //Post - - CND_PRECONDITION(current != NULL,"current is NULL"); - - TermPositions* curAsTP = current->__asTermPositions(); - - CND_CONDITION(curAsTP != NULL, - "Dynamic downcast in MultiTermPositions::nextPosition from" - " SegmentTermDocs to TermPositions failed." - ) - return curAsTP->nextPosition(); -} - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/MultiReader.h clucene-core-2.3.3.4/src/CLucene/index/MultiReader.h --- clucene-core-0.9.21b/src/CLucene/index/MultiReader.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/MultiReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,202 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_MultiReader -#define _lucene_index_MultiReader - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SegmentHeader.h" -#include "IndexReader.h" -#include "CLucene/document/Document.h" -#include "Terms.h" -#include "SegmentMergeQueue.h" - -CL_NS_DEF(index) - -/** An IndexReader which reads multiple indexes, appending their content. -*/ -class MultiTermDocs:public virtual TermDocs { -private: -protected: - TermDocs** readerTermDocs; - - IndexReader** subReaders; - int32_t subReadersLength; - const int32_t* starts; - Term* term; - - int32_t base; - int32_t pointer; - - TermDocs* current; // == segTermDocs[pointer] -public: - MultiTermDocs(); - MultiTermDocs(IndexReader** subReaders, const int32_t* s); - virtual ~MultiTermDocs(); - - int32_t doc() const; - int32_t freq() const; - - void seek(TermEnum* termEnum); - void seek(Term* tterm); - bool next(); - - /** Optimized implementation. */ - int32_t read(int32_t* docs, int32_t* freqs, int32_t length); - - /** As yet unoptimized implementation. */ - bool skipTo(const int32_t target); - - void close(); - - virtual TermPositions* __asTermPositions(); -protected: - virtual TermDocs* termDocs(const IndexReader* reader) const; -private: - TermDocs* termDocs(const int32_t i) const; - -}; - - -//MultiTermEnum represents the enumeration of all terms of all readers -class MultiTermEnum:public TermEnum { -private: - SegmentMergeQueue* queue; - - Term* _term; - int32_t _docFreq; -public: - //Constructor - //Opens all enumerations of all readers - MultiTermEnum(IndexReader** subReaders, const int32_t* starts, const Term* t); - - //Destructor - ~MultiTermEnum(); - - //Move the current term to the next in the set of enumerations - bool next(); - - //Returns a pointer to the current term of the set of enumerations - Term* term(); - Term* term(bool pointer); - - //Returns the document frequency of the current term in the set - int32_t docFreq() const; - - //Closes the set of enumerations in the queue - void close(); - - - const char* getObjectName(){ return MultiTermEnum::getClassName(); } - static const char* getClassName(){ return "MultiTermEnum"; } -}; - - -class MultiTermPositions:public MultiTermDocs,public TermPositions { -public: - MultiTermPositions(IndexReader** subReaders, const int32_t* s); - ~MultiTermPositions() {}; - int32_t nextPosition(); - - - virtual TermDocs* __asTermDocs(); - virtual TermPositions* __asTermPositions(); -protected: - TermDocs* termDocs(const IndexReader* reader) const; -}; - - -class MultiReader:public IndexReader{ -private: - bool _hasDeletions; - IndexReader** subReaders; - int32_t subReadersLength; - int32_t* starts; // 1st docno for each segment - - CL_NS(util)::CLHashtable > normsCache; - int32_t _maxDoc; - int32_t _numDocs; - void initialize(IndexReader** subReaders); - - int32_t readerIndex(const int32_t n) const; - - bool hasNorms(const TCHAR* field); - uint8_t* ones; - uint8_t* fakeNorms(); -protected: - void doSetNorm(int32_t n, const TCHAR* field, uint8_t value); - void doUndeleteAll(); - void doCommit(); - // synchronized - void doClose(); - - // synchronized - void doDelete(const int32_t n); -public: - /** Construct reading the named set of readers. */ - MultiReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, IndexReader** subReaders); - - /** - *

Construct a MultiReader aggregating the named set of (sub)readers. - * Directory locking for delete, undeleteAll, and setNorm operations is - * left to the subreaders.

- *

Note that all subreaders are closed if this Multireader is closed.

- * @param subReaders set of (sub)readers - * @throws IOException - */ - MultiReader(IndexReader** subReaders); - - ~MultiReader(); - - /** Return an array of term frequency vectors for the specified document. - * The array contains a vector for each vectorized field in the document. - * Each vector vector contains term numbers and frequencies for all terms - * in a given vectorized field. - * If no such fields existed, the method returns null. - */ - bool getTermFreqVectors(int32_t n, Array& result); - TermFreqVector* getTermFreqVector(int32_t n, const TCHAR* field); - - - // synchronized - int32_t numDocs(); - - int32_t maxDoc() const; - - bool document(int32_t n, CL_NS(document)::Document* doc); - - bool isDeleted(const int32_t n); - bool hasDeletions() const{ return _hasDeletions; } - - // synchronized - uint8_t* norms(const TCHAR* field); - void norms(const TCHAR* field, uint8_t* result); - - TermEnum* terms() const; - TermEnum* terms(const Term* term) const; - - //Returns the document frequency of the current term in the set - int32_t docFreq(const Term* t=NULL) const; - TermDocs* termDocs() const; - TermPositions* termPositions() const; - - - /** - * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) - */ - void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray); -}; - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentHeader.h clucene-core-2.3.3.4/src/CLucene/index/SegmentHeader.h --- clucene-core-0.9.21b/src/CLucene/index/SegmentHeader.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentHeader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,304 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentHeader_ -#define _lucene_index_SegmentHeader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SegmentInfos.h" -#include "CLucene/util/BitSet.h" -#include "CLucene/util/VoidMap.h" -#include "Term.h" -#include "FieldInfos.h" -#include "FieldsReader.h" -#include "IndexReader.h" -#include "TermInfosReader.h" -#include "CompoundFile.h" -#include "CLucene/util/ThreadLocal.h" - -CL_NS_DEF(index) -class SegmentReader; - -class SegmentTermDocs:public virtual TermDocs { - int32_t _doc; - int32_t skipInterval; - int32_t numSkips; - int32_t skipCount; - CL_NS(store)::IndexInput* skipStream; - int32_t skipDoc; - int64_t freqPointer; - int64_t proxPointer; - int64_t skipPointer; - bool haveSkipped; -protected: - // SegmentReader parent - const SegmentReader* parent; - CL_NS(store)::IndexInput* freqStream; - int32_t count; - int32_t df; - int32_t _freq; - CL_NS(util)::BitSet* deletedDocs; -public: - virtual ~SegmentTermDocs(); - - virtual void seek(TermEnum* termEnum); - virtual void seek(Term* term); - virtual void seek(const TermInfo* ti); - - virtual void close(); - virtual int32_t doc()const; - virtual int32_t freq()const; - - virtual bool next(); - - /** Optimized implementation. */ - virtual int32_t read(int32_t* docs, int32_t* freqs, int32_t length); - - /** Optimized implementation. */ - virtual bool skipTo(const int32_t target); - - virtual TermPositions* __asTermPositions(); - - ///\param Parent must be a segment reader - SegmentTermDocs( const SegmentReader* Parent); -protected: - virtual void skippingDoc(){} - virtual void skipProx(int64_t proxPointer){} -}; - - -class SegmentTermPositions: public SegmentTermDocs, public TermPositions { -private: - CL_NS(store)::IndexInput* proxStream; - int32_t proxCount; - int32_t position; - -public: - ///\param Parent must be a segment reader - SegmentTermPositions(const SegmentReader* Parent); - ~SegmentTermPositions(); - - void seek(const TermInfo* ti); - void close(); - int32_t nextPosition(); - bool next(); - int32_t read(int32_t* docs, int32_t* freqs, int32_t length); - virtual TermDocs* __asTermDocs(); - virtual TermPositions* __asTermPositions(); - - //resolve SegmentTermDocs/TermPositions ambiguity - void seek(Term* term){ SegmentTermDocs::seek(term); } - void seek(TermEnum* termEnum){ SegmentTermDocs::seek(termEnum); } - int32_t doc() const{ return SegmentTermDocs::doc(); } - int32_t freq() const{ return SegmentTermDocs::freq(); } - bool skipTo(const int32_t target){ return SegmentTermDocs::skipTo(target); } - -protected: - void skippingDoc(); - /** Called by super.skipTo(). */ - void skipProx(int64_t proxPointer); -}; - - - - -/** -* An IndexReader responsible for reading 1 segment of an index -*/ -class SegmentReader: public IndexReader{ - /** - * The class Norm represents the normalizations for a field. - * These normalizations are read from an IndexInput in into an array of bytes called bytes - */ - class Norm :LUCENE_BASE{ - int32_t number; - SegmentReader* reader; - const char* segment; ///< pointer to segment name - public: - CL_NS(store)::IndexInput* in; - uint8_t* bytes; - bool dirty; - //Constructor - Norm(CL_NS(store)::IndexInput* instrm, int32_t number, SegmentReader* reader, const char* segment); - //Destructor - ~Norm(); - - void reWrite(); - }; - friend class SegmentReader::Norm; - - //Holds the name of the segment that is being read - const char* segment; - - //Indicates if there are documents marked as deleted - bool deletedDocsDirty; - bool normsDirty; - bool undeleteAll; - - //Holds all norms for all fields in the segment - typedef CL_NS(util)::CLHashtable NormsType; - NormsType _norms; - - uint8_t* ones; - uint8_t* fakeNorms(); - - // Compound File Reader when based on a compound file segment - CompoundFileReader* cfsReader; - ///Reads the Field Info file - FieldsReader* fieldsReader; - TermVectorsReader* termVectorsReaderOrig; - CL_NS(util)::ThreadLocal >termVectorsLocal; - - void initialize(SegmentInfo* si); - - /** - * Create a clone from the initial TermVectorsReader and store it in the ThreadLocal. - * @return TermVectorsReader - */ - TermVectorsReader* getTermVectorsReader(); - -protected: - ///Marks document docNum as deleted - void doDelete(const int32_t docNum); - void doUndeleteAll(); - void doCommit(); - void doSetNorm(int32_t doc, const TCHAR* field, uint8_t value); - - // can return null if norms aren't stored - uint8_t* getNorms(const TCHAR* field); - -public: - /** - Func - Constructor. - Opens all files of a segment - .fnm -> Field Info File - Field names are stored in the field info file, with suffix .fnm. - .frq -> Frequency File - The .frq file contains the lists of documents which contain - each term, along with the frequency of the term in that document. - .prx -> Prox File - The prox file contains the lists of positions that each term occurs - at within documents. - .tis -> Term Info File - This file is sorted by Term. Terms are ordered first lexicographically - by the term's field name, and within that lexicographically by the term's text. - .del -> Deletion File - The .del file is optional, and only exists when a segment contains deletions - .f[0-9]* -> Norm File - Contains s, for each document, a byte that encodes a value that is - multiplied into the score for hits on that field: - */ - SegmentReader(SegmentInfo* si); - - SegmentReader(SegmentInfos* sis, SegmentInfo* si); - ///Destructor. - virtual ~SegmentReader(); - - ///Closes all streams to the files of a single segment - void doClose(); - - ///Checks if a segment managed by SegmentInfo si has deletions - static bool hasDeletions(const SegmentInfo* si); - bool hasDeletions() const; - bool hasNorms(const TCHAR* field) const; - - ///Returns all file names managed by this SegmentReader - void files(CL_NS(util)::AStringArrayWithDeletor& retarray); - ///Returns an enumeration of all the Terms and TermInfos in the set. - TermEnum* terms() const; - ///Returns an enumeration of terms starting at or after the named term t - TermEnum* terms(const Term* t) const; - - ///Gets the document identified by n - bool document(int32_t n, CL_NS(document)::Document* doc); - - ///Checks if the n-th document has been marked deleted - bool isDeleted(const int32_t n); - - ///Returns an unpositioned TermDocs enumerator. - TermDocs* termDocs() const; - ///Returns an unpositioned TermPositions enumerator. - TermPositions* termPositions() const; - - ///Returns the number of documents which contain the term t - int32_t docFreq(const Term* t) const; - - ///Returns the actual number of documents in the segment - int32_t numDocs(); - ///Returns the number of all the documents in the segment including the ones that have - ///been marked deleted - int32_t maxDoc() const; - - ///Returns the bytes array that holds the norms of a named field. - ///Returns fake norms if norms aren't available - uint8_t* norms(const TCHAR* field); - - ///Reads the Norms for field from disk - void norms(const TCHAR* field, uint8_t* bytes); - - ///concatenating segment with ext and x - char* SegmentName(const char* ext, const int32_t x=-1); - ///Creates a filename in buffer by concatenating segment with ext and x - void SegmentName(char* buffer,int32_t bufferLen,const char* ext, const int32_t x=-1 ); - - /** - * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) - */ - void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray); - - static bool usesCompoundFile(SegmentInfo* si); - - /** Return a term frequency vector for the specified document and field. The - * vector returned contains term numbers and frequencies for all terms in - * the specified field of this document, if the field had storeTermVector - * flag set. If the flag was not set, the method returns null. - * @throws IOException - */ - TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field=NULL); - - /** Return an array of term frequency vectors for the specified document. - * The array contains a vector for each vectorized field in the document. - * Each vector vector contains term numbers and frequencies for all terms - * in a given vectorized field. - * If no such fields existed, the method returns null. - * @throws IOException - */ - bool getTermFreqVectors(int32_t docNumber, Array& result); -private: - //Open all norms files for all fields - void openNorms(CL_NS(store)::Directory* cfsDir); - //Closes all norms files - void closeNorms(); - - ///a bitVector that manages which documents have been deleted - CL_NS(util)::BitSet* deletedDocs; - ///an IndexInput to the frequency file - CL_NS(store)::IndexInput* freqStream; - ///For reading the fieldInfos file - FieldInfos* fieldInfos; - ///For reading the Term Dictionary .tis file - TermInfosReader* tis; - ///an IndexInput to the prox file - CL_NS(store)::IndexInput* proxStream;\ - - static bool hasSeparateNorms(SegmentInfo* si); - static uint8_t* createFakeNorms(int32_t size); - - //allow various classes to access the internals of this. this allows us to have - //a more tight idea of the package - friend class IndexReader; - friend class IndexWriter; - friend class SegmentTermDocs; - friend class SegmentTermPositions; - friend class MultiReader; -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentInfos.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentInfos.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentInfos.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentInfos.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,228 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentInfos.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Misc.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_DEF(index) - - - SegmentInfo::SegmentInfo(const char* Name, const int32_t DocCount, CL_NS(store)::Directory* Dir): - docCount(DocCount),dir(Dir){ - //Func - Constructor. Initialises SegmentInfo. - //Pre - Name holds the unique name in the directory Dir - // DocCount holds the number of documents in the segment - // Dir holds the Directory where the segment resides - //Post - The instance has been created. name contains the duplicated string Name. - // docCount = DocCount and dir references Dir - STRCPY_AtoA(name,Name,CL_MAX_NAME); - } - - SegmentInfo::~SegmentInfo(){ - } - - - SegmentInfos::SegmentInfos(bool deleteMembers) : - infos(deleteMembers){ - //Func - Constructor - //Pre - deleteMembers indicates if the instance to be created must delete - // all SegmentInfo instances it manages when the instance is destroyed or not - // true -> must delete, false may not delete - //Post - An instance of SegmentInfos has been created. - - //initialize counter to 0 - counter = 0; - version = Misc::currentTimeMillis(); - } - - SegmentInfos::~SegmentInfos(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed. Depending on the constructor used - // the SegmentInfo instances that this instance managed have been deleted or not. - - //Clear the list of SegmentInfo instances - make sure everything is deleted - infos.clear(); - } - - SegmentInfo* SegmentInfos::info(int32_t i) { - //Func - Returns a reference to the i-th SegmentInfo in the list. - //Pre - i >= 0 - //Post - A reference to the i-th SegmentInfo instance has been returned - - CND_PRECONDITION(i >= 0, "i contains negative number"); - - //Get the i-th SegmentInfo instance - SegmentInfo *ret = infos[i]; - //Condition check to see if the i-th SegmentInfo has been retrieved - CND_CONDITION(ret != NULL,"No SegmentInfo instance found"); - - return ret; - } - - void SegmentInfos::clearto(size_t _min){ - if (infos.size()>_min) { // Make sure we actually need to remove - segmentInfosType::iterator itr,bitr=infos.begin()+_min,eitr=infos.end(); - for(itr=bitr;itr!=eitr;++itr) { - _CLLDELETE((*itr)); - } - infos.erase(bitr,eitr); - } - } - void SegmentInfos::add(SegmentInfo* info){ - infos.push_back(info); - } - int32_t SegmentInfos::size() const{ - return infos.size(); - } - - void SegmentInfos::read(Directory* directory){ - //Func - Reads segments file that resides in directory. - //Pre - directory contains a valid reference - //Post - The segments file has been read and for each segment found - // a SegmentsInfo intance has been created and stored. - - //Open an IndexInput to the segments file - IndexInput* input = directory->openInput("segments"); - //Check if input is valid - if (input){ - try { - int32_t format = input->readInt(); - - if(format < 0){ // file contains explicit format info - // check that it is a format we can understand - if (format < FORMAT){ - TCHAR err[30]; - _sntprintf(err,30,_T("Unknown format version: %d"),format); - _CLTHROWT(CL_ERR_Runtime,err); - } - version = input->readLong(); // read version - counter = input->readInt(); // read counter - } - else{ // file is in old format without explicit format info - counter = format; - } - - //Temporary variable for storing the name of the segment - TCHAR tname[CL_MAX_PATH]; - char aname[CL_MAX_PATH]; - SegmentInfo* si = NULL; - - //read segmentInfos - for (int32_t i = input->readInt(); i > 0; --i){ - // read the name of the segment - input->readString(tname, CL_MAX_PATH); - STRCPY_TtoA(aname,tname,CL_MAX_PATH); - - //Instantiate a new SegmentInfo Instance - si = _CLNEW SegmentInfo(aname, input->readInt(),directory); - - //Condition check to see if si points to an instance - CND_CONDITION(si != NULL, "Memory allocation for si failed") ; - - //store SegmentInfo si - infos.push_back(si); - } - - if(format >= 0){ // in old format the version number may be at the end of the file - if (input->getFilePointer() >= input->length()) - version = Misc::currentTimeMillis(); // old file format without version number - else - version = input->readLong(); // read version - } - } _CLFINALLY( - //destroy the inputStream input. The destructor of IndexInput will - //also close the Inputstream input - _CLDELETE( input ); - ); - } - } - - void SegmentInfos::write(Directory* directory){ - //Func - Writes a new segments file based upon the SegmentInfo instances it manages - //Pre - directory is a valid reference to a Directory - //Post - The new segment has been written to disk - - //Open an IndexOutput to the segments file - IndexOutput* output = directory->createOutput("segments.new"); - //Check if output is valid - if (output){ - try { - output->writeInt(FORMAT); // write FORMAT - output->writeLong(++version); // every write changes the index - output->writeInt(counter); //Write the counter - - //Write the number of SegmentInfo Instances - //which is equal to the number of segments in directory as - //each SegmentInfo manages a single segment - output->writeInt(infos.size()); - - SegmentInfo *si = NULL; - - //temporary value for wide segment name - TCHAR tname[CL_MAX_PATH]; - - //Iterate through all the SegmentInfo instances - for (uint32_t i = 0; i < infos.size(); ++i) { - //Retrieve the SegmentInfo - si = info(i); - //Condition check to see if si has been retrieved - CND_CONDITION(si != NULL,"No SegmentInfo instance found"); - - //Write the name of the current segment - STRCPY_AtoT(tname,si->name,CL_MAX_PATH); - output->writeString(tname,_tcslen(tname)); - - //Write the number of documents in the segment - output->writeInt(si->docCount); - } - } _CLFINALLY( - output->close(); - _CLDELETE( output ); - ); - - // install new segment info - directory->renameFile("segments.new","segments"); - } - } - - - int64_t SegmentInfos::readCurrentVersion(Directory* directory){ - IndexInput* input = directory->openInput("segments"); - int32_t format = 0; - int64_t version = 0; - try { - format = input->readInt(); - if(format < 0){ - if(format < FORMAT){ - TCHAR err[30]; - _sntprintf(err,30,_T("Unknown format version: %d"),format); - _CLTHROWT(CL_ERR_Runtime,err); - } - version = input->readLong(); // read version - } - } - _CLFINALLY( input->close(); _CLDELETE(input); ); - - if(format < 0) - return version; - - // We cannot be sure about the format of the file. - // Therefore we have to read the whole file and cannot simply seek to the version entry. - SegmentInfos* sis = _CLNEW SegmentInfos(); - sis->read(directory); - version = sis->getVersion(); - _CLDELETE(sis); - return version; - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentInfos.h clucene-core-2.3.3.4/src/CLucene/index/SegmentInfos.h --- clucene-core-0.9.21b/src/CLucene/index/SegmentInfos.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentInfos.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentInfos_ -#define _lucene_index_SegmentInfos_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidList.h" -#include "CLucene/store/Directory.h" - -CL_NS_DEF(index) - - class SegmentInfo :LUCENE_BASE{ - private: - //Directory where the segment resides - CL_NS(store)::Directory* dir; - public: - ///Gets the Directory where the segment resides - CL_NS(store)::Directory* getDir() const{ return dir; } - - //Unique name in directory dir - char name[CL_MAX_NAME]; - //Number of docs in the segment - const int32_t docCount; - - SegmentInfo(const char* Name, const int32_t DocCount, CL_NS(store)::Directory* Dir); - - ~SegmentInfo(); - }; - - typedef CL_NS(util)::CLVector > segmentInfosType; - //SegmentInfos manages a list of SegmentInfo instances - //Each SegmentInfo contains information about a segment in a directory. - // - //The active segments in the index are stored in the segment info file. - //An index only has a single file in this format, and it is named "segments". - //This lists each segment by name, and also contains the size of each segment. - //The format of the file segments is defined as follows: - // - // SegCount - //Segments --> SegCount, - // - //SegCount, SegSize --> UInt32 - // - //SegName --> String - // - //SegName is the name of the segment, and is used as the file name prefix - //for all of the files that compose the segment's index. - // - //SegSize is the number of documents contained in the segment index. - // - //Note: - //At http://jakarta.apache.org/lucene/docs/fileformats.html the definition - //of all file formats can be found. Note that java lucene currently - //defines Segments as follows: - // - //Segments --> Format, Version, SegCount, SegCount - // - //Format, SegCount, SegSize --> UInt32 - // - //Format and Version have not been implemented yet - class SegmentInfos: LUCENE_BASE { - /** The file format version, a negative number. */ - /* Works since counter, the old 1st entry, is always >= 0 */ - LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-1); - - /** - * counts how often the index has been changed by adding or deleting docs. - * starting with the current time in milliseconds forces to create unique version numbers. - */ - int64_t version; - - segmentInfosType infos; - - int32_t counter; // used to name new segments - friend class IndexWriter; //allow IndexWriter to use counter - public: - SegmentInfos(bool deleteMembers=true); - ~SegmentInfos(); - - - //delete and clears objects 'from' from to 'to' - void clearto(size_t to); - - //count of segment infos - int32_t size() const; - //add a segment info - void add(SegmentInfo* info); - //Returns a reference to the i-th SegmentInfo in the list. - SegmentInfo* info(int32_t i); - - /** - * version number when this SegmentInfos was generated. - */ - int64_t getVersion() { return version; } - - static int64_t readCurrentVersion(CL_NS(store)::Directory* directory); - - //Reads segments file that resides in directory - void read(CL_NS(store)::Directory* directory); - - //Writes a new segments file based upon the SegmentInfo instances it manages - void write(CL_NS(store)::Directory* directory); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentMergeInfo.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentMergeInfo.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentMergeInfo.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentMergeInfo.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentMergeInfo.h" - -#include "SegmentTermEnum.h" -#include "SegmentHeader.h" - -CL_NS_DEF(index) - -SegmentMergeInfo::SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r): - reader(r),termEnum(te),base(b), docMap(NULL) { -//Func - Constructor -//Pre - b >= 0 -// te contains a valid reference to a SegmentTermEnum instance -// r contains a valid reference to a SegmentReader instance -//Post - The instance has been created - - CND_PRECONDITION(b >= 0, "b is a negative number"); - - postings=NULL; - term = te->term(); -} - -SegmentMergeInfo::~SegmentMergeInfo(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed - - close(); -} - -int32_t* SegmentMergeInfo::getDocMap(){ - if ( docMap == NULL ){ - // build array which maps document numbers around deletions - if (reader->hasDeletions()) { - //Get the total number of documents managed by the reader including the deleted ones - int32_t maxDoc = reader->maxDoc(); - //Create a map for all documents - docMap = _CL_NEWARRAY(int32_t,maxDoc); - int32_t j = 0; - //Iterate through all the document numbers - for (int32_t i = 0; i < maxDoc; i++) { - //Check if document i is marked deleted - if (reader->isDeleted(i)){ - //Document i has not been marked deleted so assign -1 - docMap[i] = -1; - }else{ - docMap[i] = j++; - } - } - } - } - return docMap; -} - -TermPositions* SegmentMergeInfo::getPositions() { - if (postings == NULL) { - postings = reader->termPositions(); - } - return postings; -} - - -bool SegmentMergeInfo::next() { -//Func - Moves the current term of the enumeration termEnum to the next and term -// points to this new current term -//Pre - true -//Post - Returns true if the term has been moved to the next otherwise false - if (termEnum->next()) { - _CLDECDELETE(term); - term = termEnum->term(); - return true; - } else { - _CLDECDELETE(term); //TODO: test HighFreqTerms errors with this - term = NULL; - return false; - } -} - -void SegmentMergeInfo::close() { -//Func - Closes the the resources -//Pre - true -//Post - The resources have been closed - - //First make sure posting has been closed - if ( postings != NULL ){ - postings->close(); - _CLVDELETE(postings); //todo: not a clucene object... should be - } - - if ( termEnum != NULL ){ - termEnum->close(); - _CLDELETE(termEnum); - } - _CLDECDELETE(term); - _CLDELETE_ARRAY(docMap); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentMergeInfo.h clucene-core-2.3.3.4/src/CLucene/index/SegmentMergeInfo.h --- clucene-core-0.9.21b/src/CLucene/index/SegmentMergeInfo.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentMergeInfo.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentMergeInfo_ -#define _lucene_index_SegmentMergeInfo_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SegmentTermEnum.h" -#include "SegmentHeader.h" - -CL_NS_DEF(index) -class SegmentMergeInfo:LUCENE_BASE { - int32_t* docMap; // maps around deleted docs - TermPositions* postings; -public: - TermEnum* termEnum; - Term* term; - int32_t base; - IndexReader* reader; - - //Constructor - SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r); - - //Destructor - ~SegmentMergeInfo(); - - //Moves the current term of the enumeration termEnum to the next and term - //points to this new current term - bool next(); - - //Closes the the resources - void close(); - - // maps around deleted docs - int32_t* getDocMap(); - - TermPositions* getPositions(); -}; -CL_NS_END -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentMergeQueue.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentMergeQueue.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentMergeQueue.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentMergeQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentMergeQueue.h" - -#include "SegmentMergeInfo.h" -CL_NS_DEF(index) - - - SegmentMergeQueue::SegmentMergeQueue(const int32_t size) { - //Func - Constructor - // Creates a queue of length size - //Pre - size >= 0 - //Post - The queue has been created of length size - - //BVK: bug. changed condition from size > 0 to size >= 0 - //if size is 0, as it is when retrieving a TermEnum - //from an empty index this should this should not fail. - CND_PRECONDITION(size >= 0, "size is too small"); - - //Call the initialize method of its superclass. The boolean value passed here - //indicates that the superclass PriorityQueue takes the responsibility to have its elements deleted - //The destructor of SegmentMergInfo will make sure that each intstance it will be closed properly - //before it is deleted - initialize(size,true); - } - - SegmentMergeQueue::~SegmentMergeQueue(){ - //Func - Destructor - // Does nothing as its parent class will clean up everything - //Pre - true - //Post - true - close(); - } - - void SegmentMergeQueue::close() { - //Func - Closes and destroyes all SegmentMergeInfo Instances in the queue - //Pre - true - //post - All SegmentMergeInfo Instances in the queue have been closed and deleted - // The queue is now empty but can still be used - - //call the clear method of the parent class PriorityQueue - clear(); - } - - bool SegmentMergeQueue::lessThan(SegmentMergeInfo* stiA, SegmentMergeInfo* stiB) { - //Func - Overloaded method that implements the lessThan operator for the parent class - // This method is used by the parent class Priority queue to reorder its internal - // data structures. This implementation check if stiA is less than the current term of stiB. - //Pre - stiA != NULL - // stiB != NULL - //Post - true is returned if stiA < stiB otherwise false - - CND_PRECONDITION(stiA != NULL, "stiA is NULL"); - CND_PRECONDITION(stiB != NULL, "stiB is NULL"); - - //Compare the two terms - int32_t comparison = stiA->term->compareTo(stiB->term); - //Check if they match - if (comparison == 0){ //todo: can we do an optimized compare here? compare using equals, then compare properly? - //If the match check if the base of stiA is smaller than the base of stiB - //Note that different bases means that the terms of stiA an stiB ly in different segments - return stiA->base < stiB->base; - }else{ - //Terms didn't match so return the difference in positions - return comparison < 0; - } - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentMergeQueue.h clucene-core-2.3.3.4/src/CLucene/index/SegmentMergeQueue.h --- clucene-core-0.9.21b/src/CLucene/index/SegmentMergeQueue.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentMergeQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentMergeQueue_ -#define _lucene_index_SegmentMergeQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/PriorityQueue.h" -#include "SegmentMergeInfo.h" - -CL_NS_DEF(index) - class SegmentMergeQueue :public CL_NS(util)::PriorityQueue > { - public: - //Constructor - //Creates a queue of length size - SegmentMergeQueue(const int32_t size); - - //Destructor - //Does nothing as its parent class will clean up everything - ~SegmentMergeQueue(); - - //Closes and destroyes all SegmentMergeInfo Instances in the queue - void close(); - protected: - //Overloaded method that implements the lessThan operator for the parent class - //This method is used by the parent class Priority queue to reorder its internal - //data structures. This implementation check if stiA is less than the current term of stiB. - bool lessThan(SegmentMergeInfo* stiA, SegmentMergeInfo* stiB); - - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentMerger.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentMerger.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentMerger.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentMerger.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,695 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentMerger.h" - -CL_NS_USE(util) -CL_NS_USE(document) -CL_NS_USE(store) -CL_NS_DEF(index) - -// File extensions of old-style index files -const char* COMPOUND_EXTENSIONS="fnm\0" "frq\0" "prx\0" "fdx\0" "fdt\0" "tii\0" "tis\0"; -int COMPOUND_EXTENSIONS_LENGTH=7; - -const char* VECTOR_EXTENSIONS="tvx\0" "tvd\0" "tvf\0"; -int VECTOR_EXTENSIONS_LENGTH=3; - -SegmentMerger::SegmentMerger(IndexWriter* writer, const char* name){ -//Func - Constructor -//Pre - dir holds a valid reference to a Directory -// name != NULL -//Post - Instance has been created - - CND_PRECONDITION(name != NULL, "name is NULL"); - - freqOutput = NULL; - proxOutput = NULL; - termInfosWriter = NULL; - queue = NULL; - fieldInfos = NULL; - useCompoundFile = writer->getUseCompoundFile(); - skipBuffer = _CLNEW CL_NS(store)::RAMIndexOutput(); - - segment = STRDUP_AtoA(name); - directory = writer->getDirectory(); - termIndexInterval= writer->getTermIndexInterval(); - - lastSkipDoc=0; - lastSkipFreqPointer=0; - lastSkipProxPointer=0; - skipInterval=0; -} - -SegmentMerger::~SegmentMerger(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed - - //Clear the readers set - readers.clear(); - - //Delete field Infos - _CLDELETE(fieldInfos); - //Close and destroy the IndexOutput to the Frequency File - if (freqOutput != NULL){ - freqOutput->close(); - _CLDELETE(freqOutput); - } - //Close and destroy the IndexOutput to the Prox File - if (proxOutput != NULL){ - proxOutput->close(); - _CLDELETE(proxOutput); - } - //Close and destroy the termInfosWriter - if (termInfosWriter != NULL){ - termInfosWriter->close(); - _CLDELETE(termInfosWriter); - } - //Close and destroy the queue - if (queue != NULL){ - queue->close(); - _CLDELETE(queue); - } - //close and destory the skipBuffer - if ( skipBuffer != NULL ){ - skipBuffer->close(); - _CLDELETE(skipBuffer); - } - - _CLDELETE_CaARRAY(segment); -} - -void SegmentMerger::add(IndexReader* reader) { -//Func - Adds a IndexReader to the set of readers -//Pre - reader contains a valid reference to a IndexReader -//Post - The SegementReader reader has been added to the set of readers - - readers.push_back(reader); -} - -IndexReader* SegmentMerger::segmentReader(const int32_t i) { -//Func - Returns a reference to the i-th IndexReader -//Pre - 0 <= i < readers.size() -//Post - A reference to the i-th IndexReader has been returned - - CND_PRECONDITION(i >= 0, "i is a negative number"); - CND_PRECONDITION((size_t)i < readers.size(), "i is bigger than the number of IndexReader instances"); - - //Retrieve the i-th IndexReader - IndexReader* ret = readers[i]; - CND_CONDITION(ret != NULL,"No IndexReader found"); - - return ret; -} - -int32_t SegmentMerger::merge() { - int32_t value = mergeFields(); - mergeTerms(); - mergeNorms(); - - if (fieldInfos->hasVectors()) - mergeVectors(); - - return value; -} - -void SegmentMerger::closeReaders(){ -for (uint32_t i = 0; i < readers.size(); i++) { // close readers - IndexReader* reader = readers[i]; - reader->close(); -} -} - -void SegmentMerger::createCompoundFile(const char* filename, CL_NS(util)::AStringArrayWithDeletor& files){ - CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, filename); - - { //msvc6 scope fix - // Basic files - for (int32_t i = 0; i < COMPOUND_EXTENSIONS_LENGTH; i++) { - files.push_back (Misc::ajoin(segment,".",COMPOUND_EXTENSIONS+(i*4)) ); - } - } - - { //msvc6 scope fix - // Field norm files - for (int32_t i = 0; i < fieldInfos->size(); i++) { - FieldInfo* fi = fieldInfos->fieldInfo(i); - if (fi->isIndexed && !fi->omitNorms) { - TCHAR tbuf[10]; - char abuf[10]; - _i64tot(i,tbuf,10); - STRCPY_TtoA(abuf,tbuf,10); - - files.push_back ( Misc::ajoin(segment,".f",abuf) ); - } - } - } - - // Vector files - if (fieldInfos->hasVectors()) { - for (int32_t i = 0; i < VECTOR_EXTENSIONS_LENGTH; i++) { - files.push_back ( Misc::ajoin(segment, ".", VECTOR_EXTENSIONS+(i*4)) ); - } - } - - { //msvc6 scope fix - // Now merge all added files - for ( size_t i=0;iaddFile(files[i]); - } - } - - // Perform the merge - cfsWriter->close(); - _CLDELETE(cfsWriter); -} - -void SegmentMerger::addIndexed(IndexReader* reader, FieldInfos* fieldInfos, StringArrayWithDeletor& names, - bool storeTermVectors, bool storePositionWithTermVector, - bool storeOffsetWithTermVector){ - - StringArrayWithDeletor::const_iterator itr = names.begin(); - while ( itr != names.end() ){ - fieldInfos->add(*itr, true, - storeTermVectors, storePositionWithTermVector, - storeOffsetWithTermVector, !reader->hasNorms(*itr)); - - ++itr; - } -} - -int32_t SegmentMerger::mergeFields() { -//Func - Merge the fields of all segments -//Pre - true -//Post - The field infos and field values of all segments have been merged. - - //Create a new FieldInfos - fieldInfos = _CLNEW FieldInfos(); // merge field names - - //Condition check to see if fieldInfos points to a valid instance - CND_CONDITION(fieldInfos != NULL,"Memory allocation for fieldInfos failed"); - - IndexReader* reader = NULL; - - int32_t docCount = 0; - - //Iterate through all readers - for (uint32_t i = 0; i < readers.size(); i++){ - //get the i-th reader - reader = readers[i]; - //Condition check to see if reader points to a valid instance - CND_CONDITION(reader != NULL,"No IndexReader found"); - - StringArrayWithDeletor tmp; - - tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION_OFFSET, tmp); - addIndexed(reader, fieldInfos, tmp, true, true, true); - - tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION, tmp); - addIndexed(reader, fieldInfos, tmp, true, true, false); - - tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_OFFSET, tmp); - addIndexed(reader, fieldInfos, tmp, true, false, true); - - tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR, tmp); - addIndexed(reader, fieldInfos, tmp, true, false, false); - - tmp.clear(); reader->getFieldNames(IndexReader::INDEXED, tmp); - addIndexed(reader, fieldInfos, tmp, false, false, false); - - tmp.clear(); reader->getFieldNames(IndexReader::UNINDEXED, tmp); - if ( tmp.size() > 0 ){ - TCHAR** arr = _CL_NEWARRAY(TCHAR*,tmp.size()+1); - tmp.toArray(arr); - fieldInfos->add((const TCHAR**)arr, false); - _CLDELETE_ARRAY(arr); //no need to delete the contents, since tmp is responsible for it - } - } - - //Create the filename of the new FieldInfos file - const char* buf = Misc::segmentname(segment,".fnm"); - //Write the new FieldInfos file to the directory - fieldInfos->write(directory, buf ); - //Destroy the buffer of the filename - _CLDELETE_CaARRAY(buf); - - // merge field values - - - //Instantiate Fieldswriter which will write in directory for the segment name segment - //Using the new merged fieldInfos - FieldsWriter* fieldsWriter = _CLNEW FieldsWriter(directory, segment, fieldInfos); - - //Condition check to see if fieldsWriter points to a valid instance - CND_CONDITION(fieldsWriter != NULL,"Memory allocation for fieldsWriter failed"); - - try { - IndexReader* reader = NULL; - int32_t maxDoc = 0; - //Iterate through all readers - for (uint32_t i = 0; i < readers.size(); i++) { - //get the i-th reader - reader = readers[i]; - - - //Condition check to see if reader points to a valid instance - CND_CONDITION(reader != NULL, "No IndexReader found"); - - //Get the total number documents including the documents that have been marked deleted - int32_t maxDoc = reader->maxDoc(); - - //document buffer - Document doc; - - //Iterate through all the documents managed by the current reader - for (int32_t j = 0; j < maxDoc; j++){ - //Check if the j-th document has been deleted, if so skip it - if (!reader->isDeleted(j)){ - //Get the document - if ( reader->document(j, &doc) ){ - //Add the document to the new FieldsWriter - fieldsWriter->addDocument( &doc ); - docCount++; - //doc is cleard for re-use - doc.clear(); - } - } - } - } - }_CLFINALLY( - //Close the fieldsWriter - fieldsWriter->close(); - //And have it deleted as it not used any more - _CLDELETE( fieldsWriter ); - ); - - return docCount; -} - -void SegmentMerger::mergeVectors(){ - TermVectorsWriter* termVectorsWriter = - _CLNEW TermVectorsWriter(directory, segment, fieldInfos); - - try { - for (uint32_t r = 0; r < readers.size(); r++) { - IndexReader* reader = readers[r]; - int32_t maxDoc = reader->maxDoc(); - for (int32_t docNum = 0; docNum < maxDoc; docNum++) { - // skip deleted docs - if (reader->isDeleted(docNum)) - continue; - - Array tmp; - if ( reader->getTermFreqVectors(docNum, tmp) ) - termVectorsWriter->addAllDocVectors(tmp); - tmp.deleteAll(); - } - } - }_CLFINALLY( _CLDELETE(termVectorsWriter); ); -} - - -void SegmentMerger::mergeTerms() { -//Func - Merge the terms of all segments -//Pre - fieldInfos != NULL -//Post - The terms of all segments have been merged - - CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL"); - - try{ - //create a filename for the new Frequency File for segment - const char* buf = Misc::segmentname(segment,".frq"); - //Open an IndexOutput to the new Frequency File - freqOutput = directory->createOutput( buf ); - //Destroy the buffer of the filename - _CLDELETE_CaARRAY(buf); - - //create a filename for the new Prox File for segment - buf = Misc::segmentname(segment,".prx"); - //Open an IndexOutput to the new Prox File - proxOutput = directory->createOutput( buf ); - //delete buffer - _CLDELETE_CaARRAY( buf ); - - //Instantiate a new termInfosWriter which will write in directory - //for the segment name segment using the new merged fieldInfos - termInfosWriter = _CLNEW TermInfosWriter(directory, segment, fieldInfos, termIndexInterval); - - //Condition check to see if termInfosWriter points to a valid instance - CND_CONDITION(termInfosWriter != NULL,"Memory allocation for termInfosWriter failed") ; - - skipInterval = termInfosWriter->skipInterval; - queue = _CLNEW SegmentMergeQueue(readers.size()); - - //And merge the Term Infos - mergeTermInfos(); - }_CLFINALLY( - //Close and destroy the IndexOutput to the Frequency File - if (freqOutput != NULL) { freqOutput->close(); _CLDELETE(freqOutput); } - //Close and destroy the IndexOutput to the Prox File - if (proxOutput != NULL) { proxOutput->close(); _CLDELETE(proxOutput); } - //Close and destroy the termInfosWriter - if (termInfosWriter != NULL) { termInfosWriter->close(); _CLDELETE(termInfosWriter); } - //Close and destroy the queue - if (queue != NULL) { queue->close(); _CLDELETE(queue);} - ); -} - -void SegmentMerger::mergeTermInfos(){ -//Func - Merges all TermInfos into a single segment -//Pre - true -//Post - All TermInfos have been merged into a single segment - - //Condition check to see if queue points to a valid instance - CND_CONDITION(queue != NULL, "Memory allocation for queue failed") ; - - //base is the id of the first document in a segment - int32_t base = 0; - - IndexReader* reader = NULL; - SegmentMergeInfo* smi = NULL; - - //iterate through all the readers - for (uint32_t i = 0; i < readers.size(); i++) { - //Get the i-th reader - reader = readers[i]; - - //Condition check to see if reader points to a valid instance - CND_CONDITION(reader != NULL, "No IndexReader found"); - - //Get the term enumeration of the reader - TermEnum* termEnum = reader->terms(); - //Instantiate a new SegmentMerginfo for the current reader and enumeration - smi = _CLNEW SegmentMergeInfo(base, termEnum, reader); - - //Condition check to see if smi points to a valid instance - CND_CONDITION(smi != NULL, "Memory allocation for smi failed") ; - - //Increase the base by the number of documents that have not been marked deleted - //so base will contain a new value for the first document of the next iteration - base += reader->numDocs(); - //Get the next current term - if (smi->next()){ - //Store the SegmentMergeInfo smi with the initialized SegmentTermEnum TermEnum - //into the queue - queue->put(smi); - }else{ - //Apparently the end of the TermEnum of the SegmentTerm has been reached so - //close the SegmentMergeInfo smi - smi->close(); - //And destroy the instance and set smi to NULL (It will be used later in this method) - _CLDELETE(smi); - } - } - - //Instantiate an array of SegmentMergeInfo instances called match - SegmentMergeInfo** match = _CL_NEWARRAY(SegmentMergeInfo*,readers.size()+1); - - //Condition check to see if match points to a valid instance - CND_CONDITION(match != NULL, "Memory allocation for match failed") ; - - SegmentMergeInfo* top = NULL; - - //As long as there are SegmentMergeInfo instances stored in the queue - while (queue->size() > 0) { - int32_t matchSize = 0; - - // pop matching terms - - //Pop the first SegmentMergeInfo from the queue - match[matchSize++] = queue->pop(); - //Get the Term of match[0] - Term* term = match[0]->term; - - //Condition check to see if term points to a valid instance - CND_CONDITION(term != NULL,"term is NULL") ; - - //Get the current top of the queue - top = queue->top(); - - //For each SegmentMergInfo still in the queue - //Check if term matches the term of the SegmentMergeInfo instances in the queue - while (top != NULL && term->equals(top->term) ){ - //A match has been found so add the matching SegmentMergeInfo to the match array - match[matchSize++] = queue->pop(); - //Get the next SegmentMergeInfo - top = queue->top(); - } - match[matchSize]=NULL; - - //add new TermInfo - mergeTermInfo(match); //matchSize - - //Restore the SegmentTermInfo instances in the match array back into the queue - while (matchSize > 0){ - smi = match[--matchSize]; - - //Condition check to see if smi points to a valid instance - CND_CONDITION(smi != NULL,"smi is NULL") ; - - //Move to the next term in the enumeration of SegmentMergeInfo smi - if (smi->next()){ - //There still are some terms so restore smi in the queue - queue->put(smi); - - }else{ - //Done with a segment - //No terms anymore so close this SegmentMergeInfo instance - smi->close(); - _CLDELETE( smi ); - } - } - } - - _CLDELETE_ARRAY(match); -} - -void SegmentMerger::mergeTermInfo( SegmentMergeInfo** smis){ -//Func - Merge the TermInfo of a term found in one or more segments. -//Pre - smis != NULL and it contains segments that are positioned at the same term. -// n is equal to the number of SegmentMergeInfo instances in smis -// freqOutput != NULL -// proxOutput != NULL -//Post - The TermInfo of a term has been merged - - CND_PRECONDITION(smis != NULL, "smis is NULL"); - CND_PRECONDITION(freqOutput != NULL, "freqOutput is NULL"); - CND_PRECONDITION(proxOutput != NULL, "proxOutput is NULL"); - - //Get the file pointer of the IndexOutput to the Frequency File - int64_t freqPointer = freqOutput->getFilePointer(); - //Get the file pointer of the IndexOutput to the Prox File - int64_t proxPointer = proxOutput->getFilePointer(); - - //Process postings from multiple segments all positioned on the same term. - int32_t df = appendPostings(smis); - - int64_t skipPointer = writeSkip(); - - //df contains the number of documents across all segments where this term was found - if (df > 0) { - //add an entry to the dictionary with pointers to prox and freq files - termInfo.set(df, freqPointer, proxPointer, (int32_t)(skipPointer - freqPointer)); - //Precondition check for to be sure that the reference to - //smis[0]->term will be valid - CND_PRECONDITION(smis[0]->term != NULL, "smis[0]->term is NULL"); - //Write a new TermInfo - termInfosWriter->add(smis[0]->term, &termInfo); - } -} - - -int32_t SegmentMerger::appendPostings(SegmentMergeInfo** smis){ -//Func - Process postings from multiple segments all positioned on the -// same term. Writes out merged entries into freqOutput and -// the proxOutput streams. -//Pre - smis != NULL and it contains segments that are positioned at the same term. -// n is equal to the number of SegmentMergeInfo instances in smis -// freqOutput != NULL -// proxOutput != NULL -//Post - Returns number of documents across all segments where this term was found - - CND_PRECONDITION(smis != NULL, "smis is NULL"); - CND_PRECONDITION(freqOutput != NULL, "freqOutput is NULL"); - CND_PRECONDITION(proxOutput != NULL, "proxOutput is NULL"); - - int32_t lastDoc = 0; - int32_t df = 0; //Document Counter - - resetSkip(); - SegmentMergeInfo* smi = NULL; - - //Iterate through all SegmentMergeInfo instances in smis - int32_t i = 0; - while ( (smi=smis[i]) != NULL ){ - //Get the i-th SegmentMergeInfo - - //Condition check to see if smi points to a valid instance - CND_PRECONDITION(smi!=NULL," is NULL"); - - //Get the term positions - TermPositions* postings = smi->getPositions(); - //Get the base of this segment - int32_t base = smi->base; - //Get the docMap so we can see which documents have been deleted - int32_t* docMap = smi->getDocMap(); - //Seek the termpost - postings->seek(smi->termEnum); - while (postings->next()) { - int32_t doc = postings->doc(); - //Check if there are deletions - if (docMap != NULL) - doc = docMap[doc]; // map around deletions - doc += base; // convert to merged space - - //Condition check to see doc is eaqual to or bigger than lastDoc - CND_CONDITION(doc >= lastDoc,"docs out of order"); - - //Increase the total frequency over all segments - df++; - - if ((df % skipInterval) == 0) { - bufferSkip(lastDoc); - } - - //Calculate a new docCode - //use low bit to flag freq=1 - int32_t docCode = (doc - lastDoc) << 1; - lastDoc = doc; - - //Get the frequency of the Term - int32_t freq = postings->freq(); - if (freq == 1){ - //write doc & freq=1 - freqOutput->writeVInt(docCode | 1); - }else{ - //write doc - freqOutput->writeVInt(docCode); - //write frequency in doc - freqOutput->writeVInt(freq); - } - - int32_t lastPosition = 0; - // write position deltas - for (int32_t j = 0; j < freq; j++) { - //Get the next position - int32_t position = postings->nextPosition(); - //Write the difference between position and the last position - proxOutput->writeVInt(position - lastPosition); - lastPosition = position; - } - } - - i++; - } - - //Return total number of documents across all segments where term was found - return df; -} - -void SegmentMerger::resetSkip(){ -skipBuffer->reset(); -lastSkipDoc = 0; -lastSkipFreqPointer = freqOutput->getFilePointer(); -lastSkipProxPointer = proxOutput->getFilePointer(); -} - -void SegmentMerger::bufferSkip(int32_t doc){ -int64_t freqPointer = freqOutput->getFilePointer(); -int64_t proxPointer = proxOutput->getFilePointer(); - -skipBuffer->writeVInt(doc - lastSkipDoc); -skipBuffer->writeVInt((int32_t) (freqPointer - lastSkipFreqPointer)); -skipBuffer->writeVInt((int32_t) (proxPointer - lastSkipProxPointer)); - -lastSkipDoc = doc; -lastSkipFreqPointer = freqPointer; -lastSkipProxPointer = proxPointer; -} - -int64_t SegmentMerger::writeSkip(){ -int64_t skipPointer = freqOutput->getFilePointer(); -skipBuffer->writeTo(freqOutput); -return skipPointer; -} - -void SegmentMerger::mergeNorms() { -//Func - Merges the norms for all fields -//Pre - fieldInfos != NULL -//Post - The norms for all fields have been merged - - CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL"); - - IndexReader* reader = NULL; - IndexOutput* output = NULL; - - //iterate through all the Field Infos instances - for (int32_t i = 0; i < fieldInfos->size(); i++) { - //Get the i-th FieldInfo - FieldInfo* fi = fieldInfos->fieldInfo(i); - //Is this Field indexed? - if (fi->isIndexed && !fi->omitNorms){ - //Create an new filename for the norm file - const char* buf = Misc::segmentname(segment,".f", i); - //Instantiate an IndexOutput to that norm file - output = directory->createOutput( buf ); - - //Condition check to see if output points to a valid instance - CND_CONDITION(output != NULL, "No Outputstream retrieved"); - - //Destroy the buffer of the filename - _CLDELETE_CaARRAY( buf ); - - int32_t inputLen = 0; - uint8_t* input = NULL; - - try{ - //Iterate through all IndexReaders - for (uint32_t j = 0; j < readers.size(); j++) { - //Get the i-th IndexReader - reader = readers[j]; - - //Condition check to see if reader points to a valid instance - CND_CONDITION(reader != NULL, "No reader found"); - - //Get the total number of documents including the documents that have been marked deleted - int32_t maxDoc = reader->maxDoc(); - - //Get an IndexInput to the norm file for this field in this segment - if ( inputLen < maxDoc ){ - if ( inputLen > 0 ) - input = (uint8_t*)realloc(input,maxDoc * sizeof(uint8_t)); - else - input = (uint8_t*)malloc(maxDoc * sizeof(uint8_t)); - inputLen = maxDoc; - } - reader->norms(fi->name, input); - - //Iterate through all the documents - for(int32_t k = 0; k < maxDoc; k++) { - //Check if document k is deleted - if (!reader->isDeleted(k)){ - //write the new norm - output->writeByte(input[k]); - } - } - } - }_CLFINALLY( - if (output != NULL){ - //Close the IndexOutput output - output->close(); - //destroy it - _CLDELETE(output); - } - free(input); - ); - } - } -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentMerger.h clucene-core-2.3.3.4/src/CLucene/index/SegmentMerger.h --- clucene-core-0.9.21b/src/CLucene/index/SegmentMerger.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentMerger.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentMerger_ -#define _lucene_index_SegmentMerger_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/store/Directory.h" -#include "CLucene/store/RAMDirectory.h" -#include "CLucene/util/VoidList.h" -#include "SegmentMergeInfo.h" -#include "SegmentMergeQueue.h" -#include "IndexWriter.h" -#include "FieldInfos.h" -#include "FieldsWriter.h" -#include "TermInfosWriter.h" - -CL_NS_DEF(index) - -/** -* The SegmentMerger class combines two or more Segments, represented by an IndexReader ({@link #add}, -* into a single Segment. After adding the appropriate readers, call the merge method to combine the -* segments. -*

-* If the compoundFile flag is set, then the segments will be merged into a compound file. -* -* -* @see #merge -* @see #add -*/ -class SegmentMerger:LUCENE_BASE { - bool useCompoundFile; - - CL_NS(store)::RAMIndexOutput* skipBuffer; - int32_t lastSkipDoc; - int64_t lastSkipFreqPointer; - int64_t lastSkipProxPointer; - - void resetSkip(); - void bufferSkip(int32_t doc); - int64_t writeSkip(); - - //Directory of the segment - CL_NS(store)::Directory* directory; - //name of the new segment - const char* segment; - //Set of IndexReaders - CL_NS(util)::CLVector > readers; - //Field Infos for t he FieldInfo instances of all fields - FieldInfos* fieldInfos; - - //The queue that holds SegmentMergeInfo instances - SegmentMergeQueue* queue; - //IndexOutput to the new Frequency File - CL_NS(store)::IndexOutput* freqOutput; - //IndexOutput to the new Prox File - CL_NS(store)::IndexOutput* proxOutput; - //Writes Terminfos that have been merged - TermInfosWriter* termInfosWriter; - TermInfo termInfo; //(new) minimize consing - - int32_t termIndexInterval; - int32_t skipInterval; - -public: - /** - * - * @param dir The Directory to merge the other segments into - * @param name The name of the new segment - * @param compoundFile true if the new segment should use a compoundFile - */ - SegmentMerger( IndexWriter* writer, const char* name ); - - //Destructor - ~SegmentMerger(); - - /** - * Add an IndexReader to the collection of readers that are to be merged - * @param reader - */ - void add(IndexReader* reader); - - /** - * - * @param i The index of the reader to return - * @return The ith reader to be merged - */ - IndexReader* segmentReader(const int32_t i); - - /** - * Merges the readers specified by the {@link #add} method into the directory passed to the constructor - * @return The number of documents that were merged - * @throws IOException - */ - int32_t merge(); - /** - * close all IndexReaders that have been added. - * Should not be called before merge(). - * @throws IOException - */ - void closeReaders(); -private: - void addIndexed(IndexReader* reader, FieldInfos* fieldInfos, CL_NS(util)::StringArrayWithDeletor& names, - bool storeTermVectors, bool storePositionWithTermVector, - bool storeOffsetWithTermVector); - - /** - * Merge the fields of all segments - * @return The number of documents in all of the readers - * @throws IOException - */ - int32_t mergeFields(); - - /** - * Merge the TermVectors from each of the segments into the new one. - * @throws IOException - */ - void mergeVectors(); - - /** Merge the terms of all segments */ - void mergeTerms(); - - /** Merges all TermInfos into a single segment */ - void mergeTermInfos(); - - /** Merge one term found in one or more segments. The array smis - * contains segments that are positioned at the same term. N - * is the number of cells in the array actually occupied. - * - * @param smis array of segments - * @param n number of cells in the array actually occupied - */ - void mergeTermInfo( SegmentMergeInfo** smis); - - /** Process postings from multiple segments all positioned on the - * same term. Writes out merged entries into freqOutput and - * the proxOutput streams. - * - * @param smis array of segments - * @param n number of cells in the array actually occupied - * @return number of documents across all segments where this term was found - */ - int32_t appendPostings(SegmentMergeInfo** smis); - - //Merges the norms for all fields - void mergeNorms(); - - void createCompoundFile(const char* filename, CL_NS(util)::AStringArrayWithDeletor& files); - friend class IndexWriter; //allow IndexWriter to use createCompoundFile -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentReader.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentReader.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentReader.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,777 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentHeader.h" - -#include "FieldInfos.h" -#include "FieldsReader.h" -#include "IndexReader.h" -#include "TermInfosReader.h" -#include "Terms.h" -#include "CLucene/search/Similarity.h" - -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_USE(document) -CL_NS_USE(search) -CL_NS_DEF(index) - - SegmentReader::Norm::Norm(IndexInput* instrm, int32_t n, SegmentReader* r, const char* seg): - number(n), - reader(r), - segment(seg), - in(instrm), - bytes(NULL), - dirty(false){ - //Func - Constructor - //Pre - instrm is a valid reference to an IndexInput - //Post - A Norm instance has been created with an empty bytes array - - bytes = NULL; - dirty = false; - } - - SegmentReader::Norm::~Norm() { - //Func - Destructor - //Pre - true - //Post - The IndexInput in has been deleted (and closed by its destructor) - // and the array too. - - //Close and destroy the inputstream in-> The inputstream will be closed - // by its destructor. Note that the IndexInput 'in' actually is a pointer!!!!! - _CLDELETE(in); - - //Delete the bytes array - _CLDELETE_ARRAY(bytes); - - } - - void SegmentReader::Norm::reWrite(){ - char buf[CL_MAX_PATH]; - char fileName[CL_MAX_PATH]; - sprintf(buf,"%s.tmp",segment); - - // NOTE: norms are re-written in regular directory, not cfs - IndexOutput* out = reader->getDirectory()->createOutput(buf); - try { - out->writeBytes(bytes, reader->maxDoc()); - }_CLFINALLY( out->close(); _CLDELETE(out) ); - - if ( reader->cfsReader == NULL ) - sprintf(fileName,"%s.f%d",segment,number); - else // use a different file name if we have compound format - sprintf(fileName,"%s.s%d",segment,number); - reader->getDirectory()->renameFile(buf, fileName); - this->dirty = false; - } - - SegmentReader::SegmentReader(SegmentInfo* si) : - //Init the superclass IndexReader - IndexReader(si->getDir()), - _norms(false,false) - { - initialize(si); - } - - SegmentReader::SegmentReader(SegmentInfos* sis, SegmentInfo* si) : - //Init the superclass IndexReader - IndexReader(si->getDir(),sis,false), - _norms(false,false) - { - initialize(si); - } - - void SegmentReader::initialize(SegmentInfo* si){ - //Pre - si-> is a valid reference to SegmentInfo instance - // identified by si-> - //Post - All files of the segment have been read - - deletedDocs = NULL; - ones = NULL; - //There are no documents yet marked as deleted - deletedDocsDirty = false; - - normsDirty=false; - undeleteAll=false; - - //Duplicate the name of the segment from SegmentInfo to segment - segment = STRDUP_AtoA(si->name); - // make sure that all index files have been read or are kept open - // so that if an index update removes them we'll still have them - freqStream = NULL; - proxStream = NULL; - - //instantiate a buffer large enough to hold a directory path - char buf[CL_MAX_PATH]; - - // Use compound file directory for some files, if it exists - Directory* cfsDir = getDirectory(); - SegmentName(buf, CL_MAX_PATH, ".cfs"); - if (cfsDir->fileExists(buf)) { - cfsReader = _CLNEW CompoundFileReader(cfsDir, buf); - cfsDir = cfsReader; - }else - cfsReader = NULL; - - //Create the name of the field info file with suffix .fnm in buf - SegmentName(buf, CL_MAX_PATH, ".fnm"); - fieldInfos = _CLNEW FieldInfos(cfsDir, buf ); - - //Condition check to see if fieldInfos points to a valid instance - CND_CONDITION(fieldInfos != NULL,"No memory could be allocated for fieldInfos"); - - //Create the name of the frequence file with suffix .frq in buf - SegmentName(buf,CL_MAX_PATH, ".frq"); - - //Open an IndexInput freqStream to the frequency file -#ifdef LUCENE_FS_MMAP - if ( cfsDir->getDirectoryType() == FSDirectory::DirectoryType() ){ - FSDirectory* fsdir = (FSDirectory*)cfsDir; - freqStream = fsdir->openMMapFile( buf ); - } else if (strcmp(cfsDir->getDirectoryType(), "CFS") == 0) { //todo: we should have a CFS Directory - freqStream = cfsDir->openInput(buf,true); - }else -#endif - freqStream = cfsDir->openInput( buf ); - - //Condition check to see if freqStream points to a valid instance and was able to open the - //frequency file - CND_CONDITION(freqStream != NULL, "IndexInput freqStream could not open the frequency file"); - - //Create the name of the prox file with suffix .prx in buf - SegmentName(buf, CL_MAX_PATH,".prx"); - - //Open an IndexInput proxStream to the prox file -#ifdef LUCENE_FS_MMAP - if (cfsDir->getDirectoryType() == FSDirectory::DirectoryType()) { - FSDirectory* fsdir = (FSDirectory*)cfsDir; - proxStream = fsdir->openMMapFile( buf ); - } else if (strcmp(cfsDir->getDirectoryType(), "CFS") == 0) { - proxStream = cfsDir->openInput(buf,true); - } else -#endif - proxStream = cfsDir->openInput( buf ); - - //Condition check to see if proxStream points to a valid instance and was able to open the - //prox file - CND_CONDITION(proxStream != NULL, "IndexInput proxStream could not open proximity file"); - - //Instantiate a FieldsReader for reading the Field Info File - fieldsReader = _CLNEW FieldsReader(cfsDir, segment, fieldInfos); - - //Condition check to see if fieldsReader points to a valid instance - CND_CONDITION(fieldsReader != NULL,"No memory could be allocated for fieldsReader"); - - //Instantiate a TermInfosReader for reading the Term Dictionary .tis file - tis = _CLNEW TermInfosReader(cfsDir, segment, fieldInfos); - - //Condition check to see if tis points to a valid instance - CND_CONDITION(tis != NULL,"No memory could be allocated for tis"); - - //Check if the segment has deletion according to the SegmentInfo instance si-> - // NOTE: the bitvector is stored using the regular directory, not cfs - if (hasDeletions(si)){ - //Create a deletion file with suffix .del - SegmentName(buf, CL_MAX_PATH,".del"); - //Instantiate a BitVector that manages which documents have been deleted - deletedDocs = _CLNEW BitSet(getDirectory(), buf ); - } - - //Open the norm file. There's a norm file for each indexed field with a byte for each document. - //The .f[0-9]* file contains, for each document, a byte that encodes a value - //that is multiplied into the score for hits on that field - openNorms(cfsDir); - - if (fieldInfos->hasVectors()) { // open term vector files only as needed - termVectorsReaderOrig = _CLNEW TermVectorsReader(cfsDir, segment, fieldInfos); - }else - termVectorsReaderOrig = NULL; - } - - SegmentReader::~SegmentReader(){ - //Func - Destructor. - //Pre - doClose has been invoked! - //Post - the instance has been destroyed - - doClose(); //this means that index reader doesn't need to be closed manually - - _CLDELETE(fieldInfos); - _CLDELETE(fieldsReader); - _CLDELETE(tis); - _CLDELETE(freqStream); - _CLDELETE(proxStream); - _CLDELETE_CaARRAY(segment); - _CLDELETE(deletedDocs); - _CLDELETE_ARRAY(ones); - _CLDELETE(termVectorsReaderOrig) - _CLDECDELETE(cfsReader); - //termVectorsLocal->unregister(this); - } - - void SegmentReader::doCommit(){ - char bufdel[CL_MAX_PATH]; - strcpy(bufdel,segment); - strcat(bufdel,".del"); - - if (deletedDocsDirty) { // re-write deleted - char buftmp[CL_MAX_PATH]; - strcpy(buftmp,segment); - strcat(buftmp,".tmp"); - deletedDocs->write(getDirectory(), buftmp); - getDirectory()->renameFile(buftmp,bufdel); - } - if(undeleteAll && getDirectory()->fileExists(bufdel)){ - getDirectory()->deleteFile(bufdel, true); - } - if (normsDirty) { // re-write norms - NormsType::iterator itr = _norms.begin(); - while (itr != _norms.end()) { - Norm* norm = itr->second; - if (norm->dirty) { - norm->reWrite(); - } - ++itr; - } - } - deletedDocsDirty = false; - normsDirty = false; - undeleteAll = false; - } - - void SegmentReader::doClose() { - //Func - Closes all streams to the files of a single segment - //Pre - fieldsReader != NULL - // tis != NULL - //Post - All streams to files have been closed - - CND_PRECONDITION(fieldsReader != NULL, "fieldsReader is NULL"); - CND_PRECONDITION(tis != NULL, "tis is NULL"); - - //Close the fieldsReader - fieldsReader->close(); - //Close the TermInfosReader - tis->close(); - - //Close the frequency stream - if (freqStream != NULL){ - freqStream->close(); - } - //Close the prox stream - if (proxStream != NULL){ - proxStream->close(); - } - - //Close the norm file - closeNorms(); - - if (termVectorsReaderOrig != NULL) - termVectorsReaderOrig->close(); - - if (cfsReader != NULL) - cfsReader->close(); - } - - bool SegmentReader::hasDeletions() const{ - return deletedDocs != NULL; - } - - //static - bool SegmentReader::usesCompoundFile(SegmentInfo* si) { - char buf[CL_MAX_PATH]; - strcpy(buf,si->name); - strcat(buf,".cfs"); - return si->getDir()->fileExists(buf); - } - - //static - bool SegmentReader::hasSeparateNorms(SegmentInfo* si) { - vector names; - si->getDir()->list(&names); - - char pattern[CL_MAX_PATH]; - strcpy(pattern,si->name); - strcat(pattern,".s"); - size_t patternLength = strlen(pattern); - - string res; - bool ret=false; - vector::iterator itr = names.begin(); - while ( itr != names.end() ){ - if ( (*itr).length()>patternLength && strncmp((*itr).c_str(),pattern,patternLength) == 0 ){ - if ( (*itr).at(patternLength) >= '0' && (*itr).at(patternLength) <= '9' ) - return true; - } - itr++; - } - return false; - } - - bool SegmentReader::hasDeletions(const SegmentInfo* si) { - //Func - Static method - // Checks if a segment managed by SegmentInfo si-> has deletions - //Pre - si-> holds a valid reference to an SegmentInfo instance - //Post - if the segement contains deleteions true is returned otherwise flas - - //Create a buffer f of length CL_MAX_PATH - char f[CL_MAX_PATH]; - //SegmentReader::segmentname(f, si->name,_T(".del"),-1 ); - //create the name of the deletion file - Misc::segmentname(f,CL_MAX_PATH, si->name,".del",-1 ); - //Check if the deletion file exists and return the result - return si->getDir()->fileExists( f ); - } - - //synchronized - void SegmentReader::doDelete(const int32_t docNum){ - //Func - Marks document docNum as deleted - //Pre - docNum >=0 and DocNum < maxDoc() - // docNum contains the number of the document that must be - // marked deleted - //Post - The document identified by docNum has been marked deleted - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(docNum >= 0, "docNum is a negative number"); - CND_PRECONDITION(docNum < maxDoc(), "docNum is bigger than the total number of documents"); - - //Check if deletedDocs exists - if (deletedDocs == NULL){ - deletedDocs = _CLNEW BitSet(maxDoc()); - - //Condition check to see if deletedDocs points to a valid instance - CND_CONDITION(deletedDocs != NULL,"No memory could be allocated for deletedDocs"); - } - //Flag that there are documents marked deleted - deletedDocsDirty = true; - undeleteAll = false; - //Mark document identified by docNum as deleted - deletedDocs->set(docNum); - - } - - void SegmentReader::doUndeleteAll(){ - _CLDELETE(deletedDocs); - deletedDocsDirty = false; - undeleteAll = true; - } - - void SegmentReader::files(CL_NS(util)::AStringArrayWithDeletor& retarray) { - //Func - Returns all file names managed by this SegmentReader - //Pre - segment != NULL - //Post - All filenames managed by this SegmentRead have been returned - - CND_PRECONDITION(segment != NULL, "segment is NULL"); - - char* temp = NULL; - #define _ADD_SEGMENT(ext) temp = SegmentName( ext ); if ( getDirectory()->fileExists(temp) ) retarray.push_back(temp); else _CLDELETE_CaARRAY(temp); - - //Add the name of the Field Info file - _ADD_SEGMENT(".cfs" ); - _ADD_SEGMENT(".fnm" ); - _ADD_SEGMENT(".fdx" ); - _ADD_SEGMENT(".fdt" ); - _ADD_SEGMENT(".tii" ); - _ADD_SEGMENT(".tis" ); - _ADD_SEGMENT(".frq" ); - _ADD_SEGMENT(".prx" ); - _ADD_SEGMENT(".del" ); - _ADD_SEGMENT(".tvx" ); - _ADD_SEGMENT(".tvd" ); - _ADD_SEGMENT(".tvf" ); - _ADD_SEGMENT(".tvp" ); - - //iterate through the field infos - FieldInfo* fi; - for (int32_t i = 0; i < fieldInfos->size(); ++i) { - //Get the field info for the i-th field - fi = fieldInfos->fieldInfo(i); - //Check if the field has been indexed - if (fi->isIndexed && !fi->omitNorms){ - char* name; - if ( cfsReader == NULL ) - name = SegmentName(".f", i); - else - name = SegmentName(".s", i); - //The field has been indexed so add its norm file - if ( getDirectory()->fileExists(name) ) - retarray.push_back( name ); - else - _CLDELETE_CaARRAY(name); - } - } - } - - TermEnum* SegmentReader::terms() const { - //Func - Returns an enumeration of all the Terms and TermInfos in the set. - //Pre - tis != NULL - //Post - An enumeration of all the Terms and TermInfos in the set has been returned - - CND_PRECONDITION(tis != NULL, "tis is NULL"); - - return tis->terms(); - } - - TermEnum* SegmentReader::terms(const Term* t) const { - //Func - Returns an enumeration of terms starting at or after the named term t - //Pre - t != NULL - // tis != NULL - //Post - An enumeration of terms starting at or after the named term t - - CND_PRECONDITION(t != NULL, "t is NULL"); - CND_PRECONDITION(tis != NULL, "tis is NULL"); - - return tis->terms(t); - } - - bool SegmentReader::document(int32_t n, Document* doc) { - //Func - Returns a document identified by n - //Pre - n >=0 and identifies the document n - //Post - if the document has been deleted then an exception has been thrown - // otherwise a reference to the found document has been returned - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(n >= 0, "n is a negative number"); - - //Check if the n-th document has been marked deleted - if (isDeleted(n)){ - _CLTHROWA( CL_ERR_InvalidState,"attempt to access a deleted document" ); - } - - //Retrieve the n-th document - return fieldsReader->doc(n, doc); - } - - - bool SegmentReader::isDeleted(const int32_t n){ - //Func - Checks if the n-th document has been marked deleted - //Pre - n >=0 and identifies the document n - //Post - true has been returned if document n has been deleted otherwise fralse - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(n >= 0, "n is a negative number"); - - //Is document n deleted - bool ret = (deletedDocs != NULL && deletedDocs->get(n)); - - return ret; - } - - TermDocs* SegmentReader::termDocs() const { - //Func - Returns an unpositioned TermDocs enumerator. - //Pre - true - //Post - An unpositioned TermDocs enumerator has been returned - - return _CLNEW SegmentTermDocs(this); - } - - TermPositions* SegmentReader::termPositions() const { - //Func - Returns an unpositioned TermPositions enumerator. - //Pre - true - //Post - An unpositioned TermPositions enumerator has been returned - - return _CLNEW SegmentTermPositions(this); - } - - int32_t SegmentReader::docFreq(const Term* t) const { - //Func - Returns the number of documents which contain the term t - //Pre - t holds a valid reference to a Term - //Post - The number of documents which contain term t has been returned - - //Get the TermInfo ti for Term t in the set - TermInfo* ti = tis->get(t); - //Check if an TermInfo has been returned - if (ti){ - //Get the frequency of the term - int32_t ret = ti->docFreq; - //TermInfo ti is not needed anymore so delete it - _CLDELETE( ti ); - //return the number of documents which containt term t - return ret; - } - else - //No TermInfo returned so return 0 - return 0; - } - - int32_t SegmentReader::numDocs() { - //Func - Returns the actual number of documents in the segment - //Pre - true - //Post - The actual number of documents in the segments - - //Get the number of all the documents in the segment including the ones that have - //been marked deleted - int32_t n = maxDoc(); - - //Check if there any deleted docs - if (deletedDocs != NULL) - //Substract the number of deleted docs from the number returned by maxDoc - n -= deletedDocs->count(); - - //return the actual number of documents in the segment - return n; - } - - int32_t SegmentReader::maxDoc() const { - //Func - Returns the number of all the documents in the segment including - // the ones that have been marked deleted - //Pre - true - //Post - The total number of documents in the segment has been returned - - return fieldsReader->size(); - } - -void SegmentReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ - size_t len = fieldInfos->size(); - for (size_t i = 0; i < len; i++) { - FieldInfo* fi = fieldInfos->fieldInfo(i); - bool v=false; - if (fldOption & IndexReader::ALL) { - v=true; - }else { - if (!fi->isIndexed && (fldOption & IndexReader::UNINDEXED) ) - v=true; - if (fi->isIndexed && (fldOption & IndexReader::INDEXED) ) - v=true; - if (fi->isIndexed && fi->storeTermVector == false && ( fldOption & IndexReader::INDEXED_NO_TERMVECTOR) ) - v=true; - if ( (fldOption & IndexReader::TERMVECTOR) && - fi->storeTermVector == true && - fi->storePositionWithTermVector == false && - fi->storeOffsetWithTermVector == false ) - v=true; - if (fi->isIndexed && fi->storeTermVector && (fldOption & IndexReader::INDEXED_WITH_TERMVECTOR) ) - v=true; - if (fi->storePositionWithTermVector && fi->storeOffsetWithTermVector == false && - (fldOption & IndexReader::TERMVECTOR_WITH_POSITION)) - v=true; - if (fi->storeOffsetWithTermVector && fi->storePositionWithTermVector == false && - (fldOption & IndexReader::TERMVECTOR_WITH_OFFSET) ) - v=true; - if ((fi->storeOffsetWithTermVector && fi->storePositionWithTermVector) && - (fldOption & IndexReader::TERMVECTOR_WITH_POSITION_OFFSET) ) - v=true; - } - if ( v ) - retarray.push_back(STRDUP_TtoT(fi->name)); - } -} - -bool SegmentReader::hasNorms(const TCHAR* field) const{ - return _norms.find(field) != _norms.end(); -} - - - void SegmentReader::norms(const TCHAR* field, uint8_t* bytes) { - //Func - Reads the Norms for field from disk starting at offset in the inputstream - //Pre - field != NULL - // bytes != NULL is an array of bytes which is to be used to read the norms into. - // it is advisable to have bytes initalized by zeroes! - //Post - The if an inputstream to the norm file could be retrieved the bytes have been read - // You are never sure whether or not the norms have been read into bytes properly!!!!!!!!!!!!!!!!! - - CND_PRECONDITION(field != NULL, "field is NULL"); - CND_PRECONDITION(bytes != NULL, "field is NULL"); - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - Norm* norm = _norms.get(field); - if ( norm == NULL ){ - memcpy(bytes, fakeNorms(), maxDoc()); - return; - } - if (norm->bytes != NULL) { // can copy from cache - memcpy(bytes, norm->bytes, maxDoc()); - return; - } - - IndexInput* _normStream = norm->in->clone(); - CND_PRECONDITION(_normStream != NULL, "normStream==NULL") - - // read from disk - try{ - _normStream->seek(0); - _normStream->readBytes(bytes, maxDoc()); - }_CLFINALLY( - //Have the normstream closed - _normStream->close(); - //Destroy the normstream - _CLDELETE( _normStream ); - ); - } - - uint8_t* SegmentReader::createFakeNorms(int32_t size) { - uint8_t* ones = _CL_NEWARRAY(uint8_t,size); - memset(ones, DefaultSimilarity::encodeNorm(1.0f), size); - return ones; - } - - uint8_t* SegmentReader::fakeNorms() { - if (ones==NULL) - ones=createFakeNorms(maxDoc()); - return ones; - } - // can return null if norms aren't stored - uint8_t* SegmentReader::getNorms(const TCHAR* field) { - SCOPED_LOCK_MUTEX(THIS_LOCK) - Norm* norm = _norms.get(field); - if (norm == NULL) - return NULL; // not indexed, or norms not stored - - if (norm->bytes == NULL) { // value not yet read - uint8_t* bytes = _CL_NEWARRAY(uint8_t, maxDoc()); - norms(field, bytes); - norm->bytes = bytes; // cache it - } - return norm->bytes; - } - - uint8_t* SegmentReader::norms(const TCHAR* field) { - //Func - Returns the bytes array that holds the norms of a named field - //Pre - field != NULL and contains the name of the field for which the norms - // must be retrieved - //Post - If there was norm for the named field then a bytes array has been allocated - // and returned containing the norms for that field. If the named field is unknown NULL is returned. - - CND_PRECONDITION(field != NULL, "field is NULL"); - SCOPED_LOCK_MUTEX(THIS_LOCK) - uint8_t* bytes = getNorms(field); - if (bytes==NULL) - bytes=fakeNorms(); - return bytes; - } - - void SegmentReader::doSetNorm(int32_t doc, const TCHAR* field, uint8_t value){ - Norm* norm = _norms.get(field); - if (norm == NULL) // not an indexed field - return; - norm->dirty = true; // mark it dirty - normsDirty = true; - - uint8_t* bits = norms(field); - bits[doc] = value; // set the value - } - - - char* SegmentReader::SegmentName(const char* ext, const int32_t x){ - //Func - Returns an allocated buffer in which it creates a filename by - // concatenating segment with ext and x - //Pre ext != NULL and holds the extension - // x contains a number - //Post - A buffer has been instantiated an when x = -1 buffer contains the concatenation of - // segment and ext otherwise buffer contains the contentation of segment, ext and x - - CND_PRECONDITION(ext != NULL, "ext is NULL"); - - //Create a buffer of length CL_MAX_PATH - char* buf = _CL_NEWARRAY(char,CL_MAX_PATH); - //Create the filename - SegmentName(buf,CL_MAX_PATH,ext,x); - - return buf ; - } - - void SegmentReader::SegmentName(char* buffer,int32_t bufferLen, const char* ext, const int32_t x ){ - //Func - Creates a filename in buffer by concatenating segment with ext and x - //Pre - buffer != NULL - // ext != NULL - // x contains a number - //Post - When x = -1 buffer contains the concatenation of segment and ext otherwise - // buffer contains the contentation of segment, ext and x - - CND_PRECONDITION(buffer != NULL, "buffer is NULL"); - CND_PRECONDITION(segment != NULL, "Segment is NULL"); - - Misc::segmentname(buffer,bufferLen,segment,ext,x); - } - void SegmentReader::openNorms(Directory* cfsDir) { - //Func - Open all norms files for all fields - // Creates for each field a norm Instance with an open inputstream to - // a corresponding norm file ready to be read - //Pre - true - //Post - For each field a norm instance has been created with an open inputstream to - // a corresponding norm file ready to be read - - //Iterate through all the fields - for (int32_t i = 0; i < fieldInfos->size(); i++) { - //Get the FieldInfo for the i-th field - FieldInfo* fi = fieldInfos->fieldInfo(i); - //Check if the field is indexed - if (fi->isIndexed && !fi->omitNorms ) { - //Allocate a buffer - char fileName[CL_MAX_PATH]; - - // look first if there are separate norms in compound format - SegmentName(fileName,CL_MAX_PATH, ".s", fi->number); - Directory* d = getDirectory(); - if(!d->fileExists(fileName)){ - SegmentName(fileName,CL_MAX_PATH, ".f", fi->number); - d = cfsDir; - } - - _norms.put(fi->name, _CLNEW Norm( d->openInput( fileName ),fi->number, this, segment )); - } - } - } - - void SegmentReader::closeNorms() { - //Func - Close all the norms stored in norms - //Pre - true - //Post - All the norms have been destroyed - - SCOPED_LOCK_MUTEX(_norms.THIS_LOCK) - //Create an interator initialized at the beginning of norms - NormsType::iterator itr = _norms.begin(); - //Iterate through all the norms - while (itr != _norms.end()) { - //Get the norm - Norm* n = itr->second; - //delete the norm n - _CLDELETE(n); - //Move the interator to the next norm in the norms collection. - //Note ++ is an overloaded operator - ++itr; - } - _norms.clear(); //bvk: they're deleted, so clear them so that they are not re-used - } - - - TermVectorsReader* SegmentReader::getTermVectorsReader() { - TermVectorsReader* tvReader = termVectorsLocal.get(); - if (tvReader == NULL) { - tvReader = termVectorsReaderOrig->clone(); - termVectorsLocal.set(tvReader); - } - return tvReader; - } - - TermFreqVector* SegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field){ - if ( field != NULL ){ - // Check if this field is invalid or has no stored term vector - FieldInfo* fi = fieldInfos->fieldInfo(field); - if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL ) - return NULL; - } - TermVectorsReader* termVectorsReader = getTermVectorsReader(); - if (termVectorsReader == NULL) - return NULL; - return termVectorsReader->get(docNumber, field); - } - - bool SegmentReader::getTermFreqVectors(int32_t docNumber, Array& result) { - if (termVectorsReaderOrig == NULL) - return false; - - TermVectorsReader* termVectorsReader = getTermVectorsReader(); - if (termVectorsReader == NULL) - return false; - - return termVectorsReader->get(docNumber, result); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentTermDocs.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentTermDocs.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentTermDocs.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentTermDocs.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentHeader.h" - -#include "CLucene/store/IndexInput.h" -#include "Term.h" - -CL_NS_DEF(index) - - SegmentTermDocs::SegmentTermDocs(const SegmentReader* _parent){ - //Func - Constructor - //Pre - Paren != NULL - //Post - The instance has been created - - CND_PRECONDITION(_parent != NULL,"Parent is NULL"); - - parent = _parent; - deletedDocs = parent->deletedDocs; - - _doc = 0; - _freq = 0; - count = 0; - df = 0; - - skipInterval=0; - numSkips=0; - skipCount=0; - skipStream=NULL; - skipDoc=0; - freqPointer=0; - proxPointer=0; - skipPointer=0; - haveSkipped=false; - - freqStream = parent->freqStream->clone(); - skipInterval = parent->tis->getSkipInterval(); - } - - SegmentTermDocs::~SegmentTermDocs() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - close(); - } - - TermPositions* SegmentTermDocs::__asTermPositions(){ - return NULL; - } - - void SegmentTermDocs::seek(Term* term) { - TermInfo* ti = parent->tis->get(term); - seek(ti); - _CLDELETE(ti); - } - - void SegmentTermDocs::seek(TermEnum* termEnum){ - TermInfo* ti=NULL; - - // use comparison of fieldinfos to verify that termEnum belongs to the same segment as this SegmentTermDocs - if ( termEnum->getObjectName() == SegmentTermEnum::getClassName() ){ - SegmentTermEnum* te = (SegmentTermEnum*)termEnum; - te->fieldInfos = parent->fieldInfos; - ti = te->getTermInfo(); - }else{ - ti = parent->tis->get(termEnum->term(false)); - } - - seek(ti); - _CLDELETE(ti); - } - void SegmentTermDocs::seek(const TermInfo* ti) { - count = 0; - if (ti == NULL) { - df = 0; - } else { - df = ti->docFreq; - _doc = 0; - skipDoc = 0; - skipCount = 0; - numSkips = df / skipInterval; - freqPointer = ti->freqPointer; - proxPointer = ti->proxPointer; - skipPointer = freqPointer + ti->skipOffset; - freqStream->seek(freqPointer); - haveSkipped = false; - } - } - - void SegmentTermDocs::close() { - - //Check if freqStream still exists - if (freqStream != NULL){ - freqStream->close(); //todo: items like these can probably be delete, because deleting the object also closes it...do everywhere - _CLDELETE( freqStream ); - } - if (skipStream != NULL){ - skipStream->close(); - _CLDELETE( skipStream ); - } - } - - int32_t SegmentTermDocs::doc()const { - return _doc; - } - int32_t SegmentTermDocs::freq()const { - return _freq; - } - - bool SegmentTermDocs::next() { - while (true) { - if (count == df) - return false; - - uint32_t docCode = freqStream->readVInt(); - _doc += docCode >> 1; //unsigned shift - if ((docCode & 1) != 0) // if low bit is set - _freq = 1; // _freq is one - else - _freq = freqStream->readVInt(); // else read _freq - count++; - - if ( (deletedDocs == NULL) || (deletedDocs->get(_doc) == false ) ) - break; - skippingDoc(); - } - return true; - } - - int32_t SegmentTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) { - int32_t i = 0; -//todo: one optimization would be to get the pointer buffer for ram or mmap dirs -//and iterate over them instead of using readByte() intensive functions. - while (ireadVInt(); - _doc += docCode >> 1; - if ((docCode & 1) != 0) // if low bit is set - _freq = 1; // _freq is one - else - _freq = freqStream->readVInt(); // else read _freq - count++; - - if (deletedDocs == NULL || !deletedDocs->get(_doc)) { - docs[i] = _doc; - freqs[i] = _freq; - i++; - } - } - return i; - } - - bool SegmentTermDocs::skipTo(const int32_t target){ - if (df >= skipInterval) { // optimized case - if (skipStream == NULL) - skipStream = freqStream->clone(); // lazily clone - - if (!haveSkipped) { // lazily seek skip stream - skipStream->seek(skipPointer); - haveSkipped = true; - } - - // scan skip data - int32_t lastSkipDoc = skipDoc; - int64_t lastFreqPointer = freqStream->getFilePointer(); - int64_t lastProxPointer = -1; - int32_t numSkipped = -1 - (count % skipInterval); - - while (target > skipDoc) { - lastSkipDoc = skipDoc; - lastFreqPointer = freqPointer; - lastProxPointer = proxPointer; - - if (skipDoc != 0 && skipDoc >= _doc) - numSkipped += skipInterval; - - if(skipCount >= numSkips) - break; - - skipDoc += skipStream->readVInt(); - freqPointer += skipStream->readVInt(); - proxPointer += skipStream->readVInt(); - - skipCount++; - } - - // if we found something to skip, then skip it - if (lastFreqPointer > freqStream->getFilePointer()) { - freqStream->seek(lastFreqPointer); - skipProx(lastProxPointer); - - _doc = lastSkipDoc; - count += numSkipped; - } - - } - - // done skipping, now just scan - - do { - if (!next()) - return false; - } while (target > _doc); - return true; - } - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentTermEnum.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentTermEnum.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentTermEnum.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,389 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentTermEnum.h" - -#include "Terms.h" -#include "FieldInfos.h" -#include "Term.h" -#include "TermInfo.h" -#include "TermInfosWriter.h" - -CL_NS_USE(store) -CL_NS_DEF(index) - - SegmentTermEnum::SegmentTermEnum(IndexInput* i, FieldInfos* fis, const bool isi): - fieldInfos(fis){ - //Func - Constructor - //Pre - i holds a reference to an instance of IndexInput - // fis holds a reference to an instance of FieldInfos - // isi - //Post - An instance of SegmentTermEnum has been created - input = i; - position = -1; - //Instantiate a Term with empty field, empty text and which is interned (see term.h what interned means) - _term = _CLNEW Term; - isIndex = isi; - termInfo = _CLNEW TermInfo(); - indexPointer = 0; - buffer = NULL; - bufferLength = 0; - prev = NULL; - formatM1SkipInterval = 0; - - //Set isClone to false as the instance is not clone of another instance - isClone = false; - - - int32_t firstInt = input->readInt(); - if (firstInt >= 0) { - // original-format file, without explicit format version number - format = 0; - size = firstInt; - - // back-compatible settings - indexInterval = 128; - skipInterval = LUCENE_INT32_MAX_SHOULDBE; // switch off skipTo optimization - - } else { - // we have a format version number - format = firstInt; - - // check that it is a format we can understand - if (format < TermInfosWriter::FORMAT){ - TCHAR err[30]; - _sntprintf(err,30,_T("Unknown format version: %d"), format); - _CLTHROWT(CL_ERR_Runtime,err); - } - - size = input->readLong(); // read the size - - if(format == -1){ - if (!isIndex) { - indexInterval = input->readInt(); - formatM1SkipInterval = input->readInt(); - } - // switch off skipTo optimization for file format prior to 1.4rc2 in order to avoid a bug in - // skipTo implementation of these versions - skipInterval = LUCENE_INT32_MAX_SHOULDBE; - }else{ - indexInterval = input->readInt(); - skipInterval = input->readInt(); - } - } - } - - SegmentTermEnum::SegmentTermEnum(const SegmentTermEnum& clone): - fieldInfos(clone.fieldInfos) - { - //Func - Constructor - // The instance is created by cloning all properties of clone - //Pre - clone holds a valid reference to SegmentTermEnum - //Post - An instance of SegmentTermEnum with the same properties as clone - - input = clone.input->clone(); - //Copy the postion from the clone - position = clone.position; - - if ( clone._term != NULL ){ - _term = _CLNEW Term; - _term->set(clone._term,clone._term->text()); - }else - _term = NULL; - isIndex = clone.isIndex; - termInfo = _CLNEW TermInfo(clone.termInfo); - indexPointer = clone.indexPointer; - buffer = clone.buffer==NULL?NULL:(TCHAR*)malloc(sizeof(TCHAR) * (clone.bufferLength+1)); - bufferLength = clone.bufferLength; - prev = clone.prev==NULL?NULL:_CLNEW Term(clone.prev->field(),clone.prev->text(),false); - size = clone.size; - - format = clone.format; - indexInterval= clone.indexInterval; - skipInterval = clone.skipInterval; - formatM1SkipInterval = clone.formatM1SkipInterval; - //Set isClone to true as this instance is a clone of another instance - isClone = true; - - //Copy the contents of buffer of clone to the buffer of this instance - if ( clone.buffer != NULL ) - memcpy(buffer,clone.buffer,bufferLength * sizeof(TCHAR)); - } - - SegmentTermEnum::~SegmentTermEnum(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed. If this instance was a clone - // then the inputstream is closed and deleted too. - - //todo: revisit this... close() should clean up most of everything. - - //Finalize prev - _CLDECDELETE(prev ); - //Finalize term - _CLDECDELETE( _term ); - - - //Delete the buffer if necessary - free(buffer); - //Delete termInfo if necessary - _CLDELETE(termInfo); - - //Check if this instance is a clone - if ( isClone ){ - //Close the inputstream - input->close(); - //delete the inputstream - _CLDELETE(input); - } - } - - bool SegmentTermEnum::next(){ - //Func - Moves the current of the set to the next in the set - //Pre - true - //Post - If the end has been reached NULL is returned otherwise the term has - // become the next Term in the enumeration - - //Increase position by and and check if the end has been reached - if (position++ >= size-1) { - //delete term - _CLDECDELETE(_term); - return false; - } - - //delete the previous enumerated term - Term* tmp=NULL; - if ( prev != NULL ){ - int32_t usage = prev->__cl_refcount; - if ( usage > 1 ){ - _CLDECDELETE(prev); //todo: tune other places try and delete its term - }else - tmp = prev; //we are going to re-use this term - } - //prev becomes the current enumerated term - prev = _term; - //term becomes the next term read from inputStream input - _term = readTerm(tmp); - - //Read docFreq, the number of documents which contain the term. - termInfo->docFreq = input->readVInt(); - //Read freqPointer, a pointer into the TermFreqs file (.frq) - termInfo->freqPointer += input->readVLong(); - - //Read proxPointer, a pointer into the TermPosition file (.prx). - termInfo->proxPointer += input->readVLong(); - - if(format == -1){ - // just read skipOffset in order to increment file pointer; - // value is never used since skipTo is switched off - if (!isIndex) { - if (termInfo->docFreq > formatM1SkipInterval) { - termInfo->skipOffset = input->readVInt(); - } - } - }else{ - if (termInfo->docFreq >= skipInterval) - termInfo->skipOffset = input->readVInt(); - } - - //Check if the enumeration is an index - if (isIndex) - //read index pointer - indexPointer += input->readVLong(); - - return true; - } - - Term* SegmentTermEnum::term() { - //Func - Returns the current term. - //Pre - pointer is true or false and indicates if the reference counter - // of term must be increased or not - // next() must have been called once! - //Post - pointer = true -> term has been returned with an increased reference counter - // pointer = false -> term has been returned - - return _CL_POINTER(_term); - } - Term* SegmentTermEnum::term(bool pointer) { - if ( pointer ) - return _CL_POINTER(_term); - else - return _term; - } - - void SegmentTermEnum::scanTo(const Term *term){ - //Func - Scan for Term without allocating new Terms - //Pre - term != NULL - //Post - The iterator term has been moved to the position where Term is expected to be - // in the enumeration - while ( term->compareTo(this->_term) > 0 && next()) - { - } - } - - void SegmentTermEnum::close() { - //Func - Closes the enumeration to further activity, freeing resources. - //Pre - true - //Post - The inputStream input has been closed - - input->close(); - } - - int32_t SegmentTermEnum::docFreq() const { - //Func - Returns the document frequency of the current term in the set - //Pre - termInfo != NULL - // next() must have been called once - //Post - The document frequency of the current enumerated term has been returned - - return termInfo->docFreq; - } - - void SegmentTermEnum::seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti) { - //Func - Repositions term and termInfo within the enumeration - //Pre - pointer >= 0 - // p >= 0 and contains the new position within the enumeration - // t is a valid reference to a Term and is the new current term in the enumeration - // ti is a valid reference to a TermInfo and is corresponding TermInfo form the new - // current Term - //Post - term and terminfo have been repositioned within the enumeration - - //Reset the IndexInput input to pointer - input->seek(pointer); - //Assign the new position - position = p; - - //finalize the current term - if ( _term == NULL || _term->__cl_refcount > 1 ){ - _CLDECDELETE(_term); - //Get a pointer from t and increase the reference counter of t - _term = _CLNEW Term; //cannot use reference, because TermInfosReader uses non ref-counted array - } - _term->set(t,t->text()); - - //finalize prev - _CLDECDELETE(prev); - - //Change the current termInfo so it matches the new current term - termInfo->set(ti); - - //Have the buffer grown if needed - if ( bufferLength <= _term->textLength() ) - growBuffer(_term->textLength(), true ); // copy term text into buffer - else - _tcsncpy(buffer,_term->text(),bufferLength); //just copy the buffer - } - - TermInfo* SegmentTermEnum::getTermInfo()const { - //Func - Returns a clone of the current termInfo - //Pre - termInfo != NULL - // next() must have been called once - //Post - A clone of the current termInfo has been returned - - return _CLNEW TermInfo(*termInfo); //clone - } - - void SegmentTermEnum::getTermInfo(TermInfo* ti)const { - //Func - Retrieves a clone of termInfo through the reference ti - //Pre - ti contains a valid reference to TermInfo - // termInfo != NULL - // next() must have been called once - //Post - ti contains a clone of termInfo - - ti->set(termInfo); - } - - int64_t SegmentTermEnum::freqPointer()const { - //Func - Returns the freqpointer of the current termInfo - //Pre - termInfo != NULL - // next() must have been called once - //Post - The freqpointer of the current termInfo has been returned - - return termInfo->freqPointer; - } - - int64_t SegmentTermEnum::proxPointer()const { - //Func - Returns the proxPointer of the current termInfo - //Pre - termInfo != NULL - // next() must have been called once - //Post - the proxPointer of the current termInfo has been returned - - return termInfo->proxPointer; - } - - SegmentTermEnum* SegmentTermEnum::clone() const { - //Func - Returns a clone of this instance - //Pre - true - //Post - An clone of this instance has been returned - - return _CLNEW SegmentTermEnum(*this); - } - - Term* SegmentTermEnum::readTerm(Term* reuse) { - //Func - Reads the next term in the enumeration - //Pre - true - //Post - The next Term in the enumeration has been read and returned - - //Read the start position from the inputStream input - int32_t start = input->readVInt(); - //Read the length of term in the inputStream input - int32_t length = input->readVInt(); - - //Calculated the total lenght of bytes that buffer must be to contain the current - //chars in buffer and the new ones yet to be read - uint32_t totalLength = start + length; - - if (static_cast(bufferLength) < totalLength+1) - growBuffer(totalLength, false); //dont copy the buffer over. - - //Read a length number of characters into the buffer from position start in the inputStream input - input->readChars(buffer, start, length); - //Null terminate the string - buffer[totalLength] = 0; - - //Return a new Term - int32_t field = input->readVInt(); - const TCHAR* fieldname = fieldInfos->fieldName(field); - if ( reuse == NULL ) - reuse = _CLNEW Term; - - reuse->set(fieldname, buffer, false); - return reuse; - } - - void SegmentTermEnum::growBuffer(const uint32_t length, bool force_copy) { - //Func - Instantiate a buffer of length length+1 - //Pre - length > 0 - //Post - pre(buffer) has been deleted with its contents. A new buffer - // has been allocated of length length+1 and the text of term has been copied - // to buffer - //todo: we could guess that we will need to re-grow this - //buffer a few times...so start off with a reasonable grow - //value... - if ( bufferLength > length ) - return; - - //Store the new bufferLength - if ( length - bufferLength < LUCENE_SEGMENTTERMENUM_GROWSIZE ) - bufferLength = length+LUCENE_SEGMENTTERMENUM_GROWSIZE; - else - bufferLength = length+1; - - bool copy = buffer==NULL; - - //Instantiate the new buffer + 1 is needed for terminator '\0' - if ( buffer == NULL ) - buffer = (TCHAR*)malloc(sizeof(TCHAR) * (bufferLength+1)); - else - buffer = (TCHAR*)realloc(buffer, sizeof(TCHAR) * (bufferLength+1)); - - if ( copy || force_copy){ - //Copy the text of term into buffer - _tcsncpy(buffer,_term->text(),bufferLength); - } - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentTermEnum.h clucene-core-2.3.3.4/src/CLucene/index/SegmentTermEnum.h --- clucene-core-0.9.21b/src/CLucene/index/SegmentTermEnum.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentTermEnum.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,138 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_SegmentTermEnum_ -#define _lucene_index_SegmentTermEnum_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Terms.h" -#include "FieldInfos.h" -#include "TermInfo.h" - -CL_NS_DEF(index) - -/** - * SegmentTermEnum is an enumeration of all Terms and TermInfos - */ -class SegmentTermEnum:public TermEnum{ -private: - Term* _term; ///points to the current Term in the enumeration - TermInfo* termInfo; ///points to the TermInfo matching the current Term in the enumeration - - bool isIndex; ///Indicates if the Segment is a an index - bool isClone; ///Indicates if SegmentTermEnum is an orignal instance or - ///a clone of another SegmentTermEnum - - TCHAR* buffer; ///The buffer that contains the data read from the Term Infos File - uint32_t bufferLength; ///Length of the buffer - - int32_t format; - int32_t formatM1SkipInterval; - - CL_NS(store)::IndexInput* input; ///The IndexInput that reads from the Term Infos File - FieldInfos* fieldInfos; ///contains the Field Infos for the segment - int64_t size; ///The size of the enumeration - int64_t position; ///The position of the current (term) in the enumeration - int64_t indexPointer; - Term* prev; ///The previous current - int32_t indexInterval; - int32_t skipInterval; - - friend class TermInfosReader; - friend class SegmentTermDocs; -protected: - - /** - * Constructor. - * The instance is created by cloning all properties of clone - */ - SegmentTermEnum( const SegmentTermEnum& clone); - -public: - ///Constructor - SegmentTermEnum(CL_NS(store)::IndexInput* i, FieldInfos* fis, const bool isi ); - - ///Destructor - ~SegmentTermEnum(); - - /** - * Moves the current of the set to the next in the set - */ - bool next(); - - /** - * Returns a pointer to the current term. - */ - Term* term(); - /** - * Returns the current term. - */ - Term* term(bool pointer); - - /** - * Scan for Term term without allocating new Terms - */ - void scanTo(const Term *term); - - /** - * Closes the enumeration to further activity, freeing resources. - */ - void close(); - - /** - * Returns the document frequency of the current term in the set - */ - int32_t docFreq() const; - - /** - * Repositions term and termInfo within the enumeration - */ - void seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti); - - /** - * Returns a clone of the current termInfo - */ - TermInfo* getTermInfo()const; - - /** - * Retrieves a clone of termInfo through the reference ti - */ - void getTermInfo(TermInfo* ti)const; - - /** - * Returns the freqPointer from the current TermInfo in the enumeration. - */ - int64_t freqPointer() const; - - /** - * Returns the proxPointer from the current TermInfo in the enumeration. - */ - int64_t proxPointer() const; - - /** - * Returns a clone of this instance - */ - SegmentTermEnum* clone() const; - - const char* getObjectName(){ return SegmentTermEnum::getClassName(); } - static const char* getClassName(){ return "SegmentTermEnum"; } - -private: - /** - * Reads the next term in the enumeration - */ - Term* readTerm(Term* reuse); - /** - * Instantiate a buffer of length length+1 - */ - void growBuffer(const uint32_t length, bool force_copy); - -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentTermPositions.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentTermPositions.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentTermPositions.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentTermPositions.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SegmentHeader.h" - -#include "Terms.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -SegmentTermPositions::SegmentTermPositions(const SegmentReader* _parent): - SegmentTermDocs(_parent){ -//Func - Constructor -//Pre - Parent != NULL -//Post - The instance has been created - - CND_PRECONDITION(_parent != NULL, "Parent is NULL"); - - proxStream = _parent->proxStream->clone(); - - CND_CONDITION(proxStream != NULL,"proxStream is NULL"); - - position = 0; - proxCount = 0; -} - -SegmentTermPositions::~SegmentTermPositions() { -//Func - Destructor -//Pre - true -//Post - The intance has been closed - close(); -} - -TermDocs* SegmentTermPositions::__asTermDocs(){ - return (TermDocs*) this; -} -TermPositions* SegmentTermPositions::__asTermPositions(){ - return (TermPositions*) this; -} - -void SegmentTermPositions::seek(const TermInfo* ti) { - SegmentTermDocs::seek(ti); - if (ti != NULL) - proxStream->seek(ti->proxPointer); - proxCount = 0; -} - -void SegmentTermPositions::close() { -//Func - Frees the resources -//Pre - true -//Post - The resources have been freed - - SegmentTermDocs::close(); - //Check if proxStream still exists - if(proxStream){ - proxStream->close(); - _CLDELETE( proxStream ); - } -} - -int32_t SegmentTermPositions::nextPosition() { - /* DSR:CL_BUG: Should raise exception if proxCount == 0 at the - ** beginning of this method, as in - ** if (--proxCount == 0) throw ...; - ** The JavaDocs for TermPositions.nextPosition declare this constraint, - ** but CLucene doesn't enforce it. */ - proxCount--; - return position += proxStream->readVInt(); -} - -bool SegmentTermPositions::next() { - for (int32_t f = proxCount; f > 0; f--) // skip unread positions - proxStream->readVInt(); - - if (SegmentTermDocs::next()) { // run super - proxCount = _freq; // note frequency - position = 0; // reset position - return true; - } - return false; -} - -int32_t SegmentTermPositions::read(int32_t* docs, int32_t* freqs, int32_t length) { - _CLTHROWA(CL_ERR_InvalidState,"TermPositions does not support processing multiple documents in one call. Use TermDocs instead."); -} - -void SegmentTermPositions::skippingDoc() { - for (int32_t f = _freq; f > 0; f--) // skip all positions - proxStream->readVInt(); -} - -void SegmentTermPositions::skipProx(int64_t proxPointer){ - proxStream->seek(proxPointer); - proxCount = 0; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/SegmentTermVector.cpp clucene-core-2.3.3.4/src/CLucene/index/SegmentTermVector.cpp --- clucene-core-0.9.21b/src/CLucene/index/SegmentTermVector.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/SegmentTermVector.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,188 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermVector.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -Array SegmentTermPositionVector::EMPTY_TERM_POS; - -SegmentTermVector::SegmentTermVector(const TCHAR* field, TCHAR** terms, Array* termFreqs) { - this->field = STRDUP_TtoT(field); - this->terms = terms; - this->termsLen = -1; //lazily get the size of the terms - this->termFreqs = termFreqs; -} - -SegmentTermVector::~SegmentTermVector(){ - _CLDELETE_CARRAY(field); - _CLDELETE_CARRAY_ALL(terms); - - _CLDELETE_ARRAY(termFreqs->values); - _CLDELETE(termFreqs); -} -TermPositionVector* SegmentTermVector::__asTermPositionVector(){ - return NULL; -} - -const TCHAR* SegmentTermVector::getField() { -return field; -} - -TCHAR* SegmentTermVector::toString() const{ -StringBuffer sb; -sb.appendChar('{'); -sb.append(field); -sb.append(_T(": ")); - -int32_t i=0; -while ( terms && terms[i] != NULL ){ - if (i>0) - sb.append(_T(", ")); - sb.append(terms[i]); - sb.appendChar('/'); - - sb.appendInt((*termFreqs)[i]); -} -sb.appendChar('}'); -return sb.toString(); -} - -int32_t SegmentTermVector::size() { -if ( terms == NULL ) - return 0; - -if ( termsLen == -1 ){ - termsLen=0; - while ( terms[termsLen] != 0 ) - termsLen++; -} -return termsLen; -} - -const TCHAR** SegmentTermVector::getTerms() { - return (const TCHAR**)terms; -} - -const Array* SegmentTermVector::getTermFrequencies() { - return termFreqs; -} - -int32_t SegmentTermVector::binarySearch(TCHAR** a, const int32_t arraylen, const TCHAR* key) const -{ - int32_t low = 0; - int32_t hi = arraylen - 1; - int32_t mid = 0; - while (low <= hi) - { - mid = (low + hi) >> 1; - - int32_t c = _tcscmp(a[mid],key); - if (c==0) - return mid; - else if (c > 0) - hi = mid - 1; - else // This gets the insertion point right on the last loop. - low = ++mid; - } - return -mid - 1; -} - -int32_t SegmentTermVector::indexOf(const TCHAR* termText) { - if(terms == NULL) - return -1; - int32_t res = binarySearch(terms, size(), termText); - return res >= 0 ? res : -1; -} - -void SegmentTermVector::indexesOf(const TCHAR** termNumbers, const int32_t start, const int32_t len, Array& ret) { - // TODO: there must be a more efficient way of doing this. - // At least, we could advance the lower bound of the terms array - // as we find valid indexes. Also, it might be possible to leverage - // this even more by starting in the middle of the termNumbers array - // and thus dividing the terms array maybe in half with each found index. - ret.length = len; - ret.values = _CL_NEWARRAY(int32_t,len); - for (int32_t i=0; i* termFreqs, Array< Array >* positions, Array< Array >* offsets): - SegmentTermVector(field,terms,termFreqs) -{ - this->offsets = offsets; - this->positions = positions; -} - -SegmentTermPositionVector::~SegmentTermPositionVector(){ - if ( offsets ){ - for (size_t i=0;ilength;i++){ - if ( offsets->values != NULL ){ - Array& offs = offsets->values[i]; - for ( size_t j=0;jvalues); - _CLDELETE(offsets); - } - if ( positions ){ - for (size_t i=0;ilength;i++){ - if ( positions->values != NULL ){ - Array& pos = positions->values[i]; - for ( size_t j=0;jvalues); - _CLDELETE(positions); - } -} - -TermPositionVector* SegmentTermPositionVector::__asTermPositionVector(){ - return this; -} -/** -* Returns an array of TermVectorOffsetInfo in which the term is found. -* -* @param index The position in the array to get the offsets from -* @return An array of TermVectorOffsetInfo objects or the empty list -* @see org.apache.lucene.analysis.Token -*/ -Array* SegmentTermPositionVector::getOffsets(int32_t index) { - if(offsets == NULL) - return NULL; - if (index >=0 && index < offsets->length) - return &offsets->values[index]; - else - return &TermVectorOffsetInfo::EMPTY_OFFSET_INFO; -} - -/** -* Returns an array of positions in which the term is found. -* Terms are identified by the index at which its number appears in the -* term String array obtained from the indexOf method. -*/ -Array* SegmentTermPositionVector::getTermPositions(int32_t index) { - if(positions == NULL) - return NULL; - - if (index >=0 && index < positions->length) - return &positions->values[index]; - else - return &EMPTY_TERM_POS; -} -CL_NS_END - diff -Nru clucene-core-0.9.21b/src/CLucene/index/Term.cpp clucene-core-2.3.3.4/src/CLucene/index/Term.cpp --- clucene-core-0.9.21b/src/CLucene/index/Term.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/Term.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,243 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Term.h" -#include "CLucene/util/StringIntern.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -Term::Term(){ - //Intern fld and assign it to field - _field = LUCENE_BLANK_STRING; - internF = false; - cachedHashCode = 0; - textLen = 0; - - //Duplicate txt and assign it to text - #ifdef LUCENE_TERM_TEXT_LENGTH - _text[0]=0; - #else - _text = LUCENE_BLANK_STRING; - textLenBuf = 0; - #endif - textLen = 0; -} - -Term::Term(const TCHAR* fld, const TCHAR* txt, bool internField){ -//Func - Constructor. -// Constructs a Term with the given field and text. Field and text are not copied -// Field and text are deleted in destructor only if intern is false. -//Pre - fld != NULL and contains the name of the field -// txt != NULL and contains the value of the field -// internF is true or false and indicates if term Field is interned or not -// internT is true or false and indicates if term Text is interned or not -// canDelete defaults to true but can be false and indicates to the IGarbageCollector that the Term can be deleted when finalized -//Post - An instance of Term has been created.Field and txt have not been copied but assigned - - _field = LUCENE_BLANK_STRING; - internF = false; - textLen = 0; - #ifdef LUCENE_TERM_TEXT_LENGTH - _text[0]=0; - #else - _text = LUCENE_BLANK_STRING; - textLenBuf = 0; - #endif - - set(fld,txt,internField); -} - - -Term::Term(const Term* fieldTerm, const TCHAR* txt){ - _field = LUCENE_BLANK_STRING; - internF = false; - textLen = 0; - #ifdef LUCENE_TERM_TEXT_LENGTH - _text[0]=0; - #else - _text = LUCENE_BLANK_STRING; - textLenBuf = 0; - #endif - - set(fieldTerm,txt); -} - -Term::Term(const TCHAR* fld, const TCHAR* txt){ - _field = LUCENE_BLANK_STRING; - internF = false; - textLen = 0; - #ifdef LUCENE_TERM_TEXT_LENGTH - _text[0]=0; - #else - _text = LUCENE_BLANK_STRING; - textLenBuf = 0; - #endif - - set(fld,txt); -} - -Term::~Term(){ -//Func - Destructor. -//Pre - true -//Post - The instance has been destroyed. field and text have been deleted if pre(intrn) is false - - //Unintern field - if ( internF ) - CLStringIntern::unintern(_field); - _field = NULL; - -#ifndef LUCENE_TERM_TEXT_LENGTH - //Deletetext if it is the owner - if ( _text != LUCENE_BLANK_STRING) - _CLDELETE_CARRAY( _text ); -#endif -} - -const TCHAR* Term::field() const { -//Func - Returns the field of this term, an interned string. The field indicates -// the part of a document which this term came from. -//Pre - true -//Post - field has been returned - - return _field; -} - -const TCHAR* Term::text() const { -//Func - Returns the text of this term. In the case of words, this is simply the -// text of the word. In the case of dates and other types, this is an -// encoding of the object as a string. -//Pre - true -//Post - text has been returned - - return _text; -} - - -void Term::set(const Term* term, const TCHAR* txt){ - set(term->field(),txt,false); -} - -void Term::set(const TCHAR* fld, const TCHAR* txt,const bool internField){ -//Func - Resets the field and text of a Term. -//Pre - fld != NULL and contains the name of the field -// txt != NULL and contains the value of the field -// internF is true or false -// internT is true or false -//Post - field and text of Term have been reset - - CND_PRECONDITION(fld != NULL, "fld contains NULL"); - CND_PRECONDITION(txt != NULL, "txt contains NULL"); - - //save field for unintern later - const TCHAR* oldField = _field; - //bool oldInternF = internF; //Not used - cachedHashCode = 0; - - textLen = _tcslen(txt); - - //Delete text if it is the owner -#ifdef LUCENE_TERM_TEXT_LENGTH - if ( textLen > LUCENE_TERM_TEXT_LENGTH ) - textLen = LUCENE_TERM_TEXT_LENGTH; - _tcsncpy(_text,txt,textLen+1); - _text[textLen]=0; -#else - - //if the term text buffer is bigger than what we have - if ( _text && textLen > textLenBuf){ - if ( _text != LUCENE_BLANK_STRING ){ - _CLDELETE_ARRAY( _text ); - }else - _text = NULL; - textLenBuf = 0; - } - - if ( _text==LUCENE_BLANK_STRING ) - _text = LUCENE_BLANK_STRING; - else if ( _text==NULL ){ - if ( txt[0] == 0 ){ - //if the string is blank and we aren't re-using the buffer... - _text = LUCENE_BLANK_STRING; - }else{ - //duplicate the text - _text = stringDuplicate(txt); - textLenBuf = textLen; - } - }else{ - //re-use the buffer - _tcscpy(_text,txt); - } - -#endif - - //Set Term Field - if ( internField ) - _field = CLStringIntern::intern(fld CL_FILELINE); - else - _field = fld; - - //unintern old field after interning new one, - if ( internF ) - CLStringIntern::unintern(oldField); - internF = internField; - - CND_PRECONDITION(_tcscmp(fld, _field)==0,"field not equal"); -} - -/** Compares two terms, returning true iff they have the same - field and text. */ -bool Term::equals(const Term* other) const{ - if ( cachedHashCode != 0 && other->cachedHashCode != 0 && - other->cachedHashCode != cachedHashCode ) - return false; - - if ( _field==other->_field ){ - //this can be quicker than using compareTo, because checks - //field length first - if ( textLen == other->textLen ){ - return (_tcscmp(_text,other->_text)==0); - }else - return false; - }else - return false; -} - -size_t Term::hashCode(){ - if ( cachedHashCode == 0 ) - cachedHashCode = Misc::thashCode(_field) + Misc::thashCode(_text,textLen); - return cachedHashCode; -} - - -int32_t Term::compareTo(const Term* other) const { -//Func - Compares two terms, to see if this term belongs before,is equal to or after -// after the argument term. -//Pre - other is a reference to another term -//Post - A negative integer is returned if this term belongs before the argument, -// zero is returned if this term is equal to the argument, and a positive integer -// if this term belongs after the argument. - - //Check ret to see if text needs to be compared - if ( _field == other->_field ){ // fields are interned - //Compare text with text of other and return the result - return _tcscmp(_text,other->_text); - }else - return _tcscmp(_field,other->_field); -} - -TCHAR* Term::toString() const{ -//Func - Forms the contents of Field and term in some kind of tuple notation -// -//Pre - true -//Post - a string formatted as is returned if pre(field) is NULL and -// text is NULL the returned string will be formatted as <:> - - return CL_NS(util)::Misc::join( _field, _T(":"), _text); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/Term.h clucene-core-2.3.3.4/src/CLucene/index/Term.h --- clucene-core-0.9.21b/src/CLucene/index/Term.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/Term.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_Term_ -#define _lucene_index_Term_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Misc.h" -#include "CLucene/util/StringIntern.h" - -CL_NS_DEF(index) - -/** -A Term represents a word from text. This is the unit of search. It is -composed of two elements, the text of the word, as a string, and the name of -the field that the text occured in, an interned string. - -Note that terms may represent more than words from text fields, but also -things like dates, email addresses, urls, etc. - -IMPORTANT NOTE: -Term inherits from the template class LUCENE_REFBASE which tries to do -some garbage collection by counting the references an instance has. As a result -of this construction you MUST use _CLDECDELETE(obj) when you want to delete an -of Term! - -ABOUT intrn - -intrn indicates if field and text are interned or not. Interning of Strings is the process of -converting duplicated strings to shared ones. - -*/ -class Term:LUCENE_REFBASE { - private: - size_t cachedHashCode; - const TCHAR* _field; - //CLStringIntern::iterator fielditr; -#ifdef LUCENE_TERM_TEXT_LENGTH - TCHAR _text[LUCENE_TERM_TEXT_LENGTH+1]; -#else - TCHAR* _text; - size_t textLenBuf; //a cache of text len, this allows for a preliminary comparison of text lengths - //bool dupT; //Indicates if Term Text is duplicated (and therefore must be deleted). -#endif - size_t textLen; //a cache of text len, this allows for a preliminary comparison of text lengths - bool internF; //Indicates if Term Field is interned(and therefore must be uninternd). - public: - - //uses the specified fieldTerm's field. this saves on intern'ing time. - Term(const Term* fieldTerm, const TCHAR* txt); - - ///Constructs a blank term - Term(); - - //todo: these need to be private, but a few other things need to be changed first... - Term(const TCHAR* fld, const TCHAR* txt, bool internField); - - /** - * Constructor. Constructs a Term with the given field and text. Field and text are not copied - * Field and text are deleted in destructor only if intern is false. - */ - Term(const TCHAR* fld, const TCHAR* txt); - - ///Destructor. - ~Term(); - - ///Returns the field of this term, an interned string. The field indicates - ///the part of a document which this term came from. - const TCHAR* field() const; /// - TCHAR* toString() const; - - size_t hashCode(); - - - - class Equals:public CL_NS_STD(binary_function) - { - public: - bool operator()( const Term* val1, const Term* val2 ) const{ - return val1->equals(val2); - } - }; - - class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // - { - public: - bool operator()( Term* t1, Term* t2 ) const{ - return ( t1->compareTo(t2) < 0 ); - } - size_t operator()( Term* t ) const{ - return t->hashCode(); - } - }; -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermInfo.cpp clucene-core-2.3.3.4/src/CLucene/index/TermInfo.cpp --- clucene-core-0.9.21b/src/CLucene/index/TermInfo.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermInfo.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermInfo.h" - - -CL_NS_DEF(index) - -TermInfo::TermInfo(){ -//Func - Constructor -//Pre - true -//Post - Instance has been created - - docFreq = 0; - freqPointer = 0; - proxPointer = 0; - skipOffset = 0; -} - -TermInfo::~TermInfo(){ -//Func - Destructor. -//Pre - true -//Post - Instance has been destroyed -} - -TermInfo::TermInfo(const int32_t df, const int64_t fp, const int64_t pp){ -//Func - Constructor. -//Pre - df >= 0, fp >= 0 pp >= 0 -//Post - An instance has been created with FreqPointer = fp, proxPointer=pp and docFreq= df - - CND_PRECONDITION(df >= 0, "df contains negative number"); - CND_PRECONDITION(fp >= 0, "fp contains negative number"); - CND_PRECONDITION(pp >= 0, "pp contains negative number"); - - freqPointer = fp; - proxPointer = pp; - docFreq = df; - skipOffset = 0; -} - -TermInfo::TermInfo(const TermInfo* ti) { -//Func - Constructor. -// Initialises this instance by copying the values of another TermInfo ti -//Pre - ti is a reference to another TermInfo -// ti->docFreq >= 0 -// ti->freqPointer >= 0 -// ti->proxPointer >= 0 -//Post - Values of ti have been copied to the values of this Instance. - - CND_PRECONDITION(ti->docFreq >= 0, "ti->docFreq contains negative number"); - CND_PRECONDITION(ti->freqPointer >= 0, "ti->freqPointer contains negative number"); - CND_PRECONDITION(ti->proxPointer >= 0, "ti->proxPointer contains negative number"); - - docFreq = ti->docFreq; - freqPointer = ti->freqPointer; - proxPointer = ti->proxPointer; - skipOffset = ti->skipOffset; -} - -void TermInfo::set(const int32_t df, const int64_t fp, const int64_t pp, int32_t so) { -//Func - Sets a new document frequency, a new freqPointer and a new proxPointer -//Pre - df >= 0, fp >= 0 pp >= 0 -//Post - The new document frequency, a new freqPointer and a new proxPointer -// have been set - - CND_PRECONDITION(df >= 0, "df contains negative number"); - CND_PRECONDITION(fp >= 0, "fp contains negative number"); - CND_PRECONDITION(pp >= 0, "pp contains negative number"); - - docFreq = df; - freqPointer = fp; - proxPointer = pp; - skipOffset = so; -} - -void TermInfo::set(const TermInfo* ti) { -//Func - Sets a new document frequency, a new freqPointer and a new proxPointer -// by copying these values from another instance of TermInfo -//Pre - ti is a reference to another TermInfo -// ti->docFreq >= 0 -// ti->freqPointer >= 0 -// ti->proxPointer >= 0 -//Post - Values of ti have been copied to the values of this Instance. - - CND_PRECONDITION(ti->docFreq >= 0, "ti->docFreq contains negative number"); - CND_PRECONDITION(ti->freqPointer >= 0, "ti->freqPointer contains negative number"); - CND_PRECONDITION(ti->proxPointer >= 0, "ti->proxPointer contains negative number"); - - docFreq = ti->docFreq; - freqPointer = ti->freqPointer; - proxPointer = ti->proxPointer; - skipOffset = ti->skipOffset; -} -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermInfo.h clucene-core-2.3.3.4/src/CLucene/index/TermInfo.h --- clucene-core-0.9.21b/src/CLucene/index/TermInfo.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermInfo.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_TermInfo -#define _lucene_index_TermInfo - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(index) - -// A TermInfo is the record of information stored for a term. -class TermInfo: LUCENE_BASE{ -public: - // The number of documents which contain the term. - int32_t docFreq; - - //A pointer into the TermFreqs file (.frq) - //The .frq file contains the lists of documents which contain each term, - //along with the frequency of the term in that document. - int64_t freqPointer; - - //A pointer into the TermPosition file (.prx). - //The .prx file contains the lists of positions that each term - //occurs at within documents. - int64_t proxPointer; - - int32_t skipOffset; - - //Constructor - TermInfo(); - - //Constructor - TermInfo(const int32_t df, const int64_t fp, const int64_t pp); - - //Constructor - //Initialises this instance by copying the values of another TermInfo ti - TermInfo(const TermInfo* ti); - - //Destructor - ~TermInfo(); - - //Sets a new document frequency, a new freqPointer and a new proxPointer - void set(const int32_t docFreq, const int64_t freqPointer, const int64_t proxPointer, int32_t skipOffset); - - //Sets a new document frequency, a new freqPointer and a new proxPointer - //by copying these values from another instance of TermInfo - void set(const TermInfo* ti); -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermInfosReader.cpp clucene-core-2.3.3.4/src/CLucene/index/TermInfosReader.cpp --- clucene-core-0.9.21b/src/CLucene/index/TermInfosReader.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermInfosReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,431 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermInfosReader.h" - -#include "Term.h" -#include "Terms.h" -#include "SegmentTermEnum.h" -#include "CLucene/store/Directory.h" -#include "FieldInfos.h" -#include "TermInfo.h" -#include "TermInfosWriter.h" -#include "CLucene/util/Misc.h" - -CL_NS_USE(store) -CL_NS_USE(util) -CL_NS_DEF(index) - - - TermInfosReader::TermInfosReader(Directory* dir, const char* seg, FieldInfos* fis): - directory (dir),fieldInfos (fis) - { - //Func - Constructor. - // Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii) - //Pre - dir is a reference to a valid Directory - // Fis contains a valid reference to an FieldInfos instance - // seg != NULL and contains the name of the segment - //Post - An instance has been created and the index named seg has been read. (Remember - // a segment is nothing more then an independently readable index) - - CND_PRECONDITION(seg != NULL, "seg is NULL"); - - //Initialize the name of the segment - segment = seg; - //There are no indexTerms yet - indexTerms = NULL; - //So there are no indexInfos - indexInfos = NULL; - //So there are no indexPointers - indexPointers = NULL; - //Create a filname fo a Term Info File - char* tisFile = Misc::segmentname(segment,".tis"); - char* tiiFile = Misc::segmentname(segment,".tii"); - - //Create an SegmentTermEnum for storing all the terms read of the segment - origEnum = _CLNEW SegmentTermEnum( directory->openInput( tisFile ), fieldInfos, false); - indexEnum = _CLNEW SegmentTermEnum( directory->openInput( tiiFile ), fieldInfos, true); - - //Check if enumerator points to a valid instance - CND_CONDITION(origEnum != NULL, "No memory could be allocated for orig enumerator"); - CND_CONDITION(indexEnum != NULL, "No memory could be allocated for index enumerator"); - - _CLDELETE_CaARRAY(tisFile); - _CLDELETE_CaARRAY(tiiFile); - - //Get the size of the enumeration and store it in size - _size = origEnum->size; - } - - TermInfosReader::~TermInfosReader(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - //Close the TermInfosReader to be absolutly sure that enumerator has been closed - //and the arrays indexTerms, indexPointers and indexInfos and their elements - //have been destroyed - close(); - } - - void TermInfosReader::close() { - //Func - Close the enumeration of TermInfos - //Pre - true - //Post - The _enumeration has been closed and the arrays - - //Check if indexTerms and indexInfos exist - if (indexTerms && indexInfos){ - //Iterate through arrays indexTerms and indexPointer to - //destroy their elements -#ifdef _DEBUG - for ( int32_t i=0; iclose(); - - //Get a pointer to IndexInput used by the enumeration but - //instantiated in the constructor by directory.open( tisFile ) - IndexInput *is = origEnum->input; - - //Delete the enumuration enumerator - _CLDELETE(origEnum); - - //Delete the IndexInput - _CLDELETE(is); - } - - if (indexEnum != NULL){ - indexEnum->close(); - - //Get a pointer to IndexInput used by the enumeration but - //instantiated in the constructor by directory.open( tiiFile ) - IndexInput *is = indexEnum->input; - - //Delete the enumuration enumerator - _CLDELETE(indexEnum); - - //Delete the IndexInput - _CLDELETE(is); - } - } - - int64_t TermInfosReader::size() const{ - //Func - Return the size of the enumeration of TermInfos - //Pre - true - //Post - size has been returened - - return _size; - } - - - Term* TermInfosReader::get(const int32_t position) { - //Func - Returns the nth term in the set - //Pre - position > = 0 - //Post - The n-th term in the set has been returned - - //Check if the size is 0 because then there are no terms - if (_size == 0) - return NULL; - - SegmentTermEnum* enumerator = getEnum(); - - //if - if ( - enumerator != NULL //an enumeration exists - && enumerator->term(false) != NULL // term is at or past current - && position >= enumerator->position - && position < (enumerator->position + enumerator->indexInterval) - ) - { - return scanEnum(position); // can avoid seek - } - - //random-access: must seek - seekEnum(position / enumerator->indexInterval); - - //Get the Term at position - return scanEnum(position); - } - - //todo: currently there is no way of cleaning up a thread, if the thread ends. - //we are stuck with the terminfosreader of that thread. Hopefully this won't - //be too big a problem... solutions anyone? - SegmentTermEnum* TermInfosReader::getEnum(){ - SegmentTermEnum* termEnum = enumerators.get(); - if (termEnum == NULL){ - termEnum = terms(); - enumerators.set(termEnum); - } - return termEnum; - } - - TermInfo* TermInfosReader::get(const Term* term){ - //Func - Returns a TermInfo for a term - //Pre - term holds a valid reference to term - //Post - if term can be found its TermInfo has been returned otherwise NULL - - //If the size of the enumeration is 0 then no Terms have been read - if (_size == 0) - return NULL; - - ensureIndexIsRead(); - - // optimize sequential access: first try scanning cached enum w/o seeking - SegmentTermEnum* enumerator = getEnum(); - - // optimize sequential access: first try scanning cached enumerator w/o seeking - //if - if ( - //the current term of the enumeration enumerator is not at the end AND - enumerator->term(false) != NULL && - ( - //there exists a previous current called prev and term is positioned after this prev OR - ( enumerator->prev != NULL && term->compareTo(enumerator->prev) > 0) || - //term is positioned at the same position as the current of enumerator or at a higher position - term->compareTo(enumerator->term(false)) >= 0 ) - ) - { - - //Calculate the offset for the position - int32_t _enumOffset = (int32_t)(enumerator->position/enumerator->indexInterval)+1; - - // but before end of block - if ( - //the length of indexTerms (the number of terms in enumerator) equals - //_enum_offset OR - indexTermsLength == _enumOffset || - //term is positioned in front of term found at _enumOffset in indexTerms - term->compareTo(&indexTerms[_enumOffset]) < 0){ - - //no need to seek, retrieve the TermInfo for term - return scanEnum(term); - } - } - - //Reposition current term in the enumeration - seekEnum(getIndexOffset(term)); - //Return the TermInfo for term - return scanEnum(term); - } - - - int64_t TermInfosReader::getPosition(const Term* term) { - //Func - Returns the position of a Term in the set - //Pre - term holds a valid reference to a Term - // enumerator != NULL - //Post - If term was found then its position is returned otherwise -1 - - //if the enumeration is empty then return -1 - if (_size == 0) - return -1; - - ensureIndexIsRead(); - - //Retrieve the indexOffset for term - int32_t indexOffset = getIndexOffset(term); - seekEnum(indexOffset); - - SegmentTermEnum* enumerator = getEnum(); - - while(term->compareTo(enumerator->term(false)) > 0 && enumerator->next()) {} - - if ( term->equals(enumerator->term(false)) ){ - return enumerator->position; - }else - return -1; - } - - SegmentTermEnum* TermInfosReader::terms(const Term* term) { - //Func - Returns an enumeration of terms starting at or after the named term. - // If term is null then enumerator is set to the beginning - //Pre - term holds a valid reference to a Term - // enumerator != NULL - //Post - An enumeration of terms starting at or after the named term has been returned - - SegmentTermEnum* enumerator = NULL; - if ( term != NULL ){ - //Seek enumerator to term; delete the new TermInfo that's returned. - TermInfo* ti = get(term); - _CLDELETE(ti); - enumerator = getEnum(); - }else - enumerator = origEnum; - - //Clone the entire enumeration - SegmentTermEnum* cln = enumerator->clone(); - - //Check if cln points to a valid instance - CND_CONDITION(cln != NULL,"cln is NULL"); - - return cln; - } - - - void TermInfosReader::ensureIndexIsRead() { - //Func - Reads the term info index file or .tti file. - // This file contains every IndexInterval-th entry from the .tis file, - // along with its location in the "tis" file. This is designed to be read entirely - // into memory and used to provide random access to the "tis" file. - //Pre - indexTerms = NULL - // indexInfos = NULL - // indexPointers = NULL - //Post - The term info index file has been read into memory - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - if ( indexTerms != NULL ) - return; - - try { - indexTermsLength = (size_t)indexEnum->size; - - //Instantiate an block of Term's,so that each one doesn't have to be new'd - indexTerms = _CL_NEWARRAY(Term,indexTermsLength); - CND_CONDITION(indexTerms != NULL,"No memory could be allocated for indexTerms");//Check if is indexTerms is a valid array - - //Instantiate an big block of TermInfo's, so that each one doesn't have to be new'd - indexInfos = _CL_NEWARRAY(TermInfo,indexTermsLength); - CND_CONDITION(indexInfos != NULL,"No memory could be allocated for indexInfos"); //Check if is indexInfos is a valid array - - //Instantiate an array indexPointers that contains pointers to the term info index file - indexPointers = _CL_NEWARRAY(int64_t,indexTermsLength); - CND_CONDITION(indexPointers != NULL,"No memory could be allocated for indexPointers");//Check if is indexPointers is a valid array - - //Iterate through the terms of indexEnum - for (int32_t i = 0; indexEnum->next(); ++i){ - indexTerms[i].set(indexEnum->term(false),indexEnum->term(false)->text()); - indexEnum->getTermInfo(&indexInfos[i]); - indexPointers[i] = indexEnum->indexPointer; - } - }_CLFINALLY( - indexEnum->close(); - //Close and delete the IndexInput is. The close is done by the destructor. - _CLDELETE( indexEnum->input ); - _CLDELETE( indexEnum ); - ); - } - - - int32_t TermInfosReader::getIndexOffset(const Term* term){ - //Func - Returns the offset of the greatest index entry which is less than or equal to term. - //Pre - term holds a reference to a valid term - // indexTerms != NULL - //Post - The new offset has been returned - - //Check if is indexTerms is a valid array - CND_PRECONDITION(indexTerms != NULL,"indexTerms is NULL"); - - int32_t lo = 0; - int32_t hi = indexTermsLength - 1; - int32_t mid; - int32_t delta; - - while (hi >= lo) { - //Start in the middle betwee hi and lo - mid = (lo + hi) >> 1; - - //Check if is indexTerms[mid] is a valid instance of Term - CND_PRECONDITION(&indexTerms[mid] != NULL,"indexTerms[mid] is NULL"); - CND_PRECONDITION(mid < indexTermsLength,"mid >= indexTermsLength"); - - //Determine if term is before mid or after mid - delta = term->compareTo(&indexTerms[mid]); - if (delta < 0){ - //Calculate the new hi - hi = mid - 1; - }else if (delta > 0){ - //Calculate the new lo - lo = mid + 1; - }else{ - //term has been found so return its position - return mid; - } - } - // the new starting offset - return hi; - } - - void TermInfosReader::seekEnum(const int32_t indexOffset) { - //Func - Reposition the current Term and TermInfo to indexOffset - //Pre - indexOffset >= 0 - // indexTerms != NULL - // indexInfos != NULL - // indexPointers != NULL - //Post - The current Term and Terminfo have been repositioned to indexOffset - - CND_PRECONDITION(indexOffset >= 0, "indexOffset contains a negative number"); - CND_PRECONDITION(indexTerms != NULL, "indexTerms is NULL"); - CND_PRECONDITION(indexInfos != NULL, "indexInfos is NULL"); - CND_PRECONDITION(indexPointers != NULL, "indexPointers is NULL"); - - SegmentTermEnum* enumerator = getEnum(); - enumerator->seek( - indexPointers[indexOffset], - (indexOffset * enumerator->indexInterval) - 1, - &indexTerms[indexOffset], - &indexInfos[indexOffset] - ); - } - - - TermInfo* TermInfosReader::scanEnum(const Term* term) { - //Func - Scans the Enumeration of terms for term and returns the corresponding TermInfo instance if found. - // The search is started from the current term. - //Pre - term contains a valid reference to a Term - // enumerator != NULL - //Post - if term has been found the corresponding TermInfo has been returned otherwise NULL - // has been returned - - SegmentTermEnum* enumerator = getEnum(); - enumerator->scanTo(term); - - //Check if the at the position the Term term can be found - if (enumerator->term(false) != NULL && term->equals(enumerator->term(false)) ){ - //Return the TermInfo instance about term - return enumerator->getTermInfo(); - }else{ - //term was not found so no TermInfo can be returned - return NULL; - } - } - - Term* TermInfosReader::scanEnum(const int32_t position) { - //Func - Scans the enumeration to the requested position and returns the - // Term located at that position - //Pre - position > = 0 - // enumerator != NULL - //Post - The Term at the requested position has been returned - - SegmentTermEnum* enumerator = getEnum(); - - //As long the position of the enumeration enumerator is smaller than the requested one - while(enumerator->position < position){ - //Move the current of enumerator to the next - if (!enumerator->next()){ - //If there is no next it means that the requested position was to big - return NULL; - } - } - - //Return the Term a the requested position - return enumerator->term(); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermInfosReader.h clucene-core-2.3.3.4/src/CLucene/index/TermInfosReader.h --- clucene-core-0.9.21b/src/CLucene/index/TermInfosReader.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermInfosReader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_TermInfosReader_ -#define _lucene_index_TermInfosReader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Terms.h" -#include "SegmentTermEnum.h" -#include "CLucene/store/Directory.h" -#include "CLucene/util/ThreadLocal.h" -#include "FieldInfos.h" -#include "TermInfo.h" -#include "TermInfosWriter.h" - -CL_NS_DEF(index) - /** This stores a monotonically increasing set of pairs in a - * Directory. Pairs are accessed either by Term or by ordinal position the - * set. - * - * PORT STATUS: 365707 (jlucene 1.9) - */ - class TermInfosReader :LUCENE_BASE{ - private: - CL_NS(store)::Directory* directory; - const char* segment; - FieldInfos* fieldInfos; - - CL_NS(util)::ThreadLocal > enumerators; - - SegmentTermEnum* getEnum(); - SegmentTermEnum* origEnum; - SegmentTermEnum* indexEnum; - int64_t _size; - - Term* indexTerms; - int32_t indexTermsLength; - TermInfo* indexInfos; - int64_t* indexPointers; - - DEFINE_MUTEX(THIS_LOCK) - - public: - //Constructor. - //Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii) - TermInfosReader(CL_NS(store)::Directory* dir, const char* segment, FieldInfos* fis); - //Destructor - ~TermInfosReader(); - //Close the enumeration of TermInfos - void close(); - - //Return the size of the enumeration of TermInfos - int64_t size() const; - - int32_t getSkipInterval() { return origEnum->skipInterval; } - - // Returns an enumeration of terms starting at or after the named term. - // If no term is specified, an enumeration of all the Terms - // and TermInfos in the set is returned. - SegmentTermEnum* terms(const Term* term=NULL); - - // Returns the TermInfo for a Term in the set - // synchronized - TermInfo* get(const Term* term); - private: - //Reads the term info index file or .tti file. - void ensureIndexIsRead(); - - // Returns the offset of the greatest index entry which is less than term. - int32_t getIndexOffset(const Term* term); - - //Reposition the current Term and TermInfo to indexOffset - void seekEnum(const int32_t indexOffset); - - //Scans the Enumeration of terms for term and returns the corresponding TermInfo instance if found. - //The search is started from the current term. - TermInfo* scanEnum(const Term* term); - - //Scans the enumeration to the requested position and returns the - //Term located at that position - Term* scanEnum(const int32_t position); - - // Returns the position of a Term in the set - // synchronized - int64_t getPosition(const Term* term); - - // Returns the nth term in the set. - // synchronized - Term* get(const int32_t position); - - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermInfosWriter.cpp clucene-core-2.3.3.4/src/CLucene/index/TermInfosWriter.cpp --- clucene-core-0.9.21b/src/CLucene/index/TermInfosWriter.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermInfosWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermInfosWriter.h" - -#include "CLucene/store/Directory.h" -#include "CLucene/util/Misc.h" -#include "FieldInfos.h" -#include "Term.h" -#include "TermInfo.h" -#include "IndexWriter.h" - -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_DEF(index) - - TermInfosWriter::TermInfosWriter(Directory* directory, const char* segment, FieldInfos* fis, int32_t interval): - fieldInfos(fis){ - //Func - Constructor - //Pre - directory contains a valid reference to a Directory - // segment != NULL - // fis contains a valid reference to a reference FieldInfos - //Post - The instance has been created - - CND_PRECONDITION(segment != NULL, "segment is NULL"); - //Initialize instance - initialise(directory,segment,interval, false); - - other = _CLNEW TermInfosWriter(directory, segment,fieldInfos, interval, true); - - CND_CONDITION(other != NULL, "other is NULL"); - - other->other = this; - } - - TermInfosWriter::TermInfosWriter(Directory* directory, const char* segment, FieldInfos* fis, int32_t interval, bool isIndex): - fieldInfos(fis){ - //Func - Constructor - //Pre - directory contains a valid reference to a Directory - // segment != NULL - // fis contains a valid reference to a reference FieldInfos - // isIndex is true or false - //Post - The instance has been created - - CND_PRECONDITION(segment != NULL, "segment is NULL"); - initialise(directory,segment,interval,isIndex); - } - - void TermInfosWriter::initialise(Directory* directory, const char* segment, int32_t interval, bool IsIndex){ - //Func - Helps constructors to initialize Instance - //Pre - directory contains a valid reference to a Directory - // segment != NULL - // fis contains a valid reference to a reference FieldInfos - //Post - The instance has been initialized - - lastTerm = _CLNEW Term; - - CND_CONDITION(lastTerm != NULL, "Could not allocate memory for lastTerm"); - - lastTi = _CLNEW TermInfo(); - - CND_CONDITION(lastTi != NULL, "Could not allocate memory for lastTi"); - - lastIndexPointer = 0; - size = 0; - isIndex = IsIndex; - indexInterval = interval; - skipInterval = LUCENE_DEFAULT_TERMDOCS_SKIP_INTERVAL; - - const char* buf = Misc::segmentname(segment, (isIndex ? ".tii" : ".tis")); - output = directory->createOutput( buf ); - _CLDELETE_CaARRAY(buf); - - output->writeInt(FORMAT); // write format - output->writeLong(0); // leave space for size - output->writeInt(indexInterval);// write indexInterval - output->writeInt(skipInterval); // write skipInterval - - //Set other to NULL by Default - other = NULL; - } - - TermInfosWriter::~TermInfosWriter(){ - //Func - Destructor - //Pre - true - //Post - de instance has been destroyed - - close(); - } - - void TermInfosWriter::add(Term* term, const TermInfo* ti) { - //Func - Writes a Term and TermInfo to the outputstream - //Pre - Term must be lexicographically greater than all previous Terms added. - // Pointers of TermInfo ti (freqPointer and proxPointer) must be positive and greater than all previous. - - CND_PRECONDITION(isIndex || (!isIndex && term->compareTo(lastTerm) > 0),"term out of order"); - CND_PRECONDITION(ti->freqPointer >= lastTi->freqPointer,"freqPointer out of order"); - CND_PRECONDITION(ti->proxPointer >= lastTi->proxPointer,"proxPointer out of order"); - - if (!isIndex && size % indexInterval == 0){ - //add an index term - other->add(lastTerm, lastTi); - } - - //write term - writeTerm(term); - // write doc freq - output->writeVInt(ti->docFreq); - //write pointers - output->writeVLong(ti->freqPointer - lastTi->freqPointer); - output->writeVLong(ti->proxPointer - lastTi->proxPointer); - if (ti->docFreq >= skipInterval) { - output->writeVInt(ti->skipOffset); - } - - if (isIndex){ - output->writeVLong(other->output->getFilePointer() - lastIndexPointer); - lastIndexPointer = other->output->getFilePointer(); // write pointer - } - - lastTi->set(ti); - size++; - } - - void TermInfosWriter::close() { - //Func - Closes the TermInfosWriter - //Pre - true - //Post - The TermInfosWriter has been closed - - if (output){ - //write size at start - output->seek(4); // write size after format - output->writeLong(size); - output->close(); - _CLDELETE(output); - - if (!isIndex){ - if(other){ - other->close(); - _CLDELETE( other ); - } - } - _CLDECDELETE(lastTerm); - - _CLDELETE(lastTi); - } - } - - void TermInfosWriter::writeTerm(Term* term) { - int32_t start = Misc::stringDifference(lastTerm->text(),lastTerm->textLength(), - term->text(),term->textLength()); - int32_t length = term->textLength() - start; - - output->writeVInt(start); // write shared prefix length - output->writeVInt(length); // write delta length - output->writeChars(term->text(), start, length); // write delta chars - - int32_t fieldnum = fieldInfos->fieldNumber(term->field()); - CND_PRECONDITION(fieldnum>=-1&&fieldnumsize(),"Fieldnum is out of range"); - output->writeVInt(fieldnum); // write field num - - if ( lastTerm->__cl_refcount == 1 ){ - lastTerm->set(term,term->text()); - }else{ - _CLDECDELETE(lastTerm); - lastTerm = _CL_POINTER(term); - } - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermInfosWriter.h clucene-core-2.3.3.4/src/CLucene/index/TermInfosWriter.h --- clucene-core-0.9.21b/src/CLucene/index/TermInfosWriter.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermInfosWriter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_TermInfosWriter_ -#define _lucene_index_TermInfosWriter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/store/Directory.h" -#include "FieldInfos.h" -#include "TermInfo.h" -#include "Term.h" - -CL_NS_DEF(index) - - - // This stores a monotonically increasing set of pairs in a - // Directory. A TermInfos can be written once, in order. - class TermInfosWriter :LUCENE_BASE{ - private: - FieldInfos* fieldInfos; - CL_NS(store)::IndexOutput* output; - Term* lastTerm; - TermInfo* lastTi; - int64_t size; - int64_t lastIndexPointer; - bool isIndex; - TermInfosWriter* other; - - //inititalize - TermInfosWriter(CL_NS(store)::Directory* directory, const char* segment, FieldInfos* fis, int32_t interval, bool isIndex); - public: - /** The file format version, a negative number. */ - LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-2); - - /** - * Expert: The fraction of terms in the "dictionary" which should be stored - * in RAM. Smaller values use more memory, but make searching slightly - * faster, while larger values use less memory and make searching slightly - * slower. Searching is typically not dominated by dictionary lookup, so - * tweaking this is rarely useful. - */ - int32_t indexInterval;// = 128 - - /** - * Expert: The fraction of {@link TermDocs} entries stored in skip tables, - * used to accellerate {@link TermDocs#SkipTo(int32_t)}. Larger values result in - * smaller indexes, greater acceleration, but fewer accelerable cases, while - * smaller values result in bigger indexes, less acceleration and more - * accelerable cases. More detailed experiments would be useful here. - */ - int32_t skipInterval;// = 16 - - TermInfosWriter(CL_NS(store)::Directory* directory, const char* segment, FieldInfos* fis, int32_t interval); - - ~TermInfosWriter(); - - /** - * Adds a new pair to the set. - * Term must be lexicographically greater than all previous Terms added. - * TermInfo pointers must be positive and greater than all previous. - */ - void add(Term* term, const TermInfo* ti); - - /** Called to complete TermInfos creation. */ - void close(); - - private: - /** Helps constructors to initialize instances */ - void initialise(CL_NS(store)::Directory* directory, const char* segment, int32_t interval, bool IsIndex); - void writeTerm(Term* term); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/Terms.h clucene-core-2.3.3.4/src/CLucene/index/Terms.h --- clucene-core-0.9.21b/src/CLucene/index/Terms.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/Terms.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_Terms_ -#define _lucene_index_Terms_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Term.h" -CL_NS_DEF(index) - -class TermEnum; //predefine -class TermPositions; - -/** TermDocs provides an interface for enumerating <document, frequency> - pairs for a term.

The document portion names each document containing - the term. Documents are indicated by number. The frequency portion gives - the number of times the term occurred in each document.

The pairs are - ordered by document number. - - @see IndexReader#termDocs() - */ -class TermDocs: LUCENE_BASE { -public: - virtual ~TermDocs(){ - } - - // Sets this to the data for a term. - // The enumeration is reset to the start of the data for this term. - virtual void seek(Term* term)=0; - - /** Sets this to the data for the current term in a {@link TermEnum}. - * This may be optimized in some implementations. - */ - virtual void seek(TermEnum* termEnum)=0; - - // Returns the current document number.

This is invalid until {@link - // #next()} is called for the first time. - virtual int32_t doc() const=0; - - // Returns the frequency of the term within the current document.

This - // is invalid until {@link #next()} is called for the first time. - virtual int32_t freq() const=0; - - // Moves to the next pair in the enumeration.

Returns true iff there is - // such a next pair in the enumeration. - virtual bool next() =0; - - // Attempts to read multiple entries from the enumeration, up to length of - // docs. Document numbers are stored in docs, and term - // frequencies are stored in freqs. The freqs array must be as - // int64_t as the docs array. - // - //

Returns the number of entries read. Zero is only returned when the - // stream has been exhausted. - virtual int32_t read(int32_t* docs, int32_t* freqs, int32_t length)=0; - - // Skips entries to the first beyond the current whose document number is - // greater than or equal to target.

Returns true iff there is such - // an entry.

Behaves as if written:

-	//   bool skipTo(int32_t target) {
-	//     do {
-	//       if (!next())
-	// 	     return false;
-	//     } while (target > doc());
-	//     return true;
-	//   }
-	// 
- // Some implementations are considerably more efficient than that. - virtual bool skipTo(const int32_t target)=0; - - // Frees associated resources. - virtual void close() = 0; - - - /** Solve the diamond inheritence problem by providing a reinterpret function. - * No dynamic casting is required and no RTTI data is needed to do this - */ - virtual TermPositions* __asTermPositions()=0; -}; - - -// Abstract class for enumerating terms. -// -//

Term enumerations are always ordered by Term.compareTo(). Each term in -//the enumeration is greater than all that precede it. -class TermEnum: LUCENE_BASE { -public: - // Increments the enumeration to the next element. True if one exists. - virtual bool next()=0; - - // Returns a pointer to the current Term in the enumeration. - virtual Term* term()=0; - - // Returns the current Term in the enumeration. - virtual Term* term(bool pointer){ - Term* ret = term(); - if ( !pointer ) - ret->__cl_decref(); - return ret; - } - - // Returns the docFreq of the current Term in the enumeration. - virtual int32_t docFreq() const=0; - - // Closes the enumeration to further activity, freeing resources. - virtual void close() =0; - - virtual ~TermEnum(){ - } - - // Term Vector support - /** Skips terms to the first beyond the current whose value is - * greater or equal to target.

Returns true iff there is such - * an entry.

Behaves as if written:

-	*   public boolean skipTo(Term target) {
-	*     do {
-	*       if (!next())
-	* 	     return false;
-	*     } while (target > term());
-	*     return true;
-	*   }
-	* 
- * Some implementations are considerably more efficient than that. - */ - virtual bool skipTo(Term* target){ - do { - if (!next()) - return false; - } while (target->compareTo(term(false)) > 0); - return true; - } - - /** - * Because we need to know how to cast the object, we need the objects name. - */ - virtual const char* getObjectName() = 0; -}; - - - -/** - * TermPositions provides an interface for enumerating the <document, - * frequency, <position>* > tuples for a term.

The document and - * frequency are the same as for a TermDocs. The positions portion lists the ordinal - * positions of each occurrence of a term in a document. - * - * @see IndexReader#termPositions() - */ -class TermPositions: public virtual TermDocs { -public: - // Returns next position in the current document. It is an error to call - // this more than {@link #freq()} times - // without calling {@link #next()}

This is - // invalid until {@link #next()} is called for - // the first time. - virtual int32_t nextPosition() = 0; - - virtual ~TermPositions(){ - } - - /** Solve the diamond inheritence problem by providing a reinterpret function. - * No dynamic casting is required and no RTTI data is needed to do this - */ - virtual TermDocs* __asTermDocs()=0; - virtual TermPositions* __asTermPositions()=0; -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermVector.h clucene-core-2.3.3.4/src/CLucene/index/TermVector.h --- clucene-core-0.9.21b/src/CLucene/index/TermVector.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermVector.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,399 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_index_termvector_h -#define _lucene_index_termvector_h - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "FieldInfos.h" - -CL_NS_DEF(index) - -//predefine classes -struct TermVectorOffsetInfo; -class TermPositionVector; - -/** Provides access to stored term vector of - * a document field. - */ -class TermFreqVector:LUCENE_BASE { -public: - virtual ~TermFreqVector(){ - } - - /** - * - * @return The field this vector is associated with. - * - */ - virtual const TCHAR* getField() = 0; - - /** - * @return The number of terms in the term vector. - */ - virtual int32_t size() = 0; - - /** - * @return An Array of term texts in ascending order. - */ - virtual const TCHAR** getTerms() = 0; - - - /** Array of term frequencies. Locations of the array correspond one to one - * to the terms in the array obtained from getTerms - * method. Each location in the array contains the number of times this - * term occurs in the document or the document field. - * - * The size of the returned array is size() - * @memory Returning a pointer to internal data. Do not delete. - */ - virtual const Array* getTermFrequencies() = 0; - - - /** Return an index in the term numbers array returned from - * getTerms at which the term with the specified - * term appears. If this term does not appear in the array, - * return -1. - */ - virtual int32_t indexOf(const TCHAR* term) = 0; - - - /** Just like indexOf(int32_t) but searches for a number of terms - * at the same time. Returns an array that has the same size as the number - * of terms searched for, each slot containing the result of searching for - * that term number. - * - * @param terms array containing terms to look for - * @param start index in the array where the list of terms starts - * @param len the number of terms in the list - */ - virtual void indexesOf(const TCHAR** terms, const int32_t start, const int32_t len, Array& ret) = 0; - - /** Solve the diamond inheritence problem by providing a reinterpret function. - * No dynamic casting is required and no RTTI data is needed to do this - */ - virtual TermPositionVector* __asTermPositionVector()=0; -}; - - -/** -* Writer works by opening a document and then opening the fields within the document and then -* writing out the vectors for each field. -* -* Rough usage: -* - -for each document -{ -writer.openDocument(); -for each field on the document -{ -writer.openField(field); -for all of the terms -{ -writer.addTerm(...) -} -writer.closeField -} -writer.closeDocument() -} - -*/ -class TermVectorsWriter:LUCENE_BASE { -private: - class TVField:LUCENE_BASE { - public: - int32_t number; - int64_t tvfPointer; - int32_t length; // number of distinct term positions - bool storePositions; - bool storeOffsets; - - TVField(int32_t number, bool storePos, bool storeOff): - tvfPointer(0),length(0){ - this->number = number; - this->storePositions = storePos; - this->storeOffsets = storeOff; - } - ~TVField(){} - }; - - class TVTerm:LUCENE_BASE { - const TCHAR* termText; - int32_t termTextLen; //textlen cache - - public: - TVTerm(); - ~TVTerm(); - - int32_t freq; - Array* positions; - Array* offsets; - - const TCHAR* getTermText() const; - size_t getTermTextLen(); - void setTermText(const TCHAR* val); - }; - - - CL_NS(store)::IndexOutput* tvx, *tvd, *tvf; - CL_NS(util)::CLVector > fields; - CL_NS(util)::CLVector > terms; - FieldInfos* fieldInfos; - - TVField* currentField; - int64_t currentDocPointer; - - void addTermInternal(const TCHAR* termText, const int32_t freq, - Array* positions, Array* offsets); - - void writeField(); - void writeDoc(); - - void openField(int32_t fieldNumber, bool storePositionWithTermVector, - bool storeOffsetWithTermVector); -public: - LUCENE_STATIC_CONSTANT(int32_t, FORMAT_VERSION = 2); - - //The size in bytes that the FORMAT_VERSION will take up at the beginning of each file - LUCENE_STATIC_CONSTANT(int32_t, FORMAT_SIZE = 4); - - LUCENE_STATIC_CONSTANT(uint8_t, STORE_POSITIONS_WITH_TERMVECTOR = 0x1); - LUCENE_STATIC_CONSTANT(uint8_t, STORE_OFFSET_WITH_TERMVECTOR = 0x2); - - static const char* LUCENE_TVX_EXTENSION; - static const char* LUCENE_TVD_EXTENSION; - static const char* LUCENE_TVF_EXTENSION; - - TermVectorsWriter(CL_NS(store)::Directory* directory, const char* segment, - FieldInfos* fieldInfos); - - ~TermVectorsWriter(); - void openDocument(); - void closeDocument(); - - /** Close all streams. */ - void close(); - bool isDocumentOpen() const; - - /** Start processing a field. This can be followed by a number of calls to - * addTerm, and a final call to closeField to indicate the end of - * processing of this field. If a field was previously open, it is - * closed automatically. - */ - void openField(const TCHAR* field); - - /** Finished processing current field. This should be followed by a call to - * openField before future calls to addTerm. - */ - void closeField(); - - /** Return true if a field is currently open. */ - bool isFieldOpen() const; - - /** - * Add a complete document specified by all its term vectors. If document has no - * term vectors, add value for tvx. - * - * @param vectors - * @throws IOException - */ - void addAllDocVectors(Array& vectors); - - /** Add term to the field's term vector. Field must already be open. - * Terms should be added in - * increasing order of terms, one call per unique termNum. ProxPointer - * is a pointer into the TermPosition file (prx). Freq is the number of - * times this term appears in this field, in this document. - * @throws IllegalStateException if document or field is not open - */ - void addTerm(const TCHAR* termText, int32_t freq, - Array* positions = NULL, Array* offsets = NULL); -}; - -/** - */ -class SegmentTermVector: public virtual TermFreqVector { -private: - const TCHAR* field; - TCHAR** terms; - int32_t termsLen; //cache - Array* termFreqs; - - int32_t binarySearch(TCHAR** a, const int32_t arraylen, const TCHAR* key) const; -public: - //note: termFreqs must be the same length as terms - SegmentTermVector(const TCHAR* field, TCHAR** terms, Array* termFreqs); - virtual ~SegmentTermVector(); - - /** - * - * @return The number of the field this vector is associated with - */ - const TCHAR* getField(); - TCHAR* toString() const; - int32_t size(); - const TCHAR** getTerms(); - const Array* getTermFrequencies(); - int32_t indexOf(const TCHAR* termText); - void indexesOf(const TCHAR** termNumbers, const int32_t start, const int32_t len, Array& ret); - - virtual TermPositionVector* __asTermPositionVector(); -}; - - - -/** -* @version $Id: -*/ -class TermVectorsReader:LUCENE_BASE { -private: - FieldInfos* fieldInfos; - - CL_NS(store)::IndexInput* tvx; - CL_NS(store)::IndexInput* tvd; - CL_NS(store)::IndexInput* tvf; - int64_t _size; - - int32_t tvdFormat; - int32_t tvfFormat; - - - int32_t checkValidFormat(CL_NS(store)::IndexInput* in); - - void readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, const int32_t len, Array& _return); - - /** - * - * @param field The field to read in - * @param tvfPointer The pointer within the tvf file where we should start reading - * @return The TermVector located at that position - * @throws IOException - */ - SegmentTermVector* readTermVector(const TCHAR* field, const int64_t tvfPointer); - - int64_t size(); - - - DEFINE_MUTEX(THIS_LOCK) - TermVectorsReader(const TermVectorsReader& copy); -public: - TermVectorsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fieldInfos); - ~TermVectorsReader(); - - void close(); - TermVectorsReader* clone() const; - - /** - * Retrieve the term vector for the given document and field - * @param docNum The document number to retrieve the vector for - * @param field The field within the document to retrieve - * @return The TermFreqVector for the document and field or null if there is no termVector for this field. - * @throws IOException if there is an error reading the term vector files - */ - TermFreqVector* get(const int32_t docNum, const TCHAR* field); - - - /** - * Return all term vectors stored for this document or null if the could not be read in. - * - * @param docNum The document number to retrieve the vector for - * @return All term frequency vectors - * @throws IOException if there is an error reading the term vector files - */ - bool get(int32_t docNum, Array& result); -}; - - -struct TermVectorOffsetInfo { - int startOffset; - int endOffset; -public: - static Array EMPTY_OFFSET_INFO; - TermVectorOffsetInfo(); - ~TermVectorOffsetInfo(); - TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset); - int32_t getEndOffset() const; - void setEndOffset(int32_t endOffset); - int32_t getStartOffset() const; - void setStartOffset(int32_t startOffset); - bool equals(TermVectorOffsetInfo* o); - size_t hashCode() const; -}; - - -/** Extends TermFreqVector to provide additional information about - * positions in which each of the terms is found. A TermPositionVector not necessarily - * contains both positions and offsets, but at least one of these arrays exists. - */ -class TermPositionVector: public virtual TermFreqVector { -public: - - /** Returns an array of positions in which the term is found. - * Terms are identified by the index at which its number appears in the - * term String array obtained from the indexOf method. - * May return null if positions have not been stored. - */ - virtual Array* getTermPositions(int32_t index) = 0; - - /** - * Returns an array of TermVectorOffsetInfo in which the term is found. - * May return null if offsets have not been stored. - * - * @see org.apache.lucene.analysis.Token - * - * @param index The position in the array to get the offsets from - * @return An array of TermVectorOffsetInfo objects or the empty list - */ - virtual Array* getOffsets(int32_t index) = 0; - - virtual ~TermPositionVector(){ - } -}; - - -class SegmentTermPositionVector: public SegmentTermVector, public TermPositionVector { -protected: - Array< Array >* positions; - Array< Array >* offsets; - static Array EMPTY_TERM_POS; -public: - SegmentTermPositionVector(const TCHAR* field, TCHAR** terms, Array* termFreqs, Array< Array >* positions, Array< Array >* offsets); - ~SegmentTermPositionVector(); - - /** - * Returns an array of TermVectorOffsetInfo in which the term is found. - * - * @param index The position in the array to get the offsets from - * @return An array of TermVectorOffsetInfo objects or the empty list - * @see org.apache.lucene.analysis.Token - */ - Array* getOffsets(int32_t index); - - /** - * Returns an array of positions in which the term is found. - * Terms are identified by the index at which its number appears in the - * term String array obtained from the indexOf method. - */ - Array* getTermPositions(int32_t index); - - const TCHAR* getField(){ return SegmentTermVector::getField(); } - TCHAR* toString() const{ return SegmentTermVector::toString(); } - int32_t size(){ return SegmentTermVector::size(); } - const TCHAR** getTerms(){ return SegmentTermVector::getTerms(); } - const Array* getTermFrequencies(){ return SegmentTermVector::getTermFrequencies(); } - int32_t indexOf(const TCHAR* termText){ return SegmentTermVector::indexOf(termText); } - void indexesOf(const TCHAR** termNumbers, const int32_t start, const int32_t len, Array& ret) - { SegmentTermVector::indexesOf(termNumbers, start, len, ret); } - - virtual TermPositionVector* __asTermPositionVector(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermVectorReader.cpp clucene-core-2.3.3.4/src/CLucene/index/TermVectorReader.cpp --- clucene-core-0.9.21b/src/CLucene/index/TermVectorReader.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermVectorReader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,378 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermVector.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -TermVectorsReader::TermVectorsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fieldInfos){ - char fbuf[CL_MAX_NAME]; - strcpy(fbuf,segment); - char* fpbuf=fbuf+strlen(fbuf); - - strcpy(fpbuf, TermVectorsWriter::LUCENE_TVX_EXTENSION); - if (d->fileExists(fbuf)) { - tvx = d->openInput(fbuf); - checkValidFormat(tvx); - - strcpy(fpbuf, TermVectorsWriter::LUCENE_TVD_EXTENSION); - tvd = d->openInput(fbuf); - tvdFormat = checkValidFormat(tvd); - - strcpy(fpbuf, TermVectorsWriter::LUCENE_TVF_EXTENSION); - tvf = d->openInput(fbuf); - tvfFormat = checkValidFormat(tvf); - - _size = tvx->length() / 8; - }else{ - tvx = NULL; - tvd = NULL; - tvf = NULL; - _size = 0; - } - - this->fieldInfos = fieldInfos; -} - -TermVectorsReader::TermVectorsReader(const TermVectorsReader& copy) -{ - tvx = copy.tvx->clone(); - tvd = copy.tvd->clone(); - tvf = copy.tvf->clone(); - - tvdFormat = copy.tvdFormat; - tvfFormat = copy.tvfFormat; - _size = copy._size; - fieldInfos = copy.fieldInfos; -} -TermVectorsReader* TermVectorsReader::clone() const{ - if (tvx == NULL || tvd == NULL || tvf == NULL) - return NULL; - return _CLNEW TermVectorsReader(*this); -} - -TermVectorsReader::~TermVectorsReader(){ - close(); -} - -void TermVectorsReader::close(){ - // why don't we trap the exception and at least make sure that - // all streams that we can close are closed? - CLuceneError keep(0,"",false); - bool thrown = false; - - if (tvx != NULL){ - try{ - tvx->close(); - }catch(CLuceneError& err){ - if ( err.number() == CL_ERR_IO ){ - keep = err; - thrown = true; - }else - throw err; - } - _CLDELETE(tvx);//delete even if error thrown - } - if (tvd != NULL){ - try{ - tvd->close(); - }catch(CLuceneError& err){ - if ( err.number() == CL_ERR_IO ){ - keep = err; - thrown = true; - }else - throw err; - } - _CLDELETE(tvd); - } - if (tvf != NULL){ - try{ - tvf->close(); - }catch(CLuceneError& err){ - if ( err.number() == CL_ERR_IO ){ - keep = err; - thrown = true; - }else - throw err; - } - _CLDELETE(tvf); - } - - if ( thrown ) - throw keep; -} - -TermFreqVector* TermVectorsReader::get(const int32_t docNum, const TCHAR* field){ - // Check if no term vectors are available for this segment at all - int32_t fieldNumber = fieldInfos->fieldNumber(field); - TermFreqVector* result = NULL; - if (tvx != NULL) { - //We need to account for the FORMAT_SIZE at when seeking in the tvx - //We don't need to do this in other seeks because we already have the - // file pointer - //that was written in another file - tvx->seek((docNum * 8L) + TermVectorsWriter::FORMAT_SIZE); - int64_t position = tvx->readLong(); - - tvd->seek(position); - int32_t fieldCount = tvd->readVInt(); - // There are only a few fields per document. We opt for a full scan - // rather then requiring that they be ordered. We need to read through - // all of the fields anyway to get to the tvf pointers. - int32_t number = 0; - int32_t found = -1; - for (int32_t i = 0; i < fieldCount; ++i) { - if(tvdFormat == TermVectorsWriter::FORMAT_VERSION) - number = tvd->readVInt(); - else - number += tvd->readVInt(); - if (number == fieldNumber) - found = i; - } - - // This field, although valid in the segment, was not found in this - // document - if (found != -1) { - // Compute position in the tvf file - position = 0; - for (int32_t i = 0; i <= found; ++i) - position += tvd->readVLong(); - result = readTermVector(field, position); - } - } - return result; -} - - -bool TermVectorsReader::get(int32_t docNum, Array& result){ - // Check if no term vectors are available for this segment at all - if (tvx != NULL) { - //We need to offset by - tvx->seek((docNum * 8L) + TermVectorsWriter::FORMAT_SIZE); - int64_t position = tvx->readLong(); - - tvd->seek(position); - int32_t fieldCount = tvd->readVInt(); - - // No fields are vectorized for this document - if (fieldCount != 0) { - int32_t number = 0; - const TCHAR** fields = _CL_NEWARRAY(const TCHAR*,fieldCount+1); - - { //msvc6 scope fix - for (int32_t i = 0; i < fieldCount; ++i) { - if(tvdFormat == TermVectorsWriter::FORMAT_VERSION) - number = tvd->readVInt(); - else - number += tvd->readVInt(); - fields[i] = fieldInfos->fieldName(number); - } - } - fields[fieldCount]=NULL; - - // Compute position in the tvf file - position = 0; - int64_t* tvfPointers = _CL_NEWARRAY(int64_t,fieldCount); - { //msvc6 scope fix - for (int32_t i = 0; i < fieldCount; ++i) { - position += tvd->readVLong(); - tvfPointers[i] = position; - } - } - - readTermVectors(fields, tvfPointers, fieldCount, result); - _CLDELETE_ARRAY(tvfPointers); - _CLDELETE_ARRAY(fields); - } - return true; - } - return false; -} - - -int32_t TermVectorsReader::checkValidFormat(CL_NS(store)::IndexInput* in){ - int32_t format = in->readInt(); - if (format > TermVectorsWriter::FORMAT_VERSION) - { - CL_NS(util)::StringBuffer err; - err.append(_T("Incompatible format version: ")); - err.appendInt(format); - err.append(_T(" expected ")); - err.appendInt(TermVectorsWriter::FORMAT_VERSION); - err.append(_T(" or less")); - _CLTHROWT(CL_ERR_Runtime,err.getBuffer()); - } - return format; -} - -void TermVectorsReader::readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, const int32_t len, Array& result){ - result.length = len; - result.values = _CL_NEWARRAY(TermFreqVector*,len); - for (int32_t i = 0; i < len; ++i) { - result.values[i] = readTermVector(fields[i], tvfPointers[i]); - } -} -SegmentTermVector* TermVectorsReader::readTermVector(const TCHAR* field, const int64_t tvfPointer){ - //Now read the data from specified position - //We don't need to offset by the FORMAT here since the pointer already includes the offset - tvf->seek(tvfPointer); - - int32_t numTerms = tvf->readVInt(); - // If no terms - return a constant empty termvector. However, this should never occur! - if (numTerms == 0) - return _CLNEW SegmentTermVector(field, NULL, NULL); - - bool storePositions; - bool storeOffsets; - - if(tvfFormat == TermVectorsWriter::FORMAT_VERSION){ - uint8_t bits = tvf->readByte(); - storePositions = (bits & TermVectorsWriter::STORE_POSITIONS_WITH_TERMVECTOR) != 0; - storeOffsets = (bits & TermVectorsWriter::STORE_OFFSET_WITH_TERMVECTOR) != 0; - } - else{ - tvf->readVInt(); - storePositions = false; - storeOffsets = false; - } - - TCHAR** terms = _CL_NEWARRAY(TCHAR*,numTerms+1); - Array* termFreqs = _CLNEW Array(numTerms); - - // we may not need these, but declare them - Array< Array >* positions = NULL; - Array< Array >* offsets = NULL; - if(storePositions){ - Array* tmp = _CL_NEWARRAY(Array,numTerms); - positions = _CLNEW Array< Array >(tmp, numTerms); - } - if(storeOffsets){ - Array* tmp = _CL_NEWARRAY(Array,numTerms); - offsets = _CLNEW Array< Array >(tmp, numTerms); - } - - int32_t start = 0; - int32_t deltaLength = 0; - int32_t totalLength = 0; - int32_t bufferLen=10; // init the buffer with a length of 10 character - TCHAR* buffer = (TCHAR*)malloc(bufferLen * sizeof(TCHAR)); - - for (int32_t i = 0; i < numTerms; ++i) { - start = tvf->readVInt(); - deltaLength = tvf->readVInt(); - totalLength = start + deltaLength; - if (bufferLen < totalLength) // increase buffer - { - buffer=(TCHAR*)realloc(buffer,totalLength * sizeof(TCHAR)); - bufferLen = totalLength; - } - - //read the term - tvf->readChars(buffer, start, deltaLength); - terms[i] = _CL_NEWARRAY(TCHAR,totalLength+1); - _tcsncpy(terms[i],buffer,totalLength); - terms[i][totalLength] = '\0'; //null terminate term - - //read the frequency - int32_t freq = tvf->readVInt(); - termFreqs->values[i] = freq; - - if (storePositions) { //read in the positions - Array& pos = positions->values[i]; - pos.length = freq; - pos.values = _CL_NEWARRAY(int32_t,freq); - - int32_t prevPosition = 0; - for (int32_t j = 0; j < freq; ++j) - { - pos.values[j] = prevPosition + tvf->readVInt(); - prevPosition = pos.values[j]; - } - } - - if (storeOffsets) { - Array& offs = offsets->values[i]; - offs.length = freq; - offs.values = _CL_NEWARRAY(TermVectorOffsetInfo,freq); - - int32_t prevOffset = 0; - for (int32_t j = 0; j < freq; ++j) { - int32_t startOffset = prevOffset + tvf->readVInt(); - int32_t endOffset = startOffset + tvf->readVInt(); - offs.values[j].setStartOffset(startOffset); - offs.values[j].setEndOffset(endOffset); - prevOffset = endOffset; - } - } - } - free(buffer); - terms[numTerms]=NULL; //null terminate terms array - - SegmentTermVector* tv = NULL; - if (storePositions || storeOffsets){ - return _CLNEW SegmentTermPositionVector(field, terms, termFreqs, positions, offsets); - }else { - return _CLNEW SegmentTermVector(field, terms, termFreqs); - } -} - -int64_t TermVectorsReader::size(){ - return _size; -} - - - - -Array TermVectorOffsetInfo::EMPTY_OFFSET_INFO; - -TermVectorOffsetInfo::TermVectorOffsetInfo() { - startOffset = 0; - endOffset=0; -} -TermVectorOffsetInfo::~TermVectorOffsetInfo() { -} - -TermVectorOffsetInfo::TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset) { - this->endOffset = endOffset; - this->startOffset = startOffset; -} - -int32_t TermVectorOffsetInfo::getEndOffset() const{ - return endOffset; -} - -void TermVectorOffsetInfo::setEndOffset(int32_t endOffset) { - this->endOffset = endOffset; -} - -int32_t TermVectorOffsetInfo::getStartOffset() const{ - return startOffset; -} - -void TermVectorOffsetInfo::setStartOffset(int32_t startOffset) { - this->startOffset = startOffset; -} - -bool TermVectorOffsetInfo::equals(TermVectorOffsetInfo* termVectorOffsetInfo) { - if (this == termVectorOffsetInfo) - return true; - - if (endOffset != termVectorOffsetInfo->endOffset) return false; - if (startOffset != termVectorOffsetInfo->startOffset) return false; - - return true; -} - -size_t TermVectorOffsetInfo::hashCode() const{ - size_t result; - result = startOffset; - result = 29 * result + endOffset; - return result; -} -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/index/TermVectorWriter.cpp clucene-core-2.3.3.4/src/CLucene/index/TermVectorWriter.cpp --- clucene-core-0.9.21b/src/CLucene/index/TermVectorWriter.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/index/TermVectorWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,326 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermVector.h" -#include "CLucene/util/Misc.h" - -CL_NS_USE(util) -CL_NS_DEF(index) - -const char* TermVectorsWriter::LUCENE_TVX_EXTENSION = ".tvx"; -const char* TermVectorsWriter::LUCENE_TVD_EXTENSION = ".tvd"; -const char* TermVectorsWriter::LUCENE_TVF_EXTENSION = ".tvf"; - - TermVectorsWriter::TermVectorsWriter(CL_NS(store)::Directory* directory, - const char* segment,FieldInfos* fieldInfos) - { - // Open files for TermVector storage - char fbuf[CL_MAX_NAME]; - strcpy(fbuf,segment); - char* fpbuf=fbuf+strlen(fbuf); - - strcpy(fpbuf,LUCENE_TVX_EXTENSION); - tvx = directory->createOutput(fbuf); - tvx->writeInt(FORMAT_VERSION); - - strcpy(fpbuf,LUCENE_TVD_EXTENSION); - tvd = directory->createOutput(fbuf); - tvd->writeInt(FORMAT_VERSION); - - strcpy(fpbuf,LUCENE_TVF_EXTENSION); - tvf = directory->createOutput(fbuf); - tvf->writeInt(FORMAT_VERSION); - - this->fieldInfos = fieldInfos; - - currentField = NULL; - currentDocPointer = -1; - } - - TermVectorsWriter::~TermVectorsWriter(){ - if ( tvx != NULL ){ - tvx->close(); - _CLDELETE(tvx); - } - if ( tvd != NULL ){ - tvd->close(); - _CLDELETE(tvd); - } - if ( tvf != NULL ){ - tvf->close(); - _CLDELETE(tvf); - } - } - - - void TermVectorsWriter::openDocument() { - closeDocument(); - - currentDocPointer = tvd->getFilePointer(); - } - - - void TermVectorsWriter::closeDocument(){ - if (isDocumentOpen()) { - closeField(); - writeDoc(); - fields.clear(); - currentDocPointer = -1; - } - } - - - bool TermVectorsWriter::isDocumentOpen() const{ - return currentDocPointer != -1; - } - - - void TermVectorsWriter::openField(int32_t fieldNumber, bool storePositionWithTermVector, bool storeOffsetWithTermVector){ - if (!isDocumentOpen()) - _CLTHROWA(CL_ERR_InvalidState,"Cannot open field when no document is open."); - - closeField(); - currentField = _CLNEW TVField(fieldNumber, storePositionWithTermVector, storeOffsetWithTermVector); - } - void TermVectorsWriter::openField(const TCHAR* field) { - FieldInfo* fieldInfo = fieldInfos->fieldInfo(field); - openField(fieldInfo->number, fieldInfo->storePositionWithTermVector, fieldInfo->storeOffsetWithTermVector); - } - - void TermVectorsWriter::closeField(){ - if (isFieldOpen()) { - /* DEBUG */ - //System.out.println("closeField()"); - /* DEBUG */ - - // save field and terms - writeField(); - fields.push_back(currentField); - terms.clear(); - currentField = NULL; - } - } - - bool TermVectorsWriter::isFieldOpen() const{ - return currentField != NULL; - } - - void TermVectorsWriter::addTerm(const TCHAR* termText, int32_t freq, - Array* positions, Array* offsets) { - if (!isDocumentOpen()) - _CLTHROWA(CL_ERR_InvalidState,"Cannot add terms when document is not open"); - if (!isFieldOpen()) - _CLTHROWA(CL_ERR_InvalidState,"Cannot add terms when field is not open"); - - addTermInternal(termText, freq, positions, offsets); - } - - void TermVectorsWriter::addTermInternal(const TCHAR* termText, int32_t freq, - Array* positions, Array* offsets) { - TVTerm* term = _CLNEW TVTerm(); - term->setTermText(termText); - term->freq = freq; - term->positions = positions; - term->offsets = offsets; - terms.push_back(term); - } - - void TermVectorsWriter::addAllDocVectors(Array& vectors){ - openDocument(); - - for (int32_t i = 0; i < vectors.length; ++i) { - bool storePositionWithTermVector = false; - bool storeOffsetWithTermVector = false; - - if ( vectors[i]->__asTermPositionVector() != NULL ) { - TermPositionVector* tpVector = vectors[i]->__asTermPositionVector(); - - if (tpVector->size() > 0 && tpVector->getTermPositions(0) != NULL) - storePositionWithTermVector = true; - if (tpVector->size() > 0 && tpVector->getOffsets(0) != NULL) - storeOffsetWithTermVector = true; - - FieldInfo* fieldInfo = fieldInfos->fieldInfo(tpVector->getField()); - openField(fieldInfo->number, storePositionWithTermVector, storeOffsetWithTermVector); - - for (int32_t j = 0; j < tpVector->size(); ++j) - addTermInternal(tpVector->getTerms()[j], - (*tpVector->getTermFrequencies())[j], - tpVector->getTermPositions(j), - tpVector->getOffsets(j)); - - closeField(); - - } else { - TermFreqVector* tfVector = vectors[i]; - - FieldInfo* fieldInfo = fieldInfos->fieldInfo(tfVector->getField()); - openField(fieldInfo->number, storePositionWithTermVector, storeOffsetWithTermVector); - - for (int32_t j = 0; j < tfVector->size(); ++j) - addTermInternal(tfVector->getTerms()[j], - (*tfVector->getTermFrequencies())[j], NULL, NULL); - - closeField(); - } - } - - closeDocument(); - } - - - void TermVectorsWriter::close() { - try { - closeDocument(); - - // make an effort to close all streams we can but remember and re-throw - // the first exception encountered in this process - #define _DOTVWCLOSE(x) if (x != NULL){ \ - try { \ - x->close(); _CLDELETE(x) \ - } catch (CLuceneError& e) { \ - if ( e.number() != CL_ERR_IO ) throw e; \ - if (ikeep==0)ikeep=e.number(); \ - if (keep[0]==0) strcpy(keep,e.what()); \ - } catch (...) { \ - if (keep[0]==0) strcpy(keep,"Unknown error while closing " #x); \ - } \ - } - }_CLFINALLY( \ - char keep[200]; \ - int32_t ikeep=0; - keep[0]=0; \ - _DOTVWCLOSE(tvx); \ - _DOTVWCLOSE(tvd); \ - _DOTVWCLOSE(tvf); \ - if (keep[0] != 0 ) { \ - _CLTHROWA(ikeep,keep); \ - } - ); - } - - - - void TermVectorsWriter::writeField() { - // remember where this field is written - currentField->tvfPointer = tvf->getFilePointer(); - //System.out.println("Field Pointer: " + currentField.tvfPointer); - int32_t size = terms.size(); - - tvf->writeVInt(size); - - bool storePositions = currentField->storePositions; - bool storeOffsets = currentField->storeOffsets; - uint8_t bits = 0x0; - if (storePositions) - bits |= STORE_POSITIONS_WITH_TERMVECTOR; - if (storeOffsets) - bits |= STORE_OFFSET_WITH_TERMVECTOR; - tvf->writeByte(bits); - - const TCHAR* lastTermText = LUCENE_BLANK_STRING; - int32_t lastTermTextLen = 0; - - for (int32_t i = 0; i < size; ++i) { - TVTerm* term = terms[i]; - int32_t start = CL_NS(util)::Misc::stringDifference(lastTermText, lastTermTextLen, - term->getTermText(),term->getTermTextLen()); - int32_t length = term->getTermTextLen() - start; - tvf->writeVInt(start); // write shared prefix length - tvf->writeVInt(length); // write delta length - tvf->writeChars(term->getTermText(), start, length); // write delta chars - tvf->writeVInt(term->freq); - - lastTermText = term->getTermText(); - lastTermTextLen = term->getTermTextLen(); - - if(storePositions){ - if(term->positions == NULL) - _CLTHROWA(CL_ERR_IllegalState, "Trying to write positions that are NULL!"); - - // use delta encoding for positions - int32_t position = 0; - for (int32_t j = 0; j < term->freq; ++j){ - tvf->writeVInt((*term->positions)[j] - position); - position = (*term->positions)[j]; - } - } - - if(storeOffsets){ - if(term->offsets == NULL) - _CLTHROWA(CL_ERR_IllegalState, "Trying to write offsets that are NULL!"); - - // use delta encoding for offsets - int32_t position = 0; - for (int32_t j = 0; j < term->freq; ++j) { - tvf->writeVInt((*term->offsets)[j].getStartOffset() - position); - tvf->writeVInt((*term->offsets)[j].getEndOffset() - (*term->offsets)[j].getStartOffset()); //Save the diff between the two. - position = (*term->offsets)[j].getEndOffset(); - } - } - } - } - - - - - void TermVectorsWriter::writeDoc() { - if (isFieldOpen()) - _CLTHROWA(CL_ERR_InvalidState,"Field is still open while writing document"); - - // write document index record - tvx->writeLong(currentDocPointer); - - // write document data record - int32_t size = fields.size(); - - // write the number of fields - tvd->writeVInt(size); - - // write field numbers - for (int32_t j = 0; j < size; ++j) { - tvd->writeVInt(fields[j]->number); - } - - // write field pointers - int64_t lastFieldPointer = 0; - for (int32_t i = 0; i < size; ++i) { - TVField* field = (TVField*) fields[i]; - tvd->writeVLong(field->tvfPointer - lastFieldPointer); - - lastFieldPointer = field->tvfPointer; - } - } - - - const TCHAR* TermVectorsWriter::TVTerm::getTermText() const{ - return termText; - } - size_t TermVectorsWriter::TVTerm::getTermTextLen(){ - if (termTextLen==-1) - termTextLen = _tcslen(termText); - return termTextLen; - } - void TermVectorsWriter::TVTerm::setTermText(const TCHAR* val){ - _CLDELETE_CARRAY(termText); - termText = STRDUP_TtoT(val); - termTextLen = -1; - - } - TermVectorsWriter::TVTerm::TVTerm(): - freq(0), - positions(NULL), - offsets(NULL) - { - termText=NULL; - termTextLen=-1; - } - TermVectorsWriter::TVTerm::~TVTerm(){ - _CLDELETE_CARRAY(termText) - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/LuceneThreads.h clucene-core-2.3.3.4/src/CLucene/LuceneThreads.h --- clucene-core-0.9.21b/src/CLucene/LuceneThreads.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/LuceneThreads.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _LuceneThreads_h -#define _LuceneThreads_h -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#if defined(_CL_DISABLE_MULTITHREADING) - #define SCOPED_LOCK_MUTEX(theMutex) - #define DEFINE_MUTEX(x) - #define STATIC_DEFINE_MUTEX(x) - #define _LUCENE_SLEEP(x) - #define _LUCENE_CURRTHREADID 1 - #define _LUCENE_THREADID_TYPE char - - CL_NS_DEF(util) - class CLuceneThreadIdCompare - { - public: - enum - { // parameters for hash table - bucket_size = 4, // 0 < bucket_size - min_buckets = 8 - }; // min_buckets = 2 ^^ N, 0 < N - - bool operator()( char t1, char t2 ) const{ - return t1 < t2; - } - }; - CL_NS_END -#else - - #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) - //do nothing - #elif defined(_CL_HAVE_PTHREAD) - #include "CLucene/config/threadPthread.h" - #elif defined(_CL_HAVE_WIN32_THREADS) || defined(_CLCOMPILER_MSVC) || defined(__MINGW32__) //note that mingw32 could have pthreads, so put this after. - #if !defined(_CL_HAVE_WIN32_THREADS) - #define _CL_HAVE_WIN32_THREADS - #endif - #include "CLucene/config/threadCSection.h" - #else - #error A valid thread library was not found - #endif //mutex types - - CL_NS_DEF(util) - /** @internal */ - class mutexGuard - { - private: - _LUCENE_THREADMUTEX* mrMutex; - mutexGuard(const mutexGuard& clone); - public: - mutexGuard( _LUCENE_THREADMUTEX& rMutex ); - ~mutexGuard(); - }; - CL_NS_END - - #define SCOPED_LOCK_MUTEX(theMutex) CL_NS(util)::mutexGuard theMutexGuard(theMutex); - #define DEFINE_MUTEX(theMutex) _LUCENE_THREADMUTEX theMutex; - #define STATIC_DEFINE_MUTEX(theMutex) static _LUCENE_THREADMUTEX theMutex; - -#endif //_CL_DISABLE_MULTITHREADING - - - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/Makefile.am clucene-core-2.3.3.4/src/CLucene/Makefile.am --- clucene-core-0.9.21b/src/CLucene/Makefile.am 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -stdhdir = $(includedir)/CLucene - -libclucene_la_SOURCES += $(lsrcdir)/StdHeader.cpp -stdh_HEADERS = $(lsrcdir)/CLBackwards.h -stdh_HEADERS += $(lsrcdir)/CLConfig.h -stdh_HEADERS += $(lsrcdir)/LuceneThreads.h -stdh_HEADERS += $(lsrcdir)/StdHeader.h - -clucene_configdir = $(libdir)/CLucene -clucene_config_DATA = $(top_builddir)/src/CLucene/clucene-config.h diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/Lexer.cpp clucene-core-2.3.3.4/src/CLucene/queryParser/Lexer.cpp --- clucene-core-0.9.21b/src/CLucene/queryParser/Lexer.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/Lexer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,371 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Lexer.h" - -#include "CLucene/util/FastCharStream.h" -#include "CLucene/util/Reader.h" -#include "CLucene/util/StringBuffer.h" -#include "TokenList.h" -#include "QueryToken.h" -#include "QueryParserBase.h" - -CL_NS_USE(util) - -CL_NS_DEF(queryParser) -Lexer::Lexer(QueryParserBase* queryparser, const TCHAR* query) { - //Func - Constructor - //Pre - query != NULL and contains the query string - //Post - An instance of Lexer has been created - - this->queryparser = queryparser; - - CND_PRECONDITION(query != NULL, "query is NULL"); - - //The InputStream of Reader must be destroyed in the destructor - delSR = true; - - StringReader *r = _CLNEW StringReader(query); - - //Check to see if r has been created properly - CND_CONDITION(r != NULL, "Could not allocate memory for StringReader r"); - - //Instantie a FastCharStream instance using r and assign it to reader - reader = _CLNEW FastCharStream(r); - - //Check to see if reader has been created properly - CND_CONDITION(reader != NULL, "Could not allocate memory for FastCharStream reader"); - - //The InputStream of Reader must be destroyed in the destructor - delSR = true; - -} - - -Lexer::Lexer(QueryParserBase* queryparser, Reader* source) { - //Func - Constructor - // Initializes a new instance of the Lexer class with the specified - // TextReader to lex. - //Pre - Source contains a valid reference to a Reader - //Post - An instance of Lexer has been created using source as the reader - - this->queryparser = queryparser; - - //Instantie a FastCharStream instance using r and assign it to reader - reader = _CLNEW FastCharStream(source); - - //Check to see if reader has been created properly - CND_CONDITION(reader != NULL, "Could not allocate memory for FastCharStream reader"); - - //The InputStream of Reader must not be destroyed in the destructor - delSR = false; -} - - -Lexer::~Lexer() { - //Func - Destructor - //Pre - true - //Post - if delSR was true the InputStream input of reader has been deleted - // The instance of Lexer has been destroyed - - if (delSR) { - _CLDELETE(reader->input); - } - - _CLDELETE(reader); -} - - -void Lexer::Lex(TokenList *tokenList) { - //Func - Breaks the input stream onto the tokens list tokens - //Pre - tokens != NULL and contains a TokenList in which the tokens can be stored - //Post - The tokens have been added to the TokenList tokens - - CND_PRECONDITION(tokenList != NULL, "tokens is NULL"); - - //Get all the tokens - while(true) { - //Add the token to the tokens list - - //Get the next token - QueryToken* token = _CLNEW QueryToken; - if ( !GetNextToken(token) ){ - _CLDELETE(token); - break; - } - tokenList->add(token); - } - - //The end has been reached so create an EOF_ token - //Add the final token to the TokenList _tokens - tokenList->add(_CLNEW QueryToken( QueryToken::EOF_)); -} - - -bool Lexer::GetNextToken(QueryToken* token) { - while(!reader->Eos()) { - int ch = reader->GetNext(); - - if ( ch == -1 ) - break; - - // skipping whitespaces - if( _istspace(ch)!=0 ) { - continue; - } - TCHAR buf[2] = {ch,'\0'}; - switch(ch) { - case '+': - token->set(buf, QueryToken::PLUS); - return true; - case '-': - token->set(buf, QueryToken::MINUS); - return true; - case '(': - token->set(buf, QueryToken::LPAREN); - return true; - case ')': - token->set(buf, QueryToken::RPAREN); - return true; - case ':': - token->set(buf, QueryToken::COLON); - return true; - case '!': - token->set(buf, QueryToken::NOT); - return true; - case '^': - token->set(buf, QueryToken::CARAT); - return true; - case '~': - if( _istdigit( reader->Peek() )!=0 ) { - TCHAR number[LUCENE_MAX_FIELD_LEN]; - ReadIntegerNumber(ch, number,LUCENE_MAX_FIELD_LEN); - token->set(number, QueryToken::SLOP); - return true; - }else{ - token->set(buf, QueryToken::FUZZY); - return true; - } - break; - case '"': - return ReadQuoted(ch, token); - case '[': - return ReadInclusiveRange(ch, token); - case '{': - return ReadExclusiveRange(ch, token); - case ']': - case '}': - case '*': - queryparser->throwParserException( _T("Unrecognized char %d at %d::%d."), - ch, reader->Column(), reader->Line() ); - return false; - default: - return ReadTerm(ch, token); - - // end of swith - } - - } - return false; -} - - -void Lexer::ReadIntegerNumber(const TCHAR ch, TCHAR* buf, int buflen) { - int bp=0; - buf[bp++] = ch; - - int c = reader->Peek(); - while( c!=-1 && _istdigit(c)!=0 && bpGetNext(); - c = reader->Peek(); - } - buf[bp++] = 0; -} - - -bool Lexer::ReadInclusiveRange(const TCHAR prev, QueryToken* token) { - int ch = prev; - StringBuffer range; - range.appendChar(ch); - - while(!reader->Eos()) { - ch = reader->GetNext(); - if ( ch == -1 ) - break; - range.appendChar(ch); - - if(ch == ']'){ - token->set(range.getBuffer(), QueryToken::RANGEIN); - return true; - } - } - queryparser->throwParserException(_T("Unterminated inclusive range! %d %d::%d"),' ', - reader->Column(),reader->Column()); - return false; -} - - -bool Lexer::ReadExclusiveRange(const TCHAR prev, QueryToken* token) { - int ch = prev; - StringBuffer range; - range.appendChar(ch); - - while(!reader->Eos()) { - ch = reader->GetNext(); - - if (ch==-1) - break; - range.appendChar(ch); - - if(ch == '}'){ - token->set(range.getBuffer(), QueryToken::RANGEEX); - return true; - } - } - queryparser->throwParserException(_T("Unterminated exclusive range! %d %d::%d"),' ', - reader->Column(),reader->Column() ); - return false; -} - -bool Lexer::ReadQuoted(const TCHAR prev, QueryToken* token) { - int ch = prev; - StringBuffer quoted; - quoted.appendChar(ch); - - while(!reader->Eos()) { - ch = reader->GetNext(); - - if (ch==-1) - break; - - quoted.appendChar(ch); - - if(ch == '"'){ - token->set(quoted.getBuffer(), QueryToken::QUOTED); - return true; - } - } - queryparser->throwParserException(_T("Unterminated string! %d %d::%d"),' ', - reader->Column(),reader->Column()); - return false; -} - - -bool Lexer::ReadTerm(const TCHAR prev, QueryToken* token) { - int ch = prev; - bool completed = false; - int32_t asteriskCount = 0; - bool hasQuestion = false; - - StringBuffer val; - TCHAR buf[3]; //used for readescaped - - while(true) { - switch(ch) { - case -1: - break; - case '\\': - { - if ( ReadEscape(ch, buf) ) - val.append( buf ); - else - return false; - } - break; - - case LUCENE_WILDCARDTERMENUM_WILDCARD_STRING: - asteriskCount++; - val.appendChar(ch); - break; - case LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR: - hasQuestion = true; - val.appendChar(ch); - break; - case '\n': - case '\t': - case ' ': - case '+': - case '-': - case '!': - case '(': - case ')': - case ':': - case '^': - case '[': - case ']': - case '{': - case '}': - case '~': - case '"': - // create new QueryToken - reader->UnGet(); - completed = true; - break; - default: - val.appendChar(ch); - break; - // end of switch - } - - if(completed || ch==-1 || reader->Eos() ) - break; - else - ch = reader->GetNext(); - } - - // create new QueryToken - if(hasQuestion) - token->set(val.getBuffer(), QueryToken::WILDTERM); - else if(asteriskCount == 1 && val.getBuffer()[val.length() - 1] == '*') - token->set(val.getBuffer(), QueryToken::PREFIXTERM); - else if(asteriskCount > 0) - token->set(val.getBuffer(), QueryToken::WILDTERM); - else if( _tcsicmp(val.getBuffer(), _T("AND"))==0 || _tcscmp(val.getBuffer(), _T("&&"))==0 ) - token->set(val.getBuffer(), QueryToken::AND_); - else if( _tcsicmp(val.getBuffer(), _T("OR"))==0 || _tcscmp(val.getBuffer(), _T("||"))==0) - token->set(val.getBuffer(), QueryToken::OR); - else if( _tcsicmp(val.getBuffer(), _T("NOT"))==0 ) - token->set(val.getBuffer(), QueryToken::NOT); - else { - bool isnum = true; - int32_t nlen=val.length(); - for (int32_t i=0;iset(val.getBuffer(), QueryToken::NUMBER); - else - token->set(val.getBuffer(), QueryToken::TERM); - } - return true; -} - - -bool Lexer::ReadEscape(TCHAR prev, TCHAR* buf) { - TCHAR ch = prev; - int bp=0; - buf[bp++] = ch; - - ch = reader->GetNext(); - int32_t idx = _tcscspn( buf, _T("\\+-!():^[]{}\"~*") ); - if(idx == 0) { - buf[bp++] = ch; - buf[bp++]=0; - return true; - } - queryparser->throwParserException(_T("Unrecognized escape sequence at %d %d::%d"), ' ', - reader->Column(),reader->Line()); - return false; -} - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/Lexer.h clucene-core-2.3.3.4/src/CLucene/queryParser/Lexer.h --- clucene-core-0.9.21b/src/CLucene/queryParser/Lexer.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/Lexer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_Lexer_ -#define _lucene_queryParser_Lexer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/FastCharStream.h" -#include "CLucene/util/Reader.h" -#include "CLucene/util/StringBuffer.h" - -#include "TokenList.h" -class QueryParserBase; - -CL_NS_DEF(queryParser) - - // A simple Lexer that is used by QueryParser. - class Lexer:LUCENE_BASE - { - private: - CL_NS(util)::FastCharStream* reader; - QueryParserBase* queryparser; //holds the queryparser so that we can do callbacks - bool delSR; //Indicates if the reader must be deleted or not - - public: - // Initializes a new instance of the Lexer class with the specified - // query to lex. - Lexer(QueryParserBase* queryparser, const TCHAR* query); - - // Initializes a new instance of the Lexer class with the specified - // TextReader to lex. - Lexer(QueryParserBase* queryparser, CL_NS(util)::Reader* source); - - //Breaks the input stream onto the tokens list tokens - void Lex(TokenList *tokens); - - ~Lexer(); - - private: - bool GetNextToken(QueryToken* token); - - // Reads an integer number. buf should quite large, probably as large as a field should ever be - void ReadIntegerNumber(const TCHAR ch, TCHAR* buf, int buflen); - - // Reads an inclusive range like [some words] - bool ReadInclusiveRange(const TCHAR prev, QueryToken* token); - - // Reads an exclusive range like {some words} - bool ReadExclusiveRange(const TCHAR prev, QueryToken* token); - - // Reads quoted string like "something else" - bool ReadQuoted(const TCHAR prev, QueryToken* token); - - bool ReadTerm(const TCHAR prev, QueryToken* token); - - //reads an escaped character into the buf. Buf requires at least 3 characters - bool ReadEscape(const TCHAR prev, TCHAR* buf); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/Makefile.am clucene-core-2.3.3.4/src/CLucene/queryParser/Makefile.am --- clucene-core-0.9.21b/src/CLucene/queryParser/Makefile.am 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -qpdir = $(lsrcdir)/queryParser -qphdir = $(includedir)/CLucene/queryParser - -libclucene_la_SOURCES += $(qpdir)/Lexer.cpp -libclucene_la_SOURCES += $(qpdir)/QueryParser.cpp -libclucene_la_SOURCES += $(qpdir)/QueryParserBase.cpp -libclucene_la_SOURCES += $(qpdir)/QueryToken.cpp -libclucene_la_SOURCES += $(qpdir)/TokenList.cpp -libclucene_la_SOURCES += $(qpdir)/MultiFieldQueryParser.cpp - -qph_HEADERS = $(qpdir)/*.h diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/MultiFieldQueryParser.cpp clucene-core-2.3.3.4/src/CLucene/queryParser/MultiFieldQueryParser.cpp --- clucene-core-0.9.21b/src/CLucene/queryParser/MultiFieldQueryParser.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/MultiFieldQueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,210 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "MultiFieldQueryParser.h" -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/search/BooleanQuery.h" -#include "CLucene/search/PhraseQuery.h" -#include "CLucene/search/SearchHeader.h" -#include "QueryParser.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(search) -CL_NS_USE(analysis) - -CL_NS_DEF(queryParser) - - -MultiFieldQueryParser::MultiFieldQueryParser(const TCHAR** fields, CL_NS(analysis)::Analyzer* a, BoostMap* boosts): - QueryParser(NULL,a) -{ - this->fields = fields; - this->boosts = boosts; -} -MultiFieldQueryParser::~MultiFieldQueryParser(){ -} - -//static -Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** fields, Analyzer* analyzer) -{ - BooleanQuery* bQuery = _CLNEW BooleanQuery(); - int32_t i = 0; - while ( fields[i] != NULL ){ - Query* q = QueryParser::parse(query, fields[i], analyzer); - if (q && (q->getQueryName()!=_T("BooleanQuery") || ((BooleanQuery*)q)->getClauseCount() > 0)) { - bQuery->add(q, true, false, false); - } else - _CLDELETE(q); - - i++; - } - return bQuery; -} - -//static -Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** fields, const uint8_t* flags, Analyzer* analyzer) -{ - BooleanQuery* bQuery = _CLNEW BooleanQuery(); - int32_t i = 0; - while ( fields[i] != NULL ) - { - Query* q = QueryParser::parse(query, fields[i], analyzer); - if (q && (q->getQueryName()!=_T("BooleanQuery") || ((BooleanQuery*)q)->getClauseCount() > 0)) { - uint8_t flag = flags[i]; - switch (flag) - { - case MultiFieldQueryParser::REQUIRED_FIELD: - bQuery->add(q, true, true, false); - break; - case MultiFieldQueryParser::PROHIBITED_FIELD: - bQuery->add(q, true, false, true); - break; - default: - bQuery->add(q, true, false, false); - break; - } - } else { - _CLDELETE(q); - } - - i++; - } - return bQuery; -} - - -Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){ - if (field == NULL) { - vector clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetFieldQuery(fields[i], queryText); - if (q != NULL) { - //If the user passes a map of boosts - if (boosts != NULL) { - //Get the boost from the map and apply them - BoostMap::const_iterator itr = boosts->find(fields[i]); - if (itr != boosts->end()) { - q->setBoost(itr->second); - } - } - if (q->getQueryName() == PhraseQuery::getClassName()) { - ((PhraseQuery*)q)->setSlop(slop); - } - //if (q instanceof MultiPhraseQuery) { - // ((MultiPhraseQuery) q).setSlop(slop); - //} - q = QueryAddedCallback(fields[i], q); - if ( q ) - clauses.push_back(_CLNEW BooleanClause(q, true, false,false)); - } - } - if (clauses.size() == 0) // happens for stopwords - return NULL; - Query* q = QueryParser::GetBooleanQuery(clauses); - return q; - }else{ - Query* q = QueryParser::GetFieldQuery(field, queryText); - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - - -Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText){ - return GetFieldQuery(field, queryText, 0); -} - - -CL_NS(search)::Query* MultiFieldQueryParser::GetFuzzyQuery(const TCHAR* field, TCHAR* termStr){ - if (field == NULL) { - vector clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetFuzzyQuery(fields[i], termStr); //todo: , minSimilarity - if ( q ){ - q = QueryAddedCallback(fields[i], q); - if ( q ){ - clauses.push_back(_CLNEW BooleanClause(q,true,false,false) ); - } - } - } - return QueryParser::GetBooleanQuery(clauses); - }else{ - Query* q = QueryParser::GetFuzzyQuery(field, termStr);//todo: , minSimilarity - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - -Query* MultiFieldQueryParser::GetPrefixQuery(const TCHAR* field, TCHAR* termStr){ - if (field == NULL) { - vector clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetPrefixQuery(fields[i], termStr); - if ( q ){ - q = QueryAddedCallback(fields[i],q); - if ( q ){ - clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); - } - } - } - return QueryParser::GetBooleanQuery(clauses); - }else{ - Query* q = QueryParser::GetPrefixQuery(field, termStr); - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - -Query* MultiFieldQueryParser::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){ - if (field == NULL) { - vector clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetWildcardQuery(fields[i], termStr); - if ( q ){ - q = QueryAddedCallback(fields[i],q); - if ( q ){ - clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); - } - } - } - return QueryParser::GetBooleanQuery(clauses); - }else{ - Query* q = QueryParser::GetWildcardQuery(field, termStr); - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - - -Query* MultiFieldQueryParser::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){ - if (field == NULL) { - vector clauses; - for (int i = 0; fields[i]!=NULL; ++i) { - Query* q = QueryParser::GetRangeQuery(fields[i], part1, part2, inclusive); - if ( q ){ - q = QueryAddedCallback(fields[i],q); - if ( q ){ - clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); - } - } - } - return QueryParser::GetBooleanQuery(clauses); - }else{ - Query* q = QueryParser::GetRangeQuery(field, part1, part2, inclusive); - if ( q ) - q = QueryAddedCallback(field,q); - return q; - } -} - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/MultiFieldQueryParser.h clucene-core-2.3.3.4/src/CLucene/queryParser/MultiFieldQueryParser.h --- clucene-core-0.9.21b/src/CLucene/queryParser/MultiFieldQueryParser.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/MultiFieldQueryParser.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef MultiFieldQueryParser_H -#define MultiFieldQueryParser_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/search/SearchHeader.h" -#include "QueryParser.h" - - -CL_NS_DEF(queryParser) - -typedef CL_NS(util)::CLHashMap BoostMap; - - /** - * A QueryParser which constructs queries to search multiple fields. - * - */ - class MultiFieldQueryParser: public QueryParser - { - protected: - const TCHAR** fields; - BoostMap* boosts; - public: - LUCENE_STATIC_CONSTANT(uint8_t, NORMAL_FIELD=0); - LUCENE_STATIC_CONSTANT(uint8_t, REQUIRED_FIELD=1); - LUCENE_STATIC_CONSTANT(uint8_t, PROHIBITED_FIELD=2); - - /** - * Creates a MultiFieldQueryParser. - * - *

It will, when parse(String query) - * is called, construct a query like this (assuming the query consists of - * two terms and you specify the two fields title and body):

- * - * - * (title:term1 body:term1) (title:term2 body:term2) - * - * - *

When setDefaultOperator(AND_OPERATOR) is set, the result will be:

- * - * - * +(title:term1 body:term1) +(title:term2 body:term2) - * - * - *

In other words, all the query's terms must appear, but it doesn't matter in - * what fields they appear.

- */ - MultiFieldQueryParser(const TCHAR** fields, CL_NS(analysis)::Analyzer* a, BoostMap* boosts = NULL); - virtual ~MultiFieldQueryParser(); - - /** - *

- * Parses a query which searches on the fields specified. - *

- * If x fields are specified, this effectively constructs: - *

-         * 
-         * (field1:query) (field2:query) (field3:query)...(fieldx:query)
-         * 
-         * 
- * - * @param query Query string to parse - * @param fields Fields to search on - * @param analyzer Analyzer to use - * @throws ParserException if query parsing fails - * @throws TokenMgrError if query parsing fails - */ - static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** fields, CL_NS(analysis)::Analyzer* analyzer); - - /** - *

- * Parses a query, searching on the fields specified. - * Use this if you need to specify certain fields as required, - * and others as prohibited. - *

-         * Usage:
-         * 
-         * String[] fields = {"filename", "contents", "description"};
-         * int32_t[] flags = {MultiFieldQueryParser.NORMAL FIELD,
-         *                MultiFieldQueryParser.REQUIRED FIELD,
-         *                MultiFieldQueryParser.PROHIBITED FIELD,};
-         * parse(query, fields, flags, analyzer);
-         * 
-         * 
- *

- * The code above would construct a query: - *

-         * 
-         * (filename:query) +(contents:query) -(description:query)
-         * 
-         * 
- * - * @param query Query string to parse - * @param fields Fields to search on - * @param flags Flags describing the fields - * @param analyzer Analyzer to use - * @throws ParserException if query parsing fails - * @throws TokenMgrError if query parsing fails - */ - static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** fields, const uint8_t* flags, CL_NS(analysis)::Analyzer* analyzer); - - - - protected: - CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText); - CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop); - CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field, TCHAR* termStr); - CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive); - CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field, TCHAR* termStr); - CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr); - - /** - * A special virtual function for the MultiFieldQueryParser which can be used - * to clean up queries. Once the field name is known and the query has been - * created, its passed to this function. - * An example of this usage is to set boosts. - */ - virtual CL_NS(search)::Query* QueryAddedCallback(const TCHAR* field, CL_NS(search)::Query* query){ return query; } - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/QueryParserBase.cpp clucene-core-2.3.3.4/src/CLucene/queryParser/QueryParserBase.cpp --- clucene-core-0.9.21b/src/CLucene/queryParser/QueryParserBase.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/QueryParserBase.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,367 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "QueryParserBase.h" - -#include "CLucene/search/TermQuery.h" -#include "CLucene/search/PhraseQuery.h" -#include "CLucene/search/RangeQuery.h" -#include "CLucene/search/FuzzyQuery.h" -#include "CLucene/search/WildcardQuery.h" -#include "CLucene/search/PrefixQuery.h" - - -CL_NS_USE(search) -CL_NS_USE(util) -CL_NS_USE(analysis) -CL_NS_USE(index) - -CL_NS_DEF(queryParser) - -QueryParserBase::QueryParserBase(Analyzer* analyzer){ -//Func - Constructor -//Pre - true -//Post - instance has been created with PhraseSlop = 0 - this->analyzer = analyzer; - this->defaultOperator = OR_OPERATOR; - this->phraseSlop = 0; - this->lowercaseExpandedTerms = true; -} - -QueryParserBase::~QueryParserBase(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed -} - - -void QueryParserBase::discardEscapeChar(TCHAR* source) const{ - int len = _tcslen(source); - int j = 0; - for (int i = 0; i < len; i++) { - if (source[i] == '\\' && source[i+1] != '\0' ) { - _tcscpy(source+i,source+i+1); - len--; - } - } -} - -void QueryParserBase::AddClause(vector& clauses, int32_t conj, int32_t mods, Query* q){ -//Func - Adds the next parsed clause. -//Pre - -//Post - - - bool required, prohibited; - - // If this term is introduced by AND, make the preceding term required, - // unless it's already prohibited. - const uint32_t nPreviousClauses = clauses.size(); - if (nPreviousClauses > 0 && conj == CONJ_AND) { - BooleanClause* c = clauses[nPreviousClauses-1]; - if (!c->prohibited) - c->required = true; - } - - if (nPreviousClauses > 0 && defaultOperator == AND_OPERATOR && conj == CONJ_OR) { - // If this term is introduced by OR, make the preceding term optional, - // unless it's prohibited (that means we leave -a OR b but +a OR b-->a OR b) - // notice if the input is a OR b, first term is parsed as required; without - // this modification a OR b would parse as +a OR b - BooleanClause* c = clauses[nPreviousClauses-1]; - if (!c->prohibited){ - c->required = false; - c->prohibited = false; - } - } - - // We might have been passed a NULL query; the term might have been - // filtered away by the analyzer. - if (q == NULL) - return; - - if (defaultOperator == OR_OPERATOR) { - // We set REQUIRED if we're introduced by AND or +; PROHIBITED if - // introduced by NOT or -; make sure not to set both. - prohibited = (mods == MOD_NOT); - required = (mods == MOD_REQ); - if (conj == CONJ_AND && !prohibited) { - required = true; - } - } else { - // We set PROHIBITED if we're introduced by NOT or -; We set REQUIRED - // if not PROHIBITED and not introduced by OR - prohibited = (mods == MOD_NOT); - required = (!prohibited && conj != CONJ_OR); - } - - if ( required && prohibited ) - throwParserException( _T("Clause cannot be both required and prohibited"), ' ',0,0); - clauses.push_back(_CLNEW BooleanClause(q,true, required, prohibited)); -} - -void QueryParserBase::throwParserException(const TCHAR* message, TCHAR ch, int32_t col, int32_t line ) -{ - TCHAR msg[1024]; - _sntprintf(msg,1024,message,ch,col,line); - _CLTHROWT (CL_ERR_Parse, msg ); -} - - -Query* QueryParserBase::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){ - Query* ret = GetFieldQuery(field,queryText); - if ( ret && ret->getQueryName() == PhraseQuery::getClassName() ) - ((PhraseQuery*)ret)->setSlop(slop); - - return ret; -} - -Query* QueryParserBase::GetFieldQuery(const TCHAR* field, TCHAR* queryText){ -//Func - Returns a query for the specified field. -// Use the analyzer to get all the tokens, and then build a TermQuery, -// PhraseQuery, or nothing based on the term count -//Pre - field != NULL -// analyzer contains a valid reference to an Analyzer -// queryText != NULL and contains the query -//Post - A query instance has been returned for the specified field - - CND_PRECONDITION(field != NULL, "field is NULL"); - CND_PRECONDITION(queryText != NULL, "queryText is NULL"); - - //Instantiate a stringReader for queryText - StringReader reader(queryText); - TokenStream* source = analyzer->tokenStream(field, &reader); - CND_CONDITION(source != NULL,"source is NULL"); - - StringArrayConstWithDeletor v; - - Token t; - int positionCount = 0; - bool severalTokensAtSamePosition = false; - - //Get the tokens from the source - try{ - while (source->next(&t)){ - v.push_back(STRDUP_TtoT(t.termText())); - - if (t.getPositionIncrement() != 0) - positionCount += t.getPositionIncrement(); - else - severalTokensAtSamePosition = true; - } - }catch(CLuceneError& err){ - if ( err.number() != CL_ERR_IO ) - throw err; - } - _CLDELETE(source); - - //Check if there are any tokens retrieved - if (v.size() == 0){ - return NULL; - }else{ - if (v.size() == 1){ - Term* t = _CLNEW Term(field, v[0]); - Query* ret = _CLNEW TermQuery( t ); - _CLDECDELETE(t); - return ret; - }else{ - if (severalTokensAtSamePosition) { - if (positionCount == 1) { - // no phrase query: - BooleanQuery* q = _CLNEW BooleanQuery; //todo: disableCoord=true here, but not implemented in BooleanQuery - StringArrayConst::iterator itr = v.begin(); - while ( itr != v.end() ){ - Term* t = _CLNEW Term(field, *itr); - q->add(_CLNEW TermQuery(t),true, false,false);//should occur... - _CLDECDELETE(t); - ++itr; - } - return q; - }else { - _CLTHROWA(CL_ERR_UnsupportedOperation, "MultiPhraseQuery NOT Implemented"); - } - }else{ - PhraseQuery* q = _CLNEW PhraseQuery; - q->setSlop(phraseSlop); - - StringArrayConst::iterator itr = v.begin(); - while ( itr != v.end() ){ - const TCHAR* data = *itr; - Term* t = _CLNEW Term(field, data); - q->add(t); - _CLDECDELETE(t); - ++itr; - } - return q; - } - } - } -} - -void QueryParserBase::setLowercaseExpandedTerms(bool lowercaseExpandedTerms){ - this->lowercaseExpandedTerms = lowercaseExpandedTerms; -} -bool QueryParserBase::getLowercaseExpandedTerms() const { - return lowercaseExpandedTerms; -} -void QueryParserBase::setDefaultOperator(int oper){ - this->defaultOperator=oper; -} -int QueryParserBase::getDefaultOperator() const{ - return defaultOperator; -} - - -Query* QueryParserBase::ParseRangeQuery(const TCHAR* field, TCHAR* queryText, bool inclusive) -{ - //todo: this must be fixed, [-1--5] (-1 to -5) should yield a result, but won't parse properly - //because it uses an analyser, should split it up differently... - - // Use the analyzer to get all the tokens. There should be 1 or 2. - StringReader reader(queryText); - TokenStream* source = analyzer->tokenStream(field, &reader); - - TCHAR* terms[2]; - terms[0]=NULL;terms[1]=NULL; - Token t; - bool tret=true; - bool from=true; - while(tret) - { - try{ - tret = source->next(&t); - }catch (CLuceneError& err){ - if ( err.number() == CL_ERR_IO ) - tret=false; - else - throw err; - } - if (tret) - { - if ( !from && _tcscmp(t.termText(),_T("TO"))==0 ) - continue; - - - TCHAR* tmp = STRDUP_TtoT(t.termText()); - discardEscapeChar(tmp); - terms[from? 0 : 1] = tmp; - - if (from) - from = false; - else - break; - } - } - Query* ret = GetRangeQuery(field, terms[0], terms[1],inclusive); - _CLDELETE_CARRAY(terms[0]); - _CLDELETE_CARRAY(terms[1]); - _CLDELETE(source); - - return ret; -} - -Query* QueryParserBase::GetPrefixQuery(const TCHAR* field, TCHAR* termStr){ -//Pre - field != NULL and field contains the name of the field that the query will use -// termStr != NULL and is the token to use for building term for the query -// (WITH or WITHOUT a trailing '*' character!) -//Post - A PrefixQuery instance has been returned - - CND_PRECONDITION(field != NULL,"field is NULL"); - CND_PRECONDITION(termStr != NULL,"termStr is NULL"); - - if ( lowercaseExpandedTerms ) - _tcslwr(termStr); - - Term* t = _CLNEW Term(field, termStr); - CND_CONDITION(t != NULL,"Could not allocate memory for term t"); - - Query *q = _CLNEW PrefixQuery(t); - CND_CONDITION(q != NULL,"Could not allocate memory for PrefixQuery q"); - - _CLDECDELETE(t); - return q; -} - -Query* QueryParserBase::GetFuzzyQuery(const TCHAR* field, TCHAR* termStr){ -//Func - Factory method for generating a query (similar to getPrefixQuery}). Called when parser parses -// an input term token that has the fuzzy suffix (~) appended. -//Pre - field != NULL and field contains the name of the field that the query will use -// termStr != NULL and is the token to use for building term for the query -// (WITH or WITHOUT a trailing '*' character!) -//Post - A FuzzyQuery instance has been returned - - CND_PRECONDITION(field != NULL,"field is NULL"); - CND_PRECONDITION(termStr != NULL,"termStr is NULL"); - - if ( lowercaseExpandedTerms ) - _tcslwr(termStr); - - Term* t = _CLNEW Term(field, termStr); - CND_CONDITION(t != NULL,"Could not allocate memory for term t"); - - Query *q = _CLNEW FuzzyQuery(t); - CND_CONDITION(q != NULL,"Could not allocate memory for FuzzyQuery q"); - - _CLDECDELETE(t); - return q; -} - - -Query* QueryParserBase::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){ - CND_PRECONDITION(field != NULL,"field is NULL"); - CND_PRECONDITION(termStr != NULL,"termStr is NULL"); - - if ( lowercaseExpandedTerms ) - _tcslwr(termStr); - - Term* t = _CLNEW Term(field, termStr); - CND_CONDITION(t != NULL,"Could not allocate memory for term t"); - Query* q = _CLNEW WildcardQuery(t); - _CLDECDELETE(t); - - return q; -} - -Query* QueryParserBase::GetBooleanQuery(std::vector& clauses){ - if ( clauses.size() == 0 ) - return NULL; - - BooleanQuery* query = _CLNEW BooleanQuery(); - //Condition check to see if query has been allocated properly - CND_CONDITION(query != NULL, "No memory could be allocated for query"); - - //iterate through all the clauses - for( uint32_t i=0;iadd(clauses[i]); - } - return query; -} - - -CL_NS(search)::Query* QueryParserBase::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){ - //todo: does jlucene handle rangequeries differntly? if we are using - //a certain type of analyser, the terms may be filtered out, which - //is not necessarily what we want. - if (lowercaseExpandedTerms) { - _tcslwr(part1); - _tcslwr(part2); - } - //todo: should see if we can parse the strings as dates... currently we leave that up to the end-developer... - Term* t1 = _CLNEW Term(field,part1); - Term* t2 = _CLNEW Term(field,part2); - Query* ret = _CLNEW RangeQuery(t1, t2, inclusive); - _CLDECDELETE(t1); - _CLDECDELETE(t2); - - return ret; -} - - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/QueryParserBase.h clucene-core-2.3.3.4/src/CLucene/queryParser/QueryParserBase.h --- clucene-core-0.9.21b/src/CLucene/queryParser/QueryParserBase.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/QueryParserBase.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,204 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_QueryParserBase_ -#define _lucene_queryParser_QueryParserBase_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidList.h" -#include "CLucene/search/BooleanClause.h" -#include "CLucene/analysis/Analyzers.h" -#include "QueryToken.h" - -CL_NS_DEF(queryParser) - - /** - * Contains default implementations used by QueryParser. - * You can override any of these to provide a customised QueryParser. - */ - class QueryParserBase:LUCENE_BASE - { - protected: - /* The actual operator the parser uses to combine query terms */ - int defaultOperator; - int32_t phraseSlop; - - bool lowercaseExpandedTerms; - - LUCENE_STATIC_CONSTANT(int, CONJ_NONE=0); - LUCENE_STATIC_CONSTANT(int, CONJ_AND=1); - LUCENE_STATIC_CONSTANT(int, CONJ_OR=2); - - LUCENE_STATIC_CONSTANT(int, MOD_NONE=0); - LUCENE_STATIC_CONSTANT(int, MOD_NOT=10); - LUCENE_STATIC_CONSTANT(int, MOD_REQ=11); - - CL_NS(analysis)::Analyzer* analyzer; - - public: - QueryParserBase(CL_NS(analysis)::Analyzer* analyzer); - ~QueryParserBase(); - - /** - * Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically - * lower-cased or not. Default is true. - */ - void setLowercaseExpandedTerms(bool lowercaseExpandedTerms); - - /** - * @see #setLowercaseExpandedTerms(boolean) - */ - bool getLowercaseExpandedTerms() const; - - //values used for setOperator - LUCENE_STATIC_CONSTANT(int, OR_OPERATOR=0); - LUCENE_STATIC_CONSTANT(int, AND_OPERATOR=1); - - /** - * Sets the boolean operator of the QueryParser. - * In default mode (OR_OPERATOR) terms without any modifiers - * are considered optional: for example capital of Hungary is equal to - * capital OR of OR Hungary.
- * In AND_OPERATOR mode terms are considered to be in conjuction: the - * above mentioned query is parsed as capital AND of AND Hungary - */ - void setDefaultOperator(int oper); - /** - * Gets implicit operator setting, which will be either AND_OPERATOR - * or OR_OPERATOR. - */ - int getDefaultOperator() const; - - //public so that the lexer can call this - virtual void throwParserException(const TCHAR* message, TCHAR ch, int32_t col, int32_t line ); - - /** - * Sets the default slop for phrases. If zero, then exact phrase matches - * are required. Default value is zero. - */ - void setPhraseSlop(int phraseSlop) { this->phraseSlop = phraseSlop; } - - /** - * Gets the default slop for phrases. - */ - int getPhraseSlop() { return phraseSlop; } - - protected: - - /** - * Removes the escaped characters - */ - void discardEscapeChar(TCHAR* token) const; - - //Analyzes the expanded term termStr with the StandardFilter and the LowerCaseFilter. - TCHAR* AnalyzeExpandedTerm(const TCHAR* field, TCHAR* termStr); - - // Adds the next parsed clause. - virtual void AddClause(std::vector& clauses, int32_t conj, int32_t mods, CL_NS(search)::Query* q); - - /** - * Returns a termquery, phrasequery for the specified field. - * Note: this is only a partial implementation, since MultiPhraseQuery is not implemented yet - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText); - - /** - * Delegates to GetFieldQuery(string, string), and adds slop onto phrasequery. - * Can be used to remove slop functionality - */ - virtual CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop); - - /** - * Factory method for generating a query (similar to - * {@link #GetWildcardQuery}). Called when parser parses an input term - * token that uses prefix notation; that is, contains a single '*' wildcard - * character as its last character. Since this is a special case - * of generic wildcard term, and such a query can be optimized easily, - * this usually results in a different query object. - *

- * Depending on settings, a prefix term may be lower-cased - * automatically. It will not go through the default Analyzer, - * however, since normal Analyzers are unlikely to work properly - * with wildcard templates. - *

- * Can be overridden by extending classes, to provide custom handling for - * wild card queries, which may be necessary due to missing analyzer calls. - * - * @param field Name of the field query will use. - * @param termStr Term token to use for building term for the query - * (without trailing '*' character!) - * - * @return Resulting {@link Query} built for the term - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field, TCHAR* termStr); - - /** - * Factory method for generating a query. Called when parser - * parses an input term token that contains one or more wildcard - * characters (? and *), but is not a prefix term token (one - * that has just a single * character at the end) - *

- * Depending on settings, prefix term may be lower-cased - * automatically. It will not go through the default Analyzer, - * however, since normal Analyzers are unlikely to work properly - * with wildcard templates. - *

- * Can be overridden by extending classes, to provide custom handling for - * wildcard queries, which may be necessary due to missing analyzer calls. - * - * @param field Name of the field query will use. - * @param termStr Term token that contains one or more wild card - * characters (? or *), but is not simple prefix term - * - * @return Resulting {@link Query} built for the term - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr); - - /** - * Factory method for generating a query (similar to - * {@link #GetWildcardQuery}). Called when parser parses - * an input term token that has the fuzzy suffix (~) appended. - * - * @param field Name of the field query will use. - * @param termStr Term token to use for building term for the query - * - * @return Resulting {@link Query} built for the term - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field, TCHAR* termStr); - - /** - * Factory method for generating query, given a set of clauses. - * By default creates a boolean query composed of clauses passed in. - * - * Can be overridden by extending classes, to modify query being - * returned. - * - * @param clauses Vector that contains {@link BooleanClause} instances - * to join. - * - * @return Resulting {@link Query} object. - * return NULL to disallow - * - * Memory: clauses must all be cleaned up by this function. - */ - virtual CL_NS(search)::Query* GetBooleanQuery(std::vector& clauses); - - /** - * return NULL to disallow - */ - virtual CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive); - virtual CL_NS(search)::Query* ParseRangeQuery(const TCHAR* field, TCHAR* str, bool inclusive); - - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/QueryParser.cpp clucene-core-2.3.3.4/src/CLucene/queryParser/QueryParser.cpp --- clucene-core-0.9.21b/src/CLucene/queryParser/QueryParser.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/QueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,507 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "QueryParser.h" - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/util/Reader.h" -#include "CLucene/search/SearchHeader.h" -#include "CLucene/index/Term.h" - -#include "TokenList.h" -#include "QueryToken.h" -#include "QueryParserBase.h" -#include "Lexer.h" - -CL_NS_USE(util) -CL_NS_USE(index) -CL_NS_USE(analysis) -CL_NS_USE(search) - -CL_NS_DEF(queryParser) - - QueryParser::QueryParser(const TCHAR* _field, Analyzer* _analyzer) : QueryParserBase(_analyzer){ - //Func - Constructor. - // Instantiates a QueryParser for the named field _field - //Pre - _field != NULL - //Post - An instance has been created - - if ( _field ) - field = STRDUP_TtoT(_field); - else - field = NULL; - tokens = NULL; - lowercaseExpandedTerms = true; - } - - QueryParser::~QueryParser() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDELETE_CARRAY(field); - } - - //static - Query* QueryParser::parse(const TCHAR* query, const TCHAR* field, Analyzer* analyzer){ - //Func - Returns a new instance of the Query class with a specified query, field and - // analyzer values. - //Pre - query != NULL and holds the query to parse - // field != NULL and holds the default field for query terms - // analyzer holds a valid reference to an Analyzer and is used to - // find terms in the query text - //Post - query has been parsed and an instance of Query has been returned - - CND_PRECONDITION(query != NULL, "query is NULL"); - CND_PRECONDITION(field != NULL, "field is NULL"); - - QueryParser parser(field, analyzer); - return parser.parse(query); - } - - Query* QueryParser::parse(const TCHAR* query){ - //Func - Returns a parsed Query instance - //Pre - query != NULL and contains the query value to be parsed - //Post - Returns a parsed Query Instance - - CND_PRECONDITION(query != NULL, "query is NULL"); - - //Instantie a Stringer that can read the query string - Reader* r = _CLNEW StringReader(query); - - //Check to see if r has been created properly - CND_CONDITION(r != NULL, "Could not allocate memory for StringReader r"); - - //Pointer for the return value - Query* ret = NULL; - - try{ - //Parse the query managed by the StringReader R and return a parsed Query instance - //into ret - ret = parse(r); - }_CLFINALLY ( - _CLDELETE(r); - ); - - return ret; - } - - Query* QueryParser::parse(Reader* reader){ - //Func - Returns a parsed Query instance - //Pre - reader contains a valid reference to a Reader and manages the query string - //Post - A parsed Query instance has been returned or - - //instantiate the TokenList tokens - TokenList _tokens; - this->tokens = &_tokens; - - //Instantiate a lexer - Lexer lexer(this, reader); - - //tokens = lexer.Lex(); - //Lex the tokens - lexer.Lex(tokens); - - //Peek to the first token and check if is an EOF - if (tokens->peek()->Type == QueryToken::EOF_){ - // The query string failed to yield any tokens. We discard the - // TokenList tokens and raise an exceptioin. - QueryToken* token = this->tokens->extract(); - _CLDELETE(token); - _CLTHROWA(CL_ERR_Parse, "No query given."); - } - - //Return the parsed Query instance - Query* ret = MatchQuery(field); - this->tokens = NULL; - return ret; - } - - int32_t QueryParser::MatchConjunction(){ - //Func - matches for CONJUNCTION - // CONJUNCTION ::= | - //Pre - tokens != NULL - //Post - if the first token is an AND or an OR then - // the token is extracted and deleted and CONJ_AND or CONJ_OR is returned - // otherwise CONJ_NONE is returned - - CND_PRECONDITION(tokens != NULL, "tokens is NULL"); - - switch(tokens->peek()->Type){ - case QueryToken::AND_ : - //Delete the first token of tokenlist - ExtractAndDeleteToken(); - return CONJ_AND; - case QueryToken::OR : - //Delete the first token of tokenlist - ExtractAndDeleteToken(); - return CONJ_OR; - default : - return CONJ_NONE; - } - } - - int32_t QueryParser::MatchModifier(){ - //Func - matches for MODIFIER - // MODIFIER ::= | | - //Pre - tokens != NULL - //Post - if the first token is a PLUS the token is extracted and deleted and MOD_REQ is returned - // if the first token is a MINUS or NOT the token is extracted and deleted and MOD_NOT is returned - // otherwise MOD_NONE is returned - CND_PRECONDITION(tokens != NULL, "tokens is NULL"); - - switch(tokens->peek()->Type){ - case QueryToken::PLUS : - //Delete the first token of tokenlist - ExtractAndDeleteToken(); - return MOD_REQ; - case QueryToken::MINUS : - case QueryToken::NOT : - //Delete the first token of tokenlist - ExtractAndDeleteToken(); - return MOD_NOT; - default : - return MOD_NONE; - } - } - - Query* QueryParser::MatchQuery(const TCHAR* field){ - //Func - matches for QUERY - // QUERY ::= [MODIFIER] QueryParser::CLAUSE ( [MODIFIER] CLAUSE)* - //Pre - field != NULL - //Post - - - CND_PRECONDITION(tokens != NULL, "tokens is NULL"); - - vector clauses; - - Query* q = NULL; - - int32_t mods = MOD_NONE; - int32_t conj = CONJ_NONE; - - //match for MODIFIER - mods = MatchModifier(); - - //match for CLAUSE - q = MatchClause(field); - AddClause(clauses, CONJ_NONE, mods, q); - - // match for CLAUSE* - while(true){ - QueryToken* p = tokens->peek(); - if(p->Type == QueryToken::EOF_){ - QueryToken* qt = MatchQueryToken(QueryToken::EOF_); - _CLDELETE(qt); - break; - } - - if(p->Type == QueryToken::RPAREN){ - //MatchQueryToken(QueryToken::RPAREN); - break; - } - - //match for a conjuction (AND OR NOT) - conj = MatchConjunction(); - //match for a modifier - mods = MatchModifier(); - - q = MatchClause(field); - if ( q != NULL ) - AddClause(clauses, conj, mods, q); - } - - // finalize query - if(clauses.size() == 1){ //bvk: removed this && firstQuery != NULL - BooleanClause* c = clauses[0]; - Query* q = c->query; - - //Condition check to be sure clauses[0] is valid - CND_CONDITION(c != NULL, "c is NULL"); - - //Tell the boolean clause not to delete its query - c->deleteQuery=false; - //Clear the clauses list - clauses.clear(); - _CLDELETE(c); - - return q; - }else{ - return GetBooleanQuery(clauses); - } - } - - Query* QueryParser::MatchClause(const TCHAR* field){ - //Func - matches for CLAUSE - // CLAUSE ::= [TERM ] ( TERM | ( QUERY )) - //Pre - field != NULL - //Post - - - Query* q = NULL; - const TCHAR* sfield = field; - bool delField = false; - - QueryToken *DelToken = NULL; - - //match for [TERM ] - QueryToken* term = tokens->extract(); - if(term->Type == QueryToken::TERM && tokens->peek()->Type == QueryToken::COLON){ - DelToken = MatchQueryToken(QueryToken::COLON); - - CND_CONDITION(DelToken != NULL,"DelToken is NULL"); - _CLDELETE(DelToken); - - TCHAR* tmp = STRDUP_TtoT(term->Value); - discardEscapeChar(tmp); - delField = true; - sfield = tmp; - _CLDELETE(term); - }else{ - tokens->push(term); - term = NULL; - } - - // match for - // TERM | ( QUERY ) - if(tokens->peek()->Type == QueryToken::LPAREN){ - DelToken = MatchQueryToken(QueryToken::LPAREN); - - CND_CONDITION(DelToken != NULL,"DelToken is NULL"); - _CLDELETE(DelToken); - - q = MatchQuery(sfield); - //DSR:2004.11.01: - //If exception is thrown while trying to match trailing parenthesis, - //need to prevent q from leaking. - - try{ - DelToken = MatchQueryToken(QueryToken::RPAREN); - - CND_CONDITION(DelToken != NULL,"DelToken is NULL"); - _CLDELETE(DelToken); - - }catch(...) { - _CLDELETE(q); - throw; - } - }else{ - q = MatchTerm(sfield); - } - - if ( delField ) - _CLDELETE_CARRAY(sfield); - return q; - } - - - Query* QueryParser::MatchTerm(const TCHAR* field){ - //Func - matches for TERM - // TERM ::= TERM | PREFIXTERM | WILDTERM | NUMBER - // [ ] [ []] - // | ( | ) [ ] - // | [SLOP] [ ] - //Pre - field != NULL - //Post - - - QueryToken* term = NULL; - QueryToken* slop = NULL; - QueryToken* boost = NULL; - - bool prefix = false; - bool wildcard = false; - bool fuzzy = false; - bool rangein = false; - Query* q = NULL; - - term = tokens->extract(); - QueryToken* DelToken = NULL; //Token that is about to be deleted - - switch(term->Type){ - case QueryToken::TERM: - case QueryToken::NUMBER: - case QueryToken::PREFIXTERM: - case QueryToken::WILDTERM: - { //start case - //Check if type of QueryToken term is a prefix term - if(term->Type == QueryToken::PREFIXTERM){ - prefix = true; - } - //Check if type of QueryToken term is a wildcard term - if(term->Type == QueryToken::WILDTERM){ - wildcard = true; - } - //Peek to see if the type of the next token is fuzzy term - if(tokens->peek()->Type == QueryToken::FUZZY){ - DelToken = MatchQueryToken(QueryToken::FUZZY); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - fuzzy = true; - } - if(tokens->peek()->Type == QueryToken::CARAT){ - DelToken = MatchQueryToken(QueryToken::CARAT); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - boost = MatchQueryToken(QueryToken::NUMBER); - - if(tokens->peek()->Type == QueryToken::FUZZY){ - DelToken = MatchQueryToken(QueryToken::FUZZY); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - fuzzy = true; - } - } //end if type==CARAT - - discardEscapeChar(term->Value); //clean up - if(wildcard){ - q = GetWildcardQuery(field,term->Value); - break; - }else if(prefix){ - //Create a PrefixQuery - term->Value[_tcslen(term->Value)-1] = 0; //discard the * - q = GetPrefixQuery(field,term->Value); - break; - }else if(fuzzy){ - //Create a FuzzyQuery - - //Check if the last char is a ~ - if(term->Value[_tcslen(term->Value)-1] == '~'){ - //remove the ~ - term->Value[_tcslen(term->Value)-1] = '\0'; - } - - q = GetFuzzyQuery(field,term->Value); - break; - }else{ - q = GetFieldQuery(field, term->Value); - break; - } - } - - - case QueryToken::RANGEIN: - case QueryToken::RANGEEX:{ - if(term->Type == QueryToken::RANGEIN){ - rangein = true; - } - - if(tokens->peek()->Type == QueryToken::CARAT){ - DelToken = MatchQueryToken(QueryToken::CARAT); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - boost = MatchQueryToken(QueryToken::NUMBER); - } - - TCHAR* noBrackets = term->Value + 1; - noBrackets[_tcslen(noBrackets)-1] = 0; - q = ParseRangeQuery(field, noBrackets, rangein); - break; - } - - - case QueryToken::QUOTED:{ - if(tokens->peek()->Type == QueryToken::SLOP){ - slop = MatchQueryToken(QueryToken::SLOP); - } - - if(tokens->peek()->Type == QueryToken::CARAT){ - DelToken = MatchQueryToken(QueryToken::CARAT); - - CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); - _CLDELETE(DelToken); - - boost = MatchQueryToken(QueryToken::NUMBER); - } - - //remove the quotes - TCHAR* quotedValue = term->Value+1; - quotedValue[_tcslen(quotedValue)-1] = '\0'; - - int32_t islop = phraseSlop; - if(slop != NULL ){ - try { - TCHAR* end; //todo: should parse using float... - islop = (int32_t)_tcstoi64(slop->Value+1, &end, 10); - }catch(...){ - //ignored - } - } - - q = GetFieldQuery(field, quotedValue, islop); - _CLDELETE(slop); - } - } // end of switch - - _CLDELETE(term); - - - if( q!=NULL && boost != NULL ){ - float_t f = 1.0F; - try { - TCHAR* tmp; - f = _tcstod(boost->Value, &tmp); - }catch(...){ - //ignored - } - _CLDELETE(boost); - - q->setBoost( f); - } - - return q; - } - - QueryToken* QueryParser::MatchQueryToken(QueryToken::Types expectedType){ - //Func - matches for QueryToken of the specified type and returns it - // otherwise Exception throws - //Pre - tokens != NULL - //Post - - - CND_PRECONDITION(tokens != NULL,"tokens is NULL"); - - if(tokens->count() == 0){ - throwParserException(_T("Error: Unexpected end of program"),' ',0,0); - } - - //Extract a token form the TokenList tokens - QueryToken* t = tokens->extract(); - //Check if the type of the token t matches the expectedType - if (expectedType != t->Type){ - TCHAR buf[200]; - _sntprintf(buf,200,_T("Error: Unexpected QueryToken: %d, expected: %d"),t->Type,expectedType); - _CLDELETE(t); - throwParserException(buf,' ',0,0); - } - - //Return the matched token - return t; - } - - void QueryParser::ExtractAndDeleteToken(void){ - //Func - Extracts the first token from the Tokenlist tokenlist - // and destroys it - //Pre - true - //Post - The first token has been extracted and destroyed - - CND_PRECONDITION(tokens != NULL, "tokens is NULL"); - - //Extract the token from the TokenList tokens - QueryToken* t = tokens->extract(); - //Condition Check Token may not be NULL - CND_CONDITION(t != NULL, "Token is NULL"); - //Delete Token - _CLDELETE(t); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/QueryParser.h clucene-core-2.3.3.4/src/CLucene/queryParser/QueryParser.h --- clucene-core-0.9.21b/src/CLucene/queryParser/QueryParser.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/QueryParser.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_QueryParser_ -#define _lucene_queryParser_QueryParser_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/analysis/AnalysisHeader.h" -#include "CLucene/util/Reader.h" -#include "CLucene/search/SearchHeader.h" -#include "CLucene/index/Term.h" - -#include "TokenList.h" -#include "QueryToken.h" -#include "QueryParserBase.h" -#include "Lexer.h" - -CL_NS_DEF(queryParser) - -/** -* @brief CLucene's default query parser. -* -*

It's a query parser. -* The only method that clients should need to call is Parse(). -* The syntax for query const TCHAR*s is as follows: -* A Query is a series of clauses. A clause may be prefixed by:

-*
    -*
  • a plus (+) or a minus (-) sign, indicating that the -* clause is required or prohibited respectively; or
  • -*
  • a term followed by a colon, indicating the field to be searched. -* This enables one to construct queries which search multiple fields.
  • -*
-*

-* A clause may be either:

-*
    -*
  • a term, indicating all the documents that contain this term; or
  • -*
  • a nested query, enclosed in parentheses. Note that this may be -* used with a +/- prefix to require any of a set of terms.
  • -*
-*

-* Thus, in BNF, the query grammar is:

-* -* Query ::= ( Clause )* -* Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" ) -* -*

-* Examples of appropriately formatted queries can be found in the test cases. -*

-*/ -class QueryParser : public QueryParserBase -{ -private: - const TCHAR* field; - TokenList* tokens; -public: - /** - * Initializes a new instance of the QueryParser class with a specified field and - * analyzer values. - */ - QueryParser(const TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); - ~QueryParser(); - - /** - * Returns a parsed Query instance. - * Note: this call is not threadsafe, either use a seperate QueryParser for each thread, or use a thread lock - * The query value to be parsed. - * A parsed Query instance. - */ - virtual CL_NS(search)::Query* parse(const TCHAR* query); - - /** - * Returns a parsed Query instance. - * Note: this call is not threadsafe, either use a seperate QueryParser for each thread, or use a thread lock - * The TextReader value to be parsed. - * A parsed Query instance. - */ - virtual CL_NS(search)::Query* parse(CL_NS(util)::Reader* reader); - - /** - * Returns a new instance of the Query class with a specified query, field and - * analyzer values. - */ - static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); - - CL_NS(analysis)::Analyzer* getAnalyzer() { return analyzer; } - - /** - * @return Returns the field. - */ - const TCHAR* getField() { return field; } - - //deprecated functions - _CL_DEPRECATED( setLowercaseExpandedTerms ) void setLowercaseWildcardTerms(bool lowercaseWildcardTerms){ setLowercaseExpandedTerms(lowercaseWildcardTerms); } - _CL_DEPRECATED( getLowercaseExpandedTerms ) bool getLowercaseWildcardTerms() const { return getLowercaseExpandedTerms(); } -protected: - //these functions may be defined under certain compilation conditions. - //note that this functionality is deprecated, you should create your own queryparser - //if you want to remove this functionality...it will be removed... be warned! -#ifdef NO_PREFIX_QUERY - virtual CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field,const TCHAR* termStr){ return NULL; } -#endif -#ifdef NO_FUZZY_QUERY - virtual CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field,const TCHAR* termStr){ return NULL; } -#endif -#ifdef NO_RANGE_QUERY - virtual CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, const TCHAR* part1, const TCHAR* part2, bool inclusive) { return NULL; } -#endif -#ifdef NO_WILDCARD_QUERY - virtual CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr) { return NULL; } -#endif -private: - /** - * matches for CONJUNCTION - * CONJUNCTION ::= | - */ - int32_t MatchConjunction(); - - /** - * matches for MODIFIER - * MODIFIER ::= | | - */ - int32_t MatchModifier(); - - /** - * matches for QUERY - * QUERY ::= [MODIFIER] CLAUSE ( [MODIFIER] CLAUSE)* - */ - CL_NS(search)::Query* MatchQuery(const TCHAR* field); - - /** - * matches for CLAUSE - * CLAUSE ::= [TERM ] ( TERM | ( QUERY )) - */ - CL_NS(search)::Query* MatchClause(const TCHAR* field); - - /** - * matches for TERM - * TERM ::= TERM | PREFIXTERM | WILDTERM | NUMBER - * [ ] [ []] - * - * | ( | ) [ ] - * | [SLOP] [ ] - */ - CL_NS(search)::Query* MatchTerm(const TCHAR* field); - - /** - * matches for QueryToken of the specified type and returns it - * otherwise Exception throws - */ - QueryToken* MatchQueryToken(QueryToken::Types expectedType); - - /** - * Extracts the first token from the Tokenlist tokenlist - * and destroys it - */ - void ExtractAndDeleteToken(void); -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/QueryToken.cpp clucene-core-2.3.3.4/src/CLucene/queryParser/QueryToken.cpp --- clucene-core-0.9.21b/src/CLucene/queryParser/QueryToken.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/QueryToken.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "QueryToken.h" - -CL_NS_DEF(queryParser) - - -QueryToken::QueryToken(): - Value(NULL) -{ - set(UNKNOWN_); -} -QueryToken::QueryToken(TCHAR* value, const int32_t start, const int32_t end, const QueryToken::Types type): - Value(NULL) -{ - set(value,start,end,type); -} - -QueryToken::~QueryToken(){ -//Func - Destructor -//Pre - true -//Post - Instance has been destroyed - - #ifndef LUCENE_TOKEN_WORD_LENGTH - _CLDELETE_CARRAY( Value ); - #endif -} - -// Initializes a new instance of the Token class LUCENE_EXPORT. -// -QueryToken::QueryToken(TCHAR* value, const QueryToken::Types type): - Value(NULL) -{ - set(value,type); -} - -// Initializes a new instance of the Token class LUCENE_EXPORT. -// -QueryToken::QueryToken(QueryToken::Types type): - Value(NULL) -{ - set(type); -} - - -void QueryToken::set(TCHAR* value, const Types type){ - set(value,0,-1,type); -} -void QueryToken::set(TCHAR* value, const int32_t start, const int32_t end, const Types type){ - #ifndef LUCENE_TOKEN_WORD_LENGTH - _CLDELETE_CARRAY(Value); - Value = STRDUP_TtoT(value); - #else - _tcsncpy(Value,value,LUCENE_TOKEN_WORD_LENGTH); - Value[LUCENE_TOKEN_WORD_LENGTH]; - #endif - this->Start = start; - this->End = end; - this->Type = type; - - if ( this->End < 0 ) - this->End = _tcslen(Value); -} -void QueryToken::set(Types type){ - set(LUCENE_BLANK_STRING,0,0,type); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/QueryToken.h clucene-core-2.3.3.4/src/CLucene/queryParser/QueryToken.h --- clucene-core-0.9.21b/src/CLucene/queryParser/QueryToken.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/QueryToken.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_QueryToken_ -#define _lucene_queryParser_QueryToken_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "QueryParserBase.h" - -CL_NS_DEF(queryParser) - - // Token class that used by QueryParser. - class QueryToken:LUCENE_BASE - { - public: - enum Types - { - AND_, - OR, - NOT, - PLUS, - MINUS, - LPAREN, - RPAREN, - COLON, - CARAT, - QUOTED, - TERM, - SLOP, - FUZZY, - PREFIXTERM, - WILDTERM, - RANGEIN, - RANGEEX, - NUMBER, - EOF_, - UNKNOWN_ - }; - - - #ifdef LUCENE_TOKEN_WORD_LENGTH - TCHAR Value[LUCENE_TOKEN_WORD_LENGTH+1]; - #else - TCHAR* Value; - #endif - - int32_t Start; - int32_t End; - QueryToken::Types Type; - - // Initializes a new instance of the Token class. - QueryToken(TCHAR* value, const int32_t start, const int32_t end, const Types type); - - // Initializes a new instance of the Token class. - QueryToken(TCHAR* value, const Types type); - - // Initializes a new instance of the Token class. - QueryToken(Types type); - - // Initializes an empty instance of the Token class. - QueryToken(); - - ~QueryToken(); - - void set(TCHAR* value, const int32_t start, const int32_t end, const Types type); - void set(TCHAR* value, const Types type); - void set(Types type); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/TokenList.cpp clucene-core-2.3.3.4/src/CLucene/queryParser/TokenList.cpp --- clucene-core-0.9.21b/src/CLucene/queryParser/TokenList.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/TokenList.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TokenList.h" - -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/VoidList.h" -#include "QueryToken.h" - -CL_NS_DEF(queryParser) - - TokenList::TokenList(){ - //Func - Constructor - //Pre - true - //Post - Instance has been created - } - - TokenList::~TokenList(){ - //Func - Destructor - //Pre - true - //Post - The tokenlist has been destroyed - - tokens.clear(); - } - - void TokenList::add(QueryToken* token){ - //Func - Adds a QueryToken token to the TokenList - //Pre - token != NULL - //Post - token has been added to the token list - - CND_PRECONDITION(token != NULL, "token != NULL"); - - tokens.insert(tokens.begin(),token); - } - - void TokenList::push(QueryToken* token){ - //Func - - //Pre - token != NULL - //Post - - - CND_PRECONDITION(token != NULL, "token is NULL"); - - tokens.push_back(token); - } - - QueryToken* TokenList::peek() { - /* DSR:2004.11.01: Reverted my previous (circa April 2004) fix (which - ** raised an exception if Peek was called when there were no tokens) in - ** favor of returning the EOF token. This solution is much better - ** integrated with the rest of the code in the queryParser subsystem. */ - size_t nTokens = tokens.size(); - if (nTokens == 0) { - push(_CLNEW QueryToken(QueryToken::EOF_)); - nTokens++; - } - return tokens[nTokens-1]; - } - - QueryToken* TokenList::extract(){ - //Func - Extract token from the TokenList - //Pre - true - //Post - Retracted token has been returned - - QueryToken* token = peek(); - //Retract the current peeked token - tokens.delete_back(); - - return token; - } - - int32_t TokenList::count() const - { - return tokens.size(); - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/queryParser/TokenList.h clucene-core-2.3.3.4/src/CLucene/queryParser/TokenList.h --- clucene-core-0.9.21b/src/CLucene/queryParser/TokenList.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/queryParser/TokenList.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_queryParser_TokenList_ -#define _lucene_queryParser_TokenList_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidList.h" -#include "QueryToken.h" -CL_NS_DEF(queryParser) - - // Represents a list of the tokens. - class TokenList:LUCENE_BASE - { - private: - CL_NS(util)::CLVector tokens; //todo:,CL_NS(util)::Deletor::Object - public: - TokenList(); - ~TokenList(); - - void add(QueryToken* token); - - void push(QueryToken* token); - - QueryToken* peek(); - - QueryToken* extract(); - - int32_t count() const; - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/BooleanClause.h clucene-core-2.3.3.4/src/CLucene/search/BooleanClause.h --- clucene-core-0.9.21b/src/CLucene/search/BooleanClause.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/BooleanClause.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_BooleanClause_ -#define _lucene_search_BooleanClause_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif -#include "SearchHeader.h" - -CL_NS_DEF(search) - // A clause in a BooleanQuery. - class BooleanClause:LUCENE_BASE { - public: - class Compare:public CL_NS_STD(binary_function) - { - public: - bool operator()( const BooleanClause* val1, const BooleanClause* val2 ) const{ - return val1->equals(val2); - } - }; - - // The query whose matching documents are combined by the boolean query. - Query* query; - - int32_t getClauseCount(); - - // If true, documents documents which do not - // match this sub-query will not match the boolean query. - bool required; - - // If true, documents documents which do - // match this sub-query will not match the boolean query. - bool prohibited; - - bool deleteQuery; - - // Constructs a BooleanClause with query q, required - // r and prohibited p. - BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p): - query(q), - required(req), - prohibited(p), - deleteQuery(DeleteQuery) - { - } - - BooleanClause(const BooleanClause& clone): -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) -#elif defined(LUCENE_ENABLE_REFCOUNT) -#else - LuceneVoidBase(), -#endif - query(clone.query->clone()), - required(clone.required), - prohibited(clone.prohibited), - deleteQuery(true) - { - } - - BooleanClause* clone() const{ - BooleanClause* ret = _CLNEW BooleanClause(*this); - return ret; - } - - ~BooleanClause(){ - if ( deleteQuery ) - _CLDELETE( query ); - } - - /** Returns true iff o is equal to this. */ - bool equals(const BooleanClause* other) const { - return this->query->equals(other->query) - && (this->required == other->required) - && (this->prohibited == other->prohibited); - } - - size_t hashCode() const{ - return query->hashCode() ^ (this->required?1:0) ^ (this->prohibited?2:0); - } - }; - - -CL_NS_END -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/search/BooleanQuery.cpp clucene-core-2.3.3.4/src/CLucene/search/BooleanQuery.cpp --- clucene-core-0.9.21b/src/CLucene/search/BooleanQuery.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/BooleanQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,363 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "BooleanQuery.h" - -#include "BooleanClause.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" -#include "CLucene/util/Arrays.h" -#include "SearchHeader.h" -#include "BooleanScorer.h" -#include "Scorer.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - BooleanQuery::BooleanQuery(): - clauses(true) - { - } - - BooleanQuery::BooleanQuery(const BooleanQuery& clone): - Query(clone) - { - for ( uint32_t i=0;iclone(); - clause->deleteQuery=true; - add(clause); - } - } - - BooleanQuery::~BooleanQuery(){ - clauses.clear(); - } - - size_t BooleanQuery::hashCode() const { - //todo: do cachedHashCode, and invalidate on add/remove clause - size_t ret = 0; - for (uint32_t i = 0 ; i < clauses.size(); i++) { - BooleanClause* c = clauses[i]; - ret = 31 * ret + c->hashCode(); - } - ret = ret ^ Similarity::floatToByte(getBoost()); - return ret; - } - - const TCHAR* BooleanQuery::getQueryName() const{ - return getClassName(); - } - const TCHAR* BooleanQuery::getClassName(){ - return _T("BooleanQuery"); - } - - /** - * Default value is 1024. Use org.apache.lucene.maxClauseCount - * system property to override. - */ - size_t BooleanQuery::maxClauseCount = LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT; - size_t BooleanQuery::getMaxClauseCount(){ - return maxClauseCount; - } - - void BooleanQuery::setMaxClauseCount(size_t maxClauseCount){ - BooleanQuery::maxClauseCount = maxClauseCount; - } - - void BooleanQuery::add(Query* query, const bool deleteQuery, const bool required, const bool prohibited) { - BooleanClause* bc = _CLNEW BooleanClause(query,deleteQuery,required, prohibited); - try{ - add(bc); - }catch(...){ - _CLDELETE(bc); - throw; - } - } - - void BooleanQuery::add(BooleanClause* clause) { - if (clauses.size() >= getMaxClauseCount()) - _CLTHROWA(CL_ERR_TooManyClauses,"Too Many Clauses"); - - clauses.push_back(clause); - } - - - size_t BooleanQuery::getClauseCount() const { - return (int32_t) clauses.size(); - } - - TCHAR* BooleanQuery::toString(const TCHAR* field) const{ - StringBuffer buffer; - if (getBoost() != 1.0) { - buffer.append(_T("(")); - } - - for (uint32_t i = 0 ; i < clauses.size(); i++) { - BooleanClause* c = clauses[i]; - if (c->prohibited) - buffer.append(_T("-")); - else if (c->required) - buffer.append(_T("+")); - - if ( c->query->instanceOf(BooleanQuery::getClassName()) ) { // wrap sub-bools in parens - buffer.append(_T("(")); - - TCHAR* buf = c->query->toString(field); - buffer.append(buf); - _CLDELETE_CARRAY( buf ); - - buffer.append(_T(")")); - } else { - TCHAR* buf = c->query->toString(field); - buffer.append(buf); - _CLDELETE_CARRAY( buf ); - } - if (i != clauses.size()-1) - buffer.append(_T(" ")); - - if (getBoost() != 1.0) { - buffer.append(_T(")^")); - buffer.appendFloat(getBoost(),1); - } - } - return buffer.toString(); - } - - - - - BooleanClause** BooleanQuery::getClauses() const - { - CND_MESSAGE(false, "Warning: BooleanQuery::getClauses() is deprecated") - BooleanClause** ret = _CL_NEWARRAY(BooleanClause*, clauses.size()+1); - getClauses(ret); - return ret; - } - - void BooleanQuery::getClauses(BooleanClause** ret) const - { - size_t size=clauses.size(); - for ( uint32_t i=0;iprohibited) { // just return clause - Query* query = c->query->rewrite(reader); // rewrite first - - //if the query doesn't actually get re-written, - //then return a clone (because the BooleanQuery - //will register different to the returned query. - if ( query == c->query ) - query = query->clone(); - - if (getBoost() != 1.0f) { // incorporate boost - query->setBoost(getBoost() * query->getBoost()); - } - - return query; - } - } - - BooleanQuery* clone = NULL; // recursively rewrite - for (uint32_t i = 0 ; i < clauses.size(); i++) { - BooleanClause* c = clauses[i]; - Query* query = c->query->rewrite(reader); - if (query != c->query) { // clause rewrote: must clone - if (clone == NULL) - clone = (BooleanQuery*)this->clone(); - //todo: check if delete query should be on... - //in fact we should try and get rid of these - //for compatibility sake - clone->clauses.set (i, _CLNEW BooleanClause(query, true, c->required, c->prohibited)); - } - } - if (clone != NULL) { - return clone; // some clauses rewrote - } else - return this; // no clauses rewrote - } - - - Query* BooleanQuery::clone() const{ - BooleanQuery* clone = _CLNEW BooleanQuery(*this); - return clone; - } - - /** Returns true iff o is equal to this. */ - bool BooleanQuery::equals(Query* o)const { - if (!(o->instanceOf(BooleanQuery::getClassName()))) - return false; - const BooleanQuery* other = (BooleanQuery*)o; - - bool ret = (this->getBoost() == other->getBoost()); - if ( ret ){ - CLListEquals comp; - ret = comp.equals(&this->clauses,&other->clauses); - } - return ret; - } - - float_t BooleanQuery::BooleanWeight::getValue() { return parentQuery->getBoost(); } - Query* BooleanQuery::BooleanWeight::getQuery() { return (Query*)parentQuery; } - - - - - - BooleanQuery::BooleanWeight::BooleanWeight(Searcher* searcher, - CLVector >* clauses, BooleanQuery* parentQuery) - { - this->searcher = searcher; - this->parentQuery = parentQuery; - this->clauses = clauses; - for (uint32_t i = 0 ; i < clauses->size(); i++) { - weights.push_back((*clauses)[i]->query->_createWeight(searcher)); - } - } - BooleanQuery::BooleanWeight::~BooleanWeight(){ - this->weights.clear(); - } - - float_t BooleanQuery::BooleanWeight::sumOfSquaredWeights() { - float_t sum = 0.0f; - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - Weight* w = weights[i]; - if (!c->prohibited) - sum += w->sumOfSquaredWeights(); // sum sub weights - } - sum *= parentQuery->getBoost() * parentQuery->getBoost(); // boost each sub-weight - return sum ; - } - - void BooleanQuery::BooleanWeight::normalize(float_t norm) { - norm *= parentQuery->getBoost(); // incorporate boost - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - Weight* w = weights[i]; - if (!c->prohibited) - w->normalize(norm); - } - } - - Scorer* BooleanQuery::BooleanWeight::scorer(IndexReader* reader){ - // First see if the (faster) ConjunctionScorer will work. This can be - // used when all clauses are required. Also, at this point a - // BooleanScorer cannot be embedded in a ConjunctionScorer, as the hits - // from a BooleanScorer are not always sorted by document number (sigh) - // and hence BooleanScorer cannot implement skipTo() correctly, which is - // required by ConjunctionScorer. - bool allRequired = true; - bool noneBoolean = true; - { //msvc6 scope fix - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - if (!c->required) - allRequired = false; - if (c->query->instanceOf(BooleanQuery::getClassName())) - noneBoolean = false; - } - } - - if (allRequired && noneBoolean) { // ConjunctionScorer is okay - ConjunctionScorer* result = - _CLNEW ConjunctionScorer(parentQuery->getSimilarity(searcher)); - for (uint32_t i = 0 ; i < weights.size(); i++) { - Weight* w = weights[i]; - Scorer* subScorer = w->scorer(reader); - if (subScorer == NULL) - return NULL; - result->add(subScorer); - } - return result; - } - - // Use good-old BooleanScorer instead. - BooleanScorer* result = _CLNEW BooleanScorer(parentQuery->getSimilarity(searcher)); - - { //msvc6 scope fix - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - Weight* w = weights[i]; - Scorer* subScorer = w->scorer(reader); - if (subScorer != NULL) - result->add(subScorer, c->required, c->prohibited); - else if (c->required) - return NULL; - } - } - - return result; - } - - void BooleanQuery::BooleanWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){ - int32_t coord = 0; - int32_t maxCoord = 0; - float_t sum = 0.0f; - Explanation* sumExpl = _CLNEW Explanation; - for (uint32_t i = 0 ; i < weights.size(); i++) { - BooleanClause* c = (*clauses)[i]; - Weight* w = weights[i]; - Explanation* e = _CLNEW Explanation; - w->explain(reader, doc, e); - if (!c->prohibited) - maxCoord++; - if (e->getValue() > 0) { - if (!c->prohibited) { - sumExpl->addDetail(e); - sum += e->getValue(); - coord++; - e = NULL; //prevent e from being deleted - } else { - //we want to return something else... - _CLDELETE(sumExpl); - result->setValue(0.0f); - result->setDescription(_T("match prohibited")); - return; - } - } else if (c->required) { - _CLDELETE(sumExpl); - result->setValue(0.0f); - result->setDescription(_T("match prohibited")); - return; - } - - _CLDELETE(e); - } - sumExpl->setValue(sum); - - if (coord == 1){ // only one clause matched - Explanation* tmp = sumExpl; - sumExpl = sumExpl->getDetail(0)->clone(); // eliminate wrapper - _CLDELETE(tmp); - } - - sumExpl->setDescription(_T("sum of:")); - float_t coordFactor = parentQuery->getSimilarity(searcher)->coord(coord, maxCoord); - if (coordFactor == 1.0f){ // coord is no-op - result->set(*sumExpl); // eliminate wrapper - _CLDELETE(sumExpl); - } else { - result->setDescription( _T("product of:")); - result->addDetail(sumExpl); - - StringBuffer explbuf; - explbuf.append(_T("coord(")); - explbuf.appendInt(coord); - explbuf.append(_T("/")); - explbuf.appendInt(maxCoord); - explbuf.append(_T(")")); - result->addDetail(_CLNEW Explanation(coordFactor, explbuf.getBuffer())); - result->setValue(sum*coordFactor); - } - } - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/BooleanQuery.h clucene-core-2.3.3.4/src/CLucene/search/BooleanQuery.h --- clucene-core-0.9.21b/src/CLucene/search/BooleanQuery.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/BooleanQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,126 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_BooleanQuery_ -#define _lucene_search_BooleanQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "ConjunctionScorer.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" -#include "SearchHeader.h" -#include "BooleanClause.h" -#include "BooleanScorer.h" -#include "Scorer.h" - -CL_NS_DEF(search) - - - // A Query that matches documents matching boolean combinations of other - // queries, typically {@link TermQuery}s or {@link PhraseQuery}s. - class BooleanQuery:public Query { - public: - typedef CL_NS(util)::CLVector > ClausesType; - private: - BooleanQuery::ClausesType clauses; - static size_t maxClauseCount; - - class BooleanWeight: public Weight { - private: - Searcher* searcher; - CL_NS(util)::CLVector > weights; - ClausesType* clauses; - BooleanQuery* parentQuery; - public: - BooleanWeight(Searcher* searcher, - CL_NS(util)::CLVector >* clauses, - BooleanQuery* parentQuery); - ~BooleanWeight(); - Query* getQuery(); - float_t getValue(); - float_t sumOfSquaredWeights(); - void normalize(float_t norm); - Scorer* scorer(CL_NS(index)::IndexReader* reader); - void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret); - };//booleanweight - - protected: - Weight* _createWeight(Searcher* searcher) { - return _CLNEW BooleanWeight(searcher,&clauses,this); - } - BooleanQuery(const BooleanQuery& clone); - public: - /** Constructs an empty boolean query. */ - BooleanQuery(); - - ~BooleanQuery(); - - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - /** Return the maximum number of clauses permitted, 1024 by default. - * Attempts to add more than the permitted number of clauses cause {@link - * TooManyClauses} to be thrown.*/ - static size_t getMaxClauseCount(); - - /** Set the maximum number of clauses permitted. */ - static void setMaxClauseCount(size_t maxClauseCount); - - /** Adds a clause to a boolean query. Clauses may be: - *
    - *
  • required which means that documents which do not - * match this sub-query will not match the boolean query; - *
  • prohibited which means that documents which do - * match this sub-query will not match the boolean query; or - *
  • neither, in which case matched documents are neither prohibited from - * nor required to match the sub-query. However, a document must match at - * least 1 sub-query to match the boolean query. - *
- * It is an error to specify a clause as both required and - * prohibited. - * - * @see #getMaxClauseCount() - */ - void add(Query* query, const bool required, const bool prohibited){ - add(query,false,required,prohibited); - } - void add(Query* query, const bool deleteQuery, const bool required, const bool prohibited); - - /** Copies the clauses of this query into the array. - * The array must be at least as long as getClauseCount() - * If you want to use the clauses, make sure you null terminate it. - */ - void getClauses(BooleanClause** clauses) const; - - ///@deprecated - _CL_DEPRECATED( getClauses(clauses) ) BooleanClause** getClauses() const; - - /** - * Give client code access to clauses.size() so we know how - * large the array returned by getClauses is. - */ - size_t getClauseCount() const; - - /** Adds a clause to a boolean query. - * @see #getMaxClauseCount() - */ - void add(BooleanClause* clause); - - Query* rewrite(CL_NS(index)::IndexReader* reader); - Query* clone() const; - bool equals(Query* o) const; - - /** Prints a user-readable version of this query. */ - TCHAR* toString(const TCHAR* field) const; - /** Returns a hash code value for this object.*/ - size_t hashCode() const; - }; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/BooleanScorer.cpp clucene-core-2.3.3.4/src/CLucene/search/BooleanScorer.cpp --- clucene-core-0.9.21b/src/CLucene/search/BooleanScorer.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/BooleanScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,248 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "BooleanScorer.h" - -#include "Scorer.h" -#include "Similarity.h" - -CL_NS_USE(util) -CL_NS_DEF(search) - - BooleanScorer::BooleanScorer(Similarity* similarity): - Scorer(similarity), - scorers(NULL), - maxCoord (1), - nextMask (1), - end(0), - current(NULL), - requiredMask (0), - prohibitedMask (0), - coordFactors (NULL) - { - bucketTable = _CLNEW BucketTable(this); - } - - BooleanScorer::~BooleanScorer(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDELETE(bucketTable); - _CLDELETE_ARRAY(coordFactors); - _CLDELETE(scorers); - } - - - bool BooleanScorer::next() { - bool more; - do { - while (bucketTable->first != NULL) { // more queued - current = bucketTable->first; - bucketTable->first = current->next; // pop the queue - - // check prohibited & required - if ((current->bits & prohibitedMask) == 0 && - (current->bits & requiredMask) == requiredMask) { - return true; - } - } - - // refill the queue - more = false; - end += BooleanScorer::BucketTable_SIZE; - for (SubScorer* sub = scorers; sub != NULL; sub = sub->next) { - Scorer* scorer = sub->scorer; - int32_t doc; - while (!sub->done && (doc=scorer->doc()) < end) { - sub->collector->collect(doc, scorer->score()); - sub->done = !scorer->next(); - } - if (!sub->done) { - more = true; - } - } - } while (bucketTable->first != NULL || more); - - return false; - } - - float_t BooleanScorer::score(){ - if (coordFactors == NULL) - computeCoordFactors(); - return current->score * coordFactors[current->coord]; - } - - bool BooleanScorer::skipTo(int32_t target) { - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::skipTo"); - } - - void BooleanScorer::explain(int32_t doc, Explanation* ret) { - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::explain"); - } - - TCHAR* BooleanScorer::toString() { - CL_NS(util)::StringBuffer buffer; - buffer.append(_T("boolean(")); - for (SubScorer* sub = scorers; sub != NULL; sub = sub->next) { - buffer.append(sub->scorer->toString()); - buffer.append(_T(" ")); - } - buffer.appendChar(')'); - return buffer.toString(); - } - - void BooleanScorer::add(Scorer* scorer, const bool required, const bool prohibited) { - int32_t mask = 0; - if (required || prohibited) { - if (nextMask == 0) - _CLTHROWA(CL_ERR_IndexOutOfBounds, "More than 32 required/prohibited clauses in query."); - mask = nextMask; - nextMask = ( nextMask << 1 ); - } else - mask = 0; - - if (!prohibited) - maxCoord++; - - if (prohibited) - prohibitedMask |= mask; // update prohibited mask - else if (required) - requiredMask |= mask; // update required mask - - //scorer, HitCollector, and scorers is delete in the SubScorer - scorers = _CLNEW SubScorer(scorer, required, prohibited, - bucketTable->newCollector(mask), scorers); - } - - void BooleanScorer::computeCoordFactors(){ - coordFactors = _CL_NEWARRAY(float_t,maxCoord); - for (int32_t i = 0; i < maxCoord; i++) - coordFactors[i] = getSimilarity()->coord(i, maxCoord-1); - } - - /*void BooleanScorer::score(HitCollector* results, const int32_t maxDoc) { - if (coordFactors == NULL) - computeCoordFactors(); - - while (currentDoc < maxDoc) { - currentDoc = (currentDoc+BucketTable_SIZEnext) - t->scorer->score((t->collector), currentDoc); - bucketTable->collectHits(results); - } - }*/ - - - - - BooleanScorer::SubScorer::SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt): - scorer(scr), - required(r), - prohibited(p), - collector(c), - next(nxt) - { - //Func - Constructor - //Pre - scr != NULL, - // c != NULL - // nxt may or may not be NULL - //Post - The instance has been created - - CND_PRECONDITION(scr != NULL,"scr is NULL"); - CND_PRECONDITION(c != NULL,"c is NULL"); - - done = !scorer->next(); - } - - BooleanScorer::SubScorer::~SubScorer(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - for (SubScorer * ptr = next; ptr; ){ - SubScorer* next = ptr->next; - ptr->next = NULL; - _CLDELETE(ptr); - ptr = next; - } - _CLDELETE(scorer); - _CLDELETE(collector); - } - - BooleanScorer::Bucket::Bucket(): - doc(-1), - score(0.0), - bits(0), - coord(0), - next(NULL) - { - } - BooleanScorer::Bucket::~Bucket(){ - } - - - - - BooleanScorer::BucketTable::BucketTable(BooleanScorer* scr): - scorer(scr), - first(NULL) - { - buckets = _CL_NEWARRAY(Bucket,BucketTable_SIZE); - } - BooleanScorer::BucketTable::~BucketTable(){ - clear(); - _CLDELETE_ARRAY(buckets); - } - - void BooleanScorer::BucketTable::clear(){ - //delete first; - first = NULL; - } - int32_t BooleanScorer::BucketTable::size() const { return BooleanScorer::BucketTable_SIZE; } - - HitCollector* BooleanScorer::BucketTable::newCollector(const int32_t mask) { - return _CLNEW Collector(mask, this); - } - - - - - - - - - - BooleanScorer::Collector::Collector(const int32_t msk, BucketTable* bucketTbl): - bucketTable(bucketTbl), - mask(msk) - { - } - - void BooleanScorer::Collector::collect(const int32_t doc, const float_t score){ - BucketTable* table = bucketTable; - int32_t i = doc & (BooleanScorer::BucketTable_SIZE-1); - Bucket* bucket = &table->buckets[i]; - - if (bucket->doc != doc) { // invalid bucket - bucket->doc = doc; // set doc - bucket->score = score; // initialize score - bucket->bits = mask; // initialize mask - bucket->coord = 1; // initialize coord - - bucket->next = table->first; // push onto valid list - table->first = bucket; - } else { // valid bucket - bucket->score += score; // increment score - bucket->bits |= mask; // add bits in mask - bucket->coord++; // increment coord - } - } - - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/BooleanScorer.h clucene-core-2.3.3.4/src/CLucene/search/BooleanScorer.h --- clucene-core-0.9.21b/src/CLucene/search/BooleanScorer.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/BooleanScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_BooleanScorer_ -#define _lucene_search_BooleanScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Scorer.h" - -CL_NS_DEF(search) - - class BooleanScorer: public Scorer { - private: - - class Bucket: LUCENE_BASE { - public: - int32_t doc; // tells if bucket is valid - float_t score; // incremental score - int32_t bits; // used for bool constraints - int32_t coord; // count of terms in score - Bucket* next; // next valid bucket - - Bucket(); - ~Bucket(); - }; - - class SubScorer: LUCENE_BASE { - public: - bool done; - Scorer* scorer; - bool required; - bool prohibited; - HitCollector* collector; - SubScorer* next; - SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt); - ~SubScorer(); - }; - - class BucketTable:LUCENE_BASE { - private: - BooleanScorer* scorer; - public: - Bucket* buckets; - Bucket* first; // head of valid list - - BucketTable(BooleanScorer* scr); - int32_t size() const; - HitCollector* newCollector(const int32_t mask); - void clear(); - ~BucketTable(); - - }; - - class Collector: public HitCollector { - private: - BucketTable* bucketTable; - int32_t mask; - public: - Collector(const int32_t mask, BucketTable* bucketTable); - - void collect(const int32_t doc, const float_t score); - }; - - SubScorer* scorers; - BucketTable* bucketTable; - - int32_t maxCoord; - int32_t nextMask; - - int32_t end; - Bucket* current; - public: - LUCENE_STATIC_CONSTANT(int32_t,BucketTable_SIZE=1024); - int32_t requiredMask; - int32_t prohibitedMask; - float_t* coordFactors; - - BooleanScorer(Similarity* similarity); - ~BooleanScorer(); - void add(Scorer* scorer, const bool required, const bool prohibited); - int32_t doc() const { return current->doc; } - bool next(); - float_t score(); - bool skipTo(int32_t target); - void explain(int32_t doc, Explanation* ret); - TCHAR* toString(); - void computeCoordFactors(); - }; - - - - - - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/CachingWrapperFilter.cpp clucene-core-2.3.3.4/src/CLucene/search/CachingWrapperFilter.cpp --- clucene-core-0.9.21b/src/CLucene/search/CachingWrapperFilter.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/CachingWrapperFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CachingWrapperFilter.h" - -CL_NS_DEF(search) -CL_NS_USE(index) -CL_NS_USE(util) - -AbstractCachingFilter::AbstractCachingFilter(): - cache(false,true) -{ -} -AbstractCachingFilter::AbstractCachingFilter(const AbstractCachingFilter& copy): - cache(false,true) -{ -} -AbstractCachingFilter::~AbstractCachingFilter(){ -} -AbstractCachingFilter::BitSetHolder::BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs){ - this->bits = bits; - this->deleteBs = deleteBs; -} -AbstractCachingFilter::BitSetHolder::~BitSetHolder(){ - if ( deleteBs ) - _CLDELETE(bits); -} - - -BitSet* AbstractCachingFilter::bits(IndexReader* reader){ - SCOPED_LOCK_MUTEX(cache.THIS_LOCK) - BitSetHolder* cached = cache.get(reader); - if ( cached != NULL ) - return cached->bits; - BitSet* bs = doBits(reader); - BitSetHolder* bsh = _CLNEW BitSetHolder(bs, doShouldDeleteBitSet(bs)); - cache.put(reader,bsh); - return bs; -} -void AbstractCachingFilter::closeCallback(CL_NS(index)::IndexReader* reader, void*){ - SCOPED_LOCK_MUTEX(cache.THIS_LOCK) - cache.remove(reader); -} - - - - -CachingWrapperFilter::CachingWrapperFilter(Filter* filter, bool deleteFilter){ - this->filter = filter; - this->deleteFilter = deleteFilter; -} -CachingWrapperFilter::CachingWrapperFilter(const CachingWrapperFilter& copy): - AbstractCachingFilter(copy) -{ - this->filter = copy.filter->clone(); - this->deleteFilter = true; -} -Filter* CachingWrapperFilter::clone() const{ - return _CLNEW CachingWrapperFilter(*this); -} -TCHAR* CachingWrapperFilter::toString(){ - TCHAR* fs = filter->toString(); - int len = _tcslen(fs)+23; - TCHAR* ret = _CL_NEWARRAY(TCHAR,len); - _sntprintf(ret,len,_T("CachingWrapperFilter(%s)"),fs); - _CLDELETE_CARRAY(fs); - return ret; -} -BitSet* CachingWrapperFilter::doBits(IndexReader* reader){ - return filter->bits(reader); -} -bool CachingWrapperFilter::doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ){ - return filter->shouldDeleteBitSet(bits); -} -CachingWrapperFilter::~CachingWrapperFilter(){ - if ( deleteFilter ){ - _CLDELETE(filter); - }else - filter=NULL; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/CachingWrapperFilter.h clucene-core-2.3.3.4/src/CLucene/search/CachingWrapperFilter.h --- clucene-core-0.9.21b/src/CLucene/search/CachingWrapperFilter.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/CachingWrapperFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_CachingWrapperFilter_ -#define _lucene_search_CachingWrapperFilter_ - -#include "CLucene/util/BitSet.h" -#include "CLucene/index/IndexReader.h" -#include "Filter.h" - -CL_NS_DEF(search) -/** - * Wraps another filter's result and caches it. The purpose is to allow - * filters to implement this and allow itself to be cached. Alternatively, - * use the CachingWrapperFilter to cache the filter. - */ -class AbstractCachingFilter: public Filter -{ - class BitSetHolder: LUCENE_BASE{ - bool deleteBs; - public: - BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs); - ~BitSetHolder(); - CL_NS(util)::BitSet* bits; - }; - void closeCallback(CL_NS(index)::IndexReader* reader, void* param); - typedef CL_NS(util)::CLHashMap, - CL_NS(util)::Equals::Void, - CL_NS(util)::Deletor::Object, - CL_NS(util)::Deletor::Object > CacheType; - - CacheType cache; - -protected: - AbstractCachingFilter( const AbstractCachingFilter& copy ); - virtual CL_NS(util)::BitSet* doBits( CL_NS(index)::IndexReader* reader ) = 0; - virtual bool doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ){ return false; } - AbstractCachingFilter(); -public: - virtual ~AbstractCachingFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - virtual Filter *clone() const = 0; - virtual TCHAR *toString() = 0; - - bool shouldDeleteBitSet( const CL_NS(util)::BitSet* bits ) const{ return false; } -}; - -/** - * Wraps another filter's result and caches it. The purpose is to allow - * filters to simply filter, and then wrap with this class to add - * caching, keeping the two concerns decoupled yet composable. - */ -class CachingWrapperFilter: public AbstractCachingFilter -{ -private: - Filter* filter; - bool deleteFilter; -protected: - CachingWrapperFilter( const CachingWrapperFilter& copy ); - CL_NS(util)::BitSet* doBits( CL_NS(index)::IndexReader* reader ); - bool doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ); -public: - CachingWrapperFilter( Filter* filter, bool deleteFilter=true ); - ~CachingWrapperFilter(); - - Filter *clone() const; - TCHAR *toString(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/ChainedFilter.cpp clucene-core-2.3.3.4/src/CLucene/search/ChainedFilter.cpp --- clucene-core-0.9.21b/src/CLucene/search/ChainedFilter.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/ChainedFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include -#include -#include "ChainedFilter.h" - -CL_NS_DEF(search) -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) - - -ChainedFilter::ChainedFilter( Filter ** _filters, int _op ): - filters(_filters), - logicArray(NULL), - logic(_op) -{ -} -ChainedFilter::ChainedFilter( Filter** _filters, int* _array ): - filters(_filters), - logicArray(_array), - logic(-1) -{ -} -ChainedFilter::ChainedFilter( const ChainedFilter& copy ) : - logicArray( copy.logicArray ), - logic( copy.logic ) -{ - filters = copy.filters; -} -ChainedFilter::~ChainedFilter(void) -{ - -} - -Filter* ChainedFilter::clone() const { - return _CLNEW ChainedFilter(*this ); -} - -const TCHAR* ChainedFilter::getLogicString(int logic){ - if ( logic == ChainedFilter::OR ) - return _T("OR"); - else if ( logic == ChainedFilter::AND ) - return _T("AND"); - else if ( logic == ChainedFilter::ANDNOT ) - return _T("ANDNOT"); - else if ( logic == ChainedFilter::XOR ) - return _T("XOR"); - else if ( logic >= ChainedFilter::USER ){ - return _T("USER"); - } - return _T(""); -} - -TCHAR* ChainedFilter::toString() -{ - - Filter** filter = filters; - - StringBuffer buf(_T("ChainedFilter: [")); - int* la = logicArray; - while(*filter ) - { - if ( filter != filters ) - buf.appendChar(' '); - buf.append(getLogicString(logic==-1?*la:logic)); - buf.appendChar(' '); - - TCHAR* filterstr = (*filter)->toString(); - buf.append(filterstr); - _CLDELETE_ARRAY( filterstr ); - - filter++; - if ( logic == -1 ) - la++; - } - - buf.appendChar(']'); - - return buf.toString(); -} - - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* ChainedFilter::bits( IndexReader* reader ) -{ - if( logic != -1 ) - return bits( reader, logic ); - else if( logicArray != NULL ) - return bits( reader, logicArray ); - else - return bits( reader, DEFAULT ); -} - - -BitSet* ChainedFilter::bits( IndexReader* reader, int logic ) -{ - BitSet* bts = NULL; - - Filter** filter = filters; - - // see discussion at top of file - if( *filter ) { - BitSet* tmp = (*filter)->bits( reader ); - if ( (*filter)->shouldDeleteBitSet(tmp) ) //if we are supposed to delete this BitSet, then - bts = tmp; //we can safely call it our own - else if ( tmp == NULL ){ - int32_t len = reader->maxDoc(); - bts = _CLNEW BitSet( len ); //bitset returned null, which means match _all_ - for (int32_t i=0;iset(i); - }else{ - bts = tmp->clone(); //else it is probably cached, so we need to copy it before using it. - } - filter++; - } - else - bts = _CLNEW BitSet( reader->maxDoc() ); - - while( *filter ) { - doChain( bts, reader, logic, *filter ); - filter++; - } - - return bts; -} - - -BitSet* ChainedFilter::bits( IndexReader* reader, int* _logicArray ) -{ - BitSet* bts = NULL; - - Filter** filter = filters; - int* logic = _logicArray; - - // see discussion at top of file - if( *filter ) { - BitSet* tmp = (*filter)->bits( reader ); - if ( (*filter)->shouldDeleteBitSet(tmp) ) //if we are supposed to delete this BitSet, then - bts = tmp; //we can safely call it our own - else if ( tmp == NULL ){ - int32_t len = reader->maxDoc(); - bts = _CLNEW BitSet( len ); //bitset returned null, which means match _all_ - for (int32_t i=0;iset(i); //todo: this could mean that we can skip certain types of filters - } - else - { - bts = tmp->clone(); //else it is probably cached, so we need to copy it before using it. - } - filter++; - logic++; - } - else - bts = _CLNEW BitSet( reader->maxDoc() ); - - while( *filter ) { - doChain( bts, reader, *logic, *filter ); - filter++; - logic++; - } - - return bts; -} - -void ChainedFilter::doUserChain( CL_NS(util)::BitSet* chain, CL_NS(util)::BitSet* filter, int logic ){ - _CLTHROWA(CL_ERR_Runtime,"User chain logic not implemented by superclass"); -} - -BitSet* ChainedFilter::doChain( BitSet* resultset, IndexReader* reader, int logic, Filter* filter ) -{ - BitSet* filterbits = filter->bits( reader ); - int32_t maxDoc = reader->maxDoc(); - int32_t i=0; - if ( logic >= ChainedFilter::USER ){ - doUserChain(resultset,filterbits,logic); - }else{ - switch( logic ) - { - case OR: - for( i=0; i < maxDoc; i++ ) - resultset->set( i, (resultset->get(i) || (filterbits==NULL || filterbits->get(i) ))?1:0 ); - break; - case AND: - for( i=0; i < maxDoc; i++ ) - resultset->set( i, (resultset->get(i) && (filterbits==NULL || filterbits->get(i) ))?1:0 ); - break; - case ANDNOT: - for( i=0; i < maxDoc; i++ ) - resultset->set( i, (resultset->get(i) && (filterbits==NULL || filterbits->get(i)))?0:1 ); - break; - case XOR: - for( i=0; i < maxDoc; i++ ) - resultset->set( i, resultset->get(i) ^ ((filterbits==NULL || filterbits->get(i) )?1:0) ); - break; - default: - doChain( resultset, reader, DEFAULT, filter ); - } - } - - if ( filter->shouldDeleteBitSet(filterbits) ) - _CLDELETE( filterbits ); - - return resultset; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/ChainedFilter.h clucene-core-2.3.3.4/src/CLucene/search/ChainedFilter.h --- clucene-core-0.9.21b/src/CLucene/search/ChainedFilter.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/ChainedFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_ChainedFilter_ -#define _lucene_search_ChainedFilter_ - -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/BitSet.h" -#include "CLucene/search/Filter.h" - -CL_NS_DEF(search) - -/* -Discussion - brian@unixpoet.com - -From ChainedFilter.java: - -... - -// First AND operation takes place against a completely false -// bitset and will always return zero results. Thanks to -// Daniel Armbrust for pointing this out and suggesting workaround. - -if (logic[0] == AND) -{ - result = (BitSet) chain[i].bits(reader).clone(); - ++i; -} - -... - -The observation is correct and it was buggy. The problem is that the same -issue remains for the ANDNOT logic op but with the inverse result: all bits -set to 1. The result of the other ops, i.e. OR, AND, XOR for the first filter -ends up just copying the bitset of the first filter (explicitly in the case of the AND). - -Why not do the same for the NAND? This will have the side effect of rendering the first op -in the logic array superflous - not a big problem. - -The only "problem" is that we will return different results then the Java -Lucene code - though I prefer CLucene to be a correct implementation and only maintain -API compat rather than full 100% compat with Lucene. -*/ -class ChainedFilter: public Filter -{ -public: - LUCENE_STATIC_CONSTANT(int, OR = 0); //set current bit if the chain is set OR if the filter bit is set - LUCENE_STATIC_CONSTANT(int, AND = 1); //set current bit if the chain is set AND the filter bit is set - LUCENE_STATIC_CONSTANT(int, ANDNOT = 2); //set current bit if the chain is not set AND the filter bit is not set - LUCENE_STATIC_CONSTANT(int, XOR = 3); //set current bit if the chain is set OR the filter bit is set BUT not both is set - - LUCENE_STATIC_CONSTANT(int, USER = 5); //add this value to user defined value, then override doUserChain - - LUCENE_STATIC_CONSTANT(int, DEFAULT = OR); - -protected: - Filter **filters; - int *logicArray; - int logic; - - ChainedFilter( const ChainedFilter& copy ); - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader, int logic ); - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader, int* logicArray ); - CL_NS(util)::BitSet* doChain( CL_NS(util)::BitSet* result, CL_NS(index)::IndexReader* reader, int logic, Filter* filter ); - - virtual void doUserChain( CL_NS(util)::BitSet* chain, CL_NS(util)::BitSet* filter, int logic ); - virtual const TCHAR* getLogicString(int logic); -public: - ChainedFilter( Filter** filters, int op = DEFAULT ); - ChainedFilter( Filter** filters, int* _array ); - virtual ~ChainedFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - virtual Filter* clone() const; - - TCHAR* toString(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/Compare.h clucene-core-2.3.3.4/src/CLucene/search/Compare.h --- clucene-core-0.9.21b/src/CLucene/search/Compare.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Compare.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,161 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Compare_ -#define _lucene_search_Compare_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "FieldSortedHitQueue.h" - -CL_NS_DEF(search) - - -class ScoreDocComparators:LUCENE_BASE { -protected: - ScoreDocComparators(){} -public: - ~ScoreDocComparators(){ - } - - class Relevance:public ScoreDocComparator { - public: - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - if (i->score > j->score) return -1; - if (i->score < j->score) return 1; - return 0; - } - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - return _CLNEW CL_NS(util)::Compare::Float (i->score); - } - int32_t sortType() { - return SortField::DOCSCORE; - } - }; - - class IndexOrder:public ScoreDocComparator{ - public: - IndexOrder(): - ScoreDocComparator() - { - - } - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - if (i->doc < j->doc) return -1; - if (i->doc > j->doc) return 1; - return 0; - } - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - return _CLNEW CL_NS(util)::Compare::Int32(i->doc); - } - int32_t sortType() { - return SortField::DOC; - } - }; - - - class String: public ScoreDocComparator { - FieldCache::StringIndex* index; -#ifdef _CL__CND_DEBUG - int32_t length; -#endif - public: - String(FieldCache::StringIndex* index, int32_t len) - { -#ifdef _CL__CND_DEBUG - this->length = len; -#endif - this->index = index; - } - - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - CND_PRECONDITION(i->docdoc>=length") - CND_PRECONDITION(j->docdoc>=length") - if (index->order[i->doc] < index->order[j->doc]) return -1; - if (index->order[i->doc] > index->order[j->doc]) return 1; - return 0; - } - - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - return _CLNEW CL_NS(util)::Compare::TChar(index->lookup[index->order[i->doc]]); - } - - int32_t sortType() { - return SortField::STRING; - } - }; - - class Int32:public ScoreDocComparator{ - int32_t* fieldOrder; -#ifdef _CL__CND_DEBUG - int32_t length; -#endif - public: - Int32(int32_t* fieldOrder, int32_t len) - { - this->fieldOrder = fieldOrder; -#ifdef _CL__CND_DEBUG - this->length = len; -#endif - } - - - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - CND_PRECONDITION(i->docdoc>=length") - CND_PRECONDITION(j->docdoc>=length") - if (fieldOrder[i->doc] < fieldOrder[j->doc]) return -1; - if (fieldOrder[i->doc] > fieldOrder[j->doc]) return 1; - return 0; - } - - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - CND_PRECONDITION(i->docdoc>=length") - return _CLNEW CL_NS(util)::Compare::Int32(fieldOrder[i->doc]); - } - - int32_t sortType() { - return SortField::INT; - } - }; - - class Float:public ScoreDocComparator { - float_t* fieldOrder; -#ifdef _CL__CND_DEBUG - int32_t length; -#endif - public: - Float(float_t* fieldOrder, int32_t len) - { - this->fieldOrder = fieldOrder; -#ifdef _CL__CND_DEBUG - this->length = len; -#endif - } - - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) { - CND_PRECONDITION(i->docdoc>=length") - CND_PRECONDITION(j->docdoc>=length") - if (fieldOrder[i->doc] < fieldOrder[j->doc]) return -1; - if (fieldOrder[i->doc] > fieldOrder[j->doc]) return 1; - return 0; - } - - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) { - CND_PRECONDITION(i->docdoc>=length") - return _CLNEW CL_NS(util)::Compare::Float(fieldOrder[i->doc]); - } - - int32_t sortType() { - return SortField::FLOAT; - } - }; -}; - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/ConjunctionScorer.cpp clucene-core-2.3.3.4/src/CLucene/search/ConjunctionScorer.cpp --- clucene-core-0.9.21b/src/CLucene/search/ConjunctionScorer.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/ConjunctionScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "ConjunctionScorer.h" -#include "CLucene/util/Arrays.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - Scorer* ConjunctionScorer::first() const{ - if ( scorers.end() == scorers.begin() ) - return NULL; - - return *scorers.begin(); - } //get First - Scorer* ConjunctionScorer::last() { - if ( scorers.end() == scorers.begin() ) - return NULL; - - CL_NS_STD(list)::iterator i = scorers.end(); - --i; - return *i; - } //get Last - - class _ScorerSorter:public CL_NS(util)::Arrays::_Arrays{ - public: - bool equals(Scorer* o1,Scorer* o2) const{ - return o1->doc() == o2->doc(); - } - int32_t compare(Scorer* o1,Scorer* o2) const{ - return o1->doc() - o2->doc(); - } - }; - _ScorerSorter __ScorerSorter; - - void ConjunctionScorer::sortScorers() { - // move scorers to an array - int32_t size = scorers.size(); - Scorer** array = _CL_NEWARRAY(Scorer*,size+1); - scorers.toArray(array); - scorers.clear(); // empty the list - - // note that this comparator is not consistent with equals! - __ScorerSorter.sort(array,size,0,size); - - for (int32_t i = 0; idoc() < last()->doc()) { // find doc w/ all clauses - more = first()->skipTo(last()->doc()); // skip first upto last - Scorer* scorer = *scorers.begin(); - scorers.delete_front(); - scorers.push_back(scorer); // move first to last - } - return more; // found a doc with all clauses - } - - - void ConjunctionScorer::init() { - more = scorers.size() > 0; - - // compute coord factor - coord = getSimilarity()->coord(scorers.size(), scorers.size()); - - // move each scorer to its first entry - CL_NS_STD(list)::iterator i = scorers.begin(); - while (more && i!=scorers.end()) { - more = ((Scorer*)*i)->next(); - ++i; - } - - if (more) - sortScorers(); // initial sort of list - - firstTime = false; - } - - ConjunctionScorer::ConjunctionScorer(Similarity* similarity): - Scorer(similarity), - scorers(false), - firstTime(true), - more(true), - coord(0.0) - { - } - ConjunctionScorer::~ConjunctionScorer(){ - scorers.setDoDelete(true); - } - - TCHAR *CL_NS(search)::Scorer::toString(void){ - return STRDUP_TtoT(_T("ConjunctionScorer")); - } - - - void ConjunctionScorer::add(Scorer* scorer){ - scorers.push_back(scorer); - } - - - int32_t ConjunctionScorer::doc() const{ return first()->doc(); } - - bool ConjunctionScorer::next() { - if (firstTime) { - init(); - } else if (more) { - more = last()->next(); // trigger further scanning - } - return doNext(); - } - - bool ConjunctionScorer::skipTo(int32_t target) { - CL_NS_STD(list)::iterator i = scorers.begin(); - while (more && i!=scorers.end()) { - more = ((Scorer*)*i)->skipTo(target); - ++i; - } - if (more) - sortScorers(); // re-sort scorers - return doNext(); - } - - float_t ConjunctionScorer::score(){ - float_t score = 0.0f; // sum scores - CL_NS_STD(list)::const_iterator i = scorers.begin(); - while (i!=scorers.end()){ - score += (*i)->score(); - ++i; - } - score *= coord; - return score; - } - - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/ConjunctionScorer.h clucene-core-2.3.3.4/src/CLucene/search/ConjunctionScorer.h --- clucene-core-0.9.21b/src/CLucene/search/ConjunctionScorer.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/ConjunctionScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_ConjunctionScorer_ -#define _lucene_search_ConjunctionScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif -#include "Scorer.h" -#include "Similarity.h" - -CL_NS_DEF(search) - -/** Scorer for conjunctions, sets of queries, all of which are required. */ -class ConjunctionScorer: public Scorer { -private: - CL_NS(util)::CLLinkedList > scorers; - bool firstTime; - bool more; - float_t coord; - - Scorer* first() const; - Scorer* last(); - void sortScorers(); - bool doNext(); - void init(); -public: - ConjunctionScorer(Similarity* similarity); - virtual ~ConjunctionScorer(); - TCHAR* toString(void){ - return STRDUP_TtoT(_T("ConjunctionScorer")); - } - void add(Scorer* scorer); - int32_t doc() const; - bool next(); - bool skipTo(int32_t target); - float_t score(); - virtual void explain(int32_t doc, Explanation* ret) { - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: ConjunctionScorer::explain"); - } - - -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/DateFilter.cpp clucene-core-2.3.3.4/src/CLucene/search/DateFilter.cpp --- clucene-core-0.9.21b/src/CLucene/search/DateFilter.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/DateFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "DateFilter.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) -CL_NS_DEF(search) - - DateFilter::~DateFilter(){ - _CLDECDELETE( start ); - _CLDECDELETE( end ); - } - - DateFilter::DateFilter(const DateFilter& copy): - start( _CL_POINTER(copy.start) ), - end ( _CL_POINTER(copy.end) ) - { - } - - /** Constructs a filter for field f matching times between - from and to. */ - DateFilter::DateFilter(const TCHAR* f, int64_t from, int64_t to) - { - TCHAR* tmp = DateField::timeToString(from); - start = _CLNEW Term(f, tmp); - _CLDELETE_CARRAY(tmp); - - tmp = DateField::timeToString(to); - end = _CLNEW Term(start, tmp); - _CLDELETE_CARRAY(tmp); - } - - /** Constructs a filter for field f matching times before - time. */ - DateFilter* DateFilter::Before(const TCHAR* field, int64_t time) { - return _CLNEW DateFilter(field, 0,time); - } - - /** Constructs a filter for field f matching times after - time. */ - DateFilter* DateFilter::After(const TCHAR* field, int64_t time) { - return _CLNEW DateFilter(field,time, DATEFIELD_DATE_MAX ); - } - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - BitSet* DateFilter::bits(IndexReader* reader) { - BitSet* bts = _CLNEW BitSet(reader->maxDoc()); - - TermEnum* enumerator = reader->terms(start); - if (enumerator->term(false) == NULL){ - _CLDELETE(enumerator); - return bts; - } - TermDocs* termDocs = reader->termDocs(); - - try { - while (enumerator->term(false)->compareTo(end) <= 0) { - termDocs->seek(enumerator->term(false)); - while (termDocs->next()) { - bts->set(termDocs->doc()); - } - if (!enumerator->next()) { - break; - } - } - } _CLFINALLY ( - termDocs->close(); - _CLDELETE(termDocs); - enumerator->close(); - _CLDELETE(enumerator); - ); - return bts; - } - - Filter* DateFilter::clone() const{ - return _CLNEW DateFilter(*this); - } - - TCHAR* DateFilter::toString(){ - size_t len = _tcslen(start->field()) + start->textLength() + end->textLength() + 8; - TCHAR* ret = _CL_NEWARRAY(TCHAR,len); - ret[0]=0; - _sntprintf(ret,len,_T("%s: [%s-%s]"), start->field(),start->text(),end->text()); - return ret; - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/DateFilter.h clucene-core-2.3.3.4/src/CLucene/search/DateFilter.h --- clucene-core-0.9.21b/src/CLucene/search/DateFilter.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/DateFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_DateFilter_ -#define _lucene_search_DateFilter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/document/DateField.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/BitSet.h" -#include "Filter.h" - -CL_NS_DEF(search) - /** - * A Filter that restricts search results to a range of time. - * - *

For this to work, documents must have been indexed with a - * {@link DateField}. - */ - class DateFilter: public Filter { - private: - CL_NS(index)::Term* start; - CL_NS(index)::Term* end; - - protected: - DateFilter(const DateFilter& copy); - public: - ~DateFilter(); - - /** Constructs a filter for field f matching times between - from and to. */ - DateFilter(const TCHAR* f, int64_t from, int64_t to); - - /** Constructs a filter for field f matching times before - time. */ - static DateFilter* Before(const TCHAR* field, int64_t time) ; - - /** Constructs a filter for field f matching times after - time. */ - static DateFilter* After(const TCHAR* field, int64_t time) ; - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader) ; - - Filter* clone() const; - - TCHAR* toString(); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/ExactPhraseScorer.cpp clucene-core-2.3.3.4/src/CLucene/search/ExactPhraseScorer.cpp --- clucene-core-0.9.21b/src/CLucene/search/ExactPhraseScorer.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/ExactPhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "ExactPhraseScorer.h" - -#include "PhraseScorer.h" -#include "CLucene/index/Terms.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - ExactPhraseScorer::ExactPhraseScorer(Weight* weight, TermPositions** tps, - int32_t* positions, Similarity* similarity, uint8_t* norms): - PhraseScorer(weight, tps, positions, similarity, norms){ - //Func - Constructor - //Pre - tps != NULL - // tpsLength >= 0 - // n != NULL - //Post - Instance has been created - - CND_PRECONDITION(tps != NULL,"tps is NULL"); - CND_PRECONDITION(tps[0] != NULL,"tps is NULL"); - //CND_PRECONDITION(n != NULL,"n is NULL") =this is checked already in PhraseScorer - - } - - float_t ExactPhraseScorer::phraseFreq(){ - //Func - Returns the freqency of the phrase - //Pre - first != NULL - // last != NULL - // pq != NULL - // size of the PhraseQueue pq is 0 - //Post - The frequency of the phrase has been returned - - CND_PRECONDITION(first != NULL,"first is NULL"); - CND_PRECONDITION(last != NULL,"last is NULL"); - CND_PRECONDITION(pq != NULL,"pq is NULL"); - CND_PRECONDITION(pq->size()==0,"pq is not empty"); - - //build pq from list - - //Add the nodes of the list of PhrasePositions and store them - //into the PhraseQueue pq so it can used to build - //a list of sorted nodes - for (PhrasePositions* pp = first; pp != NULL; pp = pp->_next) { - //Read the first TermPosition of the current PhrasePositions pp - pp->firstPosition(); - //Store the current PhrasePositions pp into the PhraseQueue pq - pq->put(pp); - } - //pqToList requires that first and last be NULL when it's called. - //This is done at the beginning of pqToList() - //In this case, the nodes of the linked list are referenced by pq (see - //above loop), so we can clear our pointers to the head and tail of the - //linked list without fear of leaking the nodes. - - //rebuild list from pq - pqToList(); - - //Initialize freq at 0 - int32_t freq = 0; - - //find position with all terms - do { - //scan forward in first - while (first->position < last->position){ - do{ - if (!first->nextPosition()){ - return (float_t)freq; - } - } while (first->position < last->position); - //Make the current first node the last node in the list - firstToLast(); - } - //all equal: a match has been found - freq++; - } while (last->nextPosition()); - - return (float_t)freq; - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/ExactPhraseScorer.h clucene-core-2.3.3.4/src/CLucene/search/ExactPhraseScorer.h --- clucene-core-0.9.21b/src/CLucene/search/ExactPhraseScorer.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/ExactPhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_ExactPhraseScorer_ -#define _lucene_search_ExactPhraseScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "PhraseScorer.h" -#include "CLucene/index/Terms.h" - -CL_NS_DEF(search) - - class ExactPhraseScorer: public PhraseScorer { - public: - ExactPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, int32_t* positions, - Similarity* similarity, uint8_t* norms ); - - ~ExactPhraseScorer(){ - } - protected: - //Returns the exact freqency of the phrase - float_t phraseFreq(); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/Explanation.cpp clucene-core-2.3.3.4/src/CLucene/search/Explanation.cpp --- clucene-core-0.9.21b/src/CLucene/search/Explanation.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Explanation.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Explanation.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_USE(util) -CL_NS_DEF(search) - - -Explanation::Explanation(float_t value, const TCHAR* description) { - this->value = value; - _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); -} - -Explanation::Explanation() { - this->value = 0; - this->description[0]=0; -} - -Explanation::Explanation(const Explanation& copy){ - set(copy); -} -void Explanation::set(const Explanation& copy){ - this->value = copy.value; - STRCPY_TtoT(description,copy.description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); - - details.clear(); - CL_NS(util)::CLArrayList >::const_iterator itr; - itr = copy.details.begin(); - while ( itr != copy.details.end() ){ - details.push_back( (*itr)->clone() ); - ++itr; - } -} - -Explanation::~Explanation(){ -} - -void Explanation::setDescription(const TCHAR* description) { - _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); -} - - -Explanation* Explanation::clone() const{ - return _CLNEW Explanation(*this); -} - -float_t Explanation::getValue() const{ - return value; -} - -void Explanation::setValue(float_t value) { - this->value = value; -} - -const TCHAR* Explanation::getDescription() const { - return description; -} - -///todo: mem leaks -TCHAR* Explanation::toString(int32_t depth) { - StringBuffer buffer; - for (int32_t i = 0; i < depth; i++) { - buffer.append(_T(" ")); - } - buffer.appendFloat(getValue(),2); - buffer.append(_T(" = ")); - buffer.append(getDescription()); - buffer.append(_T("\n")); - - for ( uint32_t j=0;jtoString(depth+1); - buffer.append(tmp); - _CLDELETE_CARRAY(tmp); - } - return buffer.toString(); -} - -int Explanation::getDetailsLength(){ - return details.size(); -} -Explanation* Explanation::getDetail(int i){ - return details[i]; -} -/** The sub-nodes of this explanation node. */ -void Explanation::getDetails(Explanation** ret) { - uint32_t size = details.size(); - for ( uint32_t i=0;iclone(); - } - ret[size] = NULL; -} - -/** Adds a sub-node to this explanation node. */ -void Explanation::addDetail(Explanation* detail) { - details.push_back(detail); -} - -/** Render an explanation as text. */ -TCHAR* Explanation::toString() { - return toString(0); -} - -/** Render an explanation as HTML. */ -///todo: mem leaks -TCHAR* Explanation::toHtml() { - StringBuffer buffer; - TCHAR* tmp; - buffer.append(_T("

    \n")); - - buffer.append(_T("
  • ")); - buffer.appendFloat(getValue(),2); - buffer.append(_T(" = ")); - - buffer.append(getDescription()); - buffer.append(_T("
  • \n")); - - for ( uint32_t i=0;itoHtml(); - buffer.append(tmp); - _CLDELETE_CARRAY(tmp); - } - buffer.append(_T("
\n")); - - return buffer.toString(); -} -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/Explanation.h clucene-core-2.3.3.4/src/CLucene/search/Explanation.h --- clucene-core-0.9.21b/src/CLucene/search/Explanation.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Explanation.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Explanation -#define _lucene_search_Explanation - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(search) - - #define LUCENE_SEARCH_EXPLANATION_DESC_LEN 200 - class Explanation :LUCENE_BASE { - private: - float_t value; // the value of this node - TCHAR description[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; // what it represents - CL_NS(util)::CLArrayList > details; // sub-explanations - - TCHAR* toString(int32_t depth); - protected: - Explanation(const Explanation& copy); - public: - Explanation(); - ~Explanation(); - - Explanation(float_t value, const TCHAR* description); - void set(const Explanation& other); - - Explanation* clone() const; - - /** The value assigned to this explanation node. */ - float_t getValue() const; - - /** Sets the value assigned to this explanation node. */ - void setValue(float_t value); - - /** A description of this explanation node. */ - const TCHAR* getDescription() const; ///count = count; - this->order = values; - this->lookup = lookup; - } - - ~StringIndex(){ - _CLDELETE_ARRAY(order); - - for ( int i=0;ifield as integers and returns an array - * of size reader.maxDoc() of the value each document - * has in the given field. - * @param reader Used to get field values. - * @param field Which field contains the integers. - * @return The values in the given field for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if - * none is found, reads the terms in field as floats and returns an array - * of size reader.maxDoc() of the value each document - * has in the given field. - * @param reader Used to get field values. - * @param field Which field contains the floats. - * @return The values in the given field for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if none - * is found, reads the term values in field and returns an array - * of size reader.maxDoc() containing the value each document - * has in the given field. - * @param reader Used to get field values. - * @param field Which field contains the strings. - * @return The values in the given field for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if none - * is found reads the term values in field and returns - * an array of them in natural order, along with an array telling - * which element in the term array each document uses. - * @param reader Used to get field values. - * @param field Which field contains the strings. - * @return Array of terms and index into the array for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if - * none is found reads field to see if it contains integers, floats - * or strings, and then calls one of the other methods in this class to get the - * values. For string values, a FieldCache::StringIndex is returned. After - * calling this method, there is an entry in the cache for both - * type AUTO and the actual found type. - * @param reader Used to get field values. - * @param field Which field contains the values. - * @return int32_t[], float_t[] or FieldCache::StringIndex. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; - - /** Checks the internal cache for an appropriate entry, and if none - * is found reads the terms out of field and calls the given SortComparator - * to get the sort values. A hit in the cache will happen if reader, - * field, and comparator are the same (using equals()) - * as a previous call to this method. - * @param reader Used to get field values. - * @param field Which field contains the values. - * @param comparator Used to convert terms into something to sort by. - * @return Array of sort objects, one for each document. - * @throws IOException If any error occurs. - */ - virtual FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator) = 0; -}; - -/** A class holding an AUTO field. In java lucene an Object - is used, but we use this. - contentType: - 1 - integer array - 2 - float array - 3 - FieldCache::StringIndex object - This class is also used when returning getInt, getFloat, etc - because we have no way of returning the size of the array and this - class can be used to determine the array size -*/ -class FieldCacheAuto:LUCENE_BASE{ -public: - enum{ - INT_ARRAY=1, - FLOAT_ARRAY=2, - STRING_INDEX=3, - STRING_ARRAY=4, - COMPARABLE_ARRAY=5, - SORT_COMPARATOR=6, - SCOREDOC_COMPARATOR=7 - }; - - FieldCacheAuto(int32_t len, int32_t type); - ~FieldCacheAuto(); - ///if contents should be deleted too, depending on type - bool ownContents; - int32_t contentLen; //number of items in the list - uint8_t contentType; - int32_t* intArray; //item 1 - float_t* floatArray; //item 2 - FieldCache::StringIndex* stringIndex; //item 3 - TCHAR** stringArray; //item 4 - CL_NS(util)::Comparable** comparableArray; //item 5 - SortComparator* sortComparator; //item 6 - ScoreDocComparator* scoreDocComparator; //item 7 - -}; - - -CL_NS_END - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/FieldCacheImpl.cpp clucene-core-2.3.3.4/src/CLucene/search/FieldCacheImpl.cpp --- clucene-core-0.9.21b/src/CLucene/search/FieldCacheImpl.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FieldCacheImpl.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,529 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldCacheImpl.h" - -CL_NS_USE(util) -CL_NS_USE(index) -CL_NS_DEF(search) - -FieldCacheImpl::FieldCacheImpl(): - cache(false,true){ -} -FieldCacheImpl::~FieldCacheImpl(){ - cache.clear(); -} - -FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, int32_t type) { - this->field = CLStringIntern::intern(field CL_FILELINE); - this->type = type; - this->custom = NULL; - this->_hashCode = 0; - } - - /** Creates one of these objects for a custom comparator. */ - FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, SortComparatorSource* custom) { - this->field = CLStringIntern::intern(field CL_FILELINE); - this->type = SortField::CUSTOM; - this->custom = custom; - this->_hashCode = 0; - } - FieldCacheImpl::FileEntry::~FileEntry(){ - CLStringIntern::unintern(field); - } - - size_t FieldCacheImpl::FileEntry::hashCode(){ - if ( _hashCode == 0 ){ - //todo: cache hashcode? - size_t ret = Misc::thashCode(field); - if ( custom != NULL ) - ret = ret ^ custom->hashCode(); - ret = ret ^ (type*7); //type with a seed - _hashCode = ret; - } - return _hashCode; - } - int32_t FieldCacheImpl::FileEntry::compareTo(const FieldCacheImpl::FileEntry* other) const{ - if ( other->field == this->field ){ - if ( other->type == this->type ){ - if ( other->custom == NULL ){ - if ( this->custom == NULL ) - return 0; //both null - else - return 1; - }else if ( this->custom == NULL ) - return -1; - else if ( other->custom < this->custom ) - return -1; - else if ( other->custom > this->custom ) - return 1; - else - return 0; - }else if ( other->type > this->type ) - return 1; - else - return -1; - - }else - return _tcscmp(other->field,this->field); - } - - /** Two of these are equal iff they reference the same field and type. */ - /*bool FieldCacheImpl::FileEntry::equals (FileEntry* other) { - if (other->field == field && other->type == type) { - if (other->custom == NULL) { - if (custom == NULL) - return true; - } else if (other->custom->equals (custom)) { - return true; - } - } - }*/ - - /** Composes a hashcode based on the field and type. */ - /*size_t FieldCacheImpl::FileEntry::hashCode() { - return field->hashCode() ^ type ^ (custom==NULL ? 0 : custom->hashCode()); - }*/ - - - - - - /** See if an object is in the cache. */ - FieldCacheAuto* FieldCacheImpl::lookup (IndexReader* reader, const TCHAR* field, int32_t type) { - FieldCacheAuto* ret = NULL; - FileEntry* entry = _CLNEW FileEntry (field, type); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - fieldcacheCacheReaderType* readerCache = cache.get(reader); - if (readerCache != NULL) - ret = readerCache->get (entry); - _CLDELETE(entry); - } - return ret; - } - - - /** See if a custom object is in the cache. */ - FieldCacheAuto* FieldCacheImpl::lookup (IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer) { - FieldCacheAuto* ret = NULL; - FileEntry* entry = _CLNEW FileEntry (field, comparer); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - fieldcacheCacheReaderType* readerCache = cache.get(reader); - if (readerCache != NULL) - ret = readerCache->get (entry); - _CLDELETE(entry); -} - return ret; - } - - void FieldCacheImpl::closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl){ - FieldCacheImpl* fci = (FieldCacheImpl*)fieldCacheImpl; - SCOPED_LOCK_MUTEX(fci->THIS_LOCK) - fci->cache.remove(reader); - } - - /** Put an object into the cache. */ - void FieldCacheImpl::store (IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value) { - FileEntry* entry = _CLNEW FileEntry (field, type); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - fieldcacheCacheReaderType* readerCache = cache.get(reader); - if (readerCache == NULL) { - readerCache = _CLNEW fieldcacheCacheReaderType; - cache.put(reader,readerCache); - reader->addCloseCallback(closeCallback, this); - } - readerCache->put (entry, value); - //this is supposed to return the previous value, but it needs to be deleted!!! - } - } - - /** Put a custom object into the cache. */ - void FieldCacheImpl::store (IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value) { - FileEntry* entry = _CLNEW FileEntry (field, comparer); - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - fieldcacheCacheReaderType* readerCache = cache.get(reader); - if (readerCache == NULL) { - readerCache = _CLNEW fieldcacheCacheReaderType; - cache.put(reader, readerCache); - reader->addCloseCallback(FieldCacheImpl::closeCallback, this); - } - readerCache->put(entry, value); - //this is supposed to return the previous value, but it needs to be deleted!!! - } - } - - - - - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getInts (IndexReader* reader, const TCHAR* field) { - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, SortField::INT); - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - int32_t* retArray = _CL_NEWARRAY(int32_t,retLen); - memset(retArray,0,sizeof(int32_t)*retLen); - if (retLen > 0) { - TermDocs* termDocs = reader->termDocs(); - - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* termEnum = reader->terms (term); - _CLDECDELETE(term); - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field"); //todo: add detailed error: + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - - TCHAR* end; - int32_t termval = (int32_t)_tcstoi64(term->text(), &end, 10); - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = termval; - } - } while (termEnum->next()); - } _CLFINALLY( - termDocs->close(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ) - } - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::INT_ARRAY); - fa->intArray = retArray; - - store (reader, field, SortField::INT, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getFloats (IndexReader* reader, const TCHAR* field){ - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, SortField::FLOAT); - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - float_t* retArray = _CL_NEWARRAY(float_t,retLen); - memset(retArray,0,sizeof(float_t)*retLen); - if (retLen > 0) { - TermDocs* termDocs = reader->termDocs(); - - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* termEnum = reader->terms (term); - _CLDECDELETE(term); - - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: make richer error + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - - TCHAR* tmp; - float_t termval = _tcstod(term->text(),&tmp); - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = termval; - } - } while (termEnum->next()); - } _CLFINALLY( - termDocs->close(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ) - } - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::FLOAT_ARRAY); - fa->floatArray = retArray; - - store (reader, field, SortField::FLOAT, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getStrings (IndexReader* reader, const TCHAR* field){ - //todo: this is not really used, i think? - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, SortField::STRING); - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - TCHAR** retArray = _CL_NEWARRAY(TCHAR*,retLen+1); - memset(retArray,0,sizeof(TCHAR*)*(retLen+1)); - if (retLen > 0) { - TermDocs* termDocs = reader->termDocs(); - - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* termEnum = reader->terms (term); - _CLDECDELETE(term); - - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: extend to + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - const TCHAR* termval = term->text(); - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = STRDUP_TtoT(termval); //todo: any better way of doing this??? - } - } while (termEnum->next()); - } _CLFINALLY( - retArray[retLen]=NULL; - termDocs->close(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ) - } - - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::STRING_ARRAY); - fa->stringArray = retArray; - fa->ownContents=true; - store (reader, field, SortField::STRING, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getStringIndex (IndexReader* reader, const TCHAR* field){ - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, STRING_INDEX); - int32_t t = 0; // current term number - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - int32_t* retArray = _CL_NEWARRAY(int32_t,retLen); - memset(retArray,0,sizeof(int32_t)*retLen); - - TCHAR** mterms = _CL_NEWARRAY(TCHAR*,retLen+2); - mterms[0]=NULL; - if ( retLen > 0 ) { - TermDocs* termDocs = reader->termDocs(); - - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* termEnum = reader->terms (term); - _CLDECDELETE(term); - - - CND_PRECONDITION(t+1 <= retLen, "t out of bounds"); - - // an entry for documents that have no terms in this field - // should a document with no terms be at top or bottom? - // this puts them at the top - if it is changed, FieldDocSortedHitQueue - // needs to change as well. - mterms[t++] = NULL; - - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field"); //todo: make rich message " + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - - // store term text - // we expect that there is at most one term per document - if (t >= retLen+1) - _CLTHROWA(CL_ERR_Runtime,"there are more terms than documents in field"); //todo: rich error \"" + field + "\""); - mterms[t] = STRDUP_TtoT(term->text()); - - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = t; - } - - t++; - } while (termEnum->next()); - CND_PRECONDITION(tclose(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ); - - if (t == 0) { - // if there are no terms, make the term array - // have a single NULL entry - _CLDELETE_ARRAY(mterms); - mterms = _CL_NEWARRAY(TCHAR*,1); //todo: delete old mterms? - mterms[0]=NULL; - } else if (t < retLen) { //todo: check, was mterms.length - // if there are less terms than documents, - // trim off the dead array space - //const TCHAR** terms = _CL_NEWARRAY(TCHAR,t); - //System.arraycopy (mterms, 0, terms, 0, t); - //mterms = terms; - - //we simply shorten the length of the array... - - } - } - FieldCache::StringIndex* value = _CLNEW FieldCache::StringIndex (retArray, mterms,t); - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::STRING_INDEX); - fa->stringIndex = value; - fa->ownContents=true; - store (reader, field, STRING_INDEX, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getAuto (IndexReader* reader, const TCHAR* field) { - field = CLStringIntern::intern(field CL_FILELINE); - FieldCacheAuto* ret = lookup (reader, field, SortField::AUTO); - if (ret == NULL) { - Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); - TermEnum* enumerator = reader->terms (term); - _CLDECDELETE(term); - - try { - Term* term = enumerator->term(false); - if (term == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field - cannot determine sort type"); //todo: make rich error: " + field + " - } - if (term->field() == field) { - const TCHAR* termtext = term->text(); - size_t termTextLen = term->textLength(); - - bool isint=true; - for ( size_t i=0;iclose(); _CLDELETE(enumerator) ); - - } - CLStringIntern::unintern(field); - return ret; - } - - - // inherit javadocs - FieldCacheAuto* FieldCacheImpl::getCustom (IndexReader* reader, const TCHAR* field, SortComparator* comparator){ - field = CLStringIntern::intern(field CL_FILELINE); - - FieldCacheAuto* ret = lookup (reader, field, comparator); - if (ret == NULL) { - int32_t retLen = reader->maxDoc(); - Comparable** retArray = _CL_NEWARRAY(Comparable*,retLen); - memset(retArray,0,sizeof(Comparable*)*retLen); - if (retLen > 0) { - TermDocs* termDocs = reader->termDocs(); - TermEnum* termEnum = reader->terms (); - - try { - if (termEnum->term(false) == NULL) { - _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: make rich error + field); - } - do { - Term* term = termEnum->term(false); - if (term->field() != field) - break; - Comparable* termval = comparator->getComparable (term->text()); - termDocs->seek (termEnum); - while (termDocs->next()) { - retArray[termDocs->doc()] = termval; - } - } while (termEnum->next()); - } _CLFINALLY ( - termDocs->close(); - _CLDELETE(termDocs); - termEnum->close(); - _CLDELETE(termEnum); - ); - } - - FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::COMPARABLE_ARRAY); - fa->comparableArray = retArray; - fa->ownContents=true; - store (reader, field, SortField::CUSTOM, fa); - CLStringIntern::unintern(field); - return fa; - } - CLStringIntern::unintern(field); - return ret; - } - - - FieldCacheImpl::fieldcacheCacheReaderType::fieldcacheCacheReaderType(){ - setDeleteKey(false); - setDeleteValue(false); - } - FieldCacheImpl::fieldcacheCacheReaderType::~fieldcacheCacheReaderType(){ - iterator itr = begin(); - while ( itr != end() ){ - FileEntry* f = itr->first; - if ( f->getType() != SortField::AUTO ) - _CLDELETE( itr->second ); - _CLDELETE( f ); - ++itr; - } - clear(); - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/FieldCacheImpl.h clucene-core-2.3.3.4/src/CLucene/search/FieldCacheImpl.h --- clucene-core-0.9.21b/src/CLucene/search/FieldCacheImpl.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FieldCacheImpl.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FieldCacheImpl_ -#define _lucene_search_FieldCacheImpl_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "FieldCache.h" -#include "Sort.h" - - -CL_NS_DEF(search) - - -/** - * Expert: The default cache implementation, storing all values in memory. - * - */ -class FieldCacheImpl: public FieldCache { -public: - DEFINE_MUTEX(THIS_LOCK) - - /** Expert: Every key in the internal cache is of this type. */ - class FileEntry:LUCENE_BASE { - const TCHAR* field; // which Field - int32_t type; // which SortField type - SortComparatorSource* custom; // which custom comparator - size_t _hashCode; - public: - /** Creates one of these objects. */ - FileEntry (const TCHAR* field, int32_t type); - - /** Creates one of these objects for a custom comparator. */ - FileEntry (const TCHAR* field, SortComparatorSource* custom); - ~FileEntry(); - - int32_t getType() const{ return type; } - - /** Two of these are equal iff they reference the same field and type. */ - bool equals (FileEntry* other) const; - - /** Composes a hashcode based on the field and type. */ - size_t hashCode(); - - int32_t compareTo(const FileEntry* other) const; - - class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // - { - public: - bool operator()( FileEntry* f1, FileEntry* f2 ) const{ - return ( f1->compareTo(f2) < 0 ); - } - size_t operator()( FileEntry* t ) const{ - return t->hashCode(); - } - }; - class Equals:LUCENE_BASE, public CL_NS(util)::Compare::_base // - { - public: - bool operator()( FileEntry* f1, FileEntry* f2 ) const{ - return ( f1->compareTo(f2) == 0 ); - } - }; - }; - - FieldCacheImpl(); - ~FieldCacheImpl(); -private: - - ///the type that is stored in the field cache. can't use a typedef because - ///the decorated name would become too long - class fieldcacheCacheReaderType: public CL_NS(util)::CLHashMap, - CL_NS(util)::Deletor::Object >{ - public: - fieldcacheCacheReaderType(); - ~fieldcacheCacheReaderType(); - }; - - //note: typename gets too long if using cacheReaderType as a typename - typedef CL_NS(util)::CLHashMap, - CL_NS(util)::Equals::Void, - CL_NS(util)::Deletor::Object, - CL_NS(util)::Deletor::Object > fieldcacheCacheType; - - /** The internal cache. Maps FileEntry to array of interpreted term values. **/ - //todo: make indexreader remove itself from here when the reader is shut - fieldcacheCacheType cache; - - /** See if an object is in the cache. */ - FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type) ; - - /** See if a custom object is in the cache. */ - FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer); - - /** Put an object into the cache. */ - void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value); - - /** Put a custom object into the cache. */ - void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value); - -public: - - // inherit javadocs - FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field); - - // inherit javadocs - FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator); - - - /** - * Callback for when IndexReader closes. This causes - * any cache to be removed for the specified reader. - */ - static void closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl); -}; - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/FieldDoc.h clucene-core-2.3.3.4/src/CLucene/search/FieldDoc.h --- clucene-core-0.9.21b/src/CLucene/search/FieldDoc.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FieldDoc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FieldDoc_ -#define _lucene_search_FieldDoc_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "ScoreDoc.h" - -CL_NS_DEF(search) - -/** - * Expert: A ScoreDoc which also contains information about - * how to sort the referenced document. In addition to the - * document number and score, this object contains an array - * of values for the document from the field(s) used to sort. - * For example, if the sort criteria was to sort by fields - * "a", "b" then "c", the fields object array - * will have three elements, corresponding respectively to - * the term values for the document in fields "a", "b" and "c". - * The class of each element in the array will be either - * Integer, Float or String depending on the type of values - * in the terms of each field. - * - * @see ScoreDoc - * @see TopFieldDocs - */ -class FieldDoc: public ScoreDoc { -public: - - /** Expert: The values which are used to sort the referenced document. - * The order of these will match the original sort criteria given by a - * Sort object. Each Object will be either an Integer, Float or String, - * depending on the type of values in the terms of the original field. - * @see Sort - * @see Searchable#search(Query,Filter,int32_t,Sort) - */ - CL_NS(util)::Comparable** fields; - - /** Expert: Creates one of these objects with empty sort information. */ - FieldDoc (int32_t doc, float_t score): - ScoreDoc(doc,score) { - fields=NULL; - } - - /** Expert: Creates one of these objects with the given sort information. */ - FieldDoc (int32_t doc, float_t score, CL_NS(util)::Comparable** fields): - ScoreDoc(doc,score) - { - this->fields = fields; - } - - ~FieldDoc(){ - if ( fields != NULL ){ - for ( int i=0;fields[i]!=NULL;i++ ) - _CLDELETE(fields[i]); - _CLDELETE_ARRAY(fields); - } - } -}; - -CL_NS_END -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/search/FieldDocSortedHitQueue.cpp clucene-core-2.3.3.4/src/CLucene/search/FieldDocSortedHitQueue.cpp --- clucene-core-0.9.21b/src/CLucene/search/FieldDocSortedHitQueue.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FieldDocSortedHitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,171 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldDocSortedHitQueue.h" - - -CL_NS_USE(util) -CL_NS_DEF(search) - - -FieldDoc::FieldDoc (int32_t doc, float_t score) -{ - this->scoreDoc.doc = doc; - this->scoreDoc.score = score; - fields=NULL; -} - -FieldDoc::FieldDoc (int32_t doc, float_t score, CL_NS(util)::Comparable** fields) -{ - this->scoreDoc.doc = doc; - this->scoreDoc.score = score; - this->fields = fields; -} - -FieldDoc::~FieldDoc(){ - if ( fields != NULL ){ - for ( int i=0;fields[i]!=NULL;i++ ) - _CLDELETE(fields[i]); - _CLDELETE_ARRAY(fields); - } -} - - - -FieldDocSortedHitQueue::FieldDocSortedHitQueue (SortField** fields, int32_t size) { - this->fields = fields; - _countsize(); - //this->collators = hasCollators (fields); - initialize (size,true); -} - -bool FieldDocSortedHitQueue::lessThan (FieldDoc* docA, FieldDoc* docB) { - int32_t n = fieldsLen; - int32_t c = 0; - float_t f1,f2,r1,r2; - int32_t i1,i2; - const TCHAR *s1, *s2; - - for (int32_t i=0; igetType(); - if (fields[i]->getReverse()) { - switch (type) { - case SortField::DOCSCORE: - r1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue(); - r2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue(); - if (r1 < r2) c = -1; - if (r1 > r2) c = 1; - break; - case SortField::DOC: - case SortField::INT: - i1 = __REINTERPRET_CAST(Compare::Int32*, docA->fields[i])->getValue(); - i2 = __REINTERPRET_CAST(Compare::Int32*, docB->fields[i])->getValue(); - if (i1 > i2) c = -1; - if (i1 < i2) c = 1; - break; - case SortField::STRING: - s1 = __REINTERPRET_CAST(Compare::TChar*, docA->fields[i])->getValue(); - s2 = __REINTERPRET_CAST(Compare::TChar*, docB->fields[i])->getValue(); - if (s2 == NULL) c = -1; // could be NULL if there are - else if (s1 == NULL) c = 1; // no terms in the given field - else c = _tcscmp(s2,s1); //else if (fields[i].getLocale() == NULL) { - - /*todo: collators not impl - } else { - c = collators[i].compare (s2, s1); - }*/ - break; - case SortField::FLOAT: - f1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue(); - f2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue(); - if (f1 > f2) c = -1; - if (f1 < f2) c = 1; - break; - case SortField::CUSTOM: - c = docB->fields[i]->compareTo (docA->fields[i]); - break; - case SortField::AUTO: - // we cannot handle this - even if we determine the type of object (float_t or - // Integer), we don't necessarily know how to compare them (both SCORE and - // float_t both contain floats, but are sorted opposite of each other). Before - // we get here, each AUTO should have been replaced with its actual value. - _CLTHROWA (CL_ERR_Runtime,"FieldDocSortedHitQueue cannot use an AUTO SortField"); - default: - _CLTHROWA (CL_ERR_Runtime, "invalid SortField type"); //todo: rich error... : "+type); - } - } else { - switch (type) { - case SortField::DOCSCORE: - r1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue(); - r2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue(); - if (r1 > r2) c = -1; - if (r1 < r2) c = 1; - break; - case SortField::DOC: - case SortField::INT: - i1 = __REINTERPRET_CAST(Compare::Int32*, docA->fields[i])->getValue(); - i2 = __REINTERPRET_CAST(Compare::Int32*, docB->fields[i])->getValue(); - if (i1 < i2) c = -1; - if (i1 > i2) c = 1; - break; - case SortField::STRING: - s1 = __REINTERPRET_CAST(Compare::TChar*, docA->fields[i])->getValue(); - s2 = __REINTERPRET_CAST(Compare::TChar*, docB->fields[i])->getValue(); - // NULL values need to be sorted first, because of how FieldCache.getStringIndex() - // works - in that routine, any documents without a value in the given field are - // put first. - if (s1 == NULL) c = -1; // could be NULL if there are - else if (s2 == NULL) c = 1; // no terms in the given field - else c = _tcscmp(s1,s2); //else if (fields[i].getLocale() == NULL) { - - /* todo: collators not implemented } else { - c = collators[i].compare (s1, s2); - }*/ - break; - case SortField::FLOAT: - f1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue(); - f2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue(); - if (f1 < f2) c = -1; - if (f1 > f2) c = 1; - break; - case SortField::CUSTOM: - c = docA->fields[i]->compareTo (docB->fields[i]); - break; - case SortField::AUTO: - // we cannot handle this - even if we determine the type of object (float_t or - // Integer), we don't necessarily know how to compare them (both SCORE and - // float_t both contain floats, but are sorted opposite of each other). Before - // we get here, each AUTO should have been replaced with its actual value. - _CLTHROWA (CL_ERR_Runtime,"FieldDocSortedHitQueue cannot use an AUTO SortField"); - default: - _CLTHROWA (CL_ERR_Runtime,"invalid SortField type"); //todo: rich error... : "+type); - } - } - } - return c > 0; -} - -void FieldDocSortedHitQueue::setFields (SortField** fields) { - SCOPED_LOCK_MUTEX(THIS_LOCK) - if (this->fields == NULL) { - this->fields = fields; - _countsize(); - //this->collators = hasCollators (fields); - }else if ( fields == NULL ) - this->fields = NULL; -} - -FieldDocSortedHitQueue::~FieldDocSortedHitQueue(){ - if ( fields != NULL ){ - for ( int i=0;fields[i]!=NULL;i++ ) - _CLDELETE(fields[i]); - _CLDELETE_ARRAY(fields); - } -} - -CL_NS_END - diff -Nru clucene-core-0.9.21b/src/CLucene/search/FieldDocSortedHitQueue.h clucene-core-2.3.3.4/src/CLucene/search/FieldDocSortedHitQueue.h --- clucene-core-0.9.21b/src/CLucene/search/FieldDocSortedHitQueue.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FieldDocSortedHitQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FieldDocSortedHitQueue_ -#define _lucene_search_FieldDocSortedHitQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Sort.h" -#include "CLucene/util/PriorityQueue.h" - -CL_NS_DEF(search) - -/** - * Expert: A ScoreDoc which also contains information about - * how to sort the referenced document. In addition to the - * document number and score, this object contains an array - * of values for the document from the field(s) used to sort. - * For example, if the sort criteria was to sort by fields - * "a", "b" then "c", the fields object array - * will have three elements, corresponding respectively to - * the term values for the document in fields "a", "b" and "c". - * The class of each element in the array will be either - * Integer, Float or String depending on the type of values - * in the terms of each field. - * - * @see ScoreDoc - * @see TopFieldDocs - */ -class FieldDoc: LUCENE_BASE { -public: - //FieldDoc did inherit from ScoreDoc, but now we make the scoredoc a member - struct ScoreDoc scoreDoc; - - /** Expert: The values which are used to sort the referenced document. - * The order of these will match the original sort criteria given by a - * Sort object. Each Object will be either an Integer, Float or String, - * depending on the type of values in the terms of the original field. - * @see Sort - * @see Searchable#search(Query,Filter,int32_t,Sort) - */ - CL_NS(util)::Comparable** fields; - - /** Expert: Creates one of these objects with empty sort information. */ - FieldDoc (int32_t doc, float_t score); - /** Expert: Creates one of these objects with the given sort information. */ - FieldDoc (int32_t doc, float_t score, CL_NS(util)::Comparable** fields); - ~FieldDoc(); -}; - -/** - * Expert: Collects sorted results from Searchable's and collates them. - * The elements put into this queue must be of type FieldDoc. - */ -class FieldDocSortedHitQueue: - public CL_NS(util)::PriorityQueue > -{ -private: - DEFINE_MUTEX(THIS_LOCK) - - // this cannot contain AUTO fields - any AUTO fields should - // have been resolved by the time this class is used. - SortField** fields; - int32_t fieldsLen; - - void _countsize(){ - fieldsLen=0; - while(fields[fieldsLen]!=NULL) - fieldsLen++; - } - - // used in the case where the fields are sorted by locale - // based strings - //todo: not implemented in clucene because locales has not been implemented - //Collator[] collators; //volatile - -public: - /** - * Creates a hit queue sorted by the given list of fields. - * @param fields Field names, in priority order (highest priority first). - * @param size The number of hits to retain. Must be greater than zero. - */ - FieldDocSortedHitQueue (SortField** fields, int32_t size); - ~FieldDocSortedHitQueue(); - - - /** - * Allows redefinition of sort fields if they are NULL. - * This is to handle the case using ParallelMultiSearcher where the - * original list contains AUTO and we don't know the actual sort - * type until the values come back. The fields can only be set once. - * This method is thread safe. - * @param fields - */ - void setFields (SortField** fields); - - /** Returns the fields being used to sort. */ - SortField** getFields() { - return fields; - } - - /** Returns an array of collators, possibly NULL. The collators - * correspond to any SortFields which were given a specific locale. - * @param fields Array of sort fields. - * @return Array, possibly NULL. - - private Collator[] hasCollators (SortField[] fields) { - if (fields == NULL) return NULL; - Collator[] ret = new Collator[fields.length]; - for (int32_t i=0; ia is less relevant than b. - * @param a FieldDoc - * @param b FieldDoc - * @return true if document a should be sorted after document b. - */ - bool lessThan (FieldDoc* docA, FieldDoc* docB); -}; - - -/** -* Expert: Returned by low-level sorted search implementations. -* -* @see Searchable#search(Query,Filter,int32_t,Sort) -*/ -class TopFieldDocs: public TopDocs { -public: - /// The fields which were used to sort results by. - SortField** fields; - - FieldDoc** fieldDocs; - - /** Creates one of these objects. - * @param totalHits Total number of hits for the query. - * @param fieldDocs The top hits for the query. - * @param scoreDocs The top hits for the query. - * @param scoreDocsLen Length of fieldDocs and scoreDocs - * @param fields The sort criteria used to find the top hits. - */ - TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields); - ~TopFieldDocs(); -}; - -CL_NS_END -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/search/FieldSortedHitQueue.cpp clucene-core-2.3.3.4/src/CLucene/search/FieldSortedHitQueue.cpp --- clucene-core-0.9.21b/src/CLucene/search/FieldSortedHitQueue.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FieldSortedHitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FieldSortedHitQueue.h" -#include "FieldDocSortedHitQueue.h" -#include "Compare.h" - -CL_NS_USE(util) -CL_NS_USE(index) -CL_NS_DEF(search) - -FieldSortedHitQueue::hitqueueCacheType FieldSortedHitQueue::Comparators(false,true); - -FieldSortedHitQueue::FieldSortedHitQueue (IndexReader* reader, SortField** _fields, int32_t size): - fieldsLen(0), - maxscore(1.0f) -{ - while ( _fields[fieldsLen] != 0 ) - fieldsLen++; - - comparators = _CL_NEWARRAY(ScoreDocComparator*,fieldsLen+1); - SortField** tmp = _CL_NEWARRAY(SortField*,fieldsLen+1); - for (int32_t i=0; igetField(); - //todo: fields[i].getLocale(), not implemented - comparators[i] = getCachedComparator (reader, fieldname, _fields[i]->getType(), _fields[i]->getFactory()); - tmp[i] = _CLNEW SortField (fieldname, comparators[i]->sortType(), _fields[i]->getReverse()); - } - comparatorsLen = fieldsLen; - comparators[fieldsLen]=NULL; - tmp[fieldsLen] = NULL; - this->fields = tmp; - - initialize(size,true); -} - - -bool FieldSortedHitQueue::lessThan (FieldDoc* docA, FieldDoc* docB) { - // keep track of maximum score - if (docA->scoreDoc.score > maxscore) maxscore = docA->scoreDoc.score; - if (docB->scoreDoc.score > maxscore) maxscore = docB->scoreDoc.score; - - // run comparators - int32_t c = 0; - for ( int32_t i=0; c==0 && igetReverse()) ? comparators[i]->compare (&docB->scoreDoc, &docA->scoreDoc) : - comparators[i]->compare (&docA->scoreDoc, &docB->scoreDoc); - } - // avoid random sort order that could lead to duplicates (bug #31241): - if (c == 0) - return docA->scoreDoc.doc > docB->scoreDoc.doc; - return c > 0; -} - - -//static -ScoreDocComparator* FieldSortedHitQueue::comparatorString (IndexReader* reader, const TCHAR* field) { - //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE); - FieldCacheAuto* fa = FieldCache::DEFAULT->getStringIndex (reader, field); - //CLStringIntern::unintern(field); - - CND_PRECONDITION(fa->contentType==FieldCacheAuto::STRING_INDEX,"Content type is incorrect"); - fa->ownContents = false; - return _CLNEW ScoreDocComparators::String(fa->stringIndex, fa->contentLen); -} - -//static -ScoreDocComparator* FieldSortedHitQueue::comparatorInt (IndexReader* reader, const TCHAR* field){ - //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE); - FieldCacheAuto* fa = FieldCache::DEFAULT->getInts (reader, field); - //CLStringIntern::unintern(field); - - CND_PRECONDITION(fa->contentType==FieldCacheAuto::INT_ARRAY,"Content type is incorrect"); - return _CLNEW ScoreDocComparators::Int32(fa->intArray, fa->contentLen); - } - -//static - ScoreDocComparator* FieldSortedHitQueue::comparatorFloat (IndexReader* reader, const TCHAR* field) { - //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE); - FieldCacheAuto* fa = FieldCache::DEFAULT->getFloats (reader, field); - //CLStringIntern::unintern(field); - - CND_PRECONDITION(fa->contentType==FieldCacheAuto::FLOAT_ARRAY,"Content type is incorrect"); - return _CLNEW ScoreDocComparators::Float (fa->floatArray, fa->contentLen); - } -//static - ScoreDocComparator* FieldSortedHitQueue::comparatorAuto (IndexReader* reader, const TCHAR* field){ - //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE); - FieldCacheAuto* fa = FieldCache::DEFAULT->getAuto (reader, field); - //CLStringIntern::unintern(field); - - if (fa->contentType == FieldCacheAuto::STRING_INDEX ) { - return comparatorString (reader, field); - } else if (fa->contentType == FieldCacheAuto::INT_ARRAY) { - return comparatorInt (reader, field); - } else if (fa->contentType == FieldCacheAuto::FLOAT_ARRAY) { - return comparatorFloat (reader, field); - } else if (fa->contentType == FieldCacheAuto::STRING_ARRAY) { - return comparatorString (reader, field); - } else { - _CLTHROWA(CL_ERR_Runtime, "unknown data type in field"); //todo: rich error information: '"+field+"'"); - } - } - - - //todo: Locale locale, not implemented yet - ScoreDocComparator* FieldSortedHitQueue::getCachedComparator (IndexReader* reader, const TCHAR* fieldname, int32_t type, SortComparatorSource* factory){ - if (type == SortField::DOC) - return ScoreDocComparator::INDEXORDER; - if (type == SortField::DOCSCORE) - return ScoreDocComparator::RELEVANCE; - ScoreDocComparator* comparator = lookup (reader, fieldname, type, factory); - if (comparator == NULL) { - switch (type) { - case SortField::AUTO: - comparator = comparatorAuto (reader, fieldname); - break; - case SortField::INT: - comparator = comparatorInt (reader, fieldname); - break; - case SortField::FLOAT: - comparator = comparatorFloat (reader, fieldname); - break; - case SortField::STRING: - //if (locale != NULL) - // comparator = comparatorStringLocale (reader, fieldname, locale); - //else - comparator = comparatorString (reader, fieldname); - break; - case SortField::CUSTOM: - comparator = factory->newComparator (reader, fieldname); - break; - default: - _CLTHROWA(CL_ERR_Runtime,"unknown field type"); - //todo: extend error - //throw _CLNEW RuntimeException ("unknown field type: "+type); - } - store (reader, fieldname, type, factory, comparator); - } - return comparator; - } - - - FieldDoc* FieldSortedHitQueue::fillFields (FieldDoc* doc) const{ - int32_t n = comparatorsLen; - Comparable** fields = _CL_NEWARRAY(Comparable*,n+1); - for (int32_t i=0; isortValue(&doc->scoreDoc); - fields[n]=NULL; - doc->fields = fields; - if (maxscore > 1.0f) - doc->scoreDoc.score /= maxscore; // normalize scores - return doc; - } - - ScoreDocComparator* FieldSortedHitQueue::lookup (IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory) { - ScoreDocComparator* sdc = NULL; - FieldCacheImpl::FileEntry* entry = (factory != NULL) - ? _CLNEW FieldCacheImpl::FileEntry (field, factory) - : _CLNEW FieldCacheImpl::FileEntry (field, type); - - { - SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK) - hitqueueCacheReaderType* readerCache = Comparators.get(reader); - if (readerCache == NULL){ - _CLDELETE(entry); - return NULL; - } - - sdc = readerCache->get (entry); - _CLDELETE(entry); - } - return sdc; - } - - void FieldSortedHitQueue::closeCallback(CL_NS(index)::IndexReader* reader, void*){ - SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK) - Comparators.remove(reader); - } - - //static - void FieldSortedHitQueue::store (IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory, ScoreDocComparator* value) { - FieldCacheImpl::FileEntry* entry = (factory != NULL) - ? _CLNEW FieldCacheImpl::FileEntry (field, factory) - : _CLNEW FieldCacheImpl::FileEntry (field, type); - - { - SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK) - hitqueueCacheReaderType* readerCache = Comparators.get(reader); - if (readerCache == NULL) { - readerCache = _CLNEW hitqueueCacheReaderType(true); - Comparators.put(reader,readerCache); - reader->addCloseCallback(FieldSortedHitQueue::closeCallback,NULL); - } - readerCache->put (entry, value); - //return NULL; //supposed to return previous value... - } - } - -FieldSortedHitQueue::~FieldSortedHitQueue(){ - _CLDELETE_ARRAY(comparators); - if ( fields != NULL ){ - for ( int i=0;fields[i]!=NULL;i++ ) - _CLDELETE(fields[i]); - _CLDELETE_ARRAY(fields); - } -} -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/FieldSortedHitQueue.h clucene-core-2.3.3.4/src/CLucene/search/FieldSortedHitQueue.h --- clucene-core-0.9.21b/src/CLucene/search/FieldSortedHitQueue.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FieldSortedHitQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,216 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FieldSortedHitQueue_ -#define _lucene_search_FieldSortedHitQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "FieldCache.h" -#include "Sort.h" -#include "FieldDocSortedHitQueue.h" -#include "SearchHeader.h" -#include "FieldCacheImpl.h" -#include "CLucene/util/PriorityQueue.h" - -CL_NS_DEF(search) - - -/** - * Expert: A hit queue for sorting by hits by terms in more than one field. - * Uses FieldCache.DEFAULT for maintaining internal term lookup tables. - * - * @see Searchable#search(Query,Filter,int32_t,Sort) - * @see FieldCache - */ -class FieldSortedHitQueue: public CL_NS(util)::PriorityQueue > { - - ///the type that is stored in the field cache. can't use a typedef because - ///the decorated name would become too long - class hitqueueCacheReaderType: public CL_NS(util)::CLHashMap, - CL_NS(util)::Deletor::Object >{ - - public: - hitqueueCacheReaderType(bool deleteValue){ - setDeleteKey(true); - setDeleteValue(deleteValue); - } - ~hitqueueCacheReaderType(){ - clear(); - } - - }; - -public: //todo: remove this and below after close callback is implemented - //note: typename gets too long if using cacheReaderType as a typename - typedef CL_NS(util)::CLHashMap, - CL_NS(util)::Equals::Void, - CL_NS(util)::Deletor::Object, - CL_NS(util)::Deletor::Object > hitqueueCacheType; - - /** Internal cache of comparators. Similar to FieldCache, only - * caches comparators instead of term values. - */ - static hitqueueCacheType Comparators; -private: - - /** Returns a comparator if it is in the cache.*/ - static ScoreDocComparator* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory); - - /** Stores a comparator into the cache. - returns the valid ScoreDocComparator. - */ - static void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory, ScoreDocComparator* value); - - - //todo: Locale locale, not implemented yet - static ScoreDocComparator* getCachedComparator (CL_NS(index)::IndexReader* reader, - const TCHAR* fieldname, int32_t type, SortComparatorSource* factory); - - - /** - * Returns a comparator for sorting hits according to a field containing integers. - * @param reader Index to use. - * @param fieldname Field containg integer values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator* comparatorInt (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - /** - * Returns a comparator for sorting hits according to a field containing floats. - * @param reader Index to use. - * @param fieldname Field containg float values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator* comparatorFloat (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - /** - * Returns a comparator for sorting hits according to a field containing strings. - * @param reader Index to use. - * @param fieldname Field containg string values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator* comparatorString (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - - //todo: - /** - * Returns a comparator for sorting hits according to a field containing strings. - * @param reader Index to use. - * @param fieldname Field containg string values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - - static ScoreDocComparator* comparatorStringLocale (IndexReader* reader, TCHAR* fieldname, Locale locale){ - Collator collator = Collator.getInstance (locale); - TCHAR* field = fieldname.intern(); - TCHAR** index = FieldCache.DEFAULT.getStrings (reader, field); - return _CLNEW ScoreDocComparator() { - - public int32_t compare (ScoreDoc i, ScoreDoc j) { - return collator.compare (index[i.doc], index[j.doc]); - } - - public Comparable sortValue (ScoreDoc i) { - return index[i.doc]; - } - - public int32_t sortType() { - return SortField.STRING; - } - }; - }*/ - - /** - * Returns a comparator for sorting hits according to values in the given field. - * The terms in the field are looked at to determine whether they contain integers, - * floats or strings. Once the type is determined, one of the other static methods - * in this class is called to get the comparator. - * @param reader Index to use. - * @param fieldname Field containg values. - * @return Comparator for sorting hits. - * @throws IOException If an error occurs reading the index. - */ - static ScoreDocComparator* comparatorAuto (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - -protected: - /** Stores a comparator corresponding to each field being sorted by */ - ScoreDocComparator** comparators; - int32_t comparatorsLen; - - /** Stores the sort criteria being used. */ - SortField** fields; - int32_t fieldsLen; - - /** Stores the maximum score value encountered, for normalizing. - * we only care about scores greater than 1.0 - if all the scores - * are less than 1.0, we don't have to normalize. */ - float_t maxscore; - - /** - * Returns whether a is less relevant than b. - * @param a ScoreDoc - * @param b ScoreDoc - * @return true if document a should be sorted after document b. - */ - bool lessThan (FieldDoc* docA, FieldDoc* docB); -public: - - /** - * Creates a hit queue sorted by the given list of fields. - * @param reader Index to use. - * @param fields Field names, in priority order (highest priority first). Cannot be null or empty. - * @param size The number of hits to retain. Must be greater than zero. - * @throws IOException - */ - FieldSortedHitQueue (CL_NS(index)::IndexReader* reader, SortField** fields, int32_t size); - - ~FieldSortedHitQueue(); - - /** - * Callback for when IndexReader closes. This causes - * any Comparators to be removed for the specified reader. - */ - static void closeCallback(CL_NS(index)::IndexReader* reader, void* param); - - /** - * Given a FieldDoc object, stores the values used - * to sort the given document. These values are not the raw - * values out of the index, but the internal representation - * of them. This is so the given search hit can be collated - * by a MultiSearcher with other search hits. - * @param doc The FieldDoc to store sort values into. - * @return The same FieldDoc passed in. - * @see Searchable#search(Query,Filter,int32_t,Sort) - */ - FieldDoc* fillFields (FieldDoc* doc) const; - - void setFields (SortField** fields){ - this->fields = fields; - } - - /** Returns the SortFields being used by this hit queue. */ - SortField** getFields() { - return fields; - } -}; - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/FilteredTermEnum.cpp clucene-core-2.3.3.4/src/CLucene/search/FilteredTermEnum.cpp --- clucene-core-0.9.21b/src/CLucene/search/FilteredTermEnum.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FilteredTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#include "FilteredTermEnum.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - - FilteredTermEnum::FilteredTermEnum(){ - //Func - Constructor - //Pre - true - //Post - Instance has been created - - currentTerm = NULL; - actualEnum = NULL; - } - - FilteredTermEnum::~FilteredTermEnum() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - close(); - } - - int32_t FilteredTermEnum::docFreq() const { - //Func - Returns the docFreq of the current Term in the enumeration. - //Pre - next() must have been called at least once - //Post - if actualEnum is NULL result is -1 otherwise the frequencey is returned - - if (actualEnum == NULL){ - return -1; - } - return actualEnum->docFreq(); - } - - bool FilteredTermEnum::next() { - //Func - Increments the enumeration to the next element. - //Pre - true - //Post - Returns True if the enumeration has been moved to the next element otherwise false - - //The actual enumerator is not initialized! - if (actualEnum == NULL){ - return false; - } - - //Finalize the currentTerm and reset it to NULL - _CLDECDELETE( currentTerm ); - - //Iterate through the enumeration - while (currentTerm == NULL) { - if (endEnum()) - return false; - if (actualEnum->next()) { - //Order term not to return reference ownership here. */ - Term* term = actualEnum->term(false); - //Compare the retrieved term - if (termCompare(term)){ - //Matched so finalize the current - _CLDECDELETE(currentTerm); - //Get a reference to the matched term - currentTerm = _CL_POINTER(term); - return true; - } - }else - return false; - } - _CLDECDELETE(currentTerm); - currentTerm = NULL; - - return false; - } - - Term* FilteredTermEnum::term() { - //Func - Returns the current Term in the enumeration. - //Pre - next() must have been called at least once - // pointer is true or false - //Post - if pre(pointer) is true the reference counter of currentTerm is increased - // and current Term is returned otherwise currentTerm is only returned - - return _CL_POINTER(currentTerm); - } - Term* FilteredTermEnum::term(bool pointer) { - if ( pointer ) - return _CL_POINTER(currentTerm); - else - return currentTerm; - } - - void FilteredTermEnum::close(){ - //Func - Closes the enumeration to further activity, freeing resources. - //Pre - true - //Post - The Enumeration has been closed - - //Check if actualEnum is valid - if (actualEnum){ - //Close the enumeration - actualEnum->close(); - } - - //Destroy the enumeration - _CLDELETE(actualEnum); - - //Destroy currentTerm - _CLDECDELETE(currentTerm); - } - - void FilteredTermEnum::setEnum(TermEnum* actualEnum) { - //Func - Sets the actual Enumeration - //Pre - actualEnum != NULL - //Post - The instance has been created - - CND_PRECONDITION(actualEnum != NULL,"actualEnum is NULL"); - - _CLDELETE(this->actualEnum); - - this->actualEnum = actualEnum; - - // Find the first term that matches - //Ordered term not to return reference ownership here. - Term* term = actualEnum->term(false); - if (term != NULL && termCompare(term)){ - _CLDECDELETE(currentTerm); - currentTerm = _CL_POINTER(term); - }else{ - next(); - } - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/FilteredTermEnum.h clucene-core-2.3.3.4/src/CLucene/search/FilteredTermEnum.h --- clucene-core-0.9.21b/src/CLucene/search/FilteredTermEnum.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FilteredTermEnum.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FilteredTermEnum_ -#define _lucene_search_FilteredTermEnum_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" - -CL_NS_DEF(search) - //FilteredTermEnum is an abstract class for enumerating a subset of all terms. - // - //Term enumerations are always ordered by term->compareTo(). Each term in - //the enumeration is greater than all that precede it. - - class FilteredTermEnum: public CL_NS(index)::TermEnum { - public: - //Constructor - FilteredTermEnum(); - //Destructor - virtual ~FilteredTermEnum(); - - //Equality measure on the term - virtual float_t difference() = 0; - - //Returns the docFreq of the current Term in the enumeration. - int32_t docFreq() const ; - - //Increments the enumeration to the next element - bool next() ; - - //Returns a pointer to the current Term in the enumeration. - CL_NS(index)::Term* term(); - CL_NS(index)::Term* term(bool pointer); - - //Closes the enumeration to further activity, freeing resources. - void close(); - - protected: - //Equality compare on the term */ - virtual bool termCompare(CL_NS(index)::Term* term) = 0; - - //Indiciates the end of the enumeration has been reached - virtual bool endEnum() = 0; - - void setEnum(CL_NS(index)::TermEnum* actualEnum) ; - - private: - CL_NS(index)::Term* currentTerm; - CL_NS(index)::TermEnum* actualEnum; - - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/Filter.h clucene-core-2.3.3.4/src/CLucene/search/Filter.h --- clucene-core-0.9.21b/src/CLucene/search/Filter.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Filter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Filter_ -#define _lucene_search_Filter_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/BitSet.h" - -CL_NS_DEF(search) - // Abstract base class providing a mechanism to restrict searches to a subset - // of an index. - class Filter: LUCENE_BASE { - public: - virtual ~Filter(){ - } - - virtual Filter* clone() const = 0; - - /** - * Returns a BitSet with true for documents which should be permitted in - * search results, and false for those that should not. - * MEMORY: read shouldDeleteBitSet - */ - virtual CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader)=0; - - /** - * Because of the problem of cached bitsets with the CachingWrapperFilter, - * CLucene has no way of knowing whether to delete the bitset returned from bits(). - * To properly clean memory from bits(), pass the bitset to this function. The - * Filter should be deleted if this function returns true. - */ - virtual bool shouldDeleteBitSet(const CL_NS(util)::BitSet* bs) const{ return true; } - - //Creates a user-readable version of this query and returns it as as string - virtual TCHAR* toString()=0; - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/FuzzyQuery.cpp clucene-core-2.3.3.4/src/CLucene/search/FuzzyQuery.cpp --- clucene-core-0.9.21b/src/CLucene/search/FuzzyQuery.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FuzzyQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,357 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FuzzyQuery.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - /** - * Constructor for enumeration of all terms from specified reader which share a prefix of - * length prefixLength with term and which have a fuzzy similarity > - * minSimilarity. - * - * @param reader Delivers terms. - * @param term Pattern term. - * @param minSimilarity Minimum required similarity for terms from the reader. Default value is 0.5f. - * @param prefixLength Length of required common prefix. Default value is 0. - * @throws IOException - */ - FuzzyTermEnum::FuzzyTermEnum(const IndexReader* reader, Term* term, float_t minSimilarity, size_t prefixLength): - distance(0), - _endEnum(false), - prefix(LUCENE_BLANK_STRING), - prefixLength(0), - minimumSimilarity(minSimilarity) - { - //Func - Constructor - //Pre - reader contains a valid reference to an IndexReader - // term != NULL - //Post - The instance has been created - - CND_PRECONDITION(term != NULL,"term is NULL"); - - scale_factor = 1.0f / (1.0f - minimumSimilarity); - searchTerm = _CL_POINTER(term); - - text = STRDUP_TtoT(term->text()); - textLen = term->textLength(); - - - //Initialize e to NULL - e = NULL; - eWidth = 0; - eHeight = 0; - - if(prefixLength > 0 && prefixLength < textLen){ - this->prefixLength = prefixLength; - - prefix = _CL_NEWARRAY(TCHAR,prefixLength+1); - _tcsncpy(prefix,text,prefixLength); - prefix[prefixLength]='\0'; - - textLen = prefixLength; - text[textLen]='\0'; - } - - - //Set the enumeration - Term* trm = _CLNEW Term(term, prefix); - setEnum(reader->terms(trm)); - _CLDECDELETE(trm); - } - - FuzzyTermEnum::~FuzzyTermEnum(){ - //Func - Destructor - //Pre - true - //Post - FuzzyTermEnum has been destroyed - - //Close the enumeration - close(); - } - - bool FuzzyTermEnum::endEnum() { - //Func - Returns the fact if the current term in the enumeration has reached the end - //Pre - true - //Post - The boolean value of endEnum has been returned - - return _endEnum; - } - - void FuzzyTermEnum::close(){ - //Func - Close the enumeration - //Pre - true - //Post - The enumeration has been closed - - FilteredTermEnum::close(); - - //Finalize the searchTerm - _CLDECDELETE(searchTerm); - //Destroy e - _CLDELETE_ARRAY(e); - - _CLDELETE_CARRAY(text); - - if ( prefix != LUCENE_BLANK_STRING ) - _CLDELETE_CARRAY(prefix); - } - - bool FuzzyTermEnum::termCompare(Term* term) { - //Func - Compares term with the searchTerm using the Levenshtein distance. - //Pre - term is NULL or term points to a Term - //Post - if pre(term) is NULL then false is returned otherwise - // if the distance of the current term in the enumeration is bigger than the FUZZY_THRESHOLD - // then true is returned - - if (term == NULL){ - return false; //Note that endEnum is not set to true! - } - - const TCHAR* termText = term->text(); - size_t termTextLen = term->textLength(); - - //Check if the field name of searchTerm of term match - //(we can use == because fields are interned) - if ( searchTerm->field() == term->field() && - (prefixLength==0 || _tcsncmp(termText,prefix,prefixLength)==0 )) { - - const TCHAR* target = termText+prefixLength; - size_t targetLen = termTextLen-prefixLength; - - //Calculate the Levenshtein distance - int32_t dist = editDistance(text, target, textLen, targetLen); - distance = 1 - ((float_t)dist / (float_t)min(textLen, targetLen)); - return (distance > minimumSimilarity); - } - _endEnum = true; - return false; - } - - float_t FuzzyTermEnum::difference() { - //Func - Returns the difference between the distance and the fuzzy threshold - // multiplied by the scale factor - //Pre - true - //Post - The difference is returned - - return (float_t)((distance - minimumSimilarity) * scale_factor ); - } - - - /** Finds and returns the smallest of three integers - precondition: Must define int32_t __t for temporary storage and result - */ - #define min3(a, b, c) __t = (a < b) ? a : b; __t = (__t < c) ? __t : c; - - int32_t FuzzyTermEnum::editDistance(const TCHAR* s, const TCHAR* t, const int32_t n, const int32_t m) { - //Func - Calculates the Levenshtein distance also known as edit distance is a measure of similiarity - // between two strings where the distance is measured as the number of character - // deletions, insertions or substitutions required to transform one string to - // the other string. - //Pre - s != NULL and contains the source string - // t != NULL and contains the target string - // n >= 0 and contains the length of the source string - // m >= 0 and containts the length of th target string - //Post - The distance has been returned - - CND_PRECONDITION(s != NULL, "s is NULL"); - CND_PRECONDITION(t != NULL, "t is NULL"); - CND_PRECONDITION(n >= 0," n is a negative number"); - CND_PRECONDITION(n >= 0," n is a negative number"); - - int32_t i; // iterates through s - int32_t j; // iterates through t - TCHAR s_i; // ith character of s - - if (n == 0) - return m; - if (m == 0) - return n; - - //Check if the array must be reallocated because it is too small or does not exist - if (e == NULL || eWidth <= n || eHeight <= m) { - //Delete e if possible - _CLDELETE_ARRAY(e); - //resize e - eWidth = max(eWidth, n+1); - eHeight = max(eHeight, m+1); - e = _CL_NEWARRAY(int32_t,eWidth*eHeight); - } - - CND_CONDITION(e != NULL,"e is NULL"); - - // init matrix e - for (i = 0; i <= n; i++){ - e[i + (0*eWidth)] = i; - } - for (j = 0; j <= m; j++){ - e[0 + (j*eWidth)] = j; - } - - int32_t __t; //temporary variable for min3 - - // start computing edit distance - for (i = 1; i <= n; i++) { - s_i = s[i - 1]; - for (j = 1; j <= m; j++) { - if (s_i != t[j-1]){ - min3(e[i + (j*eWidth) - 1], e[i + ((j-1)*eWidth)], e[i + ((j-1)*eWidth)-1]); - e[i + (j*eWidth)] = __t+1; - }else{ - min3(e[i + (j*eWidth) -1]+1, e[i + ((j-1)*eWidth)]+1, e[i + ((j-1)*eWidth)-1]); - e[i + (j*eWidth)] = __t; - } - } - } - - // we got the result! - return e[n + ((m)*eWidth)]; - } - - - /** - * Create a new FuzzyQuery that will match terms with a similarity - * of at least minimumSimilarity to term. - * If a prefixLength > 0 is specified, a common prefix - * of that length is also required. - * - * @param term the term to search for - * @param minimumSimilarity a value between 0 and 1 to set the required similarity - * between the query term and the matching terms. For example, for a - * minimumSimilarity of 0.5 a term of the same length - * as the query term is considered similar to the query term if the edit distance - * between both terms is less than length(term)*0.5 - * @param prefixLength length of common (non-fuzzy) prefix - * @throws IllegalArgumentException if minimumSimilarity is > 1 or < 0 - * or if prefixLength < 0 or > term.text().length(). - */ - FuzzyQuery::FuzzyQuery(Term* term, float_t minimumSimilarity, size_t prefixLength): - MultiTermQuery(term) - { - //Func - Constructor - //Pre - term != NULL - //Post - The instance has been created - - CND_PRECONDITION(term != NULL,"term is NULL"); - - if (minimumSimilarity > 1.0f) - _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity > 1"); - else if (minimumSimilarity < 0.0f) - _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity < 0"); - - this->minimumSimilarity = minimumSimilarity; - - if(prefixLength >= term->textLength()) - _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength >= term.textLength()"); - this->prefixLength = prefixLength; - - } - - - float_t FuzzyQuery::defaultMinSimilarity = 0.5f; - - FuzzyQuery::~FuzzyQuery(){ - //Func - Destructor - //Pre - true - //Post - Instance has been destroyed - } - - TCHAR* FuzzyQuery::toString(const TCHAR* field) const{ - //Func - Returns the query string - //Pre - field != NULL - //Post - The query string has been returned - - CND_PRECONDITION(field != NULL,"field is NULL"); - - StringBuffer buffer; - const TCHAR* b = MultiTermQuery::toString(field); - - buffer.append ( b ); - _CLDELETE_CARRAY(b); - buffer.append( _T("~") ); - - buffer.appendFloat(minimumSimilarity,1); - - return buffer.toString(); - } - - const TCHAR* FuzzyQuery::getQueryName() const{ - //Func - Returns the name of the query - //Pre - true - //post - The string FuzzyQuery has been returned - - return getClassName(); - } - const TCHAR* FuzzyQuery::getClassName(){ - //Func - Returns the name of the query - //Pre - true - //post - The string FuzzyQuery has been returned - - return _T("FuzzyQuery"); - } - - - /** - * Returns the minimum similarity that is required for this query to match. - * @return float value between 0.0 and 1.0 - */ - float_t FuzzyQuery::getMinSimilarity() const { - return minimumSimilarity; - } - - FuzzyQuery::FuzzyQuery(const FuzzyQuery& clone): - MultiTermQuery(clone) - { - this->minimumSimilarity = clone.getMinSimilarity(); - this->prefixLength = clone.getPrefixLength(); - - //if(prefixLength < 0) - // _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength < 0"); - //else - if(prefixLength >= clone.getTerm()->textLength()) - _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength >= term.textLength()"); - - } - - Query* FuzzyQuery::clone() const{ - return _CLNEW FuzzyQuery(*this); - } - size_t FuzzyQuery::hashCode() const{ - //todo: we should give the query a seeding value... but - //need to do it for all hascode functions - size_t val = Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode(); - val ^= Similarity::floatToByte(this->getMinSimilarity()); - val ^= this->getPrefixLength(); - return val; - } - bool FuzzyQuery::equals(Query* other) const{ - if (!(other->instanceOf(FuzzyQuery::getClassName()))) - return false; - - FuzzyQuery* fq = (FuzzyQuery*)other; - return (this->getBoost() == fq->getBoost()) - && this->getMinSimilarity() == fq->getMinSimilarity() - && this->getPrefixLength() == fq->getPrefixLength() - && getTerm()->equals(fq->getTerm()); - } - - /** - * Returns the prefix length, i.e. the number of characters at the start - * of a term that must be identical (not fuzzy) to the query term if the query - * is to match that term. - */ - size_t FuzzyQuery::getPrefixLength() const { - return prefixLength; - } - - FilteredTermEnum* FuzzyQuery::getEnum(IndexReader* reader){ - Term* term = getTerm(false); - FuzzyTermEnum* ret = _CLNEW FuzzyTermEnum(reader, term, minimumSimilarity, prefixLength); - return ret; - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/FuzzyQuery.h clucene-core-2.3.3.4/src/CLucene/search/FuzzyQuery.h --- clucene-core-0.9.21b/src/CLucene/search/FuzzyQuery.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/FuzzyQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,156 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_FuzzyQuery_ -#define _lucene_search_FuzzyQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "MultiTermQuery.h" - - -CL_NS_DEF(search) - - // class FuzzyQuery implements the fuzzy search query - class FuzzyQuery: public MultiTermQuery { - private: - float_t minimumSimilarity; - size_t prefixLength; - protected: - FuzzyQuery(const FuzzyQuery& clone); - public: - static float_t defaultMinSimilarity; - - /** - * Create a new FuzzyQuery that will match terms with a similarity - * of at least minimumSimilarity to term. - * If a prefixLength > 0 is specified, a common prefix - * of that length is also required. - * - * @param term the term to search for - * @param minimumSimilarity a value between 0 and 1 to set the required similarity - * between the query term and the matching terms. For example, for a - * minimumSimilarity of 0.5 a term of the same length - * as the query term is considered similar to the query term if the edit distance - * between both terms is less than length(term)*0.5 - * @param prefixLength length of common (non-fuzzy) prefix - * @throws IllegalArgumentException if minimumSimilarity is > 1 or < 0 - * or if prefixLength < 0 or > term.text().length(). - */ - FuzzyQuery(CL_NS(index)::Term* term, float_t minimumSimilarity=defaultMinSimilarity, size_t prefixLength=0); - //Destructor - ~FuzzyQuery(); - - TCHAR* toString(const TCHAR* field) const; - - //Returns the name "FuzzyQuery" - static const TCHAR* getClassName(); - const TCHAR* getQueryName() const; - - Query* clone() const; - bool equals(Query * other) const; - size_t hashCode() const; - - /** - * Returns the minimum similarity that is required for this query to match. - * @return float value between 0.0 and 1.0 - */ - float_t getMinSimilarity() const; - - /** - * Returns the prefix length, i.e. the number of characters at the start - * of a term that must be identical (not fuzzy) to the query term if the query - * is to match that term. - */ - size_t getPrefixLength() const; - - protected: - FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); - }; - - /** FuzzyTermEnum is a subclass of FilteredTermEnum for enumerating all - * terms that are similiar to the specified filter term. - * - * Term enumerations are always ordered by Term.compareTo(). Each term in - * the enumeration is greater than all that precede it. - */ - class FuzzyTermEnum: public FilteredTermEnum { - private: - float_t distance; - bool _endEnum; - - CL_NS(index)::Term* searchTerm; - TCHAR* text; - size_t textLen; - TCHAR* prefix; - size_t prefixLength; - float_t minimumSimilarity; - double scale_factor; - - - /** - * This static array saves us from the time required to create a new array - * everytime editDistance is called. - */ - int32_t* e; - int32_t eWidth; - int32_t eHeight; - - /****************************** - * Compute Levenshtein distance - ******************************/ - - /** - Levenshtein distance also known as edit distance is a measure of similiarity - between two strings where the distance is measured as the number of character - deletions, insertions or substitutions required to transform one string to - the other string. -

This method takes in four parameters; two strings and their respective - lengths to compute the Levenshtein distance between the two strings. - The result is returned as an integer. - */ - int32_t editDistance(const TCHAR* s, const TCHAR* t, const int32_t n, const int32_t m) ; - - protected: - /** - The termCompare method in FuzzyTermEnum uses Levenshtein distance to - calculate the distance between the given term and the comparing term. - */ - bool termCompare(CL_NS(index)::Term* term) ; - - ///Returns the fact if the current term in the enumeration has reached the end - bool endEnum(); - public: - - /** - * Empty prefix and minSimilarity of 0.5f are used. - * - * @param reader - * @param term - * @throws IOException - * @see #FuzzyTermEnum(IndexReader, Term, float_t, int32_t) - */ - FuzzyTermEnum(const CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term, float_t minSimilarity=FuzzyQuery::defaultMinSimilarity, size_t prefixLength=0); - /** Destructor */ - ~FuzzyTermEnum(); - /** Close the enumeration */ - void close(); - - /** Returns the difference between the distance and the fuzzy threshold - * multiplied by the scale factor - */ - float_t difference(); - - - const char* getObjectName(){ return FuzzyTermEnum::getClassName(); } - static const char* getClassName(){ return "FuzzyTermEnum"; } - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/HitQueue.cpp clucene-core-2.3.3.4/src/CLucene/search/HitQueue.cpp --- clucene-core-0.9.21b/src/CLucene/search/HitQueue.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/HitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "HitQueue.h" - -CL_NS_DEF(search) - -void HitQueue::upHeap(){ - size_t i = _size; - ScoreDoc node = heap[i]; // save bottom node (WAS object) - int32_t j = ((uint32_t)i) >> 1; - while (j > 0 && lessThan(node,heap[j])) { - heap[i] = heap[j]; // shift parents down - i = j; - j = ((uint32_t)j) >> 1; - } - heap[i] = node; // install saved node -} -void HitQueue::downHeap(){ - size_t i = 1; - ScoreDoc node = heap[i]; // save top node - size_t j = i << 1; // find smaller child - size_t k = j + 1; - if (k <= _size && lessThan(heap[k], heap[j])) { - j = k; - } - while (j <= _size && lessThan(heap[j],node)) { - heap[i] = heap[j]; // shift up child - i = j; - j = i << 1; - k = j + 1; - if (k <= _size && lessThan(heap[k], heap[j])) { - j = k; - } - } - heap[i] = node; // install saved node -} - -void HitQueue::adjustTop(){ - downHeap(); -} -size_t HitQueue::size(){ - return _size; -} - -struct ScoreDoc& HitQueue::top(){ - if ( _size == 0 ) - _CLTHROWA(CL_ERR_IndexOutOfBounds, "Attempted to access empty hitqueue::top"); - return heap[1]; -} - -void HitQueue::put(struct ScoreDoc& element){ - if ( _size>=maxSize ) - _CLTHROWA(CL_ERR_IndexOutOfBounds,"add is out of bounds"); - - _size++; - heap[_size] = element; - upHeap(); -} - -ScoreDoc HitQueue::pop(){ - if (_size > 0) { - ScoreDoc result = heap[1]; // save first value - heap[1] = heap[_size]; // move last to first - - _size--; - downHeap(); // adjust heap - return result; - } else - _CLTHROWA(CL_ERR_IndexOutOfBounds, "Attempted to access empty hitqueue::top"); -} - -bool HitQueue::insert(struct ScoreDoc& element){ - if(_size < maxSize){ - put(element); - return true; - }else if(_size > 0 && !lessThan(element, heap[1])){ - heap[1] = element; - adjustTop(); - return true; - }else - return false; -} - -HitQueue::HitQueue(const int32_t maxSize){ - _size = 0; - this->maxSize = maxSize; - int32_t heapSize = maxSize + 1; - heap = _CL_NEWARRAY(ScoreDoc,heapSize); -} -HitQueue::~HitQueue(){ - _CLDELETE_ARRAY(heap); -} - -bool HitQueue::lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB){ - if (hitA.score == hitB.score) - return hitA.doc > hitB.doc; - else - return hitA.score < hitB.score; -} - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/HitQueue.h clucene-core-2.3.3.4/src/CLucene/search/HitQueue.h --- clucene-core-0.9.21b/src/CLucene/search/HitQueue.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/HitQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_HitQueue_ -#define _lucene_search_HitQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" - -CL_NS_DEF(search) - -/** -* An optimised PriorityQueue which takes ScoreDoc structs. Some by-ref passing -* and memory related optimisations have been done. -*/ -class HitQueue: LUCENE_BASE { -private: - ScoreDoc* heap; - size_t _size; - size_t maxSize; - - void upHeap(); - void downHeap(); - -protected: - bool lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB); - -public: - void adjustTop(); - struct ScoreDoc& top(); - void put(struct ScoreDoc& element); - ScoreDoc pop(); - /** - * Adds element to the PriorityQueue in log(size) time if either - * the PriorityQueue is not full, or not lessThan(element, top()). - * @param element - * @return true if element is added, false otherwise. - */ - bool insert(struct ScoreDoc& element); - /** - * Returns the number of elements currently stored in the PriorityQueue. - */ - size_t size(); - HitQueue(const int32_t maxSize); - ~HitQueue(); - -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/Hits.cpp clucene-core-2.3.3.4/src/CLucene/search/Hits.cpp --- clucene-core-0.9.21b/src/CLucene/search/Hits.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Hits.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#include "SearchHeader.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/IndexReader.h" -#include "Filter.h" -#include "CLucene/search/SearchHeader.h" - -CL_NS_USE(document) -CL_NS_USE(util) -CL_NS_USE(index) - -CL_NS_DEF(search) - - HitDoc::HitDoc(const float_t s, const int32_t i) - { - //Func - Constructor - //Pre - true - //Post - The instance has been created - - next = NULL; - prev = NULL; - doc = NULL; - score = s; - id = i; - } - - HitDoc::~HitDoc(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDELETE(doc); - } - - - Hits::Hits(Searcher* s, Query* q, Filter* f, const Sort* _sort): - query(q), searcher(s), filter(f), sort(_sort) - { - //Func - Constructor - //Pre - s contains a valid reference to a searcher s - // q contains a valid reference to a Query - // f is NULL or contains a pointer to a filter - //Post - The instance has been created - - _length = 0; - first = NULL; - last = NULL; - numDocs = 0; - maxDocs = 200; - - //retrieve 100 initially - getMoreDocs(50); - } - - Hits::~Hits(){ - - } - int32_t Hits::length() const { - return _length; - } - - Document& Hits::doc(const int32_t n){ - HitDoc* hitDoc = getHitDoc(n); - - // Update LRU cache of documents - remove(hitDoc); // remove from list, if there - addToFront(hitDoc); // add to front of list - if (numDocs > maxDocs) { // if cache is full - HitDoc* oldLast = last; - remove(last); // flush last - - _CLDELETE( oldLast->doc ); - oldLast->doc = NULL; - } - - if (hitDoc->doc == NULL){ - hitDoc->doc = _CLNEW Document; - searcher->doc(hitDoc->id, hitDoc->doc); // cache miss: read document - } - - return *hitDoc->doc; - } - - int32_t Hits::id (const int32_t n){ - return getHitDoc(n)->id; - } - - float_t Hits::score(const int32_t n){ - return getHitDoc(n)->score; - } - - void Hits::getMoreDocs(const size_t m){ - size_t _min = m; - { - size_t nHits = hitDocs.size(); - if ( nHits > _min) - _min = nHits; - } - - size_t n = _min * 2; // double # retrieved - TopDocs* topDocs = NULL; - if ( sort==NULL ) - topDocs = (TopDocs*)((Searchable*)searcher)->_search(query, filter, n); - else - topDocs = (TopDocs*)((Searchable*)searcher)->_search(query, filter, n, sort); - _length = topDocs->totalHits; - ScoreDoc* scoreDocs = topDocs->scoreDocs; - int32_t scoreDocsLength = topDocs->scoreDocsLength; - - float_t scoreNorm = 1.0f; - //Check that scoreDocs is a valid pointer before using it - if (scoreDocs != NULL){ - if (_length > 0 && scoreDocs[0].score > 1.0f){ - scoreNorm = 1.0f / scoreDocs[0].score; - } - - int32_t end = scoreDocsLength < _length ? scoreDocsLength : _length; - for (int32_t i = hitDocs.size(); i < end; i++) { - hitDocs.push_back(_CLNEW HitDoc(scoreDocs[i].score*scoreNorm, scoreDocs[i].doc)); - } - } - - _CLDELETE(topDocs); - } - - HitDoc* Hits::getHitDoc(const size_t n){ - if (n >= _length){ - TCHAR buf[100]; - _sntprintf(buf, 100,_T("Not a valid hit number: %d"),n); - _CLTHROWT(CL_ERR_IndexOutOfBounds, buf ); - } - if (n >= hitDocs.size()) - getMoreDocs(n); - - return hitDocs[n]; - } - - void Hits::addToFront(HitDoc* hitDoc) { // insert at front of cache - if (first == NULL) - last = hitDoc; - else - first->prev = hitDoc; - - hitDoc->next = first; - first = hitDoc; - hitDoc->prev = NULL; - - numDocs++; - } - - void Hits::remove(const HitDoc* hitDoc) { // remove from cache - if (hitDoc->doc == NULL) // it's not in the list - return; // abort - - if (hitDoc->next == NULL) - last = hitDoc->prev; - else - hitDoc->next->prev = hitDoc->prev; - - if (hitDoc->prev == NULL) - first = hitDoc->next; - else - hitDoc->prev->next = hitDoc->next; - - numDocs--; - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/IndexSearcher.cpp clucene-core-2.3.3.4/src/CLucene/search/IndexSearcher.cpp --- clucene-core-0.9.21b/src/CLucene/search/IndexSearcher.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/IndexSearcher.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,352 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "IndexSearcher.h" - -#include "SearchHeader.h" -#include "Scorer.h" -#include "FieldDocSortedHitQueue.h" -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/util/BitSet.h" -#include "FieldSortedHitQueue.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) - -CL_NS_DEF(search) - - class SimpleTopDocsCollector:public HitCollector{ - private: - float_t minScore; - const CL_NS(util)::BitSet* bits; - HitQueue* hq; - size_t nDocs; - int32_t* totalHits; - public: - SimpleTopDocsCollector(const CL_NS(util)::BitSet* bs, HitQueue* hitQueue, int32_t* totalhits, size_t ndocs, const float_t ms=-1.0f): - minScore(ms), - bits(bs), - hq(hitQueue), - nDocs(ndocs), - totalHits(totalhits) - { - } - ~SimpleTopDocsCollector(){} - void collect(const int32_t doc, const float_t score){ - if (score > 0.0f && // ignore zeroed buckets - (bits==NULL || bits->get(doc))) { // skip docs not in bits - ++totalHits[0]; - if (hq->size() < nDocs || (minScore==-1.0f || score >= minScore)) { - ScoreDoc sd = {doc, score}; - hq->insert(sd); // update hit queue - if ( minScore != -1.0f ) - minScore = hq->top().score; // maintain minScore - } - } - } - }; - - class SortedTopDocsCollector:public HitCollector{ - private: - const CL_NS(util)::BitSet* bits; - FieldSortedHitQueue* hq; - size_t nDocs; - int32_t* totalHits; - public: - SortedTopDocsCollector(const CL_NS(util)::BitSet* bs, FieldSortedHitQueue* hitQueue, int32_t* totalhits, size_t _nDocs): - bits(bs), - hq(hitQueue), - nDocs(_nDocs), - totalHits(totalhits) - { - } - ~SortedTopDocsCollector(){ - } - void collect(const int32_t doc, const float_t score){ - if (score > 0.0f && // ignore zeroed buckets - (bits==NULL || bits->get(doc))) { // skip docs not in bits - ++totalHits[0]; - FieldDoc* fd = _CLNEW FieldDoc(doc, score); //todo: see jlucene way... with fields def??? - if ( !hq->insert(fd) ) // update hit queue - _CLDELETE(fd); - } - } - }; - - class SimpleFilteredCollector: public HitCollector{ - private: - CL_NS(util)::BitSet* bits; - HitCollector* results; - public: - SimpleFilteredCollector(CL_NS(util)::BitSet* bs, HitCollector* collector): - bits(bs), - results(collector) - { - } - ~SimpleFilteredCollector(){ - } - protected: - void collect(const int32_t doc, const float_t score){ - if (bits->get(doc)) { // skip docs not in bits - results->collect(doc, score); - } - } - }; - - - IndexSearcher::IndexSearcher(const char* path){ - //Func - Constructor - // Creates a searcher searching the index in the named directory. */ - //Pre - path != NULL - //Post - The instance has been created - - CND_PRECONDITION(path != NULL, "path is NULL"); - - reader = IndexReader::open(path); - readerOwner = true; - } - - IndexSearcher::IndexSearcher(CL_NS(store)::Directory* directory){ - //Func - Constructor - // Creates a searcher searching the index in the specified directory. */ - //Pre - path != NULL - //Post - The instance has been created - - CND_PRECONDITION(directory != NULL, "directory is NULL"); - - reader = IndexReader::open(directory); - readerOwner = true; - } - - IndexSearcher::IndexSearcher(IndexReader* r){ - //Func - Constructor - // Creates a searcher searching the index with the provide IndexReader - //Pre - path != NULL - //Post - The instance has been created - - reader = r; - readerOwner = false; - } - - IndexSearcher::~IndexSearcher(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - close(); - } - - void IndexSearcher::close(){ - //Func - Frees resources associated with this Searcher. - //Pre - true - //Post - The resources associated have been freed - if (readerOwner && reader){ - reader->close(); - _CLDELETE(reader); - } - } - - // inherit javadoc - int32_t IndexSearcher::docFreq(const Term* term) const{ - //Func - - //Pre - reader != NULL - //Post - - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - - return reader->docFreq(term); - } - - _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* IndexSearcher::doc(int32_t i){ - CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; - if (!doc(i,ret) ) - _CLDELETE(ret); - return ret; - } - - // inherit javadoc - bool IndexSearcher::doc(int32_t i, CL_NS(document)::Document* d) { - //Func - Retrieves i-th document found - // For use by HitCollector implementations. - //Pre - reader != NULL - //Post - The i-th document has been returned - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - - return reader->document(i,d); - } - - // inherit javadoc - int32_t IndexSearcher::maxDoc() const { - //Func - Return total number of documents including the ones marked deleted - //Pre - reader != NULL - //Post - The total number of documents including the ones marked deleted - // has been returned - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - - return reader->maxDoc(); - } - - TopDocs* IndexSearcher::_search(Query* query, Filter* filter, const int32_t nDocs){ - //Func - - //Pre - reader != NULL - //Post - - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - CND_PRECONDITION(query != NULL, "query is NULL"); - - Weight* weight = query->weight(this); - Scorer* scorer = weight->scorer(reader); - if (scorer == NULL){ - return _CLNEW TopDocs(0, NULL, 0); - } - - BitSet* bits = filter != NULL ? filter->bits(reader) : NULL; - HitQueue* hq = _CLNEW HitQueue(nDocs); - - //Check hq has been allocated properly - CND_CONDITION(hq != NULL, "Could not allocate memory for HitQueue hq"); - - int32_t* totalHits = _CL_NEWARRAY(int32_t,1); - totalHits[0] = 0; - - SimpleTopDocsCollector hitCol(bits,hq,totalHits,nDocs,0.0f); - scorer->score( &hitCol ); - _CLDELETE(scorer); - - int32_t scoreDocsLength = hq->size(); - - ScoreDoc* scoreDocs = _CL_NEWARRAY(ScoreDoc,scoreDocsLength); - - for (int32_t i = scoreDocsLength-1; i >= 0; --i) // put docs in array - scoreDocs[i] = hq->pop(); - - int32_t totalHitsInt = totalHits[0]; - - _CLDELETE(hq); - if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) - _CLDELETE(bits); - _CLDELETE_ARRAY(totalHits); - Query* wq = weight->getQuery(); - if ( query != wq ) //query was re-written - _CLLDELETE(wq); - _CLDELETE(weight); - - return _CLNEW TopDocs(totalHitsInt, scoreDocs, scoreDocsLength); - } - - // inherit javadoc - TopFieldDocs* IndexSearcher::_search(Query* query, Filter* filter, const int32_t nDocs, - const Sort* sort) { - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - CND_PRECONDITION(query != NULL, "query is NULL"); - - Weight* weight = query->weight(this); - Scorer* scorer = weight->scorer(reader); - if (scorer == NULL){ - return _CLNEW TopFieldDocs(0, NULL, 0, NULL ); - } - - BitSet* bits = filter != NULL ? filter->bits(reader) : NULL; - FieldSortedHitQueue hq(reader, sort->getSort(), nDocs); - int32_t* totalHits = _CL_NEWARRAY(int32_t,1); - totalHits[0]=0; - - SortedTopDocsCollector hitCol(bits,&hq,totalHits,nDocs); - scorer->score(&hitCol); - _CLDELETE(scorer); - - int32_t hqLen = hq.size(); - FieldDoc** fieldDocs = _CL_NEWARRAY(FieldDoc*,hqLen); - for (int32_t i = hqLen-1; i >= 0; --i){ // put docs in array - fieldDocs[i] = hq.fillFields (hq.pop()); - } - - Query* wq = weight->getQuery(); - if ( query != wq ) //query was re-written - _CLLDELETE(wq); - _CLDELETE(weight); - - SortField** hqFields = hq.getFields(); - hq.setFields(NULL); //move ownership of memory over to TopFieldDocs - int32_t totalHits0 = totalHits[0]; - if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) - _CLDELETE(bits); - _CLDELETE_ARRAY(totalHits); - return _CLNEW TopFieldDocs(totalHits0, fieldDocs, hqLen, hqFields ); - } - - void IndexSearcher::_search(Query* query, Filter* filter, HitCollector* results){ - //Func - _search an index and fetch the results - // Applications should only use this if they need all of the - // matching documents. The high-level search API (search(Query)) is usually more efficient, - // as it skips non-high-scoring hits. - //Pre - query is a valid reference to a query - // filter may or may not be NULL - // results is a valid reference to a HitCollector and used to store the results - //Post - filter if non-NULL, a bitset used to eliminate some documents - - CND_PRECONDITION(reader != NULL, "reader is NULL"); - CND_PRECONDITION(query != NULL, "query is NULL"); - - BitSet* bits = NULL; - SimpleFilteredCollector* fc = NULL; - - if (filter != NULL){ - bits = filter->bits(reader); - fc = _CLNEW SimpleFilteredCollector(bits, results); - } - - Weight* weight = query->weight(this); - Scorer* scorer = weight->scorer(reader); - if (scorer != NULL) { - if (fc == NULL){ - scorer->score(results); - }else{ - scorer->score((HitCollector*)fc); - } - _CLDELETE(scorer); - } - - _CLDELETE(fc); - _CLDELETE(weight); - if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) - _CLDELETE(bits); - } - - Query* IndexSearcher::rewrite(Query* original) { - Query* query = original; - Query* last = original; - for (Query* rewrittenQuery = query->rewrite(reader); - rewrittenQuery != query; - rewrittenQuery = query->rewrite(reader)) { - query = rewrittenQuery; - if ( query != last && last != original ){ - _CLDELETE(last); - } - last = query; - } - return query; - } - - void IndexSearcher::explain(Query* query, int32_t doc, Explanation* ret){ - Weight* weight = query->weight(this); - weight->explain(reader, doc, ret); - - Query* wq = weight->getQuery(); - if ( query != wq ) //query was re-written - _CLLDELETE(wq); - _CLDELETE(weight); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/IndexSearcher.h clucene-core-2.3.3.4/src/CLucene/search/IndexSearcher.h --- clucene-core-0.9.21b/src/CLucene/search/IndexSearcher.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/IndexSearcher.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_IndexSearcher_ -#define _lucene_search_IndexSearcher_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "CLucene/store/Directory.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/util/BitSet.h" -#include "HitQueue.h" -#include "FieldSortedHitQueue.h" - -CL_NS_DEF(search) -/** Implements search over a single IndexReader. -* -*

Applications usually need only call the inherited {@link search(Query*)} -* or {@link search(Query*,Filter*)} methods. -*/ -class IndexSearcher:public Searcher{ - CL_NS(index)::IndexReader* reader; - bool readerOwner; - -public: - /// Creates a searcher searching the index in the named directory. - IndexSearcher(const char* path); - - /// Creates a searcher searching the index in the specified directory. - IndexSearcher(CL_NS(store)::Directory* directory); - - /// Creates a searcher searching the provided index. - IndexSearcher(CL_NS(index)::IndexReader* r); - - ~IndexSearcher(); - - /// Frees resources associated with this Searcher. - void close(); - - int32_t docFreq(const CL_NS(index)::Term* term) const; - - bool doc(int32_t i, CL_NS(document)::Document* document); - _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* doc(int32_t i); - - int32_t maxDoc() const; - - TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs); - TopFieldDocs* _search(Query* query, Filter* filter, const int32_t nDocs, const Sort* sort); - - void _search(Query* query, Filter* filter, HitCollector* results); - - CL_NS(index)::IndexReader* getReader(){ - return reader; - } - - Query* rewrite(Query* original); - void explain(Query* query, int32_t doc, Explanation* ret); -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/Makefile.am clucene-core-2.3.3.4/src/CLucene/search/Makefile.am --- clucene-core-0.9.21b/src/CLucene/search/Makefile.am 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -searchdir = $(lsrcdir)/search -searchhdir = $(includedir)/CLucene/search - -libclucene_la_SOURCES += $(searchdir)/BooleanQuery.cpp -libclucene_la_SOURCES += $(searchdir)/BooleanScorer.cpp -libclucene_la_SOURCES += $(searchdir)/DateFilter.cpp -libclucene_la_SOURCES += $(searchdir)/CachingWrapperFilter.cpp -libclucene_la_SOURCES += $(searchdir)/ChainedFilter.cpp -libclucene_la_SOURCES += $(searchdir)/ConjunctionScorer.cpp -libclucene_la_SOURCES += $(searchdir)/ExactPhraseScorer.cpp -libclucene_la_SOURCES += $(searchdir)/Explanation.cpp -libclucene_la_SOURCES += $(searchdir)/FieldCache.cpp -libclucene_la_SOURCES += $(searchdir)/FieldCacheImpl.cpp -libclucene_la_SOURCES += $(searchdir)/FieldSortedHitQueue.cpp -libclucene_la_SOURCES += $(searchdir)/FieldDocSortedHitQueue.cpp -libclucene_la_SOURCES += $(searchdir)/FilteredTermEnum.cpp -libclucene_la_SOURCES += $(searchdir)/FuzzyQuery.cpp -libclucene_la_SOURCES += $(searchdir)/Hits.cpp -libclucene_la_SOURCES += $(searchdir)/HitQueue.cpp -libclucene_la_SOURCES += $(searchdir)/IndexSearcher.cpp -libclucene_la_SOURCES += $(searchdir)/MultiSearcher.cpp -libclucene_la_SOURCES += $(searchdir)/MultiTermQuery.cpp -libclucene_la_SOURCES += $(searchdir)/PhrasePositions.cpp -libclucene_la_SOURCES += $(searchdir)/PhraseQuery.cpp -libclucene_la_SOURCES += $(searchdir)/PhraseScorer.cpp -libclucene_la_SOURCES += $(searchdir)/PrefixQuery.cpp -libclucene_la_SOURCES += $(searchdir)/QueryFilter.cpp -libclucene_la_SOURCES += $(searchdir)/RangeFilter.cpp -libclucene_la_SOURCES += $(searchdir)/RangeQuery.cpp -libclucene_la_SOURCES += $(searchdir)/SearchHeader.cpp -libclucene_la_SOURCES += $(searchdir)/Similarity.cpp -libclucene_la_SOURCES += $(searchdir)/SloppyPhraseScorer.cpp -libclucene_la_SOURCES += $(searchdir)/Sort.cpp -libclucene_la_SOURCES += $(searchdir)/TermQuery.cpp -libclucene_la_SOURCES += $(searchdir)/TermScorer.cpp -libclucene_la_SOURCES += $(searchdir)/WildcardQuery.cpp -libclucene_la_SOURCES += $(searchdir)/WildcardTermEnum.cpp - -searchh_HEADERS = $(searchdir)/*.h diff -Nru clucene-core-0.9.21b/src/CLucene/search/MultiSearcher.cpp clucene-core-2.3.3.4/src/CLucene/search/MultiSearcher.cpp --- clucene-core-0.9.21b/src/CLucene/search/MultiSearcher.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/MultiSearcher.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,227 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "MultiSearcher.h" - -#include "SearchHeader.h" -#include "HitQueue.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/Term.h" -#include "FieldDocSortedHitQueue.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) - -CL_NS_DEF(search) - - /** Creates a searcher which searches searchers. */ - MultiSearcher::MultiSearcher(Searchable** _searchables): - _maxDoc(0) { - searchablesLen = 0; - while ( _searchables[searchablesLen] != NULL ) - ++searchablesLen; - - searchables=_CL_NEWARRAY(Searchable*,searchablesLen+1); - starts = _CL_NEWARRAY(int32_t,searchablesLen + 1); // build starts array - for (int32_t i = 0; i < searchablesLen; ++i) { - searchables[i]=_searchables[i]; - starts[i] = _maxDoc; - _maxDoc += searchables[i]->maxDoc(); // compute maxDocs - } - starts[searchablesLen] = _maxDoc; - } - - MultiSearcher::~MultiSearcher() { - _CLDELETE_ARRAY(searchables); - _CLDELETE_ARRAY(starts); - } - - - // inherit javadoc - void MultiSearcher::close() { - for (int32_t i = 0; i < searchablesLen; ++i){ - searchables[i]->close(); - searchables[i]=NULL; - } - } - - int32_t MultiSearcher::docFreq(const Term* term) const { - int32_t docFreq = 0; - for (int32_t i = 0; i < searchablesLen; ++i) - docFreq += searchables[i]->docFreq(term); - return docFreq; - } - - /** For use by {@link HitCollector} implementations. */ - bool MultiSearcher::doc(int32_t n, Document* d) { - int32_t i = subSearcher(n); // find searcher index - return searchables[i]->doc(n - starts[i], d); // dispatch to searcher - } - - int32_t MultiSearcher::searcherIndex(int32_t n) const{ - return subSearcher(n); - } - - /** Returns index of the searcher for document n in the array - * used to construct this searcher. */ - int32_t MultiSearcher::subSearcher(int32_t n) const{ - // replace w/ call to Arrays.binarySearch in Java 1.2 - int32_t lo = 0; // search starts array - int32_t hi = searchablesLen - 1; // for first element less - // than n, return its index - int32_t mid,midValue; - while (hi >= lo) { - mid = (lo + hi) >> 1; - midValue = starts[mid]; - if (n < midValue) - hi = mid - 1; - else if (n > midValue) - lo = mid + 1; - else{ // found a match - while (mid+1 < searchablesLen && starts[mid+1] == midValue) { - ++mid; // scan to last match - } - return mid; - } - } - return hi; - } - - /** Returns the document number of document n within its - * sub-index. */ - int32_t MultiSearcher::subDoc(int32_t n) const{ - return n - starts[subSearcher(n)]; - } - - int32_t MultiSearcher::maxDoc() const{ - return _maxDoc; - } - - TopDocs* MultiSearcher::_search(Query* query, Filter* filter, const int32_t nDocs) { - HitQueue* hq = _CLNEW HitQueue(nDocs); - int32_t totalHits = 0; - TopDocs* docs; - int32_t j; - ScoreDoc* scoreDocs; - for (int32_t i = 0; i < searchablesLen; i++) { // search each searcher - docs = searchables[i]->_search(query, filter, nDocs); - totalHits += docs->totalHits; // update totalHits - scoreDocs = docs->scoreDocs; - for ( j = 0; j scoreDocsLength; ++j) { // merge scoreDocs int_to hq - scoreDocs[j].doc += starts[i]; // convert doc - if ( !hq->insert(scoreDocs[j])) - break; // no more scores > minScore - } - - _CLDELETE(docs); - } - - int32_t scoreDocsLen = hq->size(); - scoreDocs = _CL_NEWARRAY(ScoreDoc, scoreDocsLen); - {//MSVC 6 scope fix - for (int32_t i = scoreDocsLen-1; i >= 0; --i) // put docs in array - scoreDocs[i] = hq->pop(); - } - - //cleanup - _CLDELETE(hq); - - return _CLNEW TopDocs(totalHits, scoreDocs, scoreDocsLen); - } - - /** Lower-level search API. - * - *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero - * scoring document. - * - *

Applications should only use this if they need all of the - * matching documents. The high-level search API ({@link - * Searcher#search(Query)}) is usually more efficient, as it skips - * non-high-scoring hits. - * - * @param query to match documents - * @param filter if non-null, a bitset used to eliminate some documents - * @param results to receive hits - */ - void MultiSearcher::_search(Query* query, Filter* filter, HitCollector* results){ - for (int32_t i = 0; i < searchablesLen; ++i) { - /* DSR:CL_BUG: Old implementation leaked and was misconceived. We need - ** to have the original HitCollector ($results) collect *all* hits; - ** the MultiHitCollector instantiated below serves only to adjust - ** (forward by starts[i]) the docNo passed to $results. - ** Old implementation instead created a sort of linked list of - ** MultiHitCollectors that applied the adjustments in $starts - ** cumulatively (and was never deleted). */ - HitCollector *docNoAdjuster = _CLNEW MultiHitCollector(results, starts[i]); - searchables[i]->_search(query, filter, docNoAdjuster); - _CLDELETE(docNoAdjuster); - } - } - - TopFieldDocs* MultiSearcher::_search (Query* query, Filter* filter, const int32_t n, const Sort* sort){ - FieldDocSortedHitQueue* hq = NULL; - int32_t totalHits = 0; - TopFieldDocs* docs; - int32_t j; - FieldDoc** fieldDocs; - - for (int32_t i = 0; i < searchablesLen; ++i) { // search each searcher - docs = searchables[i]->_search (query, filter, n, sort); - if (hq == NULL){ - hq = _CLNEW FieldDocSortedHitQueue (docs->fields, n); - docs->fields = NULL; //hit queue takes fields memory - } - - totalHits += docs->totalHits; // update totalHits - fieldDocs = docs->fieldDocs; - for(j = 0;jscoreDocsLength;++j){ // merge scoreDocs into hq - fieldDocs[j]->scoreDoc.doc += starts[i]; // convert doc - if (!hq->insert (fieldDocs[j]) ) - break; // no more scores > minScore - } - for ( int32_t x=0;xsize(); - fieldDocs = _CL_NEWARRAY(FieldDoc*,hqlen); - for (j = hqlen - 1; j >= 0; j--) // put docs in array - fieldDocs[j] = hq->pop(); - - SortField** hqFields = hq->getFields(); - hq->setFields(NULL); //move ownership of memory over to TopFieldDocs - _CLDELETE(hq); - - return _CLNEW TopFieldDocs (totalHits, fieldDocs, hqlen, hqFields); - } - - Query* MultiSearcher::rewrite(Query* original) { - Query** queries = _CL_NEWARRAY(Query*,searchablesLen+1); - for (int32_t i = 0; i < searchablesLen; ++i) - queries[i] = searchables[i]->rewrite(original); - queries[searchablesLen]=NULL; - return original->combine(queries); - } - - void MultiSearcher::explain(Query* query, int32_t doc, Explanation* ret) { - int32_t i = subSearcher(doc); // find searcher index - searchables[i]->explain(query,doc-starts[i], ret); // dispatch to searcher - } - - MultiHitCollector::MultiHitCollector(HitCollector* _results, int32_t _start): - results(_results), - start(_start) { - } - - void MultiHitCollector::collect(const int32_t doc, const float_t score) { - results->collect(doc + start, score); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/MultiSearcher.h clucene-core-2.3.3.4/src/CLucene/search/MultiSearcher.h --- clucene-core-0.9.21b/src/CLucene/search/MultiSearcher.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/MultiSearcher.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_multisearcher -#define _lucene_search_multisearcher - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "CLucene/document/Document.h" -#include "CLucene/index/Term.h" - -CL_NS_DEF(search) - - class MultiHitCollector: public HitCollector{ - private: - HitCollector* results; - int32_t start; - public: - MultiHitCollector(HitCollector* _results, int32_t _start); - void collect(const int32_t doc, const float_t score) ; - }; - - - /** Implements search over a set of Searchables. - * - *

Applications usually need only call the inherited {@link #search(Query)} - * or {@link #search(Query,Filter)} methods. - */ - class MultiSearcher: public Searcher { - private: - Searchable** searchables; - int32_t searchablesLen; - int32_t* starts; - int32_t _maxDoc; - protected: - int32_t* getStarts() { - return starts; - } - - public: - /** Creates a searcher which searches Searchables. */ - MultiSearcher(Searchable** searchables); - - ~MultiSearcher(); - - /** Frees resources associated with this Searcher. */ - void close() ; - - int32_t docFreq(const CL_NS(index)::Term* term) const ; - - /** For use by {@link HitCollector} implementations. */ - bool doc(int32_t n, CL_NS(document)::Document* document); - - /** For use by {@link HitCollector} implementations to identify the - * index of the sub-searcher that a particular hit came from. */ - int32_t searcherIndex(int32_t n) const; - - int32_t subSearcher(int32_t n) const; - - int32_t subDoc(int32_t n) const; - - int32_t maxDoc() const; - - TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs) ; - - TopFieldDocs* _search (Query* query, Filter* filter, const int32_t n, const Sort* sort); - - /** Lower-level search API. - * - *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero - * scoring document. - * - *

Applications should only use this if they need all of the - * matching documents. The high-level search API ({@link - * Searcher#search(Query)}) is usually more efficient, as it skips - * non-high-scoring hits. - * - * @param query to match documents - * @param filter if non-null, a bitset used to eliminate some documents - * @param results to receive hits - */ - void _search(Query* query, Filter* filter, HitCollector* results); - - Query* rewrite(Query* original); - void explain(Query* query, int32_t doc, Explanation* ret); - }; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/MultiTermQuery.cpp clucene-core-2.3.3.4/src/CLucene/search/MultiTermQuery.cpp --- clucene-core-0.9.21b/src/CLucene/search/MultiTermQuery.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/MultiTermQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "MultiTermQuery.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - -/** Constructs a query for terms matching term. */ - - MultiTermQuery::MultiTermQuery(Term* t){ - //Func - Constructor - //Pre - t != NULL - //Post - The instance has been created - - CND_PRECONDITION(t != NULL, "t is NULL"); - - term = _CL_POINTER(t); - - } - MultiTermQuery::MultiTermQuery(const MultiTermQuery& clone): - Query(clone) - { - term = _CLNEW Term(clone.getTerm(false),clone.getTerm(false)->text()); - } - - MultiTermQuery::~MultiTermQuery(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDECDELETE(term); - } - - Term* MultiTermQuery::getTerm(bool pointer) const{ - if ( pointer ) - return _CL_POINTER(term); - else - return term; - } - - Query* MultiTermQuery::rewrite(IndexReader* reader) { - FilteredTermEnum* enumerator = getEnum(reader); - BooleanQuery* query = _CLNEW BooleanQuery(); - try { - do { - Term* t = enumerator->term(false); - if (t != NULL) { - TermQuery* tq = _CLNEW TermQuery(t); // found a match - tq->setBoost(getBoost() * enumerator->difference()); // set the boost - query->add(tq,true, false, false); // add to q - } - } while (enumerator->next()); - } _CLFINALLY ( enumerator->close(); _CLDELETE(enumerator) ); - - //if we only added one clause and the clause is not prohibited then - //we can just return the query - if (query->getClauseCount() == 1) { // optimize 1-clause queries - BooleanClause* c=0; - query->getClauses(&c); - - if (!c->prohibited) { // just return clause - c->deleteQuery=false; - Query* ret = c->query; - - _CLDELETE(query); - return ret; - } - } - return query; - } - - Query* MultiTermQuery::combine(Query** queries) { - return Query::mergeBooleanQueries(queries); - } - - /** Prints a user-readable version of this query. */ - TCHAR* MultiTermQuery::toString(const TCHAR* field) const{ - StringBuffer buffer; - - if ( field==NULL || _tcscmp(term->field(),field)!=0 ) { - buffer.append(term->field()); - buffer.append( _T(":")); - } - buffer.append(term->text()); - if (getBoost() != 1.0f) { - buffer.appendChar ( '^' ); - buffer.appendFloat( getBoost(),1); - } - return buffer.toString(); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/MultiTermQuery.h clucene-core-2.3.3.4/src/CLucene/search/MultiTermQuery.h --- clucene-core-0.9.21b/src/CLucene/search/MultiTermQuery.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/MultiTermQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_MultiTermQuery_ -#define _lucene_search_MultiTermQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/StringBuffer.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "FilteredTermEnum.h" -#include "SearchHeader.h" -#include "BooleanQuery.h" -#include "TermQuery.h" - -CL_NS_DEF(search) - /** - * A {@link Query} that matches documents containing a subset of terms provided - * by a {@link FilteredTermEnum} enumeration. - *

- * MultiTermQuery is not designed to be used by itself. - *
- * The reason being that it is not intialized with a {@link FilteredTermEnum} - * enumeration. A {@link FilteredTermEnum} enumeration needs to be provided. - *

- * For example, {@link WildcardQuery} and {@link FuzzyQuery} extend - * MultiTermQuery to provide {@link WildcardTermEnum} and - * {@link FuzzyTermEnum}, respectively. - */ - class MultiTermQuery: public Query { - private: - CL_NS(index)::Term* term; - protected: - MultiTermQuery(const MultiTermQuery& clone); - - /** Construct the enumeration to be used, expanding the pattern term. */ - virtual FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader) = 0; - public: - /** Constructs a query for terms matching term. */ - MultiTermQuery(CL_NS(index)::Term* t); - - virtual ~MultiTermQuery(); - - /** Returns the pattern term. */ - CL_NS(index)::Term* getTerm(bool pointer=true) const; - - Query* combine(Query** queries); - - /** Prints a user-readable version of this query. */ - TCHAR* toString(const TCHAR* field) const; - - Query* rewrite(CL_NS(index)::IndexReader* reader); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/PhrasePositions.cpp clucene-core-2.3.3.4/src/CLucene/search/PhrasePositions.cpp --- clucene-core-0.9.21b/src/CLucene/search/PhrasePositions.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PhrasePositions.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "PhrasePositions.h" - -#include "CLucene/index/Terms.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - PhrasePositions::PhrasePositions(TermPositions* Tp, const int32_t OffSet){ - //Func - Constructor - //Pre - t != NULL - // OffSet != NULL - //Post - The instance has been created - - CND_PRECONDITION(Tp != NULL,"Tp is NULL"); - CND_PRECONDITION(OffSet >= 0 ,"OffSet is a negative number"); - - tp = Tp; - offset = OffSet; - position = 0; - count = 0; - doc = 0; - - _next = NULL; - } - - PhrasePositions::~PhrasePositions(){ - //Func - Destructor - //Pre - true - //Post - The instance has been deleted - - //delete next Phrase position and by doing that - //all PhrasePositions in the list - _CLDELETE(_next); - - //Check if tp is valid - if ( tp != NULL ){ - //Close TermPositions tp - tp->close(); - _CLDELETE(tp); - } - } - - bool PhrasePositions::next(){ - //Func - Increments to next doc - //Pre - tp != NULL - //Post - if there was no next then doc = INT_MAX otherwise - // doc contains the current document number - - CND_PRECONDITION(tp != NULL,"tp is NULL"); - - //Move to the next in TermPositions tp - if (!tp->next()) { - //There is no next so close the stream - tp->close(); - //delete tp and reset tp to NULL - _CLVDELETE(tp); //todo: not a clucene object... should be - //Assign Doc sentinel value - doc = INT_MAX; - return false; - }else{ - doc = tp->doc(); - position = 0; - return true; - } - } - bool PhrasePositions::skipTo(int32_t target){ - if (!tp->skipTo(target)) { - tp->close(); // close stream - doc = LUCENE_INT32_MAX_SHOULDBE; // sentinel value - return false; - } - doc = tp->doc(); - position = 0; - return true; - } - void PhrasePositions::firstPosition(){ - //Func - Read the first TermPosition - //Pre - tp != NULL - //Post - - - CND_PRECONDITION(tp != NULL,"tp is NULL"); - - //read first pos - count = tp->freq(); - //Move to the next TermPosition - nextPosition(); - } - - bool PhrasePositions::nextPosition(){ - //Func - Move to the next position - //Pre - tp != NULL - //Post - - - CND_PRECONDITION(tp != NULL,"tp is NULL"); - - if (count-- > 0) { - //read subsequent pos's - position = tp->nextPosition() - offset; - - //Check position always bigger than or equal to 0 - //bvk: todo, bug??? position < 0 occurs, cant figure out why, - //old version does it too and will fail the "SearchTest" test - //CND_CONDITION(position >= 0, "position has become a negative number"); - return true; - }else{ - return false; - } - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/PhrasePositions.h clucene-core-2.3.3.4/src/CLucene/search/PhrasePositions.h --- clucene-core-0.9.21b/src/CLucene/search/PhrasePositions.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PhrasePositions.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PhrasePositions_ -#define _lucene_search_PhrasePositions_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/Terms.h" - -CL_NS_DEF(search) - - class PhrasePositions:LUCENE_BASE { - public: - int32_t doc; // current doc - int32_t position; // position in doc - int32_t count; // remaining pos in this doc - int32_t offset; // position in phrase - CL_NS(index)::TermPositions* tp; // stream of positions - PhrasePositions* _next; // used to make lists - - - //Constructor - PhrasePositions(CL_NS(index)::TermPositions* Tp, const int32_t o); - //Destructor - ~PhrasePositions(); - - bool next(); - bool skipTo(int32_t target); - - void firstPosition(); - - bool nextPosition(); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/PhraseQuery.cpp clucene-core-2.3.3.4/src/CLucene/search/PhraseQuery.cpp --- clucene-core-0.9.21b/src/CLucene/search/PhraseQuery.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PhraseQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,463 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "PhraseQuery.h" - -#include "SearchHeader.h" -#include "Scorer.h" -#include "BooleanQuery.h" -#include "TermQuery.h" - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" - -#include "CLucene/util/StringBuffer.h" -#include "CLucene/util/VoidList.h" -#include "CLucene/util/Arrays.h" - -#include "ExactPhraseScorer.h" -#include "SloppyPhraseScorer.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - PhraseQuery::PhraseQuery(): - terms(false) - { - //Func - Constructor - //Pre - true - //Post - An empty PhraseQuery has been created - - slop = 0; - - field = NULL; - } - PhraseQuery::PhraseQuery(const PhraseQuery& clone): - Query(clone), terms(false) - { - slop = clone.slop; - field = clone.field; - int32_t size=clone.positions.size(); - { //msvc6 scope fix - for ( int32_t i=0;ipositions.push_back( n ); - } - } - size=clone.terms.size(); - { //msvc6 scope fix - for ( int32_t i=0;iterms.push_back( _CL_POINTER(clone.terms[i])); - } - } - } - Query* PhraseQuery::clone() const{ - return _CLNEW PhraseQuery(*this); - } - bool PhraseQuery::equals(CL_NS(search)::Query *other) const{ - if (!(other->instanceOf(PhraseQuery::getClassName()))) - return false; - - PhraseQuery* pq = (PhraseQuery*)other; - bool ret = (this->getBoost() == pq->getBoost()) - && (this->slop == pq->slop); - - if ( ret ){ - CLListEquals, - const CL_NS(util)::CLVector > comp; - ret = comp.equals(&this->terms,&pq->terms); - } - - if ( ret ){ - CLListEquals, - const CL_NS(util)::CLVector > comp; - ret = comp.equals(&this->positions,&pq->positions); - } - return ret; - } - - - PhraseQuery::~PhraseQuery(){ - //Func - Destructor - //Pre - true - //Post 0 The instance has been destroyed - - //Iterate through all the terms - for (uint32_t i = 0; i < terms.size(); i++){ - _CLLDECDELETE(terms[i]); - } - positions.clear(); - } - - size_t PhraseQuery::hashCode() const { - //todo: do cachedHashCode, and invalidate on add/remove clause - size_t ret = Similarity::floatToByte(getBoost()) ^ Similarity::floatToByte(slop); - - { //msvc6 scope fix - for ( int32_t i=0;terms.size();i++ ) - ret = 31 * ret + terms[i]->hashCode(); - } - { //msvc6 scope fix - for ( int32_t i=0;positions.size();i++ ) - ret = 31 * ret + positions[i]; - } - return ret; - } - - const TCHAR* PhraseQuery::getClassName(){ - return _T("PhraseQuery"); - } - const TCHAR* PhraseQuery::getQueryName() const{ - //Func - Returns the string "PhraseQuery" - //Pre - true - //Post - The string "PhraseQuery" has been returned - return getClassName(); - } - - - /** - * Adds a term to the end of the query phrase. - * The relative position of the term is the one immediately after the last term added. - */ - void PhraseQuery::add(Term* term) { - CND_PRECONDITION(term != NULL,"term is NULL"); - - int32_t position = 0; - - if(positions.size() > 0) - position = (positions[positions.size()-1]) + 1; - - add(term, position); - } - - void PhraseQuery::add(Term* term, int32_t position) { - //Func - Adds a term to the end of the query phrase. - //Pre - term != NULL - //Post - The term has been added if its field matches the field of the PhraseQuery - // and true is returned otherwise false is returned - CND_PRECONDITION(term != NULL,"term is NULL"); - - if (terms.size() == 0) - field = term->field(); - else{ - //Check if the field of the _CLNEW term matches the field of the PhraseQuery - //can use != because fields are interned - if ( term->field() != field){ - //return false; - TCHAR buf[200]; - _sntprintf(buf,200,_T("All phrase terms must be in the same field: %s"),term->field()); - _CLTHROWT(CL_ERR_IllegalArgument,buf); - } - } - //Store the _CLNEW term - terms.push_back(_CL_POINTER(term)); - - positions.push_back(position); - } - - void PhraseQuery::getPositions(Array& result) const{ - result.length = positions.size(); - result.values = _CL_NEWARRAY(int32_t,result.length); - for(int32_t i = 0; i < result.length; i++){ - result.values[i] = positions[i]; - } - } - int32_t* PhraseQuery::getPositions() const{ - CND_WARNING(false,"getPositions() is deprecated") - - Array arr; - getPositions(arr); - return arr.values; - } - - Weight* PhraseQuery::_createWeight(Searcher* searcher) { - if (terms.size() == 1) { // optimize one-term case - Term* term = terms[0]; - Query* termQuery = _CLNEW TermQuery(term); - termQuery->setBoost(getBoost()); - Weight* ret = termQuery->_createWeight(searcher); - _CLDELETE(termQuery); - return ret; - } - return _CLNEW PhraseWeight(searcher,this); - } - - - Term** PhraseQuery::getTerms() const{ - //Func - added by search highlighter - //Pre - - //Post - - - //Let size contain the number of terms - int32_t size = terms.size(); - Term** ret = _CL_NEWARRAY(Term*,size+1); - - CND_CONDITION(ret != NULL,"Could not allocated memory for ret"); - - //Iterate through terms and copy each pointer to ret - for ( int32_t i=0;itext() ); - //Check if i is at the end of terms - if (i != terms.size()-1){ - buffer.append(_T(" ")); - } - } - - buffer.append( _T("\"") ); - - if (slop != 0) { - buffer.append(_T("~")); - buffer.appendFloat(slop,0); - } - - //Check if there is an other boost factor than 1.0 - if (getBoost() != 1.0f) { - buffer.append(_T("^")); - buffer.appendFloat( getBoost(),1 ); - } - - //return the query string - return buffer.toString(); - } - - - - - - - - - PhraseQuery::PhraseWeight::PhraseWeight(Searcher* searcher, PhraseQuery* _this) { - this->_this=_this; - this->value = 0; - this->idf = 0; - this->queryNorm = 0; - this->queryWeight = 0; - this->searcher = searcher; - } - - TCHAR* PhraseQuery::PhraseWeight::toString() { - return STRDUP_TtoT(_T("weight(PhraseQuery)")); - } - PhraseQuery::PhraseWeight::~PhraseWeight(){ - } - - - Query* PhraseQuery::PhraseWeight::getQuery() { return _this; } - float_t PhraseQuery::PhraseWeight::getValue() { return value; } - - float_t PhraseQuery::PhraseWeight::sumOfSquaredWeights(){ - idf = _this->getSimilarity(searcher)->idf(&_this->terms, searcher); - queryWeight = idf * _this->getBoost(); // compute query weight - return queryWeight * queryWeight; // square it - } - - void PhraseQuery::PhraseWeight::normalize(float_t queryNorm) { - this->queryNorm = queryNorm; - queryWeight *= queryNorm; // normalize query weight - value = queryWeight * idf; // idf for document - } - - Scorer* PhraseQuery::PhraseWeight::scorer(IndexReader* reader) { - //Func - - //Pre - - //Post - - - //Get the length of terms - int32_t tpsLength = _this->terms.size(); - - //optimize zero-term case - if (tpsLength == 0) - return NULL; - - TermPositions** tps = _CL_NEWARRAY(TermPositions*,tpsLength+1); - - //Check if tps has been allocated properly - CND_CONDITION(tps != NULL,"Could not allocate memory for tps"); - - TermPositions* p = NULL; - - //Iterate through all terms - int32_t size = _this->terms.size(); - for (int32_t i = 0; i < size; i++) { - //Get the termPostitions for the i-th term - p = reader->termPositions(_this->terms[i]); - - //Check if p is valid - if (p == NULL) { - //Delete previous retrieved termPositions - while (--i >= 0){ - _CLVDELETE(tps[i]); //todo: not a clucene object... should be - } - _CLDELETE_ARRAY(tps); - return NULL; - } - - //Store p at i in tps - tps[i] = p; - } - tps[tpsLength] = NULL; - - Scorer* ret = NULL; - - Array positions; - _this->getPositions(positions); - int32_t slop = _this->getSlop(); - if ( slop != 0) - // optimize exact case - //todo: need to pass these: this, tps, - ret = _CLNEW SloppyPhraseScorer(this,tps,positions.values, - _this->getSimilarity(searcher), - slop, reader->norms(_this->field)); - else - ret = _CLNEW ExactPhraseScorer(this, tps, positions.values, - _this->getSimilarity(searcher), - reader->norms(_this->field)); - positions.deleteArray(); - - CND_CONDITION(ret != NULL,"Could not allocate memory for ret"); - - //tps can be deleted safely. SloppyPhraseScorer or ExactPhraseScorer will take care - //of its values - - _CLDELETE_ARRAY(tps); - return ret; - } - - void PhraseQuery::PhraseWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){ - TCHAR descbuf[LUCENE_SEARCH_EXPLANATION_DESC_LEN+1]; - TCHAR* tmp; - - tmp = getQuery()->toString(); - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,_T("weight(%s in %d), product of:"), - tmp,doc); - _CLDELETE_CARRAY(tmp); - result->setDescription(descbuf); - - StringBuffer docFreqs; - StringBuffer query; - query.appendChar('\"'); - for (uint32_t i = 0; i < _this->terms.size(); i++) { - if (i != 0) { - docFreqs.appendChar(' '); - query.appendChar(' '); - } - - Term* term = _this->terms[i]; - - docFreqs.append(term->text()); - docFreqs.appendChar('='); - docFreqs.appendInt(searcher->docFreq(term)); - - query.append(term->text()); - } - query.appendChar('\"'); - - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("idf(%s: %s)"),_this->field,docFreqs.getBuffer()); - Explanation* idfExpl = _CLNEW Explanation(idf, descbuf); - - // explain query weight - Explanation* queryExpl = _CLNEW Explanation; - tmp = getQuery()->toString(); - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("queryWeight(%s), product of:"),tmp); - _CLDELETE_CARRAY(tmp); - queryExpl->setDescription(descbuf); - - Explanation* boostExpl = _CLNEW Explanation(_this->getBoost(), _T("boost")); - if (_this->getBoost() != 1.0f) - queryExpl->addDetail(boostExpl); - queryExpl->addDetail(idfExpl); - - Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); - queryExpl->addDetail(queryNormExpl); - - queryExpl->setValue(boostExpl->getValue() * - idfExpl->getValue() * - queryNormExpl->getValue()); - - result->addDetail(queryExpl); - - // explain field weight - Explanation* fieldExpl = _CLNEW Explanation; - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("fieldWeight(%s:%s in %d), product of:"), - _this->field,query.getBuffer(),doc); - fieldExpl->setDescription(descbuf); - - - Explanation* tfExpl = _CLNEW Explanation; - scorer(reader)->explain(doc, tfExpl); - fieldExpl->addDetail(tfExpl); - fieldExpl->addDetail(idfExpl); - - Explanation* fieldNormExpl = _CLNEW Explanation(); - uint8_t* fieldNorms = reader->norms(_this->field); - float_t fieldNorm = - fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; - fieldNormExpl->setValue(fieldNorm); - - - _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("fieldNorm(field=%s, doc=%d)"),_this->field,doc); - fieldNormExpl->setDescription(descbuf); - fieldExpl->addDetail(fieldNormExpl); - - fieldExpl->setValue(tfExpl->getValue() * - idfExpl->getValue() * - fieldNormExpl->getValue()); - - result->addDetail(fieldExpl); - - // combine them - result->setValue(queryExpl->getValue() * fieldExpl->getValue()); - - if (queryExpl->getValue() == 1.0f){ - result->set(*fieldExpl); - _CLDELETE(fieldExpl); - } - } - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/PhraseQuery.h clucene-core-2.3.3.4/src/CLucene/search/PhraseQuery.h --- clucene-core-0.9.21b/src/CLucene/search/PhraseQuery.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PhraseQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,127 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PhraseQuery_ -#define _lucene_search_PhraseQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "Scorer.h" -#include "BooleanQuery.h" -#include "TermQuery.h" - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" - -#include "CLucene/util/StringBuffer.h" -#include "CLucene/util/VoidList.h" - -#include "ExactPhraseScorer.h" -#include "SloppyPhraseScorer.h" - -CL_NS_DEF(search) - // A Query that matches documents containing a particular sequence of terms. - // This may be combined with other terms with a {@link BooleanQuery}. - class PhraseQuery: public Query { - private: - CL_NS(util)::CLVector positions; - int32_t slop; - - const TCHAR* field; - CL_NS(util)::CLVector terms; - - - class PhraseWeight: public Weight { - private: - Searcher* searcher; - float_t value; - float_t idf; - float_t queryNorm; - float_t queryWeight; - PhraseQuery* _this; - public: - PhraseWeight(Searcher* searcher, PhraseQuery* _this); - ~PhraseWeight(); - TCHAR* toString(); - - Query* getQuery(); - float_t getValue(); - - float_t sumOfSquaredWeights(); - void normalize(float_t queryNorm); - Scorer* scorer(CL_NS(index)::IndexReader* reader); - void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret); - TCHAR* toString(TCHAR* f); - bool equals(PhraseWeight* o); - }; - friend class PhraseWeight; - protected: - Weight* _createWeight(Searcher* searcher); - PhraseQuery(const PhraseQuery& clone); - public: - //Constructor - PhraseQuery(); - - //Destructor - ~PhraseQuery(); - - //Returns the string "PhraseQuery" - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - //Sets the number of other words permitted between words in query phrase. - //If zero, then this is an exact phrase search. For larger values this works - //like a WITHIN or NEAR operator. - // - //The slop is in fact an edit-distance, where the units correspond to - //moves of terms in the query phrase out of position. For example, to switch - //the order of two words requires two moves (the first move places the words - //atop one another), so to permit re-orderings of phrases, the slop must be - //at least two. - // - //More exact matches are scored higher than sloppier matches, thus search - //results are sorted by exactness. - // - //The slop is zero by default, requiring exact matches. - void setSlop(const int32_t s) { slop = s; } - - //Returns the slop. See setSlop(). - int32_t getSlop() const { return slop; } - - //Adds a term to the end of the query phrase. - void add(CL_NS(index)::Term* term); - void add(CL_NS(index)::Term* term, int32_t position); - - - - //Returns the sum of squared weights - float_t sumOfSquaredWeights(Searcher* searcher); - - //Normalizes the Weight - void normalize(const float_t norm); - - Scorer* scorer(CL_NS(index)::IndexReader* reader); - - //added by search highlighter - CL_NS(index)::Term** getTerms() const; - _CL_DEPRECATED( deleteDocuments ) int32_t* getPositions() const; ///@deprecated. use getPositions(Array& result) - void getPositions(Array& result) const; - const TCHAR* getFieldName() const{ return field; } - - //Prints a user-readable version of this query. - TCHAR* toString(const TCHAR* f) const; - - Query* clone() const; - bool equals(CL_NS(search)::Query *) const; - - size_t hashCode() const; - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/PhraseQueue.h clucene-core-2.3.3.4/src/CLucene/search/PhraseQueue.h --- clucene-core-0.9.21b/src/CLucene/search/PhraseQueue.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PhraseQueue.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PriorityQueue_ -#define _lucene_search_PriorityQueue_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/PriorityQueue.h" -#include "PhrasePositions.h" - -CL_NS_DEF(search) - class PhraseQueue: public CL_NS(util)::PriorityQueue > { - public: - PhraseQueue(const int32_t size) { - initialize(size,false); - } - ~PhraseQueue(){ - } - - protected: - bool lessThan(PhrasePositions* pp1, PhrasePositions* pp2) { - if (pp1->doc == pp2->doc) - return pp1->position < pp2->position; - else - return pp1->doc < pp2->doc; - } - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/PhraseScorer.cpp clucene-core-2.3.3.4/src/CLucene/search/PhraseScorer.cpp --- clucene-core-0.9.21b/src/CLucene/search/PhraseScorer.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,225 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "PhraseScorer.h" - -#include "PhraseQueue.h" -#include "PhrasePositions.h" -#include "Scorer.h" -#include "Similarity.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - - PhraseScorer::PhraseScorer(Weight* weight, TermPositions** tps, - int32_t* positions, Similarity* similarity, uint8_t* norms): - Scorer(similarity) - { - //Func - Constructor - //Pre - tps != NULL and is an array of TermPositions - // tpsLength >= 0 - // n != NULL - //Post - The instance has been created - - CND_PRECONDITION(tps != NULL,"tps is NULL"); - - //norms are only used if phraseFreq returns more than 0.0 - //phraseFreq should only return more than 0.0 if norms != NULL - //CND_PRECONDITION(n != NULL,"n is NULL"); - - firstTime = true; - more = true; - this->norms = norms; - this->weight = weight; - this->value = weight->getValue(); - - //reset internal pointers - first = NULL; - last = NULL; - - //use pq to build a sorted list of PhrasePositions - int32_t i = 0; - while(tps[i] != NULL){ - PhrasePositions *pp = _CLNEW PhrasePositions(tps[i], positions[i]); - CND_CONDITION(pp != NULL,"Could not allocate memory for pp"); - - //Store PhrasePos into the PhrasePos pq - if (last != NULL) { // add next to end of list - last->_next = pp; - } else - first = pp; - last = pp; - - i++; - } - - pq = _CLNEW PhraseQueue(i); //i==tps.length - CND_CONDITION(pq != NULL,"Could not allocate memory for pq"); - } - - PhraseScorer::~PhraseScorer() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - //The PhraseQueue pq (which is a PriorityQueue) pq is actually empty at present, the elements - //having been transferred by pqToList() to the linked list starting with - //first. The nodes of that linked list are deleted by the destructor of - //first, rather than the destructor of pq. - _CLDELETE(first); - _CLDELETE(pq); - } - - bool PhraseScorer::next(){ - if (firstTime) { - init(); - firstTime = false; - } else if (more) { - more = last->next(); // trigger further scanning - } - return doNext(); - } - - // next without initial increment - bool PhraseScorer::doNext() { - while (more) { - while (more && first->doc < last->doc) { // find doc w/ all the terms - more = first->skipTo(last->doc); // skip first upto last - firstToLast(); // and move it to the end - } - - if (more) { - // found a doc with all of the terms - freq = phraseFreq(); // check for phrase - if (freq == 0.0f) // no match - more = last->next(); // trigger further scanning - else - return true; // found a match - } - } - return false; // no more matches - } - - float_t PhraseScorer::score(){ - //System.out.println("scoring " + first.doc); - float_t raw = getSimilarity()->tf(freq) * value; // raw score - return raw * Similarity::decodeNorm(norms[first->doc]); // normalize - } - - bool PhraseScorer::skipTo(int32_t target) { - for (PhrasePositions* pp = first; more && pp != NULL; pp = pp->_next) { - more = pp->skipTo(target); - } - if (more) - sort(); // re-sort - return doNext(); - } - - void PhraseScorer::init() { - for (PhrasePositions* pp = first; more && pp != NULL; pp = pp->_next) - more = pp->next(); - if(more) - sort(); - } - - void PhraseScorer::sort() { - pq->clear(); - for (PhrasePositions* pp = first; pp != NULL; pp = pp->_next) - pq->put(pp); - pqToList(); - } - - - - void PhraseScorer::pqToList(){ - //Func - Transfers the PhrasePositions from the PhraseQueue pq to - // the PhrasePositions list with first as its first element - //Pre - pq != NULL - // first = NULL - // last = NULL - //Post - All PhrasePositions have been transfered to the list - // of PhrasePositions of which the first element is pointed to by first - // and the last element is pointed to by last - - CND_PRECONDITION(pq != NULL,"pq is NULL"); - - last = first = NULL; - - PhrasePositions* PhrasePos = NULL; - - //As long pq is not empty - while (pq->top() != NULL){ - //Pop a PhrasePositions instance - PhrasePos = pq->pop(); - - // add next to end of list - if (last != NULL) { - last->_next = PhrasePos; - } else { - first = PhrasePos; - } - - //Let last point to the new last PhrasePositions instance just added - last = PhrasePos; - //Reset the next of last to NULL - last->_next = NULL; - } - - //Check to see that pq is empty now - CND_CONDITION(pq->size()==0, "pq is not empty while it should be"); - } - - void PhraseScorer::firstToLast(){ - //Func - Moves first to the end of the list - //Pre - first is NULL or points to an PhrasePositions Instance - // last is NULL or points to an PhrasePositions Instance - // first and last both are NULL or both are not NULL - //Post - The first element has become the last element in the list - - CND_PRECONDITION(((first==NULL && last==NULL) ||(first !=NULL && last != NULL)), - "Either first or last is NULL but not both"); - - //Check if first and last are valid pointers - if(first && last){ - last->_next = first; - last = first; - first = first->_next; - last->_next = NULL; - } - } - - - void PhraseScorer::explain(int32_t _doc, Explanation* tfExplanation) { - while (next() && doc() < _doc){ - } - - float_t phraseFreq = (doc() == _doc) ? freq : 0.0f; - tfExplanation->setValue(getSimilarity()->tf(phraseFreq)); - - StringBuffer buf; - buf.append(_T("tf(phraseFreq=")); - buf.appendFloat(phraseFreq,2); - buf.append(_T(")")); - tfExplanation->setDescription(buf.getBuffer()); - } - - TCHAR* PhraseScorer::toString() { - StringBuffer buf; - buf.append(_T("scorer(")); - - TCHAR* tmp = weight->toString(); - buf.append(tmp); - _CLDELETE_CARRAY(tmp); - - buf.append(_T(")")); - - return buf.toString(); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/PhraseScorer.h clucene-core-2.3.3.4/src/CLucene/search/PhraseScorer.h --- clucene-core-0.9.21b/src/CLucene/search/PhraseScorer.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PhraseScorer_ -#define _lucene_search_PhraseScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "PhraseQueue.h" -#include "PhrasePositions.h" -#include "Scorer.h" -#include "Similarity.h" - -CL_NS_DEF(search) - - class PhraseScorer: public Scorer { - private: - Weight* weight; - float_t freq; - bool firstTime; - bool more; - - protected: - uint8_t* norms; - float_t value; - - PhraseQueue* pq; //is used to order the list point to by first and last - PhrasePositions* first; //Points to the first in the list of PhrasePositions - PhrasePositions* last; //Points to the last in the list of PhrasePositions - - public: - //Constructor - PhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, - int32_t* positions, Similarity* similarity, uint8_t* norms); - virtual ~PhraseScorer(); - - int32_t doc() const { return first->doc; } - bool next(); - float_t score(); - bool skipTo(int32_t target); - - - void explain(int32_t doc, Explanation* ret); - TCHAR* toString(); - protected: - virtual float_t phraseFreq() =0; - - //Transfers the PhrasePositions from the PhraseQueue pq to - //the PhrasePositions list with first as its first element - void pqToList(); - - //Moves first to the end of the list - void firstToLast(); - private: - bool doNext(); - void init(); - void sort(); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/PrefixQuery.cpp clucene-core-2.3.3.4/src/CLucene/search/PrefixQuery.cpp --- clucene-core-0.9.21b/src/CLucene/search/PrefixQuery.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PrefixQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,273 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "PrefixQuery.h" -#include "CLucene/util/BitSet.h" - -CL_NS_USE(util) -CL_NS_USE(index) -CL_NS_DEF(search) - - PrefixQuery::PrefixQuery(Term* Prefix){ - //Func - Constructor. - // Constructs a query for terms starting with prefix - //Pre - Prefix != NULL - //Post - The instance has been created - - //Get a pointer to Prefix - prefix = _CL_POINTER(Prefix); - } - - PrefixQuery::PrefixQuery(const PrefixQuery& clone):Query(clone){ - prefix = _CL_POINTER(clone.prefix); - } - Query* PrefixQuery::clone() const{ - return _CLNEW PrefixQuery(*this); - } - - Term* PrefixQuery::getPrefix(bool pointer){ - if ( pointer ) - return _CL_POINTER(prefix); - else - return prefix; - } - - PrefixQuery::~PrefixQuery(){ - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed. - - //Delete prefix by finalizing it - _CLDECDELETE(prefix); - } - - - /** Returns a hash code value for this object.*/ - size_t PrefixQuery::hashCode() const { - return Similarity::floatToByte(getBoost()) ^ prefix->hashCode(); - } - - const TCHAR* PrefixQuery::getQueryName()const{ - //Func - Returns the name "PrefixQuery" - //Pre - true - //Post - The string "PrefixQuery" has been returned - - return getClassName(); - } - const TCHAR* PrefixQuery::getClassName(){ - //Func - Returns the name "PrefixQuery" - //Pre - true - //Post - The string "PrefixQuery" has been returned - - return _T("PrefixQuery"); - } - - bool PrefixQuery::equals(Query * other) const{ - if (!(other->instanceOf(PrefixQuery::getClassName()))) - return false; - - PrefixQuery* rq = (PrefixQuery*)other; - bool ret = (this->getBoost() == rq->getBoost()) - && (this->prefix->equals(rq->prefix)); - - return ret; - } - - Query* PrefixQuery::rewrite(IndexReader* reader){ - BooleanQuery* query = _CLNEW BooleanQuery(); - TermEnum* enumerator = reader->terms(prefix); - Term* lastTerm = NULL; - try { - const TCHAR* prefixText = prefix->text(); - const TCHAR* prefixField = prefix->field(); - const TCHAR* tmp; - size_t i; - int32_t prefixLen = prefix->textLength(); - do { - lastTerm = enumerator->term(); - if (lastTerm != NULL && lastTerm->field() == prefixField ){ - - //now see if term->text() starts with prefixText - int32_t termLen = lastTerm->textLength(); - if ( prefixLen>termLen ) - break; //the prefix is longer than the term, can't be matched - - tmp = lastTerm->text(); - - //check for prefix match in reverse, since most change will be at the end - for ( i=prefixLen-1;i!=-1;--i ){ - if ( tmp[i] != prefixText[i] ){ - tmp=NULL;//signals inequality - break; - } - } - if ( tmp == NULL ) - break; - - TermQuery* tq = _CLNEW TermQuery(lastTerm); // found a match - tq->setBoost(getBoost()); // set the boost - query->add(tq,true,false, false); // add to query - } else - break; - _CLDECDELETE(lastTerm); - } while (enumerator->next()); - }_CLFINALLY( - enumerator->close(); - _CLDELETE(enumerator); - _CLDECDELETE(lastTerm); - ); - _CLDECDELETE(lastTerm); - - - //if we only added one clause and the clause is not prohibited then - //we can just return the query - if (query->getClauseCount() == 1) { // optimize 1-clause queries - BooleanClause* c=0; - query->getClauses(&c); - - if (!c->prohibited) { // just return clause - c->deleteQuery=false; - Query* ret = c->query; - - _CLDELETE(query); - return ret; - } - } - - return query; - } - - Query* PrefixQuery::combine(Query** queries) { - return Query::mergeBooleanQueries(queries); - } - - TCHAR* PrefixQuery::toString(const TCHAR* field) const{ - //Func - Creates a user-readable version of this query and returns it as as string - //Pre - field != NULL - //Post - a user-readable version of this query has been returned as as string - - //Instantiate a stringbuffer buffer to store the readable version temporarily - CL_NS(util)::StringBuffer buffer; - //check if field equal to the field of prefix - if( field==NULL || _tcscmp(prefix->field(),field) != 0 ) { - //Append the field of prefix to the buffer - buffer.append(prefix->field()); - //Append a colon - buffer.append(_T(":") ); - } - //Append the text of the prefix - buffer.append(prefix->text()); - //Append a wildchar character - buffer.append(_T("*")); - //if the boost factor is not eaqual to 1 - if (getBoost() != 1.0f) { - //Append ^ - buffer.append(_T("^")); - //Append the boost factor - buffer.appendFloat( getBoost(),1); - } - //Convert StringBuffer buffer to TCHAR block and return it - return buffer.toString(); - } - - - - - - - - -PrefixFilter::PrefixFilter( Term* prefix ) -{ - this->prefix = _CL_POINTER(prefix); -} - -PrefixFilter::~PrefixFilter() -{ - _CLDECDELETE(prefix); -} - -PrefixFilter::PrefixFilter( const PrefixFilter& copy ) : - prefix( _CL_POINTER(copy.prefix) ) -{ -} - -Filter* PrefixFilter::clone() const { - return _CLNEW PrefixFilter(*this ); -} - -TCHAR* PrefixFilter::toString() -{ - //Instantiate a stringbuffer buffer to store the readable version temporarily - CL_NS(util)::StringBuffer buffer; - //check if field equal to the field of prefix - if( prefix->field() != NULL ) { - //Append the field of prefix to the buffer - buffer.append(prefix->field()); - //Append a colon - buffer.append(_T(":") ); - } - //Append the text of the prefix - buffer.append(prefix->text()); - buffer.append(_T("*")); - - //Convert StringBuffer buffer to TCHAR block and return it - return buffer.toString(); -} - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* PrefixFilter::bits( IndexReader* reader ) -{ - BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); - TermEnum* enumerator = reader->terms(prefix); - TermDocs* docs = reader->termDocs(); - const TCHAR* prefixText = prefix->text(); - const TCHAR* prefixField = prefix->field(); - const TCHAR* tmp; - size_t i; - int32_t prefixLen = prefix->textLength(); - Term* lastTerm = NULL; - - try{ - do{ - lastTerm = enumerator->term(false); - if (lastTerm != NULL && lastTerm->field() == prefixField ){ - //now see if term->text() starts with prefixText - int32_t termLen = lastTerm->textLength(); - if ( prefixLen>termLen ) - break; //the prefix is longer than the term, can't be matched - - tmp = lastTerm->text(); - - //check for prefix match in reverse, since most change will be at the end - for ( i=prefixLen-1;i!=-1;--i ){ - if ( tmp[i] != prefixText[i] ){ - tmp=NULL;//signals inequality - break; - } - } - if ( tmp == NULL ) - break; - - docs->seek(enumerator); - while (docs->next()) { - bts->set(docs->doc()); - } - } - }while(enumerator->next()); - } _CLFINALLY( - docs->close(); - _CLDELETE(docs); - enumerator->close(); - _CLDELETE(enumerator); - ) - - return bts; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/PrefixQuery.h clucene-core-2.3.3.4/src/CLucene/search/PrefixQuery.h --- clucene-core-0.9.21b/src/CLucene/search/PrefixQuery.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/PrefixQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_PrefixQuery -#define _lucene_search_PrefixQuery -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" -#include "SearchHeader.h" -#include "BooleanQuery.h" -#include "TermQuery.h" -#include "CLucene/util/StringBuffer.h" - -CL_NS_DEF(search) - //PrefixQuery is a Query that matches documents containing terms with a specified prefix. - - class PrefixQuery: public Query { - private: - CL_NS(index)::Term* prefix; - protected: - PrefixQuery(const PrefixQuery& clone); - public: - - //Constructor. Constructs a query for terms starting with prefix - PrefixQuery(CL_NS(index)::Term* Prefix); - - //Destructor - ~PrefixQuery(); - - //Returns the name "PrefixQuery" - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - /** Returns the prefix of this query. */ - CL_NS(index)::Term* getPrefix(bool pointer=true); - - Query* combine(Query** queries); - Query* rewrite(CL_NS(index)::IndexReader* reader); - Query* clone() const; - bool equals(Query * other) const; - - //Creates a user-readable version of this query and returns it as as string - TCHAR* toString(const TCHAR* field) const; - - size_t hashCode() const; - }; - - - class PrefixFilter: public Filter - { - private: - CL_NS(index)::Term* prefix; - protected: - PrefixFilter( const PrefixFilter& copy ); - - public: - PrefixFilter(CL_NS(index)::Term* prefix); - ~PrefixFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - Filter* clone() const; - TCHAR* toString(); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/QueryFilter.cpp clucene-core-2.3.3.4/src/CLucene/search/QueryFilter.cpp --- clucene-core-0.9.21b/src/CLucene/search/QueryFilter.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/QueryFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "QueryFilter.h" -#include "IndexSearcher.h" - -CL_NS_DEF(search) -CL_NS_USE(util) -CL_NS_USE(index) - - -QueryFilter::QueryFilter( const Query* query ) -{ - this->query = query->clone(); -} - - -QueryFilter::~QueryFilter() -{ - _CLDELETE( query ); -} - - -QueryFilter::QueryFilter( const QueryFilter& copy ) -{ - this->query = copy.query->clone(); -} - - -Filter* QueryFilter::clone() const { - return _CLNEW QueryFilter(*this ); -} - - -TCHAR* QueryFilter::toString() -{ - TCHAR* qt = query->toString(); - size_t len = _tcslen(qt) + 14; - TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); - ret[0] = 0; - _sntprintf( ret, len, _T("QueryFilter(%s)"), qt ); - _CLDELETE_CARRAY(qt); - return ret; -} - - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* QueryFilter::bits( IndexReader* reader ) -{ - BitSet* bits = _CLNEW BitSet(reader->maxDoc()); - - IndexSearcher s(reader); - QFHitCollector hc(bits); - s._search(query, NULL, &hc); - return bits; -} - - -QueryFilter::QFHitCollector::QFHitCollector(CL_NS(util)::BitSet* bits){ - this->bits = bits; -} - -void QueryFilter::QFHitCollector::collect(const int32_t doc, const float_t score) { - bits->set(doc); // set bit for hit -} - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/QueryFilter.h clucene-core-2.3.3.4/src/CLucene/search/QueryFilter.h --- clucene-core-0.9.21b/src/CLucene/search/QueryFilter.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/QueryFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_QueryFilter_ -#define _lucene_search_QueryFilter_ - -#include "CLucene/util/BitSet.h" -#include "CLucene/index/IndexReader.h" -#include "SearchHeader.h" -#include "CachingWrapperFilter.h" - -CL_NS_DEF(search) - -class QueryFilter: public Filter -{ -private: - Query* query; - - class QFHitCollector: public HitCollector{ - CL_NS(util)::BitSet* bits; - public: - QFHitCollector(CL_NS(util)::BitSet* bits); - void collect(const int32_t doc, const float_t score); - }; - -protected: - QueryFilter( const QueryFilter& copy ); -public: - QueryFilter( const Query* query ); - - ~QueryFilter(); - - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - Filter *clone() const; - - TCHAR *toString(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/RangeFilter.cpp clucene-core-2.3.3.4/src/CLucene/search/RangeFilter.cpp --- clucene-core-0.9.21b/src/CLucene/search/RangeFilter.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/RangeFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "RangeFilter.h" - -CL_NS_DEF(search) -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(document) - - -RangeFilter::RangeFilter( const TCHAR* fieldName, const TCHAR* lowerTerm, const TCHAR* upperTerm, bool includeLower, bool includeUpper ) -{ - this->field = STRDUP_TtoT(fieldName); - if ( lowerTerm != NULL ) - this->lowerValue = STRDUP_TtoT(lowerTerm); - else - this->lowerValue = NULL; - if ( upperTerm != NULL ) - this->upperValue = STRDUP_TtoT(upperTerm); - else - this->upperValue = NULL; - this->includeLower = includeLower; - this->includeUpper = includeUpper; -} - - -/** - * Constructs a filter for field fieldName matching - * less than or equal to upperTerm. - */ -RangeFilter* RangeFilter::Less( TCHAR* fieldName, TCHAR* upperTerm ) { - return new RangeFilter( fieldName, NULL, upperTerm, false, true ); -} - - -/** -* Constructs a filter for field fieldName matching -* more than or equal to lowerTerm. -*/ -RangeFilter* RangeFilter::More( TCHAR* fieldName, TCHAR* lowerTerm ) { - return new RangeFilter( fieldName, lowerTerm, NULL, true, false ); -} - - -RangeFilter::~RangeFilter() -{ - _CLDELETE_CARRAY( lowerValue ); - _CLDELETE_CARRAY( field ); - _CLDELETE_CARRAY( upperValue ); -} - - -RangeFilter::RangeFilter( const RangeFilter& copy ) : - field( STRDUP_TtoT(copy.field) ), - lowerValue( STRDUP_TtoT(copy.lowerValue) ), - upperValue( STRDUP_TtoT(copy.upperValue) ), - includeLower( copy.includeLower ), - includeUpper( copy.includeUpper ) -{ -} - - -Filter* RangeFilter::clone() const { - return _CLNEW RangeFilter(*this ); -} - - -TCHAR* RangeFilter::toString() -{ - size_t len = (field ? _tcslen(field) : 0) + (lowerValue ? _tcslen(lowerValue) : 0) + (upperValue ? _tcslen(upperValue) : 0) + 8; - TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); - ret[0] = 0; - _sntprintf( ret, len, _T("%s: [%s-%s]"), field, (lowerValue?lowerValue:_T("")), (upperValue?upperValue:_T("")) ); - - return ret; -} - - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* RangeFilter::bits( IndexReader* reader ) -{ - BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); - Term* term = NULL; - - Term* t = _CLNEW Term( field, (lowerValue ? lowerValue : _T("")), false ); - TermEnum* enumerator = reader->terms( t ); // get enumeration of all terms after lowerValue - _CLDECDELETE( t ); - - if( enumerator->term(false) == NULL ) { - _CLDELETE( enumerator ); - return bts; - } - - bool checkLower = false; - if( !includeLower ) // make adjustments to set to exclusive - checkLower = true; - - TermDocs* termDocs = reader->termDocs(); - - try - { - do - { - term = enumerator->term(); - - if( term == NULL || _tcscmp(term->field(), field) ) - break; - - if( !checkLower || lowerValue == NULL || _tcscmp(term->text(), lowerValue) > 0 ) - { - checkLower = false; - if( upperValue != NULL ) - { - int compare = _tcscmp( upperValue, term->text() ); - - /* if beyond the upper term, or is exclusive and - * this is equal to the upper term, break out */ - if( (compare < 0) || (!includeUpper && compare == 0) ) - break; - } - - termDocs->seek( enumerator->term(false) ); - while( termDocs->next() ) { - bts->set( termDocs->doc() ); - } - } - - _CLDECDELETE( term ); - } - while( enumerator->next() ); - } - _CLFINALLY - ( - _CLDECDELETE( term ); - termDocs->close(); - _CLVDELETE( termDocs ); - enumerator->close(); - _CLDELETE( enumerator ); - ); - - return bts; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/RangeFilter.h clucene-core-2.3.3.4/src/CLucene/search/RangeFilter.h --- clucene-core-0.9.21b/src/CLucene/search/RangeFilter.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/RangeFilter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#ifndef _lucene_search_RangeFilter_ -#define _lucene_search_RangeFilter_ - -#include "CLucene/document/DateField.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/BitSet.h" -#include "CLucene/search/Filter.h" - -CL_NS_DEF(search) - -class RangeFilter: public Filter -{ -private: - const TCHAR* field; - TCHAR* lowerValue; - TCHAR* upperValue; - bool includeLower; - bool includeUpper; - -protected: - RangeFilter( const RangeFilter& copy ); - -public: - RangeFilter( const TCHAR* fieldName, const TCHAR* lowerValue, const TCHAR* upperValue, bool includeLower, bool includeUpper ); - - static RangeFilter* Less( TCHAR* fieldName, TCHAR* upperTerm ); - - static RangeFilter* More( TCHAR* fieldName, TCHAR* lowerTerm ); - - ~RangeFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - Filter* clone() const; - - TCHAR* toString(); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/RangeQuery.cpp clucene-core-2.3.3.4/src/CLucene/search/RangeQuery.cpp --- clucene-core-0.9.21b/src/CLucene/search/RangeQuery.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/RangeQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,204 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "RangeQuery.h" - -#include "SearchHeader.h" -#include "Scorer.h" -#include "BooleanQuery.h" -#include "TermQuery.h" - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" - - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - RangeQuery::RangeQuery(Term* lowerTerm, Term* upperTerm, const bool Inclusive){ - //Func - Constructor - //Pre - (LowerTerm != NULL OR UpperTerm != NULL) AND - // if LowerTerm and UpperTerm are valid pointer then the fieldnames must be the same - //Post - The instance has been created - - if (lowerTerm == NULL && upperTerm == NULL) - { - _CLTHROWA(CL_ERR_IllegalArgument,"At least one term must be non-null"); - } - if (lowerTerm != NULL && upperTerm != NULL && lowerTerm->field() != upperTerm->field()) - { - _CLTHROWA(CL_ERR_IllegalArgument,"Both terms must be for the same field"); - } - - // if we have a lowerTerm, start there. otherwise, start at beginning - if (lowerTerm != NULL) { - this->lowerTerm = _CL_POINTER(lowerTerm); - } - else { - this->lowerTerm = _CLNEW Term(upperTerm, LUCENE_BLANK_STRING); - } - this->upperTerm = (upperTerm != NULL ? _CL_POINTER(upperTerm) : NULL); - this->inclusive = Inclusive; - } - RangeQuery::RangeQuery(const RangeQuery& clone): - Query(clone){ - this->inclusive = clone.inclusive; - this->upperTerm = (clone.upperTerm != NULL ? _CL_POINTER(clone.upperTerm) : NULL ); - this->lowerTerm = (clone.lowerTerm != NULL ? _CL_POINTER(clone.lowerTerm) : NULL ); - } - Query* RangeQuery::clone() const{ - return _CLNEW RangeQuery(*this); - } - - RangeQuery::~RangeQuery() { - //Func - Destructor - //Pre - true - //Post - The instance has been destroyed - - _CLDECDELETE(lowerTerm); - _CLDECDELETE(upperTerm); - } - - /** Returns a hash code value for this object.*/ - size_t RangeQuery::hashCode() const { - return Similarity::floatToByte(getBoost()) ^ - (lowerTerm != NULL ? lowerTerm->hashCode() : 0) ^ - (upperTerm != NULL ? upperTerm->hashCode() : 0) ^ - (this->inclusive ? 1 : 0); - } - - const TCHAR* RangeQuery::getQueryName() const{ - return getClassName(); - } - const TCHAR* RangeQuery::getClassName(){ - return _T("RangeQuery"); - } - - Query* RangeQuery::combine(Query** queries) { - return Query::mergeBooleanQueries(queries); - } - - bool RangeQuery::equals(Query * other) const{ - if (!(other->instanceOf(RangeQuery::getClassName()))) - return false; - - RangeQuery* rq = (RangeQuery*)other; - bool ret = (this->getBoost() == rq->getBoost()) - && (this->isInclusive() == rq->isInclusive()) - && (this->getLowerTerm()->equals(rq->getLowerTerm())) - && (this->getUpperTerm()->equals(rq->getUpperTerm())); - - return ret; - } - - - /** - * FIXME: Describe rewrite method here. - * - * @param reader an IndexReader value - * @return a Query value - * @exception IOException if an error occurs - */ - Query* RangeQuery::rewrite(IndexReader* reader){ - - BooleanQuery* query = _CLNEW BooleanQuery; - TermEnum* enumerator = reader->terms(lowerTerm); - Term* lastTerm = NULL; - try { - bool checkLower = false; - if (!inclusive) // make adjustments to set to exclusive - checkLower = true; - - const TCHAR* testField = getField(); - do { - lastTerm = enumerator->term(); - if (lastTerm != NULL && lastTerm->field() == testField ) { - if (!checkLower || _tcscmp(lastTerm->text(),lowerTerm->text()) > 0) { - checkLower = false; - if (upperTerm != NULL) { - int compare = _tcscmp(upperTerm->text(),lastTerm->text()); - /* if beyond the upper term, or is exclusive and - * this is equal to the upper term, break out */ - if ((compare < 0) || (!inclusive && compare == 0)) - break; - } - TermQuery* tq = _CLNEW TermQuery(lastTerm); // found a match - tq->setBoost(getBoost()); // set the boost - query->add(tq, true, false, false); // add to query - } - }else { - break; - } - _CLDECDELETE(lastTerm); - } - while (enumerator->next()); - }catch(...){ - _CLDECDELETE(lastTerm); //always need to delete this - _CLDELETE(query); //in case of error, delete the query - enumerator->close(); - _CLDELETE(enumerator); - throw; //rethrow - } - _CLDECDELETE(lastTerm); //always need to delete this - enumerator->close(); - _CLDELETE(enumerator); - - return query; - } - - /** Prints a user-readable version of this query. */ - TCHAR* RangeQuery::toString(const TCHAR* field) const - { - StringBuffer buffer; - if ( field==NULL || _tcscmp(getField(),field)!=0 ) - { - buffer.append( getField() ); - buffer.append( _T(":")); - } - buffer.append(inclusive ? _T("[") : _T("{")); - buffer.append(lowerTerm != NULL ? lowerTerm->text() : _T("NULL")); - buffer.append(_T(" TO ")); - buffer.append(upperTerm != NULL ? upperTerm->text() : _T("NULL")); - buffer.append(inclusive ? _T("]") : _T("}")); - if (getBoost() != 1.0f) - { - buffer.append( _T("^")); - buffer.appendFloat( getBoost(),1 ); - } - return buffer.toString(); - } - - - const TCHAR* RangeQuery::getField() const - { - return (lowerTerm != NULL ? lowerTerm->field() : upperTerm->field()); - } - - /** Returns the lower term of this range query */ - Term* RangeQuery::getLowerTerm(bool pointer) const { - if ( pointer ) - return _CL_POINTER(lowerTerm); - else - return lowerTerm; - } - - /** Returns the upper term of this range query */ - Term* RangeQuery::getUpperTerm(bool pointer) const { - if ( pointer ) - return _CL_POINTER(upperTerm); - else - return upperTerm; - } - - /** Returns true if the range query is inclusive */ - bool RangeQuery::isInclusive() const { return inclusive; } - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/RangeQuery.h clucene-core-2.3.3.4/src/CLucene/search/RangeQuery.h --- clucene-core-0.9.21b/src/CLucene/search/RangeQuery.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/RangeQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_RangeQuery_ -#define _lucene_search_RangeQuery_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "Scorer.h" -#include "TermQuery.h" - -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" - -#include "CLucene/util/StringBuffer.h" - - -CL_NS_DEF(search) - /** Constructs a query selecting all terms greater than - * lowerTerm but less than upperTerm. - * There must be at least one term and either term may be null, - * in which case there is no bound on that side, but if there are - * two terms, both terms must be for the same field. - */ - class RangeQuery: public Query - { - private: - CL_NS(index)::Term* lowerTerm; - CL_NS(index)::Term* upperTerm; - bool inclusive; - protected: - RangeQuery(const RangeQuery& clone); - - public: - // Constructs a query selecting all terms greater than - // lowerTerm but less than upperTerm. - // There must be at least one term and either term may be NULL-- - // in which case there is no bound on that side, but if there are - // two term, both terms must be for the same field. - RangeQuery(CL_NS(index)::Term* LowerTerm, CL_NS(index)::Term* UpperTerm, const bool Inclusive); - ~RangeQuery(); - - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - Query* rewrite(CL_NS(index)::IndexReader* reader); - - Query* combine(Query** queries); - - // Prints a user-readable version of this query. - TCHAR* toString(const TCHAR* field) const; - - Query* clone() const; - - bool equals(Query * other) const; - - CL_NS(index)::Term* getLowerTerm(bool pointer=true) const; - CL_NS(index)::Term* getUpperTerm(bool pointer=true) const; - bool isInclusive() const; - const TCHAR* getField() const; - - size_t hashCode() const; - }; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/Scorer.h clucene-core-2.3.3.4/src/CLucene/search/Scorer.h --- clucene-core-0.9.21b/src/CLucene/search/Scorer.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Scorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Scorer_ -#define _lucene_search_Scorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Similarity.h" -#include "SearchHeader.h" -#include "Explanation.h" - -CL_NS_DEF(search) - /** Expert: Implements scoring for a class of queries. */ -class Scorer: LUCENE_BASE { - private: - Similarity* similarity; - protected: - /** Constructs a Scorer. */ - Scorer(Similarity* similarity) { - this->similarity = similarity; - } - public: - virtual ~Scorer(){ - } - - /** Returns the Similarity implementation used by this scorer. */ - Similarity* getSimilarity() const{ - return this->similarity; - } - - /** Scores all documents and passes them to a collector. */ - void score(HitCollector* hc) { - while (next()) { - hc->collect(doc(), score()); - } - } - - /** Advance to the next document matching the query. Returns true iff there - * is another match. */ - virtual bool next() = 0; - - /** Returns the current document number. Initially invalid, until {@link - * #next()} is called the first time. */ - virtual int32_t doc() const = 0; - - /** Returns the score of the current document. Initially invalid, until - * {@link #next()} is called the first time. */ - virtual float_t score() = 0; - - /** Skips to the first match beyond the current whose document number is - * greater than or equal to target.

Returns true iff there is such - * a match.

Behaves as if written:

-         *   boolean skipTo(int32_t target) {
-         *     do {
-         *       if (!next())
-         * 	     return false;
-         *     } while (target > doc());
-         *     return true;
-         *   }
-         * 
- * Most implementations are considerably more efficient than that. - */ - virtual bool skipTo(int32_t target) = 0; - - /** Returns an explanation of the score for doc. */ - virtual void explain(int32_t doc, Explanation* ret) = 0; - - - /** Returns an string which explains the object */ - virtual TCHAR* toString() = 0; - - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/SearchHeader.cpp clucene-core-2.3.3.4/src/CLucene/search/SearchHeader.cpp --- clucene-core-0.9.21b/src/CLucene/search/SearchHeader.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/SearchHeader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SearchHeader.h" -#include "BooleanQuery.h" -#include "FieldDocSortedHitQueue.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - -CL_NS(document)::Document* Searchable::doc(const int32_t i){ - CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; - if (!doc(i,ret) ) - _CLDELETE(ret); - return ret; -} - -//static -Query* Query::mergeBooleanQueries(Query** queries) { - CL_NS(util)::CLVector allClauses; - int32_t i = 0; - while ( queries[i] != NULL ){ - BooleanQuery* bq = (BooleanQuery*)queries[i]; - - int32_t size = bq->getClauseCount(); - BooleanClause** clauses = _CL_NEWARRAY(BooleanClause*, size); - bq->getClauses(clauses); - - for (int32_t j = 0;j::iterator itr = allClauses.begin(); - while (itr != allClauses.end() ) { - result->add(*itr); - } - return result; -} - -Query::Query(const Query& clone):boost(clone.boost){ - //constructor -} -Weight* Query::_createWeight(Searcher* searcher){ - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::_createWeight"); -} - -Query::Query(): - boost(1.0f) -{ - //constructor -} -Query::~Query(){ -} - -/** Expert: called to re-write queries into primitive queries. */ -Query* Query::rewrite(CL_NS(index)::IndexReader* reader){ - return this; -} - -Query* Query::combine(Query** queries){ - _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::combine"); -} -Similarity* Query::getSimilarity(Searcher* searcher) { - return searcher->getSimilarity(); -} -bool Query::instanceOf(const TCHAR* other) const{ - const TCHAR* t = getQueryName(); - if ( t==other || _tcscmp( t, other )==0 ) - return true; - else - return false; -} -TCHAR* Query::toString() const{ - return toString(LUCENE_BLANK_STRING); -} - -void Query::setBoost(float_t b) { boost = b; } - -float_t Query::getBoost() const { return boost; } - -Weight* Query::weight(Searcher* searcher){ - Query* query = searcher->rewrite(this); - Weight* weight = query->_createWeight(searcher); - float_t sum = weight->sumOfSquaredWeights(); - float_t norm = getSimilarity(searcher)->queryNorm(sum); - weight->normalize(norm); - return weight; -} - -TopFieldDocs::TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields): - TopDocs (totalHits, NULL, scoreDocsLen) -{ - this->fields = fields; - this->fieldDocs = fieldDocs; - this->scoreDocs = _CL_NEWARRAY(ScoreDoc,scoreDocsLen); - for (int32_t i=0;iscoreDocs[i] = this->fieldDocs[i]->scoreDoc; -} -TopFieldDocs::~TopFieldDocs(){ - if ( fieldDocs ){ - for (int32_t i=0;i= 0 -//Post - The instance has been created - -} - -TopDocs::~TopDocs(){ -//Func - Destructor -//Pre - true -//Post - The instance has been destroyed - - _CLDELETE_ARRAY(scoreDocs); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/SearchHeader.h clucene-core-2.3.3.4/src/CLucene/search/SearchHeader.h --- clucene-core-0.9.21b/src/CLucene/search/SearchHeader.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/SearchHeader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,456 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_SearchHeader_ -#define _lucene_search_SearchHeader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "Filter.h" -#include "CLucene/document/Document.h" -#include "Sort.h" -#include "CLucene/util/VoidList.h" -#include "Explanation.h" -#include "Similarity.h" - -CL_NS_DEF(search) - - //predefine classes - class Scorer; - class Query; - class Hits; - class Sort; - class FieldDoc; - class TopFieldDocs; - - /** Expert: Returned by low-level search implementations. - * @see TopDocs */ - struct ScoreDoc { - /** Expert: A hit document's number. - * @see Searcher#doc(int32_t) - */ - int32_t doc; - - /** Expert: The score of this document for the query. */ - float_t score; - }; - - /** Expert: Returned by low-level search implementations. - * @see Searcher#search(Query,Filter,int32_t) */ - class TopDocs:LUCENE_BASE { - public: - /** Expert: The total number of hits for the query. - * @see Hits#length() - */ - int32_t totalHits; - - /** Expert: The top hits for the query. */ - ScoreDoc* scoreDocs; - int32_t scoreDocsLength; - - /** Expert: Constructs a TopDocs. TopDocs takes ownership of the ScoreDoc array*/ - TopDocs(const int32_t th, ScoreDoc* sds, int32_t scoreDocsLength); - ~TopDocs(); - }; - - // Lower-level search API. - // @see Searcher#search(Query,HitCollector) - class HitCollector: LUCENE_BASE { - public: - /** Called once for every non-zero scoring document, with the document number - * and its score. - * - *

If, for example, an application wished to collect all of the hits for a - * query in a BitSet, then it might:

-      *   Searcher searcher = new IndexSearcher(indexReader);
-      *   final BitSet bits = new BitSet(indexReader.maxDoc());
-      *   searcher.search(query, new HitCollector() {
-      *       public void collect(int32_t doc, float score) {
-      *         bits.set(doc);
-      *       }
-      *     });
-      * 
- * - *

Note: This is called in an inner search loop. For good search - * performance, implementations of this method should not call - * {@link Searcher#doc(int32_t)} or - * {@link IndexReader#document(int32_t)} on every - * document number encountered. Doing so can slow searches by an order - * of magnitude or more. - *

Note: The score passed to this method is a raw score. - * In other words, the score will not necessarily be a float whose value is - * between 0 and 1. - */ - virtual void collect(const int32_t doc, const float_t score) = 0; - virtual ~HitCollector(){} - }; - - /** Expert: Calculate query weights and build query scorers. - * - *

A Weight is constructed by a query, given a Searcher ({@link - * Query#_createWeight(Searcher)}). The {@link #sumOfSquaredWeights()} method - * is then called on the top-level query to compute the query normalization - * factor (@link Similarity#queryNorm(float_t)}). This factor is then passed to - * {@link #normalize(float_t)}. At this point the weighting is complete and a - * scorer may be constructed by calling {@link #scorer(IndexReader)}. - */ - class Weight: LUCENE_BASE { - public: - virtual ~Weight(){ - }; - - /** The query that this concerns. */ - virtual Query* getQuery() = 0; - - /** The weight for this query. */ - virtual float_t getValue() = 0; - - /** The sum of squared weights of contained query clauses. */ - virtual float_t sumOfSquaredWeights() = 0; - - /** Assigns the query normalization factor to this. */ - virtual void normalize(float_t norm) = 0; - - /** Constructs a scorer for this. */ - virtual Scorer* scorer(CL_NS(index)::IndexReader* reader) = 0; - - /** An explanation of the score computation for the named document. */ - virtual void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret) = 0; - - virtual TCHAR* toString(){ - return STRDUP_TtoT(_T("Weight")); - } - }; - - class HitDoc:LUCENE_BASE { - public: - float_t score; - int32_t id; - CL_NS(document)::Document* doc; - - HitDoc* next; // in doubly-linked cache - HitDoc* prev; // in doubly-linked cache - - HitDoc(const float_t s, const int32_t i); - ~HitDoc(); - }; - - - - // A ranked list of documents, used to hold search results. - class Hits:LUCENE_BASE { - private: - Query* query; - Searcher* searcher; - Filter* filter; - const Sort* sort; - - size_t _length; // the total number of hits - CL_NS(util)::CLVector > hitDocs; // cache of hits retrieved - - HitDoc* first; // head of LRU cache - HitDoc* last; // tail of LRU cache - int32_t numDocs; // number cached - int32_t maxDocs; // max to cache - - public: - Hits(Searcher* s, Query* q, Filter* f, const Sort* sort=NULL); - ~Hits(); - - /** Returns the total number of hits available in this set. */ - int32_t length() const; - - /** Returns the stored fields of the nth document in this set. -

Documents are cached, so that repeated requests for the same element may - return the same Document object. - * - * @memory Memory belongs to the hits object. Don't delete the return value. - */ - CL_NS(document)::Document& doc(const int32_t n); - - /** Returns the id for the nth document in this set. */ - int32_t id (const int32_t n); - - /** Returns the score for the nth document in this set. */ - float_t score(const int32_t n); - - private: - // Tries to add new documents to hitDocs. - // Ensures that the hit numbered _min has been retrieved. - void getMoreDocs(const size_t _min); - - HitDoc* getHitDoc(const size_t n); - - void addToFront(HitDoc* hitDoc); - - void remove(const HitDoc* hitDoc); - - }; - - /** The interface for search implementations. - * - *

Implementations provide search over a single index, over multiple - * indices, and over indices on remote servers. - */ - class Searchable: LUCENE_BASE { - public: - virtual ~Searchable(){ - } - - /** Lower-level search API. - * - *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero - * scoring document. - * - *

Applications should only use this if they need all of the - * matching documents. The high-level search API ({@link - * Searcher#search(Query*)}) is usually more efficient, as it skips - * non-high-scoring hits. - * - * @param query to match documents - * @param filter if non-null, a bitset used to eliminate some documents - * @param results to receive hits - */ - virtual void _search(Query* query, Filter* filter, HitCollector* results) = 0; - - /** Frees resources associated with this Searcher. - * Be careful not to call this method while you are still using objects - * like {@link Hits}. - */ - virtual void close() = 0; - - /** Expert: Returns the number of documents containing term. - * Called by search code to compute term weights. - * @see IndexReader#docFreq(Term). - */ - virtual int32_t docFreq(const CL_NS(index)::Term* term) const = 0; - - /** Expert: Returns one greater than the largest possible document number. - * Called by search code to compute term weights. - * @see IndexReader#maxDoc(). - */ - virtual int32_t maxDoc() const = 0; - - /** Expert: Low-level search implementation. Finds the top n - * hits for query, applying filter if non-null. - * - *

Called by {@link Hits}. - * - *

Applications should usually call {@link Searcher#search(Query*)} or - * {@link Searcher#search(Query*,Filter*)} instead. - */ - virtual TopDocs* _search(Query* query, Filter* filter, const int32_t n) = 0; - - /** Expert: Returns the stored fields of document i. - * Called by {@link HitCollector} implementations. - * @see IndexReader#document(int32_t). - */ - virtual bool doc(int32_t i, CL_NS(document)::Document* d) = 0; - _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* doc(const int32_t i); - - /** Expert: called to re-write queries into primitive queries. */ - virtual Query* rewrite(Query* query) = 0; - - /** Returns an Explanation that describes how doc scored against - * query. - * - *

This is intended to be used in developing Similarity implementations, - * and, for good performance, should not be displayed with every hit. - * Computing an explanation is as expensive as executing the query over the - * entire index. - */ - virtual void explain(Query* query, int32_t doc, Explanation* ret) = 0; - - /** Expert: Low-level search implementation with arbitrary sorting. Finds - * the top n hits for query, applying - * filter if non-null, and sorting the hits by the criteria in - * sort. - * - *

Applications should usually call {@link - * Searcher#search(Query,Filter,Sort)} instead. - */ - virtual TopFieldDocs* _search(Query* query, Filter* filter, const int32_t n, const Sort* sort) = 0; - }; - - - - /** An abstract base class for search implementations. - * Implements some common utility methods. - */ - class Searcher:public Searchable { - private: - /** The Similarity implementation used by this searcher. */ - Similarity* similarity; - - public: - Searcher(){ - similarity = Similarity::getDefault(); - } - virtual ~Searcher(){ - } - - // Returns the documents matching query. - Hits* search(Query* query) { - return search(query, (Filter*)NULL ); - } - - // Returns the documents matching query and - // filter. - Hits* search(Query* query, Filter* filter) { - return _CLNEW Hits(this, query, filter); - } - - /** Returns documents matching query sorted by - * sort. - */ - Hits* search(Query* query, const Sort* sort){ - return _CLNEW Hits(this, query, NULL, sort); - } - - /** Returns documents matching query and filter, - * sorted by sort. - */ - Hits* search(Query* query, Filter* filter, const Sort* sort){ - return _CLNEW Hits(this, query, filter, sort); - } - - /** Lower-level search API. - * - *

{@link HitCollector#collect(int32_t ,float_t)} is called for every non-zero - * scoring document. - * - *

Applications should only use this if they need all of the - * matching documents. The high-level search API ({@link - * Searcher#search(Query*)}) is usually more efficient, as it skips - * non-high-scoring hits. - *

Note: The score passed to this method is a raw score. - * In other words, the score will not necessarily be a float whose value is - * between 0 and 1. - */ - void _search(Query* query, HitCollector* results) { - Searchable::_search(query, NULL, results); - } - - /** Expert: Set the Similarity implementation used by this Searcher. - * - * @see Similarity#setDefault(Similarity) - */ - void setSimilarity(Similarity* similarity) { - this->similarity = similarity; - } - - /** Expert: Return the Similarity implementation used by this Searcher. - * - *

This defaults to the current value of {@link Similarity#getDefault()}. - */ - Similarity* getSimilarity(){ - return this->similarity; - } - }; - - /** The abstract base class for queries. -

Instantiable subclasses are: -

    -
  • {@link TermQuery} -
  • {@link MultiTermQuery} -
  • {@link BooleanQuery} -
  • {@link WildcardQuery} -
  • {@link PhraseQuery} -
  • {@link PrefixQuery} -
  • {@link PhrasePrefixQuery} -
  • {@link FuzzyQuery} -
  • {@link RangeQuery} -
  • {@link spans.SpanQuery} -
-

A parser for queries is contained in: -

    -
  • {@link queryParser.QueryParser QueryParser} -
- */ - class Query :LUCENE_BASE { - private: - // query boost factor - float_t boost; - protected: - Query(const Query& clone); - public: - Query(); - virtual ~Query(); - - /** Sets the boost for this query clause to b. Documents - * matching this clause will (in addition to the normal weightings) have - * their score multiplied by b. - */ - void setBoost(float_t b); - - /** Gets the boost for this clause. Documents matching - * this clause will (in addition to the normal weightings) have their score - * multiplied by b. The boost is 1.0 by default. - */ - float_t getBoost() const; - - /** Expert: Constructs an initializes a Weight for a top-level query. */ - Weight* weight(Searcher* searcher); - - /** Expert: called to re-write queries into primitive queries. */ - virtual Query* rewrite(CL_NS(index)::IndexReader* reader); - - /** Expert: called when re-writing queries under MultiSearcher. - * - *

Only implemented by derived queries, with no - * {@link #_createWeight(Searcher)} implementatation. - */ - virtual Query* combine(Query** queries); - - /** Expert: merges the clauses of a set of BooleanQuery's into a single - * BooleanQuery. - * - *

A utility for use by {@link #combine(Query[])} implementations. - */ - static Query* mergeBooleanQueries(Query** queries); - - /** Expert: Returns the Similarity implementation to be used for this query. - * Subclasses may override this method to specify their own Similarity - * implementation, perhaps one that delegates through that of the Searcher. - * By default the Searcher's Similarity implementation is returned.*/ - Similarity* getSimilarity(Searcher* searcher); - - /** Returns a clone of this query. */ - virtual Query* clone() const = 0; - virtual const TCHAR* getQueryName() const = 0; - bool instanceOf(const TCHAR* other) const; - - /** Prints a query to a string, with field as the default field - * for terms.

The representation used is one that is readable by - * {@link queryParser.QueryParser QueryParser} - * (although, if the query was created by the parser, the printed - * representation may not be exactly what was parsed). - */ - virtual TCHAR* toString(const TCHAR* field) const = 0; - - virtual bool equals(Query* other) const = 0; - virtual size_t hashCode() const = 0; - - /** Prints a query to a string. */ - TCHAR* toString() const; - - - /** Expert: Constructs an appropriate Weight implementation for this query. - * - *

Only implemented by primitive queries, which re-write to themselves. - * This is an Internal function - */ - virtual Weight* _createWeight(Searcher* searcher); - - }; - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/Similarity.cpp clucene-core-2.3.3.4/src/CLucene/search/Similarity.cpp --- clucene-core-0.9.21b/src/CLucene/search/Similarity.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Similarity.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,233 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Similarity.h" - -#include "CLucene/index/Term.h" -#include "SearchHeader.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - -#ifdef _CL_HAVE_NO_FLOAT_BYTE - #if defined(_LUCENE_PRAGMA_WARNINGS) - #pragma message ("==================Using fallback float<->byte encodings!!!==================") - #else - #warning "==================Using fallback float<->byte encodings!!!==================" - #endif - - //if the autoconf figured out that we can't do the conversions properly, then - //we fall back on the old, inaccurate way of doing things. - float_t NORM_TABLE[] = { - 0.0,5.820766E-10,6.9849193E-10,8.1490725E-10,9.313226E-10,1.1641532E-9,1.3969839E-9, - 1.6298145E-9,1.8626451E-9,2.3283064E-9,2.7939677E-9,3.259629E-9,3.7252903E-9, - 4.656613E-9,5.5879354E-9,6.519258E-9,7.4505806E-9,9.313226E-9,1.1175871E-8,1.3038516E-8, - 1.4901161E-8,1.8626451E-8,2.2351742E-8,2.6077032E-8,2.9802322E-8,3.7252903E-8,4.4703484E-8, - 5.2154064E-8,5.9604645E-8,7.4505806E-8,8.940697E-8,1.0430813E-7,1.1920929E-7,1.4901161E-7, - 1.7881393E-7,2.0861626E-7,2.3841858E-7,2.9802322E-7,3.5762787E-7,4.172325E-7,4.7683716E-7, - 5.9604645E-7,7.1525574E-7,8.34465E-7,9.536743E-7,1.1920929E-6,1.4305115E-6,1.66893E-6, - 1.9073486E-6,2.3841858E-6,2.861023E-6,3.33786E-6,3.8146973E-6,4.7683716E-6,5.722046E-6, - 6.67572E-6,7.6293945E-6,9.536743E-6,1.1444092E-5,1.335144E-5,1.5258789E-5,1.9073486E-5, - 2.2888184E-5,2.670288E-5,3.0517578E-5,3.8146973E-5,4.5776367E-5,5.340576E-5,6.1035156E-5, - 7.6293945E-5,9.1552734E-5,1.0681152E-4,1.2207031E-4,1.5258789E-4,1.8310547E-4,2.1362305E-4, - 2.4414062E-4,3.0517578E-4,3.6621094E-4,4.272461E-4,4.8828125E-4,6.1035156E-4,7.324219E-4, - 8.544922E-4,9.765625E-4,0.0012207031,0.0014648438,0.0017089844,0.001953125,0.0024414062, - 0.0029296875,0.0034179688,0.00390625,0.0048828125,0.005859375,0.0068359375, - 0.0078125,0.009765625,0.01171875,0.013671875,0.015625,0.01953125,0.0234375, - 0.02734375,0.03125,0.0390625,0.046875,0.0546875,0.0625,0.078125,0.09375,0.109375, - 0.125,0.15625,0.1875,0.21875,0.25,0.3125,0.375,0.4375,0.5,0.625,0.75, - 0.875,1.0,1.25,1.5,1.75,2,2.5,3,3.5,4.0,5.0,6.0,7.0,8.0,10.0,12.0,14.0,16.0,20.0,24.0,28.0,32.0,40.0,48.0,56.0, - 64.0,80.0,96.0,112.0,128.0,160.0,192.0,224.0,256.0,320.0,384.0,448.0,512.0,640.0,768.0,896.0,1024.0,1280.0,1536.0,1792.0, - 2048.0,2560.0,3072.0,3584.0,4096.0,5120.0,6144.0,7168.0,8192.0,10240.0,12288.0,14336.0,16384.0,20480.0,24576.0, - 28672.0,32768.0,40960.0,49152.0,57344.0,65536.0,81920.0,98304.0,114688.0,131072.0,163840.0,196608.0, - 229376.0,262144.0,327680.0,393216.0,458752.0,524288.0,655360.0,786432.0,917504.0,1048576.0,1310720.0, - 1572864.0,1835008.0,2097152.0,2621440.0,3145728.0,3670016.0,4194304.0,5242880.0,6291456.0,7340032.0, - 8388608.0,10485760.0,12582912.0,14680064.0,16777216.0,20971520.0,25165824.0,29360128.0,33554432.0, - 41943040.0,50331648.0,58720256.0,67108864.0,83886080.0,100663296.0,117440512.0,134217728.0, - 167772160.0,201326592.0,234881024.0,268435456.0,335544320.0,402653184.0,469762048.0,536870912.0, - 671088640.0,805306368.0,939524096.0,1073741824.0,1342177280.0,1610612736.0,1879048192.0, - 2147483648.0,2684354560.0,3221225472.0,3758096384.0,4294967296.0,5368709120.0,6442450944.0,7516192768.0 - }; - - float_t Similarity::byteToFloat(uint8_t b) { - return NORM_TABLE[b]; - } - - uint8_t Similarity::floatToByte(float_t f) { - return Similarity::encodeNorm(f); - } - -#else - - /** Cache of decoded bytes. */ - float_t NORM_TABLE[256]; - bool NORM_TABLE_initd=false; - - //float to bits conversion utilities... - union clvalue { - int32_t i; - float f; //must use a float type, else types dont match up - }; - - int32_t floatToIntBits(float_t value) - { - clvalue u; - int32_t e, f; - u.f = (float)value; - e = u.i & 0x7f800000; - f = u.i & 0x007fffff; - - if (e == 0x7f800000 && f != 0) - u.i = 0x7fc00000; - - return u.i; - } - - float_t intBitsToFloat(int32_t bits) - { - clvalue u; - u.i = bits; - return u.f; - } - - - float_t Similarity::byteToFloat(uint8_t b) { - if (b == 0) // zero is a special case - return 0.0f; - int32_t mantissa = b & 7; - int32_t exponent = (b >> 3) & 31; - int32_t bits = ((exponent+(63-15)) << 24) | (mantissa << 21); - return intBitsToFloat(bits); - } - - uint8_t Similarity::floatToByte(float_t f) { - if (f < 0.0f) // round negatives up to zero - f = 0.0f; - - if (f == 0.0f) // zero is a special case - return 0; - - int32_t bits = floatToIntBits(f); // parse float_t into parts - int32_t mantissa = (bits & 0xffffff) >> 21; - int32_t exponent = (((bits >> 24) & 0x7f) - 63) + 15; - - if (exponent > 31) { // overflow: use max value - exponent = 31; - mantissa = 7; - } - - if (exponent < 0) { // underflow: use min value - exponent = 0; - mantissa = 1; - } - - return (uint8_t)((exponent << 3) | mantissa); // pack into a uint8_t - } -#endif - - /** The Similarity implementation used by default. */ - Similarity* _defaultImpl=NULL; - - void Similarity::setDefault(Similarity* similarity) { - _defaultImpl = similarity; - } - - Similarity* Similarity::getDefault() { - if ( _defaultImpl == NULL ){ - _defaultImpl = _CLNEW DefaultSimilarity(); - } - return _defaultImpl; - } - - float_t Similarity::decodeNorm(uint8_t b) { -#ifndef _CL_HAVE_NO_FLOAT_BYTE - if ( !NORM_TABLE_initd ){ - for (int i = 0; i < 256; i++) - NORM_TABLE[i] = byteToFloat(i); - NORM_TABLE_initd=true; - } -#endif - return NORM_TABLE[b]; - } - - uint8_t Similarity::encodeNorm(float_t f) { -#ifdef _CL_HAVE_NO_FLOAT_BYTE - int32_t i=0; - if ( f <= 0 ) - return 0; - - while ( i<256 && f > NORM_TABLE[i] ){ - i++; - } - if ( i == 0 ) - return 0; - else if ( i == 255 && f>NORM_TABLE[255] ) - return 255; - else - return i; -#else - return floatToByte(f); -#endif - } - - - float_t Similarity::idf(Term* term, Searcher* searcher) { - return idf(searcher->docFreq(term), searcher->maxDoc()); - } - - - float_t Similarity::idf(CL_NS(util)::CLVector* terms, Searcher* searcher) { - float_t _idf = 0.0f; - for (CL_NS(util)::CLVector::iterator i = terms->begin(); i != terms->end(); i++ ) { - _idf += idf((Term*)*i, searcher); - } - return _idf; - } - - Similarity::~Similarity(){ - } - - - - - DefaultSimilarity::DefaultSimilarity(){ - } - DefaultSimilarity::~DefaultSimilarity(){ - } - - float_t DefaultSimilarity::lengthNorm(const TCHAR* fieldName, int32_t numTerms) { - if ( numTerms == 0 ) //prevent div by zero - return 0; - float_t ret = (float_t)(1.0 / sqrt((float_t)numTerms)); - return ret; - } - - float_t DefaultSimilarity::queryNorm(float_t sumOfSquaredWeights) { - if ( sumOfSquaredWeights == 0 ) //prevent div by zero - return 0.0f; - float_t ret = (float_t)(1.0 / sqrt(sumOfSquaredWeights)); - return ret; - } - - float_t DefaultSimilarity::tf(float_t freq) { - return sqrt(freq); - } - - float_t DefaultSimilarity::sloppyFreq(int32_t distance) { - return 1.0f / (distance + 1); - } - - float_t DefaultSimilarity::idf(int32_t docFreq, int32_t numDocs) { - return (float_t)(log(numDocs/(float_t)(docFreq+1)) + 1.0); - } - - float_t DefaultSimilarity::coord(int32_t overlap, int32_t maxOverlap) { - if ( maxOverlap == 0 ) - return 0.0f; - return overlap / (float_t)maxOverlap; - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/Similarity.h clucene-core-2.3.3.4/src/CLucene/search/Similarity.h --- clucene-core-0.9.21b/src/CLucene/search/Similarity.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Similarity.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,268 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Similarity_ -#define _lucene_search_Similarity_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/Term.h" - -CL_NS_DEF(search) - -class Searcher;//save including the searchheader.h -class DefaultSimilarity; - -/** Expert: Scoring API. -*

Subclasses implement search scoring. -* -*

The score of query q for document d is defined -* in terms of these methods as follows: -* -* -* -* -* -* -* -* -* -* -* -*
score(q,d) =
-* Σ -* {@link #tf(int32_t) tf}(t in d) * -* {@link #idf(Term,Searcher) idf}(t) * -* {@link Field#getBoost getBoost}(t.field in d) * -* {@link #lengthNorm(TCHAR*,int32_t) lengthNorm}(t.field in d) -*  * -* {@link #coord(int32_t,int32_t) coord}(q,d) * -* {@link #queryNorm(float_t) queryNorm}(q) -*
-* t in q -*
-* -* @see #setDefault(Similarity) -* @see IndexWriter#setSimilarity(Similarity) -* @see Searcher#setSimilarity(Similarity) -*/ -class Similarity:LUCENE_BASE { -public: - virtual ~Similarity(); - - /** Set the default Similarity implementation used by indexing and search - * code. - * - * @see Searcher#setSimilarity(Similarity) - * @see IndexWriter#setSimilarity(Similarity) - */ - static void setDefault(Similarity* similarity); - - /** Return the default Similarity implementation used by indexing and search - * code. - * - *

This is initially an instance of {@link DefaultSimilarity}. - * - * @see Searcher#setSimilarity(Similarity) - * @see IndexWriter#setSimilarity(Similarity) - */ - static Similarity* getDefault(); - - /** Encodes a normalization factor for storage in an index. - * - *

The encoding uses a five-bit exponent and three-bit mantissa, thus - * representing values from around 7x10^9 to 2x10^-9 with about one - * significant decimal digit of accuracy. Zero is also represented. - * Negative numbers are rounded up to zero. Values too large to represent - * are rounded down to the largest representable value. Positive values too - * small to represent are rounded up to the smallest positive representable - * value. - * - * @see Field#setBoost(float_t) - */ - static uint8_t encodeNorm(float_t f); - - /** Decodes a normalization factor stored in an index. - * @see #encodeNorm(float_t) - */ - static float_t decodeNorm(uint8_t b); - - static uint8_t floatToByte(float_t f); - static float_t byteToFloat(uint8_t b); - - /** Computes a score factor for a phrase. - * - *

The default implementation sums the {@link #idf(Term,Searcher)} factor - * for each term in the phrase. - * - * @param terms the terms in the phrase - * @param searcher the document collection being searched - * @return a score factor for the phrase - */ - float_t idf(CL_NS(util)::CLVector* terms, Searcher* searcher); - //float_t idf(Term** terms, Searcher* searcher); - - - /** Computes a score factor for a simple term. - * - *

The default implementation is:

-   *   return idf(searcher.docFreq(term), searcher.maxDoc());
-   * 
- * - * Note that {@link Searcher#maxDoc()} is used instead of - * {@link IndexReader#numDocs()} because it is proportional to - * {@link Searcher#docFreq(Term)} , i.e., when one is inaccurate, - * so is the other, and in the same direction. - * - * @param term the term in question - * @param searcher the document collection being searched - * @return a score factor for the term - */ - float_t idf(CL_NS(index)::Term* term, Searcher* searcher); - - - /** Computes a score factor based on a term or phrase's frequency in a - * document. This value is multiplied by the {@link #idf(Term, Searcher)} - * factor for each term in the query and these products are then summed to - * form the initial score for a document. - * - *

Terms and phrases repeated in a document indicate the topic of the - * document, so implementations of this method usually return larger values - * when freq is large, and smaller values when freq - * is small. - * - *

The default implementation calls {@link #tf(float_t)}. - * - * @param freq the frequency of a term within a document - * @return a score factor based on a term's within-document frequency - */ - inline float_t tf(int32_t freq){ return tf((float_t)freq); } - - /** Computes the normalization value for a field given the total number of - * terms contained in a field. These values, together with field boosts, are - * stored in an index and multipled into scores for hits on each field by the - * search code. - * - *

Matches in longer fields are less precise, so implemenations of this - * method usually return smaller values when numTokens is large, - * and larger values when numTokens is small. - * - *

That these values are computed under {@link - * IndexWriter#addDocument(Document)} and stored then using - * {#encodeNorm(float_t)}. Thus they have limited precision, and documents - * must be re-indexed if this method is altered. - * - * @param fieldName the name of the field - * @param numTokens the total number of tokens contained in fields named - * fieldName of doc. - * @return a normalization factor for hits on this field of this document - * - * @see Field#setBoost(float_t) - */ - virtual float_t lengthNorm(const TCHAR* fieldName, int32_t numTokens) = 0; - - /** Computes the normalization value for a query given the sum of the squared - * weights of each of the query terms. This value is then multipled into the - * weight of each query term. - * - *

This does not affect ranking, but rather just attempts to make scores - * from different queries comparable. - * - * @param sumOfSquaredWeights the sum of the squares of query term weights - * @return a normalization factor for query weights - */ - virtual float_t queryNorm(float_t sumOfSquaredWeights) = 0; - - /** Computes the amount of a sloppy phrase match, based on an edit distance. - * This value is summed for each sloppy phrase match in a document to form - * the frequency that is passed to {@link #tf(float_t)}. - * - *

A phrase match with a small edit distance to a document passage more - * closely matches the document, so implementations of this method usually - * return larger values when the edit distance is small and smaller values - * when it is large. - * - * @see PhraseQuery#setSlop(int32_t) - * @param distance the edit distance of this sloppy phrase match - * @return the frequency increment for this match - */ - virtual float_t sloppyFreq(int32_t distance) = 0; - - /** Computes a score factor based on a term or phrase's frequency in a - * document. This value is multiplied by the {@link #idf(Term, Searcher)} - * factor for each term in the query and these products are then summed to - * form the initial score for a document. - * - *

Terms and phrases repeated in a document indicate the topic of the - * document, so implemenations of this method usually return larger values - * when freq is large, and smaller values when freq - * is small. - * - * @param freq the frequency of a term within a document - * @return a score factor based on a term's within-document frequency - */ - virtual float_t tf(float_t freq) = 0; - - /** Computes a score factor based on a term's document frequency (the number - * of documents which contain the term). This value is multiplied by the - * {@link #tf(int32_t)} factor for each term in the query and these products are - * then summed to form the initial score for a document. - * - *

Terms that occur in fewer documents are better indicators of topic, so - * implemenations of this method usually return larger values for rare terms, - * and smaller values for common terms. - * - * @param docFreq the number of documents which contain the term - * @param numDocs the total number of documents in the collection - * @return a score factor based on the term's document frequency - */ - virtual float_t idf(int32_t docFreq, int32_t numDocs) = 0; - - /** Computes a score factor based on the fraction of all query terms that a - * document contains. This value is multiplied into scores. - * - *

The presence of a large portion of the query terms indicates a better - * match with the query, so implemenations of this method usually return - * larger values when the ratio between these parameters is large and smaller - * values when the ratio between them is small. - * - * @param overlap the number of query terms matched in the document - * @param maxOverlap the total number of terms in the query - * @return a score factor based on term overlap with the query - */ - virtual float_t coord(int32_t overlap, int32_t maxOverlap) = 0; -}; - - -/** Expert: Default scoring implementation. */ -class DefaultSimilarity: public Similarity { -public: - DefaultSimilarity(); - ~DefaultSimilarity(); - - /** Implemented as 1/sqrt(numTerms). */ - float_t lengthNorm(const TCHAR* fieldName, int32_t numTerms); - - /** Implemented as 1/sqrt(sumOfSquaredWeights). */ - float_t queryNorm(float_t sumOfSquaredWeights); - - /** Implemented as sqrt(freq). */ - inline float_t tf(float_t freq); - - /** Implemented as 1 / (distance + 1). */ - float_t sloppyFreq(int32_t distance); - - /** Implemented as log(numDocs/(docFreq+1)) + 1. */ - float_t idf(int32_t docFreq, int32_t numDocs); - - /** Implemented as overlap / maxOverlap. */ - float_t coord(int32_t overlap, int32_t maxOverlap); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/SloppyPhraseScorer.cpp clucene-core-2.3.3.4/src/CLucene/search/SloppyPhraseScorer.cpp --- clucene-core-0.9.21b/src/CLucene/search/SloppyPhraseScorer.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/SloppyPhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "SloppyPhraseScorer.h" - -#include "PhraseScorer.h" -#include "CLucene/index/Terms.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - SloppyPhraseScorer::SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, - int32_t* positions, Similarity* similarity, - int32_t slop, uint8_t* norms): - PhraseScorer(weight,tps,positions,similarity,norms){ - //Func - Constructor - //Pre - tps != NULL - // tpsLength >= 0 - // n != NULL - //Post - Instance has been created - - CND_PRECONDITION(tps != NULL, "tps is NULL"); - //CND_PRECONDITION(n != NULL, _T("n is NULL")) = checked in PhraseScorer; - - this->slop = slop; - } - - float_t SloppyPhraseScorer::phraseFreq() { - //Func - Returns the freqency of the phrase - //Pre - first != NULL - // last != NULL - // pq != NULL - //Post - The frequency of the phrase has been returned - - CND_PRECONDITION(first != NULL,"first is NULL"); - CND_PRECONDITION(last != NULL,"last is NULL"); - CND_PRECONDITION(pq != NULL,"pq is NULL"); - - //Clear the PhraseQueue pq; - pq->clear(); - - int32_t end = 0; - - //declare iterator - PhrasePositions* pp = NULL; - - // build pq from list - - //Sort the list of PhrasePositions using pq - for (pp = first; pp != NULL; pp = pp->_next) { - //Read the first TermPosition of the current PhrasePositions pp - pp->firstPosition(); - //Check if the position of the pp is bigger than end - if (pp->position > end){ - end = pp->position; - } - //Store the current PhrasePositions pp into the PhraseQueue pp - pq->put(pp); - } - - float_t freq = 0.0f; - - bool done = false; - - do { - //Pop a PhrasePositions pp from the PhraseQueue pp - pp = pq->pop(); - //Get start position - int32_t start = pp->position; - //Get next position - int32_t next = pq->top()->position; - - for (int32_t pos = start; pos <= next; pos = pp->position) { - //advance pp to min window - start = pos; - - if (!pp->nextPosition()) { - //ran out of a term -- done - done = true; - break; - } - } - - //Calculate matchLength - int32_t matchLength = end - start; - //Check if matchLength is smaller than slop - if (matchLength <= slop){ - // penalize longer matches - freq += 1.0 / (matchLength + 1); - } - - if (pp->position > end){ - end = pp->position; - } - - //restore pq - pq->put(pp); - }while (!done); - - return freq; - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/SloppyPhraseScorer.h clucene-core-2.3.3.4/src/CLucene/search/SloppyPhraseScorer.h --- clucene-core-0.9.21b/src/CLucene/search/SloppyPhraseScorer.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/SloppyPhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_SloppyPhraseScorer_ -#define _lucene_search_SloppyPhraseScorer_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "PhraseScorer.h" -#include "CLucene/index/Terms.h" - - -CL_NS_DEF(search) - class SloppyPhraseScorer: public PhraseScorer { - private: - int32_t slop; - - public: - SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, - int32_t* positions, Similarity* similarity, - int32_t slop, uint8_t* norms); - ~SloppyPhraseScorer(){ - } - - protected: - float_t phraseFreq(); - }; -CL_NS_END -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/search/Sort.cpp clucene-core-2.3.3.4/src/CLucene/search/Sort.cpp --- clucene-core-0.9.21b/src/CLucene/search/Sort.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Sort.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,277 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Sort.h" -#include "Compare.h" - -CL_NS_USE(util) -CL_NS_DEF(search) - - - SortField* SortField::FIELD_SCORE = _CLNEW SortField (NULL, DOCSCORE,false); - SortField* SortField::FIELD_DOC = _CLNEW SortField (NULL, DOC,false); - Sort* Sort::RELEVANCE = _CLNEW Sort(); - Sort* Sort::INDEXORDER = _CLNEW Sort (SortField::FIELD_DOC); - - - - - SortField::SortField (const TCHAR* field) { - this->type = AUTO; - this->reverse = false; - this->field = CLStringIntern::intern(field CL_FILELINE); - this->factory = NULL; - } - - SortField::SortField (const TCHAR* field, int32_t type, bool reverse) { - this->field = (field != NULL) ? CLStringIntern::intern(field CL_FILELINE) : field; - this->type = type; - this->reverse = reverse; - this->factory = NULL; - } - - SortField::SortField(const SortField& clone){ - this->field = (clone.field != NULL) ? CLStringIntern::intern(clone.field CL_FILELINE) : clone.field; - this->type = clone.type; - this->reverse = clone.reverse; - this->factory = clone.factory; - } - SortField* SortField::clone() const{ - return _CLNEW SortField(*this); - } - - /** Creates a sort by terms in the given field sorted - * according to the given locale. - * @param field Name of field to sort by, cannot be null. - * @param locale Locale of values in the field. - */ - /*SortField::SortField (TCHAR* field, Locale* locale) { - this->field = (field != NULL) ? CLStringIntern::intern(field): field; - this->type = STRING; - this->locale = locale; - }*/ - - /** Creates a sort, possibly in reverse, by terms in the given field sorted - * according to the given locale. - * @param field Name of field to sort by, cannot be null. - * @param locale Locale of values in the field. - */ - /*SortField::SortField (TCHAR* field, Locale* locale, bool reverse) { - this->field = (field != NULL) ? CLStringIntern::intern(field): field; - this->type = STRING; - this->locale = locale; - this->reverse = reverse; - }*/ - - - SortField::SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse) { - this->field = (field != NULL) ? CLStringIntern::intern(field CL_FILELINE): field; - this->type = CUSTOM; - this->reverse = reverse; - this->factory = comparator; - } - - SortField::~SortField(){ - CLStringIntern::unintern(field); - } - - TCHAR* SortField::toString() const { - CL_NS(util)::StringBuffer buffer; - switch (type) { - case DOCSCORE: buffer.append(_T("")); - break; - - case DOC: buffer.append(_T("")); - break; - - case CUSTOM: buffer.append (_T("getName()); - buffer.append(_T(">")); - break; - - default: buffer.append( _T("\"")); - buffer.append( field ); - buffer.append( _T("\"") ); - break; - } - - //if (locale != null) buffer.append ("("+locale+")"); todo: - if (reverse) buffer.appendChar('!'); - - return buffer.toString(); - } - - - - - - - - - - - - - Sort::Sort() { - fields=NULL; - SortField** fields=_CL_NEWARRAY(SortField*,3); - fields[0]=SortField::FIELD_SCORE; - fields[1]=SortField::FIELD_DOC; - fields[2]=NULL; - setSort (fields); - _CLDELETE_ARRAY(fields); - } - - Sort::~Sort(){ - clear(); - } - void Sort::clear(){ - if ( fields != NULL ){ - int32_t i=0; - while ( fields[i] != NULL ){ - if ( fields[i] != SortField::FIELD_SCORE && - fields[i] != SortField::FIELD_DOC ){ - _CLDELETE(fields[i]); - } - i++; - } - _CLDELETE_ARRAY(fields); - } - } - - Sort::Sort (const TCHAR* field, bool reverse) { - this->fields=NULL; - setSort (field, reverse); - } - - Sort::Sort (const TCHAR** fields) { - this->fields=NULL; - setSort (fields); - } - Sort::Sort (SortField* field) { - this->fields=NULL; - setSort (field); - } - - Sort::Sort (SortField** fields) { - this->fields=NULL; - setSort (fields); - } - - void Sort::setSort (const TCHAR* field, bool reverse) { - clear(); - fields = _CL_NEWARRAY(SortField*,3); - fields[0] = _CLNEW SortField (field, SortField::AUTO, reverse); - fields[1] = SortField::FIELD_DOC; - fields[2] = NULL; - } - - void Sort::setSort (const TCHAR** fieldnames) { - clear(); - - int32_t n = 0; - while ( fieldnames[n] != NULL ) - n++; - - fields = _CL_NEWARRAY(SortField*,n+1); - for (int32_t i = 0; i < n; ++i) { - fields[i] = _CLNEW SortField (fieldnames[i], SortField::AUTO,false); - } - fields[n]=NULL; - } - - - void Sort::setSort (SortField* field) { - clear(); - - this->fields = _CL_NEWARRAY(SortField*,2); - this->fields[0] = field; - this->fields[1] = NULL; - } - - void Sort::setSort (SortField** fields) { - clear(); - - int n=0; - while ( fields[n] != NULL ) - n++; - this->fields = _CL_NEWARRAY(SortField*,n+1); - for (int i=0;ifields[i]=fields[i]; - } - - TCHAR* Sort::toString() const { - CL_NS(util)::StringBuffer buffer; - - int32_t i = 0; - while ( fields[i] != NULL ){ - if (i>0) - buffer.appendChar(','); - - const TCHAR* p = fields[i]->toString(); - buffer.append(p); - _CLDELETE_CARRAY(p); - - i++; - } - - return buffer.toString(); - } - - - - - - ScoreDocComparator* ScoreDocComparator::INDEXORDER = _CLNEW ScoreDocComparators::IndexOrder; - ScoreDocComparator* ScoreDocComparator::RELEVANCE = _CLNEW ScoreDocComparators::Relevance; - - ScoreDocComparator::~ScoreDocComparator(){ - } - - -class ScoreDocComparatorImpl: public ScoreDocComparator{ - Comparable** cachedValues; - FieldCacheAuto* fca; - int32_t cachedValuesLen; -public: - ScoreDocComparatorImpl(FieldCacheAuto* fca){ - this->fca = fca; - if ( fca->contentType != FieldCacheAuto::COMPARABLE_ARRAY ) - _CLTHROWA(CL_ERR_InvalidCast,"Invalid field cache auto type"); - this->cachedValues = fca->comparableArray; - this->cachedValuesLen = fca->contentLen; - } - ~ScoreDocComparatorImpl(){ - } - int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j){ - CND_PRECONDITION(i->doc >= 0 && i->doc < cachedValuesLen, "i->doc out of range") - CND_PRECONDITION(j->doc >= 0 && j->doc < cachedValuesLen, "j->doc out of range") - return cachedValues[i->doc]->compareTo (cachedValues[j->doc]); - } - - CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i){ - CND_PRECONDITION(i->doc >= 0 && i->doc < cachedValuesLen, "i->doc out of range") - return cachedValues[i->doc]; - } - - int32_t sortType(){ - return SortField::CUSTOM; - } -}; - -ScoreDocComparator* SortComparator::newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname){ - return _CLNEW ScoreDocComparatorImpl(FieldCache::DEFAULT->getCustom (reader, fieldname, this)); -} -SortComparator::SortComparator(){ -} -SortComparator::~SortComparator(){ -} - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/Sort.h clucene-core-2.3.3.4/src/CLucene/search/Sort.h --- clucene-core-0.9.21b/src/CLucene/search/Sort.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/Sort.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,402 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_Sort_ -#define _lucene_search_Sort_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "SearchHeader.h" - -CL_NS_DEF(search) - - class SortField; //predefine - class Sort; - -/** - * Expert: Compares two ScoreDoc objects for sorting. - * - */ - class ScoreDocComparator:LUCENE_BASE { - protected: - ScoreDocComparator(){} - public: - virtual ~ScoreDocComparator(); -// CL_NS(util)::Comparable** cachedValues; -// ScoreDocComparator(CL_NS(util)::Comparable** cachedValues); - - /** - * Compares two ScoreDoc objects and returns a result indicating their - * sort order. - * @param i First ScoreDoc - * @param j Second ScoreDoc - * @return -1 if i should come before j
1 if i should come after j
0 if they are equal - * @see java.util.Comparator - */ - virtual int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) = 0; - - /** - * Returns the value used to sort the given document. The - * object returned must implement the java.io.Serializable - * interface. This is used by multisearchers to determine how to collate results from their searchers. - * @see FieldDoc - * @param i Document - * @return Serializable object - */ - virtual CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) = 0; - - - /** - * Returns the type of sort. Should return SortField.SCORE, SortField.DOC, SortField.STRING, SortField.INTEGER, - * SortField::FLOAT or SortField.CUSTOM. It is not valid to return SortField.AUTO. - * This is used by multisearchers to determine how to collate results from their searchers. - * @return One of the constants in SortField. - * @see SortField - */ - virtual int32_t sortType() = 0; - - /** Special comparator for sorting hits according to computed relevance (document score). */ - static ScoreDocComparator* RELEVANCE; - - /** Special comparator for sorting hits according to index order (document number). */ - static ScoreDocComparator* INDEXORDER; - }; - -/** - * Expert: returns a comparator for sorting ScoreDocs. - * - */ -class SortComparatorSource:LUCENE_BASE { -public: - virtual ~SortComparatorSource(){ - } - - /** - * return a reference to a string describing the name of the comparator - * this is used in the explanation - */ - virtual TCHAR* getName() = 0; - - virtual size_t hashCode() = 0; - - /** - * Creates a comparator for the field in the given index. - * @param reader Index to create comparator for. - * @param fieldname Field to create comparator for. - * @return Comparator of ScoreDoc objects. - * @throws IOException If an error occurs reading the index. - */ - virtual ScoreDocComparator* newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname) = 0; -}; - - -/** - * Abstract base class for sorting hits returned by a Query. - * - *

This class should only be used if the other SortField - * types (SCORE, DOC, STRING, INT, FLOAT) do not provide an - * adequate sorting. It maintains an internal cache of values which - * could be quite large. The cache is an array of Comparable, - * one for each document in the index. There is a distinct - * Comparable for each unique term in the field - if - * some documents have the same term in the field, the cache - * array will have entries which reference the same Comparable. - * - */ -class SortComparator: public SortComparatorSource { -public: - virtual ScoreDocComparator* newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); - - SortComparator(); - virtual ~SortComparator(); - - /** - * Returns an object which, when sorted according to natural order, - * will order the Term values in the correct order. - *

For example, if the Terms contained integer values, this method - * would return new Integer(termtext). Note that this - * might not always be the most efficient implementation - for this - * particular example, a better implementation might be to make a - * ScoreDocLookupComparator that uses an internal lookup table of int. - * @param termtext The textual value of the term. - * @return An object representing termtext that sorts - * according to the natural order of termtext. - * @see Comparable - * @see ScoreDocComparator - */ - virtual CL_NS(util)::Comparable* getComparable (const TCHAR* termtext) = 0; - -}; - - -/** - * Stores information about how to sort documents by terms in an individual - * field. Fields must be indexed in order to sort by them. - * - */ -class SortField:LUCENE_BASE { -private: - const TCHAR* field; - int32_t type; // defaults to determining type dynamically - //Locale* locale; // defaults to "natural order" (no Locale) - bool reverse; // defaults to natural order - SortComparatorSource* factory; - -protected: - SortField (const SortField& clone); -public: - virtual ~SortField(); - - /** Sort by document score (relevancy). Sort values are Float and higher - * values are at the front. - * PORTING: this is the same as SCORE in java, it had to be renamed because - * SCORE is a system macro on some platforms (AIX). - */ - LUCENE_STATIC_CONSTANT(int32_t, DOCSCORE=0); - - /** Sort by document number (index order). Sort values are Integer and lower - * values are at the front. */ - LUCENE_STATIC_CONSTANT(int32_t, DOC=1); - - /** Guess type of sort based on field contents. A regular expression is used - * to look at the first term indexed for the field and determine if it - * represents an integer number, a floating point number, or just arbitrary - * string characters. */ - LUCENE_STATIC_CONSTANT(int32_t, AUTO=2); - - /** Sort using term values as Strings. Sort values are String and lower - * values are at the front. */ - LUCENE_STATIC_CONSTANT(int32_t, STRING=3); - - /** Sort using term values as encoded Integers. Sort values are Integer and - * lower values are at the front. */ - LUCENE_STATIC_CONSTANT(int32_t, INT=4); - - /** Sort using term values as encoded Floats. Sort values are Float and - * lower values are at the front. */ - LUCENE_STATIC_CONSTANT(int32_t, FLOAT=5); - - /** Sort using a custom Comparator. Sort values are any Comparable and - * sorting is done according to natural order. */ - LUCENE_STATIC_CONSTANT(int32_t, CUSTOM=9); - - // IMPLEMENTATION NOTE: the FieldCache.STRING_INDEX is in the same "namespace" - // as the above static int values. Any new values must not have the same value - // as FieldCache.STRING_INDEX. - - /** Represents sorting by document score (relevancy). */ - static SortField* FIELD_SCORE; - - /** Represents sorting by document number (index order). */ - static SortField* FIELD_DOC; - - /** Creates a sort by terms in the given field where the type of term value - * is determined dynamically ({@link #AUTO AUTO}). - * @param field Name of field to sort by, cannot be null. - */ - SortField (const TCHAR* field); - //SortField (const TCHAR* field, bool reverse); - //todo: we cannot make reverse use default field of =false. - //because bool and int are the same type in c, overloading is not possible - - /** Creates a sort, possibly in reverse, by terms in the given field with the - * type of term values explicitly given. - * @param field Name of field to sort by. Can be null if - * type is SCORE or DOC. - * @param type Type of values in the terms. - * @param reverse True if natural order should be reversed (default=false). - */ - SortField (const TCHAR* field, int32_t type, bool reverse); - - /* - SortField (TCHAR* field, Locale* locale) { - SortField (TCHAR* field, Locale* locale, bool reverse);*/ - - /** Creates a sort, possibly in reverse, with a custom comparison function. - * @param field Name of field to sort by; cannot be null. - * @param comparator Returns a comparator for sorting hits. - * @param reverse True if natural order should be reversed (default=false). - */ - SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse=false); - - /** Returns the name of the field. Could return null - * if the sort is by SCORE or DOC. - * @return Name of field, possibly null. - */ - const TCHAR* getField() const { return field; } - - SortField* clone() const; - - /** Returns the type of contents in the field. - * @return One of the constants SCORE, DOC, AUTO, STRING, INT or FLOAT. - */ - int32_t getType() const { return type; } - - /** Returns the Locale by which term values are interpreted. - * May return null if no Locale was specified. - * @return Locale, or null. - */ - /*Locale getLocale() { - return locale; - }*/ - - /** Returns whether the sort should be reversed. - * @return True if natural order should be reversed. - */ - bool getReverse() const { return reverse; } - - SortComparatorSource* getFactory() const { return factory; } - - TCHAR* toString() const; -}; - - - -/** - * Encapsulates sort criteria for returned hits. - * - *

The fields used to determine sort order must be carefully chosen. - * Documents must contain a single term in such a field, - * and the value of the term should indicate the document's relative position in - * a given sort order. The field must be indexed, but should not be tokenized, - * and does not need to be stored (unless you happen to want it back with the - * rest of your document data). In other words: - * - *

document.add (new Field ("byNumber", Integer.toString(x), false, true, false)); - *
- * - *

Valid Types of Values

- * - *

There are three possible kinds of term values which may be put into - * sorting fields: Integers, Floats, or Strings. Unless - * {@link SortField SortField} objects are specified, the type of value - * in the field is determined by parsing the first term in the field. - * - *

Integer term values should contain only digits and an optional - * preceeding negative sign. Values must be base 10 and in the range - * Integer.MIN_VALUE and Integer.MAX_VALUE inclusive. - * Documents which should appear first in the sort - * should have low value integers, later documents high values - * (i.e. the documents should be numbered 1..n where - * 1 is the first and n the last). - * - *

Float term values should conform to values accepted by - * {@link Float Float.valueOf(String)} (except that NaN - * and Infinity are not supported). - * Documents which should appear first in the sort - * should have low values, later documents high values. - * - *

String term values can contain any valid String, but should - * not be tokenized. The values are sorted according to their - * {@link Comparable natural order}. Note that using this type - * of term value has higher memory requirements than the other - * two types. - * - *

Object Reuse

- * - *

One of these objects can be - * used multiple times and the sort order changed between usages. - * - *

This class is thread safe. - * - *

Memory Usage

- * - *

Sorting uses of caches of term values maintained by the - * internal HitQueue(s). The cache is static and contains an integer - * or float array of length IndexReader.maxDoc() for each field - * name for which a sort is performed. In other words, the size of the - * cache in bytes is: - * - *

4 * IndexReader.maxDoc() * (# of different fields actually used to sort) - * - *

For String fields, the cache is larger: in addition to the - * above array, the value of every term in the field is kept in memory. - * If there are many unique terms in the field, this could - * be quite large. - * - *

Note that the size of the cache is not affected by how many - * fields are in the index and might be used to sort - only by - * the ones actually used to sort a result set. - * - *

The cache is cleared each time a new IndexReader is - * passed in, or if the value returned by maxDoc() - * changes for the current IndexReader. This class is not set up to - * be able to efficiently sort hits from more than one index - * simultaneously. - * - */ -class Sort:LUCENE_BASE { - // internal representation of the sort criteria - SortField** fields; - void clear(); -public: - ~Sort(); - - /** Represents sorting by computed relevance. Using this sort criteria - * returns the same results as calling {@link Searcher#search(Query) Searcher#search()} - * without a sort criteria, only with slightly more overhead. */ - static Sort* RELEVANCE; - - /** Represents sorting by index order. */ - static Sort* INDEXORDER; - - - /** Sorts by computed relevance. This is the same sort criteria as - * calling {@link Searcher#search(Query) Searcher#search()} without a sort criteria, only with - * slightly more overhead. */ - Sort(); - - /** Sorts possibly in reverse by the terms in field then by - * index order (document number). The type of value in field is determined - * automatically. - * @see SortField#AUTO - */ - Sort (const TCHAR* field, bool reverse=false); - - /** Sorts in succession by the terms in each field. - * The type of value in field is determined - * automatically. - * @see SortField#AUTO - */ - Sort (const TCHAR** fields); - - /** Sorts by the criteria in the given SortField. */ - Sort (SortField* field); - - /** Sorts in succession by the criteria in each SortField. */ - Sort (SortField** fields); - - /** Sets the sort to the terms in field possibly in reverse, - * then by index order (document number). */ - void setSort (const TCHAR* field, bool reverse=false); - - /** Sets the sort to the terms in each field in succession. */ - void setSort (const TCHAR** fieldnames); - - /** Sets the sort to the given criteria. */ - void setSort (SortField* field); - - /** Sets the sort to the given criteria in succession. */ - void setSort (SortField** fields); - - TCHAR* toString() const; - - /** - * Representation of the sort criteria. - * @return a pointer to the of SortField array used in this sort criteria - */ - SortField** getSort() const{ return fields; } -}; - - - - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/TermQuery.cpp clucene-core-2.3.3.4/src/CLucene/search/TermQuery.cpp --- clucene-core-0.9.21b/src/CLucene/search/TermQuery.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/TermQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermQuery.h" - -#include "SearchHeader.h" -#include "Scorer.h" -#include "CLucene/index/Term.h" -#include "TermScorer.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" -#include "CLucene/index/Terms.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - - /** Constructs a query for the term t. */ - TermQuery::TermQuery(Term* t): - term( _CL_POINTER(t) ) - { - } - TermQuery::TermQuery(const TermQuery& clone): - Query(clone){ - this->term=_CL_POINTER(clone.term); - } - TermQuery::~TermQuery(){ - _CLDECDELETE(term); - } - - Query* TermQuery::clone() const{ - return _CLNEW TermQuery(*this); - } - - const TCHAR* TermQuery::getClassName(){ - return _T("TermQuery"); - } - const TCHAR* TermQuery::getQueryName() const{ - return getClassName(); - } - size_t TermQuery::hashCode() const { - return Similarity::floatToByte(getBoost()) ^ term->hashCode(); - } - - - //added by search highlighter - Term* TermQuery::getTerm(bool pointer) const - { - if ( pointer ) - return _CL_POINTER(term); - else - return term; - } - - - /** Prints a user-readable version of this query. */ - TCHAR* TermQuery::toString(const TCHAR* field) const{ - CL_NS(util)::StringBuffer buffer; - if ( field==NULL || _tcscmp(term->field(),field)!= 0 ) { - buffer.append(term->field()); - buffer.append(_T(":")); - } - buffer.append(term->text()); - if (getBoost() != 1.0f) { - buffer.append(_T("^")); - buffer.appendFloat( getBoost(),1 ); - } - return buffer.toString(); - } - - /** Returns true iff o is equal to this. */ - bool TermQuery::equals(Query* other) const { - if (!(other->instanceOf(TermQuery::getClassName()))) - return false; - - TermQuery* tq = (TermQuery*)other; - return (this->getBoost() == tq->getBoost()) - && this->term->equals(tq->term); - } - - - TermQuery::TermWeight::TermWeight(Searcher* searcher, TermQuery* _this, Term* _term) { - this->_this = _this; - this->_term = _term; - this->searcher = searcher; - value=0; - idf=0; - queryNorm=0; - queryWeight=0; - } - TermQuery::TermWeight::~TermWeight(){ - } - - //return a *new* string describing this object - TCHAR* TermQuery::TermWeight::toString() { - int32_t size=_tcslen(_this->getQueryName()) + 10; - TCHAR* tmp = _CL_NEWARRAY(TCHAR, size);//_tcslen(weight()) - _sntprintf(tmp,size,_T("weight(%s)"),_this->getQueryName()); - return tmp; - } - - float_t TermQuery::TermWeight::sumOfSquaredWeights() { - idf = _this->getSimilarity(searcher)->idf(_term, searcher); // compute idf - queryWeight = idf * _this->getBoost(); // compute query weight - return queryWeight * queryWeight; // square it - } - - void TermQuery::TermWeight::normalize(float_t queryNorm) { - this->queryNorm = queryNorm; - queryWeight *= queryNorm; // normalize query weight - value = queryWeight * idf; // idf for document - } - - Scorer* TermQuery::TermWeight::scorer(IndexReader* reader) { - TermDocs* termDocs = reader->termDocs(_term); - - if (termDocs == NULL) - return NULL; - - return _CLNEW TermScorer(this, termDocs, _this->getSimilarity(searcher), - reader->norms(_term->field())); - } - - void TermQuery::TermWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){ - TCHAR buf[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; - TCHAR* tmp; - - tmp = getQuery()->toString(); - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("weight(%s in %d), product of:"),tmp,doc); - _CLDELETE_CARRAY(tmp); - result->setDescription(buf); - - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("idf(docFreq=%d)"), searcher->docFreq(_term) ); - Explanation* idfExpl = _CLNEW Explanation(idf, buf); - - // explain query weight - Explanation* queryExpl = _CLNEW Explanation(); - tmp = getQuery()->toString(); - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("queryWeight(%s), product of:"), tmp); - _CLDELETE_CARRAY(tmp); - queryExpl->setDescription(buf); - - Explanation* boostExpl = _CLNEW Explanation(_this->getBoost(), _T("boost")); - if (_this->getBoost() != 1.0f) - queryExpl->addDetail(boostExpl); - else - _CLDELETE(boostExpl); - - queryExpl->addDetail(idfExpl->clone()); - - Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); - queryExpl->addDetail(queryNormExpl); - - queryExpl->setValue(_this->getBoost()* // always 1.0 - idfExpl->getValue() * - queryNormExpl->getValue()); - - // explain field weight - const TCHAR* field = _term->field(); - Explanation* fieldExpl = _CLNEW Explanation(); - - tmp = _term->toString(); - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("fieldWeight(%s in %d), product of:"),tmp,doc); - _CLDELETE_CARRAY(tmp); - fieldExpl->setDescription(buf); - - Scorer* sc = scorer(reader); - Explanation* tfExpl = _CLNEW Explanation; - sc->explain(doc, tfExpl); - _CLDELETE(sc); - fieldExpl->addDetail(tfExpl); - fieldExpl->addDetail(idfExpl); - - Explanation* fieldNormExpl = _CLNEW Explanation(); - uint8_t* fieldNorms = reader->norms(field); - float_t fieldNorm = - fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; - fieldNormExpl->setValue(fieldNorm); - - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, - _T("fieldNorm(field=%s, doc=%d)"),field,doc); - fieldNormExpl->setDescription(buf); - fieldExpl->addDetail(fieldNormExpl); - - fieldExpl->setValue(tfExpl->getValue() * - idfExpl->getValue() * - fieldNormExpl->getValue()); - - /*if (queryExpl->getValue() == 1.0f){ - _CLDELETE(result); - return fieldExpl; - }else{*/ - result->addDetail(queryExpl); - result->addDetail(fieldExpl); - - // combine them - result->setValue(queryExpl->getValue() * fieldExpl->getValue()); - //} - } - - Weight* TermQuery::_createWeight(Searcher* searcher) { - return _CLNEW TermWeight(searcher,this,term); - } -CL_NS_END - diff -Nru clucene-core-0.9.21b/src/CLucene/search/TermQuery.h clucene-core-2.3.3.4/src/CLucene/search/TermQuery.h --- clucene-core-0.9.21b/src/CLucene/search/TermQuery.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/TermQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_TermQuery_ -#define _lucene_search_TermQuery_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "SearchHeader.h" -#include "Scorer.h" -#include "CLucene/index/Term.h" -#include "TermScorer.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/StringBuffer.h" -#include "CLucene/index/Terms.h" - -CL_NS_DEF(search) - - - /** A Query that matches documents containing a term. - This may be combined with other terms with a {@link BooleanQuery}. - */ - class TermQuery: public Query { - private: - CL_NS(index)::Term* term; - - - class TermWeight: public Weight { - private: - Searcher* searcher; - float_t value; - float_t idf; - float_t queryNorm; - float_t queryWeight; - TermQuery* _this; - CL_NS(index)::Term* _term; - - public: - TermWeight(Searcher* searcher, TermQuery* _this, CL_NS(index)::Term* _term); - ~TermWeight(); - TCHAR* toString(); - Query* getQuery() { return (Query*)_this; } - float_t getValue() { return value; } - - float_t sumOfSquaredWeights(); - void normalize(float_t queryNorm); - Scorer* scorer(CL_NS(index)::IndexReader* reader); - void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret); - }; - - protected: - Weight* _createWeight(Searcher* searcher); - TermQuery(const TermQuery& clone); - public: - // Constructs a query for the term t. - TermQuery(CL_NS(index)::Term* t); - ~TermQuery(); - - static const TCHAR* getClassName(); - const TCHAR* getQueryName() const; - - //added by search highlighter - CL_NS(index)::Term* getTerm(bool pointer=true) const; - - // Prints a user-readable version of this query. - TCHAR* toString(const TCHAR* field) const; - - bool equals(Query* other) const; - Query* clone() const; - - /** Returns a hash code value for this object.*/ - size_t hashCode() const; - }; -CL_NS_END -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/search/TermScorer.cpp clucene-core-2.3.3.4/src/CLucene/search/TermScorer.cpp --- clucene-core-0.9.21b/src/CLucene/search/TermScorer.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/TermScorer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TermScorer.h" - -#include "CLucene/index/Terms.h" -#include "TermQuery.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - //TermScorer takes TermDocs and delets it when TermScorer is cleaned up - TermScorer::TermScorer(Weight* w, CL_NS(index)::TermDocs* td, - Similarity* similarity,uint8_t* _norms): - Scorer(similarity), - termDocs(td), - norms(_norms), - weight(w), - weightValue(w->getValue()), - _doc(0), - pointer(0), - pointerMax(0) - { - memset(docs,0,32*sizeof(int32_t)); - memset(freqs,0,32*sizeof(int32_t)); - - for (int32_t i = 0; i < LUCENE_SCORE_CACHE_SIZE; i++) - scoreCache[i] = getSimilarity()->tf(i) * weightValue; - } - - TermScorer::~TermScorer(){ - _CLDELETE(termDocs); - } - bool TermScorer::next(){ - pointer++; - if (pointer >= pointerMax) { - pointerMax = termDocs->read(docs, freqs, 32); // refill buffer - if (pointerMax != 0) { - pointer = 0; - } else { - termDocs->close(); // close stream - _doc = LUCENE_INT32_MAX_SHOULDBE; // set to sentinel value - return false; - } - } - _doc = docs[pointer]; - return true; - } - - bool TermScorer::skipTo(int32_t target) { - // first scan in cache - for (pointer++; pointer < pointerMax; pointer++) { - if (docs[pointer] >= target) { - _doc = docs[pointer]; - return true; - } - } - - // not found in cache, seek underlying stream - bool result = termDocs->skipTo(target); - if (result) { - pointerMax = 1; - pointer = 0; - docs[pointer] = _doc = termDocs->doc(); - freqs[pointer] = termDocs->freq(); - } else { - _doc = LUCENE_INT32_MAX_SHOULDBE; - } - return result; - } - - void TermScorer::explain(int32_t doc, Explanation* tfExplanation) { - TermQuery* query = (TermQuery*)weight->getQuery(); - int32_t tf = 0; - while (pointer < pointerMax) { - if (docs[pointer] == doc) - tf = freqs[pointer]; - pointer++; - } - if (tf == 0) { - while (termDocs->next()) { - if (termDocs->doc() == doc) { - tf = termDocs->freq(); - } - } - } - termDocs->close(); - tfExplanation->setValue(getSimilarity()->tf(tf)); - - TCHAR buf[LUCENE_SEARCH_EXPLANATION_DESC_LEN+1]; - TCHAR* termToString = query->getTerm(false)->toString(); - _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,_T("tf(termFreq(%s)=%d)"), termToString, tf); - _CLDELETE_CARRAY(termToString); - tfExplanation->setDescription(buf); - } - - TCHAR* TermScorer::toString() { - TCHAR* wb = weight->toString(); - int32_t rl = _tcslen(wb) + 9; //9=_tcslen("scorer(" ")") + 1 - TCHAR* ret = _CL_NEWARRAY(TCHAR,rl); - _sntprintf(ret,rl,_T("scorer(%s)"), wb); - _CLDELETE_ARRAY(wb); - return ret; - } - - float_t TermScorer::score(){ - int32_t f = freqs[pointer]; - float_t raw = // compute tf(f)*weight - f < LUCENE_SCORE_CACHE_SIZE // check cache - ? scoreCache[f] // cache hit - : getSimilarity()->tf(f) * weightValue; // cache miss - - return raw * Similarity::decodeNorm(norms[_doc]); // normalize for field - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/TermScorer.h clucene-core-2.3.3.4/src/CLucene/search/TermScorer.h --- clucene-core-0.9.21b/src/CLucene/search/TermScorer.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/TermScorer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_TermScorer_ -#define _lucene_search_TermScorer_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Scorer.h" -#include "CLucene/index/Terms.h" -#include "CLucene/search/Similarity.h" -#include "SearchHeader.h" - -CL_NS_DEF(search) - - class TermScorer: public Scorer { - private: - CL_NS(index)::TermDocs* termDocs; - uint8_t* norms; - Weight* weight; - const float_t weightValue; - int32_t _doc; - - int32_t docs[32]; // buffered doc numbers - int32_t freqs[32]; // buffered term freqs - int32_t pointer; - int32_t pointerMax; - - float_t scoreCache[LUCENE_SCORE_CACHE_SIZE]; - public: - - //TermScorer takes TermDocs and delets it when TermScorer is cleaned up - TermScorer(Weight* weight, CL_NS(index)::TermDocs* td, - Similarity* similarity, uint8_t* _norms); - - ~TermScorer(); - - int32_t doc() const { return _doc; } - - bool next(); - bool skipTo(int32_t target); - void explain(int32_t doc, Explanation* ret); - TCHAR* toString(); - - float_t score(); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/WildcardQuery.cpp clucene-core-2.3.3.4/src/CLucene/search/WildcardQuery.cpp --- clucene-core-0.9.21b/src/CLucene/search/WildcardQuery.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/WildcardQuery.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "WildcardQuery.h" -#include "CLucene/util/BitSet.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_DEF(search) - - - WildcardQuery::WildcardQuery(Term* term): - MultiTermQuery( term ){ - //Func - Constructor - //Pre - term != NULL - //Post - Instance has been created - - } - - WildcardQuery::~WildcardQuery(){ - //Func - Destructor - //Pre - true - //Post - true - - } - - const TCHAR* WildcardQuery::getQueryName() const{ - //Func - Returns the string "WildcardQuery" - //Pre - true - //Post - The string "WildcardQuery" has been returned - return getClassName(); - } - - const TCHAR* WildcardQuery::getClassName(){ - return _T("WildcardQuery"); - } - - - FilteredTermEnum* WildcardQuery::getEnum(IndexReader* reader) { - return _CLNEW WildcardTermEnum(reader, getTerm(false)); - } - - WildcardQuery::WildcardQuery(const WildcardQuery& clone): - MultiTermQuery(clone) - { - } - - Query* WildcardQuery::clone() const{ - return _CLNEW WildcardQuery(*this); - } - size_t WildcardQuery::hashCode() const{ - //todo: we should give the query a seeding value... but - //need to do it for all hascode functions - return Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode(); - } - bool WildcardQuery::equals(Query* other) const{ - if (!(other->instanceOf(WildcardQuery::getClassName()))) - return false; - - WildcardQuery* tq = (WildcardQuery*)other; - return (this->getBoost() == tq->getBoost()) - && getTerm()->equals(tq->getTerm()); - } - - - - - - - - - - - - -WildcardFilter::WildcardFilter( Term* term ) -{ - this->term = _CL_POINTER(term); -} - -WildcardFilter::~WildcardFilter() -{ - _CLDECDELETE(term); -} - -WildcardFilter::WildcardFilter( const WildcardFilter& copy ) : - term( _CL_POINTER(copy.term) ) -{ -} - -Filter* WildcardFilter::clone() const { - return _CLNEW WildcardFilter(*this ); -} - - -TCHAR* WildcardFilter::toString() -{ - //Instantiate a stringbuffer buffer to store the readable version temporarily - CL_NS(util)::StringBuffer buffer; - //check if field equal to the field of prefix - if( term->field() != NULL ) { - //Append the field of prefix to the buffer - buffer.append(term->field()); - //Append a colon - buffer.append(_T(":") ); - } - //Append the text of the prefix - buffer.append(term->text()); - - //Convert StringBuffer buffer to TCHAR block and return it - return buffer.toString(); -} - - -/** Returns a BitSet with true for documents which should be permitted in -search results, and false for those that should not. */ -BitSet* WildcardFilter::bits( IndexReader* reader ) -{ - BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); - - WildcardTermEnum termEnum (reader, term); - if (termEnum.term(false) == NULL) - return bts; - - TermDocs* termDocs = reader->termDocs(); - try{ - do{ - termDocs->seek(&termEnum); - - while (termDocs->next()) { - bts->set(termDocs->doc()); - } - }while(termEnum.next()); - } _CLFINALLY( - termDocs->close(); - _CLDELETE(termDocs); - termEnum.close(); - ) - - return bts; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/WildcardQuery.h clucene-core-2.3.3.4/src/CLucene/search/WildcardQuery.h --- clucene-core-0.9.21b/src/CLucene/search/WildcardQuery.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/WildcardQuery.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_WildcardQuery_ -#define _lucene_search_WildcardQuery_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "MultiTermQuery.h" -#include "WildcardTermEnum.h" - -CL_NS_DEF(search) - - /** Implements the wildcard search query. Supported wildcards are *, which - * matches any character sequence (including the empty one), and ?, - * which matches any single character. Note this query can be slow, as it - * needs to iterate over all terms. In order to prevent extremely slow WildcardQueries, - * a Wildcard term must not start with one of the wildcards * or - * ?. - * - * @see WildcardTermEnum - */ - class WildcardQuery: public MultiTermQuery { - protected: - FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); - WildcardQuery(const WildcardQuery& clone); - public: - WildcardQuery(CL_NS(index)::Term* term); - ~WildcardQuery(); - - //Returns the string "WildcardQuery" - const TCHAR* getQueryName() const; - static const TCHAR* getClassName(); - - size_t hashCode() const; - bool equals(Query* other) const; - Query* clone() const; - }; - - - -class WildcardFilter: public Filter -{ -private: - CL_NS(index)::Term* term; -protected: - WildcardFilter( const WildcardFilter& copy ); - -public: - WildcardFilter(CL_NS(index)::Term* term); - ~WildcardFilter(); - - /** Returns a BitSet with true for documents which should be permitted in - search results, and false for those that should not. */ - CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); - - Filter* clone() const; - TCHAR* toString(); -}; - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/search/WildcardTermEnum.cpp clucene-core-2.3.3.4/src/CLucene/search/WildcardTermEnum.cpp --- clucene-core-0.9.21b/src/CLucene/search/WildcardTermEnum.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/WildcardTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "WildcardTermEnum.h" - -CL_NS_USE(index) -CL_NS_DEF(search) - - bool WildcardTermEnum::termCompare(Term* term) { - if ( term!=NULL && __term->field() == term->field() ) { - const TCHAR* searchText = term->text(); - const TCHAR* patternText = __term->text(); - if ( _tcsncmp( searchText, pre, preLen ) == 0 ){ - return wildcardEquals(patternText+preLen, __term->textLength()-preLen, 0, searchText, term->textLength(), preLen); - } - } - _endEnum = true; - return false; - } - - /** Creates new WildcardTermEnum */ - WildcardTermEnum::WildcardTermEnum(IndexReader* reader, Term* term): - FilteredTermEnum(), - __term(_CL_POINTER(term)), - fieldMatch(false), - _endEnum(false) - { - - pre = stringDuplicate(term->text()); - - const TCHAR* sidx = _tcschr( pre, LUCENE_WILDCARDTERMENUM_WILDCARD_STRING ); - const TCHAR* cidx = _tcschr( pre, LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR ); - const TCHAR* tidx = sidx; - if (tidx == NULL) - tidx = cidx; - else if ( cidx && cidx > pre) - tidx = min(sidx, cidx); - CND_PRECONDITION(tidx != NULL, "tidx==NULL"); - int32_t idx = (int32_t)(tidx - pre); - preLen = idx; - CND_PRECONDITION(preLentextLength(), "preLen >= term->textLength()"); - pre[preLen]=0; //trim end - - Term* t = _CLNEW Term(__term, pre); - setEnum( reader->terms(t) ); - _CLDECDELETE(t); - } - - void WildcardTermEnum::close() - { - if ( __term != NULL ){ - FilteredTermEnum::close(); - - _CLDECDELETE(__term); - __term = NULL; - - _CLDELETE_CARRAY( pre ); - } - } - WildcardTermEnum::~WildcardTermEnum() { - close(); - } - - float_t WildcardTermEnum::difference() { - return 1.0f; - } - - bool WildcardTermEnum::endEnum() { - return _endEnum; - } - - bool WildcardTermEnum::wildcardEquals(const TCHAR* pattern, int32_t patternLen, int32_t patternIdx, const TCHAR* str, int32_t strLen, int32_t stringIdx) - { - for (int32_t p = patternIdx; ; ++p) - { - for (int32_t s = stringIdx; ; ++p, ++s) - { - // End of str yet? - bool sEnd = (s >= strLen); - // End of pattern yet? - bool pEnd = (p >= patternLen); - - // If we're looking at the end of the str... - if (sEnd) - { - // Assume the only thing left on the pattern is/are wildcards - bool justWildcardsLeft = true; - - // Current wildcard position - int32_t wildcardSearchPos = p; - // While we haven't found the end of the pattern, - // and haven't encountered any non-wildcard characters - while (wildcardSearchPos < patternLen && justWildcardsLeft) - { - // Check the character at the current position - TCHAR wildchar = pattern[wildcardSearchPos]; - // If it's not a wildcard character, then there is more - // pattern information after this/these wildcards. - - if (wildchar != LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR && - wildchar != LUCENE_WILDCARDTERMENUM_WILDCARD_STRING){ - justWildcardsLeft = false; - }else{ - // to prevent "cat" matches "ca??" - if (wildchar == LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR) - return false; - - wildcardSearchPos++; // Look at the next character - } - } - - // This was a prefix wildcard search, and we've matched, so - // return true. - if (justWildcardsLeft) - return true; - } - - // If we've gone past the end of the str, or the pattern, - // return false. - if (sEnd || pEnd) - break; - - // Match a single character, so continue. - if (pattern[p] == LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR) - continue; - - if (pattern[p] == LUCENE_WILDCARDTERMENUM_WILDCARD_STRING) - { - // Look at the character beyond the '*'. - ++p; - // Examine the str, starting at the last character. - for (int32_t i = strLen; i >= s; --i) - { - if (wildcardEquals(pattern, patternLen, p, str, strLen, i)) - return true; - } - break; - } - if (pattern[p] != str[s]) - break; - } - return false; - } - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/search/WildcardTermEnum.h clucene-core-2.3.3.4/src/CLucene/search/WildcardTermEnum.h --- clucene-core-0.9.21b/src/CLucene/search/WildcardTermEnum.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/search/WildcardTermEnum.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_search_WildcardTermEnum_ -#define _lucene_search_WildcardTermEnum_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/Terms.h" -#include "FilteredTermEnum.h" - -CL_NS_DEF(search) - /** - * Subclass of FilteredTermEnum for enumerating all terms that match the - * specified wildcard filter term-> - *

- * Term enumerations are always ordered by term->compareTo(). Each term in - * the enumeration is greater than all that precede it. - */ - class WildcardTermEnum: public FilteredTermEnum { - private: - CL_NS(index)::Term* __term; - TCHAR* pre; - int32_t preLen; - bool fieldMatch; - bool _endEnum; - - /******************************************** - * const TCHAR* equality with support for wildcards - ********************************************/ - - protected: - bool termCompare(CL_NS(index)::Term* term) ; - - public: - - /** - * Creates a new WildcardTermEnum. Passing in a - * {@link Term Term} that does not contain a - * LUCENE_WILDCARDTERMENUM_WILDCARD_STRING or - * LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR will cause an exception to be thrown. - */ - WildcardTermEnum(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term); - ~WildcardTermEnum(); - - float_t difference() ; - - bool endEnum() ; - - /** - * Determines if a word matches a wildcard pattern. - */ - static bool wildcardEquals(const TCHAR* pattern, int32_t patternLen, int32_t patternIdx, const TCHAR* str, int32_t strLen, int32_t stringIdx); - - void close(); - - const char* getObjectName(){ return WildcardTermEnum::getClassName(); } - static const char* getClassName(){ return "WildcardTermEnum"; } - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/StdHeader.cpp clucene-core-2.3.3.4/src/CLucene/StdHeader.cpp --- clucene-core-0.9.21b/src/CLucene/StdHeader.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/StdHeader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/util/Misc.h" - -#include "CLucene/search/Sort.h" -#include "CLucene/search/Similarity.h" -#include "CLucene/search/FieldCache.h" -#include "CLucene/search/FieldSortedHitQueue.h" - -#if defined(_CLCOMPILER_MSVC) && defined(_DEBUG) - #define CRTDBG_MAP_ALLOC - #include - #include -#endif - -CL_NS_USE(util) - -TCHAR* _LUCENE_BLANK_STRING=_T(""); -char* _LUCENE_BLANK_ASTRING=""; - -#if defined(_LUCENE_THREADMUTEX_USINGDEFAULT) - #if defined(_LUCENE_PRAGMA_WARNINGS) - #pragma message ("==================Using clunky thread mutex!!!==================") - #else - #warning "==================Using clunky thread mutex!!!==================" - #endif -#endif - -#if defined(_ASCII) - #if defined(_LUCENE_PRAGMA_WARNINGS) - #pragma message ("==================Using ascii mode!!!==================") - #else - #warning "==================Using ascii mode!!!==================" - #endif -#endif - - -//This causes confusion, because CLucene doesn't really need hashed maps/sets. My experience with the -//hash maps on linux are that there are no significant improvements in using them (infact it adversely -//affected performance... therefore we'll just silently ignore -/*#if defined(LUCENE_DISABLE_HASHING) - #if defined(_LUCENE_PRAGMA_WARNINGS) - #pragma message ("==================Hashing not available or is disabled! CLucene may run slower than optimal ==================") - #else - #warning "==================Hashing not available or is disabled! CLucene may run slower than optimal ==================" - #endif -#endif*/ - -//clears all static memory. do not attempt to do anything else -//in clucene after calling this function -void _lucene_shutdown(){ - CL_NS(search)::FieldSortedHitQueue::Comparators.clear(); - _CLDELETE(CL_NS(search)::Sort::RELEVANCE); - _CLDELETE(CL_NS(search)::Sort::INDEXORDER); - _CLDELETE(CL_NS(search)::ScoreDocComparator::INDEXORDER); - _CLDELETE(CL_NS(search)::ScoreDocComparator::RELEVANCE); - _CLDELETE(CL_NS(search)::SortField::FIELD_SCORE); - _CLDELETE(CL_NS(search)::SortField::FIELD_DOC); - _CLDELETE(CL_NS(search)::FieldCache::DEFAULT); - - _CLLDELETE(CL_NS(search)::Similarity::getDefault()); - - CL_NS(util)::CLStringIntern::shutdown(); -} - -void CLDebugBreak(){ - //can be used for debug breaking... -#if defined(_CLCOMPILER_MSVC) && defined(_DEBUG) - _CrtDbgBreak(); -#else - int i=0; //a line to put breakpoint on -#endif -} - -//these are functions that lucene uses which -//are not replacement functions -char* lucenestrdup(const char* v CL_FILELINEPARAM){ - size_t len = strlen(v); - char* ret = new char[len+1]; - strncpy(ret,v,len+1); -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) - #if defined(LUCENE_ENABLE_FILELINEINFO) - CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,file,line,len); - #else - CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,__FILE__,__LINE__,len); - #endif -#endif - return ret; -} - -#ifdef _UCS2 -wchar_t* lucenewcsdup(const wchar_t* v CL_FILELINEPARAM){ - size_t len = _tcslen(v); - wchar_t* ret = new wchar_t[len+1]; - _tcsncpy(ret,v,len+1); -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) - #if defined(LUCENE_ENABLE_FILELINEINFO) - CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,file,line,len); - #else - CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,__FILE__,__LINE__,len); - #endif -#endif - return ret; -} -#endif //ucs2 - - -//ok, these are the exceptions, but these never -//exist on non-msvc platform, so lets put it here -#ifndef _CL_HAVE_FILELENGTH -int64_t lucene_filelength(int filehandle) -{ - struct fileStat info; - if (fileHandleStat(filehandle, &info) == -1) - _CLTHROWA( CL_ERR_IO,"fileStat error" ); - return info.st_size; -} -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/StdHeader.h clucene-core-2.3.3.4/src/CLucene/StdHeader.h --- clucene-core-0.9.21b/src/CLucene/StdHeader.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/StdHeader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,464 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef lucene_stdheader_h -#define lucene_stdheader_h - -#if defined(OVERRIDE_DEFAULT_CLCONFIG) - #include "AltCLConfig.h" -#else - #include "CLucene/CLConfig.h" -#endif - -//first inclusion of compiler.h (it will be called again later) -#include "CLucene/config/compiler.h" - -extern void _lucene_shutdown(); -extern int _lucene_counter_break; //can set a watch on this -#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) - extern bool _lucene_disable_debuglogging; //if LUCENE_ENABLE_CONSTRUCTOR_LOG is on, dont do log if this is true -#endif - -//////////////////////////////////////////////////////// -// default includes -//////////////////////////////////////////////////////// -#ifndef LUCENE_DISABLE_INCLUDES - -#include - -#if defined(_CL_STDC_HEADERS) - #include - #include -#else - #if defined(_CL_HAVE_STDLIB_H) - #include - #endif -#endif - -#if defined(_CL_HAVE_STRING_H) - #if !defined(_CL_STDC_HEADERS) && defined(_CL_HAVE_MEMORY_H) - #include - #endif - #include -#elif defined(_CL_HAVE_STRINGS_H) - //note: as a side note, strtok is not thread-safe.. so be careful where you use it! - #error "strtok replacement for BSD has not been implemented" - #include - #if !defined(_CL_HAVE_STRCHR) - #define strchr index - #define strrchr rindex - #endif -#endif - -#if defined(_CL_HAVE_UNISTD_H) - #include -#elif defined(_CL_HAVE_IO_H) && defined(_CL_HAVE_DIRECT_H) - #include - #include -#else - #error "Neither unistd.h or (io.h & direct.h) were available" -#endif - -#ifndef _CL_DISABLE_NATIVE_EXCEPTIONS - #ifdef _CL_HAVE_STDEXCEPT - #include - #else - #error "CLucene can't compile with exception handling on because header is not available" - #endif -#endif - -#if defined(_CL_STAT_MACROS_BROKEN) - #error "Haven't implemented STAT_MACROS_BROKEN fix yet" -#elif defined(_CL_HAVE_SYS_STAT_H) - #include -#else - #error "Haven't implemented platforms with no sys/stat.h" -#endif - -#if defined(_CL_HAVE_STDARG_H) - #include -#else - #error "CLucene can compile, but some extras may not work" -#endif - -#if defined(_CL_HAVE_MATH_H) - #include -#else - #error "CLucene can't compile without " -#endif - -#if defined(_CL_HAVE_MAP) - #include -#else - #error "CLucene can't compile without the map header" -#endif - -#if defined(_CL_HAVE_LIST) - #include -#else - #error "CLucene can't compile without the list header" -#endif - -#if defined(_CL_HAVE_SET) - #include -#else - #error "CLucene can't compile without the set header" -#endif - -#if defined(_CL_HAVE_VECTOR) - #include -#else - #error "CLucene can't compile without the vector header" -#endif - -#if !defined(LUCENE_DISABLE_HASHING) && defined(_CL_HAVE_HASH_MAP) && defined(_CL_HAVE_HASH_SET) - //hashing is all or nothing! - #include - #include -#elif !defined(LUCENE_DISABLE_HASHING) && defined(_CL_HAVE_EXT_HASH_MAP) && defined(_CL_HAVE_EXT_HASH_SET) - #include - #include -#elif !defined(LUCENE_DISABLE_HASHING) - #define LUCENE_DISABLE_HASHING -#endif -#if !defined(LUCENE_DISABLE_HASHING) && !defined(CL_NS_HASHING) - #define CL_NS_HASHING(func) std::func -#endif - -#if defined(_CL_HAVE_ALGORITHM) -# include -#else -# error "Can't compile clucene without " -#endif - -#if defined(_CL_HAVE_FUNCTIONAL) -# include -#else -# error "Can't compile clucene without " -#endif - -#if !defined(_CL_HAVE_PRINTF) - #error "CLucene can't compile without printf, replacements have not been implemented" -#endif - -#if !defined(_CL_HAVE_SNPRINTF) && !defined(_CL_HAVE__SNPRINTF) - #error "CLucene can't compile without snprintf, replacements have not been implemented" -#elif !defined(_CL_HAVE__SNPRINTF)&& defined(_CL_HAVE_SVNPRINTF) - #define _snprintf snprintf -#endif - -#if defined(_UCS2) - #if defined(_CL_HAVE_WCHAR_H) - #include - #else - //actually the repl_wchar.h replacements header will - //always be included. It replaces some functions - //that are missing in some wchar.h headers. - #endif -#endif - -#if defined(_UCS2) && defined(_CL_HAVE_WCTYPE_H) - #include -#elif defined(_ASCII) && defined(_CL_HAVE_CTYPE_H) - #include - #undef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS -#elif defined(_UCS2) - //must be in _UCS2 to use internal char functions - #undef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS - #define LUCENE_USE_INTERNAL_CHAR_FUNCTIONS -#else - #error "Cannot compile in _ASCII without ctype.h" -#endif - -//always include replacement, some missing tchar defines -#include "CLucene/config/repl_tchar.h" - -#if defined(_CL_HAVE_ERRNO_H) - #include -#else - #error "Haven't implemented platforms with no errno.h" -#endif - -#if defined(_CL_HAVE_FCNTL_H) - #include -#else - #error "Haven't implemented platforms with no fcntl.h" -#endif - -#if defined(_CL_HAVE_WINDOWS_H) - #include -#endif - -#endif //LUCENE_DISABLE_INCLUDES -// -//////////////////////////////////////////////////////// - -//second inclusion of compiler.h -//this gives CompilerXXX.h a chance to include other headers -#include "CLucene/config/compiler.h" -// -//////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////// -// Character functions. -// Here we decide whose character functions to use -//////////////////////////////////////////////////////// -#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) - #define stringCaseFold cl_tcscasefold - #define stringCaseFoldCmp cl_tcscasefoldcmp - - #undef _istspace - #undef _istdigit - #undef _istalnum - #undef _istalpha - #undef _totlower - #undef _totupper - #define _istalnum cl_isalnum - #define _istalpha cl_isletter - #define _istspace cl_isspace - #define _istdigit cl_isdigit - #define _totlower cl_tolower - #define _totupper cl_toupper - - //here are some functions to help deal with utf8/ucs2 conversions - //lets let the user decide what mb functions to use... we provide pure utf8 ones no matter what. - /*#undef _mbtowc - #undef _mbstowcs - #undef _wctomb - #undef _wcstombs - #define _mbtowc lucene_mbstowc - #define _mbsstowcs lucene_mbstowcs - #define _wctomb lucene_wcto_mb - #define _wcstombs lucene_wcstombs*/ -#else - //we are using native functions - //here are some functions to help deal with utf8/ucs2 conversions - /*#define _mbtowc mbtowc - #define _wctomb wctomb - #define _mbstowcs mbstowcs - #define _wcstombs wcstombs*/ - - //we are using native character functions - #if defined(_ASCII) - #undef _istspace - #undef _istdigit - #undef _istalnum - #undef _istalpha - #undef _totlower - #undef _totupper - #define _istspace(x) isspace((unsigned char)x) - #define _istdigit(x) isdigit((unsigned char)x) - #define _istalnum(x) isalnum((unsigned char)x) - #define _istalpha(x) isalpha((unsigned char)x) - #define _totlower(x) tolower((unsigned char)x) - #define _totupper(x) toupper((unsigned char)x) - #endif -#endif - -//the methods contained in gunichartables.h -typedef unsigned long clunichar; -bool cl_isletter(clunichar c); -bool cl_isalnum(clunichar c); -bool cl_isdigit(clunichar c); -bool cl_isspace (clunichar c); -TCHAR cl_tolower (TCHAR c); -TCHAR cl_toupper (TCHAR c); - -int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src); -TCHAR* cl_tcscasefold( TCHAR * str, int len=-1 ); - -//we provide utf8 conversion functions -size_t lucene_utf8towc (wchar_t *ret, const char *s, size_t n); -size_t lucene_utf8towcs(wchar_t *, const char *, size_t maxslen); -size_t lucene_wctoutf8 (char * ret, const wchar_t str); -size_t lucene_wcstoutf8 (char *, const wchar_t *, size_t maxslen); -size_t lucene_utf8charlen(const char *p); - -///a blank string... -extern TCHAR* _LUCENE_BLANK_STRING; -#define LUCENE_BLANK_STRING _LUCENE_BLANK_STRING -extern char* _LUCENE_BLANK_ASTRING; -#define LUCENE_BLANK_ASTRING _LUCENE_BLANK_ASTRING - -/* Converts a string into a form that is independent of case. The - * result will not correspond to any particular case, but can be - * compared for equality or ordered with the results of calling - * stringCaseFold() on other strings. - * - * If we did not define this elsewhere, then just convert to lower case - */ -#ifndef stringCaseFold - #define stringCaseFold _tcslwr -#endif -/* Compares 2 strings using case folding (if available) - * If we did not define this elsewhere, then just compare - * using normal method - */ -#ifndef stringCaseFoldCmp - #define stringCaseFoldCmp _tcsicmp -#endif - -//now that all the character routines are completed, include the -//wchar.h replacements. -#include "CLucene/config/repl_wchar.h" //always include replacements - -//a replacement for _tcsdup. This uses new TCHAR[] instead of malloc, so that we can use delete[] to free -#if defined(LUCENE_ENABLE_FILELINEINFO) - #define CL_FILELINE ,__FILE__,__LINE__ - #define CL_FILELINEREF ,file,line /// StringArray; -typedef CL_NS(util)::CLVector StringArrayWithDeletor; -typedef CL_NS(util)::CLVector StringArrayConst; -typedef CL_NS(util)::CLVector StringArrayConstWithDeletor; - -typedef CL_NS(util)::CLVector AStringArray; -typedef CL_NS(util)::CLVector AStringArrayWithDeletor; -typedef CL_NS(util)::CLVector AStringArrayConst; -typedef CL_NS(util)::CLVector AStringArrayConstWithDeletor; -CL_NS_END - -// -//////////////////////////////////////////////////////// - -#endif // STDHEADER_H diff -Nru clucene-core-0.9.21b/src/CLucene/store/Directory.h clucene-core-2.3.3.4/src/CLucene/store/Directory.h --- clucene-core-0.9.21b/src/CLucene/store/Directory.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/Directory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_Directory -#define _lucene_store_Directory - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/store/Lock.h" -#include "CLucene/util/VoidList.h" -#include "CLucene/util/Misc.h" - -#include "IndexInput.h" -#include "IndexOutput.h" - -CL_NS_DEF(store) - - /** A Directory is a flat list of files. Files may be written once, when they - * are created. Once a file is created it may only be opened for read, or - * deleted. Random access is permitted both when reading and writing. - * - *

Direct i/o is not used directly, but rather all i/o is - * through this API. This permits things such as:

    - *
  • implementation of RAM-based indices; - *
  • implementation indices stored in a database, via a database; - *
  • implementation of an index as a single file; - *
- * - */ - class Directory: LUCENE_REFBASE { - protected: - Directory(){ - } - // Removes an existing file in the directory. - virtual bool doDeleteFile(const char* name) = 0; - public: - DEFINE_MUTEX(THIS_LOCK) - - virtual ~Directory(){ }; - - // Returns an null terminated array of strings, one for each file in the directory. - char** list() const{ - vector names; - - list(&names); - - size_t size = names.size(); - char** ret = _CL_NEWARRAY(char*,size+1); - for ( size_t i=0;i* names) const = 0; - - // Returns true iff a file with the given name exists. - virtual bool fileExists(const char* name) const = 0; - - // Returns the time the named file was last modified. - virtual int64_t fileModified(const char* name) const = 0; - - // Returns the length of a file in the directory. - virtual int64_t fileLength(const char* name) const = 0; - - // Returns a stream reading an existing file. - virtual IndexInput* openInput(const char* name) = 0; - virtual IndexInput* openInput(const char* name, int32_t bufferSize){ - return openInput(name); //implementation didnt overload the bufferSize - } - - /// Set the modified time of an existing file to now. */ - virtual void touchFile(const char* name) = 0; - - // Removes an existing file in the directory. - virtual bool deleteFile(const char* name, const bool throwError=true){ - bool ret = doDeleteFile(name); - if ( !ret && throwError ){ - char buffer[200]; - _snprintf(buffer,200,"couldn't delete %s",name); - _CLTHROWA(CL_ERR_IO, buffer ); - } - return ret; - } - - // Renames an existing file in the directory. - // If a file already exists with the new name, then it is replaced. - // This replacement should be atomic. - virtual void renameFile(const char* from, const char* to) = 0; - - // Creates a new, empty file in the directory with the given name. - // Returns a stream writing this file. - virtual IndexOutput* createOutput(const char* name) = 0; - - // Construct a {@link Lock}. - // @param name the name of the lock file - virtual LuceneLock* makeLock(const char* name) = 0; - - // Closes the store. - virtual void close() = 0; - - virtual TCHAR* toString() const = 0; - - virtual const char* getDirectoryType() const = 0; - }; -CL_NS_END -#endif - - diff -Nru clucene-core-0.9.21b/src/CLucene/store/FSDirectory.cpp clucene-core-2.3.3.4/src/CLucene/store/FSDirectory.cpp --- clucene-core-0.9.21b/src/CLucene/store/FSDirectory.cpp 2008-10-23 18:01:52.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/FSDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,698 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FSDirectory.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/Misc.h" -#include "CLucene/util/MD5Digester.h" -#include "CLucene/debug/condition.h" - -#include "CLucene/util/dirent.h" //if we have dirent, then the native one will be used - -CL_NS_DEF(store) -CL_NS_USE(util) - - /** This cache of directories ensures that there is a unique Directory - * instance per path, so that synchronization on the Directory can be used to - * synchronize access between readers and writers. - */ - static CL_NS(util)::CLHashMap DIRECTORIES(false,false); - - bool FSDirectory::disableLocks=false; - - FSDirectory::FSIndexInput::FSIndexInput(const char* path, int32_t __bufferSize): - BufferedIndexInput(__bufferSize) - { - //Func - Constructor. - // Opens the file named path - //Pre - path != NULL - //Post - if the file could not be opened an exception is thrown. - - CND_PRECONDITION(path != NULL, "path is NULL"); - - handle = _CLNEW SharedHandle(); - strcpy(handle->path,path); - - //Open the file - handle->fhandle = _open(path, O_BINARY | O_RDONLY | O_RANDOM, _S_IREAD ); - - //Check if a valid handle was retrieved - if (handle->fhandle < 0){ - int err = errno; - if ( err == ENOENT ) - _CLTHROWA(CL_ERR_IO, "File does not exist"); - else if ( err == EACCES ) - _CLTHROWA(CL_ERR_IO, "File Access denied"); - else if ( err == EMFILE ) - _CLTHROWA(CL_ERR_IO, "Too many open files"); - } - - //Store the file length - handle->_length = fileSize(handle->fhandle); - handle->_fpos = 0; - this->_pos = 0; - } - - FSDirectory::FSIndexInput::FSIndexInput(const FSIndexInput& other): BufferedIndexInput(other){ - //Func - Constructor - // Uses clone for its initialization - //Pre - clone is a valide instance of FSIndexInput - //Post - The instance has been created and initialized by clone - if ( other.handle == NULL ) - _CLTHROWA(CL_ERR_NullPointer, "other handle is null"); - - SCOPED_LOCK_MUTEX(*other.handle->THIS_LOCK) - handle = _CL_POINTER(other.handle); - _pos = other.handle->_fpos; //note where we are currently... - } - - FSDirectory::FSIndexInput::SharedHandle::SharedHandle(){ - fhandle = 0; - _length = 0; - _fpos = 0; - path[0]=0; - -#ifdef _LUCENE_THREADMUTEX - THIS_LOCK = new _LUCENE_THREADMUTEX; -#endif - } - FSDirectory::FSIndexInput::SharedHandle::~SharedHandle() throw(CLuceneError&){ - if ( fhandle >= 0 ){ - if ( _close(fhandle) != 0 ) - _CLTHROWA(CL_ERR_IO, "File IO Close error"); - else - fhandle = -1; - } - } - - FSDirectory::FSIndexInput::~FSIndexInput(){ - //Func - Destructor - //Pre - True - //Post - The file for which this instance is responsible has been closed. - // The instance has been destroyed - - FSIndexInput::close(); - } - - IndexInput* FSDirectory::FSIndexInput::clone() const - { - return _CLNEW FSDirectory::FSIndexInput(*this); - } - void FSDirectory::FSIndexInput::close() { - BufferedIndexInput::close(); -#ifdef _LUCENE_THREADMUTEX - if ( handle != NULL ){ - //here we have a bit of a problem... we need to lock the handle to ensure that we can - //safely delete the handle... but if we delete the handle, then the scoped unlock, - //won't be able to unlock the mutex... - - //take a reference of the lock object... - _LUCENE_THREADMUTEX* mutex = handle->THIS_LOCK; - //lock the mutex - mutex->lock(); - - //determine if we are about to delete the handle... - bool dounlock = ( handle->__cl_refcount > 1 ); - //decdelete (deletes if refcount is down to 0 - _CLDECDELETE(handle); - - if ( dounlock ){ - mutex->unlock(); - }else{ - delete mutex; - } - } -#else - _CLDECDELETE(handle); -#endif - } - - void FSDirectory::FSIndexInput::seekInternal(const int64_t position) { - CND_PRECONDITION(position>=0 &&position_length,"Seeking out of range") - _pos = position; - } - -/** IndexInput methods */ -void FSDirectory::FSIndexInput::readInternal(uint8_t* b, const int32_t len) { - SCOPED_LOCK_MUTEX(*handle->THIS_LOCK) - CND_PRECONDITION(handle!=NULL,"shared file handle has closed"); - CND_PRECONDITION(handle->fhandle>=0,"file is not open"); - - if ( handle->_fpos != _pos ){ - if ( fileSeek(handle->fhandle,_pos,SEEK_SET) != _pos ){ - _CLTHROWA( CL_ERR_IO, "File IO Seek error"); - } - handle->_fpos = _pos; - } - - bufferLength = _read(handle->fhandle,b,len); // 2004.10.31:SF 1037836 - if (bufferLength == 0){ - _CLTHROWA(CL_ERR_IO, "read past EOF"); - } - if (bufferLength == -1){ - //if (EINTR == errno) we could do something else... but we have - //to guarantee some return, or throw EOF - - _CLTHROWA(CL_ERR_IO, "read error"); - } - _pos+=bufferLength; - handle->_fpos=_pos; -} - - FSDirectory::FSIndexOutput::FSIndexOutput(const char* path){ - //O_BINARY - Opens file in binary (untranslated) mode - //O_CREAT - Creates and opens new file for writing. Has no effect if file specified by filename exists - //O_RANDOM - Specifies that caching is optimized for, but not restricted to, random access from disk. - //O_WRONLY - Opens file for writing only; - if ( Misc::dir_Exists(path) ) - fhandle = _open( path, O_BINARY | O_RDWR | O_RANDOM | O_TRUNC, _S_IREAD | _S_IWRITE); - else // added by JBP - fhandle = _open( path, O_BINARY | O_RDWR | O_RANDOM | O_CREAT, _S_IREAD | _S_IWRITE); - - if ( fhandle < 0 ){ - int err = errno; - if ( err == ENOENT ) - _CLTHROWA(CL_ERR_IO, "File does not exist"); - else if ( err == EACCES ) - _CLTHROWA(CL_ERR_IO, "File Access denied"); - else if ( err == EMFILE ) - _CLTHROWA(CL_ERR_IO, "Too many open files"); - } - } - FSDirectory::FSIndexOutput::~FSIndexOutput(){ - if ( fhandle >= 0 ){ - try { - FSIndexOutput::close(); - }catch(CLuceneError& err){ - //ignore IO errors... - if ( err.number() != CL_ERR_IO ) - throw; - } - } - } - - /** output methods: */ - void FSDirectory::FSIndexOutput::flushBuffer(const uint8_t* b, const int32_t size) { - CND_PRECONDITION(fhandle>=0,"file is not open"); - if ( size > 0 && _write(fhandle,b,size) != size ) - _CLTHROWA(CL_ERR_IO, "File IO Write error"); - } - void FSDirectory::FSIndexOutput::close() { - try{ - BufferedIndexOutput::close(); - }catch(CLuceneError& err){ - //ignore IO errors... - if ( err.number() != CL_ERR_IO ) - throw; - } - - if ( _close(fhandle) != 0 ) - _CLTHROWA(CL_ERR_IO, "File IO Close error"); - else - fhandle = -1; //-1 now indicates closed - } - - void FSDirectory::FSIndexOutput::seek(const int64_t pos) { - CND_PRECONDITION(fhandle>=0,"file is not open"); - BufferedIndexOutput::seek(pos); - int64_t ret = fileSeek(fhandle,pos,SEEK_SET); - if ( ret != pos ){ - _CLTHROWA(CL_ERR_IO, "File IO Seek error"); - } - } - int64_t FSDirectory::FSIndexOutput::length(){ - CND_PRECONDITION(fhandle>=0,"file is not open"); - return fileSize(fhandle); - } - - - const char* FSDirectory::LOCK_DIR=NULL; - const char* FSDirectory::getLockDir(){ - #ifdef LUCENE_LOCK_DIR - LOCK_DIR = LUCENE_LOCK_DIR; - #else - #ifdef LUCENE_LOCK_DIR_ENV_1 - if ( LOCK_DIR == NULL ) - LOCK_DIR = getenv(LUCENE_LOCK_DIR_ENV_1); - #endif - #ifdef LUCENE_LOCK_DIR_ENV_2 - if ( LOCK_DIR == NULL ) - LOCK_DIR = getenv(LUCENE_LOCK_DIR_ENV_2); - #endif - #ifdef LUCENE_LOCK_DIR_ENV_FALLBACK - if ( LOCK_DIR == NULL ) - LOCK_DIR=LUCENE_LOCK_DIR_ENV_FALLBACK; - #endif - if ( LOCK_DIR == NULL ) - _CLTHROWA(CL_ERR_IO, "Couldn't get determine lock dir"); - #endif - - return LOCK_DIR; - } - - FSDirectory::FSDirectory(const char* path, const bool createDir): - Directory(), - refCount(0), - useMMap(false) - { - _realpath(path,directory);//set a realpath so that if we change directory, we can still function - if ( !directory || !*directory ){ - strcpy(directory,path); - } - - const char* tmplockdir = getLockDir(); - if ( tmplockdir == NULL ) { - strcpy(lockDir,directory); - } else { - strcpy(lockDir,tmplockdir); - } - - // Ensure that lockDir exists and is a directory. - struct fileStat fstat; - if ( fileStat(tmplockdir,&fstat) != 0 ) { - //todo: should construct directory using _mkdirs... have to write replacement - if ( _mkdir(directory) == -1 ){ - _CLTHROWA(CL_ERR_IO,"Cannot create temp directory"); //todo: make richer error - } - } - if ( !(fstat.st_mode & S_IFDIR) ){ - _CLTHROWA(CL_ERR_IO, "Found regular file where directory expected"); //todo: make richer error: " + lockDir); - } - - - if (createDir) { - create(); - } - - if (!Misc::dir_Exists(directory)){ - char* err = _CL_NEWARRAY(char,19+strlen(path)+1); //19: len of " is not a directory" - strcpy(err,path); - strcat(err," is not a directory"); - _CLTHROWA_DEL(CL_ERR_IO, err ); - } - } - - - void FSDirectory::create(){ - SCOPED_LOCK_MUTEX(THIS_LOCK) - struct fileStat fstat; - if ( fileStat(directory,&fstat) != 0 ) { - //todo: should construct directory using _mkdirs... have to write replacement - if ( _mkdir(directory) == -1 ){ - char* err = _CL_NEWARRAY(char,27+strlen(directory)+1); //27: len of "Couldn't create directory: " - strcpy(err,"Couldn't create directory: "); - strcat(err,directory); - _CLTHROWA_DEL(CL_ERR_IO, err ); - } - } - - if ( fileStat(directory,&fstat) != 0 || !(fstat.st_mode & S_IFDIR) ){ - char tmp[1024]; - _snprintf(tmp,1024,"%s not a directory", directory); - _CLTHROWA(CL_ERR_IO,tmp); - } - - //clear old files - DIR* dir = opendir(directory); - struct dirent* fl = readdir(dir); - struct fileStat buf; - - char path[CL_MAX_DIR]; - while ( fl != NULL ){ - if ( CL_NS(index)::IndexReader::isLuceneFile(fl->d_name) ){ - _snprintf(path,CL_MAX_DIR,"%s/%s",directory,fl->d_name); - int32_t ret = fileStat(path,&buf); - if ( ret==0 && !(buf.st_mode & S_IFDIR) ) { - if ( (strcmp(fl->d_name, ".")) && (strcmp(fl->d_name, "..")) ) { - if ( _unlink( path ) == -1 ) { - closedir(dir); - _CLTHROWA(CL_ERR_IO, "Couldn't delete file "); //todo: make richer error - } - } - } - } - fl = readdir(dir); - } - closedir(dir); - - char* lockPrefix = getLockPrefix(); // clear old locks - size_t lockPrefixLen = strlen(lockPrefix); - - dir = opendir(lockDir); - if ( dir == NULL ) - _CLTHROWA(CL_ERR_IO, "Cannot read lock directory"); //todo: richer error: + lockDir.getAbsolutePath()); - fl = readdir(dir); - while ( fl != NULL ){ - if (strncmp(fl->d_name,lockPrefix,lockPrefixLen)==0){ - _snprintf(path,CL_MAX_DIR,"%s/%s",lockDir,fl->d_name); - if ( _unlink( path ) == -1 ) { - closedir(dir); - _CLDELETE_CaARRAY(lockPrefix); - _CLTHROWA(CL_ERR_IO, "Couldn't delete file "); //todo: make richer error - } - } - fl = readdir(dir); - } - closedir(dir); - _CLDELETE_CaARRAY(lockPrefix); - } - - void FSDirectory::priv_getFN(char* buffer, const char* name) const{ - buffer[0] = 0; - strcpy(buffer,directory); - strcat(buffer, PATH_DELIMITERA ); - strcat(buffer,name); - } - - FSDirectory::~FSDirectory(){ - } - - void FSDirectory::list(vector* names) const{ //todo: fix this, ugly!!! - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - DIR* dir = opendir(directory); - - struct dirent* fl = readdir(dir); - struct fileStat buf; - - char path[CL_MAX_DIR]; - strncpy(path,directory,CL_MAX_DIR); - strcat(path,PATH_DELIMITERA); - char* pathP = path + strlen(path); - - while ( fl != NULL ){ - strcpy(pathP,fl->d_name); - fileStat(path,&buf); - if ( !(buf.st_mode & S_IFDIR) ) { - names->push_back( fl->d_name ); - } - fl = readdir(dir); - } - closedir(dir); - } - - bool FSDirectory::fileExists(const char* name) const { - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - char fl[CL_MAX_DIR]; - priv_getFN(fl, name); - return Misc::dir_Exists( fl ); - } - - const char* FSDirectory::getDirName() const{ - return directory; - } - - //static - FSDirectory* FSDirectory::getDirectory(const char* file, const bool _create){ - FSDirectory* dir = NULL; - { - if ( !file || !*file ) - _CLTHROWA(CL_ERR_IO,"Invalid directory"); - - SCOPED_LOCK_MUTEX(DIRECTORIES.THIS_LOCK) - dir = DIRECTORIES.get(file); - if ( dir == NULL ){ - dir = _CLNEW FSDirectory(file,_create); - DIRECTORIES.put( dir->directory, dir); - }else if ( _create ){ - dir->create(); - } - - { - SCOPED_LOCK_MUTEX(dir->THIS_LOCK) - dir->refCount++; - } - } - - - return _CL_POINTER(dir); - } - - int64_t FSDirectory::fileModified(const char* name) const { - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - struct fileStat buf; - char buffer[CL_MAX_DIR]; - priv_getFN(buffer,name); - if (fileStat( buffer, &buf ) == -1 ) - return 0; - else - return buf.st_mtime; - } - - //static - int64_t FSDirectory::fileModified(const char* dir, const char* name){ - struct fileStat buf; - char buffer[CL_MAX_DIR]; - _snprintf(buffer,CL_MAX_DIR,"%s%s%s",dir,PATH_DELIMITERA,name); - fileStat( buffer, &buf ); - return buf.st_mtime; - } - - void FSDirectory::touchFile(const char* name){ - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - char buffer[CL_MAX_DIR]; - _snprintf(buffer,CL_MAX_DIR,"%s%s%s",directory,PATH_DELIMITERA,name); - - int32_t r = _open(buffer, O_RDWR, _S_IWRITE); - if ( r < 0 ) - _CLTHROWA(CL_ERR_IO,"IO Error while touching file"); - _close(r); - } - - int64_t FSDirectory::fileLength(const char* name) const { - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - struct fileStat buf; - char buffer[CL_MAX_DIR]; - priv_getFN(buffer,name); - if ( fileStat( buffer, &buf ) == -1 ) - return 0; - else - return buf.st_size; - } - - IndexInput* FSDirectory::openInput(const char* name ) { - return openInput(name, CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); - } - -#ifdef LUCENE_FS_MMAP - IndexInput* FSDirectory::openMMapFile(const char* name, int32_t bufferSize){ - char fl[CL_MAX_DIR]; - priv_getFN(fl, name); - if ( Misc::file_Size(fl) < LUCENE_INT32_MAX_SHOULDBE ) //todo: would this be bigger on 64bit systems?. i suppose it would be...test first - return _CLNEW MMapIndexInput( fl ); - else - return _CLNEW FSIndexInput( fl, bufferSize ); - } -#endif - - IndexInput* FSDirectory::openInput(const char* name, int32_t bufferSize ){ - CND_PRECONDITION(directory[0]!=0,"directory is not open") - char fl[CL_MAX_DIR]; - priv_getFN(fl, name); -#ifdef LUCENE_FS_MMAP - //todo: do some tests here... like if the file - //is >2gb, then some system cannot mmap the file - //also some file systems mmap will fail?? could detect here too - if ( useMMap && Misc::file_Size(fl) < LUCENE_INT32_MAX_SHOULDBE ) //todo: would this be bigger on 64bit systems?. i suppose it would be...test first - return _CLNEW MMapIndexInput( fl ); - else -#endif - return _CLNEW FSIndexInput( fl, bufferSize ); - } - - void FSDirectory::close(){ - SCOPED_LOCK_MUTEX(DIRECTORIES.THIS_LOCK) - { - SCOPED_LOCK_MUTEX(THIS_LOCK) - - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - - if (--refCount <= 0 ) {//refcount starts at 1 - Directory* dir = DIRECTORIES.get(getDirName()); - if(dir){ - DIRECTORIES.remove( getDirName() ); //this will be removed in ~FSDirectory - _CLDECDELETE(dir); - } - } - } - } - - /** - * So we can do some byte-to-hexchar conversion below - */ - char HEX_DIGITS[] = - {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; - - char* FSDirectory::getLockPrefix() const{ - char dirName[CL_MAX_PATH]; // name to be hashed - if ( _realpath(directory,dirName) == NULL ){ - _CLTHROWA(CL_ERR_Runtime,"Invalid directory path"); - } - - //to make a compatible name with jlucene, we need to make some changes... - if ( dirName[1] == ':' ) - dirName[0] = (char)_totupper((char)dirName[0]); - - char* smd5 = MD5String(dirName); - - char* ret=_CL_NEWARRAY(char,32+7+1); //32=2*16, 7=strlen("lucene-") - strcpy(ret,"lucene-"); - strcat(ret,smd5); - - _CLDELETE_CaARRAY(smd5); - - return ret; - } - - bool FSDirectory::doDeleteFile(const char* name) { - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - char fl[CL_MAX_DIR]; - priv_getFN(fl, name); - return _unlink(fl) != -1; - } - - void FSDirectory::renameFile(const char* from, const char* to){ - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - SCOPED_LOCK_MUTEX(THIS_LOCK) - char old[CL_MAX_DIR]; - priv_getFN(old, from); - - char nu[CL_MAX_DIR]; - priv_getFN(nu, to); - - /* This is not atomic. If the program crashes between the call to - delete() and the call to renameTo() then we're screwed, but I've - been unable to figure out how else to do this... */ - - if ( Misc::dir_Exists(nu) ){ - //we run this sequence of unlinking an arbitary 100 times - //on some platforms (namely windows), there can be a - //delay between unlink and dir_exists==false - while ( true ){ - if( _unlink(nu) != 0 ){ - char* err = _CL_NEWARRAY(char,16+strlen(to)+1); //16: len of "couldn't delete " - strcpy(err,"couldn't delete "); - strcat(err,to); - _CLTHROWA_DEL(CL_ERR_IO, err ); - } - //we can wait until the dir_Exists() returns false - //after the success run of unlink() - int i=0; - while ( Misc::dir_Exists(nu) && i < 100 ){ - if ( ++i > 50 ) //if it still doesn't show up, then we do some sleeping for the last 50ms - _LUCENE_SLEEP(1); - } - if ( !Misc::dir_Exists(nu) ) - break; //keep trying to unlink until the file is gone, or the unlink fails. - } - } - if ( _rename(old,nu) != 0 ){ - //todo: jlucene has some extra rename code - if the rename fails, it copies - //the whole file to the new file... might want to implement that if renaming - //fails on some platforms - char buffer[20+CL_MAX_PATH+CL_MAX_PATH]; - strcpy(buffer,"couldn't rename "); - strcat(buffer,from); - strcat(buffer," to "); - strcat(buffer,nu); - _CLTHROWA(CL_ERR_IO, buffer ); - } - } - - IndexOutput* FSDirectory::createOutput(const char* name) { - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - char fl[CL_MAX_DIR]; - priv_getFN(fl, name); - if ( Misc::dir_Exists(fl) ){ - if ( _unlink(fl) != 0 ){ - char tmp[1024]; - strcpy(tmp, "Cannot overwrite: "); - strcat(tmp, name); - _CLTHROWA(CL_ERR_IO, tmp); - } - } - return _CLNEW FSIndexOutput( fl ); - } - - LuceneLock* FSDirectory::makeLock(const char* name) { - CND_PRECONDITION(directory[0]!=0,"directory is not open"); - - char* tmp = getLockPrefix(); - char* lockFile = _CL_NEWARRAY(char,strlen(tmp)+strlen(name)+2); - strcpy(lockFile,tmp); - strcat(lockFile,"-"); - strcat(lockFile,name); - _CLDELETE_CaARRAY(tmp); - - // create a lock file - LuceneLock* ret = _CLNEW FSLock( lockDir, lockFile ); - _CLDELETE_CaARRAY(lockFile); - return ret; - } - - - - FSDirectory::FSLock::FSLock ( const char* _lockDir, const char* name ) - { - this->lockDir = STRDUP_AtoA(_lockDir); - strcpy(lockFile,_lockDir); - strcat(lockFile,PATH_DELIMITERA); - strcat(lockFile,name); - } - FSDirectory::FSLock::~FSLock(){ - _CLDELETE_LCaARRAY( lockDir ); - } - TCHAR* FSDirectory::FSLock::toString(){ - size_t lflen = strlen(lockFile); - TCHAR* ret = _CL_NEWARRAY(TCHAR,lflen+6); - _tcscpy(ret,_T("Lock@")); - STRCPY_AtoT(ret+5,lockFile,lflen+1); - return ret; - } - bool FSDirectory::FSLock::obtain() { - if (disableLocks) - return true; - - if ( !Misc::dir_Exists(lockDir) ){ - //todo: should construct directory using _mkdirs... have to write replacement - if ( _mkdir(lockDir) == -1 ){ - char* err = _CL_NEWARRAY(char,34+strlen(lockDir)+1); //34: len of "Couldn't create lock directory: " - strcpy(err,"Couldn't create lock directory: "); - strcat(err,lockDir); - _CLTHROWA_DEL(CL_ERR_IO, err ); - } - } - int32_t r = _open(lockFile, O_RDWR | O_CREAT | O_RANDOM | O_EXCL, - _S_IREAD | _S_IWRITE); //must do this or file will be created Read only - if ( r < 0 ) - return false; - else{ - _close(r); - return true; - } - - } - bool FSDirectory::FSLock::isLocked(){ - if (disableLocks) - return false; - - return Misc::dir_Exists(lockFile); - } - void FSDirectory::FSLock::release() { - if (disableLocks) - return; - _unlink( lockFile ); - } - - TCHAR* FSDirectory::toString() const{ - TCHAR* ret = _CL_NEWARRAY(TCHAR, strlen(this->directory) + 13); //strlen("FSDirectory@") - _tcscpy(ret,_T("FSDirectory@")); - STRCPY_AtoT(ret+12,directory,strlen(directory)+1); - - return ret; - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/store/FSDirectory.h clucene-core-2.3.3.4/src/CLucene/store/FSDirectory.h --- clucene-core-0.9.21b/src/CLucene/store/FSDirectory.h 2008-10-23 18:00:43.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/FSDirectory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,255 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_FSDirectory_ -#define _lucene_store_FSDirectory_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Directory.h" -#include "Lock.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/StringBuffer.h" - - CL_NS_DEF(store) - - /** - * Straightforward implementation of {@link Directory} as a directory of files. - *

If the system property 'disableLuceneLocks' has the String value of - * "true", lock creation will be disabled. - * - * @see Directory - */ - class FSDirectory:public Directory{ - private: - class FSLock: public LuceneLock{ - public: - // const char* fname; - char lockFile[CL_MAX_PATH]; - char* lockDir; - FSLock ( const char* lockDir, const char* name ); - ~FSLock(); - bool obtain(); - void release(); - bool isLocked(); - TCHAR* toString(); - }; - friend class FSDirectory::FSLock; - -#if defined(LUCENE_FS_MMAP) - class MMapIndexInput: public IndexInput{ - uint8_t* data; - int64_t pos; -#ifdef _CLCOMPILER_MSVC - HANDLE mmaphandle; - HANDLE fhandle; -#else - int fhandle; -#endif - bool isClone; - int64_t _length; - - MMapIndexInput(const MMapIndexInput& clone); - public: - MMapIndexInput(const char* path); - ~MMapIndexInput(); - IndexInput* clone() const; - - inline uint8_t readByte(); - int32_t readVInt(); - void readBytes(uint8_t* b, const int32_t len); - void close(); - int64_t getFilePointer() const; - void seek(const int64_t pos); - int64_t length(){ return _length; } - - static const char* DirectoryType(){ return "MMAP"; } - const char* getDirectoryType() const{ return DirectoryType(); } - }; - friend class FSDirectory::MMapIndexInput; -#endif - - class FSIndexInput:public BufferedIndexInput { - /** - * We used a shared handle between all the fsindexinput clones. - * This reduces number of file handles we need, and it means - * we dont have to use file tell (which is slow) before doing - * a read. - */ - class SharedHandle: LUCENE_REFBASE{ - public: - int32_t fhandle; - int64_t _length; - int64_t _fpos; - DEFINE_MUTEX(*THIS_LOCK) - char path[CL_MAX_DIR]; //todo: this is only used for cloning, better to get information from the fhandle - SharedHandle(); - ~SharedHandle() throw(CLuceneError&); - }; - SharedHandle* handle; - int64_t _pos; - protected: - FSIndexInput(const FSIndexInput& clone); - public: - FSIndexInput(const char* path, int32_t bufferSize=CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); - ~FSIndexInput(); - - IndexInput* clone() const; - void close(); - int64_t length(){ return handle->_length; } - - const char* getDirectoryType() const{ return FSDirectory::DirectoryType(); } - protected: - // Random-access methods - void seekInternal(const int64_t position); - // IndexInput methods - void readInternal(uint8_t* b, const int32_t len); - }; - friend class FSDirectory::FSIndexInput; - - class FSIndexOutput: public BufferedIndexOutput { - private: - int32_t fhandle; - protected: - // output methods: - void flushBuffer(const uint8_t* b, const int32_t size); - public: - FSIndexOutput(const char* path); - ~FSIndexOutput(); - - // output methods: - void close(); - - // Random-access methods - void seek(const int64_t pos); - int64_t length(); - }; - friend class FSDirectory::FSIndexOutput; - - protected: - FSDirectory(const char* path, const bool createDir); - private: - char directory[CL_MAX_PATH]; - int refCount; - void create(); - - static const char* LOCK_DIR; - static const char* getLockDir(); - char lockDir[CL_MAX_PATH]; - char* getLockPrefix() const; - static bool disableLocks; - - void priv_getFN(char* buffer, const char* name) const; - bool useMMap; - - protected: - /// Removes an existing file in the directory. - bool doDeleteFile(const char* name); - - public: - ///Destructor - only call this if you are sure the directory - ///is not being used anymore. Otherwise use the ref-counting - ///facilities of _CLDECDELETE - ~FSDirectory(); - - /// Get a list of strings, one for each file in the directory. - void list(vector* names) const; - - /// Returns true iff a file with the given name exists. - bool fileExists(const char* name) const; - - /// Returns the text name of the directory - const char* getDirName() const; ///Directories are cached, so that, for a given canonical path, the same - FSDirectory instance will always be returned. This permits - synchronization on directories. - - @param file the path to the directory. - @param create if true, create, or erase any existing contents. - @return the FSDirectory for the named file. - */ - static FSDirectory* getDirectory(const char* file, const bool create); - - /// Returns the time the named file was last modified. - int64_t fileModified(const char* name) const; - - //static - /// Returns the time the named file was last modified. - static int64_t fileModified(const char* dir, const char* name); - - //static - /// Returns the length in bytes of a file in the directory. - int64_t fileLength(const char* name) const; - - /// Returns a stream reading an existing file. - IndexInput* openInput(const char* name); - IndexInput* openInput(const char* name, int32_t bufferSize); - -#ifdef LUCENE_FS_MMAP - IndexInput* openMMapFile(const char* name, int32_t bufferSize=LUCENE_STREAM_BUFFER_SIZE); -#endif - - /// Renames an existing file in the directory. - void renameFile(const char* from, const char* to); - - /** Set the modified time of an existing file to now. */ - void touchFile(const char* name); - - /// Creates a new, empty file in the directory with the given name. - /// Returns a stream writing this file. - IndexOutput* createOutput(const char* name); - - /// Construct a {@link Lock}. - /// @param name the name of the lock file - LuceneLock* makeLock(const char* name); - - ///Decrease the ref-count to the directory by one. If - ///the object is no longer needed, then the object is - ///removed from the directory pool. - void close(); - - /** - * If MMap is available, this can disable use of - * mmap reading. - */ - void setUseMMap(bool value){ useMMap = value; } - /** - * Gets whether the directory is using MMap for inputstreams. - */ - bool getUseMMap() const{ return useMMap; } - - TCHAR* toString() const; - - static const char* DirectoryType(){ return "FS"; } - const char* getDirectoryType() const{ return "FS"; } - - /** - * Set whether Lucene's use of lock files is disabled. By default, - * lock files are enabled. They should only be disabled if the index - * is on a read-only medium like a CD-ROM. - */ - static void setDisableLocks(bool doDisableLocks) { disableLocks = doDisableLocks; } - - /** - * Returns whether Lucene's use of lock files is disabled. - * @return true if locks are disabled, false if locks are enabled. - */ - static bool getDisableLocks() { return disableLocks; } - - }; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/store/IndexInput.cpp clucene-core-2.3.3.4/src/CLucene/store/IndexInput.cpp --- clucene-core-0.9.21b/src/CLucene/store/IndexInput.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/IndexInput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,233 +0,0 @@ - /*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "IndexInput.h" - -CL_NS_USE(util) -CL_NS_DEF(store) - - IndexInput::IndexInput() - { - } - IndexInput::IndexInput(const IndexInput& other) - { - } - - int32_t IndexInput::readInt() { - int32_t b = (readByte() << 24); - b |= (readByte() << 16); - b |= (readByte() << 8); - return (b | readByte()); - } - - int32_t IndexInput::readVInt() { - uint8_t b = readByte(); - int32_t i = b & 0x7F; - for (int32_t shift = 7; (b & 0x80) != 0; shift += 7) { - b = readByte(); - i |= (b & 0x7F) << shift; - } - return i; - } - - int64_t IndexInput::readLong() { - int64_t i = ((int64_t)readInt() << 32); - return (i | ((int64_t)readInt() & 0xFFFFFFFFL)); - } - - int64_t IndexInput::readVLong() { - uint8_t b = readByte(); - int64_t i = b & 0x7F; - for (int32_t shift = 7; (b & 0x80) != 0; shift += 7) { - b = readByte(); - i |= (((int64_t)b) & 0x7FL) << shift; - } - return i; - } - - void IndexInput::skipChars( const int32_t count) { - for (int32_t i = 0; i < count; i++) { - TCHAR b = readByte(); - if ((b & 0x80) == 0) { - // Do Nothing. - } else if ((b & 0xE0) != 0xE0) { - readByte(); - } else { - readByte(); - readByte(); - } - } -} - - int32_t IndexInput::readString(TCHAR* buffer, const int32_t maxLength){ - int32_t len = readVInt(); - int32_t ml=maxLength-1; - if ( len >= ml ){ - readChars(buffer, 0, ml); - buffer[ml] = 0; - //we have to finish reading all the data for this string! - if ( len-ml > 0 ){ - //seek(getFilePointer()+(len-ml)); <- that was the wrong way to "finish reading" - skipChars(len-ml); - } - return ml; - }else{ - readChars(buffer, 0, len); - buffer[len] = 0; - return len; - } - } - - TCHAR* IndexInput::readString(const bool _unique){ - int32_t len = readVInt(); - - if ( len == 0){ - if ( _unique ) //todo: does non unique ever occur? - return stringDuplicate(LUCENE_BLANK_STRING); - else - return LUCENE_BLANK_STRING; - } - - TCHAR* ret = _CL_NEWARRAY(TCHAR,len+1); - readChars(ret, 0, len); - ret[len] = 0; - - return ret; - } - - void IndexInput::readChars( TCHAR* buffer, const int32_t start, const int32_t len) { - const int32_t end = start + len; - TCHAR b; - for (int32_t i = start; i < end; ++i) { - b = readByte(); - if ((b & 0x80) == 0) { - b = (b & 0x7F); - } else if ((b & 0xE0) != 0xE0) { - b = (((b & 0x1F) << 6) - | (readByte() & 0x3F)); - } else { - b = ((b & 0x0F) << 12) | ((readByte() & 0x3F) << 6); - b |= (readByte() & 0x3F); - } - buffer[i] = b; - } - } - - - - - - -BufferedIndexInput::BufferedIndexInput(int32_t _bufferSize): - buffer(NULL), - bufferSize(_bufferSize), - bufferStart(0), - bufferLength(0), - bufferPosition(0) - { - } - - BufferedIndexInput::BufferedIndexInput(const BufferedIndexInput& other): - IndexInput(other), - buffer(NULL), - bufferSize(other.bufferSize), - bufferStart(other.bufferStart), - bufferLength(other.bufferLength), - bufferPosition(other.bufferPosition) - { - /* DSR: Does the fact that sometime clone.buffer is not NULL even when - ** clone.bufferLength is zero indicate memory corruption/leakage? - ** if ( clone.buffer != NULL) { */ - if (other.bufferLength != 0 && other.buffer != NULL) { - buffer = _CL_NEWARRAY(uint8_t,bufferLength); - memcpy(buffer,other.buffer,bufferLength * sizeof(uint8_t)); - } - } - - void BufferedIndexInput::readBytes(uint8_t* b, const int32_t len){ - if (len < bufferSize) { - for (int32_t i = 0; i < len; ++i) // read byte-by-byte - b[i] = readByte(); - } else { // read all-at-once - int64_t start = getFilePointer(); - seekInternal(start); - readInternal(b, len); - - bufferStart = start + len; // adjust stream variables - bufferPosition = 0; - bufferLength = 0; // trigger refill() on read - } - } - - int64_t BufferedIndexInput::getFilePointer() const{ - return bufferStart + bufferPosition; - } - - void BufferedIndexInput::seek(const int64_t pos) { - if ( pos < 0 ) - _CLTHROWA(CL_ERR_IO, "IO Argument Error. Value must be a positive value."); - if (pos >= bufferStart && pos < (bufferStart + bufferLength)) - bufferPosition = (int32_t)(pos - bufferStart); // seek within buffer - else { - bufferStart = pos; - bufferPosition = 0; - bufferLength = 0; // trigger refill() on read() - seekInternal(pos); - } - } - void BufferedIndexInput::close(){ - _CLDELETE_ARRAY(buffer); - bufferLength = 0; - bufferPosition = 0; - bufferStart = 0; - } - - - BufferedIndexInput::~BufferedIndexInput(){ - BufferedIndexInput::close(); - } - - void BufferedIndexInput::refill() { - int64_t start = bufferStart + bufferPosition; - int64_t end = start + bufferSize; - if (end > length()) // don't read past EOF - end = length(); - bufferLength = (int32_t)(end - start); - if (bufferLength == 0) - _CLTHROWA(CL_ERR_IO, "IndexInput read past EOF"); - - if (buffer == NULL){ - buffer = _CL_NEWARRAY(uint8_t,bufferSize); // allocate buffer lazily - } - readInternal(buffer, bufferLength); - - - bufferStart = start; - bufferPosition = 0; - } - - -IndexInputStream::IndexInputStream(IndexInput* input){ - this->input = input; - this->size = input->length(); - this->position = input->getFilePointer(); -} -IndexInputStream::~IndexInputStream(){ -} -int32_t IndexInputStream::fillBuffer(char* start, int32_t space){ - int64_t avail = input->length()-input->getFilePointer(); - if ( avail == 0 ) - return -1; - else if ( availreadBytes((uint8_t*)start,space); - return space; -} - -CL_NS_END - diff -Nru clucene-core-0.9.21b/src/CLucene/store/IndexInput.h clucene-core-2.3.3.4/src/CLucene/store/IndexInput.h --- clucene-core-0.9.21b/src/CLucene/store/IndexInput.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/IndexInput.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_IndexInput_ -#define _lucene_store_IndexInput_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/bufferedstream.h" -#include "IndexOutput.h" - -CL_NS_DEF(store) - - /** Abstract base class for input from a file in a {@link Directory}. A - * random-access input stream. Used for all Lucene index input operations. - * @see Directory - * @see IndexOutput - */ - class IndexInput: LUCENE_BASE { - private: - void skipChars( const int32_t count); - protected: - IndexInput(); - IndexInput(const IndexInput& clone); - public: - virtual ~IndexInput(){} - virtual IndexInput* clone() const =0; - - DEFINE_MUTEX(THIS_LOCK) - - /** Reads and returns a single byte. - * @see IndexOutput#writeByte(byte) - */ - virtual uint8_t readByte() =0; - - /** Reads a specified number of bytes into an array at the specified offset. - * @param b the array to read bytes into - * @param offset the offset in the array to start storing bytes - * @param len the number of bytes to read - * @see IndexOutput#writeBytes(byte[],int32_t) - */ - virtual void readBytes(uint8_t* b, const int32_t len) =0; - - /** Reads four bytes and returns an int. - * @see IndexOutput#writeInt(int32_t) - */ - int32_t readInt(); - - /** Reads an int stored in variable-length format. Reads between one and - * five bytes. Smaller values take fewer bytes. Negative numbers are not - * supported. - * @see IndexOutput#writeVInt(int32_t) - */ - virtual int32_t readVInt(); - - /** Reads eight bytes and returns a long. - * @see IndexOutput#writeLong(long) - */ - int64_t readLong(); - - /** Reads a long stored in variable-length format. Reads between one and - * nine bytes. Smaller values take fewer bytes. Negative numbers are not - * supported. */ - int64_t readVLong(); - - /** Reads a string. - * @see IndexOutput#writeString(String) - * maxLength is the amount read into the buffer, the whole string is still read from the stream - * returns the amount read - */ - int32_t readString(TCHAR* buffer, const int32_t maxlength); - - /** Reads a string. - * @see IndexOutput#writeString(String) - * If unique is true (default) the string will be duplicated. - * If false and the length is zero, LUCENE_BLANK_STRING is returned - */ - TCHAR* readString(const bool unique=true); - - - /** Reads UTF-8 encoded characters into an array. - * @param buffer the array to read characters into - * @param start the offset in the array to start storing characters - * @param length the number of characters to read - * @see IndexOutput#writeChars(String,int32_t,int32_t) - */ - void readChars( TCHAR* buffer, const int32_t start, const int32_t len); - - /** Closes the stream to futher operations. */ - virtual void close() =0; - - /** Returns the current position in this file, where the next read will - * occur. - * @see #seek(long) - */ - virtual int64_t getFilePointer() const =0; - - /** Sets current position in this file, where the next read will occur. - * @see #getFilePointer() - */ - virtual void seek(const int64_t pos) =0; - - /** The number of bytes in the file. */ - virtual int64_t length() = 0; - - virtual const char* getDirectoryType() const = 0; - }; - - /** Abstract base class for input from a file in a {@link Directory}. A - * random-access input stream. Used for all Lucene index input operations. - * @see Directory - * @see IndexOutput - */ - class BufferedIndexInput: public IndexInput{ - private: - uint8_t* buffer; //array of bytes - void refill(); - protected: - int32_t bufferSize; //size of the buffer - int64_t bufferStart; // position in file of buffer - int32_t bufferLength; // end of valid l_byte_ts - int32_t bufferPosition; // next uint8_t to read - - /** Returns a clone of this stream. - * - *

Clones of a stream access the same data, and are positioned at the same - * point as the stream they were cloned from. - * - *

Expert: Subclasses must ensure that clones may be positioned at - * different points in the input from each other and from the stream they - * were cloned from. - */ - BufferedIndexInput(const BufferedIndexInput& clone); - BufferedIndexInput(int32_t bufferSize = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); - public: - - virtual ~BufferedIndexInput(); - virtual IndexInput* clone() const = 0; - void close(); - inline uint8_t readByte(){ - if (bufferPosition >= bufferLength) - refill(); - - return buffer[bufferPosition++]; - } - void readBytes(uint8_t* b, const int32_t len); - int64_t getFilePointer() const; - void seek(const int64_t pos); - - protected: - /** Expert: implements buffer refill. Reads bytes from the current position - * in the input. - * @param b the array to read bytes into - * @param offset the offset in the array to start storing bytes - * @param length the number of bytes to read - */ - virtual void readInternal(uint8_t* b, const int32_t len) = 0; - - /** Expert: implements seek. Sets current position in this file, where the - * next {@link #readInternal(byte[],int32_t,int32_t)} will occur. - * @see #readInternal(byte[],int32_t,int32_t) - */ - virtual void seekInternal(const int64_t pos) = 0; - }; - - /** - * JStream InputStream which reads from an IndexInput. This class is - * used by the FieldReader to create binary fields. You can then use - * a GZipInputStream to read compressed data or any of the other - * JStream stream types. - * - */ - class IndexInputStream: public jstreams::BufferedInputStream{ - IndexInput* input; - public: - IndexInputStream(IndexInput* input); - ~IndexInputStream(); - int32_t fillBuffer(char* start, int32_t space); - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/store/IndexOutput.cpp clucene-core-2.3.3.4/src/CLucene/store/IndexOutput.cpp --- clucene-core-0.9.21b/src/CLucene/store/IndexOutput.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/IndexOutput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,163 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "IndexOutput.h" - -CL_NS_USE(util) -CL_NS_DEF(store) - - - IndexOutput::IndexOutput() - { - } - - IndexOutput::~IndexOutput(){ - } - - BufferedIndexOutput::BufferedIndexOutput() - { - buffer = _CL_NEWARRAY(uint8_t, BUFFER_SIZE ); - bufferStart = 0; - bufferPosition = 0; - } - - BufferedIndexOutput::~BufferedIndexOutput(){ - if ( buffer != NULL ) - close(); - } - - void BufferedIndexOutput::close(){ - flush(); - _CLDELETE_ARRAY( buffer ); - - bufferStart = 0; - bufferPosition = 0; - } - - void BufferedIndexOutput::writeByte(const uint8_t b) { - CND_PRECONDITION(buffer!=NULL,"IndexOutput is closed") - if (bufferPosition >= BUFFER_SIZE) - flush(); - buffer[bufferPosition++] = b; - } - - void BufferedIndexOutput::writeBytes(const uint8_t* b, const int32_t length) { - if ( length < 0 ) - _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value."); - int32_t bytesLeft = BUFFER_SIZE - bufferPosition; - // is there enough space in the buffer? - if (bytesLeft >= length) { - // we add the data to the end of the buffer - memcpy(buffer + bufferPosition, b, length); - bufferPosition += length; - // if the buffer is full, flush it - if (BUFFER_SIZE - bufferPosition == 0) - flush(); - } else { - // is data larger then buffer? - if (length > BUFFER_SIZE) { - // we flush the buffer - if (bufferPosition > 0) - flush(); - // and write data at once - flushBuffer(b, length); - bufferStart += length; - } else { - // we fill/flush the buffer (until the input is written) - int64_t pos = 0; // position in the input data - int32_t pieceLength; - while (pos < length) { - if ( length - pos < bytesLeft ) - pieceLength = length - pos; - else - pieceLength = bytesLeft; - memcpy(buffer + bufferPosition, b + pos, pieceLength); - pos += pieceLength; - bufferPosition += pieceLength; - // if the buffer is full, flush it - bytesLeft = BUFFER_SIZE - bufferPosition; - if (bytesLeft == 0) { - flush(); - bytesLeft = BUFFER_SIZE; - } - } - } - } - } - - void IndexOutput::writeInt(const int32_t i) { - writeByte((uint8_t)(i >> 24)); - writeByte((uint8_t)(i >> 16)); - writeByte((uint8_t)(i >> 8)); - writeByte((uint8_t) i); - } - - void IndexOutput::writeVInt(const int32_t vi) { - uint32_t i = vi; - while ((i & ~0x7F) != 0) { - writeByte((uint8_t)((i & 0x7f) | 0x80)); - i >>= 7; //doing unsigned shift - } - writeByte( (uint8_t)i ); - } - - void IndexOutput::writeLong(const int64_t i) { - writeInt((int32_t) (i >> 32)); - writeInt((int32_t) i); - } - - void IndexOutput::writeVLong(const int64_t vi) { - uint64_t i = vi; - while ((i & ~0x7F) != 0) { - writeByte((uint8_t)((i & 0x7f) | 0x80)); - i >>= 7; //doing unsigned shift - } - writeByte((uint8_t)i); - } - - void IndexOutput::writeString(const TCHAR* s, const int32_t length ) { - writeVInt(length); - writeChars(s, 0, length); - } - - void IndexOutput::writeChars(const TCHAR* s, const int32_t start, const int32_t length){ - if ( length < 0 || start < 0 ) - _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value."); - - const int32_t end = start + length; - for (int32_t i = start; i < end; ++i) { - const int32_t code = (int32_t)s[i]; - if (code >= 0x01 && code <= 0x7F) - writeByte((uint8_t)code); - else if (((code >= 0x80) && (code <= 0x7FF)) || code == 0) { - writeByte((uint8_t)(0xC0 | (code >> 6))); - writeByte((uint8_t)(0x80 | (code & 0x3F))); - } else { - writeByte((uint8_t)(0xE0 | (((uint32_t)code) >> 12))); //unsigned shift - writeByte((uint8_t)(0x80 | ((code >> 6) & 0x3F))); - writeByte((uint8_t)(0x80 | (code & 0x3F))); - } - } - } - - - int64_t BufferedIndexOutput::getFilePointer() const{ - return bufferStart + bufferPosition; - } - - void BufferedIndexOutput::seek(const int64_t pos) { - flush(); - bufferStart = pos; - } - - void BufferedIndexOutput::flush() { - flushBuffer(buffer, bufferPosition); - bufferStart += bufferPosition; - bufferPosition = 0; - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/store/IndexOutput.h clucene-core-2.3.3.4/src/CLucene/store/IndexOutput.h --- clucene-core-0.9.21b/src/CLucene/store/IndexOutput.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/IndexOutput.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,152 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_IndexOutput_ -#define _lucene_store_IndexOutput_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(store) - - -/** Abstract class for output to a file in a Directory. A random-access output -* stream. Used for all Lucene index output operations. -* @see Directory -* @see IndexInput -*/ -class IndexOutput:LUCENE_BASE{ - bool isclosed; -public: - IndexOutput(); - virtual ~IndexOutput(); - - /** Writes a single byte. - * @see IndexInput#readByte() - */ - virtual void writeByte(const uint8_t b) = 0; - - /** Writes an array of bytes. - * @param b the bytes to write - * @param length the number of bytes to write - * @see IndexInput#readBytes(byte[],int32_t,int32_t) - */ - virtual void writeBytes(const uint8_t* b, const int32_t length) = 0; - - /** Writes an int as four bytes. - * @see IndexInput#readInt() - */ - void writeInt(const int32_t i); - - /** Writes an int in a variable-length format. Writes between one and - * five bytes. Smaller values take fewer bytes. Negative numbers are not - * supported. - * @see IndexInput#readVInt() - */ - void writeVInt(const int32_t vi); - - /** Writes a long as eight bytes. - * @see IndexInput#readLong() - */ - void writeLong(const int64_t i); - - /** Writes an long in a variable-length format. Writes between one and five - * bytes. Smaller values take fewer bytes. Negative numbers are not - * supported. - * @see IndexInput#readVLong() - */ - void writeVLong(const int64_t vi); - - /** Writes a string. - * @see IndexInput#readString() - */ - void writeString(const TCHAR* s, const int32_t length); - - /** Writes a sequence of UTF-8 encoded characters from a string. - * @param s the source of the characters - * @param start the first character in the sequence - * @param length the number of characters in the sequence - * @see IndexInput#readChars(char[],int32_t,int32_t) - */ - void writeChars(const TCHAR* s, const int32_t start, const int32_t length); - - /** Closes this stream to further operations. */ - virtual void close() = 0; - - /** Returns the current position in this file, where the next write will - * occur. - * @see #seek(long) - */ - virtual int64_t getFilePointer() const = 0; - - /** Sets current position in this file, where the next write will occur. - * @see #getFilePointer() - */ - virtual void seek(const int64_t pos) = 0; - - /** The number of bytes in the file. */ - virtual int64_t length() = 0; - - /** Forces any buffered output to be written. */ - virtual void flush() = 0; -}; - -/** Base implementation class for buffered {@link IndexOutput}. */ -class BufferedIndexOutput : public IndexOutput{ -public: - LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=LUCENE_STREAM_BUFFER_SIZE); -private: - uint8_t* buffer; - int64_t bufferStart; // position in file of buffer - int32_t bufferPosition; // position in buffer - -public: - BufferedIndexOutput(); - virtual ~BufferedIndexOutput(); - - /** Writes a single byte. - * @see IndexInput#readByte() - */ - virtual void writeByte(const uint8_t b); - - /** Writes an array of bytes. - * @param b the bytes to write - * @param length the number of bytes to write - * @see IndexInput#readBytes(byte[],int32_t,int32_t) - */ - virtual void writeBytes(const uint8_t* b, const int32_t length); - - /** Closes this stream to further operations. */ - virtual void close(); - - /** Returns the current position in this file, where the next write will - * occur. - * @see #seek(long) - */ - int64_t getFilePointer() const; - - /** Sets current position in this file, where the next write will occur. - * @see #getFilePointer() - */ - virtual void seek(const int64_t pos); - - /** The number of bytes in the file. */ - virtual int64_t length() = 0; - - /** Forces any buffered output to be written. */ - void flush(); - -protected: - /** Expert: implements buffer write. Writes bytes at the current position in - * the output. - * @param b the bytes to write - * @param len the number of bytes to write - */ - virtual void flushBuffer(const uint8_t* b, const int32_t len) = 0; -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/store/InputStream.h clucene-core-2.3.3.4/src/CLucene/store/InputStream.h --- clucene-core-0.9.21b/src/CLucene/store/InputStream.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/InputStream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_InputStream_ -#define _lucene_store_InputStream_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(store) - -deprecated... please use IndexInput.h header -and change InputStream to IndexInput - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/store/Lock.cpp clucene-core-2.3.3.4/src/CLucene/store/Lock.cpp --- clucene-core-0.9.21b/src/CLucene/store/Lock.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/Lock.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Lock.h" - -CL_NS_DEF(store) - - bool LuceneLock::obtain(int64_t lockWaitTimeout) { - bool locked = obtain(); - int maxSleepCount = (int)(lockWaitTimeout / LOCK_POLL_INTERVAL); - int sleepCount = 0; - while (!locked) { - if (sleepCount++ == maxSleepCount) { - _CLTHROWA(CL_ERR_IO,"Lock obtain timed out"); - } - _LUCENE_SLEEP(LOCK_POLL_INTERVAL); - locked = obtain(); - } - return locked; - } - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/store/Lock.h clucene-core-2.3.3.4/src/CLucene/store/Lock.h --- clucene-core-0.9.21b/src/CLucene/store/Lock.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/Lock.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_Lock_ -#define _lucene_store_Lock_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(store) - class LuceneLock: LUCENE_BASE{ - public: - LUCENE_STATIC_CONSTANT(int64_t, LOCK_POLL_INTERVAL = 1000); - - /** Attempts to obtain exclusive access and immediately return - * upon success or failure. - * @return true iff exclusive access is obtained - */ - virtual bool obtain() = 0; - - /** Attempts to obtain an exclusive lock within amount - * of time given. Currently polls once per second until - * lockWaitTimeout is passed. - * @param lockWaitTimeout length of time to wait in ms - * @return true if lock was obtained - * @throws IOException if lock wait times out or obtain() throws an IOException - */ - bool obtain(int64_t lockWaitTimeout); - - // Release exclusive access. - virtual void release() = 0; - - /** Returns true if the resource is currently locked. Note that one must - * still call {@link #obtain()} before using the resource. */ - virtual bool isLocked() = 0; - - virtual ~LuceneLock() - { - } - - virtual TCHAR* toString() = 0; - }; - - - // Utility class for executing code with exclusive access. - template - class LuceneLockWith { - private: - LuceneLock* lock; - int64_t lockWaitTimeout; - - protected: - // Code to execute with exclusive access. - virtual T doBody() = 0; - - // Constructs an executor that will grab the named lock. - public: - /** Constructs an executor that will grab the named lock. - * Defaults lockWaitTimeout to LUCENE_COMMIT_LOCK_TIMEOUT. - * @deprecated Kept only to avoid breaking existing code. - */ - LuceneLockWith(LuceneLock* lock, int64_t lockWaitTimeout) { - this->lock = lock; - this->lockWaitTimeout = lockWaitTimeout; - } - virtual ~LuceneLockWith(){ - } - - /** Calls {@link #doBody} while lock is obtained. Blocks if lock - * cannot be obtained immediately. Retries to obtain lock once per second - * until it is obtained, or until it has tried ten times. Lock is released when - * {@link #doBody} exits. */ - T runAndReturn() { - bool locked = false; - T ret = NULL; - try { - locked = lock->obtain(lockWaitTimeout); - ret = doBody(); - }_CLFINALLY( - if (locked) - lock->release(); - ); - return ret; - } - - /** @see runAndReturn - * Same as runAndReturn, except doesn't return any value. - * The only difference is that no void values are used - */ - void run() { - bool locked = false; - try { - locked = lock->obtain(lockWaitTimeout); - doBody(); - }_CLFINALLY( - if (locked) - lock->release(); - ); - } - }; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/store/Makefile.am clucene-core-2.3.3.4/src/CLucene/store/Makefile.am --- clucene-core-0.9.21b/src/CLucene/store/Makefile.am 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -storedir = $(lsrcdir)/store -storehdir = $(includedir)/CLucene/store - -libclucene_la_SOURCES += $(storedir)/FSDirectory.cpp -libclucene_la_SOURCES += $(storedir)/IndexInput.cpp -libclucene_la_SOURCES += $(storedir)/Lock.cpp -libclucene_la_SOURCES += $(storedir)/IndexOutput.cpp -libclucene_la_SOURCES += $(storedir)/MMapInput.cpp -libclucene_la_SOURCES += $(storedir)/RAMDirectory.cpp -libclucene_la_SOURCES += $(storedir)/TransactionalRAMDirectory.cpp - -storeh_HEADERS = $(storedir)/*.h \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/CLucene/store/MMapInput.cpp clucene-core-2.3.3.4/src/CLucene/store/MMapInput.cpp --- clucene-core-0.9.21b/src/CLucene/store/MMapInput.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/MMapInput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,203 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#if defined(LUCENE_FS_MMAP) - -#include "FSDirectory.h" -#include "CLucene/util/Misc.h" -#include "CLucene/debug/condition.h" - -#ifndef _CLCOMPILER_MSVC - #include -#endif - -CL_NS_DEF(store) -CL_NS_USE(util) - - FSDirectory::MMapIndexInput::MMapIndexInput(const char* path): - pos(0), - data(NULL), - _length(0), - isClone(false) - { - //Func - Constructor. - // Opens the file named path - //Pre - path != NULL - //Post - if the file could not be opened an exception is thrown. - - CND_PRECONDITION(path != NULL, "path is NULL"); - -#ifdef _CLCOMPILER_MSVC - mmaphandle = NULL; - fhandle = CreateFileA(path,GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0); - - //Check if a valid fhandle was retrieved - if (fhandle < 0){ - DWORD err = GetLastError(); - if ( err == ERROR_FILE_NOT_FOUND ) - _CLTHROWA(CL_ERR_IO, "File does not exist"); - else if ( err == EACCES ) - _CLTHROWA(ERROR_ACCESS_DENIED, "File Access denied"); - else if ( err == ERROR_TOO_MANY_OPEN_FILES ) - _CLTHROWA(CL_ERR_IO, "Too many open files"); - else - _CLTHROWA(CL_ERR_IO, "File IO Error"); - } - - DWORD dummy=0; - _length = GetFileSize(fhandle,&dummy); - - if ( _length > 0 ){ - mmaphandle = CreateFileMappingA(fhandle,NULL,PAGE_READONLY,0,0,NULL); - if ( mmaphandle != NULL ){ - void* address = MapViewOfFile(mmaphandle,FILE_MAP_READ,0,0,0); - if ( address != NULL ){ - data = (uint8_t*)address; - return; //SUCCESS! - } - } - CloseHandle(mmaphandle); - - char* lpMsgBuf=0; - DWORD dw = GetLastError(); - - FormatMessageA( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - dw, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - lpMsgBuf, - 0, NULL ); - - char* errstr = _CL_NEWARRAY(char, strlen(lpMsgBuf)+40); - sprintf(errstr, "MMapIndexInput::MMapIndexInput failed with error %d: %s", dw, lpMsgBuf); - LocalFree(lpMsgBuf); - - _CLTHROWA_DEL(CL_ERR_IO,errstr); - } - -#else //_CLCOMPILER_MSVC - fhandle = ::open (path, O_RDONLY); - if (fhandle < 0){ - _CLTHROWA(CL_ERR_IO,strerror(errno)); - }else{ - // stat it - struct stat sb; - if (::fstat (fhandle, &sb)){ - _CLTHROWA(CL_ERR_IO,strerror(errno)); - }else{ - // get length from stat - _length = sb.st_size; - - // mmap the file - void* address = ::mmap(0, _length, PROT_READ, MAP_SHARED, fhandle, 0); - if (address == MAP_FAILED){ - _CLTHROWA(CL_ERR_IO,strerror(errno)); - }else{ - data = (uint8_t*)address; - } - } - } -#endif - } - - FSDirectory::MMapIndexInput::MMapIndexInput(const MMapIndexInput& clone): IndexInput(clone){ - //Func - Constructor - // Uses clone for its initialization - //Pre - clone is a valide instance of FSIndexInput - //Post - The instance has been created and initialized by clone - -#ifdef _CLCOMPILER_MSVC - mmaphandle = NULL; - fhandle = NULL; -#endif - - data = clone.data; - pos = clone.pos; - - //clone the file length - _length = clone._length; - //Keep in mind that this instance is a clone - isClone = true; - } - - uint8_t FSDirectory::MMapIndexInput::readByte(){ - return *(data+(pos++)); - } - - void FSDirectory::MMapIndexInput::readBytes(uint8_t* b, const int32_t len){ - memcpy(b, data+pos, len); - pos+=len; - } - int32_t FSDirectory::MMapIndexInput::readVInt(){ - uint8_t b = *(data+(pos++)); - int32_t i = b & 0x7F; - for (int shift = 7; (b & 0x80) != 0; shift += 7) { - b = *(data+(pos++)); - i |= (b & 0x7F) << shift; - } - return i; - } - int64_t FSDirectory::MMapIndexInput::getFilePointer() const{ - return pos; - } - void FSDirectory::MMapIndexInput::seek(const int64_t pos){ - this->pos=pos; - } - - FSDirectory::MMapIndexInput::~MMapIndexInput(){ - //Func - Destructor - //Pre - True - //Post - The file for which this instance is responsible has been closed. - // The instance has been destroyed - - close(); - } - - IndexInput* FSDirectory::MMapIndexInput::clone() const - { - return _CLNEW FSDirectory::MMapIndexInput(*this); - } - void FSDirectory::MMapIndexInput::close() { - //IndexInput::close(); - - if ( !isClone ){ -#ifdef _CLCOMPILER_MSVC - if ( data != NULL ){ - if ( ! UnmapViewOfFile(data) ){ - CND_PRECONDITION( false, "UnmapViewOfFile(data) failed"); //todo: change to rich error - } - } - - if ( mmaphandle != NULL ){ - if ( ! CloseHandle(mmaphandle) ){ - CND_PRECONDITION( false, "CloseHandle(mmaphandle) failed"); - } - } - if ( fhandle != NULL ){ - if ( !CloseHandle(fhandle) ){ - CND_PRECONDITION( false, "CloseHandle(fhandle) failed"); - } - } - mmaphandle = NULL; - fhandle = NULL; -#else - if ( data != NULL ) - ::munmap(data, _length); - if ( fhandle > 0 ) - ::close(fhandle); - fhandle = 0; -#endif - } - data = NULL; - pos = 0; - } - - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/store/OutputStream.h clucene-core-2.3.3.4/src/CLucene/store/OutputStream.h --- clucene-core-0.9.21b/src/CLucene/store/OutputStream.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/OutputStream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_IndexOutput_ -#define _lucene_store_IndexOutput_ -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(store) - - -deprecated... please use IndexOutput.h header -and change OutputStream to OutdexInput - - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/store/RAMDirectory.cpp clucene-core-2.3.3.4/src/CLucene/store/RAMDirectory.cpp --- clucene-core-0.9.21b/src/CLucene/store/RAMDirectory.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/RAMDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,390 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "RAMDirectory.h" - -#include "Lock.h" -#include "Directory.h" -#include "FSDirectory.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Misc.h" -#include "CLucene/debug/condition.h" - -CL_NS_USE(util) -CL_NS_DEF(store) - - RAMFile::RAMFile() - { - length = 0; - lastModified = Misc::currentTimeMillis(); - } - RAMFile::~RAMFile(){ - } - - - RAMDirectory::RAMLock::RAMLock(const char* name, RAMDirectory* dir): - directory(dir) - { - fname = STRDUP_AtoA(name); - } - RAMDirectory::RAMLock::~RAMLock() - { - _CLDELETE_LCaARRAY( fname ); - directory = NULL; - } - TCHAR* RAMDirectory::RAMLock::toString(){ - return STRDUP_TtoT(_T("LockFile@RAM")); - } - bool RAMDirectory::RAMLock::isLocked() { - return directory->fileExists(fname); - } - bool RAMDirectory::RAMLock::obtain(){ - SCOPED_LOCK_MUTEX(directory->files_mutex); - if (!directory->fileExists(fname)) { - IndexOutput* tmp = directory->createOutput(fname); - tmp->close(); - _CLDELETE(tmp); - - return true; - } - return false; - } - - void RAMDirectory::RAMLock::release(){ - directory->deleteFile(fname); - } - - - RAMIndexOutput::~RAMIndexOutput(){ - if ( deleteFile ){ - _CLDELETE(file); - }else - file = NULL; - } - RAMIndexOutput::RAMIndexOutput(RAMFile* f):file(f) { - pointer = 0; - deleteFile = false; - } - - RAMIndexOutput::RAMIndexOutput(): - file(_CLNEW RAMFile) - { - pointer = 0; - deleteFile = true; - } - - void RAMIndexOutput::writeTo(IndexOutput* out){ - flush(); - int64_t end = file->length; - int64_t pos = 0; - int32_t p = 0; - while (pos < end) { - int32_t length = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int64_t nextPos = pos + length; - if (nextPos > end) { // at the last buffer - length = (int32_t)(end - pos); - } - out->writeBytes((uint8_t*)file->buffers[p++], length); - pos = nextPos; - } - } - - void RAMIndexOutput::reset(){ - seek(_ILONGLONG(0)); - file->length = _ILONGLONG(0); - } - - void RAMIndexOutput::flushBuffer(const uint8_t* src, const int32_t len) { - uint8_t* b = NULL; - int32_t bufferPos = 0; - while (bufferPos != len) { - uint32_t bufferNumber = pointer/CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int32_t bufferOffset = pointer%CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int32_t bytesInBuffer = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE - bufferOffset; - int32_t remainInSrcBuffer = len - bufferPos; - int32_t bytesToCopy = bytesInBuffer >= remainInSrcBuffer ? remainInSrcBuffer : bytesInBuffer; - - if (bufferNumber == file->buffers.size()){ - b = _CL_NEWARRAY(uint8_t, CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); - file->buffers.push_back( b ); - }else{ - b = file->buffers[bufferNumber]; - } - memcpy(b+bufferOffset, src+bufferPos, bytesToCopy * sizeof(uint8_t)); - bufferPos += bytesToCopy; - pointer += bytesToCopy; - } - if (pointer > file->length) - file->length = pointer; - - file->lastModified = Misc::currentTimeMillis(); - } - - void RAMIndexOutput::close() { - BufferedIndexOutput::close(); - } - - /** Random-at methods */ - void RAMIndexOutput::seek(const int64_t pos){ - BufferedIndexOutput::seek(pos); - pointer = (int32_t)pos; - } - int64_t RAMIndexOutput::length() { - return file->length; - } - - - RAMIndexInput::RAMIndexInput(RAMFile* f): - file(f) { - pointer = 0; - _length = f->length; - } - RAMIndexInput::RAMIndexInput(const RAMIndexInput& other): - BufferedIndexInput(other) - { - file = other.file; - pointer = other.pointer; - _length = other._length; - } - RAMIndexInput::~RAMIndexInput(){ - RAMIndexInput::close(); - } - IndexInput* RAMIndexInput::clone() const - { - RAMIndexInput* ret = _CLNEW RAMIndexInput(*this); - return ret; - } - int64_t RAMIndexInput::length() { - return _length; - } - const char* RAMIndexInput::getDirectoryType() const{ - return RAMDirectory::DirectoryType(); - } - void RAMIndexInput::readInternal(uint8_t* dest, const int32_t len) { - const int64_t bytesAvailable = file->length - pointer; - int64_t remainder = len <= bytesAvailable ? len : bytesAvailable; - int32_t start = pointer; - int32_t destOffset = 0; - while (remainder != 0) { - int32_t bufferNumber = start / CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int32_t bufferOffset = start % CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; - int32_t bytesInBuffer = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE - bufferOffset; - - /* The buffer's entire length (bufferLength) is defined by IndexInput.h - ** as int32_t, so obviously the number of bytes in a given segment of the - ** buffer won't exceed the the capacity of int32_t. Therefore, the - ** int64_t->int32_t cast on the next line is safe. */ - int32_t bytesToCopy = bytesInBuffer >= remainder ? static_cast(remainder) : bytesInBuffer; - uint8_t* b = file->buffers[bufferNumber]; - memcpy(dest+destOffset,b+bufferOffset,bytesToCopy * sizeof(uint8_t)); - - destOffset += bytesToCopy; - start += bytesToCopy; - remainder -= bytesToCopy; - pointer += bytesToCopy; - } - } - - void RAMIndexInput::close() { - BufferedIndexInput::close(); - } - - void RAMIndexInput::seekInternal(const int64_t pos) { - CND_PRECONDITION(pos>=0 &&pos_length,"Seeking out of range") - pointer = (int32_t)pos; - } - - - - - - - void RAMDirectory::list(vector* names) const{ - SCOPED_LOCK_MUTEX(files_mutex); - - FileMap::const_iterator itr = files.begin(); - while (itr != files.end()){ - names->push_back(itr->first); - ++itr; - } - } - - RAMDirectory::RAMDirectory(): - Directory(),files(true,true) - { - } - - RAMDirectory::~RAMDirectory(){ - //todo: should call close directory? - } - - void RAMDirectory::_copyFromDir(Directory* dir, bool closeDir) - { - vector names; - dir->list(&names); - uint8_t buf[CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE]; - - for (size_t i=0;iopenInput(names[i].c_str()); - // and copy to ram disk - //todo: this could be a problem when copying from big indexes... - int64_t len = is->length(); - int64_t readCount = 0; - while (readCount < len) { - int32_t toRead = (int32_t)(readCount + CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE > len ? len - readCount : CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); - is->readBytes(buf, toRead); - os->writeBytes(buf, toRead); - readCount += toRead; - } - - // graceful cleanup - is->close(); - _CLDELETE(is); - os->close(); - _CLDELETE(os); - } - if (closeDir) - dir->close(); - } - RAMDirectory::RAMDirectory(Directory* dir): - Directory(),files(true,true) - { - _copyFromDir(dir,false); - - } - - RAMDirectory::RAMDirectory(const char* dir): - Directory(),files(true,true) - { - Directory* fsdir = FSDirectory::getDirectory(dir,false); - try{ - _copyFromDir(fsdir,false); - }_CLFINALLY(fsdir->close();_CLDECDELETE(fsdir);); - - } - - bool RAMDirectory::fileExists(const char* name) const { - SCOPED_LOCK_MUTEX(files_mutex); - return files.exists(name); - } - - int64_t RAMDirectory::fileModified(const char* name) const { - SCOPED_LOCK_MUTEX(files_mutex); - const RAMFile* f = files.get(name); - return f->lastModified; - } - - int64_t RAMDirectory::fileLength(const char* name) const{ - SCOPED_LOCK_MUTEX(files_mutex); - RAMFile* f = files.get(name); - return f->length; - } - - - IndexInput* RAMDirectory::openInput(const char* name) { - SCOPED_LOCK_MUTEX(files_mutex); - RAMFile* file = files.get(name); - if (file == NULL) { /* DSR:PROPOSED: Better error checking. */ - _CLTHROWA(CL_ERR_IO,"[RAMDirectory::open] The requested file does not exist."); - } - return _CLNEW RAMIndexInput( file ); - } - - void RAMDirectory::close(){ - SCOPED_LOCK_MUTEX(files_mutex); - files.clear(); - } - - bool RAMDirectory::doDeleteFile(const char* name) { - SCOPED_LOCK_MUTEX(files_mutex); - files.remove(name); - return true; - } - - void RAMDirectory::renameFile(const char* from, const char* to) { - SCOPED_LOCK_MUTEX(files_mutex); - FileMap::iterator itr = files.find(from); - - /* DSR:CL_BUG_LEAK: - ** If a file named $to already existed, its old value was leaked. - ** My inclination would be to prevent this implicit deletion with an - ** exception, but it happens routinely in CLucene's internals (e.g., during - ** IndexWriter.addIndexes with the file named 'segments'). */ - if (files.exists(to)) { - files.remove(to); - } - if ( itr == files.end() ){ - char tmp[1024]; - _snprintf(tmp,1024,"cannot rename %s, file does not exist",from); - _CLTHROWT(CL_ERR_IO,tmp); - } - CND_PRECONDITION(itr != files.end(), "itr==files.end()") - RAMFile* file = itr->second; - files.removeitr(itr,false,true); - files.put(STRDUP_AtoA(to), file); - } - - - void RAMDirectory::touchFile(const char* name) { - RAMFile* file = NULL; - { - SCOPED_LOCK_MUTEX(files_mutex); - file = files.get(name); - } - uint64_t ts1 = file->lastModified; - uint64_t ts2 = Misc::currentTimeMillis(); - - //make sure that the time has actually changed - while ( ts1==ts2 ) { - _LUCENE_SLEEP(1); - ts2 = Misc::currentTimeMillis(); - }; - - file->lastModified = ts2; - } - - IndexOutput* RAMDirectory::createOutput(const char* name) { - /* Check the $files VoidMap to see if there was a previous file named - ** $name. If so, delete the old RAMFile object, but reuse the existing - ** char buffer ($n) that holds the filename. If not, duplicate the - ** supplied filename buffer ($name) and pass ownership of that memory ($n) - ** to $files. */ - - SCOPED_LOCK_MUTEX(files_mutex); - - const char* n = files.getKey(name); - if (n != NULL) { - RAMFile* rf = files.get(name); - _CLDELETE(rf); - } else { - n = STRDUP_AtoA(name); - } - - RAMFile* file = _CLNEW RAMFile(); - #ifdef _DEBUG - file->filename = n; - #endif - files[n] = file; - - return _CLNEW RAMIndexOutput(file); - } - - LuceneLock* RAMDirectory::makeLock(const char* name) { - return _CLNEW RAMLock(name,this); - } - - TCHAR* RAMDirectory::toString() const{ - return STRDUP_TtoT( _T("RAMDirectory") ); - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/store/RAMDirectory.h clucene-core-2.3.3.4/src/CLucene/store/RAMDirectory.h --- clucene-core-0.9.21b/src/CLucene/store/RAMDirectory.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/RAMDirectory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,178 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_RAMDirectory_ -#define _lucene_store_RAMDirectory_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Lock.h" -#include "Directory.h" -#include "CLucene/util/VoidMap.h" -#include "CLucene/util/Arrays.h" - -CL_NS_DEF(store) - - class RAMFile:LUCENE_BASE { - public: - CL_NS(util)::CLVector > buffers; - int64_t length; - uint64_t lastModified; - - #ifdef _DEBUG - const char* filename; - #endif - - RAMFile(); - ~RAMFile(); - }; - - class RAMIndexOutput: public BufferedIndexOutput { - protected: - RAMFile* file; - int32_t pointer; - bool deleteFile; - - // output methods: - void flushBuffer(const uint8_t* src, const int32_t len); - public: - RAMIndexOutput(RAMFile* f); - RAMIndexOutput(); - /** Construct an empty output buffer. */ - virtual ~RAMIndexOutput(); - - virtual void close(); - - // Random-at methods - virtual void seek(const int64_t pos); - int64_t length(); - /** Resets this to an empty buffer. */ - void reset(); - /** Copy the current contents of this buffer to the named output. */ - void writeTo(IndexOutput* output); - }; - - class RAMIndexInput:public BufferedIndexInput { - private: - RAMFile* file; - int32_t pointer; - int64_t _length; - protected: - /** IndexInput methods */ - RAMIndexInput(const RAMIndexInput& clone); - void readInternal(uint8_t *dest, const int32_t len); - - /** Random-at methods */ - void seekInternal(const int64_t pos); - public: - RAMIndexInput(RAMFile* f); - ~RAMIndexInput(); - IndexInput* clone() const; - - void close(); - int64_t length(); - const char* getDirectoryType() const; - }; - - - /** - * A memory-resident {@link Directory} implementation. - */ - class RAMDirectory:public Directory{ - - class RAMLock: public LuceneLock{ - private: - RAMDirectory* directory; - char* fname; - public: - RAMLock(const char* name, RAMDirectory* dir); - virtual ~RAMLock(); - bool obtain(); - void release(); - bool isLocked(); - virtual TCHAR* toString(); - }; - - typedef CL_NS(util)::CLHashMap > FileMap; - protected: - /// Removes an existing file in the directory. - virtual bool doDeleteFile(const char* name); - - /** - * Creates a new RAMDirectory instance from a different - * Directory implementation. This can be used to load - * a disk-based index into memory. - *

- * This should be used only with indices that can fit into memory. - * - * @param dir a Directory value - * @exception IOException if an error occurs - */ - void _copyFromDir(Directory* dir, bool closeDir); - FileMap files; // unlike the java Hashtable, FileMap is not synchronized, and all access must be protected by a lock - public: -#ifndef _CL_DISABLE_MULTITHREADING //do this so that the mutable keyword still works without mt enabled - mutable DEFINE_MUTEX(files_mutex) // mutable: const methods must also be able to synchronize properly -#endif - - /// Returns a null terminated array of strings, one for each file in the directory. - void list(vector* names) const; - - /** Constructs an empty {@link Directory}. */ - RAMDirectory(); - - ///Destructor - only call this if you are sure the directory - ///is not being used anymore. Otherwise use the ref-counting - ///facilities of dir->close - virtual ~RAMDirectory(); - RAMDirectory(Directory* dir); - - /** - * Creates a new RAMDirectory instance from the {@link FSDirectory}. - * - * @param dir a String specifying the full index directory path - */ - RAMDirectory(const char* dir); - - /// Returns true iff the named file exists in this directory. - bool fileExists(const char* name) const; - - /// Returns the time the named file was last modified. - int64_t fileModified(const char* name) const; - - /// Returns the length in bytes of a file in the directory. - int64_t fileLength(const char* name) const; - - /// Removes an existing file in the directory. - virtual void renameFile(const char* from, const char* to); - - /** Set the modified time of an existing file to now. */ - void touchFile(const char* name); - - /// Creates a new, empty file in the directory with the given name. - /// Returns a stream writing this file. - virtual IndexOutput* createOutput(const char* name); - - /// Construct a {@link Lock}. - /// @param name the name of the lock file - LuceneLock* makeLock(const char* name); - - /// Returns a stream reading an existing file. - IndexInput* openInput(const char* name); - - virtual void close(); - - TCHAR* toString() const; - - static const char* DirectoryType() { return "RAM"; } - const char* getDirectoryType() const{ return DirectoryType(); } - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/store/TransactionalRAMDirectory.cpp clucene-core-2.3.3.4/src/CLucene/store/TransactionalRAMDirectory.cpp --- clucene-core-0.9.21b/src/CLucene/store/TransactionalRAMDirectory.cpp 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/TransactionalRAMDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,216 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "TransactionalRAMDirectory.h" - -CL_NS_DEF(store) -CL_NS_USE(util) - - TransactionalRAMDirectory::TransactionalRAMDirectory(): - RAMDirectory(), - filesToRestoreOnAbort(true,true) - { - transOpen = false; - } - TransactionalRAMDirectory::~TransactionalRAMDirectory(){ - } - - bool TransactionalRAMDirectory::archiveOrigFileIfNecessary(const char* name) { - // If a file named $name was present when the transaction started and the - // original RAMFile object has not been archived for restoration upon - // transaction abort, then do so, and return true. - // In any other case, return false. - if (fileExists(name) && filesToRemoveOnAbort.find(name) == filesToRemoveOnAbort.end()) { - // The file exists, but isn't recorded as having been created after the - // start of the transaction, so it must've been present at the start of - // the transaction. - - // Transfer memory ownership of both the key and the value from files to - // filesToRestoreOnAbort. - const char* origName = files.getKey(name); - RAMFile* origFile = files.get(name); - files.remove(name, true, true); - filesToRestoreOnAbort.put(origName, origFile); - - CND_CONDITION(!fileExists(name), "File should not exist immediately after archival."); - return true; - } - - return false; - } - - void TransactionalRAMDirectory::unarchiveOrigFile(const char* name) { - const char* origName = filesToRestoreOnAbort.getKey(name); - if (origName == NULL) { - _CLTHROWA(CL_ERR_RAMTransaction,"File submitted for unarchival was not archived."); - } - RAMFile* origFile = filesToRestoreOnAbort.get(name); - // Transfer memory ownership back to files from filesToRestoreOnAbort. - filesToRestoreOnAbort.remove(name, true, true); - files.put(origName, origFile); - } - bool TransactionalRAMDirectory::transIsOpen() const { - return transOpen; - } - - void TransactionalRAMDirectory::transStart() { - if (transOpen) { - _CLTHROWA(CL_ERR_RAMTransaction,"Must resolve previous transaction before starting another."); - } - - CND_CONDITION(filesToRemoveOnAbort.size() == 0, - "filesToRemoveOnAbort should have been cleared by either its" - " constructor or transResolved." - ); - CND_CONDITION(filesToRestoreOnAbort.size() == 0, - "filesToRestoreOnAbort should have been cleared by either its" - " constructor or transResolved." - ); - - transOpen = true; - } - - void TransactionalRAMDirectory::transResolved() { - // This method implements actions common to both forms of transaction - // resolution. - filesToRemoveOnAbort.clear(); - filesToRestoreOnAbort.clear(); - transOpen = false; - } - - void TransactionalRAMDirectory::transCommit() { - if (!transOpen) { - _CLTHROWA(CL_ERR_RAMTransaction,"There is no open transaction."); - } - // All storage is in memory, so commit is ultra-simple. - transResolved(); - } - - void TransactionalRAMDirectory::transAbort() { - if (!transOpen) { - _CLTHROWA(CL_ERR_RAMTransaction,"There is no open transaction."); - } - - // Delete each file in filesToRemoveOnAbort. - for (FilenameSet::const_iterator itrDel = filesToRemoveOnAbort.begin(); - itrDel != filesToRemoveOnAbort.end(); - ++itrDel - ) - { - const char* name = itrDel->first; - size_t nameLength = strlen(name); - - // Special exception: - // Refrain from deleting a lock's flag file, as that would interfere with - // the operation of the lock. - if (!(nameLength >= 5 && strcmp(name + nameLength - 5, ".lock"))) { - RAMDirectory::deleteFile(name); - } - } - // Ownership of the memory of both the key and the value never left files, - // so there's no need for a special directive to filesToRemoveOnAbort. - filesToRemoveOnAbort.clear(); - - // Now that any new-since-trans-start files with the same names as - // already-present-at-trans-start files are out of the way, restore each - // file in filesToRestoreOnAbort. - AStringArrayConst removeTheseWithoutDeletingMem; - for (TransFileMap::const_iterator itr = filesToRestoreOnAbort.begin(); - itr != filesToRestoreOnAbort.end(); - ++itr - ) - { - const char* name = itr->first; - files.put(name, itr->second); - // We've just transferred ownership of the memory of both the key and the - // value to files; we must now direct filesToRestoreOnAbort not to delete - // that memory as it removes the entry. This is performed in a separate - // loop to avoid modifying filesToRestoreOnAbort while iterating over it. - removeTheseWithoutDeletingMem.push_back(name); - } - - for (AStringArrayConst::iterator itrRem = removeTheseWithoutDeletingMem.begin(); - itrRem != removeTheseWithoutDeletingMem.end(); - ++itrRem - ) - { - filesToRestoreOnAbort.remove(*itrRem); //remove iterator - } - CND_CONDITION(filesToRestoreOnAbort.size() == 0, "filesToRestoreOnAbort should be empty."); - - transResolved(); - } - - bool TransactionalRAMDirectory::doDeleteFile(const char* name) { - if (!transOpen) { - return RAMDirectory::doDeleteFile(name); - } - - bool wasOriginalAndWasArchived = archiveOrigFileIfNecessary(name); - if (!wasOriginalAndWasArchived) { - // The file to be deleted wasn't present at transaction start, so instead - // of archiving it, we delete it the conventional way, making sure to - // erase its record in filesToRemoveOnAbort if it was listed there. - filesToRemoveOnAbort.remove(name); - - return RAMDirectory::doDeleteFile(name); - } - return true; - } - - void TransactionalRAMDirectory::renameFile(const char* from, const char* to) { - // During the review on 2005.03.18, decided not to implement transactional - // renameFile for two reasons: - // a) It's not needed in the limited scenario for which - // TransactionalRAMDirectory was designed (IndexWriter::addDocument and - // subcode). - // b) Supporting renaming during a transaction would add considerable - // bookkeeping overhead, reducing the performance of the overwhelmingly - // typical case (commit) in order to support the rare case (abort). - // - // This was not a thinly disguised punt due to the complication of - // implementing renameFile transactionally; rather, several implementations - // were considered, but it seemed wrongheaded to degrade the performance of - // the typical case based on the mere potential need to support renameFile - // at some future point for the benefit of the atypical case. - if (transOpen) { - _CLTHROWA(CL_ERR_RAMTransaction,"TransactionalRAMDirectory disallows renameFile during a transaction."); - } - RAMDirectory::renameFile(from, to); - } - - IndexOutput* TransactionalRAMDirectory::createOutput(const char* name) { - if (!transOpen) { - return RAMDirectory::createOutput(name); - } - - bool wasOriginalAndWasArchived = archiveOrigFileIfNecessary(name); - try { - IndexOutput* ret = RAMDirectory::createOutput(name); - // Importantly, we store a pointer to the filename memory managed by - // files, rather than that passed in by the client (name). We don't make - // an additional copy of the filename's memory because the transactional - // metadata container filesToRemoveOnAbort is not at risk of outliving - // files. - filesToRemoveOnAbort.put(files.getKey(name),NULL); - return ret; - } catch (...) { - if (wasOriginalAndWasArchived) { - unarchiveOrigFile(name); - } - throw; - } - } - - void TransactionalRAMDirectory::close() { - if (transOpen) { - transAbort(); - } - RAMDirectory::close(); - } - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/store/TransactionalRAMDirectory.h clucene-core-2.3.3.4/src/CLucene/store/TransactionalRAMDirectory.h --- clucene-core-0.9.21b/src/CLucene/store/TransactionalRAMDirectory.h 2008-10-23 17:44:36.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/store/TransactionalRAMDirectory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_store_TransactionalRAMDirectory_ -#define _lucene_store_TransactionalRAMDirectory_ - -#include "RAMDirectory.h" -#include "CLucene/util/VoidList.h" -CL_NS_DEF(store) - - /*** - This transactional in-memory Directory was created to address a specific - situation, and was deliberately pared down to the simplest viable - implementation. For the sake of simplicity, this implementation imposes - restrictions on what operations can be performed in the directory while a - transaction is in progress (documented in TransactionalRAMDirectory.cpp). - - Because the Lucene Directory interface itself is rather simplistic, it - would not be difficult to expand TransactionalRAMDirectory so that it - provided fully general transactionality. However, the developer of this - original implementation was of the opinion that the last thing CLucene - needs is gratuitous features that exceed their required complexity and - haven't been rigorously tested. - */ - class TransactionalRAMDirectory: public RAMDirectory { - private: - typedef CL_NS(util)::CLSet FilenameSet; - FilenameSet filesToRemoveOnAbort; - - typedef CL_NS(util)::CLSet > TransFileMap; - TransFileMap filesToRestoreOnAbort; - - bool transOpen; - - void transResolved(); - bool archiveOrigFileIfNecessary(const char* name); - void unarchiveOrigFile(const char* name); - - protected: - bool doDeleteFile(const char* name); - - public: - TransactionalRAMDirectory(); - virtual ~TransactionalRAMDirectory(); - - bool transIsOpen() const; - void transStart(); - void transCommit(); - void transAbort(); - - // Constrained operations: - void renameFile(const char* from, const char* to); - IndexOutput* createOutput(const char* name); - - void close(); - }; - -CL_NS_END -#endif // ndef _lucene_store_TransactionalRAMDirectory_ diff -Nru clucene-core-0.9.21b/src/CLucene/util/Arrays.h clucene-core-2.3.3.4/src/CLucene/util/Arrays.h --- clucene-core-0.9.21b/src/CLucene/util/Arrays.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/Arrays.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_Arrays_ -#define _lucene_util_Arrays_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "VoidList.h" - -CL_NS_DEF(util) - class Arrays{ - public: - template - class _Arrays { - protected: - //used by binarySearch to check for equality - virtual bool equals(_type a,_type b) const = 0; - virtual int32_t compare(_type a,_type b) const = 0; - public: - virtual ~_Arrays(){ - } - - void sort(_type* a, int32_t alen, int32_t fromIndex, int32_t toIndex) const{ - CND_PRECONDITION(fromIndex < toIndex,"fromIndex >= toIndex"); - CND_PRECONDITION(fromIndex >= 0,"fromIndex < 0"); - - // First presort the array in chunks of length 6 with insertion - // sort. A mergesort would give too much overhead for this length. - for (int32_t chunk = fromIndex; chunk < toIndex; chunk += 6) - { - int32_t end = min(chunk + 6, toIndex); - for (int32_t i = chunk + 1; i < end; i++) - { - if (compare(a[i - 1], a[i]) > 0) - { - // not already sorted - int32_t j = i; - _type elem = a[j]; - do - { - a[j] = a[j - 1]; - j--; - } - while (j > chunk && compare(a[j - 1], elem) > 0); - a[j] = elem; - } - } - } - - int32_t len = toIndex - fromIndex; - // If length is smaller or equal 6 we are done. - if (len <= 6) - return; - - _type* src = a; - _type* dest = _CL_NEWARRAY(_type,alen); - _type* t = NULL; // t is used for swapping src and dest - - // The difference of the fromIndex of the src and dest array. - int32_t srcDestDiff = -fromIndex; - - // The merges are done in this loop - for (int32_t size = 6; size < len; size <<= 1) - { - for (int32_t start = fromIndex; start < toIndex; start += size << 1) - { - // mid is the start of the second sublist; - // end the start of the next sublist (or end of array). - int32_t mid = start + size; - int32_t end = min(toIndex, mid + size); - - // The second list is empty or the elements are already in - // order - no need to merge - if (mid >= end || compare(src[mid - 1], src[mid]) <= 0) - { - memcpy(dest + start + srcDestDiff, src+start, (end-start)*sizeof(_type)); - }// The two halves just need swapping - no need to merge - else if (compare(src[start], src[end - 1]) > 0) - { - memcpy(dest+end-size+srcDestDiff, src+start, size * sizeof(_type)); - memcpy(dest+start+srcDestDiff, src+mid, (end-mid) * sizeof(_type)); - - }else{ - // Declare a lot of variables to save repeating - // calculations. Hopefully a decent JIT will put these - // in registers and make this fast - int32_t p1 = start; - int32_t p2 = mid; - int32_t i = start + srcDestDiff; - - // The main merge loop; terminates as soon as either - // half is ended - while (p1 < mid && p2 < end) - { - dest[i++] = src[(compare(src[p1], src[p2]) <= 0 - ? p1++ : p2++)]; - } - - // Finish up by copying the remainder of whichever half - // wasn't finished. - if (p1 < mid) - memcpy(dest+i,src+p1, (mid-p1) * sizeof(_type)); - else - memcpy(dest+i,src+p2, (end-p2) * sizeof(_type)); - } - } - // swap src and dest ready for the next merge - t = src; - src = dest; - dest = t; - fromIndex += srcDestDiff; - toIndex += srcDestDiff; - srcDestDiff = -srcDestDiff; - } - - // make sure the result ends up back in the right place. Note - // that src and dest may have been swapped above, so src - // contains the sorted array. - if (src != a) - { - // Note that fromIndex == 0. - memcpy(a+srcDestDiff,src,toIndex * sizeof(_type)); - } - } - }; - }; - - template - class CLListEquals: - public CL_NS_STD(binary_function) - { - typedef typename class1::const_iterator _itr1; - typedef typename class2::const_iterator _itr2; - public: - CLListEquals(){ - } - bool equals( class1* val1, class2* val2 ) const{ - static _comparator comp; - if ( val1 == val2 ) - return true; - size_t size = val1->size(); - if ( size != val2->size() ) - return false; - - _itr1 itr1 = val1->begin(); - _itr2 itr2 = val2->begin(); - while ( --size >= 0 ){ - if ( !comp(*itr1,*itr2) ) - return false; - itr1++; - itr2++; - } - return true; - } - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/BitSet.cpp clucene-core-2.3.3.4/src/CLucene/util/BitSet.cpp --- clucene-core-0.9.21b/src/CLucene/util/BitSet.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/BitSet.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "BitSet.h" -#include "CLucene/store/Directory.h" - -CL_NS_USE(store) -CL_NS_DEF(util) - -BitSet::BitSet( const BitSet& copy ) : - _size( copy._size ), - _count(-1) -{ - int32_t len = (_size >> 3) + 1; - bits = _CL_NEWARRAY(uint8_t, len); - memcpy( bits, copy.bits, len ); -} - -BitSet::BitSet ( int32_t size ): - _size(size), - _count(-1) -{ - int32_t len = (_size >> 3) + 1; - bits = _CL_NEWARRAY(uint8_t, len); - memset(bits,0,len); -} - -BitSet::BitSet(CL_NS(store)::Directory* d, const char* name) { - _count=-1; - CL_NS(store)::IndexInput* input = d->openInput( name ); - try { - _size = input->readInt(); // read size - _count = input->readInt(); // read count - - bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits - input->readBytes(bits, (_size >> 3) + 1); // read bits - } _CLFINALLY ( - input->close(); - _CLDELETE(input ); - ); -} - -void BitSet::write(CL_NS(store)::Directory* d, const char* name) { - CL_NS(store)::IndexOutput* output = d->createOutput(name); - try { - output->writeInt(size()); // write size - output->writeInt(count()); // write count - output->writeBytes(bits, (_size >> 3) + 1); // write bits - } _CLFINALLY ( - output->close(); - _CLDELETE(output); - ); -} -BitSet::~BitSet(){ - _CLDELETE_ARRAY(bits); -} - -void BitSet::set(const int32_t bit, bool val){ - _count = -1; - - if (val) - bits[bit >> 3] |= 1 << (bit & 7); - else - bits[bit >> 3] &= ~(1 << (bit & 7)); - _count =-1; -} - -int32_t BitSet::size() const { - return _size; -} -int32_t BitSet::count(){ - // if the BitSet has been modified - if (_count == -1) { - static const uint8_t BYTE_COUNTS[] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8}; - - int32_t c = 0; - int32_t end = (_size >> 3) + 1; - for (int32_t i = 0; i < end; i++) - c += BYTE_COUNTS[bits[i]]; // sum bits per uint8_t - _count = c; - } - return _count; -} -BitSet* BitSet::clone() const { - return _CLNEW BitSet( *this ); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/util/BitSet.h clucene-core-2.3.3.4/src/CLucene/util/BitSet.h --- clucene-core-0.9.21b/src/CLucene/util/BitSet.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/BitSet.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_BitSet_ -#define _lucene_util_BitSet_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/store/Directory.h" - -CL_NS_DEF(util) -class BitSet:LUCENE_BASE { - int32_t _size; - int32_t _count; - uint8_t *bits; - -protected: - BitSet( const BitSet& copy ); - -public: - ///Create a bitset with the specified size - BitSet ( int32_t size ); - BitSet(CL_NS(store)::Directory* d, const char* name); - void write(CL_NS(store)::Directory* d, const char* name); - - ///Destructor for the bit set - ~BitSet(); - - ///get the value of the specified bit - inline bool get(const int32_t bit) const{ - return (bits[bit >> 3] & (1 << (bit & 7))) != 0; - } - - ///set the value of the specified bit - void set(const int32_t bit, bool val=true); - - ///returns the size of the bitset - int32_t size() const; - - /// Returns the total number of one bits in this BitSet. This is efficiently - /// computed and cached, so that, if the BitSet is not changed, no - /// recomputation is done for repeated calls. - int32_t count(); - BitSet *clone() const; -}; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/bufferedstream.h clucene-core-2.3.3.4/src/CLucene/util/bufferedstream.h --- clucene-core-0.9.21b/src/CLucene/util/bufferedstream.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/bufferedstream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,155 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef BUFFEREDSTREAM_H -#define BUFFEREDSTREAM_H - -#include "streambase.h" -#include "inputstreambuffer.h" -#include - -namespace jstreams { - -template -class BufferedInputStream : public StreamBase { -private: - bool finishedWritingToBuffer; - InputStreamBuffer buffer; - - void writeToBuffer(int32_t minsize); - int32_t read_(const T*& start, int32_t min, int32_t max); -protected: - /** - * This function must be implemented by the subclasses. - * It should write a maximum of @p space characters at the buffer - * position pointed to by @p start. If no more data is avaiable due to - * end of file, -1 should be returned. If an error occurs, the status - * should be set to Error, an error message should be set and the function - * must return -1. - **/ - virtual int32_t fillBuffer(T* start, int32_t space) = 0; - // this function might be useful if you want to reuse a bufferedstream - void resetBuffer() {printf("implement 'resetBuffer'\n");} - BufferedInputStream(); -public: - int32_t read(const T*& start, int32_t min, int32_t max); - int64_t reset(int64_t); - virtual int64_t skip(int64_t ntoskip); -}; - -template -BufferedInputStream::BufferedInputStream() { - finishedWritingToBuffer = false; -} - -template -void -BufferedInputStream::writeToBuffer(int32_t ntoread) { - int32_t missing = ntoread - buffer.avail; - int32_t nwritten = 0; - while (missing > 0 && nwritten >= 0) { - int32_t space; - space = buffer.makeSpace(missing); - T* start = buffer.readPos + buffer.avail; - nwritten = fillBuffer(start, space); - assert(StreamBase::status != Eof); - if (nwritten > 0) { - buffer.avail += nwritten; - missing = ntoread - buffer.avail; - } - } - if (nwritten < 0) { - finishedWritingToBuffer = true; - } -} -template -int32_t -BufferedInputStream::read(const T*& start, int32_t min, int32_t max) { - if (StreamBase::status == Error) return -2; - if (StreamBase::status == Eof) return -1; - - // do we need to read data into the buffer? - if (!finishedWritingToBuffer && min > buffer.avail) { - // do we have enough space in the buffer? - writeToBuffer(min); - if (StreamBase::status == Error) return -2; - } - - int32_t nread = buffer.read(start, max); - - BufferedInputStream::position += nread; - if (BufferedInputStream::position > BufferedInputStream::size - && BufferedInputStream::size > 0) { - // error: we read more than was specified in size - // this is an error because all dependent code might have been labouring - // under a misapprehension - BufferedInputStream::status = Error; - BufferedInputStream::error = "Stream is longer than specified."; - nread = -2; - } else if (BufferedInputStream::status == Ok && buffer.avail == 0 - && finishedWritingToBuffer) { - BufferedInputStream::status = Eof; - if (BufferedInputStream::size == -1) { - BufferedInputStream::size = BufferedInputStream::position; - } - // save one call to read() by already returning -1 if no data is there - if (nread == 0) nread = -1; - } - return nread; -} -template -int64_t -BufferedInputStream::reset(int64_t newpos) { - if (StreamBase::status == Error) return -2; - // check to see if we have this position - int64_t d = BufferedInputStream::position - newpos; - if (buffer.readPos - d >= buffer.start && -d < buffer.avail) { - BufferedInputStream::position -= d; - buffer.avail += (int32_t)d; - buffer.readPos -= d; - StreamBase::status = Ok; - } - return StreamBase::position; -} -template -int64_t -BufferedInputStream::skip(int64_t ntoskip) { - const T *begin; - int32_t nread; - int64_t skipped = 0; - while (ntoskip) { - int32_t step = (int32_t)((ntoskip > buffer.size) ?buffer.size :ntoskip); - nread = read(begin, 1, step); - if (nread <= 0) { - return skipped; - } - ntoskip -= nread; - skipped += nread; - } - return skipped; -} -} - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/dirent.cpp clucene-core-2.3.3.4/src/CLucene/util/dirent.cpp --- clucene-core-0.9.21b/src/CLucene/util/dirent.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/dirent.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,221 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Matt J. Weinstein -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" - -#if !defined(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H) -#include "dirent.h" - -DIR * -opendir (const char *szPath) -{ - DIR *nd; - char szFullPath[CL_MAX_PATH]; - - errno = 0; - - if (!szPath) - { - errno = EFAULT; - return NULL; - } - - if (szPath[0] == '\0') - { - errno = ENOTDIR; - return NULL; - } - - /* Attempt to determine if the given path really is a directory. */ - struct _stat rcs; - if ( _stat(szPath,&rcs) == -1) - { - /* call GetLastError for more error info */ - errno = ENOENT; - return NULL; - } - if (!(rcs.st_mode & _S_IFDIR)) - { - /* Error, entry exists but not a directory. */ - errno = ENOTDIR; - return NULL; - } - - /* Make an absolute pathname. */ - _realpath(szPath,szFullPath); - - /* Allocate enough space to store DIR structure and the complete - * directory path given. */ - //nd = (DIR *) malloc (sizeof (DIR) + _tcslen (szFullPath) + _tcslen (DIRENT_SLASH) + - // _tcslen (DIRENT_SEARCH_SUFFIX)+1); - nd = new DIR; - - if (!nd) - { - /* Error, out of memory. */ - errno = ENOMEM; - return NULL; - } - - /* Create the search expression. */ - strcpy (nd->dd_name, szFullPath); - - /* Add on a slash if the path does not end with one. */ - if (nd->dd_name[0] != '\0' && - nd->dd_name[strlen (nd->dd_name) - 1] != '/' && - nd->dd_name[strlen (nd->dd_name) - 1] != '\\') - { - strcat (nd->dd_name, DIRENT_SLASH); - } - - /* Add on the search pattern */ - strcat (nd->dd_name, DIRENT_SEARCH_SUFFIX); - - /* Initialize handle to -1 so that a premature closedir doesn't try - * to call _findclose on it. */ - nd->dd_handle = -1; - - /* Initialize the status. */ - nd->dd_stat = 0; - - /* Initialize the dirent structure. ino and reclen are invalid under - * Win32, and name simply points at the appropriate part of the - * findfirst_t structure. */ - //nd->dd_dir.d_ino = 0; - //nd->dd_dir.d_reclen = 0; - nd->dd_dir.d_namlen = 0; - nd->dd_dir.d_name = nd->dd_dta.name; - - return nd; -} - - -struct dirent * readdir (DIR * dirp) -{ - errno = 0; - - /* Check for valid DIR struct. */ - if (!dirp) - { - errno = EFAULT; - return NULL; - } - - if (dirp->dd_dir.d_name != dirp->dd_dta.name) - { - /* The structure does not seem to be set up correctly. */ - errno = EINVAL; - return NULL; - } - - bool bCallFindNext = true; - - if (dirp->dd_stat < 0) - { - /* We have already returned all files in the directory - * (or the structure has an invalid dd_stat). */ - return NULL; - } - else if (dirp->dd_stat == 0) - { - /* We haven't started the search yet. */ - /* Start the search */ - dirp->dd_handle = _findfirst (dirp->dd_name, &(dirp->dd_dta)); - - if (dirp->dd_handle == -1) - { - /* Whoops! Seems there are no files in that - * directory. */ - dirp->dd_stat = -1; - } - else - { - dirp->dd_stat = 1; - } - - /* Dont call _findnext first time. */ - bCallFindNext = false; - } - - while (dirp->dd_stat > 0) - { - if (bCallFindNext) - { - /* Get the next search entry. */ - if (_findnext (dirp->dd_handle, &(dirp->dd_dta))) - { - /* We are off the end or otherwise error. */ - _findclose (dirp->dd_handle); - dirp->dd_handle = -1; - dirp->dd_stat = -1; - return NULL; - } - else - { - /* Update the status to indicate the correct - * number. */ - dirp->dd_stat++; - } - } - - /* Successfully got an entry. Everything about the file is - * already appropriately filled in except the length of the - * file name. */ - dirp->dd_dir.d_namlen = strlen (dirp->dd_dir.d_name); - - bool bThisFolderOrUpFolder = dirp->dd_dir.d_name[0] == '.' && - (dirp->dd_dir.d_name[1] == 0 || (dirp->dd_dir.d_name[1] == '.' && dirp->dd_dir.d_name[2] == 0)); - - if (!bThisFolderOrUpFolder) - { - struct _stat buf; - char buffer[CL_MAX_DIR]; - size_t bl = strlen(dirp->dd_name)-strlen(DIRENT_SEARCH_SUFFIX); - strncpy(buffer,dirp->dd_name,bl); - buffer[bl]=0; - strcat(buffer, dirp->dd_dir.d_name); - if ( _stat(buffer,&buf) == 0 ) - { - /* Finally we have a valid entry. */ - return &dirp->dd_dir; - } - } - - /* Allow to find next file. */ - bCallFindNext = true; - } - - return NULL; -} - - - -int32_t -closedir (DIR * dirp) -{ - int32_t rc; - - errno = 0; - rc = 0; - - if (!dirp) - { - errno = EFAULT; - return -1; - } - - if (dirp->dd_handle != -1) - { - rc = _findclose (dirp->dd_handle); - } - - /* Delete the dir structure. */ - _CLVDELETE(dirp); - - return rc; -} -#endif //HAVE_DIRENT_H - diff -Nru clucene-core-0.9.21b/src/CLucene/util/dirent.h clucene-core-2.3.3.4/src/CLucene/util/dirent.h --- clucene-core-0.9.21b/src/CLucene/util/dirent.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/dirent.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Matt J. Weinstein -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef lucene_util_dirent_H -#define lucene_util_dirent_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#if !defined(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H) - -/** -\unit - * dirent.c - * - * Derived from DIRLIB.C by Matt J. Weinstein - * This note appears in the DIRLIB.H - * DIRLIB.H by M. J. Weinstein Released to public domain 1-Jan-89 - * - * Updated by Jeremy Bettis - * Significantly revised and rewinddir, seekdir and telldir added by Colin - * Cut down again & changed by Ben van Klinken - * Peters - * - */ - -/** dirent structure - used by the dirent.h directory iteration functions */ -struct dirent -{ - unsigned short d_namlen; /* Length of name in d_name. */ - char *d_name; /* File name. */ -}; - -/** DIR structure - used by the dirent.h directory iteration functions*/ -struct DIR -{ - /** disk transfer area for this dir */ - struct _finddata_t dd_dta; - - /* dirent struct to return from dir (NOTE: this makes this thread - * safe as long as only one thread uses a particular DIR struct at - * a time) */ - struct dirent dd_dir; - - /** _findnext handle */ - intptr_t dd_handle; - - /** - * Status of search: - * 0 = not started yet (next entry to read is first entry) - * -1 = off the end - * positive = 0 based index of next entry - */ - int32_t dd_stat; - - /** given path for dir with search pattern (struct is extended) */ - char dd_name[CL_MAX_DIR]; - -}; - -#define DIRENT_SEARCH_SUFFIX "*" -#define DIRENT_SLASH PATH_DELIMITERA - - -/** -* Returns a pointer to a DIR structure appropriately filled in to begin -* searching a directory. -*/ -DIR* opendir (const char* filespec); - -/** -* Return a pointer to a dirent structure filled with the information on the -* next entry in the directory. -*/ -struct dirent* readdir (DIR* dir); - -/** -* Frees up resources allocated by opendir. -*/ -int32_t closedir (DIR* dir); - - -#elif defined (_CL_HAVE_DIRENT_H) -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) - -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# if defined(_CL_HAVE_SYS_NDIR_H) -# include -# endif -# if defined(_CL_HHAVE_SYS_DIR_H) -# include -# endif -# if defined(_CL_HHAVE_NDIR_H) -# include -# endif - -#endif //HAVE_DIRENT_H -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/Equators.cpp clucene-core-2.3.3.4/src/CLucene/util/Equators.cpp --- clucene-core-0.9.21b/src/CLucene/util/Equators.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/Equators.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Equators.h" -CL_NS_DEF(util) - -bool Equals::Int32::operator()( const int32_t val1, const int32_t val2 ) const{ - return (val1)==(val2); -} - -bool Equals::Char::operator()( const char* val1, const char* val2 ) const{ - if ( val1 == val2 ) - return true; - return (strcmp( val1,val2 ) == 0); -} - -#ifdef _UCS2 -bool Equals::WChar::operator()( const wchar_t* val1, const wchar_t* val2 ) const{ - if ( val1 == val2 ) - return true; - return (_tcscmp( val1,val2 ) == 0); -} -#endif - - -//////////////////////////////////////////////////////////////////////////////// -// Comparors -//////////////////////////////////////////////////////////////////////////////// - -int32_t Compare::Int32::getValue() const{ return value; } -Compare::Int32::Int32(int32_t val){ - value = val; -} -Compare::Int32::Int32(){ - value = 0; -} -int32_t Compare::Int32::compareTo(void* o){ - try{ - Int32* other = (Int32*)o; - if (value == other->value) - return 0; - // Returns just -1 or 1 on inequality; doing math might overflow. - return value > other->value ? 1 : -1; - }catch(...){ - _CLTHROWA(CL_ERR_Runtime, "Couldnt compare types"); - } -} - -bool Compare::Int32::operator()( int32_t t1, int32_t t2 ) const{ - return t1 > t2 ? true : false; -} -size_t Compare::Int32::operator()( int32_t t ) const{ - return t; -} - - -float_t Compare::Float::getValue() const{ - return value; -} -Compare::Float::Float(float_t val){ - value = val; -} -int32_t Compare::Float::compareTo(void* o){ - try{ - Float* other = (Float*)o; - if (value == other->value) - return 0; - // Returns just -1 or 1 on inequality; doing math might overflow. - return value > other->value ? 1 : -1; - }catch(...){ - _CLTHROWA(CL_ERR_Runtime,"Couldnt compare types"); - } -} - - -bool Compare::Char::operator()( const char* val1, const char* val2 ) const{ - if ( val1==val2) - return false; - return (strcmp( val1,val2 ) < 0); -} -size_t Compare::Char::operator()( const char* val1) const{ - return CL_NS(util)::Misc::ahashCode(val1); -} - -#ifdef _UCS2 -bool Compare::WChar::operator()( const wchar_t* val1, const wchar_t* val2 ) const{ - if ( val1==val2) - return false; - bool ret = (_tcscmp( val1,val2 ) < 0); - return ret; -} -size_t Compare::WChar::operator()( const wchar_t* val1) const{ - return CL_NS(util)::Misc::whashCode(val1); -} -#endif - -const TCHAR* Compare::TChar::getValue() const{ return s; } -Compare::TChar::TChar(){ - s=NULL; -} -Compare::TChar::TChar(const TCHAR* str){ - this->s = str; -} -int32_t Compare::TChar::compareTo(void* o){ - try{ - TChar* os = (TChar*)o; - return _tcscmp(s,os->s); - }catch(...){ - _CLTHROWA(CL_ERR_Runtime,"Couldnt compare types"); - } - -} - -bool Compare::TChar::operator()( const TCHAR* val1, const TCHAR* val2 ) const{ - if ( val1==val2) - return false; - bool ret = (_tcscmp( val1,val2 ) < 0); - return ret; -} -size_t Compare::TChar::operator()( const TCHAR* val1) const{ - return CL_NS(util)::Misc::thashCode(val1); -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/util/Equators.h clucene-core-2.3.3.4/src/CLucene/util/Equators.h --- clucene-core-0.9.21b/src/CLucene/util/Equators.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/Equators.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,239 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_Equators_ -#define _lucene_util_Equators_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(util) - -//////////////////////////////////////////////////////////////////////////////// -// Equators -//////////////////////////////////////////////////////////////////////////////// -/** @internal */ -class Equals{ -public: - class Int32:public CL_NS_STD(binary_function) - { - public: - bool operator()( const int32_t val1, const int32_t val2 ) const; - }; - - class Char:public CL_NS_STD(binary_function) - { - public: - bool operator()( const char* val1, const char* val2 ) const; - }; -#ifdef _UCS2 - class WChar: public CL_NS_STD(binary_function) - { - public: - bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; - }; - class TChar: public WChar{ - }; -#else - class TChar: public Char{ - }; -#endif - - - template - class Void:public CL_NS_STD(binary_function) - { - public: - bool operator()( _cl* val1, _cl* val2 ) const{ - return val1==val2; - } - }; -}; - - -//////////////////////////////////////////////////////////////////////////////// -// Comparors -//////////////////////////////////////////////////////////////////////////////// -/** @internal */ -class Comparable:LUCENE_BASE{ -public: - virtual ~Comparable(){ - } - - virtual int32_t compareTo(void* o) = 0; -}; - -/** @internal */ -class Compare{ -public: - class _base - { // traits class for hash containers - public: - enum - { // parameters for hash table - bucket_size = 4, // 0 < bucket_size - min_buckets = 8 - }; // min_buckets = 2 ^^ N, 0 < N - - _base() - { - } - }; - - class Int32:public _base, public Comparable{ - int32_t value; - public: - int32_t getValue() const; - Int32(int32_t val); - Int32(); - int32_t compareTo(void* o); - bool operator()( int32_t t1, int32_t t2 ) const; - size_t operator()( int32_t t ) const; - }; - - - class Float:public Comparable{ - float_t value; - public: - float_t getValue() const; - Float(float_t val); - int32_t compareTo(void* o); - }; - - - class Char: public _base // - { - public: - bool operator()( const char* val1, const char* val2 ) const; - size_t operator()( const char* val1) const; - }; - -#ifdef _UCS2 - class WChar: public _base // - { - public: - bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; - size_t operator()( const wchar_t* val1) const; - }; -#endif - - class TChar: public _base, public Comparable{ - const TCHAR* s; - public: - const TCHAR* getValue() const; - - TChar(); - TChar(const TCHAR* str); - int32_t compareTo(void* o); - bool operator()( const TCHAR* val1, const TCHAR* val2 ) const; - size_t operator()( const TCHAR* val1) const; - }; - - - template - class Void:public _base // - { - public: - int32_t compareTo(_cl* o){ - if ( this == o ) - return o; - else - return this > o ? 1 : -1; - } - bool operator()( _cl* t1, _cl* t2 ) const{ - return t1 > t2 ? true : false; - } - size_t operator()( _cl* t ) const{ - return (size_t)t; - } - }; -}; - -//////////////////////////////////////////////////////////////////////////////// -// allocators -//////////////////////////////////////////////////////////////////////////////// -/** @internal */ -class Deletor{ -public: - - template - class Array{ - public: - static void doDelete(_kt* arr){ - _CLDELETE_LARRAY(arr); - } - }; - class tcArray{ - public: - static void doDelete(const TCHAR* arr){ - _CLDELETE_CARRAY(arr); - } - }; - class acArray{ - public: - static void doDelete(const char* arr){ - _CLDELETE_CaARRAY(arr); - } - }; - - class Unintern{ - public: - static void doDelete(TCHAR* arr); - }; - template - class Object{ - public: - static void doDelete(_kt* obj){ - _CLLDELETE(obj); - } - }; - template - class Void{ - public: - static void doDelete(_kt* obj){ - _CLVDELETE(obj); - } - }; - class Dummy{ - public: - static void doDelete(const void* nothing){ - //todo: remove all occurances where it hits this point - //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); - } - }; - class DummyInt32{ - public: - static void doDelete(const int32_t nothing){ - } - }; - class DummyFloat{ - public: - static void doDelete(const float_t nothing){ - } - }; - template - class ConstNullVal{ - public: - static void doDelete(const _type nothing){ - //todo: remove all occurances where it hits this point - //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); - } - }; - - template - class NullVal{ - public: - static void doDelete(_type nothing){ - //todo: remove all occurances where it hits this point - //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); - } - }; -}; -//////////////////////////////////////////////////////////////////////////////// - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/FastCharStream.cpp clucene-core-2.3.3.4/src/CLucene/util/FastCharStream.cpp --- clucene-core-0.9.21b/src/CLucene/util/FastCharStream.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/FastCharStream.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "FastCharStream.h" - -#include "CLucene/util/Reader.h" - -CL_NS_DEF(util) - -const int32_t FastCharStream::maxRewindSize = LUCENE_MAX_WORD_LEN*2; - - FastCharStream::FastCharStream(Reader* reader): - pos(0), - rewindPos(0), - resetPos(0), - col(1), - line(1), - input(reader) - { - input->mark(maxRewindSize); - } - FastCharStream::~FastCharStream(){ - } - void FastCharStream::readChar(TCHAR &c) { - try{ - int32_t r = input->read(); - if ( r == -1 ) - input = NULL; - c = r; - }catch(CLuceneError& err){ - if ( err.number() == CL_ERR_IO ) - input = 0; - throw err; - } - } - int FastCharStream::GetNext() - { - // printf("getnext\n"); - if (input == 0 ) // end of file - { - _CLTHROWA(CL_ERR_IO,"warning : FileReader.GetNext : Read TCHAR over EOS."); - } - // this is rather inefficient - // implementing the functions from the java version of - // charstream will be much more efficient. - ++pos; - if ( pos > resetPos + maxRewindSize && rewindPos == 0) { - // move the marker one position (~expensive) - resetPos = pos-(maxRewindSize/2); - if ( resetPos != input->reset(resetPos) ) - _CLTHROWA(CL_ERR_IO,"Unexpected reset() result"); - input->mark(maxRewindSize); - input->skip((maxRewindSize/2) - 1); - } - TCHAR ch; - readChar(ch); - - if (input == NULL) { // eof - return -1; - } - if (rewindPos == 0) { - col += 1; - if(ch == '\n') { - line++; - col = 1; - } - } else { - rewindPos--; - } - return ch; - } - - void FastCharStream::UnGet(){ -// printf("UnGet \n"); - if (input == 0) - return; - if ( pos == 0 ) { - _CLTHROWA(CL_ERR_IO,"error : No character can be UnGet"); - } - rewindPos++; - - input->reset(pos-1); - pos--; - } - - int FastCharStream::Peek() { - int c = GetNext(); - UnGet(); - return c; - } - - bool FastCharStream::Eos() const { - return input==NULL; - } - - int32_t FastCharStream::Column() const { - return col; - } - - int32_t FastCharStream::Line() const { - return line; - } -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/util/FastCharStream.h clucene-core-2.3.3.4/src/CLucene/util/FastCharStream.h --- clucene-core-0.9.21b/src/CLucene/util/FastCharStream.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/FastCharStream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_FastCharStream_ -#define _lucene_util_FastCharStream_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/Reader.h" - -CL_NS_DEF(util) - - /** Ported implementation of the FastCharStream class. */ - class FastCharStream:LUCENE_BASE - { - static const int32_t maxRewindSize; - int32_t pos; - int32_t rewindPos; - int64_t resetPos; - int32_t col; - int32_t line; - // read character from stream return false on error - void readChar(TCHAR &); - public: - Reader* input; - - /// Initializes a new instance of the FastCharStream class LUCENE_EXPORT. - FastCharStream(Reader* reader); - ~FastCharStream(); - - /// Returns the next TCHAR from the stream. - int GetNext(); - - void UnGet(); - - /// Returns the current top TCHAR from the input stream without removing it. - int Peek(); - - - /// Returns True if the end of stream was reached. - bool Eos() const; - - /// Gets the current column. - int32_t Column() const; - - /// Gets the current line. - int32_t Line() const; - }; -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/fileinputstream.cpp clucene-core-2.3.3.4/src/CLucene/util/fileinputstream.cpp --- clucene-core-0.9.21b/src/CLucene/util/fileinputstream.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/fileinputstream.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#include "jstreamsconfig.h" -#include "fileinputstream.h" -#include -#include -namespace jstreams { - -const int32_t FileInputStream::defaultBufferSize = 1048576; -FileInputStream::FileInputStream(const char *filepath, int32_t buffersize) { - // try to open the file for reading - file = fopen(filepath, "rb"); - this->filepath = filepath; - if (file == 0) { - // handle error - error = "Could not read file '"; - error += filepath; - error += "': "; - error += strerror(errno); - status = Error; - return; - } - // determine file size. if the stream is not seekable, the size will be -1 - fseek(file, 0, SEEK_END); - size = ftell(file); - fseek(file, 0, SEEK_SET); - - // if the file has size 0, make sure that it's really empty - // this is useful for filesystems like /proc that report files as size 0 - // for files that do contain content - if (size == 0) { - char dummy[1]; - size_t n = fread(dummy, 1, 1, file); - if (n == 1) { - size = -1; - fseek(file, 0, SEEK_SET); - } else { - fclose(file); - file = 0; - return; - } - } - - // allocate memory in the buffer - int32_t bufsize = (size <= buffersize) ?size+1 :buffersize; - mark(bufsize); -} -FileInputStream::~FileInputStream() { - if (file) { - if (fclose(file)) { - // handle error - error = "Could not close file '" + filepath + "'."; - } - } -} -int32_t -FileInputStream::fillBuffer(char* start, int32_t space) { - if (file == 0) return -1; - // read into the buffer - int32_t nwritten = fread(start, 1, space, file); - // check the file stream status - if (ferror(file)) { - error = "Could not read from file '" + filepath + "'."; - fclose(file); - file = 0; - status = Error; - return -1; - } - if (feof(file)) { - fclose(file); - file = 0; - } - return nwritten; -} -} diff -Nru clucene-core-0.9.21b/src/CLucene/util/fileinputstream.h clucene-core-2.3.3.4/src/CLucene/util/fileinputstream.h --- clucene-core-0.9.21b/src/CLucene/util/fileinputstream.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/fileinputstream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/** - * Copyright 2003-2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef FILEINPUTSTREAM_H -#define FILEINPUTSTREAM_H - -#include "bufferedstream.h" - -namespace jstreams { - -class FileInputStream : public BufferedInputStream { -private: - FILE *file; - std::string filepath; - -public: - static const int32_t defaultBufferSize; - FileInputStream(const char *filepath, int32_t buffersize=defaultBufferSize); - ~FileInputStream(); - int32_t fillBuffer(char* start, int32_t space); -}; - -} // end namespace jstreams - -#endif - diff -Nru clucene-core-0.9.21b/src/CLucene/util/googlesparsemap.h clucene-core-2.3.3.4/src/CLucene/util/googlesparsemap.h --- clucene-core-0.9.21b/src/CLucene/util/googlesparsemap.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/googlesparsemap.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -//note: you may be bound by the google license if you choose -//to compile your source code with the google sparsemap library -#ifndef _lucene_util_GoogleSparseMaps_H -#define _lucene_util_GoogleSparseMaps_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#ifdef _CL_HAVE_GOOGLE_DENSE_HASH_MAP - -#include - -CL_NS_DEF(util) - - -template -class SparseMapEquals{ - _Equals equals; -public: - bool operator()( _Type val1, _Type val2 ) const{ - if ( val1==val2 ) - return true; - else if ( val1 == NULL || val2 == NULL ) - return false; - else if ( val1 == (_Type)0x02 || val2 == (_Type)0x02 ) - return false; - return equals(val1,val2); - } -}; - -template -class CLHashMap:public __CLMap<_kt,_vt, - GOOGLE_NAMESPACE::dense_hash_map<_kt,_vt, _Hasher, SparseMapEquals<_kt,_Equals> >, - _KeyDeletor,_ValueDeletor> -{ - typedef __CLMap<_kt,_vt, - GOOGLE_NAMESPACE::dense_hash_map<_kt,_vt, _Hasher, SparseMapEquals<_kt,_Equals> >, - _KeyDeletor,_ValueDeletor> _this; -public: - CLHashMap ( bool deleteKey=false, bool deleteValue=false ) - { - GOOGLE_NAMESPACE::dense_hash_map<_kt,_vt, _Hasher, SparseMapEquals<_kt,_Equals> >::set_empty_key(NULL); - GOOGLE_NAMESPACE::dense_hash_map<_kt,_vt, _Hasher, SparseMapEquals<_kt,_Equals> >::set_deleted_key((_kt)0x02); - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } - ~CLHashMap(){ - - } -}; - - -CL_NS_END -#endif //LUCENE_USE_GOOGLEMAPS -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/inputstreambuffer.h clucene-core-2.3.3.4/src/CLucene/util/inputstreambuffer.h --- clucene-core-0.9.21b/src/CLucene/util/inputstreambuffer.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/inputstreambuffer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,126 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef INPUTSTREAMBUFFER_H -#define INPUTSTREAMBUFFER_H - -#include - -namespace jstreams { - -template -class InputStreamBuffer { -private: -public: - T* start; - int32_t size; - T* readPos; - int32_t avail; - - InputStreamBuffer(); - ~InputStreamBuffer(); - void setSize(int32_t size); - int32_t read(const T*& start, int32_t max=0); - - /** - * This function prepares the buffer for a new write. - * returns the number of available places. - **/ - int32_t makeSpace(int32_t needed); -}; - -template -InputStreamBuffer::InputStreamBuffer() { - readPos = start = 0; - size = avail = 0; -} -template -InputStreamBuffer::~InputStreamBuffer() { - free(start); -} -template -void -InputStreamBuffer::setSize(int32_t size) { - // store pointer information - int32_t offset = (int32_t)(readPos - start); - - // allocate memory in the buffer - if ( start == 0 ) - start = (T*)malloc(size*sizeof(T)); - else - start = (T*)realloc(start, size*sizeof(T)); - this->size = size; - - // restore pointer information - readPos = start + offset; -} -template -int32_t -InputStreamBuffer::makeSpace(int32_t needed) { - // determine how much space is available for writing - int32_t space = size - ((int32_t)(readPos - start)) - avail; - if (space >= needed) { - // there's enough space - return space; - } - - if (avail) { - if (readPos != start) { -// printf("moving\n"); - // move data to the start of the buffer - memmove(start, readPos, avail*sizeof(T)); - space += (int32_t)(readPos - start); - readPos = start; - } - } else { - // we may start writing at the start of the buffer - readPos = start; - space = size; - } - if (space >= needed) { - // there's enough space now - return space; - } - - // still not enough space, we have to allocate more -// printf("resize %i %i %i %i %i\n", avail, needed, space, size + needed - space, size); - setSize(size + needed - space); - return needed; -} -template -int32_t -InputStreamBuffer::read(const T*& start, int32_t max) { - start = readPos; - if (max <= 0 || max > avail) { - max = avail; - } - readPos += max; - avail -= max; - return max; -} - -} // end namespace jstreams - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/jstreamsconfig.h clucene-core-2.3.3.4/src/CLucene/util/jstreamsconfig.h --- clucene-core-0.9.21b/src/CLucene/util/jstreamsconfig.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/jstreamsconfig.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -//this is just a compatibility header for jstreams -#include "CLucene/StdHeader.h" diff -Nru clucene-core-0.9.21b/src/CLucene/util/Makefile.am clucene-core-2.3.3.4/src/CLucene/util/Makefile.am --- clucene-core-0.9.21b/src/CLucene/util/Makefile.am 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -utildir = $(lsrcdir)/util -utilhdir = $(includedir)/CLucene/util - -libclucene_la_SOURCES += $(utildir)/BitSet.cpp -libclucene_la_SOURCES += $(utildir)/dirent.cpp -libclucene_la_SOURCES += $(utildir)/Equators.cpp -libclucene_la_SOURCES += $(utildir)/FastCharStream.cpp -libclucene_la_SOURCES += $(utildir)/fileinputstream.cpp -libclucene_la_SOURCES += $(utildir)/MD5Digester.cpp -libclucene_la_SOURCES += $(utildir)/Misc.cpp -libclucene_la_SOURCES += $(utildir)/Reader.cpp -libclucene_la_SOURCES += $(utildir)/StringBuffer.cpp -libclucene_la_SOURCES += $(utildir)/StringIntern.cpp -libclucene_la_SOURCES += $(utildir)/ThreadLocal.cpp - -utilh_HEADERS = $(utildir)/*.h diff -Nru clucene-core-0.9.21b/src/CLucene/util/MD5Digester.cpp clucene-core-2.3.3.4/src/CLucene/util/MD5Digester.cpp --- clucene-core-0.9.21b/src/CLucene/util/MD5Digester.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/MD5Digester.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,337 +0,0 @@ -///////////////////////////////////////////////////////////////////////// -// MD5.cpp -// Implementation file for MD5 class -// -// This C++ Class implementation of the original RSA Data Security, Inc. -// MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle. -// All rights reserved. This software is a derivative of the "RSA Data -// Security, Inc. MD5 Message-Digest Algorithm" -// -// You may use this software free of any charge, but without any -// warranty or implied warranty, provided that you follow the terms -// of the original RSA copyright, listed below. -// -// Original RSA Data Security, Inc. Copyright notice -///////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -// rights reserved. -// -// License to copy and use this software is granted provided that it -// is identified as the "RSA Data Security, Inc. MD5 Message-Digest -// Algorithm" in all material mentioning or referencing this software -// or this function. -// License is also granted to make and use derivative works provided -// that such works are identified as "derived from the RSA Data -// Security, Inc. MD5 Message-Digest Algorithm" in all material -// mentioning or referencing the derived work. -// RSA Data Security, Inc. makes no representations concerning either -// the merchantability of this software or the suitability of this -// software for any particular purpose. It is provided "as is" -// without express or implied warranty of any kind. -// These notices must be retained in any copies of any part of this -// documentation and/or software. -///////////////////////////////////////////////////////////////////////// - -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#include "CLucene/StdHeader.h" -#include "MD5Digester.h" -CL_NS_DEF(util) - -static unsigned char PADDING[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - - -// PrintMD5: Converts a completed md5 digest into a char* string. -char* PrintMD5(uint8_t md5Digest[16]) -{ - char chBuffer[256]; - char chEach[10]; - int nCount; - - memset(chBuffer,0,256); - memset(chEach, 0, 10); - - for (nCount = 0; nCount < 16; nCount++) - { - sprintf(chEach, "%02x", md5Digest[nCount]); - strncat(chBuffer, chEach, sizeof(chEach)); - } - - return STRDUP_AtoA(chBuffer); -} - -// MD5String: Performs the MD5 algorithm on a char* string, returning -// the results as a char*. -char* MD5String(char* szString) -{ - int nLen = strlen(szString); - md5 alg; - - alg.Update((unsigned char*)szString, (unsigned int)nLen); - alg.Finalize(); - - return PrintMD5(alg.Digest()); - -} - -// MD5File: Performs the MD5 algorithm on a file (binar or text), -// returning the results as a char*. Returns NULL if it fails. -char* MD5File(char* szFilename) -{ - FILE* file; - md5 alg; - int nLen; - unsigned char chBuffer[1024]; - - try - { - memset(chBuffer, 0, 1024); - - if ((file = fopen (szFilename, "rb")) != NULL) - { - while ((nLen = fread (chBuffer, 1, 1024, file))) - alg.Update(chBuffer, nLen); - - alg.Finalize(); - - fclose (file); - - return PrintMD5(alg.Digest()); - } - } - catch(...) //todo: only catch IO Err??? - { - - } - - return NULL; // failed -} - - -// md5::Init -// Initializes a new context. -void md5::Init() -{ - memset(m_Count, 0, 2 * sizeof(uint32_t)); - - m_State[0] = 0x67452301; - m_State[1] = 0xefcdab89; - m_State[2] = 0x98badcfe; - m_State[3] = 0x10325476; -} - -// md5::Update -// MD5 block update operation. Continues an MD5 message-digest -// operation, processing another message block, and updating the -// context. -void md5::Update(uint8_t* chInput, uint32_t nInputLen) -{ - uint32_t i, index, partLen; - - // Compute number of bytes mod 64 - index = (unsigned int)((m_Count[0] >> 3) & 0x3F); - - // Update number of bits - if ((m_Count[0] += (nInputLen << 3)) < (nInputLen << 3)) - m_Count[1]++; - - m_Count[1] += (nInputLen >> 29); - - partLen = 64 - index; - - // Transform as many times as possible. - if (nInputLen >= partLen) - { - memcpy( &m_Buffer[index], chInput, partLen ); - Transform(m_Buffer); - - for (i = partLen; i + 63 < nInputLen; i += 64) - Transform(&chInput[i]); - - index = 0; - } - else - i = 0; - - // Buffer remaining input - memcpy( &m_Buffer[index], &chInput[i], nInputLen-i ); -} - -// md5::Finalize -// MD5 finalization. Ends an MD5 message-digest operation, writing -// the message digest and zeroizing the context. -void md5::Finalize() -{ - uint8_t bits[8]; - uint32_t index, padLen; - - // Save number of bits - Encode (bits, m_Count, 8); - - // Pad out to 56 mod 64 - index = (unsigned int)((m_Count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - Update(PADDING, padLen); - - // Append length (before padding) - Update (bits, 8); - - // Store state in digest - Encode (m_Digest, m_State, 16); - - memset(m_Count, 0, 2 * sizeof(uint32_t)); - memset(m_State, 0, 4 * sizeof(uint32_t)); - memset(m_Buffer,0, 64 * sizeof(uint8_t)); -} - -// md5::Transform -// MD5 basic transformation. Transforms state based on block. -void md5::Transform (uint8_t* block) -{ - uint32_t a = m_State[0], b = m_State[1], c = m_State[2], d = m_State[3], x[16]; - - Decode (x, block, 64); - - // Round 1 - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); - FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); - FF (c, d, a, b, x[ 2], S13, 0x242070db); - FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); - FF (d, a, b, c, x[ 5], S12, 0x4787c62a); - FF (c, d, a, b, x[ 6], S13, 0xa8304613); - FF (b, c, d, a, x[ 7], S14, 0xfd469501); - FF (a, b, c, d, x[ 8], S11, 0x698098d8); - FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); - FF (c, d, a, b, x[10], S13, 0xffff5bb1); - FF (b, c, d, a, x[11], S14, 0x895cd7be); - FF (a, b, c, d, x[12], S11, 0x6b901122); - FF (d, a, b, c, x[13], S12, 0xfd987193); - FF (c, d, a, b, x[14], S13, 0xa679438e); - FF (b, c, d, a, x[15], S14, 0x49b40821); - - // Round 2 - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); - GG (d, a, b, c, x[ 6], S22, 0xc040b340); - GG (c, d, a, b, x[11], S23, 0x265e5a51); - GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); - GG (d, a, b, c, x[10], S22, 0x2441453); - GG (c, d, a, b, x[15], S23, 0xd8a1e681); - GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); - GG (d, a, b, c, x[14], S22, 0xc33707d6); - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); - GG (b, c, d, a, x[ 8], S24, 0x455a14ed); - GG (a, b, c, d, x[13], S21, 0xa9e3e905); - GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); - GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); - - // Round 3 - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); - HH (d, a, b, c, x[ 8], S32, 0x8771f681); - HH (c, d, a, b, x[11], S33, 0x6d9d6122); - HH (b, c, d, a, x[14], S34, 0xfde5380c); - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); - HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); - HH (b, c, d, a, x[10], S34, 0xbebfbc70); - HH (a, b, c, d, x[13], S31, 0x289b7ec6); - HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); - HH (b, c, d, a, x[ 6], S34, 0x4881d05); - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); - HH (d, a, b, c, x[12], S32, 0xe6db99e5); - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); - HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); - - // Round 4 - II (a, b, c, d, x[ 0], S41, 0xf4292244); - II (d, a, b, c, x[ 7], S42, 0x432aff97); - II (c, d, a, b, x[14], S43, 0xab9423a7); - II (b, c, d, a, x[ 5], S44, 0xfc93a039); - II (a, b, c, d, x[12], S41, 0x655b59c3); - II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); - II (c, d, a, b, x[10], S43, 0xffeff47d); - II (b, c, d, a, x[ 1], S44, 0x85845dd1); - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); - II (d, a, b, c, x[15], S42, 0xfe2ce6e0); - II (c, d, a, b, x[ 6], S43, 0xa3014314); - II (b, c, d, a, x[13], S44, 0x4e0811a1); - II (a, b, c, d, x[ 4], S41, 0xf7537e82); - II (d, a, b, c, x[11], S42, 0xbd3af235); - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); - II (b, c, d, a, x[ 9], S44, 0xeb86d391); - - m_State[0] += a; - m_State[1] += b; - m_State[2] += c; - m_State[3] += d; - - memset(x, 0, sizeof(x)); -} - -// md5::Encode -// Encodes input (uint32_t) into output (uint8_t). Assumes nLength is -// a multiple of 4. -void md5::Encode(uint8_t* dest, uint32_t* src, uint32_t nLength) -{ - uint32_t i, j; - - CND_PRECONDITION(nLength % 4 == 0,"nLength % 4 != 0") - - for (i = 0, j = 0; j < nLength; i++, j += 4) - { - dest[j] = (uint8_t)(src[i] & 0xff); - dest[j+1] = (uint8_t)((src[i] >> 8) & 0xff); - dest[j+2] = (uint8_t)((src[i] >> 16) & 0xff); - dest[j+3] = (uint8_t)((src[i] >> 24) & 0xff); - } -} - -// md5::Decode -// Decodes input (uint8_t) into output (uint32_t). Assumes nLength is -// a multiple of 4. -void md5::Decode(uint32_t* dest, uint8_t* src, uint32_t nLength) -{ - uint32_t i, j; - - CND_PRECONDITION(nLength % 4 == 0, "nLength % 4 != 0"); - - for (i = 0, j = 0; j < nLength; i++, j += 4) - { - dest[i] = ((uint32_t)src[j]) | (((uint32_t)src[j+1])<<8) | - (((uint32_t)src[j+2])<<16) | (((uint32_t)src[j+3])<<24); - } -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/util/MD5Digester.h clucene-core-2.3.3.4/src/CLucene/util/MD5Digester.h --- clucene-core-0.9.21b/src/CLucene/util/MD5Digester.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/MD5Digester.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -///////////////////////////////////////////////////////////////////////// -// MD5.cpp -// Implementation file for MD5 class -// -// This C++ Class implementation of the original RSA Data Security, Inc. -// MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle. -// All rights reserved. This software is a derivative of the "RSA Data -// Security, Inc. MD5 Message-Digest Algorithm" -// -// You may use this software free of any charge, but without any -// warranty or implied warranty, provided that you follow the terms -// of the original RSA copyright, listed below. -// -// Original RSA Data Security, Inc. Copyright notice -///////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -// rights reserved. -// -// License to copy and use this software is granted provided that it -// is identified as the "RSA Data Security, Inc. MD5 Message-Digest -// Algorithm" in all material mentioning or referencing this software -// or this function. -// License is also granted to make and use derivative works provided -// that such works are identified as "derived from the RSA Data -// Security, Inc. MD5 Message-Digest Algorithm" in all material -// mentioning or referencing the derived work. -// RSA Data Security, Inc. makes no representations concerning either -// the merchantability of this software or the suitability of this -// software for any particular purpose. It is provided "as is" -// without express or implied warranty of any kind. -// These notices must be retained in any copies of any part of this -// documentation and/or software. -///////////////////////////////////////////////////////////////////////// - -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ - -#ifndef _lucene_util_MD5Digester_H -#define _lucene_util_MD5Digester_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -CL_NS_DEF(util) - -typedef unsigned short int uint2; - -char* PrintMD5(uint8_t md5Digest[16]); -char* MD5String(char* szString); -char* MD5File(char* szFilename); - -class md5 -{ -// Methods -public: - md5() { Init(); } - void Init(); - void Update(uint8_t* chInput, uint32_t nInputLen); - void Finalize(); - uint8_t* Digest() { return m_Digest; } - -private: - - void Transform(uint8_t* block); - void Encode(uint8_t* dest, uint32_t* src, uint32_t nLength); - void Decode(uint32_t* dest, uint8_t* src, uint32_t nLength); - - - inline uint32_t rotate_left(uint32_t x, uint32_t n) - { return ((x << n) | (x >> (32-n))); } - - inline uint32_t F(uint32_t x, uint32_t y, uint32_t z) - { return ((x & y) | (~x & z)); } - - inline uint32_t G(uint32_t x, uint32_t y, uint32_t z) - { return ((x & z) | (y & ~z)); } - - inline uint32_t H(uint32_t x, uint32_t y, uint32_t z) - { return (x ^ y ^ z); } - - inline uint32_t I(uint32_t x, uint32_t y, uint32_t z) - { return (y ^ (x | ~z)); } - - inline void FF(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) - { a += F(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } - - inline void GG(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) - { a += G(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } - - inline void HH(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) - { a += H(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } - - inline void II(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) - { a += I(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } - -// Data -private: - uint32_t m_State[4]; - uint32_t m_Count[2]; - uint8_t m_Buffer[64]; - uint8_t m_Digest[16]; - uint8_t m_Finalized; - -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/Misc.cpp clucene-core-2.3.3.4/src/CLucene/util/Misc.cpp --- clucene-core-0.9.21b/src/CLucene/util/Misc.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/Misc.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,260 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Misc.h" - -#ifdef _CL_TIME_WITH_SYS_TIME -# include -# include -#else -# if defined(_CL_HAVE_SYS_TIME_H) -# include -# else -# include -# endif -#endif - -#ifdef _CL_HAVE_SYS_TIMEB_H -# include -#endif - -CL_NS_DEF(util) - -size_t Misc::ahashCode(const char* str){ - // Compute the hash code using a local variable to be reentrant. - size_t hashCode = 0; - while ( *str != 0 ) - hashCode = hashCode * 31 + *str++; - return hashCode; -} -size_t Misc::ahashCode(const char* str, size_t len){ - // Compute the hash code using a local variable to be reentrant. - size_t hashCode = 0; - for (size_t i = 0; i class PriorityQueue:LUCENE_BASE { - private: - _type* heap; //(was object[]) - size_t _size; - bool dk; - size_t maxSize; - - void upHeap(){ - size_t i = _size; - _type node = heap[i]; // save bottom node (WAS object) - int32_t j = ((uint32_t)i) >> 1; - while (j > 0 && lessThan(node,heap[j])) { - heap[i] = heap[j]; // shift parents down - i = j; - j = ((uint32_t)j) >> 1; - } - heap[i] = node; // install saved node - } - void downHeap(){ - size_t i = 1; - _type node = heap[i]; // save top node - size_t j = i << 1; // find smaller child - size_t k = j + 1; - if (k <= _size && lessThan(heap[k], heap[j])) { - j = k; - } - while (j <= _size && lessThan(heap[j],node)) { - heap[i] = heap[j]; // shift up child - i = j; - j = i << 1; - k = j + 1; - if (k <= _size && lessThan(heap[k], heap[j])) { - j = k; - } - } - heap[i] = node; // install saved node - } - - protected: - PriorityQueue(){ - this->_size = 0; - this->dk = false; - this->heap = NULL; - this->maxSize = 0; - } - - // Determines the ordering of objects in this priority queue. Subclasses - // must define this one method. - virtual bool lessThan(_type a, _type b)=0; - - // Subclass constructors must call this. - void initialize(const int32_t maxSize, bool deleteOnClear){ - _size = 0; - dk = deleteOnClear; - int32_t heapSize = maxSize + 1; - heap = _CL_NEWARRAY(_type,heapSize); - this->maxSize = maxSize; - } - - public: - virtual ~PriorityQueue(){ - clear(); - _CLDELETE_ARRAY(heap); - } - - /** - * Adds an Object to a PriorityQueue in log(size) time. - * If one tries to add more objects than maxSize from initialize - * a RuntimeException (ArrayIndexOutOfBound) is thrown. - */ - void put(_type element){ - if ( _size>=maxSize ) - _CLTHROWA(CL_ERR_IndexOutOfBounds,"add is out of bounds"); - - ++_size; - heap[_size] = element; - upHeap(); - } - - /** - * Adds element to the PriorityQueue in log(size) time if either - * the PriorityQueue is not full, or not lessThan(element, top()). - * @param element - * @return true if element is added, false otherwise. - */ - bool insert(_type element){ - if(_size < maxSize){ - put(element); - return true; - }else if(_size > 0 && !lessThan(element, top())){ - if ( dk ){ - _valueDeletor::doDelete(heap[1]); - } - heap[1] = element; - adjustTop(); - return true; - }else - return false; - } - - /** - * Returns the least element of the PriorityQueue in constant time. - */ - _type top(){ - if (_size > 0) - return heap[1]; - else - return NULL; - } - - /** Removes and returns the least element of the PriorityQueue in log(size) - * time. - */ - _type pop(){ - if (_size > 0) { - _type result = heap[1]; // save first value - heap[1] = heap[_size]; // move last to first - - heap[_size] = (_type)0; // permit GC of objects - --_size; - downHeap(); // adjust heap - return result; - } else - return (_type)NULL; - } - - /**Should be called when the object at top changes values. Still log(n) - worst case, but it's at least twice as fast to

-		    { pq.top().change(); pq.adjustTop(); }
-		   
instead of
-		    { o = pq.pop(); o.change(); pq.push(o); }
-		   
- */ - void adjustTop(){ - downHeap(); - } - - - /** - * Returns the number of elements currently stored in the PriorityQueue. - */ - size_t size(){ - return _size; - } - - /** - * Removes all entries from the PriorityQueue. - */ - void clear(){ - for (size_t i = 1; i <= _size; ++i){ - if ( dk ){ - _valueDeletor::doDelete(heap[i]); - } - } - _size = 0; - } - }; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/Reader.cpp clucene-core-2.3.3.4/src/CLucene/util/Reader.cpp --- clucene-core-0.9.21b/src/CLucene/util/Reader.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/Reader.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "Reader.h" - -CL_NS_DEF(util) - -StringReader::StringReader ( const TCHAR* value ): - Reader(NULL,true){ - reader = new jstreams::StringReader(value); -} -StringReader::StringReader ( const TCHAR* value, const int32_t length ): - Reader(NULL,true){ - reader = new jstreams::StringReader(value,length); -} -StringReader::StringReader ( const TCHAR* value, const int32_t length, bool copyData ): - Reader(NULL,true){ - reader = new jstreams::StringReader(value,length, copyData); -} -StringReader::~StringReader(){ -} - - -FileReader::FileReader ( const char* path, const char* enc, - const int32_t cachelen, const int32_t /*cachebuff*/ ): - Reader(NULL, true) -{ - this->input = new jstreams::FileInputStream(path, cachelen); - this->reader = new SimpleInputStreamReader(this->input,enc); //(this is a jstream object) -} - -FileReader::~FileReader (){ - if (input) - delete input; -} -int32_t FileReader::read(const TCHAR*& start, int32_t _min, int32_t _max) { - return reader->read(start, _min, _max); -} -int64_t FileReader::mark(int32_t readlimit) { - return reader->mark(readlimit); -} -int64_t FileReader::reset(int64_t newpos) { - return reader->reset(newpos); -} - - - -SimpleInputStreamReader::SimpleInputStreamReader(jstreams::StreamBase *i, const char* enc) -{ - finishedDecoding = false; - input = i; - charbuf.setSize(262); - - if ( strcmp(enc,"ASCII")==0 ) - encoding = ASCII; -#ifdef _UCS2 - else if ( strcmp(enc,"UTF-8")==0 ) - encoding = UTF8; - else if ( strcmp(enc,"UCS-2LE")==0 ) - encoding = UCS2_LE; -#endif - else - _CLTHROWA(CL_ERR_IllegalArgument,"Unsupported encoding, use jstreams iconv based instead"); - - mark(262); - charsLeft = 0; -} -SimpleInputStreamReader::~SimpleInputStreamReader(){ - input = NULL; -} -int32_t SimpleInputStreamReader::decode(TCHAR* start, int32_t space){ - // decode from charbuf - const char *inbuf = charbuf.readPos; - const char *inbufend = charbuf.readPos + charbuf.avail; - TCHAR *outbuf = start; - const TCHAR *outbufend = outbuf + space; - - if ( encoding == ASCII ){ - while ( outbuf inbufend ){ - break; //character incomplete - }else{ - size_t rd = lucene_utf8towc(outbuf,inbuf,inbufend-inbuf); - if ( rd == 0 ){ - error = "Invalid multibyte sequence."; - status = jstreams::Error; - return -1; - }else{ - inbuf+=rd; - outbuf++; - } - } - } -#endif //_UCS2 - }else - _CLTHROWA(CL_ERR_Runtime,"Unexpected encoding"); - - if ( outbuf < outbufend ) { - //we had enough room to convert the entire input - if ( inbuf < inbufend ) { - // last character is incomplete - // move from inbuf to the end to the start of - // the buffer - memmove(charbuf.start, inbuf, inbufend-inbuf); - charbuf.readPos = charbuf.start; - charbuf.avail = inbufend-inbuf; - } else if ( outbuf < outbufend ) { //input sequence was completely converted - charbuf.readPos = charbuf.start; - charbuf.avail = 0; - if (input == NULL) { - finishedDecoding = true; - } - } - } else { - charbuf.readPos += charbuf.avail - (inbufend-inbuf); - charbuf.avail = inbufend-inbuf; - } - return outbuf-start; -} - -int32_t SimpleInputStreamReader::fillBuffer(TCHAR* start, int32_t space) { - // fill up charbuf - if (input && charbuf.readPos == charbuf.start) { - const char *begin; - int32_t numRead; - numRead = input->read(begin, 1, charbuf.size - charbuf.avail); - //printf("filled up charbuf\n"); - if (numRead < -1) { - error = input->getError(); - status = jstreams::Error; - input = 0; - return numRead; - } - if (numRead < 1) { - // signal end of input buffer - input = 0; - if (charbuf.avail) { - error = "stream ends on incomplete character"; - status = jstreams::Error; - } - return -1; - } - // copy data into other buffer - memmove( charbuf.start + charbuf.avail, begin, numRead * sizeof(char)); - charbuf.avail = numRead + charbuf.avail; - } - // decode - int32_t n = decode(start, space); - //printf("decoded %i\n", n); - return n; -} - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/util/Reader.h clucene-core-2.3.3.4/src/CLucene/util/Reader.h --- clucene-core-0.9.21b/src/CLucene/util/Reader.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/Reader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,138 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_Reader_ -#define _lucene_util_Reader_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "streambase.h" -#include "stringreader.h" -#include "fileinputstream.h" -#include "bufferedstream.h" - -CL_NS_DEF(util) -/** -* An inline wrapper that reads from Jos van den Oever's jstreams -*/ -class Reader:LUCENE_BASE { -typedef jstreams::StreamBase jsReader; -public: - bool deleteReader; - jsReader* reader; - - Reader(jsReader* reader, bool deleteReader){ - this->reader = reader; - this->deleteReader = deleteReader; - } - virtual ~Reader(){ - if ( deleteReader ) - delete reader; - reader = NULL; - } - inline int read(){ - const TCHAR*b; - int32_t nread = reader->read(b, 1,1); - if ( nread < -1 ) //if not eof - _CLTHROWA(CL_ERR_IO,reader->getError() ); - else if ( nread == -1 ) - return -1; - else - return b[0]; - } - /** - * Read at least 1 character, and as much as is conveniently available - */ - inline int32_t read(const TCHAR*& start){ - int32_t nread = reader->read(start,1,0); - if ( nread < -1 ) //if not eof - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return nread; - } - inline int32_t read(const TCHAR*& start, int32_t len){ - int32_t nread = reader->read(start, len, len); - if ( nread < -1 ) //if not eof - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return nread; - } - inline int64_t skip(int64_t ntoskip){ - int64_t skipped = reader->skip(ntoskip); - if ( skipped < 0 ) - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return skipped; - } - inline int64_t mark(int32_t readAheadlimit){ - int64_t pos = reader->mark(readAheadlimit); - if ( pos < 0 ) - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return pos; - } - int64_t reset(int64_t pos){ - int64_t r = reader->reset(pos); - if ( r < 0 ) - _CLTHROWA(CL_ERR_IO,reader->getError()); - else - return r; - } -}; - -///A helper class which constructs a the jstreams StringReader. -class StringReader: public Reader{ -public: - StringReader ( const TCHAR* value ); - StringReader ( const TCHAR* value, const int32_t length ); - StringReader ( const TCHAR* value, const int32_t length, bool copyData ); - ~StringReader(); -}; - -/** A very simple inputstreamreader implementation. For a -* more complete InputStreamReader, use the jstreams version -* located in the contrib package -*/ -class SimpleInputStreamReader: public jstreams::BufferedInputStream{ - int32_t decode(TCHAR* start, int32_t space); - int encoding; - enum{ - ASCII=1, - UTF8=2, - UCS2_LE=3 - }; - bool finishedDecoding; - jstreams::StreamBase* input; - int32_t charsLeft; - - jstreams::InputStreamBuffer charbuf; - int32_t fillBuffer(TCHAR* start, int32_t space); -public: - SimpleInputStreamReader(jstreams::StreamBase *i, const char* encoding); - ~SimpleInputStreamReader(); -}; - -/** -* A helper class which constructs a FileReader with a specified -* simple encodings, or a given inputstreamreader -*/ -class FileReader: public Reader{ - jstreams::FileInputStream* input; -public: - FileReader ( const char* path, const char* enc, - const int32_t cachelen = 13, - const int32_t cachebuff = 14 ); //todo: optimise these cache values - ~FileReader (); - - int32_t read(const TCHAR*& start, int32_t _min, int32_t _max); - int64_t mark(int32_t readlimit); - int64_t reset(int64_t); -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/streambase.h clucene-core-2.3.3.4/src/CLucene/util/streambase.h --- clucene-core-0.9.21b/src/CLucene/util/streambase.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/streambase.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,142 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef STREAMBASE_H -#define STREAMBASE_H - -#include - -#define INT32MAX 0x7FFFFFFFL - -namespace jstreams { - -enum StreamStatus { Ok, Eof, Error }; - -/** - * @short Base class for stream read access to many different file types. - * - * This class is based on the interface java.io.InputStream. It allows - * for uniform access to streamed resources. - * The main difference with the java equivalent is a performance improvement. - * When reading data, data is not copied into a buffer provided by the caller, - * but a pointer to the read data is provided. This makes this interface - * especially useful for deriving from it and implementing filterers or - * transformers. - */ -// java mapping: long=int64, int=int32, byte=uint8_t -template -class StreamBase { -protected: - int64_t size; - int64_t position; - std::string error; - StreamStatus status; -public: - StreamBase() :size(-1), position(0), status(Ok){ } - virtual ~StreamBase(){} - /** - * @brief Return a string representation of the last error. - * If no error has occurred, an empty string is returned. - **/ - const char* getError() const { return error.c_str(); } - StreamStatus getStatus() const { return status; } - /** - * @brief Get the current position in the stream. - * The value obtained from this function can be used to reset the stream. - **/ - int64_t getPosition() const { return position; } - /** - * @brief Return the size of the stream. - * If the size of the stream is unknown, -1 - * is returned. If the end of the stream has been reached the size is - * always known. - **/ - int64_t getSize() const { return size; } - /** - * @brief Reads characters from the stream and sets \a start to - * the first character that was read. - * - * If @p ntoread is @c 0, then at least one character will be read. - * - * @param start Pointer passed by reference that will be set to point to - * the retrieved array of characters. If the end of the stream - * is encountered or an error occurs, the value of @p start - * is undefined. - * @param min The number of characters to read from the stream. - * @param max The maximum number of characters to read from the stream. - * @return the number of characters that were read. If -1 is returned, the - * end of the stream has been reached. If -2 is returned, an error - * has occurred. - **/ - virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0; - /** - * Skip @param ntoskip bytes. Unless an error occurs or the end of file is - * encountered, this amount of bytes is skipped. - * This function returns new position in the stream. - **/ - virtual int64_t skip(int64_t ntoskip); - /** - * @brief Repositions this stream to given requested position. - * Reset is guaranteed to work after a successful call to read(), - * when the new position is in the range of the data returned by read(). - * This means that @p pos must lie between than the position - * corresponding to the start parameter (x) of the read function - * and the position corresponding to the last position in the returned - * buffer (x + nread). - **/ - virtual int64_t reset(int64_t pos) = 0; - int64_t mark(int32_t readlimit) { - int64_t p = getPosition(); - const T* ptr; - read(ptr, readlimit, -1); - return reset(p); - } -}; -#define SKIPSTEP 1024 -template -int64_t -StreamBase::skip(int64_t ntoskip) { - const T *begin; - int32_t nread; - int64_t skipped = 0; - while (ntoskip) { - int32_t step = (int32_t)((ntoskip > SKIPSTEP) ?SKIPSTEP :ntoskip); - nread = read(begin, 1, step); - if (nread < -1 ) { - // an error occurred - return nread; - } else if (nread < 1) { - ntoskip = 0; - } else { - skipped += nread; - ntoskip -= nread; - } - } - return skipped; -} - -} // end namespace jstreams - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/StringBuffer.cpp clucene-core-2.3.3.4/src/CLucene/util/StringBuffer.cpp --- clucene-core-0.9.21b/src/CLucene/util/StringBuffer.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/StringBuffer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,335 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "StringBuffer.h" -#include "Misc.h" - -CL_NS_DEF(util) - - StringBuffer::StringBuffer(TCHAR* buf,int32_t maxlen, const bool consumeBuffer){ - buffer = buf; - bufferLength = maxlen; - bufferOwner = !consumeBuffer; - len = 0; - } - StringBuffer::StringBuffer(){ - //Func - Constructor. Allocates a buffer with the default length. - //Pre - true - //Post - buffer of length bufferLength has been allocated - - //Initialize - bufferLength = LUCENE_DEFAULT_TOKEN_BUFFER_SIZE; - len = 0; - //Allocate a buffer of length bufferLength - buffer = _CL_NEWARRAY(TCHAR,bufferLength); - bufferOwner = true; - } - - StringBuffer::StringBuffer(const int32_t initSize){ - //Func - Constructor. Allocates a buffer of length initSize + 1 - //Pre - initSize > 0 - //Post - A buffer has been allocated of length initSize + 1 - - //Initialize the bufferLength to initSize + 1 The +1 is for the terminator '\0' - bufferLength = initSize + 1; - len = 0; - //Allocate a buffer of length bufferLength - buffer = _CL_NEWARRAY(TCHAR,bufferLength); - bufferOwner = true; - } - - StringBuffer::StringBuffer(const TCHAR* value){ - //Func - Constructor. - // Creates an instance of Stringbuffer containing a copy of the string value - //Pre - value != NULL - //Post - An instance of StringBuffer has been created containing the copy of the string value - - //Initialize the length of the string to be stored in buffer - len = (int32_t) _tcslen(value); - - //Calculate the space occupied in buffer by a copy of value - const int32_t occupiedLength = len + 1; - - // Minimum allocated buffer length is LUCENE_DEFAULT_TOKEN_BUFFER_SIZE. - bufferLength = (occupiedLength >= LUCENE_DEFAULT_TOKEN_BUFFER_SIZE - ? occupiedLength : LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); - - //Allocate a buffer of length bufferLength - buffer = _CL_NEWARRAY(TCHAR,bufferLength); - bufferOwner = true; - //Copy the string value into buffer - _tcsncpy(buffer, value, occupiedLength); - //Assert that the buffer has been terminated at the end of the string - CND_PRECONDITION (buffer[len] == '\0', "Buffer was not correctly terminated"); - } - - StringBuffer::~StringBuffer() { - // Func - Destructor - // Pre - true - // Post - Instanc has been destroyed - - if( bufferOwner ){ - _CLDELETE_CARRAY(buffer); - }else - buffer = NULL; - } - void StringBuffer::clear(){ - //Func - Clears the Stringbuffer and resets it to it default empty state - //Pre - true - //Post - pre(buffer) has been destroyed and a new one has been allocated - - //Destroy the current buffer if present - _CLDELETE_CARRAY(buffer); - - //Initialize - len = 0; - bufferLength = LUCENE_DEFAULT_TOKEN_BUFFER_SIZE; - //Allocate a buffer of length bufferLength - buffer = _CL_NEWARRAY(TCHAR,bufferLength); - } - - void StringBuffer::appendChar(const TCHAR character) { - //Func - Appends a single character - //Pre - true - //Post - The character has been appended to the string in the buffer - - //Check if the current buffer length is sufficient to have the string value appended - if (len + 1 > bufferLength){ - //Have the size of the current string buffer increased because it is too small - growBuffer(len + 1); - } - //Put character at position len which is the end of the string in the buffer - //Note that this action might overwrite the terminator of the string '\0', which - //is kind of tricky - buffer[len] = character; - //Increase the len by to represent the correct length of the string in the buffer - len++; - } - - void StringBuffer::append(const TCHAR* value) { - //Func - Appends a copy of the string value - //Pre - value != NULL - //Post - value has been copied and appended to the string in buffer - - append(value, _tcslen(value)); - } - void StringBuffer::append(const TCHAR* value, size_t appendedLength) { - //Func - Appends a copy of the string value - //Pre - value != NULL - // appendedLength contains the length of the string value which is to be appended - //Post - value has been copied and appended to the string in buffer - - //Check if the current buffer length is sufficient to have the string value appended - if (len + appendedLength + 1 > bufferLength){ - //Have the size of the current string buffer increased because it is too small - growBuffer(len + appendedLength + 1); - } - - //Copy the string value into the buffer at postion len - _tcsncpy(buffer + len, value, appendedLength); - - //Add the length of the copied string to len to reflect the new length of the string in - //the buffer (Note: len is not the bufferlength!) - len += appendedLength; - } - - void StringBuffer::appendInt(const int32_t value) { - //Func - Appends an integer (after conversion to a character string) - //Pre - true - //Post - The converted integer value has been appended to the string in buffer - - //instantiate a buffer of 30 charactes for the conversion of the integer - TCHAR buf[30]; - //Convert the integer value to a string buf using the radix 10 (duh) - _i64tot(value, buf, 10); - //Have the converted integer now stored in buf appended to the string in buffer - append(buf); - } - - void StringBuffer::appendFloat(const float_t value, const int32_t digits){ - //Func - Appends a float_t (after conversion to a character string) - //Pre - digits > 0. Indicates the minimum number of characters printed - //Post - The converted float_t value has been appended to the string in buffer - - //using sprintf("%f" was not reliable on other plaforms... we use a custom float convertor - //bvk: also, using sprintf and %f seems excessivelly slow - if(digits>8) - _CLTHROWA(CL_ERR_IllegalArgument,"Too many digits..."); - - //the maximum number of characters that int64 will hold is 23. so we need 23*2+2 - TCHAR buf[48]; //the buffer to hold - int64_t v = (int64_t)value; //the integer value of the float - _i64tot(v,buf,10); //add the whole number - - size_t len = 99-_tcslen(buf); //how many digits we have to work with? - size_t dig = len< (size_t)digits ? len : digits; - if ( dig > 0 ){ - _tcscat(buf,_T(".")); //add a decimal point - - int64_t remi=(int64_t)((value-v)*pow((float_t)10,(float_t)(dig+1))); //take the remainder and make a whole number - if ( remi<0 ) remi*=-1; - int64_t remadj=remi/10; - if ( remi-(remadj*10) >=5 ) - remadj++; //adjust remainder - - // add as many zeros as necessary between the decimal point and the - // significant part of the number. Fixes a bug when trying to print - // numbers that have zeros right after the decimal point - if (remadj) { - int32_t numZeros = dig - (int32_t)log10((float_t)remadj) - 1; - while(numZeros-- > 0) - _tcscat(buf,_T("0")); //add a zero before the decimal point - } - - _i64tot(remadj,buf+_tcslen(buf),10); //add the remainder - } - - append(buf); - } - - void StringBuffer::prepend(const TCHAR* value){ - //Func - Puts a copy of the string value infront of the current string in the StringBuffer - //Pre - value != NULL - //Post - The string in pre(buffer) has been shifted n positions where n equals the length of value. - // The string value was then copied to the beginning of stringbuffer - - prepend(value, _tcslen(value)); - } - - void StringBuffer::prepend(const TCHAR* value, const size_t prependedLength) { - //Func - Puts a copy of the string value in front of the string in the StringBuffer - //Pre - value != NULL - // prependedLength contains the length of the string value which is to be prepended - //Post - A copy of the string value is has been in front of the string in buffer - //todo: something is wrong with this code, i'm sure... it only grows (and therefore moves if the buffer is to small) - //Check if the current buffer length is sufficient to have the string value prepended - if (prependedLength + len + 1 > bufferLength){ - //Have the size of the current string buffer increased because it is too small - //Because prependedLength is passed as the second argument to growBuffer, - //growBuffer will have left the first prependedLength characters empty - //when it recopied buffer during reallocation. - growBuffer(prependedLength + len + 1, prependedLength); - } - - //Copy the string value into the buffer at postion 0 - _tcsncpy(buffer, value, prependedLength); - //Add the length of the copied string to len to reflect the new length of the string in - //the buffer (Note: len is not the bufferlength!) - len += prependedLength; - } - - int32_t StringBuffer::length() const{ - //Func - Returns the length of the string in the StringBuffer - //Pre - true - //Post - The length len of the string in the buffer has been returned - - return len; - } - TCHAR* StringBuffer::toString(){ - //Func - Returns a copy of the current string in the StringBuffer sized equal to the length of the string - // in the StringBuffer. - //Pre - true - //Post - The copied string has been returned - - //Instantiate a buffer equal to the length len + 1 - TCHAR* ret = _CL_NEWARRAY(TCHAR,len + 1); - if (ret){ - //Copy the string in buffer - _tcsncpy(ret, buffer, len); - //terminate the string - ret[len] = '\0'; - } - //return the the copy - return ret; - } - TCHAR* StringBuffer::getBuffer() { - //Func - '\0' terminates the buffer and returns its pointer - //Pre - true - //Post - buffer has been '\0' terminated and returned - - // Check if the current buffer is '\0' terminated - if (len == bufferLength){ - //Make space for terminator, if necessary. - growBuffer(len + 1); - } - //'\0' buffer so it can be returned properly - buffer[len] = '\0'; - - return buffer; - } - - void StringBuffer::reserve(const int32_t size){ - if ( bufferLength >= size ) - return; - bufferLength = size; - - //Allocate a new buffer of length bufferLength - TCHAR* tmp = _CL_NEWARRAY(TCHAR,bufferLength); - _tcsncpy(tmp, buffer, len); - tmp[len] = '\0'; - - //destroy the old buffer - if (buffer){ - _CLDELETE_CARRAY(buffer); - } - //Assign the new buffer tmp to buffer - buffer = tmp; - } - - void StringBuffer::growBuffer(const int32_t minLength) { - //Func - Has the buffer grown to a minimum length of minLength or bigger - //Pre - minLength >= len + 1 - //Post - The buffer has been grown to a minimum length of minLength or bigger - - growBuffer(minLength, 0); - } - void StringBuffer::growBuffer(const int32_t minLength, const int32_t skippingNInitialChars) { - //Func - Has the buffer grown to a minimum length of minLength or bigger and shifts the - // current string in buffer by skippingNInitialChars forward - //Pre - After growth, must have at least enough room for contents + terminator so - // minLength >= skippingNInitialChars + len + 1 - // skippingNInitialChars >= 0 - //Post - The buffer has been grown to a minimum length of minLength or bigger and - // if skippingNInitialChars > 0, the contents of the buffer has beeen shifted - // forward by skippingNInitialChars positions as the buffer is reallocated, - // leaving the first skippingNInitialChars uninitialized (presumably to be - // filled immediately thereafter by the caller). - - CND_PRECONDITION (skippingNInitialChars >= 0, "skippingNInitialChars is less than zero"); - CND_PRECONDITION (minLength >= skippingNInitialChars + len + 1,"skippingNInitialChars is not large enough"); - - //More aggressive growth strategy to offset smaller default buffer size: - if ( !bufferOwner ){ - if ( bufferLength 0 ){ - printf("ERROR: stringaPool still contains intern'd strings (refcounts):\n"); - __strintrntype::iterator itr = stringaPool.begin(); - while ( itr != stringaPool.end() ){ - printf(" %s (%d)\n",(itr->first), (itr->second)); - ++itr; - } - } - - if ( stringPool.size() > 0 ){ - printf("ERROR: stringPool still contains intern'd strings (refcounts):\n"); - __wcsintrntype::iterator itr = stringPool.begin(); - while ( itr != stringPool.end() ){ - _tprintf(_T(" %s (%d)\n"),(itr->first), (itr->second)); - ++itr; - } - } - #endif - } - - const TCHAR* CLStringIntern::intern(const TCHAR* str CL_FILELINEPARAM){ - if ( str == NULL ) - return NULL; - if ( str[0] == 0 ) - return LUCENE_BLANK_STRING; - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - __wcsintrntype::iterator itr = stringPool.find(str); - if ( itr==stringPool.end() ){ -#ifdef _UCS2 - TCHAR* ret = lucenewcsdup(str CL_FILELINEREF); -#else - TCHAR* ret = lucenestrdup(str CL_FILELINEREF); -#endif - stringPool[ret]= 1; - return ret; - }else{ - (itr->second)++; - return itr->first; - } - } - - bool CLStringIntern::unintern(const TCHAR* str){ - if ( str == NULL ) - return false; - if ( str[0] == 0 ) - return false; - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - __wcsintrntype::iterator itr = stringPool.find(str); - if ( itr != stringPool.end() ){ - if ( (itr->second) == 1 ){ - stringPool.removeitr(itr); - return true; - }else - (itr->second)--; - } - return false; - } - - const char* CLStringIntern::internA(const char* str CL_FILELINEPARAM){ - if ( str == NULL ) - return NULL; - if ( str[0] == 0 ) - return _LUCENE_BLANK_ASTRING; - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - __strintrntype::iterator itr = stringaPool.find(str); - if ( itr==stringaPool.end() ){ - char* ret = lucenestrdup(str CL_FILELINE); - stringaPool[ret] = 1; - return ret; - }else{ - (itr->second)++; - return itr->first; - } - } - - bool CLStringIntern::uninternA(const char* str){ - if ( str == NULL ) - return false; - if ( str[0] == 0 ) - return false; - - SCOPED_LOCK_MUTEX(THIS_LOCK) - - __strintrntype::iterator itr = stringaPool.find(str); - if ( itr!=stringaPool.end() ){ - if ( (itr->second) == 1 ){ - stringaPool.removeitr(itr); - return true; - }else - (itr->second)--; - } - return false; - } - - /* removed because of multi-threading problems... - __wcsintrntype::iterator CLStringIntern::internitr(const TCHAR* str CL_FILELINEPARAM){ - if ( str[0] == 0 ){ - if ( !blanksinitd ){ - CLStringIntern::stringPool.put(LUCENE_BLANK_STRING,1); - wblank=stringPool.find(str); - blanksinitd=true; - } - return wblank; - } - __wcsintrntype::iterator itr = stringPool.find(str); - if (itr==stringPool.end()){ -#ifdef _UCS2 - TCHAR* ret = lucenewcsdup(str CL_FILELINEREF); -#else - TCHAR* ret = lucenestrdup(str CL_FILELINEREF); -#endif - stringPool.put(ret,1); - return stringPool.find(str); - }else{ - (itr->second)++; - return itr; - } - } - bool CLStringIntern::uninternitr(__wcsintrntype::iterator itr){ - if ( itr!=stringPool.end() ){ - if ( itr==wblank ) - return false; - if ( (itr->second) == 1 ){ - stringPool.removeitr(itr); - return true; - }else - (itr->second)--; - } - return false; - } -*/ - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/util/StringIntern.h clucene-core-2.3.3.4/src/CLucene/util/StringIntern.h --- clucene-core-0.9.21b/src/CLucene/util/StringIntern.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/StringIntern.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_StringIntern_H -#define _lucene_util_StringIntern_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "VoidMap.h" -CL_NS_DEF(util) -typedef CL_NS(util)::CLHashMap __wcsintrntype; -typedef CL_NS(util)::CLHashMap __strintrntype; - - /** Functions for intern'ing strings. This - * is a process of pooling strings thus using less memory, - * and furthermore allows intern'd strings to be directly - * compared: - * string1==string2, rather than _tcscmp(string1,string2) - */ - class CLStringIntern{ - static __wcsintrntype stringPool; - static __strintrntype stringaPool; - STATIC_DEFINE_MUTEX(THIS_LOCK) - public: - /** - * Internalise the specified string. - * \return Returns a pointer to the internalised string - */ - static const char* internA(const char* str CL_FILELINEPARAM); - /** - * Uninternalise the specified string. Decreases - * the reference count and frees the string if - * reference count is zero - * \returns true if string was destroyed, otherwise false - */ - static bool uninternA(const char* str); - - /** - * Internalise the specified string. - * \return Returns a pointer to the internalised string - */ - static const TCHAR* intern(const TCHAR* str CL_FILELINEPARAM); - - /** - * Uninternalise the specified string. Decreases - * the reference count and frees the string if - * reference count is zero - * \returns true if string was destroyed, otherwise false - */ - static bool unintern(const TCHAR* str); - - static void shutdown(); - }; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/stringreader.h clucene-core-2.3.3.4/src/CLucene/util/stringreader.h --- clucene-core-0.9.21b/src/CLucene/util/stringreader.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/stringreader.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef STRINGREADER_H -#define STRINGREADER_H - -/** - * Author: Jos van den Oever - * Ben van Klinken - **/ - - -#include "streambase.h" - -namespace jstreams { - -template -class StringReader : public StreamBase { -private: - int64_t markpt; - T* data; - bool dataowner; - StringReader(const StringReader&); - void operator=(const StringReader&); -public: - StringReader(const T* value, int32_t length = -1, bool copy = true); - ~StringReader(); - int32_t read(const T*& start, int32_t min, int32_t max); - int64_t skip(int64_t ntoskip); - int64_t reset(int64_t pos); -}; - -typedef StringReader StringInputStream; - -template -StringReader::StringReader(const T* value, int32_t length, bool copy) - : markpt(0), dataowner(copy) { - if (length < 0) { - length = 0; - while (value[length] != '\0') { - length++; - } - } - StreamBase::size = length; - if (copy) { - data = new T[length+1]; - size_t s = (size_t)(length*sizeof(T)); - memcpy(data, value, s); - data[length] = 0; - } else { - // casting away const is ok, because we don't write anyway - data = (T*)value; - } -} -template -StringReader::~StringReader() { - if (dataowner) { - delete [] data; - } -} -template -int32_t -StringReader::read(const T*& start, int32_t min, int32_t max) { - int64_t left = StreamBase::size - StreamBase::position; - if (left == 0) { - StreamBase::status = Eof; - return -1; - } - if (min < 0) min = 0; - int32_t nread = (int32_t)((max > left || max < 1) ?left :max); - start = data + StreamBase::position; - StreamBase::position += nread; - if (StreamBase::position == StreamBase::size) { - StreamBase::status = Eof; - } - return nread; -} -template -int64_t -StringReader::skip(int64_t ntoskip) { - const T* start; - return read(start, ntoskip, ntoskip); -} -template -int64_t -StringReader::reset(int64_t newpos) { - if (newpos < 0) { - StreamBase::status = Ok; - StreamBase::position = 0; - } else if (newpos < StreamBase::size) { - StreamBase::status = Ok; - StreamBase::position = newpos; - } else { - StreamBase::position = StreamBase::size; - StreamBase::status = Eof; - } - return StreamBase::position; -} - -} // end namespace jstreams - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/subinputstream.h clucene-core-2.3.3.4/src/CLucene/util/subinputstream.h --- clucene-core-0.9.21b/src/CLucene/util/subinputstream.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/subinputstream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Jos van den Oever -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* This file is part of Strigi Desktop Search - * - * Copyright (C) 2006 Jos van den Oever - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ -#ifndef SUBINPUTSTREAM_H -#define SUBINPUTSTREAM_H - -#include "streambase.h" - -namespace jstreams { - -template -class SubInputStream : public StreamBase { -private: - const int64_t offset; - StreamBase *input; -public: - SubInputStream(StreamBase *input, int64_t size=-1); - int32_t read(const T*& start, int32_t min, int32_t max); - int64_t reset(int64_t newpos); - int64_t skip(int64_t ntoskip); -}; -template -SubInputStream::SubInputStream(StreamBase *i, int64_t length) - : offset(i->getPosition()), input(i) { - assert(length >= -1); -// printf("substream offset: %lli\n", offset); - StreamBase::size = length; -} - -template -int32_t SubInputStream::read(const T*& start, int32_t min, int32_t max) { - if (StreamBase::size != -1) { - const int64_t left = StreamBase::size - StreamBase::position; - if (left == 0) { - return -1; - } - // restrict the amount of data that can be read - if (max <= 0 || max > left) { - max = (int32_t)left; - } - if (min > max) min = max; - if (left < min) min = (int32_t)left; - } - int32_t nread = input->read(start, min, max); - if (nread < -1) { - fprintf(stderr, "substream too short.\n"); - StreamBase::status = Error; - StreamBase::error = input->getError(); - } else if (nread < min) { - if (StreamBase::size == -1) { - StreamBase::status = Eof; - if (nread > 0) { - StreamBase::position += nread; - StreamBase::size = StreamBase::position; - } - } else { -// fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! nread %i min %i max %i size %lli\n", nread, min, max, size); -// fprintf(stderr, "pos %lli parentpos %lli\n", position, input->getPosition()); -// fprintf(stderr, "status: %i error: %s\n", input->getStatus(), input->getError()); - // we expected data but didn't get enough so that's an error - StreamBase::status = Error; - StreamBase::error = "Premature end of stream\n"; - nread = -2; - } - } else { - StreamBase::position += nread; - if (StreamBase::position == StreamBase::size) { - StreamBase::status = Eof; - } - } - return nread; -} - -template -int64_t SubInputStream::reset(int64_t newpos) { -// fprintf(stderr, "subreset pos: %lli newpos: %lli offset: %lli\n", position, -// newpos, offset); - StreamBase::position = input->reset(newpos + offset); - if (StreamBase::position < offset) { - printf("###########\n"); - StreamBase::status = Error; - StreamBase::error = input->getError(); - } else { - StreamBase::position -= offset; - StreamBase::status = input->getStatus(); - } - return StreamBase::position; -} - -template -int64_t SubInputStream::skip(int64_t ntoskip) { -// printf("subskip pos: %lli ntoskip: %lli offset: %lli\n", position, ntoskip, offset); - if (StreamBase::size == StreamBase::position) { - StreamBase::status = Eof; - return -1; - } - if (StreamBase::size != -1) { - const int64_t left = StreamBase::size - StreamBase::position; - // restrict the amount of data that can be skipped - if (ntoskip > left) { - ntoskip = left; - } - } - int64_t skipped = input->skip(ntoskip); - if (input->getStatus() == Error) { - StreamBase::status = Error; - StreamBase::error = input->getError(); - } else { - StreamBase::position += skipped; - if (StreamBase::position == StreamBase::size) { - StreamBase::status = Eof; - } - } - return skipped; -} - -} //end namespace jstreams - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/ThreadLocal.cpp clucene-core-2.3.3.4/src/CLucene/util/ThreadLocal.cpp --- clucene-core-0.9.21b/src/CLucene/util/ThreadLocal.cpp 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/ThreadLocal.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene/StdHeader.h" -#include "CLucene/LuceneThreads.h" -#include "ThreadLocal.h" - -CL_NS_DEF(util) - -DEFINE_MUTEX(ThreadLocalBase::ThreadLocalBase_THIS_LOCK) - -ThreadLocalBase::ShutdownHooksType ThreadLocalBase::shutdownHooks(false); -ThreadLocalBase::ThreadLocalsType ThreadLocalBase::threadLocals(false,false); - -ThreadLocalBase::ThreadLocalBase(){ -} -ThreadLocalBase::~ThreadLocalBase(){ -} - -void ThreadLocalBase::UnregisterCurrentThread(){ - _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - - ThreadLocalsType::iterator itr = threadLocals.lower_bound(id); - ThreadLocalsType::iterator end = threadLocals.upper_bound(id); - while ( itr != end ){ - itr->second->setNull(); - ++itr; - } -} -void ThreadLocalBase::shutdown(){ - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - - ThreadLocalsType::iterator itr = threadLocals.begin(); - while ( itr != threadLocals.end() ){ - itr->second->setNull(); - ++itr; - } - - ShutdownHooksType::iterator itr2 = shutdownHooks.begin(); - while ( itr2 != shutdownHooks.end() ){ - ShutdownHook* hook = *itr2; - hook(false); - } -} -void ThreadLocalBase::registerShutdownHook(ShutdownHook* hook){ - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - shutdownHooks.insert(hook); -} - - -CL_NS_END diff -Nru clucene-core-0.9.21b/src/CLucene/util/ThreadLocal.h clucene-core-2.3.3.4/src/CLucene/util/ThreadLocal.h --- clucene-core-0.9.21b/src/CLucene/util/ThreadLocal.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/ThreadLocal.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_ThreadLocal_H -#define _lucene_util_ThreadLocal_H - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "CLucene/util/VoidMap.h" - -CL_NS_DEF(util) - -class ThreadLocalBase: LUCENE_BASE{ -public: - /** - * A hook called when CLucene is starting or shutting down, - * this can be used for setting up and tearing down static - * variables - */ - typedef void ShutdownHook(bool startup); - -protected: - STATIC_DEFINE_MUTEX(ThreadLocalBase_THIS_LOCK) - typedef CL_NS(util)::CLMultiMap<_LUCENE_THREADID_TYPE, ThreadLocalBase*, - CL_NS(util)::CLuceneThreadIdCompare, - CL_NS(util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, - CL_NS(util)::Deletor::ConstNullVal > ThreadLocalsType; - static ThreadLocalsType threadLocals; - //todo: using http://en.wikipedia.org/wiki/Thread-local_storage#Pthreads_implementation - //would work better... but lots of testing would be needed first... - typedef CL_NS(util)::CLSetList, - CL_NS(util)::Deletor::ConstNullVal > ShutdownHooksType; - static ShutdownHooksType shutdownHooks; - - ThreadLocalBase(); -public: - virtual ~ThreadLocalBase(); - - /** - * Call this function to clear the local thread data for this - * ThreadLocal. Calling set(NULL) does the same thing, except - * this function is virtual and can be called without knowing - * the template. - */ - virtual void setNull() = 0; - - /** - * If you want to clean up thread specific memory, then you should - * make sure this thread is called when the thread is not going to be used - * again. This will clean up threadlocal data which can contain quite a lot - * of data, so if you are creating lots of new threads, then it is a good idea - * to use this function, otherwise there will be many memory leaks. - */ - static void UnregisterCurrentThread(); - - /** - * Call this function to shutdown CLucene - */ - static void shutdown(); - - /** - * Add this function to the shutdown hook list. This function will be called - * when CLucene is shutdown. - */ - static void registerShutdownHook(ShutdownHook* hook); -}; - -template -class ThreadLocal: public ThreadLocalBase{ - typedef CL_NS(util)::CLSet<_LUCENE_THREADID_TYPE, T, - CL_NS(util)::CLuceneThreadIdCompare, - CL_NS(util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, - _deletor > LocalsType; - LocalsType locals; - DEFINE_MUTEX(locals_LOCK) -public: - ThreadLocal(); - ~ThreadLocal(); - T get(); - void setNull(); - void set(T t); -}; - -template -ThreadLocal::ThreadLocal(): - locals(false,true) -{ - //add this object to the base's list of threadlocals to be - //notified in case of UnregisterThread() - _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - threadLocals.insert( pair(id, this) ); -} - -template -ThreadLocal::~ThreadLocal(){ - //remove this object to the base's list of threadlocals - _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; - SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK) - - //remove all the thread local data for this object - locals.clear(); - - //remove this object from the ThreadLocalBase threadLocal list - ThreadLocalsType::iterator itr = threadLocals.lower_bound(id); - ThreadLocalsType::iterator end = threadLocals.upper_bound(id); - while ( itr != end ){ - if ( itr->second == this){ - threadLocals.erase(itr); - break; - } - ++itr; - } -} - -template -T ThreadLocal::get(){ - return locals.get(_LUCENE_CURRTHREADID); -} - -template -void ThreadLocal::setNull(){ - set(NULL); -} - -template -void ThreadLocal::set(T t){ - _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; - locals.remove(id); - if ( t != NULL ) - locals.insert( pair<_LUCENE_THREADID_TYPE,T>(id, t) ); -} - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/VoidList.h clucene-core-2.3.3.4/src/CLucene/util/VoidList.h --- clucene-core-0.9.21b/src/CLucene/util/VoidList.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/VoidList.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,175 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_VoidList_ -#define _lucene_util_VoidList_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - -#include "Equators.h" - -CL_NS_DEF(util) - -/** -* A template to encapsulate various list type classes -* @internal -*/ -template -class __CLList:public _base,LUCENE_BASE { -private: - bool dv; - typedef _base base; -public: - DEFINE_MUTEX(THIS_LOCK) - - typedef typename _base::const_iterator const_iterator; - typedef typename _base::iterator iterator; - - virtual ~__CLList(){ - clear(); - } - - __CLList ( const bool deleteValue ): - dv(deleteValue) - { - } - - void setDoDelete(bool val){ dv=val; } - - //sets array to the contents of this array. - //array must be size+1, otherwise memory may be overwritten - void toArray(_kt* into) const{ - int i=0; - for ( const_iterator itr=base::begin();itr!=base::end();itr++ ){ - into[i] = *itr; - i++; - } - into[i] = NULL; - } - - void set(int32_t i, _kt val) { - if ( dv ) - _valueDeletor::doDelete((*this)[i]); - (*this)[i] = val; - } - - //todo: check this - void delete_back(){ - if ( base::size() > 0 ){ - iterator itr = base::end(); - if ( itr != base::begin()) - itr --; - _kt key = *itr; - base::erase(itr); - if ( dv ) - _valueDeletor::doDelete(key); - } - } - - void delete_front(){ - if ( base::size() > 0 ){ - iterator itr = base::begin(); - _kt key = *itr; - base::erase(itr); - if ( dv ) - _valueDeletor::doDelete(key); - } - } - - void clear(){ - if ( dv ){ - iterator itr = base::begin(); - while ( itr != base::end() ){ - _valueDeletor::doDelete(*itr); - ++itr; - } - } - base::clear(); - } - - void remove(int32_t i, bool dontDelete=false){ - iterator itr=base::begin(); - itr+=i; - _kt key = *itr; - base::erase( itr ); - if ( dv && !dontDelete ) - _valueDeletor::doDelete(key); - } - void remove(iterator itr, bool dontDelete=false){ - _kt key = *itr; - base::erase( itr ); - if ( dv && !dontDelete ) - _valueDeletor::doDelete(key); - } - -}; - -//growable arrays of Objects (like a collection or list) -//a list, so can contain duplicates -//it grows in chunks... todo: check jlucene for initial size of array, and growfactors -template -class CLVector:public __CLList<_kt, CL_NS_STD(vector)<_kt> , _valueDeletor> -{ -public: - CLVector ( const bool deleteValue=true ): - __CLList<_kt, CL_NS_STD(vector)<_kt> , _valueDeletor>(deleteValue) - { - } -}; - -//An array-backed implementation of the List interface -//a list, so can contain duplicates -//*** a very simple list - use -//(This class is roughly equivalent to Vector, except that it is unsynchronized.) -#define CLArrayList CLVector -#define CLHashSet CLHashList - -//implementation of the List interface, provides access to the first and last list elements in O(1) -//no comparator is required... and so can contain duplicates -//a simple list with no comparator -//*** a very simple list - use -#ifdef LUCENE_DISABLE_HASHING - #define CLHashList CLSetList -#else - -template -class CLHashList:public __CLList<_kt, CL_NS_HASHING(hash_set)<_kt,_Comparator> , _valueDeletor> -{ -public: - CLHashList ( const bool deleteValue=true ): - __CLList<_kt, CL_NS_HASHING(hash_set)<_kt,_Comparator> , _valueDeletor>(deleteValue) - { - } -}; -#endif - -template -class CLLinkedList:public __CLList<_kt, CL_NS_STD(list)<_kt> , _valueDeletor> -{ -public: - CLLinkedList ( const bool deleteValue=true ): - __CLList<_kt, CL_NS_STD(list)<_kt> , _valueDeletor>(deleteValue) - { - } -}; -template -class CLSetList:public __CLList<_kt, CL_NS_STD(set)<_kt,_Comparator> , _valueDeletor> -{ -public: - CLSetList ( const bool deleteValue=true ): - __CLList<_kt, CL_NS_STD(set)<_kt,_Comparator> , _valueDeletor>(deleteValue) - { - } -}; - -CL_NS_END -#endif diff -Nru clucene-core-0.9.21b/src/CLucene/util/VoidMap.h clucene-core-2.3.3.4/src/CLucene/util/VoidMap.h --- clucene-core-0.9.21b/src/CLucene/util/VoidMap.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene/util/VoidMap.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,270 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef _lucene_util_VoidMap_ -#define _lucene_util_VoidMap_ - -#if defined(_LUCENE_PRAGMA_ONCE) -# pragma once -#endif - - -CL_NS_DEF(util) - -/** -* A template to encapsulate various map type classes -* @internal -*/ -template -class __CLMap:public _base,LUCENE_BASE { -private: - bool dk; - bool dv; - typedef _base base; -public: - DEFINE_MUTEX(THIS_LOCK) - - typedef typename _base::iterator iterator; - typedef typename _base::const_iterator const_iterator; - typedef CL_NS_STD(pair)<_kt, _vt> _pair; - - ///Default constructor for the __CLMap - __CLMap (): - dk(true), - dv(true) - { - } - - ///Deconstructor for the __CLMap - ~__CLMap (){ - clear(); - } - - void setDeleteKey(bool val){ dk = val; } - void setDeleteValue(bool val){ dv = val; } - - ///Construct the VoidMap and set the deleteTypes to the specified values - ///\param deleteKey if true then the key variable is deleted when an object is deleted - ///\param keyDelType delete the key variable using the specified type - ///\param deleteValue if true then the value variable is deleted when an object is deleted - ///\param valueDelType delete the value variable using the specified type - /*__CLMap ( const bool deleteKey, const bool deleteValue ): - dk(deleteKey), - dv(deleteValue) - { - }*/ - - ///checks to see if the specified key exists - ///\param k the key to check for - ///\returns true if the key exists - bool exists(_kt k)const{ - const_iterator itr = base::find(k); - bool ret = itr!=base::end(); - return ret; - } - - ///put the specified pair into the map. remove any old items first - ///\param k the key - ///\param v the value - void put(_kt k,_vt v){ - //todo: check if this is always right! - //must should look through code, for - //cases where map is not unique!!! - if ( dk || dv ) - remove(k); - - //todo: replacing the old item might be quicker... - - base::insert(_pair(k,v)); - } - - - ///using a non-const key, get a non-const value - _vt get( _kt k) const { - const_iterator itr = base::find(k); - if ( itr==base::end() ) - return NULL; - else - return itr->second; - } - ///using a non-const key, get the actual key - _kt getKey( _kt k) const { - const_iterator itr = base::find(k); - if ( itr==base::end() ) - return NULL; - else - return itr->first; - } - - void removeitr (iterator itr, const bool dontDeleteKey = false, const bool dontDeleteValue = false){ - //delete key&val first. This prevents potential loops (deleting object removes itself) - _kt key = itr->first; - _vt val = itr->second; - base::erase(itr); - - //keys & vals need to be deleted after erase, because the hashvalue is still needed - if ( dk && !dontDeleteKey ) - _KeyDeletor::doDelete(key); - if ( dv && !dontDeleteValue ) - _ValueDeletor::doDelete(val); - } - ///delete and optionally delete the specified key and associated value - void remove(_kt key, const bool dontDeleteKey = false, const bool dontDeleteValue = false){ - iterator itr = base::find(key); - if ( itr!=base::end() ) - removeitr(itr,dontDeleteKey,dontDeleteValue); - } - - ///clear all keys and values in the map - void clear(){ - if ( dk || dv ){ - iterator itr = base::begin(); - while ( itr!=base::end() ){ - #ifdef _CL_HAVE_EXT_HASH_MAP - removeitr(itr); - itr = base::begin(); - - #else - if ( dk ) - _KeyDeletor::doDelete(itr->first); - if ( dv ) - _ValueDeletor::doDelete(itr->second); - ++itr; - - #endif - } - } - base::clear(); - } -}; - -// makes no guarantees as to the order of the map -// cannot contain duplicate keys; each key can map to at most one value -#define CLHashtable CLHashMap - -#if defined(_CL_HAVE_GOOGLE_DENSE_HASH_MAP) -//do nothing, implementations is done later... -#elif defined(LUCENE_DISABLE_HASHING) - - //a CLSet with CLHashMap traits -template -class CLHashMap:public __CLMap<_kt,_vt, - CL_NS_STD(map)<_kt,_vt, _Compare>, - _KeyDeletor,_ValueDeletor> -{ - typedef typename CL_NS_STD(map)<_kt,_vt,_Compare> _base; - typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, _Compare>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; -#elif defined(_CL_HAVE_EXT_HASH_MAP) - //ext/hash_map syntax -//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized -template -class CLHashMap:public __CLMap<_kt,_vt, - CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher,_Equals>, - _KeyDeletor,_ValueDeletor> -{ - typedef __CLMap<_kt,_vt, CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher,_Equals>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; - -#else -//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized -template -class CLHashMap:public __CLMap<_kt,_vt, - CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher>, - _KeyDeletor,_ValueDeletor> -{ - typedef __CLMap<_kt,_vt, CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; -#endif - -//A collection that contains no duplicates -//does not guarantee that the order will remain constant over time -template -class CLSet:public __CLMap<_kt,_vt, - CL_NS_STD(map)<_kt,_vt, _Compare>, - _KeyDeletor,_ValueDeletor> -{ - typedef typename CL_NS_STD(map)<_kt,_vt,_Compare> _base; - typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, _Compare>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLSet ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; - - -//A collection that can contains duplicates -template -class CLMultiMap:public __CLMap<_kt,_vt, - CL_NS_STD(multimap)<_kt,_vt>, - _KeyDeletor,_ValueDeletor> -{ - typedef typename CL_NS_STD(multimap)<_kt,_vt> _base; - typedef __CLMap<_kt, _vt, CL_NS_STD(multimap)<_kt,_vt>, - _KeyDeletor,_ValueDeletor> _this; -public: - CLMultiMap ( const bool deleteKey=false, const bool deleteValue=false ) - { - _this::setDeleteKey(deleteKey); - _this::setDeleteValue(deleteValue); - } -}; - - -//*** need to create a class that allows duplicates - use -//#define CLSet __CLMap -CL_NS_END - -#ifdef _CL_HAVE_GOOGLE_DENSE_HASH_MAP -#include "GoogleSparseMap.h" -#endif - -#endif diff -Nru clucene-core-0.9.21b/src/CLucene.h clucene-core-2.3.3.4/src/CLucene.h --- clucene-core-0.9.21b/src/CLucene.h 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/CLucene.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -//Includes some standard headers for searching and indexing. -#ifndef _lucene_CLucene_ -#define _lucene_CLucene_ - -#include "CLucene/StdHeader.h" -#include "CLucene/debug/condition.h" -#include "CLucene/debug/mem.h" -#include "CLucene/index/IndexReader.h" -#include "CLucene/index/IndexWriter.h" -#include "CLucene/index/MultiReader.h" -#include "CLucene/index/Term.h" -#include "CLucene/search/IndexSearcher.h" -#include "CLucene/search/MultiSearcher.h" -#include "CLucene/search/DateFilter.h" -#include "CLucene/search/WildcardQuery.h" -#include "CLucene/search/FuzzyQuery.h" -#include "CLucene/search/PhraseQuery.h" -#include "CLucene/search/PrefixQuery.h" -#include "CLucene/search/RangeQuery.h" -#include "CLucene/search/BooleanQuery.h" -#include "CLucene/document/Document.h" -#include "CLucene/document/Field.h" -#include "CLucene/document/DateField.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/FSDirectory.h" -#include "CLucene/queryParser/QueryParser.h" -#include "CLucene/analysis/standard/StandardAnalyzer.h" -#include "CLucene/analysis/Analyzers.h" -#include "CLucene/util/Reader.h" - -#endif diff -Nru clucene-core-0.9.21b/src/contribs/bashscripts/findPatchThatBrokeUnitTest.sh clucene-core-2.3.3.4/src/contribs/bashscripts/findPatchThatBrokeUnitTest.sh --- clucene-core-0.9.21b/src/contribs/bashscripts/findPatchThatBrokeUnitTest.sh 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/bashscripts/findPatchThatBrokeUnitTest.sh 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,113 @@ +#! /bin/bash +# +# (c) Jos van den Oever +# modified by (c) Ben van Klinken revisions +if (( $? != 0 )); then exit; fi + +for REVISION in `cat revisions`; do + runTest $REVISION; +done + +echo No revision was found in which the unit test worked. + diff -Nru clucene-core-0.9.21b/src/contribs/bashscripts/simpleupdate.sh clucene-core-2.3.3.4/src/contribs/bashscripts/simpleupdate.sh --- clucene-core-0.9.21b/src/contribs/bashscripts/simpleupdate.sh 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/bashscripts/simpleupdate.sh 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,41 @@ +#! /bin/bash + +# this test checks if the strigicmd utility properly detect creation and +# deletion of a file + +function fail() { + echo Test failed + exit 1 +} + +STRIGICMD="`find -type f -name strigicmd -type f -perm -o+x` " +echo Using $STRIGICMD +NTHREADS=1 + +rm -r x y 2> /dev/null +mkdir x +touch x/y +touch x/z +echo == $STRIGICMD create -t clucene -d y x == +if ! $STRIGICMD create -j 1 -t clucene -d y x; then + fail +fi +echo == $STRIGICMD listFiles -t clucene -d y == +if ! $STRIGICMD listFiles -t clucene -d y; then + fail +fi +rm x/y +echo == $STRIGICMD update -j $NTHREADS -t clucene -d y x == +if ! $STRIGICMD update -j $NTHREADS -t clucene -d y x; then + fail +fi +echo == $STRIGICMD listFiles -t clucene -d y == +if ! $STRIGICMD listFiles -t clucene -d y; then + fail +fi +OUT=`$STRIGICMD listFiles -t clucene -d y` +if [[ $OUT == $'x\nx/z' ]]; then + echo Test succesfull + exit 0 +fi +fail diff -Nru clucene-core-0.9.21b/src/contribs/bashscripts/twofileupdate.sh clucene-core-2.3.3.4/src/contribs/bashscripts/twofileupdate.sh --- clucene-core-0.9.21b/src/contribs/bashscripts/twofileupdate.sh 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/bashscripts/twofileupdate.sh 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,42 @@ +#! /bin/bash + +# this test checks if the strigicmd utility properly detect creation and +# deletion of a file + +function fail() { + echo Test failed + exit 1 +} + +#VG="valgrind --db-attach=yes " + +rm -r x y +mkdir x +touch x/y +touch x/z +echo == src/strigicmd/strigicmd create -t clucene -d y x == +if ! $VG src/strigicmd/strigicmd create -t clucene -d y x; then + fail +fi +echo == src/strigicmd/strigicmd listFiles -t clucene -d y == +if ! $VG src/strigicmd/strigicmd listFiles -t clucene -d y; then + fail +fi +sleep 1 +touch x/y +touch x/z +echo == src/strigicmd/strigicmd update -t clucene -d y x == +exit +if ! $VG src/strigicmd/strigicmd update -t clucene -d y x; then + fail +fi +echo == src/strigicmd/strigicmd listFiles -t clucene -d y == +if ! $VG src/strigicmd/strigicmd listFiles -t clucene -d y; then + fail +fi +OUT=`$VG src/strigicmd/strigicmd listFiles -t clucene -d y` +if [[ $OUT == 'x/z' ]]; then + echo Test succesfull + exit 0 +fi +fail diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/Benchmarker.cpp clucene-core-2.3.3.4/src/contribs/benchmarker/Benchmarker.cpp --- clucene-core-0.9.21b/src/contribs/benchmarker/Benchmarker.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/Benchmarker.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "stdafx.h" +#include "Benchmarker.h" +#include "Unit.h" + +void Benchmarker::Add(Unit* unit){ + tests.push_back(unit); +} +Benchmarker::Benchmarker(void) +{ + reset(); +} +void Benchmarker::reset(){ + timerTotal.reset(); + testsCountTotal=0; + testsCountSuccess=0; + testsRunTotal=0; + testsRunSuccess=0; +} +bool Benchmarker::run(){ + timerTotal.start(); + printf( ">> running tests...\n" ); + for ( int i=0;istart(this); + unit->stop(); + } + printf( "\n>> benchmarker ran a total of %d test cases(%d successes) in %d ms\n", + testsCountTotal,testsCountSuccess, + (int32_t)timerTotal.interval() ); + timerTotal.stop(); + + return testsCountSuccess > 0; +} diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/Benchmarker.h clucene-core-2.3.3.4/src/contribs/benchmarker/Benchmarker.h --- clucene-core-0.9.21b/src/contribs/benchmarker/Benchmarker.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/Benchmarker.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,23 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#pragma once + +class Benchmarker +{ + lucene::util::CLVector tests; +public: + Timer timerTotal; + int testsCountTotal; + int testsCountSuccess; + int testsRunTotal; + int testsRunSuccess; + + Benchmarker(void); + void Add(Unit* unit); + bool run(); + void reset(); +}; diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/CMakeLists.txt clucene-core-2.3.3.4/src/contribs/benchmarker/CMakeLists.txt --- clucene-core-0.9.21b/src/contribs/benchmarker/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,20 @@ +PROJECT(clucene-benchmarker) + +INCLUDE (DefineOptions) +DEFINE_OPTIONS(EXTRA_OPTIONS EXTRA_LIBS) +ADD_DEFINITIONS(${EXTRA_OPTIONS}) + +file(GLOB_RECURSE benchmarker_HEADERS ${clucene-benchmarker_SOURCE_DIR}/*.h) + +SET(benchmarker_files + ./Benchmarker.cpp + ./Main.cpp + ./stdafx.cpp + ./Unit.cpp + + ./TestCLString.cpp + ${benchmarker_HEADERS} +) + +ADD_EXECUTABLE(cl_benchmarker EXCLUDE_FROM_ALL ${benchmarker_files} ) +TARGET_LINK_LIBRARIES(cl_benchmarker clucene-core clucene-shared ${EXTRA_LIBS}) diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/Main.cpp clucene-core-2.3.3.4/src/contribs/benchmarker/Main.cpp --- clucene-core-0.9.21b/src/contribs/benchmarker/Main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/Main.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,109 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "stdafx.h" +#include "TestCLString.h" + +#ifdef COMPILER_MSVC +#ifdef _DEBUG + #define CRTDBG_MAP_ALLOC + #include + #include +#endif +#endif + +#include + +#include +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_IO_H + #include +#endif + +using namespace std; +using namespace lucene::util; + +const char* cl_tempDir; +char clucene_data_location[1024]; + +int main( int argc, char** argv ){ + //Dumper Debug + #ifdef COMPILER_MSVC + #ifdef _DEBUG + _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );//| _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF ); + #endif + #endif + + Benchmarker bench; + TestCLString clstring; + bool ret_result = false; + + cl_tempDir = NULL; + if ( Misc::dir_Exists("/tmp") ) + cl_tempDir = "/tmp"; + if ( getenv("TEMP") != NULL ) + cl_tempDir = getenv("TEMP"); + else if ( getenv("TMP") != NULL ) + cl_tempDir = getenv("TMP"); + + char* tmp = _CL_NEWARRAY(char,strlen(cl_tempDir)+9); + strcpy(tmp,cl_tempDir); + strcat(tmp,"/clucene"); + _mkdir(tmp); + if ( Misc::dir_Exists(tmp) ) + cl_tempDir=tmp; + + + clucene_data_location[0]=0; + if ( CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION1 "/reuters-21578-index/segments") ) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION1); + else if ( CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION2 "/reuters-21578-index/segments") ) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION2); + else if ( CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION3 "/reuters-21578-index/segments") ) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION3); + else if ( getenv(CLUCENE_DATA_LOCATIONENV) != NULL ){ + strcpy(clucene_data_location,getenv(CLUCENE_DATA_LOCATIONENV)); + strcat(clucene_data_location,"/data/reuters-21578-index/segments"); + if ( CL_NS(util)::Misc::dir_Exists( clucene_data_location ) ){ + strcpy(clucene_data_location, getenv(CLUCENE_DATA_LOCATIONENV)); + strcat(clucene_data_location, "/data"); + }else + clucene_data_location[0]=0; + } + + /* first check that we are running the test for the correct position */ + //todo: make this configurable + if ( !*clucene_data_location ){ + fprintf(stderr,"%s must be run from a subdirectory of the application's root directory\n",argv[0]); + fprintf(stderr,"ensure that the test data exists in %s or %s or %s\n",CLUCENE_DATA_LOCATION1, CLUCENE_DATA_LOCATION2, CLUCENE_DATA_LOCATION3); + if ( getenv(CLUCENE_DATA_LOCATIONENV) != NULL ) + fprintf(stderr,"%s/data was also checked because of the " CLUCENE_DATA_LOCATIONENV " environment variable", getenv(CLUCENE_DATA_LOCATIONENV)); + ret_result = 1; + goto exit_point; + } + + + bench.Add(&clstring); + ret_result = bench.run(); + + + +exit_point: + _lucene_shutdown(); //clears all static memory + //print lucenebase debug + + return ret_result ? 0 : 1; + + //Debuggin techniques: + //For msvc, use this for breaking on memory leaks: + // _crtBreakAlloc + //for linux, use valgrind +} diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/stdafx.cpp clucene-core-2.3.3.4/src/contribs/benchmarker/stdafx.cpp --- clucene-core-0.9.21b/src/contribs/benchmarker/stdafx.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/stdafx.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,11 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +// stdafx.cpp : source file that includes just the standard includes +// demo.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/stdafx.h clucene-core-2.3.3.4/src/contribs/benchmarker/stdafx.h --- clucene-core-0.9.21b/src/contribs/benchmarker/stdafx.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/stdafx.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,37 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// +#ifndef _lucene_examples_benchmark_stdafx_ +#define _lucene_examples_benchmark_stdafx_ + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#include +//#include +#include + +#include "CLucene.h" +#include "CLucene/_clucene-config.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/RAMDirectory.h" + +#define CLUCENE_DATA_LOCATION1 "../../src/test/data/" +#define CLUCENE_DATA_LOCATION2 "../src/test/data/" +#define CLUCENE_DATA_LOCATION3 "../../../src/test/data/" +#define CLUCENE_DATA_LOCATIONENV "srcdir" + +extern const char* cl_tempDir; +extern char clucene_data_location[1024]; + +class Benchmarker; +#include "Timer.h" +#include "Unit.h" +#include "Benchmarker.h" + +#endif diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/TestCLString.cpp clucene-core-2.3.3.4/src/contribs/benchmarker/TestCLString.cpp --- clucene-core-0.9.21b/src/contribs/benchmarker/TestCLString.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/TestCLString.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,57 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "stdafx.h" + +using namespace lucene::util; +using namespace lucene::analysis; +using namespace lucene::document; +using namespace lucene::index; +using namespace lucene::store; + +int BenchmarkDocumentWriter(Timer* timerCase) +{ + RAMDirectory ram; + SimpleAnalyzer an; + IndexWriter* ndx = _CLNEW IndexWriter(&ram, &an, true); + ndx->setMaxFieldLength(0x7FFFFFFF); + + char fname[1024]; + strcpy(fname, clucene_data_location); + strcat(fname, "reuters-21578/feldman-cia-worldfactbook-data.txt"); + + timerCase->start(); + for ( int i=0;i<10;i++ ){ + + FileReader* reader = _CLNEW FileReader(fname, "ASCII"); + Document doc; + doc.add(*_CLNEW Field(_T("contents"),reader, Field::STORE_YES | Field::INDEX_TOKENIZED)); + + ndx->addDocument(&doc); + } + ndx->close(); + timerCase->stop(); + + ram.close(); + _CLDELETE(ndx); + return 0; +} + +int BenchmarkTermDocs(Timer* timerCase){ + IndexReader* reader = IndexReader::open("index"); + timerCase->start(); + TermEnum* en = reader->terms(); + while (en->next()){ + Term* term = en->term(); + _CLDECDELETE(term); + } + en->close(); + _CLDELETE(en); + timerCase->stop(); + reader->close(); + _CLDELETE(reader); + return 0; +} diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/TestCLString.h clucene-core-2.3.3.4/src/contribs/benchmarker/TestCLString.h --- clucene-core-0.9.21b/src/contribs/benchmarker/TestCLString.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/TestCLString.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,23 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#pragma once + +int BenchmarkDocumentWriter(Timer*); +int BenchmarkTermDocs(Timer* timerCase); + +class TestCLString:public Unit +{ +protected: + void runTests(){ + this->runTest("BenchmarkDocumentWriter",BenchmarkDocumentWriter,10); + //this->runTest("BenchmarkTermDocs",BenchmarkTermDocs,100); + } +public: + const char* getName(){ + return "TestCLString"; + } +}; diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/Timer.h clucene-core-2.3.3.4/src/contribs/benchmarker/Timer.h --- clucene-core-0.9.21b/src/contribs/benchmarker/Timer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/Timer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,48 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#pragma once + +class Timer{ +public: + int64_t startTime; + int64_t stopTime; + bool running; + Timer(){ + running=false; + reset(); + } + void reset(){ + startTime=0; + stopTime=0; + running=false; + } + void start(){ + startTime = lucene::util::Misc::currentTimeMillis(); + running=true; + } + int32_t split(){ + return lucene::util::Misc::currentTimeMillis()-startTime; + } + int32_t stop(){ + if ( running ){ + running=false; + stopTime = lucene::util::Misc::currentTimeMillis(); + } + return stopTime-startTime; + } + int32_t interval(){ + if (running) + return lucene::util::Misc::currentTimeMillis()-startTime; + else + return stopTime-startTime; + } + +}; + + +typedef int (*PTEST_ROUTINE)(Timer*); +typedef PTEST_ROUTINE LPTEST_ROUTINE; diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/Unit.cpp clucene-core-2.3.3.4/src/contribs/benchmarker/Unit.cpp --- clucene-core-0.9.21b/src/contribs/benchmarker/Unit.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/Unit.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,94 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "stdafx.h" +#include "Unit.h" + +Unit::Unit() +{ + this->bm=NULL; + testsCountTotal=0; + testsCountSuccess=0; + testsRunTotal=0; + testsRunSuccess=0; + timerCase.reset(); + timerTotal.reset(); +} + +void Unit::stop(){ + timerTotal.stop(); + bm=NULL; + + printf( "> unit ran a total of %d test cases(%d successes) in %d ms\n", + testsCountTotal,testsCountSuccess, + (int)timerTotal.interval() ); +} + +void Unit::start(Benchmarker* bm){ + this->bm = bm; + timerTotal.start(); + + printf( "> running unit %s\n", getName() ); + runTests(); +} +void Unit::runTest(const char* testName,LPTEST_ROUTINE func, int iterations){ + if ( bm == NULL ) + _CLTHROWA(CL_ERR_NullPointer, "Unit not started with benchmarker!"); + float avg=0; + int32_t min=0; + int32_t max=0; + int count=0; + Timer total; + bool success = false; + + try { + total.start(); + printf("\n > running %s %d times...", testName, iterations); + for ( int i=0;i max ) + max = t; + avg = (avg + t)/2; + } + + testsRunTotal++; + bm->testsRunTotal++; + if ( success ){ + testsRunSuccess++; + bm->testsRunSuccess++; + } + count++; + } + success = true; + }catch(CLuceneError& err){ + printf("\n > error occurred: %s\n", err.what()); + }catch(...){ + printf("\n > unexpected error occurred\n >"); + } + testsCountTotal++; + bm->testsCountTotal++; + if ( success ){ + testsCountSuccess++; + bm->testsCountSuccess++; + } + printf(" it took %d milliseconds",total.stop()); + + if ( iterations > 1 ){ + printf("\n\tmin:%d",min); + printf(" max:%d,",max); + printf(" avg:%0.3f milliseconds",avg); + } + printf("\n"); +} diff -Nru clucene-core-0.9.21b/src/contribs/benchmarker/Unit.h clucene-core-2.3.3.4/src/contribs/benchmarker/Unit.h --- clucene-core-0.9.21b/src/contribs/benchmarker/Unit.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/benchmarker/Unit.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,29 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#pragma once +#include "CLucene/util/Misc.h" + + +class Unit +{ +public: + void start(Benchmarker* benchmarker); + void stop(); + virtual const char* getName()=0; + Unit(); +protected: + Timer timerCase; + Timer timerTotal; + int testsCountTotal; + int testsCountSuccess; + int testsRunTotal; + int testsRunSuccess; + Benchmarker* bm; + + void runTest(const char* testName,LPTEST_ROUTINE func, int iterations); + virtual void runTests()=0; +}; diff -Nru clucene-core-0.9.21b/src/contribs/CMakeLists.txt clucene-core-2.3.3.4/src/contribs/CMakeLists.txt --- clucene-core-0.9.21b/src/contribs/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2 @@ +ADD_SUBDIRECTORY (contribs-lib-test EXCLUDE_FROM_ALL) +ADD_SUBDIRECTORY (benchmarker EXCLUDE_FROM_ALL) diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/CMakeLists.txt clucene-core-2.3.3.4/src/contribs/contribs-lib-test/CMakeLists.txt --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,33 @@ +PROJECT(clucene-contribs-lib-test) + +INCLUDE (DefineOptions) +DEFINE_OPTIONS(EXTRA_OPTIONS EXTRA_LIBS) +ADD_DEFINITIONS(${EXTRA_OPTIONS}) + +INCLUDE_DIRECTORIES( ${clucene-contribs-lib-test_SOURCE_DIR} ) +INCLUDE_DIRECTORIES( ${clucene-contribs-lib_SOURCE_DIR} ) + +file(GLOB_RECURSE test_HEADERS ${CMAKE_SOURCE_DIR}/test/*.h) + +SET(test_files + ./contribTests.cpp + ./TestHighlight.cpp + ./TestSnowball.cpp + ./TestStreams.cpp + ./TestUtf8.cpp + ./TestAnalysis.cpp + ./CuTest.cpp + ./testall.cpp + ${test_HEADERS} +) +IF ( USE_SHARED_OBJECT_FILES ) + GET_SHARED_FILES(clucene_shared_Files) +ENDIF ( USE_SHARED_OBJECT_FILES ) + +#todo: do glob header and include header files for IDE. +ADD_EXECUTABLE(cl_contribs-lib-test EXCLUDE_FROM_ALL ${clucene_shared_Files} ${test_files} ) + +#link the executable against the releavent clucene-shared library (if we aren't using the object files) +IF ( NOT USE_SHARED_OBJECT_FILES ) + TARGET_LINK_LIBRARIES(cl_contribs-lib-test clucene-core clucene-shared clucene-contribs-lib ${EXTRA_LIBS}) +ENDIF ( NOT USE_SHARED_OBJECT_FILES ) diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/contribTests.cpp clucene-core-2.3.3.4/src/contribs/contribs-lib-test/contribTests.cpp --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/contribTests.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/contribTests.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + +unittest tests[] = { + {"analysis", testanalysis}, + {"snowball", testsnowball}, + {"highlighter",testhighlighter}, + {"streams",teststreams}, + {"utf8",testutf8}, + {"LastTest", NULL} +}; diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/CuTest.cpp clucene-core-2.3.3.4/src/contribs/contribs-lib-test/CuTest.cpp --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/CuTest.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/CuTest.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,536 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CuTest.h" +#include +#include + +static int verbose = 0; +static int messyPrinting = 0; + +void CuInit(int argc, char *argv[]) { + int i; + + for (i = 0; i < argc; i++) { + if (!strcmp(argv[i], "-v")) { + verbose = 1; + } + if (!strcmp(argv[i], "-p")) { + messyPrinting = 1; + } + } +} + +/*-------------------------------------------------------------------------* + * CuTcs + *-------------------------------------------------------------------------*/ +TCHAR* CuStrAlloc(int size) { + TCHAR* n = (TCHAR*) malloc(sizeof (TCHAR) * (size)); + return n; +} + +TCHAR* CuTcsCopy(TCHAR* old) { + int len = _tcslen(old); + TCHAR* n = CuStrAlloc(len + 1); + _tcscpy(n, old); + return n; +} + +TCHAR* CuTcsCat(TCHAR* orig, TCHAR* add) { + int len = _tcslen(orig) + _tcslen(add); + TCHAR* n = CuStrAlloc(len + 1); + _tcscpy(n, orig); + _tcscat(n, add); + return n; +} + +/*-------------------------------------------------------------------------* + * CuString + *-------------------------------------------------------------------------*/ + +TCHAR* CuTcsAlloc(int size) { + TCHAR* n = (TCHAR*) malloc(sizeof (TCHAR) * (size)); + return n; +} + +TCHAR* CuTcsCopy(const TCHAR* old) { + int len = _tcslen(old); + TCHAR* n = CuTcsAlloc(len + 1); + _tcscpy(n, old); + return n; +} + +/*-------------------------------------------------------------------------* + * CuString + *-------------------------------------------------------------------------*/ + +void CuStringInit(CuString* str) { + str->length = 0; + str->size = STRING_MAX; + str->buffer = (TCHAR*) malloc(sizeof (TCHAR) * str->size); + str->buffer[0] = '\0'; +} + +CuString* CuStringNew(void) { + CuString* str = (CuString*) malloc(sizeof (CuString)); + str->length = 0; + str->size = STRING_MAX; + str->buffer = (TCHAR*) malloc(sizeof (TCHAR) * str->size); + str->buffer[0] = '\0'; + return str; +} + +void CuStringFree(CuString* str) { + free(str->buffer); + free(str); +} + +void CuStringResize(CuString* str, int newSize) { + str->buffer = (TCHAR*) realloc(str->buffer, sizeof (TCHAR) * newSize); + str->size = newSize; +} + +void CuStringAppend(CuString* str, const TCHAR* text) { + int length = _tcslen(text); + if (str->length + length + 1 >= str->size) + CuStringResize(str, str->length + length + 1 + STRING_INC); + str->length += length; + _tcscat(str->buffer, text); +} + +void CuStringAppendChar(CuString* str, TCHAR ch) { + TCHAR text[2]; + text[0] = ch; + text[1] = '\0'; + CuStringAppend(str, text); +} + +void CuStringAppendFormat(CuString* str, const TCHAR* format, ...) { + TCHAR buf[HUGE_STRING_LEN]; + va_list argp; + va_start(argp, format); + _vsntprintf(buf, HUGE_STRING_LEN, format, argp); + va_end(argp); + CuStringAppend(str, buf); +} + +void CuStringRead(CuString *str, TCHAR *path) { + path = NULL; + CU_TDUP(path, str->buffer); +} + +/*-------------------------------------------------------------------------* + * CuTest + *-------------------------------------------------------------------------*/ + +void CuTestInit(CuTest* t, const TCHAR* name, TestFunction function) { + t->name = CuTcsCopy(name); + t->notimpl = 0; + t->failed = 0; + t->ran = 0; + t->message = NULL; + t->function = function; + // t->jumpBuf = NULL; +} + +CuTest* CuTestNew(const TCHAR* name, TestFunction function) { + CuTest* tc = CU_ALLOC(CuTest); + CuTestInit(tc, name, function); + return tc; +} + +void CuTestDelete(CuTest* tst) { + free(tst->name); + if (tst->message != NULL) + free(tst->message); + free(tst); +} + +void CuNotImpl(CuTest* tc, const TCHAR* message) { + CuString* newstr = CuStringNew(); + CuStringAppend(newstr, message); + CuStringAppend(newstr, _T(" not implemented on this platform")); + tc->notimpl = 1; + CuMessage(tc, newstr->buffer); + CuStringFree(newstr); + // if (tc->jumpBuf != 0) longjmp(*(tc->jumpBuf), 0); +} + +void CuFail(CuTest* tc, const TCHAR* format, ...) { + tc->failed = 1; + + TCHAR buf[HUGE_STRING_LEN]; + va_list argp; + va_start(argp, format); + _vsntprintf(buf, HUGE_STRING_LEN, format, argp); + va_end(argp); + + // CuMessage(tc,buf); + _CLTHROWT(CL_ERR_Runtime, buf); +} + +void CuMessageV(CuTest* tc, const TCHAR* format, va_list& argp) { + TCHAR buf[HUGE_STRING_LEN]; + _vsntprintf(buf, HUGE_STRING_LEN, format, argp); + + TCHAR* old = tc->message; + if (messyPrinting) { + _tprintf(_T("%s"), buf); + } else { + if (old == NULL) { + tc->message = CuTcsCopy(buf); + } else { + tc->message = CuTcsCat(old, buf); + free(old); + } + } +} + +void CuMessage(CuTest* tc, const TCHAR* format, ...) { + va_list argp; + va_start(argp, format); + CuMessageV(tc, format, argp); + va_end(argp); +} + +void CuMessageA(CuTest* tc, const char* format, ...) { + va_list argp; + char buf[HUGE_STRING_LEN]; + TCHAR tbuf[HUGE_STRING_LEN]; + va_start(argp, format); + vsprintf(buf, format, argp); + va_end(argp); + + TCHAR* old = tc->message; + STRCPY_AtoT(tbuf, buf, HUGE_STRING_LEN); + if (messyPrinting) { + _tprintf(_T("%s"), buf); + } else { + if (old == NULL) { + tc->message = CuTcsCopy(tbuf); + } else { + tc->message = CuTcsCat(old, tbuf); + free(old); + } + } +} + +void CuAssert(CuTest* tc, const TCHAR* message, int condition) { + if (condition) return; + CuFail(tc, message); +} + +void CuAssertTrue(CuTest* tc, int condition) { + if (condition) return; + CuFail(tc, _T("assert failed")); +} + +void CuAssertStrEquals(CuTest* tc, const TCHAR* preMessage, const TCHAR* expected, const TCHAR* actual) { + CuString* message; + if (_tcscmp(expected, actual) == 0) return; + message = CuStringNew(); + CuStringAppend(message, preMessage); + CuStringAppend(message, _T(" : ")); + CuStringAppend(message, _T("expected\n---->\n")); + CuStringAppend(message, expected); + CuStringAppend(message, _T("\n<----\nbut saw\n---->\n")); + CuStringAppend(message, actual); + CuStringAppend(message, _T("\n<----")); + CuFail(tc, message->buffer); + CuStringFree(message); +} + +void CuAssertIntEquals(CuTest* tc, const TCHAR* preMessage, int expected, int actual) { + TCHAR buf[STRING_MAX]; + if (expected == actual) return; + _sntprintf(buf, STRING_MAX, _T("%s : expected <%d> but was <%d>"), preMessage, expected, actual); + CuFail(tc, buf); +} + +void CuAssertPtrEquals(CuTest* tc, const TCHAR* preMessage, const void* expected, const void* actual) { + TCHAR buf[STRING_MAX]; + if (expected == actual) return; + _sntprintf(buf, STRING_MAX, _T("%s : expected pointer <%p> but was <%p>"), preMessage, expected, actual); + CuFail(tc, buf); +} + +void CuAssertPtrNotNull(CuTest* tc, const TCHAR* preMessage, const void* pointer) { + TCHAR buf[STRING_MAX]; + if (pointer != NULL) return; + _sntprintf(buf, STRING_MAX, _T("%s : null pointer unexpected, but was <%p>"), preMessage, pointer); + CuFail(tc, buf); +} + +void CuTestRun(CuTest* tc) { + // jmp_buf buf; + // tc->jumpBuf = &buf; + // if (setjmp(buf) == 0) + // { + tc->ran = 1; + (tc->function)(tc); + // } + // tc->jumpBuf = 0; +} + +/*-------------------------------------------------------------------------* + * CuSuite + *-------------------------------------------------------------------------*/ + +void CuSuiteInit(CuSuite* testSuite, const TCHAR *name) { + testSuite->name = NULL; + CU_TDUP(testSuite->name, name); + testSuite->count = 0; + testSuite->failCount = 0; + testSuite->notimplCount = 0; + testSuite->timeTaken = 0; +} + +CuSuite* CuSuiteNew(const TCHAR *name) { + CuSuite* testSuite = CU_ALLOC(CuSuite); + CuSuiteInit(testSuite, name); + return testSuite; +} + +void CuSuiteDelete(CuSuite* suite) { + free(suite->name); + for (int i = 0; i < suite->count; i++) { + CuTestDelete(suite->list[i]); + } + free(suite); +} + +void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase) { + assert(testSuite->count < MAX_TEST_CASES); + testSuite->list[testSuite->count] = testCase; + testSuite->count++; +} + +void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2) { + int i; + for (i = 0; i < testSuite2->count; ++i) { + CuTest* testCase = testSuite2->list[i]; + CuSuiteAdd(testSuite, testCase); + } +} + +void CuSuiteRun(CuSuite* testSuite) { + int i; + uint64_t start = Misc::currentTimeMillis(); + for (i = 0; i < testSuite->count; ++i) { + CuTest* testCase = testSuite->list[i]; + try { + CuTestRun(testCase); + } catch (CLuceneError& err) { + testCase->failed = 1; + CuMessage(testCase, err.twhat()); + } + testSuite->timeTaken = Misc::currentTimeMillis() - start; + if (testCase->failed) { + testSuite->failCount += 1; + } + if (testCase->notimpl) { + testSuite->notimplCount += 1; + } + } +} + +void CuSuiteSummary(CuSuite* testSuite, CuString* summary, bool times) { + int i; + for (i = 0; i < testSuite->count; ++i) { + CuTest* testCase = testSuite->list[i]; + CuStringAppend(summary, testCase->failed ? _T("F") : + testCase->notimpl ? _T("N") : _T(".")); + } + if (times) { + int bufferLen = 25 - summary->length - 10; + for (int i = 0; i < bufferLen; i++) + CuStringAppend(summary, _T(" ")); + CuStringAppendFormat(summary, _T(" - %dms"), testSuite->timeTaken); + } + CuStringAppend(summary, _T("\n")); +} + +void CuSuiteOverView(CuSuite* testSuite, CuString* details) { + CuStringAppendFormat(details, _T("%d %s run: %d passed, %d failed, ") + _T("%d not implemented.\n"), + testSuite->count, + testSuite->count == 1 ? "test" : "tests", + testSuite->count - testSuite->failCount - + testSuite->notimplCount, + testSuite->failCount, testSuite->notimplCount); +} + +void CuSuiteDetails(CuSuite* testSuite, CuString* details) { + int i; + int failCount = 0; + + if (testSuite->failCount != 0 && verbose) { + CuStringAppendFormat(details, _T("\nFailed tests in %s:\n"), testSuite->name); + for (i = 0; i < testSuite->count; ++i) { + CuTest* testCase = testSuite->list[i]; + if (testCase->failed) { + failCount++; + CuStringAppendFormat(details, _T("%d) %s: %s\n"), + failCount, testCase->name, testCase->message); + } + } + } + if (testSuite->notimplCount != 0 && verbose) { + CuStringAppendFormat(details, _T("\nNot Implemented tests in %s:\n"), testSuite->name); + for (i = 0; i < testSuite->count; ++i) { + CuTest* testCase = testSuite->list[i]; + if (testCase->notimpl) { + failCount++; + CuStringAppendFormat(details, _T("%d) %s: %s\n"), + failCount, testCase->name, testCase->message); + } + } + } +} + +/*-------------------------------------------------------------------------* + * CuSuiteList + *-------------------------------------------------------------------------*/ + +CuSuiteList* CuSuiteListNew(const TCHAR *name) { + CuSuiteList* testSuite = CU_ALLOC(CuSuiteList); + testSuite->name = NULL; + CU_TDUP(testSuite->name, name); + testSuite->count = 0; + return testSuite; +} + +void CuSuiteListDelete(CuSuiteList* lst) { + free(lst->name); + for (int i = 0; i < lst->count; i++) { + CuSuiteDelete(lst->list[i]); + } + free(lst); +} + +void CuSuiteListAdd(CuSuiteList *suites, CuSuite *origsuite) { + assert(suites->count < MAX_TEST_CASES); + suites->list[suites->count] = origsuite; + suites->count++; +} + +void CuSuiteListRun(CuSuiteList* testSuite) { + int i; + for (i = 0; i < testSuite->count; ++i) { + CuSuite* testCase = testSuite->list[i]; + CuSuiteRun(testCase); + } +} + +static const TCHAR *genspaces(int i) { + TCHAR *str = (TCHAR*) malloc((i + 1) * sizeof (TCHAR)); + for (int j = 0; j < i; j++) + str[j] = _T(' '); + str[i] = '\0'; + return str; +} + +void CuSuiteListRunWithSummary(CuSuiteList* testSuite, bool verbose, bool times) { + int i; + + _tprintf(_T("%s:\n"), testSuite->name); + for (i = 0; i < testSuite->count; ++i) { + bool hasprinted = false; + CuSuite* testCase = testSuite->list[i]; + CuString *str = CuStringNew(); + + size_t len = _tcslen(testCase->name); + const TCHAR* spaces = len > 31 ? NULL : genspaces(31 - len); + _tprintf(_T(" %s:%s"), testCase->name, len > 31 ? _T("") : spaces); + free((void*) spaces); + fflush(stdout); + + CuSuiteRun(testCase); + if (verbose) { + for (int i = 0; i < testCase->count; i++) { + if (testCase->list[i]->ran) { + if (testCase->list[i]->message != NULL) { + if (!hasprinted) + printf("\n"); + _tprintf(_T(" %s:\n"), testCase->list[i]->name); + + TCHAR* msg = testCase->list[i]->message; + bool nl = true; + //write out message, indenting on new lines + while (*msg != '\0') { + if (nl) { + printf(" "); + nl = false; + } + if (*msg == '\n') + nl = true; + putc(*msg, stdout); + + msg++; + } + + if (testCase->list[i]->message[_tcslen(testCase->list[i]->message) - 1] != '\n') + printf("\n"); + hasprinted = true; + } + } + } + } + CuSuiteSummary(testCase, str, times); + if (hasprinted) + _tprintf(_T(" Result: %s\n"), str->buffer); + else + _tprintf(_T(" %s"), str->buffer); + + CuStringFree(str); + } + _tprintf(_T("\n")); +} + +int CuSuiteListDetails(CuSuiteList* testSuite, CuString* details) { + int i; + int failCount = 0; + int notImplCount = 0; + int count = 0; + + for (i = 0; i < testSuite->count; ++i) { + failCount += testSuite->list[i]->failCount; + notImplCount += testSuite->list[i]->notimplCount; + count += testSuite->list[i]->count; + } + CuStringAppendFormat(details, _T("%d %s run: %d passed, %d failed, ") + _T("%d not implemented.\n"), + count, + count == 1 ? _T("test") : _T("tests"), + count - failCount - notImplCount, + failCount, notImplCount); + + if (failCount != 0 && verbose) { + for (i = 0; i < testSuite->count; ++i) { + CuString *str = CuStringNew(); + CuSuite* testCase = testSuite->list[i]; + if (testCase->failCount) { + CuSuiteDetails(testCase, str); + CuStringAppend(details, str->buffer); + } + CuStringFree(str); + } + } + if (notImplCount != 0 && verbose) { + for (i = 0; i < testSuite->count; ++i) { + CuString *str = CuStringNew(); + CuSuite* testCase = testSuite->list[i]; + if (testCase->notimplCount) { + CuSuiteDetails(testCase, str); + CuStringAppend(details, str->buffer); + } + CuStringFree(str); + } + } + return failCount; +} + diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/CuTest.h clucene-core-2.3.3.4/src/contribs/contribs-lib-test/CuTest.h --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/CuTest.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/CuTest.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,122 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef CU_TEST_H +#define CU_TEST_H + +/* CuString */ + +TCHAR* CuWstrAlloc(int size); +TCHAR* CuWstrCopy(const TCHAR* old); + +#define CU_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE))) +#define CU_TDUP(dest,src) dest=((TCHAR*)malloc(sizeof(TCHAR)*_tcslen(src)+sizeof(TCHAR)));_tcscpy(dest,src); + +#define HUGE_STRING_LEN 8192 +#define STRING_MAX 256 +#define STRING_INC 256 + +#define CLUCENE_ASSERT(x) CuAssert(tc,_T("Assert Failed: ") _T(#x),x) + +typedef struct { + int length; + int size; + TCHAR* buffer; +} CuString; + +void CuStringInit(CuString* str); +CuString* CuStringNew(void); +void CuStringFree(CuString* str); +void CuStringRead(CuString* str, TCHAR* path); +void CuStringAppend(CuString* str, const TCHAR* text); +void CuStringAppendChar(CuString* str, TCHAR ch); +void CuStringAppendFormat(CuString* str, const TCHAR* format, ...); +void CuStringResize(CuString* str, int newSize); + +/* CuTest */ + +typedef struct CuTest CuTest; + +typedef void (*TestFunction)(CuTest *); + +struct CuTest { + TCHAR* name; + TestFunction function; + int notimpl; + int failed; + int ran; + TCHAR* message; + // jmp_buf *jumpBuf; +}; + + +void CuInit(int argc, char *argv[]); +void CuTestInit(CuTest* t, const TCHAR* name, TestFunction function); +CuTest* CuTestNew(const TCHAR* name, TestFunction function); +void CuTestDelete(CuTest* tst); +void CuFail(CuTest* tc, const TCHAR* format, ...); +void CuMessage(CuTest* tc, const TCHAR* message, ...); +void CuMessageV(CuTest* tc, const TCHAR* format, va_list& argp); +void CuMessageA(CuTest* tc, const char* format, ...); +void CuNotImpl(CuTest* tc, const TCHAR* message); +void CuAssert(CuTest* tc, const TCHAR* message, int condition); +void CuAssertTrue(CuTest* tc, int condition); +void CuAssertStrEquals(CuTest* tc, const TCHAR* preMessage, const TCHAR* expected, const TCHAR* actual); +void CuAssertIntEquals(CuTest* tc, const TCHAR* preMessage, int expected, int actual); +void CuAssertPtrEquals(CuTest* tc, const TCHAR* preMessage, const void* expected, const void* actual); +void CuAssertPtrNotNull(CuTest* tc, const TCHAR* preMessage, const void* pointer); + +void CuTestRun(CuTest* tc); + +/* CuSuite */ + +#define MAX_TEST_CASES 1024 + +#define SUITE_ADD_TEST(SUITE,TEST) CuSuiteAdd(SUITE, CuTestNew(_T(#TEST), TEST)) + +extern char clucene_data_location[1024]; + +typedef struct { + TCHAR *name; + int count; + CuTest * list[MAX_TEST_CASES]; + int failCount; + int notimplCount; + uint64_t timeTaken; +} CuSuite; + + +void CuSuiteInit(CuSuite* testSuite, const TCHAR* name); +CuSuite* CuSuiteNew(const TCHAR* name); +void CuSuiteDelete(CuSuite* suite); +void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase); +void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2); +void CuSuiteRun(CuSuite* testSuite); +void CuSuiteSummary(CuSuite* testSuite, CuString* summary, bool times); +void CuSuiteOverView(CuSuite* testSuite, CuString* details); +void CuSuiteDetails(CuSuite* testSuite, CuString* details); + +typedef struct { + TCHAR *name; + int count; + CuSuite * list[MAX_TEST_CASES]; +} CuSuiteList; + +struct unittest { + const char *testname; + CuSuite * (*func)(void); +}; + +CuSuiteList* CuSuiteListNew(const TCHAR* name); +void CuSuiteListDelete(CuSuiteList* lst); +void CuSuiteListAdd(CuSuiteList* testSuite, CuSuite *testCase); +void CuSuiteListRun(CuSuiteList* testSuite); +void CuSuiteListRunWithSummary(CuSuiteList* testSuite, bool verbose, bool times); +//void CuSuiteListSummary(CuSuiteList* testSuite, CuString* summary); +/* Print details of test suite results; returns total number of + * tests which failed. */ +int CuSuiteListDetails(CuSuiteList* testSuite, CuString* details); +#endif /* CU_TEST_H */ diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/testall.cpp clucene-core-2.3.3.4/src/contribs/contribs-lib-test/testall.cpp --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/testall.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/testall.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,216 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +//msvc test for memory leaks: +#ifdef _MSC_VER +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#endif +#endif + +#include "test.h" +#include + +#include +#ifdef _CL_HAVE_DIRECT_H +#include +#endif +#ifdef _CL_HAVE_SYS_STAT_H +#include +#endif +#ifdef _CL_HAVE_IO_H +#include +#endif + +const char* cl_tempDir; +bool cl_quiet; +char clucene_data_location[1024]; + +int main(int argc, char *argv[]) { +#ifdef _MSC_VER +#ifdef _DEBUG + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); //| _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF ); + _crtBreakAlloc = -1; +#endif +#endif + int ret_result = 0; + int i = 0; + int exclude = 0; + int list_provided = 0; + CuSuiteList *alltests = NULL; + CuString *output = CuStringNew(); + bool silent = false; + bool verbose = false; + bool times = true; + uint64_t startTime = 0; + + cl_tempDir = NULL; + if (Misc::dir_Exists("/tmp")) + cl_tempDir = "/tmp"; + if (getenv("TEMP") != NULL) + cl_tempDir = getenv("TEMP"); + else if (getenv("TMP") != NULL) + cl_tempDir = getenv("TMP"); + + char* tmp = _CL_NEWARRAY(char, strlen(cl_tempDir) + 9); + strcpy(tmp, cl_tempDir); + strcat(tmp, "/clucene"); + _mkdir(tmp); + if (Misc::dir_Exists(tmp)) + cl_tempDir = tmp; + + clucene_data_location[0] = 0; + if (CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION1 "/reuters-21578-index/segments")) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION1); + else if (CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION2 "/reuters-21578-index/segments")) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION2); + else if (CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION3 "/reuters-21578-index/segments")) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION3); + else if (getenv(CLUCENE_DATA_LOCATIONENV) != NULL) { + strcpy(clucene_data_location, getenv(CLUCENE_DATA_LOCATIONENV)); + strcat(clucene_data_location, "/data/reuters-21578-index/segments"); + if (CL_NS(util)::Misc::dir_Exists(clucene_data_location)) { + strcpy(clucene_data_location, getenv(CLUCENE_DATA_LOCATIONENV)); + strcat(clucene_data_location, "/data"); + } else + clucene_data_location[0] = 0; + } + + /* first check that we are running the test for the correct position */ + //todo: make this configurable + if (!*clucene_data_location) { + fprintf(stderr, "%s must be run from a subdirectory of the application's root directory\n", argv[0]); + fprintf(stderr, "ensure that the test data exists in %s or %s or %s\n", CLUCENE_DATA_LOCATION1, CLUCENE_DATA_LOCATION2, CLUCENE_DATA_LOCATION3); + if (getenv(CLUCENE_DATA_LOCATIONENV) != NULL) + fprintf(stderr, "%s/data was also checked because of the " CLUCENE_DATA_LOCATIONENV " environment variable", getenv(CLUCENE_DATA_LOCATIONENV)); + ret_result = 1; + goto exit_point; + } + + CuInit(argc, argv); + + /* see if we're in exclude mode, see if list of testcases provided */ + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help") || !strcmp(argv[i], "/?")) { + printf("%s [-l list] [-q quiet] [-v verbose] [-t show times] [-p printf messages immediatelly] [-x exclude] [tests...]\n", argv[0]); + goto exit_point; + } + if (!strcmp(argv[i], "-v")) { + verbose = true; + continue; + } + if (!strcmp(argv[i], "-p")) { //used in CuInit + continue; + } + if (!strcmp(argv[i], "-q")) { + silent = true; + continue; + } + if (!strcmp(argv[i], "-x")) { + exclude = 1; + continue; + } + if (!strcmp(argv[i], "-t")) { + times = true; + continue; + } + if (!strcmp(argv[i], "-l")) { + for (i = 0; tests[i].func != NULL; i++) { + printf("%s\n", tests[i].testname); + } + ret_result = 0; + goto exit_point; + } + if (argv[i][0] == '-') { + fprintf(stderr, "invalid option: `%s'\n", argv[i]); + ret_result = 1; + goto exit_point; + } + list_provided = 1; + } + + if (!list_provided) { + /* add everything */ + alltests = CuSuiteListNew(_T("All CLucene Tests")); + for (i = 0; tests[i].func != NULL; i++) { + CuSuiteListAdd(alltests, tests[i].func()); + } + } else if (exclude) { + /* add everything but the tests listed */ + alltests = CuSuiteListNew(_T("Partial CLucene Tests")); + for (i = 0; tests[i].func != NULL; i++) { + int this_test_excluded = 0; + int j; + + for (j = 1; j < argc && !this_test_excluded; j++) { + if (!strcmp(argv[j], tests[i].testname)) { + this_test_excluded = 1; + } + } + if (!this_test_excluded) { + CuSuiteListAdd(alltests, tests[i].func()); + } + } + } else { + /* add only the tests listed */ + alltests = CuSuiteListNew(_T("Partial CLucene Tests")); + for (i = 1; i < argc; i++) { + int j; + int found = 0; + + if (argv[i][0] == '-') { + continue; + } + for (j = 0; tests[j].func != NULL; j++) { + if (!strcmp(argv[i], tests[j].testname)) { + CuSuiteListAdd(alltests, tests[j].func()); + found = 1; + } + } + if (!found) { + fprintf(stderr, "invalid test name: `%s'\n", argv[i]); + ret_result = 1; + goto exit_point; + } + } + } + + startTime = Misc::currentTimeMillis(); + + printf("Key: .= pass N=not implemented F=fail\n"); + if (silent) + CuSuiteListRun(alltests); + else + CuSuiteListRunWithSummary(alltests, verbose, times); + i = CuSuiteListDetails(alltests, output); + _tprintf(_T("%s\n"), output->buffer); + + if (times) + printf("Tests run in %dms\n\n", (int32_t) (CL_NS(util)::Misc::currentTimeMillis() - startTime)); + +exit_point: + if (alltests != NULL) + CuSuiteListDelete(alltests); + CuStringFree(output); + _CLDELETE_LCaARRAY(const_cast(cl_tempDir)); + cl_tempDir = NULL; + + _lucene_shutdown(); //clears all static memory + //print lucenebase debug + + if (ret_result != 0) + return ret_result; + else + return i > 0 ? 1 : 0; + + //Debuggin techniques: + //For msvc, use this for breaking on memory leaks: + // _crtBreakAlloc + //for linux, use valgrind +} + diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestAnalysis.cpp clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestAnalysis.cpp --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestAnalysis.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestAnalysis.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,190 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/analysis/cjk/CJKAnalyzer.h" +#include "CLucene/analysis/LanguageBasedAnalyzer.h" +#include "CLucene/snowball/SnowballFilter.h" + +#include +#ifdef _CL_HAVE_IO_H +#include +#endif +#ifdef _CL_HAVE_SYS_STAT_H +#include +#endif +#ifdef _CL_HAVE_UNISTD_H +#include +#endif +#ifdef _CL_HAVE_DIRECT_H +#include +#endif +#include + +CL_NS_USE2(analysis, cjk) +CL_NS_USE2(analysis, snowball) + +void test(CuTest *tc, char* orig, Reader* reader, bool verbose, int64_t bytes) { + StandardAnalyzer analyzer; + TokenStream* stream = analyzer.tokenStream(NULL, reader); + + uint64_t start = Misc::currentTimeMillis(); + + int32_t count = 0; + Token t; + char atmp[LUCENE_MAX_WORD_LEN + 1]; + TCHAR ttmp[LUCENE_MAX_WORD_LEN + 1]; + for (; stream->next(&t);) { + if (verbose) { + CuMessage(tc, _T("Text=%s start=%d end=%d\n"), t.termBuffer(), t.startOffset(), t.endOffset()); + } + int len = t.termLength(); + + //use the lucene strlwr function (so copy to TCHAR first then back) + strncpy(atmp, orig + t.startOffset(), len); + atmp[len] = 0; + STRCPY_AtoT(ttmp, atmp, len + 1); + _tcslwr(ttmp); + + if (_tcsncmp(t.termBuffer(), ttmp, len) != 0) { + TCHAR err[1024]; + _sntprintf(err, 1024, _T("token '%s' didnt match original text at %d-%d"), t.termBuffer(), t.startOffset(), t.endOffset()); + CuAssert(tc, err, false); + } + + // _CLDELETE(t); + count++; + } + + uint64_t end = Misc::currentTimeMillis(); + int64_t time = end - start; + CuMessageA(tc, "%d milliseconds to extract ", time); + CuMessageA(tc, "%d tokens\n", count); + CuMessageA(tc, "%f microseconds/token\n", (time * 1000.0) / count); + CuMessageA(tc, "%f megabytes/hour\n", (bytes * 1000.0 * 60.0 * 60.0) / (time * 1000000.0)); + + _CLDELETE(stream); +} + +void _testFile(CuTest *tc, const char* fname, bool verbose) { + struct fileStat buf; + fileStat(fname, &buf); + int64_t bytes = buf.st_size; + + char* orig = _CL_NEWARRAY(char, bytes); + { + FILE* f = fopen(fname, "rb"); + int64_t r = fread(orig, bytes, 1, f); + fclose(f); + } + + CuMessageA(tc, " Reading test file containing %d bytes.\n", bytes); + jstreams::FileReader fr(fname, "ASCII"); + const TCHAR *start; + size_t total = 0; + int32_t numRead; + do { + numRead = fr.read(start, 1, 0); + if (numRead == -1) + break; + total += numRead; + } while (numRead >= 0); + + jstreams::FileReader reader(fname, "ASCII"); + + test(tc, orig, &reader, verbose, total); + + _CLDELETE_CaARRAY(orig); +} + +void testFile(CuTest *tc) { + char loc[1024]; + strcpy(loc, clucene_data_location); + strcat(loc, "/reuters-21578/feldman-cia-worldfactbook-data.txt"); + CuAssert(tc, _T("reuters-21578/feldman-cia-worldfactbook-data.txt does not exist"), Misc::dir_Exists(loc)); + + _testFile(tc, loc, false); +} + +void _testCJK(CuTest *tc, const char* astr, const char** results, bool ignoreSurrogates = true) { + SimpleInputStreamReader r(new AStringReader(astr), SimpleInputStreamReader::UTF8); + + CJKTokenizer* tokenizer = _CLNEW CJKTokenizer(&r); + tokenizer->setIgnoreSurrogates(ignoreSurrogates); + int pos = 0; + Token tok; + TCHAR tres[LUCENE_MAX_WORD_LEN]; + + while (results[pos] != NULL) { + CLUCENE_ASSERT(tokenizer->next(&tok) != NULL); + + lucene_utf8towcs(tres, results[pos], LUCENE_MAX_WORD_LEN); + CuAssertStrEquals(tc, _T("unexpected token value"), tres, tok.termBuffer()); + + pos++; + } + CLUCENE_ASSERT(!tokenizer->next(&tok)); + + _CLDELETE(tokenizer); +} + +void testCJK(CuTest *tc) { + //utf16 test + //we have a very large unicode character: + //xEFFFF = utf8(F3 AF BF BF) = utf16(DB7F DFFF) = utf8(ED AD BF, ED BF BF) + static const char* exp3[4] = {"\xED\xAD\xBF\xED\xBF\xBF\xe5\x95\xa4", "\xe5\x95\xa4\xED\xAD\xBF\xED\xBF\xBF", "", NULL}; + _testCJK(tc, "\xED\xAD\xBF\xED\xBF\xBF\xe5\x95\xa4\xED\xAD\xBF\xED\xBF\xBF", exp3, false); + + static const char* exp1[5] = {"test", "t\xc3\xbcrm", "values", NULL}; + _testCJK(tc, "test t\xc3\xbcrm values", exp1); + + static const char* exp2[6] = {"a", "\xe5\x95\xa4\xe9\x85\x92", "\xe9\x85\x92\xe5\x95\xa4", "", "x", NULL}; + _testCJK(tc, "a\xe5\x95\xa4\xe9\x85\x92\xe5\x95\xa4x", exp2); +} + +void testLanguageBasedAnalyzer(CuTest* tc) { + LanguageBasedAnalyzer a; + CL_NS(util)::StringReader reader(_T("he abhorred accentueren")); + reader.mark(50); + TokenStream* ts; + Token t; + + //test with english + a.setLanguage(_T("English")); + a.setStem(false); + ts = a.tokenStream(_T("contents"), &reader); + + CLUCENE_ASSERT(ts->next(&t) != NULL); + CLUCENE_ASSERT(_tcscmp(t.termBuffer(), _T("he")) == 0); + CLUCENE_ASSERT(ts->next(&t) != NULL); + CLUCENE_ASSERT(_tcscmp(t.termBuffer(), _T("abhorred")) == 0); + _CLDELETE(ts); + + //now test with dutch + reader.reset(0); + a.setLanguage(_T("Dutch")); + a.setStem(true); + ts = a.tokenStream(_T("contents"), &reader); + + CLUCENE_ASSERT(ts->next(&t) != NULL); + CLUCENE_ASSERT(_tcscmp(t.termBuffer(), _T("he")) == 0); + CLUCENE_ASSERT(ts->next(&t) != NULL); + CLUCENE_ASSERT(_tcscmp(t.termBuffer(), _T("abhorred")) == 0); + CLUCENE_ASSERT(ts->next(&t) != NULL); + CLUCENE_ASSERT(_tcscmp(t.termBuffer(), _T("accentuer")) == 0); + _CLDELETE(ts); +} + +CuSuite *testanalysis(void) { + CuSuite *suite = CuSuiteNew(_T("CLucene Analysis Test")); + + SUITE_ADD_TEST(suite, testFile); + SUITE_ADD_TEST(suite, testCJK); + SUITE_ADD_TEST(suite, testLanguageBasedAnalyzer); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/test.h clucene-core-2.3.3.4/src/contribs/contribs-lib-test/test.h --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/test.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/test.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,50 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef TEST_H +#define TEST_H +#include "CLucene.h" +#include "CLucene/_clucene-config.h" +#include "CLucene/config/repl_tchar.h" +#include "CLucene/config/repl_wchar.h" +#include "CLucene/debug/_condition.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/Misc.h" + +#include "CLucene/store/RAMDirectory.h" +#include "CLucene/store/Lock.h" +#include "CLucene/index/TermVector.h" +#include "CLucene/queryParser/MultiFieldQueryParser.h" + +#define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF) +#define LUCENE_INT64_MIN_SHOULDBE (-LUCENE_INT64_MAX_SHOULDBE - _ILONGLONG(1) ) + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(search) +CL_NS_USE(document) +CL_NS_USE(queryParser) +CL_NS_USE(analysis) +CL_NS_USE2(analysis, standard) + +#include "CuTest.h" + +CuSuite *testsnowball(void); +CuSuite *testhighlighter(void); +CuSuite *teststreams(void); +CuSuite *testutf8(void); +CuSuite *testanalysis(void); + +extern unittest tests[]; + +#define CLUCENE_DATA_LOCATION1 "../../src/test/data/" +#define CLUCENE_DATA_LOCATION2 "../src/test/data/" +#define CLUCENE_DATA_LOCATION3 "../../../src/test/data/" +#define CLUCENE_DATA_LOCATIONENV "srcdir" +extern const char* cl_tempDir; + +#endif diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestHighlight.cpp clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestHighlight.cpp --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestHighlight.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestHighlight.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,269 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + +#include "CLucene/store/RAMDirectory.h" +#include "CLucene/highlighter/QueryTermExtractor.h" +#include "CLucene/highlighter/QueryScorer.h" +#include "CLucene/highlighter/Highlighter.h" +#include "CLucene/highlighter/TokenGroup.h" +#include "CLucene/highlighter/SimpleHTMLFormatter.h" +#include "CLucene/highlighter/SimpleFragmenter.h" + +CL_NS_USE2(search, highlight); + +RAMDirectory hl_ramDir; +StandardAnalyzer hl_analyzer; + + +const TCHAR* hl_FIELD_NAME = _T("contents"); +Query* hl_originalquery = NULL; +Query* hl_query = NULL; +Query* hl_rewrittenquery = NULL; +IndexReader* hl_reader = NULL; +Searcher* hl_searcher = NULL; +Hits* hl_hits = NULL; + +class hl_formatterCls : public Formatter { +public: + int numHighlights; + + hl_formatterCls() { + numHighlights = 0; + } + + ~hl_formatterCls() { + } + + TCHAR* highlightTerm(const TCHAR* originalText, const TokenGroup* group) { + if (group->getTotalScore() <= 0) { + return STRDUP_TtoT(originalText); + } + numHighlights++; //update stats used in assertions + + int len = _tcslen(originalText) + 7; + TCHAR* ret = _CL_NEWARRAY(TCHAR, len + 1); + _tcscpy(ret, _T("")); + _tcscat(ret, originalText); + _tcscat(ret, _T("")); + + return ret; + } +}; +hl_formatterCls hl_formatter; + + +const TCHAR* hl_texts[6] ={ + _T("Hello this is a piece of text that is very long and contains too much preamble and the meat is really here which says kennedy has been shot"), + _T("This piece of text refers to Kennedy at the beginning then has a longer piece of text that is very long in the middle and finally ends with another reference to Kennedy"), + _T("JFK has been shot"), + _T("John Kennedy has been shot"), + _T("This text has a typo in referring to Keneddy"), + NULL +}; + +void doStandardHighlights(CuTest* tc) { + QueryScorer scorer(hl_query); + Highlighter highlighter(&hl_formatter, &scorer); + SimpleFragmenter frag(20); + highlighter.setTextFragmenter(&frag); + + for (int i = 0; i < hl_hits->length(); i++) { + const TCHAR* text = hl_hits->doc(i).get(hl_FIELD_NAME); + int maxNumFragmentsRequired = 2; + const TCHAR* fragmentSeparator = _T("..."); + StringReader reader(text); + TokenStream* tokenStream = hl_analyzer.tokenStream(hl_FIELD_NAME, &reader); + + TCHAR* result = + highlighter.getBestFragments( + tokenStream, + text, + maxNumFragmentsRequired, + fragmentSeparator); + + CuMessage(tc, _T("%s\n"), result == NULL ? _T("") : result); + _CLDELETE_CARRAY(result); + _CLDELETE(tokenStream); + } +} + +void doSearching(CuTest* tc, const TCHAR* queryString) { + if (hl_searcher == NULL) + hl_searcher = _CLNEW IndexSearcher(&hl_ramDir); + + if (hl_rewrittenquery != NULL && hl_originalquery != NULL) { + if (hl_originalquery != hl_rewrittenquery) + _CLDELETE(hl_rewrittenquery); + _CLDELETE(hl_originalquery); + } + hl_originalquery = QueryParser::parse(queryString, hl_FIELD_NAME, &hl_analyzer); + + //for any multi-term queries to work (prefix, wildcard, range,fuzzy etc) you must use a rewritten query! + hl_rewrittenquery = hl_originalquery->rewrite(hl_reader); + hl_query = hl_rewrittenquery; + + TCHAR* s = hl_originalquery->toString(hl_FIELD_NAME); + CuMessage(tc, _T("Searching for: %s\n"), s == NULL ? _T("") : s); + _CLDELETE_CARRAY(s); + + s = hl_rewrittenquery->toString(hl_FIELD_NAME); + CuMessage(tc, _T("Rewritten query: %s\n"), s == NULL ? _T("") : s); + _CLDELETE_CARRAY(s); + + if (hl_hits != NULL) + _CLDELETE(hl_hits); + hl_hits = hl_searcher->search(hl_query); + hl_formatter.numHighlights = 0; +} + +void testSimpleHighlighter(CuTest *tc) { + doSearching(tc, _T("Kennedy")); + QueryScorer scorer(hl_query); + Highlighter highlighter(&scorer); + SimpleFragmenter fragmenter(40); + + highlighter.setTextFragmenter(&fragmenter); + int maxNumFragmentsRequired = 2; + for (int i = 0; i < hl_hits->length(); i++) { + const TCHAR* text = hl_hits->doc(i).get(hl_FIELD_NAME); + StringReader reader(text); + TokenStream* tokenStream = hl_analyzer.tokenStream(hl_FIELD_NAME, &reader); + + TCHAR* result = highlighter.getBestFragments(tokenStream, text, maxNumFragmentsRequired, _T("...")); + CuMessage(tc, _T("%s\n"), result == NULL ? _T("") : result); + _CLDELETE_CARRAY(result); + _CLDELETE(tokenStream); + } + //Not sure we can assert anything here - just running to check we dont throw any exceptions +} + +void testGetFuzzyFragments(CuTest *tc) { + doSearching(tc, _T("Kinnedy~")); + doStandardHighlights(tc); + + TCHAR msg[1024]; + _sntprintf(msg, 1024, _T("Failed to find correct number of highlights %d found"), hl_formatter.numHighlights); + CuAssert(tc, msg, hl_formatter.numHighlights == 5); +} + +void testGetWildCardFragments(CuTest *tc) { + doSearching(tc, _T("K?nnedy")); + doStandardHighlights(tc); + + TCHAR msg[1024]; + _sntprintf(msg, 1024, _T("Failed to find correct number of highlights %d found"), hl_formatter.numHighlights); + CuAssert(tc, msg, hl_formatter.numHighlights == 4); +} + +void testGetBestFragmentsSimpleQuery(CuTest *tc) { + doSearching(tc, _T("Kennedy")); + doStandardHighlights(tc); + + TCHAR msg[1024]; + _sntprintf(msg, 1024, _T("Failed to find correct number of highlights %d found"), hl_formatter.numHighlights); + CuAssert(tc, msg, hl_formatter.numHighlights == 4); +} + +void testGetMidWildCardFragments(CuTest *tc) { + doSearching(tc, _T("K*dy")); + doStandardHighlights(tc); + + TCHAR msg[1024]; + _sntprintf(msg, 1024, _T("Failed to find correct number of highlights %d found"), hl_formatter.numHighlights); + CuAssert(tc, msg, hl_formatter.numHighlights == 5); +} + +void testGetBestFragmentsPhrase(CuTest *tc) { + doSearching(tc, _T("\"John Kennedy\"")); + doStandardHighlights(tc); + + TCHAR msg[1024]; + _sntprintf(msg, 1024, _T("Failed to find correct number of highlights %d found"), hl_formatter.numHighlights); + CuAssert(tc, msg, hl_formatter.numHighlights == 2); +} + +void testGetBestFragmentsMultiTerm(CuTest *tc) { + doSearching(tc, _T("John Ken*")); + doStandardHighlights(tc); + + TCHAR msg[1024]; + _sntprintf(msg, 1024, _T("Failed to find correct number of highlights %d found"), hl_formatter.numHighlights); + CuAssert(tc, msg, hl_formatter.numHighlights == 6); +} + +void testGetBestFragmentsWithOr(CuTest *tc) { + doSearching(tc, _T("JFK OR Kennedy")); + doStandardHighlights(tc); + + TCHAR msg[1024]; + _sntprintf(msg, 1024, _T("Failed to find correct number of highlights %d found"), hl_formatter.numHighlights); + CuAssert(tc, msg, hl_formatter.numHighlights == 5); +} + +void testGetRangeFragments(CuTest *tc) { + TCHAR qry[200]; + _sntprintf(qry, 200, _T("%s:[Kannedy TO Kznnedy]"), hl_FIELD_NAME); //bug?needs lower case + + doSearching(tc, qry); + doStandardHighlights(tc); + + TCHAR msg[1024]; + _sntprintf(msg, 1024, _T("Failed to find correct number of highlights %d found"), hl_formatter.numHighlights); + CuAssert(tc, msg, hl_formatter.numHighlights == 5); +} + +void setupHighlighter(CuTest *tc) { + IndexWriter writer(&hl_ramDir, &hl_analyzer, true); + for (int i = 0; hl_texts[i] != NULL; i++) { + Document d; + d.add(*_CLNEW Field(hl_FIELD_NAME, hl_texts[i], Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer.addDocument(&d); + } + + writer.optimize(); + writer.close(); + + hl_reader = IndexReader::open(&hl_ramDir); +} + +void cleanupHighlighter(CuTest *tc) { + + if (hl_originalquery != hl_rewrittenquery) + _CLDELETE(hl_rewrittenquery); + _CLDELETE(hl_originalquery); + _CLDELETE(hl_hits); + + if (hl_reader != NULL) { + hl_reader->close(); + _CLDELETE(hl_reader); + } + hl_ramDir.close(); + + if (hl_searcher != NULL) + _CLDELETE(hl_searcher); +} + +CuSuite *testhighlighter(void) { + CuSuite *suite = CuSuiteNew(_T("CLucene Highlight Test")); + + SUITE_ADD_TEST(suite, setupHighlighter); + + SUITE_ADD_TEST(suite, testSimpleHighlighter); + SUITE_ADD_TEST(suite, testGetBestFragmentsSimpleQuery); + SUITE_ADD_TEST(suite, testGetFuzzyFragments); + SUITE_ADD_TEST(suite, testGetWildCardFragments); + SUITE_ADD_TEST(suite, testGetMidWildCardFragments); + SUITE_ADD_TEST(suite, testGetRangeFragments); + SUITE_ADD_TEST(suite, testGetBestFragmentsPhrase); + SUITE_ADD_TEST(suite, testGetBestFragmentsMultiTerm); + SUITE_ADD_TEST(suite, testGetBestFragmentsWithOr); + + + SUITE_ADD_TEST(suite, cleanupHighlighter); + return suite; +} diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestSnowball.cpp clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestSnowball.cpp --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestSnowball.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestSnowball.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,36 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + +#include "CLucene/snowball/SnowballAnalyzer.h" + +CL_NS_USE2(analysis, snowball); + +void testSnowball(CuTest *tc) { + SnowballAnalyzer an(_T("English")); + CL_NS(util)::StringReader reader(_T("he abhorred accents")); + + TokenStream* ts = an.tokenStream(_T("test"), &reader); + Token t; + CLUCENE_ASSERT(ts->next(&t)!=NULL); + CLUCENE_ASSERT(_tcscmp(t.termBuffer(), _T("he")) == 0); + CLUCENE_ASSERT(ts->next(&t)!=NULL); + CLUCENE_ASSERT(_tcscmp(t.termBuffer(), _T("abhor")) == 0); + CLUCENE_ASSERT(ts->next(&t)!=NULL); + CLUCENE_ASSERT(_tcscmp(t.termBuffer(), _T("accent")) == 0); + + CLUCENE_ASSERT(ts->next(&t) == NULL); + _CLDELETE(ts); +} + +CuSuite *testsnowball(void) { + CuSuite *suite = CuSuiteNew(_T("CLucene Snowball Test")); + + SUITE_ADD_TEST(suite, testSnowball); + + return suite; +} diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestStreams.cpp clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestStreams.cpp --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestStreams.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestStreams.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/util/gzipcompressstream.h" +#include "CLucene/util/gzipinputstream.h" +#include "CLucene/util/byteinputstream.h" +#include "CLucene/util/streamarray.h" +//#include "CLucene/util/_streambase.h" + +CL_NS_USE(store); +CL_NS_USE(util); + +void setupStreams(CuTest *tc) { +} + +void cleanupStreams(CuTest *tc) { +} + +void testDocument(CuTest* tc) { + //test adding a binary field to the index + RAMDirectory ram; + const signed char* tmp = 0; + const char* str2 = "we all love compressed fields"; + + { + SimpleAnalyzer an; + IndexWriter writer(&ram, &an, true); + Document doc2; + AStringReader stringReader2(str2); + GZipCompressInputStream* zipStream; + zipStream = new GZipCompressInputStream(&stringReader2); + + ValueArray stored = streamArray(zipStream); + doc2.add(*new Field(_T("test"), reinterpret_cast*>(&stored), Field::STORE_YES)); + writer.addDocument(&doc2); + + //done + writer.close(); + } + + //now read it back... + IndexReader* reader = IndexReader::open(&ram); + Document doc2; + CLUCENE_ASSERT(reader->document(0, doc2)); + ByteInputStream sb2(reinterpret_cast const*>(doc2.getField(_T("test"))->binaryValue())); + GZipInputStream zip2(&sb2, GZipInputStream::ZLIBFORMAT); + + int rd = zip2.read(tmp, 100000, 0); + std::string str((const char*) tmp, rd); + CLUCENE_ASSERT(str.compare(str2) == 0); + + _CLDELETE(reader); +} + +CuSuite *teststreams(void) { + CuSuite *suite = CuSuiteNew(_T("CLucene Streams Test")); + + //SUITE_ADD_TEST(suite, setupStreams); + SUITE_ADD_TEST(suite, testDocument); + //SUITE_ADD_TEST(suite, cleanupStreams); + return suite; +} diff -Nru clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestUtf8.cpp clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestUtf8.cpp --- clucene-core-0.9.21b/src/contribs/contribs-lib-test/TestUtf8.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs/contribs-lib-test/TestUtf8.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,189 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/util/dirent.h" +#include "CLucene/util/CLStreams.h" + +//this is basically a copy of the TestUtf8 located in the core, except using the iconv InputStreamReader... + +#ifdef _UCS2 + void _Index(CuTest *tc, IndexWriter* ndx, const char* file){ + char path[CL_MAX_PATH]; + TCHAR tlang[20]; + + strcpy(path,clucene_data_location); + strcat(path,"/utf8text"); + CuAssert(tc,_T("Utf8 directory does not exist"),Misc::dir_Exists(path)); + strcat(path,"/"); + strcat(path,file); + strcat(path,"_utf8.txt"); + CuAssert(tc,_T("Language file does not exist"),Misc::dir_Exists(path)); + + STRCPY_AtoT(tlang,file,CL_MAX_PATH); + + Document doc; + doc.add(*_CLNEW Field(_T("language"),tlang, Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + + jstreams::FileReader* fr = new jstreams::FileReader(path, "UTF-8"); + doc.add(*_CLNEW Field(_T("contents"),fr, Field::STORE_YES | Field::INDEX_TOKENIZED )); + ndx->addDocument(&doc); + } + void _Search(CuTest *tc, IndexSearcher* srch, Analyzer* analyzer, const char* file, const char* query){ + TCHAR tlang[20]; + STRCPY_AtoT(tlang,file,CL_MAX_PATH); + + TCHAR tquery[80]; + lucene_utf8towcs(tquery,query,80); + + Query* q = QueryParser::parse(tquery,_T("contents"), analyzer); + Hits* h = srch->search(q); + CLUCENE_ASSERT( h->length() == 1 ); + + Document& doc = h->doc(0); + CLUCENE_ASSERT( _tcscmp(doc.get(_T("language")), tlang)==0 ); + + _CLDELETE(q); + _CLDELETE(h); + } + + void testUTF8(CuTest *tc) { + RAMDirectory ram; + Directory* pram = &ram; + SimpleAnalyzer a; + IndexWriter ndx(&ram,&a,true); + _Index(tc, &ndx,"arabic"); + _Index(tc, &ndx,"chinese"); + _Index(tc, &ndx,"czech"); + _Index(tc, &ndx,"english"); + _Index(tc, &ndx,"french"); + _Index(tc, &ndx,"german"); + _Index(tc, &ndx,"greek"); + _Index(tc, &ndx,"hebrew"); + _Index(tc, &ndx,"japanese"); + _Index(tc, &ndx,"korean"); + _Index(tc, &ndx,"polish"); + _Index(tc, &ndx,"russian"); + ndx.close(); + + IndexSearcher srch(&ram); + _Search(tc,&srch,&a,"arabic", "\xef\xbb\x9e\xef\xbb\xb4\xef\xbb\xa4\xef\xbb\xb3\xef\xba\xad"); //????? - arabic + _Search(tc,&srch,&a,"chinese", "\xe5\x95\xa4\xe9\x85\x92"); //?? - chinese + _Search(tc,&srch,&a,"czech", "Bud\xc4\x9bjovick\xc3\xbd" ); //Budejovick� - czech + + _Search(tc,&srch,&a,"english", "google"); //English - google + _Search(tc,&srch,&a,"french", "r\xc3\xa9put\xc3\xa9"); //r�put� - french + _Search(tc,&srch,&a,"german", "k\xc3\xb6nnen"); //k�nnen - german + _Search(tc,&srch,&a,"greek", "\xcf\x83\xcf\x84\xce\xb5\xce\xaf\xce\xbb\xcf\x84\xce\xb5"); //ste??te - greek + _Search(tc,&srch,&a,"hebrew", "\xd7\x91\xd7\x90\xd7\xa8\xd7\xa6\xd7\x95\xd7\xaa" ); //?????? - hebrew + _Search(tc,&srch,&a,"japanese", "\xe8\xa6\x8b\xe5\xad\xa6" ); //?? - japanese + _Search(tc,&srch,&a,"korean", "\xea\xb8\x88" ); //? - korean + _Search(tc,&srch,&a,"polish", "sp\xc3\xb3\xc5\x82ka"); ;//sp�lka - polish + _Search(tc,&srch,&a,"russian", "\xd0\x92\xd0\xb5\xd0\xbb\xd0\xb8\xd0\xba\xd0\xb8\xd0\xb5\x20"); //??????? - russian + + srch.close(); + } + + void readBuffered(CuTest* tc, Reader& utf8, Reader& unicode, int readLen){ + const TCHAR* buf1; + const TCHAR* buf2; + int32_t s; + size_t p, p1, p2; + p = p1 = p2 = 0; + while(true){ + s = utf8.read(buf1, readLen, readLen); + if ( s == -1 ) + break; + p1+=s; + + s = unicode.read(buf2, readLen, readLen); + if (s == -1) + break; + p2+=s; + + CLUCENE_ASSERT(p1==p2); //make sure both readers read the same amount. todo: i guess this is not strictly required... + for ( int32_t i=0;i= dataLen) { + dataLen = input->read(ioBuffer, 1, LUCENE_IO_BUFFER_SIZE); + bufferIndex = 0; + } + + if (dataLen == -1) { + if (length > 0) { + if (preIsTokened == true) { + length = 0; + preIsTokened = false; + } + + break; + } else { + return NULL; + } + } else { + //get current character + c = ioBuffer[bufferIndex++]; + } + + //to support surrogates, we'll need to convert the incoming utf16 into + //ucs4(c variable). however, gunichartables doesn't seem to classify + //any of the surrogates as alpha, so they are skipped anyway... + //so for now we just convert to ucs4 so that we dont corrupt the input. + if ( c >= 0xd800 || c <= 0xdfff ){ + clunichar c2 = ioBuffer[bufferIndex]; + if ( c2 >= 0xdc00 && c2 <= 0xdfff ){ + bufferIndex++; + offset++; + charlen=2; + + c = (((c & 0x03ffL) << 10) | ((c2 & 0x03ffL) << 0)) + 0x00010000L; + } + } + + //if the current character is ASCII or Extend ASCII + if ((c <= 0xFF) //is BASIC_LATIN + || (c>=0xFF00 && c<=0xFFEF) //ascii >0x74 cast to unsigned... + ) { + if (c >= 0xFF00) { + //todo: test this... only happens on platforms where char is signed, i think... + /** convert HALFWIDTH_AND_FULLWIDTH_FORMS to BASIC_LATIN */ + c -= 0xFEE0; + } + + // if the current character is a letter or "_" "+" "#" + if (_istalnum(c) || ((c == '_') || (c == '+') || (c == '#')) ) { + if (length == 0) { + // "javaC1C2C3C4linux"
+ // ^--: the current character begin to token the ASCII + // letter + start = offset - 1; + } else if (tokenType == tokenTypeDouble) { + // "javaC1C2C3C4linux"
+ // ^--: the previous non-ASCII + // : the current character + offset-=charlen; + bufferIndex-=charlen; + tokenType = tokenTypeSingle; + + if (preIsTokened == true) { + // there is only one non-ASCII has been stored + length = 0; + preIsTokened = false; + + break; + } else { + break; + } + } + + // store the LowerCase(c) in the buffer + buffer[length++] = _totlower((TCHAR)c); + tokenType = tokenTypeSingle; + + // break the procedure if buffer overflowed! + if (length == LUCENE_MAX_WORD_LEN) { + break; + } + } else if (length > 0) { + if (preIsTokened == true) { + length = 0; + preIsTokened = false; + } else { + break; + } + } + } else { + // non-ASCII letter, eg."C1C2C3C4" + if ( _istalpha(c) || (!ignoreSurrogates && c>=0x10000) ) { + if (length == 0) { + start = offset - 1; + + if ( c < 0x00010000L ) + buffer[length++] = (TCHAR)c; + else{ + clunichar ucs4 = c - 0x00010000L; + buffer[length++] = (TCHAR)((ucs4 >> 10) & 0x3ff) | 0xd800; + buffer[length++] = (TCHAR)((ucs4 >> 0) & 0x3ff) | 0xdc00; + } + + tokenType = tokenTypeDouble; + } else { + if (tokenType == tokenTypeSingle) { + offset-=charlen; + bufferIndex-=charlen; + + //return the previous ASCII characters + break; + } else { + if ( c < 0x00010000L ) + buffer[length++] = (TCHAR)c; + else{ + clunichar ucs4 = c - 0x00010000L; + buffer[length++] = (TCHAR)((ucs4 >> 10) & 0x3ff) | 0xd800; + buffer[length++] = (TCHAR)((ucs4 >> 0) & 0x3ff) | 0xdc00; + } + tokenType = tokenTypeDouble; + + if (length >= 2) { + offset-=charlen; + bufferIndex-=charlen; + preIsTokened = true; + + break; + } + } + } + } else if (length > 0) { + if (preIsTokened == true) { + // empty the buffer + length = 0; + preIsTokened = false; + } else { + break; + } + } + } + } + + buffer[length]='\0'; + token->set(buffer,start, start+length, tokenType); + return token; +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,94 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_cjk_cjkanalyzer_ +#define _lucene_analysis_cjk_cjkanalyzer_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(analysis,cjk) + +/** + * CJKTokenizer was modified from StopTokenizer which does a decent job for + * most European languages. It performs other token methods for double-byte + * Characters: the token will return at each two charactors with overlap match.
+ * Example: "java C1C2C3C4" will be segment to: "java" "C1C2" "C2C3" "C3C4" it + * also need filter filter zero length token ""
+ * for Digit: digit, '+', '#' will token as letter
+ * for more info on Asia language(Chinese Japanese Korean) text segmentation: + * please search google + * + * @author Che, Dong + */ +class CLUCENE_CONTRIBS_EXPORT CJKTokenizer: public CL_NS(analysis)::Tokenizer { +private: + /** word offset, used to imply which character(in ) is parsed */ + int32_t offset; + + /** the index used only for ioBuffer */ + int32_t bufferIndex; + + /** data length */ + int32_t dataLen; + + /** + * character buffer, store the characters which are used to compose
+ * the returned Token + */ + TCHAR buffer[LUCENE_MAX_WORD_LEN]; + + /** + * I/O buffer, used to store the content of the input(one of the
+ * members of Tokenizer) + */ + const TCHAR* ioBuffer; + + /** word type: single=>ASCII double=>non-ASCII word=>default */ + const TCHAR* tokenType; + + static const TCHAR* tokenTypeSingle; + static const TCHAR* tokenTypeDouble; + + /** + * tag: previous character is a cached double-byte character "C1C2C3C4" + * ----(set the C1 isTokened) C1C2 "C2C3C4" ----(set the C2 isTokened) + * C1C2 C2C3 "C3C4" ----(set the C3 isTokened) "C1C2 C2C3 C3C4" + */ + bool preIsTokened; + + + bool ignoreSurrogates; + +public: + /** + * Construct a token stream processing the given input. + * + * @param in I/O reader + */ + CJKTokenizer(CL_NS(util)::Reader* in); + + /** + * Returns the next token in the stream, or null at EOS. + * See http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.UnicodeBlock.html + * for detail. + * + * @return Token + * + * @throws java.io.IOException - throw IOException when read error
+ * hanppened in the InputStream + * + */ + CL_NS(analysis)::Token* next(CL_NS(analysis)::Token* token); + + bool getIgnoreSurrogates(){ return ignoreSurrogates; }; + void setIgnoreSurrogates(bool ignoreSurrogates){ this->ignoreSurrogates = ignoreSurrogates; }; +}; + + + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,149 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanAnalyzer.h" +#include "GermanStemmer.h" +#include "GermanStemFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE2(analysis,de) +CL_NS_USE2(analysis,standard) + + const TCHAR GermanAnalyzer_DASZ[] = { 0x64, 0x61, 0xdf }; + const TCHAR GermanAnalyzer_FUER[] = { 0x66, 0xfc, 0x72 }; + const TCHAR* GermanAnalyzer_GERMAN_STOP_WORDS[] = { + _T("einer"), _T("eine"), _T("eines"), _T("einem"), _T("einen"), + _T("der"), _T("die"), _T("das"), _T("dass"), GermanAnalyzer_DASZ, + _T("du"), _T("er"), _T("sie"), _T("es"), + _T("was"), _T("wer"), _T("wie"), _T("wir"), + _T("und"), _T("oder"), _T("ohne"), _T("mit"), + _T("am"), _T("im"),_T("in"), _T("aus"), _T("auf"), + _T("ist"), _T("sein"), _T("war"), _T("wird"), + _T("ihr"), _T("ihre"), _T("ihres"), + _T("als"), GermanAnalyzer_FUER, _T("von"), _T("mit"), + _T("dich"), _T("dir"), _T("mich"), _T("mir"), + _T("mein"), _T("sein"), _T("kein"), + _T("durch"), _T("wegen"), _T("wird") + }; + + CL_NS(util)::ConstValueArray GermanAnalyzer::GERMAN_STOP_WORDS( GermanAnalyzer_GERMAN_STOP_WORDS, 48 ); + + class GermanAnalyzer::SavedStreams : public TokenStream { + public: + StandardTokenizer* tokenStream; + TokenStream* filteredTokenStream; + + SavedStreams():tokenStream(NULL), filteredTokenStream(NULL) + { + } + + void close(){} + Token* next(Token* token) {return NULL;} + }; + + GermanAnalyzer::GermanAnalyzer() { + exclusionSet = NULL; + stopSet = _CLNEW CLTCSetList; + StopFilter::fillStopTable(stopSet, GERMAN_STOP_WORDS.values); + } + + GermanAnalyzer::GermanAnalyzer(const TCHAR** stopwords) { + exclusionSet = NULL; + stopSet = _CLNEW CLTCSetList; + StopFilter::fillStopTable(stopSet, stopwords); + } + + GermanAnalyzer::GermanAnalyzer(CL_NS(analysis)::CLTCSetList* stopwords) { + exclusionSet = NULL; + stopSet = stopwords; + } + + GermanAnalyzer::GermanAnalyzer(const char* stopwordsFile, const char* enc) { + exclusionSet = NULL; + stopSet = WordlistLoader::getWordSet(stopwordsFile, enc); + } + + GermanAnalyzer::GermanAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool deleteReader) { + exclusionSet = NULL; + stopSet = WordlistLoader::getWordSet(stopwordsReader, NULL, deleteReader); + } + + GermanAnalyzer::~GermanAnalyzer() { + _CLLDELETE(stopSet); + _CLLDELETE(exclusionSet); + } + + void GermanAnalyzer::setStemExclusionTable(const TCHAR** exclusionlist) { + if (exclusionSet != NULL) { + exclusionSet->clear(); + } else { + exclusionSet = _CLNEW CLTCSetList; + } + + CL_NS(analysis)::StopFilter::fillStopTable(exclusionSet, exclusionlist); + } + + void GermanAnalyzer::setStemExclusionTable(CL_NS(analysis)::CLTCSetList* exclusionlist) { + if (exclusionSet != exclusionlist) { + _CLLDELETE(exclusionSet); + exclusionSet = exclusionlist; + } + } + + void GermanAnalyzer::setStemExclusionTable(const char* exclusionlistFile, const char* enc) { + exclusionSet = WordlistLoader::getWordSet(exclusionlistFile, enc, exclusionSet); + } + + void GermanAnalyzer::setStemExclusionTable(CL_NS(util)::Reader* exclusionlistReader, const bool deleteReader) { + exclusionSet = WordlistLoader::getWordSet(exclusionlistReader, exclusionSet, deleteReader); + } + + TokenStream* GermanAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + TokenStream* result; + CL_NS(util)::BufferedReader* bufferedReader = reader->__asBufferedReader(); + + if ( bufferedReader == NULL ) + result = _CLNEW StandardTokenizer( _CLNEW CL_NS(util)::FilteredBufferedReader(reader, false), true ); + else + result = _CLNEW StandardTokenizer(bufferedReader); + + result = _CLNEW StandardFilter(result, true); + result = _CLNEW LowerCaseFilter(result, true); + result = _CLNEW StopFilter(result, true, stopSet); + result = _CLNEW GermanStemFilter(result, true, exclusionSet); + + return result; + } + + TokenStream* GermanAnalyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) + { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + CL_NS(util)::BufferedReader* bufferedReader = reader->__asBufferedReader(); + + if ( bufferedReader == NULL ) + streams->tokenStream = _CLNEW StandardTokenizer( _CLNEW CL_NS(util)::FilteredBufferedReader(reader, false), true ); + else + streams->tokenStream = _CLNEW StandardTokenizer(bufferedReader); + + streams->filteredTokenStream = _CLNEW StandardFilter(streams->tokenStream, true); + streams->filteredTokenStream = _CLNEW LowerCaseFilter(streams->filteredTokenStream, true); + streams->filteredTokenStream = _CLNEW StopFilter(streams->filteredTokenStream, true, stopSet); + streams->filteredTokenStream = _CLNEW GermanStemFilter(streams->filteredTokenStream, true, exclusionSet); + setPreviousTokenStream(streams); + } else + streams->tokenStream->reset(reader); + + return streams->filteredTokenStream; + } diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,108 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_de_GermanAnalyzer +#define _lucene_analysis_de_GermanAnalyzer + +CL_NS_DEF2(analysis,de) + +/** + * Analyzer for German language. Supports an external list of stopwords (words that + * will not be indexed at all) and an external list of exclusions (word that will + * not be stemmed, but indexed). + * A default set of stopwords is used unless an alternative list is specified, the + * exclusion list is empty by default. + * + * + * @version $Id: GermanAnalyzer.java 564236 2007-08-09 15:21:19Z gsingers $ + */ +class CLUCENE_CONTRIBS_EXPORT GermanAnalyzer : public CL_NS(analysis)::Analyzer { +public: + + /** + * List of typical german stopwords. + */ + static CL_NS(util)::ConstValueArray GERMAN_STOP_WORDS; + +private: + + class SavedStreams; + + /** + * Contains the stopwords used with the StopFilter. + */ + CL_NS(analysis)::CLTCSetList* stopSet; + + /** + * Contains words that should be indexed but not stemmed. + */ + CL_NS(analysis)::CLTCSetList* exclusionSet; + +public: + + /** + * Builds an analyzer with the default stop words + * (GERMAN_STOP_WORDS). + */ + GermanAnalyzer(); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(const TCHAR** stopWords); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(CL_NS(analysis)::CLTCSetList* stopwords); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool deleteReader = false); + + /** + */ + virtual ~GermanAnalyzer(); + + /** + * Builds an exclusionlist from an array of Strings. + */ + void setStemExclusionTable(const TCHAR** exclusionlist); + + /** + * Builds an exclusionlist from a Hashtable. + */ + void setStemExclusionTable(CL_NS(analysis)::CLTCSetList* exclusionlist); + + /** + * Builds an exclusionlist from the words contained in the given file. + */ + void setStemExclusionTable(const char* exclusionlistFile, const char* enc = NULL); + + /** + * Builds an exclusionlist from the words contained in the given file. + */ + void setStemExclusionTable(CL_NS(util)::Reader* exclusionlistReader, const bool deleteReader = false); + + /** + * Creates a TokenStream which tokenizes all the text in the provided Reader. + * + * @return A TokenStream build from a StandardTokenizer filtered with + * StandardFilter, LowerCaseFilter, StopFilter, GermanStemFilter + */ + virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + virtual TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +}; + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,60 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanStemmer.h" +#include "GermanStemFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE2(analysis,de) + + GermanStemFilter::GermanStemFilter(TokenStream* in, bool deleteTS) : + TokenFilter(in, deleteTS) + { + stemmer = _CLNEW GermanStemmer(); + exclusionSet = NULL; + } + + GermanStemFilter::GermanStemFilter(TokenStream* in, bool deleteTS, CLTCSetList* exclusionSet) : + TokenFilter(in, deleteTS) + { + stemmer = _CLNEW GermanStemmer(); + this->exclusionSet = exclusionSet; + } + + Token* GermanStemFilter::next(Token* t) { + if (input->next(t) == NULL) { + return NULL; + } else if (exclusionSet != NULL && exclusionSet->find(t->termBuffer()) != exclusionSet->end()) { // Check the exclusiontable + return t; + } else { + TCHAR* s = stemmer->stem(t->termBuffer(), t->termLength()); + // If not stemmed, dont waste the time creating a new token + if (_tcscmp(s, t->termBuffer()) != 0) { + t->setText(s); + } + return t; + } + } + + void GermanStemFilter::setStemmer(GermanStemmer* stemmer) { + if (stemmer != NULL && this->stemmer != stemmer) { + _CLLDELETE(this->stemmer); + this->stemmer = stemmer; + } + } + + /** + * Set an alternative exclusion list for this filter. + */ + void GermanStemFilter::setExclusionSet(CLTCSetList* exclusionSet) { + if (this->exclusionSet != exclusionSet) { + _CLLDELETE(exclusionSet); + this->exclusionSet = exclusionSet; + } + } diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_de_GermanStemFilter +#define _lucene_analysis_de_GermanStemFilter + +CL_NS_DEF2(analysis,de) + +/** + * A filter that stems German words. It supports a table of words that should + * not be stemmed at all. The stemmer used can be changed at runtime after the + * filter object is created (as long as it is a GermanStemmer). + */ +class CLUCENE_CONTRIBS_EXPORT GermanStemFilter : public CL_NS(analysis)::TokenFilter +{ +private: + + /** + * The actual token in the input stream. + */ + CL_NS(analysis)::Token* token; + GermanStemmer* stemmer; + CL_NS(analysis)::CLTCSetList* exclusionSet; + +public: + + GermanStemFilter(TokenStream* in, bool deleteTS = false); + + /** + * Builds a GermanStemFilter that uses an exclusiontable. + */ + GermanStemFilter(TokenStream* in, bool deleteTS, CL_NS(analysis)::CLTCSetList* exclusionSet); + + /** + * @return Returns the next token in the stream, or null at EOS + */ + virtual Token* next(Token* t); + + /** + * Set a alternative/custom GermanStemmer for this filter. + */ + void setStemmer(GermanStemmer* stemmer); + + /** + * Set an alternative exclusion list for this filter. + */ + void setExclusionSet(CL_NS(analysis)::CLTCSetList* exclusionSet); +}; + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,213 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanStemmer.h" + +CL_NS_USE(util) +CL_NS_USE2(analysis,de) + + GermanStemmer::GermanStemmer() : + sb() { + } + + TCHAR* GermanStemmer::stem(const TCHAR* term, size_t length) { + if (length < 0) { + length = _tcslen(term); + } + + // Reset the StringBuffer. + sb.clear(); + sb.append(term, length); + + if (!isStemmable(sb.getBuffer(), sb.length())) + return sb.giveBuffer(); + + // Stemming starts here... + substitute(sb); + strip(sb); + optimize(sb); + resubstitute(sb); + removeParticleDenotion(sb); + + return sb.giveBuffer(); + } + + bool GermanStemmer::isStemmable(const TCHAR* term, size_t length) const { + if (length < 0) { + length = _tcslen(term); + } + for (size_t c = 0; c < length; c++) { + if (_istalpha(term[c]) == 0) + return false; + } + return true; + } + + void GermanStemmer::strip(StringBuffer& buffer) + { + bool doMore = true; + while ( doMore && buffer.length() > 3 ) { + if ( ( buffer.length() + substCount > 5 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("nd"), 2 ) ) + { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( ( buffer.length() + substCount > 4 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("em"), 2 ) ) { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( ( buffer.length() + substCount > 4 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("er"), 2 ) ) { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('e') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('s') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('n') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + // "t" occurs only as suffix of verbs. + else if ( buffer.charAt( buffer.length() - 1 ) == _T('t') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else { + doMore = false; + } + } + } + + void GermanStemmer::optimize(StringBuffer& buffer) { + // Additional step for female plurals of professions and inhabitants. + if ( buffer.length() > 5 && buffer.substringEquals( buffer.length() - 5, buffer.length(), _T("erin*"), 5 ) ) { + buffer.deleteCharAt( buffer.length() -1 ); + strip( buffer ); + } + // Additional step for irregular plural nouns like "Matrizen -> Matrix". + if ( buffer.charAt( buffer.length() - 1 ) == ( _T('z') ) ) { + buffer.setCharAt( buffer.length() - 1, _T('x') ); + } + } + + void GermanStemmer::removeParticleDenotion(StringBuffer& buffer) { + if ( buffer.length() > 4 ) { + for ( size_t c = 0; c < buffer.length() - 3; c++ ) { + if ( buffer.substringEquals( c, c + 4, _T("gege"), 4 ) ) { + buffer.deleteChars( c, c + 2 ); + return; + } + } + } + } + + void GermanStemmer::substitute(StringBuffer& buffer) { + substCount = 0; + + for ( size_t i = 0; i < buffer.length(); i++ ) { +#ifdef _UCS2 + TCHAR c = buffer.charAt(i); +#else + unsigned char c = buffer.charAt(i); +#endif + // Replace the second char of a pair of the equal characters with an asterisk + if ( i > 0 && c == buffer.charAt ( i - 1 ) ) { + buffer.setCharAt( i, _T('*') ); + } + // Substitute Umlauts. + else if ( c == 0xe4 ) { + buffer.setCharAt( i, _T('a') ); + } + else if ( c == 0xf6 ) { + buffer.setCharAt( i, _T('o') ); + } + else if ( c == 0xfc ) { + buffer.setCharAt( i, _T('u') ); + } + // Fix bug so that 'ß' at the end of a word is replaced. + else if ( c == 0xdf ) { + buffer.setCharAt( i, _T('s') ); + buffer.insert( i + 1, _T('s') ); + substCount++; + } + // Take care that at least one character is left left side from the current one + if ( i < buffer.length() - 1 ) { + // Masking several common character combinations with an token + if ( ( i < buffer.length() - 2 ) && c == _T('s') && + buffer.charAt( i + 1 ) == _T('c') && buffer.charAt( i + 2 ) == _T('h') ) + { + buffer.setCharAt( i, _T('$') ); + buffer.deleteChars( i + 1, i + 3 ); + substCount =+ 2; + } + else if ( c == _T('c') && buffer.charAt( i + 1 ) == _T('h') ) { + buffer.setCharAt( i, 0xa7 ); // section sign in UTF-16 + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('e') && buffer.charAt( i + 1 ) == _T('i') ) { + buffer.setCharAt( i, _T('%') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('i') && buffer.charAt( i + 1 ) == _T('e') ) { + buffer.setCharAt( i, _T('&') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('i') && buffer.charAt( i + 1 ) == _T('g') ) { + buffer.setCharAt( i, _T('#') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('s') && buffer.charAt( i + 1 ) == _T('t') ) { + buffer.setCharAt( i, _T('!') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + } + } + } + + void GermanStemmer::resubstitute(StringBuffer& buffer) { + for ( size_t i = 0; i < buffer.length(); i++ ) { +#ifdef _UCS2 + TCHAR c = buffer.charAt(i); +#else + unsigned char c = buffer.charAt(i); +#endif + if ( c == _T('*') ) { + buffer.setCharAt( i, buffer.charAt( i - 1 ) ); + } + else if ( c == _T('$') ) { + buffer.setCharAt( i, 's' ); + buffer.insert( i + 1, _T("ch"), 2 ); + } + else if ( c == 0xa7 ) { // section sign in UTF-16 + buffer.setCharAt( i, _T('c') ); + buffer.insert( i + 1, _T('h') ); + } + else if ( c == _T('%') ) { + buffer.setCharAt( i, _T('e') ); + buffer.insert( i + 1, _T('i') ); + } + else if ( c == _T('&') ) { + buffer.setCharAt( i, _T('i') ); + buffer.insert( i + 1, _T('e') ); + } + else if ( c == _T('#') ) { + buffer.setCharAt( i, _T('i') ); + buffer.insert( i + 1, _T('g') ); + } + else if ( c == _T('!') ) { + buffer.setCharAt( i, _T('s') ); + buffer.insert( i + 1, _T('t') ); + } + } + } diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_de_GermanStemmer +#define _lucene_analysis_de_GermanStemmer + +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF2(analysis,de) + +/** + * A stemmer for German words. The algorithm is based on the report + * "A Fast and Simple Stemming Algorithm for German Words" by Jörg + * Caumanns (joerg.caumanns at isst.fhg.de). + */ +class CLUCENE_CONTRIBS_EXPORT GermanStemmer +{ +private: + + /** + * Buffer for the terms while stemming them. + */ + CL_NS(util)::StringBuffer sb; + + /** + * Amount of characters that are removed with substitute() while stemming. + */ + int substCount; + +public: + + /** + */ + GermanStemmer(); + + /** + * Stemms the given term to an unique discriminator. + * + * @param term The term that should be stemmed. + * @return Discriminator for term + */ + TCHAR* stem(const TCHAR* term, size_t length = -1); + +private: + + /** + * Checks if a term could be stemmed. + * + * @return true if, and only if, the given term consists in letters. + */ + bool isStemmable(const TCHAR* term, size_t length = -1) const; + + /** + * suffix stripping (stemming) on the current term. The stripping is reduced + * to the seven "base" suffixes "e", "s", "n", "t", "em", "er" and * "nd", + * from which all regular suffixes are build of. The simplification causes + * some overstemming, and way more irregular stems, but still provides unique. + * discriminators in the most of those cases. + * The algorithm is context free, except of the length restrictions. + */ + void strip(CL_NS(util)::StringBuffer& buffer); + + /** + * Does some optimizations on the term. This optimisations are + * contextual. + */ + void optimize(CL_NS(util)::StringBuffer& buffer); + + /** + * Removes a particle denotion ("ge") from a term. + */ + void removeParticleDenotion(CL_NS(util)::StringBuffer& buffer); + + /** + * Do some substitutions for the term to reduce overstemming: + * + * - Substitute Umlauts with their corresponding vowel: äöü -> aou, + * "ß" is substituted by "ss" + * - Substitute a second char of a pair of equal characters with + * an asterisk: ?? -> ?* + * - Substitute some common character combinations with a token: + * sch/ch/ei/ie/ig/st -> $/§/%/&/#/! + */ + void substitute(CL_NS(util)::StringBuffer& buffer); + + /** + * Undoes the changes made by substitute(). That are character pairs and + * character combinations. Umlauts will remain as their corresponding vowel, + * as "ß" remains as "ss". + */ + void resubstitute(CL_NS(util)::StringBuffer& buffer); +}; + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,65 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "LanguageBasedAnalyzer.h" +#include "CLucene/analysis/cjk/CJKAnalyzer.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" +#include "CLucene/snowball/SnowballFilter.h" + +CL_NS_USE(util) +CL_NS_USE2(analysis,cjk) +CL_NS_USE2(analysis,standard) +CL_NS_USE2(analysis,snowball) + +CL_NS_DEF(analysis) + +LanguageBasedAnalyzer::LanguageBasedAnalyzer(const TCHAR* language, bool stem) +{ + if ( language == NULL ) + _tcsncpy(lang,LUCENE_BLANK_STRING,100); + else + _tcsncpy(lang,language,100); + this->stem = stem; +} +LanguageBasedAnalyzer::~LanguageBasedAnalyzer(){ +} +void LanguageBasedAnalyzer::setLanguage(const TCHAR* language){ + _tcsncpy(lang,language,100); +} +void LanguageBasedAnalyzer::setStem(bool stem){ + this->stem = stem; +} +TokenStream* LanguageBasedAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { + TokenStream* ret = NULL; + if ( _tcscmp(lang, _T("cjk"))==0 ){ + ret = _CLNEW CL_NS2(analysis,cjk)::CJKTokenizer(reader); + }else{ + BufferedReader* bufferedReader = reader->__asBufferedReader(); + if ( bufferedReader == NULL ) + ret = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true ); + else + ret = _CLNEW StandardTokenizer(bufferedReader); + + ret = _CLNEW StandardFilter(ret,true); + + if ( stem ) + ret = _CLNEW SnowballFilter(ret,lang, true); //todo: should check whether snowball supports the language + + if ( stem ) //hmm... this could be configured seperately from stem + ret = _CLNEW ISOLatin1AccentFilter(ret, true); //todo: this should really only be applied to latin languages... + + //lower case after the latin1 filter + ret = _CLNEW LowerCaseFilter(ret,true); + } + //todo: could add a stop filter based on the language - need to fix the stoplist loader first + + return ret; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,26 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_languagebasedanalyzer_ +#define _lucene_analysis_languagebasedanalyzer_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(analysis) + +class CLUCENE_CONTRIBS_EXPORT LanguageBasedAnalyzer: public CL_NS(analysis)::Analyzer{ + TCHAR lang[100]; + bool stem; +public: + LanguageBasedAnalyzer(const TCHAR* language=NULL, bool stem=true); + ~LanguageBasedAnalyzer(); + void setLanguage(const TCHAR* language); + void setStem(bool stem); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,313 @@ +/* This is the Porter stemming algorithm, originally written by Martin Porter. + It may be regarded as cononical, in that it follows the + algorithm presented in + + Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, + no. 3, pp 130-137, + + See also http://www.tartarus.org/~martin/PorterStemmer + + Modified by "Hemant Muthiyan" + email: hemant_muthiyan@yahoo.co.in + +*/ + +#include "CLucene/_ApiHeader.h" +#include "PorterStemmer.h" + +CL_NS_DEF(analysis) + + bool PorterStemmer::cons(size_t i) { + switch (b[i]) { + case 'a': case 'e': case 'i': case 'o': case 'u': + return false; + case 'y': + return (i==k0) ? true : !cons(i-1); + default: + return true; + } + } + + int32_t PorterStemmer::m() { + int32_t n = 0; + size_t i = k0; + while(true) { + if (i > j) + return n; + if (! cons(i)) + break; + i++; + } + i++; + while(true) { + while(true) { + if (i > j) + return n; + if (cons(i)) + break; + i++; + } + i++; + n++; + while(true) { + if (i > j) + return n; + if (! cons(i)) + break; + i++; + } + i++; + } + } + + bool PorterStemmer::vowelinstem() { + for (size_t i = k0; i <= j; i++) + if (! cons(i)) + return true; + return false; + } + + /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ + bool PorterStemmer::doublec(size_t j) { + if (j < k0+1) + return false; + if (b[j] != b[j-1]) + return false; + return cons(j); + } + + /* cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant + and also if the second c is not w,x or y. this is used when trying to + restore an e at the end of a short word. e.g. + + cav(e), lov(e), hop(e), crim(e), but + snow, box, tray. + + */ + bool PorterStemmer::cvc(size_t i) { + if (i < k0+2 || !cons(i) || cons(i-1) || !cons(i-2)) + return false; + else { + int32_t ch = b[i]; + if (ch == 'w' || ch == 'x' || ch == 'y') return false; + } + return true; + } + + bool PorterStemmer::ends(TCHAR *s) { + size_t l = _tcslen(s); + size_t o = k-l+1; + if (o < k0) + return false; + for (size_t i = 0; i < l; i++) + if (b[o+i] != s[i]) + return false; + j = (l > k) ? 0 : k-l; + return true; + } + + void PorterStemmer::setto(const TCHAR *s) { + size_t l = _tcslen(s); + size_t o = j+1; + for (size_t i = 0; i < l; i++) + b[o+i] = s[i]; + k = j+l; + dirty = true; + } + + void PorterStemmer::r(const TCHAR *s) { + if (m() > 0) setto(s); + } + + void PorterStemmer::step1() { + if (b[k] == _T('s')) { + if (ends(_T("sses"))) k -= 2; + else if (ends(_T("ies"))) setto(_T("i")); + else if (b[k-1] != _T('s')) k--; + } + if (ends(_T("eed"))) { + if (m() > 0) + k--; + } + else if ((ends(_T("ed")) || ends(_T("ing"))) && vowelinstem()) { + k = j; + if (ends(_T("at"))) setto(_T("ate")); + else if (ends(_T("bl"))) setto(_T("ble")); + else if (ends(_T("iz"))) setto(_T("ize")); + else if (doublec(k)) { + int32_t ch = b[k--]; + if (ch == _T('l') || ch == _T('s') || ch == _T('z')) + k++; + } + else if (m() == 1 && cvc(k)) + setto(_T("e")); + } + } + + void PorterStemmer::step2() { + if (ends(_T("y")) && vowelinstem()) { + b[k] = 'i'; + dirty = true; + } + } + + void PorterStemmer::step3() { + if (k == k0) return; /* For Bug 1 */ + switch (b[k-1]) { + case 'a': + if (ends(_T("ational"))) { r(_T("ate")); break; } + if (ends(_T("tional"))) { r(_T("tion")); break; } + break; + case 'c': + if (ends(_T("enci"))) { r(_T("ence")); break; } + if (ends(_T("anci"))) { r(_T("ance")); break; } + break; + case 'e': + if (ends(_T("izer"))) { r(_T("ize")); break; } + break; + case 'l': + if (ends(_T("bli"))) { r(_T("ble")); break; } + if (ends(_T("alli"))) { r(_T("al")); break; } + if (ends(_T("entli"))) { r(_T("ent")); break; } + if (ends(_T("eli"))) { r(_T("e")); break; } + if (ends(_T("ousli"))) { r(_T("ous")); break; } + break; + case 'o': + if (ends(_T("ization"))) { r(_T("ize")); break; } + if (ends(_T("ation"))) { r(_T("ate")); break; } + if (ends(_T("ator"))) { r(_T("ate")); break; } + break; + case 's': + if (ends(_T("alism"))) { r(_T("al")); break; } + if (ends(_T("iveness"))) { r(_T("ive")); break; } + if (ends(_T("fulness"))) { r(_T("ful")); break; } + if (ends(_T("ousness"))) { r(_T("ous")); break; } + break; + case 't': + if (ends(_T("aliti"))) { r(_T("al")); break; } + if (ends(_T("iviti"))) { r(_T("ive")); break; } + if (ends(_T("biliti"))) { r(_T("ble")); break; } + break; + case 'g': + if (ends(_T("logi"))) { r(_T("log")); break; } + } + } + + void PorterStemmer::step4() { + switch (b[k]) { + case 'e': + if (ends(_T("icate"))) { r(_T("ic")); break; } + if (ends(_T("ative"))) { r(LUCENE_BLANK_STRING); break; } + if (ends(_T("alize"))) { r(_T("al")); break; } + break; + case 'i': + if (ends(_T("iciti"))) { r(_T("ic")); break; } + break; + case 'l': + if (ends(_T("ical"))) { r(_T("ic")); break; } + if (ends(_T("ful"))) { r(LUCENE_BLANK_STRING); break; } + break; + case 's': + if (ends(_T("ness"))) { r(LUCENE_BLANK_STRING); break; } + break; + } + } + + void PorterStemmer::step5() { + if (k == k0) return; /* for Bug 1 */ + switch (b[k-1]) { + case 'a': + if (ends(_T("al"))) break; + return; + case 'c': + if (ends(_T("ance"))) break; + if (ends(_T("ence"))) break; + return; + case 'e': + if (ends(_T("er"))) break; return; + case 'i': + if (ends(_T("ic"))) break; return; + case 'l': + if (ends(_T("able"))) break; + if (ends(_T("ible"))) break; return; + case 'n': + if (ends(_T("ant"))) break; + if (ends(_T("ement"))) break; + if (ends(_T("ment"))) break; + /* element etc. not stripped before the m */ + if (ends(_T("ent"))) break; + return; + case 'o': + if (ends(_T("ion")) && j >= 0 && (b[j] == 's' || b[j] == 't')) break; + /* j >= 0 fixes Bug 2 */ + if (ends(_T("ou"))) break; + return; + /* takes care of -ous */ + case 's': + if (ends(_T("ism"))) break; + return; + case 't': + if (ends(_T("ate"))) break; + if (ends(_T("iti"))) break; + return; + case 'u': + if (ends(_T("ous"))) break; + return; + case 'v': + if (ends(_T("ive"))) break; + return; + case 'z': + if (ends(_T("ize"))) break; + return; + default: + return; + } + if (m() > 1) + k = j; + } + + void PorterStemmer::step6() { + j = k; + if (b[k] == 'e') { + int32_t a = m(); + if (a > 1 || a == 1 && !cvc(k-1)) + k--; + } + if (b[k] == 'l' && doublec(k) && m() > 1) + k--; + } + + + PorterStemmer::PorterStemmer(TCHAR *Text) { + b = Text; + i = _tcslen(b); + dirty = false; + } + + PorterStemmer::~PorterStemmer(){ + b = NULL; + } + + + int32_t PorterStemmer::getResultLength() { return i; } + + bool PorterStemmer::stem() { + //i = strlen(b); + k = i -1; + k0 = 0; + if (k > k0+1) { + step1(); step2(); step3(); step4(); step5(); step6(); + } + // Also, a word is considered dirty if we lopped off letters + // Thanks to Ifigenia Vairelles for pointing this out. + if (i != k+1) + dirty = true; + i = k+1; + return dirty; + } + + const TCHAR* PorterStemmer::getResultBuffer() { + return b; + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/PorterStemmer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/PorterStemmer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/analysis/PorterStemmer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/analysis/PorterStemmer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,151 @@ +/* This is the Porter stemming algorithm, originally written by Martin Porter. + It may be regarded as cononical, in that it follows the + algorithm presented in + + Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, + no. 3, pp 130-137, + + See also http://www.tartarus.org/~martin/PorterStemmer + + Modified by "Hemant Muthiyan" + email: hemant_muthiyan@yahoo.co.in + + The Porter stemmer should be regarded as ‘frozen’, that is, strictly defined, + and not amenable to further modification. As a stemmer, it is slightly inferior + to the Snowball English or Porter2 stemmer, which derives from it, and which is + subjected to occasional improvements. For practical work, therefore, the new + Snowball stemmer is recommended. The Porter stemmer is appropriate to IR + research work involving stemming where the experiments need to be exactly + repeatable. + +*/ +#ifndef _lucene_analysis_PorterStemmer_ +#define _lucene_analysis_PorterStemmer_ + +CL_NS_DEF(analysis) + +class CLUCENE_CONTRIBS_EXPORT PorterStemmer +{ +private: + TCHAR *b; + size_t i, /* offset into b */ + j, k, k0; + bool dirty; + //private static final int32_t EXTRA = 1; + + /* cons(i) is true <=> b[i] is a consonant. */ + +private: + bool cons(size_t i); + + /* m() measures the number of consonant sequences between k0 and j. if c is + a consonant sequence and v a vowel sequence, and <..> indicates arbitrary + presence, + + gives 0 + vc gives 1 + vcvc gives 2 + vcvcvc gives 3 + .... + */ + + int32_t m(); + + /* vowelinstem() is true <=> k0,...j contains a vowel */ + + bool vowelinstem(); + + /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ + bool doublec(size_t j); + + /* cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant + and also if the second c is not w,x or y. this is used when trying to + restore an e at the end of a short word. e.g. + + cav(e), lov(e), hop(e), crim(e), but + snow, box, tray. + + */ + bool cvc(size_t i); + + bool ends(TCHAR *s); + + /* setto(s) sets (j+1),...k to the characters in the string s, readjusting + k. */ + + void setto(const TCHAR *s); + + /* r(s) is used further down. */ + + void r(const TCHAR *s); + + /* step1() gets rid of plurals and -ed or -ing. e.g. + + caresses -> caress + ponies -> poni + ties -> ti + caress -> caress + cats -> cat + + feed -> feed + agreed -> agree + disabled -> disable + + matting -> mat + mating -> mate + meeting -> meet + milling -> mill + messing -> mess + + meetings -> meet + + */ + + void step1(); + + /* step2() turns terminal y to i when there is another vowel in the stem. */ + + void step2(); + + /* step3() maps double suffices to single ones. so -ization ( = -ize plus + -ation) maps to -ize etc. note that the string before the suffix must give + m() > 0. */ + + void step3(); + + /* step4() deals with -ic-, -full, -ness etc. similar strategy to step3. */ + + void step4(); + + /* step5() takes off -ant, -ence etc., in context vcvc. */ + + void step5(); + + /* step6() removes a final -e if m() > 1. */ + + void step6(); + + public: + + PorterStemmer(TCHAR *Text); + ~PorterStemmer(); + + + /** + * Returns the length of the word resulting from the stemming process. + */ + int32_t getResultLength(); + + bool stem(); + + /** + * Returns a reference to a character buffer containing the results of + * the stemming process. You also need to consult getResultLength() + * to determine the length of the result. + */ + const TCHAR* getResultBuffer(); + +}; +CL_NS_END + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Encoder.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Encoder.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Encoder.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Encoder.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,19 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "Encoder.h" + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Encoder.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Encoder.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Encoder.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Encoder.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,56 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef _lucene_search_highlight_encoder_ +#define _lucene_search_highlight_encoder_ + + +CL_NS_DEF2(search,highlight) + +/** + * Encodes original text. The Encoder works with the Formatter to generate the output. + * + */ +class CLUCENE_CONTRIBS_EXPORT Encoder:LUCENE_BASE +{ +public: + /** Virtual destructor */ + virtual ~Encoder(){ + } + + /** + * @param originalText The section of text being output + */ + virtual TCHAR* encodeText(TCHAR* originalText) = 0; +}; + +/** + * Simple {@link Encoder} implementation that does not modify the output + * @author Nicko Cadell + * + */ +class DefaultEncoder: public Encoder +{ +public: + TCHAR* encodeText(TCHAR* originalText) + { + return STRDUP_TtoT(originalText); + } +}; + + +CL_NS_END2 + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Formatter.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Formatter.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Formatter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Formatter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,18 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "Formatter.h" diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Formatter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Formatter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Formatter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Formatter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,49 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_formatter_ +#define _lucene_search_highlight_formatter_ + +CL_NS_DEF2(search,highlight) +class TokenGroup; + +/** + * Processes terms found in the original text, typically by applying some form + * of mark-up to highlight terms in HTML search results pages. + * + */ +class CLUCENE_CONTRIBS_EXPORT Formatter:LUCENE_BASE +{ +public: + + /** Virtual destructor */ + virtual ~Formatter(){ + } + + /** + * @param originalText The section of text being considered for markup + * @param tokenGroup contains one or several overlapping Tokens along with + * their scores and positions. + */ + virtual TCHAR* highlightTerm(const TCHAR* originalTermText, const TokenGroup* tokenGroup) = 0; +}; + +CL_NS_END2 + +#endif + + + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,19 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "Fragmenter.h" + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Fragmenter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Fragmenter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Fragmenter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Fragmenter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,52 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_fragmenter_ +#define _lucene_search_highlight_fragmenter_ + + +CL_CLASS_DEF(analysis, Token) + +CL_NS_DEF2(search,highlight) + +/** + * Implements the policy for breaking text into multiple fragments for consideration + * by the {@link Highlighter} class. A sophisticated implementation may do this on the basis + * of detecting end of sentences in the text. + */ +class CLUCENE_CONTRIBS_EXPORT Fragmenter:LUCENE_BASE +{ +public: + /** Virtual destructor */ + virtual ~Fragmenter(){ + } + + /** + * Initializes the Fragmenter + * @param originalText + */ + virtual void start(const TCHAR* originalText) = 0; + + /** + * Test to see if this token from the stream should be held in a new TextFragment + * @param nextToken + */ + virtual bool isNewFragment(const CL_NS(analysis)::Token * nextToken) = 0; +}; + +CL_NS_END2 + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Highlighter.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Highlighter.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Highlighter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Highlighter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,525 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "Highlighter.h" +#include "TokenGroup.h" +#include "Encoder.h" +#include "Scorer.h" +#include "Formatter.h" +#include "HighlightScorer.h" +#include "Fragmenter.h" +#include "TextFragment.h" +#include "SimpleFragmenter.h" +#include "SimpleHTMLFormatter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) +CL_NS_USE(util) + + class FragmentQueue : public CL_NS(util)::PriorityQueue > + { + public: + FragmentQueue(int32_t size) + { + initialize(size, true); + } + + protected: + bool lessThan(TextFragment * fragA, TextFragment * fragB) + { + if (fragA->getScore() == fragB->getScore()) + return fragA->getFragNum() > fragB->getFragNum(); + else + return fragA->getScore() < fragB->getScore(); + } + }; + + + Highlighter::Highlighter(HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(true), + delete_encoder(true) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = _CLNEW SimpleHTMLFormatter(); + _encoder = _CLNEW DefaultEncoder(); + } + + Highlighter::Highlighter(Formatter * formatter, HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(false), + delete_encoder(true) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = formatter; + _encoder = _CLNEW DefaultEncoder(); + } + + Highlighter::Highlighter(Formatter * formatter, Encoder* encoder, HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(false), + delete_encoder(false) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = formatter; + _encoder = encoder; + } + + Highlighter::~Highlighter() + { + if ( delete_textFragmenter ) + _CLDELETE ( _textFragmenter ); + + if ( delete_fragmentScorer ) + _CLDELETE(_fragmentScorer); + + if( delete_formatter ) + _CLDELETE(_formatter); + + if ( delete_encoder ) + _CLDELETE(_encoder); + } + + TCHAR* Highlighter::getBestFragment(TokenStream * tokenStream, const TCHAR* text) + { + TCHAR** results = getBestFragments(tokenStream,text, 1); + TCHAR* result = 0; + + if (results[0] != NULL ) + result = stringDuplicate(results[0]); + + _CLDELETE_CARRAY_ALL(results); + + return result; + } + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * This is a convenience method that calls + * {@link #getBestFragment(TokenStream, const TCHAR*)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param fieldName Name of field used to influence analyzer's tokenization policy + * + * @return highlighted text fragment or NULL if no terms found + */ + TCHAR* Highlighter::getBestFragment(Analyzer* analyzer, const TCHAR* fieldName, const TCHAR* text) + { + TokenStream* tokenStream = analyzer->tokenStream(fieldName, _CLNEW StringReader(text)); + return getBestFragment(tokenStream, text); + } + + TCHAR** Highlighter::getBestFragments( + TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments) + { + maxNumFragments = cl_max((int32_t)1, maxNumFragments); //sanity check + + StringBuffer buffer; + TextFragment** frags = getBestTextFragments(&buffer,tokenStream,text, true,maxNumFragments); + + //Get text + std::vector fragTexts; + for (uint32_t i=0; frags[i]!=NULL; i++) + { + TextFragment* f = frags[i]; + if ((f != NULL) && (f->getScore() > 0)) + { + fragTexts.push_back(f->toString(&buffer)); + } + _CLDELETE(f); + } + + _CLDELETE_ARRAY(frags); + + size_t l = fragTexts.size(); + TCHAR** ret = _CL_NEWARRAY(TCHAR*,l+1); + for ( size_t j=0;j 0) + { + result.append(separator); + } + result.append(sections[i]); + } + + _CLDELETE_CARRAY_ALL(sections); + return result.toString(); + } + + TextFragment** Highlighter::getBestTextFragments( + StringBuffer* writeTo, + TokenStream * tokenStream, + const TCHAR* text, + bool mergeContiguousFragments, + int32_t maxNumFragments) + { + CLArrayList docFrags(false); + TextFragment* currentFrag = _CLNEW TextFragment(writeTo->length(), docFrags.size()); + _fragmentScorer->startFragment(currentFrag); + docFrags.push_back(currentFrag); + + FragmentQueue fragQueue(maxNumFragments); + + try + { + int32_t startOffset; + int32_t endOffset; + int32_t lastEndOffset = 0; + _textFragmenter->start(text); + TCHAR substringBuffer[LUCENE_MAX_WORD_LEN]; + + TokenGroup* tokenGroup=_CLNEW TokenGroup(); + + TCHAR buffer[LUCENE_MAX_FIELD_LEN+1]; + Token token; + while ( tokenStream->next(&token) ) + { + if((tokenGroup->getNumTokens()>0)&&(tokenGroup->isDistinct(&token))){ + //the current token is distinct from previous tokens - + // markup the cached token group info + startOffset = tokenGroup->getStartOffset(); + endOffset = tokenGroup->getEndOffset(); + + _tcsncpy(substringBuffer,text+startOffset,endOffset-startOffset); + substringBuffer[endOffset-startOffset]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(substringBuffer); + TCHAR* markedUpText=_formatter->highlightTerm(encoded, tokenGroup); + _CLDELETE_CARRAY(encoded); + + //store any whitespace etc from between this and last group + if (startOffset > lastEndOffset){ + int len = startOffset-lastEndOffset; + if ( len > LUCENE_MAX_FIELD_LEN ) + len = LUCENE_MAX_FIELD_LEN; + _tcsncpy(buffer,text+lastEndOffset,len); + buffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(buffer); + writeTo->append(encoded); + _CLDELETE_CARRAY(encoded); + } + writeTo->append(markedUpText); + lastEndOffset=endOffset; + tokenGroup->clear(); + _CLDELETE_CARRAY(markedUpText); + + //check if current token marks the start of a new fragment + if (_textFragmenter->isNewFragment(&token)) + { + currentFrag->setScore(_fragmentScorer->getFragmentScore()); + //record stats for a new fragment + currentFrag->setTextEndPos( writeTo->length() ); + currentFrag =_CLNEW TextFragment(writeTo->length(), docFrags.size()); + _fragmentScorer->startFragment(currentFrag); + docFrags.push_back(currentFrag); + } + } + + // does query contain current token? + float_t score=_fragmentScorer->getTokenScore(&token); + //TCHAR* highlightedTerm = _formatter->highlightTerm(&substringBuffer, token->termText(), score, startOffset); + //newText->append(highlightedTerm); + //_CLDELETE_CARRAY(highlightedTerm); + //_CLDELETE(token); + + tokenGroup->addToken(&token,_fragmentScorer->getTokenScore(&token)); + + if(lastEndOffset>maxDocBytesToAnalyze) + { + break; + } + } + currentFrag->setScore(_fragmentScorer->getFragmentScore()); + + if(tokenGroup->getNumTokens()>0) + { + //flush the accumulated text (same code as in above loop) + startOffset = tokenGroup->getStartOffset(); + endOffset = tokenGroup->getEndOffset(); + + _tcsncpy(substringBuffer,text+startOffset,endOffset-startOffset); + substringBuffer[endOffset-startOffset]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(substringBuffer); + TCHAR* markedUpText=_formatter->highlightTerm(encoded, tokenGroup); + _CLDELETE_CARRAY(encoded); + + //store any whitespace etc from between this and last group + if (startOffset > lastEndOffset){ + int len = startOffset-lastEndOffset; + if ( len > LUCENE_MAX_FIELD_LEN ) + len = LUCENE_MAX_FIELD_LEN; + _tcsncpy(buffer,text+lastEndOffset,len); + buffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(buffer); + writeTo->append(encoded); + _CLDELETE_CARRAY(encoded); + } + writeTo->append(markedUpText); + lastEndOffset=endOffset; + + _CLDELETE_CARRAY(markedUpText); + } + + // append text after end of last token + //if (lastEndOffset < (int32_t)_tcslen(text)) + //newText->append(text+lastEndOffset); + + currentFrag->setTextEndPos(writeTo->length()); + + //sort the most relevant sections of the text + while (docFrags.size() > 0) { + //for (TextFragmentList::iterator i = docFrags.begin(); i != docFrags.end(); i++) + //{ + currentFrag = (TextFragment*) docFrags[0]; + docFrags.remove(0); + + //If you are running with a version of Lucene before 11th Sept 03 + // you do not have PriorityQueue.insert() - so uncomment the code below + + /*if (currentFrag->getScore() >= minScore) + { + fragQueue.put(currentFrag); + if (fragQueue.size() > maxNumFragments) + { // if hit queue overfull + _CLLDELETE(fragQueue.pop()); // remove lowest in hit queue + minScore = ((TextFragment *) fragQueue.top())->getScore(); // reset minScore + } + + + } else { + _CLDELETE(currentFrag); + }*/ + + //The above code caused a problem as a result of Christoph Goller's 11th Sept 03 + //fix to PriorityQueue. The correct method to use here is the new "insert" method + // USE ABOVE CODE IF THIS DOES NOT COMPILE! + if ( !fragQueue.insert(currentFrag) ) + _CLDELETE(currentFrag); + + //todo: check this + } + + //return the most relevant fragments + int32_t fragsLen = fragQueue.size(); + TextFragment** frags = _CL_NEWARRAY(TextFragment*,fragsLen+1); + for ( int32_t i=0;i fragTexts; + for (int32_t i = 0; i < fragsLen; i++) + { + TextFragment* tf = frags[i]; + if ((tf != NULL) && (tf->getScore() > 0)) + fragTexts.push_back(tf); + else + _CLDELETE(tf); + } + _CLDELETE_ARRAY(frags); + frags = _CL_NEWARRAY(TextFragment*,fragTexts.size()+1); + fragTexts.toArray_nullTerminated(frags); + } + + _CLDELETE(tokenGroup); + //_CLDELETE(newText); + return frags; + + } + _CLFINALLY( + if (tokenStream) + { + try + { + tokenStream->close(); + } + catch (...) + { + } + } + ) + } + + + void Highlighter::_mergeContiguousFragments(TextFragment** frag, int32_t fragsLen) + { + bool mergingStillBeingDone; + if ( frag[0] != NULL ) + do + { + mergingStillBeingDone = false; //initialise loop control flag + //for each fragment, scan other frags looking for contiguous blocks + for (int32_t i=0; ifollows(frag[x])) + { + frag1 = frag[x]; + frag1Num = x; + frag2 = frag[i]; + frag2Num = i; + } + else if (frag[x]->follows(frag[i])) + { + frag1 = frag[i]; + frag1Num = i; + frag2 = frag[x]; + frag2Num = x; + } + //merging required.. + if (frag1 != NULL) + { + if (frag1->getScore() > frag2->getScore()) + { + bestScoringFragNum = frag1Num; + worstScoringFragNum = frag2Num; + } + else + { + bestScoringFragNum = frag2Num; + worstScoringFragNum = frag1Num; + } + frag1->merge(frag2); + frag[worstScoringFragNum]= NULL; + mergingStillBeingDone = true; + frag[bestScoringFragNum]=frag1; + _CLDELETE(frag2); + } + } + } + } + while (mergingStillBeingDone); + } + + int32_t Highlighter::getMaxDocBytesToAnalyze() + { + return maxDocBytesToAnalyze; + } + + void Highlighter::setMaxDocBytesToAnalyze(int32_t byteCount) + { + maxDocBytesToAnalyze = byteCount; + } + + Fragmenter * Highlighter::getTextFragmenter() + { + return _textFragmenter; + } + + void Highlighter::setTextFragmenter(Fragmenter * fragmenter) + { + if ( delete_textFragmenter ){ + _CLDELETE(_textFragmenter); + delete_textFragmenter = false; + } + _textFragmenter = fragmenter; + } + + HighlightScorer * Highlighter::getFragmentScorer() + { + return _fragmentScorer; + } + + + void Highlighter::setFragmentScorer(HighlightScorer * scorer) + { + if ( delete_fragmentScorer ){ + delete_fragmentScorer = false; + _CLDELETE(scorer); + } + _fragmentScorer = scorer; + } + + + Encoder* Highlighter::getEncoder() + { + return _encoder; + } + void Highlighter::setEncoder(Encoder* encoder) + { + if ( delete_encoder ){ + _CLDELETE(encoder); + delete_encoder = false; + } + this->_encoder = encoder; + } + + + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Highlighter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Highlighter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Highlighter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Highlighter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,226 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_highlighter_ +#define _lucene_search_highlight_highlighter_ + + + +CL_CLASS_DEF(util, StringBuffer) +//#include "CLucene/util/VoidList.h" +CL_CLASS_DEF2(search,highlight,Formatter) +CL_CLASS_DEF2(search,highlight,Encoder) +CL_CLASS_DEF2(search,highlight,HighlightScorer) +CL_CLASS_DEF2(search,highlight,Fragmenter) +CL_CLASS_DEF2(search,highlight,TextFragment) +CL_CLASS_DEF(analysis, TokenStream) +CL_CLASS_DEF(analysis, Analyzer) + +//#include "HighlightScorer.h" +//#include "SimpleFragmenter.h" +//#include "TextFragment.h" + +CL_NS_DEF2(search,highlight) + +/** +* Class used to markup highlighted terms found in the best sections of a +* text, using configurable {@link Fragmenter}, {@link Scorer}, {@link Formatter}, +* and tokenizers. +* {@link Encoder} and tokenizers. +*/ +class CLUCENE_CONTRIBS_EXPORT Highlighter :LUCENE_BASE +{ +private: + int32_t maxDocBytesToAnalyze; + + Formatter * _formatter; + bool delete_formatter; + + Encoder* _encoder; + bool delete_encoder; + + Fragmenter * _textFragmenter; + bool delete_textFragmenter; + + HighlightScorer * _fragmentScorer; + bool delete_fragmentScorer; + + /** Improves readability of a score-sorted list of TextFragments by merging any fragments + * that were contiguous in the original text into one larger fragment with the correct order. + * This will leave a "null" in the array entry for the lesser scored fragment. + * + * @param frag An array of document fragments in descending score + */ + void _mergeContiguousFragments(TextFragment** frag, int32_t fragsLen); + +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_DOC_BYTES_TO_ANALYZE=50*1024); + + /** + * Constructs a Highlighter object with the provided scorer. The HighlightScorer object is owned + * by the Highlighter object, and it will freed in the destructor. + */ + Highlighter(HighlightScorer * fragmentScorer); + + Highlighter(Formatter * formatter, HighlightScorer * fragmentScorer); + + Highlighter(Formatter * formatter, Encoder* encoder, HighlightScorer * fragmentScorer); + + + /** + * Destructor for Highlighter. It deletes the owned HighlightScorer, formatter and textFragmenter. + */ + ~Highlighter(); + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragment with the highest score + * is returned + * + * @param tokenStream a stream of tokens identified in the text parameter, including offset information. + * This is typically produced by an analyzer re-parsing a document's + * text. Some work may be done on retrieving TokenStreams more efficently + * by adding support for storing original text position data in the Lucene + * index but this support is not currently available (as of Lucene 1.4 rc2). + * @param text text to highlight terms in + * + * @return highlighted text fragment or null if no terms found + */ + TCHAR* getBestFragment(CL_NS(analysis)::TokenStream * tokenStream, const TCHAR* text); + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * This is a convenience method that calls + * {@link #getBestFragment(TokenStream, const TCHAR*)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param fieldName Name of field used to influence analyzer's tokenization policy + * + * @return highlighted text fragment or null if no terms found + */ + TCHAR* getBestFragment(CL_NS(analysis)::Analyzer* analyzer, const TCHAR* fieldName, const TCHAR* text); + + /** + * Highlights chosen terms in a text, extracting the most relevant sections. + * This is a convenience method that calls + * {@link #getBestFragments(TokenStream, const TCHAR*, int)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * + * @return highlighted text fragments (between 0 and maxNumFragments number of fragments) + */ + TCHAR** getBestFragments( + CL_NS(analysis)::Analyzer* analyzer, + const TCHAR* text, + int32_t maxNumFragments); + + /** + * Highlights chosen terms in a text, extracting the most relevant sections. + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragments with the highest scores + * are returned as an array of strings in order of score (contiguous fragments are merged into + * one in their original order to improve readability) + * + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * + * @return highlighted text fragments (between 0 and maxNumFragments number of fragments) + */ + TCHAR** getBestFragments( + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments); + + /** + * Low level api to get the most relevant (formatted) sections of the document. + * This method has been made public to allow visibility of score information held in TextFragment objects. + * Thanks to Jason Calabrese for help in redefining the interface. + * @param tokenStream + * @param text + * @param maxNumFragments + * @param mergeContiguousFragments + */ + TextFragment** getBestTextFragments( + CL_NS(util)::StringBuffer* writeTo, + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + bool mergeContiguousFragments, + int32_t maxNumFragments); + + /** + * Highlights terms in the text , extracting the most relevant sections + * and concatenating the chosen fragments with a separator (typically "..."). + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragments with the highest scores + * are returned in order as "separator" delimited strings. + * + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * @param separator the separator used to intersperse the document fragments (typically "...") + * + * @return highlighted text + */ + TCHAR* getBestFragments( + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments, + const TCHAR* separator); + + /** + * @return the maximum number of bytes to be tokenized per doc + */ + int32_t getMaxDocBytesToAnalyze(); + + /** + * @param byteCount the maximum number of bytes to be tokenized per doc + * (This can improve performance with large documents) + */ + void setMaxDocBytesToAnalyze(int32_t byteCount); + + /** + */ + Fragmenter * getTextFragmenter(); + + /** + * @param fragmenter + */ + void setTextFragmenter(Fragmenter * fragmenter); + + /** + * @return Object used to score each text fragment + */ + HighlightScorer * getFragmentScorer(); + + /** + * @param HighlightScorer + */ + void setFragmentScorer(HighlightScorer * scorer); + + Encoder* getEncoder(); + void setEncoder(Encoder* encoder); +}; + + +CL_NS_END2 + +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/HighlightScorer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/HighlightScorer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/HighlightScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/HighlightScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,63 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_highlighterscorer_ +#define _lucene_search_highlight_highlighterscorer_ + + +CL_CLASS_DEF(analysis, Token) +//#include "TextFragment.h" + +CL_NS_DEF2(search,highlight) +class TextFragment; + +/** + * Adds to the score for a fragment based on its tokens + */ +class CLUCENE_CONTRIBS_EXPORT HighlightScorer:LUCENE_BASE +{ +public: + virtual ~HighlightScorer(){ + } + + /** + * called when a new fragment is started for consideration + * @param newFragment + */ + virtual void startFragment(TextFragment* newFragment) = 0; + + /** + * Called for each token in the current fragment + * @param token The token to be scored + * @return a score which is passed to the Highlighter class to influence the mark-up of the text + * (this return value is NOT used to score the fragment) + */ + virtual float_t getTokenScore(CL_NS(analysis)::Token* token) = 0; + + + /** + * Called when the highlighter has no more tokens for the current fragment - the scorer returns + * the weighting it has derived for the most recent fragment, typically based on the tokens + * passed to getTokenScore(). + * + */ + virtual float_t getFragmentScore() = 0; +}; + +CL_NS_END2 +#endif + + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,118 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "QueryScorer.h" +#include "WeightedTerm.h" +#include "QueryTermExtractor.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(index) +CL_NS_USE(analysis) + + QueryScorer::QueryScorer(const Query * query): + _termsToFind(false,true), + _uniqueTermsInFragment(true) + { + WeightedTerm** _weighted_terms = QueryTermExtractor::getTerms(query); + initialize(_weighted_terms); + _CLDELETE_ARRAY(_weighted_terms); + } + QueryScorer::~QueryScorer() + { + } + +/* QueryScorer(Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName) + { + WeightedTerm** _weighted_terms = QueryTermExtractor.getIdfWeightedTerms(query, reader, fieldName); + initialize(_weighted_terms); + }*/ + + + QueryScorer::QueryScorer(WeightedTerm** weightedTerms) + { + initialize(weightedTerms); + } + + void QueryScorer::initialize(WeightedTerm** weightedTerms) + { + _currentTextFragment = NULL; + _totalScore = 0; + _maxTermWeight = 0; + + // Copy external weighted terms + int i=0; + while ( weightedTerms[i] != NULL ){ + const WeightedTerm* existingTerm=_termsToFind.get(weightedTerms[i]->getTerm()); + if( (existingTerm==NULL) ||(existingTerm->getWeight()getWeight()) ) + { + //if a term is defined more than once, always use the highest scoring weight + WeightedTerm* term = weightedTerms[i]; + _termsToFind.put(term->getTerm(), term); + + _maxTermWeight=cl_max(_maxTermWeight,weightedTerms[i]->getWeight()); + }else + _CLDELETE(weightedTerms[i]); + + i++; + } + } + + void QueryScorer::startFragment(TextFragment * newFragment) + { + _uniqueTermsInFragment.clear(); + _currentTextFragment=newFragment; + _totalScore=0; + + } + + float_t QueryScorer::getTokenScore(Token * token) + { + const TCHAR* termText=token->termBuffer(); + + const WeightedTerm* queryTerm = _termsToFind.get(termText); + if(queryTerm==NULL) + { + //not a query term - return + return 0; + } + //found a query term - is it unique in this doc? + if(_uniqueTermsInFragment.find((TCHAR*)termText)==_uniqueTermsInFragment.end()) + { + _totalScore+=queryTerm->getWeight(); + TCHAR* owned_term = stringDuplicate(termText); + _uniqueTermsInFragment.insert(owned_term); + } + return queryTerm->getWeight(); + } + + /** + * + * @return The highest weighted term (useful for passing to GradientFormatter to set + * top end of coloring scale. + */ + float_t QueryScorer::getMaxTermWeight() + { + return _maxTermWeight; + } + + + float_t QueryScorer::getFragmentScore(){ + return _totalScore; + } + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/QueryScorer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/QueryScorer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/QueryScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/QueryScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,114 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_queryscorer_ +#define _lucene_search_highlight_queryscorer_ + + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(search, Query) + +//#include "CLucene/search/SearchHeader.h" +//#include "TextFragment.h" + +#include "HighlightScorer.h" + +CL_NS_DEF2(search,highlight) + +class WeightedTerm; +class QueryTermExtractor; +class TextFragment; + +/** + * {@link Scorer} implementation which scores text fragments by the number of unique query terms found. + * This class uses the {@link QueryTermExtractor} class to process determine the query terms and + * their boosts to be used. + */ +//TODO: provide option to boost score of fragments near beginning of document +// based on fragment.getFragNum() +class CLUCENE_CONTRIBS_EXPORT QueryScorer : public HighlightScorer +{ +private: + TextFragment * _currentTextFragment; + CL_NS(util)::CLHashSet _uniqueTermsInFragment; + float_t _totalScore; + float_t _maxTermWeight; + CL_NS(util)::CLHashMap > _termsToFind; + +public: + /** + * + * @param query a Lucene query (ideally rewritten using query.rewrite + * before being passed to this class and the searcher) + */ + QueryScorer(const Query * query); + + /** + * + * @param query a Lucene query (ideally rewritten using query.rewrite + * before being passed to this class and the searcher) + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg set font color intensity + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + */ + QueryScorer(const Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName); + + QueryScorer(WeightedTerm** weightedTerms); + + ~QueryScorer(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#startFragment(org.apache.lucene.search.highlight.TextFragment) + */ + void startFragment(TextFragment* newFragment); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#scoreToken(org.apache.lucene.analysis.Token) + */ + float_t getTokenScore(CL_NS(analysis)::Token * token); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#endFragment(org.apache.lucene.search.highlight.TextFragment) + */ + float_t getFragmentScore(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#allFragmentsProcessed() + */ + void allFragmentsProcessed(); + + /** + * + * @return The highest weighted term (useful for passing to GradientFormatter to set + * top end of coloring scale. + */ + float_t getMaxTermWeight(); + +private: + void initialize(WeightedTerm** weightedTerms); + +}; + +CL_NS_END2 + +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,130 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "QueryTermExtractor.h" + +#include "CLucene/search/Query.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/TermQuery.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(index) + + WeightedTerm** QueryTermExtractor::getTerms(const Query * query, bool prohibited, const TCHAR* fieldName) + { + WeightedTermList terms(false); + getTerms(query,&terms,prohibited,fieldName); + + // Return extracted terms + WeightedTerm** ret = _CL_NEWARRAY(WeightedTerm*,terms.size()+1); + terms.toArray_nullTerminated(ret); + + return ret; + } + + void QueryTermExtractor::getTerms(const Query * query, WeightedTermList * terms, bool prohibited, const TCHAR* fieldName) + { + if (query->instanceOf( BooleanQuery::getClassName() )) + { + getTermsFromBooleanQuery((BooleanQuery *) query, terms, prohibited, fieldName); + } +// FilteredQuery not implemented yet +// else if (query->instanceOf( FilteredQuery::getClassName() )) +// getTermsFromFilteredQuery((FilteredQuery *) query, terms); + else + { + TermSet nonWeightedTerms; + query->extractTerms(&nonWeightedTerms); + for (TermSet::iterator iter = nonWeightedTerms.begin(); iter != nonWeightedTerms.end(); iter++) + { + Term * term = (Term *)(*iter); + if ( fieldName == NULL || term->field() == fieldName ) + terms->insert(_CLNEW WeightedTerm(query->getBoost(), term->text())); + _CLLDECDELETE( term ); + } + } + } + + /** + * Extracts all terms texts of a given Query into an array of WeightedTerms + * + * @param query Query to extract term texts from + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg chaning intensity of font color + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + * @return an array of the terms used in a query, plus their weights. + */ + WeightedTerm** QueryTermExtractor::getIdfWeightedTerms(const Query* query, IndexReader* reader, const TCHAR* fieldName) + { + WeightedTermList terms(true); + getTerms(query,&terms,false,fieldName); + + int32_t totalNumDocs=reader->numDocs(); + + WeightedTermList::iterator itr = terms.begin(); + while ( itr != terms.end() ) + { + try + { + Term* term = _CLNEW Term(fieldName,(*itr)->getTerm()); + int32_t docFreq=reader->docFreq(term); + _CLDECDELETE(term); + + //IDF algorithm taken from DefaultSimilarity class + float_t idf=(float_t)(log(totalNumDocs/(float_t)(docFreq+1)) + 1.0); + (*itr)->setWeight((*itr)->getWeight() * idf); + }catch (CLuceneError& e){ + if ( e.number()!=CL_ERR_IO ) + throw e; + } + + itr++; + } + + // Return extracted terms + WeightedTerm** ret = _CL_NEWARRAY(WeightedTerm*,terms.size()+1); + terms.toArray_nullTerminated(ret); + + return ret; + } + + void QueryTermExtractor::getTermsFromBooleanQuery(const BooleanQuery * query, WeightedTermList * terms, bool prohibited, const TCHAR* fieldName) + { + uint32_t numClauses = query->getClauseCount(); + BooleanClause** queryClauses = _CL_NEWARRAY(BooleanClause*,numClauses); + query->getClauses(queryClauses); + + for (uint32_t i = 0; i < numClauses; i++) + { + if (prohibited || !queryClauses[i]->prohibited){ + Query* qry = queryClauses[i]->getQuery(); + getTerms(qry, terms, prohibited, fieldName); + } + } + _CLDELETE_ARRAY(queryClauses); + } + +// FilteredQuery not implemented yet +// void QueryTermExtractor::getTermsFromFilteredQuery(const FilteredQuery * query, WeightedTermList * terms, bool prohibited) +// { +// getTerms(query->getQuery(), terms, prohibited); +// } + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,82 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef _lucene_search_highlight_querytermextractor_ +#define _lucene_search_highlight_querytermextractor_ + +CL_CLASS_DEF(search, Query) +CL_CLASS_DEF(search, BooleanQuery) +CL_CLASS_DEF(search, PhraseQuery) +CL_CLASS_DEF(search, TermQuery) +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, Term) + +#include "WeightedTerm.h" + +CL_NS_DEF2(search,highlight) + +/** + * Utility class used to extract the terms used in a query, plus any weights. + * This class will not find terms for MultiTermQuery, RangeQuery and PrefixQuery classes + * so the caller must pass a rewritten query (see Query.rewrite) to obtain a list of + * expanded terms. + * + */ +class CLUCENE_CONTRIBS_EXPORT QueryTermExtractor +{ + QueryTermExtractor(){ + } +public: + + /** + * Extracts all terms texts of a given Query into an returned array of WeightedTerms + * + * @param query Query to extract term texts from + * @param prohibited true to extract "prohibited" terms, too + * @param fieldName field name used for filtering query terms, MUST be interned prior to this call + * @return an array of the terms used in a query, plus their weights.Memory owned by the caller + */ + static WeightedTerm** getTerms(const Query *query, bool prohibited = false, const TCHAR* fieldName = NULL); + + /** + * Extracts all terms texts of a given Query into an array of WeightedTerms + * + * @param query Query to extract term texts from + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg chaning intensity of font color + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + * @return an array of the terms used in a query, plus their weights. + */ + static WeightedTerm** getIdfWeightedTerms(const Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName); + + /** + * Extracts all terms texts of a given Query into given array of WeightedTerms + * + * @param query Query to extract term texts from + * @param prohibited true to extract "prohibited" terms, too + * @param fieldName field name used for filtering query terms, MUST be interned prior to this call + * @return an array of the terms used in a query, plus their weights.Memory owned by the caller + */ + static void getTerms(const Query * query, WeightedTermList*, bool prohibited = false, const TCHAR* fieldName = NULL); + + static void getTermsFromBooleanQuery(const BooleanQuery * query, WeightedTermList* terms, bool prohibited, const TCHAR* fieldName); +// static void getTermsFromFilteredQuery(const FilteredQuery * query, WeightedTermList* terms); +}; + +CL_NS_END2 + + + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Scorer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Scorer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/Scorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/Scorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,61 @@ +#ifndef _lucene_search_highlight_scorer_h_ +#define _lucene_search_highlight_scorer_h_ + +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +//#include + +CL_NS_USE(analysis) + +/** + * Adds to the score for a fragment based on its tokens + */ +namespace lucene { namespace search { namespace highlight { + + class TextFragment; + +class CLUCENE_CONTRIBS_EXPORT Scorer +{ +public: + virtual ~Scorer(){}; + /** + * called when a new fragment is started for consideration + * @param newFragment + */ + virtual void startFragment(TextFragment * newFragment) = 0; + + /** + * Called for each token in the current fragment + * @param token The token to be scored + * @return a score which is passed to the TermHighlighter class to influence the mark-up of the text + * (this return value is NOT used to score the fragment) + */ + virtual float_t getTokenScore(Token * token) = 0; + + + /** + * Called when the highlighter has no more tokens for the current fragment - the scorer will typically + * call setScore() on the fragment passed in startFragment to record total info + * + */ + virtual float_t getFragmentScore() = 0; + +}; + +}}} + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,55 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "SimpleFragmenter.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) + +SimpleFragmenter::SimpleFragmenter(int32_t fragmentSize) + : _fragmentSize(fragmentSize), _currentNumFrags(0) +{ +} +SimpleFragmenter::~SimpleFragmenter(){ +} + +void SimpleFragmenter::start(const TCHAR*) +{ + _currentNumFrags=1; +} + +bool SimpleFragmenter::isNewFragment(const Token * token) +{ + bool isNewFrag= token->endOffset()>=(_fragmentSize*_currentNumFrags); + if (isNewFrag) { + _currentNumFrags++; + } + return isNewFrag; +} + +int32_t SimpleFragmenter::getFragmentSize() const +{ + return _fragmentSize; +} + +void SimpleFragmenter::setFragmentSize(int32_t size) +{ + _fragmentSize = size; +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,70 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_simplefragmenter_ +#define _lucene_search_highlight_simplefragmenter_ + + +#include "Fragmenter.h" + +CL_NS_DEF2(search,highlight) + +/** + * {@link Fragmenter} implementation which breaks text up into same-size + * fragments with no concerns over spotting sentence boundaries. + */ + +class CLUCENE_CONTRIBS_EXPORT SimpleFragmenter:public Fragmenter +{ +private: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_FRAGMENT_SIZE =100 ); + int32_t _currentNumFrags; + int32_t _fragmentSize; + +public: + /** + * + * @param fragmentSize size in bytes of each fragment + */ + SimpleFragmenter(int32_t fragmentSize = DEFAULT_FRAGMENT_SIZE); + + ~SimpleFragmenter(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.TextFragmenter#start(const TCHAR*) + */ + void start(const TCHAR* originalText); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.TextFragmenter#isNewFragment(org.apache.lucene.analysis.Token) + */ + bool isNewFragment(const CL_NS(analysis)::Token * token); + + /** + * @return size in bytes of each fragment + */ + int32_t getFragmentSize() const; + + /** + * @param size size in bytes of each fragment + */ + void setFragmentSize(int32_t size); + +}; + +CL_NS_END2 + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,83 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "SimpleHTMLEncoder.h" +#include "Formatter.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF2(search,highlight) + +SimpleHTMLEncoder::SimpleHTMLEncoder(void) +{ +} + +SimpleHTMLEncoder::~SimpleHTMLEncoder(void) +{ +} + +TCHAR* SimpleHTMLEncoder::encodeText(TCHAR* originalText) +{ + return htmlEncode(originalText); +} + +TCHAR* SimpleHTMLEncoder::htmlEncode(TCHAR* plainText) +{ + size_t plainTextLen = _tcslen(plainText); + if (plainText == NULL || plainTextLen == 0) + { + return STRDUP_TtoT(_T("")); + } + + CL_NS(util)::StringBuffer result(plainTextLen); + + for (int32_t index=0; index': + result.append(_T(">")); + break; + + default: + if (ch < 128) + result.appendChar(ch); + else{ + result.append(_T("&#")); + result.appendInt(ch); + result.append(_T(";")); + } + } + } + + return result.toString(); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,45 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_simplehtmlencoder_ +#define _lucene_search_highlight_simplehtmlencoder_ + + +#include "Encoder.h" + +CL_NS_DEF2(search,highlight) + +/** + * Simple {@link Encoder} implementation to escape text for HTML output + * + */ +class CLUCENE_CONTRIBS_EXPORT SimpleHTMLEncoder:public Encoder +{ +public: + SimpleHTMLEncoder(void); + ~SimpleHTMLEncoder(void); + + TCHAR* encodeText(TCHAR* originalText); + + /** + * Encode string into HTML + */ + static TCHAR* htmlEncode(TCHAR* plainText) ; +}; + +CL_NS_END2 + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,56 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "SimpleHTMLFormatter.h" +#include "TokenGroup.h" +#include "CLucene/util/StringBuffer.h" + + +CL_NS_DEF2(search,highlight) +CL_NS_USE(util) + +SimpleHTMLFormatter::SimpleHTMLFormatter(const TCHAR* preTag, const TCHAR* postTag): + _preTag(stringDuplicate(preTag)), + _postTag(stringDuplicate(postTag)) +{ +} + +SimpleHTMLFormatter::SimpleHTMLFormatter() +{ + _preTag = stringDuplicate(_T("")); + _postTag = stringDuplicate(_T("")); +} + +SimpleHTMLFormatter::~SimpleHTMLFormatter() +{ + _CLDELETE_CARRAY(_preTag); + _CLDELETE_CARRAY(_postTag); +} + +TCHAR* SimpleHTMLFormatter::highlightTerm(const TCHAR* originalText, const TokenGroup* tokenGroup) +{ + if(tokenGroup->getTotalScore()>0){ + StringBuffer sb; + sb.append(_preTag); + sb.append(originalText); + sb.append(_postTag); + return sb.toString(); + } + return stringDuplicate(originalText); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,59 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_simplehtmlformatter_ +#define _lucene_search_highlight_simplehtmlformatter_ + + +#include "Formatter.h" + +CL_NS_DEF2(search,highlight) + +/** + * Simple {@link Formatter} implementation to highlight terms with a pre and post tag + * + */ +class CLUCENE_CONTRIBS_EXPORT SimpleHTMLFormatter :public Formatter +{ +private: + TCHAR* _preTag; + TCHAR* _postTag; + +public: + ~SimpleHTMLFormatter(); + + + SimpleHTMLFormatter(const TCHAR* preTag, const TCHAR* postTag); + + /** + * Default constructor uses HTML: <B> tags to markup terms + * + **/ + SimpleHTMLFormatter(); + + + /** + * Returns the original text enclosed in _preTag and _postTag, if the score is greater + * than 0. Otherwise, it returns the original text. + * It doesn't use the stemmed text nor the startOffset. + * It allocates memory for the returned text, and it has to be freed by the caller. + */ + TCHAR* highlightTerm(const TCHAR* originalText, const TokenGroup* tokenGroup); +}; + +CL_NS_END2 + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TextFragment.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TextFragment.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TextFragment.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TextFragment.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,78 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "TextFragment.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(util) + + TextFragment::TextFragment(int32_t textStartPos, int32_t fragNum) + { + _textStartPos = textStartPos; + _textEndPos=0; + _fragNum = fragNum; + } + TextFragment::~TextFragment(){ + } + + void TextFragment::setScore(float_t score) + { + _score=score; + } + + float_t TextFragment::getScore() const + { + return _score; + } + + /** + * @param frag2 Fragment to be merged into this one + */ + void TextFragment::merge(const TextFragment * frag2) + { + _textEndPos = frag2->_textEndPos; + _score=cl_max(_score,frag2->_score); + } + /** + * @param fragment + * @return true if this fragment follows the one passed + */ + bool TextFragment::follows(const TextFragment * fragment) const + { + return _textStartPos == fragment->_textEndPos; + } + + /** + * @return the fragment sequence number + */ + int32_t TextFragment::getFragNum() const + { + return _fragNum; + } + + /* Returns the marked-up text for this text fragment + */ + TCHAR* TextFragment::toString(StringBuffer* buffer) { + TCHAR* ret = _CL_NEWARRAY(TCHAR,_textEndPos-_textStartPos+1); + _tcsncpy(ret,buffer->getBuffer()+_textStartPos,_textEndPos-_textStartPos); + ret[_textEndPos-_textStartPos]=_T('\0'); + + return ret; + } + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TextFragment.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TextFragment.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TextFragment.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TextFragment.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,87 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_textfragment_ +#define _lucene_search_highlight_textfragment_ + + +CL_CLASS_DEF(util, StringBuffer) +//#include "CLucene/util/VoidList.h" + +CL_NS_DEF2(search,highlight) + +/** + * Low-level class used to record information about a section of a document + * with a score. + */ +class CLUCENE_CONTRIBS_EXPORT TextFragment:LUCENE_BASE +{ + int32_t _fragNum; + int32_t _textStartPos; + int32_t _textEndPos; + float_t _score; + +public: + TextFragment(int32_t textStartPos, int32_t fragNum); + ~TextFragment(); + + void setScore(float_t score); + float_t getScore() const; + + int32_t textEndPos(){ return _textEndPos; } + void setTextEndPos(int32_t val){ _textEndPos = val; } + + /** + * @param frag2 Fragment to be merged into this one + */ + void merge(const TextFragment * frag2); + + /** + * @param fragment + * @return true if this fragment follows the one passed + */ + bool follows(const TextFragment * fragment) const; + + /** + * @return the fragment sequence number + */ + int32_t getFragNum() const; + + /* Returns the marked-up text for this text fragment + */ + TCHAR* toString(CL_NS(util)::StringBuffer* buffer); + + /** + * Compare weighted terms, according to the term text. + * @todo Do we have to take boost factors into account + */ + class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // + { + public: + //todo: this should be more efficient, but will be using a hash table soon, anyway + bool operator()( TextFragment* t1, TextFragment* t2 ) const; + size_t operator()( TextFragment* t ) const; + }; +}; + +/** + * Text fragment list. + */ +//typedef CL_NS(util)::CLSetList > TextFragmentList; + +CL_NS_END2 + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,123 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "TokenGroup.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) + +TokenGroup::TokenGroup(void) +{ + numTokens=0; + startOffset=0; + endOffset=0; + tokens = new Token[MAX_NUM_TOKENS_PER_GROUP]; +} + +TokenGroup::~TokenGroup(void) +{ + delete[] tokens; +} + +void TokenGroup::addToken(Token* token, float_t score) +{ + if(numTokens < MAX_NUM_TOKENS_PER_GROUP) + { + if(numTokens==0) + { + startOffset=token->startOffset(); + endOffset=token->endOffset(); + } + else + { + startOffset=cl_min(startOffset,token->startOffset()); + endOffset=cl_max(endOffset,token->endOffset()); + } + tokens[numTokens].set(token->termBuffer(),token->startOffset(),token->endOffset(),token->type());; + scores[numTokens]=score; + numTokens++; + } +} + +CL_NS(analysis)::Token& TokenGroup::getToken(int32_t index) +{ + return tokens[index]; +} + +float_t TokenGroup::getScore(int32_t index) const +{ + return scores[index]; +} + +int32_t TokenGroup::getEndOffset() const +{ + return endOffset; +} + +int32_t TokenGroup::getNumTokens() const +{ + return numTokens; +} + +int32_t TokenGroup::getStartOffset() const +{ + return startOffset; +} + +float_t TokenGroup::getTotalScore() const +{ + float_t total=0; + for (int32_t i = 0; i < numTokens; i++) + { + total+=scores[i]; + } + return total; +} + +/*void addToken(CL_NS(analysis)::Token* token, float_t score) +{ + if(numTokens < MAX_NUM_TOKENS_PER_GROUP) + { + if(numTokens==0) + { + startOffset=token->startOffset(); + endOffset=token->endOffset(); + } + else + { + startOffset=min(startOffset,token->startOffset()); + endOffset=max(endOffset,token->endOffset()); + } + tokens[numTokens]=token; + scores[numTokens]=score; + numTokens++; + } +}*/ + +bool TokenGroup::isDistinct(CL_NS(analysis)::Token* token) const +{ + return token->startOffset() > endOffset; +} + + +void TokenGroup::clear() +{ + numTokens=0; +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TokenGroup.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TokenGroup.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TokenGroup.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TokenGroup.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,83 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_tokengroup_ +#define _lucene_search_highlight_tokengroup_ + + +CL_CLASS_DEF(analysis, Token) + +CL_NS_DEF2(search,highlight) + +/** + * One, or several overlapping tokens, along with the score(s) and the + * scope of the original text + */ +class CLUCENE_CONTRIBS_EXPORT TokenGroup: LUCENE_BASE +{ + LUCENE_STATIC_CONSTANT(int32_t,MAX_NUM_TOKENS_PER_GROUP=50); + CL_NS(analysis)::Token* tokens; + float_t scores[MAX_NUM_TOKENS_PER_GROUP]; + int32_t numTokens; + int32_t startOffset; + int32_t endOffset; + +public: + TokenGroup(void); + ~TokenGroup(void); + + void addToken(CL_NS(analysis)::Token* token, float_t score); + + /** + * + * @param index a value between 0 and numTokens -1 + * @return the "n"th token + */ + CL_NS(analysis)::Token& getToken(int32_t index); + + /** + * + * @param index a value between 0 and numTokens -1 + * @return the "n"th score + */ + float_t getScore(int32_t index) const; + + /** + * @return the end position in the original text + */ + int32_t getEndOffset() const; + + /** + * @return the number of tokens in this group + */ + int32_t getNumTokens() const; + + /** + * @return the start position in the original text + */ + int32_t getStartOffset() const; + + /** + * @return all tokens' scores summed up + */ + float_t getTotalScore() const; + + bool isDistinct(CL_NS(analysis)::Token* token) const; + void clear(); +}; + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TokenSources.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TokenSources.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TokenSources.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TokenSources.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,229 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "TokenSources.h" + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/TermVector.h" +#include "CLucene/document/Document.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) +CL_NS_USE(index) +CL_NS_USE(util) + + +///Compares the Token for their order +class TokenOrderCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Token* t1, Token* t2 ) const{ + if(t1->startOffset()>t2->startOffset()) + return false; + if(t1->startOffset()startOffset()) + return true; + return true; +} +}; + +TokenSources::TokenSources(void) +{ +} + +TokenSources::~TokenSources(void) +{ +} + +TokenStream* TokenSources::getAnyTokenStream(IndexReader* reader,int32_t docId, TCHAR* field, Analyzer* analyzer) +{ + TokenStream* ts=NULL; + + TermFreqVector* tfv=reader->getTermFreqVector(docId,field); + if(tfv!=NULL) + { + TermPositionVector* tmp = tfv->__asTermPositionVector(); + if ( tmp != NULL ) + ts=getTokenStream(tmp); + } + //No token info stored so fall back to analyzing raw content + if(ts==NULL) + { + ts=getTokenStream(reader,docId,field,analyzer); + } + return ts; +} + + +TokenStream* TokenSources::getTokenStream(TermPositionVector* tpv) +{ + //assumes the worst and makes no assumptions about token position sequences. + return getTokenStream(tpv,false); +} + +TokenStream* TokenSources::getTokenStream(TermPositionVector* tpv, bool tokenPositionsGuaranteedContiguous) +{ + //an object used to iterate across an array of tokens + /*class StoredTokenStream extends TokenStream + { + Token tokens[]; + int32_t currentToken=0; + StoredTokenStream(Token tokens[]) + { + this.tokens=tokens; + } + public Token next() + { + if(currentToken>=tokens.length) + { + return NULL; + } + return tokens[currentToken++]; + } + } */ + //code to reconstruct the original sequence of Tokens + const ArrayBase* terms = tpv->getTerms(); + const ArrayBase* freq=tpv->getTermFrequencies(); + + size_t totalTokens=0; + for (int32_t i = 0; i < freq->length; i++) + totalTokens+=freq->values[i]; + + Token** tokensInOriginalOrder=NULL; + CLSetList* unsortedTokens = NULL; + for (int32_t t = 0; t < freq->length; t++) + { + const ArrayBase* offsets=tpv->getOffsets(t); + if(offsets==NULL) + return NULL; + + const ArrayBase* pos=NULL; + if(tokenPositionsGuaranteedContiguous) + { + //try get the token position info to speed up assembly of tokens into sorted sequence + pos=tpv->getTermPositions(t); + } + + if ( tokensInOriginalOrder != NULL ) + tokensInOriginalOrder = _CL_NEWARRAY(Token*, totalTokens+1); + + if(pos==NULL) + { + //tokens NOT stored with positions or not guaranteed contiguous - must add to list and sort later + if(unsortedTokens==NULL) + unsortedTokens=_CLNEW CLSetList(false); + for (int32_t tp=0; tp < offsets->length; tp++) + { + unsortedTokens->insert(_CLNEW Token(terms->values[t], + (*offsets)[tp]->getStartOffset(), + (*offsets)[tp]->getEndOffset())); + } + } + else + { + //We have positions stored and a guarantee that the token position information is contiguous + + // This may be fast BUT wont work if Tokenizers used which create >1 token in same position or + // creates jumps in position numbers - this code would fail under those circumstances + + //tokens stored with positions - can use this to index straight into sorted array + for (int32_t tp = 0; tp < pos->length; tp++) + { + tokensInOriginalOrder[(*pos)[tp]]=_CLNEW Token(terms->values[t], + (*offsets)[tp]->getStartOffset(), + (*offsets)[tp]->getEndOffset()); + } + } + } + //If the field has been stored without position data we must perform a sort + if(unsortedTokens!=NULL) + { + if ( totalTokenssize() ){ + _CLDELETE_ARRAY(tokensInOriginalOrder); + tokensInOriginalOrder = _CL_NEWARRAY(Token*,unsortedTokens->size()+1); + } + //the list has already sorted our items //todo:check that this is true... + unsortedTokens->toArray_nullTerminated(tokensInOriginalOrder); + + return _CLNEW StoredTokenStream(tokensInOriginalOrder,unsortedTokens->size()); + }else + return _CLNEW StoredTokenStream(tokensInOriginalOrder,totalTokens); +} + +TokenStream* TokenSources::getTokenStream(IndexReader* reader,int32_t docId, TCHAR* field) +{ + TermFreqVector* tfv=reader->getTermFreqVector(docId,field); + if(tfv==NULL) + { + TCHAR buf[250]; + _sntprintf(buf,250,_T("%s in doc #%d does not have any term position data stored"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } + + TermPositionVector* tmp = NULL; + tmp = tfv->__asTermPositionVector(); + + if ( tmp != NULL ){ + return getTokenStream(tmp); + }else{ + TCHAR buf[250]; + _sntprintf(buf,250,_T("%s in doc #%d does not have any term position data stored"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } +} + +//convenience method +TokenStream* TokenSources::getTokenStream(IndexReader* reader,int32_t docId, TCHAR* field,Analyzer* analyzer) +{ + CL_NS(document)::Document doc; + reader->document(docId, doc); + const TCHAR* contents=doc.get(field); + if(contents==NULL) + { + TCHAR buf[250]; + _sntprintf(buf,250,_T("Field %s in document #%d is not stored and cannot be analyzed"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } + return analyzer->tokenStream(field,_CLNEW StringReader(contents)); +} + +TokenSources::StoredTokenStream::StoredTokenStream(CL_NS(analysis)::Token** tokens, size_t len) +{ + currentToken = 0; + this->tokens=tokens; + this->length = len; +} +CL_NS(analysis)::Token* TokenSources::StoredTokenStream::next(CL_NS(analysis)::Token* token) +{ + if(currentToken>=length) + { + return NULL; + } + Token* t = tokens[currentToken++]; + + token->set(t->termBuffer(),t->startOffset(),t->endOffset(),t->type());; + return token; +} +void TokenSources::StoredTokenStream::close(){ + +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TokenSources.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TokenSources.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/TokenSources.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/TokenSources.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,86 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#ifndef _lucene_search_highlight_tokensources_ +#define _lucene_search_highlight_tokensources_ + +#include "CLucene/analysis/AnalysisHeader.h" +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, TermPositionVector) +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/index/TermVector.h" + +CL_NS_DEF2(search,highlight) + +class CLUCENE_CONTRIBS_EXPORT TokenSources: LUCENE_BASE +{ + //an object used to iterate across an array of tokens + class StoredTokenStream:public CL_NS(analysis)::TokenStream + { + public: + CL_NS(analysis)::Token** tokens; + size_t length; + int32_t currentToken; + StoredTokenStream(CL_NS(analysis)::Token** tokens, size_t len); + CL_NS(analysis)::Token* next(CL_NS(analysis)::Token* token); + void close(); + }; +public: + TokenSources(void); + ~TokenSources(void); + + /** + * A convenience method that tries a number of approaches to getting a token stream. + * The cost of finding there are no termVectors in the index is minimal (1000 invocations still + * registers 0 ms). So this "lazy" (flexible?) approach to coding is probably acceptable + * @param reader + * @param docId + * @param field + * @param analyzer + * @return null if field not stored correctly + * @throws IOException + */ + static CL_NS(analysis)::TokenStream* getAnyTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); + + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::TermPositionVector* tpv); + + /** + * Low level api. + * Returns a token stream or null if no offset info available in index. + * This can be used to feed the highlighter with a pre-parsed token stream + * + * In my tests the speeds to recreate 1000 token streams using this method are: + * - with TermVector offset only data stored - 420 milliseconds + * - with TermVector offset AND position data stored - 271 milliseconds + * (nb timings for TermVector with position data are based on a tokenizer with contiguous + * positions - no overlaps or gaps) + * The cost of not using TermPositionVector to store + * pre-parsed content and using an analyzer to re-parse the original content: + * - reanalyzing the original content - 980 milliseconds + * + * The re-analyze timings will typically vary depending on - + * 1) The complexity of the analyzer code (timings above were using a + * stemmer/lowercaser/stopword combo) + * 2) The number of other fields (Lucene reads ALL fields off the disk + * when accessing just one document field - can cost dear!) + * 3) Use of compression on field storage - could be faster cos of compression (less disk IO) + * or slower (more CPU burn) depending on the content. + * + * @param tpv + * @param tokenPositionsGuaranteedContiguous true if the token position numbers have no overlaps or gaps. If looking + * to eek out the last drops of performance, set to true. If in doubt, set to false. + */ + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::TermPositionVector* tpv, bool tokenPositionsGuaranteedContiguous); + + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field); + + //convenience method + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field,CL_NS(analysis)::Analyzer* analyzer); +}; + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,101 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CLucene/_ApiHeader.h" +#include "WeightedTerm.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF2(search,highlight) + + WeightedTerm::WeightedTerm (float_t weight,const TCHAR* term) + { + _weight=weight; + _term = stringDuplicate(term); + cachedHashCode = 0; + } + + WeightedTerm::~WeightedTerm() + { + _CLDELETE_CARRAY(_term); + } + + WeightedTerm::WeightedTerm(const WeightedTerm& other) + { + _weight = other.getWeight(); + _term = STRDUP_TtoT(other.getTerm()); + } + + WeightedTerm* WeightedTerm::clone() const{ + return _CLNEW WeightedTerm(*this); + } + + /** + * @return the term value (stemmed) + */ + const TCHAR* WeightedTerm::getTerm() const + { + return _term; + } + + /** + * @return the weight associated with this term + */ + float_t WeightedTerm::getWeight() const + { + return _weight; + } + + /** + * @param term the term value (stemmed) + */ + void WeightedTerm::setTerm(TCHAR* term) + { + _CLDELETE_CARRAY(this->_term); + this->_term = STRDUP_TtoT(_term); + cachedHashCode = 0; + } + + /** + * @param weight the weight associated with this term + */ + void WeightedTerm::setWeight(float_t weight) { + this->_weight = _weight; + cachedHashCode = 0; + } + + size_t WeightedTerm::hashCode(){ + if ( cachedHashCode == 0 ){ + cachedHashCode = ( CL_NS(util)::Misc::thashCode(this->_term) ^ CL_NS(search)::Similarity::floatToByte(_weight) ); + } + + return cachedHashCode; + } + + bool WeightedTerm::Compare::operator()( WeightedTerm* t1, WeightedTerm* t2 ) const{ + int r = _tcscmp(t1->getTerm(), t2->getTerm()); + if ( r < 0 ) + return true; + else if ( r == 0 ) + return t1->getWeight() < t2->getWeight(); + else + return false; + } + size_t WeightedTerm::Compare::operator()( WeightedTerm* t ) const{ + return t->hashCode(); + } + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/WeightedTerm.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/WeightedTerm.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/highlighter/WeightedTerm.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/highlighter/WeightedTerm.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,79 @@ +/** + * Copyright 2002-2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _lucene_search_highlight_weightedterm_ +#define _lucene_search_highlight_weightedterm_ + + +//#include "CLucene/util/VoidList.h" + +CL_NS_DEF2(search,highlight) + +/** Lightweight class to hold term and a weight value used for scoring this term + */ +class CLUCENE_CONTRIBS_EXPORT WeightedTerm:LUCENE_BASE +{ +private: + float_t _weight; // multiplier + TCHAR* _term; //stemmed form + size_t cachedHashCode; + WeightedTerm(const WeightedTerm& other); +public: + WeightedTerm (float_t weight,const TCHAR* term); + ~WeightedTerm(); + + /** + * @return the term value (stemmed) + */ + const TCHAR* getTerm() const; + + /** + * @return the weight associated with this term + */ + float_t getWeight() const ; + + /** + * @param term the term value (stemmed) + */ + void setTerm(TCHAR* term); + /** + * @param weight the weight associated with this term + */ + void setWeight(float_t weight); + + size_t hashCode(); + WeightedTerm* clone() const; + + /** + * Compare weighted terms, according to the term text. + * @todo Do we have to take boost factors into account + */ + class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // + { + public: + //todo: this should be more efficient, but will be using a hash table soon, anyway + bool operator()( WeightedTerm* t1, WeightedTerm* t2 ) const; + size_t operator()( WeightedTerm* t ) const; + }; +}; + +/** CLHashSet of WeightedTerm */ +typedef CL_NS(util)::CLHashSet > WeightedTermList; + +CL_NS_END2 + +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/include/libstemmer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/include/libstemmer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/include/libstemmer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/include/libstemmer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,82 @@ +#ifndef LIBSTEMMER_INCLUDE_LIBSTEMMER_H +#define LIBSTEMMER_INCLUDE_LIBSTEMMER_H + +/* Make header file work when included from C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +struct sb_stemmer; +typedef unsigned char sb_symbol; + +/* FIXME - should be able to get a version number for each stemming + * algorithm (which will be incremented each time the output changes). */ + +/** Returns an array of the names of the available stemming algorithms. + * Note that these are the canonical names - aliases (ie, other names for + * the same algorithm) will not be included in the list. + * The list is terminated with a null pointer. + * + * The list must not be modified in any way. + */ +const char ** sb_stemmer_list(void); + +/** Create a new stemmer object, using the specified algorithm, for the + * specified character encoding. + * + * All algorithms will usually be available in UTF-8, but may also be + * available in other character encodings. + * + * @param algorithm The algorithm name. This is either the english + * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the + * language. Note that case is significant in this parameter - the + * value should be supplied in lower case. + * + * @param charenc The character encoding. NULL may be passed as + * this value, in which case UTF-8 encoding will be assumed. Otherwise, + * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1), + * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that + * case is significant in this parameter. + * + * @return NULL if the specified algorithm is not recognised, or the + * algorithm is not available for the requested encoding. Otherwise, + * returns a pointer to a newly created stemmer for the requested algorithm. + * The returned pointer must be deleted by calling sb_stemmer_delete(). + * + * @note NULL will also be returned if an out of memory error occurs. + */ +struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc); + +/** Delete a stemmer object. + * + * This frees all resources allocated for the stemmer. After calling + * this function, the supplied stemmer may no longer be used in any way. + * + * It is safe to pass a null pointer to this function - this will have + * no effect. + */ +void sb_stemmer_delete(struct sb_stemmer * stemmer); + +/** Stem a word. + * + * The return value is owned by the stemmer - it must not be freed or + * modified, and it will become invalid when the stemmer is called again, + * or if the stemmer is freed. + * + * The length of the return value can be obtained using sb_stemmer_length(). + * + * If an out-of-memory error occurs, this will return NULL. + */ +const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, + const sb_symbol * word, int size); + +/** Get the length of the result of the last stemmed word. + * This should not be called before sb_stemmer_stem() has been called. + */ +int sb_stemmer_length(struct sb_stemmer * stemmer); + +#ifdef __cplusplus +} +#endif + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,92 @@ + +#include +#include +#include "../include/libstemmer.h" +#include "../runtime/api.h" +#include "modules.h" + +struct sb_stemmer { + struct SN_env * (*create)(void); + void (*close)(struct SN_env *); + int (*stem)(struct SN_env *); + + struct SN_env * env; +}; + +extern const char ** +sb_stemmer_list(void) +{ + return algorithm_names; +} + +static stemmer_encoding sb_getenc(const char * charenc) +{ + struct stemmer_encoding * encoding; + if (charenc == NULL) return ENC_UTF_8; + for (encoding = encodings; encoding->name != 0; encoding++) { + if (strcmp(encoding->name, charenc) == 0) break; + } + if (encoding->name == NULL) return ENC_UNKNOWN; + return encoding->enc; +} + +extern struct sb_stemmer * +sb_stemmer_new(const char * algorithm, const char * charenc) +{ + stemmer_encoding enc; + struct stemmer_modules * module; + struct sb_stemmer * stemmer = + (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer)); + if (stemmer == NULL) return NULL; + enc = sb_getenc(charenc); + if (enc == ENC_UNKNOWN) return NULL; + + for (module = modules; module->name != 0; module++) { + if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; + } + if (module->name == NULL) return NULL; + + stemmer->create = module->create; + stemmer->close = module->close; + stemmer->stem = module->stem; + + stemmer->env = stemmer->create(); + if (stemmer->env == NULL) + { + sb_stemmer_delete(stemmer); + return NULL; + } + + return stemmer; +} + +void +sb_stemmer_delete(struct sb_stemmer * stemmer) +{ + if (stemmer == 0) return; + if (stemmer->close == 0) return; + stemmer->close(stemmer->env); + stemmer->close = 0; + free(stemmer); +} + +const sb_symbol * +sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size) +{ + int ret; + if (SN_set_current(stemmer->env, size, word)) + { + stemmer->env->l = 0; + return NULL; + } + ret = stemmer->stem(stemmer->env); + if (ret < 0) return NULL; + stemmer->env->p[stemmer->env->l] = 0; + return stemmer->env->p; +} + +int +sb_stemmer_length(struct sb_stemmer * stemmer) +{ + return stemmer->env->l; +} diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/libstemmer/modules.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/libstemmer/modules.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/libstemmer/modules.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/libstemmer/modules.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,166 @@ +#ifndef LIBSTEMMER_MODULES_H +#define LIBSTEMMER_MODULES_H + +/* libstemmer/modules.h: List of stemming modules. + * + * This file is generated by mkmodules.pl from a list of module names. + * Do not edit manually. + * + * Modules included by this file are: danish, dutch, english, finnish, french, + * german, italian, norwegian, porter, portuguese, russian, spanish, swedish + */ + +#include "../src_c/stem_ISO_8859_1_danish.h" +#include "../src_c/stem_UTF_8_danish.h" +#include "../src_c/stem_ISO_8859_1_dutch.h" +#include "../src_c/stem_UTF_8_dutch.h" +#include "../src_c/stem_ISO_8859_1_english.h" +#include "../src_c/stem_UTF_8_english.h" +#include "../src_c/stem_ISO_8859_1_finnish.h" +#include "../src_c/stem_UTF_8_finnish.h" +#include "../src_c/stem_ISO_8859_1_french.h" +#include "../src_c/stem_UTF_8_french.h" +#include "../src_c/stem_ISO_8859_1_german.h" +#include "../src_c/stem_UTF_8_german.h" +#include "../src_c/stem_ISO_8859_1_italian.h" +#include "../src_c/stem_UTF_8_italian.h" +#include "../src_c/stem_ISO_8859_1_norwegian.h" +#include "../src_c/stem_UTF_8_norwegian.h" +#include "../src_c/stem_ISO_8859_1_porter.h" +#include "../src_c/stem_UTF_8_porter.h" +#include "../src_c/stem_ISO_8859_1_portuguese.h" +#include "../src_c/stem_UTF_8_portuguese.h" +#include "../src_c/stem_KOI8_R_russian.h" +#include "../src_c/stem_UTF_8_russian.h" +#include "../src_c/stem_ISO_8859_1_spanish.h" +#include "../src_c/stem_UTF_8_spanish.h" +#include "../src_c/stem_ISO_8859_1_swedish.h" +#include "../src_c/stem_UTF_8_swedish.h" + +typedef enum { + ENC_UNKNOWN, + ENC_ISO_8859_1, + ENC_KOI8_R, + ENC_UTF_8, +} stemmer_encoding; + +struct stemmer_encoding { + const char * name; + stemmer_encoding enc; +}; +static struct stemmer_encoding encodings[] = { + {"ISO_8859_1", ENC_ISO_8859_1}, + {"KOI8_R", ENC_KOI8_R}, + {"UTF_8", ENC_UTF_8}, + {0,0} +}; + +struct stemmer_modules { + const char * name; + stemmer_encoding enc; + struct SN_env * (*create)(void); + void (*close)(struct SN_env *); + int (*stem)(struct SN_env *); +}; +static struct stemmer_modules modules[] = { + {"da", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"da", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"dan", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"dan", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"danish", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"danish", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"de", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"de", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"deu", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"deu", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"dut", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"dut", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"dutch", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"dutch", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"en", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"en", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"eng", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"eng", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"english", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"english", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"es", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"es", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"esl", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"esl", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"fi", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"fi", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"fin", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"fin", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"finnish", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"finnish", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"fr", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fr", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"fra", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fra", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"fre", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fre", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"french", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"french", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"ger", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"ger", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"german", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"german", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"it", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"it", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"ita", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"ita", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"italian", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"italian", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"nl", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"nl", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"nld", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"nld", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"no", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"no", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"nor", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"nor", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"norwegian", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"norwegian", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"por", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"por", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"porter", ENC_ISO_8859_1, porter_ISO_8859_1_create_env, porter_ISO_8859_1_close_env, porter_ISO_8859_1_stem}, + {"porter", ENC_UTF_8, porter_UTF_8_create_env, porter_UTF_8_close_env, porter_UTF_8_stem}, + {"portuguese", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"portuguese", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"pt", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"pt", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"ru", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"ru", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"rus", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"rus", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"russian", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"russian", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"spa", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"spa", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"spanish", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"spanish", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"sv", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"sv", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {"swe", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"swe", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {"swedish", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"swedish", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {0,0,0,0,0} +}; +static const char * algorithm_names[] = { + "danish", + "dutch", + "english", + "finnish", + "french", + "german", + "italian", + "norwegian", + "porter", + "portuguese", + "russian", + "spanish", + "swedish", + 0 +}; +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/libstemmer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/libstemmer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/libstemmer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/libstemmer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,79 @@ + +/* Make header file work when included from C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +struct sb_stemmer; +typedef unsigned char sb_symbol; + +/* FIXME - should be able to get a version number for each stemming + * algorithm (which will be incremented each time the output changes). */ + +/** Returns an array of the names of the available stemming algorithms. + * Note that these are the canonical names - aliases (ie, other names for + * the same algorithm) will not be included in the list. + * The list is terminated with a null pointer. + * + * The list must not be modified in any way. + */ +const char ** sb_stemmer_list(void); + +/** Create a new stemmer object, using the specified algorithm, for the + * specified character encoding. + * + * All algorithms will usually be available in UTF-8, but may also be + * available in other character encodings. + * + * @param algorithm The algorithm name. This is either the english + * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the + * language. Note that case is significant in this parameter - the + * value should be supplied in lower case. + * + * @param charenc The character encoding. NULL may be passed as + * this value, in which case UTF-8 encoding will be assumed. Otherwise, + * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1), + * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that + * case is significant in this parameter. + * + * @return NULL if the specified algorithm is not recognised, or the + * algorithm is not available for the requested encoding. Otherwise, + * returns a pointer to a newly created stemmer for the requested algorithm. + * The returned pointer must be deleted by calling sb_stemmer_delete(). + * + * @note NULL will also be returned if an out of memory error occurs. + */ +struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc); + +/** Delete a stemmer object. + * + * This frees all resources allocated for the stemmer. After calling + * this function, the supplied stemmer may no longer be used in any way. + * + * It is safe to pass a null pointer to this function - this will have + * no effect. + */ +void sb_stemmer_delete(struct sb_stemmer * stemmer); + +/** Stem a word. + * + * The return value is owned by the stemmer - it must not be freed or + * modified, and it will become invalid when the stemmer is called again, + * or if the stemmer is freed. + * + * The length of the return value can be obtained using sb_stemmer_length(). + * + * If an out-of-memory error occurs, this will return NULL. + */ +const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, + const sb_symbol * word, int size); + +/** Get the length of the result of the last stemmed word. + * This should not be called before sb_stemmer_stem() has been called. + */ +int sb_stemmer_length(struct sb_stemmer * stemmer); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/runtime/api.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/runtime/api.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/runtime/api.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/runtime/api.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,69 @@ + +#include /* for calloc, free */ +#include "header.h" + +extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size) +{ + struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); + if (z == NULL) return NULL; + z->p = create_s(); + if (z->p == NULL) goto error; + if (S_size) + { + int i; + z->S = (symbol * *) calloc(S_size, sizeof(symbol *)); + if (z->S == NULL) goto error; + + for (i = 0; i < S_size; i++) + { + z->S[i] = create_s(); + if (z->S[i] == NULL) goto error; + } + z->S_size = S_size; + } + + if (I_size) + { + z->I = (int *) calloc(I_size, sizeof(int)); + if (z->I == NULL) goto error; + z->I_size = I_size; + } + + if (B_size) + { + z->B = (symbol *) calloc(B_size, sizeof(symbol)); + if (z->B == NULL) goto error; + z->B_size = B_size; + } + + return z; +error: + SN_close_env(z); + return NULL; +} + +extern void SN_close_env(struct SN_env * z) +{ + if (z == NULL) return; + if (z->S_size) + { + int i; + for (i = 0; i < z->S_size; i++) + { + lose_s(z->S[i]); + } + free(z->S); + } + if (z->I_size) free(z->I); + if (z->B_size) free(z->B); + if (z->p) lose_s(z->p); + free(z); +} + +extern int SN_set_current(struct SN_env * z, int size, const symbol * s) +{ + int err = replace_s(z, 0, z->l, size, s, NULL); + z->c = 0; + return err; +} + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/runtime/api.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/runtime/api.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/runtime/api.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/runtime/api.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,30 @@ +#ifndef LIBSTEMMER_RUNTIME_API_H +#define LIBSTEMMER_RUNTIME_API_H + +typedef unsigned char symbol; + +/* Or replace 'char' above with 'short' for 16 bit characters. + + More precisely, replace 'char' with whatever type guarantees the + character width you need. Note however that sizeof(symbol) should divide + HEAD, defined in header.h as 2*sizeof(int), without remainder, otherwise + there is an alignment problem. In the unlikely event of a problem here, + consult Martin Porter. + +*/ + +struct SN_env { + symbol * p; + int c; int a; int l; int lb; int bra; int ket; + int S_size; int I_size; int B_size; + symbol * * S; + int * I; + symbol * B; +}; + +extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size); +extern void SN_close_env(struct SN_env * z); + +extern int SN_set_current(struct SN_env * z, int size, const symbol * s); + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/runtime/header.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/runtime/header.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/runtime/header.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/runtime/header.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,61 @@ +#ifndef LIBSTEMMER_RUNTIME_HEADER_H +#define LIBSTEMMER_RUNTIME_HEADER_H + +#include + +#include "api.h" + +#define MAXINT INT_MAX +#define MININT INT_MIN + +#define HEAD 2*sizeof(int) + +#define SIZE(p) ((int *)(p))[-1] +#define SET_SIZE(p, n) ((int *)(p))[-1] = n +#define CAPACITY(p) ((int *)(p))[-2] + +struct among +{ int s_size; /* number of chars in string */ + symbol * s; /* search string */ + int substring_i;/* index to longest matching substring */ + int result; /* result of the lookup */ + int (* function)(struct SN_env *); +}; + +extern symbol * create_s(void); +extern void lose_s(symbol * p); + +extern int skip_utf8(const symbol * p, int c, int lb, int l, int n); + +extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max); + +extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max); +extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max); + +extern int eq_s(struct SN_env * z, int s_size, symbol * s); +extern int eq_s_b(struct SN_env * z, int s_size, symbol * s); +extern int eq_v(struct SN_env * z, symbol * p); +extern int eq_v_b(struct SN_env * z, symbol * p); + +extern int find_among(struct SN_env * z, struct among * v, int v_size); +extern int find_among_b(struct SN_env * z, struct among * v, int v_size); + +extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjustment); +extern int slice_from_s(struct SN_env * z, int s_size, symbol * s); +extern int slice_from_v(struct SN_env * z, symbol * p); +extern int slice_del(struct SN_env * z); + +extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s); +extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p); + +extern symbol * slice_to(struct SN_env * z, symbol * p); +extern symbol * assign_to(struct SN_env * z, symbol * p); + +extern void debug(struct SN_env * z, int number, int line_count); + +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/runtime/utilities.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/runtime/utilities.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/runtime/utilities.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/runtime/utilities.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,446 @@ + +#include +#include +#include + +#include "header.h" + +#define unless(C) if(!(C)) + +#define CREATE_SIZE 1 + +extern symbol * create_s(void) { + symbol * p; + void * mem = malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol)); + if (mem == NULL) return NULL; + p = (symbol *) (HEAD + (char *) mem); + CAPACITY(p) = CREATE_SIZE; + SET_SIZE(p, CREATE_SIZE); + return p; +} + +extern void lose_s(symbol * p) { + if (p == NULL) return; + free((char *) p - HEAD); +} + +/* + new_p = X_skip_utf8(p, c, lb, l, n); skips n characters forwards from p + c + if n +ve, or n characters backwards from p +c - 1 if n -ve. new_p is the new + position, or 0 on failure. + + -- used to implement hop and next in the utf8 case. +*/ + +extern int skip_utf8(const symbol * p, int c, int lb, int l, int n) { + int b; + if (n >= 0) { + for (; n > 0; n--) { + if (c >= l) return -1; + b = p[c++]; + if (b >= 0xC0) { /* 1100 0000 */ + while (c < l) { + b = p[c]; + if (b >= 0xC0 || b < 0x80) break; + /* break unless b is 10------ */ + c++; + } + } + } + } else { + for (; n < 0; n++) { + if (c <= lb) return -1; + b = p[--c]; + if (b >= 0x80) { /* 1000 0000 */ + while (c > lb) { + b = p[c]; + if (b >= 0xC0) break; /* 1100 0000 */ + c--; + } + } + } + } + return c; +} + +/* Code for character groupings: utf8 cases */ + +static int get_utf8(const symbol * p, int c, int l, int * slot) { + int b0, b1; + if (c >= l) return 0; + b0 = p[c++]; + if (b0 < 0xC0 || c == l) { /* 1100 0000 */ + * slot = b0; return 1; + } + b1 = p[c++]; + if (b0 < 0xE0 || c == l) { /* 1110 0000 */ + * slot = (b0 & 0x1F) << 6 | (b1 & 0x3F); return 2; + } + * slot = (b0 & 0xF) << 12 | (b1 & 0x3F) << 6 | (*p & 0x3F); return 3; +} + +static int get_b_utf8(const symbol * p, int c, int lb, int * slot) { + int b0, b1; + if (c <= lb) return 0; + b0 = p[--c]; + if (b0 < 0x80 || c == lb) { /* 1000 0000 */ + * slot = b0; return 1; + } + b1 = p[--c]; + if (b1 >= 0xC0 || c == lb) { /* 1100 0000 */ + * slot = (b1 & 0x1F) << 6 | (b0 & 0x3F); return 2; + } + * slot = (*p & 0xF) << 12 | (b1 & 0x3F) << 6 | (b0 & 0x3F); return 3; +} + +extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_utf8(z->p, z->c, z->l, & ch); + unless (w) return 0; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c += w; return 1; +} + +extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_b_utf8(z->p, z->c, z->lb, & ch); + unless (w) return 0; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c -= w; return 1; +} + +extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_utf8(z->p, z->c, z->l, & ch); + unless (w) return 0; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c += w; return 1; +} + +extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_b_utf8(z->p, z->c, z->lb, & ch); + unless (w) return 0; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c -= w; return 1; +} + +/* Code for character groupings: non-utf8 cases */ + +extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c >= z->l) return 0; + ch = z->p[z->c]; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c++; return 1; +} + +extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c <= z->lb) return 0; + ch = z->p[z->c - 1]; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c--; return 1; +} + +extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c >= z->l) return 0; + ch = z->p[z->c]; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c++; return 1; +} + +extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c <= z->lb) return 0; + ch = z->p[z->c - 1]; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c--; return 1; +} + +extern int eq_s(struct SN_env * z, int s_size, symbol * s) { + if (z->l - z->c < s_size || memcmp(z->p + z->c, s, s_size * sizeof(symbol)) != 0) return 0; + z->c += s_size; return 1; +} + +extern int eq_s_b(struct SN_env * z, int s_size, symbol * s) { + if (z->c - z->lb < s_size || memcmp(z->p + z->c - s_size, s, s_size * sizeof(symbol)) != 0) return 0; + z->c -= s_size; return 1; +} + +extern int eq_v(struct SN_env * z, symbol * p) { + return eq_s(z, SIZE(p), p); +} + +extern int eq_v_b(struct SN_env * z, symbol * p) { + return eq_s_b(z, SIZE(p), p); +} + +extern int find_among(struct SN_env * z, struct among * v, int v_size) { + + int i = 0; + int j = v_size; + + int c = z->c; int l = z->l; + symbol * q = z->p + c; + + struct among * w; + + int common_i = 0; + int common_j = 0; + + int first_key_inspected = 0; + + while(1) { + int k = i + ((j - i) >> 1); + int diff = 0; + int common = common_i < common_j ? common_i : common_j; /* smaller */ + w = v + k; + { + int i; for (i = common; i < w->s_size; i++) { + if (c + common == l) { diff = -1; break; } + diff = q[common] - w->s[i]; + if (diff != 0) break; + common++; + } + } + if (diff < 0) { j = k; common_j = common; } + else { i = k; common_i = common; } + if (j - i <= 1) { + if (i > 0) break; /* v->s has been inspected */ + if (j == i) break; /* only one item in v */ + + /* - but now we need to go round once more to get + v->s inspected. This looks messy, but is actually + the optimal approach. */ + + if (first_key_inspected) break; + first_key_inspected = 1; + } + } + while(1) { + w = v + i; + if (common_i >= w->s_size) { + z->c = c + w->s_size; + if (w->function == 0) return w->result; + { + int res = w->function(z); + z->c = c + w->s_size; + if (res) return w->result; + } + } + i = w->substring_i; + if (i < 0) return 0; + } +} + +/* find_among_b is for backwards processing. Same comments apply */ + +extern int find_among_b(struct SN_env * z, struct among * v, int v_size) { + + int i = 0; + int j = v_size; + + int c = z->c; int lb = z->lb; + symbol * q = z->p + c - 1; + + struct among * w; + + int common_i = 0; + int common_j = 0; + + int first_key_inspected = 0; + + while(1) { + int k = i + ((j - i) >> 1); + int diff = 0; + int common = common_i < common_j ? common_i : common_j; + w = v + k; + { + int i; for (i = w->s_size - 1 - common; i >= 0; i--) { + if (c - common == lb) { diff = -1; break; } + diff = q[- common] - w->s[i]; + if (diff != 0) break; + common++; + } + } + if (diff < 0) { j = k; common_j = common; } + else { i = k; common_i = common; } + if (j - i <= 1) { + if (i > 0) break; + if (j == i) break; + if (first_key_inspected) break; + first_key_inspected = 1; + } + } + while(1) { + w = v + i; + if (common_i >= w->s_size) { + z->c = c - w->s_size; + if (w->function == 0) return w->result; + { + int res = w->function(z); + z->c = c - w->s_size; + if (res) return w->result; + } + } + i = w->substring_i; + if (i < 0) return 0; + } +} + + +/* Increase the size of the buffer pointed to by p to at least n symbols. + * If insufficient memory, returns NULL and frees the old buffer. + */ +static symbol * increase_size(symbol * p, int n) { + symbol * q; + int new_size = n + 20; + void * mem = realloc((char *) p - HEAD, + HEAD + (new_size + 1) * sizeof(symbol)); + if (mem == NULL) { + lose_s(p); + return NULL; + } + q = (symbol *) (HEAD + (char *)mem); + CAPACITY(q) = new_size; + return q; +} + +/* to replace symbols between c_bra and c_ket in z->p by the + s_size symbols at s. + Returns 0 on success, -1 on error. + Also, frees z->p (and sets it to NULL) on error. +*/ +extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjptr) +{ + int adjustment; + int len; + if (z->p == NULL) { + z->p = create_s(); + if (z->p == NULL) return -1; + } + adjustment = s_size - (c_ket - c_bra); + len = SIZE(z->p); + if (adjustment != 0) { + if (adjustment + len > CAPACITY(z->p)) { + z->p = increase_size(z->p, adjustment + len); + if (z->p == NULL) return -1; + } + memmove(z->p + c_ket + adjustment, + z->p + c_ket, + (len - c_ket) * sizeof(symbol)); + SET_SIZE(z->p, adjustment + len); + z->l += adjustment; + if (z->c >= c_ket) + z->c += adjustment; + else + if (z->c > c_bra) + z->c = c_bra; + } + unless (s_size == 0) memmove(z->p + c_bra, s, s_size * sizeof(symbol)); + if (adjptr != NULL) + *adjptr = adjustment; + return 0; +} + +static int slice_check(struct SN_env * z) { + + if (z->bra < 0 || + z->bra > z->ket || + z->ket > z->l || + z->p == NULL || + z->l > SIZE(z->p)) /* this line could be removed */ + { +#if 0 + fprintf(stderr, "faulty slice operation:\n"); + debug(z, -1, 0); +#endif + return -1; + } + return 0; +} + +extern int slice_from_s(struct SN_env * z, int s_size, symbol * s) { + if (slice_check(z)) return -1; + return replace_s(z, z->bra, z->ket, s_size, s, NULL); +} + +extern int slice_from_v(struct SN_env * z, symbol * p) { + return slice_from_s(z, SIZE(p), p); +} + +extern int slice_del(struct SN_env * z) { + return slice_from_s(z, 0, 0); +} + +extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s) { + int adjustment; + if (replace_s(z, bra, ket, s_size, s, &adjustment)) + return -1; + if (bra <= z->bra) z->bra += adjustment; + if (bra <= z->ket) z->ket += adjustment; + return 0; +} + +extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p) { + int adjustment; + if (replace_s(z, bra, ket, SIZE(p), p, &adjustment)) + return -1; + if (bra <= z->bra) z->bra += adjustment; + if (bra <= z->ket) z->ket += adjustment; + return 0; +} + +extern symbol * slice_to(struct SN_env * z, symbol * p) { + if (slice_check(z)) { + lose_s(p); + return NULL; + } + { + int len = z->ket - z->bra; + if (CAPACITY(p) < len) { + p = increase_size(p, len); + if (p == NULL) + return NULL; + } + memmove(p, z->p + z->bra, len * sizeof(symbol)); + SET_SIZE(p, len); + } + return p; +} + +extern symbol * assign_to(struct SN_env * z, symbol * p) { + int len = z->l; + if (CAPACITY(p) < len) { + p = increase_size(p, len); + if (p == NULL) + return NULL; + } + memmove(p, z->p, len * sizeof(symbol)); + SET_SIZE(p, len); + return p; +} + +#if 0 +extern void debug(struct SN_env * z, int number, int line_count) { + int i; + int limit = SIZE(z->p); + /*if (number >= 0) printf("%3d (line %4d): '", number, line_count);*/ + if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit); + for (i = 0; i <= limit; i++) { + if (z->lb == i) printf("{"); + if (z->bra == i) printf("["); + if (z->c == i) printf("|"); + if (z->ket == i) printf("]"); + if (z->l == i) printf("}"); + if (i < limit) + { int ch = z->p[i]; + if (ch == 0) ch = '#'; + printf("%c", ch); + } + } + printf("'\n"); +} +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,44 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_snowball_analyser_ +#define _lucene_analysis_snowball_analyser_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_CLASS_DEF(util,BufferedReader) +CL_NS_DEF2(analysis,snowball) + +/** Filters {@link StandardTokenizer} with {@link StandardFilter}, {@link + * LowerCaseFilter}, {@link StopFilter} and {@link SnowballFilter}. + * + * Available stemmers are listed in {@link net.sf.snowball.ext}. The name of a + * stemmer is the part of the class name before "Stemmer", e.g., the stemmer in + * {@link EnglishStemmer} is named "English". + */ +class CLUCENE_CONTRIBS_EXPORT SnowballAnalyzer: public Analyzer { + TCHAR* language; + CLTCSetList* stopSet; + +public: + /** Builds the named analyzer with no stop words. */ + SnowballAnalyzer(const TCHAR* language=_T("english")); + + /** Builds the named analyzer with the given stop words. + */ + SnowballAnalyzer(const TCHAR* language, const TCHAR** stopWords); + + ~SnowballAnalyzer(); + + /** Constructs a {@link StandardTokenizer} filtered by a {@link + StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader, bool deleteReader); +}; + +CL_NS_END2 +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/Snowball.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/Snowball.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/Snowball.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/Snowball.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,137 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SnowballAnalyzer.h" +#include "SnowballFilter.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE(util) +CL_NS_USE2(analysis,standard) + +CL_NS_DEF2(analysis,snowball) + + /** Builds the named analyzer with no stop words. */ + SnowballAnalyzer::SnowballAnalyzer(const TCHAR* language) { + this->language = STRDUP_TtoT(language); + stopSet = NULL; + } + + SnowballAnalyzer::~SnowballAnalyzer(){ + _CLDELETE_CARRAY(language); + if ( stopSet != NULL ) + _CLDELETE(stopSet); + } + + /** Builds the named analyzer with the given stop words. + */ + SnowballAnalyzer::SnowballAnalyzer(const TCHAR* language, const TCHAR** stopWords) { + this->language = STRDUP_TtoT(language); + + stopSet = _CLNEW CLTCSetList(true); + StopFilter::fillStopTable(stopSet,stopWords); + } + + TokenStream* SnowballAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + return this->tokenStream(fieldName,reader,false); + } + + /** Constructs a {@link StandardTokenizer} filtered by a {@link + StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */ + TokenStream* SnowballAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader, bool deleteReader) { + BufferedReader* bufferedReader = reader->__asBufferedReader(); + TokenStream* result; + + if ( bufferedReader == NULL ) + result = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, deleteReader), true ); + else + result = _CLNEW StandardTokenizer(bufferedReader, deleteReader); + + result = _CLNEW StandardFilter(result, true); + result = _CLNEW CL_NS(analysis)::LowerCaseFilter(result, true); + if (stopSet != NULL) + result = _CLNEW CL_NS(analysis)::StopFilter(result, true, stopSet); + result = _CLNEW SnowballFilter(result, language, true); + return result; + } + + + + + + + + /** Construct the named stemming filter. + * + * @param in the input tokens to stem + * @param name the name of a stemmer + */ + SnowballFilter::SnowballFilter(TokenStream* in, const TCHAR* language, bool deleteTS): + TokenFilter(in,deleteTS) + { + TCHAR tlang[50]; + char lang[50]; + _tcsncpy(tlang,language,50); + _tcslwr(tlang); + + STRCPY_TtoA(lang,tlang,50); + stemmer = sb_stemmer_new(lang, NULL); //use utf8 encoding + + if ( stemmer == NULL ){ + _CLTHROWA(CL_ERR_IllegalArgument, "language not available for stemming\n"); //todo: richer error + } + } + + SnowballFilter::~SnowballFilter(){ + sb_stemmer_delete(stemmer); + } + + /** Returns the next input Token, after being stemmed */ + Token* SnowballFilter::next(Token* token){ + if (input->next(token) == NULL) + return NULL; + + unsigned char uctext[LUCENE_MAX_WORD_LEN]; + TCHAR tchartext[LUCENE_MAX_WORD_LEN]; + +#ifdef _UCS2 + char utf8text[LUCENE_MAX_WORD_LEN]; + + size_t len = lucene_wcstoutf8(utf8text,token->termBuffer(),LUCENE_MAX_WORD_LEN); + memcpy(uctext,utf8text,len); + uctext[len]='\0'; +#else + const char* tmp = token->termText(); + int len = token->termTextLength(); + for (int i=0;iset(tchartext,token->startOffset(), token->endOffset(), token->type()); + return token; + } + + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/SnowballFilter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/SnowballFilter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/SnowballFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/SnowballFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,41 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_snowball_filter_ +#define _lucene_analysis_snowball_filter_ + +#include "CLucene/analysis/AnalysisHeader.h" +#include "libstemmer.h" + +CL_NS_DEF2(analysis,snowball) + +/** A filter that stems words using a Snowball-generated stemmer. + * + * Available stemmers are listed in {@link net.sf.snowball.ext}. The name of a + * stemmer is the part of the class name before "Stemmer", e.g., the stemmer in + * {@link EnglishStemmer} is named "English". + * + * Note: todo: This is not thread safe... + */ +class CLUCENE_CONTRIBS_EXPORT SnowballFilter: public TokenFilter { + struct sb_stemmer * stemmer; +public: + + /** Construct the named stemming filter. + * + * @param in the input tokens to stem + * @param name the name of a stemmer + */ + SnowballFilter(TokenStream* in, const TCHAR* language, bool deleteTS); + + ~SnowballFilter(); + + /** Returns the next input Token, after being stemmed */ + Token* next(Token* token); +}; + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/SNOWBALL_README clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/SNOWBALL_README --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/SNOWBALL_README 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/SNOWBALL_README 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,82 @@ +libstemmer_c +============ + +This document pertains to the C version of the libstemmer distribution, +available for download from: + +http://snowball.tartarus.org/dist/libstemmer_c.tgz + + +Compiling the library +===================== + +A simple makefile is provided for Unix style systems. On such systems, it +should be possible simply to run "make", and the file "libstemmer.o" +and the example program "stemwords" will be generated. + +If this doesn't work on your system, you need to write your own build +system (or call the compiler directly). The files to compile are +all contained in the "libstemmer", "runtime" and "src_c" directories, +and the public header file is contained in the "include" directory. + + +Using the library +================= + +The library provides a simple C API. Essentially, a new stemmer can +be obtained by using "sb_stemmer_new". "sb_stemmer_stem" is then +used to stem a word, "sb_stemmer_length" returns the stemmed +length of the last word processed, and "sb_stemmer_delete" is +used to delete a stemmer. + +Creating a stemmer is a relatively expensive operation - the expected +usage pattern is that a new stemmer is created when needed, used +to stem many words, and deleted after some time. + +Stemmers are re-entrant, but not threadsafe. In other words, if +you wish to access the same stemmer object from multiple threads, +you must ensure that all access is protected by a mutex or similar +device. + +libstemmer does not currently incorporate any mechanism for caching the results +of stemming operations. Such caching can greatly increase the performance of a +stemmer under certain situations, so suitable patches will be considered for +inclusion. + +The standard libstemmer sources contain an algorithm for each of the supported +languages. The algorithm may be selected using the english name of the +language, or using the 2 or 3 letter ISO 639 language codes. In addition, +the traditional "Porter" stemming algorithm for english is included for +backwards compatibility purposes, but we recommend use of the "English" +stemmer in preference for new projects. + +(Some minor algorithms which are included only as curiosities in the snowball +website, such as the Lovins stemmer and the Kraaij Pohlmann stemmer, are not +included in the standard libstemmer sources. These are not really supported by +the snowball project, but it would be possible to compile a modified libstemmer +library containing these if desired.) + + +The stemwords example +===================== + +The stemwords example program allows you to run any of the stemmers +compiled into the libstemmer library on a sample vocabulary. For +details on how to use it, run it with the "-h" command line option. + + +Using the library in a larger system +==================================== + +If you are incorporating the library into the build system of a larger +program, I recommend copying the unpacked tarball without modification into +a subdirectory of the sources of your program. Future versions of the +library are intended to keep the same structure, so this will keep the +work required to move to a new version of the library to a minimum. + +As an additional convenience, the list of source and header files used +in the library is detailed in mkinc.mak - a file which is in a suitable +format for inclusion by a Makefile. By including this file in your build +system, you can link the snowball system into your program with a few +extra rules. + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/snowball.version clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/snowball.version --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/snowball.version 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/snowball.version 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2 @@ +May 2005 + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,338 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int danish_ISO_8859_1_stem(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * danish_ISO_8859_1_create_env(void); +extern void danish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 'h', 'e', 'd' }; +static symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' }; +static symbol s_0_2[4] = { 'e', 'r', 'e', 'd' }; +static symbol s_0_3[1] = { 'e' }; +static symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' }; +static symbol s_0_5[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' }; +static symbol s_0_7[3] = { 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 'n', 'e' }; +static symbol s_0_9[3] = { 'e', 'r', 'e' }; +static symbol s_0_10[2] = { 'e', 'n' }; +static symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_0_12[4] = { 'e', 'r', 'e', 'n' }; +static symbol s_0_13[2] = { 'e', 'r' }; +static symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' }; +static symbol s_0_15[4] = { 'e', 'r', 'e', 'r' }; +static symbol s_0_16[1] = { 's' }; +static symbol s_0_17[4] = { 'h', 'e', 'd', 's' }; +static symbol s_0_18[2] = { 'e', 's' }; +static symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_21[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' }; +static symbol s_0_23[4] = { 'e', 'r', 'e', 's' }; +static symbol s_0_24[3] = { 'e', 'n', 's' }; +static symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' }; +static symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' }; +static symbol s_0_27[3] = { 'e', 'r', 's' }; +static symbol s_0_28[3] = { 'e', 't', 's' }; +static symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' }; +static symbol s_0_30[2] = { 'e', 't' }; +static symbol s_0_31[4] = { 'e', 'r', 'e', 't' }; + +static struct among a_0[32] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 5, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 5, s_0_4, 3, 1, 0}, +/* 5 */ { 4, s_0_5, 3, 1, 0}, +/* 6 */ { 6, s_0_6, 5, 1, 0}, +/* 7 */ { 3, s_0_7, 3, 1, 0}, +/* 8 */ { 4, s_0_8, 3, 1, 0}, +/* 9 */ { 3, s_0_9, 3, 1, 0}, +/* 10 */ { 2, s_0_10, -1, 1, 0}, +/* 11 */ { 5, s_0_11, 10, 1, 0}, +/* 12 */ { 4, s_0_12, 10, 1, 0}, +/* 13 */ { 2, s_0_13, -1, 1, 0}, +/* 14 */ { 5, s_0_14, 13, 1, 0}, +/* 15 */ { 4, s_0_15, 13, 1, 0}, +/* 16 */ { 1, s_0_16, -1, 2, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 2, s_0_18, 16, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 4, s_0_21, 18, 1, 0}, +/* 22 */ { 5, s_0_22, 18, 1, 0}, +/* 23 */ { 4, s_0_23, 18, 1, 0}, +/* 24 */ { 3, s_0_24, 16, 1, 0}, +/* 25 */ { 6, s_0_25, 24, 1, 0}, +/* 26 */ { 5, s_0_26, 24, 1, 0}, +/* 27 */ { 3, s_0_27, 16, 1, 0}, +/* 28 */ { 3, s_0_28, 16, 1, 0}, +/* 29 */ { 5, s_0_29, 28, 1, 0}, +/* 30 */ { 2, s_0_30, -1, 1, 0}, +/* 31 */ { 4, s_0_31, 30, 1, 0} +}; + +static symbol s_1_0[2] = { 'g', 'd' }; +static symbol s_1_1[2] = { 'd', 't' }; +static symbol s_1_2[2] = { 'g', 't' }; +static symbol s_1_3[2] = { 'k', 't' }; + +static struct among a_1[4] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'l', 's' }; +static symbol s_2_4[4] = { 'l', 0xF8, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 4, s_2_2, 1, 1, 0}, +/* 3 */ { 3, s_2_3, -1, 1, 0}, +/* 4 */ { 4, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; + +static symbol s_0[] = { 's', 't' }; +static symbol s_1[] = { 'i', 'g' }; +static symbol s_2[] = { 'l', 0xF8, 's' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 33 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 33 */ + } + z->I[1] = z->c; /* setmark x, line 33 */ + z->c = c_test; + } + while(1) { /* goto, line 34 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 34 */ + } + while(1) { /* gopast, line 34 */ + if (!(out_grouping(z, g_v, 97, 248))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 34 */ + } + z->I[0] = z->c; /* setmark p1, line 34 */ + /* try, line 35 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 41 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 41 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 41 */ + among_var = find_among_b(z, a_0, 32); /* substring, line 41 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 41 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 48 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 97, 229))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 50 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 55 */ + { int m3; /* setlimit, line 56 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 56 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */ + z->bra = z->c; /* ], line 56 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + if (z->c <= z->lb) return 0; + z->c--; /* next, line 62 */ + z->bra = z->c; /* ], line 62 */ + { int ret; + ret = slice_del(z); /* delete, line 62 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 66 */ + z->ket = z->c; /* [, line 66 */ + if (!(eq_s_b(z, 2, s_0))) goto lab0; + z->bra = z->c; /* ], line 66 */ + if (!(eq_s_b(z, 2, s_1))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = z->l - m; + } + { int m3; /* setlimit, line 67 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 67 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 67 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 67 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 67 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 70 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab1; /* call consonant_pair, line 70 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m3; /* setlimit, line 76 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 76 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 76 */ + if (!(out_grouping_b(z, g_v, 97, 248))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 76 */ + z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */ + if (z->S[0] == 0) return -1; /* -> ch, line 76 */ + z->lb = m3; + } + if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */ + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int danish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 84 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 84 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 85 */ + + { int m = z->l - z->c; (void) m; /* do, line 86 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 86 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 87 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 87 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 88 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 88 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 89 */ + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 89 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * danish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 0); } + +extern void danish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * danish_ISO_8859_1_create_env(void); +extern void danish_ISO_8859_1_close_env(struct SN_env * z); + +extern int danish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,635 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int dutch_ISO_8859_1_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_en_ending(struct SN_env * z); +static int r_e_ending(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * dutch_ISO_8859_1_create_env(void); +extern void dutch_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE1 }; +static symbol s_0_2[1] = { 0xE4 }; +static symbol s_0_3[1] = { 0xE9 }; +static symbol s_0_4[1] = { 0xEB }; +static symbol s_0_5[1] = { 0xED }; +static symbol s_0_6[1] = { 0xEF }; +static symbol s_0_7[1] = { 0xF3 }; +static symbol s_0_8[1] = { 0xF6 }; +static symbol s_0_9[1] = { 0xFA }; +static symbol s_0_10[1] = { 0xFC }; + +static struct among a_0[11] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 2, 0}, +/* 4 */ { 1, s_0_4, 0, 2, 0}, +/* 5 */ { 1, s_0_5, 0, 3, 0}, +/* 6 */ { 1, s_0_6, 0, 3, 0}, +/* 7 */ { 1, s_0_7, 0, 4, 0}, +/* 8 */ { 1, s_0_8, 0, 4, 0}, +/* 9 */ { 1, s_0_9, 0, 5, 0}, +/* 10 */ { 1, s_0_10, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'Y' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 2, 0}, +/* 2 */ { 1, s_1_2, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'd', 'd' }; +static symbol s_2_1[2] = { 'k', 'k' }; +static symbol s_2_2[2] = { 't', 't' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0} +}; + +static symbol s_3_0[3] = { 'e', 'n', 'e' }; +static symbol s_3_1[2] = { 's', 'e' }; +static symbol s_3_2[2] = { 'e', 'n' }; +static symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_3_4[1] = { 's' }; + +static struct among a_3[5] = +{ +/* 0 */ { 3, s_3_0, -1, 2, 0}, +/* 1 */ { 2, s_3_1, -1, 3, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 5, s_3_3, 2, 1, 0}, +/* 4 */ { 1, s_3_4, -1, 3, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'j', 'k' }; +static symbol s_4_4[4] = { 'b', 'a', 'a', 'r' }; +static symbol s_4_5[3] = { 'b', 'a', 'r' }; + +static struct among a_4[6] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 4, 0}, +/* 5 */ { 3, s_4_5, -1, 5, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'o', 'o' }; +static symbol s_5_3[2] = { 'u', 'u' }; + +static struct among a_5[4] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'I' }; +static symbol s_9[] = { 'y' }; +static symbol s_10[] = { 'Y' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'i' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'g', 'e', 'm' }; +static symbol s_15[] = { 'h', 'e', 'i', 'd' }; +static symbol s_16[] = { 'h', 'e', 'i', 'd' }; +static symbol s_17[] = { 'c' }; +static symbol s_18[] = { 'e', 'n' }; +static symbol s_19[] = { 'i', 'g' }; +static symbol s_20[] = { 'e' }; +static symbol s_21[] = { 'e' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 42 */ + while(1) { /* repeat, line 42 */ + int c = z->c; + z->bra = z->c; /* [, line 43 */ + among_var = find_among(z, a_0, 11); /* substring, line 43 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 43 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 45 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 47 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 49 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 54 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + { int c = z->c; /* try, line 57 */ + z->bra = z->c; /* [, line 57 */ + if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; } + z->ket = z->c; /* ], line 57 */ + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 57 */ + if (ret < 0) return ret; + } + lab1: + ; + } + while(1) { /* repeat, line 58 */ + int c = z->c; + while(1) { /* goto, line 58 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 232))) goto lab3; + z->bra = z->c; /* [, line 59 */ + { int c = z->c; /* or, line 59 */ + if (!(eq_s(z, 1, s_7))) goto lab5; + z->ket = z->c; /* ], line 59 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_9))) goto lab3; + z->ket = z->c; /* ], line 60 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 60 */ + if (ret < 0) return ret; + } + } + lab4: + z->c = c; + break; + lab3: + z->c = c; + if (z->c >= z->l) goto lab2; + z->c++; /* goto, line 58 */ + } + continue; + lab2: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* gopast, line 69 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab0; + break; + lab0: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 69 */ + } + while(1) { /* gopast, line 69 */ + if (!(out_grouping(z, g_v, 97, 232))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 69 */ + } + z->I[0] = z->c; /* setmark p1, line 69 */ + /* try, line 70 */ + if (!(z->I[0] < 3)) goto lab2; + z->I[0] = 3; +lab2: + while(1) { /* gopast, line 71 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 71 */ + } + while(1) { /* gopast, line 71 */ + if (!(out_grouping(z, g_v, 97, 232))) goto lab4; + break; + lab4: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 71 */ + } + z->I[1] = z->c; /* setmark p2, line 71 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 75 */ + int c = z->c; + z->bra = z->c; /* [, line 77 */ + among_var = find_among(z, a_1, 3); /* substring, line 77 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 77 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 79 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 80 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 91 */ + if (!(find_among_b(z, a_2, 3))) return 0; /* among, line 91 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 91 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 91 */ + z->bra = z->c; /* ], line 91 */ + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_e_ending(struct SN_env * z) { + z->B[0] = 0; /* unset e_found, line 95 */ + z->ket = z->c; /* [, line 96 */ + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 96 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 96 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 96 */ + if (!(out_grouping_b(z, g_v, 97, 232))) return 0; + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set e_found, line 97 */ + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 98 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_en_ending(struct SN_env * z) { + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* and, line 102 */ + if (!(out_grouping_b(z, g_v, 97, 232))) return 0; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* not, line 102 */ + if (!(eq_s_b(z, 3, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + } + { int ret; + ret = slice_del(z); /* delete, line 102 */ + if (ret < 0) return ret; + } + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 107 */ + z->ket = z->c; /* [, line 108 */ + among_var = find_among_b(z, a_3, 5); /* substring, line 108 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 108 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_en_ending(z); + if (ret == 0) goto lab0; /* call en_ending, line 113 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 116 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b(z, g_v_j, 97, 232))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 116 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 120 */ + { int ret = r_e_ending(z); + if (ret == 0) goto lab1; /* call e_ending, line 120 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 122 */ + z->ket = z->c; /* [, line 122 */ + if (!(eq_s_b(z, 4, s_16))) goto lab2; + z->bra = z->c; /* ], line 122 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 122 */ + if (!(eq_s_b(z, 1, s_17))) goto lab3; + goto lab2; + lab3: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 123 */ + if (!(eq_s_b(z, 2, s_18))) goto lab2; + z->bra = z->c; /* ], line 123 */ + { int ret = r_en_ending(z); + if (ret == 0) goto lab2; /* call en_ending, line 123 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 127 */ + if (!(among_var)) goto lab4; + z->bra = z->c; /* ], line 127 */ + switch(among_var) { + case 0: goto lab4; + case 1: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 129 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 129 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 130 */ + z->ket = z->c; /* [, line 130 */ + if (!(eq_s_b(z, 2, s_19))) goto lab6; + z->bra = z->c; /* ], line 130 */ + { int ret = r_R2(z); + if (ret == 0) goto lab6; /* call R2, line 130 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 130 */ + if (!(eq_s_b(z, 1, s_20))) goto lab7; + goto lab6; + lab7: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 130 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 130 */ + if (ret < 0) return ret; + } + } + lab5: + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 133 */ + if (!(eq_s_b(z, 1, s_21))) goto lab8; + goto lab4; + lab8: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 136 */ + if (ret < 0) return ret; + } + { int ret = r_e_ending(z); + if (ret == 0) goto lab4; /* call e_ending, line 136 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 142 */ + if (ret < 0) return ret; + } + if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */ + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + break; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 146 */ + if (!(out_grouping_b(z, g_v_I, 73, 232))) goto lab9; + { int m_test = z->l - z->c; /* test, line 148 */ + if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */ + if (!(out_grouping_b(z, g_v, 97, 232))) goto lab9; + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 152 */ + if (z->c <= z->lb) goto lab9; + z->c--; /* next, line 152 */ + z->bra = z->c; /* ], line 152 */ + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + return 1; +} + +extern int dutch_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 159 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 159 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 160 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 160 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 161 */ + + { int m = z->l - z->c; (void) m; /* do, line 162 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 162 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 163 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 163 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * dutch_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void dutch_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * dutch_ISO_8859_1_create_env(void); +extern void dutch_ISO_8859_1_close_env(struct SN_env * z); + +extern int dutch_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1156 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int english_ISO_8859_1_stem(struct SN_env * z); +static int r_exception2(struct SN_env * z); +static int r_exception1(struct SN_env * z); +static int r_Step_5(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * english_ISO_8859_1_create_env(void); +extern void english_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; +static symbol s_0_1[5] = { 'g', 'e', 'n', 'e', 'r' }; + +static struct among a_0[2] = +{ +/* 0 */ { 6, s_0_0, -1, -1, 0}, +/* 1 */ { 5, s_0_1, -1, -1, 0} +}; + +static symbol s_1_0[1] = { '\'' }; +static symbol s_1_1[3] = { '\'', 's', '\'' }; +static symbol s_1_2[2] = { '\'', 's' }; + +static struct among a_1[3] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 3, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0} +}; + +static symbol s_2_0[3] = { 'i', 'e', 'd' }; +static symbol s_2_1[1] = { 's' }; +static symbol s_2_2[3] = { 'i', 'e', 's' }; +static symbol s_2_3[4] = { 's', 's', 'e', 's' }; +static symbol s_2_4[2] = { 's', 's' }; +static symbol s_2_5[2] = { 'u', 's' }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, 2, 0}, +/* 1 */ { 1, s_2_1, -1, 3, 0}, +/* 2 */ { 3, s_2_2, 1, 2, 0}, +/* 3 */ { 4, s_2_3, 1, 1, 0}, +/* 4 */ { 2, s_2_4, 1, -1, 0}, +/* 5 */ { 2, s_2_5, 1, -1, 0} +}; + +static symbol s_3_1[2] = { 'b', 'b' }; +static symbol s_3_2[2] = { 'd', 'd' }; +static symbol s_3_3[2] = { 'f', 'f' }; +static symbol s_3_4[2] = { 'g', 'g' }; +static symbol s_3_5[2] = { 'b', 'l' }; +static symbol s_3_6[2] = { 'm', 'm' }; +static symbol s_3_7[2] = { 'n', 'n' }; +static symbol s_3_8[2] = { 'p', 'p' }; +static symbol s_3_9[2] = { 'r', 'r' }; +static symbol s_3_10[2] = { 'a', 't' }; +static symbol s_3_11[2] = { 't', 't' }; +static symbol s_3_12[2] = { 'i', 'z' }; + +static struct among a_3[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_3_1, 0, 2, 0}, +/* 2 */ { 2, s_3_2, 0, 2, 0}, +/* 3 */ { 2, s_3_3, 0, 2, 0}, +/* 4 */ { 2, s_3_4, 0, 2, 0}, +/* 5 */ { 2, s_3_5, 0, 1, 0}, +/* 6 */ { 2, s_3_6, 0, 2, 0}, +/* 7 */ { 2, s_3_7, 0, 2, 0}, +/* 8 */ { 2, s_3_8, 0, 2, 0}, +/* 9 */ { 2, s_3_9, 0, 2, 0}, +/* 10 */ { 2, s_3_10, 0, 1, 0}, +/* 11 */ { 2, s_3_11, 0, 2, 0}, +/* 12 */ { 2, s_3_12, 0, 1, 0} +}; + +static symbol s_4_0[2] = { 'e', 'd' }; +static symbol s_4_1[3] = { 'e', 'e', 'd' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; +static symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; +static symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; + +static struct among a_4[6] = +{ +/* 0 */ { 2, s_4_0, -1, 2, 0}, +/* 1 */ { 3, s_4_1, 0, 1, 0}, +/* 2 */ { 3, s_4_2, -1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 5, s_4_4, 3, 1, 0}, +/* 5 */ { 5, s_4_5, -1, 2, 0} +}; + +static symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_5_2[3] = { 'o', 'g', 'i' }; +static symbol s_5_3[2] = { 'l', 'i' }; +static symbol s_5_4[3] = { 'b', 'l', 'i' }; +static symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; +static symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; +static symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; +static symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_5[24] = +{ +/* 0 */ { 4, s_5_0, -1, 3, 0}, +/* 1 */ { 4, s_5_1, -1, 2, 0}, +/* 2 */ { 3, s_5_2, -1, 13, 0}, +/* 3 */ { 2, s_5_3, -1, 16, 0}, +/* 4 */ { 3, s_5_4, 3, 12, 0}, +/* 5 */ { 4, s_5_5, 4, 4, 0}, +/* 6 */ { 4, s_5_6, 3, 8, 0}, +/* 7 */ { 5, s_5_7, 3, 14, 0}, +/* 8 */ { 6, s_5_8, 3, 15, 0}, +/* 9 */ { 5, s_5_9, 3, 10, 0}, +/* 10 */ { 5, s_5_10, 3, 5, 0}, +/* 11 */ { 5, s_5_11, -1, 8, 0}, +/* 12 */ { 6, s_5_12, -1, 12, 0}, +/* 13 */ { 5, s_5_13, -1, 11, 0}, +/* 14 */ { 6, s_5_14, -1, 1, 0}, +/* 15 */ { 7, s_5_15, 14, 7, 0}, +/* 16 */ { 5, s_5_16, -1, 8, 0}, +/* 17 */ { 5, s_5_17, -1, 7, 0}, +/* 18 */ { 7, s_5_18, 17, 6, 0}, +/* 19 */ { 4, s_5_19, -1, 6, 0}, +/* 20 */ { 4, s_5_20, -1, 7, 0}, +/* 21 */ { 7, s_5_21, -1, 11, 0}, +/* 22 */ { 7, s_5_22, -1, 9, 0}, +/* 23 */ { 7, s_5_23, -1, 10, 0} +}; + +static symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_7[3] = { 'f', 'u', 'l' }; +static symbol s_6_8[4] = { 'n', 'e', 's', 's' }; + +static struct among a_6[9] = +{ +/* 0 */ { 5, s_6_0, -1, 4, 0}, +/* 1 */ { 5, s_6_1, -1, 6, 0}, +/* 2 */ { 5, s_6_2, -1, 3, 0}, +/* 3 */ { 5, s_6_3, -1, 4, 0}, +/* 4 */ { 4, s_6_4, -1, 4, 0}, +/* 5 */ { 6, s_6_5, -1, 1, 0}, +/* 6 */ { 7, s_6_6, 5, 2, 0}, +/* 7 */ { 3, s_6_7, -1, 5, 0}, +/* 8 */ { 4, s_6_8, -1, 5, 0} +}; + +static symbol s_7_0[2] = { 'i', 'c' }; +static symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_7_5[3] = { 'a', 't', 'e' }; +static symbol s_7_6[3] = { 'i', 'v', 'e' }; +static symbol s_7_7[3] = { 'i', 'z', 'e' }; +static symbol s_7_8[3] = { 'i', 't', 'i' }; +static symbol s_7_9[2] = { 'a', 'l' }; +static symbol s_7_10[3] = { 'i', 's', 'm' }; +static symbol s_7_11[3] = { 'i', 'o', 'n' }; +static symbol s_7_12[2] = { 'e', 'r' }; +static symbol s_7_13[3] = { 'o', 'u', 's' }; +static symbol s_7_14[3] = { 'a', 'n', 't' }; +static symbol s_7_15[3] = { 'e', 'n', 't' }; +static symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; + +static struct among a_7[18] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, -1, 1, 0}, +/* 3 */ { 4, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 2, s_7_9, -1, 1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 2, 0}, +/* 12 */ { 2, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 3, s_7_15, -1, 1, 0}, +/* 16 */ { 4, s_7_16, 15, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 'l' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0} +}; + +static symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; +static symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; +static symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; +static symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; + +static struct among a_9[8] = +{ +/* 0 */ { 7, s_9_0, -1, -1, 0}, +/* 1 */ { 7, s_9_1, -1, -1, 0}, +/* 2 */ { 6, s_9_2, -1, -1, 0}, +/* 3 */ { 7, s_9_3, -1, -1, 0}, +/* 4 */ { 6, s_9_4, -1, -1, 0}, +/* 5 */ { 7, s_9_5, -1, -1, 0}, +/* 6 */ { 7, s_9_6, -1, -1, 0}, +/* 7 */ { 6, s_9_7, -1, -1, 0} +}; + +static symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; +static symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; +static symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; +static symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; +static symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; +static symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; +static symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; +static symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; +static symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; +static symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; +static symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; +static symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; +static symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; +static symbol s_10_14[4] = { 's', 'k', 'i', 's' }; +static symbol s_10_15[3] = { 's', 'k', 'y' }; +static symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; +static symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; + +static struct among a_10[18] = +{ +/* 0 */ { 5, s_10_0, -1, -1, 0}, +/* 1 */ { 5, s_10_1, -1, -1, 0}, +/* 2 */ { 4, s_10_2, -1, -1, 0}, +/* 3 */ { 6, s_10_3, -1, -1, 0}, +/* 4 */ { 5, s_10_4, -1, 3, 0}, +/* 5 */ { 5, s_10_5, -1, 9, 0}, +/* 6 */ { 6, s_10_6, -1, 7, 0}, +/* 7 */ { 4, s_10_7, -1, -1, 0}, +/* 8 */ { 4, s_10_8, -1, 6, 0}, +/* 9 */ { 5, s_10_9, -1, 4, 0}, +/* 10 */ { 4, s_10_10, -1, -1, 0}, +/* 11 */ { 4, s_10_11, -1, 10, 0}, +/* 12 */ { 6, s_10_12, -1, 11, 0}, +/* 13 */ { 5, s_10_13, -1, 2, 0}, +/* 14 */ { 4, s_10_14, -1, 1, 0}, +/* 15 */ { 3, s_10_15, -1, -1, 0}, +/* 16 */ { 5, s_10_16, -1, 5, 0}, +/* 17 */ { 4, s_10_17, -1, 8, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static unsigned char g_valid_LI[] = { 55, 141, 2 }; + +static symbol s_0[] = { '\'' }; +static symbol s_1[] = { 'y' }; +static symbol s_2[] = { 'Y' }; +static symbol s_3[] = { 'y' }; +static symbol s_4[] = { 'Y' }; +static symbol s_5[] = { 's', 's' }; +static symbol s_6[] = { 'i', 'e' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'e', 'e' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'e' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'Y' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 't', 'i', 'o', 'n' }; +static symbol s_15[] = { 'e', 'n', 'c', 'e' }; +static symbol s_16[] = { 'a', 'n', 'c', 'e' }; +static symbol s_17[] = { 'a', 'b', 'l', 'e' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'i', 'z', 'e' }; +static symbol s_20[] = { 'a', 't', 'e' }; +static symbol s_21[] = { 'a', 'l' }; +static symbol s_22[] = { 'f', 'u', 'l' }; +static symbol s_23[] = { 'o', 'u', 's' }; +static symbol s_24[] = { 'i', 'v', 'e' }; +static symbol s_25[] = { 'b', 'l', 'e' }; +static symbol s_26[] = { 'l' }; +static symbol s_27[] = { 'o', 'g' }; +static symbol s_28[] = { 'f', 'u', 'l' }; +static symbol s_29[] = { 'l', 'e', 's', 's' }; +static symbol s_30[] = { 't', 'i', 'o', 'n' }; +static symbol s_31[] = { 'a', 't', 'e' }; +static symbol s_32[] = { 'a', 'l' }; +static symbol s_33[] = { 'i', 'c' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'l' }; +static symbol s_37[] = { 's', 'k', 'i' }; +static symbol s_38[] = { 's', 'k', 'y' }; +static symbol s_39[] = { 'd', 'i', 'e' }; +static symbol s_40[] = { 'l', 'i', 'e' }; +static symbol s_41[] = { 't', 'i', 'e' }; +static symbol s_42[] = { 'i', 'd', 'l' }; +static symbol s_43[] = { 'g', 'e', 'n', 't', 'l' }; +static symbol s_44[] = { 'u', 'g', 'l', 'i' }; +static symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' }; +static symbol s_46[] = { 'o', 'n', 'l', 'i' }; +static symbol s_47[] = { 's', 'i', 'n', 'g', 'l' }; +static symbol s_48[] = { 'Y' }; +static symbol s_49[] = { 'y' }; + +static int r_prelude(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 26 */ + { int c = z->c; /* do, line 27 */ + z->bra = z->c; /* [, line 27 */ + if (!(eq_s(z, 1, s_0))) goto lab0; + z->ket = z->c; /* ], line 27 */ + { int ret; + ret = slice_del(z); /* delete, line 27 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 28 */ + z->bra = z->c; /* [, line 28 */ + if (!(eq_s(z, 1, s_1))) goto lab1; + z->ket = z->c; /* ], line 28 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab1; + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 28 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 28 */ + lab1: + z->c = c; + } + { int c = z->c; /* do, line 29 */ + while(1) { /* repeat, line 29 */ + int c = z->c; + while(1) { /* goto, line 29 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 121))) goto lab4; + z->bra = z->c; /* [, line 29 */ + if (!(eq_s(z, 1, s_3))) goto lab4; + z->ket = z->c; /* ], line 29 */ + z->c = c; + break; + lab4: + z->c = c; + if (z->c >= z->l) goto lab3; + z->c++; /* goto, line 29 */ + } + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 29 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 29 */ + continue; + lab3: + z->c = c; + break; + } + z->c = c; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 35 */ + { int c = z->c; /* or, line 40 */ + if (!(find_among(z, a_0, 2))) goto lab2; /* among, line 36 */ + goto lab1; + lab2: + z->c = c; + while(1) { /* gopast, line 40 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 40 */ + } + while(1) { /* gopast, line 40 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab4; + break; + lab4: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 40 */ + } + } + lab1: + z->I[0] = z->c; /* setmark p1, line 41 */ + while(1) { /* gopast, line 42 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 42 */ + } + while(1) { /* gopast, line 42 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 42 */ + } + z->I[1] = z->c; /* setmark p2, line 42 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_shortv(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* or, line 50 */ + if (!(out_grouping_b(z, g_v_WXY, 89, 121))) goto lab1; + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab1; + if (!(out_grouping_b(z, g_v, 97, 121))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + if (!(in_grouping_b(z, g_v, 97, 121))) return 0; + if (z->c > z->lb) return 0; /* atlimit, line 51 */ + } +lab0: + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 58 */ + z->ket = z->c; /* [, line 59 */ + among_var = find_among_b(z, a_1, 3); /* substring, line 59 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 59 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 61 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + z->ket = z->c; /* [, line 64 */ + among_var = find_among_b(z, a_2, 6); /* substring, line 64 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 64 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 67 */ + if (z->c <= z->lb) goto lab2; + z->c--; /* next, line 67 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 67 */ + { int ret; + ret = slice_from_s(z, 2, s_6); /* <-, line 67 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 67 */ + if (ret < 0) return ret; + } + } + lab1: + break; + case 3: + if (z->c <= z->lb) return 0; + z->c--; /* next, line 68 */ + while(1) { /* gopast, line 68 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab3; + break; + lab3: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 68 */ + } + { int ret; + ret = slice_del(z); /* delete, line 68 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 76 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 79 */ + while(1) { /* gopast, line 79 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab0; + break; + lab0: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 79 */ + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 79 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 80 */ + among_var = find_among_b(z, a_3, 13); /* substring, line 80 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 82 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 85 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 85 */ + z->bra = z->c; /* ], line 85 */ + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 86 */ + { int m_test = z->l - z->c; /* test, line 86 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 86 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 86 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 93 */ + { int m = z->l - z->c; (void) m; /* or, line 93 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_12))) return 0; + } +lab0: + z->bra = z->c; /* ], line 93 */ + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + { int m = z->l - z->c; (void) m; /* not, line 94 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 94 */ + return 0; + lab2: + z->c = z->l - m; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 95 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 99 */ + among_var = find_among_b(z, a_5, 24); /* substring, line 99 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 99 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 99 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 100 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_17); /* <-, line 103 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 104 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 108 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 2, s_21); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_24); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_25); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 13: + if (!(eq_s_b(z, 1, s_26))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_27); /* <-, line 118 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_28); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 15: + { int ret; + ret = slice_from_s(z, 4, s_29); /* <-, line 120 */ + if (ret < 0) return ret; + } + break; + case 16: + if (!(in_grouping_b(z, g_valid_LI, 99, 116))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 121 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 126 */ + among_var = find_among_b(z, a_6, 9); /* substring, line 126 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 126 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 126 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_30); /* <-, line 127 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 128 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_32); /* <-, line 129 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_33); /* <-, line 131 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 140 */ + among_var = find_among_b(z, a_7, 18); /* substring, line 140 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 140 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 140 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 144 */ + if (!(eq_s_b(z, 1, s_34))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 144 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_8, 2); /* substring, line 149 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 150 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 150 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 150 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 150 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 150 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 150 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 151 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_36))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_exception2(struct SN_env * z) { + z->ket = z->c; /* [, line 157 */ + if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 157 */ + z->bra = z->c; /* ], line 157 */ + if (z->c > z->lb) return 0; /* atlimit, line 157 */ + return 1; +} + +static int r_exception1(struct SN_env * z) { + int among_var; + z->bra = z->c; /* [, line 169 */ + among_var = find_among(z, a_10, 18); /* substring, line 169 */ + if (!(among_var)) return 0; + z->ket = z->c; /* ], line 169 */ + if (z->c < z->l) return 0; /* atlimit, line 169 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 3, s_37); /* <-, line 173 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_38); /* <-, line 174 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 3, s_39); /* <-, line 175 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 3, s_40); /* <-, line 176 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_41); /* <-, line 177 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_42); /* <-, line 181 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 5, s_43); /* <-, line 182 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 4, s_44); /* <-, line 183 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 5, s_45); /* <-, line 184 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 4, s_46); /* <-, line 185 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 5, s_47); /* <-, line 186 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + if (!(z->B[0])) return 0; /* Boolean test Y_found, line 202 */ + while(1) { /* repeat, line 202 */ + int c = z->c; + while(1) { /* goto, line 202 */ + int c = z->c; + z->bra = z->c; /* [, line 202 */ + if (!(eq_s(z, 1, s_48))) goto lab1; + z->ket = z->c; /* ], line 202 */ + z->c = c; + break; + lab1: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* goto, line 202 */ + } + { int ret; + ret = slice_from_s(z, 1, s_49); /* <-, line 202 */ + if (ret < 0) return ret; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +extern int english_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* or, line 206 */ + { int ret = r_exception1(z); + if (ret == 0) goto lab1; /* call exception1, line 206 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = c; + { int c = z->c; /* not, line 207 */ + { int c = z->c + 3; + if (0 > c || c > z->l) goto lab3; + z->c = c; /* hop, line 207 */ + } + goto lab2; + lab3: + z->c = c; + } + goto lab0; + lab2: + z->c = c; + { int c = z->c; /* do, line 208 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab4; /* call prelude, line 208 */ + if (ret < 0) return ret; + } + lab4: + z->c = c; + } + { int c = z->c; /* do, line 209 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab5; /* call mark_regions, line 209 */ + if (ret < 0) return ret; + } + lab5: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 210 */ + + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab6; /* call Step_1a, line 212 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 214 */ + { int ret = r_exception2(z); + if (ret == 0) goto lab8; /* call exception2, line 214 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 216 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab9; /* call Step_1b, line 216 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 217 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab10; /* call Step_1c, line 217 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab11; /* call Step_2, line 219 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 220 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab12; /* call Step_3, line 220 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 221 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab13; /* call Step_4, line 221 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_Step_5(z); + if (ret == 0) goto lab14; /* call Step_5, line 223 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + } + lab7: + z->c = z->lb; + { int c = z->c; /* do, line 226 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab15; /* call postlude, line 226 */ + if (ret < 0) return ret; + } + lab15: + z->c = c; + } + } +lab0: + return 1; +} + +extern struct SN_env * english_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void english_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * english_ISO_8859_1_create_env(void); +extern void english_ISO_8859_1_close_env(struct SN_env * z); + +extern int english_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,792 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int finnish_ISO_8859_1_stem(struct SN_env * z); +static int r_tidy(struct SN_env * z); +static int r_other_endings(struct SN_env * z); +static int r_t_plural(struct SN_env * z); +static int r_i_plural(struct SN_env * z); +static int r_case_ending(struct SN_env * z); +static int r_VI(struct SN_env * z); +static int r_LONG(struct SN_env * z); +static int r_possessive(struct SN_env * z); +static int r_particle_etc(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * finnish_ISO_8859_1_create_env(void); +extern void finnish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[2] = { 'p', 'a' }; +static symbol s_0_1[3] = { 's', 't', 'i' }; +static symbol s_0_2[4] = { 'k', 'a', 'a', 'n' }; +static symbol s_0_3[3] = { 'h', 'a', 'n' }; +static symbol s_0_4[3] = { 'k', 'i', 'n' }; +static symbol s_0_5[3] = { 'h', 0xE4, 'n' }; +static symbol s_0_6[4] = { 'k', 0xE4, 0xE4, 'n' }; +static symbol s_0_7[2] = { 'k', 'o' }; +static symbol s_0_8[2] = { 'p', 0xE4 }; +static symbol s_0_9[2] = { 'k', 0xF6 }; + +static struct among a_0[10] = +{ +/* 0 */ { 2, s_0_0, -1, 1, 0}, +/* 1 */ { 3, s_0_1, -1, 2, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 3, s_0_3, -1, 1, 0}, +/* 4 */ { 3, s_0_4, -1, 1, 0}, +/* 5 */ { 3, s_0_5, -1, 1, 0}, +/* 6 */ { 4, s_0_6, -1, 1, 0}, +/* 7 */ { 2, s_0_7, -1, 1, 0}, +/* 8 */ { 2, s_0_8, -1, 1, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0} +}; + +static symbol s_1_0[3] = { 'l', 'l', 'a' }; +static symbol s_1_1[2] = { 'n', 'a' }; +static symbol s_1_2[3] = { 's', 's', 'a' }; +static symbol s_1_3[2] = { 't', 'a' }; +static symbol s_1_4[3] = { 'l', 't', 'a' }; +static symbol s_1_5[3] = { 's', 't', 'a' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 3, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 3, s_1_4, 3, -1, 0}, +/* 5 */ { 3, s_1_5, 3, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'l', 0xE4 }; +static symbol s_2_1[2] = { 'n', 0xE4 }; +static symbol s_2_2[3] = { 's', 's', 0xE4 }; +static symbol s_2_3[2] = { 't', 0xE4 }; +static symbol s_2_4[3] = { 'l', 't', 0xE4 }; +static symbol s_2_5[3] = { 's', 't', 0xE4 }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 3, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, -1, 0}, +/* 4 */ { 3, s_2_4, 3, -1, 0}, +/* 5 */ { 3, s_2_5, 3, -1, 0} +}; + +static symbol s_3_0[3] = { 'l', 'l', 'e' }; +static symbol s_3_1[3] = { 'i', 'n', 'e' }; + +static struct among a_3[2] = +{ +/* 0 */ { 3, s_3_0, -1, -1, 0}, +/* 1 */ { 3, s_3_1, -1, -1, 0} +}; + +static symbol s_4_0[3] = { 'n', 's', 'a' }; +static symbol s_4_1[3] = { 'm', 'm', 'e' }; +static symbol s_4_2[3] = { 'n', 'n', 'e' }; +static symbol s_4_3[2] = { 'n', 'i' }; +static symbol s_4_4[2] = { 's', 'i' }; +static symbol s_4_5[2] = { 'a', 'n' }; +static symbol s_4_6[2] = { 'e', 'n' }; +static symbol s_4_7[2] = { 0xE4, 'n' }; +static symbol s_4_8[3] = { 'n', 's', 0xE4 }; + +static struct among a_4[9] = +{ +/* 0 */ { 3, s_4_0, -1, 3, 0}, +/* 1 */ { 3, s_4_1, -1, 3, 0}, +/* 2 */ { 3, s_4_2, -1, 3, 0}, +/* 3 */ { 2, s_4_3, -1, 2, 0}, +/* 4 */ { 2, s_4_4, -1, 1, 0}, +/* 5 */ { 2, s_4_5, -1, 4, 0}, +/* 6 */ { 2, s_4_6, -1, 6, 0}, +/* 7 */ { 2, s_4_7, -1, 5, 0}, +/* 8 */ { 3, s_4_8, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'i', 'i' }; +static symbol s_5_3[2] = { 'o', 'o' }; +static symbol s_5_4[2] = { 'u', 'u' }; +static symbol s_5_5[2] = { 0xE4, 0xE4 }; +static symbol s_5_6[2] = { 0xF6, 0xF6 }; + +static struct among a_5[7] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0}, +/* 4 */ { 2, s_5_4, -1, -1, 0}, +/* 5 */ { 2, s_5_5, -1, -1, 0}, +/* 6 */ { 2, s_5_6, -1, -1, 0} +}; + +static symbol s_6_0[1] = { 'a' }; +static symbol s_6_1[3] = { 'l', 'l', 'a' }; +static symbol s_6_2[2] = { 'n', 'a' }; +static symbol s_6_3[3] = { 's', 's', 'a' }; +static symbol s_6_4[2] = { 't', 'a' }; +static symbol s_6_5[3] = { 'l', 't', 'a' }; +static symbol s_6_6[3] = { 's', 't', 'a' }; +static symbol s_6_7[3] = { 't', 't', 'a' }; +static symbol s_6_8[3] = { 'l', 'l', 'e' }; +static symbol s_6_9[3] = { 'i', 'n', 'e' }; +static symbol s_6_10[3] = { 'k', 's', 'i' }; +static symbol s_6_11[1] = { 'n' }; +static symbol s_6_12[3] = { 'h', 'a', 'n' }; +static symbol s_6_13[3] = { 'd', 'e', 'n' }; +static symbol s_6_14[4] = { 's', 'e', 'e', 'n' }; +static symbol s_6_15[3] = { 'h', 'e', 'n' }; +static symbol s_6_16[4] = { 't', 't', 'e', 'n' }; +static symbol s_6_17[3] = { 'h', 'i', 'n' }; +static symbol s_6_18[4] = { 's', 'i', 'i', 'n' }; +static symbol s_6_19[3] = { 'h', 'o', 'n' }; +static symbol s_6_20[3] = { 'h', 0xE4, 'n' }; +static symbol s_6_21[3] = { 'h', 0xF6, 'n' }; +static symbol s_6_22[1] = { 0xE4 }; +static symbol s_6_23[3] = { 'l', 'l', 0xE4 }; +static symbol s_6_24[2] = { 'n', 0xE4 }; +static symbol s_6_25[3] = { 's', 's', 0xE4 }; +static symbol s_6_26[2] = { 't', 0xE4 }; +static symbol s_6_27[3] = { 'l', 't', 0xE4 }; +static symbol s_6_28[3] = { 's', 't', 0xE4 }; +static symbol s_6_29[3] = { 't', 't', 0xE4 }; + +static struct among a_6[30] = +{ +/* 0 */ { 1, s_6_0, -1, 8, 0}, +/* 1 */ { 3, s_6_1, 0, -1, 0}, +/* 2 */ { 2, s_6_2, 0, -1, 0}, +/* 3 */ { 3, s_6_3, 0, -1, 0}, +/* 4 */ { 2, s_6_4, 0, -1, 0}, +/* 5 */ { 3, s_6_5, 4, -1, 0}, +/* 6 */ { 3, s_6_6, 4, -1, 0}, +/* 7 */ { 3, s_6_7, 4, 9, 0}, +/* 8 */ { 3, s_6_8, -1, -1, 0}, +/* 9 */ { 3, s_6_9, -1, -1, 0}, +/* 10 */ { 3, s_6_10, -1, -1, 0}, +/* 11 */ { 1, s_6_11, -1, 7, 0}, +/* 12 */ { 3, s_6_12, 11, 1, 0}, +/* 13 */ { 3, s_6_13, 11, -1, r_VI}, +/* 14 */ { 4, s_6_14, 11, -1, r_LONG}, +/* 15 */ { 3, s_6_15, 11, 2, 0}, +/* 16 */ { 4, s_6_16, 11, -1, r_VI}, +/* 17 */ { 3, s_6_17, 11, 3, 0}, +/* 18 */ { 4, s_6_18, 11, -1, r_VI}, +/* 19 */ { 3, s_6_19, 11, 4, 0}, +/* 20 */ { 3, s_6_20, 11, 5, 0}, +/* 21 */ { 3, s_6_21, 11, 6, 0}, +/* 22 */ { 1, s_6_22, -1, 8, 0}, +/* 23 */ { 3, s_6_23, 22, -1, 0}, +/* 24 */ { 2, s_6_24, 22, -1, 0}, +/* 25 */ { 3, s_6_25, 22, -1, 0}, +/* 26 */ { 2, s_6_26, 22, -1, 0}, +/* 27 */ { 3, s_6_27, 26, -1, 0}, +/* 28 */ { 3, s_6_28, 26, -1, 0}, +/* 29 */ { 3, s_6_29, 26, 9, 0} +}; + +static symbol s_7_0[3] = { 'e', 'j', 'a' }; +static symbol s_7_1[3] = { 'm', 'm', 'a' }; +static symbol s_7_2[4] = { 'i', 'm', 'm', 'a' }; +static symbol s_7_3[3] = { 'm', 'p', 'a' }; +static symbol s_7_4[4] = { 'i', 'm', 'p', 'a' }; +static symbol s_7_5[3] = { 'm', 'm', 'i' }; +static symbol s_7_6[4] = { 'i', 'm', 'm', 'i' }; +static symbol s_7_7[3] = { 'm', 'p', 'i' }; +static symbol s_7_8[4] = { 'i', 'm', 'p', 'i' }; +static symbol s_7_9[3] = { 'e', 'j', 0xE4 }; +static symbol s_7_10[3] = { 'm', 'm', 0xE4 }; +static symbol s_7_11[4] = { 'i', 'm', 'm', 0xE4 }; +static symbol s_7_12[3] = { 'm', 'p', 0xE4 }; +static symbol s_7_13[4] = { 'i', 'm', 'p', 0xE4 }; + +static struct among a_7[14] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 3, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, 1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, 3, -1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 4, s_7_6, 5, -1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 4, s_7_8, 7, -1, 0}, +/* 9 */ { 3, s_7_9, -1, -1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, 10, -1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 4, s_7_13, 12, -1, 0} +}; + +static symbol s_8_0[1] = { 'i' }; +static symbol s_8_1[1] = { 'j' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, -1, 0}, +/* 1 */ { 1, s_8_1, -1, -1, 0} +}; + +static symbol s_9_0[3] = { 'm', 'm', 'a' }; +static symbol s_9_1[4] = { 'i', 'm', 'm', 'a' }; + +static struct among a_9[2] = +{ +/* 0 */ { 3, s_9_0, -1, 1, 0}, +/* 1 */ { 4, s_9_1, 0, -1, 0} +}; + +static unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; + +static unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'k', 's', 'e' }; +static symbol s_2[] = { 'k', 's', 'i' }; +static symbol s_3[] = { 'i' }; +static symbol s_4[] = { 'a' }; +static symbol s_5[] = { 'e' }; +static symbol s_6[] = { 'i' }; +static symbol s_7[] = { 'o' }; +static symbol s_8[] = { 0xE4 }; +static symbol s_9[] = { 0xF6 }; +static symbol s_10[] = { 'i', 'e' }; +static symbol s_11[] = { 'e' }; +static symbol s_12[] = { 'p', 'o' }; +static symbol s_13[] = { 't' }; +static symbol s_14[] = { 'p', 'o' }; +static symbol s_15[] = { 'j' }; +static symbol s_16[] = { 'o' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'o' }; +static symbol s_19[] = { 'j' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping(z, g_V1, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 46 */ + } + while(1) { /* gopast, line 46 */ + if (!(out_grouping(z, g_V1, 97, 246))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 46 */ + } + z->I[0] = z->c; /* setmark p1, line 46 */ + while(1) { /* goto, line 47 */ + int c = z->c; + if (!(in_grouping(z, g_V1, 97, 246))) goto lab2; + z->c = c; + break; + lab2: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 47 */ + } + while(1) { /* gopast, line 47 */ + if (!(out_grouping(z, g_V1, 97, 246))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 47 */ + } + z->I[1] = z->c; /* setmark p2, line 47 */ + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_particle_etc(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 55 */ + among_var = find_among_b(z, a_0, 10); /* substring, line 55 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 55 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(in_grouping_b(z, g_particle_end, 97, 246))) return 0; + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 64 */ + if (ret < 0) return ret; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_possessive(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 69 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 69 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 69 */ + among_var = find_among_b(z, a_4, 9); /* substring, line 69 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 69 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 72 */ + if (!(eq_s_b(z, 1, s_0))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 72 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 74 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 74 */ + if (!(eq_s_b(z, 3, s_1))) return 0; + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */ + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 5: + if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */ + { int ret; + ret = slice_del(z); /* delete, line 84 */ + if (ret < 0) return ret; + } + break; + case 6: + if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */ + { int ret; + ret = slice_del(z); /* delete, line 86 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_LONG(struct SN_env * z) { + if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */ + return 1; +} + +static int r_VI(struct SN_env * z) { + if (!(eq_s_b(z, 1, s_3))) return 0; + if (!(in_grouping_b(z, g_V2, 97, 246))) return 0; + return 1; +} + +static int r_case_ending(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 96 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 96 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 96 */ + among_var = find_among_b(z, a_6, 30); /* substring, line 96 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 96 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_4))) return 0; + break; + case 2: + if (!(eq_s_b(z, 1, s_5))) return 0; + break; + case 3: + if (!(eq_s_b(z, 1, s_6))) return 0; + break; + case 4: + if (!(eq_s_b(z, 1, s_7))) return 0; + break; + case 5: + if (!(eq_s_b(z, 1, s_8))) return 0; + break; + case 6: + if (!(eq_s_b(z, 1, s_9))) return 0; + break; + case 7: + { int m = z->l - z->c; (void) m; /* try, line 111 */ + { int m = z->l - z->c; (void) m; /* and, line 113 */ + { int m = z->l - z->c; (void) m; /* or, line 112 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab2; /* call LONG, line 111 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m; goto lab0; } + } + lab1: + z->c = z->l - m; + if (z->c <= z->lb) { z->c = z->l - m; goto lab0; } + z->c--; /* next, line 113 */ + } + z->bra = z->c; /* ], line 113 */ + lab0: + ; + } + break; + case 8: + if (!(in_grouping_b(z, g_V1, 97, 246))) return 0; + if (!(out_grouping_b(z, g_V1, 97, 246))) return 0; + break; + case 9: + if (!(eq_s_b(z, 1, s_11))) return 0; + break; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set ending_removed, line 139 */ + return 1; +} + +static int r_other_endings(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 142 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 142 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 142 */ + among_var = find_among_b(z, a_7, 14); /* substring, line 142 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 142 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 146 */ + if (!(eq_s_b(z, 2, s_12))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_i_plural(struct SN_env * z) { + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 154 */ + if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */ + z->bra = z->c; /* ], line 154 */ + z->lb = m3; + } + { int ret; + ret = slice_del(z); /* delete, line 158 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_t_plural(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 161 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 161 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 162 */ + if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 162 */ + { int m_test = z->l - z->c; /* test, line 162 */ + if (!(in_grouping_b(z, g_V1, 97, 246))) { z->lb = m3; return 0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + z->lb = m3; + } + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 165 */ + among_var = find_among_b(z, a_9, 2); /* substring, line 165 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 165 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 167 */ + if (!(eq_s_b(z, 2, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 170 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_tidy(struct SN_env * z) { + { int m3; /* setlimit, line 173 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 173 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 174 */ + { int m = z->l - z->c; (void) m; /* and, line 174 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab0; /* call LONG, line 174 */ + if (ret < 0) return ret; + } + z->c = z->l - m; + z->ket = z->c; /* [, line 174 */ + if (z->c <= z->lb) goto lab0; + z->c--; /* next, line 174 */ + z->bra = z->c; /* ], line 174 */ + { int ret; + ret = slice_del(z); /* delete, line 174 */ + if (ret < 0) return ret; + } + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 175 */ + z->ket = z->c; /* [, line 175 */ + if (!(in_grouping_b(z, g_AEI, 97, 228))) goto lab1; + z->bra = z->c; /* ], line 175 */ + if (!(out_grouping_b(z, g_V1, 97, 246))) goto lab1; + { int ret; + ret = slice_del(z); /* delete, line 175 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 176 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_15))) goto lab2; + z->bra = z->c; /* ], line 176 */ + { int m = z->l - z->c; (void) m; /* or, line 176 */ + if (!(eq_s_b(z, 1, s_16))) goto lab4; + goto lab3; + lab4: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_17))) goto lab2; + } + lab3: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 177 */ + z->ket = z->c; /* [, line 177 */ + if (!(eq_s_b(z, 1, s_18))) goto lab5; + z->bra = z->c; /* ], line 177 */ + if (!(eq_s_b(z, 1, s_19))) goto lab5; + { int ret; + ret = slice_del(z); /* delete, line 177 */ + if (ret < 0) return ret; + } + lab5: + z->c = z->l - m; + } + z->lb = m3; + } + while(1) { /* goto, line 179 */ + int m = z->l - z->c; (void) m; + if (!(out_grouping_b(z, g_V1, 97, 246))) goto lab6; + z->c = z->l - m; + break; + lab6: + z->c = z->l - m; + if (z->c <= z->lb) return 0; + z->c--; /* goto, line 179 */ + } + z->ket = z->c; /* [, line 179 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 179 */ + z->bra = z->c; /* ], line 179 */ + z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */ + if (z->S[0] == 0) return -1; /* -> x, line 179 */ + if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int finnish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 185 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 185 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->B[0] = 0; /* unset ending_removed, line 186 */ + z->lb = z->c; z->c = z->l; /* backwards, line 187 */ + + { int m = z->l - z->c; (void) m; /* do, line 188 */ + { int ret = r_particle_etc(z); + if (ret == 0) goto lab1; /* call particle_etc, line 188 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 189 */ + { int ret = r_possessive(z); + if (ret == 0) goto lab2; /* call possessive, line 189 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 190 */ + { int ret = r_case_ending(z); + if (ret == 0) goto lab3; /* call case_ending, line 190 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 191 */ + { int ret = r_other_endings(z); + if (ret == 0) goto lab4; /* call other_endings, line 191 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 192 */ + if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */ + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_i_plural(z); + if (ret == 0) goto lab7; /* call i_plural, line 192 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + goto lab5; + lab6: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_t_plural(z); + if (ret == 0) goto lab8; /* call t_plural, line 192 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + } +lab5: + { int m = z->l - z->c; (void) m; /* do, line 193 */ + { int ret = r_tidy(z); + if (ret == 0) goto lab9; /* call tidy, line 193 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * finnish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 1); } + +extern void finnish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * finnish_ISO_8859_1_create_env(void); +extern void finnish_ISO_8859_1_close_env(struct SN_env * z); + +extern int finnish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1276 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int french_ISO_8859_1_stem(struct SN_env * z); +static int r_un_accent(struct SN_env * z); +static int r_un_double(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_i_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * french_ISO_8859_1_create_env(void); +extern void french_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'I' }; +static symbol s_0_2[1] = { 'U' }; +static symbol s_0_3[1] = { 'Y' }; + +static struct among a_0[4] = +{ +/* 0 */ { 0, 0, -1, 4, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0} +}; + +static symbol s_1_0[3] = { 'i', 'q', 'U' }; +static symbol s_1_1[3] = { 'a', 'b', 'l' }; +static symbol s_1_2[3] = { 'I', 0xE8, 'r' }; +static symbol s_1_3[3] = { 'i', 0xE8, 'r' }; +static symbol s_1_4[3] = { 'e', 'u', 's' }; +static symbol s_1_5[2] = { 'i', 'v' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, 3, 0}, +/* 1 */ { 3, s_1_1, -1, 3, 0}, +/* 2 */ { 3, s_1_2, -1, 4, 0}, +/* 3 */ { 3, s_1_3, -1, 4, 0}, +/* 4 */ { 3, s_1_4, -1, 2, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_2_2[2] = { 'i', 'v' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 4, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 3, 0} +}; + +static symbol s_3_0[4] = { 'i', 'q', 'U', 'e' }; +static symbol s_3_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_3_2[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_3_3[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_3_4[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_3_5[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_3_6[4] = { 'i', 's', 'm', 'e' }; +static symbol s_3_7[4] = { 'e', 'u', 's', 'e' }; +static symbol s_3_8[4] = { 'i', 's', 't', 'e' }; +static symbol s_3_9[3] = { 'i', 'v', 'e' }; +static symbol s_3_10[2] = { 'i', 'f' }; +static symbol s_3_11[5] = { 'u', 's', 'i', 'o', 'n' }; +static symbol s_3_12[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_13[5] = { 'u', 't', 'i', 'o', 'n' }; +static symbol s_3_14[5] = { 'a', 't', 'e', 'u', 'r' }; +static symbol s_3_15[5] = { 'i', 'q', 'U', 'e', 's' }; +static symbol s_3_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' }; +static symbol s_3_17[5] = { 'a', 'n', 'c', 'e', 's' }; +static symbol s_3_18[5] = { 'e', 'n', 'c', 'e', 's' }; +static symbol s_3_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' }; +static symbol s_3_20[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_3_21[5] = { 'i', 's', 'm', 'e', 's' }; +static symbol s_3_22[5] = { 'e', 'u', 's', 'e', 's' }; +static symbol s_3_23[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_3_24[4] = { 'i', 'v', 'e', 's' }; +static symbol s_3_25[3] = { 'i', 'f', 's' }; +static symbol s_3_26[6] = { 'u', 's', 'i', 'o', 'n', 's' }; +static symbol s_3_27[6] = { 'a', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_28[6] = { 'u', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_29[6] = { 'a', 't', 'e', 'u', 'r', 's' }; +static symbol s_3_30[5] = { 'm', 'e', 'n', 't', 's' }; +static symbol s_3_31[6] = { 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_33[4] = { 'i', 't', 0xE9, 's' }; +static symbol s_3_34[4] = { 'm', 'e', 'n', 't' }; +static symbol s_3_35[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_39[3] = { 'a', 'u', 'x' }; +static symbol s_3_40[4] = { 'e', 'a', 'u', 'x' }; +static symbol s_3_41[3] = { 'e', 'u', 'x' }; +static symbol s_3_42[3] = { 'i', 't', 0xE9 }; + +static struct among a_3[43] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 6, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0}, +/* 3 */ { 4, s_3_3, -1, 5, 0}, +/* 4 */ { 5, s_3_4, -1, 3, 0}, +/* 5 */ { 4, s_3_5, -1, 1, 0}, +/* 6 */ { 4, s_3_6, -1, 1, 0}, +/* 7 */ { 4, s_3_7, -1, 11, 0}, +/* 8 */ { 4, s_3_8, -1, 1, 0}, +/* 9 */ { 3, s_3_9, -1, 8, 0}, +/* 10 */ { 2, s_3_10, -1, 8, 0}, +/* 11 */ { 5, s_3_11, -1, 4, 0}, +/* 12 */ { 5, s_3_12, -1, 2, 0}, +/* 13 */ { 5, s_3_13, -1, 4, 0}, +/* 14 */ { 5, s_3_14, -1, 2, 0}, +/* 15 */ { 5, s_3_15, -1, 1, 0}, +/* 16 */ { 7, s_3_16, -1, 2, 0}, +/* 17 */ { 5, s_3_17, -1, 1, 0}, +/* 18 */ { 5, s_3_18, -1, 5, 0}, +/* 19 */ { 6, s_3_19, -1, 3, 0}, +/* 20 */ { 5, s_3_20, -1, 1, 0}, +/* 21 */ { 5, s_3_21, -1, 1, 0}, +/* 22 */ { 5, s_3_22, -1, 11, 0}, +/* 23 */ { 5, s_3_23, -1, 1, 0}, +/* 24 */ { 4, s_3_24, -1, 8, 0}, +/* 25 */ { 3, s_3_25, -1, 8, 0}, +/* 26 */ { 6, s_3_26, -1, 4, 0}, +/* 27 */ { 6, s_3_27, -1, 2, 0}, +/* 28 */ { 6, s_3_28, -1, 4, 0}, +/* 29 */ { 6, s_3_29, -1, 2, 0}, +/* 30 */ { 5, s_3_30, -1, 15, 0}, +/* 31 */ { 6, s_3_31, 30, 6, 0}, +/* 32 */ { 9, s_3_32, 31, 12, 0}, +/* 33 */ { 4, s_3_33, -1, 7, 0}, +/* 34 */ { 4, s_3_34, -1, 15, 0}, +/* 35 */ { 5, s_3_35, 34, 6, 0}, +/* 36 */ { 8, s_3_36, 35, 12, 0}, +/* 37 */ { 6, s_3_37, 34, 13, 0}, +/* 38 */ { 6, s_3_38, 34, 14, 0}, +/* 39 */ { 3, s_3_39, -1, 10, 0}, +/* 40 */ { 4, s_3_40, 39, 9, 0}, +/* 41 */ { 3, s_3_41, -1, 1, 0}, +/* 42 */ { 3, s_3_42, -1, 7, 0} +}; + +static symbol s_4_0[3] = { 'i', 'r', 'a' }; +static symbol s_4_1[2] = { 'i', 'e' }; +static symbol s_4_2[4] = { 'i', 's', 's', 'e' }; +static symbol s_4_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' }; +static symbol s_4_4[1] = { 'i' }; +static symbol s_4_5[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_4_6[2] = { 'i', 'r' }; +static symbol s_4_7[4] = { 'i', 'r', 'a', 's' }; +static symbol s_4_8[3] = { 'i', 'e', 's' }; +static symbol s_4_9[4] = { 0xEE, 'm', 'e', 's' }; +static symbol s_4_10[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_4_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' }; +static symbol s_4_12[4] = { 0xEE, 't', 'e', 's' }; +static symbol s_4_13[2] = { 'i', 's' }; +static symbol s_4_14[5] = { 'i', 'r', 'a', 'i', 's' }; +static symbol s_4_15[6] = { 'i', 's', 's', 'a', 'i', 's' }; +static symbol s_4_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' }; +static symbol s_4_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_4_18[5] = { 'i', 'r', 'o', 'n', 's' }; +static symbol s_4_19[6] = { 'i', 's', 's', 'o', 'n', 's' }; +static symbol s_4_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' }; +static symbol s_4_21[2] = { 'i', 't' }; +static symbol s_4_22[5] = { 'i', 'r', 'a', 'i', 't' }; +static symbol s_4_23[6] = { 'i', 's', 's', 'a', 'i', 't' }; +static symbol s_4_24[6] = { 'i', 's', 's', 'a', 'n', 't' }; +static symbol s_4_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_27[5] = { 'i', 'r', 'e', 'n', 't' }; +static symbol s_4_28[6] = { 'i', 's', 's', 'e', 'n', 't' }; +static symbol s_4_29[5] = { 'i', 'r', 'o', 'n', 't' }; +static symbol s_4_30[2] = { 0xEE, 't' }; +static symbol s_4_31[5] = { 'i', 'r', 'i', 'e', 'z' }; +static symbol s_4_32[6] = { 'i', 's', 's', 'i', 'e', 'z' }; +static symbol s_4_33[4] = { 'i', 'r', 'e', 'z' }; +static symbol s_4_34[5] = { 'i', 's', 's', 'e', 'z' }; + +static struct among a_4[35] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0}, +/* 3 */ { 7, s_4_3, -1, 1, 0}, +/* 4 */ { 1, s_4_4, -1, 1, 0}, +/* 5 */ { 4, s_4_5, 4, 1, 0}, +/* 6 */ { 2, s_4_6, -1, 1, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 1, 0}, +/* 9 */ { 4, s_4_9, -1, 1, 0}, +/* 10 */ { 5, s_4_10, -1, 1, 0}, +/* 11 */ { 8, s_4_11, -1, 1, 0}, +/* 12 */ { 4, s_4_12, -1, 1, 0}, +/* 13 */ { 2, s_4_13, -1, 1, 0}, +/* 14 */ { 5, s_4_14, 13, 1, 0}, +/* 15 */ { 6, s_4_15, 13, 1, 0}, +/* 16 */ { 6, s_4_16, -1, 1, 0}, +/* 17 */ { 7, s_4_17, -1, 1, 0}, +/* 18 */ { 5, s_4_18, -1, 1, 0}, +/* 19 */ { 6, s_4_19, -1, 1, 0}, +/* 20 */ { 7, s_4_20, -1, 1, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 5, s_4_22, 21, 1, 0}, +/* 23 */ { 6, s_4_23, 21, 1, 0}, +/* 24 */ { 6, s_4_24, -1, 1, 0}, +/* 25 */ { 7, s_4_25, -1, 1, 0}, +/* 26 */ { 8, s_4_26, -1, 1, 0}, +/* 27 */ { 5, s_4_27, -1, 1, 0}, +/* 28 */ { 6, s_4_28, -1, 1, 0}, +/* 29 */ { 5, s_4_29, -1, 1, 0}, +/* 30 */ { 2, s_4_30, -1, 1, 0}, +/* 31 */ { 5, s_4_31, -1, 1, 0}, +/* 32 */ { 6, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, -1, 1, 0}, +/* 34 */ { 5, s_4_34, -1, 1, 0} +}; + +static symbol s_5_0[1] = { 'a' }; +static symbol s_5_1[3] = { 'e', 'r', 'a' }; +static symbol s_5_2[4] = { 'a', 's', 's', 'e' }; +static symbol s_5_3[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_4[2] = { 0xE9, 'e' }; +static symbol s_5_5[2] = { 'a', 'i' }; +static symbol s_5_6[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_5_7[2] = { 'e', 'r' }; +static symbol s_5_8[2] = { 'a', 's' }; +static symbol s_5_9[4] = { 'e', 'r', 'a', 's' }; +static symbol s_5_10[4] = { 0xE2, 'm', 'e', 's' }; +static symbol s_5_11[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_5_12[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_13[4] = { 0xE2, 't', 'e', 's' }; +static symbol s_5_14[3] = { 0xE9, 'e', 's' }; +static symbol s_5_15[3] = { 'a', 'i', 's' }; +static symbol s_5_16[5] = { 'e', 'r', 'a', 'i', 's' }; +static symbol s_5_17[4] = { 'i', 'o', 'n', 's' }; +static symbol s_5_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' }; +static symbol s_5_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_5_20[5] = { 'e', 'r', 'o', 'n', 's' }; +static symbol s_5_21[4] = { 'a', 'n', 't', 's' }; +static symbol s_5_22[2] = { 0xE9, 's' }; +static symbol s_5_23[3] = { 'a', 'i', 't' }; +static symbol s_5_24[5] = { 'e', 'r', 'a', 'i', 't' }; +static symbol s_5_25[3] = { 'a', 'n', 't' }; +static symbol s_5_26[5] = { 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_28[5] = { 0xE8, 'r', 'e', 'n', 't' }; +static symbol s_5_29[6] = { 'a', 's', 's', 'e', 'n', 't' }; +static symbol s_5_30[5] = { 'e', 'r', 'o', 'n', 't' }; +static symbol s_5_31[2] = { 0xE2, 't' }; +static symbol s_5_32[2] = { 'e', 'z' }; +static symbol s_5_33[3] = { 'i', 'e', 'z' }; +static symbol s_5_34[5] = { 'e', 'r', 'i', 'e', 'z' }; +static symbol s_5_35[6] = { 'a', 's', 's', 'i', 'e', 'z' }; +static symbol s_5_36[4] = { 'e', 'r', 'e', 'z' }; +static symbol s_5_37[1] = { 0xE9 }; + +static struct among a_5[38] = +{ +/* 0 */ { 1, s_5_0, -1, 3, 0}, +/* 1 */ { 3, s_5_1, 0, 2, 0}, +/* 2 */ { 4, s_5_2, -1, 3, 0}, +/* 3 */ { 4, s_5_3, -1, 3, 0}, +/* 4 */ { 2, s_5_4, -1, 2, 0}, +/* 5 */ { 2, s_5_5, -1, 3, 0}, +/* 6 */ { 4, s_5_6, 5, 2, 0}, +/* 7 */ { 2, s_5_7, -1, 2, 0}, +/* 8 */ { 2, s_5_8, -1, 3, 0}, +/* 9 */ { 4, s_5_9, 8, 2, 0}, +/* 10 */ { 4, s_5_10, -1, 3, 0}, +/* 11 */ { 5, s_5_11, -1, 3, 0}, +/* 12 */ { 5, s_5_12, -1, 3, 0}, +/* 13 */ { 4, s_5_13, -1, 3, 0}, +/* 14 */ { 3, s_5_14, -1, 2, 0}, +/* 15 */ { 3, s_5_15, -1, 3, 0}, +/* 16 */ { 5, s_5_16, 15, 2, 0}, +/* 17 */ { 4, s_5_17, -1, 1, 0}, +/* 18 */ { 6, s_5_18, 17, 2, 0}, +/* 19 */ { 7, s_5_19, 17, 3, 0}, +/* 20 */ { 5, s_5_20, -1, 2, 0}, +/* 21 */ { 4, s_5_21, -1, 3, 0}, +/* 22 */ { 2, s_5_22, -1, 2, 0}, +/* 23 */ { 3, s_5_23, -1, 3, 0}, +/* 24 */ { 5, s_5_24, 23, 2, 0}, +/* 25 */ { 3, s_5_25, -1, 3, 0}, +/* 26 */ { 5, s_5_26, -1, 3, 0}, +/* 27 */ { 7, s_5_27, 26, 2, 0}, +/* 28 */ { 5, s_5_28, -1, 2, 0}, +/* 29 */ { 6, s_5_29, -1, 3, 0}, +/* 30 */ { 5, s_5_30, -1, 2, 0}, +/* 31 */ { 2, s_5_31, -1, 3, 0}, +/* 32 */ { 2, s_5_32, -1, 2, 0}, +/* 33 */ { 3, s_5_33, 32, 2, 0}, +/* 34 */ { 5, s_5_34, 33, 2, 0}, +/* 35 */ { 6, s_5_35, 33, 3, 0}, +/* 36 */ { 4, s_5_36, 32, 2, 0}, +/* 37 */ { 1, s_5_37, -1, 2, 0} +}; + +static symbol s_6_0[1] = { 'e' }; +static symbol s_6_1[4] = { 'I', 0xE8, 'r', 'e' }; +static symbol s_6_2[4] = { 'i', 0xE8, 'r', 'e' }; +static symbol s_6_3[3] = { 'i', 'o', 'n' }; +static symbol s_6_4[3] = { 'I', 'e', 'r' }; +static symbol s_6_5[3] = { 'i', 'e', 'r' }; +static symbol s_6_6[1] = { 0xEB }; + +static struct among a_6[7] = +{ +/* 0 */ { 1, s_6_0, -1, 3, 0}, +/* 1 */ { 4, s_6_1, 0, 2, 0}, +/* 2 */ { 4, s_6_2, 0, 2, 0}, +/* 3 */ { 3, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 2, 0}, +/* 5 */ { 3, s_6_5, -1, 2, 0}, +/* 6 */ { 1, s_6_6, -1, 4, 0} +}; + +static symbol s_7_0[3] = { 'e', 'l', 'l' }; +static symbol s_7_1[4] = { 'e', 'i', 'l', 'l' }; +static symbol s_7_2[3] = { 'e', 'n', 'n' }; +static symbol s_7_3[3] = { 'o', 'n', 'n' }; +static symbol s_7_4[3] = { 'e', 't', 't' }; + +static struct among a_7[5] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 4, s_7_1, -1, -1, 0}, +/* 2 */ { 3, s_7_2, -1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, -1, 0}, +/* 4 */ { 3, s_7_4, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; + +static unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'u' }; +static symbol s_1[] = { 'U' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'I' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'Y' }; +static symbol s_8[] = { 'q' }; +static symbol s_9[] = { 'u' }; +static symbol s_10[] = { 'U' }; +static symbol s_11[] = { 'i' }; +static symbol s_12[] = { 'u' }; +static symbol s_13[] = { 'y' }; +static symbol s_14[] = { 'i', 'c' }; +static symbol s_15[] = { 'i', 'q', 'U' }; +static symbol s_16[] = { 'l', 'o', 'g' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'a', 't' }; +static symbol s_20[] = { 'e', 'u', 'x' }; +static symbol s_21[] = { 'i' }; +static symbol s_22[] = { 'a', 'b', 'l' }; +static symbol s_23[] = { 'i', 'q', 'U' }; +static symbol s_24[] = { 'a', 't' }; +static symbol s_25[] = { 'i', 'c' }; +static symbol s_26[] = { 'i', 'q', 'U' }; +static symbol s_27[] = { 'e', 'a', 'u' }; +static symbol s_28[] = { 'a', 'l' }; +static symbol s_29[] = { 'e', 'u', 'x' }; +static symbol s_30[] = { 'a', 'n', 't' }; +static symbol s_31[] = { 'e', 'n', 't' }; +static symbol s_32[] = { 'e' }; +static symbol s_33[] = { 's' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'i' }; +static symbol s_37[] = { 'g', 'u' }; +static symbol s_38[] = { 0xE9 }; +static symbol s_39[] = { 0xE8 }; +static symbol s_40[] = { 'e' }; +static symbol s_41[] = { 'Y' }; +static symbol s_42[] = { 'i' }; +static symbol s_43[] = { 0xE7 }; +static symbol s_44[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + while(1) { /* repeat, line 38 */ + int c = z->c; + while(1) { /* goto, line 38 */ + int c = z->c; + { int c = z->c; /* or, line 44 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab3; + z->bra = z->c; /* [, line 40 */ + { int c = z->c; /* or, line 40 */ + if (!(eq_s(z, 1, s_0))) goto lab5; + z->ket = z->c; /* ], line 40 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 40 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 41 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 41 */ + if (ret < 0) return ret; + } + goto lab4; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab3; + z->ket = z->c; /* ], line 42 */ + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + } + lab4: + goto lab2; + lab3: + z->c = c; + z->bra = z->c; /* [, line 45 */ + if (!(eq_s(z, 1, s_6))) goto lab7; + z->ket = z->c; /* ], line 45 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab7; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 45 */ + if (ret < 0) return ret; + } + goto lab2; + lab7: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab1; + z->bra = z->c; /* [, line 47 */ + if (!(eq_s(z, 1, s_9))) goto lab1; + z->ket = z->c; /* ], line 47 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 47 */ + if (ret < 0) return ret; + } + } + lab2: + z->c = c; + break; + lab1: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* goto, line 38 */ + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 56 */ + { int c = z->c; /* or, line 57 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab2; + if (!(in_grouping(z, g_v, 97, 251))) goto lab2; + if (z->c >= z->l) goto lab2; + z->c++; /* next, line 57 */ + goto lab1; + lab2: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 57 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 57 */ + } + } + lab1: + z->I[0] = z->c; /* setmark pV, line 58 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 60 */ + while(1) { /* gopast, line 61 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 61 */ + } + while(1) { /* gopast, line 61 */ + if (!(out_grouping(z, g_v, 97, 251))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 61 */ + } + z->I[1] = z->c; /* setmark p1, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab7; + break; + lab7: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 62 */ + } + while(1) { /* gopast, line 62 */ + if (!(out_grouping(z, g_v, 97, 251))) goto lab8; + break; + lab8: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 62 */ + } + z->I[2] = z->c; /* setmark p2, line 62 */ + lab4: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 66 */ + int c = z->c; + z->bra = z->c; /* [, line 68 */ + among_var = find_among(z, a_0, 4); /* substring, line 68 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 68 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 70 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 4: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 72 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 83 */ + among_var = find_among_b(z, a_3, 43); /* substring, line 83 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 83 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 87 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 90 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 91 */ + z->ket = z->c; /* [, line 91 */ + if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 91 */ + { int m = z->l - z->c; (void) m; /* or, line 91 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 91 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 91 */ + if (ret < 0) return ret; + } + } + lab1: + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 95 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_16); /* <-, line 95 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_17); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 101 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 107 */ + among_var = find_among_b(z, a_1, 6); /* substring, line 107 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 107 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 108 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 108 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 109 */ + { int ret = r_R2(z); + if (ret == 0) goto lab5; /* call R2, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 109 */ + if (ret < 0) return ret; + } + } + lab4: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call RV, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_21); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 120 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 120 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 121 */ + z->ket = z->c; /* [, line 122 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 122 */ + if (!(among_var)) { z->c = z->l - m; goto lab6; } + z->bra = z->c; /* ], line 122 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab6; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 123 */ + { int ret = r_R2(z); + if (ret == 0) goto lab8; /* call R2, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 123 */ + if (ret < 0) return ret; + } + } + lab7: + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 124 */ + { int ret = r_R2(z); + if (ret == 0) goto lab10; /* call R2, line 124 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 124 */ + if (ret < 0) return ret; + } + } + lab9: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + break; + } + lab6: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 132 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 133 */ + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int m = z->l - z->c; (void) m; /* or, line 133 */ + { int ret = r_R2(z); + if (ret == 0) goto lab13; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + goto lab12; + lab13: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_26); /* <-, line 133 */ + if (ret < 0) return ret; + } + } + lab12: + lab11: + ; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_27); /* <-, line 135 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_28); /* <-, line 136 */ + if (ret < 0) return ret; + } + break; + case 11: + { int m = z->l - z->c; (void) m; /* or, line 138 */ + { int ret = r_R2(z); + if (ret == 0) goto lab15; /* call R2, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + goto lab14; + lab15: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_29); /* <-, line 138 */ + if (ret < 0) return ret; + } + } + lab14: + break; + case 12: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 141 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b(z, g_v, 97, 251))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 141 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_30); /* <-, line 146 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 146 */ + break; + case 14: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 147 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 147 */ + break; + case 15: + { int m_test = z->l - z->c; /* test, line 149 */ + if (!(in_grouping_b(z, g_v, 97, 251))) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 149 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 149 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 149 */ + break; + } + return 1; +} + +static int r_i_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 155 */ + among_var = find_among_b(z, a_4, 35); /* substring, line 155 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 155 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + if (!(out_grouping_b(z, g_v, 97, 251))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 166 */ + among_var = find_among_b(z, a_5, 38); /* substring, line 166 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 166 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 168 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 182 */ + z->ket = z->c; /* [, line 182 */ + if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 182 */ + { int ret; + ret = slice_del(z); /* delete, line 182 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 190 */ + z->ket = z->c; /* [, line 190 */ + if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 190 */ + { int m_test = z->l - z->c; /* test, line 190 */ + if (!(out_grouping_b(z, g_keep_with_s, 97, 232))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m3; /* setlimit, line 191 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 191 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_6, 7); /* substring, line 192 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 193 */ + if (!(eq_s_b(z, 1, s_34))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) { z->lb = m3; return 0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 193 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_36); /* <-, line 195 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(eq_s_b(z, 2, s_37))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 197 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_un_double(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 203 */ + if (!(find_among_b(z, a_7, 5))) return 0; /* among, line 203 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 203 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 203 */ + z->bra = z->c; /* ], line 203 */ + { int ret; + ret = slice_del(z); /* delete, line 203 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_un_accent(struct SN_env * z) { + { int i = 1; + while(1) { /* atleast, line 207 */ + if (!(out_grouping_b(z, g_v, 97, 251))) goto lab0; + i--; + continue; + lab0: + break; + } + if (i > 0) return 0; + } + z->ket = z->c; /* [, line 208 */ + { int m = z->l - z->c; (void) m; /* or, line 208 */ + if (!(eq_s_b(z, 1, s_38))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_39))) return 0; + } +lab1: + z->bra = z->c; /* ], line 208 */ + { int ret; + ret = slice_from_s(z, 1, s_40); /* <-, line 208 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int french_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 214 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 214 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 215 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 215 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 216 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int m = z->l - z->c; (void) m; /* or, line 228 */ + { int m = z->l - z->c; (void) m; /* and, line 224 */ + { int m = z->l - z->c; (void) m; /* or, line 220 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_i_verb_suffix(z); + if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 222 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 225 */ + z->ket = z->c; /* [, line 225 */ + { int m = z->l - z->c; (void) m; /* or, line 225 */ + if (!(eq_s_b(z, 1, s_41))) goto lab10; + z->bra = z->c; /* ], line 225 */ + { int ret; + ret = slice_from_s(z, 1, s_42); /* <-, line 225 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_43))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 226 */ + { int ret; + ret = slice_from_s(z, 1, s_44); /* <-, line 226 */ + if (ret < 0) return ret; + } + } + lab9: + lab8: + ; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 229 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 234 */ + { int ret = r_un_double(z); + if (ret == 0) goto lab11; /* call un_double, line 234 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 235 */ + { int ret = r_un_accent(z); + if (ret == 0) goto lab12; /* call un_accent, line 235 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 237 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab13; /* call postlude, line 237 */ + if (ret < 0) return ret; + } + lab13: + z->c = c; + } + return 1; +} + +extern struct SN_env * french_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void french_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * french_ISO_8859_1_create_env(void); +extern void french_ISO_8859_1_close_env(struct SN_env * z); + +extern int french_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,512 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int german_ISO_8859_1_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * german_ISO_8859_1_create_env(void); +extern void german_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'U' }; +static symbol s_0_2[1] = { 'Y' }; +static symbol s_0_3[1] = { 0xE4 }; +static symbol s_0_4[1] = { 0xF6 }; +static symbol s_0_5[1] = { 0xFC }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 2, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0}, +/* 4 */ { 1, s_0_4, 0, 4, 0}, +/* 5 */ { 1, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[1] = { 'e' }; +static symbol s_1_1[2] = { 'e', 'm' }; +static symbol s_1_2[2] = { 'e', 'n' }; +static symbol s_1_3[3] = { 'e', 'r', 'n' }; +static symbol s_1_4[2] = { 'e', 'r' }; +static symbol s_1_5[1] = { 's' }; +static symbol s_1_6[2] = { 'e', 's' }; + +static struct among a_1[7] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 3, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 1, s_1_5, -1, 2, 0}, +/* 6 */ { 2, s_1_6, 5, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'n' }; +static symbol s_2_1[2] = { 'e', 'r' }; +static symbol s_2_2[2] = { 's', 't' }; +static symbol s_2_3[3] = { 'e', 's', 't' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 2, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0} +}; + +static symbol s_3_0[2] = { 'i', 'g' }; +static symbol s_3_1[4] = { 'l', 'i', 'c', 'h' }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'u', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'c', 'h' }; +static symbol s_4_4[4] = { 'i', 's', 'c', 'h' }; +static symbol s_4_5[2] = { 'i', 'k' }; +static symbol s_4_6[4] = { 'h', 'e', 'i', 't' }; +static symbol s_4_7[4] = { 'k', 'e', 'i', 't' }; + +static struct among a_4[8] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0}, +/* 7 */ { 4, s_4_7, -1, 4, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; + +static unsigned char g_s_ending[] = { 117, 30, 5 }; + +static unsigned char g_st_ending[] = { 117, 30, 4 }; + +static symbol s_0[] = { 0xDF }; +static symbol s_1[] = { 's', 's' }; +static symbol s_2[] = { 'u' }; +static symbol s_3[] = { 'U' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'u' }; +static symbol s_8[] = { 'a' }; +static symbol s_9[] = { 'o' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'g' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'e', 'r' }; +static symbol s_15[] = { 'e', 'n' }; + +static int r_prelude(struct SN_env * z) { + { int c_test = z->c; /* test, line 30 */ + while(1) { /* repeat, line 30 */ + int c = z->c; + { int c = z->c; /* or, line 33 */ + z->bra = z->c; /* [, line 32 */ + if (!(eq_s(z, 1, s_0))) goto lab2; + z->ket = z->c; /* ], line 32 */ + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 32 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 33 */ + } + lab1: + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 36 */ + int c = z->c; + while(1) { /* goto, line 36 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab4; + z->bra = z->c; /* [, line 37 */ + { int c = z->c; /* or, line 37 */ + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 37 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 37 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab4; + z->ket = z->c; /* ], line 38 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 38 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = c; + break; + lab4: + z->c = c; + if (z->c >= z->l) goto lab3; + z->c++; /* goto, line 36 */ + } + continue; + lab3: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c_test = z->c; /* test, line 47 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 47 */ + } + z->I[2] = z->c; /* setmark x, line 47 */ + z->c = c_test; + } + while(1) { /* gopast, line 49 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab0; + break; + lab0: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 49 */ + } + while(1) { /* gopast, line 49 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 49 */ + } + z->I[0] = z->c; /* setmark p1, line 49 */ + /* try, line 50 */ + if (!(z->I[0] < z->I[2])) goto lab2; + z->I[0] = z->I[2]; +lab2: + while(1) { /* gopast, line 51 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 51 */ + } + while(1) { /* gopast, line 51 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab4; + break; + lab4: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 51 */ + } + z->I[1] = z->c; /* setmark p2, line 51 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 55 */ + int c = z->c; + z->bra = z->c; /* [, line 57 */ + among_var = find_among(z, a_0, 6); /* substring, line 57 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 57 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 63 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 74 */ + z->ket = z->c; /* [, line 75 */ + among_var = find_among_b(z, a_1, 7); /* substring, line 75 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 75 */ + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 75 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 77 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 98, 116))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 80 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 84 */ + z->ket = z->c; /* [, line 85 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 85 */ + if (!(among_var)) goto lab1; + z->bra = z->c; /* ], line 85 */ + { int ret = r_R1(z); + if (ret == 0) goto lab1; /* call R1, line 85 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab1; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_st_ending, 98, 116))) goto lab1; + { int c = z->c - 3; + if (z->lb > c || c > z->l) goto lab1; + z->c = c; /* hop, line 90 */ + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + break; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 94 */ + z->ket = z->c; /* [, line 95 */ + among_var = find_among_b(z, a_4, 8); /* substring, line 95 */ + if (!(among_var)) goto lab2; + z->bra = z->c; /* ], line 95 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 95 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab2; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 98 */ + z->ket = z->c; /* [, line 98 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 98 */ + { int m = z->l - z->c; (void) m; /* not, line 98 */ + if (!(eq_s_b(z, 1, s_12))) goto lab4; + { z->c = z->l - m; goto lab3; } + lab4: + z->c = z->l - m; + } + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* not, line 101 */ + if (!(eq_s_b(z, 1, s_13))) goto lab5; + goto lab2; + lab5: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 105 */ + z->ket = z->c; /* [, line 106 */ + { int m = z->l - z->c; (void) m; /* or, line 106 */ + if (!(eq_s_b(z, 2, s_14))) goto lab8; + goto lab7; + lab8: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab6; } + } + lab7: + z->bra = z->c; /* ], line 106 */ + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R1, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab6: + ; + } + break; + case 4: + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab9; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab9; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab9; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + break; + } + lab9: + ; + } + break; + } + lab2: + z->c = z->l - m; + } + return 1; +} + +extern int german_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 125 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 125 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 126 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 126 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 127 */ + + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 128 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 129 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 129 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * german_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void german_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * german_ISO_8859_1_create_env(void); +extern void german_ISO_8859_1_close_env(struct SN_env * z); + +extern int german_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1091 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int italian_ISO_8859_1_stem(struct SN_env * z); +static int r_vowel_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * italian_ISO_8859_1_create_env(void); +extern void italian_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 'q', 'u' }; +static symbol s_0_2[1] = { 0xE1 }; +static symbol s_0_3[1] = { 0xE9 }; +static symbol s_0_4[1] = { 0xED }; +static symbol s_0_5[1] = { 0xF3 }; +static symbol s_0_6[1] = { 0xFA }; + +static struct among a_0[7] = +{ +/* 0 */ { 0, 0, -1, 7, 0}, +/* 1 */ { 2, s_0_1, 0, 6, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 2, 0}, +/* 4 */ { 1, s_0_4, 0, 3, 0}, +/* 5 */ { 1, s_0_5, 0, 4, 0}, +/* 6 */ { 1, s_0_6, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'U' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 1, 0}, +/* 2 */ { 1, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'l', 'a' }; +static symbol s_2_1[4] = { 'c', 'e', 'l', 'a' }; +static symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' }; +static symbol s_2_3[4] = { 'm', 'e', 'l', 'a' }; +static symbol s_2_4[4] = { 't', 'e', 'l', 'a' }; +static symbol s_2_5[4] = { 'v', 'e', 'l', 'a' }; +static symbol s_2_6[2] = { 'l', 'e' }; +static symbol s_2_7[4] = { 'c', 'e', 'l', 'e' }; +static symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' }; +static symbol s_2_9[4] = { 'm', 'e', 'l', 'e' }; +static symbol s_2_10[4] = { 't', 'e', 'l', 'e' }; +static symbol s_2_11[4] = { 'v', 'e', 'l', 'e' }; +static symbol s_2_12[2] = { 'n', 'e' }; +static symbol s_2_13[4] = { 'c', 'e', 'n', 'e' }; +static symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' }; +static symbol s_2_15[4] = { 'm', 'e', 'n', 'e' }; +static symbol s_2_16[4] = { 's', 'e', 'n', 'e' }; +static symbol s_2_17[4] = { 't', 'e', 'n', 'e' }; +static symbol s_2_18[4] = { 'v', 'e', 'n', 'e' }; +static symbol s_2_19[2] = { 'c', 'i' }; +static symbol s_2_20[2] = { 'l', 'i' }; +static symbol s_2_21[4] = { 'c', 'e', 'l', 'i' }; +static symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' }; +static symbol s_2_23[4] = { 'm', 'e', 'l', 'i' }; +static symbol s_2_24[4] = { 't', 'e', 'l', 'i' }; +static symbol s_2_25[4] = { 'v', 'e', 'l', 'i' }; +static symbol s_2_26[3] = { 'g', 'l', 'i' }; +static symbol s_2_27[2] = { 'm', 'i' }; +static symbol s_2_28[2] = { 's', 'i' }; +static symbol s_2_29[2] = { 't', 'i' }; +static symbol s_2_30[2] = { 'v', 'i' }; +static symbol s_2_31[2] = { 'l', 'o' }; +static symbol s_2_32[4] = { 'c', 'e', 'l', 'o' }; +static symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' }; +static symbol s_2_34[4] = { 'm', 'e', 'l', 'o' }; +static symbol s_2_35[4] = { 't', 'e', 'l', 'o' }; +static symbol s_2_36[4] = { 'v', 'e', 'l', 'o' }; + +static struct among a_2[37] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 4, s_2_1, 0, -1, 0}, +/* 2 */ { 6, s_2_2, 0, -1, 0}, +/* 3 */ { 4, s_2_3, 0, -1, 0}, +/* 4 */ { 4, s_2_4, 0, -1, 0}, +/* 5 */ { 4, s_2_5, 0, -1, 0}, +/* 6 */ { 2, s_2_6, -1, -1, 0}, +/* 7 */ { 4, s_2_7, 6, -1, 0}, +/* 8 */ { 6, s_2_8, 6, -1, 0}, +/* 9 */ { 4, s_2_9, 6, -1, 0}, +/* 10 */ { 4, s_2_10, 6, -1, 0}, +/* 11 */ { 4, s_2_11, 6, -1, 0}, +/* 12 */ { 2, s_2_12, -1, -1, 0}, +/* 13 */ { 4, s_2_13, 12, -1, 0}, +/* 14 */ { 6, s_2_14, 12, -1, 0}, +/* 15 */ { 4, s_2_15, 12, -1, 0}, +/* 16 */ { 4, s_2_16, 12, -1, 0}, +/* 17 */ { 4, s_2_17, 12, -1, 0}, +/* 18 */ { 4, s_2_18, 12, -1, 0}, +/* 19 */ { 2, s_2_19, -1, -1, 0}, +/* 20 */ { 2, s_2_20, -1, -1, 0}, +/* 21 */ { 4, s_2_21, 20, -1, 0}, +/* 22 */ { 6, s_2_22, 20, -1, 0}, +/* 23 */ { 4, s_2_23, 20, -1, 0}, +/* 24 */ { 4, s_2_24, 20, -1, 0}, +/* 25 */ { 4, s_2_25, 20, -1, 0}, +/* 26 */ { 3, s_2_26, 20, -1, 0}, +/* 27 */ { 2, s_2_27, -1, -1, 0}, +/* 28 */ { 2, s_2_28, -1, -1, 0}, +/* 29 */ { 2, s_2_29, -1, -1, 0}, +/* 30 */ { 2, s_2_30, -1, -1, 0}, +/* 31 */ { 2, s_2_31, -1, -1, 0}, +/* 32 */ { 4, s_2_32, 31, -1, 0}, +/* 33 */ { 6, s_2_33, 31, -1, 0}, +/* 34 */ { 4, s_2_34, 31, -1, 0}, +/* 35 */ { 4, s_2_35, 31, -1, 0}, +/* 36 */ { 4, s_2_36, 31, -1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_3_1[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_3_2[2] = { 'a', 'r' }; +static symbol s_3_3[2] = { 'e', 'r' }; +static symbol s_3_4[2] = { 'i', 'r' }; + +static struct among a_3[5] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 2, s_3_3, -1, 2, 0}, +/* 4 */ { 2, s_3_4, -1, 2, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'o', 's' }; +static symbol s_4_3[2] = { 'i', 'v' }; + +static struct among a_4[4] = +{ +/* 0 */ { 2, s_4_0, -1, -1, 0}, +/* 1 */ { 4, s_4_1, -1, -1, 0}, +/* 2 */ { 2, s_4_2, -1, -1, 0}, +/* 3 */ { 2, s_4_3, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' }; +static symbol s_6_2[3] = { 'o', 's', 'a' }; +static symbol s_6_3[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_4[3] = { 'i', 'v', 'a' }; +static symbol s_6_5[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_6[4] = { 'e', 'n', 'z', 'a' }; +static symbol s_6_7[3] = { 'i', 'c', 'e' }; +static symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_6_9[4] = { 'i', 'c', 'h', 'e' }; +static symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' }; +static symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' }; +static symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' }; +static symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' }; +static symbol s_6_17[3] = { 'o', 's', 'e' }; +static symbol s_6_18[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_21[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_22[3] = { 'i', 'v', 'e' }; +static symbol s_6_23[4] = { 'a', 'n', 'z', 'e' }; +static symbol s_6_24[4] = { 'e', 'n', 'z', 'e' }; +static symbol s_6_25[3] = { 'i', 'c', 'i' }; +static symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' }; +static symbol s_6_27[4] = { 'i', 'c', 'h', 'i' }; +static symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' }; +static symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' }; +static symbol s_6_30[4] = { 'i', 's', 'm', 'i' }; +static symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' }; +static symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' }; +static symbol s_6_35[3] = { 'o', 's', 'i' }; +static symbol s_6_36[4] = { 'a', 'n', 't', 'i' }; +static symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_39[4] = { 'i', 's', 't', 'i' }; +static symbol s_6_40[3] = { 'i', 'v', 'i' }; +static symbol s_6_41[3] = { 'i', 'c', 'o' }; +static symbol s_6_42[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_43[3] = { 'o', 's', 'o' }; +static symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_46[3] = { 'i', 'v', 'o' }; +static symbol s_6_47[3] = { 'i', 't', 0xE0 }; +static symbol s_6_48[4] = { 'i', 's', 't', 0xE0 }; +static symbol s_6_49[4] = { 'i', 's', 't', 0xE8 }; +static symbol s_6_50[4] = { 'i', 's', 't', 0xEC }; + +static struct among a_6[51] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 3, 0}, +/* 2 */ { 3, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 9, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 4, s_6_6, -1, 5, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, 7, 1, 0}, +/* 9 */ { 4, s_6_9, -1, 1, 0}, +/* 10 */ { 5, s_6_10, -1, 3, 0}, +/* 11 */ { 5, s_6_11, -1, 1, 0}, +/* 12 */ { 5, s_6_12, -1, 1, 0}, +/* 13 */ { 6, s_6_13, -1, 4, 0}, +/* 14 */ { 6, s_6_14, -1, 2, 0}, +/* 15 */ { 6, s_6_15, -1, 4, 0}, +/* 16 */ { 5, s_6_16, -1, 2, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 5, s_6_19, -1, 1, 0}, +/* 20 */ { 6, s_6_20, 19, 7, 0}, +/* 21 */ { 4, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 1, 0}, +/* 24 */ { 4, s_6_24, -1, 5, 0}, +/* 25 */ { 3, s_6_25, -1, 1, 0}, +/* 26 */ { 6, s_6_26, 25, 1, 0}, +/* 27 */ { 4, s_6_27, -1, 1, 0}, +/* 28 */ { 5, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 1, 0}, +/* 31 */ { 6, s_6_31, -1, 4, 0}, +/* 32 */ { 6, s_6_32, -1, 2, 0}, +/* 33 */ { 6, s_6_33, -1, 4, 0}, +/* 34 */ { 5, s_6_34, -1, 2, 0}, +/* 35 */ { 3, s_6_35, -1, 1, 0}, +/* 36 */ { 4, s_6_36, -1, 1, 0}, +/* 37 */ { 6, s_6_37, -1, 6, 0}, +/* 38 */ { 6, s_6_38, -1, 6, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 3, s_6_40, -1, 9, 0}, +/* 41 */ { 3, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 3, s_6_43, -1, 1, 0}, +/* 44 */ { 6, s_6_44, -1, 6, 0}, +/* 45 */ { 6, s_6_45, -1, 6, 0}, +/* 46 */ { 3, s_6_46, -1, 9, 0}, +/* 47 */ { 3, s_6_47, -1, 8, 0}, +/* 48 */ { 4, s_6_48, -1, 1, 0}, +/* 49 */ { 4, s_6_49, -1, 1, 0}, +/* 50 */ { 4, s_6_50, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 'i', 's', 'c', 'a' }; +static symbol s_7_1[4] = { 'e', 'n', 'd', 'a' }; +static symbol s_7_2[3] = { 'a', 't', 'a' }; +static symbol s_7_3[3] = { 'i', 't', 'a' }; +static symbol s_7_4[3] = { 'u', 't', 'a' }; +static symbol s_7_5[3] = { 'a', 'v', 'a' }; +static symbol s_7_6[3] = { 'e', 'v', 'a' }; +static symbol s_7_7[3] = { 'i', 'v', 'a' }; +static symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_10[4] = { 'i', 's', 'c', 'e' }; +static symbol s_7_11[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_7_12[3] = { 'a', 'r', 'e' }; +static symbol s_7_13[3] = { 'e', 'r', 'e' }; +static symbol s_7_14[3] = { 'i', 'r', 'e' }; +static symbol s_7_15[4] = { 'a', 's', 's', 'e' }; +static symbol s_7_16[3] = { 'a', 't', 'e' }; +static symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' }; +static symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' }; +static symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' }; +static symbol s_7_20[3] = { 'e', 't', 'e' }; +static symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' }; +static symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' }; +static symbol s_7_23[3] = { 'i', 't', 'e' }; +static symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_26[3] = { 'u', 't', 'e' }; +static symbol s_7_27[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_7_28[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_7_29[4] = { 'i', 's', 'c', 'i' }; +static symbol s_7_30[4] = { 'e', 'n', 'd', 'i' }; +static symbol s_7_31[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_7_32[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_7_33[4] = { 'a', 's', 's', 'i' }; +static symbol s_7_34[3] = { 'a', 't', 'i' }; +static symbol s_7_35[3] = { 'i', 't', 'i' }; +static symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_38[3] = { 'u', 't', 'i' }; +static symbol s_7_39[3] = { 'a', 'v', 'i' }; +static symbol s_7_40[3] = { 'e', 'v', 'i' }; +static symbol s_7_41[3] = { 'i', 'v', 'i' }; +static symbol s_7_42[4] = { 'i', 's', 'c', 'o' }; +static symbol s_7_43[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_7_44[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' }; +static symbol s_7_46[4] = { 'i', 'a', 'm', 'o' }; +static symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' }; +static symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' }; +static symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' }; +static symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' }; +static symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' }; +static symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' }; +static symbol s_7_53[4] = { 'a', 'm', 'm', 'o' }; +static symbol s_7_54[4] = { 'e', 'm', 'm', 'o' }; +static symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_57[4] = { 'i', 'm', 'm', 'o' }; +static symbol s_7_58[3] = { 'a', 'n', 'o' }; +static symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' }; +static symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' }; +static symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' }; +static symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' }; +static symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_65[3] = { 'o', 'n', 'o' }; +static symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' }; +static symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' }; +static symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' }; +static symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' }; +static symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_75[3] = { 'a', 't', 'o' }; +static symbol s_7_76[3] = { 'i', 't', 'o' }; +static symbol s_7_77[3] = { 'u', 't', 'o' }; +static symbol s_7_78[3] = { 'a', 'v', 'o' }; +static symbol s_7_79[3] = { 'e', 'v', 'o' }; +static symbol s_7_80[3] = { 'i', 'v', 'o' }; +static symbol s_7_81[2] = { 'a', 'r' }; +static symbol s_7_82[2] = { 'i', 'r' }; +static symbol s_7_83[3] = { 'e', 'r', 0xE0 }; +static symbol s_7_84[3] = { 'i', 'r', 0xE0 }; +static symbol s_7_85[3] = { 'e', 'r', 0xF2 }; +static symbol s_7_86[3] = { 'i', 'r', 0xF2 }; + +static struct among a_7[87] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 3, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 6, s_7_8, -1, 1, 0}, +/* 9 */ { 6, s_7_9, -1, 1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, -1, 1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 4, s_7_15, -1, 1, 0}, +/* 16 */ { 3, s_7_16, -1, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0}, +/* 18 */ { 5, s_7_18, 16, 1, 0}, +/* 19 */ { 5, s_7_19, 16, 1, 0}, +/* 20 */ { 3, s_7_20, -1, 1, 0}, +/* 21 */ { 5, s_7_21, 20, 1, 0}, +/* 22 */ { 5, s_7_22, 20, 1, 0}, +/* 23 */ { 3, s_7_23, -1, 1, 0}, +/* 24 */ { 6, s_7_24, -1, 1, 0}, +/* 25 */ { 6, s_7_25, -1, 1, 0}, +/* 26 */ { 3, s_7_26, -1, 1, 0}, +/* 27 */ { 4, s_7_27, -1, 1, 0}, +/* 28 */ { 4, s_7_28, -1, 1, 0}, +/* 29 */ { 4, s_7_29, -1, 1, 0}, +/* 30 */ { 4, s_7_30, -1, 1, 0}, +/* 31 */ { 4, s_7_31, -1, 1, 0}, +/* 32 */ { 4, s_7_32, -1, 1, 0}, +/* 33 */ { 4, s_7_33, -1, 1, 0}, +/* 34 */ { 3, s_7_34, -1, 1, 0}, +/* 35 */ { 3, s_7_35, -1, 1, 0}, +/* 36 */ { 6, s_7_36, -1, 1, 0}, +/* 37 */ { 6, s_7_37, -1, 1, 0}, +/* 38 */ { 3, s_7_38, -1, 1, 0}, +/* 39 */ { 3, s_7_39, -1, 1, 0}, +/* 40 */ { 3, s_7_40, -1, 1, 0}, +/* 41 */ { 3, s_7_41, -1, 1, 0}, +/* 42 */ { 4, s_7_42, -1, 1, 0}, +/* 43 */ { 4, s_7_43, -1, 1, 0}, +/* 44 */ { 4, s_7_44, -1, 1, 0}, +/* 45 */ { 4, s_7_45, -1, 1, 0}, +/* 46 */ { 4, s_7_46, -1, 1, 0}, +/* 47 */ { 5, s_7_47, -1, 1, 0}, +/* 48 */ { 5, s_7_48, -1, 1, 0}, +/* 49 */ { 5, s_7_49, -1, 1, 0}, +/* 50 */ { 5, s_7_50, -1, 1, 0}, +/* 51 */ { 5, s_7_51, -1, 1, 0}, +/* 52 */ { 6, s_7_52, -1, 1, 0}, +/* 53 */ { 4, s_7_53, -1, 1, 0}, +/* 54 */ { 4, s_7_54, -1, 1, 0}, +/* 55 */ { 6, s_7_55, 54, 1, 0}, +/* 56 */ { 6, s_7_56, 54, 1, 0}, +/* 57 */ { 4, s_7_57, -1, 1, 0}, +/* 58 */ { 3, s_7_58, -1, 1, 0}, +/* 59 */ { 6, s_7_59, 58, 1, 0}, +/* 60 */ { 5, s_7_60, 58, 1, 0}, +/* 61 */ { 5, s_7_61, 58, 1, 0}, +/* 62 */ { 5, s_7_62, 58, 1, 0}, +/* 63 */ { 6, s_7_63, -1, 1, 0}, +/* 64 */ { 6, s_7_64, -1, 1, 0}, +/* 65 */ { 3, s_7_65, -1, 1, 0}, +/* 66 */ { 6, s_7_66, 65, 1, 0}, +/* 67 */ { 5, s_7_67, 65, 1, 0}, +/* 68 */ { 5, s_7_68, 65, 1, 0}, +/* 69 */ { 5, s_7_69, 65, 1, 0}, +/* 70 */ { 8, s_7_70, -1, 1, 0}, +/* 71 */ { 8, s_7_71, -1, 1, 0}, +/* 72 */ { 6, s_7_72, -1, 1, 0}, +/* 73 */ { 6, s_7_73, -1, 1, 0}, +/* 74 */ { 6, s_7_74, -1, 1, 0}, +/* 75 */ { 3, s_7_75, -1, 1, 0}, +/* 76 */ { 3, s_7_76, -1, 1, 0}, +/* 77 */ { 3, s_7_77, -1, 1, 0}, +/* 78 */ { 3, s_7_78, -1, 1, 0}, +/* 79 */ { 3, s_7_79, -1, 1, 0}, +/* 80 */ { 3, s_7_80, -1, 1, 0}, +/* 81 */ { 2, s_7_81, -1, 1, 0}, +/* 82 */ { 2, s_7_82, -1, 1, 0}, +/* 83 */ { 3, s_7_83, -1, 1, 0}, +/* 84 */ { 3, s_7_84, -1, 1, 0}, +/* 85 */ { 3, s_7_85, -1, 1, 0}, +/* 86 */ { 3, s_7_86, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; + +static unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; + +static unsigned char g_CG[] = { 17 }; + +static symbol s_0[] = { 0xE0 }; +static symbol s_1[] = { 0xE8 }; +static symbol s_2[] = { 0xEC }; +static symbol s_3[] = { 0xF2 }; +static symbol s_4[] = { 0xF9 }; +static symbol s_5[] = { 'q', 'U' }; +static symbol s_6[] = { 'u' }; +static symbol s_7[] = { 'U' }; +static symbol s_8[] = { 'i' }; +static symbol s_9[] = { 'I' }; +static symbol s_10[] = { 'i' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'i', 'c' }; +static symbol s_14[] = { 'l', 'o', 'g' }; +static symbol s_15[] = { 'u' }; +static symbol s_16[] = { 'e', 'n', 't', 'e' }; +static symbol s_17[] = { 'a', 't' }; +static symbol s_18[] = { 'a', 't' }; +static symbol s_19[] = { 'i', 'c' }; +static symbol s_20[] = { 'i' }; +static symbol s_21[] = { 'h' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 35 */ + while(1) { /* repeat, line 35 */ + int c = z->c; + z->bra = z->c; /* [, line 36 */ + among_var = find_among(z, a_0, 7); /* substring, line 36 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 36 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 37 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 40 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 41 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + break; + case 7: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 43 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 46 */ + int c = z->c; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + z->bra = z->c; /* [, line 47 */ + { int c = z->c; /* or, line 47 */ + if (!(eq_s(z, 1, s_6))) goto lab4; + z->ket = z->c; /* ], line 47 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 47 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab2; + z->ket = z->c; /* ], line 48 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 48 */ + if (ret < 0) return ret; + } + } + lab3: + z->c = c; + break; + lab2: + z->c = c; + if (z->c >= z->l) goto lab1; + z->c++; /* goto, line 46 */ + } + continue; + lab1: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 58 */ + { int c = z->c; /* or, line 60 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + { int c = z->c; /* or, line 59 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab4; + while(1) { /* gopast, line 59 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 59 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + while(1) { /* gopast, line 59 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 59 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 249))) goto lab0; + { int c = z->c; /* or, line 61 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab8; + while(1) { /* gopast, line 61 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 61 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 61 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 62 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 64 */ + while(1) { /* gopast, line 65 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 65 */ + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 65 */ + } + z->I[1] = z->c; /* setmark p1, line 65 */ + while(1) { /* gopast, line 66 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 66 */ + } + while(1) { /* gopast, line 66 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 66 */ + } + z->I[2] = z->c; /* setmark p2, line 66 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 70 */ + int c = z->c; + z->bra = z->c; /* [, line 72 */ + among_var = find_among(z, a_1, 3); /* substring, line 72 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 72 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 75 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */ + z->bra = z->c; /* ], line 87 */ + among_var = find_among_b(z, a_3, 5); /* among, line 97 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 97 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 104 */ + among_var = find_among_b(z, a_6, 51); /* substring, line 104 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 104 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 114 */ + z->ket = z->c; /* [, line 114 */ + if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 114 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 114 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 117 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 121 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 121 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 4); /* substring, line 127 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 127 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 128 */ + if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 128 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 128 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 128 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 137 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 137 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 142 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 143 */ + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 148 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 148 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_7, 87); /* substring, line 149 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_vowel_suffix(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* try, line 171 */ + z->ket = z->c; /* [, line 172 */ + if (!(in_grouping_b(z, g_AEIO, 97, 242))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 172 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 172 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 172 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 173 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 173 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 173 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 173 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m = z->l - z->c; (void) m; /* try, line 175 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 176 */ + if (!(in_grouping_b(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab1: + ; + } + return 1; +} + +extern int italian_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 182 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 182 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 183 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 183 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 184 */ + + { int m = z->l - z->c; (void) m; /* do, line 185 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab2; /* call attached_pronoun, line 185 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 186 */ + { int m = z->l - z->c; (void) m; /* or, line 186 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab5; /* call standard_suffix, line 186 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab3; /* call verb_suffix, line 186 */ + if (ret < 0) return ret; + } + } + lab4: + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 187 */ + { int ret = r_vowel_suffix(z); + if (ret == 0) goto lab6; /* call vowel_suffix, line 187 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 189 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 189 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * italian_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void italian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * italian_ISO_8859_1_create_env(void); +extern void italian_ISO_8859_1_close_env(struct SN_env * z); + +extern int italian_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,296 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void); +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[1] = { 'e' }; +static symbol s_0_2[3] = { 'e', 'd', 'e' }; +static symbol s_0_3[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_4[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_5[3] = { 'a', 'n', 'e' }; +static symbol s_0_6[3] = { 'e', 'n', 'e' }; +static symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 't', 'e' }; +static symbol s_0_9[2] = { 'e', 'n' }; +static symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_11[2] = { 'a', 'r' }; +static symbol s_0_12[2] = { 'e', 'r' }; +static symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_14[1] = { 's' }; +static symbol s_0_15[2] = { 'a', 's' }; +static symbol s_0_16[2] = { 'e', 's' }; +static symbol s_0_17[4] = { 'e', 'd', 'e', 's' }; +static symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_19[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' }; +static symbol s_0_21[3] = { 'e', 'n', 's' }; +static symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_23[3] = { 'e', 'r', 's' }; +static symbol s_0_24[3] = { 'e', 't', 's' }; +static symbol s_0_25[2] = { 'e', 't' }; +static symbol s_0_26[3] = { 'h', 'e', 't' }; +static symbol s_0_27[3] = { 'e', 'r', 't' }; +static symbol s_0_28[3] = { 'a', 's', 't' }; + +static struct among a_0[29] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 1, s_0_1, -1, 1, 0}, +/* 2 */ { 3, s_0_2, 1, 1, 0}, +/* 3 */ { 4, s_0_3, 1, 1, 0}, +/* 4 */ { 4, s_0_4, 1, 1, 0}, +/* 5 */ { 3, s_0_5, 1, 1, 0}, +/* 6 */ { 3, s_0_6, 1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 1, 3, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0}, +/* 10 */ { 5, s_0_10, 9, 1, 0}, +/* 11 */ { 2, s_0_11, -1, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 1, s_0_14, -1, 2, 0}, +/* 15 */ { 2, s_0_15, 14, 1, 0}, +/* 16 */ { 2, s_0_16, 14, 1, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 5, s_0_18, 16, 1, 0}, +/* 19 */ { 4, s_0_19, 16, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 3, s_0_21, 14, 1, 0}, +/* 22 */ { 6, s_0_22, 21, 1, 0}, +/* 23 */ { 3, s_0_23, 14, 1, 0}, +/* 24 */ { 3, s_0_24, 14, 1, 0}, +/* 25 */ { 2, s_0_25, -1, 1, 0}, +/* 26 */ { 3, s_0_26, 25, 1, 0}, +/* 27 */ { 3, s_0_27, -1, 3, 0}, +/* 28 */ { 3, s_0_28, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 't' }; +static symbol s_1_1[2] = { 'v', 't' }; + +static struct among a_1[2] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'e', 'g' }; +static symbol s_2_1[4] = { 'e', 'l', 'e', 'g' }; +static symbol s_2_2[2] = { 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'i', 'g' }; +static symbol s_2_4[3] = { 'l', 'i', 'g' }; +static symbol s_2_5[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_6[3] = { 'e', 'l', 's' }; +static symbol s_2_7[3] = { 'l', 'o', 'v' }; +static symbol s_2_8[4] = { 'e', 'l', 'o', 'v' }; +static symbol s_2_9[4] = { 's', 'l', 'o', 'v' }; +static symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' }; + +static struct among a_2[11] = +{ +/* 0 */ { 3, s_2_0, -1, 1, 0}, +/* 1 */ { 4, s_2_1, 0, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0}, +/* 4 */ { 3, s_2_4, 2, 1, 0}, +/* 5 */ { 4, s_2_5, 4, 1, 0}, +/* 6 */ { 3, s_2_6, -1, 1, 0}, +/* 7 */ { 3, s_2_7, -1, 1, 0}, +/* 8 */ { 4, s_2_8, 7, 1, 0}, +/* 9 */ { 4, s_2_9, 7, 1, 0}, +/* 10 */ { 7, s_2_10, 9, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 119, 125, 149, 1 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'e', 'r' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 30 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 30 */ + } + z->I[1] = z->c; /* setmark x, line 30 */ + z->c = c_test; + } + while(1) { /* goto, line 31 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 31 */ + } + while(1) { /* gopast, line 31 */ + if (!(out_grouping(z, g_v, 97, 248))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 31 */ + } + z->I[0] = z->c; /* setmark p1, line 31 */ + /* try, line 32 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 38 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 38 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 38 */ + among_var = find_among_b(z, a_0, 29); /* substring, line 38 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 38 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 46 */ + if (!(in_grouping_b(z, g_s_ending, 98, 122))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_0))) return 0; + if (!(out_grouping_b(z, g_v, 97, 248))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 48 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 53 */ + { int m3; /* setlimit, line 54 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 54 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 54 */ + if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */ + z->bra = z->c; /* ], line 54 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + if (z->c <= z->lb) return 0; + z->c--; /* next, line 59 */ + z->bra = z->c; /* ], line 59 */ + { int ret; + ret = slice_del(z); /* delete, line 59 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 63 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 63 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 63 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 63 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 63 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 67 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 74 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 74 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 75 */ + + { int m = z->l - z->c; (void) m; /* do, line 76 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 76 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 77 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 77 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 78 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 78 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void); +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z); + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,776 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int porter_ISO_8859_1_stem(struct SN_env * z); +static int r_Step_5b(struct SN_env * z); +static int r_Step_5a(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); + +extern struct SN_env * porter_ISO_8859_1_create_env(void); +extern void porter_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 's' }; +static symbol s_0_1[3] = { 'i', 'e', 's' }; +static symbol s_0_2[4] = { 's', 's', 'e', 's' }; +static symbol s_0_3[2] = { 's', 's' }; + +static struct among a_0[4] = +{ +/* 0 */ { 1, s_0_0, -1, 3, 0}, +/* 1 */ { 3, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, -1, 0} +}; + +static symbol s_1_1[2] = { 'b', 'b' }; +static symbol s_1_2[2] = { 'd', 'd' }; +static symbol s_1_3[2] = { 'f', 'f' }; +static symbol s_1_4[2] = { 'g', 'g' }; +static symbol s_1_5[2] = { 'b', 'l' }; +static symbol s_1_6[2] = { 'm', 'm' }; +static symbol s_1_7[2] = { 'n', 'n' }; +static symbol s_1_8[2] = { 'p', 'p' }; +static symbol s_1_9[2] = { 'r', 'r' }; +static symbol s_1_10[2] = { 'a', 't' }; +static symbol s_1_11[2] = { 't', 't' }; +static symbol s_1_12[2] = { 'i', 'z' }; + +static struct among a_1[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 2, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0}, +/* 3 */ { 2, s_1_3, 0, 2, 0}, +/* 4 */ { 2, s_1_4, 0, 2, 0}, +/* 5 */ { 2, s_1_5, 0, 1, 0}, +/* 6 */ { 2, s_1_6, 0, 2, 0}, +/* 7 */ { 2, s_1_7, 0, 2, 0}, +/* 8 */ { 2, s_1_8, 0, 2, 0}, +/* 9 */ { 2, s_1_9, 0, 2, 0}, +/* 10 */ { 2, s_1_10, 0, 1, 0}, +/* 11 */ { 2, s_1_11, 0, 2, 0}, +/* 12 */ { 2, s_1_12, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'd' }; +static symbol s_2_1[3] = { 'e', 'e', 'd' }; +static symbol s_2_2[3] = { 'i', 'n', 'g' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 2, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_3_3[3] = { 'e', 'l', 'i' }; +static symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; +static symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_3[20] = +{ +/* 0 */ { 4, s_3_0, -1, 3, 0}, +/* 1 */ { 4, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 4, 0}, +/* 3 */ { 3, s_3_3, -1, 6, 0}, +/* 4 */ { 4, s_3_4, -1, 9, 0}, +/* 5 */ { 5, s_3_5, -1, 12, 0}, +/* 6 */ { 5, s_3_6, -1, 5, 0}, +/* 7 */ { 5, s_3_7, -1, 10, 0}, +/* 8 */ { 6, s_3_8, -1, 14, 0}, +/* 9 */ { 5, s_3_9, -1, 13, 0}, +/* 10 */ { 6, s_3_10, -1, 1, 0}, +/* 11 */ { 7, s_3_11, 10, 8, 0}, +/* 12 */ { 5, s_3_12, -1, 10, 0}, +/* 13 */ { 5, s_3_13, -1, 8, 0}, +/* 14 */ { 7, s_3_14, 13, 7, 0}, +/* 15 */ { 4, s_3_15, -1, 7, 0}, +/* 16 */ { 4, s_3_16, -1, 8, 0}, +/* 17 */ { 7, s_3_17, -1, 13, 0}, +/* 18 */ { 7, s_3_18, -1, 11, 0}, +/* 19 */ { 7, s_3_19, -1, 12, 0} +}; + +static symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_4_5[3] = { 'f', 'u', 'l' }; +static symbol s_4_6[4] = { 'n', 'e', 's', 's' }; + +static struct among a_4[7] = +{ +/* 0 */ { 5, s_4_0, -1, 2, 0}, +/* 1 */ { 5, s_4_1, -1, 3, 0}, +/* 2 */ { 5, s_4_2, -1, 1, 0}, +/* 3 */ { 5, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 3, s_4_5, -1, 3, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_5_5[3] = { 'a', 't', 'e' }; +static symbol s_5_6[3] = { 'i', 'v', 'e' }; +static symbol s_5_7[3] = { 'i', 'z', 'e' }; +static symbol s_5_8[3] = { 'i', 't', 'i' }; +static symbol s_5_9[2] = { 'a', 'l' }; +static symbol s_5_10[3] = { 'i', 's', 'm' }; +static symbol s_5_11[3] = { 'i', 'o', 'n' }; +static symbol s_5_12[2] = { 'e', 'r' }; +static symbol s_5_13[3] = { 'o', 'u', 's' }; +static symbol s_5_14[3] = { 'a', 'n', 't' }; +static symbol s_5_15[3] = { 'e', 'n', 't' }; +static symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_5_18[2] = { 'o', 'u' }; + +static struct among a_5[19] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 4, s_5_2, -1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 4, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 3, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 1, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 3, s_5_10, -1, 1, 0}, +/* 11 */ { 3, s_5_11, -1, 2, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 3, s_5_13, -1, 1, 0}, +/* 14 */ { 3, s_5_14, -1, 1, 0}, +/* 15 */ { 3, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 5, s_5_17, 16, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static symbol s_0[] = { 's', 's' }; +static symbol s_1[] = { 'i' }; +static symbol s_2[] = { 'e', 'e' }; +static symbol s_3[] = { 'e' }; +static symbol s_4[] = { 'e' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 't', 'i', 'o', 'n' }; +static symbol s_9[] = { 'e', 'n', 'c', 'e' }; +static symbol s_10[] = { 'a', 'n', 'c', 'e' }; +static symbol s_11[] = { 'a', 'b', 'l', 'e' }; +static symbol s_12[] = { 'e', 'n', 't' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'i', 'z', 'e' }; +static symbol s_15[] = { 'a', 't', 'e' }; +static symbol s_16[] = { 'a', 'l' }; +static symbol s_17[] = { 'a', 'l' }; +static symbol s_18[] = { 'f', 'u', 'l' }; +static symbol s_19[] = { 'o', 'u', 's' }; +static symbol s_20[] = { 'i', 'v', 'e' }; +static symbol s_21[] = { 'b', 'l', 'e' }; +static symbol s_22[] = { 'a', 'l' }; +static symbol s_23[] = { 'i', 'c' }; +static symbol s_24[] = { 's' }; +static symbol s_25[] = { 't' }; +static symbol s_26[] = { 'e' }; +static symbol s_27[] = { 'l' }; +static symbol s_28[] = { 'l' }; +static symbol s_29[] = { 'y' }; +static symbol s_30[] = { 'Y' }; +static symbol s_31[] = { 'y' }; +static symbol s_32[] = { 'Y' }; +static symbol s_33[] = { 'Y' }; +static symbol s_34[] = { 'y' }; + +static int r_shortv(struct SN_env * z) { + if (!(out_grouping_b(z, g_v_WXY, 89, 121))) return 0; + if (!(in_grouping_b(z, g_v, 97, 121))) return 0; + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 25 */ + among_var = find_among_b(z, a_0, 4); /* substring, line 25 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 25 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 29 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 34 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 34 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 34 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 35 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 38 */ + while(1) { /* gopast, line 38 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab0; + break; + lab0: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 38 */ + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 38 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 39 */ + among_var = find_among_b(z, a_1, 13); /* substring, line 39 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 44 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 44 */ + z->bra = z->c; /* ], line 44 */ + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 45 */ + { int m_test = z->l - z->c; /* test, line 45 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 45 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 52 */ + { int m = z->l - z->c; (void) m; /* or, line 52 */ + if (!(eq_s_b(z, 1, s_5))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_6))) return 0; + } +lab0: + z->bra = z->c; /* ], line 52 */ + while(1) { /* gopast, line 53 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab2; + break; + lab2: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 53 */ + } + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 54 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 58 */ + among_var = find_among_b(z, a_3, 20); /* substring, line 58 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 58 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 58 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_9); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_10); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_11); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 63 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 66 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 68 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 2, s_16); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 2, s_17); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_21); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 82 */ + among_var = find_among_b(z, a_4, 7); /* substring, line 82 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 82 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 82 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_22); /* <-, line 83 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_23); /* <-, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 92 */ + among_var = find_among_b(z, a_5, 19); /* substring, line 92 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 92 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 92 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 95 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 96 */ + if (!(eq_s_b(z, 1, s_24))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_25))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5a(struct SN_env * z) { + z->ket = z->c; /* [, line 101 */ + if (!(eq_s_b(z, 1, s_26))) return 0; + z->bra = z->c; /* ], line 101 */ + { int m = z->l - z->c; (void) m; /* or, line 102 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 102 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 102 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 102 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } +lab0: + { int ret; + ret = slice_del(z); /* delete, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_5b(struct SN_env * z) { + z->ket = z->c; /* [, line 107 */ + if (!(eq_s_b(z, 1, s_27))) return 0; + z->bra = z->c; /* ], line 107 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 108 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_28))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int porter_ISO_8859_1_stem(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 115 */ + { int c = z->c; /* do, line 116 */ + z->bra = z->c; /* [, line 116 */ + if (!(eq_s(z, 1, s_29))) goto lab0; + z->ket = z->c; /* ], line 116 */ + { int ret; + ret = slice_from_s(z, 1, s_30); /* <-, line 116 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 116 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 117 */ + while(1) { /* repeat, line 117 */ + int c = z->c; + while(1) { /* goto, line 117 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 121))) goto lab3; + z->bra = z->c; /* [, line 117 */ + if (!(eq_s(z, 1, s_31))) goto lab3; + z->ket = z->c; /* ], line 117 */ + z->c = c; + break; + lab3: + z->c = c; + if (z->c >= z->l) goto lab2; + z->c++; /* goto, line 117 */ + } + { int ret; + ret = slice_from_s(z, 1, s_32); /* <-, line 117 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 117 */ + continue; + lab2: + z->c = c; + break; + } + z->c = c; + } + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 121 */ + while(1) { /* gopast, line 122 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 122 */ + } + while(1) { /* gopast, line 122 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 122 */ + } + z->I[0] = z->c; /* setmark p1, line 122 */ + while(1) { /* gopast, line 123 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab7; + break; + lab7: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 123 */ + } + while(1) { /* gopast, line 123 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab8; + break; + lab8: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 123 */ + } + z->I[1] = z->c; /* setmark p2, line 123 */ + lab4: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 126 */ + + { int m = z->l - z->c; (void) m; /* do, line 127 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab9; /* call Step_1a, line 127 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab10; /* call Step_1b, line 128 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 129 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab11; /* call Step_1c, line 129 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 130 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab12; /* call Step_2, line 130 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 131 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab13; /* call Step_3, line 131 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 132 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab14; /* call Step_4, line 132 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 133 */ + { int ret = r_Step_5a(z); + if (ret == 0) goto lab15; /* call Step_5a, line 133 */ + if (ret < 0) return ret; + } + lab15: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 134 */ + { int ret = r_Step_5b(z); + if (ret == 0) goto lab16; /* call Step_5b, line 134 */ + if (ret < 0) return ret; + } + lab16: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 137 */ + if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */ + while(1) { /* repeat, line 137 */ + int c = z->c; + while(1) { /* goto, line 137 */ + int c = z->c; + z->bra = z->c; /* [, line 137 */ + if (!(eq_s(z, 1, s_33))) goto lab19; + z->ket = z->c; /* ], line 137 */ + z->c = c; + break; + lab19: + z->c = c; + if (z->c >= z->l) goto lab18; + z->c++; /* goto, line 137 */ + } + { int ret; + ret = slice_from_s(z, 1, s_34); /* <-, line 137 */ + if (ret < 0) return ret; + } + continue; + lab18: + z->c = c; + break; + } + lab17: + z->c = c; + } + return 1; +} + +extern struct SN_env * porter_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void porter_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * porter_ISO_8859_1_create_env(void); +extern void porter_ISO_8859_1_close_env(struct SN_env * z); + +extern int porter_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1035 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z); +static int r_residual_form(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void); +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE3 }; +static symbol s_0_2[1] = { 0xF5 }; + +static struct among a_0[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0} +}; + +static symbol s_1_1[2] = { 'a', '~' }; +static symbol s_1_2[2] = { 'o', '~' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[2] = { 'a', 'd' }; +static symbol s_2_2[2] = { 'o', 's' }; +static symbol s_2_3[2] = { 'i', 'v' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 't', 'e' }; +static symbol s_3_1[4] = { 'a', 'v', 'e', 'l' }; +static symbol s_3_2[4] = { 0xED, 'v', 'e', 'l' }; + +static struct among a_3[3] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'i', 'v' }; + +static struct among a_4[3] = +{ +/* 0 */ { 2, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[3] = { 'i', 'c', 'a' }; +static symbol s_5_1[5] = { 0xE2, 'n', 'c', 'i', 'a' }; +static symbol s_5_2[5] = { 0xEA, 'n', 'c', 'i', 'a' }; +static symbol s_5_3[3] = { 'i', 'r', 'a' }; +static symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_5_5[3] = { 'o', 's', 'a' }; +static symbol s_5_6[4] = { 'i', 's', 't', 'a' }; +static symbol s_5_7[3] = { 'i', 'v', 'a' }; +static symbol s_5_8[3] = { 'e', 'z', 'a' }; +static symbol s_5_9[5] = { 'l', 'o', 'g', 0xED, 'a' }; +static symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' }; +static symbol s_5_11[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_14[4] = { 0xE1, 'v', 'e', 'l' }; +static symbol s_5_15[4] = { 0xED, 'v', 'e', 'l' }; +static symbol s_5_16[5] = { 'u', 'c', 'i', 0xF3, 'n' }; +static symbol s_5_17[3] = { 'i', 'c', 'o' }; +static symbol s_5_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_5_19[3] = { 'o', 's', 'o' }; +static symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_22[3] = { 'i', 'v', 'o' }; +static symbol s_5_23[5] = { 'a', 0xE7, 'a', '~', 'o' }; +static symbol s_5_24[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_5_25[4] = { 'i', 'c', 'a', 's' }; +static symbol s_5_26[6] = { 0xEA, 'n', 'c', 'i', 'a', 's' }; +static symbol s_5_27[4] = { 'i', 'r', 'a', 's' }; +static symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_5_29[4] = { 'o', 's', 'a', 's' }; +static symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_5_31[4] = { 'i', 'v', 'a', 's' }; +static symbol s_5_32[4] = { 'e', 'z', 'a', 's' }; +static symbol s_5_33[6] = { 'l', 'o', 'g', 0xED, 'a', 's' }; +static symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_38[6] = { 'a', 0xE7, 'o', '~', 'e', 's' }; +static symbol s_5_39[4] = { 'i', 'c', 'o', 's' }; +static symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_5_41[4] = { 'o', 's', 'o', 's' }; +static symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_44[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_5[45] = +{ +/* 0 */ { 3, s_5_0, -1, 1, 0}, +/* 1 */ { 5, s_5_1, -1, 1, 0}, +/* 2 */ { 5, s_5_2, -1, 4, 0}, +/* 3 */ { 3, s_5_3, -1, 9, 0}, +/* 4 */ { 5, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 4, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 8, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 5, s_5_9, -1, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 7, 0}, +/* 11 */ { 4, s_5_11, -1, 1, 0}, +/* 12 */ { 5, s_5_12, -1, 6, 0}, +/* 13 */ { 6, s_5_13, 12, 5, 0}, +/* 14 */ { 4, s_5_14, -1, 1, 0}, +/* 15 */ { 4, s_5_15, -1, 1, 0}, +/* 16 */ { 5, s_5_16, -1, 3, 0}, +/* 17 */ { 3, s_5_17, -1, 1, 0}, +/* 18 */ { 4, s_5_18, -1, 1, 0}, +/* 19 */ { 3, s_5_19, -1, 1, 0}, +/* 20 */ { 6, s_5_20, -1, 1, 0}, +/* 21 */ { 6, s_5_21, -1, 1, 0}, +/* 22 */ { 3, s_5_22, -1, 8, 0}, +/* 23 */ { 5, s_5_23, -1, 1, 0}, +/* 24 */ { 4, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, -1, 1, 0}, +/* 26 */ { 6, s_5_26, -1, 4, 0}, +/* 27 */ { 4, s_5_27, -1, 9, 0}, +/* 28 */ { 6, s_5_28, -1, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 5, s_5_30, -1, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 8, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 6, s_5_33, -1, 2, 0}, +/* 34 */ { 6, s_5_34, -1, 7, 0}, +/* 35 */ { 7, s_5_35, -1, 3, 0}, +/* 36 */ { 6, s_5_36, -1, 1, 0}, +/* 37 */ { 5, s_5_37, -1, 1, 0}, +/* 38 */ { 6, s_5_38, -1, 1, 0}, +/* 39 */ { 4, s_5_39, -1, 1, 0}, +/* 40 */ { 5, s_5_40, -1, 1, 0}, +/* 41 */ { 4, s_5_41, -1, 1, 0}, +/* 42 */ { 7, s_5_42, -1, 1, 0}, +/* 43 */ { 7, s_5_43, -1, 1, 0}, +/* 44 */ { 4, s_5_44, -1, 8, 0} +}; + +static symbol s_6_0[3] = { 'a', 'd', 'a' }; +static symbol s_6_1[3] = { 'i', 'd', 'a' }; +static symbol s_6_2[2] = { 'i', 'a' }; +static symbol s_6_3[4] = { 'a', 'r', 'i', 'a' }; +static symbol s_6_4[4] = { 'e', 'r', 'i', 'a' }; +static symbol s_6_5[4] = { 'i', 'r', 'i', 'a' }; +static symbol s_6_6[3] = { 'a', 'r', 'a' }; +static symbol s_6_7[3] = { 'e', 'r', 'a' }; +static symbol s_6_8[3] = { 'i', 'r', 'a' }; +static symbol s_6_9[3] = { 'a', 'v', 'a' }; +static symbol s_6_10[4] = { 'a', 's', 's', 'e' }; +static symbol s_6_11[4] = { 'e', 's', 's', 'e' }; +static symbol s_6_12[4] = { 'i', 's', 's', 'e' }; +static symbol s_6_13[4] = { 'a', 's', 't', 'e' }; +static symbol s_6_14[4] = { 'e', 's', 't', 'e' }; +static symbol s_6_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_16[2] = { 'e', 'i' }; +static symbol s_6_17[4] = { 'a', 'r', 'e', 'i' }; +static symbol s_6_18[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_6_19[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_6_20[2] = { 'a', 'm' }; +static symbol s_6_21[3] = { 'i', 'a', 'm' }; +static symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' }; +static symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' }; +static symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' }; +static symbol s_6_25[4] = { 'a', 'r', 'a', 'm' }; +static symbol s_6_26[4] = { 'e', 'r', 'a', 'm' }; +static symbol s_6_27[4] = { 'i', 'r', 'a', 'm' }; +static symbol s_6_28[4] = { 'a', 'v', 'a', 'm' }; +static symbol s_6_29[2] = { 'e', 'm' }; +static symbol s_6_30[4] = { 'a', 'r', 'e', 'm' }; +static symbol s_6_31[4] = { 'e', 'r', 'e', 'm' }; +static symbol s_6_32[4] = { 'i', 'r', 'e', 'm' }; +static symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' }; +static symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' }; +static symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' }; +static symbol s_6_36[3] = { 'a', 'd', 'o' }; +static symbol s_6_37[3] = { 'i', 'd', 'o' }; +static symbol s_6_38[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_6_39[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_6_40[4] = { 'i', 'n', 'd', 'o' }; +static symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' }; +static symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' }; +static symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' }; +static symbol s_6_44[2] = { 'a', 'r' }; +static symbol s_6_45[2] = { 'e', 'r' }; +static symbol s_6_46[2] = { 'i', 'r' }; +static symbol s_6_47[2] = { 'a', 's' }; +static symbol s_6_48[4] = { 'a', 'd', 'a', 's' }; +static symbol s_6_49[4] = { 'i', 'd', 'a', 's' }; +static symbol s_6_50[3] = { 'i', 'a', 's' }; +static symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' }; +static symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' }; +static symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' }; +static symbol s_6_54[4] = { 'a', 'r', 'a', 's' }; +static symbol s_6_55[4] = { 'e', 'r', 'a', 's' }; +static symbol s_6_56[4] = { 'i', 'r', 'a', 's' }; +static symbol s_6_57[4] = { 'a', 'v', 'a', 's' }; +static symbol s_6_58[2] = { 'e', 's' }; +static symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' }; +static symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' }; +static symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' }; +static symbol s_6_62[4] = { 'a', 'r', 'e', 's' }; +static symbol s_6_63[4] = { 'e', 'r', 'e', 's' }; +static symbol s_6_64[4] = { 'i', 'r', 'e', 's' }; +static symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' }; +static symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' }; +static symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' }; +static symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_6_71[2] = { 'i', 's' }; +static symbol s_6_72[3] = { 'a', 'i', 's' }; +static symbol s_6_73[3] = { 'e', 'i', 's' }; +static symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' }; +static symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' }; +static symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' }; +static symbol s_6_77[5] = { 0xE1, 'r', 'e', 'i', 's' }; +static symbol s_6_78[5] = { 0xE9, 'r', 'e', 'i', 's' }; +static symbol s_6_79[5] = { 0xED, 'r', 'e', 'i', 's' }; +static symbol s_6_80[6] = { 0xE1, 's', 's', 'e', 'i', 's' }; +static symbol s_6_81[6] = { 0xE9, 's', 's', 'e', 'i', 's' }; +static symbol s_6_82[6] = { 0xED, 's', 's', 'e', 'i', 's' }; +static symbol s_6_83[5] = { 0xE1, 'v', 'e', 'i', 's' }; +static symbol s_6_84[4] = { 0xED, 'e', 'i', 's' }; +static symbol s_6_85[6] = { 'a', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_86[6] = { 'e', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_87[6] = { 'i', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_88[4] = { 'a', 'd', 'o', 's' }; +static symbol s_6_89[4] = { 'i', 'd', 'o', 's' }; +static symbol s_6_90[4] = { 'a', 'm', 'o', 's' }; +static symbol s_6_91[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_92[6] = { 0xE9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_93[6] = { 0xED, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_94[6] = { 0xE1, 'v', 'a', 'm', 'o', 's' }; +static symbol s_6_95[5] = { 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_96[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_97[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_98[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_99[4] = { 'e', 'm', 'o', 's' }; +static symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_103[7] = { 0xE1, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_104[7] = { 0xEA, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_105[7] = { 0xED, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_106[4] = { 'i', 'm', 'o', 's' }; +static symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' }; +static symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' }; +static symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' }; +static symbol s_6_110[4] = { 0xE1, 'm', 'o', 's' }; +static symbol s_6_111[4] = { 'a', 'r', 0xE1, 's' }; +static symbol s_6_112[4] = { 'e', 'r', 0xE1, 's' }; +static symbol s_6_113[4] = { 'i', 'r', 0xE1, 's' }; +static symbol s_6_114[2] = { 'e', 'u' }; +static symbol s_6_115[2] = { 'i', 'u' }; +static symbol s_6_116[2] = { 'o', 'u' }; +static symbol s_6_117[3] = { 'a', 'r', 0xE1 }; +static symbol s_6_118[3] = { 'e', 'r', 0xE1 }; +static symbol s_6_119[3] = { 'i', 'r', 0xE1 }; + +static struct among a_6[120] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 3, s_6_1, -1, 1, 0}, +/* 2 */ { 2, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, 2, 1, 0}, +/* 4 */ { 4, s_6_4, 2, 1, 0}, +/* 5 */ { 4, s_6_5, 2, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 1, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 3, s_6_8, -1, 1, 0}, +/* 9 */ { 3, s_6_9, -1, 1, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 1, 0}, +/* 13 */ { 4, s_6_13, -1, 1, 0}, +/* 14 */ { 4, s_6_14, -1, 1, 0}, +/* 15 */ { 4, s_6_15, -1, 1, 0}, +/* 16 */ { 2, s_6_16, -1, 1, 0}, +/* 17 */ { 4, s_6_17, 16, 1, 0}, +/* 18 */ { 4, s_6_18, 16, 1, 0}, +/* 19 */ { 4, s_6_19, 16, 1, 0}, +/* 20 */ { 2, s_6_20, -1, 1, 0}, +/* 21 */ { 3, s_6_21, 20, 1, 0}, +/* 22 */ { 5, s_6_22, 21, 1, 0}, +/* 23 */ { 5, s_6_23, 21, 1, 0}, +/* 24 */ { 5, s_6_24, 21, 1, 0}, +/* 25 */ { 4, s_6_25, 20, 1, 0}, +/* 26 */ { 4, s_6_26, 20, 1, 0}, +/* 27 */ { 4, s_6_27, 20, 1, 0}, +/* 28 */ { 4, s_6_28, 20, 1, 0}, +/* 29 */ { 2, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, 29, 1, 0}, +/* 31 */ { 4, s_6_31, 29, 1, 0}, +/* 32 */ { 4, s_6_32, 29, 1, 0}, +/* 33 */ { 5, s_6_33, 29, 1, 0}, +/* 34 */ { 5, s_6_34, 29, 1, 0}, +/* 35 */ { 5, s_6_35, 29, 1, 0}, +/* 36 */ { 3, s_6_36, -1, 1, 0}, +/* 37 */ { 3, s_6_37, -1, 1, 0}, +/* 38 */ { 4, s_6_38, -1, 1, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 5, s_6_42, -1, 1, 0}, +/* 43 */ { 5, s_6_43, -1, 1, 0}, +/* 44 */ { 2, s_6_44, -1, 1, 0}, +/* 45 */ { 2, s_6_45, -1, 1, 0}, +/* 46 */ { 2, s_6_46, -1, 1, 0}, +/* 47 */ { 2, s_6_47, -1, 1, 0}, +/* 48 */ { 4, s_6_48, 47, 1, 0}, +/* 49 */ { 4, s_6_49, 47, 1, 0}, +/* 50 */ { 3, s_6_50, 47, 1, 0}, +/* 51 */ { 5, s_6_51, 50, 1, 0}, +/* 52 */ { 5, s_6_52, 50, 1, 0}, +/* 53 */ { 5, s_6_53, 50, 1, 0}, +/* 54 */ { 4, s_6_54, 47, 1, 0}, +/* 55 */ { 4, s_6_55, 47, 1, 0}, +/* 56 */ { 4, s_6_56, 47, 1, 0}, +/* 57 */ { 4, s_6_57, 47, 1, 0}, +/* 58 */ { 2, s_6_58, -1, 1, 0}, +/* 59 */ { 5, s_6_59, 58, 1, 0}, +/* 60 */ { 5, s_6_60, 58, 1, 0}, +/* 61 */ { 5, s_6_61, 58, 1, 0}, +/* 62 */ { 4, s_6_62, 58, 1, 0}, +/* 63 */ { 4, s_6_63, 58, 1, 0}, +/* 64 */ { 4, s_6_64, 58, 1, 0}, +/* 65 */ { 5, s_6_65, 58, 1, 0}, +/* 66 */ { 5, s_6_66, 58, 1, 0}, +/* 67 */ { 5, s_6_67, 58, 1, 0}, +/* 68 */ { 5, s_6_68, 58, 1, 0}, +/* 69 */ { 5, s_6_69, 58, 1, 0}, +/* 70 */ { 5, s_6_70, 58, 1, 0}, +/* 71 */ { 2, s_6_71, -1, 1, 0}, +/* 72 */ { 3, s_6_72, 71, 1, 0}, +/* 73 */ { 3, s_6_73, 71, 1, 0}, +/* 74 */ { 5, s_6_74, 73, 1, 0}, +/* 75 */ { 5, s_6_75, 73, 1, 0}, +/* 76 */ { 5, s_6_76, 73, 1, 0}, +/* 77 */ { 5, s_6_77, 73, 1, 0}, +/* 78 */ { 5, s_6_78, 73, 1, 0}, +/* 79 */ { 5, s_6_79, 73, 1, 0}, +/* 80 */ { 6, s_6_80, 73, 1, 0}, +/* 81 */ { 6, s_6_81, 73, 1, 0}, +/* 82 */ { 6, s_6_82, 73, 1, 0}, +/* 83 */ { 5, s_6_83, 73, 1, 0}, +/* 84 */ { 4, s_6_84, 73, 1, 0}, +/* 85 */ { 6, s_6_85, 84, 1, 0}, +/* 86 */ { 6, s_6_86, 84, 1, 0}, +/* 87 */ { 6, s_6_87, 84, 1, 0}, +/* 88 */ { 4, s_6_88, -1, 1, 0}, +/* 89 */ { 4, s_6_89, -1, 1, 0}, +/* 90 */ { 4, s_6_90, -1, 1, 0}, +/* 91 */ { 6, s_6_91, 90, 1, 0}, +/* 92 */ { 6, s_6_92, 90, 1, 0}, +/* 93 */ { 6, s_6_93, 90, 1, 0}, +/* 94 */ { 6, s_6_94, 90, 1, 0}, +/* 95 */ { 5, s_6_95, 90, 1, 0}, +/* 96 */ { 7, s_6_96, 95, 1, 0}, +/* 97 */ { 7, s_6_97, 95, 1, 0}, +/* 98 */ { 7, s_6_98, 95, 1, 0}, +/* 99 */ { 4, s_6_99, -1, 1, 0}, +/*100 */ { 6, s_6_100, 99, 1, 0}, +/*101 */ { 6, s_6_101, 99, 1, 0}, +/*102 */ { 6, s_6_102, 99, 1, 0}, +/*103 */ { 7, s_6_103, 99, 1, 0}, +/*104 */ { 7, s_6_104, 99, 1, 0}, +/*105 */ { 7, s_6_105, 99, 1, 0}, +/*106 */ { 4, s_6_106, -1, 1, 0}, +/*107 */ { 5, s_6_107, -1, 1, 0}, +/*108 */ { 5, s_6_108, -1, 1, 0}, +/*109 */ { 5, s_6_109, -1, 1, 0}, +/*110 */ { 4, s_6_110, -1, 1, 0}, +/*111 */ { 4, s_6_111, -1, 1, 0}, +/*112 */ { 4, s_6_112, -1, 1, 0}, +/*113 */ { 4, s_6_113, -1, 1, 0}, +/*114 */ { 2, s_6_114, -1, 1, 0}, +/*115 */ { 2, s_6_115, -1, 1, 0}, +/*116 */ { 2, s_6_116, -1, 1, 0}, +/*117 */ { 3, s_6_117, -1, 1, 0}, +/*118 */ { 3, s_6_118, -1, 1, 0}, +/*119 */ { 3, s_6_119, -1, 1, 0} +}; + +static symbol s_7_0[1] = { 'a' }; +static symbol s_7_1[1] = { 'i' }; +static symbol s_7_2[1] = { 'o' }; +static symbol s_7_3[2] = { 'o', 's' }; +static symbol s_7_4[1] = { 0xE1 }; +static symbol s_7_5[1] = { 0xED }; +static symbol s_7_6[1] = { 0xF3 }; + +static struct among a_7[7] = +{ +/* 0 */ { 1, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 1, 0}, +/* 2 */ { 1, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 1, 0}, +/* 4 */ { 1, s_7_4, -1, 1, 0}, +/* 5 */ { 1, s_7_5, -1, 1, 0}, +/* 6 */ { 1, s_7_6, -1, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 0xE7 }; +static symbol s_8_2[1] = { 0xE9 }; +static symbol s_8_3[1] = { 0xEA }; + +static struct among a_8[4] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0}, +/* 2 */ { 1, s_8_2, -1, 1, 0}, +/* 3 */ { 1, s_8_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; + +static symbol s_0[] = { 'a', '~' }; +static symbol s_1[] = { 'o', '~' }; +static symbol s_2[] = { 0xE3 }; +static symbol s_3[] = { 0xF5 }; +static symbol s_4[] = { 'l', 'o', 'g' }; +static symbol s_5[] = { 'u' }; +static symbol s_6[] = { 'e', 'n', 't', 'e' }; +static symbol s_7[] = { 'a', 't' }; +static symbol s_8[] = { 'a', 't' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'i', 'r' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'g' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 'c' }; +static symbol s_15[] = { 'c' }; +static symbol s_16[] = { 'i' }; +static symbol s_17[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 36 */ + int c = z->c; + z->bra = z->c; /* [, line 37 */ + among_var = find_among(z, a_0, 3); /* substring, line 37 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 37 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 40 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 50 */ + { int c = z->c; /* or, line 52 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab2; + { int c = z->c; /* or, line 51 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab4; + while(1) { /* gopast, line 51 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 51 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 250))) goto lab2; + while(1) { /* gopast, line 51 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 51 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 250))) goto lab0; + { int c = z->c; /* or, line 53 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab8; + while(1) { /* gopast, line 53 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 53 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 250))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 53 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 54 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 56 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 57 */ + } + while(1) { /* gopast, line 57 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 57 */ + } + z->I[1] = z->c; /* setmark p1, line 57 */ + while(1) { /* gopast, line 58 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 58 */ + } + while(1) { /* gopast, line 58 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 58 */ + } + z->I[2] = z->c; /* setmark p2, line 58 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 62 */ + int c = z->c; + z->bra = z->c; /* [, line 63 */ + among_var = find_among(z, a_1, 3); /* substring, line 63 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 63 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 66 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 77 */ + among_var = find_among_b(z, a_5, 45); /* substring, line 77 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 77 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 93 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 93 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_4); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 102 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + z->ket = z->c; /* [, line 113 */ + if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 113 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 123 */ + z->ket = z->c; /* [, line 124 */ + among_var = find_among_b(z, a_3, 3); /* substring, line 124 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 124 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 146 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 147 */ + z->ket = z->c; /* [, line 148 */ + if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 148 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 148 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 148 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 9: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 153 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_9))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_10); /* <-, line 154 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 159 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 159 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_6, 120); /* substring, line 160 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 7); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 187 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 187 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_form(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_8, 4); /* substring, line 192 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 194 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 194 */ + { int m = z->l - z->c; (void) m; /* or, line 194 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + z->bra = z->c; /* ], line 194 */ + { int m_test = z->l - z->c; /* test, line 194 */ + if (!(eq_s_b(z, 1, s_12))) goto lab1; + z->c = z->l - m_test; + } + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 195 */ + { int m_test = z->l - z->c; /* test, line 195 */ + if (!(eq_s_b(z, 1, s_14))) return 0; + z->c = z->l - m_test; + } + } + lab0: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 195 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 195 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 202 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 202 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 209 */ + { int m = z->l - z->c; (void) m; /* and, line 207 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 207 */ + z->ket = z->c; /* [, line 207 */ + if (!(eq_s_b(z, 1, s_16))) goto lab7; + z->bra = z->c; /* ], line 207 */ + { int m_test = z->l - z->c; /* test, line 207 */ + if (!(eq_s_b(z, 1, s_17))) goto lab7; + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) goto lab7; /* call RV, line 207 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 207 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 209 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 211 */ + { int ret = r_residual_form(z); + if (ret == 0) goto lab8; /* call residual_form, line 211 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 213 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab9; /* call postlude, line 213 */ + if (ret < 0) return ret; + } + lab9: + z->c = c; + } + return 1; +} + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void); +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z); + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1119 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int spanish_ISO_8859_1_stem(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_y_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); + +extern struct SN_env * spanish_ISO_8859_1_create_env(void); +extern void spanish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE1 }; +static symbol s_0_2[1] = { 0xE9 }; +static symbol s_0_3[1] = { 0xED }; +static symbol s_0_4[1] = { 0xF3 }; +static symbol s_0_5[1] = { 0xFA }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0}, +/* 4 */ { 1, s_0_4, 0, 4, 0}, +/* 5 */ { 1, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[2] = { 'l', 'a' }; +static symbol s_1_1[4] = { 's', 'e', 'l', 'a' }; +static symbol s_1_2[2] = { 'l', 'e' }; +static symbol s_1_3[2] = { 'm', 'e' }; +static symbol s_1_4[2] = { 's', 'e' }; +static symbol s_1_5[2] = { 'l', 'o' }; +static symbol s_1_6[4] = { 's', 'e', 'l', 'o' }; +static symbol s_1_7[3] = { 'l', 'a', 's' }; +static symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' }; +static symbol s_1_9[3] = { 'l', 'e', 's' }; +static symbol s_1_10[3] = { 'l', 'o', 's' }; +static symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' }; +static symbol s_1_12[3] = { 'n', 'o', 's' }; + +static struct among a_1[13] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 4, s_1_1, 0, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 4, s_1_6, 5, -1, 0}, +/* 7 */ { 3, s_1_7, -1, -1, 0}, +/* 8 */ { 5, s_1_8, 7, -1, 0}, +/* 9 */ { 3, s_1_9, -1, -1, 0}, +/* 10 */ { 3, s_1_10, -1, -1, 0}, +/* 11 */ { 5, s_1_11, 10, -1, 0}, +/* 12 */ { 3, s_1_12, -1, -1, 0} +}; + +static symbol s_2_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_2_3[4] = { 0xE1, 'n', 'd', 'o' }; +static symbol s_2_4[5] = { 'i', 0xE9, 'n', 'd', 'o' }; +static symbol s_2_5[2] = { 'a', 'r' }; +static symbol s_2_6[2] = { 'e', 'r' }; +static symbol s_2_7[2] = { 'i', 'r' }; +static symbol s_2_8[2] = { 0xE1, 'r' }; +static symbol s_2_9[2] = { 0xE9, 'r' }; +static symbol s_2_10[2] = { 0xED, 'r' }; + +static struct among a_2[11] = +{ +/* 0 */ { 4, s_2_0, -1, 6, 0}, +/* 1 */ { 5, s_2_1, -1, 6, 0}, +/* 2 */ { 5, s_2_2, -1, 7, 0}, +/* 3 */ { 4, s_2_3, -1, 2, 0}, +/* 4 */ { 5, s_2_4, -1, 1, 0}, +/* 5 */ { 2, s_2_5, -1, 6, 0}, +/* 6 */ { 2, s_2_6, -1, 6, 0}, +/* 7 */ { 2, s_2_7, -1, 6, 0}, +/* 8 */ { 2, s_2_8, -1, 3, 0}, +/* 9 */ { 2, s_2_9, -1, 4, 0}, +/* 10 */ { 2, s_2_10, -1, 5, 0} +}; + +static symbol s_3_0[2] = { 'i', 'c' }; +static symbol s_3_1[2] = { 'a', 'd' }; +static symbol s_3_2[2] = { 'o', 's' }; +static symbol s_3_3[2] = { 'i', 'v' }; + +static struct among a_3[4] = +{ +/* 0 */ { 2, s_3_0, -1, -1, 0}, +/* 1 */ { 2, s_3_1, -1, -1, 0}, +/* 2 */ { 2, s_3_2, -1, -1, 0}, +/* 3 */ { 2, s_3_3, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_4_1[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_4_2[4] = { 'a', 'n', 't', 'e' }; + +static struct among a_4[3] = +{ +/* 0 */ { 4, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' }; +static symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' }; +static symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_6_4[3] = { 'o', 's', 'a' }; +static symbol s_6_5[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_6[3] = { 'i', 'v', 'a' }; +static symbol s_6_7[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_8[5] = { 'l', 'o', 'g', 0xED, 'a' }; +static symbol s_6_9[4] = { 'i', 'd', 'a', 'd' }; +static symbol s_6_10[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_6_11[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_6_12[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_15[5] = { 'a', 'c', 'i', 0xF3, 'n' }; +static symbol s_6_16[5] = { 'u', 'c', 'i', 0xF3, 'n' }; +static symbol s_6_17[3] = { 'i', 'c', 'o' }; +static symbol s_6_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_19[3] = { 'o', 's', 'o' }; +static symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_22[3] = { 'i', 'v', 'o' }; +static symbol s_6_23[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_6_24[4] = { 'i', 'c', 'a', 's' }; +static symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_6_28[4] = { 'o', 's', 'a', 's' }; +static symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_6_30[4] = { 'i', 'v', 'a', 's' }; +static symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' }; +static symbol s_6_32[6] = { 'l', 'o', 'g', 0xED, 'a', 's' }; +static symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' }; +static symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_6_40[4] = { 'i', 'c', 'o', 's' }; +static symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_6_42[4] = { 'o', 's', 'o', 's' }; +static symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_45[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_6[46] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 2, 0}, +/* 2 */ { 5, s_6_2, -1, 5, 0}, +/* 3 */ { 5, s_6_3, -1, 2, 0}, +/* 4 */ { 3, s_6_4, -1, 1, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 9, 0}, +/* 7 */ { 4, s_6_7, -1, 1, 0}, +/* 8 */ { 5, s_6_8, -1, 3, 0}, +/* 9 */ { 4, s_6_9, -1, 8, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 2, 0}, +/* 13 */ { 5, s_6_13, -1, 7, 0}, +/* 14 */ { 6, s_6_14, 13, 6, 0}, +/* 15 */ { 5, s_6_15, -1, 2, 0}, +/* 16 */ { 5, s_6_16, -1, 4, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 3, s_6_19, -1, 1, 0}, +/* 20 */ { 7, s_6_20, -1, 1, 0}, +/* 21 */ { 7, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 2, 0}, +/* 24 */ { 4, s_6_24, -1, 1, 0}, +/* 25 */ { 6, s_6_25, -1, 2, 0}, +/* 26 */ { 6, s_6_26, -1, 5, 0}, +/* 27 */ { 6, s_6_27, -1, 2, 0}, +/* 28 */ { 4, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 9, 0}, +/* 31 */ { 5, s_6_31, -1, 1, 0}, +/* 32 */ { 6, s_6_32, -1, 3, 0}, +/* 33 */ { 6, s_6_33, -1, 8, 0}, +/* 34 */ { 5, s_6_34, -1, 1, 0}, +/* 35 */ { 5, s_6_35, -1, 1, 0}, +/* 36 */ { 7, s_6_36, -1, 2, 0}, +/* 37 */ { 7, s_6_37, -1, 4, 0}, +/* 38 */ { 6, s_6_38, -1, 2, 0}, +/* 39 */ { 5, s_6_39, -1, 2, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 8, s_6_43, -1, 1, 0}, +/* 44 */ { 8, s_6_44, -1, 1, 0}, +/* 45 */ { 4, s_6_45, -1, 9, 0} +}; + +static symbol s_7_0[2] = { 'y', 'a' }; +static symbol s_7_1[2] = { 'y', 'e' }; +static symbol s_7_2[3] = { 'y', 'a', 'n' }; +static symbol s_7_3[3] = { 'y', 'e', 'n' }; +static symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' }; +static symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_7_6[2] = { 'y', 'o' }; +static symbol s_7_7[3] = { 'y', 'a', 's' }; +static symbol s_7_8[3] = { 'y', 'e', 's' }; +static symbol s_7_9[4] = { 'y', 'a', 'i', 's' }; +static symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' }; +static symbol s_7_11[2] = { 'y', 0xF3 }; + +static struct among a_7[12] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 5, s_7_4, -1, 1, 0}, +/* 5 */ { 5, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 4, s_7_9, -1, 1, 0}, +/* 10 */ { 5, s_7_10, -1, 1, 0}, +/* 11 */ { 2, s_7_11, -1, 1, 0} +}; + +static symbol s_8_0[3] = { 'a', 'b', 'a' }; +static symbol s_8_1[3] = { 'a', 'd', 'a' }; +static symbol s_8_2[3] = { 'i', 'd', 'a' }; +static symbol s_8_3[3] = { 'a', 'r', 'a' }; +static symbol s_8_4[4] = { 'i', 'e', 'r', 'a' }; +static symbol s_8_5[2] = { 0xED, 'a' }; +static symbol s_8_6[4] = { 'a', 'r', 0xED, 'a' }; +static symbol s_8_7[4] = { 'e', 'r', 0xED, 'a' }; +static symbol s_8_8[4] = { 'i', 'r', 0xED, 'a' }; +static symbol s_8_9[2] = { 'a', 'd' }; +static symbol s_8_10[2] = { 'e', 'd' }; +static symbol s_8_11[2] = { 'i', 'd' }; +static symbol s_8_12[3] = { 'a', 's', 'e' }; +static symbol s_8_13[4] = { 'i', 'e', 's', 'e' }; +static symbol s_8_14[4] = { 'a', 's', 't', 'e' }; +static symbol s_8_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_8_16[2] = { 'a', 'n' }; +static symbol s_8_17[4] = { 'a', 'b', 'a', 'n' }; +static symbol s_8_18[4] = { 'a', 'r', 'a', 'n' }; +static symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' }; +static symbol s_8_20[3] = { 0xED, 'a', 'n' }; +static symbol s_8_21[5] = { 'a', 'r', 0xED, 'a', 'n' }; +static symbol s_8_22[5] = { 'e', 'r', 0xED, 'a', 'n' }; +static symbol s_8_23[5] = { 'i', 'r', 0xED, 'a', 'n' }; +static symbol s_8_24[2] = { 'e', 'n' }; +static symbol s_8_25[4] = { 'a', 's', 'e', 'n' }; +static symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' }; +static symbol s_8_27[4] = { 'a', 'r', 'o', 'n' }; +static symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' }; +static symbol s_8_29[4] = { 'a', 'r', 0xE1, 'n' }; +static symbol s_8_30[4] = { 'e', 'r', 0xE1, 'n' }; +static symbol s_8_31[4] = { 'i', 'r', 0xE1, 'n' }; +static symbol s_8_32[3] = { 'a', 'd', 'o' }; +static symbol s_8_33[3] = { 'i', 'd', 'o' }; +static symbol s_8_34[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_8_36[2] = { 'a', 'r' }; +static symbol s_8_37[2] = { 'e', 'r' }; +static symbol s_8_38[2] = { 'i', 'r' }; +static symbol s_8_39[2] = { 'a', 's' }; +static symbol s_8_40[4] = { 'a', 'b', 'a', 's' }; +static symbol s_8_41[4] = { 'a', 'd', 'a', 's' }; +static symbol s_8_42[4] = { 'i', 'd', 'a', 's' }; +static symbol s_8_43[4] = { 'a', 'r', 'a', 's' }; +static symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' }; +static symbol s_8_45[3] = { 0xED, 'a', 's' }; +static symbol s_8_46[5] = { 'a', 'r', 0xED, 'a', 's' }; +static symbol s_8_47[5] = { 'e', 'r', 0xED, 'a', 's' }; +static symbol s_8_48[5] = { 'i', 'r', 0xED, 'a', 's' }; +static symbol s_8_49[2] = { 'e', 's' }; +static symbol s_8_50[4] = { 'a', 's', 'e', 's' }; +static symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' }; +static symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' }; +static symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' }; +static symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' }; +static symbol s_8_55[4] = { 0xED, 'a', 'i', 's' }; +static symbol s_8_56[6] = { 'a', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_57[6] = { 'e', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_58[6] = { 'i', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' }; +static symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' }; +static symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' }; +static symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' }; +static symbol s_8_63[3] = { 0xE1, 'i', 's' }; +static symbol s_8_64[3] = { 0xE9, 'i', 's' }; +static symbol s_8_65[5] = { 'a', 'r', 0xE9, 'i', 's' }; +static symbol s_8_66[5] = { 'e', 'r', 0xE9, 'i', 's' }; +static symbol s_8_67[5] = { 'i', 'r', 0xE9, 'i', 's' }; +static symbol s_8_68[4] = { 'a', 'd', 'o', 's' }; +static symbol s_8_69[4] = { 'i', 'd', 'o', 's' }; +static symbol s_8_70[4] = { 'a', 'm', 'o', 's' }; +static symbol s_8_71[6] = { 0xE1, 'b', 'a', 'm', 'o', 's' }; +static symbol s_8_72[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_73[7] = { 'i', 0xE9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_74[5] = { 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_75[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_76[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_77[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_78[4] = { 'e', 'm', 'o', 's' }; +static symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_82[6] = { 0xE1, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_83[7] = { 'i', 0xE9, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_84[4] = { 'i', 'm', 'o', 's' }; +static symbol s_8_85[4] = { 'a', 'r', 0xE1, 's' }; +static symbol s_8_86[4] = { 'e', 'r', 0xE1, 's' }; +static symbol s_8_87[4] = { 'i', 'r', 0xE1, 's' }; +static symbol s_8_88[2] = { 0xED, 's' }; +static symbol s_8_89[3] = { 'a', 'r', 0xE1 }; +static symbol s_8_90[3] = { 'e', 'r', 0xE1 }; +static symbol s_8_91[3] = { 'i', 'r', 0xE1 }; +static symbol s_8_92[3] = { 'a', 'r', 0xE9 }; +static symbol s_8_93[3] = { 'e', 'r', 0xE9 }; +static symbol s_8_94[3] = { 'i', 'r', 0xE9 }; +static symbol s_8_95[2] = { 'i', 0xF3 }; + +static struct among a_8[96] = +{ +/* 0 */ { 3, s_8_0, -1, 2, 0}, +/* 1 */ { 3, s_8_1, -1, 2, 0}, +/* 2 */ { 3, s_8_2, -1, 2, 0}, +/* 3 */ { 3, s_8_3, -1, 2, 0}, +/* 4 */ { 4, s_8_4, -1, 2, 0}, +/* 5 */ { 2, s_8_5, -1, 2, 0}, +/* 6 */ { 4, s_8_6, 5, 2, 0}, +/* 7 */ { 4, s_8_7, 5, 2, 0}, +/* 8 */ { 4, s_8_8, 5, 2, 0}, +/* 9 */ { 2, s_8_9, -1, 2, 0}, +/* 10 */ { 2, s_8_10, -1, 2, 0}, +/* 11 */ { 2, s_8_11, -1, 2, 0}, +/* 12 */ { 3, s_8_12, -1, 2, 0}, +/* 13 */ { 4, s_8_13, -1, 2, 0}, +/* 14 */ { 4, s_8_14, -1, 2, 0}, +/* 15 */ { 4, s_8_15, -1, 2, 0}, +/* 16 */ { 2, s_8_16, -1, 2, 0}, +/* 17 */ { 4, s_8_17, 16, 2, 0}, +/* 18 */ { 4, s_8_18, 16, 2, 0}, +/* 19 */ { 5, s_8_19, 16, 2, 0}, +/* 20 */ { 3, s_8_20, 16, 2, 0}, +/* 21 */ { 5, s_8_21, 20, 2, 0}, +/* 22 */ { 5, s_8_22, 20, 2, 0}, +/* 23 */ { 5, s_8_23, 20, 2, 0}, +/* 24 */ { 2, s_8_24, -1, 1, 0}, +/* 25 */ { 4, s_8_25, 24, 2, 0}, +/* 26 */ { 5, s_8_26, 24, 2, 0}, +/* 27 */ { 4, s_8_27, -1, 2, 0}, +/* 28 */ { 5, s_8_28, -1, 2, 0}, +/* 29 */ { 4, s_8_29, -1, 2, 0}, +/* 30 */ { 4, s_8_30, -1, 2, 0}, +/* 31 */ { 4, s_8_31, -1, 2, 0}, +/* 32 */ { 3, s_8_32, -1, 2, 0}, +/* 33 */ { 3, s_8_33, -1, 2, 0}, +/* 34 */ { 4, s_8_34, -1, 2, 0}, +/* 35 */ { 5, s_8_35, -1, 2, 0}, +/* 36 */ { 2, s_8_36, -1, 2, 0}, +/* 37 */ { 2, s_8_37, -1, 2, 0}, +/* 38 */ { 2, s_8_38, -1, 2, 0}, +/* 39 */ { 2, s_8_39, -1, 2, 0}, +/* 40 */ { 4, s_8_40, 39, 2, 0}, +/* 41 */ { 4, s_8_41, 39, 2, 0}, +/* 42 */ { 4, s_8_42, 39, 2, 0}, +/* 43 */ { 4, s_8_43, 39, 2, 0}, +/* 44 */ { 5, s_8_44, 39, 2, 0}, +/* 45 */ { 3, s_8_45, 39, 2, 0}, +/* 46 */ { 5, s_8_46, 45, 2, 0}, +/* 47 */ { 5, s_8_47, 45, 2, 0}, +/* 48 */ { 5, s_8_48, 45, 2, 0}, +/* 49 */ { 2, s_8_49, -1, 1, 0}, +/* 50 */ { 4, s_8_50, 49, 2, 0}, +/* 51 */ { 5, s_8_51, 49, 2, 0}, +/* 52 */ { 5, s_8_52, -1, 2, 0}, +/* 53 */ { 5, s_8_53, -1, 2, 0}, +/* 54 */ { 6, s_8_54, -1, 2, 0}, +/* 55 */ { 4, s_8_55, -1, 2, 0}, +/* 56 */ { 6, s_8_56, 55, 2, 0}, +/* 57 */ { 6, s_8_57, 55, 2, 0}, +/* 58 */ { 6, s_8_58, 55, 2, 0}, +/* 59 */ { 5, s_8_59, -1, 2, 0}, +/* 60 */ { 6, s_8_60, -1, 2, 0}, +/* 61 */ { 6, s_8_61, -1, 2, 0}, +/* 62 */ { 6, s_8_62, -1, 2, 0}, +/* 63 */ { 3, s_8_63, -1, 2, 0}, +/* 64 */ { 3, s_8_64, -1, 1, 0}, +/* 65 */ { 5, s_8_65, 64, 2, 0}, +/* 66 */ { 5, s_8_66, 64, 2, 0}, +/* 67 */ { 5, s_8_67, 64, 2, 0}, +/* 68 */ { 4, s_8_68, -1, 2, 0}, +/* 69 */ { 4, s_8_69, -1, 2, 0}, +/* 70 */ { 4, s_8_70, -1, 2, 0}, +/* 71 */ { 6, s_8_71, 70, 2, 0}, +/* 72 */ { 6, s_8_72, 70, 2, 0}, +/* 73 */ { 7, s_8_73, 70, 2, 0}, +/* 74 */ { 5, s_8_74, 70, 2, 0}, +/* 75 */ { 7, s_8_75, 74, 2, 0}, +/* 76 */ { 7, s_8_76, 74, 2, 0}, +/* 77 */ { 7, s_8_77, 74, 2, 0}, +/* 78 */ { 4, s_8_78, -1, 1, 0}, +/* 79 */ { 6, s_8_79, 78, 2, 0}, +/* 80 */ { 6, s_8_80, 78, 2, 0}, +/* 81 */ { 6, s_8_81, 78, 2, 0}, +/* 82 */ { 6, s_8_82, 78, 2, 0}, +/* 83 */ { 7, s_8_83, 78, 2, 0}, +/* 84 */ { 4, s_8_84, -1, 2, 0}, +/* 85 */ { 4, s_8_85, -1, 2, 0}, +/* 86 */ { 4, s_8_86, -1, 2, 0}, +/* 87 */ { 4, s_8_87, -1, 2, 0}, +/* 88 */ { 2, s_8_88, -1, 2, 0}, +/* 89 */ { 3, s_8_89, -1, 2, 0}, +/* 90 */ { 3, s_8_90, -1, 2, 0}, +/* 91 */ { 3, s_8_91, -1, 2, 0}, +/* 92 */ { 3, s_8_92, -1, 2, 0}, +/* 93 */ { 3, s_8_93, -1, 2, 0}, +/* 94 */ { 3, s_8_94, -1, 2, 0}, +/* 95 */ { 2, s_8_95, -1, 2, 0} +}; + +static symbol s_9_0[1] = { 'a' }; +static symbol s_9_1[1] = { 'e' }; +static symbol s_9_2[1] = { 'o' }; +static symbol s_9_3[2] = { 'o', 's' }; +static symbol s_9_4[1] = { 0xE1 }; +static symbol s_9_5[1] = { 0xE9 }; +static symbol s_9_6[1] = { 0xED }; +static symbol s_9_7[1] = { 0xF3 }; + +static struct among a_9[8] = +{ +/* 0 */ { 1, s_9_0, -1, 1, 0}, +/* 1 */ { 1, s_9_1, -1, 2, 0}, +/* 2 */ { 1, s_9_2, -1, 1, 0}, +/* 3 */ { 2, s_9_3, -1, 1, 0}, +/* 4 */ { 1, s_9_4, -1, 1, 0}, +/* 5 */ { 1, s_9_5, -1, 2, 0}, +/* 6 */ { 1, s_9_6, -1, 1, 0}, +/* 7 */ { 1, s_9_7, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_6[] = { 'a', 'n', 'd', 'o' }; +static symbol s_7[] = { 'a', 'r' }; +static symbol s_8[] = { 'e', 'r' }; +static symbol s_9[] = { 'i', 'r' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'c' }; +static symbol s_12[] = { 'l', 'o', 'g' }; +static symbol s_13[] = { 'u' }; +static symbol s_14[] = { 'e', 'n', 't', 'e' }; +static symbol s_15[] = { 'a', 't' }; +static symbol s_16[] = { 'a', 't' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'u' }; +static symbol s_19[] = { 'g' }; +static symbol s_20[] = { 'u' }; +static symbol s_21[] = { 'g' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 37 */ + { int c = z->c; /* or, line 39 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab2; + { int c = z->c; /* or, line 38 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab4; + while(1) { /* gopast, line 38 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 38 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab2; + while(1) { /* gopast, line 38 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 38 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 252))) goto lab0; + { int c = z->c; /* or, line 40 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab8; + while(1) { /* gopast, line 40 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 40 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 40 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 41 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 43 */ + while(1) { /* gopast, line 44 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 44 */ + } + while(1) { /* gopast, line 44 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 44 */ + } + z->I[1] = z->c; /* setmark p1, line 44 */ + while(1) { /* gopast, line 45 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 45 */ + } + while(1) { /* gopast, line 45 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 45 */ + } + z->I[2] = z->c; /* setmark p2, line 45 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 49 */ + int c = z->c; + z->bra = z->c; /* [, line 50 */ + among_var = find_among(z, a_0, 6); /* substring, line 50 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 50 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 52 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 54 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 55 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 57 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 68 */ + if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */ + z->bra = z->c; /* ], line 68 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 72 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 72 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + z->bra = z->c; /* ], line 73 */ + { int ret; + ret = slice_from_s(z, 5, s_5); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + z->bra = z->c; /* ], line 75 */ + { int ret; + ret = slice_from_s(z, 2, s_7); /* <-, line 75 */ + if (ret < 0) return ret; + } + break; + case 4: + z->bra = z->c; /* ], line 76 */ + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 5: + z->bra = z->c; /* ], line 77 */ + { int ret; + ret = slice_from_s(z, 2, s_9); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 7: + if (!(eq_s_b(z, 1, s_10))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 82 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + among_var = find_among_b(z, a_6, 46); /* substring, line 87 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 87 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 99 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 106 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 106 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 115 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 124 */ + z->ket = z->c; /* [, line 125 */ + among_var = find_among_b(z, a_3, 4); /* substring, line 125 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 125 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 126 */ + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 126 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 126 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 126 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 136 */ + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 137 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 140 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 140 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 147 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 148 */ + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 149 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 152 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 159 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 159 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 160 */ + z->ket = z->c; /* [, line 161 */ + if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; goto lab4; } + z->bra = z->c; /* ], line 161 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call R2, line 161 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + lab4: + ; + } + break; + } + return 1; +} + +static int r_y_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 168 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 168 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 168 */ + among_var = find_among_b(z, a_7, 12); /* substring, line 168 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 168 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_17))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 171 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 176 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 176 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_8, 96); /* substring, line 176 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 176 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* try, line 179 */ + if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m; goto lab0; } + { int m_test = z->l - z->c; /* test, line 179 */ + if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + lab0: + ; + } + z->bra = z->c; /* ], line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 200 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 205 */ + among_var = find_among_b(z, a_9, 8); /* substring, line 205 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 205 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 208 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 208 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 210 */ + z->ket = z->c; /* [, line 210 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 210 */ + { int m_test = z->l - z->c; /* test, line 210 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + return 1; +} + +extern int spanish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 216 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 216 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 217 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab1; /* call attached_pronoun, line 218 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int m = z->l - z->c; (void) m; /* or, line 219 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab4; /* call standard_suffix, line 219 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_y_verb_suffix(z); + if (ret == 0) goto lab5; /* call y_verb_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab3; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab2; /* call verb_suffix, line 221 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab6; /* call residual_suffix, line 223 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 225 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 225 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * spanish_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void spanish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * spanish_ISO_8859_1_create_env(void); +extern void spanish_ISO_8859_1_close_env(struct SN_env * z); + +extern int spanish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,307 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int swedish_ISO_8859_1_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * swedish_ISO_8859_1_create_env(void); +extern void swedish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[4] = { 'a', 'r', 'n', 'a' }; +static symbol s_0_2[4] = { 'e', 'r', 'n', 'a' }; +static symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' }; +static symbol s_0_4[4] = { 'o', 'r', 'n', 'a' }; +static symbol s_0_5[2] = { 'a', 'd' }; +static symbol s_0_6[1] = { 'e' }; +static symbol s_0_7[3] = { 'a', 'd', 'e' }; +static symbol s_0_8[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_9[4] = { 'a', 'r', 'n', 'e' }; +static symbol s_0_10[3] = { 'a', 'r', 'e' }; +static symbol s_0_11[4] = { 'a', 's', 't', 'e' }; +static symbol s_0_12[2] = { 'e', 'n' }; +static symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' }; +static symbol s_0_14[4] = { 'a', 'r', 'e', 'n' }; +static symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_16[3] = { 'e', 'r', 'n' }; +static symbol s_0_17[2] = { 'a', 'r' }; +static symbol s_0_18[2] = { 'e', 'r' }; +static symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_20[2] = { 'o', 'r' }; +static symbol s_0_21[1] = { 's' }; +static symbol s_0_22[2] = { 'a', 's' }; +static symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' }; +static symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' }; +static symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' }; +static symbol s_0_26[2] = { 'e', 's' }; +static symbol s_0_27[4] = { 'a', 'd', 'e', 's' }; +static symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_0_29[3] = { 'e', 'n', 's' }; +static symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' }; +static symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_32[4] = { 'e', 'r', 'n', 's' }; +static symbol s_0_33[2] = { 'a', 't' }; +static symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' }; +static symbol s_0_35[3] = { 'h', 'e', 't' }; +static symbol s_0_36[3] = { 'a', 's', 't' }; + +static struct among a_0[37] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 7, s_0_3, 2, 1, 0}, +/* 4 */ { 4, s_0_4, 0, 1, 0}, +/* 5 */ { 2, s_0_5, -1, 1, 0}, +/* 6 */ { 1, s_0_6, -1, 1, 0}, +/* 7 */ { 3, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 6, 1, 0}, +/* 9 */ { 4, s_0_9, 6, 1, 0}, +/* 10 */ { 3, s_0_10, 6, 1, 0}, +/* 11 */ { 4, s_0_11, 6, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 4, s_0_14, 12, 1, 0}, +/* 15 */ { 5, s_0_15, 12, 1, 0}, +/* 16 */ { 3, s_0_16, -1, 1, 0}, +/* 17 */ { 2, s_0_17, -1, 1, 0}, +/* 18 */ { 2, s_0_18, -1, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 2, s_0_20, -1, 1, 0}, +/* 21 */ { 1, s_0_21, -1, 2, 0}, +/* 22 */ { 2, s_0_22, 21, 1, 0}, +/* 23 */ { 5, s_0_23, 22, 1, 0}, +/* 24 */ { 5, s_0_24, 22, 1, 0}, +/* 25 */ { 5, s_0_25, 22, 1, 0}, +/* 26 */ { 2, s_0_26, 21, 1, 0}, +/* 27 */ { 4, s_0_27, 26, 1, 0}, +/* 28 */ { 5, s_0_28, 26, 1, 0}, +/* 29 */ { 3, s_0_29, 21, 1, 0}, +/* 30 */ { 5, s_0_30, 29, 1, 0}, +/* 31 */ { 6, s_0_31, 29, 1, 0}, +/* 32 */ { 4, s_0_32, 21, 1, 0}, +/* 33 */ { 2, s_0_33, -1, 1, 0}, +/* 34 */ { 5, s_0_34, -1, 1, 0}, +/* 35 */ { 3, s_0_35, -1, 1, 0}, +/* 36 */ { 3, s_0_36, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 'd' }; +static symbol s_1_1[2] = { 'g', 'd' }; +static symbol s_1_2[2] = { 'n', 'n' }; +static symbol s_1_3[2] = { 'd', 't' }; +static symbol s_1_4[2] = { 'g', 't' }; +static symbol s_1_5[2] = { 'k', 't' }; +static symbol s_1_6[2] = { 't', 't' }; + +static struct among a_1[7] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 2, s_1_6, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[3] = { 'e', 'l', 's' }; +static symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' }; +static symbol s_2_4[4] = { 'l', 0xF6, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 1, 0}, +/* 3 */ { 5, s_2_3, -1, 3, 0}, +/* 4 */ { 4, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; + +static unsigned char g_s_ending[] = { 119, 127, 149 }; + +static symbol s_0[] = { 'l', 0xF6, 's' }; +static symbol s_1[] = { 'f', 'u', 'l', 'l' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 29 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 29 */ + } + z->I[1] = z->c; /* setmark x, line 29 */ + z->c = c_test; + } + while(1) { /* goto, line 30 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 30 */ + } + while(1) { /* gopast, line 30 */ + if (!(out_grouping(z, g_v, 97, 246))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 30 */ + } + z->I[0] = z->c; /* setmark p1, line 30 */ + /* try, line 31 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 37 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 37 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 37 */ + among_var = find_among_b(z, a_0, 37); /* substring, line 37 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 37 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 98, 121))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m3; /* setlimit, line 50 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 50 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* and, line 52 */ + if (!(find_among_b(z, a_1, 7))) { z->lb = m3; return 0; } /* among, line 51 */ + z->c = z->l - m; + z->ket = z->c; /* [, line 52 */ + if (z->c <= z->lb) { z->lb = m3; return 0; } + z->c--; /* next, line 52 */ + z->bra = z->c; /* ], line 52 */ + { int ret; + ret = slice_del(z); /* delete, line 52 */ + if (ret < 0) return ret; + } + } + z->lb = m3; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 56 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 56 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 57 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_0); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_1); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +extern int swedish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 66 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 67 */ + + { int m = z->l - z->c; (void) m; /* do, line 68 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 68 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 69 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 69 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 70 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * swedish_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void swedish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * swedish_ISO_8859_1_create_env(void); +extern void swedish_ISO_8859_1_close_env(struct SN_env * z); + +extern int swedish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,701 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int russian_KOI8_R_stem(struct SN_env * z); +static int r_tidy_up(struct SN_env * z); +static int r_derivational(struct SN_env * z); +static int r_noun(struct SN_env * z); +static int r_verb(struct SN_env * z); +static int r_reflexive(struct SN_env * z); +static int r_adjectival(struct SN_env * z); +static int r_adjective(struct SN_env * z); +static int r_perfective_gerund(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * russian_KOI8_R_create_env(void); +extern void russian_KOI8_R_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 0xD7, 0xDB, 0xC9 }; +static symbol s_0_1[4] = { 0xC9, 0xD7, 0xDB, 0xC9 }; +static symbol s_0_2[4] = { 0xD9, 0xD7, 0xDB, 0xC9 }; +static symbol s_0_3[1] = { 0xD7 }; +static symbol s_0_4[2] = { 0xC9, 0xD7 }; +static symbol s_0_5[2] = { 0xD9, 0xD7 }; +static symbol s_0_6[5] = { 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; +static symbol s_0_7[6] = { 0xC9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; +static symbol s_0_8[6] = { 0xD9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; + +static struct among a_0[9] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 2, s_0_4, 3, 2, 0}, +/* 5 */ { 2, s_0_5, 3, 2, 0}, +/* 6 */ { 5, s_0_6, -1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 2, 0}, +/* 8 */ { 6, s_0_8, 6, 2, 0} +}; + +static symbol s_1_0[2] = { 0xC0, 0xC0 }; +static symbol s_1_1[2] = { 0xC5, 0xC0 }; +static symbol s_1_2[2] = { 0xCF, 0xC0 }; +static symbol s_1_3[2] = { 0xD5, 0xC0 }; +static symbol s_1_4[2] = { 0xC5, 0xC5 }; +static symbol s_1_5[2] = { 0xC9, 0xC5 }; +static symbol s_1_6[2] = { 0xCF, 0xC5 }; +static symbol s_1_7[2] = { 0xD9, 0xC5 }; +static symbol s_1_8[2] = { 0xC9, 0xC8 }; +static symbol s_1_9[2] = { 0xD9, 0xC8 }; +static symbol s_1_10[3] = { 0xC9, 0xCD, 0xC9 }; +static symbol s_1_11[3] = { 0xD9, 0xCD, 0xC9 }; +static symbol s_1_12[2] = { 0xC5, 0xCA }; +static symbol s_1_13[2] = { 0xC9, 0xCA }; +static symbol s_1_14[2] = { 0xCF, 0xCA }; +static symbol s_1_15[2] = { 0xD9, 0xCA }; +static symbol s_1_16[2] = { 0xC5, 0xCD }; +static symbol s_1_17[2] = { 0xC9, 0xCD }; +static symbol s_1_18[2] = { 0xCF, 0xCD }; +static symbol s_1_19[2] = { 0xD9, 0xCD }; +static symbol s_1_20[3] = { 0xC5, 0xC7, 0xCF }; +static symbol s_1_21[3] = { 0xCF, 0xC7, 0xCF }; +static symbol s_1_22[2] = { 0xC1, 0xD1 }; +static symbol s_1_23[2] = { 0xD1, 0xD1 }; +static symbol s_1_24[3] = { 0xC5, 0xCD, 0xD5 }; +static symbol s_1_25[3] = { 0xCF, 0xCD, 0xD5 }; + +static struct among a_1[26] = +{ +/* 0 */ { 2, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 2, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0}, +/* 6 */ { 2, s_1_6, -1, 1, 0}, +/* 7 */ { 2, s_1_7, -1, 1, 0}, +/* 8 */ { 2, s_1_8, -1, 1, 0}, +/* 9 */ { 2, s_1_9, -1, 1, 0}, +/* 10 */ { 3, s_1_10, -1, 1, 0}, +/* 11 */ { 3, s_1_11, -1, 1, 0}, +/* 12 */ { 2, s_1_12, -1, 1, 0}, +/* 13 */ { 2, s_1_13, -1, 1, 0}, +/* 14 */ { 2, s_1_14, -1, 1, 0}, +/* 15 */ { 2, s_1_15, -1, 1, 0}, +/* 16 */ { 2, s_1_16, -1, 1, 0}, +/* 17 */ { 2, s_1_17, -1, 1, 0}, +/* 18 */ { 2, s_1_18, -1, 1, 0}, +/* 19 */ { 2, s_1_19, -1, 1, 0}, +/* 20 */ { 3, s_1_20, -1, 1, 0}, +/* 21 */ { 3, s_1_21, -1, 1, 0}, +/* 22 */ { 2, s_1_22, -1, 1, 0}, +/* 23 */ { 2, s_1_23, -1, 1, 0}, +/* 24 */ { 3, s_1_24, -1, 1, 0}, +/* 25 */ { 3, s_1_25, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 0xC5, 0xCD }; +static symbol s_2_1[2] = { 0xCE, 0xCE }; +static symbol s_2_2[2] = { 0xD7, 0xDB }; +static symbol s_2_3[3] = { 0xC9, 0xD7, 0xDB }; +static symbol s_2_4[3] = { 0xD9, 0xD7, 0xDB }; +static symbol s_2_5[1] = { 0xDD }; +static symbol s_2_6[2] = { 0xC0, 0xDD }; +static symbol s_2_7[3] = { 0xD5, 0xC0, 0xDD }; + +static struct among a_2[8] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 2, 0}, +/* 4 */ { 3, s_2_4, 2, 2, 0}, +/* 5 */ { 1, s_2_5, -1, 1, 0}, +/* 6 */ { 2, s_2_6, 5, 1, 0}, +/* 7 */ { 3, s_2_7, 6, 2, 0} +}; + +static symbol s_3_0[2] = { 0xD3, 0xD1 }; +static symbol s_3_1[2] = { 0xD3, 0xD8 }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 2, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[1] = { 0xC0 }; +static symbol s_4_1[2] = { 0xD5, 0xC0 }; +static symbol s_4_2[2] = { 0xCC, 0xC1 }; +static symbol s_4_3[3] = { 0xC9, 0xCC, 0xC1 }; +static symbol s_4_4[3] = { 0xD9, 0xCC, 0xC1 }; +static symbol s_4_5[2] = { 0xCE, 0xC1 }; +static symbol s_4_6[3] = { 0xC5, 0xCE, 0xC1 }; +static symbol s_4_7[3] = { 0xC5, 0xD4, 0xC5 }; +static symbol s_4_8[3] = { 0xC9, 0xD4, 0xC5 }; +static symbol s_4_9[3] = { 0xCA, 0xD4, 0xC5 }; +static symbol s_4_10[4] = { 0xC5, 0xCA, 0xD4, 0xC5 }; +static symbol s_4_11[4] = { 0xD5, 0xCA, 0xD4, 0xC5 }; +static symbol s_4_12[2] = { 0xCC, 0xC9 }; +static symbol s_4_13[3] = { 0xC9, 0xCC, 0xC9 }; +static symbol s_4_14[3] = { 0xD9, 0xCC, 0xC9 }; +static symbol s_4_15[1] = { 0xCA }; +static symbol s_4_16[2] = { 0xC5, 0xCA }; +static symbol s_4_17[2] = { 0xD5, 0xCA }; +static symbol s_4_18[1] = { 0xCC }; +static symbol s_4_19[2] = { 0xC9, 0xCC }; +static symbol s_4_20[2] = { 0xD9, 0xCC }; +static symbol s_4_21[2] = { 0xC5, 0xCD }; +static symbol s_4_22[2] = { 0xC9, 0xCD }; +static symbol s_4_23[2] = { 0xD9, 0xCD }; +static symbol s_4_24[1] = { 0xCE }; +static symbol s_4_25[2] = { 0xC5, 0xCE }; +static symbol s_4_26[2] = { 0xCC, 0xCF }; +static symbol s_4_27[3] = { 0xC9, 0xCC, 0xCF }; +static symbol s_4_28[3] = { 0xD9, 0xCC, 0xCF }; +static symbol s_4_29[2] = { 0xCE, 0xCF }; +static symbol s_4_30[3] = { 0xC5, 0xCE, 0xCF }; +static symbol s_4_31[3] = { 0xCE, 0xCE, 0xCF }; +static symbol s_4_32[2] = { 0xC0, 0xD4 }; +static symbol s_4_33[3] = { 0xD5, 0xC0, 0xD4 }; +static symbol s_4_34[2] = { 0xC5, 0xD4 }; +static symbol s_4_35[3] = { 0xD5, 0xC5, 0xD4 }; +static symbol s_4_36[2] = { 0xC9, 0xD4 }; +static symbol s_4_37[2] = { 0xD1, 0xD4 }; +static symbol s_4_38[2] = { 0xD9, 0xD4 }; +static symbol s_4_39[2] = { 0xD4, 0xD8 }; +static symbol s_4_40[3] = { 0xC9, 0xD4, 0xD8 }; +static symbol s_4_41[3] = { 0xD9, 0xD4, 0xD8 }; +static symbol s_4_42[3] = { 0xC5, 0xDB, 0xD8 }; +static symbol s_4_43[3] = { 0xC9, 0xDB, 0xD8 }; +static symbol s_4_44[2] = { 0xCE, 0xD9 }; +static symbol s_4_45[3] = { 0xC5, 0xCE, 0xD9 }; + +static struct among a_4[46] = +{ +/* 0 */ { 1, s_4_0, -1, 2, 0}, +/* 1 */ { 2, s_4_1, 0, 2, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0}, +/* 3 */ { 3, s_4_3, 2, 2, 0}, +/* 4 */ { 3, s_4_4, 2, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 1, 0}, +/* 6 */ { 3, s_4_6, 5, 2, 0}, +/* 7 */ { 3, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 2, 0}, +/* 9 */ { 3, s_4_9, -1, 1, 0}, +/* 10 */ { 4, s_4_10, 9, 2, 0}, +/* 11 */ { 4, s_4_11, 9, 2, 0}, +/* 12 */ { 2, s_4_12, -1, 1, 0}, +/* 13 */ { 3, s_4_13, 12, 2, 0}, +/* 14 */ { 3, s_4_14, 12, 2, 0}, +/* 15 */ { 1, s_4_15, -1, 1, 0}, +/* 16 */ { 2, s_4_16, 15, 2, 0}, +/* 17 */ { 2, s_4_17, 15, 2, 0}, +/* 18 */ { 1, s_4_18, -1, 1, 0}, +/* 19 */ { 2, s_4_19, 18, 2, 0}, +/* 20 */ { 2, s_4_20, 18, 2, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 2, s_4_22, -1, 2, 0}, +/* 23 */ { 2, s_4_23, -1, 2, 0}, +/* 24 */ { 1, s_4_24, -1, 1, 0}, +/* 25 */ { 2, s_4_25, 24, 2, 0}, +/* 26 */ { 2, s_4_26, -1, 1, 0}, +/* 27 */ { 3, s_4_27, 26, 2, 0}, +/* 28 */ { 3, s_4_28, 26, 2, 0}, +/* 29 */ { 2, s_4_29, -1, 1, 0}, +/* 30 */ { 3, s_4_30, 29, 2, 0}, +/* 31 */ { 3, s_4_31, 29, 1, 0}, +/* 32 */ { 2, s_4_32, -1, 1, 0}, +/* 33 */ { 3, s_4_33, 32, 2, 0}, +/* 34 */ { 2, s_4_34, -1, 1, 0}, +/* 35 */ { 3, s_4_35, 34, 2, 0}, +/* 36 */ { 2, s_4_36, -1, 2, 0}, +/* 37 */ { 2, s_4_37, -1, 2, 0}, +/* 38 */ { 2, s_4_38, -1, 2, 0}, +/* 39 */ { 2, s_4_39, -1, 1, 0}, +/* 40 */ { 3, s_4_40, 39, 2, 0}, +/* 41 */ { 3, s_4_41, 39, 2, 0}, +/* 42 */ { 3, s_4_42, -1, 1, 0}, +/* 43 */ { 3, s_4_43, -1, 2, 0}, +/* 44 */ { 2, s_4_44, -1, 1, 0}, +/* 45 */ { 3, s_4_45, 44, 2, 0} +}; + +static symbol s_5_0[1] = { 0xC0 }; +static symbol s_5_1[2] = { 0xC9, 0xC0 }; +static symbol s_5_2[2] = { 0xD8, 0xC0 }; +static symbol s_5_3[1] = { 0xC1 }; +static symbol s_5_4[1] = { 0xC5 }; +static symbol s_5_5[2] = { 0xC9, 0xC5 }; +static symbol s_5_6[2] = { 0xD8, 0xC5 }; +static symbol s_5_7[2] = { 0xC1, 0xC8 }; +static symbol s_5_8[2] = { 0xD1, 0xC8 }; +static symbol s_5_9[3] = { 0xC9, 0xD1, 0xC8 }; +static symbol s_5_10[1] = { 0xC9 }; +static symbol s_5_11[2] = { 0xC5, 0xC9 }; +static symbol s_5_12[2] = { 0xC9, 0xC9 }; +static symbol s_5_13[3] = { 0xC1, 0xCD, 0xC9 }; +static symbol s_5_14[3] = { 0xD1, 0xCD, 0xC9 }; +static symbol s_5_15[4] = { 0xC9, 0xD1, 0xCD, 0xC9 }; +static symbol s_5_16[1] = { 0xCA }; +static symbol s_5_17[2] = { 0xC5, 0xCA }; +static symbol s_5_18[3] = { 0xC9, 0xC5, 0xCA }; +static symbol s_5_19[2] = { 0xC9, 0xCA }; +static symbol s_5_20[2] = { 0xCF, 0xCA }; +static symbol s_5_21[2] = { 0xC1, 0xCD }; +static symbol s_5_22[2] = { 0xC5, 0xCD }; +static symbol s_5_23[3] = { 0xC9, 0xC5, 0xCD }; +static symbol s_5_24[2] = { 0xCF, 0xCD }; +static symbol s_5_25[2] = { 0xD1, 0xCD }; +static symbol s_5_26[3] = { 0xC9, 0xD1, 0xCD }; +static symbol s_5_27[1] = { 0xCF }; +static symbol s_5_28[1] = { 0xD1 }; +static symbol s_5_29[2] = { 0xC9, 0xD1 }; +static symbol s_5_30[2] = { 0xD8, 0xD1 }; +static symbol s_5_31[1] = { 0xD5 }; +static symbol s_5_32[2] = { 0xC5, 0xD7 }; +static symbol s_5_33[2] = { 0xCF, 0xD7 }; +static symbol s_5_34[1] = { 0xD8 }; +static symbol s_5_35[1] = { 0xD9 }; + +static struct among a_5[36] = +{ +/* 0 */ { 1, s_5_0, -1, 1, 0}, +/* 1 */ { 2, s_5_1, 0, 1, 0}, +/* 2 */ { 2, s_5_2, 0, 1, 0}, +/* 3 */ { 1, s_5_3, -1, 1, 0}, +/* 4 */ { 1, s_5_4, -1, 1, 0}, +/* 5 */ { 2, s_5_5, 4, 1, 0}, +/* 6 */ { 2, s_5_6, 4, 1, 0}, +/* 7 */ { 2, s_5_7, -1, 1, 0}, +/* 8 */ { 2, s_5_8, -1, 1, 0}, +/* 9 */ { 3, s_5_9, 8, 1, 0}, +/* 10 */ { 1, s_5_10, -1, 1, 0}, +/* 11 */ { 2, s_5_11, 10, 1, 0}, +/* 12 */ { 2, s_5_12, 10, 1, 0}, +/* 13 */ { 3, s_5_13, 10, 1, 0}, +/* 14 */ { 3, s_5_14, 10, 1, 0}, +/* 15 */ { 4, s_5_15, 14, 1, 0}, +/* 16 */ { 1, s_5_16, -1, 1, 0}, +/* 17 */ { 2, s_5_17, 16, 1, 0}, +/* 18 */ { 3, s_5_18, 17, 1, 0}, +/* 19 */ { 2, s_5_19, 16, 1, 0}, +/* 20 */ { 2, s_5_20, 16, 1, 0}, +/* 21 */ { 2, s_5_21, -1, 1, 0}, +/* 22 */ { 2, s_5_22, -1, 1, 0}, +/* 23 */ { 3, s_5_23, 22, 1, 0}, +/* 24 */ { 2, s_5_24, -1, 1, 0}, +/* 25 */ { 2, s_5_25, -1, 1, 0}, +/* 26 */ { 3, s_5_26, 25, 1, 0}, +/* 27 */ { 1, s_5_27, -1, 1, 0}, +/* 28 */ { 1, s_5_28, -1, 1, 0}, +/* 29 */ { 2, s_5_29, 28, 1, 0}, +/* 30 */ { 2, s_5_30, 28, 1, 0}, +/* 31 */ { 1, s_5_31, -1, 1, 0}, +/* 32 */ { 2, s_5_32, -1, 1, 0}, +/* 33 */ { 2, s_5_33, -1, 1, 0}, +/* 34 */ { 1, s_5_34, -1, 1, 0}, +/* 35 */ { 1, s_5_35, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 0xCF, 0xD3, 0xD4 }; +static symbol s_6_1[4] = { 0xCF, 0xD3, 0xD4, 0xD8 }; + +static struct among a_6[2] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 4, s_6_1, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 0xC5, 0xCA, 0xDB, 0xC5 }; +static symbol s_7_1[1] = { 0xCE }; +static symbol s_7_2[1] = { 0xD8 }; +static symbol s_7_3[3] = { 0xC5, 0xCA, 0xDB }; + +static struct among a_7[4] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 2, 0}, +/* 2 */ { 1, s_7_2, -1, 3, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 35, 130, 34, 18 }; + +static symbol s_0[] = { 0xC1 }; +static symbol s_1[] = { 0xD1 }; +static symbol s_2[] = { 0xC1 }; +static symbol s_3[] = { 0xD1 }; +static symbol s_4[] = { 0xC1 }; +static symbol s_5[] = { 0xD1 }; +static symbol s_6[] = { 0xCE }; +static symbol s_7[] = { 0xCE }; +static symbol s_8[] = { 0xCE }; +static symbol s_9[] = { 0xC9 }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 63 */ + while(1) { /* gopast, line 64 */ + if (!(in_grouping(z, g_v, 192, 220))) goto lab1; + break; + lab1: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 64 */ + } + z->I[0] = z->c; /* setmark pV, line 64 */ + while(1) { /* gopast, line 64 */ + if (!(out_grouping(z, g_v, 192, 220))) goto lab2; + break; + lab2: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 64 */ + } + while(1) { /* gopast, line 65 */ + if (!(in_grouping(z, g_v, 192, 220))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 65 */ + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping(z, g_v, 192, 220))) goto lab4; + break; + lab4: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 65 */ + } + z->I[1] = z->c; /* setmark p2, line 65 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_perfective_gerund(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_0, 9); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 78 */ + if (!(eq_s_b(z, 1, s_0))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_1))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjective(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 90 */ + among_var = find_among_b(z, a_1, 26); /* substring, line 90 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 90 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjectival(struct SN_env * z) { + int among_var; + { int ret = r_adjective(z); + if (ret == 0) return 0; /* call adjective, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 8); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 117 */ + if (!(eq_s_b(z, 1, s_2))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_3))) { z->c = z->l - m; goto lab0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 117 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + return 1; +} + +static int r_reflexive(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 131 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 131 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 131 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 139 */ + among_var = find_among_b(z, a_4, 46); /* substring, line 139 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 139 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 145 */ + if (!(eq_s_b(z, 1, s_4))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_5))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 145 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 153 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_noun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 162 */ + among_var = find_among_b(z, a_5, 36); /* substring, line 162 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 162 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 169 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_derivational(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 178 */ + among_var = find_among_b(z, a_6, 2); /* substring, line 178 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 178 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 178 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_tidy_up(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 186 */ + among_var = find_among_b(z, a_7, 4); /* substring, line 186 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 186 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 191 */ + if (!(eq_s_b(z, 1, s_6))) return 0; + z->bra = z->c; /* ], line 191 */ + if (!(eq_s_b(z, 1, s_7))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 191 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(eq_s_b(z, 1, s_8))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int russian_KOI8_R_stem(struct SN_env * z) { + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m3; /* setlimit, line 204 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 204 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_perfective_gerund(z); + if (ret == 0) goto lab3; /* call perfective_gerund, line 206 */ + if (ret < 0) return ret; + } + goto lab2; + lab3: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 207 */ + { int ret = r_reflexive(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 207 */ + if (ret < 0) return ret; + } + lab4: + ; + } + { int m = z->l - z->c; (void) m; /* or, line 208 */ + { int ret = r_adjectival(z); + if (ret == 0) goto lab6; /* call adjectival, line 208 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb(z); + if (ret == 0) goto lab7; /* call verb, line 208 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_noun(z); + if (ret == 0) goto lab1; /* call noun, line 208 */ + if (ret < 0) return ret; + } + } + lab5: + ; + } + lab2: + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* try, line 211 */ + z->ket = z->c; /* [, line 211 */ + if (!(eq_s_b(z, 1, s_9))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 211 */ + { int ret; + ret = slice_del(z); /* delete, line 211 */ + if (ret < 0) return ret; + } + lab8: + ; + } + { int m = z->l - z->c; (void) m; /* do, line 214 */ + { int ret = r_derivational(z); + if (ret == 0) goto lab9; /* call derivational, line 214 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 215 */ + { int ret = r_tidy_up(z); + if (ret == 0) goto lab10; /* call tidy_up, line 215 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + z->lb = m3; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * russian_KOI8_R_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void russian_KOI8_R_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * russian_KOI8_R_create_env(void); +extern void russian_KOI8_R_close_env(struct SN_env * z); + +extern int russian_KOI8_R_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,344 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int danish_UTF_8_stem(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * danish_UTF_8_create_env(void); +extern void danish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 'h', 'e', 'd' }; +static symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' }; +static symbol s_0_2[4] = { 'e', 'r', 'e', 'd' }; +static symbol s_0_3[1] = { 'e' }; +static symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' }; +static symbol s_0_5[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' }; +static symbol s_0_7[3] = { 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 'n', 'e' }; +static symbol s_0_9[3] = { 'e', 'r', 'e' }; +static symbol s_0_10[2] = { 'e', 'n' }; +static symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_0_12[4] = { 'e', 'r', 'e', 'n' }; +static symbol s_0_13[2] = { 'e', 'r' }; +static symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' }; +static symbol s_0_15[4] = { 'e', 'r', 'e', 'r' }; +static symbol s_0_16[1] = { 's' }; +static symbol s_0_17[4] = { 'h', 'e', 'd', 's' }; +static symbol s_0_18[2] = { 'e', 's' }; +static symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_21[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' }; +static symbol s_0_23[4] = { 'e', 'r', 'e', 's' }; +static symbol s_0_24[3] = { 'e', 'n', 's' }; +static symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' }; +static symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' }; +static symbol s_0_27[3] = { 'e', 'r', 's' }; +static symbol s_0_28[3] = { 'e', 't', 's' }; +static symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' }; +static symbol s_0_30[2] = { 'e', 't' }; +static symbol s_0_31[4] = { 'e', 'r', 'e', 't' }; + +static struct among a_0[32] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 5, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 5, s_0_4, 3, 1, 0}, +/* 5 */ { 4, s_0_5, 3, 1, 0}, +/* 6 */ { 6, s_0_6, 5, 1, 0}, +/* 7 */ { 3, s_0_7, 3, 1, 0}, +/* 8 */ { 4, s_0_8, 3, 1, 0}, +/* 9 */ { 3, s_0_9, 3, 1, 0}, +/* 10 */ { 2, s_0_10, -1, 1, 0}, +/* 11 */ { 5, s_0_11, 10, 1, 0}, +/* 12 */ { 4, s_0_12, 10, 1, 0}, +/* 13 */ { 2, s_0_13, -1, 1, 0}, +/* 14 */ { 5, s_0_14, 13, 1, 0}, +/* 15 */ { 4, s_0_15, 13, 1, 0}, +/* 16 */ { 1, s_0_16, -1, 2, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 2, s_0_18, 16, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 4, s_0_21, 18, 1, 0}, +/* 22 */ { 5, s_0_22, 18, 1, 0}, +/* 23 */ { 4, s_0_23, 18, 1, 0}, +/* 24 */ { 3, s_0_24, 16, 1, 0}, +/* 25 */ { 6, s_0_25, 24, 1, 0}, +/* 26 */ { 5, s_0_26, 24, 1, 0}, +/* 27 */ { 3, s_0_27, 16, 1, 0}, +/* 28 */ { 3, s_0_28, 16, 1, 0}, +/* 29 */ { 5, s_0_29, 28, 1, 0}, +/* 30 */ { 2, s_0_30, -1, 1, 0}, +/* 31 */ { 4, s_0_31, 30, 1, 0} +}; + +static symbol s_1_0[2] = { 'g', 'd' }; +static symbol s_1_1[2] = { 'd', 't' }; +static symbol s_1_2[2] = { 'g', 't' }; +static symbol s_1_3[2] = { 'k', 't' }; + +static struct among a_1[4] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'l', 's' }; +static symbol s_2_4[5] = { 'l', 0xC3, 0xB8, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 4, s_2_2, 1, 1, 0}, +/* 3 */ { 3, s_2_3, -1, 1, 0}, +/* 4 */ { 5, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; + +static symbol s_0[] = { 's', 't' }; +static symbol s_1[] = { 'i', 'g' }; +static symbol s_2[] = { 'l', 0xC3, 0xB8, 's' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 33 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 33 */ + } + z->I[1] = z->c; /* setmark x, line 33 */ + z->c = c_test; + } + while(1) { /* goto, line 34 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 34 */ + } + } + while(1) { /* gopast, line 34 */ + if (!(out_grouping_U(z, g_v, 97, 248))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 34 */ + } + } + z->I[0] = z->c; /* setmark p1, line 34 */ + /* try, line 35 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 41 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 41 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 41 */ + among_var = find_among_b(z, a_0, 32); /* substring, line 41 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 41 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 48 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 97, 229))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 50 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 55 */ + { int m3; /* setlimit, line 56 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 56 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */ + z->bra = z->c; /* ], line 56 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 62 */ + } + z->bra = z->c; /* ], line 62 */ + { int ret; + ret = slice_del(z); /* delete, line 62 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 66 */ + z->ket = z->c; /* [, line 66 */ + if (!(eq_s_b(z, 2, s_0))) goto lab0; + z->bra = z->c; /* ], line 66 */ + if (!(eq_s_b(z, 2, s_1))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = z->l - m; + } + { int m3; /* setlimit, line 67 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 67 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 67 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 67 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 67 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 70 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab1; /* call consonant_pair, line 70 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_2); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m3; /* setlimit, line 76 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 76 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 76 */ + if (!(out_grouping_b_U(z, g_v, 97, 248))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 76 */ + z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */ + if (z->S[0] == 0) return -1; /* -> ch, line 76 */ + z->lb = m3; + } + if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */ + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int danish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 84 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 84 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 85 */ + + { int m = z->l - z->c; (void) m; /* do, line 86 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 86 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 87 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 87 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 88 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 88 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 89 */ + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 89 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * danish_UTF_8_create_env(void) { return SN_create_env(1, 2, 0); } + +extern void danish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * danish_UTF_8_create_env(void); +extern void danish_UTF_8_close_env(struct SN_env * z); + +extern int danish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,653 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int dutch_UTF_8_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_en_ending(struct SN_env * z); +static int r_e_ending(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * dutch_UTF_8_create_env(void); +extern void dutch_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA1 }; +static symbol s_0_2[2] = { 0xC3, 0xA4 }; +static symbol s_0_3[2] = { 0xC3, 0xA9 }; +static symbol s_0_4[2] = { 0xC3, 0xAB }; +static symbol s_0_5[2] = { 0xC3, 0xAD }; +static symbol s_0_6[2] = { 0xC3, 0xAF }; +static symbol s_0_7[2] = { 0xC3, 0xB3 }; +static symbol s_0_8[2] = { 0xC3, 0xB6 }; +static symbol s_0_9[2] = { 0xC3, 0xBA }; +static symbol s_0_10[2] = { 0xC3, 0xBC }; + +static struct among a_0[11] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 2, 0}, +/* 4 */ { 2, s_0_4, 0, 2, 0}, +/* 5 */ { 2, s_0_5, 0, 3, 0}, +/* 6 */ { 2, s_0_6, 0, 3, 0}, +/* 7 */ { 2, s_0_7, 0, 4, 0}, +/* 8 */ { 2, s_0_8, 0, 4, 0}, +/* 9 */ { 2, s_0_9, 0, 5, 0}, +/* 10 */ { 2, s_0_10, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'Y' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 2, 0}, +/* 2 */ { 1, s_1_2, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'd', 'd' }; +static symbol s_2_1[2] = { 'k', 'k' }; +static symbol s_2_2[2] = { 't', 't' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0} +}; + +static symbol s_3_0[3] = { 'e', 'n', 'e' }; +static symbol s_3_1[2] = { 's', 'e' }; +static symbol s_3_2[2] = { 'e', 'n' }; +static symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_3_4[1] = { 's' }; + +static struct among a_3[5] = +{ +/* 0 */ { 3, s_3_0, -1, 2, 0}, +/* 1 */ { 2, s_3_1, -1, 3, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 5, s_3_3, 2, 1, 0}, +/* 4 */ { 1, s_3_4, -1, 3, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'j', 'k' }; +static symbol s_4_4[4] = { 'b', 'a', 'a', 'r' }; +static symbol s_4_5[3] = { 'b', 'a', 'r' }; + +static struct among a_4[6] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 4, 0}, +/* 5 */ { 3, s_4_5, -1, 5, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'o', 'o' }; +static symbol s_5_3[2] = { 'u', 'u' }; + +static struct among a_5[4] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'I' }; +static symbol s_9[] = { 'y' }; +static symbol s_10[] = { 'Y' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'i' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'g', 'e', 'm' }; +static symbol s_15[] = { 'h', 'e', 'i', 'd' }; +static symbol s_16[] = { 'h', 'e', 'i', 'd' }; +static symbol s_17[] = { 'c' }; +static symbol s_18[] = { 'e', 'n' }; +static symbol s_19[] = { 'i', 'g' }; +static symbol s_20[] = { 'e' }; +static symbol s_21[] = { 'e' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 42 */ + while(1) { /* repeat, line 42 */ + int c = z->c; + z->bra = z->c; /* [, line 43 */ + among_var = find_among(z, a_0, 11); /* substring, line 43 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 43 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 45 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 47 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 49 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 54 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + { int c = z->c; /* try, line 57 */ + z->bra = z->c; /* [, line 57 */ + if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; } + z->ket = z->c; /* ], line 57 */ + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 57 */ + if (ret < 0) return ret; + } + lab1: + ; + } + while(1) { /* repeat, line 58 */ + int c = z->c; + while(1) { /* goto, line 58 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3; + z->bra = z->c; /* [, line 59 */ + { int c = z->c; /* or, line 59 */ + if (!(eq_s(z, 1, s_7))) goto lab5; + z->ket = z->c; /* ], line 59 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_9))) goto lab3; + z->ket = z->c; /* ], line 60 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 60 */ + if (ret < 0) return ret; + } + } + lab4: + z->c = c; + break; + lab3: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* goto, line 58 */ + } + } + continue; + lab2: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* gopast, line 69 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 69 */ + } + } + while(1) { /* gopast, line 69 */ + if (!(out_grouping_U(z, g_v, 97, 232))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 69 */ + } + } + z->I[0] = z->c; /* setmark p1, line 69 */ + /* try, line 70 */ + if (!(z->I[0] < 3)) goto lab2; + z->I[0] = 3; +lab2: + while(1) { /* gopast, line 71 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 71 */ + } + } + while(1) { /* gopast, line 71 */ + if (!(out_grouping_U(z, g_v, 97, 232))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 71 */ + } + } + z->I[1] = z->c; /* setmark p2, line 71 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 75 */ + int c = z->c; + z->bra = z->c; /* [, line 77 */ + among_var = find_among(z, a_1, 3); /* substring, line 77 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 77 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 79 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 80 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 91 */ + if (!(find_among_b(z, a_2, 3))) return 0; /* among, line 91 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 91 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 91 */ + } + z->bra = z->c; /* ], line 91 */ + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_e_ending(struct SN_env * z) { + z->B[0] = 0; /* unset e_found, line 95 */ + z->ket = z->c; /* [, line 96 */ + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 96 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 96 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 96 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) return 0; + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set e_found, line 97 */ + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 98 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_en_ending(struct SN_env * z) { + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* and, line 102 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) return 0; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* not, line 102 */ + if (!(eq_s_b(z, 3, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + } + { int ret; + ret = slice_del(z); /* delete, line 102 */ + if (ret < 0) return ret; + } + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 107 */ + z->ket = z->c; /* [, line 108 */ + among_var = find_among_b(z, a_3, 5); /* substring, line 108 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 108 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_en_ending(z); + if (ret == 0) goto lab0; /* call en_ending, line 113 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 116 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b_U(z, g_v_j, 97, 232))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 116 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 120 */ + { int ret = r_e_ending(z); + if (ret == 0) goto lab1; /* call e_ending, line 120 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 122 */ + z->ket = z->c; /* [, line 122 */ + if (!(eq_s_b(z, 4, s_16))) goto lab2; + z->bra = z->c; /* ], line 122 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 122 */ + if (!(eq_s_b(z, 1, s_17))) goto lab3; + goto lab2; + lab3: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 123 */ + if (!(eq_s_b(z, 2, s_18))) goto lab2; + z->bra = z->c; /* ], line 123 */ + { int ret = r_en_ending(z); + if (ret == 0) goto lab2; /* call en_ending, line 123 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 127 */ + if (!(among_var)) goto lab4; + z->bra = z->c; /* ], line 127 */ + switch(among_var) { + case 0: goto lab4; + case 1: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 129 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 129 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 130 */ + z->ket = z->c; /* [, line 130 */ + if (!(eq_s_b(z, 2, s_19))) goto lab6; + z->bra = z->c; /* ], line 130 */ + { int ret = r_R2(z); + if (ret == 0) goto lab6; /* call R2, line 130 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 130 */ + if (!(eq_s_b(z, 1, s_20))) goto lab7; + goto lab6; + lab7: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 130 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 130 */ + if (ret < 0) return ret; + } + } + lab5: + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 133 */ + if (!(eq_s_b(z, 1, s_21))) goto lab8; + goto lab4; + lab8: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 136 */ + if (ret < 0) return ret; + } + { int ret = r_e_ending(z); + if (ret == 0) goto lab4; /* call e_ending, line 136 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 142 */ + if (ret < 0) return ret; + } + if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */ + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + break; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 146 */ + if (!(out_grouping_b_U(z, g_v_I, 73, 232))) goto lab9; + { int m_test = z->l - z->c; /* test, line 148 */ + if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) goto lab9; + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 152 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab9; + z->c = c; /* next, line 152 */ + } + z->bra = z->c; /* ], line 152 */ + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + return 1; +} + +extern int dutch_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 159 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 159 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 160 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 160 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 161 */ + + { int m = z->l - z->c; (void) m; /* do, line 162 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 162 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 163 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 163 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * dutch_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void dutch_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * dutch_UTF_8_create_env(void); +extern void dutch_UTF_8_close_env(struct SN_env * z); + +extern int dutch_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1178 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int english_UTF_8_stem(struct SN_env * z); +static int r_exception2(struct SN_env * z); +static int r_exception1(struct SN_env * z); +static int r_Step_5(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * english_UTF_8_create_env(void); +extern void english_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; +static symbol s_0_1[5] = { 'g', 'e', 'n', 'e', 'r' }; + +static struct among a_0[2] = +{ +/* 0 */ { 6, s_0_0, -1, -1, 0}, +/* 1 */ { 5, s_0_1, -1, -1, 0} +}; + +static symbol s_1_0[1] = { '\'' }; +static symbol s_1_1[3] = { '\'', 's', '\'' }; +static symbol s_1_2[2] = { '\'', 's' }; + +static struct among a_1[3] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 3, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0} +}; + +static symbol s_2_0[3] = { 'i', 'e', 'd' }; +static symbol s_2_1[1] = { 's' }; +static symbol s_2_2[3] = { 'i', 'e', 's' }; +static symbol s_2_3[4] = { 's', 's', 'e', 's' }; +static symbol s_2_4[2] = { 's', 's' }; +static symbol s_2_5[2] = { 'u', 's' }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, 2, 0}, +/* 1 */ { 1, s_2_1, -1, 3, 0}, +/* 2 */ { 3, s_2_2, 1, 2, 0}, +/* 3 */ { 4, s_2_3, 1, 1, 0}, +/* 4 */ { 2, s_2_4, 1, -1, 0}, +/* 5 */ { 2, s_2_5, 1, -1, 0} +}; + +static symbol s_3_1[2] = { 'b', 'b' }; +static symbol s_3_2[2] = { 'd', 'd' }; +static symbol s_3_3[2] = { 'f', 'f' }; +static symbol s_3_4[2] = { 'g', 'g' }; +static symbol s_3_5[2] = { 'b', 'l' }; +static symbol s_3_6[2] = { 'm', 'm' }; +static symbol s_3_7[2] = { 'n', 'n' }; +static symbol s_3_8[2] = { 'p', 'p' }; +static symbol s_3_9[2] = { 'r', 'r' }; +static symbol s_3_10[2] = { 'a', 't' }; +static symbol s_3_11[2] = { 't', 't' }; +static symbol s_3_12[2] = { 'i', 'z' }; + +static struct among a_3[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_3_1, 0, 2, 0}, +/* 2 */ { 2, s_3_2, 0, 2, 0}, +/* 3 */ { 2, s_3_3, 0, 2, 0}, +/* 4 */ { 2, s_3_4, 0, 2, 0}, +/* 5 */ { 2, s_3_5, 0, 1, 0}, +/* 6 */ { 2, s_3_6, 0, 2, 0}, +/* 7 */ { 2, s_3_7, 0, 2, 0}, +/* 8 */ { 2, s_3_8, 0, 2, 0}, +/* 9 */ { 2, s_3_9, 0, 2, 0}, +/* 10 */ { 2, s_3_10, 0, 1, 0}, +/* 11 */ { 2, s_3_11, 0, 2, 0}, +/* 12 */ { 2, s_3_12, 0, 1, 0} +}; + +static symbol s_4_0[2] = { 'e', 'd' }; +static symbol s_4_1[3] = { 'e', 'e', 'd' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; +static symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; +static symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; + +static struct among a_4[6] = +{ +/* 0 */ { 2, s_4_0, -1, 2, 0}, +/* 1 */ { 3, s_4_1, 0, 1, 0}, +/* 2 */ { 3, s_4_2, -1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 5, s_4_4, 3, 1, 0}, +/* 5 */ { 5, s_4_5, -1, 2, 0} +}; + +static symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_5_2[3] = { 'o', 'g', 'i' }; +static symbol s_5_3[2] = { 'l', 'i' }; +static symbol s_5_4[3] = { 'b', 'l', 'i' }; +static symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; +static symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; +static symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; +static symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_5[24] = +{ +/* 0 */ { 4, s_5_0, -1, 3, 0}, +/* 1 */ { 4, s_5_1, -1, 2, 0}, +/* 2 */ { 3, s_5_2, -1, 13, 0}, +/* 3 */ { 2, s_5_3, -1, 16, 0}, +/* 4 */ { 3, s_5_4, 3, 12, 0}, +/* 5 */ { 4, s_5_5, 4, 4, 0}, +/* 6 */ { 4, s_5_6, 3, 8, 0}, +/* 7 */ { 5, s_5_7, 3, 14, 0}, +/* 8 */ { 6, s_5_8, 3, 15, 0}, +/* 9 */ { 5, s_5_9, 3, 10, 0}, +/* 10 */ { 5, s_5_10, 3, 5, 0}, +/* 11 */ { 5, s_5_11, -1, 8, 0}, +/* 12 */ { 6, s_5_12, -1, 12, 0}, +/* 13 */ { 5, s_5_13, -1, 11, 0}, +/* 14 */ { 6, s_5_14, -1, 1, 0}, +/* 15 */ { 7, s_5_15, 14, 7, 0}, +/* 16 */ { 5, s_5_16, -1, 8, 0}, +/* 17 */ { 5, s_5_17, -1, 7, 0}, +/* 18 */ { 7, s_5_18, 17, 6, 0}, +/* 19 */ { 4, s_5_19, -1, 6, 0}, +/* 20 */ { 4, s_5_20, -1, 7, 0}, +/* 21 */ { 7, s_5_21, -1, 11, 0}, +/* 22 */ { 7, s_5_22, -1, 9, 0}, +/* 23 */ { 7, s_5_23, -1, 10, 0} +}; + +static symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_7[3] = { 'f', 'u', 'l' }; +static symbol s_6_8[4] = { 'n', 'e', 's', 's' }; + +static struct among a_6[9] = +{ +/* 0 */ { 5, s_6_0, -1, 4, 0}, +/* 1 */ { 5, s_6_1, -1, 6, 0}, +/* 2 */ { 5, s_6_2, -1, 3, 0}, +/* 3 */ { 5, s_6_3, -1, 4, 0}, +/* 4 */ { 4, s_6_4, -1, 4, 0}, +/* 5 */ { 6, s_6_5, -1, 1, 0}, +/* 6 */ { 7, s_6_6, 5, 2, 0}, +/* 7 */ { 3, s_6_7, -1, 5, 0}, +/* 8 */ { 4, s_6_8, -1, 5, 0} +}; + +static symbol s_7_0[2] = { 'i', 'c' }; +static symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_7_5[3] = { 'a', 't', 'e' }; +static symbol s_7_6[3] = { 'i', 'v', 'e' }; +static symbol s_7_7[3] = { 'i', 'z', 'e' }; +static symbol s_7_8[3] = { 'i', 't', 'i' }; +static symbol s_7_9[2] = { 'a', 'l' }; +static symbol s_7_10[3] = { 'i', 's', 'm' }; +static symbol s_7_11[3] = { 'i', 'o', 'n' }; +static symbol s_7_12[2] = { 'e', 'r' }; +static symbol s_7_13[3] = { 'o', 'u', 's' }; +static symbol s_7_14[3] = { 'a', 'n', 't' }; +static symbol s_7_15[3] = { 'e', 'n', 't' }; +static symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; + +static struct among a_7[18] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, -1, 1, 0}, +/* 3 */ { 4, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 2, s_7_9, -1, 1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 2, 0}, +/* 12 */ { 2, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 3, s_7_15, -1, 1, 0}, +/* 16 */ { 4, s_7_16, 15, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 'l' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0} +}; + +static symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; +static symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; +static symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; +static symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; + +static struct among a_9[8] = +{ +/* 0 */ { 7, s_9_0, -1, -1, 0}, +/* 1 */ { 7, s_9_1, -1, -1, 0}, +/* 2 */ { 6, s_9_2, -1, -1, 0}, +/* 3 */ { 7, s_9_3, -1, -1, 0}, +/* 4 */ { 6, s_9_4, -1, -1, 0}, +/* 5 */ { 7, s_9_5, -1, -1, 0}, +/* 6 */ { 7, s_9_6, -1, -1, 0}, +/* 7 */ { 6, s_9_7, -1, -1, 0} +}; + +static symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; +static symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; +static symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; +static symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; +static symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; +static symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; +static symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; +static symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; +static symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; +static symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; +static symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; +static symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; +static symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; +static symbol s_10_14[4] = { 's', 'k', 'i', 's' }; +static symbol s_10_15[3] = { 's', 'k', 'y' }; +static symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; +static symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; + +static struct among a_10[18] = +{ +/* 0 */ { 5, s_10_0, -1, -1, 0}, +/* 1 */ { 5, s_10_1, -1, -1, 0}, +/* 2 */ { 4, s_10_2, -1, -1, 0}, +/* 3 */ { 6, s_10_3, -1, -1, 0}, +/* 4 */ { 5, s_10_4, -1, 3, 0}, +/* 5 */ { 5, s_10_5, -1, 9, 0}, +/* 6 */ { 6, s_10_6, -1, 7, 0}, +/* 7 */ { 4, s_10_7, -1, -1, 0}, +/* 8 */ { 4, s_10_8, -1, 6, 0}, +/* 9 */ { 5, s_10_9, -1, 4, 0}, +/* 10 */ { 4, s_10_10, -1, -1, 0}, +/* 11 */ { 4, s_10_11, -1, 10, 0}, +/* 12 */ { 6, s_10_12, -1, 11, 0}, +/* 13 */ { 5, s_10_13, -1, 2, 0}, +/* 14 */ { 4, s_10_14, -1, 1, 0}, +/* 15 */ { 3, s_10_15, -1, -1, 0}, +/* 16 */ { 5, s_10_16, -1, 5, 0}, +/* 17 */ { 4, s_10_17, -1, 8, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static unsigned char g_valid_LI[] = { 55, 141, 2 }; + +static symbol s_0[] = { '\'' }; +static symbol s_1[] = { 'y' }; +static symbol s_2[] = { 'Y' }; +static symbol s_3[] = { 'y' }; +static symbol s_4[] = { 'Y' }; +static symbol s_5[] = { 's', 's' }; +static symbol s_6[] = { 'i', 'e' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'e', 'e' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'e' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'Y' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 't', 'i', 'o', 'n' }; +static symbol s_15[] = { 'e', 'n', 'c', 'e' }; +static symbol s_16[] = { 'a', 'n', 'c', 'e' }; +static symbol s_17[] = { 'a', 'b', 'l', 'e' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'i', 'z', 'e' }; +static symbol s_20[] = { 'a', 't', 'e' }; +static symbol s_21[] = { 'a', 'l' }; +static symbol s_22[] = { 'f', 'u', 'l' }; +static symbol s_23[] = { 'o', 'u', 's' }; +static symbol s_24[] = { 'i', 'v', 'e' }; +static symbol s_25[] = { 'b', 'l', 'e' }; +static symbol s_26[] = { 'l' }; +static symbol s_27[] = { 'o', 'g' }; +static symbol s_28[] = { 'f', 'u', 'l' }; +static symbol s_29[] = { 'l', 'e', 's', 's' }; +static symbol s_30[] = { 't', 'i', 'o', 'n' }; +static symbol s_31[] = { 'a', 't', 'e' }; +static symbol s_32[] = { 'a', 'l' }; +static symbol s_33[] = { 'i', 'c' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'l' }; +static symbol s_37[] = { 's', 'k', 'i' }; +static symbol s_38[] = { 's', 'k', 'y' }; +static symbol s_39[] = { 'd', 'i', 'e' }; +static symbol s_40[] = { 'l', 'i', 'e' }; +static symbol s_41[] = { 't', 'i', 'e' }; +static symbol s_42[] = { 'i', 'd', 'l' }; +static symbol s_43[] = { 'g', 'e', 'n', 't', 'l' }; +static symbol s_44[] = { 'u', 'g', 'l', 'i' }; +static symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' }; +static symbol s_46[] = { 'o', 'n', 'l', 'i' }; +static symbol s_47[] = { 's', 'i', 'n', 'g', 'l' }; +static symbol s_48[] = { 'Y' }; +static symbol s_49[] = { 'y' }; + +static int r_prelude(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 26 */ + { int c = z->c; /* do, line 27 */ + z->bra = z->c; /* [, line 27 */ + if (!(eq_s(z, 1, s_0))) goto lab0; + z->ket = z->c; /* ], line 27 */ + { int ret; + ret = slice_del(z); /* delete, line 27 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 28 */ + z->bra = z->c; /* [, line 28 */ + if (!(eq_s(z, 1, s_1))) goto lab1; + z->ket = z->c; /* ], line 28 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab1; + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 28 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 28 */ + lab1: + z->c = c; + } + { int c = z->c; /* do, line 29 */ + while(1) { /* repeat, line 29 */ + int c = z->c; + while(1) { /* goto, line 29 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab4; + z->bra = z->c; /* [, line 29 */ + if (!(eq_s(z, 1, s_3))) goto lab4; + z->ket = z->c; /* ], line 29 */ + z->c = c; + break; + lab4: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab3; + z->c = c; /* goto, line 29 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 29 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 29 */ + continue; + lab3: + z->c = c; + break; + } + z->c = c; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 35 */ + { int c = z->c; /* or, line 40 */ + if (!(find_among(z, a_0, 2))) goto lab2; /* among, line 36 */ + goto lab1; + lab2: + z->c = c; + while(1) { /* gopast, line 40 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 40 */ + } + } + while(1) { /* gopast, line 40 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 40 */ + } + } + } + lab1: + z->I[0] = z->c; /* setmark p1, line 41 */ + while(1) { /* gopast, line 42 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 42 */ + } + } + while(1) { /* gopast, line 42 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 42 */ + } + } + z->I[1] = z->c; /* setmark p2, line 42 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_shortv(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* or, line 50 */ + if (!(out_grouping_b_U(z, g_v_WXY, 89, 121))) goto lab1; + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab1; + if (!(out_grouping_b_U(z, g_v, 97, 121))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + if (!(in_grouping_b_U(z, g_v, 97, 121))) return 0; + if (z->c > z->lb) return 0; /* atlimit, line 51 */ + } +lab0: + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 58 */ + z->ket = z->c; /* [, line 59 */ + among_var = find_among_b(z, a_1, 3); /* substring, line 59 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 59 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 61 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + z->ket = z->c; /* [, line 64 */ + among_var = find_among_b(z, a_2, 6); /* substring, line 64 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 64 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 67 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab2; + z->c = c; /* next, line 67 */ + } + if (z->c > z->lb) goto lab2; /* atlimit, line 67 */ + { int ret; + ret = slice_from_s(z, 2, s_6); /* <-, line 67 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 67 */ + if (ret < 0) return ret; + } + } + lab1: + break; + case 3: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 68 */ + } + while(1) { /* gopast, line 68 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 68 */ + } + } + { int ret; + ret = slice_del(z); /* delete, line 68 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 76 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 79 */ + while(1) { /* gopast, line 79 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 79 */ + } + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 79 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 80 */ + among_var = find_among_b(z, a_3, 13); /* substring, line 80 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 82 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 85 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 85 */ + } + z->bra = z->c; /* ], line 85 */ + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 86 */ + { int m_test = z->l - z->c; /* test, line 86 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 86 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 86 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 93 */ + { int m = z->l - z->c; (void) m; /* or, line 93 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_12))) return 0; + } +lab0: + z->bra = z->c; /* ], line 93 */ + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + { int m = z->l - z->c; (void) m; /* not, line 94 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 94 */ + return 0; + lab2: + z->c = z->l - m; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 95 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 99 */ + among_var = find_among_b(z, a_5, 24); /* substring, line 99 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 99 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 99 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 100 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_17); /* <-, line 103 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 104 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 108 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 2, s_21); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_24); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_25); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 13: + if (!(eq_s_b(z, 1, s_26))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_27); /* <-, line 118 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_28); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 15: + { int ret; + ret = slice_from_s(z, 4, s_29); /* <-, line 120 */ + if (ret < 0) return ret; + } + break; + case 16: + if (!(in_grouping_b_U(z, g_valid_LI, 99, 116))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 121 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 126 */ + among_var = find_among_b(z, a_6, 9); /* substring, line 126 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 126 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 126 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_30); /* <-, line 127 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 128 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_32); /* <-, line 129 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_33); /* <-, line 131 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 140 */ + among_var = find_among_b(z, a_7, 18); /* substring, line 140 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 140 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 140 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 144 */ + if (!(eq_s_b(z, 1, s_34))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 144 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_8, 2); /* substring, line 149 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 150 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 150 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 150 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 150 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 150 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 150 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 151 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_36))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_exception2(struct SN_env * z) { + z->ket = z->c; /* [, line 157 */ + if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 157 */ + z->bra = z->c; /* ], line 157 */ + if (z->c > z->lb) return 0; /* atlimit, line 157 */ + return 1; +} + +static int r_exception1(struct SN_env * z) { + int among_var; + z->bra = z->c; /* [, line 169 */ + among_var = find_among(z, a_10, 18); /* substring, line 169 */ + if (!(among_var)) return 0; + z->ket = z->c; /* ], line 169 */ + if (z->c < z->l) return 0; /* atlimit, line 169 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 3, s_37); /* <-, line 173 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_38); /* <-, line 174 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 3, s_39); /* <-, line 175 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 3, s_40); /* <-, line 176 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_41); /* <-, line 177 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_42); /* <-, line 181 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 5, s_43); /* <-, line 182 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 4, s_44); /* <-, line 183 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 5, s_45); /* <-, line 184 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 4, s_46); /* <-, line 185 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 5, s_47); /* <-, line 186 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + if (!(z->B[0])) return 0; /* Boolean test Y_found, line 202 */ + while(1) { /* repeat, line 202 */ + int c = z->c; + while(1) { /* goto, line 202 */ + int c = z->c; + z->bra = z->c; /* [, line 202 */ + if (!(eq_s(z, 1, s_48))) goto lab1; + z->ket = z->c; /* ], line 202 */ + z->c = c; + break; + lab1: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* goto, line 202 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_49); /* <-, line 202 */ + if (ret < 0) return ret; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +extern int english_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* or, line 206 */ + { int ret = r_exception1(z); + if (ret == 0) goto lab1; /* call exception1, line 206 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = c; + { int c = z->c; /* not, line 207 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) goto lab3; + z->c = c; /* hop, line 207 */ + } + goto lab2; + lab3: + z->c = c; + } + goto lab0; + lab2: + z->c = c; + { int c = z->c; /* do, line 208 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab4; /* call prelude, line 208 */ + if (ret < 0) return ret; + } + lab4: + z->c = c; + } + { int c = z->c; /* do, line 209 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab5; /* call mark_regions, line 209 */ + if (ret < 0) return ret; + } + lab5: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 210 */ + + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab6; /* call Step_1a, line 212 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 214 */ + { int ret = r_exception2(z); + if (ret == 0) goto lab8; /* call exception2, line 214 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 216 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab9; /* call Step_1b, line 216 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 217 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab10; /* call Step_1c, line 217 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab11; /* call Step_2, line 219 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 220 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab12; /* call Step_3, line 220 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 221 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab13; /* call Step_4, line 221 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_Step_5(z); + if (ret == 0) goto lab14; /* call Step_5, line 223 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + } + lab7: + z->c = z->lb; + { int c = z->c; /* do, line 226 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab15; /* call postlude, line 226 */ + if (ret < 0) return ret; + } + lab15: + z->c = c; + } + } +lab0: + return 1; +} + +extern struct SN_env * english_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void english_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * english_UTF_8_create_env(void); +extern void english_UTF_8_close_env(struct SN_env * z); + +extern int english_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,808 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int finnish_UTF_8_stem(struct SN_env * z); +static int r_tidy(struct SN_env * z); +static int r_other_endings(struct SN_env * z); +static int r_t_plural(struct SN_env * z); +static int r_i_plural(struct SN_env * z); +static int r_case_ending(struct SN_env * z); +static int r_VI(struct SN_env * z); +static int r_LONG(struct SN_env * z); +static int r_possessive(struct SN_env * z); +static int r_particle_etc(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * finnish_UTF_8_create_env(void); +extern void finnish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[2] = { 'p', 'a' }; +static symbol s_0_1[3] = { 's', 't', 'i' }; +static symbol s_0_2[4] = { 'k', 'a', 'a', 'n' }; +static symbol s_0_3[3] = { 'h', 'a', 'n' }; +static symbol s_0_4[3] = { 'k', 'i', 'n' }; +static symbol s_0_5[4] = { 'h', 0xC3, 0xA4, 'n' }; +static symbol s_0_6[6] = { 'k', 0xC3, 0xA4, 0xC3, 0xA4, 'n' }; +static symbol s_0_7[2] = { 'k', 'o' }; +static symbol s_0_8[3] = { 'p', 0xC3, 0xA4 }; +static symbol s_0_9[3] = { 'k', 0xC3, 0xB6 }; + +static struct among a_0[10] = +{ +/* 0 */ { 2, s_0_0, -1, 1, 0}, +/* 1 */ { 3, s_0_1, -1, 2, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 3, s_0_3, -1, 1, 0}, +/* 4 */ { 3, s_0_4, -1, 1, 0}, +/* 5 */ { 4, s_0_5, -1, 1, 0}, +/* 6 */ { 6, s_0_6, -1, 1, 0}, +/* 7 */ { 2, s_0_7, -1, 1, 0}, +/* 8 */ { 3, s_0_8, -1, 1, 0}, +/* 9 */ { 3, s_0_9, -1, 1, 0} +}; + +static symbol s_1_0[3] = { 'l', 'l', 'a' }; +static symbol s_1_1[2] = { 'n', 'a' }; +static symbol s_1_2[3] = { 's', 's', 'a' }; +static symbol s_1_3[2] = { 't', 'a' }; +static symbol s_1_4[3] = { 'l', 't', 'a' }; +static symbol s_1_5[3] = { 's', 't', 'a' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 3, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 3, s_1_4, 3, -1, 0}, +/* 5 */ { 3, s_1_5, 3, -1, 0} +}; + +static symbol s_2_0[4] = { 'l', 'l', 0xC3, 0xA4 }; +static symbol s_2_1[3] = { 'n', 0xC3, 0xA4 }; +static symbol s_2_2[4] = { 's', 's', 0xC3, 0xA4 }; +static symbol s_2_3[3] = { 't', 0xC3, 0xA4 }; +static symbol s_2_4[4] = { 'l', 't', 0xC3, 0xA4 }; +static symbol s_2_5[4] = { 's', 't', 0xC3, 0xA4 }; + +static struct among a_2[6] = +{ +/* 0 */ { 4, s_2_0, -1, -1, 0}, +/* 1 */ { 3, s_2_1, -1, -1, 0}, +/* 2 */ { 4, s_2_2, -1, -1, 0}, +/* 3 */ { 3, s_2_3, -1, -1, 0}, +/* 4 */ { 4, s_2_4, 3, -1, 0}, +/* 5 */ { 4, s_2_5, 3, -1, 0} +}; + +static symbol s_3_0[3] = { 'l', 'l', 'e' }; +static symbol s_3_1[3] = { 'i', 'n', 'e' }; + +static struct among a_3[2] = +{ +/* 0 */ { 3, s_3_0, -1, -1, 0}, +/* 1 */ { 3, s_3_1, -1, -1, 0} +}; + +static symbol s_4_0[3] = { 'n', 's', 'a' }; +static symbol s_4_1[3] = { 'm', 'm', 'e' }; +static symbol s_4_2[3] = { 'n', 'n', 'e' }; +static symbol s_4_3[2] = { 'n', 'i' }; +static symbol s_4_4[2] = { 's', 'i' }; +static symbol s_4_5[2] = { 'a', 'n' }; +static symbol s_4_6[2] = { 'e', 'n' }; +static symbol s_4_7[3] = { 0xC3, 0xA4, 'n' }; +static symbol s_4_8[4] = { 'n', 's', 0xC3, 0xA4 }; + +static struct among a_4[9] = +{ +/* 0 */ { 3, s_4_0, -1, 3, 0}, +/* 1 */ { 3, s_4_1, -1, 3, 0}, +/* 2 */ { 3, s_4_2, -1, 3, 0}, +/* 3 */ { 2, s_4_3, -1, 2, 0}, +/* 4 */ { 2, s_4_4, -1, 1, 0}, +/* 5 */ { 2, s_4_5, -1, 4, 0}, +/* 6 */ { 2, s_4_6, -1, 6, 0}, +/* 7 */ { 3, s_4_7, -1, 5, 0}, +/* 8 */ { 4, s_4_8, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'i', 'i' }; +static symbol s_5_3[2] = { 'o', 'o' }; +static symbol s_5_4[2] = { 'u', 'u' }; +static symbol s_5_5[4] = { 0xC3, 0xA4, 0xC3, 0xA4 }; +static symbol s_5_6[4] = { 0xC3, 0xB6, 0xC3, 0xB6 }; + +static struct among a_5[7] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0}, +/* 4 */ { 2, s_5_4, -1, -1, 0}, +/* 5 */ { 4, s_5_5, -1, -1, 0}, +/* 6 */ { 4, s_5_6, -1, -1, 0} +}; + +static symbol s_6_0[1] = { 'a' }; +static symbol s_6_1[3] = { 'l', 'l', 'a' }; +static symbol s_6_2[2] = { 'n', 'a' }; +static symbol s_6_3[3] = { 's', 's', 'a' }; +static symbol s_6_4[2] = { 't', 'a' }; +static symbol s_6_5[3] = { 'l', 't', 'a' }; +static symbol s_6_6[3] = { 's', 't', 'a' }; +static symbol s_6_7[3] = { 't', 't', 'a' }; +static symbol s_6_8[3] = { 'l', 'l', 'e' }; +static symbol s_6_9[3] = { 'i', 'n', 'e' }; +static symbol s_6_10[3] = { 'k', 's', 'i' }; +static symbol s_6_11[1] = { 'n' }; +static symbol s_6_12[3] = { 'h', 'a', 'n' }; +static symbol s_6_13[3] = { 'd', 'e', 'n' }; +static symbol s_6_14[4] = { 's', 'e', 'e', 'n' }; +static symbol s_6_15[3] = { 'h', 'e', 'n' }; +static symbol s_6_16[4] = { 't', 't', 'e', 'n' }; +static symbol s_6_17[3] = { 'h', 'i', 'n' }; +static symbol s_6_18[4] = { 's', 'i', 'i', 'n' }; +static symbol s_6_19[3] = { 'h', 'o', 'n' }; +static symbol s_6_20[4] = { 'h', 0xC3, 0xA4, 'n' }; +static symbol s_6_21[4] = { 'h', 0xC3, 0xB6, 'n' }; +static symbol s_6_22[2] = { 0xC3, 0xA4 }; +static symbol s_6_23[4] = { 'l', 'l', 0xC3, 0xA4 }; +static symbol s_6_24[3] = { 'n', 0xC3, 0xA4 }; +static symbol s_6_25[4] = { 's', 's', 0xC3, 0xA4 }; +static symbol s_6_26[3] = { 't', 0xC3, 0xA4 }; +static symbol s_6_27[4] = { 'l', 't', 0xC3, 0xA4 }; +static symbol s_6_28[4] = { 's', 't', 0xC3, 0xA4 }; +static symbol s_6_29[4] = { 't', 't', 0xC3, 0xA4 }; + +static struct among a_6[30] = +{ +/* 0 */ { 1, s_6_0, -1, 8, 0}, +/* 1 */ { 3, s_6_1, 0, -1, 0}, +/* 2 */ { 2, s_6_2, 0, -1, 0}, +/* 3 */ { 3, s_6_3, 0, -1, 0}, +/* 4 */ { 2, s_6_4, 0, -1, 0}, +/* 5 */ { 3, s_6_5, 4, -1, 0}, +/* 6 */ { 3, s_6_6, 4, -1, 0}, +/* 7 */ { 3, s_6_7, 4, 9, 0}, +/* 8 */ { 3, s_6_8, -1, -1, 0}, +/* 9 */ { 3, s_6_9, -1, -1, 0}, +/* 10 */ { 3, s_6_10, -1, -1, 0}, +/* 11 */ { 1, s_6_11, -1, 7, 0}, +/* 12 */ { 3, s_6_12, 11, 1, 0}, +/* 13 */ { 3, s_6_13, 11, -1, r_VI}, +/* 14 */ { 4, s_6_14, 11, -1, r_LONG}, +/* 15 */ { 3, s_6_15, 11, 2, 0}, +/* 16 */ { 4, s_6_16, 11, -1, r_VI}, +/* 17 */ { 3, s_6_17, 11, 3, 0}, +/* 18 */ { 4, s_6_18, 11, -1, r_VI}, +/* 19 */ { 3, s_6_19, 11, 4, 0}, +/* 20 */ { 4, s_6_20, 11, 5, 0}, +/* 21 */ { 4, s_6_21, 11, 6, 0}, +/* 22 */ { 2, s_6_22, -1, 8, 0}, +/* 23 */ { 4, s_6_23, 22, -1, 0}, +/* 24 */ { 3, s_6_24, 22, -1, 0}, +/* 25 */ { 4, s_6_25, 22, -1, 0}, +/* 26 */ { 3, s_6_26, 22, -1, 0}, +/* 27 */ { 4, s_6_27, 26, -1, 0}, +/* 28 */ { 4, s_6_28, 26, -1, 0}, +/* 29 */ { 4, s_6_29, 26, 9, 0} +}; + +static symbol s_7_0[3] = { 'e', 'j', 'a' }; +static symbol s_7_1[3] = { 'm', 'm', 'a' }; +static symbol s_7_2[4] = { 'i', 'm', 'm', 'a' }; +static symbol s_7_3[3] = { 'm', 'p', 'a' }; +static symbol s_7_4[4] = { 'i', 'm', 'p', 'a' }; +static symbol s_7_5[3] = { 'm', 'm', 'i' }; +static symbol s_7_6[4] = { 'i', 'm', 'm', 'i' }; +static symbol s_7_7[3] = { 'm', 'p', 'i' }; +static symbol s_7_8[4] = { 'i', 'm', 'p', 'i' }; +static symbol s_7_9[4] = { 'e', 'j', 0xC3, 0xA4 }; +static symbol s_7_10[4] = { 'm', 'm', 0xC3, 0xA4 }; +static symbol s_7_11[5] = { 'i', 'm', 'm', 0xC3, 0xA4 }; +static symbol s_7_12[4] = { 'm', 'p', 0xC3, 0xA4 }; +static symbol s_7_13[5] = { 'i', 'm', 'p', 0xC3, 0xA4 }; + +static struct among a_7[14] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 3, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, 1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, 3, -1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 4, s_7_6, 5, -1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 4, s_7_8, 7, -1, 0}, +/* 9 */ { 4, s_7_9, -1, -1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 5, s_7_11, 10, -1, 0}, +/* 12 */ { 4, s_7_12, -1, 1, 0}, +/* 13 */ { 5, s_7_13, 12, -1, 0} +}; + +static symbol s_8_0[1] = { 'i' }; +static symbol s_8_1[1] = { 'j' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, -1, 0}, +/* 1 */ { 1, s_8_1, -1, -1, 0} +}; + +static symbol s_9_0[3] = { 'm', 'm', 'a' }; +static symbol s_9_1[4] = { 'i', 'm', 'm', 'a' }; + +static struct among a_9[2] = +{ +/* 0 */ { 3, s_9_0, -1, 1, 0}, +/* 1 */ { 4, s_9_1, 0, -1, 0} +}; + +static unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; + +static unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'k', 's', 'e' }; +static symbol s_2[] = { 'k', 's', 'i' }; +static symbol s_3[] = { 'i' }; +static symbol s_4[] = { 'a' }; +static symbol s_5[] = { 'e' }; +static symbol s_6[] = { 'i' }; +static symbol s_7[] = { 'o' }; +static symbol s_8[] = { 0xC3, 0xA4 }; +static symbol s_9[] = { 0xC3, 0xB6 }; +static symbol s_10[] = { 'i', 'e' }; +static symbol s_11[] = { 'e' }; +static symbol s_12[] = { 'p', 'o' }; +static symbol s_13[] = { 't' }; +static symbol s_14[] = { 'p', 'o' }; +static symbol s_15[] = { 'j' }; +static symbol s_16[] = { 'o' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'o' }; +static symbol s_19[] = { 'j' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping_U(z, g_V1, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 46 */ + } + } + while(1) { /* gopast, line 46 */ + if (!(out_grouping_U(z, g_V1, 97, 246))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 46 */ + } + } + z->I[0] = z->c; /* setmark p1, line 46 */ + while(1) { /* goto, line 47 */ + int c = z->c; + if (!(in_grouping_U(z, g_V1, 97, 246))) goto lab2; + z->c = c; + break; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 47 */ + } + } + while(1) { /* gopast, line 47 */ + if (!(out_grouping_U(z, g_V1, 97, 246))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 47 */ + } + } + z->I[1] = z->c; /* setmark p2, line 47 */ + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_particle_etc(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 55 */ + among_var = find_among_b(z, a_0, 10); /* substring, line 55 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 55 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(in_grouping_b_U(z, g_particle_end, 97, 246))) return 0; + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 64 */ + if (ret < 0) return ret; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_possessive(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 69 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 69 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 69 */ + among_var = find_among_b(z, a_4, 9); /* substring, line 69 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 69 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 72 */ + if (!(eq_s_b(z, 1, s_0))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 72 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 74 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 74 */ + if (!(eq_s_b(z, 3, s_1))) return 0; + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */ + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 5: + if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */ + { int ret; + ret = slice_del(z); /* delete, line 84 */ + if (ret < 0) return ret; + } + break; + case 6: + if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */ + { int ret; + ret = slice_del(z); /* delete, line 86 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_LONG(struct SN_env * z) { + if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */ + return 1; +} + +static int r_VI(struct SN_env * z) { + if (!(eq_s_b(z, 1, s_3))) return 0; + if (!(in_grouping_b_U(z, g_V2, 97, 246))) return 0; + return 1; +} + +static int r_case_ending(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 96 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 96 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 96 */ + among_var = find_among_b(z, a_6, 30); /* substring, line 96 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 96 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_4))) return 0; + break; + case 2: + if (!(eq_s_b(z, 1, s_5))) return 0; + break; + case 3: + if (!(eq_s_b(z, 1, s_6))) return 0; + break; + case 4: + if (!(eq_s_b(z, 1, s_7))) return 0; + break; + case 5: + if (!(eq_s_b(z, 2, s_8))) return 0; + break; + case 6: + if (!(eq_s_b(z, 2, s_9))) return 0; + break; + case 7: + { int m = z->l - z->c; (void) m; /* try, line 111 */ + { int m = z->l - z->c; (void) m; /* and, line 113 */ + { int m = z->l - z->c; (void) m; /* or, line 112 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab2; /* call LONG, line 111 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m; goto lab0; } + } + lab1: + z->c = z->l - m; + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) { z->c = z->l - m; goto lab0; } + z->c = c; /* next, line 113 */ + } + } + z->bra = z->c; /* ], line 113 */ + lab0: + ; + } + break; + case 8: + if (!(in_grouping_b_U(z, g_V1, 97, 246))) return 0; + if (!(out_grouping_b_U(z, g_V1, 97, 246))) return 0; + break; + case 9: + if (!(eq_s_b(z, 1, s_11))) return 0; + break; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set ending_removed, line 139 */ + return 1; +} + +static int r_other_endings(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 142 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 142 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 142 */ + among_var = find_among_b(z, a_7, 14); /* substring, line 142 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 142 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 146 */ + if (!(eq_s_b(z, 2, s_12))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_i_plural(struct SN_env * z) { + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 154 */ + if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */ + z->bra = z->c; /* ], line 154 */ + z->lb = m3; + } + { int ret; + ret = slice_del(z); /* delete, line 158 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_t_plural(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 161 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 161 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 162 */ + if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 162 */ + { int m_test = z->l - z->c; /* test, line 162 */ + if (!(in_grouping_b_U(z, g_V1, 97, 246))) { z->lb = m3; return 0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + z->lb = m3; + } + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 165 */ + among_var = find_among_b(z, a_9, 2); /* substring, line 165 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 165 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 167 */ + if (!(eq_s_b(z, 2, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 170 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_tidy(struct SN_env * z) { + { int m3; /* setlimit, line 173 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 173 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 174 */ + { int m = z->l - z->c; (void) m; /* and, line 174 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab0; /* call LONG, line 174 */ + if (ret < 0) return ret; + } + z->c = z->l - m; + z->ket = z->c; /* [, line 174 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab0; + z->c = c; /* next, line 174 */ + } + z->bra = z->c; /* ], line 174 */ + { int ret; + ret = slice_del(z); /* delete, line 174 */ + if (ret < 0) return ret; + } + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 175 */ + z->ket = z->c; /* [, line 175 */ + if (!(in_grouping_b_U(z, g_AEI, 97, 228))) goto lab1; + z->bra = z->c; /* ], line 175 */ + if (!(out_grouping_b_U(z, g_V1, 97, 246))) goto lab1; + { int ret; + ret = slice_del(z); /* delete, line 175 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 176 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_15))) goto lab2; + z->bra = z->c; /* ], line 176 */ + { int m = z->l - z->c; (void) m; /* or, line 176 */ + if (!(eq_s_b(z, 1, s_16))) goto lab4; + goto lab3; + lab4: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_17))) goto lab2; + } + lab3: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 177 */ + z->ket = z->c; /* [, line 177 */ + if (!(eq_s_b(z, 1, s_18))) goto lab5; + z->bra = z->c; /* ], line 177 */ + if (!(eq_s_b(z, 1, s_19))) goto lab5; + { int ret; + ret = slice_del(z); /* delete, line 177 */ + if (ret < 0) return ret; + } + lab5: + z->c = z->l - m; + } + z->lb = m3; + } + while(1) { /* goto, line 179 */ + int m = z->l - z->c; (void) m; + if (!(out_grouping_b_U(z, g_V1, 97, 246))) goto lab6; + z->c = z->l - m; + break; + lab6: + z->c = z->l - m; + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* goto, line 179 */ + } + } + z->ket = z->c; /* [, line 179 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 179 */ + } + z->bra = z->c; /* ], line 179 */ + z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */ + if (z->S[0] == 0) return -1; /* -> x, line 179 */ + if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int finnish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 185 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 185 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->B[0] = 0; /* unset ending_removed, line 186 */ + z->lb = z->c; z->c = z->l; /* backwards, line 187 */ + + { int m = z->l - z->c; (void) m; /* do, line 188 */ + { int ret = r_particle_etc(z); + if (ret == 0) goto lab1; /* call particle_etc, line 188 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 189 */ + { int ret = r_possessive(z); + if (ret == 0) goto lab2; /* call possessive, line 189 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 190 */ + { int ret = r_case_ending(z); + if (ret == 0) goto lab3; /* call case_ending, line 190 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 191 */ + { int ret = r_other_endings(z); + if (ret == 0) goto lab4; /* call other_endings, line 191 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 192 */ + if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */ + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_i_plural(z); + if (ret == 0) goto lab7; /* call i_plural, line 192 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + goto lab5; + lab6: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_t_plural(z); + if (ret == 0) goto lab8; /* call t_plural, line 192 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + } +lab5: + { int m = z->l - z->c; (void) m; /* do, line 193 */ + { int ret = r_tidy(z); + if (ret == 0) goto lab9; /* call tidy, line 193 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * finnish_UTF_8_create_env(void) { return SN_create_env(1, 2, 1); } + +extern void finnish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * finnish_UTF_8_create_env(void); +extern void finnish_UTF_8_close_env(struct SN_env * z); + +extern int finnish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1296 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int french_UTF_8_stem(struct SN_env * z); +static int r_un_accent(struct SN_env * z); +static int r_un_double(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_i_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * french_UTF_8_create_env(void); +extern void french_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'I' }; +static symbol s_0_2[1] = { 'U' }; +static symbol s_0_3[1] = { 'Y' }; + +static struct among a_0[4] = +{ +/* 0 */ { 0, 0, -1, 4, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0} +}; + +static symbol s_1_0[3] = { 'i', 'q', 'U' }; +static symbol s_1_1[3] = { 'a', 'b', 'l' }; +static symbol s_1_2[4] = { 'I', 0xC3, 0xA8, 'r' }; +static symbol s_1_3[4] = { 'i', 0xC3, 0xA8, 'r' }; +static symbol s_1_4[3] = { 'e', 'u', 's' }; +static symbol s_1_5[2] = { 'i', 'v' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, 3, 0}, +/* 1 */ { 3, s_1_1, -1, 3, 0}, +/* 2 */ { 4, s_1_2, -1, 4, 0}, +/* 3 */ { 4, s_1_3, -1, 4, 0}, +/* 4 */ { 3, s_1_4, -1, 2, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_2_2[2] = { 'i', 'v' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 4, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 3, 0} +}; + +static symbol s_3_0[4] = { 'i', 'q', 'U', 'e' }; +static symbol s_3_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_3_2[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_3_3[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_3_4[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_3_5[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_3_6[4] = { 'i', 's', 'm', 'e' }; +static symbol s_3_7[4] = { 'e', 'u', 's', 'e' }; +static symbol s_3_8[4] = { 'i', 's', 't', 'e' }; +static symbol s_3_9[3] = { 'i', 'v', 'e' }; +static symbol s_3_10[2] = { 'i', 'f' }; +static symbol s_3_11[5] = { 'u', 's', 'i', 'o', 'n' }; +static symbol s_3_12[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_13[5] = { 'u', 't', 'i', 'o', 'n' }; +static symbol s_3_14[5] = { 'a', 't', 'e', 'u', 'r' }; +static symbol s_3_15[5] = { 'i', 'q', 'U', 'e', 's' }; +static symbol s_3_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' }; +static symbol s_3_17[5] = { 'a', 'n', 'c', 'e', 's' }; +static symbol s_3_18[5] = { 'e', 'n', 'c', 'e', 's' }; +static symbol s_3_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' }; +static symbol s_3_20[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_3_21[5] = { 'i', 's', 'm', 'e', 's' }; +static symbol s_3_22[5] = { 'e', 'u', 's', 'e', 's' }; +static symbol s_3_23[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_3_24[4] = { 'i', 'v', 'e', 's' }; +static symbol s_3_25[3] = { 'i', 'f', 's' }; +static symbol s_3_26[6] = { 'u', 's', 'i', 'o', 'n', 's' }; +static symbol s_3_27[6] = { 'a', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_28[6] = { 'u', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_29[6] = { 'a', 't', 'e', 'u', 'r', 's' }; +static symbol s_3_30[5] = { 'm', 'e', 'n', 't', 's' }; +static symbol s_3_31[6] = { 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_33[5] = { 'i', 't', 0xC3, 0xA9, 's' }; +static symbol s_3_34[4] = { 'm', 'e', 'n', 't' }; +static symbol s_3_35[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_39[3] = { 'a', 'u', 'x' }; +static symbol s_3_40[4] = { 'e', 'a', 'u', 'x' }; +static symbol s_3_41[3] = { 'e', 'u', 'x' }; +static symbol s_3_42[4] = { 'i', 't', 0xC3, 0xA9 }; + +static struct among a_3[43] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 6, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0}, +/* 3 */ { 4, s_3_3, -1, 5, 0}, +/* 4 */ { 5, s_3_4, -1, 3, 0}, +/* 5 */ { 4, s_3_5, -1, 1, 0}, +/* 6 */ { 4, s_3_6, -1, 1, 0}, +/* 7 */ { 4, s_3_7, -1, 11, 0}, +/* 8 */ { 4, s_3_8, -1, 1, 0}, +/* 9 */ { 3, s_3_9, -1, 8, 0}, +/* 10 */ { 2, s_3_10, -1, 8, 0}, +/* 11 */ { 5, s_3_11, -1, 4, 0}, +/* 12 */ { 5, s_3_12, -1, 2, 0}, +/* 13 */ { 5, s_3_13, -1, 4, 0}, +/* 14 */ { 5, s_3_14, -1, 2, 0}, +/* 15 */ { 5, s_3_15, -1, 1, 0}, +/* 16 */ { 7, s_3_16, -1, 2, 0}, +/* 17 */ { 5, s_3_17, -1, 1, 0}, +/* 18 */ { 5, s_3_18, -1, 5, 0}, +/* 19 */ { 6, s_3_19, -1, 3, 0}, +/* 20 */ { 5, s_3_20, -1, 1, 0}, +/* 21 */ { 5, s_3_21, -1, 1, 0}, +/* 22 */ { 5, s_3_22, -1, 11, 0}, +/* 23 */ { 5, s_3_23, -1, 1, 0}, +/* 24 */ { 4, s_3_24, -1, 8, 0}, +/* 25 */ { 3, s_3_25, -1, 8, 0}, +/* 26 */ { 6, s_3_26, -1, 4, 0}, +/* 27 */ { 6, s_3_27, -1, 2, 0}, +/* 28 */ { 6, s_3_28, -1, 4, 0}, +/* 29 */ { 6, s_3_29, -1, 2, 0}, +/* 30 */ { 5, s_3_30, -1, 15, 0}, +/* 31 */ { 6, s_3_31, 30, 6, 0}, +/* 32 */ { 9, s_3_32, 31, 12, 0}, +/* 33 */ { 5, s_3_33, -1, 7, 0}, +/* 34 */ { 4, s_3_34, -1, 15, 0}, +/* 35 */ { 5, s_3_35, 34, 6, 0}, +/* 36 */ { 8, s_3_36, 35, 12, 0}, +/* 37 */ { 6, s_3_37, 34, 13, 0}, +/* 38 */ { 6, s_3_38, 34, 14, 0}, +/* 39 */ { 3, s_3_39, -1, 10, 0}, +/* 40 */ { 4, s_3_40, 39, 9, 0}, +/* 41 */ { 3, s_3_41, -1, 1, 0}, +/* 42 */ { 4, s_3_42, -1, 7, 0} +}; + +static symbol s_4_0[3] = { 'i', 'r', 'a' }; +static symbol s_4_1[2] = { 'i', 'e' }; +static symbol s_4_2[4] = { 'i', 's', 's', 'e' }; +static symbol s_4_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' }; +static symbol s_4_4[1] = { 'i' }; +static symbol s_4_5[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_4_6[2] = { 'i', 'r' }; +static symbol s_4_7[4] = { 'i', 'r', 'a', 's' }; +static symbol s_4_8[3] = { 'i', 'e', 's' }; +static symbol s_4_9[5] = { 0xC3, 0xAE, 'm', 'e', 's' }; +static symbol s_4_10[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_4_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' }; +static symbol s_4_12[5] = { 0xC3, 0xAE, 't', 'e', 's' }; +static symbol s_4_13[2] = { 'i', 's' }; +static symbol s_4_14[5] = { 'i', 'r', 'a', 'i', 's' }; +static symbol s_4_15[6] = { 'i', 's', 's', 'a', 'i', 's' }; +static symbol s_4_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' }; +static symbol s_4_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_4_18[5] = { 'i', 'r', 'o', 'n', 's' }; +static symbol s_4_19[6] = { 'i', 's', 's', 'o', 'n', 's' }; +static symbol s_4_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' }; +static symbol s_4_21[2] = { 'i', 't' }; +static symbol s_4_22[5] = { 'i', 'r', 'a', 'i', 't' }; +static symbol s_4_23[6] = { 'i', 's', 's', 'a', 'i', 't' }; +static symbol s_4_24[6] = { 'i', 's', 's', 'a', 'n', 't' }; +static symbol s_4_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_27[5] = { 'i', 'r', 'e', 'n', 't' }; +static symbol s_4_28[6] = { 'i', 's', 's', 'e', 'n', 't' }; +static symbol s_4_29[5] = { 'i', 'r', 'o', 'n', 't' }; +static symbol s_4_30[3] = { 0xC3, 0xAE, 't' }; +static symbol s_4_31[5] = { 'i', 'r', 'i', 'e', 'z' }; +static symbol s_4_32[6] = { 'i', 's', 's', 'i', 'e', 'z' }; +static symbol s_4_33[4] = { 'i', 'r', 'e', 'z' }; +static symbol s_4_34[5] = { 'i', 's', 's', 'e', 'z' }; + +static struct among a_4[35] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0}, +/* 3 */ { 7, s_4_3, -1, 1, 0}, +/* 4 */ { 1, s_4_4, -1, 1, 0}, +/* 5 */ { 4, s_4_5, 4, 1, 0}, +/* 6 */ { 2, s_4_6, -1, 1, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 1, 0}, +/* 9 */ { 5, s_4_9, -1, 1, 0}, +/* 10 */ { 5, s_4_10, -1, 1, 0}, +/* 11 */ { 8, s_4_11, -1, 1, 0}, +/* 12 */ { 5, s_4_12, -1, 1, 0}, +/* 13 */ { 2, s_4_13, -1, 1, 0}, +/* 14 */ { 5, s_4_14, 13, 1, 0}, +/* 15 */ { 6, s_4_15, 13, 1, 0}, +/* 16 */ { 6, s_4_16, -1, 1, 0}, +/* 17 */ { 7, s_4_17, -1, 1, 0}, +/* 18 */ { 5, s_4_18, -1, 1, 0}, +/* 19 */ { 6, s_4_19, -1, 1, 0}, +/* 20 */ { 7, s_4_20, -1, 1, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 5, s_4_22, 21, 1, 0}, +/* 23 */ { 6, s_4_23, 21, 1, 0}, +/* 24 */ { 6, s_4_24, -1, 1, 0}, +/* 25 */ { 7, s_4_25, -1, 1, 0}, +/* 26 */ { 8, s_4_26, -1, 1, 0}, +/* 27 */ { 5, s_4_27, -1, 1, 0}, +/* 28 */ { 6, s_4_28, -1, 1, 0}, +/* 29 */ { 5, s_4_29, -1, 1, 0}, +/* 30 */ { 3, s_4_30, -1, 1, 0}, +/* 31 */ { 5, s_4_31, -1, 1, 0}, +/* 32 */ { 6, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, -1, 1, 0}, +/* 34 */ { 5, s_4_34, -1, 1, 0} +}; + +static symbol s_5_0[1] = { 'a' }; +static symbol s_5_1[3] = { 'e', 'r', 'a' }; +static symbol s_5_2[4] = { 'a', 's', 's', 'e' }; +static symbol s_5_3[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_4[3] = { 0xC3, 0xA9, 'e' }; +static symbol s_5_5[2] = { 'a', 'i' }; +static symbol s_5_6[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_5_7[2] = { 'e', 'r' }; +static symbol s_5_8[2] = { 'a', 's' }; +static symbol s_5_9[4] = { 'e', 'r', 'a', 's' }; +static symbol s_5_10[5] = { 0xC3, 0xA2, 'm', 'e', 's' }; +static symbol s_5_11[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_5_12[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_13[5] = { 0xC3, 0xA2, 't', 'e', 's' }; +static symbol s_5_14[4] = { 0xC3, 0xA9, 'e', 's' }; +static symbol s_5_15[3] = { 'a', 'i', 's' }; +static symbol s_5_16[5] = { 'e', 'r', 'a', 'i', 's' }; +static symbol s_5_17[4] = { 'i', 'o', 'n', 's' }; +static symbol s_5_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' }; +static symbol s_5_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_5_20[5] = { 'e', 'r', 'o', 'n', 's' }; +static symbol s_5_21[4] = { 'a', 'n', 't', 's' }; +static symbol s_5_22[3] = { 0xC3, 0xA9, 's' }; +static symbol s_5_23[3] = { 'a', 'i', 't' }; +static symbol s_5_24[5] = { 'e', 'r', 'a', 'i', 't' }; +static symbol s_5_25[3] = { 'a', 'n', 't' }; +static symbol s_5_26[5] = { 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_28[6] = { 0xC3, 0xA8, 'r', 'e', 'n', 't' }; +static symbol s_5_29[6] = { 'a', 's', 's', 'e', 'n', 't' }; +static symbol s_5_30[5] = { 'e', 'r', 'o', 'n', 't' }; +static symbol s_5_31[3] = { 0xC3, 0xA2, 't' }; +static symbol s_5_32[2] = { 'e', 'z' }; +static symbol s_5_33[3] = { 'i', 'e', 'z' }; +static symbol s_5_34[5] = { 'e', 'r', 'i', 'e', 'z' }; +static symbol s_5_35[6] = { 'a', 's', 's', 'i', 'e', 'z' }; +static symbol s_5_36[4] = { 'e', 'r', 'e', 'z' }; +static symbol s_5_37[2] = { 0xC3, 0xA9 }; + +static struct among a_5[38] = +{ +/* 0 */ { 1, s_5_0, -1, 3, 0}, +/* 1 */ { 3, s_5_1, 0, 2, 0}, +/* 2 */ { 4, s_5_2, -1, 3, 0}, +/* 3 */ { 4, s_5_3, -1, 3, 0}, +/* 4 */ { 3, s_5_4, -1, 2, 0}, +/* 5 */ { 2, s_5_5, -1, 3, 0}, +/* 6 */ { 4, s_5_6, 5, 2, 0}, +/* 7 */ { 2, s_5_7, -1, 2, 0}, +/* 8 */ { 2, s_5_8, -1, 3, 0}, +/* 9 */ { 4, s_5_9, 8, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 3, 0}, +/* 11 */ { 5, s_5_11, -1, 3, 0}, +/* 12 */ { 5, s_5_12, -1, 3, 0}, +/* 13 */ { 5, s_5_13, -1, 3, 0}, +/* 14 */ { 4, s_5_14, -1, 2, 0}, +/* 15 */ { 3, s_5_15, -1, 3, 0}, +/* 16 */ { 5, s_5_16, 15, 2, 0}, +/* 17 */ { 4, s_5_17, -1, 1, 0}, +/* 18 */ { 6, s_5_18, 17, 2, 0}, +/* 19 */ { 7, s_5_19, 17, 3, 0}, +/* 20 */ { 5, s_5_20, -1, 2, 0}, +/* 21 */ { 4, s_5_21, -1, 3, 0}, +/* 22 */ { 3, s_5_22, -1, 2, 0}, +/* 23 */ { 3, s_5_23, -1, 3, 0}, +/* 24 */ { 5, s_5_24, 23, 2, 0}, +/* 25 */ { 3, s_5_25, -1, 3, 0}, +/* 26 */ { 5, s_5_26, -1, 3, 0}, +/* 27 */ { 7, s_5_27, 26, 2, 0}, +/* 28 */ { 6, s_5_28, -1, 2, 0}, +/* 29 */ { 6, s_5_29, -1, 3, 0}, +/* 30 */ { 5, s_5_30, -1, 2, 0}, +/* 31 */ { 3, s_5_31, -1, 3, 0}, +/* 32 */ { 2, s_5_32, -1, 2, 0}, +/* 33 */ { 3, s_5_33, 32, 2, 0}, +/* 34 */ { 5, s_5_34, 33, 2, 0}, +/* 35 */ { 6, s_5_35, 33, 3, 0}, +/* 36 */ { 4, s_5_36, 32, 2, 0}, +/* 37 */ { 2, s_5_37, -1, 2, 0} +}; + +static symbol s_6_0[1] = { 'e' }; +static symbol s_6_1[5] = { 'I', 0xC3, 0xA8, 'r', 'e' }; +static symbol s_6_2[5] = { 'i', 0xC3, 0xA8, 'r', 'e' }; +static symbol s_6_3[3] = { 'i', 'o', 'n' }; +static symbol s_6_4[3] = { 'I', 'e', 'r' }; +static symbol s_6_5[3] = { 'i', 'e', 'r' }; +static symbol s_6_6[2] = { 0xC3, 0xAB }; + +static struct among a_6[7] = +{ +/* 0 */ { 1, s_6_0, -1, 3, 0}, +/* 1 */ { 5, s_6_1, 0, 2, 0}, +/* 2 */ { 5, s_6_2, 0, 2, 0}, +/* 3 */ { 3, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 2, 0}, +/* 5 */ { 3, s_6_5, -1, 2, 0}, +/* 6 */ { 2, s_6_6, -1, 4, 0} +}; + +static symbol s_7_0[3] = { 'e', 'l', 'l' }; +static symbol s_7_1[4] = { 'e', 'i', 'l', 'l' }; +static symbol s_7_2[3] = { 'e', 'n', 'n' }; +static symbol s_7_3[3] = { 'o', 'n', 'n' }; +static symbol s_7_4[3] = { 'e', 't', 't' }; + +static struct among a_7[5] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 4, s_7_1, -1, -1, 0}, +/* 2 */ { 3, s_7_2, -1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, -1, 0}, +/* 4 */ { 3, s_7_4, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; + +static unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'u' }; +static symbol s_1[] = { 'U' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'I' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'Y' }; +static symbol s_8[] = { 'q' }; +static symbol s_9[] = { 'u' }; +static symbol s_10[] = { 'U' }; +static symbol s_11[] = { 'i' }; +static symbol s_12[] = { 'u' }; +static symbol s_13[] = { 'y' }; +static symbol s_14[] = { 'i', 'c' }; +static symbol s_15[] = { 'i', 'q', 'U' }; +static symbol s_16[] = { 'l', 'o', 'g' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'a', 't' }; +static symbol s_20[] = { 'e', 'u', 'x' }; +static symbol s_21[] = { 'i' }; +static symbol s_22[] = { 'a', 'b', 'l' }; +static symbol s_23[] = { 'i', 'q', 'U' }; +static symbol s_24[] = { 'a', 't' }; +static symbol s_25[] = { 'i', 'c' }; +static symbol s_26[] = { 'i', 'q', 'U' }; +static symbol s_27[] = { 'e', 'a', 'u' }; +static symbol s_28[] = { 'a', 'l' }; +static symbol s_29[] = { 'e', 'u', 'x' }; +static symbol s_30[] = { 'a', 'n', 't' }; +static symbol s_31[] = { 'e', 'n', 't' }; +static symbol s_32[] = { 'e' }; +static symbol s_33[] = { 's' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'i' }; +static symbol s_37[] = { 'g', 'u' }; +static symbol s_38[] = { 0xC3, 0xA9 }; +static symbol s_39[] = { 0xC3, 0xA8 }; +static symbol s_40[] = { 'e' }; +static symbol s_41[] = { 'Y' }; +static symbol s_42[] = { 'i' }; +static symbol s_43[] = { 0xC3, 0xA7 }; +static symbol s_44[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + while(1) { /* repeat, line 38 */ + int c = z->c; + while(1) { /* goto, line 38 */ + int c = z->c; + { int c = z->c; /* or, line 44 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab3; + z->bra = z->c; /* [, line 40 */ + { int c = z->c; /* or, line 40 */ + if (!(eq_s(z, 1, s_0))) goto lab5; + z->ket = z->c; /* ], line 40 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 40 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 41 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 41 */ + if (ret < 0) return ret; + } + goto lab4; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab3; + z->ket = z->c; /* ], line 42 */ + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + } + lab4: + goto lab2; + lab3: + z->c = c; + z->bra = z->c; /* [, line 45 */ + if (!(eq_s(z, 1, s_6))) goto lab7; + z->ket = z->c; /* ], line 45 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab7; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 45 */ + if (ret < 0) return ret; + } + goto lab2; + lab7: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab1; + z->bra = z->c; /* [, line 47 */ + if (!(eq_s(z, 1, s_9))) goto lab1; + z->ket = z->c; /* ], line 47 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 47 */ + if (ret < 0) return ret; + } + } + lab2: + z->c = c; + break; + lab1: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* goto, line 38 */ + } + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 56 */ + { int c = z->c; /* or, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab2; + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab2; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* next, line 57 */ + } + goto lab1; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 57 */ + } + while(1) { /* gopast, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 57 */ + } + } + } + lab1: + z->I[0] = z->c; /* setmark pV, line 58 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 60 */ + while(1) { /* gopast, line 61 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 61 */ + } + } + while(1) { /* gopast, line 61 */ + if (!(out_grouping_U(z, g_v, 97, 251))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 61 */ + } + } + z->I[1] = z->c; /* setmark p1, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab7; + break; + lab7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 62 */ + } + } + while(1) { /* gopast, line 62 */ + if (!(out_grouping_U(z, g_v, 97, 251))) goto lab8; + break; + lab8: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 62 */ + } + } + z->I[2] = z->c; /* setmark p2, line 62 */ + lab4: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 66 */ + int c = z->c; + z->bra = z->c; /* [, line 68 */ + among_var = find_among(z, a_0, 4); /* substring, line 68 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 68 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 70 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 72 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 83 */ + among_var = find_among_b(z, a_3, 43); /* substring, line 83 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 83 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 87 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 90 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 91 */ + z->ket = z->c; /* [, line 91 */ + if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 91 */ + { int m = z->l - z->c; (void) m; /* or, line 91 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 91 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 91 */ + if (ret < 0) return ret; + } + } + lab1: + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 95 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_16); /* <-, line 95 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_17); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 101 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 107 */ + among_var = find_among_b(z, a_1, 6); /* substring, line 107 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 107 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 108 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 108 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 109 */ + { int ret = r_R2(z); + if (ret == 0) goto lab5; /* call R2, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 109 */ + if (ret < 0) return ret; + } + } + lab4: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call RV, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_21); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 120 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 120 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 121 */ + z->ket = z->c; /* [, line 122 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 122 */ + if (!(among_var)) { z->c = z->l - m; goto lab6; } + z->bra = z->c; /* ], line 122 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab6; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 123 */ + { int ret = r_R2(z); + if (ret == 0) goto lab8; /* call R2, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 123 */ + if (ret < 0) return ret; + } + } + lab7: + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 124 */ + { int ret = r_R2(z); + if (ret == 0) goto lab10; /* call R2, line 124 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 124 */ + if (ret < 0) return ret; + } + } + lab9: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + break; + } + lab6: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 132 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 133 */ + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int m = z->l - z->c; (void) m; /* or, line 133 */ + { int ret = r_R2(z); + if (ret == 0) goto lab13; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + goto lab12; + lab13: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_26); /* <-, line 133 */ + if (ret < 0) return ret; + } + } + lab12: + lab11: + ; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_27); /* <-, line 135 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_28); /* <-, line 136 */ + if (ret < 0) return ret; + } + break; + case 11: + { int m = z->l - z->c; (void) m; /* or, line 138 */ + { int ret = r_R2(z); + if (ret == 0) goto lab15; /* call R2, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + goto lab14; + lab15: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_29); /* <-, line 138 */ + if (ret < 0) return ret; + } + } + lab14: + break; + case 12: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 141 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b_U(z, g_v, 97, 251))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 141 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_30); /* <-, line 146 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 146 */ + break; + case 14: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 147 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 147 */ + break; + case 15: + { int m_test = z->l - z->c; /* test, line 149 */ + if (!(in_grouping_b_U(z, g_v, 97, 251))) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 149 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 149 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 149 */ + break; + } + return 1; +} + +static int r_i_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 155 */ + among_var = find_among_b(z, a_4, 35); /* substring, line 155 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 155 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + if (!(out_grouping_b_U(z, g_v, 97, 251))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 166 */ + among_var = find_among_b(z, a_5, 38); /* substring, line 166 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 166 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 168 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 182 */ + z->ket = z->c; /* [, line 182 */ + if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 182 */ + { int ret; + ret = slice_del(z); /* delete, line 182 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 190 */ + z->ket = z->c; /* [, line 190 */ + if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 190 */ + { int m_test = z->l - z->c; /* test, line 190 */ + if (!(out_grouping_b_U(z, g_keep_with_s, 97, 232))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m3; /* setlimit, line 191 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 191 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_6, 7); /* substring, line 192 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 193 */ + if (!(eq_s_b(z, 1, s_34))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) { z->lb = m3; return 0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 193 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_36); /* <-, line 195 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(eq_s_b(z, 2, s_37))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 197 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_un_double(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 203 */ + if (!(find_among_b(z, a_7, 5))) return 0; /* among, line 203 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 203 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 203 */ + } + z->bra = z->c; /* ], line 203 */ + { int ret; + ret = slice_del(z); /* delete, line 203 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_un_accent(struct SN_env * z) { + { int i = 1; + while(1) { /* atleast, line 207 */ + if (!(out_grouping_b_U(z, g_v, 97, 251))) goto lab0; + i--; + continue; + lab0: + break; + } + if (i > 0) return 0; + } + z->ket = z->c; /* [, line 208 */ + { int m = z->l - z->c; (void) m; /* or, line 208 */ + if (!(eq_s_b(z, 2, s_38))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_39))) return 0; + } +lab1: + z->bra = z->c; /* ], line 208 */ + { int ret; + ret = slice_from_s(z, 1, s_40); /* <-, line 208 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int french_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 214 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 214 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 215 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 215 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 216 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int m = z->l - z->c; (void) m; /* or, line 228 */ + { int m = z->l - z->c; (void) m; /* and, line 224 */ + { int m = z->l - z->c; (void) m; /* or, line 220 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_i_verb_suffix(z); + if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 222 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 225 */ + z->ket = z->c; /* [, line 225 */ + { int m = z->l - z->c; (void) m; /* or, line 225 */ + if (!(eq_s_b(z, 1, s_41))) goto lab10; + z->bra = z->c; /* ], line 225 */ + { int ret; + ret = slice_from_s(z, 1, s_42); /* <-, line 225 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_43))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 226 */ + { int ret; + ret = slice_from_s(z, 1, s_44); /* <-, line 226 */ + if (ret < 0) return ret; + } + } + lab9: + lab8: + ; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 229 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 234 */ + { int ret = r_un_double(z); + if (ret == 0) goto lab11; /* call un_double, line 234 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 235 */ + { int ret = r_un_accent(z); + if (ret == 0) goto lab12; /* call un_accent, line 235 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 237 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab13; /* call postlude, line 237 */ + if (ret < 0) return ret; + } + lab13: + z->c = c; + } + return 1; +} + +extern struct SN_env * french_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void french_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * french_UTF_8_create_env(void); +extern void french_UTF_8_close_env(struct SN_env * z); + +extern int french_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,526 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int german_UTF_8_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * german_UTF_8_create_env(void); +extern void german_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'U' }; +static symbol s_0_2[1] = { 'Y' }; +static symbol s_0_3[2] = { 0xC3, 0xA4 }; +static symbol s_0_4[2] = { 0xC3, 0xB6 }; +static symbol s_0_5[2] = { 0xC3, 0xBC }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 2, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 3, 0}, +/* 4 */ { 2, s_0_4, 0, 4, 0}, +/* 5 */ { 2, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[1] = { 'e' }; +static symbol s_1_1[2] = { 'e', 'm' }; +static symbol s_1_2[2] = { 'e', 'n' }; +static symbol s_1_3[3] = { 'e', 'r', 'n' }; +static symbol s_1_4[2] = { 'e', 'r' }; +static symbol s_1_5[1] = { 's' }; +static symbol s_1_6[2] = { 'e', 's' }; + +static struct among a_1[7] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 3, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 1, s_1_5, -1, 2, 0}, +/* 6 */ { 2, s_1_6, 5, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'n' }; +static symbol s_2_1[2] = { 'e', 'r' }; +static symbol s_2_2[2] = { 's', 't' }; +static symbol s_2_3[3] = { 'e', 's', 't' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 2, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0} +}; + +static symbol s_3_0[2] = { 'i', 'g' }; +static symbol s_3_1[4] = { 'l', 'i', 'c', 'h' }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'u', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'c', 'h' }; +static symbol s_4_4[4] = { 'i', 's', 'c', 'h' }; +static symbol s_4_5[2] = { 'i', 'k' }; +static symbol s_4_6[4] = { 'h', 'e', 'i', 't' }; +static symbol s_4_7[4] = { 'k', 'e', 'i', 't' }; + +static struct among a_4[8] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0}, +/* 7 */ { 4, s_4_7, -1, 4, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; + +static unsigned char g_s_ending[] = { 117, 30, 5 }; + +static unsigned char g_st_ending[] = { 117, 30, 4 }; + +static symbol s_0[] = { 0xC3, 0x9F }; +static symbol s_1[] = { 's', 's' }; +static symbol s_2[] = { 'u' }; +static symbol s_3[] = { 'U' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'u' }; +static symbol s_8[] = { 'a' }; +static symbol s_9[] = { 'o' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'g' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'e', 'r' }; +static symbol s_15[] = { 'e', 'n' }; + +static int r_prelude(struct SN_env * z) { + { int c_test = z->c; /* test, line 30 */ + while(1) { /* repeat, line 30 */ + int c = z->c; + { int c = z->c; /* or, line 33 */ + z->bra = z->c; /* [, line 32 */ + if (!(eq_s(z, 2, s_0))) goto lab2; + z->ket = z->c; /* ], line 32 */ + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 32 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 33 */ + } + } + lab1: + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 36 */ + int c = z->c; + while(1) { /* goto, line 36 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4; + z->bra = z->c; /* [, line 37 */ + { int c = z->c; /* or, line 37 */ + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 37 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 37 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab4; + z->ket = z->c; /* ], line 38 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 38 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = c; + break; + lab4: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab3; + z->c = c; /* goto, line 36 */ + } + } + continue; + lab3: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c_test = z->c; /* test, line 47 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 47 */ + } + z->I[2] = z->c; /* setmark x, line 47 */ + z->c = c_test; + } + while(1) { /* gopast, line 49 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 49 */ + } + } + while(1) { /* gopast, line 49 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 49 */ + } + } + z->I[0] = z->c; /* setmark p1, line 49 */ + /* try, line 50 */ + if (!(z->I[0] < z->I[2])) goto lab2; + z->I[0] = z->I[2]; +lab2: + while(1) { /* gopast, line 51 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 51 */ + } + } + while(1) { /* gopast, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 51 */ + } + } + z->I[1] = z->c; /* setmark p2, line 51 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 55 */ + int c = z->c; + z->bra = z->c; /* [, line 57 */ + among_var = find_among(z, a_0, 6); /* substring, line 57 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 57 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 63 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 74 */ + z->ket = z->c; /* [, line 75 */ + among_var = find_among_b(z, a_1, 7); /* substring, line 75 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 75 */ + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 75 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 77 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 98, 116))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 80 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 84 */ + z->ket = z->c; /* [, line 85 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 85 */ + if (!(among_var)) goto lab1; + z->bra = z->c; /* ], line 85 */ + { int ret = r_R1(z); + if (ret == 0) goto lab1; /* call R1, line 85 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab1; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_st_ending, 98, 116))) goto lab1; + { int c = skip_utf8(z->p, z->c, z->lb, z->l, - 3); + if (c < 0) goto lab1; + z->c = c; /* hop, line 90 */ + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + break; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 94 */ + z->ket = z->c; /* [, line 95 */ + among_var = find_among_b(z, a_4, 8); /* substring, line 95 */ + if (!(among_var)) goto lab2; + z->bra = z->c; /* ], line 95 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 95 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab2; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 98 */ + z->ket = z->c; /* [, line 98 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 98 */ + { int m = z->l - z->c; (void) m; /* not, line 98 */ + if (!(eq_s_b(z, 1, s_12))) goto lab4; + { z->c = z->l - m; goto lab3; } + lab4: + z->c = z->l - m; + } + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* not, line 101 */ + if (!(eq_s_b(z, 1, s_13))) goto lab5; + goto lab2; + lab5: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 105 */ + z->ket = z->c; /* [, line 106 */ + { int m = z->l - z->c; (void) m; /* or, line 106 */ + if (!(eq_s_b(z, 2, s_14))) goto lab8; + goto lab7; + lab8: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab6; } + } + lab7: + z->bra = z->c; /* ], line 106 */ + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R1, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab6: + ; + } + break; + case 4: + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab9; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab9; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab9; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + break; + } + lab9: + ; + } + break; + } + lab2: + z->c = z->l - m; + } + return 1; +} + +extern int german_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 125 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 125 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 126 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 126 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 127 */ + + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 128 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 129 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 129 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * german_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void german_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * german_UTF_8_create_env(void); +extern void german_UTF_8_close_env(struct SN_env * z); + +extern int german_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1113 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int italian_UTF_8_stem(struct SN_env * z); +static int r_vowel_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * italian_UTF_8_create_env(void); +extern void italian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 'q', 'u' }; +static symbol s_0_2[2] = { 0xC3, 0xA1 }; +static symbol s_0_3[2] = { 0xC3, 0xA9 }; +static symbol s_0_4[2] = { 0xC3, 0xAD }; +static symbol s_0_5[2] = { 0xC3, 0xB3 }; +static symbol s_0_6[2] = { 0xC3, 0xBA }; + +static struct among a_0[7] = +{ +/* 0 */ { 0, 0, -1, 7, 0}, +/* 1 */ { 2, s_0_1, 0, 6, 0}, +/* 2 */ { 2, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 2, 0}, +/* 4 */ { 2, s_0_4, 0, 3, 0}, +/* 5 */ { 2, s_0_5, 0, 4, 0}, +/* 6 */ { 2, s_0_6, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'U' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 1, 0}, +/* 2 */ { 1, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'l', 'a' }; +static symbol s_2_1[4] = { 'c', 'e', 'l', 'a' }; +static symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' }; +static symbol s_2_3[4] = { 'm', 'e', 'l', 'a' }; +static symbol s_2_4[4] = { 't', 'e', 'l', 'a' }; +static symbol s_2_5[4] = { 'v', 'e', 'l', 'a' }; +static symbol s_2_6[2] = { 'l', 'e' }; +static symbol s_2_7[4] = { 'c', 'e', 'l', 'e' }; +static symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' }; +static symbol s_2_9[4] = { 'm', 'e', 'l', 'e' }; +static symbol s_2_10[4] = { 't', 'e', 'l', 'e' }; +static symbol s_2_11[4] = { 'v', 'e', 'l', 'e' }; +static symbol s_2_12[2] = { 'n', 'e' }; +static symbol s_2_13[4] = { 'c', 'e', 'n', 'e' }; +static symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' }; +static symbol s_2_15[4] = { 'm', 'e', 'n', 'e' }; +static symbol s_2_16[4] = { 's', 'e', 'n', 'e' }; +static symbol s_2_17[4] = { 't', 'e', 'n', 'e' }; +static symbol s_2_18[4] = { 'v', 'e', 'n', 'e' }; +static symbol s_2_19[2] = { 'c', 'i' }; +static symbol s_2_20[2] = { 'l', 'i' }; +static symbol s_2_21[4] = { 'c', 'e', 'l', 'i' }; +static symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' }; +static symbol s_2_23[4] = { 'm', 'e', 'l', 'i' }; +static symbol s_2_24[4] = { 't', 'e', 'l', 'i' }; +static symbol s_2_25[4] = { 'v', 'e', 'l', 'i' }; +static symbol s_2_26[3] = { 'g', 'l', 'i' }; +static symbol s_2_27[2] = { 'm', 'i' }; +static symbol s_2_28[2] = { 's', 'i' }; +static symbol s_2_29[2] = { 't', 'i' }; +static symbol s_2_30[2] = { 'v', 'i' }; +static symbol s_2_31[2] = { 'l', 'o' }; +static symbol s_2_32[4] = { 'c', 'e', 'l', 'o' }; +static symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' }; +static symbol s_2_34[4] = { 'm', 'e', 'l', 'o' }; +static symbol s_2_35[4] = { 't', 'e', 'l', 'o' }; +static symbol s_2_36[4] = { 'v', 'e', 'l', 'o' }; + +static struct among a_2[37] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 4, s_2_1, 0, -1, 0}, +/* 2 */ { 6, s_2_2, 0, -1, 0}, +/* 3 */ { 4, s_2_3, 0, -1, 0}, +/* 4 */ { 4, s_2_4, 0, -1, 0}, +/* 5 */ { 4, s_2_5, 0, -1, 0}, +/* 6 */ { 2, s_2_6, -1, -1, 0}, +/* 7 */ { 4, s_2_7, 6, -1, 0}, +/* 8 */ { 6, s_2_8, 6, -1, 0}, +/* 9 */ { 4, s_2_9, 6, -1, 0}, +/* 10 */ { 4, s_2_10, 6, -1, 0}, +/* 11 */ { 4, s_2_11, 6, -1, 0}, +/* 12 */ { 2, s_2_12, -1, -1, 0}, +/* 13 */ { 4, s_2_13, 12, -1, 0}, +/* 14 */ { 6, s_2_14, 12, -1, 0}, +/* 15 */ { 4, s_2_15, 12, -1, 0}, +/* 16 */ { 4, s_2_16, 12, -1, 0}, +/* 17 */ { 4, s_2_17, 12, -1, 0}, +/* 18 */ { 4, s_2_18, 12, -1, 0}, +/* 19 */ { 2, s_2_19, -1, -1, 0}, +/* 20 */ { 2, s_2_20, -1, -1, 0}, +/* 21 */ { 4, s_2_21, 20, -1, 0}, +/* 22 */ { 6, s_2_22, 20, -1, 0}, +/* 23 */ { 4, s_2_23, 20, -1, 0}, +/* 24 */ { 4, s_2_24, 20, -1, 0}, +/* 25 */ { 4, s_2_25, 20, -1, 0}, +/* 26 */ { 3, s_2_26, 20, -1, 0}, +/* 27 */ { 2, s_2_27, -1, -1, 0}, +/* 28 */ { 2, s_2_28, -1, -1, 0}, +/* 29 */ { 2, s_2_29, -1, -1, 0}, +/* 30 */ { 2, s_2_30, -1, -1, 0}, +/* 31 */ { 2, s_2_31, -1, -1, 0}, +/* 32 */ { 4, s_2_32, 31, -1, 0}, +/* 33 */ { 6, s_2_33, 31, -1, 0}, +/* 34 */ { 4, s_2_34, 31, -1, 0}, +/* 35 */ { 4, s_2_35, 31, -1, 0}, +/* 36 */ { 4, s_2_36, 31, -1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_3_1[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_3_2[2] = { 'a', 'r' }; +static symbol s_3_3[2] = { 'e', 'r' }; +static symbol s_3_4[2] = { 'i', 'r' }; + +static struct among a_3[5] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 2, s_3_3, -1, 2, 0}, +/* 4 */ { 2, s_3_4, -1, 2, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'o', 's' }; +static symbol s_4_3[2] = { 'i', 'v' }; + +static struct among a_4[4] = +{ +/* 0 */ { 2, s_4_0, -1, -1, 0}, +/* 1 */ { 4, s_4_1, -1, -1, 0}, +/* 2 */ { 2, s_4_2, -1, -1, 0}, +/* 3 */ { 2, s_4_3, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' }; +static symbol s_6_2[3] = { 'o', 's', 'a' }; +static symbol s_6_3[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_4[3] = { 'i', 'v', 'a' }; +static symbol s_6_5[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_6[4] = { 'e', 'n', 'z', 'a' }; +static symbol s_6_7[3] = { 'i', 'c', 'e' }; +static symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_6_9[4] = { 'i', 'c', 'h', 'e' }; +static symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' }; +static symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' }; +static symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' }; +static symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' }; +static symbol s_6_17[3] = { 'o', 's', 'e' }; +static symbol s_6_18[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_21[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_22[3] = { 'i', 'v', 'e' }; +static symbol s_6_23[4] = { 'a', 'n', 'z', 'e' }; +static symbol s_6_24[4] = { 'e', 'n', 'z', 'e' }; +static symbol s_6_25[3] = { 'i', 'c', 'i' }; +static symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' }; +static symbol s_6_27[4] = { 'i', 'c', 'h', 'i' }; +static symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' }; +static symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' }; +static symbol s_6_30[4] = { 'i', 's', 'm', 'i' }; +static symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' }; +static symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' }; +static symbol s_6_35[3] = { 'o', 's', 'i' }; +static symbol s_6_36[4] = { 'a', 'n', 't', 'i' }; +static symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_39[4] = { 'i', 's', 't', 'i' }; +static symbol s_6_40[3] = { 'i', 'v', 'i' }; +static symbol s_6_41[3] = { 'i', 'c', 'o' }; +static symbol s_6_42[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_43[3] = { 'o', 's', 'o' }; +static symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_46[3] = { 'i', 'v', 'o' }; +static symbol s_6_47[4] = { 'i', 't', 0xC3, 0xA0 }; +static symbol s_6_48[5] = { 'i', 's', 't', 0xC3, 0xA0 }; +static symbol s_6_49[5] = { 'i', 's', 't', 0xC3, 0xA8 }; +static symbol s_6_50[5] = { 'i', 's', 't', 0xC3, 0xAC }; + +static struct among a_6[51] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 3, 0}, +/* 2 */ { 3, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 9, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 4, s_6_6, -1, 5, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, 7, 1, 0}, +/* 9 */ { 4, s_6_9, -1, 1, 0}, +/* 10 */ { 5, s_6_10, -1, 3, 0}, +/* 11 */ { 5, s_6_11, -1, 1, 0}, +/* 12 */ { 5, s_6_12, -1, 1, 0}, +/* 13 */ { 6, s_6_13, -1, 4, 0}, +/* 14 */ { 6, s_6_14, -1, 2, 0}, +/* 15 */ { 6, s_6_15, -1, 4, 0}, +/* 16 */ { 5, s_6_16, -1, 2, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 5, s_6_19, -1, 1, 0}, +/* 20 */ { 6, s_6_20, 19, 7, 0}, +/* 21 */ { 4, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 1, 0}, +/* 24 */ { 4, s_6_24, -1, 5, 0}, +/* 25 */ { 3, s_6_25, -1, 1, 0}, +/* 26 */ { 6, s_6_26, 25, 1, 0}, +/* 27 */ { 4, s_6_27, -1, 1, 0}, +/* 28 */ { 5, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 1, 0}, +/* 31 */ { 6, s_6_31, -1, 4, 0}, +/* 32 */ { 6, s_6_32, -1, 2, 0}, +/* 33 */ { 6, s_6_33, -1, 4, 0}, +/* 34 */ { 5, s_6_34, -1, 2, 0}, +/* 35 */ { 3, s_6_35, -1, 1, 0}, +/* 36 */ { 4, s_6_36, -1, 1, 0}, +/* 37 */ { 6, s_6_37, -1, 6, 0}, +/* 38 */ { 6, s_6_38, -1, 6, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 3, s_6_40, -1, 9, 0}, +/* 41 */ { 3, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 3, s_6_43, -1, 1, 0}, +/* 44 */ { 6, s_6_44, -1, 6, 0}, +/* 45 */ { 6, s_6_45, -1, 6, 0}, +/* 46 */ { 3, s_6_46, -1, 9, 0}, +/* 47 */ { 4, s_6_47, -1, 8, 0}, +/* 48 */ { 5, s_6_48, -1, 1, 0}, +/* 49 */ { 5, s_6_49, -1, 1, 0}, +/* 50 */ { 5, s_6_50, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 'i', 's', 'c', 'a' }; +static symbol s_7_1[4] = { 'e', 'n', 'd', 'a' }; +static symbol s_7_2[3] = { 'a', 't', 'a' }; +static symbol s_7_3[3] = { 'i', 't', 'a' }; +static symbol s_7_4[3] = { 'u', 't', 'a' }; +static symbol s_7_5[3] = { 'a', 'v', 'a' }; +static symbol s_7_6[3] = { 'e', 'v', 'a' }; +static symbol s_7_7[3] = { 'i', 'v', 'a' }; +static symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_10[4] = { 'i', 's', 'c', 'e' }; +static symbol s_7_11[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_7_12[3] = { 'a', 'r', 'e' }; +static symbol s_7_13[3] = { 'e', 'r', 'e' }; +static symbol s_7_14[3] = { 'i', 'r', 'e' }; +static symbol s_7_15[4] = { 'a', 's', 's', 'e' }; +static symbol s_7_16[3] = { 'a', 't', 'e' }; +static symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' }; +static symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' }; +static symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' }; +static symbol s_7_20[3] = { 'e', 't', 'e' }; +static symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' }; +static symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' }; +static symbol s_7_23[3] = { 'i', 't', 'e' }; +static symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_26[3] = { 'u', 't', 'e' }; +static symbol s_7_27[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_7_28[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_7_29[4] = { 'i', 's', 'c', 'i' }; +static symbol s_7_30[4] = { 'e', 'n', 'd', 'i' }; +static symbol s_7_31[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_7_32[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_7_33[4] = { 'a', 's', 's', 'i' }; +static symbol s_7_34[3] = { 'a', 't', 'i' }; +static symbol s_7_35[3] = { 'i', 't', 'i' }; +static symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_38[3] = { 'u', 't', 'i' }; +static symbol s_7_39[3] = { 'a', 'v', 'i' }; +static symbol s_7_40[3] = { 'e', 'v', 'i' }; +static symbol s_7_41[3] = { 'i', 'v', 'i' }; +static symbol s_7_42[4] = { 'i', 's', 'c', 'o' }; +static symbol s_7_43[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_7_44[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' }; +static symbol s_7_46[4] = { 'i', 'a', 'm', 'o' }; +static symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' }; +static symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' }; +static symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' }; +static symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' }; +static symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' }; +static symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' }; +static symbol s_7_53[4] = { 'a', 'm', 'm', 'o' }; +static symbol s_7_54[4] = { 'e', 'm', 'm', 'o' }; +static symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_57[4] = { 'i', 'm', 'm', 'o' }; +static symbol s_7_58[3] = { 'a', 'n', 'o' }; +static symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' }; +static symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' }; +static symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' }; +static symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' }; +static symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_65[3] = { 'o', 'n', 'o' }; +static symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' }; +static symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' }; +static symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' }; +static symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' }; +static symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_75[3] = { 'a', 't', 'o' }; +static symbol s_7_76[3] = { 'i', 't', 'o' }; +static symbol s_7_77[3] = { 'u', 't', 'o' }; +static symbol s_7_78[3] = { 'a', 'v', 'o' }; +static symbol s_7_79[3] = { 'e', 'v', 'o' }; +static symbol s_7_80[3] = { 'i', 'v', 'o' }; +static symbol s_7_81[2] = { 'a', 'r' }; +static symbol s_7_82[2] = { 'i', 'r' }; +static symbol s_7_83[4] = { 'e', 'r', 0xC3, 0xA0 }; +static symbol s_7_84[4] = { 'i', 'r', 0xC3, 0xA0 }; +static symbol s_7_85[4] = { 'e', 'r', 0xC3, 0xB2 }; +static symbol s_7_86[4] = { 'i', 'r', 0xC3, 0xB2 }; + +static struct among a_7[87] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 3, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 6, s_7_8, -1, 1, 0}, +/* 9 */ { 6, s_7_9, -1, 1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, -1, 1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 4, s_7_15, -1, 1, 0}, +/* 16 */ { 3, s_7_16, -1, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0}, +/* 18 */ { 5, s_7_18, 16, 1, 0}, +/* 19 */ { 5, s_7_19, 16, 1, 0}, +/* 20 */ { 3, s_7_20, -1, 1, 0}, +/* 21 */ { 5, s_7_21, 20, 1, 0}, +/* 22 */ { 5, s_7_22, 20, 1, 0}, +/* 23 */ { 3, s_7_23, -1, 1, 0}, +/* 24 */ { 6, s_7_24, -1, 1, 0}, +/* 25 */ { 6, s_7_25, -1, 1, 0}, +/* 26 */ { 3, s_7_26, -1, 1, 0}, +/* 27 */ { 4, s_7_27, -1, 1, 0}, +/* 28 */ { 4, s_7_28, -1, 1, 0}, +/* 29 */ { 4, s_7_29, -1, 1, 0}, +/* 30 */ { 4, s_7_30, -1, 1, 0}, +/* 31 */ { 4, s_7_31, -1, 1, 0}, +/* 32 */ { 4, s_7_32, -1, 1, 0}, +/* 33 */ { 4, s_7_33, -1, 1, 0}, +/* 34 */ { 3, s_7_34, -1, 1, 0}, +/* 35 */ { 3, s_7_35, -1, 1, 0}, +/* 36 */ { 6, s_7_36, -1, 1, 0}, +/* 37 */ { 6, s_7_37, -1, 1, 0}, +/* 38 */ { 3, s_7_38, -1, 1, 0}, +/* 39 */ { 3, s_7_39, -1, 1, 0}, +/* 40 */ { 3, s_7_40, -1, 1, 0}, +/* 41 */ { 3, s_7_41, -1, 1, 0}, +/* 42 */ { 4, s_7_42, -1, 1, 0}, +/* 43 */ { 4, s_7_43, -1, 1, 0}, +/* 44 */ { 4, s_7_44, -1, 1, 0}, +/* 45 */ { 4, s_7_45, -1, 1, 0}, +/* 46 */ { 4, s_7_46, -1, 1, 0}, +/* 47 */ { 5, s_7_47, -1, 1, 0}, +/* 48 */ { 5, s_7_48, -1, 1, 0}, +/* 49 */ { 5, s_7_49, -1, 1, 0}, +/* 50 */ { 5, s_7_50, -1, 1, 0}, +/* 51 */ { 5, s_7_51, -1, 1, 0}, +/* 52 */ { 6, s_7_52, -1, 1, 0}, +/* 53 */ { 4, s_7_53, -1, 1, 0}, +/* 54 */ { 4, s_7_54, -1, 1, 0}, +/* 55 */ { 6, s_7_55, 54, 1, 0}, +/* 56 */ { 6, s_7_56, 54, 1, 0}, +/* 57 */ { 4, s_7_57, -1, 1, 0}, +/* 58 */ { 3, s_7_58, -1, 1, 0}, +/* 59 */ { 6, s_7_59, 58, 1, 0}, +/* 60 */ { 5, s_7_60, 58, 1, 0}, +/* 61 */ { 5, s_7_61, 58, 1, 0}, +/* 62 */ { 5, s_7_62, 58, 1, 0}, +/* 63 */ { 6, s_7_63, -1, 1, 0}, +/* 64 */ { 6, s_7_64, -1, 1, 0}, +/* 65 */ { 3, s_7_65, -1, 1, 0}, +/* 66 */ { 6, s_7_66, 65, 1, 0}, +/* 67 */ { 5, s_7_67, 65, 1, 0}, +/* 68 */ { 5, s_7_68, 65, 1, 0}, +/* 69 */ { 5, s_7_69, 65, 1, 0}, +/* 70 */ { 8, s_7_70, -1, 1, 0}, +/* 71 */ { 8, s_7_71, -1, 1, 0}, +/* 72 */ { 6, s_7_72, -1, 1, 0}, +/* 73 */ { 6, s_7_73, -1, 1, 0}, +/* 74 */ { 6, s_7_74, -1, 1, 0}, +/* 75 */ { 3, s_7_75, -1, 1, 0}, +/* 76 */ { 3, s_7_76, -1, 1, 0}, +/* 77 */ { 3, s_7_77, -1, 1, 0}, +/* 78 */ { 3, s_7_78, -1, 1, 0}, +/* 79 */ { 3, s_7_79, -1, 1, 0}, +/* 80 */ { 3, s_7_80, -1, 1, 0}, +/* 81 */ { 2, s_7_81, -1, 1, 0}, +/* 82 */ { 2, s_7_82, -1, 1, 0}, +/* 83 */ { 4, s_7_83, -1, 1, 0}, +/* 84 */ { 4, s_7_84, -1, 1, 0}, +/* 85 */ { 4, s_7_85, -1, 1, 0}, +/* 86 */ { 4, s_7_86, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; + +static unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; + +static unsigned char g_CG[] = { 17 }; + +static symbol s_0[] = { 0xC3, 0xA0 }; +static symbol s_1[] = { 0xC3, 0xA8 }; +static symbol s_2[] = { 0xC3, 0xAC }; +static symbol s_3[] = { 0xC3, 0xB2 }; +static symbol s_4[] = { 0xC3, 0xB9 }; +static symbol s_5[] = { 'q', 'U' }; +static symbol s_6[] = { 'u' }; +static symbol s_7[] = { 'U' }; +static symbol s_8[] = { 'i' }; +static symbol s_9[] = { 'I' }; +static symbol s_10[] = { 'i' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'i', 'c' }; +static symbol s_14[] = { 'l', 'o', 'g' }; +static symbol s_15[] = { 'u' }; +static symbol s_16[] = { 'e', 'n', 't', 'e' }; +static symbol s_17[] = { 'a', 't' }; +static symbol s_18[] = { 'a', 't' }; +static symbol s_19[] = { 'i', 'c' }; +static symbol s_20[] = { 'i' }; +static symbol s_21[] = { 'h' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 35 */ + while(1) { /* repeat, line 35 */ + int c = z->c; + z->bra = z->c; /* [, line 36 */ + among_var = find_among(z, a_0, 7); /* substring, line 36 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 36 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 37 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_3); /* <-, line 40 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 2, s_4); /* <-, line 41 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + break; + case 7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 43 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 46 */ + int c = z->c; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + z->bra = z->c; /* [, line 47 */ + { int c = z->c; /* or, line 47 */ + if (!(eq_s(z, 1, s_6))) goto lab4; + z->ket = z->c; /* ], line 47 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 47 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab2; + z->ket = z->c; /* ], line 48 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 48 */ + if (ret < 0) return ret; + } + } + lab3: + z->c = c; + break; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab1; + z->c = c; /* goto, line 46 */ + } + } + continue; + lab1: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 58 */ + { int c = z->c; /* or, line 60 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + { int c = z->c; /* or, line 59 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab4; + while(1) { /* gopast, line 59 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 59 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + while(1) { /* gopast, line 59 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 59 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab0; + { int c = z->c; /* or, line 61 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab8; + while(1) { /* gopast, line 61 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 61 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 61 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 62 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 64 */ + while(1) { /* gopast, line 65 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 65 */ + } + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 65 */ + } + } + z->I[1] = z->c; /* setmark p1, line 65 */ + while(1) { /* gopast, line 66 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 66 */ + } + } + while(1) { /* gopast, line 66 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 66 */ + } + } + z->I[2] = z->c; /* setmark p2, line 66 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 70 */ + int c = z->c; + z->bra = z->c; /* [, line 72 */ + among_var = find_among(z, a_1, 3); /* substring, line 72 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 72 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 75 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */ + z->bra = z->c; /* ], line 87 */ + among_var = find_among_b(z, a_3, 5); /* among, line 97 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 97 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 104 */ + among_var = find_among_b(z, a_6, 51); /* substring, line 104 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 104 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 114 */ + z->ket = z->c; /* [, line 114 */ + if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 114 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 114 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 117 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 121 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 121 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 4); /* substring, line 127 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 127 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 128 */ + if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 128 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 128 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 128 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 137 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 137 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 142 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 143 */ + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 148 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 148 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_7, 87); /* substring, line 149 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_vowel_suffix(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* try, line 171 */ + z->ket = z->c; /* [, line 172 */ + if (!(in_grouping_b_U(z, g_AEIO, 97, 242))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 172 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 172 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 172 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 173 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 173 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 173 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 173 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m = z->l - z->c; (void) m; /* try, line 175 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 176 */ + if (!(in_grouping_b_U(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab1: + ; + } + return 1; +} + +extern int italian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 182 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 182 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 183 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 183 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 184 */ + + { int m = z->l - z->c; (void) m; /* do, line 185 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab2; /* call attached_pronoun, line 185 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 186 */ + { int m = z->l - z->c; (void) m; /* or, line 186 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab5; /* call standard_suffix, line 186 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab3; /* call verb_suffix, line 186 */ + if (ret < 0) return ret; + } + } + lab4: + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 187 */ + { int ret = r_vowel_suffix(z); + if (ret == 0) goto lab6; /* call vowel_suffix, line 187 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 189 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 189 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * italian_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void italian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * italian_UTF_8_create_env(void); +extern void italian_UTF_8_close_env(struct SN_env * z); + +extern int italian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,302 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int norwegian_UTF_8_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * norwegian_UTF_8_create_env(void); +extern void norwegian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[1] = { 'e' }; +static symbol s_0_2[3] = { 'e', 'd', 'e' }; +static symbol s_0_3[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_4[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_5[3] = { 'a', 'n', 'e' }; +static symbol s_0_6[3] = { 'e', 'n', 'e' }; +static symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 't', 'e' }; +static symbol s_0_9[2] = { 'e', 'n' }; +static symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_11[2] = { 'a', 'r' }; +static symbol s_0_12[2] = { 'e', 'r' }; +static symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_14[1] = { 's' }; +static symbol s_0_15[2] = { 'a', 's' }; +static symbol s_0_16[2] = { 'e', 's' }; +static symbol s_0_17[4] = { 'e', 'd', 'e', 's' }; +static symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_19[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' }; +static symbol s_0_21[3] = { 'e', 'n', 's' }; +static symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_23[3] = { 'e', 'r', 's' }; +static symbol s_0_24[3] = { 'e', 't', 's' }; +static symbol s_0_25[2] = { 'e', 't' }; +static symbol s_0_26[3] = { 'h', 'e', 't' }; +static symbol s_0_27[3] = { 'e', 'r', 't' }; +static symbol s_0_28[3] = { 'a', 's', 't' }; + +static struct among a_0[29] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 1, s_0_1, -1, 1, 0}, +/* 2 */ { 3, s_0_2, 1, 1, 0}, +/* 3 */ { 4, s_0_3, 1, 1, 0}, +/* 4 */ { 4, s_0_4, 1, 1, 0}, +/* 5 */ { 3, s_0_5, 1, 1, 0}, +/* 6 */ { 3, s_0_6, 1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 1, 3, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0}, +/* 10 */ { 5, s_0_10, 9, 1, 0}, +/* 11 */ { 2, s_0_11, -1, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 1, s_0_14, -1, 2, 0}, +/* 15 */ { 2, s_0_15, 14, 1, 0}, +/* 16 */ { 2, s_0_16, 14, 1, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 5, s_0_18, 16, 1, 0}, +/* 19 */ { 4, s_0_19, 16, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 3, s_0_21, 14, 1, 0}, +/* 22 */ { 6, s_0_22, 21, 1, 0}, +/* 23 */ { 3, s_0_23, 14, 1, 0}, +/* 24 */ { 3, s_0_24, 14, 1, 0}, +/* 25 */ { 2, s_0_25, -1, 1, 0}, +/* 26 */ { 3, s_0_26, 25, 1, 0}, +/* 27 */ { 3, s_0_27, -1, 3, 0}, +/* 28 */ { 3, s_0_28, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 't' }; +static symbol s_1_1[2] = { 'v', 't' }; + +static struct among a_1[2] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'e', 'g' }; +static symbol s_2_1[4] = { 'e', 'l', 'e', 'g' }; +static symbol s_2_2[2] = { 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'i', 'g' }; +static symbol s_2_4[3] = { 'l', 'i', 'g' }; +static symbol s_2_5[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_6[3] = { 'e', 'l', 's' }; +static symbol s_2_7[3] = { 'l', 'o', 'v' }; +static symbol s_2_8[4] = { 'e', 'l', 'o', 'v' }; +static symbol s_2_9[4] = { 's', 'l', 'o', 'v' }; +static symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' }; + +static struct among a_2[11] = +{ +/* 0 */ { 3, s_2_0, -1, 1, 0}, +/* 1 */ { 4, s_2_1, 0, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0}, +/* 4 */ { 3, s_2_4, 2, 1, 0}, +/* 5 */ { 4, s_2_5, 4, 1, 0}, +/* 6 */ { 3, s_2_6, -1, 1, 0}, +/* 7 */ { 3, s_2_7, -1, 1, 0}, +/* 8 */ { 4, s_2_8, 7, 1, 0}, +/* 9 */ { 4, s_2_9, 7, 1, 0}, +/* 10 */ { 7, s_2_10, 9, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 119, 125, 149, 1 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'e', 'r' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 30 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 30 */ + } + z->I[1] = z->c; /* setmark x, line 30 */ + z->c = c_test; + } + while(1) { /* goto, line 31 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 31 */ + } + } + while(1) { /* gopast, line 31 */ + if (!(out_grouping_U(z, g_v, 97, 248))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 31 */ + } + } + z->I[0] = z->c; /* setmark p1, line 31 */ + /* try, line 32 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 38 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 38 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 38 */ + among_var = find_among_b(z, a_0, 29); /* substring, line 38 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 38 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 46 */ + if (!(in_grouping_b_U(z, g_s_ending, 98, 122))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_0))) return 0; + if (!(out_grouping_b_U(z, g_v, 97, 248))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 48 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 53 */ + { int m3; /* setlimit, line 54 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 54 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 54 */ + if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */ + z->bra = z->c; /* ], line 54 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 59 */ + } + z->bra = z->c; /* ], line 59 */ + { int ret; + ret = slice_del(z); /* delete, line 59 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 63 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 63 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 63 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 63 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 63 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 67 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int norwegian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 74 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 74 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 75 */ + + { int m = z->l - z->c; (void) m; /* do, line 76 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 76 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 77 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 77 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 78 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 78 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * norwegian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void norwegian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * norwegian_UTF_8_create_env(void); +extern void norwegian_UTF_8_close_env(struct SN_env * z); + +extern int norwegian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,794 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int porter_UTF_8_stem(struct SN_env * z); +static int r_Step_5b(struct SN_env * z); +static int r_Step_5a(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); + +extern struct SN_env * porter_UTF_8_create_env(void); +extern void porter_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 's' }; +static symbol s_0_1[3] = { 'i', 'e', 's' }; +static symbol s_0_2[4] = { 's', 's', 'e', 's' }; +static symbol s_0_3[2] = { 's', 's' }; + +static struct among a_0[4] = +{ +/* 0 */ { 1, s_0_0, -1, 3, 0}, +/* 1 */ { 3, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, -1, 0} +}; + +static symbol s_1_1[2] = { 'b', 'b' }; +static symbol s_1_2[2] = { 'd', 'd' }; +static symbol s_1_3[2] = { 'f', 'f' }; +static symbol s_1_4[2] = { 'g', 'g' }; +static symbol s_1_5[2] = { 'b', 'l' }; +static symbol s_1_6[2] = { 'm', 'm' }; +static symbol s_1_7[2] = { 'n', 'n' }; +static symbol s_1_8[2] = { 'p', 'p' }; +static symbol s_1_9[2] = { 'r', 'r' }; +static symbol s_1_10[2] = { 'a', 't' }; +static symbol s_1_11[2] = { 't', 't' }; +static symbol s_1_12[2] = { 'i', 'z' }; + +static struct among a_1[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 2, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0}, +/* 3 */ { 2, s_1_3, 0, 2, 0}, +/* 4 */ { 2, s_1_4, 0, 2, 0}, +/* 5 */ { 2, s_1_5, 0, 1, 0}, +/* 6 */ { 2, s_1_6, 0, 2, 0}, +/* 7 */ { 2, s_1_7, 0, 2, 0}, +/* 8 */ { 2, s_1_8, 0, 2, 0}, +/* 9 */ { 2, s_1_9, 0, 2, 0}, +/* 10 */ { 2, s_1_10, 0, 1, 0}, +/* 11 */ { 2, s_1_11, 0, 2, 0}, +/* 12 */ { 2, s_1_12, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'd' }; +static symbol s_2_1[3] = { 'e', 'e', 'd' }; +static symbol s_2_2[3] = { 'i', 'n', 'g' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 2, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_3_3[3] = { 'e', 'l', 'i' }; +static symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; +static symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_3[20] = +{ +/* 0 */ { 4, s_3_0, -1, 3, 0}, +/* 1 */ { 4, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 4, 0}, +/* 3 */ { 3, s_3_3, -1, 6, 0}, +/* 4 */ { 4, s_3_4, -1, 9, 0}, +/* 5 */ { 5, s_3_5, -1, 12, 0}, +/* 6 */ { 5, s_3_6, -1, 5, 0}, +/* 7 */ { 5, s_3_7, -1, 10, 0}, +/* 8 */ { 6, s_3_8, -1, 14, 0}, +/* 9 */ { 5, s_3_9, -1, 13, 0}, +/* 10 */ { 6, s_3_10, -1, 1, 0}, +/* 11 */ { 7, s_3_11, 10, 8, 0}, +/* 12 */ { 5, s_3_12, -1, 10, 0}, +/* 13 */ { 5, s_3_13, -1, 8, 0}, +/* 14 */ { 7, s_3_14, 13, 7, 0}, +/* 15 */ { 4, s_3_15, -1, 7, 0}, +/* 16 */ { 4, s_3_16, -1, 8, 0}, +/* 17 */ { 7, s_3_17, -1, 13, 0}, +/* 18 */ { 7, s_3_18, -1, 11, 0}, +/* 19 */ { 7, s_3_19, -1, 12, 0} +}; + +static symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_4_5[3] = { 'f', 'u', 'l' }; +static symbol s_4_6[4] = { 'n', 'e', 's', 's' }; + +static struct among a_4[7] = +{ +/* 0 */ { 5, s_4_0, -1, 2, 0}, +/* 1 */ { 5, s_4_1, -1, 3, 0}, +/* 2 */ { 5, s_4_2, -1, 1, 0}, +/* 3 */ { 5, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 3, s_4_5, -1, 3, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_5_5[3] = { 'a', 't', 'e' }; +static symbol s_5_6[3] = { 'i', 'v', 'e' }; +static symbol s_5_7[3] = { 'i', 'z', 'e' }; +static symbol s_5_8[3] = { 'i', 't', 'i' }; +static symbol s_5_9[2] = { 'a', 'l' }; +static symbol s_5_10[3] = { 'i', 's', 'm' }; +static symbol s_5_11[3] = { 'i', 'o', 'n' }; +static symbol s_5_12[2] = { 'e', 'r' }; +static symbol s_5_13[3] = { 'o', 'u', 's' }; +static symbol s_5_14[3] = { 'a', 'n', 't' }; +static symbol s_5_15[3] = { 'e', 'n', 't' }; +static symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_5_18[2] = { 'o', 'u' }; + +static struct among a_5[19] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 4, s_5_2, -1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 4, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 3, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 1, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 3, s_5_10, -1, 1, 0}, +/* 11 */ { 3, s_5_11, -1, 2, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 3, s_5_13, -1, 1, 0}, +/* 14 */ { 3, s_5_14, -1, 1, 0}, +/* 15 */ { 3, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 5, s_5_17, 16, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static symbol s_0[] = { 's', 's' }; +static symbol s_1[] = { 'i' }; +static symbol s_2[] = { 'e', 'e' }; +static symbol s_3[] = { 'e' }; +static symbol s_4[] = { 'e' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 't', 'i', 'o', 'n' }; +static symbol s_9[] = { 'e', 'n', 'c', 'e' }; +static symbol s_10[] = { 'a', 'n', 'c', 'e' }; +static symbol s_11[] = { 'a', 'b', 'l', 'e' }; +static symbol s_12[] = { 'e', 'n', 't' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'i', 'z', 'e' }; +static symbol s_15[] = { 'a', 't', 'e' }; +static symbol s_16[] = { 'a', 'l' }; +static symbol s_17[] = { 'a', 'l' }; +static symbol s_18[] = { 'f', 'u', 'l' }; +static symbol s_19[] = { 'o', 'u', 's' }; +static symbol s_20[] = { 'i', 'v', 'e' }; +static symbol s_21[] = { 'b', 'l', 'e' }; +static symbol s_22[] = { 'a', 'l' }; +static symbol s_23[] = { 'i', 'c' }; +static symbol s_24[] = { 's' }; +static symbol s_25[] = { 't' }; +static symbol s_26[] = { 'e' }; +static symbol s_27[] = { 'l' }; +static symbol s_28[] = { 'l' }; +static symbol s_29[] = { 'y' }; +static symbol s_30[] = { 'Y' }; +static symbol s_31[] = { 'y' }; +static symbol s_32[] = { 'Y' }; +static symbol s_33[] = { 'Y' }; +static symbol s_34[] = { 'y' }; + +static int r_shortv(struct SN_env * z) { + if (!(out_grouping_b_U(z, g_v_WXY, 89, 121))) return 0; + if (!(in_grouping_b_U(z, g_v, 97, 121))) return 0; + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 25 */ + among_var = find_among_b(z, a_0, 4); /* substring, line 25 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 25 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 29 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 34 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 34 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 34 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 35 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 38 */ + while(1) { /* gopast, line 38 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 38 */ + } + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 38 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 39 */ + among_var = find_among_b(z, a_1, 13); /* substring, line 39 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 44 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 44 */ + } + z->bra = z->c; /* ], line 44 */ + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 45 */ + { int m_test = z->l - z->c; /* test, line 45 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 45 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 52 */ + { int m = z->l - z->c; (void) m; /* or, line 52 */ + if (!(eq_s_b(z, 1, s_5))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_6))) return 0; + } +lab0: + z->bra = z->c; /* ], line 52 */ + while(1) { /* gopast, line 53 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab2; + break; + lab2: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 53 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 54 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 58 */ + among_var = find_among_b(z, a_3, 20); /* substring, line 58 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 58 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 58 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_9); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_10); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_11); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 63 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 66 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 68 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 2, s_16); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 2, s_17); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_21); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 82 */ + among_var = find_among_b(z, a_4, 7); /* substring, line 82 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 82 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 82 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_22); /* <-, line 83 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_23); /* <-, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 92 */ + among_var = find_among_b(z, a_5, 19); /* substring, line 92 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 92 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 92 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 95 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 96 */ + if (!(eq_s_b(z, 1, s_24))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_25))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5a(struct SN_env * z) { + z->ket = z->c; /* [, line 101 */ + if (!(eq_s_b(z, 1, s_26))) return 0; + z->bra = z->c; /* ], line 101 */ + { int m = z->l - z->c; (void) m; /* or, line 102 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 102 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 102 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 102 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } +lab0: + { int ret; + ret = slice_del(z); /* delete, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_5b(struct SN_env * z) { + z->ket = z->c; /* [, line 107 */ + if (!(eq_s_b(z, 1, s_27))) return 0; + z->bra = z->c; /* ], line 107 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 108 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_28))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int porter_UTF_8_stem(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 115 */ + { int c = z->c; /* do, line 116 */ + z->bra = z->c; /* [, line 116 */ + if (!(eq_s(z, 1, s_29))) goto lab0; + z->ket = z->c; /* ], line 116 */ + { int ret; + ret = slice_from_s(z, 1, s_30); /* <-, line 116 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 116 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 117 */ + while(1) { /* repeat, line 117 */ + int c = z->c; + while(1) { /* goto, line 117 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab3; + z->bra = z->c; /* [, line 117 */ + if (!(eq_s(z, 1, s_31))) goto lab3; + z->ket = z->c; /* ], line 117 */ + z->c = c; + break; + lab3: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* goto, line 117 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_32); /* <-, line 117 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 117 */ + continue; + lab2: + z->c = c; + break; + } + z->c = c; + } + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 121 */ + while(1) { /* gopast, line 122 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 122 */ + } + } + while(1) { /* gopast, line 122 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 122 */ + } + } + z->I[0] = z->c; /* setmark p1, line 122 */ + while(1) { /* gopast, line 123 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab7; + break; + lab7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 123 */ + } + } + while(1) { /* gopast, line 123 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab8; + break; + lab8: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 123 */ + } + } + z->I[1] = z->c; /* setmark p2, line 123 */ + lab4: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 126 */ + + { int m = z->l - z->c; (void) m; /* do, line 127 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab9; /* call Step_1a, line 127 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab10; /* call Step_1b, line 128 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 129 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab11; /* call Step_1c, line 129 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 130 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab12; /* call Step_2, line 130 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 131 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab13; /* call Step_3, line 131 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 132 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab14; /* call Step_4, line 132 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 133 */ + { int ret = r_Step_5a(z); + if (ret == 0) goto lab15; /* call Step_5a, line 133 */ + if (ret < 0) return ret; + } + lab15: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 134 */ + { int ret = r_Step_5b(z); + if (ret == 0) goto lab16; /* call Step_5b, line 134 */ + if (ret < 0) return ret; + } + lab16: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 137 */ + if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */ + while(1) { /* repeat, line 137 */ + int c = z->c; + while(1) { /* goto, line 137 */ + int c = z->c; + z->bra = z->c; /* [, line 137 */ + if (!(eq_s(z, 1, s_33))) goto lab19; + z->ket = z->c; /* ], line 137 */ + z->c = c; + break; + lab19: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab18; + z->c = c; /* goto, line 137 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_34); /* <-, line 137 */ + if (ret < 0) return ret; + } + continue; + lab18: + z->c = c; + break; + } + lab17: + z->c = c; + } + return 1; +} + +extern struct SN_env * porter_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void porter_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * porter_UTF_8_create_env(void); +extern void porter_UTF_8_close_env(struct SN_env * z); + +extern int porter_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1055 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int portuguese_UTF_8_stem(struct SN_env * z); +static int r_residual_form(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * portuguese_UTF_8_create_env(void); +extern void portuguese_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA3 }; +static symbol s_0_2[2] = { 0xC3, 0xB5 }; + +static struct among a_0[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 2, 0} +}; + +static symbol s_1_1[2] = { 'a', '~' }; +static symbol s_1_2[2] = { 'o', '~' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[2] = { 'a', 'd' }; +static symbol s_2_2[2] = { 'o', 's' }; +static symbol s_2_3[2] = { 'i', 'v' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 't', 'e' }; +static symbol s_3_1[4] = { 'a', 'v', 'e', 'l' }; +static symbol s_3_2[5] = { 0xC3, 0xAD, 'v', 'e', 'l' }; + +static struct among a_3[3] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 5, s_3_2, -1, 1, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'i', 'v' }; + +static struct among a_4[3] = +{ +/* 0 */ { 2, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[3] = { 'i', 'c', 'a' }; +static symbol s_5_1[6] = { 0xC3, 0xA2, 'n', 'c', 'i', 'a' }; +static symbol s_5_2[6] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a' }; +static symbol s_5_3[3] = { 'i', 'r', 'a' }; +static symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_5_5[3] = { 'o', 's', 'a' }; +static symbol s_5_6[4] = { 'i', 's', 't', 'a' }; +static symbol s_5_7[3] = { 'i', 'v', 'a' }; +static symbol s_5_8[3] = { 'e', 'z', 'a' }; +static symbol s_5_9[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' }; +static symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' }; +static symbol s_5_11[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_14[5] = { 0xC3, 0xA1, 'v', 'e', 'l' }; +static symbol s_5_15[5] = { 0xC3, 0xAD, 'v', 'e', 'l' }; +static symbol s_5_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_5_17[3] = { 'i', 'c', 'o' }; +static symbol s_5_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_5_19[3] = { 'o', 's', 'o' }; +static symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_22[3] = { 'i', 'v', 'o' }; +static symbol s_5_23[6] = { 'a', 0xC3, 0xA7, 'a', '~', 'o' }; +static symbol s_5_24[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_5_25[4] = { 'i', 'c', 'a', 's' }; +static symbol s_5_26[7] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a', 's' }; +static symbol s_5_27[4] = { 'i', 'r', 'a', 's' }; +static symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_5_29[4] = { 'o', 's', 'a', 's' }; +static symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_5_31[4] = { 'i', 'v', 'a', 's' }; +static symbol s_5_32[4] = { 'e', 'z', 'a', 's' }; +static symbol s_5_33[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' }; +static symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_38[7] = { 'a', 0xC3, 0xA7, 'o', '~', 'e', 's' }; +static symbol s_5_39[4] = { 'i', 'c', 'o', 's' }; +static symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_5_41[4] = { 'o', 's', 'o', 's' }; +static symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_44[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_5[45] = +{ +/* 0 */ { 3, s_5_0, -1, 1, 0}, +/* 1 */ { 6, s_5_1, -1, 1, 0}, +/* 2 */ { 6, s_5_2, -1, 4, 0}, +/* 3 */ { 3, s_5_3, -1, 9, 0}, +/* 4 */ { 5, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 4, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 8, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 6, s_5_9, -1, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 7, 0}, +/* 11 */ { 4, s_5_11, -1, 1, 0}, +/* 12 */ { 5, s_5_12, -1, 6, 0}, +/* 13 */ { 6, s_5_13, 12, 5, 0}, +/* 14 */ { 5, s_5_14, -1, 1, 0}, +/* 15 */ { 5, s_5_15, -1, 1, 0}, +/* 16 */ { 6, s_5_16, -1, 3, 0}, +/* 17 */ { 3, s_5_17, -1, 1, 0}, +/* 18 */ { 4, s_5_18, -1, 1, 0}, +/* 19 */ { 3, s_5_19, -1, 1, 0}, +/* 20 */ { 6, s_5_20, -1, 1, 0}, +/* 21 */ { 6, s_5_21, -1, 1, 0}, +/* 22 */ { 3, s_5_22, -1, 8, 0}, +/* 23 */ { 6, s_5_23, -1, 1, 0}, +/* 24 */ { 4, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, -1, 1, 0}, +/* 26 */ { 7, s_5_26, -1, 4, 0}, +/* 27 */ { 4, s_5_27, -1, 9, 0}, +/* 28 */ { 6, s_5_28, -1, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 5, s_5_30, -1, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 8, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 7, s_5_33, -1, 2, 0}, +/* 34 */ { 6, s_5_34, -1, 7, 0}, +/* 35 */ { 7, s_5_35, -1, 3, 0}, +/* 36 */ { 6, s_5_36, -1, 1, 0}, +/* 37 */ { 5, s_5_37, -1, 1, 0}, +/* 38 */ { 7, s_5_38, -1, 1, 0}, +/* 39 */ { 4, s_5_39, -1, 1, 0}, +/* 40 */ { 5, s_5_40, -1, 1, 0}, +/* 41 */ { 4, s_5_41, -1, 1, 0}, +/* 42 */ { 7, s_5_42, -1, 1, 0}, +/* 43 */ { 7, s_5_43, -1, 1, 0}, +/* 44 */ { 4, s_5_44, -1, 8, 0} +}; + +static symbol s_6_0[3] = { 'a', 'd', 'a' }; +static symbol s_6_1[3] = { 'i', 'd', 'a' }; +static symbol s_6_2[2] = { 'i', 'a' }; +static symbol s_6_3[4] = { 'a', 'r', 'i', 'a' }; +static symbol s_6_4[4] = { 'e', 'r', 'i', 'a' }; +static symbol s_6_5[4] = { 'i', 'r', 'i', 'a' }; +static symbol s_6_6[3] = { 'a', 'r', 'a' }; +static symbol s_6_7[3] = { 'e', 'r', 'a' }; +static symbol s_6_8[3] = { 'i', 'r', 'a' }; +static symbol s_6_9[3] = { 'a', 'v', 'a' }; +static symbol s_6_10[4] = { 'a', 's', 's', 'e' }; +static symbol s_6_11[4] = { 'e', 's', 's', 'e' }; +static symbol s_6_12[4] = { 'i', 's', 's', 'e' }; +static symbol s_6_13[4] = { 'a', 's', 't', 'e' }; +static symbol s_6_14[4] = { 'e', 's', 't', 'e' }; +static symbol s_6_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_16[2] = { 'e', 'i' }; +static symbol s_6_17[4] = { 'a', 'r', 'e', 'i' }; +static symbol s_6_18[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_6_19[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_6_20[2] = { 'a', 'm' }; +static symbol s_6_21[3] = { 'i', 'a', 'm' }; +static symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' }; +static symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' }; +static symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' }; +static symbol s_6_25[4] = { 'a', 'r', 'a', 'm' }; +static symbol s_6_26[4] = { 'e', 'r', 'a', 'm' }; +static symbol s_6_27[4] = { 'i', 'r', 'a', 'm' }; +static symbol s_6_28[4] = { 'a', 'v', 'a', 'm' }; +static symbol s_6_29[2] = { 'e', 'm' }; +static symbol s_6_30[4] = { 'a', 'r', 'e', 'm' }; +static symbol s_6_31[4] = { 'e', 'r', 'e', 'm' }; +static symbol s_6_32[4] = { 'i', 'r', 'e', 'm' }; +static symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' }; +static symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' }; +static symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' }; +static symbol s_6_36[3] = { 'a', 'd', 'o' }; +static symbol s_6_37[3] = { 'i', 'd', 'o' }; +static symbol s_6_38[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_6_39[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_6_40[4] = { 'i', 'n', 'd', 'o' }; +static symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' }; +static symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' }; +static symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' }; +static symbol s_6_44[2] = { 'a', 'r' }; +static symbol s_6_45[2] = { 'e', 'r' }; +static symbol s_6_46[2] = { 'i', 'r' }; +static symbol s_6_47[2] = { 'a', 's' }; +static symbol s_6_48[4] = { 'a', 'd', 'a', 's' }; +static symbol s_6_49[4] = { 'i', 'd', 'a', 's' }; +static symbol s_6_50[3] = { 'i', 'a', 's' }; +static symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' }; +static symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' }; +static symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' }; +static symbol s_6_54[4] = { 'a', 'r', 'a', 's' }; +static symbol s_6_55[4] = { 'e', 'r', 'a', 's' }; +static symbol s_6_56[4] = { 'i', 'r', 'a', 's' }; +static symbol s_6_57[4] = { 'a', 'v', 'a', 's' }; +static symbol s_6_58[2] = { 'e', 's' }; +static symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' }; +static symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' }; +static symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' }; +static symbol s_6_62[4] = { 'a', 'r', 'e', 's' }; +static symbol s_6_63[4] = { 'e', 'r', 'e', 's' }; +static symbol s_6_64[4] = { 'i', 'r', 'e', 's' }; +static symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' }; +static symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' }; +static symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' }; +static symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_6_71[2] = { 'i', 's' }; +static symbol s_6_72[3] = { 'a', 'i', 's' }; +static symbol s_6_73[3] = { 'e', 'i', 's' }; +static symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' }; +static symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' }; +static symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' }; +static symbol s_6_77[6] = { 0xC3, 0xA1, 'r', 'e', 'i', 's' }; +static symbol s_6_78[6] = { 0xC3, 0xA9, 'r', 'e', 'i', 's' }; +static symbol s_6_79[6] = { 0xC3, 0xAD, 'r', 'e', 'i', 's' }; +static symbol s_6_80[7] = { 0xC3, 0xA1, 's', 's', 'e', 'i', 's' }; +static symbol s_6_81[7] = { 0xC3, 0xA9, 's', 's', 'e', 'i', 's' }; +static symbol s_6_82[7] = { 0xC3, 0xAD, 's', 's', 'e', 'i', 's' }; +static symbol s_6_83[6] = { 0xC3, 0xA1, 'v', 'e', 'i', 's' }; +static symbol s_6_84[5] = { 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_85[7] = { 'a', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_86[7] = { 'e', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_87[7] = { 'i', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_88[4] = { 'a', 'd', 'o', 's' }; +static symbol s_6_89[4] = { 'i', 'd', 'o', 's' }; +static symbol s_6_90[4] = { 'a', 'm', 'o', 's' }; +static symbol s_6_91[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_92[7] = { 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_93[7] = { 0xC3, 0xAD, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_94[7] = { 0xC3, 0xA1, 'v', 'a', 'm', 'o', 's' }; +static symbol s_6_95[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_96[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_97[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_98[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_99[4] = { 'e', 'm', 'o', 's' }; +static symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_103[8] = { 0xC3, 0xA1, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_104[8] = { 0xC3, 0xAA, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_105[8] = { 0xC3, 0xAD, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_106[4] = { 'i', 'm', 'o', 's' }; +static symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' }; +static symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' }; +static symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' }; +static symbol s_6_110[5] = { 0xC3, 0xA1, 'm', 'o', 's' }; +static symbol s_6_111[5] = { 'a', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_112[5] = { 'e', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_113[5] = { 'i', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_114[2] = { 'e', 'u' }; +static symbol s_6_115[2] = { 'i', 'u' }; +static symbol s_6_116[2] = { 'o', 'u' }; +static symbol s_6_117[4] = { 'a', 'r', 0xC3, 0xA1 }; +static symbol s_6_118[4] = { 'e', 'r', 0xC3, 0xA1 }; +static symbol s_6_119[4] = { 'i', 'r', 0xC3, 0xA1 }; + +static struct among a_6[120] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 3, s_6_1, -1, 1, 0}, +/* 2 */ { 2, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, 2, 1, 0}, +/* 4 */ { 4, s_6_4, 2, 1, 0}, +/* 5 */ { 4, s_6_5, 2, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 1, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 3, s_6_8, -1, 1, 0}, +/* 9 */ { 3, s_6_9, -1, 1, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 1, 0}, +/* 13 */ { 4, s_6_13, -1, 1, 0}, +/* 14 */ { 4, s_6_14, -1, 1, 0}, +/* 15 */ { 4, s_6_15, -1, 1, 0}, +/* 16 */ { 2, s_6_16, -1, 1, 0}, +/* 17 */ { 4, s_6_17, 16, 1, 0}, +/* 18 */ { 4, s_6_18, 16, 1, 0}, +/* 19 */ { 4, s_6_19, 16, 1, 0}, +/* 20 */ { 2, s_6_20, -1, 1, 0}, +/* 21 */ { 3, s_6_21, 20, 1, 0}, +/* 22 */ { 5, s_6_22, 21, 1, 0}, +/* 23 */ { 5, s_6_23, 21, 1, 0}, +/* 24 */ { 5, s_6_24, 21, 1, 0}, +/* 25 */ { 4, s_6_25, 20, 1, 0}, +/* 26 */ { 4, s_6_26, 20, 1, 0}, +/* 27 */ { 4, s_6_27, 20, 1, 0}, +/* 28 */ { 4, s_6_28, 20, 1, 0}, +/* 29 */ { 2, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, 29, 1, 0}, +/* 31 */ { 4, s_6_31, 29, 1, 0}, +/* 32 */ { 4, s_6_32, 29, 1, 0}, +/* 33 */ { 5, s_6_33, 29, 1, 0}, +/* 34 */ { 5, s_6_34, 29, 1, 0}, +/* 35 */ { 5, s_6_35, 29, 1, 0}, +/* 36 */ { 3, s_6_36, -1, 1, 0}, +/* 37 */ { 3, s_6_37, -1, 1, 0}, +/* 38 */ { 4, s_6_38, -1, 1, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 5, s_6_42, -1, 1, 0}, +/* 43 */ { 5, s_6_43, -1, 1, 0}, +/* 44 */ { 2, s_6_44, -1, 1, 0}, +/* 45 */ { 2, s_6_45, -1, 1, 0}, +/* 46 */ { 2, s_6_46, -1, 1, 0}, +/* 47 */ { 2, s_6_47, -1, 1, 0}, +/* 48 */ { 4, s_6_48, 47, 1, 0}, +/* 49 */ { 4, s_6_49, 47, 1, 0}, +/* 50 */ { 3, s_6_50, 47, 1, 0}, +/* 51 */ { 5, s_6_51, 50, 1, 0}, +/* 52 */ { 5, s_6_52, 50, 1, 0}, +/* 53 */ { 5, s_6_53, 50, 1, 0}, +/* 54 */ { 4, s_6_54, 47, 1, 0}, +/* 55 */ { 4, s_6_55, 47, 1, 0}, +/* 56 */ { 4, s_6_56, 47, 1, 0}, +/* 57 */ { 4, s_6_57, 47, 1, 0}, +/* 58 */ { 2, s_6_58, -1, 1, 0}, +/* 59 */ { 5, s_6_59, 58, 1, 0}, +/* 60 */ { 5, s_6_60, 58, 1, 0}, +/* 61 */ { 5, s_6_61, 58, 1, 0}, +/* 62 */ { 4, s_6_62, 58, 1, 0}, +/* 63 */ { 4, s_6_63, 58, 1, 0}, +/* 64 */ { 4, s_6_64, 58, 1, 0}, +/* 65 */ { 5, s_6_65, 58, 1, 0}, +/* 66 */ { 5, s_6_66, 58, 1, 0}, +/* 67 */ { 5, s_6_67, 58, 1, 0}, +/* 68 */ { 5, s_6_68, 58, 1, 0}, +/* 69 */ { 5, s_6_69, 58, 1, 0}, +/* 70 */ { 5, s_6_70, 58, 1, 0}, +/* 71 */ { 2, s_6_71, -1, 1, 0}, +/* 72 */ { 3, s_6_72, 71, 1, 0}, +/* 73 */ { 3, s_6_73, 71, 1, 0}, +/* 74 */ { 5, s_6_74, 73, 1, 0}, +/* 75 */ { 5, s_6_75, 73, 1, 0}, +/* 76 */ { 5, s_6_76, 73, 1, 0}, +/* 77 */ { 6, s_6_77, 73, 1, 0}, +/* 78 */ { 6, s_6_78, 73, 1, 0}, +/* 79 */ { 6, s_6_79, 73, 1, 0}, +/* 80 */ { 7, s_6_80, 73, 1, 0}, +/* 81 */ { 7, s_6_81, 73, 1, 0}, +/* 82 */ { 7, s_6_82, 73, 1, 0}, +/* 83 */ { 6, s_6_83, 73, 1, 0}, +/* 84 */ { 5, s_6_84, 73, 1, 0}, +/* 85 */ { 7, s_6_85, 84, 1, 0}, +/* 86 */ { 7, s_6_86, 84, 1, 0}, +/* 87 */ { 7, s_6_87, 84, 1, 0}, +/* 88 */ { 4, s_6_88, -1, 1, 0}, +/* 89 */ { 4, s_6_89, -1, 1, 0}, +/* 90 */ { 4, s_6_90, -1, 1, 0}, +/* 91 */ { 7, s_6_91, 90, 1, 0}, +/* 92 */ { 7, s_6_92, 90, 1, 0}, +/* 93 */ { 7, s_6_93, 90, 1, 0}, +/* 94 */ { 7, s_6_94, 90, 1, 0}, +/* 95 */ { 6, s_6_95, 90, 1, 0}, +/* 96 */ { 8, s_6_96, 95, 1, 0}, +/* 97 */ { 8, s_6_97, 95, 1, 0}, +/* 98 */ { 8, s_6_98, 95, 1, 0}, +/* 99 */ { 4, s_6_99, -1, 1, 0}, +/*100 */ { 6, s_6_100, 99, 1, 0}, +/*101 */ { 6, s_6_101, 99, 1, 0}, +/*102 */ { 6, s_6_102, 99, 1, 0}, +/*103 */ { 8, s_6_103, 99, 1, 0}, +/*104 */ { 8, s_6_104, 99, 1, 0}, +/*105 */ { 8, s_6_105, 99, 1, 0}, +/*106 */ { 4, s_6_106, -1, 1, 0}, +/*107 */ { 5, s_6_107, -1, 1, 0}, +/*108 */ { 5, s_6_108, -1, 1, 0}, +/*109 */ { 5, s_6_109, -1, 1, 0}, +/*110 */ { 5, s_6_110, -1, 1, 0}, +/*111 */ { 5, s_6_111, -1, 1, 0}, +/*112 */ { 5, s_6_112, -1, 1, 0}, +/*113 */ { 5, s_6_113, -1, 1, 0}, +/*114 */ { 2, s_6_114, -1, 1, 0}, +/*115 */ { 2, s_6_115, -1, 1, 0}, +/*116 */ { 2, s_6_116, -1, 1, 0}, +/*117 */ { 4, s_6_117, -1, 1, 0}, +/*118 */ { 4, s_6_118, -1, 1, 0}, +/*119 */ { 4, s_6_119, -1, 1, 0} +}; + +static symbol s_7_0[1] = { 'a' }; +static symbol s_7_1[1] = { 'i' }; +static symbol s_7_2[1] = { 'o' }; +static symbol s_7_3[2] = { 'o', 's' }; +static symbol s_7_4[2] = { 0xC3, 0xA1 }; +static symbol s_7_5[2] = { 0xC3, 0xAD }; +static symbol s_7_6[2] = { 0xC3, 0xB3 }; + +static struct among a_7[7] = +{ +/* 0 */ { 1, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 1, 0}, +/* 2 */ { 1, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 1, 0}, +/* 4 */ { 2, s_7_4, -1, 1, 0}, +/* 5 */ { 2, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[2] = { 0xC3, 0xA7 }; +static symbol s_8_2[2] = { 0xC3, 0xA9 }; +static symbol s_8_3[2] = { 0xC3, 0xAA }; + +static struct among a_8[4] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 2, s_8_1, -1, 2, 0}, +/* 2 */ { 2, s_8_2, -1, 1, 0}, +/* 3 */ { 2, s_8_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; + +static symbol s_0[] = { 'a', '~' }; +static symbol s_1[] = { 'o', '~' }; +static symbol s_2[] = { 0xC3, 0xA3 }; +static symbol s_3[] = { 0xC3, 0xB5 }; +static symbol s_4[] = { 'l', 'o', 'g' }; +static symbol s_5[] = { 'u' }; +static symbol s_6[] = { 'e', 'n', 't', 'e' }; +static symbol s_7[] = { 'a', 't' }; +static symbol s_8[] = { 'a', 't' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'i', 'r' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'g' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 'c' }; +static symbol s_15[] = { 'c' }; +static symbol s_16[] = { 'i' }; +static symbol s_17[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 36 */ + int c = z->c; + z->bra = z->c; /* [, line 37 */ + among_var = find_among(z, a_0, 3); /* substring, line 37 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 37 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 40 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 50 */ + { int c = z->c; /* or, line 52 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab2; + { int c = z->c; /* or, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab4; + while(1) { /* gopast, line 51 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 51 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab2; + while(1) { /* gopast, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 51 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab0; + { int c = z->c; /* or, line 53 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab8; + while(1) { /* gopast, line 53 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 53 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 53 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 54 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 56 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 57 */ + } + } + while(1) { /* gopast, line 57 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 57 */ + } + } + z->I[1] = z->c; /* setmark p1, line 57 */ + while(1) { /* gopast, line 58 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 58 */ + } + } + while(1) { /* gopast, line 58 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 58 */ + } + } + z->I[2] = z->c; /* setmark p2, line 58 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 62 */ + int c = z->c; + z->bra = z->c; /* [, line 63 */ + among_var = find_among(z, a_1, 3); /* substring, line 63 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 63 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_3); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 66 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 77 */ + among_var = find_among_b(z, a_5, 45); /* substring, line 77 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 77 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 93 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 93 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_4); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 102 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + z->ket = z->c; /* [, line 113 */ + if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 113 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 123 */ + z->ket = z->c; /* [, line 124 */ + among_var = find_among_b(z, a_3, 3); /* substring, line 124 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 124 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 146 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 147 */ + z->ket = z->c; /* [, line 148 */ + if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 148 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 148 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 148 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 9: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 153 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_9))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_10); /* <-, line 154 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 159 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 159 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_6, 120); /* substring, line 160 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 7); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 187 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 187 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_form(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_8, 4); /* substring, line 192 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 194 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 194 */ + { int m = z->l - z->c; (void) m; /* or, line 194 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + z->bra = z->c; /* ], line 194 */ + { int m_test = z->l - z->c; /* test, line 194 */ + if (!(eq_s_b(z, 1, s_12))) goto lab1; + z->c = z->l - m_test; + } + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 195 */ + { int m_test = z->l - z->c; /* test, line 195 */ + if (!(eq_s_b(z, 1, s_14))) return 0; + z->c = z->l - m_test; + } + } + lab0: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 195 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 195 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int portuguese_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 202 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 202 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 209 */ + { int m = z->l - z->c; (void) m; /* and, line 207 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 207 */ + z->ket = z->c; /* [, line 207 */ + if (!(eq_s_b(z, 1, s_16))) goto lab7; + z->bra = z->c; /* ], line 207 */ + { int m_test = z->l - z->c; /* test, line 207 */ + if (!(eq_s_b(z, 1, s_17))) goto lab7; + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) goto lab7; /* call RV, line 207 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 207 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 209 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 211 */ + { int ret = r_residual_form(z); + if (ret == 0) goto lab8; /* call residual_form, line 211 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 213 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab9; /* call postlude, line 213 */ + if (ret < 0) return ret; + } + lab9: + z->c = c; + } + return 1; +} + +extern struct SN_env * portuguese_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void portuguese_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * portuguese_UTF_8_create_env(void); +extern void portuguese_UTF_8_close_env(struct SN_env * z); + +extern int portuguese_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,709 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int russian_UTF_8_stem(struct SN_env * z); +static int r_tidy_up(struct SN_env * z); +static int r_derivational(struct SN_env * z); +static int r_noun(struct SN_env * z); +static int r_verb(struct SN_env * z); +static int r_reflexive(struct SN_env * z); +static int r_adjectival(struct SN_env * z); +static int r_adjective(struct SN_env * z); +static int r_perfective_gerund(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * russian_UTF_8_create_env(void); +extern void russian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[10] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_1[12] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_2[12] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_3[2] = { 0xD0, 0xB2 }; +static symbol s_0_4[4] = { 0xD1, 0x8B, 0xD0, 0xB2 }; +static symbol s_0_5[4] = { 0xD0, 0xB8, 0xD0, 0xB2 }; +static symbol s_0_6[6] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; +static symbol s_0_7[8] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; +static symbol s_0_8[8] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; + +static struct among a_0[9] = +{ +/* 0 */ { 10, s_0_0, -1, 1, 0}, +/* 1 */ { 12, s_0_1, 0, 2, 0}, +/* 2 */ { 12, s_0_2, 0, 2, 0}, +/* 3 */ { 2, s_0_3, -1, 1, 0}, +/* 4 */ { 4, s_0_4, 3, 2, 0}, +/* 5 */ { 4, s_0_5, 3, 2, 0}, +/* 6 */ { 6, s_0_6, -1, 1, 0}, +/* 7 */ { 8, s_0_7, 6, 2, 0}, +/* 8 */ { 8, s_0_8, 6, 2, 0} +}; + +static symbol s_1_0[6] = { 0xD0, 0xB5, 0xD0, 0xBC, 0xD1, 0x83 }; +static symbol s_1_1[6] = { 0xD0, 0xBE, 0xD0, 0xBC, 0xD1, 0x83 }; +static symbol s_1_2[4] = { 0xD1, 0x8B, 0xD1, 0x85 }; +static symbol s_1_3[4] = { 0xD0, 0xB8, 0xD1, 0x85 }; +static symbol s_1_4[4] = { 0xD1, 0x83, 0xD1, 0x8E }; +static symbol s_1_5[4] = { 0xD1, 0x8E, 0xD1, 0x8E }; +static symbol s_1_6[4] = { 0xD0, 0xB5, 0xD1, 0x8E }; +static symbol s_1_7[4] = { 0xD0, 0xBE, 0xD1, 0x8E }; +static symbol s_1_8[4] = { 0xD1, 0x8F, 0xD1, 0x8F }; +static symbol s_1_9[4] = { 0xD0, 0xB0, 0xD1, 0x8F }; +static symbol s_1_10[4] = { 0xD1, 0x8B, 0xD0, 0xB5 }; +static symbol s_1_11[4] = { 0xD0, 0xB5, 0xD0, 0xB5 }; +static symbol s_1_12[4] = { 0xD0, 0xB8, 0xD0, 0xB5 }; +static symbol s_1_13[4] = { 0xD0, 0xBE, 0xD0, 0xB5 }; +static symbol s_1_14[6] = { 0xD1, 0x8B, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_1_15[6] = { 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_1_16[4] = { 0xD1, 0x8B, 0xD0, 0xB9 }; +static symbol s_1_17[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_1_18[4] = { 0xD0, 0xB8, 0xD0, 0xB9 }; +static symbol s_1_19[4] = { 0xD0, 0xBE, 0xD0, 0xB9 }; +static symbol s_1_20[4] = { 0xD1, 0x8B, 0xD0, 0xBC }; +static symbol s_1_21[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_1_22[4] = { 0xD0, 0xB8, 0xD0, 0xBC }; +static symbol s_1_23[4] = { 0xD0, 0xBE, 0xD0, 0xBC }; +static symbol s_1_24[6] = { 0xD0, 0xB5, 0xD0, 0xB3, 0xD0, 0xBE }; +static symbol s_1_25[6] = { 0xD0, 0xBE, 0xD0, 0xB3, 0xD0, 0xBE }; + +static struct among a_1[26] = +{ +/* 0 */ { 6, s_1_0, -1, 1, 0}, +/* 1 */ { 6, s_1_1, -1, 1, 0}, +/* 2 */ { 4, s_1_2, -1, 1, 0}, +/* 3 */ { 4, s_1_3, -1, 1, 0}, +/* 4 */ { 4, s_1_4, -1, 1, 0}, +/* 5 */ { 4, s_1_5, -1, 1, 0}, +/* 6 */ { 4, s_1_6, -1, 1, 0}, +/* 7 */ { 4, s_1_7, -1, 1, 0}, +/* 8 */ { 4, s_1_8, -1, 1, 0}, +/* 9 */ { 4, s_1_9, -1, 1, 0}, +/* 10 */ { 4, s_1_10, -1, 1, 0}, +/* 11 */ { 4, s_1_11, -1, 1, 0}, +/* 12 */ { 4, s_1_12, -1, 1, 0}, +/* 13 */ { 4, s_1_13, -1, 1, 0}, +/* 14 */ { 6, s_1_14, -1, 1, 0}, +/* 15 */ { 6, s_1_15, -1, 1, 0}, +/* 16 */ { 4, s_1_16, -1, 1, 0}, +/* 17 */ { 4, s_1_17, -1, 1, 0}, +/* 18 */ { 4, s_1_18, -1, 1, 0}, +/* 19 */ { 4, s_1_19, -1, 1, 0}, +/* 20 */ { 4, s_1_20, -1, 1, 0}, +/* 21 */ { 4, s_1_21, -1, 1, 0}, +/* 22 */ { 4, s_1_22, -1, 1, 0}, +/* 23 */ { 4, s_1_23, -1, 1, 0}, +/* 24 */ { 6, s_1_24, -1, 1, 0}, +/* 25 */ { 6, s_1_25, -1, 1, 0} +}; + +static symbol s_2_0[4] = { 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_1[6] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_2[6] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_3[2] = { 0xD1, 0x89 }; +static symbol s_2_4[4] = { 0xD1, 0x8E, 0xD1, 0x89 }; +static symbol s_2_5[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x89 }; +static symbol s_2_6[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_2_7[4] = { 0xD0, 0xBD, 0xD0, 0xBD }; + +static struct among a_2[8] = +{ +/* 0 */ { 4, s_2_0, -1, 1, 0}, +/* 1 */ { 6, s_2_1, 0, 2, 0}, +/* 2 */ { 6, s_2_2, 0, 2, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0}, +/* 4 */ { 4, s_2_4, 3, 1, 0}, +/* 5 */ { 6, s_2_5, 4, 2, 0}, +/* 6 */ { 4, s_2_6, -1, 1, 0}, +/* 7 */ { 4, s_2_7, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_3_1[4] = { 0xD1, 0x81, 0xD1, 0x8F }; + +static struct among a_3[2] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 0xD1, 0x8B, 0xD1, 0x82 }; +static symbol s_4_1[4] = { 0xD1, 0x8E, 0xD1, 0x82 }; +static symbol s_4_2[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x82 }; +static symbol s_4_3[4] = { 0xD1, 0x8F, 0xD1, 0x82 }; +static symbol s_4_4[4] = { 0xD0, 0xB5, 0xD1, 0x82 }; +static symbol s_4_5[6] = { 0xD1, 0x83, 0xD0, 0xB5, 0xD1, 0x82 }; +static symbol s_4_6[4] = { 0xD0, 0xB8, 0xD1, 0x82 }; +static symbol s_4_7[4] = { 0xD0, 0xBD, 0xD1, 0x8B }; +static symbol s_4_8[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD1, 0x8B }; +static symbol s_4_9[4] = { 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_10[6] = { 0xD1, 0x8B, 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_11[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_12[6] = { 0xD0, 0xB5, 0xD1, 0x88, 0xD1, 0x8C }; +static symbol s_4_13[6] = { 0xD0, 0xB8, 0xD1, 0x88, 0xD1, 0x8C }; +static symbol s_4_14[2] = { 0xD1, 0x8E }; +static symbol s_4_15[4] = { 0xD1, 0x83, 0xD1, 0x8E }; +static symbol s_4_16[4] = { 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_17[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_18[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_19[4] = { 0xD0, 0xBD, 0xD0, 0xB0 }; +static symbol s_4_20[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xB0 }; +static symbol s_4_21[6] = { 0xD0, 0xB5, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_22[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_23[6] = { 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_24[8] = { 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_25[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_26[4] = { 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_27[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_28[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_29[2] = { 0xD0, 0xB9 }; +static symbol s_4_30[4] = { 0xD1, 0x83, 0xD0, 0xB9 }; +static symbol s_4_31[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_4_32[2] = { 0xD0, 0xBB }; +static symbol s_4_33[4] = { 0xD1, 0x8B, 0xD0, 0xBB }; +static symbol s_4_34[4] = { 0xD0, 0xB8, 0xD0, 0xBB }; +static symbol s_4_35[4] = { 0xD1, 0x8B, 0xD0, 0xBC }; +static symbol s_4_36[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_4_37[4] = { 0xD0, 0xB8, 0xD0, 0xBC }; +static symbol s_4_38[2] = { 0xD0, 0xBD }; +static symbol s_4_39[4] = { 0xD0, 0xB5, 0xD0, 0xBD }; +static symbol s_4_40[4] = { 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_41[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_42[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_43[4] = { 0xD0, 0xBD, 0xD0, 0xBE }; +static symbol s_4_44[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xBE }; +static symbol s_4_45[6] = { 0xD0, 0xBD, 0xD0, 0xBD, 0xD0, 0xBE }; + +static struct among a_4[46] = +{ +/* 0 */ { 4, s_4_0, -1, 2, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 6, s_4_2, 1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 1, 0}, +/* 5 */ { 6, s_4_5, 4, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 2, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 6, s_4_8, 7, 2, 0}, +/* 9 */ { 4, s_4_9, -1, 1, 0}, +/* 10 */ { 6, s_4_10, 9, 2, 0}, +/* 11 */ { 6, s_4_11, 9, 2, 0}, +/* 12 */ { 6, s_4_12, -1, 1, 0}, +/* 13 */ { 6, s_4_13, -1, 2, 0}, +/* 14 */ { 2, s_4_14, -1, 2, 0}, +/* 15 */ { 4, s_4_15, 14, 2, 0}, +/* 16 */ { 4, s_4_16, -1, 1, 0}, +/* 17 */ { 6, s_4_17, 16, 2, 0}, +/* 18 */ { 6, s_4_18, 16, 2, 0}, +/* 19 */ { 4, s_4_19, -1, 1, 0}, +/* 20 */ { 6, s_4_20, 19, 2, 0}, +/* 21 */ { 6, s_4_21, -1, 1, 0}, +/* 22 */ { 6, s_4_22, -1, 2, 0}, +/* 23 */ { 6, s_4_23, -1, 1, 0}, +/* 24 */ { 8, s_4_24, 23, 2, 0}, +/* 25 */ { 8, s_4_25, 23, 2, 0}, +/* 26 */ { 4, s_4_26, -1, 1, 0}, +/* 27 */ { 6, s_4_27, 26, 2, 0}, +/* 28 */ { 6, s_4_28, 26, 2, 0}, +/* 29 */ { 2, s_4_29, -1, 1, 0}, +/* 30 */ { 4, s_4_30, 29, 2, 0}, +/* 31 */ { 4, s_4_31, 29, 2, 0}, +/* 32 */ { 2, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, 32, 2, 0}, +/* 34 */ { 4, s_4_34, 32, 2, 0}, +/* 35 */ { 4, s_4_35, -1, 2, 0}, +/* 36 */ { 4, s_4_36, -1, 1, 0}, +/* 37 */ { 4, s_4_37, -1, 2, 0}, +/* 38 */ { 2, s_4_38, -1, 1, 0}, +/* 39 */ { 4, s_4_39, 38, 2, 0}, +/* 40 */ { 4, s_4_40, -1, 1, 0}, +/* 41 */ { 6, s_4_41, 40, 2, 0}, +/* 42 */ { 6, s_4_42, 40, 2, 0}, +/* 43 */ { 4, s_4_43, -1, 1, 0}, +/* 44 */ { 6, s_4_44, 43, 2, 0}, +/* 45 */ { 6, s_4_45, 43, 1, 0} +}; + +static symbol s_5_0[2] = { 0xD1, 0x83 }; +static symbol s_5_1[4] = { 0xD1, 0x8F, 0xD1, 0x85 }; +static symbol s_5_2[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD1, 0x85 }; +static symbol s_5_3[4] = { 0xD0, 0xB0, 0xD1, 0x85 }; +static symbol s_5_4[2] = { 0xD1, 0x8B }; +static symbol s_5_5[2] = { 0xD1, 0x8C }; +static symbol s_5_6[2] = { 0xD1, 0x8E }; +static symbol s_5_7[4] = { 0xD1, 0x8C, 0xD1, 0x8E }; +static symbol s_5_8[4] = { 0xD0, 0xB8, 0xD1, 0x8E }; +static symbol s_5_9[2] = { 0xD1, 0x8F }; +static symbol s_5_10[4] = { 0xD1, 0x8C, 0xD1, 0x8F }; +static symbol s_5_11[4] = { 0xD0, 0xB8, 0xD1, 0x8F }; +static symbol s_5_12[2] = { 0xD0, 0xB0 }; +static symbol s_5_13[4] = { 0xD0, 0xB5, 0xD0, 0xB2 }; +static symbol s_5_14[4] = { 0xD0, 0xBE, 0xD0, 0xB2 }; +static symbol s_5_15[2] = { 0xD0, 0xB5 }; +static symbol s_5_16[4] = { 0xD1, 0x8C, 0xD0, 0xB5 }; +static symbol s_5_17[4] = { 0xD0, 0xB8, 0xD0, 0xB5 }; +static symbol s_5_18[2] = { 0xD0, 0xB8 }; +static symbol s_5_19[4] = { 0xD0, 0xB5, 0xD0, 0xB8 }; +static symbol s_5_20[4] = { 0xD0, 0xB8, 0xD0, 0xB8 }; +static symbol s_5_21[6] = { 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_22[8] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_23[6] = { 0xD0, 0xB0, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_24[2] = { 0xD0, 0xB9 }; +static symbol s_5_25[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_5_26[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_5_27[4] = { 0xD0, 0xB8, 0xD0, 0xB9 }; +static symbol s_5_28[4] = { 0xD0, 0xBE, 0xD0, 0xB9 }; +static symbol s_5_29[4] = { 0xD1, 0x8F, 0xD0, 0xBC }; +static symbol s_5_30[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC }; +static symbol s_5_31[4] = { 0xD0, 0xB0, 0xD0, 0xBC }; +static symbol s_5_32[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_5_33[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_5_34[4] = { 0xD0, 0xBE, 0xD0, 0xBC }; +static symbol s_5_35[2] = { 0xD0, 0xBE }; + +static struct among a_5[36] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 6, s_5_2, 1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 2, s_5_4, -1, 1, 0}, +/* 5 */ { 2, s_5_5, -1, 1, 0}, +/* 6 */ { 2, s_5_6, -1, 1, 0}, +/* 7 */ { 4, s_5_7, 6, 1, 0}, +/* 8 */ { 4, s_5_8, 6, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 4, s_5_10, 9, 1, 0}, +/* 11 */ { 4, s_5_11, 9, 1, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 4, s_5_13, -1, 1, 0}, +/* 14 */ { 4, s_5_14, -1, 1, 0}, +/* 15 */ { 2, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 4, s_5_17, 15, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0}, +/* 19 */ { 4, s_5_19, 18, 1, 0}, +/* 20 */ { 4, s_5_20, 18, 1, 0}, +/* 21 */ { 6, s_5_21, 18, 1, 0}, +/* 22 */ { 8, s_5_22, 21, 1, 0}, +/* 23 */ { 6, s_5_23, 18, 1, 0}, +/* 24 */ { 2, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, 24, 1, 0}, +/* 26 */ { 6, s_5_26, 25, 1, 0}, +/* 27 */ { 4, s_5_27, 24, 1, 0}, +/* 28 */ { 4, s_5_28, 24, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 6, s_5_30, 29, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 1, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 6, s_5_33, 32, 1, 0}, +/* 34 */ { 4, s_5_34, -1, 1, 0}, +/* 35 */ { 2, s_5_35, -1, 1, 0} +}; + +static symbol s_6_0[6] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82 }; +static symbol s_6_1[8] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82, 0xD1, 0x8C }; + +static struct among a_6[2] = +{ +/* 0 */ { 6, s_6_0, -1, 1, 0}, +/* 1 */ { 8, s_6_1, -1, 1, 0} +}; + +static symbol s_7_0[6] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88 }; +static symbol s_7_1[2] = { 0xD1, 0x8C }; +static symbol s_7_2[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88, 0xD0, 0xB5 }; +static symbol s_7_3[2] = { 0xD0, 0xBD }; + +static struct among a_7[4] = +{ +/* 0 */ { 6, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 3, 0}, +/* 2 */ { 8, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 2, 0} +}; + +static unsigned char g_v[] = { 33, 65, 8, 232 }; + +static symbol s_0[] = { 0xD0, 0xB0 }; +static symbol s_1[] = { 0xD1, 0x8F }; +static symbol s_2[] = { 0xD0, 0xB0 }; +static symbol s_3[] = { 0xD1, 0x8F }; +static symbol s_4[] = { 0xD0, 0xB0 }; +static symbol s_5[] = { 0xD1, 0x8F }; +static symbol s_6[] = { 0xD0, 0xBD }; +static symbol s_7[] = { 0xD0, 0xBD }; +static symbol s_8[] = { 0xD0, 0xBD }; +static symbol s_9[] = { 0xD0, 0xB8 }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping_U(z, g_v, 1072, 1103))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 62 */ + } + } + z->I[0] = z->c; /* setmark pV, line 62 */ + while(1) { /* gopast, line 62 */ + if (!(out_grouping_U(z, g_v, 1072, 1103))) goto lab2; + break; + lab2: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 62 */ + } + } + while(1) { /* gopast, line 63 */ + if (!(in_grouping_U(z, g_v, 1072, 1103))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 63 */ + } + } + while(1) { /* gopast, line 63 */ + if (!(out_grouping_U(z, g_v, 1072, 1103))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 63 */ + } + } + z->I[1] = z->c; /* setmark p2, line 63 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_perfective_gerund(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 72 */ + among_var = find_among_b(z, a_0, 9); /* substring, line 72 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 72 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 76 */ + if (!(eq_s_b(z, 2, s_0))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_1))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 83 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjective(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 88 */ + among_var = find_among_b(z, a_1, 26); /* substring, line 88 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 88 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjectival(struct SN_env * z) { + int among_var; + { int ret = r_adjective(z); + if (ret == 0) return 0; /* call adjective, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 109 */ + z->ket = z->c; /* [, line 110 */ + among_var = find_among_b(z, a_2, 8); /* substring, line 110 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 110 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 115 */ + if (!(eq_s_b(z, 2, s_2))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_3))) { z->c = z->l - m; goto lab0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 115 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + return 1; +} + +static int r_reflexive(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 129 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 129 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 129 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 46); /* substring, line 137 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 143 */ + if (!(eq_s_b(z, 2, s_4))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_5))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_noun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_5, 36); /* substring, line 160 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 167 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_derivational(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_6, 2); /* substring, line 176 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 176 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 176 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_tidy_up(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 4); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 188 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 189 */ + if (!(eq_s_b(z, 2, s_6))) return 0; + z->bra = z->c; /* ], line 189 */ + if (!(eq_s_b(z, 2, s_7))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 189 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(eq_s_b(z, 2, s_8))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 192 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int russian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 201 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 201 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 202 */ + + { int m3; /* setlimit, line 202 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 202 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 203 */ + { int m = z->l - z->c; (void) m; /* or, line 204 */ + { int ret = r_perfective_gerund(z); + if (ret == 0) goto lab3; /* call perfective_gerund, line 204 */ + if (ret < 0) return ret; + } + goto lab2; + lab3: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 205 */ + { int ret = r_reflexive(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 205 */ + if (ret < 0) return ret; + } + lab4: + ; + } + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_adjectival(z); + if (ret == 0) goto lab6; /* call adjectival, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb(z); + if (ret == 0) goto lab7; /* call verb, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_noun(z); + if (ret == 0) goto lab1; /* call noun, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + ; + } + lab2: + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* try, line 209 */ + z->ket = z->c; /* [, line 209 */ + if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 209 */ + { int ret; + ret = slice_del(z); /* delete, line 209 */ + if (ret < 0) return ret; + } + lab8: + ; + } + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_derivational(z); + if (ret == 0) goto lab9; /* call derivational, line 212 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 213 */ + { int ret = r_tidy_up(z); + if (ret == 0) goto lab10; /* call tidy_up, line 213 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + z->lb = m3; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * russian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void russian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * russian_UTF_8_create_env(void); +extern void russian_UTF_8_close_env(struct SN_env * z); + +extern int russian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1137 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int spanish_UTF_8_stem(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_y_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); + +extern struct SN_env * spanish_UTF_8_create_env(void); +extern void spanish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA1 }; +static symbol s_0_2[2] = { 0xC3, 0xA9 }; +static symbol s_0_3[2] = { 0xC3, 0xAD }; +static symbol s_0_4[2] = { 0xC3, 0xB3 }; +static symbol s_0_5[2] = { 0xC3, 0xBA }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 2, 0}, +/* 3 */ { 2, s_0_3, 0, 3, 0}, +/* 4 */ { 2, s_0_4, 0, 4, 0}, +/* 5 */ { 2, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[2] = { 'l', 'a' }; +static symbol s_1_1[4] = { 's', 'e', 'l', 'a' }; +static symbol s_1_2[2] = { 'l', 'e' }; +static symbol s_1_3[2] = { 'm', 'e' }; +static symbol s_1_4[2] = { 's', 'e' }; +static symbol s_1_5[2] = { 'l', 'o' }; +static symbol s_1_6[4] = { 's', 'e', 'l', 'o' }; +static symbol s_1_7[3] = { 'l', 'a', 's' }; +static symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' }; +static symbol s_1_9[3] = { 'l', 'e', 's' }; +static symbol s_1_10[3] = { 'l', 'o', 's' }; +static symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' }; +static symbol s_1_12[3] = { 'n', 'o', 's' }; + +static struct among a_1[13] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 4, s_1_1, 0, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 4, s_1_6, 5, -1, 0}, +/* 7 */ { 3, s_1_7, -1, -1, 0}, +/* 8 */ { 5, s_1_8, 7, -1, 0}, +/* 9 */ { 3, s_1_9, -1, -1, 0}, +/* 10 */ { 3, s_1_10, -1, -1, 0}, +/* 11 */ { 5, s_1_11, 10, -1, 0}, +/* 12 */ { 3, s_1_12, -1, -1, 0} +}; + +static symbol s_2_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_2_3[5] = { 0xC3, 0xA1, 'n', 'd', 'o' }; +static symbol s_2_4[6] = { 'i', 0xC3, 0xA9, 'n', 'd', 'o' }; +static symbol s_2_5[2] = { 'a', 'r' }; +static symbol s_2_6[2] = { 'e', 'r' }; +static symbol s_2_7[2] = { 'i', 'r' }; +static symbol s_2_8[3] = { 0xC3, 0xA1, 'r' }; +static symbol s_2_9[3] = { 0xC3, 0xA9, 'r' }; +static symbol s_2_10[3] = { 0xC3, 0xAD, 'r' }; + +static struct among a_2[11] = +{ +/* 0 */ { 4, s_2_0, -1, 6, 0}, +/* 1 */ { 5, s_2_1, -1, 6, 0}, +/* 2 */ { 5, s_2_2, -1, 7, 0}, +/* 3 */ { 5, s_2_3, -1, 2, 0}, +/* 4 */ { 6, s_2_4, -1, 1, 0}, +/* 5 */ { 2, s_2_5, -1, 6, 0}, +/* 6 */ { 2, s_2_6, -1, 6, 0}, +/* 7 */ { 2, s_2_7, -1, 6, 0}, +/* 8 */ { 3, s_2_8, -1, 3, 0}, +/* 9 */ { 3, s_2_9, -1, 4, 0}, +/* 10 */ { 3, s_2_10, -1, 5, 0} +}; + +static symbol s_3_0[2] = { 'i', 'c' }; +static symbol s_3_1[2] = { 'a', 'd' }; +static symbol s_3_2[2] = { 'o', 's' }; +static symbol s_3_3[2] = { 'i', 'v' }; + +static struct among a_3[4] = +{ +/* 0 */ { 2, s_3_0, -1, -1, 0}, +/* 1 */ { 2, s_3_1, -1, -1, 0}, +/* 2 */ { 2, s_3_2, -1, -1, 0}, +/* 3 */ { 2, s_3_3, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_4_1[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_4_2[4] = { 'a', 'n', 't', 'e' }; + +static struct among a_4[3] = +{ +/* 0 */ { 4, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' }; +static symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' }; +static symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_6_4[3] = { 'o', 's', 'a' }; +static symbol s_6_5[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_6[3] = { 'i', 'v', 'a' }; +static symbol s_6_7[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_8[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' }; +static symbol s_6_9[4] = { 'i', 'd', 'a', 'd' }; +static symbol s_6_10[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_6_11[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_6_12[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_15[6] = { 'a', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_6_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_6_17[3] = { 'i', 'c', 'o' }; +static symbol s_6_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_19[3] = { 'o', 's', 'o' }; +static symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_22[3] = { 'i', 'v', 'o' }; +static symbol s_6_23[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_6_24[4] = { 'i', 'c', 'a', 's' }; +static symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_6_28[4] = { 'o', 's', 'a', 's' }; +static symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_6_30[4] = { 'i', 'v', 'a', 's' }; +static symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' }; +static symbol s_6_32[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' }; +static symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' }; +static symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_6_40[4] = { 'i', 'c', 'o', 's' }; +static symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_6_42[4] = { 'o', 's', 'o', 's' }; +static symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_45[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_6[46] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 2, 0}, +/* 2 */ { 5, s_6_2, -1, 5, 0}, +/* 3 */ { 5, s_6_3, -1, 2, 0}, +/* 4 */ { 3, s_6_4, -1, 1, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 9, 0}, +/* 7 */ { 4, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, -1, 3, 0}, +/* 9 */ { 4, s_6_9, -1, 8, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 2, 0}, +/* 13 */ { 5, s_6_13, -1, 7, 0}, +/* 14 */ { 6, s_6_14, 13, 6, 0}, +/* 15 */ { 6, s_6_15, -1, 2, 0}, +/* 16 */ { 6, s_6_16, -1, 4, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 3, s_6_19, -1, 1, 0}, +/* 20 */ { 7, s_6_20, -1, 1, 0}, +/* 21 */ { 7, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 2, 0}, +/* 24 */ { 4, s_6_24, -1, 1, 0}, +/* 25 */ { 6, s_6_25, -1, 2, 0}, +/* 26 */ { 6, s_6_26, -1, 5, 0}, +/* 27 */ { 6, s_6_27, -1, 2, 0}, +/* 28 */ { 4, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 9, 0}, +/* 31 */ { 5, s_6_31, -1, 1, 0}, +/* 32 */ { 7, s_6_32, -1, 3, 0}, +/* 33 */ { 6, s_6_33, -1, 8, 0}, +/* 34 */ { 5, s_6_34, -1, 1, 0}, +/* 35 */ { 5, s_6_35, -1, 1, 0}, +/* 36 */ { 7, s_6_36, -1, 2, 0}, +/* 37 */ { 7, s_6_37, -1, 4, 0}, +/* 38 */ { 6, s_6_38, -1, 2, 0}, +/* 39 */ { 5, s_6_39, -1, 2, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 8, s_6_43, -1, 1, 0}, +/* 44 */ { 8, s_6_44, -1, 1, 0}, +/* 45 */ { 4, s_6_45, -1, 9, 0} +}; + +static symbol s_7_0[2] = { 'y', 'a' }; +static symbol s_7_1[2] = { 'y', 'e' }; +static symbol s_7_2[3] = { 'y', 'a', 'n' }; +static symbol s_7_3[3] = { 'y', 'e', 'n' }; +static symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' }; +static symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_7_6[2] = { 'y', 'o' }; +static symbol s_7_7[3] = { 'y', 'a', 's' }; +static symbol s_7_8[3] = { 'y', 'e', 's' }; +static symbol s_7_9[4] = { 'y', 'a', 'i', 's' }; +static symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' }; +static symbol s_7_11[3] = { 'y', 0xC3, 0xB3 }; + +static struct among a_7[12] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 5, s_7_4, -1, 1, 0}, +/* 5 */ { 5, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 4, s_7_9, -1, 1, 0}, +/* 10 */ { 5, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 1, 0} +}; + +static symbol s_8_0[3] = { 'a', 'b', 'a' }; +static symbol s_8_1[3] = { 'a', 'd', 'a' }; +static symbol s_8_2[3] = { 'i', 'd', 'a' }; +static symbol s_8_3[3] = { 'a', 'r', 'a' }; +static symbol s_8_4[4] = { 'i', 'e', 'r', 'a' }; +static symbol s_8_5[3] = { 0xC3, 0xAD, 'a' }; +static symbol s_8_6[5] = { 'a', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_7[5] = { 'e', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_8[5] = { 'i', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_9[2] = { 'a', 'd' }; +static symbol s_8_10[2] = { 'e', 'd' }; +static symbol s_8_11[2] = { 'i', 'd' }; +static symbol s_8_12[3] = { 'a', 's', 'e' }; +static symbol s_8_13[4] = { 'i', 'e', 's', 'e' }; +static symbol s_8_14[4] = { 'a', 's', 't', 'e' }; +static symbol s_8_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_8_16[2] = { 'a', 'n' }; +static symbol s_8_17[4] = { 'a', 'b', 'a', 'n' }; +static symbol s_8_18[4] = { 'a', 'r', 'a', 'n' }; +static symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' }; +static symbol s_8_20[4] = { 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_21[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_22[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_23[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_24[2] = { 'e', 'n' }; +static symbol s_8_25[4] = { 'a', 's', 'e', 'n' }; +static symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' }; +static symbol s_8_27[4] = { 'a', 'r', 'o', 'n' }; +static symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' }; +static symbol s_8_29[5] = { 'a', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_30[5] = { 'e', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_31[5] = { 'i', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_32[3] = { 'a', 'd', 'o' }; +static symbol s_8_33[3] = { 'i', 'd', 'o' }; +static symbol s_8_34[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_8_36[2] = { 'a', 'r' }; +static symbol s_8_37[2] = { 'e', 'r' }; +static symbol s_8_38[2] = { 'i', 'r' }; +static symbol s_8_39[2] = { 'a', 's' }; +static symbol s_8_40[4] = { 'a', 'b', 'a', 's' }; +static symbol s_8_41[4] = { 'a', 'd', 'a', 's' }; +static symbol s_8_42[4] = { 'i', 'd', 'a', 's' }; +static symbol s_8_43[4] = { 'a', 'r', 'a', 's' }; +static symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' }; +static symbol s_8_45[4] = { 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_46[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_47[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_48[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_49[2] = { 'e', 's' }; +static symbol s_8_50[4] = { 'a', 's', 'e', 's' }; +static symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' }; +static symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' }; +static symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' }; +static symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' }; +static symbol s_8_55[5] = { 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_56[7] = { 'a', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_57[7] = { 'e', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_58[7] = { 'i', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' }; +static symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' }; +static symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' }; +static symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' }; +static symbol s_8_63[4] = { 0xC3, 0xA1, 'i', 's' }; +static symbol s_8_64[4] = { 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_65[6] = { 'a', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_66[6] = { 'e', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_67[6] = { 'i', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_68[4] = { 'a', 'd', 'o', 's' }; +static symbol s_8_69[4] = { 'i', 'd', 'o', 's' }; +static symbol s_8_70[4] = { 'a', 'm', 'o', 's' }; +static symbol s_8_71[7] = { 0xC3, 0xA1, 'b', 'a', 'm', 'o', 's' }; +static symbol s_8_72[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_73[8] = { 'i', 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_74[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_75[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_76[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_77[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_78[4] = { 'e', 'm', 'o', 's' }; +static symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_82[7] = { 0xC3, 0xA1, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_83[8] = { 'i', 0xC3, 0xA9, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_84[4] = { 'i', 'm', 'o', 's' }; +static symbol s_8_85[5] = { 'a', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_86[5] = { 'e', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_87[5] = { 'i', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_88[3] = { 0xC3, 0xAD, 's' }; +static symbol s_8_89[4] = { 'a', 'r', 0xC3, 0xA1 }; +static symbol s_8_90[4] = { 'e', 'r', 0xC3, 0xA1 }; +static symbol s_8_91[4] = { 'i', 'r', 0xC3, 0xA1 }; +static symbol s_8_92[4] = { 'a', 'r', 0xC3, 0xA9 }; +static symbol s_8_93[4] = { 'e', 'r', 0xC3, 0xA9 }; +static symbol s_8_94[4] = { 'i', 'r', 0xC3, 0xA9 }; +static symbol s_8_95[3] = { 'i', 0xC3, 0xB3 }; + +static struct among a_8[96] = +{ +/* 0 */ { 3, s_8_0, -1, 2, 0}, +/* 1 */ { 3, s_8_1, -1, 2, 0}, +/* 2 */ { 3, s_8_2, -1, 2, 0}, +/* 3 */ { 3, s_8_3, -1, 2, 0}, +/* 4 */ { 4, s_8_4, -1, 2, 0}, +/* 5 */ { 3, s_8_5, -1, 2, 0}, +/* 6 */ { 5, s_8_6, 5, 2, 0}, +/* 7 */ { 5, s_8_7, 5, 2, 0}, +/* 8 */ { 5, s_8_8, 5, 2, 0}, +/* 9 */ { 2, s_8_9, -1, 2, 0}, +/* 10 */ { 2, s_8_10, -1, 2, 0}, +/* 11 */ { 2, s_8_11, -1, 2, 0}, +/* 12 */ { 3, s_8_12, -1, 2, 0}, +/* 13 */ { 4, s_8_13, -1, 2, 0}, +/* 14 */ { 4, s_8_14, -1, 2, 0}, +/* 15 */ { 4, s_8_15, -1, 2, 0}, +/* 16 */ { 2, s_8_16, -1, 2, 0}, +/* 17 */ { 4, s_8_17, 16, 2, 0}, +/* 18 */ { 4, s_8_18, 16, 2, 0}, +/* 19 */ { 5, s_8_19, 16, 2, 0}, +/* 20 */ { 4, s_8_20, 16, 2, 0}, +/* 21 */ { 6, s_8_21, 20, 2, 0}, +/* 22 */ { 6, s_8_22, 20, 2, 0}, +/* 23 */ { 6, s_8_23, 20, 2, 0}, +/* 24 */ { 2, s_8_24, -1, 1, 0}, +/* 25 */ { 4, s_8_25, 24, 2, 0}, +/* 26 */ { 5, s_8_26, 24, 2, 0}, +/* 27 */ { 4, s_8_27, -1, 2, 0}, +/* 28 */ { 5, s_8_28, -1, 2, 0}, +/* 29 */ { 5, s_8_29, -1, 2, 0}, +/* 30 */ { 5, s_8_30, -1, 2, 0}, +/* 31 */ { 5, s_8_31, -1, 2, 0}, +/* 32 */ { 3, s_8_32, -1, 2, 0}, +/* 33 */ { 3, s_8_33, -1, 2, 0}, +/* 34 */ { 4, s_8_34, -1, 2, 0}, +/* 35 */ { 5, s_8_35, -1, 2, 0}, +/* 36 */ { 2, s_8_36, -1, 2, 0}, +/* 37 */ { 2, s_8_37, -1, 2, 0}, +/* 38 */ { 2, s_8_38, -1, 2, 0}, +/* 39 */ { 2, s_8_39, -1, 2, 0}, +/* 40 */ { 4, s_8_40, 39, 2, 0}, +/* 41 */ { 4, s_8_41, 39, 2, 0}, +/* 42 */ { 4, s_8_42, 39, 2, 0}, +/* 43 */ { 4, s_8_43, 39, 2, 0}, +/* 44 */ { 5, s_8_44, 39, 2, 0}, +/* 45 */ { 4, s_8_45, 39, 2, 0}, +/* 46 */ { 6, s_8_46, 45, 2, 0}, +/* 47 */ { 6, s_8_47, 45, 2, 0}, +/* 48 */ { 6, s_8_48, 45, 2, 0}, +/* 49 */ { 2, s_8_49, -1, 1, 0}, +/* 50 */ { 4, s_8_50, 49, 2, 0}, +/* 51 */ { 5, s_8_51, 49, 2, 0}, +/* 52 */ { 5, s_8_52, -1, 2, 0}, +/* 53 */ { 5, s_8_53, -1, 2, 0}, +/* 54 */ { 6, s_8_54, -1, 2, 0}, +/* 55 */ { 5, s_8_55, -1, 2, 0}, +/* 56 */ { 7, s_8_56, 55, 2, 0}, +/* 57 */ { 7, s_8_57, 55, 2, 0}, +/* 58 */ { 7, s_8_58, 55, 2, 0}, +/* 59 */ { 5, s_8_59, -1, 2, 0}, +/* 60 */ { 6, s_8_60, -1, 2, 0}, +/* 61 */ { 6, s_8_61, -1, 2, 0}, +/* 62 */ { 6, s_8_62, -1, 2, 0}, +/* 63 */ { 4, s_8_63, -1, 2, 0}, +/* 64 */ { 4, s_8_64, -1, 1, 0}, +/* 65 */ { 6, s_8_65, 64, 2, 0}, +/* 66 */ { 6, s_8_66, 64, 2, 0}, +/* 67 */ { 6, s_8_67, 64, 2, 0}, +/* 68 */ { 4, s_8_68, -1, 2, 0}, +/* 69 */ { 4, s_8_69, -1, 2, 0}, +/* 70 */ { 4, s_8_70, -1, 2, 0}, +/* 71 */ { 7, s_8_71, 70, 2, 0}, +/* 72 */ { 7, s_8_72, 70, 2, 0}, +/* 73 */ { 8, s_8_73, 70, 2, 0}, +/* 74 */ { 6, s_8_74, 70, 2, 0}, +/* 75 */ { 8, s_8_75, 74, 2, 0}, +/* 76 */ { 8, s_8_76, 74, 2, 0}, +/* 77 */ { 8, s_8_77, 74, 2, 0}, +/* 78 */ { 4, s_8_78, -1, 1, 0}, +/* 79 */ { 6, s_8_79, 78, 2, 0}, +/* 80 */ { 6, s_8_80, 78, 2, 0}, +/* 81 */ { 6, s_8_81, 78, 2, 0}, +/* 82 */ { 7, s_8_82, 78, 2, 0}, +/* 83 */ { 8, s_8_83, 78, 2, 0}, +/* 84 */ { 4, s_8_84, -1, 2, 0}, +/* 85 */ { 5, s_8_85, -1, 2, 0}, +/* 86 */ { 5, s_8_86, -1, 2, 0}, +/* 87 */ { 5, s_8_87, -1, 2, 0}, +/* 88 */ { 3, s_8_88, -1, 2, 0}, +/* 89 */ { 4, s_8_89, -1, 2, 0}, +/* 90 */ { 4, s_8_90, -1, 2, 0}, +/* 91 */ { 4, s_8_91, -1, 2, 0}, +/* 92 */ { 4, s_8_92, -1, 2, 0}, +/* 93 */ { 4, s_8_93, -1, 2, 0}, +/* 94 */ { 4, s_8_94, -1, 2, 0}, +/* 95 */ { 3, s_8_95, -1, 2, 0} +}; + +static symbol s_9_0[1] = { 'a' }; +static symbol s_9_1[1] = { 'e' }; +static symbol s_9_2[1] = { 'o' }; +static symbol s_9_3[2] = { 'o', 's' }; +static symbol s_9_4[2] = { 0xC3, 0xA1 }; +static symbol s_9_5[2] = { 0xC3, 0xA9 }; +static symbol s_9_6[2] = { 0xC3, 0xAD }; +static symbol s_9_7[2] = { 0xC3, 0xB3 }; + +static struct among a_9[8] = +{ +/* 0 */ { 1, s_9_0, -1, 1, 0}, +/* 1 */ { 1, s_9_1, -1, 2, 0}, +/* 2 */ { 1, s_9_2, -1, 1, 0}, +/* 3 */ { 2, s_9_3, -1, 1, 0}, +/* 4 */ { 2, s_9_4, -1, 1, 0}, +/* 5 */ { 2, s_9_5, -1, 2, 0}, +/* 6 */ { 2, s_9_6, -1, 1, 0}, +/* 7 */ { 2, s_9_7, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_6[] = { 'a', 'n', 'd', 'o' }; +static symbol s_7[] = { 'a', 'r' }; +static symbol s_8[] = { 'e', 'r' }; +static symbol s_9[] = { 'i', 'r' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'c' }; +static symbol s_12[] = { 'l', 'o', 'g' }; +static symbol s_13[] = { 'u' }; +static symbol s_14[] = { 'e', 'n', 't', 'e' }; +static symbol s_15[] = { 'a', 't' }; +static symbol s_16[] = { 'a', 't' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'u' }; +static symbol s_19[] = { 'g' }; +static symbol s_20[] = { 'u' }; +static symbol s_21[] = { 'g' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 37 */ + { int c = z->c; /* or, line 39 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab2; + { int c = z->c; /* or, line 38 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab4; + while(1) { /* gopast, line 38 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 38 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab2; + while(1) { /* gopast, line 38 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 38 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab0; + { int c = z->c; /* or, line 40 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab8; + while(1) { /* gopast, line 40 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 40 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 40 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 41 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 43 */ + while(1) { /* gopast, line 44 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 44 */ + } + } + while(1) { /* gopast, line 44 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 44 */ + } + } + z->I[1] = z->c; /* setmark p1, line 44 */ + while(1) { /* gopast, line 45 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 45 */ + } + } + while(1) { /* gopast, line 45 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 45 */ + } + } + z->I[2] = z->c; /* setmark p2, line 45 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 49 */ + int c = z->c; + z->bra = z->c; /* [, line 50 */ + among_var = find_among(z, a_0, 6); /* substring, line 50 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 50 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 52 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 54 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 55 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 57 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 68 */ + if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */ + z->bra = z->c; /* ], line 68 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 72 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 72 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + z->bra = z->c; /* ], line 73 */ + { int ret; + ret = slice_from_s(z, 5, s_5); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + z->bra = z->c; /* ], line 75 */ + { int ret; + ret = slice_from_s(z, 2, s_7); /* <-, line 75 */ + if (ret < 0) return ret; + } + break; + case 4: + z->bra = z->c; /* ], line 76 */ + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 5: + z->bra = z->c; /* ], line 77 */ + { int ret; + ret = slice_from_s(z, 2, s_9); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 7: + if (!(eq_s_b(z, 1, s_10))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 82 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + among_var = find_among_b(z, a_6, 46); /* substring, line 87 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 87 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 99 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 106 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 106 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 115 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 124 */ + z->ket = z->c; /* [, line 125 */ + among_var = find_among_b(z, a_3, 4); /* substring, line 125 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 125 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 126 */ + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 126 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 126 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 126 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 136 */ + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 137 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 140 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 140 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 147 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 148 */ + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 149 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 152 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 159 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 159 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 160 */ + z->ket = z->c; /* [, line 161 */ + if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; goto lab4; } + z->bra = z->c; /* ], line 161 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call R2, line 161 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + lab4: + ; + } + break; + } + return 1; +} + +static int r_y_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 168 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 168 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 168 */ + among_var = find_among_b(z, a_7, 12); /* substring, line 168 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 168 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_17))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 171 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 176 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 176 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_8, 96); /* substring, line 176 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 176 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* try, line 179 */ + if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m; goto lab0; } + { int m_test = z->l - z->c; /* test, line 179 */ + if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + lab0: + ; + } + z->bra = z->c; /* ], line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 200 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 205 */ + among_var = find_among_b(z, a_9, 8); /* substring, line 205 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 205 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 208 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 208 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 210 */ + z->ket = z->c; /* [, line 210 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 210 */ + { int m_test = z->l - z->c; /* test, line 210 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + return 1; +} + +extern int spanish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 216 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 216 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 217 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab1; /* call attached_pronoun, line 218 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int m = z->l - z->c; (void) m; /* or, line 219 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab4; /* call standard_suffix, line 219 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_y_verb_suffix(z); + if (ret == 0) goto lab5; /* call y_verb_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab3; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab2; /* call verb_suffix, line 221 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab6; /* call residual_suffix, line 223 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 225 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 225 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * spanish_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void spanish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * spanish_UTF_8_create_env(void); +extern void spanish_UTF_8_close_env(struct SN_env * z); + +extern int spanish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,313 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int swedish_UTF_8_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * swedish_UTF_8_create_env(void); +extern void swedish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[4] = { 'a', 'r', 'n', 'a' }; +static symbol s_0_2[4] = { 'e', 'r', 'n', 'a' }; +static symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' }; +static symbol s_0_4[4] = { 'o', 'r', 'n', 'a' }; +static symbol s_0_5[2] = { 'a', 'd' }; +static symbol s_0_6[1] = { 'e' }; +static symbol s_0_7[3] = { 'a', 'd', 'e' }; +static symbol s_0_8[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_9[4] = { 'a', 'r', 'n', 'e' }; +static symbol s_0_10[3] = { 'a', 'r', 'e' }; +static symbol s_0_11[4] = { 'a', 's', 't', 'e' }; +static symbol s_0_12[2] = { 'e', 'n' }; +static symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' }; +static symbol s_0_14[4] = { 'a', 'r', 'e', 'n' }; +static symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_16[3] = { 'e', 'r', 'n' }; +static symbol s_0_17[2] = { 'a', 'r' }; +static symbol s_0_18[2] = { 'e', 'r' }; +static symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_20[2] = { 'o', 'r' }; +static symbol s_0_21[1] = { 's' }; +static symbol s_0_22[2] = { 'a', 's' }; +static symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' }; +static symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' }; +static symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' }; +static symbol s_0_26[2] = { 'e', 's' }; +static symbol s_0_27[4] = { 'a', 'd', 'e', 's' }; +static symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_0_29[3] = { 'e', 'n', 's' }; +static symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' }; +static symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_32[4] = { 'e', 'r', 'n', 's' }; +static symbol s_0_33[2] = { 'a', 't' }; +static symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' }; +static symbol s_0_35[3] = { 'h', 'e', 't' }; +static symbol s_0_36[3] = { 'a', 's', 't' }; + +static struct among a_0[37] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 7, s_0_3, 2, 1, 0}, +/* 4 */ { 4, s_0_4, 0, 1, 0}, +/* 5 */ { 2, s_0_5, -1, 1, 0}, +/* 6 */ { 1, s_0_6, -1, 1, 0}, +/* 7 */ { 3, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 6, 1, 0}, +/* 9 */ { 4, s_0_9, 6, 1, 0}, +/* 10 */ { 3, s_0_10, 6, 1, 0}, +/* 11 */ { 4, s_0_11, 6, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 4, s_0_14, 12, 1, 0}, +/* 15 */ { 5, s_0_15, 12, 1, 0}, +/* 16 */ { 3, s_0_16, -1, 1, 0}, +/* 17 */ { 2, s_0_17, -1, 1, 0}, +/* 18 */ { 2, s_0_18, -1, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 2, s_0_20, -1, 1, 0}, +/* 21 */ { 1, s_0_21, -1, 2, 0}, +/* 22 */ { 2, s_0_22, 21, 1, 0}, +/* 23 */ { 5, s_0_23, 22, 1, 0}, +/* 24 */ { 5, s_0_24, 22, 1, 0}, +/* 25 */ { 5, s_0_25, 22, 1, 0}, +/* 26 */ { 2, s_0_26, 21, 1, 0}, +/* 27 */ { 4, s_0_27, 26, 1, 0}, +/* 28 */ { 5, s_0_28, 26, 1, 0}, +/* 29 */ { 3, s_0_29, 21, 1, 0}, +/* 30 */ { 5, s_0_30, 29, 1, 0}, +/* 31 */ { 6, s_0_31, 29, 1, 0}, +/* 32 */ { 4, s_0_32, 21, 1, 0}, +/* 33 */ { 2, s_0_33, -1, 1, 0}, +/* 34 */ { 5, s_0_34, -1, 1, 0}, +/* 35 */ { 3, s_0_35, -1, 1, 0}, +/* 36 */ { 3, s_0_36, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 'd' }; +static symbol s_1_1[2] = { 'g', 'd' }; +static symbol s_1_2[2] = { 'n', 'n' }; +static symbol s_1_3[2] = { 'd', 't' }; +static symbol s_1_4[2] = { 'g', 't' }; +static symbol s_1_5[2] = { 'k', 't' }; +static symbol s_1_6[2] = { 't', 't' }; + +static struct among a_1[7] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 2, s_1_6, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[3] = { 'e', 'l', 's' }; +static symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' }; +static symbol s_2_4[5] = { 'l', 0xC3, 0xB6, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 1, 0}, +/* 3 */ { 5, s_2_3, -1, 3, 0}, +/* 4 */ { 5, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; + +static unsigned char g_s_ending[] = { 119, 127, 149 }; + +static symbol s_0[] = { 'l', 0xC3, 0xB6, 's' }; +static symbol s_1[] = { 'f', 'u', 'l', 'l' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 29 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 29 */ + } + z->I[1] = z->c; /* setmark x, line 29 */ + z->c = c_test; + } + while(1) { /* goto, line 30 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 30 */ + } + } + while(1) { /* gopast, line 30 */ + if (!(out_grouping_U(z, g_v, 97, 246))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 30 */ + } + } + z->I[0] = z->c; /* setmark p1, line 30 */ + /* try, line 31 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 37 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 37 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 37 */ + among_var = find_among_b(z, a_0, 37); /* substring, line 37 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 37 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 98, 121))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m3; /* setlimit, line 50 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 50 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* and, line 52 */ + if (!(find_among_b(z, a_1, 7))) { z->lb = m3; return 0; } /* among, line 51 */ + z->c = z->l - m; + z->ket = z->c; /* [, line 52 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) { z->lb = m3; return 0; } + z->c = c; /* next, line 52 */ + } + z->bra = z->c; /* ], line 52 */ + { int ret; + ret = slice_del(z); /* delete, line 52 */ + if (ret < 0) return ret; + } + } + z->lb = m3; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 56 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 56 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 57 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_0); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_1); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +extern int swedish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 66 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 67 */ + + { int m = z->l - z->c; (void) m; /* do, line 68 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 68 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 69 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 69 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 70 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * swedish_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void swedish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * swedish_UTF_8_create_env(void); +extern void swedish_UTF_8_close_env(struct SN_env * z); + +extern int swedish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/util/arrayinputstream.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/arrayinputstream.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/util/arrayinputstream.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/arrayinputstream.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef CLUCENE_UTIL_ARRAYINPUTSTREAM_H +#define CLUCENE_UTIL_ARRAYINPUTSTREAM_H + +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(util) + +template +class CLUCENE_CONTRIBS_EXPORT ArrayInputStream : public CL_NS(util)::CLStream { +public: + _CL_DEPRECATED(Use compressed field) ArrayInputStream(ArrayBase const* data); + int32_t read(const element*& start, int32_t min, int32_t max); + int64_t skip(int64_t ntoskip); + int64_t position(); + size_t size(); +private: + ArrayBase const* data; + int64_t current_position; +}; + +template +ArrayInputStream::ArrayInputStream(ArrayBase const* data) : +data(data), +current_position(0) { +} + +template +int32_t ArrayInputStream::read(const element*& start, int32_t min, int32_t max) { + int32_t to_read = min; + int32_t readable = data->length - current_position; + if (readable < to_read) { + to_read = readable; + } + start = data->values + current_position; + current_position += to_read; + return to_read; +} + +template +int64_t ArrayInputStream::skip(int64_t ntoskip) { + int64_t to_skip = ntoskip; + int64_t skippable = data->length - current_position; + if (skippable < to_skip) { + to_skip = skippable; + } + current_position += to_skip; + return to_skip; +} + +template +int64_t ArrayInputStream::position() { + return current_position; +} + +template +size_t ArrayInputStream::size() { + return data->length; +} +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/util/byteinputstream.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/byteinputstream.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/util/byteinputstream.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/byteinputstream.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,17 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef CLUCENE_UTIL_BYTEINPUTSTREAM_H +#define CLUCENE_UTIL_BYTEINPUTSTREAM_H + +#include "arrayinputstream.h" + +CL_NS_DEF(util) + +typedef ArrayInputStream ByteInputStream; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/util/gzipcompressstream.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/gzipcompressstream.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/util/gzipcompressstream.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/gzipcompressstream.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,126 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Jos van den Oever +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "gzipcompressstream.h" +#include "CLucene/util/_bufferedstream.h" +#include + +CL_NS_DEF(util) + +class GZipCompressInputStream::Internal: public CL_NS(util)::BufferedInputStreamImpl{ + z_stream_s* zstream; + InputStream* input; +protected: + int32_t fillBuffer(signed char* start, int32_t space){ + if (zstream == 0) return -1; + // make sure there is data to decompress + if (zstream->avail_in==0) { + // read data from the input stream + const signed char* inStart; + int32_t nread = input->read(inStart, 1, 0); + if (nread < 1) { + zstream->avail_in = 0; //bail... + if (deflate(zstream, Z_FINISH) != Z_STREAM_END) { + _CLTHROWA(CL_ERR_IO, "deflate should report Z_STREAM_END\n"); + } + int32_t nwritten = space - zstream->avail_out; + dealloc(); + return nwritten; + } + zstream->next_in = (Bytef*)inStart; + zstream->avail_in = nread; + } + + // make sure we can write into the buffer + zstream->avail_out = space; + zstream->next_out = (Bytef*)start; + + int r = deflate(zstream, Z_NO_FLUSH); + // inform the buffer of the number of bytes that was read + int32_t nwritten = space - zstream->avail_out; + switch (r) { + case Z_NEED_DICT: + _CLTHROWA(CL_ERR_IO, "Z_NEED_DICT while inflating stream."); + break; + case Z_DATA_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_DATA_ERROR while inflating stream."); + break; + case Z_MEM_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_MEM_ERROR while inflating stream."); + break; + } + return nwritten; + } +public: + void dealloc(){ + if (zstream) { + deflateEnd(zstream); + free(zstream); + zstream = 0; + } + } + void _setMinBufSize(int buf){ + this->setMinBufSize(buf); + } + Internal(InputStream* input, int level){ + if ( level < 0 || level > 9 ) + level = Z_DEFAULT_COMPRESSION; + + this->input = input; + + // initialize the z_stream + zstream = (z_stream_s*)malloc(sizeof(z_stream_s)); + zstream->zalloc = Z_NULL; + zstream->zfree = Z_NULL; + zstream->opaque = Z_NULL; + zstream->avail_in = 0; + + // initialize for writing gzip streams + int r = deflateInit(zstream, level); + if (r != Z_OK) { + dealloc(); + _CLTHROWA(CL_ERR_IO, "Error initializing GZipCompressInputStream."); + } + + // signal that we need to read into the buffer + zstream->avail_out = 1; + } + + ~Internal(){ + dealloc(); + } +}; + + +GZipCompressInputStream::GZipCompressInputStream ( InputStream* input, int level) +{ + internal = new Internal(input,level); +} +size_t GZipCompressInputStream::size(){ + return internal->size(); +} +GZipCompressInputStream::~GZipCompressInputStream () +{ + delete internal; +} +int32_t GZipCompressInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return internal->read(start,min,max); +} +int64_t GZipCompressInputStream::position(){ + return internal->position(); +} +int64_t GZipCompressInputStream::reset(int64_t to){ + return internal->reset(to); +} +int64_t GZipCompressInputStream::skip(int64_t ntoskip){ + return internal->skip(ntoskip); +} +void GZipCompressInputStream::setMinBufSize(int32_t minbufsize){ + internal->_setMinBufSize(minbufsize); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/util/gzipcompressstream.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/gzipcompressstream.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/util/gzipcompressstream.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/gzipcompressstream.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,34 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Jos van den Oever +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef CLUENE_UTIL_GZIPCOMPRESSSTREAM_H +#define CLUENE_UTIL_GZIPCOMPRESSSTREAM_H + +#include "CLucene/util/CLStreams.h" + +struct z_stream_s; + +CL_NS_DEF(util) + +class CLUCENE_CONTRIBS_EXPORT GZipCompressInputStream : public InputStream{ +private: + class Internal; + Internal* internal; +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_BUFFER_SIZE=4096); + _CL_DEPRECATED(Use compressed field) explicit GZipCompressInputStream(InputStream* input, int level=-1); + _CL_DEPRECATED(Use compressed field) virtual ~GZipCompressInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/util/gzipinputstream.cpp clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/gzipinputstream.cpp --- clucene-core-0.9.21b/src/contribs-lib/CLucene/util/gzipinputstream.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/gzipinputstream.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,184 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Jos van den Oever +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "gzipinputstream.h" +#include "CLucene/util/_bufferedstream.h" +#include + +CL_NS_DEF(util) + + +class GZipInputStream::Internal{ +public: + class JStreamsBuffer: public BufferedInputStreamImpl{ + z_stream_s* zstream; + BufferedInputStream* input; + protected: + + int32_t fillBuffer(signed char* start, int32_t space) { + if (zstream == 0) return -1; + // make sure there is data to decompress + if (zstream->avail_out) { + // read data from the input stream + const signed char* inStart; + int32_t nread = input->read(inStart, 1, 0); + if (nread < 1) { + _CLTHROWA(CL_ERR_IO, "unexpected end of stream"); + } else { + zstream->next_in = (Bytef*)inStart; + zstream->avail_in = nread; + } + } + // make sure we can write into the buffer + zstream->avail_out = space; + zstream->next_out = (Bytef*)start; + // decompress + int r = inflate(zstream, Z_SYNC_FLUSH); + // inform the buffer of the number of bytes that was read + int32_t nwritten = space - zstream->avail_out; + switch (r) { + case Z_NEED_DICT: + _CLTHROWA(CL_ERR_IO, "Z_NEED_DICT while inflating stream."); + break; + case Z_DATA_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_DATA_ERROR while inflating stream."); + break; + case Z_MEM_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_MEM_ERROR while inflating stream."); + break; + case Z_STREAM_END: + if (zstream->avail_in) { + input->reset(input->position()-zstream->avail_in); + } + // we are finished decompressing, + // (but this stream is not yet finished) + dealloc(); + } + return nwritten; + } + void dealloc() { + if (zstream) { + inflateEnd(zstream); + free(zstream); + zstream = 0; + } + } + bool checkMagic() { + const unsigned char* buf; + const signed char* begin; + int32_t nread; + + int64_t pos = input->position(); + nread = input->read(begin, 2, 2); + input->reset(pos); + if (nread != 2) { + return false; + } + + buf = (const unsigned char*)begin; + return buf[0] == 0x1f && buf[1] == 0x8b; + } + + public: + int encoding; + + JStreamsBuffer(BufferedInputStream* input, GZipInputStream::ZipFormat format){ + this->input = input; + + // check first bytes of stream before allocating buffer + if (format == GZipInputStream::GZIPFORMAT && !checkMagic()) { + _CLTHROWA(CL_ERR_IO, "Magic bytes are wrong."); + } + + // initialize the z_stream + zstream = (z_stream_s*)malloc(sizeof(z_stream_s)); + zstream->zalloc = Z_NULL; + zstream->zfree = Z_NULL; + zstream->opaque = Z_NULL; + zstream->avail_in = 0; + zstream->next_in = Z_NULL; + // initialize for reading gzip streams + // for reading libz streams, you need inflateInit(zstream) + int r; + switch(format) { + case GZipInputStream::ZLIBFORMAT: + r = inflateInit(zstream); + break; + case GZipInputStream::GZIPFORMAT: + r = inflateInit2(zstream, 15+16); + break; + case GZipInputStream::ZIPFORMAT: + default: + r = inflateInit2(zstream, -MAX_WBITS); + break; + } + if (r != Z_OK) { + dealloc(); + _CLTHROWA(CL_ERR_IO, "Error initializing GZipInputStream."); + } + + // signal that we need to read into the buffer + zstream->avail_out = 1; + } + void _setMinBufSize(int32_t bufsize){ + this->setMinBufSize(bufsize); + } + + ~JStreamsBuffer(){ + dealloc(); + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(BufferedInputStream* input, GZipInputStream::ZipFormat format){ + jsbuffer = new JStreamsBuffer(input, format); + } + ~Internal(){ + delete jsbuffer; + } +}; + +GZipInputStream::GZipInputStream(InputStream* input, ZipFormat format) { + internal = new Internal(_CLNEW FilteredBufferedInputStream(input, false), format); +} +GZipInputStream::GZipInputStream(BufferedInputStream* input, ZipFormat format) { + internal = new Internal(input, format); +} + +GZipInputStream::~GZipInputStream() { + delete internal; +} + + +int32_t GZipInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return internal->jsbuffer->read(start,min,max); +} +int32_t GZipInputStream::read(const unsigned char*& _start, int32_t min, int32_t max){ + const signed char* start = 0; + int32_t ret = internal->jsbuffer->read(start,min,max); + _start = (const unsigned char*)start; + return ret; +} +int64_t GZipInputStream::position(){ + return internal->jsbuffer->position(); +} +int64_t GZipInputStream::reset(int64_t to){ + return internal->jsbuffer->reset(to); +} +int64_t GZipInputStream::skip(int64_t ntoskip){ + return internal->jsbuffer->skip(ntoskip); +} +void GZipInputStream::setMinBufSize(int32_t minbufsize){ + internal->jsbuffer->_setMinBufSize(minbufsize); +} +size_t GZipInputStream::size(){ + return internal->jsbuffer->size(); +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/util/gzipinputstream.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/gzipinputstream.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/util/gzipinputstream.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/gzipinputstream.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Jos van den Oever +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef CLUENE_UTIL_GZIPINPUTSTREAM_H +#define CLUENE_UTIL_GZIPINPUTSTREAM_H + +#include "CLucene/util/CLStreams.h" + +struct z_stream_s; + +CL_NS_DEF(util) + +class CLUCENE_CONTRIBS_EXPORT GZipInputStream : public CL_NS(util)::BufferedInputStream { +public: + enum ZipFormat { ZLIBFORMAT, GZIPFORMAT, ZIPFORMAT}; +private: + class Internal; + Internal* internal; +public: + _CL_DEPRECATED(Use compressed field) explicit GZipInputStream(BufferedInputStream* input, + ZipFormat format=GZIPFORMAT); + _CL_DEPRECATED(Use compressed field) explicit GZipInputStream(InputStream* input, + ZipFormat format=GZIPFORMAT); + ~GZipInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int32_t read(const unsigned char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/CLucene/util/streamarray.h clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/streamarray.h --- clucene-core-0.9.21b/src/contribs-lib/CLucene/util/streamarray.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CLucene/util/streamarray.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,32 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef CLUCENE_UTIL_STREAMARRAY_H +#define CLUCENE_UTIL_STREAMARRAY_H + +#include +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(util) + +template +ValueArray streamArray(CL_NS(util)::CLStream* stored) { + size_t const block_size = 4096; + element const* retrieved; + ValueArray result(0); + size_t available; + size_t offset = 0; + do { + available = stored->read(retrieved, block_size, block_size); + result.resize(result.length + sizeof(element) * available); + memcpy(result.values + offset, retrieved, sizeof(element) * available); + offset += available; + } while (block_size == available); + return result; +} +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/contribs-lib/cmake/FindIconv.cmake clucene-core-2.3.3.4/src/contribs-lib/cmake/FindIconv.cmake --- clucene-core-0.9.21b/src/contribs-lib/cmake/FindIconv.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/cmake/FindIconv.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,57 @@ +# - Try to find Iconv +# Once done this will define +# +# ICONV_FOUND - system has Iconv +# ICONV_INCLUDE_DIR - the Iconv include directory +# ICONV_LIBRARIES - Link these to use Iconv +# ICONV_SECOND_ARGUMENT_IS_CONST - the second argument for iconv() is const +# +include(CheckCXXSourceCompiles) + +IF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + # Already in cache, be silent + SET(ICONV_FIND_QUIETLY TRUE) +ENDIF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + +FIND_PATH(ICONV_INCLUDE_DIR iconv.h) + +FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv c) + +IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + SET(ICONV_FOUND TRUE) +ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + +set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR}) +set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES}) +IF(ICONV_FOUND) + check_cxx_source_compiles(" + #include + int main(){ + iconv_t conv = 0; + const char* in = 0; + size_t ilen = 0; + char* out = 0; + size_t olen = 0; + iconv(conv, &in, &ilen, &out, &olen); + return 0; + } +" ICONV_SECOND_ARGUMENT_IS_CONST ) +ENDIF(ICONV_FOUND) +set(CMAKE_REQUIRED_INCLUDES) +set(CMAKE_REQUIRED_LIBRARIES) + +IF(ICONV_FOUND) + IF(NOT ICONV_FIND_QUIETLY) + MESSAGE(STATUS "Found Iconv: ${ICONV_LIBRARIES}") + ENDIF(NOT ICONV_FIND_QUIETLY) +ELSE(ICONV_FOUND) + IF(Iconv_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find Iconv") + ENDIF(Iconv_FIND_REQUIRED) +ENDIF(ICONV_FOUND) + +MARK_AS_ADVANCED( + ICONV_INCLUDE_DIR + ICONV_LIBRARIES + ICONV_SECOND_ARGUMENT_IS_CONST +) diff -Nru clucene-core-0.9.21b/src/contribs-lib/CMakeLists.txt clucene-core-2.3.3.4/src/contribs-lib/CMakeLists.txt --- clucene-core-0.9.21b/src/contribs-lib/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/contribs-lib/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,114 @@ +PROJECT(clucene-contribs-lib) + +INCLUDE (DefineOptions) +DEFINE_OPTIONS(EXTRA_OPTIONS EXTRA_LIBS) +ADD_DEFINITIONS(${EXTRA_OPTIONS} -DMAKE_CLUCENE_CONTRIBS_LIB) + +set(CMAKE_MODULE_PATH "${clucene-contribs-lib_SOURCE_DIR}/cmake") + +#add the files to our groups and core +SOURCE_GROUP("analysis" ./CLucene/analysis/*) +SOURCE_GROUP("util" ./CLucene/util/*) +#seems to be a bug in cmake, can't put these in analysis\\standard folder :( +SOURCE_GROUP("analysis-cjk" ./CLucene/analysis/cjk/*) +SOURCE_GROUP("analysis-de" ./CLucene/analysis/de/*) +SOURCE_GROUP("highlighter" ./CLucene/highlighter/*) +SOURCE_GROUP("index" ./CLucene/index/*) +SOURCE_GROUP("snowball" ./CLucene/snowball/*) +SOURCE_GROUP("snowball-impl" ./CLucene/snowball/include/*) +SOURCE_GROUP("snowball-impl" ./CLucene/snowball/libstemmer/*) +SOURCE_GROUP("snowball-impl" ./CLucene/snowball/runtime/*) +SOURCE_GROUP("snowball-impl" ./CLucene/snowball/src_c/*) + +SET(clucene_contribs_Files + ./CLucene/util/gzipcompressstream.cpp + ./CLucene/util/gzipinputstream.cpp + + ./CLucene/analysis/LanguageBasedAnalyzer.cpp + ./CLucene/analysis/cjk/CJKAnalyzer.cpp + + ./CLucene/analysis/de/GermanAnalyzer.cpp + ./CLucene/analysis/de/GermanStemFilter.cpp + ./CLucene/analysis/de/GermanStemmer.cpp + + ./CLucene/highlighter/Encoder.cpp + ./CLucene/highlighter/Formatter.cpp + ./CLucene/highlighter/Fragmenter.cpp + ./CLucene/highlighter/Highlighter.cpp + ./CLucene/highlighter/QueryScorer.cpp + ./CLucene/highlighter/QueryTermExtractor.cpp + ./CLucene/highlighter/SimpleFragmenter.cpp + ./CLucene/highlighter/SimpleHTMLEncoder.cpp + ./CLucene/highlighter/SimpleHTMLFormatter.cpp + ./CLucene/highlighter/TextFragment.cpp + ./CLucene/highlighter/TokenGroup.cpp + ./CLucene/highlighter/TokenSources.cpp + ./CLucene/highlighter/WeightedTerm.cpp + + ./CLucene/snowball/Snowball.cpp + ./CLucene/snowball/libstemmer/libstemmer.c + ./CLucene/snowball/runtime/api.c + ./CLucene/snowball/runtime/utilities.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_danish.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_english.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_french.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_german.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_italian.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_porter.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c + ./CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c + ./CLucene/snowball/src_c/stem_KOI8_R_russian.c + ./CLucene/snowball/src_c/stem_UTF_8_danish.c + ./CLucene/snowball/src_c/stem_UTF_8_dutch.c + ./CLucene/snowball/src_c/stem_UTF_8_english.c + ./CLucene/snowball/src_c/stem_UTF_8_finnish.c + ./CLucene/snowball/src_c/stem_UTF_8_french.c + ./CLucene/snowball/src_c/stem_UTF_8_german.c + ./CLucene/snowball/src_c/stem_UTF_8_italian.c + ./CLucene/snowball/src_c/stem_UTF_8_norwegian.c + ./CLucene/snowball/src_c/stem_UTF_8_porter.c + ./CLucene/snowball/src_c/stem_UTF_8_portuguese.c + ./CLucene/snowball/src_c/stem_UTF_8_russian.c + ./CLucene/snowball/src_c/stem_UTF_8_spanish.c + ./CLucene/snowball/src_c/stem_UTF_8_swedish.c +) +SET ( clucene_contrib_extra_libs clucene-core clucene-shared ${EXTRA_LIBS}) + +#find our headers +file(GLOB_RECURSE HEADERS ${clucene-contribs-lib_SOURCE_DIR}/*.h) + +#add extra capabilities +find_package(ZLIB) +IF ( NOT ZLIB_FOUND ) + MESSAGE ( FATAL "ZLib not found" ) +ENDIF ( NOT ZLIB_FOUND ) +INCLUDE_DIRECTORIES( ${ZLIB_INCLUDE_DIR} ) +SET ( clucene_contrib_extra_libs "${clucene_contrib_extra_libs}" ${ZLIB_LIBRARIES} ) + +find_package(Iconv) +#find_package(Strigi) +SET ( clucene-contrib-libs "" ) + +IF ( USE_SHARED_OBJECT_FILES ) + GET_SHARED_FILES(clucene_shared_Files) +ENDIF ( USE_SHARED_OBJECT_FILES ) + +#create the libraries +INCLUDE_DIRECTORIES( ${clucene_SOURCE_DIR}/src/core ) +INCLUDE_DIRECTORIES( ${clucene_SOURCE_DIR}/src/contribs-lib ) + +add_library(clucene-contribs-lib SHARED + ${clucene_contribs_Files} ${clucene_shared_Files} ${HEADERS} +) +TARGET_LINK_LIBRARIES(clucene-contribs-lib ${clucene_contrib_extra_libs}) + +#set properties on the libraries +SET_TARGET_PROPERTIES(clucene-contribs-lib PROPERTIES + VERSION ${CLUCENE_VERSION} + SOVERSION ${CLUCENE_SOVERSION} + COMPILE_DEFINITIONS_DEBUG _DEBUG +) diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/AnalysisHeader.cpp clucene-core-2.3.3.4/src/core/CLucene/analysis/AnalysisHeader.cpp --- clucene-core-0.9.21b/src/core/CLucene/analysis/AnalysisHeader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/AnalysisHeader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,306 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "AnalysisHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_ThreadLocal.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(analysis) + +struct Analyzer::Internal{ + CL_NS(util)::ThreadLocal >* tokenStreams; +}; +Analyzer::Analyzer(){ + _internal = new Internal; + _internal->tokenStreams = _CLNEW CL_NS(util)::ThreadLocal >; +} +Analyzer::~Analyzer(){ + _CLLDELETE(_internal->tokenStreams); + delete _internal; +} +TokenStream* Analyzer::getPreviousTokenStream() { + return _internal->tokenStreams->get(); +} +void Analyzer::setPreviousTokenStream(TokenStream* obj) { + _internal->tokenStreams->set(obj); +} +TokenStream* Analyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + return tokenStream(fieldName, reader); +} + +///Compares the Token for their order +class OrderCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Token* t1, Token* t2 ) const{ + if(t1->startOffset()>t2->startOffset()) + return false; + if(t1->startOffset()startOffset()) + return true; + return true; +} +}; + +Token::Token(): + _startOffset (0), + _endOffset (0), + _type ( getDefaultType() ), + positionIncrement (1), + payload(NULL) +{ + _termTextLen = 0; +#ifndef LUCENE_TOKEN_WORD_LENGTH + _buffer = NULL; + bufferTextLen = 0; +#else + _buffer[0] = 0; //make sure null terminated + bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; +#endif +} + +Token::~Token(){ +#ifndef LUCENE_TOKEN_WORD_LENGTH + free(_buffer); +#endif + _CLLDELETE(payload); +} + +Token::Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ): + _startOffset (start), + _endOffset (end), + _type ( (typ==NULL?getDefaultType():typ) ), + positionIncrement (1), + payload(NULL) +{ + _termTextLen = 0; +#ifndef LUCENE_TOKEN_WORD_LENGTH + _buffer = NULL; + bufferTextLen = 0; +#else + _buffer[0] = 0; //make sure null terminated + bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; +#endif + setText(text, -1); +} + +size_t Token::bufferLength(){ + return bufferTextLen; +} + + +int32_t Token::startOffset() const { + return _startOffset; +} + +void Token::setStartOffset(const int32_t val){ + _startOffset = val; +} +int32_t Token::endOffset() const { + return _endOffset; +} +const TCHAR* Token::getDefaultType(){ + return _T("word"); +} + +void Token::setEndOffset(const int32_t val){ + _endOffset = val; +} +const TCHAR* Token::type() const { return _type; } + +void Token::setType(const TCHAR* val) { + _type = val; +} + +void Token::set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ){ + _startOffset = start; + _endOffset = end; + _type = (typ==NULL?getDefaultType():typ); + positionIncrement = 1; + setText(text); +} + +void Token::setText(const TCHAR* text, int32_t l){ + if ( l < 0 ) l = _tcslen(text); +#ifndef LUCENE_TOKEN_WORD_LENGTH + if(bufferTextLen < l+1) + growBuffer(l+1); +#else + if ( _termTextLen > LUCENE_TOKEN_WORD_LENGTH ){ + //in the case where this occurs, we will leave the endOffset as it is + //since the actual word still occupies that space. + l=LUCENE_TOKEN_WORD_LENGTH; + } +#endif + _tcsncpy(_buffer,text,l); + _termTextLen = l; + _buffer[_termTextLen] = 0; //make sure null terminated +} + +void Token::setTermLength(int32_t len){ + if(bufferTextLengrowBuffer(len); + this->_termTextLen = len; +} +TCHAR* Token::resizeTermBuffer(size_t size){ + if(bufferTextLen_buffer; +} +void Token::growBuffer(size_t size){ + if(bufferTextLen>=size) + return; +#ifndef LUCENE_TOKEN_WORD_LENGTH + if ( _buffer == NULL ){ + _buffer = (TCHAR*)malloc( size * sizeof(TCHAR) ); + *_buffer = 0; + }else{ + //use realloc. growBuffer is public, therefore could be called + //without a subsequent call to overwriting the memory + _buffer = (TCHAR*)realloc( _buffer, size * sizeof(TCHAR) ); + } + bufferTextLen = size; +#else + _CLTHROWA(CL_ERR_TokenMgr,"Couldn't grow Token buffer"); +#endif +} + +void Token::setPositionIncrement(int32_t posIncr) { + if (posIncr < 0) { + _CLTHROWA(CL_ERR_IllegalArgument,"positionIncrement must be >= 0"); + } + positionIncrement = posIncr; +} + +int32_t Token::getPositionIncrement() const { return positionIncrement; } + +const TCHAR* Token::termText() const{ + return (const TCHAR*) _buffer; +} +TCHAR* Token::termBuffer() const{ + return _buffer; +} +size_t Token::termTextLength() { + if ( _termTextLen == -1 ) //it was invalidated by growBuffer + _termTextLen = _tcslen(_buffer); + return _termTextLen; +} +size_t Token::termLength() { + if ( _termTextLen == -1 ) //it was invalidated by growBuffer + _termTextLen = _tcslen(_buffer); + return _termTextLen; +} +void Token::resetTermTextLen(){ + _termTextLen=-1; +} +TCHAR* Token::toString() const{ + StringBuffer sb; + sb.append(_T("(")); + if (_buffer) + sb.append( _buffer ); + else + sb.append( _T("null") ); + sb.append(_T(",")); + sb.appendInt( _startOffset ); + sb.append(_T(",")); + sb.appendInt( _endOffset ); + + if (!_tcscmp( _type, _T("word")) == 0 ){ + sb.append(_T(",type=")); + sb.append(_type); + } + if (positionIncrement != 1){ + sb.append(_T(",posIncr=")); + sb.appendInt(positionIncrement); + } + sb.append(_T(")")); + + return sb.toString(); +} + +CL_NS(index)::Payload* Token::getPayload() { return this->payload; } +void Token::setPayload(CL_NS(index)::Payload* payload) { + _CLLDELETE(this->payload); + this->payload = payload; +} +void Token::clear() { + _CLDELETE(payload); + // Leave _buffer to allow re-use + _termTextLen = 0; + positionIncrement = 1; + // startOffset = endOffset = 0; + // type = DEFAULT_TYPE; +} + +void TokenStream::reset(){ +} + +Token* TokenStream::next(){ + Token* t = _CLNEW Token; //deprecated + if ( !next(t) ) + _CLDELETE(t); + return t; +} +TokenStream::~TokenStream(){ +} + +TokenFilter::TokenFilter(TokenStream* in, bool deleteTS): + input(in), + deleteTokenStream(deleteTS) +{ +} +TokenFilter::~TokenFilter(){ + if ( deleteTokenStream && input!=NULL ) {input->close();_CLLDELETE( input );} + //close(); -- ISH 04/11/09 +} + +// Close the input TokenStream. +void TokenFilter::close() { + if ( input != NULL ){ + input->close(); + //if ( deleteTokenStream ) _CLDELETE( input ); -- ISH 04/11/09 + } + //input = NULL; -- ISH 04/11/09 +} + + + +Tokenizer::Tokenizer() : input(NULL) +{ +} + +Tokenizer::Tokenizer(CL_NS(util)::Reader* _input): + input(_input) +{ +} + +void Tokenizer::close(){ + if (input != NULL) { + // ? delete input; + input = NULL; + } +} + +void Tokenizer::reset(CL_NS(util)::Reader* _input) { + // ? delete input; + this->input = _input; +} + +Tokenizer::~Tokenizer(){ + close(); +} + + +int32_t Analyzer::getPositionIncrementGap(const TCHAR* /*fieldName*/) +{ + return 0; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/AnalysisHeader.h clucene-core-2.3.3.4/src/core/CLucene/analysis/AnalysisHeader.h --- clucene-core-0.9.21b/src/core/CLucene/analysis/AnalysisHeader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/AnalysisHeader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,361 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_AnalysisHeader_ +#define _lucene_analysis_AnalysisHeader_ + +#include "CLucene/index/Payload.h" +#include "CLucene/util/VoidList.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(util,Reader) +CL_NS_DEF(analysis) + +typedef CL_NS(util)::CLSetList CLTCSetList; + +/** A Token is an occurence of a term from the text of a field. It consists of + a term's text, the start and end offset of the term in the text of the field, + and a type string. +

+ The start and end offsets permit applications to re-associate a token with + its source text, e.g., to display highlighted query terms in a document + browser, or to show matching text fragments in a KWIC (KeyWord In Context) + display, etc. +

+ The type is an interned string, assigned by a lexical analyzer + (a.k.a. tokenizer), naming the lexical or syntactic class that the token + belongs to. For example an end of sentence marker token might be implemented + with type "eos". The default token type is "word". +

+ A Token can optionally have metadata (a.k.a. Payload) in the form of a variable + length byte array. Use {@link lucene::index::TermPositions#getPayloadLength()} and + {@link lucene::index::TermPositions#getPayload(byte[], int)} to retrieve the payloads from the index. + +

+

+ WARNING: The status of the Payloads feature is experimental. + The APIs introduced here might change in the future and will not be + supported anymore in such a case. + +

+ +

Tokenizers and filters should try to re-use a Token + instance when possible for best performance, by + implementing the {@link lucene::index::TokenStream#next(Token)} API. + Failing that, to create a new Token you should first use + one of the constructors that starts with null text. Then + you should call either {@link #termBuffer()} or {@link + #resizeTermBuffer(int)} to retrieve the Token's + termBuffer. Fill in the characters of your term into this + buffer, and finally call {@link #setTermLength(int)} to + set the length of the term text. See LUCENE-969 + for details.

+ + @see Payload +*/ +class CLUCENE_EXPORT Token:LUCENE_BASE{ +private: + int32_t _startOffset; ///< start in source text + int32_t _endOffset; ///< end in source text + const TCHAR* _type; ///< lexical type + int32_t positionIncrement; + size_t bufferTextLen; + + #ifndef LUCENE_TOKEN_WORD_LENGTH + TCHAR* _buffer; ///< the text of the term + #else + TCHAR _buffer[LUCENE_TOKEN_WORD_LENGTH+1]; ///< the text of the term + #endif + int32_t _termTextLen; ///< the length of termText. Internal use only + + CL_NS(index)::Payload* payload; + +public: + static const TCHAR* getDefaultType(); + + Token(); + virtual ~Token(); + + /// Constructs a Token with the given text, start and end offsets, & type. + Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=NULL); + void set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=NULL); + + size_t bufferLength(); + void growBuffer(size_t size); + TCHAR* resizeTermBuffer(size_t size); + /** Set the position increment. This determines the position of this + * token relative to the previous Token in a TokenStream, used in + * phrase searching. + * + * The default value is 1. + * + * Some common uses for this are: + * + * - Set it to zero to put multiple terms in the same position. This is + * useful if, e.g., a word has multiple stems. Searches for phrases + * including either stem will match. In this case, all but the first stem's + * increment should be set to zero: the increment of the first instance + * should be one. Repeating a token with an increment of zero can also be + * used to boost the scores of matches on that token. + * + * - Set it to values greater than one to inhibit exact phrase matches. + * If, for example, one does not want phrases to match across removed stop + * words, then one could build a stop word filter that removes stop words and + * also sets the increment to the number of stop words removed before each + * non-stop word. Then exact phrase queries will only match when the terms + * occur with no intervening stop words. + */ + void setPositionIncrement(int32_t posIncr); + int32_t getPositionIncrement() const; + + /** Returns the internal termBuffer character array which + * you can then directly alter. If the array is too + * small for your token, use {@link + * #resizeTermBuffer(int)} to increase it. After + * altering the buffer be sure to call {@link + * #setTermLength} to record the number of valid + * characters that were placed into the termBuffer. */ + TCHAR* termBuffer() const; + size_t termLength(); //< Length of the the termBuffer. See #termBuffer + + _CL_DEPRECATED( termBuffer ) const TCHAR* termText() const; //< See #termBuffer() + _CL_DEPRECATED( termLength ) size_t termTextLength(); //< See #termLength + + void resetTermTextLen(); //< Empties the termBuffer. See #termBuffer + void setText(const TCHAR* txt, int32_t len=-1); //< Sets the termBuffer. See #termBuffer + + /** + * Returns this Token's starting offset, the position of the first character + * corresponding to this token in the source text. + * + * Note that the difference between endOffset() and startOffset() may not be + * equal to termText.length(), as the term text may have been altered by a + * stemmer or some other filter. + */ + int32_t startOffset() const; + + /** Set the starting offset. + @see #startOffset() */ + void setStartOffset(const int32_t val); + + void setTermLength(int32_t); + + /** + * Returns this Token's ending offset, one greater than the position of the + * last character corresponding to this token in the source text. + */ + int32_t endOffset() const; + + /** Set the ending offset. + @see #endOffset() */ + void setEndOffset(const int32_t val); + + /// Returns this Token's lexical type. Defaults to "word". + const TCHAR* type() const; /// +This is an abstract class. Concrete subclasses are: +
    +
  • {@link Tokenizer}, a TokenStream +whose input is a Reader; and +
  • {@link TokenFilter}, a TokenStream +whose input is another TokenStream. +
+NOTE: subclasses must override at least one of {@link +#next()} or {@link #next(Token)}. +*/ +class CLUCENE_EXPORT TokenStream { +public: + /** Returns the next token in the stream, or null at EOS. + * When possible, the input Token should be used as the + * returned Token (this gives fastest tokenization + * performance), but this is not required and a new Token + * may be returned (pass NULL for this). + * Callers may re-use a single Token instance for successive + * calls to this method. + *

+ * This implicitly defines a "contract" between + * consumers (callers of this method) and + * producers (implementations of this method + * that are the source for tokens): + *

    + *
  • A consumer must fully consume the previously + * returned Token before calling this method again.
  • + *
  • A producer must call {@link Token#clear()} + * before setting the fields in it & returning it
  • + *
+ * Note that a {@link TokenFilter} is considered a consumer. + * @param result a Token that may or may not be used to return + * @return next token in the stream or null if end-of-stream was hit + */ + virtual Token* next(Token* token) = 0; + + /** This is for backwards compatibility only. You should pass the token you want to fill + * to next(), this will save a lot of object construction and destructions. + * @deprecated. use next(token). Kept only to avoid breaking existing code. + */ + _CL_DEPRECATED(next(Token)) Token* next(); + + /** Releases resources associated with this stream. */ + virtual void close() = 0; + + /** Resets this stream to the beginning. This is an + * optional operation, so subclasses may or may not + * implement this method. Reset() is not needed for + * the standard indexing process. However, if the Tokens + * of a TokenStream are intended to be consumed more than + * once, it is necessary to implement reset(). + */ + virtual void reset(); + + virtual ~TokenStream(); +}; + + +/** An Analyzer builds TokenStreams, which analyze text. It thus represents a + * policy for extracting index terms from text. + *

+ * Typical implementations first build a Tokenizer, which breaks the stream of + * characters from the Reader into raw Tokens. One or more TokenFilters may + * then be applied to the output of the Tokenizer. + *

+ * WARNING: You must override one of the methods defined by this class in your + * subclass or the Analyzer will enter an infinite loop. + */ +class CLUCENE_EXPORT Analyzer{ +public: + Analyzer(); + + /** Creates a TokenStream which tokenizes all the text in the provided + Reader. Default implementation forwards to tokenStream(Reader) for + compatibility with older version. Override to allow Analyzer to choose + strategy based on document and/or field. Must be able to handle null + field name for backward compatibility. */ + virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader)=0; + + /** Creates a TokenStream that is allowed to be re-used + * from the previous time that the same thread called + * this method. Callers that do not need to use more + * than one TokenStream at the same time from this + * analyzer should use this method for better + * performance. + */ + virtual TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +private: + + DEFINE_MUTEX(THIS_LOCK) + struct Internal; + Internal* _internal; +protected: + + /** Used by Analyzers that implement reusableTokenStream + * to retrieve previously saved TokenStreams for re-use + * by the same thread. */ + TokenStream* getPreviousTokenStream(); + + /** Used by Analyzers that implement reusableTokenStream + * to save a TokenStream for later re-use by the same + * thread. */ + void setPreviousTokenStream(TokenStream* obj); +public: + /** + * Invoked before indexing a Field instance if + * terms have already been added to that field. This allows custom + * analyzers to place an automatic position increment gap between + * Field instances using the same field name. The default value + * position increment gap is 0. With a 0 position increment gap and + * the typical default token position increment of 1, all terms in a field, + * including across Field instances, are in successive positions, allowing + * exact PhraseQuery matches, for instance, across Field instance boundaries. + * + * @param fieldName Field name being indexed. + * @return position increment gap, added to the next token emitted from {@link #tokenStream(TCHAR*, Reader*)} + */ + virtual int32_t getPositionIncrementGap(const TCHAR* fieldName); + + virtual ~Analyzer(); +}; + + +/** A Tokenizer is a TokenStream whose input is a Reader. +

+This is an abstract class. +

+NOTE: subclasses must override at least one of {@link +#next()} or {@link #next(Token)}. +

+NOTE: subclasses overriding {@link #next(Token)} must +call {@link Token#clear()}. +*/ +class CLUCENE_EXPORT Tokenizer:public TokenStream { +protected: + /** The text source for this Tokenizer. */ + CL_NS(util)::Reader* input; + +public: + /** Construct a tokenizer with null input. */ + Tokenizer(); + /** Construct a token stream processing the given input. */ + Tokenizer(CL_NS(util)::Reader* _input); + + /** By default, closes the input Reader. */ + virtual void close(); + + /** Expert: Reset the tokenizer to a new reader. Typically, an + * analyzer (in its reusableTokenStream method) will use + * this to re-use a previously created tokenizer. */ + virtual void reset(CL_NS(util)::Reader* _input); + + virtual ~Tokenizer(); +}; + +/** A TokenFilter is a TokenStream whose input is another token stream. +

+This is an abstract class. +*/ +class CLUCENE_EXPORT TokenFilter:public TokenStream { +protected: + /** The source of tokens for this filter. */ + TokenStream* input; + /** If true then input will be deleted in the destructor */ + bool deleteTokenStream; + + /** Construct a token stream filtering the given input. + * + * @param in The TokenStream to filter from + * @param deleteTS If true, input will be deleted in the destructor + */ + TokenFilter(TokenStream* in, bool deleteTS=false); + virtual ~TokenFilter(); +public: + /** Close the input TokenStream. */ + void close(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/Analyzers.cpp clucene-core-2.3.3.4/src/core/CLucene/analysis/Analyzers.cpp --- clucene-core-0.9.21b/src/core/CLucene/analysis/Analyzers.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/Analyzers.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,637 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Analyzers.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/Misc.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(analysis) + +CharTokenizer::CharTokenizer(Reader* in) : + Tokenizer(in), + offset(0), + bufferIndex(0), + dataLen(0), + ioBuffer(NULL) +{ + buffer[0]=0; +} +CharTokenizer::~CharTokenizer(){ +} + +TCHAR CharTokenizer::normalize(const TCHAR c) const +{ + return c; +} +Token* CharTokenizer::next(Token* token){ + int32_t length = 0; + int32_t start = offset; + while (true) { + TCHAR c; + offset++; + if (bufferIndex >= dataLen) { + dataLen = input->read(ioBuffer, 1, LUCENE_IO_BUFFER_SIZE ); + if (dataLen == -1) + dataLen = 0; + bufferIndex = 0; + } + if (dataLen <= 0 ) { + if (length > 0) + break; + else + return NULL; + }else + c = ioBuffer[bufferIndex++]; + if (isTokenChar(c)) { // if it's a token TCHAR + + if (length == 0) // start of token + start = offset-1; + + buffer[length++] = normalize(c); // buffer it, normalized + + if (length == LUCENE_MAX_WORD_LEN) // buffer overflow! + break; + + } else if (length > 0) // at non-Letter w/ chars + break; // return 'em + } + buffer[length]=0; + token->set( buffer, start, start+length); + return token; +} +void CharTokenizer::reset(CL_NS(util)::Reader* input) +{ + Tokenizer::reset(input); + bufferIndex = 0; + offset = 0; + dataLen = 0; +} + + +LetterTokenizer::LetterTokenizer(CL_NS(util)::Reader* in): + CharTokenizer(in) { +} + +LetterTokenizer::~LetterTokenizer(){} + +bool LetterTokenizer::isTokenChar(const TCHAR c) const { + return _istalpha(c)!=0; +} + +LowerCaseTokenizer::LowerCaseTokenizer(CL_NS(util)::Reader* in): + LetterTokenizer(in) { +} + +LowerCaseTokenizer::~LowerCaseTokenizer(){ +} + +TCHAR LowerCaseTokenizer::normalize(const TCHAR chr) const { + return _totlower(chr); +} + +WhitespaceTokenizer::WhitespaceTokenizer(CL_NS(util)::Reader* in):CharTokenizer(in) { +} +WhitespaceTokenizer::~WhitespaceTokenizer(){ +} + +bool WhitespaceTokenizer::isTokenChar(const TCHAR c) const{ + return _istspace(c)==0; //(return true if NOT a space) +} + +WhitespaceAnalyzer::WhitespaceAnalyzer(){ +} +WhitespaceAnalyzer::~WhitespaceAnalyzer(){ +} + +TokenStream* WhitespaceAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW WhitespaceTokenizer(reader); +} +TokenStream* WhitespaceAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) +{ + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW WhitespaceTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + +SimpleAnalyzer::SimpleAnalyzer(){ +} +SimpleAnalyzer::~SimpleAnalyzer(){ +} +TokenStream* SimpleAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW LowerCaseTokenizer(reader); +} +TokenStream* SimpleAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) { + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW LowerCaseTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + + +LowerCaseFilter::LowerCaseFilter(TokenStream* in, bool deleteTokenStream): + TokenFilter(in,deleteTokenStream) { +} +LowerCaseFilter::~LowerCaseFilter(){ +} + +Token* LowerCaseFilter::next(Token* t){ + if (input->next(t) == NULL) + return NULL; + stringCaseFold( t->termBuffer() ); + return t; +} + +bool StopFilter::ENABLE_POSITION_INCREMENTS_DEFAULT = false; + + +/** Constructs a filter which removes words from the input +* TokenStream that are named in the CLSetList. +*/ +StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, CLTCSetList* stopTable, bool _deleteStopTable): + TokenFilter(in, deleteTokenStream), + stopWords (stopTable), + deleteStopTable(_deleteStopTable), + enablePositionIncrements(ENABLE_POSITION_INCREMENTS_DEFAULT), + ignoreCase(false) +{ +} + +StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** _stopWords, const bool _ignoreCase): + TokenFilter(in, deleteTokenStream), + enablePositionIncrements(ENABLE_POSITION_INCREMENTS_DEFAULT), + ignoreCase(_ignoreCase) +{ + deleteStopTable = true; + stopWords = _CLNEW CLTCSetList(true); + fillStopTable( stopWords,_stopWords, _ignoreCase ); +} + +StopFilter::~StopFilter(){ + if (deleteStopTable) + _CLLDELETE(stopWords); +} +//static +bool StopFilter::getEnablePositionIncrementsDefault() { + return ENABLE_POSITION_INCREMENTS_DEFAULT; +} +//static +void StopFilter::setEnablePositionIncrementsDefault(const bool defaultValue) { + ENABLE_POSITION_INCREMENTS_DEFAULT = defaultValue; +} + +bool StopFilter::getEnablePositionIncrements() const { return enablePositionIncrements; } +void StopFilter::setEnablePositionIncrements(const bool enable) { this->enablePositionIncrements = enable; } + +void StopFilter::fillStopTable(CLTCSetList* stopTable, const TCHAR** stopWords, const bool _ignoreCase) +{ + TCHAR* tmp; + if ( _ignoreCase ){ + for (int32_t i = 0; stopWords[i]!=NULL; i++){ + tmp = STRDUP_TtoT(stopWords[i]); + stringCaseFold(tmp); + stopTable->insert( tmp ); + } + }else{ + for (int32_t i = 0; stopWords[i]!=NULL; i++){ + tmp = STRDUP_TtoT(stopWords[i]); + stopTable->insert( tmp ); + } + } +} + +Token* StopFilter::next(Token* token) { + // return the first non-stop word found + int32_t skippedPositions = 0; + while (input->next(token)){ + TCHAR* termText = token->termBuffer(); + if ( ignoreCase ){ + stringCaseFold(termText); + } + if (stopWords->find(termText)==stopWords->end()){ + if (enablePositionIncrements) { + token->setPositionIncrement(token->getPositionIncrement() + skippedPositions); + } + return token; + } + skippedPositions += token->getPositionIncrement(); + } + + // reached EOS -- return nothing + return NULL; +} + +StopAnalyzer::StopAnalyzer(const char* stopwordsFile, const char* enc): + stopTable(_CLNEW CLTCSetList(true)) +{ + if ( enc == NULL ) + enc = "ASCII"; + WordlistLoader::getWordSet(stopwordsFile, enc, stopTable); +} + +StopAnalyzer::StopAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader): + stopTable(_CLNEW CLTCSetList(true)) +{ + WordlistLoader::getWordSet(stopwordsReader, stopTable, _bDeleteReader); +} + +StopAnalyzer::StopAnalyzer(): + stopTable(_CLNEW CLTCSetList(true)) +{ + StopFilter::fillStopTable(stopTable,ENGLISH_STOP_WORDS); +} +class StopAnalyzer::SavedStreams : public TokenStream { +public: + Tokenizer* source; + TokenStream* result; + + SavedStreams():source(NULL), result(NULL) {} + + void close(){} + Token* next(Token* token) {return NULL;} +}; +StopAnalyzer::~StopAnalyzer() +{ + SavedStreams* t = reinterpret_cast(this->getPreviousTokenStream()); + if (t) _CLDELETE(t->result); + _CLDELETE(stopTable); +} +StopAnalyzer::StopAnalyzer( const TCHAR** stopWords): + stopTable(_CLNEW CLTCSetList(true)) +{ + StopFilter::fillStopTable(stopTable,stopWords); +} +TokenStream* StopAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW StopFilter(_CLNEW LowerCaseTokenizer(reader),true, stopTable); +} + +/** Filters LowerCaseTokenizer with StopFilter. */ +TokenStream* StopAnalyzer::reusableTokenStream(const TCHAR* fieldName, Reader* reader) { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + streams->source = _CLNEW LowerCaseTokenizer(reader); + streams->result = _CLNEW StopFilter(streams->source, true, stopTable); + setPreviousTokenStream(streams); + } else + streams->source->reset(reader); + return streams->result; +} + +const TCHAR* StopAnalyzer::ENGLISH_STOP_WORDS[] = +{ + _T("a"), _T("an"), _T("and"), _T("are"), _T("as"), _T("at"), _T("be"), _T("but"), _T("by"), + _T("for"), _T("if"), _T("in"), _T("into"), _T("is"), _T("it"), + _T("no"), _T("not"), _T("of"), _T("on"), _T("or"), _T("such"), + _T("that"), _T("the"), _T("their"), _T("then"), _T("there"), _T("these"), + _T("they"), _T("this"), _T("to"), _T("was"), _T("will"), _T("with"), NULL +}; + +PerFieldAnalyzerWrapper::PerFieldAnalyzerWrapper(Analyzer* defaultAnalyzer): + analyzerMap(_CLNEW AnalyzerMapType(true,true)) +{ + this->defaultAnalyzer = defaultAnalyzer; +} +PerFieldAnalyzerWrapper::~PerFieldAnalyzerWrapper(){ + analyzerMap->clear(); + _CLLDELETE(analyzerMap); + _CLLDELETE(defaultAnalyzer); +} + +void PerFieldAnalyzerWrapper::addAnalyzer(const TCHAR* fieldName, Analyzer* analyzer) { + analyzerMap->put(STRDUP_TtoT(fieldName), analyzer); +} + +TokenStream* PerFieldAnalyzerWrapper::tokenStream(const TCHAR* fieldName, Reader* reader) { + Analyzer* analyzer = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL) { + analyzer = defaultAnalyzer; + } + + return analyzer->tokenStream(fieldName, reader); +} + +TokenStream* PerFieldAnalyzerWrapper::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + Analyzer* analyzer = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL){ + analyzer = defaultAnalyzer; + } + + return analyzer->reusableTokenStream(fieldName, reader); +} + +int32_t PerFieldAnalyzerWrapper::getPositionIncrementGap(const TCHAR* fieldName) { + Analyzer* analyzer = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL) + analyzer = defaultAnalyzer; + return analyzer->getPositionIncrementGap(fieldName); +} + + + +ISOLatin1AccentFilter::ISOLatin1AccentFilter(TokenStream* input, bool deleteTs): + TokenFilter(input,deleteTs) +{ +} +ISOLatin1AccentFilter::~ISOLatin1AccentFilter(){ +} +Token* ISOLatin1AccentFilter::next(Token* token){ + if ( input->next(token) != NULL ){ + int32_t l = token->termLength(); + const TCHAR* chars = token->termBuffer(); + bool doProcess = false; + for (int32_t i = 0; i < l; ++i) { + #ifdef _UCS2 + if ( chars[i] >= 0xC0 && chars[i] <= 0x178 ) { + #else + if ( (chars[i] >= 0xC0 && chars[i] <= 0xFF) || chars[i] < 0 ) { + #endif + doProcess = true; + break; + } + + } + if ( !doProcess ) { + return token; + } + + StringBuffer output(l*2); + for (int32_t j = 0; j < l; j++) { + #ifdef _UCS2 + TCHAR c = chars[j]; + #else + unsigned char c = chars[j]; + #endif + switch (c) { + case 0xC0 : // � + case 0xC1 : // � + case 0xC2 : // � + case 0xC3 : // � + case 0xC4 : // � + case 0xC5 : // � + output.appendChar('A'); + break; + case 0xC6 : // � + output.append(_T("AE")); + break; + case 0xC7 : // � + output.appendChar('C'); + break; + case 0xC8 : // � + case 0xC9 : // � + case 0xCA : // � + case 0xCB : // � + output.appendChar('E'); + break; + case 0xCC : // � + case 0xCD : // � + case 0xCE : // � + case 0xCF : // � + output.appendChar('I'); + break; + case 0xD0 : // � + output.appendChar('D'); + break; + case 0xD1 : // � + output.appendChar('N'); + break; + case 0xD2 : // � + case 0xD3 : // � + case 0xD4 : // � + case 0xD5 : // � + case 0xD6 : // � + case 0xD8 : // � + output.appendChar('O'); + break; + case 0xDE : // � + output.append(_T("TH")); + break; + case 0xD9 : // � + case 0xDA : // � + case 0xDB : // � + case 0xDC : // � + output.appendChar('U'); + break; + case 0xDD : // � + output.appendChar('Y'); + break; + case 0xE0 : // � + case 0xE1 : // � + case 0xE2 : // � + case 0xE3 : // � + case 0xE4 : // � + case 0xE5 : // � + output.appendChar('a'); + break; + case 0xE6 : // � + output.append(_T("ae")); + break; + case 0xE7 : // � + output.appendChar('c'); + break; + case 0xE8 : // � + case 0xE9 : // � + case 0xEA : // � + case 0xEB : // � + output.appendChar('e'); + break; + case 0xEC : // � + case 0xED : // � + case 0xEE : // � + case 0xEF : // � + output.appendChar('i'); + break; + case 0xF0 : // � + output.appendChar('d'); + break; + case 0xF1 : // � + output.appendChar('n'); + break; + case 0xF2 : // � + case 0xF3 : // � + case 0xF4 : // � + case 0xF5 : // � + case 0xF6 : // � + case 0xF8 : // � + output.appendChar('o'); + break; + case 0xDF : // � + output.append(_T("ss")); + break; + case 0xFE : // � + output.append(_T("th")); + break; + case 0xF9 : // � + case 0xFA : // � + case 0xFB : // � + case 0xFC : // � + output.appendChar('u'); + break; + case 0xFD : // � + case 0xFF : // � + output.appendChar('y'); + break; + + #ifdef _UCS2 + case 0x152 : // � + output.append(_T("OE")); + break; + case 0x153 : // � + output.append(_T("oe")); + break; + case 0x178 : // � + output.appendChar('Y'); + break; + #endif + default : + output.appendChar(c); + break; + } + } + token->setText(output.getBuffer()); + return token; + } + return NULL; +} + + +KeywordAnalyzer::KeywordAnalyzer(){} +KeywordAnalyzer::~KeywordAnalyzer(){} +TokenStream* KeywordAnalyzer::tokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader){ + return _CLNEW KeywordTokenizer(reader); +} +TokenStream* KeywordAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) +{ + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW KeywordTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + +KeywordTokenizer::KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize): + Tokenizer(input) +{ + this->done = false; + this->bufferSize = bufferSize; + if ( bufferSize < 1 ) + this->bufferSize = DEFAULT_BUFFER_SIZE; +} +KeywordTokenizer::~KeywordTokenizer(){ +} + +Token* KeywordTokenizer::next(Token* token){ + if (!done) { + done = true; + int32_t upto = 0; + int32_t rd; + + token->clear(); + TCHAR* termBuffer=token->termBuffer(); + const TCHAR* readBuffer=NULL; + + while (true) { + rd = input->read(readBuffer, 1, cl_min(bufferSize, token->bufferLength()-upto) ); + if (rd == -1) + break; + if ( upto == token->bufferLength() ){ + termBuffer = token->resizeTermBuffer(token->bufferLength() + 8); + } + _tcsncpy(termBuffer + upto, readBuffer, rd); + upto += rd; + } + if ( token->bufferLength() < upto + 1 ){ + termBuffer=token->resizeTermBuffer(token->bufferLength() + 8); + } + termBuffer[upto]=0; + token->setTermLength(upto); + return token; + } + return NULL; +} +void KeywordTokenizer::reset(CL_NS(util)::Reader* input) +{ + Tokenizer::reset(input); + this->done = false; +} + + +LengthFilter::LengthFilter(TokenStream* in, const size_t _min, const size_t _max): + TokenFilter(in) +{ + this->_min = _min; + this->_max = _max; +} + +Token* LengthFilter::next(Token* token) +{ + // return the first non-stop word found + while ( input->next(token) ) + { + size_t len = token->termLength(); + if (len >= _min && len <= _max) + return token; + // note: else we ignore it but should we index each part of it? + } + // reached EOS -- return null + return NULL; +} + + +CLTCSetList* WordlistLoader::getWordSet(const char* wordfilePath, const char* enc, CLTCSetList* stopTable) +{ + if ( enc == NULL ) + enc = "ASCII"; + CL_NS(util)::FileReader* reader = NULL; + try { + reader = _CLNEW CL_NS(util)::FileReader(wordfilePath, enc, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); + stopTable = getWordSet(reader, stopTable); + } + _CLFINALLY ( + if (reader != NULL) { + //reader->close(); + _CLLDELETE(reader); + } + ); + return stopTable; +} + +//static +CLTCSetList* WordlistLoader::getWordSet(CL_NS(util)::Reader* reader, CLTCSetList* stopTable, const bool bDeleteReader) +{ + if (!stopTable) + stopTable = _CLNEW CLTCSetList(true); + + TCHAR* word = NULL; + try { + word = _CL_NEWARRAY(TCHAR, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); + while (reader->readLine(word, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE) > 0) { + stopTable->insert( STRDUP_TtoT(CL_NS(util)::Misc::wordTrim(word))); + } + } + _CLFINALLY ( + if (bDeleteReader && reader != NULL) { + //reader->close(); + _CLDELETE(reader); + } + _CLDELETE_ARRAY(word); + ); + return stopTable; +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/Analyzers.h clucene-core-2.3.3.4/src/core/CLucene/analysis/Analyzers.h --- clucene-core-0.9.21b/src/core/CLucene/analysis/Analyzers.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/Analyzers.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,394 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_Analyzers_ +#define _lucene_analysis_Analyzers_ + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.h" +#include "AnalysisHeader.h" + +CL_NS_DEF(analysis) + +/** An abstract base class for simple, character-oriented tokenizers.*/ +class CLUCENE_EXPORT CharTokenizer:public Tokenizer { +private: + int32_t offset, bufferIndex, dataLen; + TCHAR buffer[LUCENE_MAX_WORD_LEN+1]; + const TCHAR* ioBuffer; +protected: + + /** Returns true iff a character should be included in a token. This + * tokenizer generates as tokens adjacent sequences of characters which + * satisfy this predicate. Characters for which this is false are used to + * define token boundaries and are not included in tokens. */ + virtual bool isTokenChar(const TCHAR c) const = 0; + + /** Called on each token character to normalize it before it is added to the + * token. The default implementation does nothing. Subclasses may use this + * to, e.g., lowercase tokens. */ + virtual TCHAR normalize(const TCHAR c) const; + +public: + CharTokenizer(CL_NS(util)::Reader* in); + Token* next(Token* token); + void reset(CL_NS(util)::Reader* input); + + virtual ~CharTokenizer(); +}; + + +/** A LetterTokenizer is a tokenizer that divides text at non-letters. That's +to say, it defines tokens as maximal strings of adjacent letters, as defined +by java.lang.Character.isLetter() predicate. + +Note: this does a decent job for most European languages, but does a terrible +job for some Asian languages, where words are not separated by spaces. */ +class CLUCENE_EXPORT LetterTokenizer:public CharTokenizer { +public: + // Construct a new LetterTokenizer. + LetterTokenizer(CL_NS(util)::Reader* in); + virtual ~LetterTokenizer(); +protected: + /** Collects only characters which satisfy _istalpha.*/ + bool isTokenChar(const TCHAR c) const; +}; + + + +/** +* LowerCaseTokenizer performs the function of LetterTokenizer +* and LowerCaseFilter together. It divides text at non-letters and converts +* them to lower case. While it is functionally equivalent to the combination +* of LetterTokenizer and LowerCaseFilter, there is a performance advantage +* to doing the two tasks at once, hence this (redundant) implementation. +*

+* Note: this does a decent job for most European languages, but does a terrible +* job for some Asian languages, where words are not separated by spaces. +*/ +class CLUCENE_EXPORT LowerCaseTokenizer:public LetterTokenizer { +public: + /** Construct a new LowerCaseTokenizer. */ + LowerCaseTokenizer(CL_NS(util)::Reader* in); + virtual ~LowerCaseTokenizer(); +protected: + /** Collects only characters which satisfy _totlower. */ + TCHAR normalize(const TCHAR chr) const; +}; + + +/** A WhitespaceTokenizer is a tokenizer that divides text at whitespace. + * Adjacent sequences of non-Whitespace characters form tokens. */ +class CLUCENE_EXPORT WhitespaceTokenizer: public CharTokenizer { +public: + /** Construct a new WhitespaceTokenizer. */ + WhitespaceTokenizer(CL_NS(util)::Reader* in); + virtual ~WhitespaceTokenizer(); +protected: + /** Collects only characters which do not satisfy _istspace.*/ + bool isTokenChar(const TCHAR c) const; +}; + + +/** An Analyzer that uses WhitespaceTokenizer. */ +class CLUCENE_EXPORT WhitespaceAnalyzer: public Analyzer { +public: + WhitespaceAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + virtual ~WhitespaceAnalyzer(); +}; + +/** An Analyzer that filters LetterTokenizer with LowerCaseFilter. */ +class CLUCENE_EXPORT SimpleAnalyzer: public Analyzer { +public: + SimpleAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + virtual ~SimpleAnalyzer(); +}; + + + +/** +* Normalizes token text to lower case. +*/ +class CLUCENE_EXPORT LowerCaseFilter: public TokenFilter { +public: + LowerCaseFilter(TokenStream* in, bool deleteTokenStream); + virtual ~LowerCaseFilter(); + Token* next(Token* token); +}; + + +/** + * Removes stop words from a token stream. + */ +class CLUCENE_EXPORT StopFilter: public TokenFilter { +private: + //bvk: i found this to work faster with a non-hash table. the number of items + //in the stop table is not like to make it worth having hashing. + //ish: implement a radix/patricia tree for this? + CLTCSetList* stopWords; + bool deleteStopTable; + + bool enablePositionIncrements; + const bool ignoreCase; +public: + static bool ENABLE_POSITION_INCREMENTS_DEFAULT; + + // Constructs a filter which removes words from the input + // TokenStream that are named in the array of words. + StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** _stopWords, const bool _ignoreCase = false); + + virtual ~StopFilter(); + + /** Constructs a filter which removes words from the input + * TokenStream that are named in the CLSetList. + */ + StopFilter(TokenStream* in, bool deleteTokenStream, CLTCSetList* stopTable, bool _deleteStopTable=false); + + /** + * Builds a Hashtable from an array of stop words, appropriate for passing + * into the StopFilter constructor. This permits this table construction to + * be cached once when an Analyzer is constructed. + * Note: the stopWords list must be a static list because the strings are not copied + */ + static void fillStopTable(CLTCSetList* stopTable, + const TCHAR** stopWords, const bool _ignoreCase = false); + + /** + * Returns the next input Token whose termText() is not a stop word. + */ + Token* next(Token* token); + + + /** + * @see #setEnablePositionIncrementsDefault(boolean). + */ + static bool getEnablePositionIncrementsDefault(); + + /** + * Set the default position increments behavior of every StopFilter created from now on. + *

+ * Note: behavior of a single StopFilter instance can be modified + * with {@link #setEnablePositionIncrements(boolean)}. + * This static method allows control over behavior of classes using StopFilters internally, + * for example {@link lucene::analysis::standard::StandardAnalyzer StandardAnalyzer}. + *

+ * Default : false. + * @see #setEnablePositionIncrements(boolean). + */ + static void setEnablePositionIncrementsDefault(const bool defaultValue); + + /** + * @see #setEnablePositionIncrements(boolean). + */ + bool getEnablePositionIncrements() const; + + /** + * Set to true to make this StopFilter enable position increments to result tokens. + *

+ * When set, when a token is stopped (omitted), the position increment of + * the following token is incremented. + *

+ * Default: see {@link #setEnablePositionIncrementsDefault(boolean)}. + */ + void setEnablePositionIncrements(const bool enable); + +}; + +/** + * Loader for text files that represent a list of stopwords. + * + */ +class CLUCENE_EXPORT WordlistLoader { +public: + /** + * Loads a text file and adds every line as an entry to a HashSet (omitting + * leading and trailing whitespace). Every line of the file should contain only + * one word. The words need to be in lowercase if you make use of an + * Analyzer which uses LowerCaseFilter (like StandardAnalyzer). + * + * @param wordfile File containing the wordlist + * @return A HashSet with the file's words + */ + static CLTCSetList* getWordSet(const char* wordfilePath, const char* enc = NULL, CLTCSetList* stopTable = NULL); + + /** + * Reads lines from a Reader and adds every line as an entry to a HashSet (omitting + * leading and trailing whitespace). Every line of the Reader should contain only + * one word. The words need to be in lowercase if you make use of an + * Analyzer which uses LowerCaseFilter (like StandardAnalyzer). + * + * @param reader Reader containing the wordlist + * @return A HashSet with the reader's words + */ + static CLTCSetList* getWordSet(CL_NS(util)::Reader* reader, CLTCSetList* stopTable = NULL, const bool bDeleteReader = false); +}; + + +/** Filters LetterTokenizer with LowerCaseFilter and StopFilter. */ +class CLUCENE_EXPORT StopAnalyzer: public Analyzer { + CLTCSetList* stopTable; + class SavedStreams; + +public: + /** Builds an analyzer which removes words in ENGLISH_STOP_WORDS. */ + StopAnalyzer(); + virtual ~StopAnalyzer(); + + /** Builds an analyzer which removes words in the provided array. */ + StopAnalyzer( const TCHAR** stopWords ); + + /** Builds an analyzer with the stop words from the given file. + * @see WordlistLoader#getWordSet(File) + */ + StopAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** Builds an analyzer with the stop words from the given reader. + * @see WordlistLoader#getWordSet(Reader) + */ + StopAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader = false); + + /** Filters LowerCaseTokenizer with StopFilter. */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + /** An array containing some common English words that are not usually useful + for searching. */ + static const TCHAR* ENGLISH_STOP_WORDS[]; +}; + + + +/** + * This analyzer is used to facilitate scenarios where different + * fields require different analysis techniques. Use {@link #addAnalyzer} + * to add a non-default analyzer on a field name basis. + * + *

Example usage: + * + *

+ *   PerFieldAnalyzerWrapper* aWrapper =
+ *      new PerFieldAnalyzerWrapper(new StandardAnalyzer());
+ *   aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
+ *   aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
+ * 
+ * + *

In this example, StandardAnalyzer will be used for all fields except "firstname" + * and "lastname", for which KeywordAnalyzer will be used. + * + *

A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing + * and query parsing. + */ +class CLUCENE_EXPORT PerFieldAnalyzerWrapper : public Analyzer { +private: + Analyzer* defaultAnalyzer; + + typedef CL_NS(util)::CLHashMap > AnalyzerMapType; + AnalyzerMapType* analyzerMap; +public: + /** + * Constructs with default analyzer. + * + * @param defaultAnalyzer Any fields not specifically + * defined to use a different analyzer will use the one provided here. + */ + PerFieldAnalyzerWrapper(Analyzer* defaultAnalyzer); + virtual ~PerFieldAnalyzerWrapper(); + + /** + * Defines an analyzer to use for the specified field. + * + * @param fieldName field name requiring a non-default analyzer + * @param analyzer non-default analyzer to use for field + */ + void addAnalyzer(const TCHAR* fieldName, Analyzer* analyzer); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + /** Return the positionIncrementGap from the analyzer assigned to fieldName */ + int32_t getPositionIncrementGap(const TCHAR* fieldName); +}; + + +/** + * A filter that replaces accented characters in the ISO Latin 1 character set + * (ISO-8859-1) by their unaccented equivalent. The case will not be altered. + *

+ * For instance, 'à' will be replaced by 'a'. + *

+ */ +class CLUCENE_EXPORT ISOLatin1AccentFilter: public TokenFilter { +public: + ISOLatin1AccentFilter(TokenStream* input, bool deleteTs); + + /** + * To replace accented characters in a String by unaccented equivalents. + */ + Token* next(Token* token); + virtual ~ISOLatin1AccentFilter(); +}; + + +/** + * Emits the entire input as a single token. + */ +class CLUCENE_EXPORT KeywordTokenizer: public Tokenizer { +private: + LUCENE_STATIC_CONSTANT(int, DEFAULT_BUFFER_SIZE = 256); + bool done; + int bufferSize; +public: + KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize=-1); + Token* next(Token* token); + void reset(CL_NS(util)::Reader* input); + + virtual ~KeywordTokenizer(); +}; + +/** + * "Tokenizes" the entire stream as a single token. This is useful + * for data like zip codes, ids, and some product names. + */ +class CLUCENE_EXPORT KeywordAnalyzer: public Analyzer { +public: + KeywordAnalyzer(); + virtual ~KeywordAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +}; + + +/** + * Removes words that are too long and too short from the stream. + * + */ +class CLUCENE_EXPORT LengthFilter: public TokenFilter { +private: + size_t _min; + size_t _max; +public: + /** + * Build a filter that removes words that are too long or too + * short from the text. + */ + LengthFilter(TokenStream* in, const size_t _min, const size_t _max); + + /** + * Returns the next input Token whose termText() is the right len + */ + Token* next(Token* token); +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/CachingTokenFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/analysis/CachingTokenFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/analysis/CachingTokenFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/CachingTokenFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CachingTokenFilter.h" + +CL_NS_DEF(analysis) + +CachingTokenFilter::CachingTokenFilter( TokenStream * input, bool bDeleteTS ) +: TokenFilter( input, bDeleteTS ) +{ + bCacheInitialized = false; +} + +CachingTokenFilter::~CachingTokenFilter() +{ + for( itCache = cache.begin(); itCache != cache.end(); itCache++ ) + delete (*itCache); + + cache.clear(); +} + +Token * CachingTokenFilter::next( Token* t ) +{ + if( ! bCacheInitialized ) + { + fillCache(); + bCacheInitialized = true; + itCache = cache.begin(); + } + + // if the cache is exhausted, return null + if( itCache == cache.end() ) + return NULL; + + t->set( (*itCache)->termBuffer(), (*itCache)->startOffset(), (*itCache)->endOffset(), (*itCache)->type() ); + t->setPositionIncrement( (*itCache)->getPositionIncrement() ); + t->setPayload( (*itCache)->getPayload() ); + itCache++; + + return t; +} + +void CachingTokenFilter::reset() +{ + itCache = cache.begin(); +} + +void CachingTokenFilter::fillCache() +{ + Token token; + Token * pCopy; + + while( input->next( &token ) ) + { + pCopy = new Token( token.termBuffer(), token.startOffset(), token.endOffset(), token.type() ); + pCopy ->setPositionIncrement( token.getPositionIncrement() ); + pCopy ->setPayload( token.getPayload() ); + cache.push_back( pCopy ); + } +} + +CL_NS_END \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/CachingTokenFilter.h clucene-core-2.3.3.4/src/core/CLucene/analysis/CachingTokenFilter.h --- clucene-core-0.9.21b/src/core/CLucene/analysis/CachingTokenFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/CachingTokenFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_CachingTokenFilter +#define _lucene_analysis_CachingTokenFilter + +#include +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(analysis) + +class CLUCENE_EXPORT CachingTokenFilter : public TokenFilter +{ +private: + bool bCacheInitialized; + std::list cache; + std::list::iterator itCache; + +public: + CachingTokenFilter( TokenStream * input, bool bDeleteTS ); + virtual ~CachingTokenFilter(); + + Token * next( Token* t ); + void reset(); + void fillCache(); +}; + +CL_NS_END + +#endif // _lucene_analysis_CachingTokenFilter diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp --- clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,106 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "StandardAnalyzer.h" + +////#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/analysis/Analyzers.h" +#include "StandardFilter.h" +#include "StandardTokenizer.h" + +CL_NS_USE(util) +CL_NS_USE(analysis) + +CL_NS_DEF2(analysis,standard) + + StandardAnalyzer::StandardAnalyzer(): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + StopFilter::fillStopTable( stopSet,CL_NS(analysis)::StopAnalyzer::ENGLISH_STOP_WORDS); + } + + StandardAnalyzer::StandardAnalyzer( const TCHAR** stopWords): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + StopFilter::fillStopTable( stopSet,stopWords ); + } + + StandardAnalyzer::StandardAnalyzer(const char* stopwordsFile, const char* enc): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + if ( enc == NULL ) + enc = "ASCII"; + WordlistLoader::getWordSet(stopwordsFile, enc, stopSet); + } + + StandardAnalyzer::StandardAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + WordlistLoader::getWordSet(stopwordsReader, stopSet, _bDeleteReader); + } + + class StandardAnalyzer::SavedStreams : public TokenStream { + public: + StandardTokenizer* tokenStream; + TokenStream* filteredTokenStream; + + SavedStreams():tokenStream(NULL), filteredTokenStream(NULL) + { + } + + void close(){} + Token* next(Token* token) {return NULL;} + }; + + StandardAnalyzer::~StandardAnalyzer(){ + SavedStreams* t = reinterpret_cast(this->getPreviousTokenStream()); + if (t) _CLDELETE(t->filteredTokenStream); + _CLLDELETE(stopSet); + } + + + TokenStream* StandardAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) + { + BufferedReader* bufferedReader = reader->__asBufferedReader(); + TokenStream* ret; + + if ( bufferedReader == NULL ) + ret = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true ); + else + ret = _CLNEW StandardTokenizer(bufferedReader); + //ret->setMaxTokenLength(maxTokenLength); + ret = _CLNEW StandardFilter(ret,true); + ret = _CLNEW LowerCaseFilter(ret,true); + ret = _CLNEW StopFilter(ret,true, stopSet); + return ret; + } + + TokenStream* StandardAnalyzer::reusableTokenStream(const TCHAR* fieldName, Reader* reader){ + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + setPreviousTokenStream(streams); + + BufferedReader* bufferedReader = reader->__asBufferedReader(); + if ( bufferedReader == NULL ) + streams->tokenStream = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true); + else + streams->tokenStream = _CLNEW StandardTokenizer(bufferedReader); + + streams->filteredTokenStream = _CLNEW StandardFilter(streams->tokenStream, true); + streams->filteredTokenStream = _CLNEW LowerCaseFilter(streams->filteredTokenStream, true); + streams->filteredTokenStream = _CLNEW StopFilter(streams->filteredTokenStream, true, stopSet); + } else { + streams->tokenStream->reset(reader); + } + //streams->tokenStream->setMaxTokenLength(maxTokenLength); + + return streams->filteredTokenStream; + } +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardAnalyzer.h clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardAnalyzer.h --- clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardAnalyzer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardAnalyzer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,75 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_standard_StandardAnalyzer +#define _lucene_analysis_standard_StandardAnalyzer + +CL_CLASS_DEF(util,BufferedReader) +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(analysis,standard) + +/** +* Filters {@link lucene::analysis::standard::StandardTokenizer} with {@link lucene::analysis::standard::StandardFilter}, +* {@link lucene::analysis::LowerCaseFilter} and {@link lucene::analysis::StopFilter}, using a list of English stop words. +* +*/ + class CLUCENE_EXPORT StandardAnalyzer : public Analyzer + { + private: + CLTCSetList* stopSet; + int32_t maxTokenLength; + + class SavedStreams; + public: + /** Default maximum allowed token length */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_TOKEN_LENGTH = 255); + + /** Builds an analyzer.*/ + StandardAnalyzer(); + + /** Builds an analyzer with the given stop words. */ + StandardAnalyzer( const TCHAR** stopWords); + + /** Builds an analyzer with the stop words from the given file. + * @see WordlistLoader#getWordSet(File) + */ + StandardAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** Builds an analyzer with the stop words from the given reader. + * @see WordlistLoader#getWordSet(Reader) + */ + StandardAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader = false); + + virtual ~StandardAnalyzer(); + + /** + * Constructs a StandardTokenizer filtered by a + * StandardFilter, a LowerCaseFilter and a StopFilter. + */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + /** + * Set maximum allowed token length. If a token is seen + * that exceeds this length then it is discarded. This + * setting only takes effect the next time tokenStream or + * reusableTokenStream is called. + */ + void setMaxTokenLength(const int32_t length) { + maxTokenLength = length; + } + + /** + * @see #setMaxTokenLength + */ + int getMaxTokenLength() const { + return maxTokenLength; + } + }; +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,58 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "StandardFilter.h" + +#include "../AnalysisHeader.h" +#include "../Analyzers.h" +#include "StandardTokenizerConstants.h" + +CL_NS_USE(analysis) +CL_NS_USE(util) +CL_NS_DEF2(analysis,standard) + + StandardFilter::StandardFilter(TokenStream* in, bool deleteTokenStream): + TokenFilter(in, deleteTokenStream) + { + } + + StandardFilter::~StandardFilter(){ + } + + Token* StandardFilter::next(Token* t) { + if (input->next(t) == NULL) + return NULL; + + TCHAR* text = t->termBuffer(); + const int32_t textLength = t->termLength(); + const TCHAR* type = t->type(); + + if ( type == tokenImage[APOSTROPHE] && //we can compare the type directy since the type should always come from the tokenImage + ( textLength >= 2 && _tcsicmp(text+textLength-2, _T("'s"))==0 ) ) + { + // remove 's + text[textLength-2]=0; + t->resetTermTextLen(); + + return t; + + } else if ( type == tokenImage[ACRONYM] ) { // remove dots + int32_t j = 0; + for ( int32_t i=0;iresetTermTextLen(); + return t; + + } else { + return t; + } + } + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardFilter.h clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardFilter.h --- clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,35 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_standard_StandardFilter +#define _lucene_analysis_standard_StandardFilter + + +#include "CLucene/analysis/AnalysisHeader.h" +//#include "../Analyzers.h" +//#include "StandardTokenizerConstants.h" + +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF2(analysis,standard) + + /** Normalizes tokens extracted with {@link lucene::analysis::standard::StandardTokenizer}. */ + class CLUCENE_EXPORT StandardFilter: public TokenFilter{ + public: + // Construct filtering in. + StandardFilter(TokenStream* in, bool deleteTokenStream); + + virtual ~StandardFilter(); + + + /** Returns the next token in the stream, or NULL at EOS. + *

Removes 's from the end of words. + *

Removes dots from acronyms. + */ + Token* next(Token* token); + }; +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h --- clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,27 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_standard_StandardTokenizerConstants +#define _lucene_analysis_standard_StandardTokenizerConstants + +// TODO: Put these into StandardTokenizer +CL_NS_DEF2(analysis,standard) + enum TokenTypes { + _EOF, + UNKNOWN, + ALPHANUM, + APOSTROPHE, + ACRONYM, + COMPANY, + EMAIL, + HOST, + NUM, + CJK + }; + extern const TCHAR** tokenImage; + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardTokenizer.cpp clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardTokenizer.cpp --- clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardTokenizer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardTokenizer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,464 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "StandardTokenizer.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_FastCharStream.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_USE(analysis) +CL_NS_USE(util) +CL_NS_DEF2(analysis,standard) + + const TCHAR* tokenImageArray[] = { + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T("") + }; + const TCHAR** tokenImage = tokenImageArray; + + + /* A bunch of shortcut macros, many of which make assumptions about variable + ** names. These macros enhance readability, not just convenience! */ + #define EOS (ch==-1 || rd->Eos()) + #define SPACE (_istspace((TCHAR)ch) != 0) + #define ALPHA (_istalpha((TCHAR)ch) != 0) + #define ALNUM (_istalnum(ch) != 0) + #define DIGIT (_istdigit(ch) != 0) + #define UNDERSCORE (ch == '_') + + #define _CJK ( (ch>=0x3040 && ch<=0x318f) || \ + (ch>=0x3300 && ch<=0x337f) || \ + (ch>=0x3400 && ch<=0x3d2d) || \ + (ch>=0x4e00 && ch<=0x9fff) || \ + (ch>=0xf900 && ch<=0xfaff) || \ + (ch>=0xac00 && ch<=0xd7af) ) //korean + + + #define DASH (ch == '-') + #define NEGATIVE_SIGN_ DASH + //#define POSITIVE_SIGN_ (ch == '+') + //#define SIGN (NEGATIVE_SIGN_ || POSITIVE_SIGN_) + + #define DOT (ch == '.') + #define DECIMAL DOT + + + //freebsd seems to have a problem with defines over multiple lines, so this has to be one long line + #define _CONSUME_AS_LONG_AS(conditionFails) while (true) { ch = readChar(); if (ch==-1 || (!(conditionFails) || str.len >= LUCENE_MAX_WORD_LEN)) { break; } str.appendChar(ch);} + + #define CONSUME_ALPHAS _CONSUME_AS_LONG_AS(ALPHA) + + #define CONSUME_DIGITS _CONSUME_AS_LONG_AS(DIGIT) + + /* otherMatches is a condition (possibly compound) under which a character + ** that's not an ALNUM or UNDERSCORE can be considered not to break the + ** span. Callers should pass false if only ALNUM/UNDERSCORE are acceptable. */ + #define CONSUME_WORD _CONSUME_AS_LONG_AS(ALNUM || UNDERSCORE) + + /* + ** Consume CJK characters + */ + #define CONSUME_CJK _CONSUME_AS_LONG_AS(_CJK) + + + /* It is considered that "nothing of value" has been read if: + ** a) The "read head" hasn't moved since specialCharPos was established. + ** or + ** b) The "read head" has moved by one character, but that character was + ** either whitespace or not among the characters found in the body of + ** a token (deliberately doesn't include the likes of '@'/'&'). */ + #define CONSUMED_NOTHING_OF_VALUE (rdPos == specialCharPos || (rdPos == specialCharPos+1 && ( SPACE || !(ALNUM || DOT || DASH || UNDERSCORE) ))) + + #define RIGHTMOST(sb) (sb.getBuffer()[sb.len-1]) + #define RIGHTMOST_IS(sb, c) (RIGHTMOST(sb) == c) + /* To discard the last character in a StringBuffer, we decrement the buffer's + ** length indicator and move the terminator back by one character. */ + #define SHAVE_RIGHTMOST(sb) (sb.getBuffer()[--sb.len] = '\0') + + //#define REMOVE_TRAILING_CHARS(sb, charMatchesCondition) { TCHAR* sbBuf = sb.getBuffer(); for (int32_t i = sb.len-1; i >= 0; i--) { TCHAR c = sbBuf[i]; if (charMatchesCondition) { sbBuf[--sb.len] = '\0'; } else {break;}}} + + /* Does StringBuffer sb contain any of the characters in string ofThese? */ + #define CONTAINS_ANY(sb, ofThese) (_tcscspn(sb.getBuffer(), _T(ofThese)) != static_cast(sb.len)) + + + StandardTokenizer::StandardTokenizer(BufferedReader* reader, bool deleteReader): + /* rdPos is zero-based. It starts at -1, and will advance to the first + ** position when readChar() is first called. */ + rdPos(-1), + tokenStart(-1), + rd(_CLNEW FastCharStream(reader)) + { + this->reader = reader; + this->deleteReader = deleteReader; + } + + StandardTokenizer::~StandardTokenizer() { + _CLDELETE(rd); + if ( this->deleteReader ) + _CLDELETE(reader) + } + + int StandardTokenizer::readChar() { + /* Increment by 1 because we're speaking in terms of characters, not + ** necessarily bytes: */ + rdPos++; + return rd->GetNext(); + } + + void StandardTokenizer::unReadChar() { + rd->UnGet(); + rdPos--; + } + + inline Token* StandardTokenizer::setToken(Token* t, StringBuffer* sb, TokenTypes tokenCode) { + t->setStartOffset(tokenStart); + t->setEndOffset(tokenStart+sb->length()); + t->setType(tokenImage[tokenCode]); + sb->getBuffer(); //null terminates the buffer + t->resetTermTextLen(); + return t; + } + + void StandardTokenizer::reset(Reader* _input) { + this->input = _input; + if (rd->input==NULL) rd->input = _input->__asBufferedReader(); + rdPos = -1; + tokenStart = -1; + rd->reset(); + } + + Token* StandardTokenizer::next(Token* t) { + int ch=0; + + while (!EOS) { + ch = readChar(); + + if ( ch == 0 || ch == -1 ){ + continue; + } else if (SPACE) { + continue; + } else if (ALPHA || UNDERSCORE) { + tokenStart = rdPos; + t = ReadAlphaNum(ch,t); + if ( t != NULL) return t; + } else if (DIGIT || NEGATIVE_SIGN_ || DECIMAL) { + tokenStart = rdPos; + /* ReadNumber returns NULL if it fails to extract a valid number; in + ** that case, we just continue. */ + if (ReadNumber(NULL, ch,t)) + return t; + } else if ( _CJK ){ + t = ReadCJK(ch,t); + if ( t != NULL ) return t; + } + } + return NULL; + } + + Token* StandardTokenizer::ReadNumber(const TCHAR* previousNumber, const TCHAR prev,Token* t) { + /* previousNumber is only non-NULL if this function already read a complete + ** number in a previous recursion, yet has been asked to read additional + ** numeric segments. For example, in the HOST "192.168.1.3", "192.168" is + ** a complete number, but this function will recurse to read the "1.3", + ** generating a single HOST token "192.168.1.3". */ + t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word + StringBuffer str(t->termBuffer(),t->bufferLength(),true); //use stringbuffer to read data onto the termText + TokenTypes tokenType; + bool decExhausted; + if (previousNumber != NULL) { + str.prepend(previousNumber); + tokenType = CL_NS2(analysis,standard)::HOST; + decExhausted = false; + } else { + tokenType = CL_NS2(analysis,standard)::NUM; + decExhausted = (prev == '.'); + } + if ( str.len >= LUCENE_MAX_WORD_LEN ){ + //if a number is too long, i would say there is no point + //storing it, because its going to be the wrong number anyway? + //what do people think? + return NULL; + } + str.appendChar(prev); + + const bool signExhausted = (prev == '-'); + int ch = prev; + + CONSUME_DIGITS; + + if (str.len < 2 /* CONSUME_DIGITS didn't find any digits. */ + && ( + (signExhausted && !DECIMAL) + || (decExhausted /* && !DIGIT is implied, since CONSUME_DIGITS stopped on a non-digit. */) + ) + ) + { + /* We have either: + ** a) a negative sign that's not followed by either digit(s) or a decimal + ** b) a decimal that's not followed by digit(s) + ** so this is not a valid number. */ + if (!EOS) { + /* Unread the character that stopped CONSUME_DIGITS: */ + unReadChar(); + } + return NULL; + } + + /* We just read a group of digits. Is it followed by a decimal symbol, + ** implying that there might be another group of digits available? */ + if (!EOS) { + if (DECIMAL) { + if ( str.len >= LUCENE_MAX_WORD_LEN ) + return NULL; //read above for rationale + str.appendChar(ch); + } else { + unReadChar(); + goto SUCCESSFULLY_EXTRACTED_NUMBER; + } + + CONSUME_DIGITS; + if (!DIGIT && !DECIMAL) { + unReadChar(); + } else if (!EOS && DECIMAL && _istdigit(rd->Peek())) { + /* We just read the fractional digit group, but it's also followed by + ** a decimal symbol and at least one more digit, so this must be a + ** HOST rather than a real number. */ + return ReadNumber(str.getBuffer(), '.',t); + } + } + + SUCCESSFULLY_EXTRACTED_NUMBER: + TCHAR rightmost = RIGHTMOST(str); + /* Don't including a trailing decimal point. */ + if (rightmost == '.') { + SHAVE_RIGHTMOST(str); + unReadChar(); + rightmost = RIGHTMOST(str); + } + /* If all we have left is a negative sign, it's not a valid number. */ + if (rightmost == '-') { + CND_PRECONDITION (str.len == 1, "Number is invalid"); + return NULL; + } + + return setToken(t,&str,tokenType); + } + + Token* StandardTokenizer::ReadAlphaNum(const TCHAR prev, Token* t) { + t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word + StringBuffer str(t->termBuffer(),t->bufferLength(),true); //use stringbuffer to read data onto the termText + if ( str.len < LUCENE_MAX_WORD_LEN ){ + str.appendChar(prev); + int ch = prev; + + CONSUME_WORD; + if (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) { //still have space for 1 more character? + switch(ch) { /* What follows the first alphanum segment? */ + case '.': + str.appendChar('.'); + return ReadDotted(&str, CL_NS2(analysis,standard)::UNKNOWN,t); + case '\'': + str.appendChar('\''); + return ReadApostrophe(&str,t); + case '@': + str.appendChar('@'); + return ReadAt(&str,t); + case '&': + str.appendChar('&'); + return ReadCompany(&str,t); + /* default: fall through to end of this function. */ + } + } + } + return setToken(t,&str,CL_NS2(analysis,standard)::ALPHANUM); + } + + Token* StandardTokenizer::ReadCJK(const TCHAR prev, Token* t) { + t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word + StringBuffer str(t->termBuffer(),t->bufferLength(),true); //use stringbuffer to read data onto the termText + if ( str.len < LUCENE_MAX_WORD_LEN ){ + str.appendChar(prev); + int ch = prev; + + CONSUME_CJK; + } + return setToken(t,&str,CL_NS2(analysis,standard)::CJK); + } + + + Token* StandardTokenizer::ReadDotted(StringBuffer* _str, TokenTypes forcedType, Token* t) { + const int32_t specialCharPos = rdPos; + StringBuffer& str=*_str; + + /* A segment of a "dotted" is not allowed to begin with another dot or a dash. + ** Even though hosts, e-mail addresses, etc., could have a dotted-segment + ** that begins with a dot or a dash, it's far more common in source text + ** for a pattern like "abc.--def" to be intended as two tokens. */ + int ch = rd->Peek(); + if (!(DOT || DASH)) { + bool prevWasDot; + bool prevWasDash; + if (str.len == 0) { + prevWasDot = false; + prevWasDash = false; + } else { + prevWasDot = RIGHTMOST(str) == '.'; + prevWasDash = RIGHTMOST(str) == '-'; + } + while (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) { + ch = readChar(); + const bool dot = ch == '.'; + const bool dash = ch == '-'; + + if (!(ALNUM || UNDERSCORE || dot || dash)) { + break; + } + /* Multiple dots or dashes in succession end the token. + ** Consider the following inputs: + ** "Visit windowsupdate.microsoft.com--update today!" + ** "In the U.S.A.--yes, even there!" */ + if ((dot || dash) && (prevWasDot || prevWasDash)) { + /* We're not going to append the character we just read, in any case. + ** As to the character before it (which is currently RIGHTMOST(str)): + ** Unless RIGHTMOST(str) is a dot, in which we need to save it so the + ** acronym-versus-host detection can work, we want to get rid of it. */ + if (!prevWasDot) { + SHAVE_RIGHTMOST(str); + } + break; + } + + str.appendChar(ch); + + prevWasDot = dot; + prevWasDash = dash; + } + } + + /* There's a potential StringBuffer.append call in the code above, which + ** could cause str to reallocate its internal buffer. We must wait to + ** obtain the optimization-oriented strBuf pointer until after the initial + ** potentially realloc-triggering operations on str. + ** Because there can be other such ops much later in this function, strBuf + ** is guarded within a block to prevent its use during or after the calls + ** that would potentially invalidate it. */ + { /* Begin block-guard of strBuf */ + TCHAR* strBuf = str.getBuffer(); + + bool rightmostIsDot = RIGHTMOST_IS(str, '.'); + if (CONSUMED_NOTHING_OF_VALUE) { + /* No more alphanums available for this token; shave trailing dot, if any. */ + if (rightmostIsDot) { + SHAVE_RIGHTMOST(str); + } + /* If there are no dots remaining, this is a generic ALPHANUM. */ + if (_tcschr(strBuf, '.') == NULL) { + forcedType = CL_NS2(analysis,standard)::ALPHANUM; + } + + /* Check the token to see if it's an acronym. An acronym must have a + ** letter in every even slot and a dot in every odd slot, including the + ** last slot (for example, "U.S.A."). */ + } else if (rightmostIsDot) { + bool isAcronym = true; + const int32_t upperCheckLimit = str.len - 1; /* -1 b/c we already checked the last slot. */ + + for (int32_t i = 0; i < upperCheckLimit; i++) { + const bool even = (i % 2 == 0); + ch = strBuf[i]; + if ( (even && !ALPHA) || (!even && !DOT) ) { + isAcronym = false; + break; + } + } + if (isAcronym) { + forcedType = CL_NS2(analysis,standard)::ACRONYM; + } else { + /* If it's not an acronym, we don't want the trailing dot. */ + SHAVE_RIGHTMOST(str); + /* If there are no dots remaining, this is a generic ALPHANUM. */ + if (_tcschr(strBuf, '.') == NULL) { + forcedType = CL_NS2(analysis,standard)::ALPHANUM; + } + } + } + } /* End block-guard of strBuf */ + + if (!EOS) { + if (ch == '@' && str.len < LUCENE_MAX_WORD_LEN-1) { + str.appendChar('@'); + return ReadAt(&str,t); + } else { + unReadChar(); + } + } + + return setToken(t,&str,CL_NS2(analysis,standard)::UNKNOWN + ? forcedType : CL_NS2(analysis,standard)::HOST); + } + + Token* StandardTokenizer::ReadApostrophe(StringBuffer* _str, Token* t) { + StringBuffer& str=*_str; + + TokenTypes tokenType = CL_NS2(analysis,standard)::APOSTROPHE; + const int32_t specialCharPos = rdPos; + int ch=0; + + CONSUME_ALPHAS; + if (RIGHTMOST_IS(str, '\'') || CONSUMED_NOTHING_OF_VALUE) { + /* After the apostrophe, no more alphanums were available within this + ** token; shave trailing apostrophe and revert to generic ALPHANUM. */ + SHAVE_RIGHTMOST(str); + tokenType = CL_NS2(analysis,standard)::ALPHANUM; + } + if (!EOS) { + unReadChar(); + } + + return setToken(t,&str,tokenType); + } + + Token* StandardTokenizer::ReadAt(StringBuffer* str, Token* t) { + ReadDotted(str, CL_NS2(analysis,standard)::EMAIL,t); + /* JLucene grammar indicates dots/digits not allowed in company name: */ + if (!CONTAINS_ANY((*str), ".0123456789")) { + setToken(t,str,CL_NS2(analysis,standard)::COMPANY); + } + return t; + } + + Token* StandardTokenizer::ReadCompany(StringBuffer* _str, Token* t) { + StringBuffer& str = *_str; + const int32_t specialCharPos = rdPos; + int ch=0; + + CONSUME_WORD; + if (CONSUMED_NOTHING_OF_VALUE) { + /* After the ampersand, no more alphanums were available within this + ** token; shave trailing ampersand and revert to ALPHANUM. */ + CND_PRECONDITION(RIGHTMOST_IS(str, '&'),"ReadCompany failed"); + SHAVE_RIGHTMOST(str); + + + return setToken(t,&str,CL_NS2(analysis,standard)::ALPHANUM); + } + if (!EOS) { + unReadChar(); + } + + return setToken(t,&str,CL_NS2(analysis,standard)::COMPANY); + } + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardTokenizer.h clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardTokenizer.h --- clucene-core-0.9.21b/src/core/CLucene/analysis/standard/StandardTokenizer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/analysis/standard/StandardTokenizer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,88 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_standard_StandardTokenizer +#define _lucene_analysis_standard_StandardTokenizer + + +#include "../AnalysisHeader.h" //required for Tokenizer +#include "StandardTokenizerConstants.h" +CL_CLASS_DEF(analysis,Token) +CL_CLASS_DEF(util,BufferedReader) +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(util,FastCharStream) + +CL_NS_DEF2(analysis,standard) + +/** A grammar-based tokenizer constructed with JavaCC. + * + *

This should be a good tokenizer for most European-language documents: + * + *

    + *
  • Splits words at punctuation characters, removing punctuation. However, a + * dot that's not followed by whitespace is considered part of a token. + *
  • Splits words at hyphens, unless there's a number in the token, in which case + * the whole token is interpreted as a product number and is not split. + *
  • Recognizes email addresses and internet hostnames as one token. + *
+ * + *

Many applications have specific tokenizer needs. If this tokenizer does + * not suit your application, please consider copying this source code + * directory to your project and maintaining your own grammar-based tokenizer. + */ + class CLUCENE_EXPORT StandardTokenizer: public Tokenizer { + private: + int32_t rdPos; + int32_t tokenStart; + + // Advance by one character, incrementing rdPos and returning the character. + int readChar(); + // Retreat by one character, decrementing rdPos. + void unReadChar(); + + // createToken centralizes token creation for auditing purposes. + //Token* createToken(CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode); + inline Token* setToken(Token* t, CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode); + + Token* ReadDotted(CL_NS(util)::StringBuffer* str, TokenTypes forcedType,Token* t); + + CL_NS(util)::BufferedReader* reader; + bool deleteReader; + CL_NS(util)::FastCharStream* rd; + public: + + // Constructs a tokenizer for this Reader. + StandardTokenizer(CL_NS(util)::BufferedReader* reader, bool deleteReader=false); + + virtual ~StandardTokenizer(); + + /** Returns the next token in the stream, or false at end-of-stream. + * The returned token's type is set to an element of + * StandardTokenizerConstants::tokenImage. */ + Token* next(Token* token); + + // Reads for number like "1"/"1234.567", or IP address like "192.168.1.2". + Token* ReadNumber(const TCHAR* previousNumber, const TCHAR prev, Token* t); + + Token* ReadAlphaNum(const TCHAR prev, Token* t); + + // Reads for apostrophe-containing word. + Token* ReadApostrophe(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads for something@... it may be a COMPANY name or a EMAIL address + Token* ReadAt(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads for COMPANY name like AT&T. + Token* ReadCompany(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads CJK characters + Token* ReadCJK(const TCHAR prev, Token* t); + + virtual void reset(CL_NS(util)::Reader* _input); + }; + +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/_ApiHeader.h clucene-core-2.3.3.4/src/core/CLucene/_ApiHeader.h --- clucene-core-0.9.21b/src/core/CLucene/_ApiHeader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/_ApiHeader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,24 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef lucene_internal_apiheader_h +#define lucene_internal_apiheader_h + +/** +* This is the header that all clucene-core source code includes. +* We include the shared code header and the public StdHeader.h header. +*/ + +#include "CLucene/StdHeader.h" +#include "CLucene/_SharedHeader.h" + +//todo: this code needs to go to shared +#include "CLucene/util/_VoidMap.h" +#include "CLucene/util/_VoidList.h" + +using namespace std; + +#endif // lucene_apiheader_h diff -Nru clucene-core-0.9.21b/src/core/CLucene/CLConfig.h clucene-core-2.3.3.4/src/core/CLucene/CLConfig.h --- clucene-core-0.9.21b/src/core/CLucene/CLConfig.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/CLConfig.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,235 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_Config_ +#define _lucene_Config_ + + +//////////////////////////////////////////////////////////////////// +// this settings should be set up in the compiler, +// but are put here for reference as to what could be defined +//////////////////////////////////////////////////////////////////// +// +//define this if you want debugging code to be enabled +//#define _DEBUG +// +//define this if you want condition debugging to be enabled +#if defined(_DEBUG) && !defined(_CL__CND_DEBUG) + #define _CL__CND_DEBUG +#endif +// +//define this to print out lots of information about merges, etc +//requires __CL__CND_DEBUG to be defined +//#define _CL_DEBUG_INFO stdout +// +//to disable namespaces define this +//#define DISABLE_NAMESPACE +// +//disable hashmap/set usage. Just use map and set. +//this has been shown to be quicker than the hash equivalents in some impementations +#ifndef LUCENE_DISABLE_HASHING + #define LUCENE_DISABLE_HASHING +#endif +// +//////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////// +// These options can be set depending on the particular needs of +// Your application +//////////////////////////////////////////////////////////////////// +// +//define this to enable mmap support in the fsdirectory IndexInput +//EXPERIMENTAL +//#define LUCENE_FS_MMAP +// +//define to true to actually use it (not just enable it) +#ifdef LUCENE_FS_MMAP + #define LUCENE_USE_MMAP true //yes, use if it's turned on. +#else + #define LUCENE_USE_MMAP false +#endif +// +//LOCK_DIR implementation: +//define this to set an exact directory for the lock dir (not recommended) +//all other methods of getting the temporary directory will be ignored +//#define LUCENE_LOCK_DIR "/tmp" +// +//define this to try and load the lock dir from this specified environment variable +#define LUCENE_LOCK_DIR_ENV_1 "TEMP" +//define this if you want to have look up this environment variable if the first one fails +#define LUCENE_LOCK_DIR_ENV_2 "TMP" +//define this if you want to have a fallback directory, if not defined then +//the lockdirectory will be the index directory +#define LUCENE_LOCK_DIR_ENV_FALLBACK "/tmp" +// +//////////////////////////////////////////////////////////////////// + + +//This must always be defined. They can be adjusted if required. But +//general Wildcard string would be '*' and Wildcard Char would be '?' +//Both are Required. +#define LUCENE_WILDCARDTERMENUM_WILDCARD_STRING '*' +#define LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR '?' +// +//////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////// +// memory handling configurations +//////////////////////////////////////////////////////////////////// +// +/*** +* If this is defined, lucene's configurations are changed +* to use less memory, but may run slower. +* todo: i dont think this actualy changes speed much, just memory +*/ +#define LUCENE_OPTIMIZE_FOR_MEMORY + +// +//enable this if you want to enable reference counting. This is +//not necessary or useful in most cases except when implementing wrappers +//which have reference counting. If the wrapper wraps a StringReader, +//for example, it should expect that the wrapped StringReader should not +//be deleted. However, when the stringreader is added into a Field, +//the Field usually takes over the stringReader and deletes it on completion. +//If reference counting is enabled, the wrapper can add a reference to any class +//and when _CLDECDELETE is called, the reference is decremented and only deleted +//if the refcount is zero. +//#define LUCENE_ENABLE_REFCOUNT + + +//////////////////////////////////////////////////////////////////// +// These options allow you to remove certain implementations +// out of clucene so that they can be implemented in the client +// application +//////////////////////////////////////////////////////////////////// +// +//define this if you want to implement the _Cnd_OutDebug routine yourself +//you can then easily customise in your own application how to handle debug messages +//#define _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// These options should not be changed. But you can experiment with +// them to optimize performance +//////////////////////////////////////////////////////////////////// +// +//some defaults, wouldn't usually need to be changed +//Buffer size for input/output streams. Required. +#define LUCENE_STREAM_BUFFER_SIZE 1024 +// +// DSR:2004.08.19: +// Formerly, StringBuffer used 1024 as the default size of its internal buffer. +// However, StringBuffer is used primarily for token- and term-oriented +// processing, e.g. in StandardTokenizer. I've calculated that the average +// token (as produced by StandardTokenizer) in all .txt files distributed in +// the Project Gutenberg CD Image (August 2003 release) has only 6 characters. +// Although most languages are likely to have a longer average word length than +// English due to the popularity of "non-atomized" conjugation and declension +// mechanisms, 1024 is still vastly excessive. +// I made two changes intended to deliver better overall performance: +// a) Switched to a default StringBuffer character capacity of 32. Though 32 +// is longer than the average token, the high cost of realloc makes a +// slightly liberal default size optimal. I chose the default size of 32 +// after fairly extensive experimentation on the Gutenberg e-texts. The +// results are summarized in the following table: +// ------------------------------------------------------------------------ +// LUCENE_DEFAULT_TOKEN_BUFFER_SIZE value | % faster than default size 1024 +// ------------------------------------------------------------------------ +// 8 : 4% +// 16 : 7% +// 32 : 6% +// 64 : 3% +// A default size of 32 is actually slightly slower than 16, but I was +// experimenting on English text; I expect that 32 will maintain decent +// performance in languages such as German, and in technical documents +// with long tokens. +// +// b) To offset the switch to a smaller default buffer size, I implemented a +// more aggressive growth strategy. A StringBuffer now [at least] doubles +// the size of its internal buffer every time it needs to grow, rather +// than [at least] increasing by LUCENE_DEFAULT_TOKEN_BUFFER_SIZE no +// matter how many times it has already grown. +//Required. +#define LUCENE_DEFAULT_TOKEN_BUFFER_SIZE 32 +//todo: should implement a similar strategy in analysis/token +// +//Size of TermScore cache. Required. +#define LUCENE_SCORE_CACHE_SIZE 32 +// +//analysis options +//maximum length that the CharTokenizer uses. Required. +//By adjusting this value, you can greatly improve the performance of searching +//and especially indexing. Default is 255, but smaller numbers will decrease +//the amount of memory used as well as increasing the speed. +#define LUCENE_MAX_WORD_LEN 255 +//Maximum length of a token word. +//Should be the same or more than LUCENE_MAX_WORD_LEN +//if not defined, then no token limit, but may be slower +//if defined will be faster (up to 15% in some cases), but will use more memory +#ifndef LUCENE_OPTIMIZE_FOR_MEMORY + #define LUCENE_TOKEN_WORD_LENGTH LUCENE_MAX_WORD_LEN +#endif +// +//maximum field length. some optimisation can be done if a maximum field +//length is given... The smaller the better +#define LUCENE_MAX_FIELD_LEN 100 +// +//The initial value set to BooleanQuery::maxClauseCount. Default is 1024 +#define LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT 1024 +// +//bvk: 12.3.2005 +//============================================================================== +//Previously the way the tokenizer has worked has been changed to optionally +//use a a fixed word length. I have implemented this in the Term class as well. +//It seems that by predefining the text length instead of using new TCHAR[x] +//in the constructor greatly improves the performance by 20-30% for certain +//operations. +//Maximum length of a term text. +//Should be the same or more than LUCENE_MAX_WORD_LEN +//if not defined, then no term text limit, but may be slower +//if defined will be faster (up to 30% in some cases), but will use more memory +#ifndef LUCENE_OPTIMIZE_FOR_MEMORY + #define LUCENE_TERM_TEXT_LENGTH LUCENE_MAX_WORD_LEN +#endif +// +//Size of the CharTokenizer buffersize. Required. +#define LUCENE_IO_BUFFER_SIZE 1024 +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// Date conversion settings for DateTools and DateField +//////////////////////////////////////////////////////////////////// +// +// DateField, which is now deprecated, had it's buffer size +// defined for 9 chars. DateTools currently is configured +// for 30 chars, but this needs to be revised after tests +// are written for those. +// +#define DATETOOLS_BUFFER_SIZE 30 +#define DATEFIELD_DATE_LEN DATETOOLS_BUFFER_SIZE +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// FuzzyQuery settings +//////////////////////////////////////////////////////////////////// +// +// This should be somewhere around the average long word. +// If it is longer, we waste time and space. If it is shorter, we waste a +// little bit of time growing the array as we encounter longer words. +// +#define LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX 19 +// +//////////////////////////////////////////////////////////////////// + + +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/CLMonolithic.cpp clucene-core-2.3.3.4/src/core/CLucene/CLMonolithic.cpp --- clucene-core-0.9.21b/src/core/CLucene/CLMonolithic.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/CLMonolithic.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,137 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +/* +* this is a monolithic file that can be used to compile clucene using one source file. +* it simplifies some build processes by avoiding static & dynamic compalation pitfalls. +* +* note: when creating a project add either this file, or all the other .cpp files, not both! +*/ +#include "CLucene/StdHeader.cpp" +#include "CLucene/debug/error.cpp" +#include "CLucene/analysis/Analyzers.cpp" +#include "CLucene/analysis/AnalysisHeader.cpp" +#include "CLucene/analysis/standard/StandardAnalyzer.cpp" +#include "CLucene/analysis/standard/StandardFilter.cpp" +#include "CLucene/analysis/standard/StandardTokenizer.cpp" +#include "CLucene/document/DateField.cpp" +#include "CLucene/document/DateTools.cpp" +#include "CLucene/document/Document.cpp" +#include "CLucene/document/FieldSelector.cpp" +#include "CLucene/document/NumberTools.cpp" +#include "CLucene/document/Field.cpp" +#include "CLucene/index/CompoundFile.cpp" +#include "CLucene/index/DirectoryIndexReader.cpp" +#include "CLucene/index/DocumentsWriter.cpp" +#include "CLucene/index/DocumentsWriterThreadState.cpp" +#include "CLucene/index/FieldInfos.cpp" +#include "CLucene/index/FieldsReader.cpp" +#include "CLucene/index/FieldsWriter.cpp" +#include "CLucene/index/IndexDeletionPolicy.cpp" +#include "CLucene/index/IndexFileDeleter.cpp" +#include "CLucene/index/IndexFileNameFilter.cpp" +#include "CLucene/index/IndexFileNames.cpp" +#include "CLucene/index/IndexModifier.cpp" +#include "CLucene/index/IndexWriter.cpp" +#include "CLucene/index/IndexReader.cpp" +#include "CLucene/index/MergePolicy.cpp" +#include "CLucene/index/MergeScheduler.cpp" +#include "CLucene/index/MultipleTermPositions.cpp" +#include "CLucene/index/MultiReader.cpp" +#include "CLucene/index/MultiSegmentReader.cpp" +#include "CLucene/index/Payload.cpp" +#include "CLucene/index/SegmentInfos.cpp" +#include "CLucene/index/SegmentMergeInfo.cpp" +#include "CLucene/index/SegmentMergeQueue.cpp" +#include "CLucene/index/SegmentMerger.cpp" +#include "CLucene/index/SegmentReader.cpp" +#include "CLucene/index/SegmentTermDocs.cpp" +#include "CLucene/index/SegmentTermEnum.cpp" +#include "CLucene/index/SegmentTermPositions.cpp" +#include "CLucene/index/SegmentTermVector.cpp" +#include "CLucene/index/SkipListReader.cpp" +#include "CLucene/index/SkipListWriter.cpp" +#include "CLucene/index/Term.cpp" +#include "CLucene/index/Terms.cpp" +#include "CLucene/index/TermInfo.cpp" +#include "CLucene/index/TermInfosReader.cpp" +#include "CLucene/index/TermInfosWriter.cpp" +#include "CLucene/index/TermVectorReader.cpp" +#include "CLucene/index/TermVectorWriter.cpp" +#include "CLucene/queryParser/FastCharStream.cpp" +#include "CLucene/queryParser/QueryParserTokenManager.cpp" +#include "CLucene/queryParser/MultiFieldQueryParser.cpp" +#include "CLucene/queryParser/QueryParser.cpp" +#include "CLucene/queryParser/QueryToken.cpp" +#include "CLucene/search/BooleanQuery.cpp" +#include "CLucene/search/BooleanScorer.cpp" +#include "CLucene/search/BooleanScorer2.cpp" +#include "CLucene/search/CachingWrapperFilter.cpp" +#include "CLucene/search/ChainedFilter.cpp" +#include "CLucene/search/Compare.cpp" +#include "CLucene/search/ConstantScoreQuery.cpp" +#include "CLucene/search/DateFilter.cpp" +#include "CLucene/search/ConjunctionScorer.cpp" +#include "CLucene/search/DisjunctionSumScorer.cpp" +#include "CLucene/search/ExactPhraseScorer.cpp" +#include "CLucene/search/Explanation.cpp" +#include "CLucene/search/FieldCache.cpp" +#include "CLucene/search/FieldCacheImpl.cpp" +#include "CLucene/search/FieldDocSortedHitQueue.cpp" +#include "CLucene/search/FieldSortedHitQueue.cpp" +#include "CLucene/search/FilteredTermEnum.cpp" +#include "CLucene/search/FuzzyQuery.cpp" +#include "CLucene/search/Hits.cpp" +#include "CLucene/search/HitQueue.cpp" +#include "CLucene/search/IndexSearcher.cpp" +#include "CLucene/search/MatchAllDocsQuery.cpp" +#include "CLucene/search/MultiPhraseQuery.cpp" +#include "CLucene/search/MultiSearcher.cpp" +#include "CLucene/search/MultiTermQuery.cpp" +#include "CLucene/search/PhrasePositions.cpp" +#include "CLucene/search/PhraseQuery.cpp" +#include "CLucene/search/PhraseScorer.cpp" +#include "CLucene/search/PrefixQuery.cpp" +#include "CLucene/search/QueryFilter.cpp" +#include "CLucene/search/RangeQuery.cpp" +#include "CLucene/search/RangeFilter.cpp" +#include "CLucene/search/SearchHeader.cpp" +#include "CLucene/search/Similarity.cpp" +#include "CLucene/search/SloppyPhraseScorer.cpp" +#include "CLucene/search/Scorer.cpp" +#include "CLucene/search/ScorerDocQueue.cpp" +#include "CLucene/search/Sort.cpp" +#include "CLucene/search/TermQuery.cpp" +#include "CLucene/search/TermScorer.cpp" +#include "CLucene/search/WildcardQuery.cpp" +#include "CLucene/search/WildcardTermEnum.cpp" +#include "CLucene/search/spans/NearSpansOrdered.cpp" +#include "CLucene/search/spans/NearSpansUnordered.cpp" +#include "CLucene/search/spans/SpanFirstQuery.cpp" +#include "CLucene/search/spans/SpanNearQuery.cpp" +#include "CLucene/search/spans/SpanNotQuery.cpp" +#include "CLucene/search/spans/SpanOrQuery.cpp" +#include "CLucene/search/spans/SpanScorer.cpp" +#include "CLucene/search/spans/SpanTermQuery.cpp" +#include "CLucene/search/spans/SpanWeight.cpp" +#include "CLucene/search/spans/TermSpans.cpp" +#include "CLucene/store/FSDirectory.cpp" +#include "CLucene/store/IndexInput.cpp" +#include "CLucene/store/Lock.cpp" +#include "CLucene/store/LockFactory.cpp" +#include "CLucene/store/MMapInput.cpp" +#include "CLucene/store/IndexOutput.cpp" +#include "CLucene/store/Directory.cpp" +#include "CLucene/store/RAMDirectory.cpp" +#include "CLucene/util/BitSet.cpp" +#include "CLucene/util/Equators.cpp" +#include "CLucene/util/FastCharStream.cpp" +#include "CLucene/util/MD5Digester.cpp" +#include "CLucene/util/Reader.cpp" +#include "CLucene/util/StringIntern.cpp" +#include "CLucene/util/ThreadLocal.cpp" + +#include "CLucene/CLSharedMonolithic.cpp" diff -Nru clucene-core-0.9.21b/src/core/CLucene/debug/error.cpp clucene-core-2.3.3.4/src/core/CLucene/debug/error.cpp --- clucene-core-0.9.21b/src/core/CLucene/debug/error.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/debug/error.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,108 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_SharedHeader.h" +#include "error.h" +#include "CLucene/util/Misc.h" +CL_NS_USE(util) + + +#ifdef _LUCENE_DISABLE_EXCEPTIONS + #ifdef _LUCENE_PRAGMA_WARNINGS + #pragma message ("==================Lucene exceptions are disabled==================") + #else + #warning "==================Lucene exceptions are disabled==================" + #endif +#else + CLuceneError::CLuceneError():_twhat(NULL),error_number(0){ +#ifndef _ASCII + _awhat = NULL; +#endif + } + CLuceneError::CLuceneError(int num, const char* str, bool ownstr):error_number(num) + { +#ifdef _ASCII + _twhat=STRDUP_AtoA(str); + +#else + _awhat=STRDUP_AtoA(str); + _twhat=NULL; +#endif + if ( ownstr ) + _CLDELETE_LCaARRAY( const_cast(str)); + } + +#ifndef _ASCII + CLuceneError::CLuceneError(int num, const TCHAR* str, bool ownstr) + { + error_number = num; + _awhat=NULL; + _twhat=STRDUP_TtoT(str); + if ( ownstr ) + _CLDELETE_LCARRAY((TCHAR*)str); + } +#endif + + CLuceneError::CLuceneError(const CLuceneError& clone) + { + this->error_number = clone.error_number; +#ifndef _ASCII + this->_awhat = NULL; + if ( clone._awhat != NULL ) + this->_awhat = STRDUP_AtoA(clone._awhat); +#endif + this->_twhat = NULL; + if ( clone._twhat != NULL ) + this->_twhat = STRDUP_TtoT(clone._twhat); + } + CLuceneError::~CLuceneError() throw(){ + _CLDELETE_LCARRAY(_twhat); +#ifndef _ASCII + _CLDELETE_LCaARRAY(_awhat); +#endif + } + char* CLuceneError::what(){ +#ifdef _ASCII + return _twhat; +#else + if ( _awhat == NULL ) + _awhat = STRDUP_TtoA(_twhat); + return _awhat; +#endif + } + TCHAR* CLuceneError::twhat(){ +#ifdef _ASCII + return _twhat; +#else + if ( _twhat == NULL ) + _twhat = STRDUP_AtoT(_awhat); + return _twhat; +#endif + } + +#ifndef _ASCII + void CLuceneError::set(int num, const char* str, bool ownstr){ + _CLDELETE_CARRAY(_twhat); + _CLDELETE_CaARRAY(_awhat); + _awhat=STRDUP_AtoA(str); + error_number = num; + if ( ownstr ) + _CLDELETE_LCaARRAY( const_cast(str)); + } +#endif + + void CLuceneError::set(int num, const TCHAR* str, bool ownstr){ +#ifndef _ASCII + _CLDELETE_CaARRAY(_awhat); +#endif + _CLDELETE_CARRAY(_twhat); + _twhat=STRDUP_TtoT(str); + error_number = num; + if ( ownstr ) + _CLDELETE_LCARRAY(const_cast(str)); + } + +#endif //_LUCENE_DISABLE_EXCEPTIONS diff -Nru clucene-core-0.9.21b/src/core/CLucene/debug/error.h clucene-core-2.3.3.4/src/core/CLucene/debug/error.h --- clucene-core-0.9.21b/src/core/CLucene/debug/error.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/debug/error.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,104 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_debug_error_ +#define _lucene_debug_error_ + + +#define CL_ERR_UNKNOWN -1 +#define CL_ERR_IO 1 +#define CL_ERR_NullPointer 2 +#define CL_ERR_Runtime 3 +#define CL_ERR_IllegalArgument 4 +#define CL_ERR_Parse 5 +#define CL_ERR_TokenMgr 6 +#define CL_ERR_UnsupportedOperation 7 +#define CL_ERR_InvalidState 8 +#define CL_ERR_IndexOutOfBounds 9 +#define CL_ERR_TooManyClauses 10 +#define CL_ERR_RAMTransaction 11 +#define CL_ERR_InvalidCast 12 +#define CL_ERR_IllegalState 13 // Sub-error: AlreadyClosed +#define CL_ERR_UnknownOperator 14 +#define CL_ERR_ConcurrentModification 15 +#define CL_ERR_CorruptIndex 16 +#define CL_ERR_NumberFormat 17 +#define CL_ERR_AlreadyClosed 18 +#define CL_ERR_StaleReader 19 +#define CL_ERR_LockObtainFailed 20 +#define CL_ERR_Merge 21 //< Exception thrown if there are any problems while executing a merge. +#define CL_ERR_MergeAborted 22 +#define CL_ERR_OutOfMemory 23 +#define CL_ERR_FieldReader 24 + +//////////////////////////////////////////////////////// +//error try/throw/catch definitions +//////////////////////////////////////////////////////// +#ifdef _CL_DISABLE_NATIVE_EXCEPTIONS + #include + + /* + #define try struct pj_exception_state_t pj_x_except__; int pj_x_code__; \ + if(1){ \ + pj_push_exception_handler_(&pj_x_except__); \ + pj_x_code__ = pj_setjmp(pj_x_except__.state); \ + if (pj_x_code__ == 0) + #define _CLCATCHEND pj_pop_exception_handler_(); \ + } else {} + #define _CLCATCH else if (pj_x_code__ == (id)) _CLCATCHEND + #define _CLCATCHANY else _CLCATCHEND + #define _RETHROW pj_throw_exception_(pj_x_code__) + + #define _CLFINALLY(x) else{x _RETHROW}_CLCATCHEND x + #define _CLTHROWA(number) pj_throw_exception_(number) + #define _CLTHROWT(number) pj_throw_exception_(number) + #define _THROWA_DEL(number) _CLDELETE_CaARRAY(str); pj_throw_exception_(number) + #define _THROWT_DEL(number) _CLDELETE_CARRAY(str); pj_throw_exception_(number) + + */ +#else +class CLUCENE_EXPORT CLuceneError +{ +#ifndef _ASCII + char* _awhat; +#endif + TCHAR* _twhat; + int error_number; +public: + CLuceneError(); + CLuceneError(const CLuceneError& clone); +#ifndef _ASCII + CLuceneError(int num, const char* str, bool ownstr); +#endif + CLuceneError(int num, const TCHAR* str, bool ownstr); + int number() const{return error_number;} + char* what(); + TCHAR* twhat(); + ~CLuceneError() throw(); + + void set(int num, const TCHAR*, bool ownstr=false); +#ifndef _ASCII + void set(int num, const char*, bool ownstr=false); +#endif +}; + + //#define _THROWS //does nothing + #define _TRY try + #define _CLCATCH_ERR(err_num, cleanup_code, else_code) catch(CLuceneError& err){if (err.number()!=err_num){cleanup_code;throw err;}else {else_code;}} + #define _CLCATCH_ERR_ELSE(err_num, else_code) catch(CLuceneError& err){if (err.number()!=err_num){throw err;}else {else_code;}} + #define _CLCATCH_ERR_CLEANUP(err_num, cleanup_code) catch(CLuceneError& err){if (err.number()!=err_num){cleanup_code;throw err;}} + #define _CLFINALLY(x) catch(...){ x; throw; } x //note: code x is not run if return is called + #define _CLTHROWA(number, str) throw CLuceneError(number, str,false) + #define _CLTHROWT(number, str) throw CLuceneError(number, str,false) + #define _CLTHROWA_DEL(number, str) throw CLuceneError(number, str,true) //throw a string ensures the value is deleted + #define _CLTHROWT_DEL(number, str) throw CLuceneError(number, str,true) //throw a string ensures the value is deleted + + +#endif //_LUCENE_DISABLE_EXCEPTIONS +// +//////////////////////////////////////////////////////// + +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/debug/lucenebase.h clucene-core-2.3.3.4/src/core/CLucene/debug/lucenebase.h --- clucene-core-0.9.21b/src/core/CLucene/debug/lucenebase.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/debug/lucenebase.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,44 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_debug_lucenebase_ +#define _lucene_debug_lucenebase_ + +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(debug) + +//Lucenebase is the superclass of all clucene objects. It provides +//memory debugging tracking and/or reference counting +class CLUCENE_EXPORT LuceneBase{ +public: + _LUCENE_ATOMIC_INT __cl_refcount; + LuceneBase(){ + _LUCENE_ATOMIC_INT_SET(__cl_refcount,1); + } + inline int __cl_getref(){ + return _LUCENE_ATOMIC_INT_GET(__cl_refcount); + } + inline int __cl_addref(){ return _LUCENE_ATOMIC_INC(&__cl_refcount); } + inline int __cl_decref(){ return _LUCENE_ATOMIC_DEC(&__cl_refcount); } + virtual ~LuceneBase(){}; +}; + +class CLUCENE_EXPORT LuceneVoidBase{ + public: + virtual ~LuceneVoidBase(){}; +}; + +#if defined(LUCENE_ENABLE_REFCOUNT) + #define LUCENE_BASE public CL_NS(debug)::LuceneBase +#else + #define LUCENE_BASE public CL_NS(debug)::LuceneVoidBase +#endif +#define LUCENE_REFBASE public CL_NS(debug)::LuceneBase //this is the base of classes who *always* need refcounting + + +CL_NS_END +#endif //_lucene_debug_lucenebase_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/debug/mem.h clucene-core-2.3.3.4/src/core/CLucene/debug/mem.h --- clucene-core-0.9.21b/src/core/CLucene/debug/mem.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/debug/mem.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,64 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_debug_mem_h +#define _lucene_debug_mem_h + +//todo: this is a hack... +#ifndef CND_PRECONDITION + #include + #define CND_PRECONDITION(x,y) assert(x) +#endif + +//Macro for creating new objects +#if defined(LUCENE_ENABLE_REFCOUNT) + #define _CLNEW new +#else + #define _CLNEW new +#endif +#define _CL_POINTER(x) (x==NULL?NULL:(x->__cl_addref()>=0?x:x)) //return a add-ref'd object +#define _CL_DECREF(x) ((x)==NULL?NULL:((x)->__cl_decref()>=0?(x):(x))) //return a add-ref'd object +#define _CL_LDECREF(x) if ((x)!=NULL) (x)->__cl_decref(); + +//Macro for creating new arrays +#define _CL_NEWARRAY(type,size) (type*)calloc(size, sizeof(type)) +#define _CLDELETE_ARRAY(x) {free(x); x=NULL;} +#define _CLDELETE_LARRAY(x) {free(x);} +#ifndef _CLDELETE_CARRAY + #define _CLDELETE_CARRAY(x) {free(x); x=NULL;} + #define _CLDELETE_LCARRAY(x) {free(x);} +#endif + +//a shortcut for deleting a carray and all its contents +#define _CLDELETE_CARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_CARRAY(x[xcda]);}_CLDELETE_ARRAY(x)}; +#define _CLDELETE_LCARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_LCARRAY(x[xcda]);}_CLDELETE_LARRAY(x)}; +#define _CLDELETE_CaARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_CaARRAY(x[xcda]);}_CLDELETE_ARRAY(x)}; +#define _CLDELETE_ARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE(x[xcda]);}_CLDELETE_ARRAY(x)}; +#ifndef _CLDELETE_CaARRAY + #define _CLDELETE_CaARRAY _CLDELETE_CARRAY + #define _CLDELETE_LCaARRAY _CLDELETE_LCARRAY +#endif + +//Macro for deleting +#ifdef LUCENE_ENABLE_REFCOUNT + #define _CLDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); if (_LUCENE_ATOMIC_INT_GET((x)->__cl_decref()) <= 0)delete x; x=NULL; } + #define _CLLDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; } +#else + #define _CLDELETE(x) {delete x;x=NULL;} + #define _CLLDELETE(x) {delete x;} +#endif + +//_CLDECDELETE deletes objects which are *always* refcounted +#define _CLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); _LUCENE_ATOMIC_DECDELETE(&(x)->__cl_refcount, x); x=NULL; } +#define _CLLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); _LUCENE_ATOMIC_DECDELETE(&(x)->__cl_refcount, x); } +#define _LUCENE_ATOMIC_DECDELETE(theInteger, theObject) { if ( _LUCENE_ATOMIC_DEC(theInteger) == 0) delete theObject;} + +//_VDelete should be used for deleting non-clucene objects. +//when using reference counting, _CLDELETE casts the object +//into a LuceneBase*. +#define _CLVDELETE(x) {delete x;x=NULL;} + +#endif //_lucene_debug_mem_h diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/DateField.cpp clucene-core-2.3.3.4/src/core/CLucene/document/DateField.cpp --- clucene-core-0.9.21b/src/core/CLucene/document/DateField.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/DateField.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,61 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "DateField.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +DateField::~DateField(){ +} + +TCHAR* DateField::timeToString(const int64_t time) { + TCHAR* buf = _CL_NEWARRAY(TCHAR,DATEFIELD_DATE_LEN + 1); + timeToString(time,buf); + return buf; +} +void DateField::timeToString(const int64_t time, TCHAR* buf) { + CND_PRECONDITION (buf, "buf == NULL"); + *buf = '\0'; + if (time < 0) + _CLTHROWA (CL_ERR_IllegalArgument,"time too early"); //todo: make richer error + + if (time > DATEFIELD_DATE_MAX) + _CLTHROWA (CL_ERR_IllegalArgument, "time too late (past DATEFIELD_DATE_MAX"); //todo: make richer error + + _i64tot(time, buf, 36); + int32_t bufLen = _tcslen(buf); + + CND_PRECONDITION (bufLen <= DATEFIELD_DATE_LEN, "timeToString length is greater than 9"); + + /* Supply leading zeroes if necessary. */ + if (bufLen < DATEFIELD_DATE_LEN) { + const int32_t nMissingZeroes = DATEFIELD_DATE_LEN - bufLen; + /* Move buffer contents forward to make room for leading zeroes. */ + for (int32_t i = DATEFIELD_DATE_LEN - 1; i >= nMissingZeroes; i--) + buf[i] = buf[i - nMissingZeroes]; + + /* Insert leading zeroes. */ + {// MSVC6 scoping fix + for (int32_t i = 0; i < nMissingZeroes; i++) + buf[i] = '0'; + } + + buf[DATEFIELD_DATE_LEN] = 0; + } + + CND_PRECONDITION (_tcslen(buf) == DATEFIELD_DATE_LEN, "timeToString return is not equal to DATEFIELD_DATE_LEN"); +} + +int64_t DateField::stringToTime(const TCHAR* time) { + TCHAR* end; + return _tcstoi64(time, &end, 36); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/DateField.h clucene-core-2.3.3.4/src/core/CLucene/document/DateField.h --- clucene-core-0.9.21b/src/core/CLucene/document/DateField.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/DateField.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,59 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_document_DateField_ +#define _lucene_document_DateField_ + + +CL_NS_DEF(document) + +//here are some constants used throughout clucene +//make date strings long enough to last a millenium +#define DATEFIELD_DATE_MAX _ILONGLONG(31536000000000) //1000L*365*24*60*60*1000 + +/** +* Provides support for converting dates to strings and vice-versa. +* The strings are structured so that lexicographic sorting orders by date, +* which makes them suitable for use as field values and search terms. +* +*

Note that this class saves dates with millisecond granularity, +* which is bad for {@link lucene::search::RangeQuery} and {@link lucene::search::PrefixQuery}, as those +* queries are expanded to a BooleanQuery with a potentially large number +* of terms when searching. Thus you might want to use +* {@link lucene::document::DateTools} instead. +* +*

+* Note: dates before 1970 cannot be used, and therefore cannot be +* indexed when using this class. See {@link lucene::document::DateTools} for an +* alternative without such a limitation. +* +* @deprecated If you build a new index, use {@link lucene::document::DateTools} instead. +* This class is included for use with existing indices and will be removed in a future release. +*/ +class CLUCENE_EXPORT DateField { +public: + virtual ~DateField(); + + /** + * Converts a millisecond time to a string suitable for indexing. + * @throws RuntimeException if the time specified in the + * method argument is negative, that is, before 1970 + */ + _CL_DEPRECATED( DateTools ) static TCHAR* timeToString(const int64_t time); + + /** + * Converts a millisecond time to a string suitable for indexing. + * @throws CL_ERR_IllegalArgument if the time specified in the + * method argument is negative, that is, before 1970 + * @param str must be a character array DATEFIELD_DATE_LEN+1 or longer + */ + _CL_DEPRECATED( DateTools ) static void timeToString(const int64_t time, TCHAR* str); + + /** Converts a string-encoded date into a millisecond time. */ + _CL_DEPRECATED( DateTools ) static int64_t stringToTime(const TCHAR* s); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/DateTools.cpp clucene-core-2.3.3.4/src/core/CLucene/document/DateTools.cpp --- clucene-core-0.9.21b/src/core/CLucene/document/DateTools.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/DateTools.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,272 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "DateTools.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +TCHAR* DateTools::timeToString(const int64_t time, Resolution resolution /*= MILLISECOND_FORMAT*/) { + TCHAR* buf = _CL_NEWARRAY(TCHAR, DATETOOLS_BUFFER_SIZE); + timeToString(time, resolution, buf, DATETOOLS_BUFFER_SIZE); + return buf; +} + +void DateTools::timeToString(const int64_t time, Resolution resolution, TCHAR* buf, size_t bufLength) +{ + // Take into account TZ and DST differences which may appear when using gmtime below + const int64_t diff_secs = getDifferenceFromGMT(); + time_t secs = time / 1000 + diff_secs; + tm *ptm = gmtime(&secs); + + char abuf[DATETOOLS_BUFFER_SIZE]; + + if (resolution == MILLISECOND_FORMAT) { + size_t len = strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M%S", ptm); + uint32_t ms = static_cast(time % 1000); + _snprintf(abuf + len, 4, "%03u", ms); + } else if (resolution == SECOND_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M%S", ptm); + } else if (resolution == MINUTE_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M", ptm); + } else if (resolution == YEAR_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y", ptm); + } else if (resolution == MONTH_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m", ptm); + } else if (resolution == DAY_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d", ptm); + } else if (resolution == HOUR_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H", ptm); + } + + STRCPY_AtoT(buf,abuf, bufLength); +} + +tm* DateTools::stringToDate(const TCHAR* dateString){ + const int64_t time = stringToTime(dateString); + time_t secs = time / 1000; + tm *ptm = gmtime(&secs); + return ptm; +} + +int64_t DateTools::stringToTime(const TCHAR* dateString) { + tm s_time; + memset(&s_time, 0, sizeof (s_time)); + s_time.tm_mday = 1; + int32_t ms = 0; + + switch (_tcslen(dateString)) { + case 4: // YEAR_FORMAT + { + s_time.tm_year = _ttoi(dateString) - 1900; + if (s_time.tm_year == -1900) + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + break; + } + case 6: // MONTH_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 8: // DAY_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 10: // HOUR_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 12: // MINUTE_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 14: // SECOND_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_sec = _ttoi(&tmpDate[12]); + tmpDate[12] = 0; + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 17: // MILLISECOND_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + ms = _ttoi(&tmpDate[14]); + tmpDate[14] = 0; + s_time.tm_sec = _ttoi(&tmpDate[12]); + tmpDate[12] = 0; + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + default: + { + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + break; + } + } + + time_t t = mktime(&s_time); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + + // Get TZ difference in seconds, and calc it in + const int64_t diff_secs = getDifferenceFromGMT(); + + return (static_cast(t + diff_secs) * 1000) + ms; +} + +int64_t DateTools::getDifferenceFromGMT() +{ + struct tm *tptr; + time_t secs, local_secs, gmt_secs; + time( &secs ); // Current time in GMT + tptr = localtime( &secs ); + local_secs = mktime( tptr ); + tptr = gmtime( &secs ); + gmt_secs = mktime( tptr ); + return int64_t(local_secs - gmt_secs); +} + +int64_t DateTools::timeMakeInclusive(const int64_t time) +{ + time_t secs = time / 1000; + tm *ptm = localtime(&secs); // use localtime since mktime below will convert the time to GMT before returning + ptm->tm_hour = 23; + ptm->tm_min = 59; + ptm->tm_sec = 59; + + time_t t = mktime(ptm); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not a valid date"); + + return (static_cast(t) * 1000) + 999; +} + +int64_t DateTools::getTime(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours, + uint8_t minutes, uint8_t seconds, unsigned short ms) +{ + struct tm* s_time; + + // get current time, and then change it according to the parameters + time_t rawtime; + time ( &rawtime ); + s_time = localtime ( &rawtime ); // use localtime, since mktime will take into account TZ differences + s_time->tm_isdst = 0; // since we are using gmtime all around, make sure DST is off + + s_time->tm_year = year - 1900; + s_time->tm_mon = month - 1; + s_time->tm_mday = mday; + s_time->tm_hour = hours; + s_time->tm_min = minutes; + s_time->tm_sec = seconds; + + time_t t = mktime(s_time); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not a valid date"); + + return (static_cast(t) * 1000) + ms; +} + +TCHAR* DateTools::getISOFormat(const int64_t time){ + const time_t secs = time / 1000; + const int64_t ms = abs((int32_t)((secs * 1000) - time)); + tm *ptm = gmtime(&secs); + return getISOFormat(ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, + ptm->tm_sec, ms); +} + +void DateTools::strCatDate(TCHAR* buf, int zeroes, int value){ + TCHAR str[10]; + _i64tot(value, str, 10); + size_t l = _tcslen(str); + + TCHAR* p = buf; + for ( size_t i=0;i<(zeroes-l);i++ ){ + *p = _T('0'); + p++; + } + _tcscat(p, str); + p+=l; + *p = _T('\0'); +} +TCHAR* DateTools::getISOFormat(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours, + uint8_t minutes, uint8_t seconds, unsigned short ms) +{ + TCHAR* ISOString = _CL_NEWARRAY(TCHAR, 24); + TCHAR* p = ISOString; + strCatDate(p, 4, year); p+=4; + _tcscat(p, _T("-")); p++; + strCatDate(p, 2, month); p+=2; + _tcscat(p, _T("-")); p++; + strCatDate(p, 2, mday); p+=2; + _tcscat(p, _T(" ")); p++; + strCatDate(p, 2, hours); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 2, minutes); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 2, seconds); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 3, ms); p+=3; + + return ISOString; +} + +DateTools::~DateTools(){ +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/DateTools.h clucene-core-2.3.3.4/src/core/CLucene/document/DateTools.h --- clucene-core-0.9.21b/src/core/CLucene/document/DateTools.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/DateTools.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,96 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_document_DateTools_ +#define _lucene_document_DateTools_ + +#ifdef _CL_TIME_WITH_SYS_TIME +# include +# include +#else +# if defined(_CL_HAVE_SYS_TIME_H) +# include +# else +# include +# endif +#endif + +#ifdef _CL_HAVE_SYS_TIMEB_H +# include +#endif + +CL_NS_DEF(document) + +class CLUCENE_EXPORT DateTools { +private: + static void strCatDate(TCHAR* buf, int zeroes, int value); +public: + + enum Resolution { + NO_RESOLUTION, + YEAR_FORMAT, // yyyy + MONTH_FORMAT, // yyyyMM + DAY_FORMAT, // yyyyMMdd + HOUR_FORMAT, // yyyyMMddHH + MINUTE_FORMAT, // yyyyMMddHHmm + SECOND_FORMAT, // yyyyMMddHHmmss + MILLISECOND_FORMAT // yyyyMMddHHmmssSSS + }; + + /** + * Converts a millisecond time to a string suitable for indexing. + * + * @param time the date expressed as milliseconds since January 1, 1970, 00:00:00 GMT + * @param resolution the desired resolution, see {@link #Resolution} + * @return a string in format yyyyMMddHHmmssSSS or shorter, + * depeding on resolution; using UTC as timezone + */ + static TCHAR* timeToString(const int64_t time, Resolution resolution = MILLISECOND_FORMAT); + + static void timeToString(const int64_t time, Resolution resolution, TCHAR* buf, size_t bufLength); + + /** + * Converts a string produced by timeToString or + * dateToString back to a time, represented as the + * number of milliseconds since January 1, 1970, 00:00:00 GMT. + * + * @param dateString the date string to be converted + * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT + * @throws ParseException if dateString is not in the + * expected format + */ + static int64_t stringToTime(const TCHAR* dateString); + + static tm* stringToDate(const TCHAR* dateString); + + /**** + + * CLucene specific methods + + *****/ + + /** + * Returns a 64bit time value based on the parameters passed + */ + static int64_t getTime(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours = 0, + uint8_t minutes = 0, uint8_t seconds = 0, unsigned short ms = 0); + + /** + * Returns a 64bit time value which is inclusive of the whole last day. + */ + static int64_t timeMakeInclusive(const int64_t time); + + inline static int64_t getDifferenceFromGMT(); + + static TCHAR* getISOFormat(const int64_t time); + static TCHAR* getISOFormat(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours = 0, + uint8_t minutes = 0, uint8_t seconds = 0, unsigned short ms = 0); + + virtual ~DateTools(); + +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/Document.cpp clucene-core-2.3.3.4/src/core/CLucene/document/Document.cpp --- clucene-core-0.9.21b/src/core/CLucene/document/Document.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/Document.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,183 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Document.h" +#include "Field.h" +#include "CLucene/util/StringBuffer.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(document) + + + struct DocumentFieldEnumeration::Internal { + Document::FieldsType::iterator itr; + Document::FieldsType::iterator end; + }; + DocumentFieldEnumeration::DocumentFieldEnumeration(Document::FieldsType::iterator itr, Document::FieldsType::iterator end){ + this->_internal = new DocumentFieldEnumeration::Internal; + this->_internal->itr = itr; + this->_internal->end = end; + } + + bool DocumentFieldEnumeration::hasMoreElements() const { + return _internal->itr != _internal->end; + } + + Field* DocumentFieldEnumeration::nextElement() { + //Func - Return the next element in the enumeration + //Pre - true + //Post - The next element is returned or NULL + + Field* result = NULL; + if ( _internal->itr != _internal->end ){ + result = *_internal->itr; + _internal->itr++; + } + return result; + } + + DocumentFieldEnumeration::~DocumentFieldEnumeration(){ + //Func - Destructor + //Pre - true + //Post - Instance has been destroyed + delete _internal; + } + DocumentFieldEnumeration* Document::fields() { + return _CLNEW DocumentFieldEnumeration(_fields->begin(), _fields->end()); + } + + /** Constructs a new document with no fields-> */ + Document::Document(): + _fields(_CLNEW FieldsType(true) ) + { + //Func - Constructor + //Pre - true + //Post - Instance has been created + boost = 1.0f; + } + + Document::~Document(){ + //Func - Destructor + //Pre - true + //Post - Instance has been destroyed + boost = 1.0f; + _CLDELETE(_fields); + } + + void Document::clear(){ + _fields->clear(); + } + + void Document::add(Field& field) { + _fields->push_back(&field); + } + + void Document::setBoost(const float_t boost) { + this->boost = boost; + } + + float_t Document::getBoost() const { + return boost; + } + + + Field* Document::getField(const TCHAR* name) const{ + CND_PRECONDITION(name != NULL, "name is NULL"); + for ( FieldsType::const_iterator itr = _fields->begin(); + itr != _fields->end(); itr ++ ){ + if ( _tcscmp( (*itr)->name(),name)==0 ) + return *itr; + } + return NULL; + } + const TCHAR* Document::get(const TCHAR* field) const { + CND_PRECONDITION(field != NULL, "field is NULL"); + Field* f = getField(field); + if (f!=NULL) + return f->stringValue(); //this returns null it is a binary(reader) + else + return NULL; + } + + const Document::FieldsType* Document::getFields() const { + return _fields; + } + + + TCHAR* Document::toString() const { + StringBuffer ret(_T("Document<")); + for (FieldsType::const_iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ) { + TCHAR* tmp = (*itr)->toString(); + if ( ret.len > 0 ) + ret.append(_T(" ")); + ret.append( tmp ); + _CLDELETE_ARRAY( tmp ); + } + ret.append(_T(">")); + return ret.toString(); + } + + + + void Document::removeField(const TCHAR* name) { + CND_PRECONDITION(name != NULL, "name is NULL"); + + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + + if ( _tcscmp( (*itr)->name(), name) == 0 ){ + _fields->remove(itr); + return; + } + } + } + + void Document::removeFields(const TCHAR* name) { + CND_PRECONDITION(name != NULL, "name is NULL"); + bool flag = true; + //TODO: make this more efficient + while(flag){ + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + if ( _tcscmp( (*itr)->name(), name) == 0 ){ + _fields->remove(itr); + flag = false; //no modifications allowed on an iterator + break; + } + } + flag = !flag; + } + } + + TCHAR** Document::getValues(const TCHAR* name) { + int count = 0; + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + if ( _tcscmp( (*itr)->name(),name) == 0 && (*itr)->stringValue() != NULL ) + count++; + } + + //todo: there must be a better way of doing this, we are doing two iterations of the fields + TCHAR** ret = NULL; + if ( count > 0 ){ + ret = _CL_NEWARRAY(TCHAR*,count+1); + int32_t i=0; + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + + if ( _tcscmp( (*itr)->name(),name) == 0 && (*itr)->stringValue() != NULL ){ + ret[i] = stringDuplicate((*itr)->stringValue()); + i++; + } + } + ret[count]=NULL; + } + return ret; + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/Document.h clucene-core-2.3.3.4/src/core/CLucene/document/Document.h --- clucene-core-0.9.21b/src/core/CLucene/document/Document.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/Document.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,178 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_document_Document_ +#define _lucene_document_Document_ + +#include "CLucene/util/VoidList.h" +#include "Field.h" + +///todo: jlucene has change from using DocumentFieldList/Enumeration +///to using a java List... do we want to do this too? +CL_NS_DEF(document) + +class DocumentFieldEnumeration; + +/** Documents are the unit of indexing and search. +* +* A Document is a set of fields. Each field has a name and a textual value. +* A field may be {@link Field#isStored() stored} with the document, in which +* case it is returned with search hits on the document. Thus each document +* should typically contain one or more stored fields which uniquely identify +* it. +* +*

Note that fields which are not {@link Field#isStored() stored} are +* not available in documents retrieved from the index, e.g. with {@link +* Hits#doc(int32_t, Document*)}, {@link Searcher#doc(int32_t, Document*)} or {@link +* IndexReader#document(int32_t, Document*)}. +*/ +class CLUCENE_EXPORT Document:LUCENE_BASE { +public: + typedef CL_NS(util)::CLArrayList > FieldsType; +private: + FieldsType* _fields; + float_t boost; +public: + /** Constructs a new document with no fields. */ + Document(); + + ~Document(); + + /** Sets a boost factor for hits on any field of this document. This value + * will be multiplied into the score of all hits on this document. + * + *

The default value is 1.0. + * + *

Values are multiplied into the value of {@link Field#getBoost()} of + * each field in this document. Thus, this method in effect sets a default + * boost for the fields of this document. + * + * @see Field#setBoost(float_t) + */ + void setBoost(const float_t boost); + + /** Returns, at indexing time, the boost factor as set by {@link #setBoost(float_t)}. + * + *

Note that once a document is indexed this value is no longer available + * from the index. At search time, for retrieved documents, this method always + * returns 1. This however does not mean that the boost value set at indexing + * time was ignored - it was just combined with other indexing time factors and + * stored elsewhere, for better indexing and search performance. (For more + * information see the "norm(t,d)" part of the scoring formula in + * {@link Similarity}.) + * + * @see #setBoost(float_t) + */ + float_t getBoost() const; + + /** + *

Adds a field to a document. Several fields may be added with + * the same name. In this case, if the fields are indexed, their text is + * treated as though appended for the purposes of search.

+ *

Note that add like the removeField(s) methods only makes sense + * prior to adding a document to an index. These methods cannot + * be used to change the content of an existing index! In order to achieve this, + * a document has to be deleted from an index and a new changed version of that + * document has to be added.

+ * + */ + void add(Field& field); + + /** + *

Removes field with the specified name from the document. + * If multiple fields exist with this name, this method removes the first field that has been added. + * If there is no field with the specified name, the document remains unchanged.

+ *

Note that the removeField(s) methods like the add method only make sense + * prior to adding a document to an index. These methods cannot + * be used to change the content of an existing index! In order to achieve this, + * a document has to be deleted from an index and a new changed version of that + * document has to be added.

+ * Note: name is case sensitive + */ + void removeField(const TCHAR* name); + + /** + *

Removes all fields with the given name from the document. + * If there is no field with the specified name, the document remains unchanged.

+ *

Note that the removeField(s) methods like the add method only make sense + * prior to adding a document to an index. These methods cannot + * be used to change the content of an existing index! In order to achieve this, + * a document has to be deleted from an index and a new changed version of that + * document has to be added.

+ * Note: name is case sensitive + */ + void removeFields(const TCHAR* name); + + /** Returns a field with the given name if any exist in this document, or + * null. If multiple fields exists with this name, this method returns the + * first value added. + * Note: name is case sensitive + * Do not use this method with lazy loaded fields. + */ + Field* getField(const TCHAR* name) const; + + /** Returns the string value of the field with the given name if any exist in + * this document, or null. If multiple fields exist with this name, this + * method returns the first value added. If only binary fields with this name + * exist, returns null. + * Note: name is case sensitive + */ + const TCHAR* get(const TCHAR* field) const; + + /** Returns an Enumeration of all the fields in a document. + * @deprecated use {@link #getFields()} instead + */ + _CL_DEPRECATED( getFields() ) DocumentFieldEnumeration* fields(); + + /** Returns a List of all the fields in a document. + *

Note that fields which are not {@link Field#isStored() stored} are + * not available in documents retrieved from the index, e.g. with {@link + * Hits#doc(int)}, {@link Searcher#doc(int)} or {@link IndexReader#document(int)}. + */ + const FieldsType* getFields() const; + + /** + * Returns an array of {@link Field}s with the given name. + * This method can return null. + * + * @param name the name of the field + * @return a Field[] array or null + */ + void getFields(const TCHAR* name, std::vector& ret); + + /** Prints the fields of a document for human consumption. */ + TCHAR* toString() const; + + + /** + * Returns an array of values of the field specified as the method parameter. + * This method can return null. + * Note: name is case sensitive + * + * @param name the name of the field + * @return a TCHAR** of field values or null + */ + TCHAR** getValues(const TCHAR* name); + + /** + * Empties out the document so that it can be reused + */ + void clear(); +}; + + +class CLUCENE_EXPORT DocumentFieldEnumeration :LUCENE_BASE{ +private: + struct Internal; + Internal* _internal; +public: + DocumentFieldEnumeration(Document::FieldsType::iterator itr, Document::FieldsType::iterator end); + ~DocumentFieldEnumeration(); + bool hasMoreElements() const; + Field* nextElement(); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/Field.cpp clucene-core-2.3.3.4/src/core/CLucene/document/Field.cpp --- clucene-core-0.9.21b/src/core/CLucene/document/Field.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/Field.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,316 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Field.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +Field::Field(const TCHAR* Name, Reader* reader, int config): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(reader != NULL, "reader cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + fieldsData = reader; + valueType = VALUE_READER; + + boost=1.0f; + + setConfig(config); +} + + +Field::Field(const TCHAR* Name, const TCHAR* Value, int _config, const bool duplicateValue): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(Value != NULL, "value cannot be NULL"); + CND_PRECONDITION(_tcslen(Value)>0 || _tcslen(Name)>0, "name and value cannot both be empty"); + + /* + if (_config & INDEX_NO && _config & STORE_NO) + _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have a field that is neither indexed nor stored"); + if (_config & INDEX_NO && _config & TERMVECTOR_YES) + _CLTHROWA(CL_ERR_IllegalArgument,"cannot store term vector information for a field that is not indexed"); + */ + + _name = CLStringIntern::intern( Name ); + if (duplicateValue) + fieldsData = stringDuplicate( Value ); + else + fieldsData = (void*)Value; + valueType = VALUE_STRING; + + boost=1.0f; + + //config = INDEX_TOKENIZED; // default Field is tokenized and indexed + + setConfig(_config); +} + +Field::Field(const TCHAR* Name, ValueArray* Value, int config, bool duplicateValue): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(Value != NULL, "value cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + + if ( duplicateValue ){ + ValueArray* tmp = _CLNEW ValueArray(Value->length); + memcpy(tmp->values, Value->values, Value->length * sizeof(uint8_t)); + fieldsData = tmp; + }else{ + fieldsData = Value; + } + valueType = VALUE_BINARY; + + boost=1.0f; + + setConfig(config); +} + +Field::Field(const TCHAR* Name, int config): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + fieldsData = NULL; + valueType = VALUE_NONE; + + boost=1.0f; + + if (config) setConfig(config); +} + +Field::~Field(){ +//Func - Destructor +//Pre - true +//Post - Instance has been destroyed + + CLStringIntern::unintern(_name); + _resetValue(); +} + + +/*===============FIELDS=======================*/ +const TCHAR* Field::name() const { return _name; } ///(fieldsData) : NULL; } ///* Field::binaryValue() { return (valueType & VALUE_BINARY) ? static_cast*>(fieldsData) : NULL; } ///(fieldsData) : NULL; } ///(fieldsData) : NULL; } + +bool Field::isStored() const { return (config & STORE_YES) != 0; } +bool Field::isIndexed() const { return (config & INDEX_TOKENIZED)!=0 || (config & INDEX_UNTOKENIZED)!=0; } +bool Field::isTokenized() const { return (config & INDEX_TOKENIZED) != 0; } +bool Field::isCompressed() const { return (config & STORE_COMPRESS) != 0; } +bool Field::isBinary() const { return (valueType & VALUE_BINARY) && fieldsData!=NULL; } + +bool Field::isTermVectorStored() const { return (config & TERMVECTOR_YES) != 0; } +bool Field::isStoreOffsetWithTermVector() const { return (config & TERMVECTOR_YES) != 0 && (config & TERMVECTOR_WITH_OFFSETS) != 0 && ((config & TERMVECTOR_WITH_OFFSETS) != TERMVECTOR_YES); } +bool Field::isStorePositionWithTermVector() const { return (config & TERMVECTOR_YES) != 0 && (config & TERMVECTOR_WITH_POSITIONS) != 0 && ((config & TERMVECTOR_WITH_POSITIONS) != TERMVECTOR_YES); } + +bool Field::getOmitNorms() const { return (config & INDEX_NONORMS) != 0; } +void Field::setOmitNorms(const bool omitNorms) { + if ( omitNorms ) + config |= INDEX_NONORMS; + else + config &= ~INDEX_NONORMS; +} + +bool Field::isLazy() const { return lazy; } + +void Field::setValue(TCHAR* value, const bool duplicateValue) { + _resetValue(); + if (duplicateValue) + fieldsData = stringDuplicate( value ); + else + fieldsData = value; + valueType = VALUE_STRING; +} + +void Field::setValue(Reader* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_READER; +} +void Field::setValue(ValueArray* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_BINARY; +} + +/** Expert: change the value of this field. See setValue(String). */ +void Field::setValue(CL_NS(analysis)::TokenStream* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_TOKENSTREAM; +} + +void Field::setBoost(const float_t boost) { this->boost = boost; } +float_t Field::getBoost() const { return boost; } + +void Field::setConfig(const uint32_t x){ + uint32_t newConfig=0; + + //set storage settings + if ( (x & STORE_YES) || (x & STORE_COMPRESS) ){ + newConfig |= STORE_YES; + if ( x & STORE_COMPRESS ) + newConfig |= STORE_COMPRESS; + } else + newConfig |= STORE_NO; + + if ( (x & INDEX_NO)==0 ){ + bool index=false; + + if ( x & INDEX_TOKENIZED && x & INDEX_UNTOKENIZED ) + _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have an untokenised and tokenised field"); + + if ( x & INDEX_NONORMS ){ + newConfig |= INDEX_UNTOKENIZED; + newConfig |= INDEX_NONORMS; + index = true; + } + else if ( x & INDEX_TOKENIZED ){ + newConfig |= INDEX_TOKENIZED; + index = true; + } + else if ( x & INDEX_UNTOKENIZED ){ + newConfig |= INDEX_UNTOKENIZED; + index = true; + } + + if ( !index ) + newConfig |= INDEX_NO; + }else + newConfig |= INDEX_NO; + + if ( newConfig & INDEX_NO && newConfig & STORE_NO ) + _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have a field that is neither indexed nor stored"); + + //set termvector settings + if ( (x & TERMVECTOR_NO) == 0 ){ + bool termVector=false; + if ( x & TERMVECTOR_YES ){ + termVector=true; + } + if ( (x & TERMVECTOR_WITH_POSITIONS) && ((x & TERMVECTOR_WITH_POSITIONS) != TERMVECTOR_YES) ){ + newConfig |= TERMVECTOR_WITH_POSITIONS; + termVector=true; + } + if ( x & TERMVECTOR_WITH_OFFSETS && ((x & TERMVECTOR_WITH_OFFSETS) != TERMVECTOR_YES) ){ + newConfig |= TERMVECTOR_WITH_OFFSETS; + termVector=true; + } + // TERMVECTOR_WITH_POSITIONS_OFFSETS is being automatically handled here + + if ( termVector ){ + if ( newConfig & INDEX_NO ) + _CLTHROWA(CL_ERR_IllegalArgument,"cannot store a term vector for fields that are not indexed."); + + newConfig |= TERMVECTOR_YES; + }else + newConfig |= TERMVECTOR_NO; + }else + newConfig |= TERMVECTOR_NO; + + config = newConfig; +} + +TCHAR* Field::toString() { + StringBuffer result; + if (isStored()) { + result.append( _T("stored") ); + if (isCompressed()) + result.append( _T("/compressed")); + else + result.append( _T("/uncompressed") ); + } + if (isIndexed()) { + if (result.length() > 0) + result.append( _T(",") ); + result.append( _T("indexed") ); + } + if (isTokenized()) { + if (result.length() > 0) + result.append( _T(",") ); + result.append( _T("tokenized") ); + } + if (isTermVectorStored()) { + if (result.length() > 0) + result.append( _T(",") ); + result.append( _T("termVector") ); + } + if (isStoreOffsetWithTermVector()) { + if (result.length() > 0) + result.appendChar( ',' ); + result.append( _T("termVectorOffsets") ); + } + if (isStorePositionWithTermVector()) { + if (result.length() > 0) + result.appendChar( ',' ); + result.append( _T("termVectorPosition") ); + } + if (isBinary()) { + if (result.length() > 0) + result.appendChar( ',' ); + result.append( _T("binary") ); + } + if (getOmitNorms()) { + result.append( _T(",omitNorms") ); + } + if (isLazy()){ + result.append( _T(",lazy") ); + } + result.appendChar('<'); + result.append(name()); + result.appendChar(':'); + + if (! isLazy() && fieldsData != NULL) { + if (valueType & VALUE_STRING) + result.append(static_cast(fieldsData)); + else if (valueType & VALUE_READER) + result.append( _T("Reader") ); + else if (valueType & VALUE_BINARY) + result.append( _T("Binary") ); + else + result.append( _T("NULL") ); + } + + result.appendChar('>'); + return result.toString(); +} + + +void Field::_resetValue() { + if (valueType & VALUE_STRING) { + TCHAR* t = static_cast(fieldsData); + _CLDELETE_CARRAY(t); + } else if (valueType & VALUE_READER) { + Reader* r = static_cast(fieldsData); + _CLDELETE(r); + } else if (valueType & VALUE_BINARY) { + ValueArray* v = static_cast*>(fieldsData); + _CLDELETE(v); + } + valueType=VALUE_NONE; +} +const char* Field::getObjectName() const{ + return getClassName(); +} +const char* Field::getClassName(){ + return "Field"; +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/Field.h clucene-core-2.3.3.4/src/core/CLucene/document/Field.h --- clucene-core-0.9.21b/src/core/CLucene/document/Field.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/Field.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,314 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_document_Field_ +#define _lucene_document_Field_ + +#include "CLucene/util/Array.h" +#include "CLucene/util/Equators.h" +/* +Fieldable reading: +https://issues.apache.org/jira/browse/LUCENE-1219?page=com.atlassian.jira.plugin.system.issuetabpanels:comment- tabpanel&focusedCommentId=12578199#action_12578199 +http://lucene.markmail.org/message/ioi4f6z24cbd5bdm?q=Fieldable#query:Fieldable+page:1+mid:fxmvzb6up7zve7k4+state:results + +TODO: - Solve some inconsistencies between CL and JL - mainly in the constructors area. + - Write some more tests to make sure we conform with JL - mainly in the tokenizing and omitNorms area + - Is there a bug in JL when calling setOmitNorms after a Tokenized field was created? +*/ + +CL_CLASS_DEF(util,Reader) +CL_CLASS_DEF(analysis,TokenStream) + +CL_NS_DEF(document) + +/** +A field is a section of a Document. Each field has two parts, a name and a +value. Values may be free text, provided as a String or as a Reader, or they +may be atomic keywords, which are not further processed. Such keywords may +be used to represent dates, urls, etc. Fields are optionally stored in the +index, so that they may be returned with hits on the document. +*/ +class CLUCENE_EXPORT Field : public CL_NS(util)::NamedObject{ +public: + enum Store{ + /** Store the original field value in the index. This is useful for short texts + * like a document's title which should be displayed with the results. The + * value is stored in its original form, i.e. no analyzer is used before it is + * stored. + */ + STORE_YES=1, + + /** Do not store the field value in the index. */ + STORE_NO=2, + + /** Store the original field value in the index in a compressed form. This is + * useful for long documents and for binary valued fields. + */ + STORE_COMPRESS=4 + }; + + enum Index{ + /** Do not index the field value. This field can thus not be searched, + * but one can still access its contents provided it is + * {@link Field::Store stored}. */ + INDEX_NO=16, + + /** Index the field's value so it can be searched. An Analyzer will be used + * to tokenize and possibly further normalize the text before its + * terms will be stored in the index. This is useful for common text. + */ + INDEX_TOKENIZED=32, + + /** Index the field's value without using an Analyzer, so it can be searched. + * As no analyzer is used the value will be stored as a single term. This is + * useful for unique Ids like product numbers. + */ + INDEX_UNTOKENIZED=64, + + /** Index the field's value without an Analyzer, and disable + * the storing of norms. No norms means that index-time boosting + * and field length normalization will be disabled. The benefit is + * less memory usage as norms take up one byte per indexed field + * for every document in the index. + * Note that once you index a given field with norms enabled, + * disabling norms will have no effect. In other words, for NO_NORMS + * to have the above described effect on a field, all instances of that + * field must be indexed with NO_NORMS from the beginning. + */ + INDEX_NONORMS=128 + }; + + enum TermVector{ + /** Do not store term vectors. */ + TERMVECTOR_NO=256, + + /** Store the term vectors of each document. A term vector is a list + * of the document's terms and their number of occurences in that document. */ + TERMVECTOR_YES=512, + + /** + * Store the term vector + token position information + * + * @see #YES + */ + TERMVECTOR_WITH_POSITIONS = TERMVECTOR_YES | 1024, + + /** + * Store the term vector + Token offset information + * + * @see #YES + */ + TERMVECTOR_WITH_OFFSETS = TERMVECTOR_YES | 2048, + + /** + * Store the term vector + Token position and offset information + * + * @see #YES + * @see #WITH_POSITIONS + * @see #WITH_OFFSETS + */ + TERMVECTOR_WITH_POSITIONS_OFFSETS = TERMVECTOR_WITH_OFFSETS | TERMVECTOR_WITH_POSITIONS + }; + + bool lazy; + + enum ValueType { + VALUE_NONE = 0, + VALUE_STRING = 1, + VALUE_READER = 2, + VALUE_BINARY = 4, + VALUE_TOKENSTREAM = 8 + }; + + /** + * TCHAR value constructor of Field. + * @memory Set duplicateValue to false to save on memory allocations when possible + */ + Field(const TCHAR* name, const TCHAR* value, int _config, const bool duplicateValue = true); + + /** + * Reader* constructor of Field. + * @memory consumes reader + */ + Field(const TCHAR* name, CL_NS(util)::Reader* reader, int _config); + + /** + * Binary constructor of Field. + * @memory Set duplicateValue to false to save on memory allocations when possible + */ + Field(const TCHAR* name, CL_NS(util)::ValueArray* data, int _config, const bool duplicateValue = true); + + Field(const TCHAR* name, int _config); ///* binaryValue(); + + /** The value of the field as a TokesStream, or null. If null, the Reader value, + * String value, or binary value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(analysis)::TokenStream* tokenStreamValue(); + + // True if the value of the field is to be stored in the index for return + // with search hits. It is an error for this to be true if a field is + // Reader-valued. + bool isStored() const; + + // True if the value of the field is to be indexed, so that it may be + // searched on. + bool isIndexed() const; + + // True if the value of the field should be tokenized as text prior to + // indexing. Un-tokenized fields are indexed as a single word and may not be + // Reader-valued. + bool isTokenized() const; + + /** True if the value of the field is stored and compressed within the index + */ + bool isCompressed() const; + + /** True if the term or terms used to index this field are stored as a term + * vector, available from {@link IndexReader#getTermFreqVector(int32_t,TCHAR*)}. + * These methods do not provide access to the original content of the field, + * only to terms used to index it. If the original content must be + * preserved, use the stored attribute instead. + * + * @see IndexReader#getTermFreqVector(int32_t, String) + */ + bool isTermVectorStored() const; + + /** + * True iff terms are stored as term vector together with their offsets + * (start and end positon in source text). + */ + bool isStoreOffsetWithTermVector() const; + + /** + * True iff terms are stored as term vector together with their token positions. + */ + bool isStorePositionWithTermVector() const; + + /** Returns the boost factor for hits for this field. + * + *

The default value is 1.0. + * + *

Note: this value is not stored directly with the document in the index. + * Documents returned from {@link IndexReader#document(int)} and + * {@link Hits#doc(int)} may thus not have the same value present as when + * this field was indexed. + * + * @see #setBoost(float_t) + */ + float_t getBoost() const; + + /** Sets the boost factor hits on this field. This value will be + * multiplied into the score of all hits on this this field of this + * document. + * + *

The boost is multiplied by {@link Document#getBoost()} of the document + * containing this field. If a document has multiple fields with the same + * name, all such values are multiplied together. This product is then + * multipled by the value {@link Similarity#lengthNorm(String,int)}, and + * rounded by {@link Similarity#encodeNorm(float_t)} before it is stored in the + * index. One should attempt to ensure that this product does not overflow + * the range of that encoding. + * + * @see Document#setBoost(float_t) + * @see Similarity#lengthNorm(String, int) + * @see Similarity#encodeNorm(float_t) + */ + void setBoost(const float_t value); + + /** True if the value of the filed is stored as binary */ + bool isBinary() const; + + /** True if norms are omitted for this indexed field */ + bool getOmitNorms() const; + + /** Expert: + * + * If set, omit normalization factors associated with this indexed field. + * This effectively disables indexing boosts and length normalization for this field. + */ + void setOmitNorms(const bool omitNorms); + + /** + * Indicates whether a Field is Lazy or not. The semantics of Lazy loading are such that if a Field is lazily loaded, retrieving + * it's values via {@link #stringValue()} or {@link #binaryValue()} is only valid as long as the {@link org.apache.lucene.index.IndexReader} that + * retrieved the {@link Document} is still open. + * + * @return true if this field can be loaded lazily + */ + bool isLazy() const; + + /** Prints a Field for human consumption. */ + TCHAR* toString(); + + /**

Expert: change the value of this field. This can + * be used during indexing to re-use a single Field + * instance to improve indexing speed by avoiding GC cost + * of new'ing and reclaiming Field instances. Typically + * a single {@link Document} instance is re-used as + * well. This helps most on small documents.

+ * + *

Note that you should only use this method after the + * Field has been consumed (ie, the {@link Document} + * containing this Field has been added to the index). + * Also, each Field instance should only be used once + * within a single {@link Document} instance. See ImproveIndexingSpeed + * for details.

+ * + * @memory Caller is responsible for releasing value if duplicateValue == false */ + void setValue(TCHAR* value, const bool duplicateValue = true); + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(util)::Reader* value); + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(util)::ValueArray* value) ; + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(analysis)::TokenStream* value); + + virtual const char* getObjectName() const; + static const char* getClassName(); + +protected: + /** + * Set configs using XOR. This resets all the settings + * For example, to use term vectors with positions and offsets do: + * object->setConfig(TERMVECTOR_WITH_POSITIONS | TERMVECTOR_WITH_OFFSETS); + */ + void setConfig(const uint32_t _config); + + void _resetValue(); + + void* fieldsData; + ValueType valueType; + + const TCHAR* _name; + uint32_t config; + float_t boost; +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/FieldSelector.cpp clucene-core-2.3.3.4/src/core/CLucene/document/FieldSelector.cpp --- clucene-core-0.9.21b/src/core/CLucene/document/FieldSelector.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/FieldSelector.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,65 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "FieldSelector.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +FieldSelector::~FieldSelector(){ +} + +LoadFirstFieldSelector::~LoadFirstFieldSelector(){ +} + +FieldSelector::FieldSelectorResult LoadFirstFieldSelector::accept(const TCHAR* /*fieldName*/) const{ + return LOAD_AND_BREAK; +} + +MapFieldSelector::~MapFieldSelector(){ + _CLDELETE(fieldSelections); +} + +MapFieldSelector::MapFieldSelector() : + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ +} + +MapFieldSelector::MapFieldSelector(std::vector& fields) : + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ + std::vector::iterator itr = fields.begin(); + while ( itr != fields.end() ){ + add(*itr); + itr++; + } +} + +MapFieldSelector::MapFieldSelector(ArrayBase& fields): + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ + for ( size_t i=0;ifind((TCHAR*)field); + if ( itr != fieldSelections->end() ){ + return itr->second; + } + return FieldSelector::NO_LOAD; +} + +void MapFieldSelector::add(const TCHAR* field, FieldSelector::FieldSelectorResult action){ + fieldSelections->insert(fieldSelections->end(),std::pair( + STRDUP_TtoT(field), action)); +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/FieldSelector.h clucene-core-2.3.3.4/src/core/CLucene/document/FieldSelector.h --- clucene-core-0.9.21b/src/core/CLucene/document/FieldSelector.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/FieldSelector.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,142 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_document_FieldSelector_ +#define _lucene_document_FieldSelector_ + +#include "CLucene/util/Equators.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidMap.h" + +CL_NS_DEF(document) + +/** + * Similar to a {@link java.io.FileFilter}, the FieldSelector allows one to make decisions about + * what Fields get loaded on a {@link Document} by {@link org.apache.lucene.index.IndexReader#document(int,org.apache.lucene.document.FieldSelector)} + * + **/ +class CLUCENE_EXPORT FieldSelector :LUCENE_BASE { +public: + + /** + * Provides information about what should be done with this Field + * + **/ + enum FieldSelectorResult { + /** + * Load this {@link Field} every time the {@link Document} is loaded, reading in the data as it is encounterd. + * {@link Document#getField(String)} and {@link Document#getField(String)} should not return null. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD = 0, + + /** + * Lazily load this {@link Field}. This means the {@link Field} is valid, but it may not actually contain its data until + * invoked. {@link Document#getField(String)} SHOULD NOT BE USED. {@link Document#getField(String)} is safe to use and should + * return a valid instance of a {@link Field}. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LAZY_LOAD = 1, + + /** + * Do not load the {@link Field}. {@link Document#getField(String)} and {@link Document#getField(String)} should return null. + * {@link Document#add(Field)} is not called. + *

+ * {@link Document#add(Field)} should not be called by the Reader. + */ + NO_LOAD = 2, + + /** + * Load this field as in the {@link #LOAD} case, but immediately return from {@link Field} loading for the {@link Document}. Thus, the + * Document may not have its complete set of Fields. {@link Document#getField(String)} and {@link Document#getField(String)} should + * both be valid for this {@link Field} + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD_AND_BREAK = 3, + + /** + * Behaves much like {@link #LOAD} but does not uncompress any compressed data. This is used for internal purposes. + * {@link Document#getField(String)} and {@link Document#getField(String)} should not return null. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD_FOR_MERGE = 4, + + /** Expert: Load the size of this {@link Field} rather than its value. + * Size is measured as number of bytes required to store the field == bytes for a binary or any compressed value, and 2*chars for a String value. + * The size is stored as a binary value, represented as an int in a byte[], with the higher order byte first in [0] + */ + SIZE = 5, + + /** Expert: Like {@link #SIZE} but immediately break from the field loading loop, i.e., stop loading further fields, after the size is loaded */ + SIZE_AND_BREAK = 6 + }; + + virtual ~FieldSelector(); + + /** + * + * @param fieldName the field to accept or reject + * @return an instance of {@link FieldSelectorResult} + * if the {@link Field} named fieldName should be loaded. + */ + virtual FieldSelectorResult accept(const TCHAR* fieldName) const = 0; + +}; + +/** + * Load the First field and break. + *

+ * See {@link FieldSelectorResult#LOAD_AND_BREAK} + */ +class CLUCENE_EXPORT LoadFirstFieldSelector :public FieldSelector { +public: + ~LoadFirstFieldSelector(); + + FieldSelectorResult accept(const TCHAR* fieldName) const; +}; + +/** + * A FieldSelector based on a Map of field names to FieldSelectorResults + * + * @author Chuck Williams + */ +class CLUCENE_EXPORT MapFieldSelector: public FieldSelector { +public: + typedef CL_NS(util)::CLHashMap FieldSelectionsType; + FieldSelectionsType* fieldSelections; + + virtual ~MapFieldSelector(); + + MapFieldSelector(std::vector& fieldSelections); + + /** Create a a MapFieldSelector + */ + MapFieldSelector(); + + /** Create a a MapFieldSelector + * @param fields fields to LOAD. All other fields are NO_LOAD. + */ + MapFieldSelector(CL_NS(util)::ArrayBase& fields); + + /** Load field according to its associated value in fieldSelections + * @param field a field name + * @return the fieldSelections value that field maps to or NO_LOAD if none. + */ + FieldSelectorResult accept(const TCHAR* field) const; + + void add(const TCHAR*, FieldSelector::FieldSelectorResult action=FieldSelector::LOAD); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/document/NumberTools.cpp clucene-core-2.3.3.4/src/core/CLucene/document/NumberTools.cpp --- clucene-core-0.9.21b/src/core/CLucene/document/NumberTools.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/document/NumberTools.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,75 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "NumberTools.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(document) + +const TCHAR* NumberTools::MIN_STRING_VALUE = NEGATIVE_PREFIX _T("0000000000000"); +const TCHAR* NumberTools::MAX_STRING_VALUE = POSITIVE_PREFIX _T("1y2p0ij32e8e7"); + +TCHAR* NumberTools::longToString(int64_t l) +{ + if (l == LUCENE_INT64_MIN_SHOULDBE) { + // special case, because long is not symetric around zero + return stringDuplicate(MIN_STRING_VALUE); + } + + TCHAR* buf = _CL_NEWARRAY(TCHAR, STR_SIZE + 1); + if (l < 0) { + buf[0] = NEGATIVE_PREFIX[0]; + l = LUCENE_INT64_MAX_SHOULDBE + l + 1; + } else { + buf[0] = POSITIVE_PREFIX[0]; + } + + TCHAR tmp[STR_SIZE]; + _i64tot(l, tmp, NUMBERTOOLS_RADIX); + size_t len = _tcslen(tmp); + _tcscpy(buf+(STR_SIZE-len),tmp); + for ( size_t i=1;i + * That is, if l1 is less than l2 for any two longs l1 and l2, then + * NumberTools.longToString(l1) is lexicographically less than + * NumberTools.longToString(l2). (Similarly for "greater than" and "equals".) + * + *

+ * This class handles all long values (unlike + * {@link org.apache.lucene.document.DateField}). + * + * + */ +class CLUCENE_EXPORT NumberTools :LUCENE_BASE { + + #define NUMBERTOOLS_RADIX 36 + + #define NEGATIVE_PREFIX _T("-") + // NB: NEGATIVE_PREFIX must be < POSITIVE_PREFIX + #define POSITIVE_PREFIX _T("0") + +public: + //NB: this must be less than + /** + * Equivalent to longToString(Long.MIN_VALUE); STR_SIZE is depandant on the length of it + */ + static const TCHAR* MIN_STRING_VALUE; + + /** + * Equivalent to longToString(Long.MAX_VALUE) + */ + static const TCHAR* MAX_STRING_VALUE; + + /** + * The length of (all) strings returned by {@link #longToString} + */ + LUCENE_STATIC_CONSTANT (size_t, STR_SIZE = 14); + + /** + * Converts a long to a String suitable for indexing. + * + * @memory Caller should free the returned buffer + */ + static TCHAR* longToString(int64_t l); + + /** + * Converts a String that was returned by {@link #longToString} back to a + * long. + * + * @throws IllegalArgumentException + * if the input is null + * @throws NumberFormatException + * if the input does not parse (it was not a String returned by + * longToString()). + */ + static int64_t stringToLong(const TCHAR* str); + + ~NumberTools(); + +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/CompoundFile.cpp clucene-core-2.3.3.4/src/core/CLucene/index/CompoundFile.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/CompoundFile.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/CompoundFile.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,456 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Term.h" +#include "_TermInfo.h" +#include "_SkipListWriter.h" +#include "_CompoundFile.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + + +class WriterFileEntry:LUCENE_BASE { +public: + WriterFileEntry(){ + directoryOffset=0; + dataOffset=0; + } + ~WriterFileEntry(){ + } + /** source file */ + char file[CL_MAX_PATH]; + + /** temporary holder for the start of directory entry for this file */ + int64_t directoryOffset; + + /** temporary holder for the start of this file's data section */ + int64_t dataOffset; + +}; + + +/** Implementation of an IndexInput that reads from a portion of the + * compound file. The visibility is left as "package" *only* because + * this helps with testing since JUnit test cases in a different class + * can then access package fields of this class. + */ +class CSIndexInput:public CL_NS(store)::BufferedIndexInput { +private: + CL_NS(store)::IndexInput* base; + int64_t fileOffset; + int64_t _length; +protected: + /** Expert: implements buffer refill. Reads uint8_ts from the current + * position in the input. + * @param b the array to read uint8_ts into + * @param length the number of uint8_ts to read + */ + void readInternal(uint8_t* /*b*/, const int32_t /*len*/); + void seekInternal(const int64_t /*pos*/) + { + } + +public: + CSIndexInput(CL_NS(store)::IndexInput* base, const int64_t fileOffset, const int64_t length, const int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + CSIndexInput(const CSIndexInput& clone); + ~CSIndexInput(); + + /** Closes the stream to futher operations. */ + void close(); + CL_NS(store)::IndexInput* clone() const; + + int64_t length() const { return _length; } + + const char* getDirectoryType() const{ return CompoundFileReader::getClassName(); } + const char* getObjectName() const{ return getClassName(); } + static const char* getClassName() { return "CSIndexInput"; } +}; + +class ReaderFileEntry:LUCENE_BASE { +public: + int64_t offset; + int64_t length; + ReaderFileEntry(){ + offset=0; + length=0; + } + ~ReaderFileEntry(){ + } +}; + + +CSIndexInput::CSIndexInput(CL_NS(store)::IndexInput* base, const int64_t fileOffset, const int64_t length, const int32_t _readBufferSize):BufferedIndexInput(_readBufferSize){ + this->base = base; + this->fileOffset = fileOffset; + this->_length = length; +} + +void CSIndexInput::readInternal(uint8_t* b, const int32_t len) +{ + SCOPED_LOCK_MUTEX(base->THIS_LOCK) + + int64_t start = getFilePointer(); + if(start + len > _length) + _CLTHROWA(CL_ERR_IO,"read past EOF"); + base->seek(fileOffset + start); + base->readBytes(b, len, false); +} +CSIndexInput::~CSIndexInput(){ +} +IndexInput* CSIndexInput::clone() const +{ + return _CLNEW CSIndexInput(*this); +} +CSIndexInput::CSIndexInput(const CSIndexInput& clone): BufferedIndexInput(clone){ + this->base = clone.base; //no need to clone this.. + this->fileOffset = clone.fileOffset; + this->_length = clone._length; +} + +void CSIndexInput::close(){ +} + + + +CompoundFileReader::CompoundFileReader(Directory* dir, const char* name, int32_t _readBufferSize): + readBufferSize(_readBufferSize), directory(dir), stream(NULL), entries(_CLNEW EntriesType(true,true)) +{ + fileName = STRDUP_AtoA(name); + + bool success = false; + + try { + stream = dir->openInput(name, readBufferSize); + + // read the directory and init files + int32_t count = stream->readVInt(); + ReaderFileEntry* entry = NULL; + TCHAR tid[CL_MAX_PATH]; + for (int32_t i=0; ireadLong(); + stream->readString(tid,CL_MAX_PATH); + char* aid = STRDUP_TtoA(tid); + + if (entry != NULL) { + // set length of the previous entry + entry->length = offset - entry->offset; + } + + entry = _CLNEW ReaderFileEntry(); + entry->offset = offset; + entries->put(aid, entry); + } + + // set the length of the final entry + if (entry != NULL) { + entry->length = stream->length() - entry->offset; + } + + success = true; + + }_CLFINALLY( + if (! success && (stream != NULL)) { + try { + stream->close(); + _CLDELETE(stream); + } catch (CLuceneError& err){ + if ( err.number() != CL_ERR_IO ) + throw err; + //else ignore + } + } + ) +} + +CompoundFileReader::~CompoundFileReader(){ + close(); + _CLDELETE_CaARRAY(fileName); + _CLDELETE(entries); +} + +Directory* CompoundFileReader::getDirectory(){ + return directory; +} + +const char* CompoundFileReader::getName() const{ + return fileName; +} +const char* CompoundFileReader::getClassName(){ + return "CompoundFileReader"; +} +const char* CompoundFileReader::getObjectName() const{ + return getClassName(); +} + +void CompoundFileReader::close(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (stream != NULL){ + entries->clear(); + stream->close(); + _CLDELETE(stream); + } +} + +bool CompoundFileReader::openInput(const char * id, CL_NS(store)::IndexInput *& ret, CLuceneError& error, int32_t bufferSize){ + SCOPED_LOCK_MUTEX(THIS_LOCK); + + if (stream == NULL){ + error.set(CL_ERR_IO,"Stream closed"); + return false; + } + + const ReaderFileEntry* entry = entries->get((char*)id); + if (entry == NULL){ + char buf[CL_MAX_PATH+26]; + cl_sprintf(buf, CL_MAX_PATH+26, "No sub-file with id %s found", id); + error.set(CL_ERR_IO,buf); + return false; + } + + if (bufferSize < 1) + bufferSize = readBufferSize; + + ret = _CLNEW CSIndexInput(stream, entry->offset, entry->length, bufferSize); + return true; +} + +bool CompoundFileReader::list(vector* names) const{ + for ( EntriesType::const_iterator i=entries->begin();i!=entries->end();i++ ){ + names->push_back(i->first); + ++i; + } + return true; +} + +bool CompoundFileReader::fileExists(const char* name) const{ + return entries->exists((char*)name); +} + +int64_t CompoundFileReader::fileModified(const char* name) const{ + return directory->fileModified(name); +} + +void CompoundFileReader::touchFile(const char* name){ + directory->touchFile(name); +} + +bool CompoundFileReader::doDeleteFile(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::doDeleteFile"); +} + +void CompoundFileReader::renameFile(const char* /*from*/, const char* /*to*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::renameFile"); +} + +int64_t CompoundFileReader::fileLength(const char* name) const{ + ReaderFileEntry* e = entries->get((char*)name); + if (e == NULL){ + char buf[CL_MAX_PATH + 30]; + strcpy(buf,"File "); + strncat(buf,name,CL_MAX_PATH ); + strcat(buf," does not exist"); + _CLTHROWA(CL_ERR_IO,buf); + } + return e->length; +} +IndexOutput* CompoundFileReader::createOutput(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::createOutput"); +} +LuceneLock* CompoundFileReader::makeLock(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::makeLock"); +} + +string CompoundFileReader::toString() const{ + return string("CompoundFileReader@") + fileName; +} + + + +class CompoundFileWriter::Internal{ +public: + CL_NS(store)::Directory* directory; + string fileName; + + CL_NS(util)::CLHashSet ids; + + typedef CL_NS(util)::CLLinkedList > EntriesType; + EntriesType* entries; + + bool merged; + SegmentMerger::CheckAbort* checkAbort; + + Internal(): + ids(true), + entries(_CLNEW EntriesType(true)) + { + + } + ~Internal(){ + _CLDELETE(entries); + } +}; +CompoundFileWriter::CompoundFileWriter(Directory* dir, const char* name, SegmentMerger::CheckAbort* checkAbort){ + _internal = _CLNEW Internal; + if (dir == NULL) + _CLTHROWA(CL_ERR_NullPointer,"directory cannot be null"); + if (name == NULL) + _CLTHROWA(CL_ERR_NullPointer,"name cannot be null"); + _internal->merged = false; + _internal->checkAbort = checkAbort; + _internal->directory = dir; + _internal->fileName = name; +} + +CompoundFileWriter::~CompoundFileWriter(){ + _CLDELETE(_internal); +} + +Directory* CompoundFileWriter::getDirectory(){ + return _internal->directory; +} + +/** Returns the name of the compound file. */ +const char* CompoundFileWriter::getName() const{ + return _internal->fileName.c_str(); +} + +void CompoundFileWriter::addFile(const char* file){ + if (_internal->merged) + _CLTHROWA(CL_ERR_IO,"Can't add extensions after merge has been called"); + + if (file == NULL) + _CLTHROWA(CL_ERR_NullPointer,"file cannot be null"); + + if (_internal->ids.find((char*)file)!=_internal->ids.end()){ + char buf[CL_MAX_PATH + 30]; + strcpy(buf,"File "); + strncat(buf,file,CL_MAX_PATH); + strcat(buf," already added"); + _CLTHROWA(CL_ERR_IO,buf); + } + _internal->ids.insert(STRDUP_AtoA(file)); + + WriterFileEntry* entry = _CLNEW WriterFileEntry(); + STRCPY_AtoA(entry->file,file,CL_MAX_PATH); + _internal->entries->push_back(entry); +} + +void CompoundFileWriter::close(){ + if (_internal->merged) + _CLTHROWA(CL_ERR_IO,"Merge already performed"); + + if (_internal->entries->size()==0) //isEmpty() + _CLTHROWA(CL_ERR_IO,"No entries to merge have been defined"); + + _internal->merged = true; + + // open the compound stream + IndexOutput* os = NULL; + try { + os = _internal->directory->createOutput(_internal->fileName.c_str()); + + // Write the number of entries + os->writeVInt(_internal->entries->size()); + + // Write the directory with all offsets at 0. + // Remember the positions of directory entries so that we can + // adjust the offsets later + { //msvc6 for scope fix + for ( CLLinkedList::iterator i=_internal->entries->begin();i!=_internal->entries->end();i++ ){ + WriterFileEntry* fe = *i; + fe->directoryOffset = os->getFilePointer(); + os->writeLong(0); // for now + os->writeString(fe->file); + } + } + + // Open the files and copy their data into the stream. + // Remember the locations of each file's data section. + { //msvc6 for scope fix + const int32_t bufferLength = 16384; + uint8_t buffer[bufferLength]; + for ( CL_NS(util)::CLLinkedList::iterator i=_internal->entries->begin();i!=_internal->entries->end();i++ ){ + WriterFileEntry* fe = *i; + fe->dataOffset = os->getFilePointer(); + copyFile(fe, os, buffer, bufferLength); + } + } + + { //msvc6 for scope fix + // Write the data offsets into the directory of the compound stream + for ( CLLinkedList::iterator i=_internal->entries->begin(); + i!=_internal->entries->end();i++ ){ + WriterFileEntry* fe = *i; + os->seek(fe->directoryOffset); + os->writeLong(fe->dataOffset); + } + } + + + } _CLFINALLY ( + if (os != NULL) try { os->close(); _CLDELETE(os); } catch (...) { } + ); +} + + +void CompoundFileWriter::copyFile(WriterFileEntry* source, IndexOutput* os, uint8_t* buffer, int32_t bufferLength){ + IndexInput* is = NULL; + try { + int64_t startPtr = os->getFilePointer(); + + is = _internal->directory->openInput(source->file); + int64_t length = is->length(); + int64_t remainder = length; + int32_t chunk = bufferLength; + + while(remainder > 0) { + int32_t len = (int32_t)cl_min((int64_t)chunk, remainder); + is->readBytes(buffer, len); + os->writeBytes(buffer, len); + remainder -= len; + + if (_internal->checkAbort != NULL) + // Roughly every 2 MB we will check if + // it's time to abort + _internal->checkAbort->work(80); + } + + // Verify that remainder is 0 + if (remainder != 0){ + TCHAR buf[CL_MAX_PATH+100]; + _sntprintf(buf,CL_MAX_PATH+100,_T("Non-zero remainder length after copying") + _T(": %d (id: %s, length: %d, buffer size: %d)"), + (int)remainder,source->file,(int)length,(int)chunk ); + _CLTHROWT(CL_ERR_IO,buf); + } + + // Verify that the output length diff is equal to original file + int64_t endPtr = os->getFilePointer(); + int64_t diff = endPtr - startPtr; + if (diff != length){ + TCHAR buf[100]; + _sntprintf(buf,100,_T("Difference in the output file offsets %d ") + _T("does not match the original file length %d"),(int)diff,(int)length); + _CLTHROWT(CL_ERR_IO,buf); + } + } _CLFINALLY ( + if (is != NULL){ + is->close(); + _CLDELETE(is); + } + ); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_CompoundFile.h clucene-core-2.3.3.4/src/core/CLucene/index/_CompoundFile.h --- clucene-core-0.9.21b/src/core/CLucene/index/_CompoundFile.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_CompoundFile.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,144 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_compoundfile_h +#define _lucene_index_compoundfile_h + + +CL_CLASS_DEF(store,Lock) +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "_SegmentMerger.h" + +CL_NS_DEF(index) + +class WriterFileEntry; +class ReaderFileEntry; + +/** + * Class for accessing a compound stream. + * This class implements a directory, but is limited to only read operations. + * Directory methods that would normally modify data throw an exception. + * + */ +class CompoundFileReader: public CL_NS(store)::Directory { +private: + int32_t readBufferSize; + + // Base info + CL_NS(store)::Directory* directory; + char* fileName; + + CL_NS(store)::IndexInput* stream; + + typedef CL_NS(util)::CLHashMap > EntriesType; + EntriesType* entries; +protected: + /** Removes an existing file in the directory-> */ + bool doDeleteFile(const char* name); + +public: + CompoundFileReader(CL_NS(store)::Directory* dir, const char* name, int32_t _readBufferSize=CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + virtual ~CompoundFileReader(); + CL_NS(store)::Directory* getDirectory(); + const char* getName() const; + + void close(); + bool openInput(const char * name, CL_NS(store)::IndexInput *& ret, CLuceneError& error, int32_t bufferSize=0); + + /** Returns an array of strings, one for each file in the directory-> */ + bool list(std::vector* names) const; + /** Returns true iff a file with the given name exists. */ + bool fileExists(const char* name) const; + /** Returns the time the named file was last modified. */ + int64_t fileModified(const char* name) const; + /** Set the modified time of an existing file to now. */ + void touchFile(const char* name); + /** Renames an existing file in the directory-> + If a file already exists with the new name, then it is replaced. + This replacement should be atomic. */ + void renameFile(const char* from, const char* to); + /** Returns the length of a file in the directory. + * @throws IOException if the file does not exist */ + int64_t fileLength(const char* name) const; + /** Not implemented + * @throws UnsupportedOperationException */ + CL_NS(store)::IndexOutput* createOutput(const char* name); + /** Not implemented + * @throws UnsupportedOperationException */ + CL_NS(store)::LuceneLock* makeLock(const char* name); + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +/** + * Combines multiple files into a single compound file. + * The file format:
+ *

    + *
  • VInt fileCount
  • + *
  • {Directory} + * fileCount entries with the following structure:
  • + *
      + *
    • int64_t dataOffset
    • + *
    • UTFString extension
    • + *
    + *
  • {File Data} + * fileCount entries with the raw data of the corresponding file
  • + *
+ * + * The fileCount integer indicates how many files are contained in this compound + * file. The {directory} that follows has that many entries. Each directory entry + * contains an encoding identifier, an int64_t pointer to the start of this file's + * data section, and a UTF String with that file's extension. + * + */ +class CompoundFileWriter:LUCENE_BASE { + class Internal; + Internal* _internal; + + /** Copy the contents of the file with specified extension into the + * provided output stream. Use the provided buffer for moving data + * to reduce memory allocation. + */ + void copyFile(WriterFileEntry* source, CL_NS(store)::IndexOutput* os, uint8_t* buffer, int32_t bufferLength); +public: + /** Create the compound stream in the specified file. The file name is the + * entire name (no extensions are added). + */ + CompoundFileWriter(CL_NS(store)::Directory* dir, const char* name, SegmentMerger::CheckAbort* checkAbort = NULL); + ~CompoundFileWriter(); + /** Returns the directory of the compound file. */ + CL_NS(store)::Directory* getDirectory(); + const char* getName() const ; + /** Add a source stream. file is the string by which the + * sub-stream will be known in the compound stream. + * + * @throws IllegalStateException if this writer is closed + * @throws NullPointerException if file is null + * @throws IllegalArgumentException if a file with the same name + * has been added already + */ + void addFile(const char* file); + /** Merge files with the extensions added up to now. + * All files with these extensions are combined sequentially into the + * compound stream. After successful merge, the source files + * @throws IllegalStateException if close() had been called before or + * if no file has been added to this object + * are deleted. + */ + void close(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/DirectoryIndexReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/DirectoryIndexReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/DirectoryIndexReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/DirectoryIndexReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,302 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "DirectoryIndexReader.h" +#include "_IndexFileDeleter.h" +#include "IndexDeletionPolicy.h" +#include "_MultiSegmentReader.h" +#include "_SegmentHeader.h" +#include "IndexWriter.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/Lock.h" +#include "_SegmentInfos.h" + +CL_NS_USE(store) +CL_NS_USE(util) + +CL_NS_DEF(index) + + + void DirectoryIndexReader::doClose() { + if(closeDirectory && _directory){ + _directory->close(); + } + _CLDECDELETE(_directory); + } + + void DirectoryIndexReader::doCommit() { + if(hasChanges){ + if (segmentInfos != NULL) { + + // Default deleter (for backwards compatibility) is + // KeepOnlyLastCommitDeleter: + IndexFileDeleter deleter(_directory, + deletionPolicy == NULL ? _CLNEW KeepOnlyLastCommitDeletionPolicy() : deletionPolicy, + segmentInfos, NULL, NULL); + + // Checkpoint the state we are about to change, in + // case we have to roll back: + startCommit(); + + bool success = false; + try { + commitChanges(); + segmentInfos->write(_directory); + success = true; + } _CLFINALLY ( + + if (!success) { + + // Rollback changes that were made to + // SegmentInfos but failed to get [fully] + // committed. This way this reader instance + // remains consistent (matched to what's + // actually in the index): + rollbackCommit(); + + // Recompute deletable files & remove them (so + // partially written .del files, etc, are + // removed): + deleter.refresh(); + } + ) + + // Have the deleter remove any now unreferenced + // files due to this commit: + deleter.checkpoint(segmentInfos, true); + + if (writeLock != NULL) { + writeLock->release(); // release write lock + _CLDELETE(writeLock); + } + } + else + commitChanges(); + } + hasChanges = false; + } + + void DirectoryIndexReader::acquireWriteLock() { + if (segmentInfos != NULL) { + ensureOpen(); + if (stale) + _CLTHROWA(CL_ERR_StaleReader, "IndexReader out of date and no longer valid for delete, undelete, or setNorm operations"); + + if (writeLock == NULL) { + LuceneLock* writeLock = _directory->makeLock(IndexWriter::WRITE_LOCK_NAME); + if (!writeLock->obtain(IndexWriter::WRITE_LOCK_TIMEOUT)) { // obtain write lock + string message = string("Index locked for write: ") + writeLock->getObjectName(); + _CLDELETE(writeLock); + _CLTHROWA(CL_ERR_LockObtainFailed, message.c_str()); + } + this->writeLock = writeLock; + + // we have to check whether index has changed since this reader was opened. + // if so, this reader is no longer valid for deletion + if (SegmentInfos::readCurrentVersion(_directory) > segmentInfos->getVersion()) { + stale = true; + this->writeLock->release(); + _CLDELETE(writeLock); + _CLTHROWA(CL_ERR_StaleReader, "IndexReader out of date and no longer valid for delete, undelete, or setNorm operations"); + } + } + } + } + + void DirectoryIndexReader::init(Directory* __directory, SegmentInfos* segmentInfos, bool closeDirectory) { + this->deletionPolicy = NULL; + this->stale = false; + this->writeLock = NULL; + this->rollbackSegmentInfos = NULL; + this->_directory = _CL_POINTER(__directory); + this->segmentInfos = segmentInfos; + this->closeDirectory = closeDirectory; + } + + DirectoryIndexReader::DirectoryIndexReader(): + IndexReader() + { + } + DirectoryIndexReader::~DirectoryIndexReader(){ + try { + if (writeLock != NULL) { + writeLock->release(); // release write lock + writeLock = NULL; + } + }catch(...){ + } + _CLDELETE(segmentInfos); + _CLDELETE(rollbackSegmentInfos); + } + DirectoryIndexReader::DirectoryIndexReader(Directory* __directory, SegmentInfos* segmentInfos, bool closeDirectory): + IndexReader() + { + init(__directory, segmentInfos, closeDirectory); + } + + class DirectoryIndexReader::FindSegmentsFile_Open: public SegmentInfos::FindSegmentsFile{ + bool closeDirectory; + IndexDeletionPolicy* deletionPolicy; + protected: + DirectoryIndexReader* doBody(const char* segmentFileName) { + + SegmentInfos* infos = _CLNEW SegmentInfos; + infos->read(directory, segmentFileName); + + DirectoryIndexReader* reader; + + if (infos->size() == 1) { // index is optimized + reader = SegmentReader::get(infos, infos->info(0), closeDirectory); + } else { + reader = _CLNEW MultiSegmentReader(directory, infos, closeDirectory); + } + reader->setDeletionPolicy(deletionPolicy); + return reader; + } + public: + FindSegmentsFile_Open( bool closeDirectory, IndexDeletionPolicy* deletionPolicy, + CL_NS(store)::Directory* dir ): + SegmentInfos::FindSegmentsFile(dir) + { + this->closeDirectory = closeDirectory; + this->deletionPolicy = deletionPolicy; + } + }; + + DirectoryIndexReader* DirectoryIndexReader::open(Directory* __directory, bool closeDirectory, IndexDeletionPolicy* deletionPolicy) { + DirectoryIndexReader::FindSegmentsFile_Open runner(closeDirectory, deletionPolicy, __directory); + return runner.run(); + } + + + class DirectoryIndexReader::FindSegmentsFile_Reopen: public SegmentInfos::FindSegmentsFile{ + bool closeDirectory; + IndexDeletionPolicy* deletionPolicy; + DirectoryIndexReader* _this; + protected: + DirectoryIndexReader* doBody(const char* segmentFileName) { + SegmentInfos* infos = _CLNEW SegmentInfos(); + infos->read(directory, segmentFileName); + + DirectoryIndexReader* newReader = _this->doReopen(infos); + + if (_this != newReader) { + newReader->init(directory, infos, closeDirectory); + newReader->deletionPolicy = deletionPolicy; + } + + return newReader; + } + public: + FindSegmentsFile_Reopen( bool closeDirectory, IndexDeletionPolicy* deletionPolicy, + CL_NS(store)::Directory* dir, DirectoryIndexReader* _this ): + SegmentInfos::FindSegmentsFile(dir) + { + this->closeDirectory = closeDirectory; + this->deletionPolicy = deletionPolicy; + this->_this = _this; + } + }; + + IndexReader* DirectoryIndexReader::reopen(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + + if (this->hasChanges || this->isCurrent()) { + // the index hasn't changed - nothing to do here + return this; + } + FindSegmentsFile_Reopen runner(closeDirectory, deletionPolicy, _directory, this); + IndexReader* ret = runner.run(); + + //disown this memory... + this->writeLock = NULL; + this->_directory = NULL; + this->deletionPolicy = NULL; + + return ret; + } + + void DirectoryIndexReader::setDeletionPolicy(IndexDeletionPolicy* deletionPolicy) { + this->deletionPolicy = deletionPolicy; + } + + /** Returns the directory this index resides in. + */ + Directory* DirectoryIndexReader::directory() { + ensureOpen(); + return _directory; + } + + /** + * Version number when this IndexReader was opened. + */ + int64_t DirectoryIndexReader::getVersion() { + ensureOpen(); + return segmentInfos->getVersion(); + } + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a _CLNEW + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool DirectoryIndexReader::isCurrent(){ + ensureOpen(); + return SegmentInfos::readCurrentVersion(_directory) == segmentInfos->getVersion(); + } + + /** + * Checks is the index is optimized (if it has a single segment and no deletions) + * @return true if the index is optimized; false otherwise + */ + bool DirectoryIndexReader::isOptimized() { + ensureOpen(); + return segmentInfos->size() == 1 && hasDeletions() == false; + } + + /** + * Should internally checkpoint state that will change + * during commit so that we can rollback if necessary. + */ + void DirectoryIndexReader::startCommit() { + if (segmentInfos != NULL) { + rollbackSegmentInfos = segmentInfos->clone(); + } + rollbackHasChanges = hasChanges; + } + + /** + * Rolls back state to just before the commit (this is + * called by commit() if there is some exception while + * committing). + */ + void DirectoryIndexReader::rollbackCommit() { + if (segmentInfos != NULL) { + for(int32_t i=0;isize();i++) { + // Rollback each segmentInfo. Because the + // SegmentReader holds a reference to the + // SegmentInfo we can't [easily] just replace + // segmentInfos, so we reset it in place instead: + segmentInfos->info(i)->reset(rollbackSegmentInfos->info(i)); + } + _CLDELETE(rollbackSegmentInfos); + } + + hasChanges = rollbackHasChanges; + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/DirectoryIndexReader.h clucene-core-2.3.3.4/src/core/CLucene/index/DirectoryIndexReader.h --- clucene-core-0.9.21b/src/core/CLucene/index/DirectoryIndexReader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/DirectoryIndexReader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_DirectoryIndexReader_ +#define _lucene_index_DirectoryIndexReader_ + +#include "IndexReader.h" + +CL_CLASS_DEF(store,LuceneLock) + +CL_NS_DEF(index) +class IndexDeletionPolicy; + +/** + * IndexReader implementation that has access to a Directory. + * Instances that have a SegmentInfos object (i. e. segmentInfos != null) + * "own" the directory, which means that they try to acquire a write lock + * whenever index modifications are performed. + */ +class CLUCENE_EXPORT DirectoryIndexReader: public IndexReader { +private: + IndexDeletionPolicy* deletionPolicy; + + SegmentInfos* segmentInfos; + CL_NS(store)::LuceneLock* writeLock; + bool stale; + + /** Used by commit() to record pre-commit state in case + * rollback is necessary */ + bool rollbackHasChanges; + SegmentInfos* rollbackSegmentInfos; + + class FindSegmentsFile_Open; + class FindSegmentsFile_Reopen; + friend class FindSegmentsFile_Open; + friend class FindSegmentsFile_Reopen; + +protected: + CL_NS(store)::Directory* _directory; + bool closeDirectory; + DirectoryIndexReader(); + + /** + * Re-opens the index using the passed-in SegmentInfos + */ + virtual DirectoryIndexReader* doReopen(SegmentInfos* infos) = 0; + + + void doClose(); + + /** + * Commit changes resulting from delete, undeleteAll, or + * setNorm operations + * + * If an exception is hit, then either no changes or all + * changes will have been committed to the index + * (transactional semantics). + * @throws IOException if there is a low-level IO error + */ + void doCommit(); + + virtual void commitChanges() = 0; + + /** + * Tries to acquire the WriteLock on this directory-> + * this method is only valid if this IndexReader is directory owner. + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void acquireWriteLock(); + +public: + virtual ~DirectoryIndexReader(); + void init(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory); + + CLUCENE_LOCAL_DECL DirectoryIndexReader(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory); + CLUCENE_LOCAL_DECL static DirectoryIndexReader* open(CL_NS(store)::Directory* directory, bool closeDirectory, IndexDeletionPolicy* deletionPolicy); + + IndexReader* reopen(); + + void setDeletionPolicy(IndexDeletionPolicy* deletionPolicy); + + /** Returns the directory this index resides in. + */ + CL_NS(store)::Directory* directory(); + + /** + * Version number when this IndexReader was opened. + */ + int64_t getVersion(); + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a _CLNEW + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool isCurrent(); + + /** + * Checks is the index is optimized (if it has a single segment and no deletions) + * @return true if the index is optimized; false otherwise + */ + bool isOptimized(); + + /** + * Should internally checkpoint state that will change + * during commit so that we can rollback if necessary. + */ + CLUCENE_LOCAL_DECL void startCommit(); + + /** + * Rolls back state to just before the commit (this is + * called by commit() if there is some exception while + * committing). + */ + CLUCENE_LOCAL_DECL void rollbackCommit(); + +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/DocumentsWriter.cpp clucene-core-2.3.3.4/src/core/CLucene/index/DocumentsWriter.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/DocumentsWriter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/DocumentsWriter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1670 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/_Arrays.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/document/Field.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/document/Document.h" +#include "_FieldInfos.h" +#include "_TermInfo.h" +#include "_CompoundFile.h" +#include "IndexWriter.h" +#include "_IndexFileNames.h" +#include "_FieldsWriter.h" +#include "Term.h" +#include "_Term.h" +#include "_TermInfo.h" +#include "_TermVector.h" +#include "_TermInfosWriter.h" +#include "_SkipListWriter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/Similarity.h" +#include "_TermInfosWriter.h" +#include "_FieldsWriter.h" +#include "_DocumentsWriter.h" +#include +#include +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(analysis) +CL_NS_USE(document) +CL_NS_USE(search) +CL_NS_DEF(index) + + +const int32_t DocumentsWriter::MAX_THREAD_STATE = 5; +const uint8_t DocumentsWriter::defaultNorm = Similarity::encodeNorm(1.0f); +const int32_t DocumentsWriter::nextLevelArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9}; +const int32_t DocumentsWriter::levelSizeArray[10] = {5, 14, 20, 30, 40, 40, 80, 80, 120, 200}; +const int32_t DocumentsWriter::POSTING_NUM_BYTE = OBJECT_HEADER_BYTES + 9*INT_NUM_BYTE + 5*POINTER_NUM_BYTE; + +const int32_t DocumentsWriter::BYTE_BLOCK_SHIFT = 15; +const int32_t DocumentsWriter::BYTE_BLOCK_SIZE = (int32_t)pow(2.0, BYTE_BLOCK_SHIFT); +const int32_t DocumentsWriter::BYTE_BLOCK_MASK = BYTE_BLOCK_SIZE - 1; +const int32_t DocumentsWriter::BYTE_BLOCK_NOT_MASK = ~BYTE_BLOCK_MASK; + +const int32_t DocumentsWriter::CHAR_BLOCK_SHIFT = 14; +const int32_t DocumentsWriter::CHAR_BLOCK_SIZE = (int32_t)pow(2.0, CHAR_BLOCK_SHIFT); +const int32_t DocumentsWriter::CHAR_BLOCK_MASK = CHAR_BLOCK_SIZE - 1; + +int32_t DocumentsWriter::OBJECT_HEADER_BYTES = 8; +int32_t DocumentsWriter::OBJECT_POINTER_BYTES = 4; // TODO: should be 8 on 64-bit platform +int32_t DocumentsWriter::BYTES_PER_CHAR = 2; +int32_t DocumentsWriter::BYTES_PER_INT = 4; + +const int32_t DocumentsWriter::POINTER_NUM_BYTE = 4; +const int32_t DocumentsWriter::INT_NUM_BYTE = 4; +const int32_t DocumentsWriter::CHAR_NUM_BYTE = 2; //TODO: adjust for c++... + +const int32_t DocumentsWriter::MAX_TERM_LENGTH = DocumentsWriter::CHAR_BLOCK_SIZE-1; + + + +AbortException::AbortException(CLuceneError& _err, DocumentsWriter* docWriter): + err(_err) +{ + docWriter->setAborting(); +} + +DocumentsWriter::DocumentsWriter(CL_NS(store)::Directory* directory, IndexWriter* writer): + bufferedDeleteTerms(_CLNEW TermNumMapType(true, true)), + freeCharBlocks(FreeCharBlocksType(true)), + freeByteBlocks(FreeByteBlocksType(true)), + waitingThreadStates( CL_NS(util)::ValueArray(MAX_THREAD_STATE) ) +{ + numBytesAlloc = 0; + numBytesUsed = 0; + this->directory = directory; + this->writer = writer; + this->hasNorms = this->bufferIsFull = false; + fieldInfos = _CLNEW FieldInfos(); + + maxBufferedDeleteTerms = IndexWriter::DEFAULT_MAX_BUFFERED_DELETE_TERMS; + ramBufferSize = (int64_t) (IndexWriter::DEFAULT_RAM_BUFFER_SIZE_MB*1024*1024); + maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS; + + numBufferedDeleteTerms = 0; + copyByteBuffer = _CL_NEWARRAY(uint8_t, 4096); + *copyByteBuffer = 0; + + this->closed = this->flushPending = false; + _files = NULL; + _abortedFiles = NULL; + skipListWriter = NULL; + infoStream = NULL; + fieldsWriter = NULL; + tvx = tvf = tvd = NULL; + postingsFreeCountDW = postingsAllocCountDW = numWaiting = pauseThreads = abortCount = 0; + docStoreOffset = nextDocID = numDocsInRAM = numDocsInStore = nextWriteDocID = 0; +} +DocumentsWriter::~DocumentsWriter(){ + _CLLDELETE(bufferedDeleteTerms); + _CLLDELETE(skipListWriter); + _CLDELETE_LARRAY(copyByteBuffer); + _CLLDELETE(_files); + _CLLDELETE(fieldInfos); + + for(size_t i=0;ipostingsFreeListDW.values){ + if (this->postingsFreeCountDW < this->postingsFreeListDW.length) { + memset(this->postingsFreeListDW.values + this->postingsFreeCountDW + , NULL + , sizeof(Posting*)); + } + postingsFreeListDW.deleteUntilNULL(); + } +} + +void DocumentsWriter::setInfoStream(std::ostream* infoStream) { + this->infoStream = infoStream; +} + +void DocumentsWriter::setRAMBufferSizeMB(float_t mb) { + if ( (int32_t)mb == IndexWriter::DISABLE_AUTO_FLUSH) { + ramBufferSize = IndexWriter::DISABLE_AUTO_FLUSH; + } else { + ramBufferSize = (int64_t) (mb*1024*1024); + } +} + +float_t DocumentsWriter::getRAMBufferSizeMB() { + if (ramBufferSize == IndexWriter::DISABLE_AUTO_FLUSH) { + return (float_t)ramBufferSize; + } else { + return ramBufferSize/1024.0/1024.0; + } +} + +void DocumentsWriter::setMaxBufferedDocs(int32_t count) { + maxBufferedDocs = count; +} + +int32_t DocumentsWriter::getMaxBufferedDocs() { + return maxBufferedDocs; +} + +std::string DocumentsWriter::getSegment() { + return segment; +} + +int32_t DocumentsWriter::getNumDocsInRAM() { + return numDocsInRAM; +} + +const std::string& DocumentsWriter::getDocStoreSegment() { + return docStoreSegment; +} + +int32_t DocumentsWriter::getDocStoreOffset() { + return docStoreOffset; +} + +std::string DocumentsWriter::closeDocStore() { + + assert (allThreadsIdle()); + + const std::vector& flushedFiles = files(); + + if (infoStream != NULL) + (*infoStream) << string("\ncloseDocStore: ") << Misc::toString((int32_t)flushedFiles.size()) << string(" files to flush to segment ") << + docStoreSegment << string(" numDocs=") << Misc::toString(numDocsInStore) << string("\n"); + + if (flushedFiles.size() > 0) { + _CLDELETE(_files); + + if (tvx != NULL) { + // At least one doc in this run had term vectors enabled + assert ( !docStoreSegment.empty()); + tvx->close(); + _CLDELETE(tvx); + tvf->close(); + _CLDELETE(tvf); + tvd->close(); + _CLDELETE(tvd); + + assert ( 4+numDocsInStore*8 == directory->fileLength( (docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str()) ); // "after flush: tvx size mismatch: " + numDocsInStore + " docs vs " + directory->fileLength(docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION) + " length in bytes of " + docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION; + } + + if (fieldsWriter != NULL) { + assert (!docStoreSegment.empty()); + fieldsWriter->close(); + _CLDELETE(fieldsWriter); + + assert(numDocsInStore*8 == directory->fileLength( (docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ) );// "after flush: fdx size mismatch: " + numDocsInStore + " docs vs " + directory->fileLength(docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION) + " length in bytes of " + docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION; + } + + std::string s = docStoreSegment; + docStoreSegment.clear(); + docStoreOffset = 0; + numDocsInStore = 0; + return s; + } else { + return ""; + } +} + +const std::vector* DocumentsWriter::abortedFiles() { + return _abortedFiles; +} + +const std::vector& DocumentsWriter::files() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_files != NULL) + return *_files; + + _files = _CLNEW std::vector; + + // Stored fields: + if (fieldsWriter != NULL) { + assert ( !docStoreSegment.empty()); + _files->push_back(docStoreSegment + "." + IndexFileNames::FIELDS_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION); + } + + // Vectors: + if (tvx != NULL) { + assert ( !docStoreSegment.empty()); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_FIELDS_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + } + + return *_files; +} + +void DocumentsWriter::setAborting() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + abortCount++; +} + +void DocumentsWriter::abort(AbortException* ae) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // Anywhere that throws an AbortException must first + // mark aborting to make sure while the exception is + // unwinding the un-synchronized stack, no thread grabs + // the corrupt ThreadState that hit the aborting + // exception: + assert (ae == NULL || abortCount>0); + + try { + + if (infoStream != NULL) + (*infoStream) << string("docWriter: now abort\n"); + + // Forcefully remove waiting ThreadStates from line + for(int32_t i=0;iisIdle = true; + numWaiting = 0; + + // Wait for all other threads to finish with DocumentsWriter: + pauseAllThreads(); + + assert (0 == numWaiting); + + try { + bufferedDeleteTerms->clear(); + bufferedDeleteDocIDs.clear(); + numBufferedDeleteTerms = 0; + + try { + const std::vector& __abortedFiles = files(); + _abortedFiles = _CLNEW std::vector; + for ( std::vector::const_iterator itr = __abortedFiles.begin(); + itr != __abortedFiles.end(); itr ++ ){ + _abortedFiles->push_back(*itr); + } + } catch (...) { + _CLDELETE(_abortedFiles); + } + + docStoreSegment.clear(); + numDocsInStore = 0; + docStoreOffset = 0; + _CLDELETE(_files); + + // Clear vectors & fields from ThreadStates + for(size_t i=0;itvfLocal->reset(); + state->fdtLocal->reset(); + if (state->localFieldsWriter != NULL) { + try { + state->localFieldsWriter->close(); + } catch (...) { + } + _CLDELETE(state->localFieldsWriter); + } + } + + // Reset vectors writer + if (tvx != NULL) { + try { + tvx->close(); + } catch (...) { + } + _CLDELETE(tvx); + } + if (tvd != NULL) { + try { + tvd->close(); + } catch (...) { + } + _CLDELETE(tvd); + } + if (tvf != NULL) { + try { + tvf->close(); + } catch (...) { + } + _CLDELETE(tvf); + } + + // Reset fields writer + if (fieldsWriter != NULL) { + try { + fieldsWriter->close(); + } catch (...) { + } + _CLDELETE(fieldsWriter); + } + + // Discard pending norms: + const int32_t numField = fieldInfos->size(); + for (int32_t i=0;ifieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + BufferedNorms* n = norms[i]; + if (n != NULL) + try { + n->reset(); + } catch (...) { + } + } + } + + // Reset all postings data + resetPostingsData(); + + } _CLFINALLY ( + resumeAllThreads(); + ) + + // If we have a root cause exception, re-throw it now: + if (ae != NULL) { + CLuceneError& t = ae->err; + throw t; + } + } _CLFINALLY ( + if (ae != NULL) + abortCount--; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + ) +} + +void DocumentsWriter::resetPostingsData() { + // All ThreadStates should be idle when we are called + assert ( allThreadsIdle() ); + threadBindings.clear(); + segment.erase(); + numDocsInRAM = 0; + nextDocID = 0; + nextWriteDocID = 0; + _CLDELETE(_files); + balanceRAM(); + bufferIsFull = false; + flushPending = false; + for(size_t i=0;inumThreads = 0; + threadStates[i]->resetPostings(); + } + numBytesUsed = 0; +} + +// Returns true if an abort is in progress +bool DocumentsWriter::pauseAllThreads() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + pauseThreads++; + while(!allThreadsIdle()) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + return abortCount > 0; +} + +void DocumentsWriter::resumeAllThreads() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + pauseThreads--; + assert ( pauseThreads >= 0 ); + if (0 == pauseThreads){ + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } +} + +bool DocumentsWriter::allThreadsIdle() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + for(size_t i=0;iisIdle) + return false; + return true; +} + +int32_t DocumentsWriter::flush(bool _closeDocStore) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert ( allThreadsIdle() ); + + if (segment.empty()){ + // In case we are asked to flush an empty segment + segment = writer->newSegmentName(); + } + + newFiles.clear(); + + docStoreOffset = numDocsInStore; + + int32_t docCount; + + assert ( numDocsInRAM > 0 ); + + if (infoStream != NULL) + (*infoStream) << string("\nflush postings as segment ") << segment << string(" numDocs=") << Misc::toString(numDocsInRAM) << string("\n"); + + bool success = false; + + try { + + if (_closeDocStore) { + assert ( !docStoreSegment.empty()); + assert ( docStoreSegment.compare(segment) == 0 ); + const std::vector& tmp = files(); + for (std::vector::const_iterator itr = tmp.begin(); + itr != tmp.end(); itr++ ) + newFiles.push_back(*itr); + closeDocStore(); + } + + fieldInfos->write(directory, (segment + ".fnm").c_str() ); + + docCount = numDocsInRAM; + + writeSegment(newFiles); //write new files directly... + + success = true; + + } _CLFINALLY( + if (!success) + abort(NULL); + ) + + return docCount; +} + +void DocumentsWriter::createCompoundFile(const std::string& segment) +{ + CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str()); + for (std::vector::const_iterator itr = newFiles.begin(); + itr != newFiles.end(); itr ++ ) + cfsWriter->addFile( (*itr).c_str() ); + + // Perform the merge + cfsWriter->close(); + _CLDELETE(cfsWriter); +} + +bool DocumentsWriter::setFlushPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (flushPending) + return false; + else { + flushPending = true; + return true; + } +} + +void DocumentsWriter::clearFlushPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + flushPending = false; +} + +void DocumentsWriter::writeNorms(const std::string& segmentName, int32_t totalNumDoc) { + IndexOutput* normsOut = directory->createOutput( (segmentName + "." + IndexFileNames::NORMS_EXTENSION).c_str() ); + + try { + normsOut->writeBytes(SegmentMerger::NORMS_HEADER, SegmentMerger::NORMS_HEADER_length); + + const int32_t numField = fieldInfos->size(); + + for (int32_t fieldIdx=0;fieldIdxfieldInfo(fieldIdx); + if (fi->isIndexed && !fi->omitNorms) { + BufferedNorms* n = norms[fieldIdx]; + int64_t v; + if (n == NULL) + v = 0; + else { + v = n->out.getFilePointer(); + n->out.writeTo(normsOut); + n->reset(); + } + if (v < totalNumDoc) + fillBytes(normsOut, defaultNorm, (int32_t) (totalNumDoc-v)); + } + } + } _CLFINALLY ( + normsOut->close(); + _CLDELETE(normsOut); + ) +} + +void DocumentsWriter::writeSegment(std::vector& flushedFiles) { + + assert ( allThreadsIdle() ); + + assert ( nextDocID == numDocsInRAM ); + + const std::string segmentName = segment; + + TermInfosWriter* termsOut = _CLNEW TermInfosWriter(directory, segmentName.c_str(), fieldInfos, + writer->getTermIndexInterval()); + + IndexOutput* freqOut = directory->createOutput( (segmentName + ".frq").c_str() ); + IndexOutput* proxOut = directory->createOutput( (segmentName + ".prx").c_str() ); + + // Gather all FieldData's that have postings, across all + // ThreadStates + std::vector allFields; + assert ( allThreadsIdle() ); + for(size_t i=0;itrimFields(); + const int32_t numFields = state->numAllFieldData; + for(int32_t j=0;jallFieldDataArray[j]; + if (fp->numPostings > 0) + allFields.push_back(fp); + } + } + + // Sort by field name + std::sort(allFields.begin(),allFields.end(),ThreadState::FieldData::sort); + const int32_t numAllFields = allFields.size(); + + skipListWriter = _CLNEW DefaultSkipListWriter(termsOut->skipInterval, + termsOut->maxSkipLevels, + numDocsInRAM, freqOut, proxOut); + + int32_t start = 0; + while(start < numAllFields) { + + const TCHAR* fieldName = allFields[start]->fieldInfo->name; + + int32_t end = start+1; + while(end < numAllFields && _tcscmp(allFields[end]->fieldInfo->name, fieldName)==0 ) + end++; + + ValueArray fields(end-start); + for(int32_t i=start;iresetPostingArrays(); + + start = end; + } + + freqOut->close(); + _CLDELETE(freqOut); + proxOut->close(); + _CLDELETE(proxOut); + termsOut->close(); + _CLDELETE(termsOut); + _CLDELETE(skipListWriter); + + // Record all files we have flushed + flushedFiles.push_back(segmentFileName(IndexFileNames::FIELD_INFOS_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::FREQ_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::PROX_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::TERMS_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::TERMS_INDEX_EXTENSION)); + + if (hasNorms) { + writeNorms(segmentName, numDocsInRAM); + flushedFiles.push_back(segmentFileName(IndexFileNames::NORMS_EXTENSION)); + } + + if (infoStream != NULL) { + const int64_t newSegmentSize = segmentSize(segmentName); + + (*infoStream) << string(" oldRAMSize=") << Misc::toString(numBytesUsed) << + string(" newFlushedSize=") << Misc::toString(newSegmentSize) << + string(" docs/MB=") << Misc::toString((float_t)(numDocsInRAM/(newSegmentSize/1024.0/1024.0))) << + string(" new/old=") << Misc::toString((float_t)(100.0*newSegmentSize/numBytesUsed)) << string("%\n"); + } + + resetPostingsData(); + + nextDocID = 0; + nextWriteDocID = 0; + numDocsInRAM = 0; + _CLDELETE(_files); + + // Maybe downsize this->postingsFreeListDW array + if (this->postingsFreeListDW.length > 1.5*this->postingsFreeCountDW) { + int32_t newSize = this->postingsFreeListDW.length; + while(newSize > 1.25*this->postingsFreeCountDW) { + newSize = (int32_t) (newSize*0.8); + } + this->postingsFreeListDW.resize(newSize); + } + +} + +std::string DocumentsWriter::segmentFileName(const char* extension) { + return segmentFileName( string(extension) ); +} +std::string DocumentsWriter::segmentFileName(const std::string& extension) { + return segment + "." + extension; +} + +int32_t DocumentsWriter::compareText(const TCHAR* text1, const TCHAR* text2) { +int32_t pos1=0; +int32_t pos2=0; + while(true) { + const TCHAR c1 = text1[pos1++]; + const TCHAR c2 = text2[pos2++]; + if (c1 < c2) + if (CLUCENE_END_OF_WORD == c2) + return 1; + else + return -1; + else if (c2 < c1) + if (CLUCENE_END_OF_WORD == c1) + return -1; + else + return 1; + else if (CLUCENE_END_OF_WORD == c1) + return 0; + } +} + + +void DocumentsWriter::appendPostings(ArrayBase* fields, + TermInfosWriter* termsOut, + IndexOutput* freqOut, + IndexOutput* proxOut) { + + const int32_t fieldNumber = (*fields)[0]->fieldInfo->number; + int32_t numFields = fields->length; + + ObjectArray mergeStatesData(numFields); + ValueArray mergeStates(numFields); + + for(int32_t i=0;ifield = (*fields)[i]; + fms->postings = fms->field->sortPostings(); + + assert ( fms->field->fieldInfo == (*fields)[0]->fieldInfo ); + + // Should always be true + bool result = fms->nextTerm(); + assert (result); + } + memcpy(mergeStates.values,mergeStatesData.values,sizeof(FieldMergeState*) * numFields); + + const int32_t skipInterval = termsOut->skipInterval; + currentFieldStorePayloads = (*fields)[0]->fieldInfo->storePayloads; + + ValueArray termStates(numFields); + + while(numFields > 0) { + + // Get the next term to merge + termStates.values[0] = mergeStates[0]; + int32_t numToMerge = 1; + + for(int32_t i=1;itext; + const int32_t textOffset = mergeStates[i]->textOffset; + const int32_t cmp = compareText(text+ textOffset, termStates[0]->text + termStates[0]->textOffset); + + if (cmp < 0) { + termStates.values[0] = mergeStates[i]; + numToMerge = 1; + } else if (cmp == 0) + termStates.values[numToMerge++] = mergeStates[i]; + } + + int32_t df = 0; + int32_t lastPayloadLength = -1; + + int32_t lastDoc = 0; + + const TCHAR* start = termStates[0]->text + termStates[0]->textOffset; + const TCHAR* pos = start; + while(*pos != CLUCENE_END_OF_WORD) + pos++; + + int64_t freqPointer = freqOut->getFilePointer(); + int64_t proxPointer = proxOut->getFilePointer(); + + skipListWriter->resetSkip(); + + // Now termStates has numToMerge FieldMergeStates + // which all share the same term. Now we must + // interleave the docID streams. + while(numToMerge > 0) { + + if ((++df % skipInterval) == 0) { + skipListWriter->setSkipData(lastDoc, currentFieldStorePayloads, lastPayloadLength); + skipListWriter->bufferSkip(df); + } + + FieldMergeState* minState = termStates[0]; + for(int32_t i=1;idocID < minState->docID) + minState = termStates[i]; + + const int32_t doc = minState->docID; + const int32_t termDocFreq = minState->termFreq; + + assert (doc < numDocsInRAM); + assert ( doc > lastDoc || df == 1 ); + + const int32_t newDocCode = (doc-lastDoc)<<1; + lastDoc = doc; + + ByteSliceReader& prox = minState->prox; + + // Carefully copy over the prox + payload info, + // changing the format to match Lucene's segment + // format. + for(int32_t j=0;jwriteVInt(code|1); + proxOut->writeVInt(payloadLength); + lastPayloadLength = payloadLength; + } else + proxOut->writeVInt(code & (~1)); + if (payloadLength > 0) + copyBytes(&prox, proxOut, payloadLength); + } else { + assert ( 0 == (code & 1) ); + proxOut->writeVInt(code>>1); + } + } + + if (1 == termDocFreq) { + freqOut->writeVInt(newDocCode|1); + } else { + freqOut->writeVInt(newDocCode); + freqOut->writeVInt(termDocFreq); + } + + if (!minState->nextDoc()) { + + // Remove from termStates + int32_t upto = 0; + for(int32_t i=0;inextTerm()) { + // OK, no more terms, so remove from mergeStates + // as well + upto = 0; + for(int32_t i=0;i 0); + + // Done merging this term + + int64_t skipPointer = skipListWriter->writeSkip(freqOut); + + // Write term + termInfo.set(df, freqPointer, proxPointer, (int32_t) (skipPointer - freqPointer)); + termsOut->add(fieldNumber, start, pos-start, &termInfo); + } +} + + +void DocumentsWriter::close() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + closed = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) +} + +DocumentsWriter::ThreadState* DocumentsWriter::getThreadState(Document* doc, Term* delTerm) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // First, find a thread state. If this thread already + // has affinity to a specific ThreadState, use that one + // again. + ThreadState* state = NULL; + if ( threadBindings.find(_LUCENE_CURRTHREADID) == threadBindings.end() ){ + // First time this thread has called us since last flush + ThreadState* minThreadState = NULL; + for(size_t i=0;inumThreads < minThreadState->numThreads) + minThreadState = ts; + } + if (minThreadState != NULL && (minThreadState->numThreads == 0 || threadStates.length == MAX_THREAD_STATE)) { + state = minThreadState; + state->numThreads++; + } else { + // Just create a new "private" thread state + threadStates.resize(1+threadStates.length); + //fill the new position + state = threadStates.values[threadStates.length-1] = _CLNEW ThreadState(this); + } + threadBindings.put(_LUCENE_CURRTHREADID, state); + }else{ + state = threadBindings[_LUCENE_CURRTHREADID]; + } + + // Next, wait until my thread state is idle (in case + // it's shared with other threads) and for threads to + // not be paused nor a flush pending: + while(!closed && (!state->isIdle || pauseThreads != 0 || flushPending || abortCount > 0)) + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + + if (closed) + _CLTHROWA(CL_ERR_AlreadyClosed, "this IndexWriter is closed"); + + if (segment.empty()) + segment = writer->newSegmentName(); + + state->isIdle = false; + + try { + bool success = false; + try { + state->init(doc, nextDocID); + if (delTerm != NULL) { + addDeleteTerm(delTerm, state->docID); + state->doFlushAfter = timeToFlushDeletes(); + } + // Only increment nextDocID & numDocsInRAM on successful init + nextDocID++; + numDocsInRAM++; + + // We must at this point commit to flushing to ensure we + // always get N docs when we flush by doc count, even if + // > 1 thread is adding documents: + if (!flushPending && maxBufferedDocs != IndexWriter::DISABLE_AUTO_FLUSH + && numDocsInRAM >= maxBufferedDocs) { + flushPending = true; + state->doFlushAfter = true; + } + + success = true; + } _CLFINALLY ( + if (!success) { + // Forcefully idle this ThreadState: + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + if (state->doFlushAfter) { + state->doFlushAfter = false; + flushPending = false; + } + } + ) + } catch (AbortException& ae) { + abort(&ae); + } + + return state; +} + +bool DocumentsWriter::addDocument(Document* doc, Analyzer* analyzer){ + return updateDocument(doc, analyzer, NULL); +} + +bool DocumentsWriter::updateDocument(Term* t, Document* doc, Analyzer* analyzer){ + return updateDocument(doc, analyzer, t); +} + +bool DocumentsWriter::updateDocument(Document* doc, Analyzer* analyzer, Term* delTerm) { + + // This call is synchronized but fast + ThreadState* state = getThreadState(doc, delTerm); + try { + bool success = false; + try { + try { + // This call is not synchronized and does all the work + state->processDocument(analyzer); + } _CLFINALLY ( + // This call is synchronized but fast + finishDocument(state); + ) + success = true; + } _CLFINALLY ( + if (!success) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // If this thread state had decided to flush, we + // must clear it so another thread can flush + if (state->doFlushAfter) { + state->doFlushAfter = false; + flushPending = false; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } + + // Immediately mark this document as deleted + // since likely it was partially added. This + // keeps indexing as "all or none" (atomic) when + // adding a document: + addDeleteDocID(state->docID); + } + ) + } catch (AbortException& ae) { + abort(&ae); + } + + return state->doFlushAfter || timeToFlushDeletes(); +} + +int32_t DocumentsWriter::getNumBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return numBufferedDeleteTerms; +} + +const DocumentsWriter::TermNumMapType& DocumentsWriter::getBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return *bufferedDeleteTerms; +} + +const std::vector* DocumentsWriter::getBufferedDeleteDocIDs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return &bufferedDeleteDocIDs; +} + +// Reset buffered deletes. +void DocumentsWriter::clearBufferedDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + DocumentsWriter::TermNumMapType::iterator term = bufferedDeleteTerms->begin(); + while ( term != bufferedDeleteTerms->end() ){ + Term* t = term->first; + _CLDELETE(term->second); + bufferedDeleteTerms->erase(term); + _CLDECDELETE(t); + term = bufferedDeleteTerms->begin(); + } + bufferedDeleteDocIDs.clear(); + numBufferedDeleteTerms = 0; + if (numBytesUsed > 0) + resetPostingsData(); +} + +bool DocumentsWriter::bufferDeleteTerms(const ArrayBase* terms) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(pauseThreads != 0 || flushPending){ + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + for (size_t i = 0; i < terms->length; i++) + addDeleteTerm((*terms)[i], numDocsInRAM); + return timeToFlushDeletes(); +} + +bool DocumentsWriter::bufferDeleteTerm(Term* term) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(pauseThreads != 0 || flushPending){ + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + addDeleteTerm(term, numDocsInRAM); + return timeToFlushDeletes(); +} + +bool DocumentsWriter::timeToFlushDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return (bufferIsFull + || (maxBufferedDeleteTerms != IndexWriter::DISABLE_AUTO_FLUSH + && numBufferedDeleteTerms >= maxBufferedDeleteTerms)) + && setFlushPending(); +} + +void DocumentsWriter::setMaxBufferedDeleteTerms(int32_t _maxBufferedDeleteTerms) { + this->maxBufferedDeleteTerms = _maxBufferedDeleteTerms; +} + +int32_t DocumentsWriter::getMaxBufferedDeleteTerms() { + return maxBufferedDeleteTerms; +} + +bool DocumentsWriter::hasDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return bufferedDeleteTerms->size() > 0 || bufferedDeleteDocIDs.size() > 0; +} + +// Buffer a term in bufferedDeleteTerms, which records the +// current number of documents buffered in ram so that the +// delete term will be applied to those documents as well +// as the disk segments. +void DocumentsWriter::addDeleteTerm(Term* term, int32_t docCount) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + Num* num = bufferedDeleteTerms->get(term); + if (num == NULL) { + bufferedDeleteTerms->put(_CL_POINTER(term), new Num(docCount)); + // This is coarse approximation of actual bytes used: + numBytesUsed += ( _tcslen(term->field()) + term->textLength()) * BYTES_PER_CHAR + + 4 + 5 * OBJECT_HEADER_BYTES + 5 * OBJECT_POINTER_BYTES; + if (ramBufferSize != IndexWriter::DISABLE_AUTO_FLUSH + && numBytesUsed > ramBufferSize) { + bufferIsFull = true; + } + } else { + num->setNum(docCount); + } + numBufferedDeleteTerms++; +} + +void DocumentsWriter::addDeleteDocID(int32_t docId) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + bufferedDeleteDocIDs.push_back(docId); + numBytesUsed += OBJECT_HEADER_BYTES + BYTES_PER_INT + OBJECT_POINTER_BYTES; +} + +void DocumentsWriter::finishDocument(ThreadState* state) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (abortCount > 0) { + // Forcefully idle this threadstate -- its state will + // be reset by abort() + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + return; + } + + // Now write the indexed document to the real files. + if (nextWriteDocID == state->docID) { + // It's my turn, so write everything now: + nextWriteDocID++; + state->writeDocument(); + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + + // If any states were waiting on me, sweep through and + // flush those that are enabled by my write. + if (numWaiting > 0) { + bool any = true; + while(any) { + any = false; + for(int32_t i=0;idocID == nextWriteDocID) { + s->writeDocument(); + s->isIdle = true; + nextWriteDocID++; + any = true; + if (numWaiting > i+1) + // Swap in the last waiting state to fill in + // the hole we just created. It's important + // to do this as-we-go and not at the end of + // the loop, because if we hit an aborting + // exception in one of the s.writeDocument + // calls (above), it leaves this array in an + // inconsistent state: + waitingThreadStates.values[i] = waitingThreadStates[numWaiting-1]; + numWaiting--; + } else { + assert (!s->isIdle); + i++; + } + } + } + } + } else { + // Another thread got a docID before me, but, it + // hasn't finished its processing. So add myself to + // the line but don't hold up this thread. + waitingThreadStates.values[numWaiting++] = state; + } +} + +int64_t DocumentsWriter::getRAMUsed() { + return numBytesUsed; +} + +void DocumentsWriter::fillBytes(IndexOutput* out, uint8_t b, int32_t numBytes) { + for(int32_t i=0;iwriteByte(b); +} + +void DocumentsWriter::copyBytes(IndexInput* srcIn, IndexOutput* destIn, int64_t numBytes) { + // TODO: we could do this more efficiently (save a copy) + // because it's always from a ByteSliceReader -> + // IndexOutput + while(numBytes > 0) { + int32_t chunk; + if (numBytes > 4096) + chunk = 4096; + else + chunk = (int32_t) numBytes; + srcIn->readBytes(copyByteBuffer, chunk); + destIn->writeBytes(copyByteBuffer, chunk); + numBytes -= chunk; + } +} + + +int64_t DocumentsWriter::segmentSize(const std::string& segmentName) { + assert (infoStream != NULL); + + int64_t size = directory->fileLength( (segmentName + ".tii").c_str() ) + + directory->fileLength( (segmentName + ".tis").c_str() ) + + directory->fileLength( (segmentName + ".frq").c_str() ) + + directory->fileLength( (segmentName + ".prx").c_str() ); + + const std::string normFileName = segmentName + ".nrm"; + if (directory->fileExists(normFileName.c_str())) + size += directory->fileLength(normFileName.c_str()); + + return size; +} + +void DocumentsWriter::getPostings(ValueArray& postings) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + numBytesUsed += postings.length * POSTING_NUM_BYTE; + int32_t numToCopy; + if (this->postingsFreeCountDW < postings.length) + numToCopy = this->postingsFreeCountDW; + else + numToCopy = postings.length; + + const int32_t start = this->postingsFreeCountDW-numToCopy; + if ( numToCopy > 0 ){ + memcpy(postings.values, this->postingsFreeListDW.values+start, sizeof(Posting*)*numToCopy); + } + this->postingsFreeCountDW -= numToCopy; + + // Directly allocate the remainder if any + if (numToCopy < postings.length) { + const int32_t extra = postings.length - numToCopy; + const int32_t newPostingsAllocCount = this->postingsAllocCountDW + extra; + if (newPostingsAllocCount > this->postingsFreeListDW.length) + this->postingsFreeListDW.resize((int32_t) (1.25 * newPostingsAllocCount)); + + balanceRAM(); + for(size_t i=numToCopy;ipostingsAllocCountDW++; + } + } +} + +void DocumentsWriter::recyclePostings(ValueArray& postings, int32_t numPostings) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Move all Postings from this ThreadState back to our + // free list. We pre-allocated this array while we were + // creating Postings to make sure it's large enough + assert (this->postingsFreeCountDW + numPostings <= this->postingsFreeListDW.length); + if ( numPostings > 0 ) + memcpy (this->postingsFreeListDW.values + this->postingsFreeCountDW, postings.values, numPostings * sizeof(Posting*)); + this->postingsFreeCountDW += numPostings; +} + +uint8_t* DocumentsWriter::getByteBlock(bool trackAllocations) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + const int32_t size = freeByteBlocks.size(); + uint8_t* b; + if (0 == size) { + numBytesAlloc += BYTE_BLOCK_SIZE; + balanceRAM(); + b = _CL_NEWARRAY(uint8_t, BYTE_BLOCK_SIZE); + memset(b,0,sizeof(uint8_t) * BYTE_BLOCK_SIZE); + } else { + b = *freeByteBlocks.begin(); + freeByteBlocks.remove(freeByteBlocks.begin(),true); + } + if (trackAllocations) + numBytesUsed += BYTE_BLOCK_SIZE; + return b; +} + +void DocumentsWriter::recycleBlocks(ArrayBase& blocks, int32_t start, int32_t end) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for(int32_t i=start;i& blocks, int32_t start, int32_t numBlocks) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + for(int32_t i=start;i freeTrigger) { + if (infoStream != NULL) + (*infoStream) << string(" RAM: now balance allocations: usedMB=") << toMB(numBytesUsed) + + string(" vs trigger=") << toMB(flushTrigger) << + string(" allocMB=") << toMB(numBytesAlloc) << + string(" vs trigger=") << toMB(freeTrigger) << + string(" postingsFree=") << toMB(this->postingsFreeCountDW*POSTING_NUM_BYTE) << + string(" byteBlockFree=") << toMB(freeByteBlocks.size()*BYTE_BLOCK_SIZE) << + string(" charBlockFree=") << toMB(freeCharBlocks.size()*CHAR_BLOCK_SIZE*CHAR_NUM_BYTE) << string("\n"); + + // When we've crossed 100% of our target Postings + // RAM usage, try to free up until we're back down + // to 95% + const int64_t startBytesAlloc = numBytesAlloc; + + const int32_t postingsFreeChunk = (int32_t) (BYTE_BLOCK_SIZE / POSTING_NUM_BYTE); + + int32_t iter = 0; + + // We free equally from each pool in 64 KB + // chunks until we are below our threshold + // (freeLevel) + + while(numBytesAlloc > freeLevel) { + if (0 == freeByteBlocks.size() && 0 == freeCharBlocks.size() && 0 == this->postingsFreeCountDW) { + // Nothing else to free -- must flush now. + bufferIsFull = true; + if (infoStream != NULL) + (*infoStream) << string(" nothing to free; now set bufferIsFull\n"); + break; + } + + if ((0 == iter % 3) && freeByteBlocks.size() > 0) { + freeByteBlocks.remove(freeByteBlocks.size()-1); + numBytesAlloc -= BYTE_BLOCK_SIZE; + } + + if ((1 == iter % 3) && freeCharBlocks.size() > 0) { + freeCharBlocks.remove(freeCharBlocks.size()-1); + numBytesAlloc -= CHAR_BLOCK_SIZE * CHAR_NUM_BYTE; + } + + if ((2 == iter % 3) && this->postingsFreeCountDW > 0) { + int32_t numToFree; + if (this->postingsFreeCountDW >= postingsFreeChunk) + numToFree = postingsFreeChunk; + else + numToFree = this->postingsFreeCountDW; + for ( size_t i = this->postingsFreeCountDW-numToFree;i< this->postingsFreeCountDW; i++ ){ + _CLDELETE(this->postingsFreeListDW.values[i]); + } + this->postingsFreeCountDW -= numToFree; + this->postingsAllocCountDW -= numToFree; + numBytesAlloc -= numToFree * POSTING_NUM_BYTE; + } + + iter++; + } + + if (infoStream != NULL){ + (*infoStream) << " after free: freedMB=" + Misc::toString((float_t)((startBytesAlloc-numBytesAlloc)/1024.0/1024.0)) + + " usedMB=" + Misc::toString((float_t)(numBytesUsed/1024.0/1024.0)) + + " allocMB=" + Misc::toString((float_t)(numBytesAlloc/1024.0/1024.0)) << string("\n"); + } + + } else { + // If we have not crossed the 100% mark, but have + // crossed the 95% mark of RAM we are actually + // using, go ahead and flush. This prevents + // over-allocating and then freeing, with every + // flush. + if (numBytesUsed > flushTrigger) { + if (infoStream != NULL){ + (*infoStream) << string(" RAM: now flush @ usedMB=") << Misc::toString((float_t)(numBytesUsed/1024.0/1024.0)) << + string(" allocMB=") << Misc::toString((float_t)(numBytesAlloc/1024.0/1024.0)) << + string(" triggerMB=") << Misc::toString((float_t)(flushTrigger/1024.0/1024.0)) << string("\n"); + } + + bufferIsFull = true; + } + } +} + + +DocumentsWriter::BufferedNorms::BufferedNorms(){ + this->upto = 0; +} +void DocumentsWriter::BufferedNorms::add(float_t norm){ + uint8_t b = Similarity::encodeNorm(norm); + out.writeByte(b); + upto++; +} +void DocumentsWriter::BufferedNorms::reset(){ + out.reset(); + upto = 0; +} +void DocumentsWriter::BufferedNorms::fill(int32_t docID){ + // Must now fill in docs that didn't have this + // field. Note that this is how norms can consume + // tremendous storage when the docs have widely + // varying different fields, because we are not + // storing the norms sparsely (see LUCENE-830) + if (upto < docID) { + fillBytes(&out, defaultNorm, docID-upto); + upto = docID; + } +} + + + +DocumentsWriter::FieldMergeState::FieldMergeState(){ + field = NULL; + postings = NULL; + p = NULL; + text = NULL; + textOffset = 0; + postingUpto = -1; + docID = 0; + termFreq = 0; +} +DocumentsWriter::FieldMergeState::~FieldMergeState(){ +} +bool DocumentsWriter::FieldMergeState::nextTerm(){ + postingUpto++; + if (postingUpto == field->numPostings) + return false; + + p = (*postings)[postingUpto]; + docID = 0; + + text = field->threadState->charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + textOffset = p->textStart & CHAR_BLOCK_MASK; + + if (p->freqUpto > p->freqStart) + freq.init(field->threadState->postingsPool, p->freqStart, p->freqUpto); + else + freq.bufferOffset = freq.upto = freq.endIndex = 0; + + prox.init(field->threadState->postingsPool, p->proxStart, p->proxUpto); + + // Should always be true + bool result = nextDoc(); + assert (result); + + return true; +} + +bool DocumentsWriter::FieldMergeState::nextDoc() { + if (freq.bufferOffset + freq.upto == freq.endIndex) { + if (p->lastDocCode != -1) { + // Return last doc + docID = p->lastDocID; + termFreq = p->docFreq; + p->lastDocCode = -1; + return true; + } else + // EOF + return false; + } + + const uint32_t code = (uint32_t)freq.readVInt(); + docID += code >> 1; //unsigned shift + if ((code & 1) != 0) + termFreq = 1; + else + termFreq = freq.readVInt(); + + return true; +} + + +DocumentsWriter::ByteSliceReader::ByteSliceReader(){ + pool = NULL; + bufferUpto = 0; + buffer = 0; + limit = 0; + level = 0; + upto = 0; + bufferOffset = 0; + endIndex = 0; +} +DocumentsWriter::ByteSliceReader::~ByteSliceReader(){ +} +const char* DocumentsWriter::ByteSliceReader::getDirectoryType() const{ + return ""; +} +const char* DocumentsWriter::ByteSliceReader::getObjectName() const{ + return getClassName(); +} +const char* DocumentsWriter::ByteSliceReader::getClassName(){ + return "DocumentsWriter::ByteSliceReader"; +} +IndexInput* DocumentsWriter::ByteSliceReader::clone() const{ + _CLTHROWA(CL_ERR_UnsupportedOperation, "Not implemented"); +} +void DocumentsWriter::ByteSliceReader::init(ByteBlockPool* _pool, int32_t _startIndex, int32_t _endIndex) { + + assert (_endIndex-_startIndex > 0); + + level = 0; + this->pool = _pool; + this->endIndex = _endIndex; + + bufferUpto = _startIndex / BYTE_BLOCK_SIZE; + bufferOffset = bufferUpto * BYTE_BLOCK_SIZE; + buffer = pool->buffers[bufferUpto]; + upto = _startIndex & BYTE_BLOCK_MASK; + + const int32_t firstSize = levelSizeArray[0]; + + if (_startIndex+firstSize >= endIndex) { + // There is only this one slice to read + limit = endIndex & BYTE_BLOCK_MASK; + } else + limit = upto+firstSize-4; +} + +uint8_t DocumentsWriter::ByteSliceReader::readByte() { + // Assert that we are not @ EOF + assert (upto + bufferOffset < endIndex); + if (upto == limit) + nextSlice(); + return buffer[upto++]; +} + +int64_t DocumentsWriter::ByteSliceReader::writeTo(IndexOutput* out) { + int64_t size = 0; + while(true) { + if (limit + bufferOffset == endIndex) { + assert (endIndex - bufferOffset >= upto); + out->writeBytes(buffer+upto, limit-upto); + size += limit-upto; + break; + } else { + out->writeBytes(buffer+upto, limit-upto); + size += limit-upto; + nextSlice(); + } + } + + return size; +} + +void DocumentsWriter::ByteSliceReader::nextSlice() { + + // Skip to our next slice + const int32_t nextIndex = ((buffer[limit]&0xff)<<24) + ((buffer[1+limit]&0xff)<<16) + ((buffer[2+limit]&0xff)<<8) + (buffer[3+limit]&0xff); + level = nextLevelArray[level]; + const int32_t newSize = levelSizeArray[level]; + + bufferUpto = nextIndex / BYTE_BLOCK_SIZE; + bufferOffset = bufferUpto * BYTE_BLOCK_SIZE; + + buffer = pool->buffers[bufferUpto]; + upto = nextIndex & BYTE_BLOCK_MASK; + + if (nextIndex + newSize >= endIndex) { + // We are advancing to the const slice + assert (endIndex - nextIndex > 0); + limit = endIndex - bufferOffset; + } else { + // This is not the const slice (subtract 4 for the + // forwarding address at the end of this new slice) + limit = upto+newSize-4; + } +} + +void DocumentsWriter::ByteSliceReader::readBytes(uint8_t* b, int32_t len) { + while(len > 0) { + const int32_t numLeft = limit-upto; + if (numLeft < len) { + // Read entire slice + memcpy(b, buffer+upto,numLeft * sizeof(uint8_t)); + b += numLeft; + len -= numLeft; + nextSlice(); + } else { + // This slice is the last one + memcpy(b, buffer+upto,len * sizeof(uint8_t)); + upto += len; + break; + } + } +} + +int64_t DocumentsWriter::ByteSliceReader::getFilePointer() const{_CLTHROWA(CL_ERR_Runtime,"not implemented");} +int64_t DocumentsWriter::ByteSliceReader::length() const{_CLTHROWA(CL_ERR_Runtime,"not implemented");} +void DocumentsWriter::ByteSliceReader::seek(const int64_t /*pos*/) {_CLTHROWA(CL_ERR_Runtime,"not implemented");} +void DocumentsWriter::ByteSliceReader::close() {_CLTHROWA(CL_ERR_Runtime,"not implemented");} + +DocumentsWriter::ByteBlockPool::ByteBlockPool( bool _trackAllocations, DocumentsWriter* _parent): + BlockPool(_parent, BYTE_BLOCK_SIZE, _trackAllocations) +{ +} +DocumentsWriter::ByteBlockPool::~ByteBlockPool(){ + reset(); + //delete the first block + _CLDELETE_ARRAY(buffer); +} +uint8_t* DocumentsWriter::ByteBlockPool::getNewBlock(bool _trackAllocations){ + return parent->getByteBlock(_trackAllocations); +} +int32_t DocumentsWriter::ByteBlockPool::newSlice(const int32_t size) { + if (tUpto > BYTE_BLOCK_SIZE-size) + nextBuffer(); + const int32_t upto = tUpto; + tUpto += size; + buffer[tUpto-1] = 16; + return upto; +} + +int32_t DocumentsWriter::ByteBlockPool::allocSlice(uint8_t* slice, const int32_t upto) { + const int32_t level = slice[upto] & 15; + assert(level < 10); + const int32_t newLevel = nextLevelArray[level]; + const int32_t newSize = levelSizeArray[newLevel]; + + // Maybe allocate another block + if (tUpto > BYTE_BLOCK_SIZE-newSize) + nextBuffer(); + + const int32_t newUpto = tUpto; + const uint32_t offset = newUpto + tOffset; + tUpto += newSize; + + // Copy forward the past 3 bytes (which we are about + // to overwrite with the forwarding address): + buffer[newUpto] = slice[upto-3]; + buffer[newUpto+1] = slice[upto-2]; + buffer[newUpto+2] = slice[upto-1]; + + // Write forwarding address at end of last slice: + slice[upto-3] = (uint8_t) (offset >> 24); //offset is unsigned... + slice[upto-2] = (uint8_t) (offset >> 16); + slice[upto-1] = (uint8_t) (offset >> 8); + slice[upto] = (uint8_t) offset; + + // Write new level: + buffer[tUpto-1] = (uint8_t) (16|newLevel); + + return newUpto+3; +} +void DocumentsWriter::ByteBlockPool::reset() { + if (bufferUpto != -1) { + // We allocated at least one buffer + + for(int i=0;i 0) + // Recycle all but the first buffer + parent->recycleBlocks(buffers, 1, 1+bufferUpto); + + // Re-use the first buffer + bufferUpto = 0; + tUpto = 0; + tOffset = 0; + buffer = buffers[0]; + } +} +DocumentsWriter::CharBlockPool::CharBlockPool(DocumentsWriter* _parent): + BlockPool(_parent, CHAR_BLOCK_SIZE, false) +{ +} +DocumentsWriter::CharBlockPool::~CharBlockPool(){ +} +TCHAR* DocumentsWriter::CharBlockPool::getNewBlock(bool){ + return parent->getCharBlock(); +} +void DocumentsWriter::CharBlockPool::reset() { + parent->recycleBlocks(buffers, 0, 1+bufferUpto); + bufferUpto = -1; + tUpto = blockSize; + tOffset = -blockSize; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_DocumentsWriter.h clucene-core-2.3.3.4/src/core/CLucene/index/_DocumentsWriter.h --- clucene-core-0.9.21b/src/core/CLucene/index/_DocumentsWriter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_DocumentsWriter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,968 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_DocumentsWriter_ +#define _lucene_index_DocumentsWriter_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/config/_threads.h" +#include "CLucene/util/Array.h" +#include "CLucene/store/_RAMDirectory.h" +#include "_TermInfo.h" + +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(analysis,Token) +CL_CLASS_DEF(analysis,TokenStream) +CL_CLASS_DEF(document,Field) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(util,StringReader) + +CL_NS_DEF(index) + +class DocumentsWriter; +class DefaultSkipListWriter; +class FieldInfos; +class FieldsWriter; +class FieldInfos; +class IndexWriter; +class TermInfo; +class TermInfosWriter; +class Term; +class FieldInfo; +class Term_Compare; +class Term_Equals; + +/** Used only internally to DW to call abort "up the stack" */ +class AbortException{ +public: + CLuceneError err; + AbortException(CLuceneError& _err, DocumentsWriter* docWriter); +}; + +/** + * This class accepts multiple added documents and directly + * writes a single segment file. It does this more + * efficiently than creating a single segment per document + * (with DocumentWriter) and doing standard merges on those + * segments. + * + * When a document is added, its stored fields (if any) and + * term vectors (if any) are immediately written to the + * Directory (ie these do not consume RAM). The freq/prox + * postings are accumulated into a Postings hash table keyed + * by term. Each entry in this hash table holds a separate + * uint8_t stream (allocated as incrementally growing slices + * into large shared uint8_t[] arrays) for freq and prox, that + * contains the postings data for multiple documents. If + * vectors are enabled, each unique term for each document + * also allocates a PostingVector instance to similarly + * track the offsets & positions uint8_t stream. + * + * Once the Postings hash is full (ie is consuming the + * allowed RAM) or the number of added docs is large enough + * (in the case we are flushing by doc count instead of RAM + * usage), we create a real segment and flush it to disk and + * reset the Postings hash. + * + * In adding a document we first organize all of its fields + * by field name. We then process field by field, and + * record the Posting hash per-field. After each field we + * flush its term vectors. When it's time to flush the full + * segment we first sort the fields by name, and then go + * field by field and sorts its postings. + * + * + * Threads: + * + * Multiple threads are allowed into addDocument at once. + * There is an initial synchronized call to getThreadState + * which allocates a ThreadState for this thread. The same + * thread will get the same ThreadState over time (thread + * affinity) so that if there are consistent patterns (for + * example each thread is indexing a different content + * source) then we make better use of RAM. Then + * processDocument is called on that ThreadState without + * synchronization (most of the "heavy lifting" is in this + * call). Finally the synchronized "finishDocument" is + * called to flush changes to the directory. + * + * Each ThreadState instance has its own Posting hash. Once + * we're using too much RAM, we flush all Posting hashes to + * a segment by merging the docIDs in the posting lists for + * the same term across multiple thread states (see + * writeSegment and appendPostings). + * + * When flush is called by IndexWriter, or, we flush + * internally when autoCommit=false, we forcefully idle all + * threads and flush only once they are all idle. This + * means you can call flush with a given thread even while + * other threads are actively adding/deleting documents. + * + * + * Exceptions: + * + * Because this class directly updates in-memory posting + * lists, and flushes stored fields and term vectors + * directly to files in the directory, there are certain + * limited times when an exception can corrupt this state. + * For example, a disk full while flushing stored fields + * leaves this file in a corrupt state. Or, an OOM + * exception while appending to the in-memory posting lists + * can corrupt that posting list. We call such exceptions + * "aborting exceptions". In these cases we must call + * abort() to discard all docs added since the last flush. + * + * All other exceptions ("non-aborting exceptions") can + * still partially update the index structures. These + * updates are consistent, but, they represent only a part + * of the document seen up until the exception was hit. + * When this happens, we immediately mark the document as + * deleted so that the document is always atomically ("all + * or none") added to the index. + */ +class DocumentsWriter { +public: + + // Number of documents a delete term applies to. + class Num { + private: + int32_t num; + public: + Num(int32_t num) { + this->num = num; + } + int32_t getNum() { + return num; + } + void setNum(int32_t num) { + // Only record the new number if it's greater than the + // current one. This is important because if multiple + // threads are replacing the same doc at nearly the + // same time, it's possible that one thread that got a + // higher docID is scheduled before the other + // threads. + if (num > this->num) + this->num = num; + } + }; + typedef CL_NS(util)::CLHashMap, CL_NS(util)::Deletor::Object > TermNumMapType; + +private: + IndexWriter* writer; + CL_NS(store)::Directory* directory; + DEFINE_MUTEX(THIS_LOCK) + DEFINE_CONDITION(THIS_WAIT_CONDITION) + + FieldInfos* fieldInfos; // All fields we've seen + CL_NS(store)::IndexOutput *tvx, *tvf, *tvd; // To write term vectors + FieldsWriter* fieldsWriter; // To write stored fields + + std::string segment; // Current segment we are working on + std::string docStoreSegment; // Current doc-store segment we are writing + int32_t docStoreOffset; // Current starting doc-store offset of current segment + + int32_t nextDocID; // Next docID to be added + int32_t numDocsInRAM; // # docs buffered in RAM + int32_t numDocsInStore; // # docs written to doc stores + int32_t nextWriteDocID; // Next docID to be written + + std::ostream* infoStream; + + // Currently used only for deleting a doc on hitting an non-aborting exception + std::vector bufferedDeleteDocIDs; + + // The max number of delete terms that can be buffered before + // they must be flushed to disk. + int32_t maxBufferedDeleteTerms; + + // How much RAM we can use before flushing. This is 0 if + // we are flushing by doc count instead. + int64_t ramBufferSize; + + // Flush @ this number of docs. If rarmBufferSize is + // non-zero we will flush by RAM usage instead. + int32_t maxBufferedDocs; + + bool closed; + + // Coarse estimates used to measure RAM usage of buffered deletes + static int32_t OBJECT_HEADER_BYTES; + static int32_t OBJECT_POINTER_BYTES; // TODO: should be 8 on 64-bit platform + static int32_t BYTES_PER_CHAR; + static int32_t BYTES_PER_INT; + + + // This Hashmap buffers delete terms in ram before they + // are applied. The key is delete term; the value is + // number of buffered documents the term applies to. + TermNumMapType* bufferedDeleteTerms; + int32_t numBufferedDeleteTerms; + + + /* Simple StringReader that can be reset to a new string; + * we use this when tokenizing the string value from a + * Field. */ + typedef CL_NS(util)::StringReader ReusableStringReader; + + class ByteBlockPool; + class CharBlockPool; + class FieldMergeState; + + /* IndexInput that knows how to read the byte slices written + * by Posting and PostingVector. We read the bytes in + * each slice until we hit the end of that slice at which + * point we read the forwarding address of the next slice + * and then jump to it.*/ + class ByteSliceReader: public CL_NS(store)::IndexInput { + ByteBlockPool* pool; + int32_t bufferUpto; + const uint8_t* buffer; + int32_t limit; + int32_t level; + + int32_t upto; + int32_t bufferOffset; + int32_t endIndex; + public: + ByteSliceReader(); + virtual ~ByteSliceReader(); + void init(ByteBlockPool* pool, int32_t startIndex, int32_t endIndex); + + uint8_t readByte(); + int64_t writeTo(CL_NS(store)::IndexOutput* out); + void nextSlice(); + void readBytes(uint8_t* b, const int32_t len); + int64_t getFilePointer() const; + int64_t length() const; + void seek(const int64_t pos); + void close(); + + IndexInput* clone() const; + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + + friend class FieldMergeState; + }; + + + struct PostingVector; //predefine... + + /* Used to track postings for a single term. One of these + * exists per unique term seen since the last flush. */ + struct Posting { + int32_t textStart; // Address into char[] blocks where our text is stored + int32_t docFreq; // # times this term occurs in the current doc + int32_t freqStart; // Address of first uint8_t[] slice for freq + int32_t freqUpto; // Next write address for freq + int32_t proxStart; // Address of first uint8_t[] slice + int32_t proxUpto; // Next write address for prox + int32_t lastDocID; // Last docID where this term occurred + int32_t lastDocCode; // Code for prior doc + int32_t lastPosition; // Last position where this term occurred + PostingVector* vector; // Corresponding PostingVector instance + }; + + /* Used to track data for term vectors. One of these + * exists per unique term seen in each field in the + * document. */ + struct PostingVector { + Posting* p; // Corresponding Posting instance for this term + int32_t lastOffset; // Last offset we saw + int32_t offsetStart; // Address of first slice for offsets + int32_t offsetUpto; // Next write address for offsets + int32_t posStart; // Address of first slice for positions + int32_t posUpto; // Next write address for positions + }; + + + /* Stores norms, buffered in RAM, until they are flushed + * to a partial segment. */ + class BufferedNorms { + public: + CL_NS(store)::RAMOutputStream out; + int32_t upto; + + BufferedNorms(); + void add(float_t norm); + void reset(); + void fill(int32_t docID); + }; + + + // Used only when infoStream != null + int64_t segmentSize(const std::string& segmentName); + + static const int32_t POINTER_NUM_BYTE; + static const int32_t INT_NUM_BYTE; + static const int32_t CHAR_NUM_BYTE; + + // Holds free pool of Posting instances + CL_NS(util)::ObjectArray postingsFreeListDW; + int32_t postingsFreeCountDW; + int32_t postingsAllocCountDW; + + typedef CL_NS(util)::CLArrayList FreeCharBlocksType; + FreeCharBlocksType freeCharBlocks; + + /* We have three pools of RAM: Postings, uint8_t blocks + * (holds freq/prox posting data) and char blocks (holds + * characters in the term). Different docs require + * varying amount of storage from these three classes. + * For example, docs with many unique single-occurrence + * short terms will use up the Postings RAM and hardly any + * of the other two. Whereas docs with very large terms + * will use alot of char blocks RAM and relatively less of + * the other two. This method just frees allocations from + * the pools once we are over-budget, which balances the + * pools to match the current docs. */ + void balanceRAM(); + + std::vector* _files; // Cached list of files we've created + std::vector* _abortedFiles; // List of files that were written before last abort() + + bool allThreadsIdle(); + + bool hasNorms; // Whether any norms were seen since last flush + + DefaultSkipListWriter* skipListWriter; + + bool currentFieldStorePayloads; + + /** Creates a segment from all Postings in the Postings + * hashes across all ThreadStates & FieldDatas. */ + void writeSegment(std::vector& flushedFiles); + + /** Returns the name of the file with this extension, on + * the current segment we are working on. */ + std::string segmentFileName(const std::string& extension); + std::string segmentFileName(const char* extension); + + TermInfo termInfo; // minimize consing + + + /** Reset after a flush */ + void resetPostingsData(); + + static const uint8_t defaultNorm; ///=Similarity::encodeNorm(1.0f) + + bool timeToFlushDeletes(); + + // Buffer a term in bufferedDeleteTerms, which records the + // current number of documents buffered in ram so that the + // delete term will be applied to those documents as well + // as the disk segments. + void addDeleteTerm(Term* term, int32_t docCount); + + // Buffer a specific docID for deletion. Currently only + // used when we hit a exception when adding a document + void addDeleteDocID(int32_t docId); + + typedef CL_NS(util)::CLArrayList > FreeByteBlocksType; + FreeByteBlocksType freeByteBlocks; + + + /** Per-thread state. We keep a separate Posting hash and + * other state for each thread and then merge postings * + * hashes from all threads when writing the segment. */ + class ThreadState { + public: + /** Holds data associated with a single field, including + * the Postings hash. A document may have many * + * occurrences for a given field name; we gather all * + * such occurrences here (in docFields) so that we can + * * process the entire field at once. */ + class FieldData: public CL_NS(util)::Comparable { + private: + ThreadState* threadState; + + int32_t fieldCount; + CL_NS(util)::ValueArray docFields; + + FieldData* next; + + bool postingsCompacted; + + CL_NS(util)::ValueArray postingsHash; + int32_t postingsHashSize; + int32_t postingsHashHalfSize; + int32_t postingsHashMask; + + int32_t postingsVectorsUpto; + DocumentsWriter* _parent; + + int32_t offsetEnd; + CL_NS(analysis)::Token* localToken; + + int32_t offsetStartCode; + int32_t offsetStart; + + ByteSliceReader* vectorSliceReader; + + void initPostingArrays(); + + /** Only called when term vectors are enabled. This + * is called the first time we see a given term for + * each * document, to allocate a PostingVector + * instance that * is used to record data needed to + * write the posting * vectors. */ + PostingVector* addNewVector(); + + /** This is the hotspot of indexing: it's called once + * for every term of every document. Its job is to * + * update the postings uint8_t stream (Postings hash) * + * based on the occurence of a single term. */ + void addPosition(CL_NS(analysis)::Token* token); + + /** Called when postings hash is too small (> 50% + * occupied) or too large (< 20% occupied). */ + void rehashPostings(int32_t newSize); + + /** Called once per field per document if term vectors + * are enabled, to write the vectors to * + * RAMOutputStream, which is then quickly flushed to + * the real term vectors files in the Directory. */ + void writeVectors(FieldInfo* fieldInfo); + + void compactPostings(); + + public: + int32_t numPostings; + FieldInfo* fieldInfo; + int32_t lastGen; + int32_t position; + int32_t length; + int32_t offset; + float_t boost; + bool doNorms; + bool doVectors; + bool doVectorPositions; + bool doVectorOffsets; + void resetPostingArrays(); + + FieldData(DocumentsWriter* _parent, ThreadState* __threadState, FieldInfo* fieldInfo); + ~FieldData(); + + /** So Arrays.sort can sort us. */ + int32_t compareTo(const void* o); + + /** Collapse the hash table & sort in-place. */ + CL_NS(util)::ValueArray* sortPostings(); + + /** Process all occurrences of one field in the document. */ + void processField(CL_NS(analysis)::Analyzer* analyzer); + + /* Invert one occurrence of one field in the document */ + void invertField(CL_NS(document)::Field* field, CL_NS(analysis)::Analyzer* analyzer, int32_t maxFieldLength); + + static bool sort(FieldData*, FieldData*); + + const char* getObjectName() const; + static const char* getClassName(); + int32_t compareTo(lucene::util::NamedObject *); + friend class ThreadState; + friend class FieldMergeState; + }; + + private: + CL_NS(util)::ValueArray postingsFreeListTS; // Free Posting instances + int32_t postingsFreeCountTS; + + CL_NS(util)::ValueArray vectorFieldPointers; + CL_NS(util)::ValueArray vectorFieldNumbers; + + int32_t numStoredFields; // How many stored fields in current doc + float_t docBoost; // Boost for current doc + + CL_NS(util)::ValueArray fieldDataArray; // Fields touched by current doc + int32_t numFieldData; // How many fields in current doc + int32_t numVectorFields; // How many vector fields in current doc + + CL_NS(util)::ValueArray fieldDataHash; // Hash FieldData instances by field name + int32_t fieldDataHashMask; + TCHAR* maxTermPrefix; // Non-null prefix of a too-large term if this + // doc has one + + int32_t fieldGen; + + CL_NS(util)::ObjectArray postingsVectors; + int32_t maxPostingsVectors; + + // Used to read a string value for a field + ReusableStringReader* stringReader; + + + ByteBlockPool* postingsPool; + ByteBlockPool* vectorsPool; + CharBlockPool* charPool; + + // Current posting we are working on + Posting* p; + PostingVector* vector; + + //writeFreqByte... + uint8_t* freq; + int32_t freqUpto; + + //writeProxByte... + uint8_t* prox; + int32_t proxUpto; + + //writeOffsetByte... + uint8_t* offsets; + int32_t offsetUpto; + + //writePosByte... + uint8_t* pos; + int32_t posUpto; + + + /** Do in-place sort of Posting array */ + void doPostingSort(Posting** postings, int32_t numPosting); + + void quickSort(Posting** postings, int32_t lo, int32_t hi); + + /** Do in-place sort of PostingVector array */ + void doVectorSort(CL_NS(util)::ArrayBase& postings, int32_t numPosting); + + void quickSort(CL_NS(util)::ArrayBase& postings, int32_t lo, int32_t hi); + + // USE ONLY FOR DEBUGGING! + /* + public String getPostingText() { + char[] text = charPool.buffers[p.textStart >> CHAR_BLOCK_SHIFT]; + int32_t upto = p.textStart & CHAR_BLOCK_MASK; + while(text[upto] != CLUCENE_END_OF_WORD) + upto++; + return new String(text, p.textStart, upto-(p.textStart & BYTE_BLOCK_MASK)); + } + */ + + /** Test whether the text for current Posting p equals + * current tokenText. */ + bool postingEquals(const TCHAR* tokenText, int32_t tokenTextLen); + + /** Compares term text for two Posting instance and + * returns -1 if p1 < p2; 1 if p1 > p2; else 0. + */ + int32_t comparePostings(Posting* p1, Posting* p2); + + + public: + bool isIdle; // Whether we are in use + CL_NS(store)::RAMOutputStream* tvfLocal; // Term vectors for one doc + CL_NS(store)::RAMOutputStream* fdtLocal; // Stored fields for one doc + FieldsWriter* localFieldsWriter; // Fields for one doc + int32_t numThreads; // Number of threads that use this instance + int32_t numAllFieldData; + CL_NS(util)::ValueArray allFieldDataArray; // All FieldData instances + bool doFlushAfter; + int32_t docID; // docID we are now working on + + DocumentsWriter* _parent; + + ThreadState(DocumentsWriter* _parent); + virtual ~ThreadState(); + + /** Initializes shared state for this new document */ + void init(CL_NS(document)::Document* doc, int32_t docID); + + /** Tokenizes the fields of a document into Postings */ + void processDocument(CL_NS(analysis)::Analyzer* analyzer); + + /** If there are fields we've seen but did not see again + * in the last run, then free them up. Also reduce + * postings hash size. */ + void trimFields(); + + /** Clear the postings hash and return objects back to + * shared pool */ + void resetPostings(); + + /** Move all per-document state that was accumulated in + * the ThreadState into the "real" stores. */ + void writeDocument(); + + /** Write vInt into freq stream of current Posting */ + void writeFreqVInt(int32_t i); + + /** Write vInt into prox stream of current Posting */ + void writeProxVInt(int32_t i); + + /** Write uint8_t into freq stream of current Posting */ + void writeFreqByte(uint8_t b); + + /** Write uint8_t into prox stream of current Posting */ + void writeProxByte(uint8_t b); + + /** Currently only used to copy a payload into the prox + * stream. */ + void writeProxBytes(uint8_t* b, int32_t offset, int32_t len); + + /** Write vInt into offsets stream of current + * PostingVector */ + void writeOffsetVInt(int32_t i); + + /** Write uint8_t into offsets stream of current + * PostingVector */ + void writeOffsetByte(uint8_t b); + + /** Write vInt into pos stream of current + * PostingVector */ + void writePosVInt(int32_t i); + + /** Write uint8_t into pos stream of current + * PostingVector */ + void writePosByte(uint8_t b); + + friend class FieldMergeState; + }; + + /* Class that Posting and PostingVector use to write uint8_t + * streams into shared fixed-size uint8_t[] arrays. The idea + * is to allocate slices of increasing lengths For + * example, the first slice is 5 bytes, the next slice is + * 14, etc. We start by writing our bytes into the first + * 5 bytes. When we hit the end of the slice, we allocate + * the next slice and then write the address of the new + * slice into the last 4 bytes of the previous slice (the + * "forwarding address"). + * + * Each slice is filled with 0's initially, and we mark + * the end with a non-zero uint8_t. This way the methods + * that are writing into the slice don't need to record + * its length and instead allocate a new slice once they + * hit a non-zero uint8_t. */ + template + class BlockPool { + protected: + bool trackAllocations; + + int32_t numBuffer; + + int32_t bufferUpto; // Which buffer we are upto + int32_t blockSize; + + DocumentsWriter* parent; + public: + CL_NS(util)::ValueArray< T* > buffers; + int32_t tOffset; // Current head offset + int32_t tUpto; // Where we are in head buffer + T* buffer; // Current head buffer + + virtual T* getNewBlock(bool trackAllocations) = 0; + + BlockPool(DocumentsWriter* _parent, int32_t _blockSize, bool trackAllocations): + buffers(CL_NS(util)::ValueArray(10)) + { + this->blockSize = _blockSize; + this->parent = _parent; + bufferUpto = -1; + tUpto = blockSize; + tOffset = -blockSize; + buffer = NULL; + numBuffer = 0; + this->trackAllocations = trackAllocations; + buffer = NULL; + } + virtual ~BlockPool(){ + buffers.deleteValues(); + } + + virtual void reset() = 0; + + void nextBuffer() { + if (1+bufferUpto == buffers.length) { + //expand the number of buffers + buffers.resize( (int32_t)(buffers.length * 1.5)); + } + buffer = buffers.values[1+bufferUpto] = getNewBlock(trackAllocations); + bufferUpto++; + + tUpto = 0; + tOffset += blockSize; + } + + friend class DocumentsWriter; + friend class DocumentsWriter::ThreadState; + friend class DocumentsWriter::ThreadState::FieldData; + friend class DocumentsWriter::FieldMergeState; + friend class DocumentsWriter::ByteSliceReader; + }; + + class CharBlockPool: public BlockPool{ + public: + CharBlockPool(DocumentsWriter* _parent); + virtual ~CharBlockPool(); + TCHAR* getNewBlock(bool trackAllocations); + void reset(); + friend class DocumentsWriter::FieldMergeState; + }; + class ByteBlockPool: public BlockPool{ + public: + ByteBlockPool( bool _trackAllocations, DocumentsWriter* _parent); + virtual ~ByteBlockPool(); + uint8_t* getNewBlock(bool trackAllocations); + int32_t newSlice(const int32_t size); + int32_t allocSlice(uint8_t* slice, const int32_t upto); + void reset(); + + friend class DocumentsWriter::ThreadState; + }; + + + + // Max # ThreadState instances; if there are more threads + // than this they share ThreadStates + static const int32_t MAX_THREAD_STATE; + CL_NS(util)::ValueArray threadStates; + CL_NS(util)::CLHashMap<_LUCENE_THREADID_TYPE, ThreadState*, + CL_NS (util)::CLuceneThreadIdCompare,CL_NS (util)::CLuceneThreadIdCompare, + CL_NS (util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS (util)::Deletor::Object > threadBindings; + int32_t numWaiting; + CL_NS(util)::ValueArray waitingThreadStates; + int32_t pauseThreads; // Non-zero when we need all threads to + // pause (eg to flush) + bool flushPending; // True when a thread has decided to flush + bool bufferIsFull; // True when it's time to write segment + int32_t abortCount; // Non-zero while abort is pending or running + + CL_NS(util)::ObjectArray norms; // Holds norms until we flush + + /** Does the synchronized work to finish/flush the + * inverted document. */ + void finishDocument(ThreadState* state); + + + /** Used to merge the postings from multiple ThreadStates + * when creating a segment */ + class FieldMergeState { + private: + ThreadState::FieldData* field; + CL_NS(util)::ValueArray* postings; + + Posting* p; + TCHAR* text; + int32_t textOffset; + + int32_t postingUpto; + + ByteSliceReader freq; + ByteSliceReader prox; + + int32_t docID; + int32_t termFreq; + public: + FieldMergeState(); + ~FieldMergeState(); + bool nextTerm(); + bool nextDoc(); + + friend class DocumentsWriter; + }; + + +public: + DocumentsWriter(CL_NS(store)::Directory* directory, IndexWriter* writer); + ~DocumentsWriter(); + + /** If non-null, various details of indexing are printed + * here. */ + void setInfoStream(std::ostream* infoStream); + + /** Set how much RAM we can use before flushing. */ + void setRAMBufferSizeMB(float_t mb); + + float_t getRAMBufferSizeMB(); + + /** Set max buffered docs, which means we will flush by + * doc count instead of by RAM usage. */ + void setMaxBufferedDocs(int32_t count); + + int32_t getMaxBufferedDocs(); + + /** Get current segment name we are writing. */ + std::string getSegment(); + + /** Returns how many docs are currently buffered in RAM. */ + int32_t getNumDocsInRAM(); + + /** Returns the current doc store segment we are writing + * to. This will be the same as segment when autoCommit + * * is true. */ + const std::string& getDocStoreSegment(); + + /** Returns the doc offset into the shared doc store for + * the current buffered docs. */ + int32_t getDocStoreOffset(); + + /** Closes the current open doc stores an returns the doc + * store segment name. This returns a blank string if there are + * no buffered documents. */ + std::string closeDocStore(); + + const std::vector* abortedFiles(); + + /* Returns list of files in use by this instance, + * including any flushed segments. */ + const std::vector& files(); + + void setAborting(); + + /** Called if we hit an exception when adding docs, + * flushing, etc. This resets our state, discarding any + * docs added since last flush. If ae is non-null, it + * contains the root cause exception (which we re-throw + * after we are done aborting). */ + void abort(AbortException* ae); + + // Returns true if an abort is in progress + bool pauseAllThreads(); + + void resumeAllThreads(); + + std::vector newFiles; + + /** Flush all pending docs to a new segment */ + int32_t flush(bool closeDocStore); + + /** Build compound file for the segment we just flushed */ + void createCompoundFile(const std::string& segment); + + /** Set flushPending if it is not already set and returns + * whether it was set. This is used by IndexWriter to * + * trigger a single flush even when multiple threads are + * * trying to do so. */ + bool setFlushPending(); + + void clearFlushPending(); + + /** Write norms in the "true" segment format. This is + * called only during commit, to create the .nrm file. */ + void writeNorms(const std::string& segmentName, int32_t totalNumDoc); + + int32_t compareText(const TCHAR* text1, const TCHAR* text2); + + /* Walk through all unique text tokens (Posting + * instances) found in this field and serialize them + * into a single RAM segment. */ + void appendPostings(CL_NS(util)::ArrayBase* fields, + TermInfosWriter* termsOut, + CL_NS(store)::IndexOutput* freqOut, + CL_NS(store)::IndexOutput* proxOut); + + void close(); + + /** Returns a free (idle) ThreadState that may be used for + * indexing this one document. This call also pauses if a + * flush is pending. If delTerm is non-null then we + * buffer this deleted term after the thread state has + * been acquired. */ + ThreadState* getThreadState(CL_NS(document)::Document* doc, Term* delTerm); + + /** Returns true if the caller (IndexWriter) should now + * flush. */ + bool addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + bool updateDocument(Term* t, CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + bool updateDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer, Term* delTerm); + + int32_t getNumBufferedDeleteTerms(); + + const TermNumMapType& getBufferedDeleteTerms(); + + const std::vector* getBufferedDeleteDocIDs(); + + // Reset buffered deletes. + void clearBufferedDeletes(); + + bool bufferDeleteTerms(const CL_NS(util)::ArrayBase* terms); + + bool bufferDeleteTerm(Term* term); + + void setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms); + + int32_t getMaxBufferedDeleteTerms(); + + bool hasDeletes(); + + int64_t getRAMUsed(); + + int64_t numBytesAlloc; + int64_t numBytesUsed; + + /* Used only when writing norms to fill in default norm + * value into the holes in docID stream for those docs + * that didn't have this field. */ + static void fillBytes(CL_NS(store)::IndexOutput* out, uint8_t b, int32_t numBytes); + + uint8_t* copyByteBuffer; + + /** Copy numBytes from srcIn to destIn */ + void copyBytes(CL_NS(store)::IndexInput* srcIn, CL_NS(store)::IndexOutput* destIn, int64_t numBytes); + + + // Size of each slice. These arrays should be at most 16 + // elements. First array is just a compact way to encode + // X+1 with a max. Second array is the length of each + // slice, ie first slice is 5 bytes, next slice is 14 + // bytes, etc. + static const int32_t nextLevelArray[10]; + static const int32_t levelSizeArray[10]; + + // Why + 5*POINTER_NUM_BYTE below? + // 1: Posting has "vector" field which is a pointer + // 2: Posting is referenced by postingsFreeList array + // 3,4,5: Posting is referenced by postings hash, which + // targets 25-50% fill factor; approximate this + // as 3X # pointers + //TODO: estimate this accurately for C++! + static const int32_t POSTING_NUM_BYTE; /// = OBJECT_HEADER_BYTES + 9*INT_NUM_BYTE + 5*POINTER_NUM_BYTE; + + /* Allocate more Postings from shared pool */ + void getPostings(CL_NS(util)::ValueArray& postings); + void recyclePostings(CL_NS(util)::ValueArray& postings, int32_t numPostings); + + /* Initial chunks size of the shared uint8_t[] blocks used to + store postings data */ + static const int32_t BYTE_BLOCK_SHIFT; + static const int32_t BYTE_BLOCK_SIZE; + static const int32_t BYTE_BLOCK_MASK; + static const int32_t BYTE_BLOCK_NOT_MASK; + + /* Allocate another uint8_t[] from the shared pool */ + uint8_t* getByteBlock(bool trackAllocations); + + /* Return a uint8_t[] to the pool */ + void recycleBlocks(CL_NS(util)::ArrayBase& blocks, int32_t start, int32_t end); + + /* Initial chunk size of the shared char[] blocks used to + store term text */ + static const int32_t CHAR_BLOCK_SHIFT; + static const int32_t CHAR_BLOCK_SIZE; + static const int32_t CHAR_BLOCK_MASK; + + static const int32_t MAX_TERM_LENGTH; + + /* Allocate another char[] from the shared pool */ + TCHAR* getCharBlock(); + + /* Return a char[] to the pool */ + void recycleBlocks(CL_NS(util)::ArrayBase& blocks, int32_t start, int32_t numBlocks); + + std::string toMB(int64_t v); + + +}; + +#define CLUCENE_END_OF_WORD 0x0 + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/DocumentsWriterThreadState.cpp clucene-core-2.3.3.4/src/core/CLucene/index/DocumentsWriterThreadState.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/DocumentsWriterThreadState.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/DocumentsWriterThreadState.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1317 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/_Arrays.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/document/Field.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/document/Document.h" +#include "_TermInfo.h" +#include "_FieldInfos.h" +#include "_CompoundFile.h" +#include "IndexWriter.h" +#include "_IndexFileNames.h" +#include "_FieldsWriter.h" +#include "Term.h" +#include "_Term.h" +#include "_TermVector.h" +#include "_TermInfosWriter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/Similarity.h" +#include "_TermInfosWriter.h" +#include "_FieldsWriter.h" +#include "_DocumentsWriter.h" +#include +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(analysis) +CL_NS_USE(document) +CL_NS_USE(search) +CL_NS_DEF(index) + + +DocumentsWriter::ThreadState::ThreadState(DocumentsWriter* __parent): + postingsFreeListTS(ValueArray(256)), + vectorFieldPointers(ValueArray(10)), + vectorFieldNumbers(ValueArray(10)), + fieldDataArray(ValueArray(8)), + fieldDataHash(ValueArray(16)), + postingsVectors(ObjectArray(1)), + postingsPool( _CLNEW ByteBlockPool(true, __parent) ), + vectorsPool( _CLNEW ByteBlockPool(false, __parent) ), + charPool( _CLNEW CharBlockPool(__parent) ), + allFieldDataArray(ValueArray(10)), + _parent(__parent) +{ + fieldDataHashMask = 15; + postingsFreeCountTS = 0; + stringReader = _CLNEW ReusableStringReader(_T(""),0,false); + + isIdle = true; + numThreads = 1; + + tvfLocal = _CLNEW RAMOutputStream(); // Term vectors for one doc + fdtLocal = _CLNEW RAMOutputStream(); // Stored fields for one doc + + this->docBoost = 0.0; + this->fieldGen = this->posUpto = this->maxPostingsVectors = this->numStoredFields = 0; + this->numAllFieldData = this->docID = 0; + this->numFieldData = numVectorFields = this->proxUpto = this->freqUpto = this->offsetUpto = 0; + this->localFieldsWriter = NULL; + this->maxTermPrefix = NULL; + this->p = NULL; + this->prox = NULL; + this->vector = NULL; + this->offsets = NULL; + this->pos = NULL; + this->freq = NULL; + this->doFlushAfter = false; +} + +DocumentsWriter::ThreadState::~ThreadState(){ + _CLDELETE(postingsPool); + _CLDELETE(vectorsPool); + _CLDELETE(charPool); + _CLDELETE(stringReader); + _CLDELETE(tvfLocal); + _CLDELETE(fdtLocal); + + for ( size_t i=0; iclose(); + _CLDELETE(localFieldsWriter); + } + postingsPool->reset(); + charPool->reset(); + _parent->recyclePostings(this->postingsFreeListTS, this->postingsFreeCountTS); + this->postingsFreeCountTS = 0; + for(int32_t i=0;ilastGen = -1; + if (fp->numPostings > 0) + fp->resetPostingArrays(); + } +} + +void DocumentsWriter::ThreadState::writeDocument() { + + // If we hit an exception while appending to the + // stored fields or term vectors files, we have to + // abort all documents since we last flushed because + // it means those files are possibly inconsistent. + try { + _parent->numDocsInStore++; + + // Append stored fields to the real FieldsWriter: + _parent->fieldsWriter->flushDocument(numStoredFields, fdtLocal); + fdtLocal->reset(); + + // Append term vectors to the real outputs: + if (_parent->tvx != NULL) { + _parent->tvx->writeLong(_parent->tvd->getFilePointer()); + _parent->tvd->writeVInt(numVectorFields); + if (numVectorFields > 0) { + for(int32_t i=0;itvd->writeVInt(vectorFieldNumbers[i]); + assert(0 == vectorFieldPointers[0]); + _parent->tvd->writeVLong(_parent->tvf->getFilePointer()); + int64_t lastPos = vectorFieldPointers[0]; + for(int32_t i=1;itvd->writeVLong(pos-lastPos); + lastPos = pos; + } + tvfLocal->writeTo(_parent->tvf); + tvfLocal->reset(); + } + } + + // Append norms for the fields we saw: + for(int32_t i=0;idoNorms) { + BufferedNorms* bn = _parent->norms[fp->fieldInfo->number]; + assert ( bn != NULL ); + assert ( bn->upto <= docID ); + bn->fill(docID); + float_t norm = fp->boost * _parent->writer->getSimilarity()->lengthNorm(fp->fieldInfo->name, fp->length); + bn->add(norm); + } + } + } catch (CLuceneError& t) { + // Forcefully idle this threadstate -- its state will + // be reset by abort() + isIdle = true; + throw AbortException(t, _parent); + } + + if (_parent->bufferIsFull && !_parent->flushPending) { + _parent->flushPending = true; + doFlushAfter = true; + } +} + +void DocumentsWriter::ThreadState::init(Document* doc, int32_t docID) { + + assert (!isIdle); + assert (_parent->writer->testPoint("DocumentsWriter.ThreadState.init start")); + + this->docID = docID; + docBoost = doc->getBoost(); + numStoredFields = 0; + numFieldData = 0; + numVectorFields = 0; + maxTermPrefix = NULL; + + assert (0 == fdtLocal->length()); + assert (0 == fdtLocal->getFilePointer()); + assert (0 == tvfLocal->length()); + assert (0 == tvfLocal->getFilePointer()); + const int32_t thisFieldGen = fieldGen++; + + const Document::FieldsType& docFields = *doc->getFields(); + const int32_t numDocFields = docFields.size(); + bool docHasVectors = false; + + // Absorb any new fields first seen in this document. + // Also absorb any changes to fields we had already + // seen before (eg suddenly turning on norms or + // vectors, etc.): + + for(int32_t i=0;ifieldInfos->add(field->name(), field->isIndexed(), field->isTermVectorStored(), + field->isStorePositionWithTermVector(), field->isStoreOffsetWithTermVector(), + field->getOmitNorms(), false); + if (fi->isIndexed && !fi->omitNorms) { + // Maybe grow our buffered norms + if (_parent->norms.length <= fi->number) { + int32_t newSize = (int32_t) ((1+fi->number)*1.25); + _parent->norms.resize(newSize); + } + + if (_parent->norms[fi->number] == NULL) + _parent->norms.values[fi->number] = _CLNEW BufferedNorms(); + + _parent->hasNorms = true; + } + + // Make sure we have a FieldData allocated + int32_t hashPos = Misc::thashCode(fi->name) & fieldDataHashMask; //TODO: put hash in fieldinfo + FieldData* fp = fieldDataHash[hashPos]; + while(fp != NULL && _tcscmp(fp->fieldInfo->name, fi->name) != 0 ) + fp = fp->next; + + if (fp == NULL) { + fp = _CLNEW FieldData(_parent,this,fi); + fp->next = fieldDataHash[hashPos]; + fieldDataHash.values[hashPos] = fp; + + if (numAllFieldData == allFieldDataArray.length) { + allFieldDataArray.resize( (int32_t) (allFieldDataArray.length*1.5) ); + + ValueArray newHashArray(fieldDataHash.length*2); + + // Rehash + fieldDataHashMask = allFieldDataArray.length-1; + for(size_t j=0;jfieldInfo->name) & fieldDataHashMask; + FieldData* nextFP0 = fp0->next; + fp0->next = newHashArray[hashPos]; + newHashArray.values[hashPos] = fp0; + fp0 = nextFP0; + } + } + fieldDataHash.resize( newHashArray.length ); + memcpy(fieldDataHash.values, newHashArray.values, newHashArray.length * sizeof(FieldData*)); + } + allFieldDataArray.values[numAllFieldData++] = fp; + } else { + assert (fp->fieldInfo == fi); + } + + if (thisFieldGen != fp->lastGen) { + + // First time we're seeing this field for this doc + fp->lastGen = thisFieldGen; + fp->fieldCount = 0; + fp->doVectors = fp->doVectorPositions = fp->doVectorOffsets = false; + fp->doNorms = fi->isIndexed && !fi->omitNorms; + + if (numFieldData == fieldDataArray.length) { + fieldDataArray.resize(fieldDataArray.length*2); + } + fieldDataArray.values[numFieldData++] = fp; + } + + if (field->isTermVectorStored()) { + if (!fp->doVectors && numVectorFields++ == vectorFieldPointers.length) { + const int32_t newSize = (int32_t)(numVectorFields*1.5); + vectorFieldPointers.resize(newSize); + vectorFieldNumbers.resize(newSize); + } + fp->doVectors = true; + docHasVectors = true; + + fp->doVectorPositions |= field->isStorePositionWithTermVector(); + fp->doVectorOffsets |= field->isStoreOffsetWithTermVector(); + } + + if (fp->fieldCount == fp->docFields.length) { + fp->docFields.resize(fp->docFields.length*2); + } + + // Lazily allocate arrays for postings: + if (field->isIndexed() && fp->postingsHash.values == NULL) + fp->initPostingArrays(); + + fp->docFields.values[fp->fieldCount++] = field; + } + + // Maybe init the local & global fieldsWriter + if (localFieldsWriter == NULL) { + if (_parent->fieldsWriter == NULL) { + assert (_parent->docStoreSegment.empty()); + assert (!_parent->segment.empty()); + _parent->docStoreSegment = _parent->segment; + // If we hit an exception while init'ing the + // fieldsWriter, we must abort this segment + // because those files will be in an unknown + // state: + try { + _parent->fieldsWriter = _CLNEW FieldsWriter(_parent->directory, _parent->docStoreSegment.c_str(), _parent->fieldInfos); + } catch (CLuceneError& t) { + throw AbortException(t,_parent); + } + _CLDELETE(_parent->_files); + } + localFieldsWriter = _CLNEW FieldsWriter(NULL, fdtLocal, _parent->fieldInfos); + } + + // First time we see a doc that has field(s) with + // stored vectors, we init our tvx writer + if (docHasVectors) { + if (_parent->tvx == NULL) { + assert (!_parent->docStoreSegment.empty()); + // If we hit an exception while init'ing the term + // vector output files, we must abort this segment + // because those files will be in an unknown + // state: + try { + _parent->tvx = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ); + _parent->tvx->writeInt(TermVectorsReader::FORMAT_VERSION); + _parent->tvd = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION).c_str() ); + _parent->tvd->writeInt(TermVectorsReader::FORMAT_VERSION); + _parent->tvf = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_FIELDS_EXTENSION).c_str() ); + _parent->tvf->writeInt(TermVectorsReader::FORMAT_VERSION); + + // We must "catch up" for all docs before us + // that had no vectors: + for(int32_t i=0;i<_parent->numDocsInStore;i++) { + _parent->tvx->writeLong(_parent->tvd->getFilePointer()); + _parent->tvd->writeVInt(0); + } + + } catch (CLuceneError& t) { + throw AbortException(t, _parent); + } + _CLDELETE(_parent->_files); + } + + numVectorFields = 0; + } +} + +void DocumentsWriter::ThreadState::doPostingSort(Posting** postings, int32_t numPosting) { + quickSort(postings, 0, numPosting-1); +} + +void DocumentsWriter::ThreadState::quickSort(Posting** postings, int32_t lo, int32_t hi) { + if (lo >= hi) + return; + + int32_t mid = ((uint32_t)(lo + hi)) >> 1; //unsigned shift... + + if (comparePostings(postings[lo], postings[mid]) > 0) { + Posting* tmp = postings[lo]; + postings[lo] = postings[mid]; + postings[mid] = tmp; + } + + if (comparePostings(postings[mid], postings[hi]) > 0) { + Posting* tmp = postings[mid]; + postings[mid] = postings[hi]; + postings[hi] = tmp; + + if (comparePostings(postings[lo], postings[mid]) > 0) { + Posting* tmp2 = postings[lo]; + postings[lo] = postings[mid]; + postings[mid] = tmp2; + } + } + + int32_t left = lo + 1; + int32_t right = hi - 1; + + if (left >= right) + return; + + Posting* partition = postings[mid]; + + for (; ;) { + while (comparePostings(postings[right], partition) > 0) + --right; + + while (left < right && comparePostings(postings[left], partition) <= 0) + ++left; + + if (left < right) { + Posting* tmp = postings[left]; + postings[left] = postings[right]; + postings[right] = tmp; + --right; + } else { + break; + } + } + + quickSort(postings, lo, left); + quickSort(postings, left + 1, hi); +} + +void DocumentsWriter::ThreadState::doVectorSort(ArrayBase& postings, int32_t numPosting) { + quickSort(postings, 0, numPosting-1); +} + +void DocumentsWriter::ThreadState::quickSort(ArrayBase& postings, int32_t lo, int32_t hi) { + if (lo >= hi) + return; + + int32_t mid = ((uint8_t)(lo + hi)) >> 1; //unsigned shift.. + + if (comparePostings(postings[lo]->p, postings[mid]->p) > 0) { + PostingVector* tmp = postings[lo]; + postings.values[lo] = postings[mid]; + postings.values[mid] = tmp; + } + + if (comparePostings(postings[mid]->p, postings[hi]->p) > 0) { + PostingVector* tmp = postings[mid]; + postings.values[mid] = postings[hi]; + postings.values[hi] = tmp; + + if (comparePostings(postings[lo]->p, postings[mid]->p) > 0) { + PostingVector* tmp2 = postings[lo]; + postings.values[lo] = postings[mid]; + postings.values[mid] = tmp2; + } + } + + int32_t left = lo + 1; + int32_t right = hi - 1; + + if (left >= right) + return; + + PostingVector* partition = postings[mid]; + + for (; ;) { + while (comparePostings(postings[right]->p, partition->p) > 0) + --right; + + while (left < right && comparePostings(postings[left]->p, partition->p) <= 0) + ++left; + + if (left < right) { + PostingVector* tmp = postings[left]; + postings.values[left] = postings[right]; + postings.values[right] = tmp; + --right; + } else { + break; + } + } + + quickSort(postings, lo, left); + quickSort(postings, left + 1, hi); +} + +void DocumentsWriter::ThreadState::trimFields() { + + int32_t upto = 0; + for(int32_t i=0;ilastGen == -1) { + // This field was not seen since the previous + // flush, so, free up its resources now + + // Unhash + const int32_t hashPos = Misc::thashCode(fp->fieldInfo->name) & fieldDataHashMask; + FieldData* last = NULL; + FieldData* fp0 = fieldDataHash[hashPos]; + while(fp0 != fp) { + last = fp0; + fp0 = fp0->next; + } + assert(fp0 != NULL); + + if (last == NULL) + fieldDataHash.values[hashPos] = fp->next; + else + last->next = fp->next; + + if (_parent->infoStream != NULL) + (*_parent->infoStream) << " remove field=" << fp->fieldInfo->name << "\n"; + + _CLDELETE(fp); + } else { + // Reset + fp->lastGen = -1; + allFieldDataArray.values[upto++] = fp; + + if (fp->numPostings > 0 && ((float_t) fp->numPostings) / fp->postingsHashSize < 0.2) { + int32_t hashSize = fp->postingsHashSize; + + // Reduce hash so it's between 25-50% full + while (fp->numPostings < (hashSize>>1) && hashSize >= 2) + hashSize >>= 1; + hashSize <<= 1; + + if (hashSize != fp->postingsHash.length) + fp->rehashPostings(hashSize); + } + } + } + //delete everything after up to in allFieldDataArray + for ( size_t i=upto;inorms.length;i++) { + BufferedNorms* n = _parent->norms[i]; + if (n != NULL && n->upto == 0) + { + _CLLDELETE(n); + _parent->norms.values[i] = NULL; + } + } + + numAllFieldData = upto; + + // Also pare back PostingsVectors if it's excessively + // large + if (maxPostingsVectors * 1.5 < postingsVectors.length) { + int32_t newSize; + if (0 == maxPostingsVectors) + newSize = 1; + else + newSize = (int32_t) (1.5*maxPostingsVectors); + postingsVectors.resize(newSize, true); + } +} + +void DocumentsWriter::ThreadState::processDocument(Analyzer* analyzer) +{ + + const int32_t numFields = numFieldData; + + assert (0 == fdtLocal->length()); + + if (_parent->tvx != NULL){ + // If we are writing vectors then we must visit + // fields in sorted order so they are written in + // sorted order. TODO: we actually only need to + // sort the subset of fields that have vectors + // enabled; we could save [small amount of] CPU + // here. + Arrays::sort(fieldDataArray.values,fieldDataArray.length, 0, numFields); + } + + // We process the document one field at a time + for(int32_t i=0;iprocessField(analyzer); + + if (maxTermPrefix != NULL && _parent->infoStream != NULL) + (*_parent->infoStream) << "WARNING: document contains at least one immense term (longer than the max length " << MAX_TERM_LENGTH << "), all of which were skipped. Please correct the analyzer to not produce such terms. The prefix of the first immense term is: '" << maxTermPrefix << "...'\n"; + + if (_parent->ramBufferSize != IndexWriter::DISABLE_AUTO_FLUSH + && _parent->numBytesUsed > 0.95 * _parent->ramBufferSize) + _parent->balanceRAM(); +} + +// USE ONLY FOR DEBUGGING! +/* + String getPostingText() { + TCHAR* text = charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + int32_t upto = p->textStart & CHAR_BLOCK_MASK; + while((*text)[upto] != CLUCENE_END_OF_WORD) + upto++; + return new String(text, p->textStart, upto-(p->textStart & BYTE_BLOCK_MASK)); + } +*/ + +bool DocumentsWriter::ThreadState::postingEquals(const TCHAR* tokenText, const int32_t tokenTextLen) { + + const TCHAR* text = charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + assert (text != NULL); + int32_t pos = p->textStart & CHAR_BLOCK_MASK; + + int32_t tokenPos = 0; + for(;tokenPosbuffers[p1->textStart >> CHAR_BLOCK_SHIFT] + (p1->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos2 = charPool->buffers[p2->textStart >> CHAR_BLOCK_SHIFT] + (p2->textStart & CHAR_BLOCK_MASK); + while(true) { + const TCHAR c1 = *pos1++; + const TCHAR c2 = *pos2++; + if (c1 < c2) + if (CLUCENE_END_OF_WORD == c2) + return 1; + else + return -1; + else if (c2 < c1) + if (CLUCENE_END_OF_WORD == c1) + return -1; + else + return 1; + else if (CLUCENE_END_OF_WORD == c1) + return 0; + } +} + +void DocumentsWriter::ThreadState::writeFreqVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeFreqByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeFreqByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeProxVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeProxByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeProxByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeFreqByte(uint8_t b) { + assert (freq != NULL); + if (freq[freqUpto] != 0) { + freqUpto = postingsPool->allocSlice(freq, freqUpto); + freq = postingsPool->buffer; + p->freqUpto = postingsPool->tOffset; + } + freq[freqUpto++] = b; +} + +void DocumentsWriter::ThreadState::writeProxByte(uint8_t b) { + assert (prox != NULL); + if (prox[proxUpto] != 0) { + proxUpto = postingsPool->allocSlice(prox, proxUpto); + prox = postingsPool->buffer; + p->proxUpto = postingsPool->tOffset; + assert (prox != NULL); + } + prox[proxUpto++] = b; + assert (proxUpto != DocumentsWriter::BYTE_BLOCK_SIZE); +} + +void DocumentsWriter::ThreadState::writeProxBytes(uint8_t* b, int32_t offset, int32_t len) { + const int32_t offsetEnd = offset + len; + while(offset < offsetEnd) { + if (prox[proxUpto] != 0) { + // End marker + proxUpto = postingsPool->allocSlice(prox, proxUpto); + prox = postingsPool->buffer; + p->proxUpto = postingsPool->tOffset; + } + + prox[proxUpto++] = b[offset++]; + assert (proxUpto != DocumentsWriter::BYTE_BLOCK_SIZE); + } +} + +void DocumentsWriter::ThreadState::writeOffsetVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeOffsetByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeOffsetByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeOffsetByte(uint8_t b) { + assert (offsets != NULL); + if (offsets[offsetUpto] != 0) { + offsetUpto = vectorsPool->allocSlice(offsets, offsetUpto); + offsets = vectorsPool->buffer; + vector->offsetUpto = vectorsPool->tOffset; + } + offsets[offsetUpto++] = b; +} + +void DocumentsWriter::ThreadState::writePosVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writePosByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writePosByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writePosByte(uint8_t b) { + assert (pos != NULL); + if (pos[posUpto] != 0) { + posUpto = vectorsPool->allocSlice(pos, posUpto); + pos = vectorsPool->buffer; + vector->posUpto = vectorsPool->tOffset; + } + pos[posUpto++] = b; +} + + + +DocumentsWriter::ThreadState::FieldData::FieldData(DocumentsWriter* __parent, ThreadState* __threadState, FieldInfo* fieldInfo): + docFields(ValueArray(1)), + _parent(__parent), + localToken (_CLNEW Token), + vectorSliceReader(_CLNEW ByteSliceReader()) +{ + this->fieldCount = this->postingsHashSize = this->postingsHashHalfSize = this->postingsVectorsUpto = 0; + this->postingsHashMask = this->offsetEnd = 0; + this->offsetStartCode = this->offsetStart = this->numPostings = this->position = this->length = this->offset = 0; + this->boost = 0.0; + this->next = NULL; + this->lastGen = -1; + this->fieldInfo = fieldInfo; + this->threadState = __threadState; + this->postingsCompacted = false; +} +DocumentsWriter::ThreadState::FieldData::~FieldData(){ + _CLDELETE(vectorSliceReader); + _CLDELETE(localToken); +} +bool DocumentsWriter::ThreadState::FieldData::sort(FieldData* e1, FieldData* e2){ + return _tcscmp(e1->fieldInfo->name, e2->fieldInfo->name) < 0; +} +void DocumentsWriter::ThreadState::FieldData::resetPostingArrays() { + if (!postingsCompacted) + compactPostings(); + _parent->recyclePostings(this->postingsHash, numPostings); + memset(postingsHash.values, 0, postingsHash.length * sizeof(Posting*)); + postingsCompacted = false; + numPostings = 0; +} + +const char* DocumentsWriter::ThreadState::FieldData::getObjectName() const{ + return getClassName(); +} +const char* DocumentsWriter::ThreadState::FieldData::getClassName(){ + return "DocumentsWriter::ThreadState"; +} +void DocumentsWriter::ThreadState::FieldData::initPostingArrays() { + // Target hash fill factor of <= 50% + // NOTE: must be a power of two for hash collision + // strategy to work correctly + postingsHashSize = 4; + postingsHashHalfSize = 2; + postingsHashMask = postingsHashSize-1; + postingsHash.resize(postingsHashSize); +} + +int32_t DocumentsWriter::ThreadState::FieldData::compareTo(NamedObject* o) { + if ( o->getObjectName() != FieldData::getClassName() ) + return -1; + return _tcscmp(fieldInfo->name, ((FieldData*) o)->fieldInfo->name); +} + +void DocumentsWriter::ThreadState::FieldData::compactPostings() { + int32_t upto = 0; + for(int32_t i=0;i* DocumentsWriter::ThreadState::FieldData::sortPostings() { + compactPostings(); + threadState->doPostingSort(postingsHash.values, numPostings); + return &postingsHash; +} + + +void DocumentsWriter::ThreadState::FieldData::processField(Analyzer* analyzer) { + length = 0; + position = 0; + offset = 0; + boost = threadState->docBoost; + + const int32_t maxFieldLength = _parent->writer->getMaxFieldLength(); + + const int32_t limit = fieldCount; + const ArrayBase& docFieldsFinal = docFields; + + bool doWriteVectors = true; + + // Walk through all occurrences in this doc for this + // field: + try { + for(int32_t j=0;jisIndexed()) + invertField(field, analyzer, maxFieldLength); + + if (field->isStored()) { + threadState->numStoredFields++; + bool success = false; + try { + threadState->localFieldsWriter->writeField(fieldInfo, field); + success = true; + } _CLFINALLY( + // If we hit an exception inside + // localFieldsWriter->writeField, the + // contents of fdtLocal can be corrupt, so + // we must discard all stored fields for + // this document: + if (!success) + threadState->fdtLocal->reset(); + ) + } + + docFieldsFinal.values[j] = NULL; + } + } catch (AbortException& ae) { + doWriteVectors = false; + throw ae; + } _CLFINALLY ( + if (postingsVectorsUpto > 0) { + try { + if (doWriteVectors) { + // Add term vectors for this field + bool success = false; + try { + writeVectors(fieldInfo); + success = true; + } _CLFINALLY ( + if (!success) { + // If we hit an exception inside + // writeVectors, the contents of tvfLocal + // can be corrupt, so we must discard all + // term vectors for this document: + threadState->numVectorFields = 0; + threadState->tvfLocal->reset(); + } + ) + } + } _CLFINALLY ( + if (postingsVectorsUpto > threadState->maxPostingsVectors) + threadState->maxPostingsVectors = postingsVectorsUpto; + postingsVectorsUpto = 0; + threadState->vectorsPool->reset(); + ) + } + ) +} +void DocumentsWriter::ThreadState::FieldData::invertField(Field* field, Analyzer* analyzer, const int32_t maxFieldLength) { + + if (length>0) + position += analyzer->getPositionIncrementGap(fieldInfo->name); + + if (!field->isTokenized()) { // un-tokenized field + const TCHAR* stringValue = field->stringValue(); + const size_t valueLength = _tcslen(stringValue); + Token* token = localToken; + token->clear(); + + token->setText(stringValue,valueLength); + token->setStartOffset(offset); + token->setEndOffset(offset + valueLength); + addPosition(token); + offset += valueLength; + length++; + } else { // tokenized field + TokenStream* stream; + TokenStream* streamValue = field->tokenStreamValue(); + + if (streamValue != NULL) + stream = streamValue; + else { + // the field does not have a TokenStream, + // so we have to obtain one from the analyzer + Reader* reader; // find or make Reader + Reader* readerValue = field->readerValue(); + + if (readerValue != NULL) + reader = readerValue; + else { + const TCHAR* stringValue = field->stringValue(); + size_t stringValueLength = _tcslen(stringValue); + if (stringValue == NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "field must have either TokenStream, String or Reader value"); + threadState->stringReader->init(stringValue, stringValueLength); + reader = threadState->stringReader; + } + + // Tokenize field and add to postingTable + stream = analyzer->reusableTokenStream(fieldInfo->name, reader); + } + + // reset the TokenStream to the first token + stream->reset(); + + try { + offsetEnd = offset-1; + for(;;) { + Token* token = stream->next(localToken); + if (token == NULL) break; + position += (token->getPositionIncrement() - 1); + addPosition(token); + ++length; + + // Apply field truncation policy. + if (maxFieldLength != IndexWriter::FIELD_TRUNC_POLICY__WARN) { + // The client programmer has explicitly authorized us to + // truncate the token stream after maxFieldLength tokens. + if ( length >= maxFieldLength) { + if (_parent->infoStream != NULL) + (*_parent->infoStream) << "maxFieldLength " << maxFieldLength << " reached for field " << fieldInfo->name << ", ignoring following tokens\n"; + break; + } + } else if (length > IndexWriter::DEFAULT_MAX_FIELD_LENGTH) { + const TCHAR* errMsgBase = + _T("Indexing a huge number of tokens from a single") + _T(" field (\"%s\", in this case) can cause CLucene") + _T(" to use memory excessively.") + _T(" By default, CLucene will accept only %s tokens") + _T(" tokens from a single field before forcing the") + _T(" client programmer to specify a threshold at") + _T(" which to truncate the token stream.") + _T(" You should set this threshold via") + _T(" IndexReader::maxFieldLength (set to LUCENE_INT32_MAX") + _T(" to disable truncation, or a value to specify maximum number of fields)."); + + TCHAR defaultMaxAsChar[34]; + _i64tot(IndexWriter::DEFAULT_MAX_FIELD_LENGTH, + defaultMaxAsChar, 10 + ); + int32_t errMsgLen = _tcslen(errMsgBase) + + _tcslen(fieldInfo->name) + + _tcslen(defaultMaxAsChar); + TCHAR* errMsg = _CL_NEWARRAY(TCHAR,errMsgLen+1); + + _sntprintf(errMsg, errMsgLen,errMsgBase, fieldInfo->name, defaultMaxAsChar); + + _CLTHROWT_DEL(CL_ERR_Runtime,errMsg); + } + } + offset = offsetEnd+1; + } _CLFINALLY ( + stream->close(); //don't delete, this stream is re-used + ) + } + + boost *= field->getBoost(); +} + +DocumentsWriter::PostingVector* DocumentsWriter::ThreadState::FieldData::addNewVector() { + + if (postingsVectorsUpto == threadState->postingsVectors.length) { + int32_t newSize; + if (threadState->postingsVectors.length < 2) + newSize = 2; + else + newSize = (int32_t) (1.5*threadState->postingsVectors.length); + threadState->postingsVectors.resize(newSize, true); + } + + threadState->p->vector = threadState->postingsVectors[postingsVectorsUpto]; + if (threadState->p->vector == NULL) + threadState->p->vector = threadState->postingsVectors.values[postingsVectorsUpto] = _CLNEW PostingVector(); + + postingsVectorsUpto++; + + PostingVector* v = threadState->p->vector; + v->p = threadState->p; + + const int32_t firstSize = levelSizeArray[0]; + + if (doVectorPositions) { + const int32_t upto = threadState->vectorsPool->newSlice(firstSize); + v->posStart = v->posUpto = threadState->vectorsPool->tOffset + upto; + } + + if (doVectorOffsets) { + const int32_t upto = threadState->vectorsPool->newSlice(firstSize); + v->offsetStart = v->offsetUpto = threadState->vectorsPool->tOffset + upto; + } + + return v; +} + +void DocumentsWriter::ThreadState::FieldData::addPosition(Token* token) { + + const Payload* payload = token->getPayload(); + + // Get the text of this term. Term can either + // provide a String token or offset into a TCHAR* + // array + const TCHAR* tokenText = token->termBuffer(); + const int32_t tokenTextLen = token->termLength(); + + int32_t code = 0; + + // Compute hashcode + int32_t downto = tokenTextLen; + while (downto > 0) + code = (code*31) + tokenText[--downto]; +/* + std::cout << " addPosition: buffer=" << Misc::toString(tokenText).substr(0,tokenTextLen) << " pos=" << position + << " offsetStart=" << (offset+token->startOffset()) << " offsetEnd=" << (offset + token->endOffset()) + << " docID=" << threadState->docID << " doPos=" << (doVectorPositions?"true":"false") << " doOffset=" << (doVectorOffsets?"true":"false") << "\n"; +*/ + int32_t hashPos = code & postingsHashMask; + + assert (!postingsCompacted); + + // Locate Posting in hash + threadState->p = postingsHash[hashPos]; + + if (threadState->p != NULL && !threadState->postingEquals(tokenText, tokenTextLen)) { + // Conflict: keep searching different locations in + // the hash table. + const int32_t inc = ((code>>8)+code)|1; + do { + code += inc; + hashPos = code & postingsHashMask; + threadState->p = postingsHash[hashPos]; + } while (threadState->p != NULL && !threadState->postingEquals(tokenText, tokenTextLen)); + } + + int32_t proxCode; + + // If we hit an exception below, it's possible the + // posting list or term vectors data will be + // partially written and thus inconsistent if + // flushed, so we have to abort all documents + // since the last flush: + + try { + + if (threadState->p != NULL) { // term seen since last flush + + if (threadState->docID != threadState->p->lastDocID) { // term not yet seen in this doc +/* + std::cout << " seen before (new docID=" << threadState->docID << ") freqUpto=" << threadState->p->freqUpto + << " proxUpto=" << threadState->p->proxUpto << "\n"; +*/ + assert (threadState->p->docFreq > 0); + + // Now that we know doc freq for previous doc, + // write it & lastDocCode + threadState->freqUpto = threadState->p->freqUpto & BYTE_BLOCK_MASK; + threadState->freq = threadState->postingsPool->buffers[threadState->p->freqUpto >> BYTE_BLOCK_SHIFT]; + if (1 == threadState->p->docFreq) + threadState->writeFreqVInt(threadState->p->lastDocCode | 1); + else { + threadState->writeFreqVInt(threadState->p->lastDocCode); + threadState->writeFreqVInt(threadState->p->docFreq); + } + threadState->p->freqUpto = threadState->freqUpto + (threadState->p->freqUpto & BYTE_BLOCK_NOT_MASK); + + if (doVectors) { + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStartCode = offsetStart = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + } + } + + proxCode = position; + + threadState->p->docFreq = 1; + + // Store code so we can write this after we're + // done with this new doc + threadState->p->lastDocCode = (threadState->docID - threadState->p->lastDocID) << 1; + threadState->p->lastDocID = threadState->docID; + + } else { // term already seen in this doc + //std::cout << " seen before (same docID=" << threadState->docID << ") proxUpto=" << threadState->p->proxUpto << "\n"; + + threadState->p->docFreq++; + + proxCode = position - threadState->p->lastPosition; + + if (doVectors) { + threadState->vector = threadState->p->vector; + if (threadState->vector == NULL) + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStart = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + offsetStartCode = offsetStart - threadState->vector->lastOffset; + } + } + } + } else { // term not seen before + //std::cout << " never seen docID=" << threadState->docID << "\n"; + + // Refill? + if (0 == threadState->postingsFreeCountTS) { + _parent->getPostings(threadState->postingsFreeListTS); + threadState->postingsFreeCountTS = threadState->postingsFreeListTS.length; + } + + const int32_t textLen1 = 1+tokenTextLen; + if (textLen1 + threadState->charPool->tUpto > CHAR_BLOCK_SIZE) { + if (textLen1 > CHAR_BLOCK_SIZE) { + // Just skip this term, to remain as robust as + // possible during indexing. A TokenFilter + // can be inserted into the analyzer chain if + // other behavior is wanted (pruning the term + // to a prefix, throwing an exception, etc). + if (threadState->maxTermPrefix == NULL){ + threadState->maxTermPrefix = _CL_NEWARRAY(TCHAR,31); + _tcsncpy(threadState->maxTermPrefix,tokenText,30); + threadState->maxTermPrefix[30] = 0; + } + + // Still increment position: + position++; + return; + } + threadState->charPool->nextBuffer(); + } + TCHAR* text = threadState->charPool->buffer; + TCHAR* textUpto = text+ threadState->charPool->tUpto; + + // Pull next free Posting from free list + threadState->p = threadState->postingsFreeListTS[--threadState->postingsFreeCountTS]; + assert(threadState->p != NULL); + threadState->p->textStart = textUpto + threadState->charPool->tOffset - text; + threadState->charPool->tUpto += textLen1; + + _tcsncpy(textUpto, tokenText, tokenTextLen); + textUpto[tokenTextLen] = CLUCENE_END_OF_WORD; + + assert (postingsHash[hashPos] == NULL); + + postingsHash.values[hashPos] = threadState->p; + numPostings++; + + if (numPostings == postingsHashHalfSize) + rehashPostings(2*postingsHashSize); + + // Init first slice for freq & prox streams + const int32_t firstSize = levelSizeArray[0]; + + const int32_t upto1 = threadState->postingsPool->newSlice(firstSize); + threadState->p->freqStart = threadState->p->freqUpto = threadState->postingsPool->tOffset + upto1; + + const int32_t upto2 = threadState->postingsPool->newSlice(firstSize); + threadState->p->proxStart = threadState->p->proxUpto = threadState->postingsPool->tOffset + upto2; + + threadState->p->lastDocCode = threadState->docID << 1; + threadState->p->lastDocID = threadState->docID; + threadState->p->docFreq = 1; + + if (doVectors) { + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStart = offsetStartCode = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + } + } + + proxCode = position; + } + + threadState->proxUpto = threadState->p->proxUpto & BYTE_BLOCK_MASK; + threadState->prox = threadState->postingsPool->buffers[threadState->p->proxUpto >> BYTE_BLOCK_SHIFT]; + assert (threadState->prox != NULL); + + if (payload != NULL && payload->length() > 0) { + threadState->writeProxVInt((proxCode<<1)|1); + threadState->writeProxVInt(payload->length()); + threadState->writeProxBytes(payload->getData().values, payload->getOffset(), payload->length()); + fieldInfo->storePayloads = true; + } else + threadState->writeProxVInt(proxCode<<1); + + threadState->p->proxUpto = threadState->proxUpto + (threadState->p->proxUpto & BYTE_BLOCK_NOT_MASK); + + threadState->p->lastPosition = position++; + + if (doVectorPositions) { + threadState->posUpto = threadState->vector->posUpto & BYTE_BLOCK_MASK; + threadState->pos = threadState->vectorsPool->buffers[threadState->vector->posUpto >> BYTE_BLOCK_SHIFT]; + threadState->writePosVInt(proxCode); + threadState->vector->posUpto = threadState->posUpto + (threadState->vector->posUpto & BYTE_BLOCK_NOT_MASK); + } + + if (doVectorOffsets) { + threadState->offsetUpto = threadState->vector->offsetUpto & BYTE_BLOCK_MASK; + threadState->offsets = threadState->vectorsPool->buffers[threadState->vector->offsetUpto >> BYTE_BLOCK_SHIFT]; + threadState->writeOffsetVInt(offsetStartCode); + threadState->writeOffsetVInt(offsetEnd-offsetStart); + threadState->vector->lastOffset = offsetEnd; + threadState->vector->offsetUpto = threadState->offsetUpto + (threadState->vector->offsetUpto & BYTE_BLOCK_NOT_MASK); + } + } catch (CLuceneError& t) { + throw AbortException(t, _parent); + } +} + +void DocumentsWriter::ThreadState::FieldData::rehashPostings(const int32_t newSize) { + + const int32_t newMask = newSize-1; + + ValueArray newHash(newSize); + int32_t hashPos, code; + const TCHAR* pos = NULL; + const TCHAR* start = NULL; + Posting* p0; + + for(int32_t i=0;icharPool->buffers[p0->textStart >> CHAR_BLOCK_SHIFT] + (p0->textStart & CHAR_BLOCK_MASK); + pos = start; + while( *pos != CLUCENE_END_OF_WORD) + pos++; + code = 0; + while (pos > start) + code = (code*31) + *--pos; + + hashPos = code & newMask; + assert (hashPos >= 0); + if (newHash[hashPos] != NULL) { + const int32_t inc = ((code>>8)+code)|1; + do { + code += inc; + hashPos = code & newMask; + } while (newHash[hashPos] != NULL); + } + newHash.values[hashPos] = p0; + } + } + + postingsHashMask = newMask; + postingsHash.deleteArray(); + postingsHash.length = newHash.length; + postingsHash.values = newHash.takeArray(); + postingsHashSize = newSize; + postingsHashHalfSize = newSize >> 1; +} + +void DocumentsWriter::ThreadState::FieldData::writeVectors(FieldInfo* fieldInfo) { + assert (fieldInfo->storeTermVector); + + threadState->vectorFieldNumbers.values[threadState->numVectorFields] = fieldInfo->number; + threadState->vectorFieldPointers.values[threadState->numVectorFields] = threadState->tvfLocal->getFilePointer(); + threadState->numVectorFields++; + + const int32_t numPostingsVectors = postingsVectorsUpto; + + threadState->tvfLocal->writeVInt(numPostingsVectors); + uint8_t bits = 0x0; + if (doVectorPositions) + bits |= TermVectorsReader::STORE_POSITIONS_WITH_TERMVECTOR; + if (doVectorOffsets) + bits |= TermVectorsReader::STORE_OFFSET_WITH_TERMVECTOR; + threadState->tvfLocal->writeByte(bits); + + threadState->doVectorSort(threadState->postingsVectors, numPostingsVectors); + + Posting* lastPosting = NULL; + + ByteSliceReader* reader = vectorSliceReader; + + for(int32_t j=0;jpostingsVectors[j]; + Posting* posting = vector->p; + const int32_t freq = posting->docFreq; + + int32_t prefix = 0; + const TCHAR* text2 = threadState->charPool->buffers[posting->textStart >> CHAR_BLOCK_SHIFT]; + const TCHAR* start2 = text2 + (posting->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos2 = start2; + + // Compute common prefix between last term and + // this term + if (lastPosting == NULL) + prefix = 0; + else { + const TCHAR* text1 = threadState->charPool->buffers[lastPosting->textStart >> CHAR_BLOCK_SHIFT]; + const TCHAR* start1 = text1 + (lastPosting->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos1 = start1; + while(true) { + if (*pos1 != *pos2 || *pos1 == CLUCENE_END_OF_WORD) { + prefix = pos1-start1; + break; + } + pos1++; + pos2++; + } + } + lastPosting = posting; + + // Compute length + while(*pos2 != CLUCENE_END_OF_WORD) + pos2++; + + const int32_t suffix = pos2 - start2 - prefix; + threadState->tvfLocal->writeVInt(prefix); + threadState->tvfLocal->writeVInt(suffix); + threadState->tvfLocal->writeChars(start2 + prefix, suffix); + threadState->tvfLocal->writeVInt(freq); + + if (doVectorPositions) { + reader->init(threadState->vectorsPool, vector->posStart, vector->posUpto); + reader->writeTo(threadState->tvfLocal); + } + + if (doVectorOffsets) { + reader->init(threadState->vectorsPool, vector->offsetStart, vector->offsetUpto); + reader->writeTo(threadState->tvfLocal); + } + } +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_FieldInfo.h clucene-core-2.3.3.4/src/core/CLucene/index/_FieldInfo.h --- clucene-core-0.9.21b/src/core/CLucene/index/_FieldInfo.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_FieldInfo.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,13 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_FieldInfo_ +#define _lucene_index_FieldInfo_ + + +#error "This header is deprecated, use _FieldInfos.h instead" + +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/FieldInfos.cpp clucene-core-2.3.3.4/src/core/CLucene/index/FieldInfos.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/FieldInfos.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/FieldInfos.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,238 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_FieldInfos.h" + +#include "CLucene/store/Directory.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +////#include "CLucene/util/VoidMap.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + + +FieldInfo::FieldInfo( const TCHAR* _fieldName, + const bool _isIndexed, + const int32_t _fieldNumber, + const bool _storeTermVector, + const bool _storeOffsetWithTermVector, + const bool _storePositionWithTermVector, + const bool _omitNorms, + const bool _storePayloads): + name(CLStringIntern::intern(_fieldName )), + isIndexed(_isIndexed), + number(_fieldNumber), + storeTermVector(_storeTermVector), + storeOffsetWithTermVector(_storeOffsetWithTermVector), + storePositionWithTermVector(_storePositionWithTermVector), + omitNorms(_omitNorms), storePayloads(_storePayloads) +{ +} + +FieldInfo::~FieldInfo(){ + CL_NS(util)::CLStringIntern::unintern(name); +} + +FieldInfo* FieldInfo::clone() { + return _CLNEW FieldInfo(name, isIndexed, number, storeTermVector, storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); +} + +FieldInfos::FieldInfos(): + byName(false,false),byNumber(true) { +} + +FieldInfos::~FieldInfos(){ + byName.clear(); + byNumber.clear(); +} + +FieldInfos::FieldInfos(Directory* d, const char* name): + byName(false,false),byNumber(true) +{ + IndexInput* input = d->openInput(name); + try { + read(input); + } _CLFINALLY ( + input->close(); + _CLDELETE(input); + ); +} + +FieldInfos* FieldInfos::clone() +{ + FieldInfos* fis = _CLNEW FieldInfos(); + const size_t numField = byNumber.size(); + for(size_t i=0;iclone(); + fis->byNumber.push_back(fi); + fis->byName.put( fi->name, fi); + } + return fis; +} + +void FieldInfos::add(const Document* doc) { + const Document::FieldsType& fields = *doc->getFields(); + Field* field; + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + field = *itr; + add(field->name(), field->isIndexed(), field->isTermVectorStored(), field->isStorePositionWithTermVector(), + field->isStoreOffsetWithTermVector(), field->getOmitNorms()); + } +} + +void FieldInfos::addIndexed(const TCHAR** names, const bool storeTermVectors, const bool storePositionWithTermVector, + const bool storeOffsetWithTermVector) { + size_t i = 0; + while (names[i]) { + add(names[i], true, storeTermVectors, storePositionWithTermVector, storeOffsetWithTermVector); + ++i; + } +} + +void FieldInfos::add(const TCHAR** names,const bool isIndexed, const bool storeTermVectors, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, const bool storePayloads) +{ + size_t i=0; + while ( names[i] != NULL ){ + add(names[i], isIndexed, storeTermVectors, storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); + ++i; + } +} + +FieldInfo* FieldInfos::add( const TCHAR* name, const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, + const bool storePayloads) { + FieldInfo* fi = fieldInfo(name); + if (fi == NULL) { + return addInternal(name, isIndexed, storeTermVector, + storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); + } else { + if (fi->isIndexed != isIndexed) { + fi->isIndexed = true; // once indexed, always index + } + if (fi->storeTermVector != storeTermVector) { + fi->storeTermVector = true; // once vector, always vector + } + if (fi->storePositionWithTermVector != storePositionWithTermVector) { + fi->storePositionWithTermVector = true; // once vector, always vector + } + if (fi->storeOffsetWithTermVector != storeOffsetWithTermVector) { + fi->storeOffsetWithTermVector = true; // once vector, always vector + } + if (fi->omitNorms != omitNorms) { + fi->omitNorms = false; // once norms are stored, always store + } + if (fi->storePayloads != storePayloads) { + fi->storePayloads = true; + } + } + return fi; +} + +FieldInfo* FieldInfos::addInternal( const TCHAR* name, const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, + const bool omitNorms, const bool storePayloads) { + + FieldInfo* fi = _CLNEW FieldInfo(name, isIndexed, byNumber.size(), storeTermVector, + storePositionWithTermVector, storeOffsetWithTermVector, omitNorms, storePayloads); + byNumber.push_back(fi); + byName.put( fi->name, fi); + return fi; +} + +int32_t FieldInfos::fieldNumber(const TCHAR* fieldName)const { + FieldInfo* fi = fieldInfo(fieldName); + return (fi!=NULL) ? fi->number : -1; +} + +FieldInfo* FieldInfos::fieldInfo(const TCHAR* fieldName) const { + FieldInfo* ret = byName.get(fieldName); + return ret; +} + +const TCHAR* FieldInfos::fieldName(const int32_t fieldNumber) const { + FieldInfo* fi = fieldInfo(fieldNumber); + return (fi==NULL)?LUCENE_BLANK_STRING:fi->name; +} + +FieldInfo* FieldInfos::fieldInfo(const int32_t fieldNumber) const { + if ( fieldNumber < 0 || (size_t)fieldNumber >= byNumber.size() ) + return NULL; + return byNumber[fieldNumber]; +} + +size_t FieldInfos::size()const { + return byNumber.size(); +} + +bool FieldInfos::hasVectors() const{ + for (size_t i = 0; i < size(); i++) { + if (fieldInfo(i)->storeTermVector) + return true; + } + return false; +} + +void FieldInfos::write(Directory* d, const char* name) const{ + IndexOutput* output = d->createOutput(name); + try { + write(output); + } _CLFINALLY ( + output->close(); + _CLDELETE(output); + ); +} + +void FieldInfos::write(IndexOutput* output) const{ + output->writeVInt(static_cast(size())); + FieldInfo* fi; + uint8_t bits; + for (size_t i = 0; i < size(); ++i) { + fi = fieldInfo(i); + bits = 0x0; + if (fi->isIndexed) bits |= IS_INDEXED; + if (fi->storeTermVector) bits |= STORE_TERMVECTOR; + if (fi->storePositionWithTermVector) bits |= STORE_POSITIONS_WITH_TERMVECTOR; + if (fi->storeOffsetWithTermVector) bits |= STORE_OFFSET_WITH_TERMVECTOR; + if (fi->omitNorms) bits |= OMIT_NORMS; + if (fi->storePayloads) bits |= STORE_PAYLOADS; + + output->writeString(fi->name,_tcslen(fi->name)); + output->writeByte(bits); + } +} + +void FieldInfos::read(IndexInput* input) { + int32_t size = input->readVInt();//read in the size + uint8_t bits; + bool isIndexed,storeTermVector,storePositionsWithTermVector,storeOffsetWithTermVector,omitNorms,storePayloads; + for (int32_t i = 0; i < size; ++i){ + TCHAR* name = input->readString(); //we could read name into a string buffer, but we can't be sure what the maximum field length will be. + bits = input->readByte(); + isIndexed = (bits & IS_INDEXED) != 0; + storeTermVector = (bits & STORE_TERMVECTOR) != 0; + storePositionsWithTermVector = (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0; + storeOffsetWithTermVector = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0; + omitNorms = (bits & OMIT_NORMS) != 0; + storePayloads = (bits & STORE_PAYLOADS) != 0; + + addInternal(name, isIndexed, storeTermVector, storePositionsWithTermVector, storeOffsetWithTermVector, omitNorms, storePayloads); + _CLDELETE_CARRAY(name); + } +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_FieldInfos.h clucene-core-2.3.3.4/src/core/CLucene/index/_FieldInfos.h --- clucene-core-0.9.21b/src/core/CLucene/index/_FieldInfos.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_FieldInfos.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,198 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_FieldInfos_ +#define _lucene_index_FieldInfos_ + +#include "CLucene/store/Directory.h" + +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,Field) + +CL_NS_DEF(index) + +class FieldInfo :LUCENE_BASE{ + public: + //name of the field + const TCHAR* name; + + //Is field indexed? true = yes false = no + bool isIndexed; + + //field number + const int32_t number; + + // true if term vector for this field should be stored + bool storeTermVector; + bool storeOffsetWithTermVector; + bool storePositionWithTermVector; + + bool omitNorms; // omit norms associated with indexed fields + + bool storePayloads; // whether this field stores payloads together with term positions + + //Func - Constructor + // Initialises FieldInfo. + // na holds the name of the field + // tk indicates whether this field is indexed or not + // nu indicates its number + //Pre - na != NULL and holds the name of the field + // tk is true or false + // number >= 0 + //Post - The FieldInfo instance has been created and initialized. + // name holds the duplicated string of na + // isIndexed = tk + // number = nu + FieldInfo(const TCHAR* fieldName, + const bool isIndexed, + const int32_t fieldNumber, + const bool storeTermVector, + const bool storeOffsetWithTermVector, + const bool storePositionWithTermVector, + const bool omitNorms, + const bool storePayloads); + + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + ~FieldInfo(); + + /* Clones this + * @memory - caller is responsible for deleting the returned object + */ + FieldInfo* clone(); +}; + +/** Access to the Field Info file that describes document fields and whether or + * not they are indexed. Each segment has a separate Field Info file. Objects + * of this class are thread-safe for multiple readers, but only one thread can + * be adding documents at a time, with no other reader or writer threads + * accessing this object. + */ +class CLUCENE_EXPORT FieldInfos :LUCENE_BASE{ + //we now use internd field names, so we can use the voidCompare + //to directly compare the strings + typedef CL_NS(util)::CLHashMap defByName; + defByName byName; + + CL_NS(util)::CLArrayList > byNumber; +public: + enum{ + IS_INDEXED = 0x1, + STORE_TERMVECTOR = 0x2, + STORE_POSITIONS_WITH_TERMVECTOR = 0x4, + STORE_OFFSET_WITH_TERMVECTOR = 0x8, + OMIT_NORMS = 0x10, + STORE_PAYLOADS = 0x20 + }; + + FieldInfos(); + ~FieldInfos(); + + /** + * Construct a FieldInfos object using the directory and the name of the file + * IndexInput + * @param d The directory to open the IndexInput from + * @param name The name of the file to open the IndexInput from in the Directory + * @throws IOException + */ + FieldInfos(CL_NS(store)::Directory* d, const char* name); + + /** + * Returns a deep clone of this FieldInfos instance. + * @memory caller is responisble for deleting returned object + */ + FieldInfos* clone(); + + /** Adds field info for a Document. */ + void add(const CL_NS(document)::Document* doc); + + /** + * Add fields that are indexed. Whether they have termvectors has to be specified. + * + * @param names The names of the fields. An array of TCHARs, last item has to be NULL + * @param storeTermVectors Whether the fields store term vectors or not + * @param storePositionWithTermVector treu if positions should be stored. + * @param storeOffsetWithTermVector true if offsets should be stored + */ + void addIndexed(const TCHAR** names, const bool storeTermVectors, const bool storePositionWithTermVector, const bool storeOffsetWithTermVector); + + /** + * Assumes the fields are not storing term vectors. + * + * @param names The names of the fields + * @param isIndexed Whether the fields are indexed or not + * + * @see #add(TCHAR*, bool) + */ + void add(const TCHAR** names, const bool isIndexed, const bool storeTermVector=false, + const bool storePositionWithTermVector=false, const bool storeOffsetWithTermVector=false, + const bool omitNorms=false, const bool storePayloads=false); + + // Merges in information from another FieldInfos. + void add(FieldInfos* other); + + /** If the field is not yet known, adds it. If it is known, checks to make + * sure that the isIndexed flag is the same as was given previously for this + * field. If not - marks it as being indexed. Same goes for the TermVector + * parameters. + * + * @param name The name of the field + * @param isIndexed true if the field is indexed + * @param storeTermVector true if the term vector should be stored + * @param storePositionWithTermVector true if the term vector with positions should be stored + * @param storeOffsetWithTermVector true if the term vector with offsets should be stored + * @param omitNorms true if the norms for the indexed field should be omitted + * @param storePayloads true if payloads should be stored for this field + */ + FieldInfo* add(const TCHAR* name, const bool isIndexed, const bool storeTermVector=false, + const bool storePositionWithTermVector=false, const bool storeOffsetWithTermVector=false, const bool omitNorms=false, const bool storePayloads=false); + + // was void + FieldInfo* addInternal( const TCHAR* name,const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, const bool storePayloads); + + int32_t fieldNumber(const TCHAR* fieldName)const; + + /** + * Return the fieldinfo object referenced by the fieldNumber. + * @param fieldNumber + * @return the FieldInfo object or null when the given fieldNumber + * doesn't exist. + */ + FieldInfo* fieldInfo(const TCHAR* fieldName) const; + + /** + * Return the fieldName identified by its number. + * + * @param fieldNumber + * @return the fieldName or an empty string when the field + * with the given number doesn't exist. + */ + const TCHAR* fieldName(const int32_t fieldNumber)const; + + /** + * Return the fieldinfo object referenced by the fieldNumber. + * @param fieldNumber + * @return the FieldInfo object or null when the given fieldNumber + * doesn't exist. + */ + FieldInfo* fieldInfo(const int32_t fieldNumber) const; + + size_t size()const; + bool hasVectors() const; + + + void write(CL_NS(store)::Directory* d, const char* name) const; + void write(CL_NS(store)::IndexOutput* output) const; + +private: + void read(CL_NS(store)::IndexInput* input); + +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/FieldsReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/FieldsReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/FieldsReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/FieldsReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,565 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include +#include "CLucene/util/Misc.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/FieldSelector.h" +#include "_FieldInfos.h" +#include "_FieldsWriter.h" +#include "_FieldsReader.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + +FieldsReader::FieldsReader(Directory* d, const char* segment, FieldInfos* fn, int32_t _readBufferSize, int32_t _docStoreOffset, int32_t size): + fieldInfos(fn), cloneableFieldsStream(NULL), fieldsStream(NULL), indexStream(NULL), + numTotalDocs(0),_size(0), closed(false),docStoreOffset(0) +{ +//Func - Constructor +//Pre - d contains a valid reference to a Directory +// segment != NULL +// fn contains a valid reference to a FieldInfos +//Post - The instance has been created + + CND_PRECONDITION(segment != NULL, "segment != NULL"); + + bool success = false; + + try { + cloneableFieldsStream = d->openInput( Misc::segmentname(segment,".fdt").c_str(), _readBufferSize ); + fieldsStream = cloneableFieldsStream->clone(); + + indexStream = d->openInput( Misc::segmentname(segment,".fdx").c_str(), _readBufferSize ); + + if (_docStoreOffset != -1) { + // We read only a slice out of this shared fields file + this->docStoreOffset = _docStoreOffset; + this->_size = size; + + // Verify the file is long enough to hold all of our + // docs + CND_CONDITION(((int32_t) (indexStream->length() / 8)) >= size + this->docStoreOffset, + "the file is not long enough to hold all of our docs"); + } else { + this->docStoreOffset = 0; + this->_size = (int32_t) (indexStream->length() >> 3); + } + + //_size = (int32_t)indexStream->length()/8; + + numTotalDocs = (int32_t) (indexStream->length() >> 3); + success = true; + } _CLFINALLY ({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); +} + +FieldsReader::~FieldsReader(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + close(); +} + +void FieldsReader::ensureOpen() { + if (closed) { + _CLTHROWA(CL_ERR_IllegalState, "this FieldsReader is closed"); + } +} + +void FieldsReader::close() { + if (!closed) { + if (fieldsStream){ + fieldsStream->close(); + _CLDELETE(fieldsStream); + } + if (cloneableFieldsStream){ + cloneableFieldsStream->close(); + _CLDELETE(cloneableFieldsStream); + } + if(indexStream){ + indexStream->close(); + _CLDELETE(indexStream); + } + /* + CL_NS(store)::IndexInput* localFieldsStream = fieldsStreamTL.get(); + if (localFieldsStream != NULL) { + localFieldsStream->close(); + fieldsStreamTL->set(NULL); + }*/ + closed = true; + } +} + +int32_t FieldsReader::size() const{ + return _size; +} + +bool FieldsReader::doc(int32_t n, Document& doc, const CL_NS(document)::FieldSelector* fieldSelector) { + if ( (n + docStoreOffset) * 8L > indexStream->length() ) + return false; + indexStream->seek((n + docStoreOffset) * 8L); + int64_t position = indexStream->readLong(); + fieldsStream->seek(position); + + int32_t numFields = fieldsStream->readVInt(); + for (int32_t i = 0; i < numFields; i++) { + const int32_t fieldNumber = fieldsStream->readVInt(); + FieldInfo* fi = fieldInfos->fieldInfo(fieldNumber); + if ( fi == NULL ) _CLTHROWA(CL_ERR_IO, "Field stream is invalid"); + + FieldSelector::FieldSelectorResult acceptField = (fieldSelector == NULL) ? FieldSelector::LOAD : fieldSelector->accept(fi->name); + + uint8_t bits = fieldsStream->readByte(); + CND_CONDITION(bits <= FieldsWriter::FIELD_IS_COMPRESSED + FieldsWriter::FIELD_IS_TOKENIZED + FieldsWriter::FIELD_IS_BINARY, + "invalid field bits"); + + const bool compressed = (bits & FieldsWriter::FIELD_IS_COMPRESSED) != 0; + const bool tokenize = (bits & FieldsWriter::FIELD_IS_TOKENIZED) != 0; + const bool binary = (bits & FieldsWriter::FIELD_IS_BINARY) != 0; + + //TODO: Find an alternative approach here if this list continues to grow beyond the + //list of 5 or 6 currently here. See Lucene 762 for discussion + if (acceptField == FieldSelector::LOAD) { + addField(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::LOAD_FOR_MERGE) { + addFieldForMerge(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::LOAD_AND_BREAK){ + addField(doc, fi, binary, compressed, tokenize); + break;//Get out of this loop + } + else if (acceptField == FieldSelector::LAZY_LOAD) { + addFieldLazy(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::SIZE){ + skipField(binary, compressed, addFieldSize(doc, fi, binary, compressed)); + } + else if (acceptField == FieldSelector::SIZE_AND_BREAK){ + addFieldSize(doc, fi, binary, compressed); + break; + }else { + skipField(binary, compressed); + } + } + return true; +} + +CL_NS(store)::IndexInput* FieldsReader::rawDocs(int32_t* lengths, const int32_t startDocID, const int32_t numDocs) { + indexStream->seek((docStoreOffset+startDocID) * 8L); + int64_t startOffset = indexStream->readLong(); + int64_t lastOffset = startOffset; + int32_t count = 0; + while (count < numDocs) { + int64_t offset; + const int32_t docID = docStoreOffset + startDocID + count + 1; + CND_CONDITION( docID <= numTotalDocs, "invalid docID"); + if (docID < numTotalDocs) + offset = indexStream->readLong(); + else + offset = fieldsStream->length(); + lengths[count++] = static_cast(offset-lastOffset); + lastOffset = offset; + } + + fieldsStream->seek(startOffset); + + return fieldsStream; +} + +void FieldsReader::skipField(const bool binary, const bool compressed) { + skipField(binary, compressed, fieldsStream->readVInt()); +} + +void FieldsReader::skipField(const bool binary, const bool compressed, const int32_t toRead) { + if (binary || compressed) { + int64_t pointer = fieldsStream->getFilePointer(); + fieldsStream->seek(pointer + toRead); + } else { + //We need to skip chars. This will slow us down, but still better + fieldsStream->skipChars(toRead); + } +} + +void FieldsReader::addFieldLazy(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, + const bool compressed, const bool tokenize) { + if (binary) { + int32_t toRead = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + if (compressed) { + doc.add(*_CLNEW LazyField(this, fi->name, Field::STORE_COMPRESS, toRead, pointer)); + } else { + doc.add(*_CLNEW LazyField(this, fi->name, Field::STORE_YES, toRead, pointer)); + } + //Need to move the pointer ahead by toRead positions + fieldsStream->seek(pointer + toRead); + } else { + LazyField* f = NULL; + if (compressed) { + int32_t toRead = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + f = _CLNEW LazyField(this, fi->name, Field::STORE_COMPRESS, toRead, pointer); + //skip over the part that we aren't loading + fieldsStream->seek(pointer + toRead); + f->setOmitNorms(fi->omitNorms); + } else { + int32_t length = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + //Skip ahead of where we are by the length of what is stored + fieldsStream->skipChars(length); + f = _CLNEW LazyField(this, fi->name, Field::STORE_YES | getIndexType(fi, tokenize) | getTermVectorType(fi), length, pointer); + f->setOmitNorms(fi->omitNorms); + } + doc.add(*f); + } +} + +// in merge mode we don't uncompress the data of a compressed field +void FieldsReader::addFieldForMerge(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) { + void* data; + Field::ValueType v; + + if ( binary || compressed) { + int32_t toRead = fieldsStream->readVInt(); + CL_NS(util)::ValueArray b(toRead); + fieldsStream->readBytes(b.values,toRead); + v = Field::VALUE_BINARY; + data = b.takeArray(); + } else { + data = fieldsStream->readString(); + v = Field::VALUE_STRING; + } + + doc.add(*_CLNEW FieldForMerge(data, v, fi, binary, compressed, tokenize)); +} + +void FieldsReader::addField(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) { + + //we have a binary stored field, and it may be compressed + if (binary) { + const int32_t toRead = fieldsStream->readVInt(); + ValueArray* b = _CLNEW ValueArray(toRead); + fieldsStream->readBytes(b->values,toRead); + if (compressed) { + // we still do not support compressed fields + ValueArray* data = _CLNEW ValueArray; + try{ + uncompress(*b, *data); + }catch(CLuceneError& err){ + _CLDELETE(data); + _CLDELETE(b); + throw err; + } + _CLDELETE(b); + doc.add(* _CLNEW Field(fi->name, data, Field::STORE_COMPRESS, false)); + }else{ + doc.add(* _CLNEW Field(fi->name, b, Field::STORE_YES, false)); + } + //no need to clean up, Field consumes b + } else { + uint8_t bits = 0; + bits |= getIndexType(fi, tokenize); + bits |= getTermVectorType(fi); + + Field* f = NULL; + if (compressed) { + bits |= Field::STORE_COMPRESS; + const int32_t toRead = fieldsStream->readVInt(); + ValueArray* b = _CLNEW ValueArray(toRead); + fieldsStream->readBytes(b->values,toRead); + ValueArray data; + try{ + uncompress(*b, data); + }_CLFINALLY( _CLDELETE(b) ) + +#ifndef _ASCII + //convert to utf8 + TCHAR* result = _CL_NEWARRAY(TCHAR, data.length); + size_t l = lucene_utf8towcs(result, (const char*)data.values, data.length); + result[l] = 0; + + //if we were a bit too pesimistic with the size, then shrink the memory... + if ( l < data.length/2 ){ + TCHAR* tmp = result; + result = STRDUP_TtoT(result); + _CLDELETE_LCARRAY(tmp); + } + + f = _CLNEW Field(fi->name, // field name + result, // uncompress the value and add as string + bits, false); +#else + f = _CLNEW Field(fi->name, // field name + reinterpret_cast(data.values), // uncompress the value and add as string + bits, false); +#endif + f->setOmitNorms(fi->omitNorms); + } else { + bits |= Field::STORE_YES; + TCHAR* str = fieldsStream->readString(); + f = _CLNEW Field(fi->name, // name + str, // read value + bits, false); + f->setOmitNorms(fi->omitNorms); + } + doc.add(*f); + } +} + +int32_t FieldsReader::addFieldSize(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed) { + const int32_t size = fieldsStream->readVInt(); + const uint32_t bytesize = binary || compressed ? size : 2*size; + ValueArray* sizebytes = _CLNEW ValueArray(4); + sizebytes->values[0] = (uint8_t) (bytesize>>24); + sizebytes->values[1] = (uint8_t) (bytesize>>16); + sizebytes->values[2] = (uint8_t) (bytesize>> 8); + sizebytes->values[3] = (uint8_t) bytesize ; + doc.add(*_CLNEW Field(fi->name, sizebytes, Field::STORE_YES, false)); + return size; +} + +CL_NS(document)::Field::TermVector FieldsReader::getTermVectorType(const FieldInfo* fi) { + if (fi->storeTermVector) { + if (fi->storeOffsetWithTermVector) { + if (fi->storePositionWithTermVector) { + return Field::TERMVECTOR_WITH_POSITIONS_OFFSETS; + } else { + return Field::TERMVECTOR_WITH_OFFSETS; + } + } else if (fi->storePositionWithTermVector) { + return Field::TERMVECTOR_WITH_POSITIONS; + } else { + return Field::TERMVECTOR_YES; + } + } else { + return Field::TERMVECTOR_NO ; + } +} + +CL_NS(document)::Field::Index FieldsReader::getIndexType(const FieldInfo* fi, const bool tokenize) { + if (fi->isIndexed && tokenize) + return Field::INDEX_TOKENIZED; + else if (fi->isIndexed && !tokenize) + return Field::INDEX_UNTOKENIZED; + else + return Field::INDEX_NO; +} + + +FieldsReader::LazyField::LazyField(FieldsReader* _parent, const TCHAR* _name, + int config, const int32_t _toRead, const int64_t _pointer) +: Field(_name, config), parent(_parent) { + // todo: need to allow for auto setting Field::INDEX_NO | Field::TERMVECTOR_NO so only Store is required + this->toRead = _toRead; + this->pointer = _pointer; + lazy = true; +} +FieldsReader::LazyField::~LazyField(){ +} + +CL_NS(store)::IndexInput* FieldsReader::LazyField::getFieldStream(){ + CL_NS(store)::IndexInput* localFieldsStream = parent->fieldsStreamTL.get(); + if (localFieldsStream == NULL) { + localFieldsStream = parent->cloneableFieldsStream->clone(); + parent->fieldsStreamTL.set(localFieldsStream); + } + return localFieldsStream; +} + +const ValueArray* FieldsReader::LazyField::binaryValue(){ + parent->ensureOpen(); + if (fieldsData == NULL) { + ValueArray* b = _CLNEW ValueArray(toRead); + CL_NS(store)::IndexInput* localFieldsStream = getFieldStream(); + + //Throw this IO Exception since IndexREader.document does so anyway, so probably not that big of a change for people + //since they are already handling this exception when getting the document + try { + localFieldsStream->seek(pointer); + localFieldsStream->readBytes(b->values, toRead); + if (isCompressed() == true) { + ValueArray* data = _CLNEW ValueArray; + try{ + uncompress(*b, *data); + }catch (CLuceneError& err){ + _CLDELETE(data); + _CLDELETE(b); + throw err; + } + _CLDELETE(b); + fieldsData = data; + } else { + fieldsData = b; + } + valueType = VALUE_BINARY; + + }catch(CLuceneError& err){ + if ( err.number() != CL_ERR_IO ) throw err; + _CLTHROWA(CL_ERR_FieldReader, err.what()); + } + + } + return static_cast*>(fieldsData); +} + +CL_NS(util)::Reader* FieldsReader::LazyField::readerValue(){ + parent->ensureOpen(); + return (valueType & VALUE_READER) ? static_cast(fieldsData) : NULL; +} + + +CL_NS(analysis)::TokenStream* FieldsReader::LazyField::tokenStreamValue(){ + parent->ensureOpen(); + return (valueType & VALUE_TOKENSTREAM) ? static_cast(fieldsData) : NULL; +} + + +/** The value of the field as a String, or null. If null, the Reader value, +* binary value, or TokenStream value is used. Exactly one of stringValue(), +* readerValue(), binaryValue(), and tokenStreamValue() must be set. */ +const TCHAR* FieldsReader::LazyField::stringValue() { + parent->ensureOpen(); + if (fieldsData == NULL) { + CL_NS(store)::IndexInput* localFieldsStream = getFieldStream(); + localFieldsStream->seek(pointer); + if (isCompressed()) { + ValueArray b(toRead); + ValueArray uncompressed; + localFieldsStream->readBytes(b.values, toRead); + _resetValue(); + uncompress(b, uncompressed); //no need to catch error, memory all in frame + +#ifndef _ASCII + TCHAR* str = _CL_NEWARRAY(TCHAR, uncompressed.length); + size_t l = lucene_utf8towcs(str, (const char*)uncompressed.values, uncompressed.length); + str[l] = 0; + + if ( l < uncompressed.length/2 ){ + //too pesimistic with size... + fieldsData = STRDUP_TtoT(str); + _CLDELETE_LCARRAY(str); + }else{ + fieldsData = str; + } +#else + fieldsData = uncompressed.values; +#endif + } else { + //read in chars b/c we already know the length we need to read + TCHAR* chars = _CL_NEWARRAY(TCHAR, toRead+1); + localFieldsStream->readChars(chars, 0, toRead); + chars[toRead] = _T('\0'); + _resetValue(); + fieldsData = chars; + } + valueType = VALUE_STRING; + } + return static_cast(fieldsData); //instanceof String ? (String) fieldsData : null; +} + +int64_t FieldsReader::LazyField::getPointer() const { + parent->ensureOpen(); + return pointer; +} + +void FieldsReader::LazyField::setPointer(const int64_t _pointer) { + parent->ensureOpen(); + this->pointer = _pointer; +} + +int32_t FieldsReader::LazyField::getToRead() const { + parent->ensureOpen(); + return toRead; +} + +void FieldsReader::LazyField::setToRead(const int32_t _toRead) { + parent->ensureOpen(); + this->toRead = _toRead; +} + +const TCHAR* FieldsReader::FieldForMerge::stringValue() const { + return (valueType & VALUE_STRING) ? static_cast(fieldsData) : NULL; +} + +CL_NS(util)::Reader* FieldsReader::FieldForMerge::readerValue() const { + // not needed for merge + return NULL; +} + +const CL_NS(util)::ValueArray* FieldsReader::FieldForMerge::binaryValue(){ + return (valueType & VALUE_BINARY) ? static_cast*>(fieldsData) : NULL; +} + +CL_NS(analysis)::TokenStream* FieldsReader::FieldForMerge::tokenStreamValue() const { + // not needed for merge + return NULL; +} + +FieldsReader::FieldForMerge::FieldForMerge(void* _value, ValueType _type, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) : Field(fi->name, 0) { + + uint32_t bits = STORE_YES; + + this->fieldsData = _value; + this->valueType = _type; + + if (tokenize) bits |= INDEX_TOKENIZED; + if (compressed) bits |= STORE_COMPRESS; + + if (fi->isIndexed && !tokenize) bits |= INDEX_UNTOKENIZED; + if (fi->omitNorms) bits |= INDEX_NONORMS; + if (fi->storeOffsetWithTermVector) bits |= TERMVECTOR_WITH_OFFSETS; + if (fi->storePositionWithTermVector) bits |= TERMVECTOR_WITH_POSITIONS; + if (fi->storeTermVector) bits |= TERMVECTOR_YES; + + setConfig(bits); +} +FieldsReader::FieldForMerge::~FieldForMerge(){ +} +const char* FieldsReader::FieldForMerge::getClassName(){ + return "FieldsReader::FieldForMerge"; +} +const char* FieldsReader::FieldForMerge::getObjectName() const{ + return getClassName(); +} + +void FieldsReader::uncompress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output){ + stringstream out; + string err; + if ( ! Misc::inflate(input.values, input.length, out, err) ){ + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + + // get length of file: + out.seekg (0, ios::end); + size_t length = out.tellg(); + out.seekg (0, ios::beg); + + output.resize(length+1); + out.read((char*)output.values,length); + output.values[length] = 0;//null-terminate in case we want to use it as utf8 +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_FieldsReader.h clucene-core-2.3.3.4/src/core/CLucene/index/_FieldsReader.h --- clucene-core-0.9.21b/src/core/CLucene/index/_FieldsReader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_FieldsReader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,169 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_FieldsReader_ +#define _lucene_index_FieldsReader_ + +#include "CLucene/util/_ThreadLocal.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +#include "CLucene/document/Field.h" +CL_CLASS_DEF(document,FieldSelector) +CL_CLASS_DEF(index, FieldInfo) +CL_CLASS_DEF(index, FieldInfos) +CL_CLASS_DEF(store,IndexInput) + +CL_NS_DEF(index) + + /** + * Class responsible for access to stored document fields. + *

+ * It uses <segment>.fdt and <segment>.fdx; files. + */ + class FieldsReader :LUCENE_BASE{ + private: + const FieldInfos* fieldInfos; + + // The main fieldStream, used only for cloning. + CL_NS(store)::IndexInput* cloneableFieldsStream; + + // This is a clone of cloneableFieldsStream used for reading documents. + // It should not be cloned outside of a synchronized context. + CL_NS(store)::IndexInput* fieldsStream; + + CL_NS(store)::IndexInput* indexStream; + int32_t numTotalDocs; + int32_t _size; + bool closed; + + // The docID offset where our docs begin in the index + // file. This will be 0 if we have our own private file. + int32_t docStoreOffset; + + DEFINE_MUTEX(THIS_LOCK) + CL_NS(util)::ThreadLocal > fieldsStreamTL; + static void uncompress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output); + public: + FieldsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fn, + int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE, int32_t docStoreOffset = -1, int32_t size = 0); + virtual ~FieldsReader(); + + //protected: + /** + * @throws an exception (CL_ERR_IllegalState) if this FieldsReader is closed + */ + void ensureOpen(); + + /** + * Closes the underlying {@link org.apache.lucene.store.IndexInput} streams, including any ones associated with a + * lazy implementation of a Field. This means that the Fields values will not be accessible. + * + * @throws IOException + */ + void close(); + + int32_t size() const; + + /** Loads the fields from n'th document into doc. returns true on success. */ + bool doc(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector = NULL); + + protected: + /** Returns the length in bytes of each raw document in a + * contiguous range of length numDocs starting with + * startDocID. Returns the IndexInput (the fieldStream), + * already seeked to the starting point for startDocID.*/ + CL_NS(store)::IndexInput* rawDocs(int32_t* lengths, const int32_t startDocID, const int32_t numDocs); + + private: + /** + * Skip the field. We still have to read some of the information about the field, but can skip past the actual content. + * This will have the most payoff on large fields. + */ + void skipField(const bool binary, const bool compressed); + void skipField(const bool binary, const bool compressed, const int32_t toRead); + + void addFieldLazy(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + /** Add the size of field as a byte[] containing the 4 bytes of the integer byte size (high order byte first; char = 2 bytes) + * Read just the size -- caller must skip the field content to continue reading fields + * Return the size in bytes or chars, depending on field type + */ + int32_t addFieldSize(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed); + + // in merge mode we don't uncompress the data of a compressed field + void addFieldForMerge(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + void addField(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + CL_NS(document)::Field::TermVector getTermVectorType(const FieldInfo* fi); + CL_NS(document)::Field::Index getIndexType(const FieldInfo* fi, const bool tokenize); + + private: + /** + * A Lazy implementation of Field that differs loading of fields until asked for, instead of when the Document is + * loaded. + */ + class LazyField : public CL_NS(document)::Field { + private: + int32_t toRead; + int64_t pointer; + FieldsReader* parent; + + public: + LazyField(FieldsReader* _parent, const TCHAR* _name, int config, const int32_t _toRead, const int64_t _pointer); + virtual ~LazyField(); + private: + CL_NS(store)::IndexInput* getFieldStream(); + + public: + /** The value of the field in Binary, or null. If null, the Reader value, + * String value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual const CL_NS(util)::ValueArray* binaryValue(); + + /** The value of the field as a Reader, or null. If null, the String value, + * binary value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(util)::Reader* readerValue(); + + /** The value of the field as a String, or null. If null, the Reader value, + * binary value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual const TCHAR* stringValue(); + + /** The value of the field as a TokesStream, or null. If null, the Reader value, + * String value, or binary value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(analysis)::TokenStream* tokenStreamValue(); + + int64_t getPointer() const; + void setPointer(const int64_t _pointer); + + int32_t getToRead() const; + void setToRead(const int32_t _toRead); + }; + friend class LazyField; + friend class SegmentMerger; + friend class FieldsWriter; + + // Instances of this class hold field properties and data + // for merge + class FieldForMerge : public CL_NS(document)::Field { + public: + const TCHAR* stringValue() const; + CL_NS(util)::Reader* readerValue() const; + const CL_NS(util)::ValueArray* binaryValue(); + CL_NS(analysis)::TokenStream* tokenStreamValue() const; + + FieldForMerge(void* _value, ValueType _type, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + virtual ~FieldForMerge(); + + virtual const char* getObjectName() const; + static const char* getClassName(); + }; + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/FieldsWriter.cpp clucene-core-2.3.3.4/src/core/CLucene/index/FieldsWriter.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/FieldsWriter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/FieldsWriter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,269 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_FieldsWriter.h" + +//#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +#include "_FieldInfos.h" +#include "_FieldsReader.h" +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_DEF(index) + +FieldsWriter::FieldsWriter(Directory* d, const char* segment, FieldInfos* fn): + fieldInfos(fn) +{ +//Func - Constructor +//Pre - d contains a valid reference to a directory +// segment != NULL and contains the name of the segment +//Post - fn contains a valid reference toa a FieldInfos + + CND_PRECONDITION(segment != NULL,"segment is NULL"); + + fieldsStream = d->createOutput ( Misc::segmentname(segment,".fdt").c_str() ); + + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + + indexStream = d->createOutput( Misc::segmentname(segment,".fdx").c_str() ); + + CND_CONDITION(indexStream != NULL,"indexStream is NULL"); + + doClose = true; +} + +FieldsWriter::FieldsWriter(CL_NS(store)::IndexOutput* fdx, CL_NS(store)::IndexOutput* fdt, FieldInfos* fn): + fieldInfos(fn) +{ + fieldsStream = fdt; + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + indexStream = fdx; + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + doClose = false; +} + +FieldsWriter::~FieldsWriter(){ +//Func - Destructor +//Pre - true +//Post - Instance has been destroyed + + close(); +} + +void FieldsWriter::close() { +//Func - Closes all streams and frees all resources +//Pre - true +//Post - All streams have been closed all resources have been freed + + if (! doClose ) + return; + + //Check if fieldsStream is valid + if (fieldsStream){ + //Close fieldsStream + fieldsStream->close(); + _CLDELETE( fieldsStream ); + } + + //Check if indexStream is valid + if (indexStream){ + //Close indexStream + indexStream->close(); + _CLDELETE( indexStream ); + } +} + +void FieldsWriter::addDocument(Document* doc) { +//Func - Adds a document +//Pre - doc contains a valid reference to a Document +// indexStream != NULL +// fieldsStream != NULL +//Post - The document doc has been added + + CND_PRECONDITION(indexStream != NULL,"indexStream is NULL"); + CND_PRECONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + + indexStream->writeLong(fieldsStream->getFilePointer()); + + int32_t storedCount = 0; + { + const Document::FieldsType& fields = *doc->getFields(); + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + Field* field = *itr; + if (field->isStored()) + storedCount++; + } + fieldsStream->writeVInt(storedCount); + } + { + const Document::FieldsType& fields = *doc->getFields(); + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + Field* field = *itr; + if (field->isStored()) { + writeField(fieldInfos->fieldInfo(field->name()), field); + } + } + } +} + +void FieldsWriter::writeField(FieldInfo* fi, CL_NS(document)::Field* field) +{ + // if the field as an instanceof FieldsReader.FieldForMerge, we're in merge mode + // and field.binaryValue() already returns the compressed value for a field + // with isCompressed()==true, so we disable compression in that case + bool disableCompression = (field->instanceOf(FieldsReader::FieldForMerge::getClassName())); + + fieldsStream->writeVInt(fi->number); + uint8_t bits = 0; + if (field->isTokenized()) + bits |= FieldsWriter::FIELD_IS_TOKENIZED; + if (field->isBinary()) + bits |= FieldsWriter::FIELD_IS_BINARY; + if (field->isCompressed()) + bits |= FieldsWriter::FIELD_IS_COMPRESSED; + + fieldsStream->writeByte(bits); + + if ( field->isCompressed() ){ + // compression is enabled for the current field + CL_NS(util)::ValueArray dataB; + const CL_NS(util)::ValueArray* data = &dataB; + + if (disableCompression) { + // optimized case for merging, the data + // is already compressed + data = field->binaryValue(); + } else { + // check if it is a binary field + if (field->isBinary()) { + compress(*field->binaryValue(), dataB); + }else if ( field->stringValue() == NULL ){ //we must be using readerValue + CND_PRECONDITION(!field->isIndexed(), "Cannot store reader if it is indexed too") + Reader* r = field->readerValue(); + + int32_t sz = r->size(); + if ( sz < 0 ) + sz = 10000000; //todo: we should warn the developer here.... + + //read the entire string + const TCHAR* rv = NULL; + int64_t rl = r->read(rv, sz, 1); + if ( rl > LUCENE_INT32_MAX_SHOULDBE ) + _CLTHROWA(CL_ERR_Runtime,"Field length too long"); + else if ( rl < 0 ) + rl = 0; + + string str = lucene_wcstoutf8string(rv, rl); + CL_NS(util)::ValueArray utfstr; + utfstr.length = str.length(); + utfstr.values = (uint8_t*)str.c_str(); + compress(utfstr, dataB); + utfstr.values = NULL; + }else if ( field->stringValue() != NULL ){ + string str = lucene_wcstoutf8string(field->stringValue(), LUCENE_INT32_MAX_SHOULDBE); + CL_NS(util)::ValueArray utfstr; + utfstr.length = str.length(); + utfstr.values = (uint8_t*)str.c_str(); + compress(utfstr, dataB); + utfstr.values = NULL; + } + } + fieldsStream->writeVInt(data->length); + fieldsStream->writeBytes(data->values, data->length); + + }else{ + + //FEATURE: this problem in Java Lucene too, if using Reader, data is not stored. + //todo: this is a logic bug... + //if the field is stored, and indexed, and is using a reader the field wont get indexed + // + //if we could write zero prefixed vints (therefore static length), then we could + //write a reader directly to the field indexoutput and then go back and write the data + //length. however this is not supported in lucene yet... + //if this is ever implemented, then it would make sense to also be able to combine the + //FieldsWriter and DocumentWriter::invertDocument process, and use a streamfilter to + //write the field data while the documentwrite analyses the document! how cool would + //that be! it would cut out all these buffers!!! + + // compression is disabled for the current field + if (field->isBinary()) { + const CL_NS(util)::ValueArray* data = field->binaryValue(); + fieldsStream->writeVInt(data->length); + fieldsStream->writeBytes(data->values, data->length); + + }else if ( field->stringValue() == NULL ){ //we must be using readerValue + CND_PRECONDITION(!field->isIndexed(), "Cannot store reader if it is indexed too") + Reader* r = field->readerValue(); + + int32_t sz = r->size(); + if ( sz < 0 ) + sz = 10000000; //todo: we should warn the developer here.... + + //read the entire string + const TCHAR* rv; + int64_t rl = r->read(rv, sz, 1); + if ( rl > LUCENE_INT32_MAX_SHOULDBE ) + _CLTHROWA(CL_ERR_Runtime,"Field length too long"); + else if ( rl < 0 ) + rl = 0; + + fieldsStream->writeString( rv, (int32_t)rl); + }else if ( field->stringValue() != NULL ){ + fieldsStream->writeString(field->stringValue(),_tcslen(field->stringValue())); + }else + _CLTHROWA(CL_ERR_Runtime, "No values are set for the field"); + } +} + +void FieldsWriter::flushDocument(int32_t numStoredFields, CL_NS(store)::RAMOutputStream* buffer) { + indexStream->writeLong(fieldsStream->getFilePointer()); + fieldsStream->writeVInt(numStoredFields); + buffer->writeTo(fieldsStream); +} + +void FieldsWriter::flush() { + indexStream->flush(); + fieldsStream->flush(); +} + +void FieldsWriter::addRawDocuments(CL_NS(store)::IndexInput* stream, const int32_t* lengths, const int32_t numDocs) { + int64_t position = fieldsStream->getFilePointer(); + const int64_t start = position; + for(int32_t i=0;iwriteLong(position); + position += lengths[i]; + } + fieldsStream->copyBytes(stream, position-start); + CND_CONDITION(fieldsStream->getFilePointer() == position,"fieldsStream->getFilePointer() != position"); +} + +void FieldsWriter::compress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output){ + stringstream out; + string err; + if ( ! Misc::deflate(input.values, input.length, out, err) ){ + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + + // get length of file: + out.seekg (0, ios::end); + size_t length = out.tellg(); + out.seekg (0, ios::beg); + + output.resize(length); + out.read((char*)output.values,length); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_FieldsWriter.h clucene-core-2.3.3.4/src/core/CLucene/index/_FieldsWriter.h --- clucene-core-0.9.21b/src/core/CLucene/index/_FieldsWriter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_FieldsWriter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,62 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_FieldsWriter_ +#define _lucene_index_FieldsWriter_ + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(index,FieldInfo) +CL_CLASS_DEF(store,RAMOutputStream) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,Field) +CL_CLASS_DEF(index,FieldInfos) +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) +class FieldsWriter :LUCENE_BASE{ +private: + FieldInfos* fieldInfos; + + CL_NS(store)::IndexOutput* fieldsStream; + CL_NS(store)::IndexOutput* indexStream; + + bool doClose; + + static void compress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output); + +public: + LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_TOKENIZED = 0x1); + LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_BINARY = 0x2); + LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_COMPRESSED = 0x4); + + FieldsWriter(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fn); + FieldsWriter(CL_NS(store)::IndexOutput* fdx, CL_NS(store)::IndexOutput* fdt, FieldInfos* fn); + ~FieldsWriter(); + + // Writes the contents of buffer into the fields stream + // and adds a new entry for this document into the index + // stream. This assumes the buffer was already written + // in the correct fields format. + void flushDocument(int32_t numStoredFields, CL_NS(store)::RAMOutputStream* buffer); + + void flush(); + + void writeField(FieldInfo* fi, CL_NS(document)::Field* field); + + void close(); + + /** Bulk write a contiguous series of documents. The + * lengths array is the length (in bytes) of each raw + * document. The stream IndexInput is the + * fieldsStream from which we should bulk-copy all + * bytes. */ + void addRawDocuments(CL_NS(store)::IndexInput* stream, const int32_t* lengths, const int32_t numDocs); + void addDocument(CL_NS(document)::Document* doc); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexDeletionPolicy.cpp clucene-core-2.3.3.4/src/core/CLucene/index/IndexDeletionPolicy.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/IndexDeletionPolicy.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexDeletionPolicy.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,140 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "IndexDeletionPolicy.h" + +CL_NS_DEF(index) + +IndexDeletionPolicy::~IndexDeletionPolicy(){ +} +IndexCommitPoint::~IndexCommitPoint(){ +} + + + +KeepOnlyLastCommitDeletionPolicy::~KeepOnlyLastCommitDeletionPolicy(){ +} + +void KeepOnlyLastCommitDeletionPolicy::onInit(std::vector& commits) { + // Note that commits.size() should normally be 1: + onCommit(commits); +} + +void KeepOnlyLastCommitDeletionPolicy::onCommit(std::vector& commits) { + // Note that commits.size() should normally be 2 (if not + // called by onInit above): + size_t size = commits.size(); + for(size_t i=0;ideleteCommitPoint(); + } +} + +const char* KeepOnlyLastCommitDeletionPolicy::getClassName(){ + return "KeepOnlyLastCommitDeletionPolicy"; +} +const char* KeepOnlyLastCommitDeletionPolicy::getObjectName() const{ + return getClassName(); +} + + + +/** A {@link IndexDeletionPolicy} that wraps around any other + * {@link IndexDeletionPolicy} and adds the ability to hold and + * later release a single "snapshot" of an index. While + * the snapshot is held, the {@link IndexWriter} will not + * remove any files associated with it even if the index is + * otherwise being actively, arbitrarily changed. Because + * we wrap another arbitrary {@link IndexDeletionPolicy}, this + * gives you the freedom to continue using whatever {@link + * IndexDeletionPolicy} you would normally want to use with your + * index. + +class SnapshotDeletionPolicy: public IndexDeletionPolicy { +private: + IndexCommitPoint lastCommit; + IndexDeletionPolicy primary; + IndexCommitPoint snapshot; + DEFINE_MUTEX(SnapshotDeletionPolicy_LOCK) + + class MyCommitPoint: public IndexCommitPoint { + IndexCommitPoint cp; + public: + MyCommitPoint(IndexCommitPoint cp) { + this.cp = cp; + } + String getSegmentsFileName() { + return cp.getSegmentsFileName(); + } + Collection getFileNames() throws IOException { + return cp.getFileNames(); + } + void deleteCommitPoint() { + synchronized(SnapshotDeletionPolicy_LOCK) { + // Suppress the delete request if this commit point is + // our current snapshot. + if (snapshot != cp) + cp->deleteCommitPoint(); + } + } + } + + List wrapCommits(List commits) { + final int count = commits.size(); + List myCommits = new ArrayList(count); + for(int i=0;i +#include "CLucene/util/Equators.h" + +CL_NS_DEF(index) + + +class CLUCENE_EXPORT IndexCommitPoint { +public: + virtual ~IndexCommitPoint(); + /** + * Get the segments file (segments_N) associated + * with this commit point. + */ + virtual std::string getSegmentsFileName() = 0; + + /** + * Returns all index files referenced by this commit point. + */ + virtual const std::vector& getFileNames() = 0; + + /** + * Delete this commit point. + *

+ * Upon calling this, the writer is notified that this commit + * point should be deleted. + *

+ * Decision that a commit-point should be deleted is taken by the {@link IndexDeletionPolicy} in effect + * and therefore this should only be called by its {@link IndexDeletionPolicy#onInit onInit()} or + * {@link IndexDeletionPolicy#onCommit onCommit()} methods. + */ + virtual void deleteCommitPoint() = 0; +}; + +/** + *

Expert: policy for deletion of stale {@link IndexCommitPoint index commits}. + * + *

Implement this interface, and pass it to one + * of the {@link IndexWriter} or {@link IndexReader} + * constructors, to customize when older + * {@link IndexCommitPoint point-in-time commits} + * are deleted from the index directory. The default deletion policy + * is {@link KeepOnlyLastCommitDeletionPolicy}, which always + * removes old commits as soon as a new commit is done (this + * matches the behavior before 2.2).

+ * + *

One expected use case for this (and the reason why it + * was first created) is to work around problems with an + * index directory accessed via filesystems like NFS because + * NFS does not provide the "delete on last close" semantics + * that Lucene's "point in time" search normally relies on. + * By implementing a custom deletion policy, such as "a + * commit is only removed once it has been stale for more + * than X minutes", you can give your readers time to + * refresh to the new commit before {@link IndexWriter} + * removes the old commits. Note that doing so will + * increase the storage requirements of the index. See LUCENE-710 + * for details.

+ */ +class CLUCENE_EXPORT IndexDeletionPolicy: public CL_NS(util)::NamedObject{ +public: + virtual ~IndexDeletionPolicy(); + + /** + *

This is called once when a writer is first + * instantiated to give the policy a chance to remove old + * commit points.

+ * + *

The writer locates all index commits present in the + * index directory and calls this method. The policy may + * choose to delete some of the commit points, doing so by + * calling method {@link IndexCommitPoint#delete delete()} + * of {@link IndexCommitPoint}.

+ * + *

Note: the last CommitPoint is the most recent one, + * i.e. the "front index state". Be careful not to delete it, + * unless you know for sure what you are doing, and unless + * you can afford to lose the index content while doing that. + * + * @param commits List of current + * {@link IndexCommitPoint point-in-time commits}, + * sorted by age (the 0th one is the oldest commit). + */ + virtual void onInit(std::vector& commits) = 0; + + /** + *

This is called each time the writer completed a commit. + * This gives the policy a chance to remove old commit points + * with each commit.

+ * + *

The policy may now choose to delete old commit points + * by calling method {@link IndexCommitPoint#delete delete()} + * of {@link IndexCommitPoint}.

+ * + *

If writer has autoCommit = true then + * this method will in general be called many times during + * one instance of {@link IndexWriter}. If + * autoCommit = false then this method is + * only called once when {@link IndexWriter#close} is + * called, or not at all if the {@link IndexWriter#abort} + * is called. + * + *

Note: the last CommitPoint is the most recent one, + * i.e. the "front index state". Be careful not to delete it, + * unless you know for sure what you are doing, and unless + * you can afford to lose the index content while doing that. + * + * @param commits List of {@link IndexCommitPoint}, + * sorted by age (the 0th one is the oldest commit). + */ + virtual void onCommit(std::vector& commits) = 0; +}; + + + + +/** + * This {@link IndexDeletionPolicy} implementation that + * keeps only the most recent commit and immediately removes + * all prior commits after a new commit is done. This is + * the default deletion policy. + */ + +class CLUCENE_EXPORT KeepOnlyLastCommitDeletionPolicy: public IndexDeletionPolicy { +public: + virtual ~KeepOnlyLastCommitDeletionPolicy(); + /** + * Deletes all commits except the most recent one. + */ + void onInit(std::vector& commits); + + /** + * Deletes all commits except the most recent one. + */ + void onCommit(std::vector& commits); + + static const char* getClassName(); + const char* getObjectName() const; +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexFileDeleter.cpp clucene-core-2.3.3.4/src/core/CLucene/index/IndexFileDeleter.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/IndexFileDeleter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexFileDeleter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,530 @@ +#include "CLucene/_ApiHeader.h" +#include "_IndexFileDeleter.h" +#include "_IndexFileNameFilter.h" +#include "_DocumentsWriter.h" +#include "_SegmentHeader.h" +#include "CLucene/store/Directory.h" +#include "CLucene/LuceneThreads.h" +#include +#include +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +bool IndexFileDeleter::VERBOSE_REF_COUNTS = false; + +IndexFileDeleter::CommitPoint::CommitPoint(IndexFileDeleter* _this, SegmentInfos* segmentInfos){ + this->_this = _this; + this->deleted = false; + this->gen = 0; + segmentsFileName = segmentInfos->getCurrentSegmentFileName(); + int32_t size = segmentInfos->size(); + files.push_back(segmentsFileName); + gen = segmentInfos->getGeneration(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == _this->directory) { + const vector& ff = segmentInfo->files(); + files.insert(files.end(),ff.begin(), ff.end()); + } + } + +} +IndexFileDeleter::CommitPoint::~CommitPoint(){ +} + +/** +* Get the segments_N file for this commit point32_t. +*/ +std::string IndexFileDeleter::CommitPoint::getSegmentsFileName() { + return segmentsFileName; +} +bool IndexFileDeleter::CommitPoint::sort(IndexCommitPoint* elem1, IndexCommitPoint* elem2){ + if (((CommitPoint*)elem1)->gen < ((CommitPoint*)elem2)->gen) + return true; + return false; +} + +const std::vector& IndexFileDeleter::CommitPoint::getFileNames() { + return files; +} + +/** +* Called only be the deletion policy, to remove this +* commit point32_t from the index. +*/ +void IndexFileDeleter::CommitPoint::deleteCommitPoint() { + if (!deleted) { + deleted = true; + _this->commitsToDelete.push_back(this); + } +} + +const char* IndexFileDeleter::CommitPoint::getClassName(){ + return "IndexFileDeleter::CommitPoint"; +} +const char* IndexFileDeleter::CommitPoint::getObjectName() const{ + return getClassName(); +} +int32_t IndexFileDeleter::CommitPoint::compareTo(NamedObject* obj) { + if ( obj->getObjectName() != CommitPoint::getClassName() ) + return -1; + + CommitPoint* commit = (CommitPoint*) obj; + if (gen < commit->gen) { + return -1; + } else if (gen > commit->gen) { + return 1; + } else { + return 0; + } +} + +void IndexFileDeleter::setInfoStream(std::ostream* infoStream) { + this->infoStream = infoStream; + if (infoStream != NULL){ + string msg = string("setInfoStream deletionPolicy=") + policy->getObjectName(); + message( msg ); + } +} + +void IndexFileDeleter::message(string message) { + (*infoStream) << string("IFD [") << Misc::toString( _LUCENE_CURRTHREADID ) << string("]: ") << message << string("\n"); +} + + +IndexFileDeleter::~IndexFileDeleter(){ + _CLDELETE(policy); + commitsToDelete.clear(); + commits.clear(); + refCounts.clear(); +} +IndexFileDeleter::IndexFileDeleter(Directory* directory, IndexDeletionPolicy* policy, + SegmentInfos* segmentInfos, std::ostream* infoStream, DocumentsWriter* docWriter): + refCounts( RefCountsType(true,true) ), commits(CommitsType(true)) +{ + this->docWriter = docWriter; + this->infoStream = infoStream; + + if (infoStream != NULL) + message( string("init: current segments file is \"") + segmentInfos->getCurrentSegmentFileName() + "\"; deletionPolicy=" + policy->getObjectName()); + + this->policy = policy; + this->directory = directory; + CommitPoint* currentCommitPoint = NULL; + + // First pass: walk the files and initialize our ref + // counts: + int64_t currentGen = segmentInfos->getGeneration(); + const IndexFileNameFilter* filter = IndexFileNameFilter::getFilter(); + + vector files; + if ( !directory->list(&files) ) + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + ": list() returned NULL").c_str()); + + + for(size_t i=0;iaccept(NULL, fileName.c_str()) && !fileName.compare(IndexFileNames::SEGMENTS_GEN) == 0) { + + // Add this file to refCounts with initial count 0: + getRefCount(fileName.c_str()); + + if ( strncmp(fileName.c_str(), IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS)) == 0 ) { + + // This is a commit (segments or segments_N), and + // it's valid (<= the max gen). Load it, then + // incref all files it refers to: + if (SegmentInfos::generationFromSegmentsFileName(fileName.c_str()) <= currentGen) { + if (infoStream != NULL) { + message("init: load commit \"" + fileName + "\""); + } + SegmentInfos sis; + bool failed = false; + try { + sis.read(directory, fileName.c_str()); + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ){ + throw e; + } + // LUCENE-948: on NFS (and maybe others), if + // you have writers switching back and forth + // between machines, it's very likely that the + // dir listing will be stale and will claim a + // file segments_X exists when in fact it + // doesn't. So, we catch this and handle it + // as if the file does not exist + if (infoStream != NULL) { + message("init: hit FileNotFoundException when loading commit \"" + fileName + "\"; skipping this commit point32_t"); + } + failed = true; + } + if (!failed) { + CommitPoint* commitPoint = _CLNEW CommitPoint(this,&sis); + if (sis.getGeneration() == segmentInfos->getGeneration()) { + currentCommitPoint = commitPoint; + } + commits.push_back(commitPoint); + incRef(&sis, true); + } + } + } + } + } + + if (currentCommitPoint == NULL) { + // We did not in fact see the segments_N file + // corresponding to the segmentInfos that was passed + // in. Yet, it must exist, because our caller holds + // the write lock. This can happen when the directory + // listing was stale (eg when index accessed via NFS + // client with stale directory listing cache). So we + // try now to explicitly open this commit point32_t: + SegmentInfos sis; + try { + sis.read(directory, segmentInfos->getCurrentSegmentFileName().c_str()); + } catch (CLuceneError& e) { + if ( e.number() == CL_ERR_IO ){ + _CLTHROWA(CL_ERR_CorruptIndex, "failed to locate current segments_N file"); + } + } + if (infoStream != NULL) + message("forced open of current segments file " + segmentInfos->getCurrentSegmentFileName()); + currentCommitPoint = _CLNEW CommitPoint(this,&sis); + commits.push_back(currentCommitPoint); + incRef(&sis, true); + } + + // We keep commits list in sorted order (oldest to newest): + std::sort(commits.begin(), commits.end(), CommitPoint::sort); + + // Now delete anything with ref count at 0. These are + // presumably abandoned files eg due to crash of + // IndexWriter. + RefCountsType::iterator it = refCounts.begin(); + while(it != refCounts.end()) { + char* fileName = it->first; + RefCount* rc = it->second; + if (0 == rc->count) { + if (infoStream != NULL) { + message( string("init: removing unreferenced file \"") + fileName + "\""); + } + deleteFile(fileName); + } + it++; + } + + // Finally, give policy a chance to remove things on + // startup: + policy->onInit(commits); + + // It's OK for the onInit to remove the current commit + // point; we just have to checkpoint our in-memory + // SegmentInfos to protect those files that it uses: + if (currentCommitPoint->deleted) { + checkpoint(segmentInfos, false); + } + + deleteCommits(); +} + +/** +* Remove the CommitPoints in the commitsToDelete List by +* DecRef'ing all files from each segmentInfos-> +*/ +void IndexFileDeleter::deleteCommits() { + + int32_t size = commitsToDelete.size(); + + if (size > 0) { + + // First decref all files that had been referred to by + // the now-deleted commits: + for(int32_t i=0;igetSegmentsFileName() + "\""); + } + decRef(commit->files); + } + commitsToDelete.clear(); + + // Now compact commits to remove deleted ones (preserving the sort): + size = commits.size(); + int32_t readFrom = 0; + int32_t writeTo = 0; + while(readFrom < size) { + CommitPoint* commit = (CommitPoint*)commits[readFrom]; + if (!commit->deleted) { + if (writeTo != readFrom) { + commits.remove(readFrom,true); + commits.remove(writeTo,false);//delete this one... + if ( commits.size() == writeTo ) + commits.push_back(commit); + else + commits[writeTo] = commit; + } + writeTo++; + } + readFrom++; + } + + while(size > writeTo) { + commits.remove(size-1); + size--; + } + } +} + +/** +* Writer calls this when it has hit an error and had to +* roll back, to tell us that there may now be +* unreferenced files in the filesystem. So we re-list +* the filesystem and delete such files. If segmentName +* is non-NULL, we will only delete files corresponding to +* that segment. +*/ +void IndexFileDeleter::refresh(const char* segmentName) { + vector files; + if ( !directory->list(files) ) + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + ": list() returned NULL").c_str() ); + const IndexFileNameFilter* filter = IndexFileNameFilter::getFilter(); + string segmentPrefix1; + string segmentPrefix2; + if (segmentName != NULL) { + segmentPrefix1 = string(segmentName) + "."; + segmentPrefix2 = string(segmentName) + "_"; + } + + for(size_t i=0;iaccept(NULL, fileName.c_str()) && + ( (segmentName==NULL || fileName.compare(0,segmentPrefix1.length(),segmentPrefix1) == 0 || fileName.compare(0,segmentPrefix2.length(),segmentPrefix2)==0) + && refCounts.find((char*)fileName.c_str())== refCounts.end() && fileName.compare(IndexFileNames::SEGMENTS_GEN)!=0) ){ + + // Unreferenced file, so remove it + if (infoStream != NULL) { + message( string("refresh [prefix=") + segmentName + "]: removing newly created unreferenced file \"" + fileName + "\""); + } + deleteFile(fileName.c_str()); + } + } +} + +void IndexFileDeleter::refresh() { + refresh(NULL); +} + +void IndexFileDeleter::close() { + deletePendingFiles(); +} + +void IndexFileDeleter::deletePendingFiles() { + if (!deletable.empty()) { + vector oldDeletable; + oldDeletable.insert(oldDeletable.end(),deletable.begin(),deletable.end()); + deletable.clear(); + + int32_t size = oldDeletable.size(); + for(int32_t i=0;igetCurrentSegmentFileName() + "\" [" + + Misc::toString(segmentInfos->size()) + " segments ; isCommit = " + Misc::toString(isCommit) + "]"); + } + + // Try again now to delete any previously un-deletable + // files (because they were in use, on Windows): + deletePendingFiles(); + + // Incref the files: + incRef(segmentInfos, isCommit); + const vector* docWriterFiles = NULL; + if (docWriter != NULL) { + docWriterFiles = &docWriter->files(); + if (!docWriterFiles->empty()) + incRef(*docWriterFiles); + else + docWriterFiles = NULL; + } + + if (isCommit) { + // Append to our commits list: + commits.push_back(_CLNEW CommitPoint(this, segmentInfos)); + + // Tell policy so it can remove commits: + policy->onCommit(commits); + + // Decref files for commits that were deleted by the policy: + deleteCommits(); + } + + // DecRef old files from the last checkpoint, if any: + int32_t size = lastFiles.size(); + if (size > 0) { + for(int32_t i=0;isize(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + const vector& files = segmentInfo->files(); + lastFiles.insert(lastFiles.end(), files.begin(), files.end()); + } + } + } + if (docWriterFiles != NULL) + lastFiles.insert(lastFiles.end(), docWriterFiles->begin(),docWriterFiles->end()); +} + +void IndexFileDeleter::incRef(SegmentInfos* segmentInfos, bool isCommit) { + int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + incRef(segmentInfo->files()); + } + } + + if (isCommit) { + // Since this is a commit point32_t, also incref its + // segments_N file: + getRefCount(segmentInfos->getCurrentSegmentFileName().c_str())->IncRef(); + } +} + +void IndexFileDeleter::incRef(const vector& files) { + int32_t size = files.size(); + for(int32_t i=0;icount)); + } + rc->IncRef(); + } +} + +void IndexFileDeleter::decRef(const vector& files) { + int32_t size = files.size(); + for(int32_t i=0;icount)); + } + if (0 == rc->DecRef()) { + // This file is no int32_t64_ter referenced by any past + // commit point32_ts nor by the in-memory SegmentInfos: + deleteFile(fileName.c_str()); + refCounts.remove((char*)fileName.c_str()); + } +} + +void IndexFileDeleter::decRef(SegmentInfos* segmentInfos) { + int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + decRef(segmentInfo->files()); + } + } +} + +IndexFileDeleter::RefCount* IndexFileDeleter::getRefCount(const char* fileName) { + RefCount* rc; + RefCountsType::iterator itr = refCounts.find((char*)fileName); + if (itr == refCounts.end()) { + rc = _CLNEW RefCount(); + refCounts.put( STRDUP_AtoA(fileName), rc); + } else { + rc = itr->second; + } + return rc; +} + +void IndexFileDeleter::deleteFiles(vector& files) { + int32_t size = files.size(); + for(int32_t i=0;i& files) { + int32_t size = files.size(); + for(int32_t i=0;ideleteFile(fileName); + } catch (CLuceneError& e) { // if delete fails + if ( e.number() != CL_ERR_IO ){ + throw e; + } + if (directory->fileExists(fileName)) { + + // Some operating systems (e.g. Windows) don't + // permit a file to be deleted while it is opened + // for read (e.g. by another process or thread). So + // we assume that when a delete fails it is because + // the file is open in another process, and queue + // the file for subsequent deletion. + + if (infoStream != NULL) { + message(string("IndexFileDeleter: unable to remove file \"") + fileName + "\": " + e.what() + "; Will re-try later."); + } + deletable.push_back(fileName); // add to deletable + } + } +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_IndexFileDeleter.h clucene-core-2.3.3.4/src/core/CLucene/index/_IndexFileDeleter.h --- clucene-core-0.9.21b/src/core/CLucene/index/_IndexFileDeleter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_IndexFileDeleter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,224 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_IndexFileDeleter_ +#define _lucene_index_IndexFileDeleter_ + +#include "CLucene/util/Equators.h" +#include "IndexDeletionPolicy.h" + +CL_CLASS_DEF(store,Directory) +CL_NS_DEF(index) +class SegmentInfos; +class DocumentsWriter; +class IndexDeletionPolicy; + +/* + * This class keeps track of each SegmentInfos instance that + * is still "live", either because it corresponds to a + * segments_N file in the Directory (a "commit", i.e. a + * committed SegmentInfos) or because it's the in-memory SegmentInfos + * that a writer is actively updating but has not yet committed + * (currently this only applies when autoCommit=false in IndexWriter). + * This class uses simple reference counting to map the live + * SegmentInfos instances to individual files in the Directory. + * + * The same directory file may be referenced by more than + * one IndexCommitPoints, i.e. more than one SegmentInfos. + * Therefore we count how many commits reference each file. + * When all the commits referencing a certain file have been + * deleted, the refcount for that file becomes zero, and the + * file is deleted. + * + * A separate deletion policy interface + * (IndexDeletionPolicy) is consulted on creation (onInit) + * and once per commit (onCommit), to decide when a commit + * should be removed. + * + * It is the business of the IndexDeletionPolicy to choose + * when to delete commit points. The actual mechanics of + * file deletion, retrying, etc, derived from the deletion + * of commit points is the business of the IndexFileDeleter. + * + * The current default deletion policy is {@link + * KeepOnlyLastCommitDeletionPolicy}, which removes all + * prior commits when a new commit has completed. This + * matches the behavior before 2.2. + * + * Note that you must hold the write.lock before + * instantiating this class. It opens segments_N file(s) + * directly with no retry logic. + */ +class IndexFileDeleter { +private: + /** + * Tracks the reference count for a single index file: + */ + class RefCount { + public: + int count; + int IncRef() { + return ++count; + } + int DecRef() { + return --count; + } + }; + + /** + * Holds details for each commit point. This class is + * also passed to the deletion policy. Note: this class + * has a natural ordering that is inconsistent with + * equals. + */ + class CommitPoint: public IndexCommitPoint, public CL_NS(util)::Comparable { + int64_t gen; + std::string segmentsFileName; + IndexFileDeleter* _this; + public: + std::vector files; + bool deleted; + + CommitPoint(IndexFileDeleter* _this, SegmentInfos* segmentInfos); + virtual ~CommitPoint(); + + /** + * Get the segments_N file for this commit point. + */ + std::string getSegmentsFileName(); + + const std::vector& getFileNames(); + + /** + * Called only be the deletion policy, to remove this + * commit point from the index. + */ + void deleteCommitPoint(); + + int32_t compareTo(NamedObject* obj); + + static const char* getClassName(); + const char* getObjectName() const; + static bool sort(IndexCommitPoint* elem1, IndexCommitPoint* elem2); + }; + +private: + /* Files that we tried to delete but failed (likely + * because they are open and we are running on Windows), + * so we will retry them again later: */ + std::vector deletable; + + typedef CL_NS(util)::CLHashMap > RefCountsType; + /* Reference count for all files in the index. + * Counts how many existing commits reference a file. + * Maps String to RefCount (class below) instances: */ + RefCountsType refCounts; + + typedef CL_NS(util)::CLVector > CommitsType; + /* Holds all commits (segments_N) currently in the index. + * This will have just 1 commit if you are using the + * default delete policy (KeepOnlyLastCommitDeletionPolicy). + * Other policies may leave commit points live for longer + * in which case this list would be longer than 1: */ + CommitsType commits; + + /* Holds files we had incref'd from the previous + * non-commit checkpoint: */ + std::vector lastFiles; + + /* Commits that the IndexDeletionPolicy have decided to delete: */ + CL_NS(util)::CLArrayList commitsToDelete; + + std::ostream* infoStream; + CL_NS(store)::Directory* directory; + IndexDeletionPolicy* policy; + DocumentsWriter* docWriter; + + +public: + void deletePendingFiles(); + + void setInfoStream(std::ostream* infoStream); + void message(std::string message); + void decRef(const std::string& fileName); + RefCount* getRefCount(const char* fileName); + + /** + * Remove the CommitPoints in the commitsToDelete List by + * DecRef'ing all files from each SegmentInfos. + */ + void deleteCommits(); + + /** Change to true to see details of reference counts when + * infoStream != null */ + static bool VERBOSE_REF_COUNTS; + + /** + * Initialize the deleter: find all previous commits in + * the Directory, incref the files they reference, call + * the policy to let it delete commits. The incoming + * segmentInfos must have been loaded from a commit point + * and not yet modified. This will remove any files not + * referenced by any of the commits. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexFileDeleter(CL_NS(store)::Directory* directory, IndexDeletionPolicy* policy, SegmentInfos* segmentInfos, std::ostream* infoStream, DocumentsWriter* docWriter); + ~IndexFileDeleter(); + + /** + * Writer calls this when it has hit an error and had to + * roll back, to tell us that there may now be + * unreferenced files in the filesystem. So we re-list + * the filesystem and delete such files. If segmentName + * is non-null, we will only delete files corresponding to + * that segment. + */ + void refresh(const char* segmentName); + void refresh(); + void close(); + + /** + * For definition of "check point" see IndexWriter comments: + * "Clarification: Check Points (and commits)". + * + * Writer calls this when it has made a "consistent + * change" to the index, meaning new files are written to + * the index and the in-memory SegmentInfos have been + * modified to point to those files. + * + * This may or may not be a commit (segments_N may or may + * not have been written). + * + * We simply incref the files referenced by the new + * SegmentInfos and decref the files we had previously + * seen (if any). + * + * If this is a commit, we also call the policy to give it + * a chance to remove other commits. If any commits are + * removed, we decref their files as well. + */ + void checkpoint(SegmentInfos* segmentInfos, bool isCommit); + + + void CLUCENE_LOCAL_DECL incRef(SegmentInfos* segmentInfos, bool isCommit); + void CLUCENE_LOCAL_DECL incRef(const std::vector& files); + void CLUCENE_LOCAL_DECL decRef(const std::vector& files) ; + void CLUCENE_LOCAL_DECL decRef(SegmentInfos* segmentInfos); + void CLUCENE_LOCAL_DECL deleteFiles(std::vector& files); + + /** Delets the specified files, but only if they are new + * (have not yet been incref'd). */ + void CLUCENE_LOCAL_DECL deleteNewFiles(const std::vector& files); + void CLUCENE_LOCAL_DECL deleteFile(const char* fileName); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexFileNameFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/index/IndexFileNameFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/IndexFileNameFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexFileNameFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,84 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_IndexFileNameFilter.h" +#include "_IndexFileNames.h" + +CL_NS_DEF(index) + +FilenameFilter::~FilenameFilter(){ +} + +IndexFileNameFilter* IndexFileNameFilter::_singleton = NULL; +IndexFileNameFilter* IndexFileNameFilter::singleton(){ + if ( _singleton == NULL ) + _singleton = _CLNEW IndexFileNameFilter(); + return _singleton; +} + +void IndexFileNameFilter::_shutdown(){ + _CLDELETE(_singleton); +} + +IndexFileNameFilter::IndexFileNameFilter() { + size_t i; + for ( i = 0; i < IndexFileNames::INDEX_EXTENSIONS().length; ++i) { + extensions.insert(IndexFileNames::INDEX_EXTENSIONS()[i]); + } + for ( i = 0; i < IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE().length; ++i) { + extensionsInCFS.insert(IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE()[i]); + } +} +IndexFileNameFilter::~IndexFileNameFilter(){ +} +bool IndexFileNameFilter::accept(const char* /*dir*/, const char* name) const { + string _name(name); + size_t i = _name.find_last_of('.'); + if (i != string::npos) { + const char* extension = name + 1 + i; + char* tmp; + if (extensions.find(extension) != extensions.end()) { + return true; + } + + size_t l = _name.length(); + if (*extension == 'f' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l) ) { //check for f001 + return true; + } else if (*extension == 's' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l)) { + return true; + } + } else { + if ( strcmp(name, IndexFileNames::DELETABLE) == 0 ) return true; + else if ( strncmp(name, IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS)) == 0 ) return true; + } + return false; +} + +bool IndexFileNameFilter::isCFSFile(const char* name) const { + string _name(name); + size_t i = _name.find_last_of('.'); + if (i != string::npos) { + const char* extension = name + 1 + i; + char* tmp; + if (extensionsInCFS.find(extension) != extensionsInCFS.end() ) { + return true; + } + size_t l = _name.length(); + if (*extension == 'f' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l)) { + return true; + } + } + return false; +} + +const IndexFileNameFilter* IndexFileNameFilter::getFilter() { + return singleton(); +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_IndexFileNameFilter.h clucene-core-2.3.3.4/src/core/CLucene/index/_IndexFileNameFilter.h --- clucene-core-0.9.21b/src/core/CLucene/index/_IndexFileNameFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_IndexFileNameFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_IndexFileNameFilter_ +#define _lucene_index_IndexFileNameFilter_ + +#include "CLucene/util/Equators.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(index) +class FilenameFilter{ +public: + virtual bool accept(const char* dir, const char* name) const = 0; + virtual ~FilenameFilter(); +}; + +/** + * Filename filter that accept filenames and extensions only created by Lucene. + * + * @author Daniel Naber / Bernhard Messer + * @version $rcs = ' $Id: Exp $ ' ; + */ +class IndexFileNameFilter: public FilenameFilter { + static IndexFileNameFilter* _singleton; + static IndexFileNameFilter* singleton(); + CL_NS(util)::CLHashSet extensions; + CL_NS(util)::CLHashSet extensionsInCFS; +public: + IndexFileNameFilter(); + virtual ~IndexFileNameFilter(); + + /* (non-Javadoc) + * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String) + */ + bool accept(const char* dir, const char* name) const; + + /** + * Returns true if this is a file that would be contained + * in a CFS file. This function should only be called on + * files that pass the above "accept" (ie, are already + * known to be a Lucene index file). + */ + bool isCFSFile(const char* name) const; + static const IndexFileNameFilter* getFilter(); + + static void _shutdown(); +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexFileNames.cpp clucene-core-2.3.3.4/src/core/CLucene/index/IndexFileNames.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/IndexFileNames.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexFileNames.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,179 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "_IndexFileNames.h" +#include "_SegmentInfos.h" +#include "CLucene/util/Misc.h" + + +CL_NS_DEF(index) + + const char* IndexFileNames::SEGMENTS = "segments"; + const char* IndexFileNames::SEGMENTS_GEN = "segments.gen"; + const char* IndexFileNames::DELETABLE = "deletable"; + const char* IndexFileNames::NORMS_EXTENSION = "nrm"; + const char* IndexFileNames::FREQ_EXTENSION = "frq"; + const char* IndexFileNames::PROX_EXTENSION = "prx"; + const char* IndexFileNames::TERMS_EXTENSION = "tis"; + const char* IndexFileNames::TERMS_INDEX_EXTENSION = "tii"; + const char* IndexFileNames::FIELDS_INDEX_EXTENSION = "fdx"; + const char* IndexFileNames::FIELDS_EXTENSION = "fdt"; + const char* IndexFileNames::VECTORS_FIELDS_EXTENSION = "tvf"; + const char* IndexFileNames::VECTORS_DOCUMENTS_EXTENSION = "tvd"; + const char* IndexFileNames::VECTORS_INDEX_EXTENSION = "tvx"; + const char* IndexFileNames::COMPOUND_FILE_EXTENSION = "cfs"; + const char* IndexFileNames::COMPOUND_FILE_STORE_EXTENSION = "cfx"; + const char* IndexFileNames::DELETES_EXTENSION = "del"; + const char* IndexFileNames::FIELD_INFOS_EXTENSION = "fnm"; + const char* IndexFileNames::PLAIN_NORMS_EXTENSION = "f"; + const char* IndexFileNames::SEPARATE_NORMS_EXTENSION = "s"; + const char* IndexFileNames::GEN_EXTENSION = "gen"; + + const char* IndexFileNames_INDEX_EXTENSIONS_s[] = + { + IndexFileNames::COMPOUND_FILE_EXTENSION, + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::DELETES_EXTENSION, + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::GEN_EXTENSION, + IndexFileNames::NORMS_EXTENSION, + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION + }; + + CL_NS(util)::ConstValueArray IndexFileNames::_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::INDEX_EXTENSIONS(){ + if ( _INDEX_EXTENSIONS.length == 0 ){ + _INDEX_EXTENSIONS.values = IndexFileNames_INDEX_EXTENSIONS_s; + _INDEX_EXTENSIONS.length = 15; + } + return _INDEX_EXTENSIONS; + } + + const char* IndexFileNames_INDEX_EXTENSIONS_IN_COMPOUND_FILE_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::NORMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_INDEX_EXTENSIONS_IN_COMPOUND_FILE; + CL_NS(util)::ConstValueArray& IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE(){ + if ( _INDEX_EXTENSIONS_IN_COMPOUND_FILE.length == 0 ){ + _INDEX_EXTENSIONS_IN_COMPOUND_FILE.values = IndexFileNames_INDEX_EXTENSIONS_IN_COMPOUND_FILE_s; + _INDEX_EXTENSIONS_IN_COMPOUND_FILE.length = 11; + } + return _INDEX_EXTENSIONS_IN_COMPOUND_FILE; + } + + const char* IndexFileNames_STORE_INDEX_EXTENSIONS_s[] = { + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_STORE_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::STORE_INDEX_EXTENSIONS(){ + if ( _STORE_INDEX_EXTENSIONS.length == 0 ){ + _STORE_INDEX_EXTENSIONS.values = IndexFileNames_STORE_INDEX_EXTENSIONS_s; + _STORE_INDEX_EXTENSIONS.length = 5; + } + return _STORE_INDEX_EXTENSIONS; + } + + const char* IndexFileNames_NON_STORE_INDEX_EXTENSIONS_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::NORMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_NON_STORE_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::NON_STORE_INDEX_EXTENSIONS(){ + if ( _NON_STORE_INDEX_EXTENSIONS.length == 0 ){ + _NON_STORE_INDEX_EXTENSIONS.values = IndexFileNames_NON_STORE_INDEX_EXTENSIONS_s; + _NON_STORE_INDEX_EXTENSIONS.length = 6; + } + return _NON_STORE_INDEX_EXTENSIONS; + } + + const char* IndexFileNames_COMPOUND_EXTENSIONS_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_COMPOUND_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::COMPOUND_EXTENSIONS(){ + if ( _COMPOUND_EXTENSIONS.length == 0 ){ + _COMPOUND_EXTENSIONS.values = IndexFileNames_COMPOUND_EXTENSIONS_s; + _COMPOUND_EXTENSIONS.length = 7; + } + return _COMPOUND_EXTENSIONS; + } + + const char* IndexFileNames_VECTOR_EXTENSIONS_s[] = { + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_VECTOR_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::VECTOR_EXTENSIONS(){ + if ( _VECTOR_EXTENSIONS.length == 0 ){ + _VECTOR_EXTENSIONS.values = IndexFileNames_VECTOR_EXTENSIONS_s; + _VECTOR_EXTENSIONS.length = 3; + } + return _VECTOR_EXTENSIONS; + } + + string IndexFileNames::fileNameFromGeneration( const char* base, const char* extension, int64_t gen ) { + if ( gen == SegmentInfo::NO ) { + return ""; + } else if ( gen == SegmentInfo::WITHOUT_GEN ) { + return string(base) + extension; + } else { + char buf[(sizeof(unsigned long) << 3) + 1]; + CL_NS(util)::Misc::longToBase( gen, 36, buf ); + return string(base) + "_" + buf + extension; + } + } + + bool IndexFileNames::isDocStoreFile( const char* fileName ) { + + const char* p = strchr( fileName, (int)'.' ); + + if ( p != NULL && strcmp( p+1, COMPOUND_FILE_STORE_EXTENSION ) == 0 ) { + return true; + } + for ( int32_t i = 0; i < STORE_INDEX_EXTENSIONS().length; i++ ) { + if ( p != NULL && strcmp( p+1, STORE_INDEX_EXTENSIONS()[i] ) == 0 ) { + return true; + } + } + return false; + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_IndexFileNames.h clucene-core-2.3.3.4/src/core/CLucene/index/_IndexFileNames.h --- clucene-core-0.9.21b/src/core/CLucene/index/_IndexFileNames.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_IndexFileNames.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,55 @@ + +#ifndef _lucene_index_IndexFileNames_ +#define _lucene_index_IndexFileNames_ + +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class CLUCENE_EXPORT IndexFileNames { + static CL_NS(util)::ConstValueArray _INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _INDEX_EXTENSIONS_IN_COMPOUND_FILE; + static CL_NS(util)::ConstValueArray _STORE_INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _NON_STORE_INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _COMPOUND_EXTENSIONS; + static CL_NS(util)::ConstValueArray _VECTOR_EXTENSIONS; +public: + static const char* SEGMENTS; + static const char* SEGMENTS_GEN; + static const char* DELETABLE; + static const char* NORMS_EXTENSION; + static const char* FREQ_EXTENSION; + static const char* PROX_EXTENSION; + static const char* TERMS_EXTENSION; + static const char* TERMS_INDEX_EXTENSION; + static const char* FIELDS_INDEX_EXTENSION; + static const char* FIELDS_EXTENSION; + static const char* VECTORS_FIELDS_EXTENSION; + static const char* VECTORS_DOCUMENTS_EXTENSION; + static const char* VECTORS_INDEX_EXTENSION; + static const char* COMPOUND_FILE_EXTENSION; + static const char* COMPOUND_FILE_STORE_EXTENSION; + static const char* DELETES_EXTENSION; + static const char* FIELD_INFOS_EXTENSION; + static const char* PLAIN_NORMS_EXTENSION; + static const char* SEPARATE_NORMS_EXTENSION; + static const char* GEN_EXTENSION; + + LUCENE_STATIC_CONSTANT(int32_t,COMPOUND_EXTENSIONS_LENGTH=7); + LUCENE_STATIC_CONSTANT(int32_t,VECTOR_EXTENSIONS_LENGTH=3); + LUCENE_STATIC_CONSTANT(int32_t,STORE_INDEX_EXTENSIONS_LENGTH=5); + + static CL_NS(util)::ConstValueArray& INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& INDEX_EXTENSIONS_IN_COMPOUND_FILE(); + static CL_NS(util)::ConstValueArray& STORE_INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& NON_STORE_INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& COMPOUND_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& VECTOR_EXTENSIONS(); + + static std::string fileNameFromGeneration( const char* base, const char* extension, int64_t gen ); + static bool isDocStoreFile( const char* fileName ); + +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexModifier.cpp clucene-core-2.3.3.4/src/core/CLucene/index/IndexModifier.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/IndexModifier.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexModifier.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,277 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "IndexModifier.h" + +#include "IndexWriter.h" +#include "IndexReader.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/document/Document.h" +#include "MergeScheduler.h" + +CL_NS_DEF(index) +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(analysis) +CL_NS_USE(document) + +IndexModifier::IndexModifier(Directory* directory, Analyzer* analyzer, bool create) { + init(directory, analyzer, create); +} + +IndexModifier::IndexModifier(const char* dirName, Analyzer* analyzer, bool create) { + Directory* dir = FSDirectory::getDirectory(dirName); + init(dir, analyzer, create); +} + +void IndexModifier::init(Directory* directory, Analyzer* analyzer, bool create) { + indexWriter = NULL; + indexReader = NULL; + open = false; + infoStream = NULL; + + useCompoundFile = true; + this->maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS; + this->maxFieldLength = IndexWriter::DEFAULT_MAX_FIELD_LENGTH; + this->mergeFactor = IndexWriter::DEFAULT_MERGE_FACTOR; + + this->directory = _CL_POINTER(directory); + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + this->analyzer = analyzer; + indexWriter = _CLNEW IndexWriter(directory, analyzer, create); + open = true; +} + +IndexModifier::~IndexModifier(){ + if (open) { + close(); + } +} + +void IndexModifier::assureOpen() const{ + if (!open) { + _CLTHROWA(CL_ERR_IllegalState,"Index is closed"); + } +} + +void IndexModifier::createIndexWriter(bool create) { + if (indexWriter == NULL) { + if (indexReader != NULL) { + indexReader->close(); + _CLDELETE(indexReader); + } + + indexWriter = _CLNEW IndexWriter(directory, analyzer, false); + // IndexModifier cannot use ConcurrentMergeScheduler + // because it synchronizes on the directory which can + // cause deadlock + indexWriter->setMergeScheduler(_CLNEW SerialMergeScheduler()); + indexWriter->setInfoStream(infoStream); + indexWriter->setUseCompoundFile(useCompoundFile); + if (maxBufferedDocs != IndexWriter::DISABLE_AUTO_FLUSH) + indexWriter->setMaxBufferedDocs(maxBufferedDocs); + indexWriter->setMaxFieldLength(maxFieldLength); + indexWriter->setMergeFactor(mergeFactor); + } +} + +void IndexModifier::createIndexReader() { + if (indexReader == NULL) { + if (indexWriter != NULL) { + indexWriter->close(); + _CLDELETE(indexWriter); + } + indexReader = IndexReader::open(directory); + } +} + +void IndexModifier::flush() { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + if (indexWriter != NULL) { + indexWriter->close(); + _CLDELETE(indexWriter); + createIndexWriter(); + } else { + indexReader->close(); + _CLDELETE(indexReader); + createIndexReader(); + } +} + +void IndexModifier::addDocument(Document* doc, Analyzer* docAnalyzer) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexWriter(); + if (docAnalyzer != NULL) + indexWriter->addDocument(doc, docAnalyzer); + else + indexWriter->addDocument(doc); +} + +int32_t IndexModifier::deleteDocuments(Term* term) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexReader(); + return indexReader->deleteDocuments(term); +} + +void IndexModifier::deleteDocument(int32_t docNum) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexReader(); + indexReader->deleteDocument(docNum); +} + +int32_t IndexModifier::docCount() { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + if (indexWriter != NULL) + return indexWriter->docCount(); + else + return indexReader->numDocs(); +} + +void IndexModifier::optimize() { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexWriter(); + indexWriter->optimize(); +} + +void IndexModifier::setUseCompoundFile(bool useCompoundFile) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + if (indexWriter != NULL) + indexWriter->setUseCompoundFile(useCompoundFile); + this->useCompoundFile = useCompoundFile; +} + +bool IndexModifier::getUseCompoundFile() { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexWriter(); + return indexWriter->getUseCompoundFile(); +} + +void IndexModifier::setMaxFieldLength(int32_t maxFieldLength) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + if (indexWriter != NULL) + indexWriter->setMaxFieldLength(maxFieldLength); + this->maxFieldLength = maxFieldLength; +} + +int32_t IndexModifier::getMaxFieldLength() { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexWriter(); + return indexWriter->getMaxFieldLength(); +} + +void IndexModifier::setMaxBufferedDocs(int32_t maxBufferedDocs) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + if (indexWriter != NULL) + indexWriter->setMaxBufferedDocs(maxBufferedDocs); + this->maxBufferedDocs = maxBufferedDocs; +} + +int32_t IndexModifier::getMaxBufferedDocs() { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexWriter(); + return indexWriter->getMaxBufferedDocs(); +} +void IndexModifier::setMergeFactor(int32_t mergeFactor) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + if (indexWriter != NULL) + indexWriter->setMergeFactor(mergeFactor); + this->mergeFactor = mergeFactor; +} + +int32_t IndexModifier::getMergeFactor() { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexWriter(); + return indexWriter->getMergeFactor(); +} + +void IndexModifier::close() { + if (!open) + _CLTHROWA(CL_ERR_IllegalState, "Index is closed already"); + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + if (indexWriter != NULL) { + indexWriter->close(); + _CLDELETE(indexWriter); + } else if (indexReader != NULL) { + indexReader->close(); + _CLDELETE(indexReader); + } + _CLDECDELETE(directory) + open = false; +} + +string IndexModifier::toString() const{ + return string("Index@") + directory->toString(); +} + + + +int64_t IndexModifier::getCurrentVersion() const{ + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + return IndexReader::getCurrentVersion(directory); +} + +TermDocs* IndexModifier::termDocs(Term* term){ + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexReader(); + return indexReader->termDocs(term); +} + +TermEnum* IndexModifier::terms(Term* term){ + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexReader(); + if ( term != NULL ) + return indexReader->terms(term); + else + return indexReader->terms(); +} + + + CL_NS(document)::Document* IndexModifier::document(const int32_t n){ + Document* ret = _CLNEW Document; + if (!document(n, *ret) ) + _CLDELETE(ret); + return ret; + } +bool IndexModifier::document(int32_t n, CL_NS(document)::Document* doc){ + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexReader(); + return indexReader->document(n, *doc); +} +bool IndexModifier::document(int32_t n, CL_NS(document)::Document& doc){ + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + assureOpen(); + createIndexReader(); + return indexReader->document(n, doc); +} +CL_NS(store)::Directory* IndexModifier::getDirectory(){ + return directory; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexModifier.h clucene-core-2.3.3.4/src/core/CLucene/index/IndexModifier.h --- clucene-core-0.9.21b/src/core/CLucene/index/IndexModifier.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexModifier.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,332 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_IndexModifier_ +#define _lucene_index_IndexModifier_ + + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index, IndexWriter) +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, Term) +CL_CLASS_DEF(index, TermDocs) +CL_CLASS_DEF(index, TermEnum) + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(index) + +/** +*

[Note that as of 2.1, all but one of the +* methods in this class are available via {@link +* IndexWriter}. The one method that is not available is +* {@link #deleteDocument(int)}.]

+* +* A class to modify an index, i.e. to delete and add documents. This +* class hides {@link IndexReader} and {@link IndexWriter} so that you +* do not need to care about implementation details such as that adding +* documents is done via IndexWriter and deletion is done via IndexReader. +* +*

Note that you cannot create more than one IndexModifier object +* on the same directory at the same time. +* +*

Example usage: +* +*

+* +* +* +* +*
+* +* //note this code will leak memory :) +* Analyzer* analyzer = new StandardAnalyzer();
+* // create an index in /tmp/index, overwriting an existing one:
+* IndexModifier* indexModifier = new IndexModifier("/tmp/index", analyzer, true);
+* Document* doc = new Document*();
+* doc->add(*new Field("id", "1", Field::STORE_YES| Field::INDEX_UNTOKENIZED));
+* doc->add(*new Field("body", "a simple test", Field::STORE_YES, Field::INDEX_TOKENIZED));
+* indexModifier->addDocument(doc);
+* int32_t deleted = indexModifier->deleteDocuments(new Term("id", "1"));
+* printf("Deleted %d document", deleted);
+* indexModifier->flush();
+* printf( "$d docs in index", indexModifier->docCount() );
+* indexModifier->close(); +*
+*
+* +*

Not all methods of IndexReader and IndexWriter are offered by this +* class. If you need access to additional methods, either use those classes +* directly or implement your own class that extends IndexModifier. +* +*

Although an instance of this class can be used from more than one +* thread, you will not get the best performance. You might want to use +* IndexReader and IndexWriter directly for that (but you will need to +* care about synchronization yourself then). +* +*

While you can freely mix calls to add() and delete() using this class, +* you should batch you calls for best performance. For example, if you +* want to update 20 documents, you should first delete all those documents, +* then add all the new documents. +* +* @deprecated Please use {@link IndexWriter} instead. +*/ +class CLUCENE_EXPORT IndexModifier { +protected: + IndexWriter* indexWriter; + IndexReader* indexReader; + + CL_NS(store)::Directory* directory; + CL_NS(analysis)::Analyzer* analyzer; + bool open; + + // Lucene defaults: + std::ostream* infoStream; + bool useCompoundFile; + int32_t maxBufferedDocs; + int32_t maxFieldLength; + int32_t mergeFactor; + +public: + + /** + * Open an index with write access. + * + * @param directory the index directory + * @param analyzer the analyzer to use for adding new documents + * @param create true to create the index or overwrite the existing one; + * false to append to the existing index + */ + IndexModifier(CL_NS(store)::Directory* directory, CL_NS(analysis)::Analyzer* analyzer, bool create); + + /** + * Open an index with write access. + * + * @param dirName the index directory + * @param analyzer the analyzer to use for adding new documents + * @param create true to create the index or overwrite the existing one; + * false to append to the existing index + */ + IndexModifier(const char* dirName, CL_NS(analysis)::Analyzer* analyzer, bool create); + + virtual ~IndexModifier(); + +protected: + + /** + * Initialize an IndexWriter. + * @throws IOException + */ + void init(CL_NS(store)::Directory* directory, CL_NS(analysis)::Analyzer* analyzer, bool create); + + /** + * Throw an IllegalStateException if the index is closed. + * @throws IllegalStateException + */ + void assureOpen() const; + + /** + * Close the IndexReader and open an IndexWriter. + * @throws IOException + */ + void createIndexWriter(bool create = false); + + /** + * Close the IndexWriter and open an IndexReader. + * @throws IOException + */ + void createIndexReader(); + +public: + /** + * Make sure all changes are written to disk. + * @throws IOException + */ + void flush(); + + /** + * Adds a document to this index, using the provided analyzer instead of the + * one specific in the constructor. If the document contains more than + * {@link #setMaxFieldLength(int32_t)} terms for a given field, the remainder are + * discarded. + * @see IndexWriter#addDocument(Document*, Analyzer*) + * @throws IllegalStateException if the index is closed + */ + void addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* docAnalyzer=NULL); + + + /** + * Deletes all documents containing term. + * This is useful if one uses a document field to hold a unique ID string for + * the document. Then to delete such a document, one merely constructs a + * term with the appropriate field and the unique ID string as its text and + * passes it to this method. Returns the number of documents deleted. + * @return the number of documents deleted + * @see IndexReader#deleteDocuments(Term*) + * @throws IllegalStateException if the index is closed + */ + int32_t deleteDocuments(Term* term); + + /** + * Deletes the document numbered docNum. + * @see IndexReader#deleteDocument(int32_t) + * @throws IllegalStateException if the index is closed + */ + void deleteDocument(int32_t docNum); + + /** + * Returns the number of documents currently in this index. + * @see IndexWriter#docCount() + * @see IndexReader#numDocs() + * @throws IllegalStateException if the index is closed + */ + int32_t docCount(); + + /** + * Merges all segments together into a single segment, optimizing an index + * for search. + * @see IndexWriter#optimize() + * @throws IllegalStateException if the index is closed + */ + void optimize(); + + /** + * Setting to turn on usage of a compound file. When on, multiple files + * for each segment are merged into a single file once the segment creation + * is finished. This is done regardless of what directory is in use. + * @see IndexWriter#setUseCompoundFile(bool) + * @throws IllegalStateException if the index is closed + */ + void setUseCompoundFile(bool useCompoundFile); + + /** + * @throws IOException + * @see IndexModifier#setUseCompoundFile(bool) + */ + bool getUseCompoundFile(); + + /** + * The maximum number of terms that will be indexed for a single field in a + * document. This limits the amount of memory required for indexing, so that + * collections with very large files will not crash the indexing process by + * running out of memory.

+ * Note that this effectively truncates large documents, excluding from the + * index terms that occur further in the document. If you know your source + * documents are large, be sure to set this value high enough to accomodate + * the expected size. If you set it to Integer.MAX_VALUE, then the only limit + * is your memory, but you should anticipate an OutOfMemoryError.

+ * By default, no more than 10,000 terms will be indexed for a field. + * @see IndexWriter#setMaxFieldLength(int32_t) + * @throws IllegalStateException if the index is closed + */ + void setMaxFieldLength(int32_t maxFieldLength); + + /** + * @throws IOException + * @see IndexModifier#setMaxFieldLength(int32_t) + */ + int32_t getMaxFieldLength(); + + /** + * The maximum number of terms that will be indexed for a single field in a + * document. This limits the amount of memory required for indexing, so that + * collections with very large files will not crash the indexing process by + * running out of memory.

+ * Note that this effectively truncates large documents, excluding from the + * index terms that occur further in the document. If you know your source + * documents are large, be sure to set this value high enough to accomodate + * the expected size. If you set it to Integer.MAX_VALUE, then the only limit + * is your memory, but you should anticipate an OutOfMemoryError.

+ * By default, no more than 10,000 terms will be indexed for a field. + * @see IndexWriter#setMaxBufferedDocs(int32_t) + * @throws IllegalStateException if the index is closed + */ + void setMaxBufferedDocs(int32_t maxBufferedDocs); + + /** + * @throws IOException + * @see IndexModifier#setMaxBufferedDocs(int32_t) + */ + int32_t getMaxBufferedDocs(); + + /** + * Determines how often segment indices are merged by addDocument(). With + * smaller values, less RAM is used while indexing, and searches on + * unoptimized indices are faster, but indexing speed is slower. With larger + * values, more RAM is used during indexing, and while searches on unoptimized + * indices are slower, indexing is faster. Thus larger values (> 10) are best + * for batch index creation, and smaller values (< 10) for indices that are + * interactively maintained. + *

This must never be less than 2. The default value is 10. + * + * @see IndexWriter#setMergeFactor(int32_t) + * @throws IllegalStateException if the index is closed + */ + void setMergeFactor(int32_t mergeFactor); + + /** + * @throws IOException + * @see IndexModifier#setMergeFactor(int32_t) + */ + int32_t getMergeFactor(); + + /** + * Close this index, writing all pending changes to disk. + * + * @throws IllegalStateException if the index has been closed before already + */ + void close(); + + std::string toString() const; + + /** + * Gets the version number of the currently open index. + */ + int64_t getCurrentVersion() const; + + /** + * Returns an enumeration of all the documents which contain term. + * + * Warning: This is not threadsafe. Make sure you lock the modifier object + * while using the TermDocs. If the IndexReader that the modifier manages + * is closed, the TermDocs object will fail. + */ + TermDocs* termDocs(Term* term=NULL); + + /** + * Returns an enumeration of all terms after a given term. + * If no term is given, an enumeration of all the terms + * in the index is returned. + * The enumeration is ordered by Term.compareTo(). Each term + * is greater than all that precede it in the enumeration. + * + * Warning: This is not threadsafe. Make sure you lock the modifier object + * while using the TermDocs. If the IndexReader that the modifier manages + * is closed, the Document will be invalid + */ + TermEnum* terms(Term* term=NULL); + + /** + * Returns the stored fields of the n-th Document in this index. + * + * Warning: This is not threadsafe. Make sure you lock the modifier object + * while using the TermDocs. If the IndexReader that the modifier manages + * is closed, the Document will be invalid + */ + bool document(const int32_t n, CL_NS(document)::Document& doc); + _CL_DEPRECATED( document(i, Document&) )bool document(const int32_t n, CL_NS(document)::Document* doc); + _CL_DEPRECATED( document(i, document) ) CL_NS(document)::Document* document(const int32_t n); + + /** + * Returns the directory used by this index. + */ + CL_NS(store)::Directory* getDirectory(); +}; +CL_NS_END +#endif + + diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/IndexReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/IndexReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,532 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "IndexReader.h" +#include "IndexWriter.h" + +#include "CLucene/store/Directory.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/store/_Lock.h" +#include "CLucene/document/Document.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/Misc.h" +#include "_SegmentInfos.h" +#include "_SegmentHeader.h" +#include "MultiReader.h" +#include "Terms.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + + + class IndexReaderFindSegmentsFile: public SegmentInfos::FindSegmentsFile{ + public: + IndexReaderFindSegmentsFile( CL_NS(store)::Directory* dir ): + SegmentInfos::FindSegmentsFile(dir){ + } + IndexReaderFindSegmentsFile( const char* dir ): + SegmentInfos::FindSegmentsFile(dir){ + } + uint64_t doBody(const char* segmentFileName){ + return directory->fileModified(segmentFileName); + } + }; + + class CloseCallbackCompare:public CL_NS(util)::Compare::_base{ + public: + bool operator()( IndexReader::CloseCallback t1, IndexReader::CloseCallback t2 ) const{ + return t1 > t2; + } + static void doDelete(IndexReader::CloseCallback /*dummy*/){ + } + }; + + + class IndexReader::Internal: LUCENE_BASE{ + public: + /** + * @deprecated will be deleted when IndexReader(Directory) is deleted + * @see #directory() + */ + CL_NS(store)::Directory* directory; + + typedef CL_NS(util)::CLSet CloseCallbackMap; + CloseCallbackMap closeCallbacks; + + Internal(Directory* directory, IndexReader* _this) + { + if ( directory != NULL ) + this->directory = _CL_POINTER(directory); + else + this->directory = NULL; + _this->closed = false; + _this->hasChanges = false; + } + ~Internal(){ + } + }; + + IndexReader::IndexReader(Directory* dir){ + //Constructor. + //Func - Creates an instance of IndexReader + //Pre - true + //Post - An instance has been created with writeLock = NULL + _internal = _CLNEW Internal(dir, this); + } + + IndexReader::IndexReader(){ + //Constructor. + //Func - Creates an instance of IndexReader + //Pre - true + //Post - An instance has been created with writeLock = NULL + _internal = _CLNEW Internal(NULL, this); + } + + IndexReader::~IndexReader(){ + //Func - Destructor + // Destroys the instance and releases the writeLock if needed + //Pre - true + //Post - The instance has been destroyed if pre(writeLock) exists is has been released + _CLLDELETE(_internal); + } + + IndexReader* IndexReader::open(const char* path, bool closeDirectoryOnCleanup, IndexDeletionPolicy* deletionPolicy){ + //Func - Static method. + // Returns an IndexReader reading the index in an FSDirectory in the named path. + //Pre - path != NULL and contains the path of the index for which an IndexReader must be + // instantiated + // closeDir indicates if the directory needs to be closed + //Post - An IndexReader has been returned that reads tnhe index located at path + + CND_PRECONDITION(path != NULL, "path is NULL"); + Directory* dir = FSDirectory::getDirectory(path); + IndexReader* reader = open(dir,closeDirectoryOnCleanup,deletionPolicy); + //because fsdirectory will now have a refcount of 1 more than + //if the reader had been opened with a directory object, + //we need to do a refdec + _CLDECDELETE(dir); + return reader; + } + + IndexReader* IndexReader::open( Directory* directory, bool closeDirectory, IndexDeletionPolicy* deletionPolicy){ + //Func - Static method. + // Returns an IndexReader reading the index in an FSDirectory in the named path. + //Pre - directory represents a directory + // closeDir indicates if the directory needs to be closed + //Post - An IndexReader has been returned that reads the index located at directory + + return DirectoryIndexReader::open(directory, closeDirectory, deletionPolicy); + } + + IndexReader* IndexReader::reopen(){ + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support reopen()."); + } + CL_NS(store)::Directory* IndexReader::directory() { + ensureOpen(); + if (NULL != _internal->directory) { + return _internal->directory; + } else { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + } + + void IndexReader::ensureOpen(){ + } + + void IndexReader::acquireWriteLock(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + /* NOOP */ + } + + CL_NS(document)::Document* IndexReader::document(const int32_t n){ + CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; + if (!document(n,*ret) ) + _CLDELETE(ret); + return ret; + } + + uint64_t IndexReader::lastModified(const char* directory2) { + //Func - Static method + // Returns the time the index in the named directory was last modified. + //Pre - directory != NULL and contains the path name of the directory to check + //Post - The last modified time of the index has been returned + + CND_PRECONDITION(directory2 != NULL, "directory is NULL"); + + IndexReaderFindSegmentsFile runner(directory2); + return (uint64_t)runner.run(); + } + + int64_t IndexReader::getCurrentVersion(Directory* directory) { + return SegmentInfos::readCurrentVersion(directory); + } + + + int64_t IndexReader::getCurrentVersion(const char* directory){ + Directory* dir = FSDirectory::getDirectory(directory); + int64_t version = getCurrentVersion(dir); + dir->close(); + _CLDECDELETE(dir); + return version; + } + int64_t IndexReader::getVersion() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + void IndexReader::setTermInfosIndexDivisor(int32_t /*indexDivisor*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + int32_t IndexReader::getTermInfosIndexDivisor() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + bool IndexReader::isCurrent() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + bool IndexReader::isOptimized() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + uint64_t IndexReader::lastModified(Directory* directory2) { + //Func - Static method + // Returns the time the index in this directory was last modified. + //Pre - directory contains a valid reference + //Post - The last modified time of the index has been returned + IndexReaderFindSegmentsFile runner(directory2); + return (uint64_t)runner.run(); + } + + void IndexReader::setNorm(int32_t doc, const TCHAR* field, uint8_t value){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + this->ensureOpen(); + this->acquireWriteLock(); + this->hasChanges = true; + this->doSetNorm(doc, field, value); + } + + + void IndexReader::setNorm(int32_t doc, const TCHAR* field, float_t value){ + ensureOpen(); + setNorm(doc, field, CL_NS(search)::Similarity::encodeNorm(value)); + } + + bool IndexReader::indexExists(const char* directory){ + //Func - Static method + // Checks if an index exists in the named directory + //Pre - directory != NULL + //Post - Returns true if an index exists at the specified directory-> + // If the directory does not exist or if there is no index in it. + // false is returned. + std::vector files; + Misc::listFiles(directory, files); + return SegmentInfos::getCurrentSegmentGeneration(files) != -1; + } + + bool IndexReader::indexExists(const Directory* directory){ + //Func - Static method + // Checks if an index exists in the directory + //Pre - directory is a valid reference + //Post - Returns true if an index exists at the specified directory-> + // If the directory does not exist or if there is no index in it. + // false is returned. + + return SegmentInfos::getCurrentSegmentGeneration(directory) != -1; + } + + TermDocs* IndexReader::termDocs(Term* term) { + //Func - Returns an enumeration of all the documents which contain + // term. For each document, the document number, the frequency of + // the term in that document is also provided, for use in search scoring. + // Thus, this method implements the mapping: + // + // Term => * + // The enumeration is ordered by document number. Each document number + // is greater than all that precede it in the enumeration. + //Pre - term != NULL + //Post - A reference to TermDocs containing an enumeration of all found documents + // has been returned + + CND_PRECONDITION(term != NULL, "term is NULL"); + + ensureOpen(); + //Reference an instantiated TermDocs instance + TermDocs* _termDocs = termDocs(); + //Seek all documents containing term + _termDocs->seek(term); + //return the enumaration + return _termDocs; + } + + TermPositions* IndexReader::termPositions(Term* term){ + //Func - Returns an enumeration of all the documents which contain term. For each + // document, in addition to the document number and frequency of the term in + // that document, a list of all of the ordinal positions of the term in the document + // is available. Thus, this method implements the mapping: + // + // Term => >* + // + // This positional information faciliates phrase and proximity searching. + // The enumeration is ordered by document number. Each document number is greater than + // all that precede it in the enumeration. + //Pre - term != NULL + //Post - A reference to TermPositions containing an enumeration of all found documents + // has been returned + + CND_PRECONDITION(term != NULL, "term is NULL"); + + ensureOpen(); + //Reference an instantiated termPositions instance + TermPositions* _termPositions = termPositions(); + //Seek all documents containing term + _termPositions->seek(term); + //return the enumeration + return _termPositions; + } + + bool IndexReader::document(int32_t n, CL_NS(document)::Document* doc){ + return document(n, *doc); + } + bool IndexReader::document(int32_t n, CL_NS(document)::Document& doc){ + ensureOpen(); + return document(n, doc, NULL); + } + + void IndexReader::deleteDoc(const int32_t docNum){ + deleteDocument(docNum); + } + int32_t IndexReader::deleteTerm(Term* term){ + return deleteDocuments(term); + } + + void IndexReader::deleteDocument(const int32_t docNum) { + //Func - Deletes the document numbered docNum. Once a document is deleted it will not appear + // in TermDocs or TermPostitions enumerations. Attempts to read its field with the document + // method will result in an error. The presence of this document may still be reflected in + // the docFreq statistic, though this will be corrected eventually as the index is further modified. + //Pre - docNum >= 0 + //Post - If successful the document identified by docNum has been deleted. If no writelock + // could be obtained an exception has been thrown stating that the index was locked or has no write access + + SCOPED_LOCK_MUTEX(THIS_LOCK) + + CND_PRECONDITION(docNum >= 0, "docNum is negative"); + + ensureOpen(); + acquireWriteLock(); + + //Have the document identified by docNum deleted + hasChanges = true; + doDelete(docNum); + } + + void IndexReader::flush() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + commit(); + } + + void IndexReader::commit(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if(hasChanges){ + doCommit(); + } + hasChanges = false; + } + + + void IndexReader::undeleteAll(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + acquireWriteLock(); + hasChanges = true; + doUndeleteAll(); + } + + int32_t IndexReader::deleteDocuments(Term* term) { + //Func - Deletes all documents containing term. This is useful if one uses a + // document field to hold a unique ID string for the document. Then to delete such + // a document, one merely constructs a term with the appropriate field and the unique + // ID string as its text and passes it to this method. + //Pre - term != NULL + //Post - All documents containing term have been deleted. The number of deleted documents + // has been returned + + CND_PRECONDITION(term != NULL, "term is NULL"); + ensureOpen(); + + //Search for the documents contain term + TermDocs* docs = termDocs(term); + + //Check if documents have been found + if ( docs == NULL ){ + return 0; + } + + //initialize + int32_t Counter = 0; + try { + //iterate through the found documents + while (docs->next()) { + //Delete the document + deleteDocument(docs->doc()); + ++Counter; + } + }_CLFINALLY( + //Close the enumeration + docs->close(); + ); + + //Delete the enumeration of found documents + _CLDELETE( docs ); + + //Return the number of deleted documents + return Counter; + } + + + void IndexReader::close() { + //Func - Closes files associated with this index and also saves any new deletions to disk. + // No other methods should be called after this has been called. + //Pre - true + //Post - All files associated with this index have been deleted and new deletions have been + // saved to disk + SCOPED_LOCK_MUTEX(THIS_LOCK) + if ( !closed ){ + Internal::CloseCallbackMap::iterator iter = _internal->closeCallbacks.begin(); + for ( ;iter!=_internal->closeCallbacks.end();iter++){ + CloseCallback callback = *iter->first; + callback(this,iter->second); + } + commit(); + doClose(); + } + closed = true; + } + + bool IndexReader::isLocked(Directory* directory) { + //Func - Static method + // Checks if the index in the directory is currently locked. + //Pre - directory is a valid reference to a directory to check for a lock + //Post - Returns true if the index in the named directory is locked otherwise false + + //Check the existence of the file write.lock and return true when it does and false + //when it doesn't + LuceneLock* l = directory->makeLock("write.lock"); + bool ret = l->isLocked(); + _CLDELETE(l); + return ret; + } + + bool IndexReader::isLocked(const char* directory) { + //Func - Static method + // Checks if the index in the named directory is currently locked. + //Pre - directory != NULL and contains the directory to check for a lock + //Post - Returns true if the index in the named directory is locked otherwise false + + CND_PRECONDITION(directory != NULL, "directory is NULL"); + + Directory* dir = FSDirectory::getDirectory(directory); + bool ret = isLocked(dir); + dir->close(); + _CLDECDELETE(dir); + + return ret; + } + +bool IndexReader::hasNorms(const TCHAR* field) { + // backward compatible implementation. + // SegmentReader has an efficient implementation. + ensureOpen(); + return norms(field) != NULL; +} + +void IndexReader::unlock(const char* path){ + FSDirectory* dir = FSDirectory::getDirectory(path); + unlock(dir); + dir->close(); + _CLDECDELETE(dir); +} + void IndexReader::unlock(Directory* directory){ + //Func - Static method + // Forcibly unlocks the index in the named directory-> + // Caution: this should only be used by failure recovery code, + // when it is known that no other process nor thread is in fact + // currently accessing this index. + //Pre - directory is a valid reference to a directory + //Post - The directory has been forcibly unlocked + LuceneLock* lock = directory->makeLock("write.lock"); + lock->release(); + _CLDELETE(lock); + } + +bool IndexReader::isLuceneFile(const char* filename){ + if ( !filename ) + return false; + size_t len = strlen(filename); + if ( len < 6 ) //need at least x.frx + return false; + const char* ext=filename+len; + while(*ext != '.' && ext!=filename) + ext--; + + if ( strcmp(ext, ".cfs") == 0 ) + return true; + else if ( strcmp(ext, ".fnm") == 0 ) + return true; + else if ( strcmp(ext, ".fdx") == 0 ) + return true; + else if ( strcmp(ext, ".fdt") == 0 ) + return true; + else if ( strcmp(ext, ".tii") == 0 ) + return true; + else if ( strcmp(ext, ".tis") == 0 ) + return true; + else if ( strcmp(ext, ".frq") == 0 ) + return true; + else if ( strcmp(ext, ".prx") == 0 ) + return true; + else if ( strcmp(ext, ".del") == 0 ) + return true; + else if ( strcmp(ext, ".tvx") == 0 ) + return true; + else if ( strcmp(ext, ".tvd") == 0 ) + return true; + else if ( strcmp(ext, ".tvf") == 0 ) + return true; + else if ( strcmp(ext, ".tvp") == 0 ) + return true; + + else if ( strcmp(filename, "segments") == 0 ) + return true; + else if ( strcmp(filename, "segments.new") == 0 ) + return true; + else if ( strcmp(filename, "deletable") == 0 ) + return true; + + else if ( strncmp(ext,".f",2)==0 ){ + const char* n = ext+2; + if ( *n && _istdigit(*n) ) + return true; + } + + return false; +} + +CL_NS(store)::Directory* IndexReader::getDirectory() { + return directory(); +} + + void IndexReader::addCloseCallback(CloseCallback callback, void* parameter){ + _internal->closeCallbacks.put(callback, parameter); + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexReader.h clucene-core-2.3.3.4/src/core/CLucene/index/IndexReader.h --- clucene-core-0.9.21b/src/core/CLucene/index/IndexReader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexReader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,688 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_IndexReader_ +#define _lucene_index_IndexReader_ + + +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,FieldSelector) + +CL_NS_DEF(index) +class SegmentInfos; +class TermFreqVector; +class TermEnum; +class Term; +class TermDocs; +class TermPositions; +class IndexDeletionPolicy; +class TermVectorMapper; + +/** IndexReader is an abstract class, providing an interface for accessing an + index. Search of an index is done entirely through this abstract interface, + so that any subclass which implements it is searchable. + +

Concrete subclasses of IndexReader are usually constructed with a call to + one of the static open() methods, e.g. {@link #open(String)}. + +

For efficiency, in this API documents are often referred to via + document numbers, non-negative integers which each name a unique + document in the index. These document numbers are ephemeral--they may change + as documents are added to and deleted from an index. Clients should thus not + rely on a given document having the same number between sessions. + +

An IndexReader can be opened on a directory for which an IndexWriter is + opened already, but it cannot be used to delete documents from the index then. + +

+ NOTE: for backwards API compatibility, several methods are not listed + as abstract, but have no useful implementations in this base class and + instead always throw UnsupportedOperationException. Subclasses are + strongly encouraged to override these methods, but in many cases may not + need to. +

+ +*/ +class CLUCENE_EXPORT IndexReader: public CL_NS(util)::NamedObject{ + bool closed; +protected: + bool hasChanges; + + /** + * Legacy Constructor for backwards compatibility. + * + *

+ * This Constructor should not be used, it exists for backwards + * compatibility only to support legacy subclasses that did not "own" + * a specific directory, but needed to specify something to be returned + * by the directory() method. Future subclasses should delegate to the + * no arg constructor and implement the directory() method as appropriate. + * + * @param directory Directory to be returned by the directory() method + * @see #directory() + * @deprecated - use IndexReader() + */ + IndexReader(CL_NS(store)::Directory* dir); + + IndexReader(); + + /// Implements close. + virtual void doClose() = 0; + + /** Implements setNorm in subclass.*/ + virtual void doSetNorm(int32_t doc, const TCHAR* field, uint8_t value) = 0; + + /** Implements actual undeleteAll() in subclass. */ + virtual void doUndeleteAll() = 0; + + /** Implements deletion of the document numbered docNum. + * Applications should call {@link #deleteDocument(int32_t)} or {@link #deleteDocuments(Term*)}. + */ + virtual void doDelete(const int32_t docNum) = 0; + + /** + * @throws AlreadyClosedException if this IndexReader is closed + */ + virtual void ensureOpen(); + + /** Does nothing by default. Subclasses that require a write lock for + * index modifications must implement this method. */ + virtual void acquireWriteLock(); + +public: + //Callback for classes that need to know if IndexReader is closing. + typedef void (*CloseCallback)(IndexReader*, void*); + + /** Internal use. Implements commit */ + virtual void doCommit() = 0; + /** Internal use. */ + class Internal; + /** Internal use. */ + Internal* _internal; + + + /** + * Constants describing field properties, for example used for + * {@link IndexReader#getFieldNames(FieldOption)}. + */ + enum FieldOption { + /** all fields */ + ALL = 1, + /** all indexed fields */ + INDEXED = 2, + /** all fields which are not indexed */ + UNINDEXED = 4, + /** all fields which are indexed with termvectors enables */ + INDEXED_WITH_TERMVECTOR = 8, + /** all fields which are indexed but don't have termvectors enabled */ + INDEXED_NO_TERMVECTOR = 16, + /** all fields where termvectors are enabled. Please note that only standard termvector fields are returned */ + TERMVECTOR = 32, + /** all field with termvectors wiht positions enabled */ + TERMVECTOR_WITH_POSITION = 64, + /** all fields where termvectors with offset position are set */ + TERMVECTOR_WITH_OFFSET = 128, + /** all fields where termvectors with offset and position values set */ + TERMVECTOR_WITH_POSITION_OFFSET = 256, + /** all fields that store payloads */ + STORES_PAYLOADS = 512 + }; + + /** Returns an IndexReader reading the index in an FSDirectory in the named + path. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param path the path to the index directory */ + static IndexReader* open(const char* path, bool closeDirectoryOnCleanup=true, IndexDeletionPolicy* deletionPolicy=NULL); + + /** Expert: returns an IndexReader reading the index in the given + * Directory, with a custom {@link IndexDeletionPolicy}. + * @param directory the index directory + * @param deletionPolicy a custom deletion policy (only used + * if you use this reader to perform deletes or to set + * norms); see {@link IndexWriter} for details. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static IndexReader* open(CL_NS(store)::Directory* directory, bool closeDirectoryOnCleanup=false, IndexDeletionPolicy* deletionPolicy=NULL); + + + /** + * Refreshes an IndexReader if the index has changed since this instance + * was (re)opened. + *

+ * Opening an IndexReader is an expensive operation. This method can be used + * to refresh an existing IndexReader to reduce these costs. This method + * tries to only load segments that have changed or were created after the + * IndexReader was (re)opened. + *

+ * If the index has not changed since this instance was (re)opened, then this + * call is a NOOP and returns this instance. Otherwise, a new instance is + * returned. The old instance is closed (unlink JLucene) and must + * be deleted
+ *

+ * You can determine whether a reader was actually reopened by comparing the + * old instance with the instance returned by this method: + *

+   * IndexReader* reader = ...
+   * ...
+   * IndexReader* newreader = r->reopen();
+   * if (newreader != reader) {
+   *   ...     // reader was reopened
+   *   reader->close();
+   *   _CLDELETE(reader);
+   * }
+   * reader = newreader;
+   * ...
+   * 
+ * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + virtual IndexReader* reopen(); + + /** + * Returns the directory associated with this index. The Default + * implementation returns the directory specified by subclasses when + * delegating to the IndexReader(Directory) constructor, or throws an + * UnsupportedOperationException if one was not specified. + * @throws UnsupportedOperationException if no directory + */ + virtual CL_NS(store)::Directory* directory(); + + DEFINE_MUTEX(THIS_LOCK) + + /** + * + * @throws IOException + */ + virtual void flush(); + + /** + * Commit changes resulting from delete, undeleteAll, or + * setNorm operations + * + * If an exception is hit, then either no changes or all + * changes will have been committed to the index + * (transactional semantics). + * @throws IOException if there is a low-level IO error + */ + CLUCENE_LOCAL_DECL virtual void commit(); + + + /** Undeletes all documents currently marked as deleted in this index. + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + virtual void undeleteAll(); + + /** + * Get a list of unique field names that exist in this index and have the specified + * field option information. + * @param fldOption specifies which field option should be available for the returned fields + * @return Collection of Strings indicating the names of the fields. + * @see IndexReader.FieldOption + */ + virtual void getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray) = 0; + + /** Returns the byte-encoded normalization factor for the named field of + * every document. This is used by the search code to score documents. + * + * The number of bytes returned is the size of the IndexReader->maxDoc() + * + * @see Field#setBoost(float_t) + * @memory The values are cached, so don't delete the returned byte array. + */ + virtual uint8_t* norms(const TCHAR* field) = 0; + + + /** Reads the byte-encoded normalization factor for the named field of every + * document. This is used by the search code to score documents. + * + * The size of bytes must be the size of the IndexReader->maxDoc() + * + * @see Field#setBoost(float_t) + */ + virtual void norms(const TCHAR* field, uint8_t* bytes) = 0; + + /** Expert: Resets the normalization factor for the named field of the named + * document. + * + * @see #norms(TCHAR*) + * @see Similarity#decodeNorm(uint8_t) + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void setNorm(int32_t doc, const TCHAR* field, float_t value); + + /** Expert: Resets the normalization factor for the named field of the named + * document. The norm represents the product of the field's {@link + * Field#setBoost(float_t) boost} and its {@link Similarity#lengthNorm(TCHAR*, + * int32_t) length normalization}. Thus, to preserve the length normalization + * values when resetting this, one should base the new value upon the old. + * + * @see #norms(TCHAR*) + * @see Similarity#decodeNorm(uint8_t) + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void setNorm(int32_t doc, const TCHAR* field, uint8_t value); + + /// Release the write lock, if needed. + virtual ~IndexReader(); + + /** + * Returns the time the index in the named directory was last modified. + * Do not use this to check whether the reader is still up-to-date, use + * {@link #isCurrent()} instead. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static uint64_t lastModified(const char* directory); + + /** + * Returns the time the index in the named directory was last modified. + * Do not use this to check whether the reader is still up-to-date, use + * {@link #isCurrent()} instead. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static uint64_t lastModified(CL_NS(store)::Directory* directory); + + + /** + * Reads version number from segments files. The version number is + * initialized with a timestamp and then increased by one for each change of + * the index. + * + * @param directory where the index resides. + * @return version number. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static int64_t getCurrentVersion(CL_NS(store)::Directory* directory); + + /** + * Reads version number from segments files. The version number is + * initialized with a timestamp and then increased by one for each change of + * the index. + * + * @param directory where the index resides. + * @return version number. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static int64_t getCurrentVersion(const char* directory); + + /** + * Version number when this IndexReader was opened. Not implemented in the IndexReader base class. + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual int64_t getVersion(); + + /**

For IndexReader implementations that use + * TermInfosReader to read terms, this sets the + * indexDivisor to subsample the number of indexed terms + * loaded into memory. This has the same effect as {@link + * IndexWriter#setTermIndexInterval} except that setting + * must be done at indexing time while this setting can be + * set per reader. When set to N, then one in every + * N*termIndexInterval terms in the index is loaded into + * memory. By setting this to a value > 1 you can reduce + * memory usage, at the expense of higher latency when + * loading a TermInfo. The default value is 1.

+ * + * NOTE: you must call this before the term + * index is loaded. If the index is already loaded, + * an IllegalStateException is thrown. + * @throws IllegalStateException if the term index has already been loaded into memory + */ + void setTermInfosIndexDivisor(int32_t indexDivisor); + + /**

For IndexReader implementations that use + * TermInfosReader to read terms, this returns the + * current indexDivisor. + * @see #setTermInfosIndexDivisor */ + int32_t getTermInfosIndexDivisor(); + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a new + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + *

+ * Not implemented in the IndexReader base class. + *

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual bool isCurrent(); + + /** + * Checks is the index is optimized (if it has a single segment and + * no deletions). Not implemented in the IndexReader base class. + * @return true if the index is optimized; false otherwise + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual bool isOptimized(); + + /** + * Return an array of term frequency vectors for the specified document. + * The array contains a vector for each vectorized field in the document. + * Each vector contains terms and frequencies for all terms in a given vectorized field. + * If no such fields existed, the method returns null. The term vectors that are + * returned my either be of type TermFreqVector or of type TermPositionsVector if + * positions or offsets have been stored. + * + * @param docNumber document for which term frequency vectors are returned + * @return array of term frequency vectors. May be null if no term vectors have been + * stored for the specified document. + * @throws IOException if index cannot be accessed + * @see org.apache.lucene.document.Field.TermVector + */ + virtual CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber) = 0; + + /** + * Return a term frequency vector for the specified document and field. The + * returned vector contains terms and frequencies for the terms in + * the specified field of this document, if the field had the storeTermVector + * flag set. If termvectors had been stored with positions or offsets, a + * TermPositionsVector is returned. + * + * @param docNumber document for which the term frequency vector is returned + * @param field field for which the term frequency vector is returned. + * @return term frequency vector May be null if field does not exist in the specified + * document or term vector was not stored. + * @throws IOException if index cannot be accessed + * @see org.apache.lucene.document.Field.TermVector + */ + virtual TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field=NULL) = 0; + + /** + * Load the Term Vector into a user-defined data structure instead of relying on the parallel arrays of + * the {@link TermFreqVector}. + * @param docNumber The number of the document to load the vector for + * @param field The name of the field to load + * @param mapper The {@link TermVectorMapper} to process the vector. Must not be null + * @throws IOException if term vectors cannot be accessed or if they do not exist on the field and doc. specified. + * + */ + virtual void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) =0; + + /** + * Map all the term vectors for all fields in a Document + * @param docNumber The number of the document to load the vector for + * @param mapper The {@link TermVectorMapper} to process the vector. Must not be null + * @throws IOException if term vectors cannot be accessed or if they do not exist on the field and doc. specified. + */ + virtual void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper) =0; + + /** + * Returns true if an index exists at the specified directory. + * If the directory does not exist or if there is no index in it. + * @param directory the directory to check for an index + * @return true if an index exists; false otherwise + */ + static bool indexExists(const char* directory); + + /** + * Returns true if an index exists at the specified directory. + * If the directory does not exist or if there is no index in it. + * @param directory the directory to check for an index + * @return true if an index exists; false otherwise + * @throws IOException if there is a problem with accessing the index + */ + static bool indexExists(const CL_NS(store)::Directory* directory); + + /** Returns the number of documents in this index. */ + virtual int32_t numDocs() = 0; + + /** Returns one greater than the largest possible document number. + * This may be used to, e.g., determine how big to allocate an array which + * will have an element for every document number in an index. + */ + virtual int32_t maxDoc() const = 0; + + /** + * Get the {@link org.apache.lucene.document.Document} at the nth position. The {@link org.apache.lucene.document.FieldSelector} + * may be used to determine what {@link org.apache.lucene.document.Field}s to load and how they should be loaded. + * The fields are not cleared before retrieving the document, so the + * object should be new or just cleared. + * + * NOTE: If this Reader (more specifically, the underlying FieldsReader) is closed before the lazy {@link org.apache.lucene.document.Field} is + * loaded an exception may be thrown. If you want the value of a lazy {@link org.apache.lucene.document.Field} to be available after closing you must + * explicitly load it or fetch the Document again with a new loader. + * + * + * @param n Get the document at the nth position + * @param fieldSelector The {@link org.apache.lucene.document.FieldSelector} to use to determine what Fields should be loaded on the Document. May be null, in which case all Fields will be loaded. + * @return The stored fields of the {@link org.apache.lucene.document.Document} at the nth position + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * + * @see org.apache.lucene.document.Field + * @see org.apache.lucene.document.FieldSelector + * @see org.apache.lucene.document.SetBasedFieldSelector + * @see org.apache.lucene.document.LoadFirstFieldSelector + */ + //When we convert to JDK 1.5 make this Set + virtual bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector) =0; + + /** Gets the stored fields of the nth + * Document in this index. + * The fields are not cleared before retrieving the document, so the + * object should be new or just cleared. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool document(int32_t n, CL_NS(document)::Document& doc); + + _CL_DEPRECATED( document(i, Document&) ) bool document(int32_t n, CL_NS(document)::Document*); + + _CL_DEPRECATED( document(i, document) ) CL_NS(document)::Document* document(const int32_t n); + + /** Returns true if document n has been deleted */ + virtual bool isDeleted(const int32_t n) = 0; + + /** Returns true if any documents have been deleted */ + virtual bool hasDeletions() const = 0; + + /** Returns true if there are norms stored for this field. */ + virtual bool hasNorms(const TCHAR* field); + +/** Returns an enumeration of all the terms in the index. The + * enumeration is ordered by Term.compareTo(). Each term is greater + * than all that precede it in the enumeration. Note that after + * calling terms(), {@link TermEnum#next()} must be called + * on the resulting enumeration before calling other methods such as + * {@link TermEnum#term()}. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermEnum* terms() = 0; + +/** Returns an enumeration of all terms starting at a given term. If + * the given term does not exist, the enumeration is positioned at the + * first term greater than the supplied therm. The enumeration is + * ordered by Term.compareTo(). Each term is greater than all that + * precede it in the enumeration. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermEnum* terms(const Term* t) = 0; + + /** Returns the number of documents containing the term t. + * @throws IOException if there is a low-level IO error + */ + virtual int32_t docFreq(const Term* t) = 0; + + /* Returns an unpositioned TermPositions enumerator. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermPositions* termPositions() = 0; + + /** Returns an enumeration of all the documents which contain + * term. For each document, in addition to the document number + * and frequency of the term in that document, a list of all of the ordinal + * positions of the term in the document is available. Thus, this method + * implements the mapping: + * + *

    + * Term    =>    <docNum, freq, + * <pos1, pos2, ... + * posfreq-1> + * >* + *
+ *

This positional information facilitates phrase and proximity searching. + *

The enumeration is ordered by document number. Each document number is + * greater than all that precede it in the enumeration. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + TermPositions* termPositions(Term* term); + + /** Returns an unpositioned {@link TermDocs} enumerator. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermDocs* termDocs() = 0; + + /** Returns an enumeration of all the documents which contain + * term. For each document, the document number, the frequency of + * the term in that document is also provided, for use in search scoring. + * Thus, this method implements the mapping: + *

    Term    =>    <docNum, freq>*
+ *

The enumeration is ordered by document number. Each document number + * is greater than all that precede it in the enumeration. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + TermDocs* termDocs(Term* term); + + /** Deletes the document numbered docNum. Once a document is + * deleted it will not appear in TermDocs or TermPostitions enumerations. + * Attempts to read its field with the {@link #document} + * method will result in an error. The presence of this document may still be + * reflected in the {@link #docFreq} statistic, though + * this will be corrected eventually as the index is further modified. + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void deleteDocument(const int32_t docNum); + + ///@deprecated. Use deleteDocument instead. + _CL_DEPRECATED( deleteDocument ) void deleteDoc(const int32_t docNum); + + /** Deletes all documents that have a given term. + * This is useful if one uses a document field to hold a unique ID string for + * the document. Then to delete such a document, one merely constructs a + * term with the appropriate field and the unique ID string as its text and + * passes it to this method. + * See {@link #deleteDocument(int)} for information about when this deletion will + * become effective. + * @return the number of documents deleted + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + int32_t deleteDocuments(Term* term); + + ///@deprecated. Use deleteDocuments instead. + _CL_DEPRECATED( deleteDocuments ) int32_t deleteTerm(Term* term); + + /** + * Closes files associated with this index and also saves any new deletions to disk. + * No other methods should be called after this has been called. + * @throws IOException if there is a low-level IO error + */ + void close(); + + /** + * Returns true iff the index in the named directory is + * currently locked. + * @param directory the directory to check for a lock + * @throws IOException if there is a low-level IO error + */ + static bool isLocked(CL_NS(store)::Directory* directory); + + /** + * Returns true iff the index in the named directory is + * currently locked. + * @param directory the directory to check for a lock + * @throws IOException if there is a low-level IO error + */ + static bool isLocked(const char* directory); + + + ///Forcibly unlocks the index in the named directory. + ///Caution: this should only be used by failure recovery code, + ///when it is known that no other process nor thread is in fact + ///currently accessing this index. + static void unlock(CL_NS(store)::Directory* directory); + static void unlock(const char* path); + + /** Returns the directory this index resides in. */ + _CL_DEPRECATED( directory() ) CL_NS(store)::Directory* getDirectory(); + + /** Returns true if the file is a lucene filename (based on extension or filename) */ + static bool isLuceneFile(const char* filename); + + /** + * For classes that need to know when the IndexReader closes (such as caches, etc), + * should pass their callback function to this. + */ + void addCloseCallback(CloseCallback callback, void* parameter); + + friend class SegmentReader; + friend class MultiReader; + friend class IndexWriter; + friend class MultiSegmentReader; +}; + +CL_NS_END +#endif + + diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexWriter.cpp clucene-core-2.3.3.4/src/core/CLucene/index/IndexWriter.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/IndexWriter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexWriter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2343 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "IndexWriter.h" +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "CLucene/store/Directory.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/Misc.h" + +#include "CLucene/store/_Lock.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/PriorityQueue.h" +#include "_DocumentsWriter.h" +#include "_TermInfo.h" +#include "_SegmentInfos.h" +#include "_SegmentMerger.h" +#include "_SegmentHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/index/MergePolicy.h" +#include "MergePolicy.h" +#include "MergeScheduler.h" +#include "_IndexFileDeleter.h" +#include "_Term.h" +#include +#include +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_USE(analysis) +CL_NS_USE(search) +CL_NS_DEF(index) + +int64_t IndexWriter::WRITE_LOCK_TIMEOUT = 1000; +const char* IndexWriter::WRITE_LOCK_NAME = "write.lock"; +std::ostream* IndexWriter::defaultInfoStream = NULL; + +const int32_t IndexWriter::MERGE_READ_BUFFER_SIZE = 4096; +const int32_t IndexWriter::DISABLE_AUTO_FLUSH = -1; +const int32_t IndexWriter::DEFAULT_MAX_BUFFERED_DOCS = DISABLE_AUTO_FLUSH; +const float_t IndexWriter::DEFAULT_RAM_BUFFER_SIZE_MB = 16.0; +const int32_t IndexWriter::DEFAULT_MAX_BUFFERED_DELETE_TERMS = DISABLE_AUTO_FLUSH; +const int32_t IndexWriter::DEFAULT_MAX_MERGE_DOCS = LogDocMergePolicy::DEFAULT_MAX_MERGE_DOCS; +const int32_t IndexWriter::DEFAULT_MERGE_FACTOR = LogMergePolicy::DEFAULT_MERGE_FACTOR; + +DEFINE_MUTEX(IndexWriter::MESSAGE_ID_LOCK) +int32_t IndexWriter::MESSAGE_ID = 0; +const int32_t IndexWriter::MAX_TERM_LENGTH = DocumentsWriter::MAX_TERM_LENGTH; + +class IndexWriter::Internal{ +public: + IndexWriter* _this; + Internal(IndexWriter* _this){ + this->_this = _this; + } + // Apply buffered delete terms to the segment just flushed from ram + // apply appropriately so that a delete term is only applied to + // the documents buffered before it, not those buffered after it. + void applyDeletesSelectively(const DocumentsWriter::TermNumMapType& deleteTerms, + const std::vector& deleteIds,IndexReader* reader); + + // Apply buffered delete terms to this reader. + void applyDeletes(const DocumentsWriter::TermNumMapType& deleteTerms, IndexReader* reader); +}; + +void IndexWriter::deinit(bool releaseWriteLock) throw() { + if (writeLock != NULL && releaseWriteLock) { + writeLock->release(); // release write lock + _CLLDELETE(writeLock); + } + _CLLDELETE(segmentInfos); + _CLLDELETE(mergingSegments); + _CLLDELETE(pendingMerges); + _CLLDELETE(runningMerges); + _CLLDELETE(mergeExceptions); + _CLLDELETE(segmentsToOptimize); + _CLLDELETE(mergeScheduler); + _CLLDELETE(mergePolicy); + _CLLDELETE(deleter); + _CLLDELETE(docWriter); + if (bOwnsDirectory) _CLLDECDELETE(directory); + delete _internal; +} + +IndexWriter::~IndexWriter(){ + deinit(); +} + +void IndexWriter::ensureOpen() { + if (closed) { + _CLTHROWA(CL_ERR_AlreadyClosed, "this IndexWriter is closed"); + } +} + +void IndexWriter::message(string message) { + if (infoStream != NULL){ + (*infoStream) << string("IW ") << Misc::toString(messageID) << string(" [") + << Misc::toString( _LUCENE_CURRTHREADID ) << string("]: ") << message << string("\n"); + } +} + +void IndexWriter::setMessageID() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (infoStream != NULL && messageID == -1) { + { SCOPED_LOCK_MUTEX(MESSAGE_ID_LOCK) + messageID = MESSAGE_ID++; + } + } +} + +LogMergePolicy* IndexWriter::getLogMergePolicy() const{ + if ( mergePolicy->instanceOf(LogMergePolicy::getClassName()) ) + return (LogMergePolicy*) mergePolicy; + else + _CLTHROWA(CL_ERR_IllegalArgument, "this method can only be called when the merge policy is the default LogMergePolicy"); +} + +bool IndexWriter::getUseCompoundFile() { + return getLogMergePolicy()->getUseCompoundFile(); +} + + +void IndexWriter::setUseCompoundFile(bool value) { + getLogMergePolicy()->setUseCompoundFile(value); + getLogMergePolicy()->setUseCompoundDocStore(value); +} + +void IndexWriter::setSimilarity(Similarity* similarity) { + ensureOpen(); + this->similarity = similarity; +} + +Similarity* IndexWriter::getSimilarity() { + ensureOpen(); + return this->similarity; +} + + +void IndexWriter::setTermIndexInterval(int32_t interval) { + ensureOpen(); + this->termIndexInterval = interval; +} + +int32_t IndexWriter::getTermIndexInterval() { + ensureOpen(); + return termIndexInterval; +} + +IndexWriter::IndexWriter(const char* path, Analyzer* a, bool create):bOwnsDirectory(true){ + init(FSDirectory::getDirectory(path, create), a, create, true, (IndexDeletionPolicy*)NULL, true); +} + +IndexWriter::IndexWriter(Directory* d, Analyzer* a, bool create, bool closeDir):bOwnsDirectory(false){ + init(d, a, create, closeDir, NULL, true); +} + +IndexWriter::IndexWriter(Directory* d, bool autoCommit, Analyzer* a, IndexDeletionPolicy* deletionPolicy, bool closeDirOnShutdown):bOwnsDirectory(false){ + init(d, a, closeDirOnShutdown, deletionPolicy, autoCommit); +} + +IndexWriter::IndexWriter(Directory* d, bool autoCommit, Analyzer* a, bool create, IndexDeletionPolicy* deletionPolicy, bool closeDirOnShutdown):bOwnsDirectory(false){ + init(d, a, create, closeDirOnShutdown, deletionPolicy, autoCommit); +} + +void IndexWriter::init(Directory* d, Analyzer* a, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit){ + if (IndexReader::indexExists(d)) { + init(d, a, false, closeDir, deletionPolicy, autoCommit); + } else { + init(d, a, true, closeDir, deletionPolicy, autoCommit); + } +} + +void IndexWriter::init(Directory* d, Analyzer* a, const bool create, const bool closeDir, + IndexDeletionPolicy* deletionPolicy, const bool autoCommit){ + this->_internal = new Internal(this); + this->termIndexInterval = IndexWriter::DEFAULT_TERM_INDEX_INTERVAL; + this->mergeScheduler = _CLNEW SerialMergeScheduler(); //TODO: implement and use ConcurrentMergeScheduler + this->mergingSegments = _CLNEW MergingSegmentsType; + this->pendingMerges = _CLNEW PendingMergesType; + this->runningMerges = _CLNEW RunningMergesType; + this->mergeExceptions = _CLNEW MergeExceptionsType; + this->segmentsToOptimize = _CLNEW SegmentsToOptimizeType; + this->mergePolicy = _CLNEW LogByteSizeMergePolicy(); + this->localRollbackSegmentInfos = NULL; + this->stopMerges = false; + messageID = -1; + maxFieldLength = FIELD_TRUNC_POLICY__WARN; + infoStream = NULL; + this->mergeFactor = this->minMergeDocs = this->maxMergeDocs = 0; + this->commitLockTimeout =0; + this->closeDir = closeDir; + this->commitPending = this->closed = this->closing = false; + directory = d; + analyzer = a; + this->infoStream = defaultInfoStream; + setMessageID(); + this->writeLockTimeout = IndexWriter::WRITE_LOCK_TIMEOUT; + this->similarity = Similarity::getDefault(); + this->hitOOM = false; + this->autoCommit = true; + this->segmentInfos = _CLNEW SegmentInfos; + this->mergeGen = 0; + this->rollbackSegmentInfos = NULL; + this->deleter = NULL; + this->docWriter = NULL; + this->writeLock = NULL; + + if (create) { + // Clear the write lock in case it's leftover: + directory->clearLock(IndexWriter::WRITE_LOCK_NAME); + } + + bool hasLock = false; + try { + writeLock = directory->makeLock(IndexWriter::WRITE_LOCK_NAME); + hasLock = writeLock->obtain(writeLockTimeout); + if (!hasLock) // obtain write lock + _CLTHROWA(CL_ERR_LockObtainFailed, (string("Index locked for write: ") + writeLock->getObjectName()).c_str() ); + } catch (...) { + deinit(hasLock); + throw; + } + + try { + if (create) { + // Try to read first. This is to allow create + // against an index that's currently open for + // searching. In this case we write the next + // segments_N file with no segments: + try { + segmentInfos->read(directory); + segmentInfos->clear(); + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ) throw e; + // Likely this means it's a fresh directory + } + segmentInfos->write(directory); + } else { + segmentInfos->read(directory); + } + + this->autoCommit = autoCommit; + if (!autoCommit) { + rollbackSegmentInfos = segmentInfos->clone(); + }else{ + rollbackSegmentInfos = NULL; + } + + docWriter = _CLNEW DocumentsWriter(directory, this); + docWriter->setInfoStream(infoStream); + + // Default deleter (for backwards compatibility) is + // KeepOnlyLastCommitDeleter: + deleter = _CLNEW IndexFileDeleter(directory, + deletionPolicy == NULL ? _CLNEW KeepOnlyLastCommitDeletionPolicy() : deletionPolicy, + segmentInfos, infoStream, docWriter); + + pushMaxBufferedDocs(); + + if (infoStream != NULL) { + message( string("init: create=") + (create ? "true" : "false") ); + messageState(); + } + + } catch (CLuceneError& e) { + deinit(e.number() == CL_ERR_IO); + throw e; + } +} + +void IndexWriter::setMergePolicy(MergePolicy* mp) { + ensureOpen(); + if (mp == NULL) + _CLTHROWA(CL_ERR_NullPointer, "MergePolicy must be non-NULL"); + + if (mergePolicy != mp){ + mergePolicy->close(); + _CLDELETE(mergePolicy); + } + mergePolicy = mp; + pushMaxBufferedDocs(); + if (infoStream != NULL) + message(string("setMergePolicy ") + mp->getObjectName()); +} + +MergePolicy* IndexWriter::getMergePolicy() { + ensureOpen(); + return mergePolicy; +} + +void IndexWriter::setMergeScheduler(MergeScheduler* mergeScheduler) { + ensureOpen(); + if (mergeScheduler == NULL) + _CLTHROWA(CL_ERR_NullPointer, "MergeScheduler must be non-NULL"); + + if (this->mergeScheduler != mergeScheduler) { + finishMerges(true); + this->mergeScheduler->close(); + _CLLDELETE(this->mergeScheduler) + } + this->mergeScheduler = mergeScheduler; + if (infoStream != NULL) + message( string("setMergeScheduler ") + mergeScheduler->getObjectName()); +} + +MergeScheduler* IndexWriter::getMergeScheduler() { + ensureOpen(); + return mergeScheduler; +} + +void IndexWriter::setMaxMergeDocs(int32_t maxMergeDocs) { + getLogMergePolicy()->setMaxMergeDocs(maxMergeDocs); +} + +int32_t IndexWriter::getMaxMergeDocs() const{ + return getLogMergePolicy()->getMaxMergeDocs(); +} + +void IndexWriter::setMaxFieldLength(int32_t maxFieldLength) { + ensureOpen(); + this->maxFieldLength = maxFieldLength; + if (infoStream != NULL) + message( "setMaxFieldLength " + Misc::toString(maxFieldLength) ); +} + +int32_t IndexWriter::getMaxFieldLength() { + ensureOpen(); + return maxFieldLength; +} + +void IndexWriter::setMaxBufferedDocs(int32_t maxBufferedDocs) { + ensureOpen(); + if (maxBufferedDocs != DISABLE_AUTO_FLUSH && maxBufferedDocs < 2) + _CLTHROWA(CL_ERR_IllegalArgument, + "maxBufferedDocs must at least be 2 when enabled"); + if (maxBufferedDocs == DISABLE_AUTO_FLUSH + && (int32_t)getRAMBufferSizeMB() == DISABLE_AUTO_FLUSH) + _CLTHROWA(CL_ERR_IllegalArgument, + "at least one of ramBufferSize and maxBufferedDocs must be enabled"); + docWriter->setMaxBufferedDocs(maxBufferedDocs); + pushMaxBufferedDocs(); + if (infoStream != NULL) + message("setMaxBufferedDocs " + Misc::toString(maxBufferedDocs)); +} + +void IndexWriter::pushMaxBufferedDocs() { + if (docWriter->getMaxBufferedDocs() != DISABLE_AUTO_FLUSH) { + const MergePolicy* mp = mergePolicy; + if (mp->instanceOf(LogDocMergePolicy::getClassName())) { + LogDocMergePolicy* lmp = (LogDocMergePolicy*) mp; + const int32_t maxBufferedDocs = docWriter->getMaxBufferedDocs(); + if (lmp->getMinMergeDocs() != maxBufferedDocs) { + if (infoStream != NULL){ + message(string("now push maxBufferedDocs ") + Misc::toString(maxBufferedDocs) + " to LogDocMergePolicy"); + } + lmp->setMinMergeDocs(maxBufferedDocs); + } + } + } +} + +int32_t IndexWriter::getMaxBufferedDocs() { + ensureOpen(); + return docWriter->getMaxBufferedDocs(); +} + +void IndexWriter::setRAMBufferSizeMB(float_t mb) { + if ( (int32_t)mb != DISABLE_AUTO_FLUSH && mb <= 0.0) + _CLTHROWA(CL_ERR_IllegalArgument, + "ramBufferSize should be > 0.0 MB when enabled"); + if (mb == DISABLE_AUTO_FLUSH && getMaxBufferedDocs() == DISABLE_AUTO_FLUSH) + _CLTHROWA(CL_ERR_IllegalArgument, + "at least one of ramBufferSize and maxBufferedDocs must be enabled"); + docWriter->setRAMBufferSizeMB(mb); + if (infoStream != NULL){ + message(string("setRAMBufferSizeMB ") + Misc::toString(mb)); + } +} + +float_t IndexWriter::getRAMBufferSizeMB() { + return docWriter->getRAMBufferSizeMB(); +} + +void IndexWriter::setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms) { + ensureOpen(); + if (maxBufferedDeleteTerms != DISABLE_AUTO_FLUSH + && maxBufferedDeleteTerms < 1) + _CLTHROWA(CL_ERR_IllegalArgument, + "maxBufferedDeleteTerms must at least be 1 when enabled"); + docWriter->setMaxBufferedDeleteTerms(maxBufferedDeleteTerms); + if (infoStream != NULL) + message("setMaxBufferedDeleteTerms " + Misc::toString(maxBufferedDeleteTerms)); +} + +int32_t IndexWriter::getMaxBufferedDeleteTerms() { + ensureOpen(); + return docWriter->getMaxBufferedDeleteTerms(); +} + +void IndexWriter::setMergeFactor(int32_t mergeFactor) { + getLogMergePolicy()->setMergeFactor(mergeFactor); +} + +int32_t IndexWriter::getMergeFactor() const { + return getLogMergePolicy()->getMergeFactor(); +} + +void IndexWriter::setDefaultInfoStream(std::ostream* infoStream) { + IndexWriter::defaultInfoStream = infoStream; +} + +std::ostream* IndexWriter::getDefaultInfoStream() { + return IndexWriter::defaultInfoStream; +} + +//TODO: infoStream - unicode +void IndexWriter::setInfoStream(std::ostream* infoStream) { + ensureOpen(); + this->infoStream = infoStream; + setMessageID(); + docWriter->setInfoStream(infoStream); + deleter->setInfoStream(infoStream); + if (infoStream != NULL) + messageState(); +} + +void IndexWriter::messageState() { + message( string("setInfoStream: dir=") + directory->toString() + + " autoCommit=" + (autoCommit?"true":"false" + + string(" mergePolicy=") + mergePolicy->getObjectName() + + " mergeScheduler=" + mergeScheduler->getObjectName() + + " ramBufferSizeMB=" + Misc::toString(docWriter->getRAMBufferSizeMB()) + + " maxBuffereDocs=" + Misc::toString(docWriter->getMaxBufferedDocs())) + + " maxBuffereDeleteTerms=" + Misc::toString(docWriter->getMaxBufferedDeleteTerms()) + + " maxFieldLength=" + Misc::toString(maxFieldLength) + + " index=" + segString()); +} + +std::ostream* IndexWriter::getInfoStream() { + ensureOpen(); + return infoStream; +} + +void IndexWriter::setWriteLockTimeout(int64_t writeLockTimeout) { + ensureOpen(); + this->writeLockTimeout = writeLockTimeout; +} + +int64_t IndexWriter::getWriteLockTimeout() { + ensureOpen(); + return writeLockTimeout; +} + +void IndexWriter::setDefaultWriteLockTimeout(int64_t writeLockTimeout) { + IndexWriter::WRITE_LOCK_TIMEOUT = writeLockTimeout; +} + +int64_t IndexWriter::getDefaultWriteLockTimeout() { + return IndexWriter::WRITE_LOCK_TIMEOUT; +} + +void IndexWriter::close(bool waitForMerges) { + bool doClose; + + // If any methods have hit OutOfMemoryError, then abort + // on close, in case the internal state of IndexWriter + // or DocumentsWriter is corrupt + if (hitOOM) + abort(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Ensure that only one thread actually gets to do the closing: + if (!closing) { + doClose = true; + closing = true; + } else + doClose = false; + } + if (doClose) + closeInternal(waitForMerges); + else + // Another thread beat us to it (is actually doing the + // close), so we will block until that other thread + // has finished closing + waitForClose(); +} + +void IndexWriter::waitForClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(!closed && closing) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } +} + +void IndexWriter::closeInternal(bool waitForMerges) { + try { + if (infoStream != NULL) + message(string("now flush at close")); + + docWriter->close(); + + // Only allow a _CLNEW merge to be triggered if we are + // going to wait for merges: + flush(waitForMerges, true); + + if (waitForMerges) + // Give merge scheduler last chance to run, in case + // any pending merges are waiting: + mergeScheduler->merge(this); + + mergePolicy->close(); + + finishMerges(waitForMerges); + + mergeScheduler->close(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (commitPending) { + bool success = false; + try { + segmentInfos->write(directory); // now commit changes + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception committing segments file during close")); + deletePartialSegmentsFile(); + } + ) + if (infoStream != NULL) + message("close: wrote segments file \"" + segmentInfos->getCurrentSegmentFileName() + "\""); + + deleter->checkpoint(segmentInfos, true); + + commitPending = false; +// _CLDELETE(rollbackSegmentInfos); + } + _CLDELETE(rollbackSegmentInfos); + + + if (infoStream != NULL) + message("at close: " + segString()); + + _CLDELETE(docWriter); + deleter->close(); + } + + if (closeDir) + directory->close(); + + if (writeLock != NULL) { + writeLock->release(); // release write lock + _CLDELETE(writeLock); + } + closed = true; + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (!closed) { + closing = false; + if (infoStream != NULL) + message(string("hit exception while closing")); + } + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } + ) +} + +bool IndexWriter::flushDocStores() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + const std::vector& files = docWriter->files(); + + bool useCompoundDocStore = false; + + if (files.size() > 0) { + string docStoreSegment; + + bool success = false; + try { + docStoreSegment = docWriter->closeDocStore(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception closing doc store segment")); + docWriter->abort(NULL); + } + ) + + useCompoundDocStore = mergePolicy->useCompoundDocStore(segmentInfos); + + if (useCompoundDocStore && !docStoreSegment.empty()) { + // Now build compound doc store file + + success = false; + + const int32_t numSegments = segmentInfos->size(); + const string compoundFileName = docStoreSegment + "." + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION; + + try { + CompoundFileWriter cfsWriter(directory, compoundFileName.c_str()); + const size_t size = files.size(); + for(size_t i=0;iinfo(i); + if (si->getDocStoreOffset() != -1 && + si->getDocStoreSegment().compare(docStoreSegment)==0) + si->setDocStoreIsCompoundFile(true); + } + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message("hit exception building compound file doc store for segment " + docStoreSegment); + + // Rollback to no compound file + for(int32_t i=0;iinfo(i); + if (si->getDocStoreOffset() != -1 && + si->getDocStoreSegment().compare(docStoreSegment)==0 ) + si->setDocStoreIsCompoundFile(false); + } + deleter->deleteFile(compoundFileName.c_str()); + deletePartialSegmentsFile(); + } + ) + + deleter->checkpoint(segmentInfos, false); + } + } + + return useCompoundDocStore; +} + +Directory* IndexWriter::getDirectory() { + ensureOpen(); + return directory; +} + +Analyzer* IndexWriter::getAnalyzer() { + ensureOpen(); + return analyzer; +} + +int32_t IndexWriter::docCount() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + int32_t count = docWriter->getNumDocsInRAM(); + for (int32_t i = 0; i < segmentInfos->size(); i++) { + SegmentInfo* si = segmentInfos->info(i); + count += si->docCount; + } + return count; +} + + +void IndexWriter::addDocument(Document* doc, Analyzer* analyzer) { + if ( analyzer == NULL ) analyzer = this->analyzer; + ensureOpen(); + bool doFlush = false; + bool success = false; + try { + try { + doFlush = docWriter->addDocument(doc, analyzer); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message(string("hit exception adding document")); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // If docWriter has some aborted files that were + // never incref'd, then we clean them up here + if (docWriter != NULL) { + const std::vector* files = docWriter->abortedFiles(); + if (files != NULL ) + deleter->deleteNewFiles(*files); + } + } + } + ) + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::deleteDocuments(Term* term) { + ensureOpen(); + try { + bool doFlush = docWriter->bufferDeleteTerm(term); + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::deleteDocuments(const ArrayBase* terms) { + ensureOpen(); + try { + bool doFlush = docWriter->bufferDeleteTerms(terms); + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::updateDocument(Term* term, Document* doc) { + ensureOpen(); + updateDocument(term, doc, getAnalyzer()); +} + +void IndexWriter::updateDocument(Term* term, Document* doc, Analyzer* analyzer) +{ + ensureOpen(); + try { + bool doFlush = false; + bool success = false; + try { + doFlush = docWriter->updateDocument(term, doc, analyzer); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message(string("hit exception updating document")); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // If docWriter has some aborted files that were + // never incref'd, then we clean them up here + const std::vector* files = docWriter->abortedFiles(); + if (files != NULL) + deleter->deleteNewFiles(*files); + } + } + ) + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +// for test purpose +int32_t IndexWriter::getSegmentCount(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return segmentInfos->size(); +} + +// for test purpose +int32_t IndexWriter::getNumBufferedDocuments(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getNumDocsInRAM(); +} + +// for test purpose +int32_t IndexWriter::getDocCount(int32_t i) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (i >= 0 && i < segmentInfos->size()) { + return segmentInfos->info(i)->docCount; + } else { + return -1; + } +} + +string IndexWriter::newSegmentName() { + // Cannot synchronize on IndexWriter because that causes + // deadlock + { SCOPED_LOCK_MUTEX(segmentInfos->THIS_LOCK) + // Important to set commitPending so that the + // segmentInfos is written on close. Otherwise we + // could close, re-open and re-return the same segment + // name that was previously returned which can cause + // problems at least with ConcurrentMergeScheduler. + commitPending = true; + + char buf[10]; + Misc::longToBase(segmentInfos->counter++, 36,buf); + return string("_") + buf; + } +} + +void IndexWriter::optimize(bool doWait) { + optimize(1, doWait); +} + +void IndexWriter::optimize(int32_t maxNumSegments, bool doWait) { + ensureOpen(); + + if (maxNumSegments < 1) + _CLTHROWA(CL_ERR_IllegalArgument, "maxNumSegments must be >= 1; got " + maxNumSegments); + + if (infoStream != NULL) + message("optimize: index now " + segString()); + + flush(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + resetMergeExceptions(); + segmentsToOptimize->clear(); + const int32_t numSegments = segmentInfos->size(); + for(int32_t i=0;ipush_back(segmentInfos->info(i)); + + // Now mark all pending & running merges as optimize + // merge: + PendingMergesType::iterator it = pendingMerges->begin(); + while(it != pendingMerges->end()) { + MergePolicy::OneMerge* _merge = *it; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegments; + + it++; + } + + RunningMergesType::iterator it2 = runningMerges->begin(); + while(it2 != runningMerges->end()) { + MergePolicy::OneMerge* _merge = *it2; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegments; + + it2++; + } + } + + maybeMerge(maxNumSegments, true); + + if (doWait) { + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + while(optimizeMergesPending()) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION); + + if (mergeExceptions->size() > 0) { + // Forward any exceptions in background merge + // threads to the current thread: + const int32_t size = mergeExceptions->size(); + for(int32_t i=0;ioptimize) { + CLuceneError tmp(_merge->getException()); + CLuceneError err(tmp.number(), + (string("background merge hit exception: ") + _merge->segString(directory) + ":" + tmp.what() ).c_str(), false ); + throw err; + } + } + } + } + } + } + + // NOTE: in the ConcurrentMergeScheduler case, when + // doWait is false, we can return immediately while + // background threads accomplish the optimization +} + +bool IndexWriter::optimizeMergesPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for(PendingMergesType::iterator it = pendingMerges->begin(); + it != pendingMerges->end(); it++){ + if ((*it)->optimize) + return true; + + it++; + } + + for(RunningMergesType::iterator it = runningMerges->begin(); + it != runningMerges->end(); it++){ + if ((*it)->optimize) + return true; + + it++; + } + + return false; +} + +void IndexWriter::maybeMerge() { + maybeMerge(false); +} + +void IndexWriter::maybeMerge(bool optimize) { + maybeMerge(1, optimize); +} + +void IndexWriter::maybeMerge(int32_t maxNumSegmentsOptimize, bool optimize) { + updatePendingMerges(maxNumSegmentsOptimize, optimize); + mergeScheduler->merge(this); +} + +void IndexWriter::updatePendingMerges(int32_t maxNumSegmentsOptimize, bool optimize){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (!optimize || maxNumSegmentsOptimize > 0); + + if (stopMerges) + return; + + MergePolicy::MergeSpecification* spec; + if (optimize) { + spec = mergePolicy->findMergesForOptimize(segmentInfos, this, maxNumSegmentsOptimize, *segmentsToOptimize); + + if (spec != NULL) { + const int32_t numMerges = spec->merges->size(); + for(int32_t i=0;imerges)[i]; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegmentsOptimize; + } + } + + } else + spec = mergePolicy->findMerges(segmentInfos, this); + + if (spec != NULL) { + const int32_t numMerges = spec->merges->size(); + for(int32_t i=0;imerges)[i]); + } + _CLDELETE(spec); +} + +MergePolicy::OneMerge* IndexWriter::getNextMerge() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (pendingMerges->size() == 0) + return NULL; + else { + // Advance the merge from pending to running + MergePolicy::OneMerge* _merge = *pendingMerges->begin(); + pendingMerges->pop_front(); + runningMerges->insert(_merge); + return _merge; + } +} + + +void IndexWriter::startTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now start transaction")); + + CND_PRECONDITION(docWriter->getNumBufferedDeleteTerms() == 0, + "calling startTransaction with buffered delete terms not supported"); + CND_PRECONDITION (docWriter->getNumDocsInRAM() == 0, + "calling startTransaction with buffered documents not supported"); + + localRollbackSegmentInfos = segmentInfos->clone(); + localAutoCommit = autoCommit; + + if (localAutoCommit) { + + if (infoStream != NULL) + message(string("flush at startTransaction")); + + flush(); + // Turn off auto-commit during our local transaction: + autoCommit = false; + } else + // We must "protect" our files at this point from + // deletion in case we need to rollback: + deleter->incRef(segmentInfos, false); +} + +void IndexWriter::rollbackTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now rollback transaction")); + + // First restore autoCommit in case we hit an exception below: + autoCommit = localAutoCommit; + + // Keep the same segmentInfos instance but replace all + // of its SegmentInfo instances. This is so the next + // attempt to commit using this instance of IndexWriter + // will always write to a _CLNEW generation ("write once"). + segmentInfos->clear(); + segmentInfos->insert(localRollbackSegmentInfos, true); + _CLDELETE(localRollbackSegmentInfos); + + // Ask deleter to locate unreferenced files we had + // created & remove them: + deleter->checkpoint(segmentInfos, false); + + if (!autoCommit) + // Remove the incRef we did in startTransaction: + deleter->decRef(segmentInfos); + + deleter->refresh(); + finishMerges(false); + stopMerges = false; +} + +void IndexWriter::commitTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now commit transaction")); + + // First restore autoCommit in case we hit an exception below: + autoCommit = localAutoCommit; + + bool success = false; + try { + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception committing transaction")); + + rollbackTransaction(); + } + ) + + if (!autoCommit) + // Remove the incRef we did in startTransaction. + deleter->decRef(localRollbackSegmentInfos); + + _CLDELETE(localRollbackSegmentInfos); + + // Give deleter a chance to remove files now: + deleter->checkpoint(segmentInfos, autoCommit); +} + +void IndexWriter::abort() { + ensureOpen(); + if (autoCommit) + _CLTHROWA(CL_ERR_IllegalState,"abort() can only be called when IndexWriter was opened with autoCommit=false"); + + bool doClose; + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Ensure that only one thread actually gets to do the closing: + if (!closing) { + doClose = true; + closing = true; + } else + doClose = false; + } + + if (doClose) { + + finishMerges(false); + + // Must pre-close these two, in case they set + // commitPending=true, so that we can then set it to + // false before calling closeInternal + mergePolicy->close(); + mergeScheduler->close(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Keep the same segmentInfos instance but replace all + // of its SegmentInfo instances. This is so the next + // attempt to commit using this instance of IndexWriter + // will always write to a _CLNEW generation ("write + // once"). + segmentInfos->clear(); + segmentInfos->insert(rollbackSegmentInfos, false); + + docWriter->abort(NULL); + + // Ask deleter to locate unreferenced files & remove + // them: + deleter->checkpoint(segmentInfos, false); + deleter->refresh(); + } + + commitPending = false; + closeInternal(false); + } else + waitForClose(); +} + +void IndexWriter::finishMerges(bool waitForMerges) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (!waitForMerges) { + + stopMerges = true; + + // Abort all pending & running merges: + for(PendingMergesType::iterator it = pendingMerges->begin(); + it != pendingMerges->end(); it++ ){ + MergePolicy::OneMerge* _merge = *it; + if (infoStream != NULL) + message("now abort pending merge " + _merge->segString(directory)); + _merge->abort(); + mergeFinish(_merge); + + it++; + } + pendingMerges->clear(); + + for(RunningMergesType::iterator it = runningMerges->begin(); + it != runningMerges->end(); it++ ){ + MergePolicy::OneMerge* _merge = *it; + if (infoStream != NULL) + message("now abort running merge " + _merge->segString(directory)); + _merge->abort(); + + it++; + } + + // These merges periodically check whether they have + // been aborted, and stop if so. We wait here to make + // sure they all stop. It should not take very int64_t + // because the merge threads periodically check if + // they are aborted. + while(runningMerges->size() > 0) { + if (infoStream != NULL) + message( string("now wait for ") + Misc::toString( (int32_t)runningMerges->size()) + " running merge to abort"); + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + + assert (0 == mergingSegments->size()); + + if (infoStream != NULL) + message(string("all running merges have aborted")); + + } else { + while(pendingMerges->size() > 0 || runningMerges->size() > 0) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + assert (0 == mergingSegments->size()); + } +} + +void IndexWriter::checkpoint() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (autoCommit) { + segmentInfos->write(directory); + commitPending = false; + if (infoStream != NULL) + message("checkpoint: wrote segments file \"" + segmentInfos->getCurrentSegmentFileName() + "\""); + } else { + commitPending = true; + } +} + +void IndexWriter::addIndexes(CL_NS(util)::ArrayBase& dirs){ + + ensureOpen(); + + // Do not allow add docs or deletes while we are running: + docWriter->pauseAllThreads(); + + try { + + if (infoStream != NULL) + message(string("flush at addIndexes")); + flush(); + + bool success = false; + + startTransaction(); + + try { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + for (int32_t i = 0; i< dirs.length; i++) { + SegmentInfos sis; // read infos from dir + sis.read(dirs[i]); + segmentInfos->insert(&sis,true); // add each info + } + } + + optimize(); + + success = true; + } _CLFINALLY ( + if (success) { + commitTransaction(); + } else { + rollbackTransaction(); + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->resumeAllThreads(); + ) +} + +void IndexWriter::resetMergeExceptions() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + mergeExceptions->clear(); + mergeGen++; +} + +void IndexWriter::addIndexesNoOptimize(CL_NS(util)::ArrayBase& dirs) +{ + ensureOpen(); + + // Do not allow add docs or deletes while we are running: + docWriter->pauseAllThreads(); + + try { + if (infoStream != NULL) + message(string("flush at addIndexesNoOptimize")); + flush(); + + bool success = false; + + startTransaction(); + + try { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + for (int32_t i = 0; i< dirs.length; i++) { + if (directory == dirs[i]) { + // cannot add this index: segments may be deleted in merge before added + _CLTHROWA(CL_ERR_IllegalArgument,"Cannot add this index to itself"); + } + + SegmentInfos sis; // read infos from dir + sis.read(dirs[i]); + segmentInfos->insert(&sis, true); + } + } + + maybeMerge(); + + // If after merging there remain segments in the index + // that are in a different directory, just copy these + // over into our index. This is necessary (before + // finishing the transaction) to avoid leaving the + // index in an unusable (inconsistent) state. + copyExternalSegments(); + + success = true; + + } _CLFINALLY ( + if (success) { + commitTransaction(); + } else { + rollbackTransaction(); + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->resumeAllThreads(); + ) +} + +void IndexWriter::copyExternalSegments() { + + bool any = false; + + while(true) { + SegmentInfo* info = NULL; + MergePolicy::OneMerge* _merge = NULL; + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + const int32_t numSegments = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (info->dir != directory) { + SegmentInfos* range = _CLNEW SegmentInfos; + segmentInfos->range(i, 1+i, *range); + _merge = _CLNEW MergePolicy::OneMerge(range, info->getUseCompoundFile()); + break; + } + } + } + + if (_merge != NULL) { + if (registerMerge(_merge)) { + PendingMergesType::iterator p = std::find(pendingMerges->begin(),pendingMerges->end(), _merge); + pendingMerges->remove(p,true); + runningMerges->insert(_merge); + any = true; + merge(_merge); + } else + // This means there is a bug in the + // MergeScheduler. MergeSchedulers in general are + // not allowed to run a merge involving segments + // external to this IndexWriter's directory in the + // background because this would put the index + // into an inconsistent state (where segmentInfos + // has been written with such external segments + // that an IndexReader would fail to load). + _CLTHROWA(CL_ERR_Merge, (string("segment \"") + info->name + " exists in external directory yet the MergeScheduler executed the merge in a separate thread").c_str() ); + } else + // No more external segments + break; + } + + if (any) + // Sometimes, on copying an external segment over, + // more merges may become necessary: + mergeScheduler->merge(this); +} + +void IndexWriter::doAfterFlush(){ +} + +void IndexWriter::flush() { + flush(true, false); +} + +void IndexWriter::flush(bool triggerMerge, bool _flushDocStores) { + ensureOpen(); + + if (doFlush(_flushDocStores) && triggerMerge) + maybeMerge(); +} + +bool IndexWriter::doFlush(bool _flushDocStores) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // Make sure no threads are actively adding a document + + // Returns true if docWriter is currently aborting, in + // which case we skip flushing this segment + if (docWriter->pauseAllThreads()) { + docWriter->resumeAllThreads(); + return false; + } + + bool ret = false; + try { + + SegmentInfo* newSegment = NULL; + + const int32_t numDocs = docWriter->getNumDocsInRAM(); + + // Always flush docs if there are any + bool flushDocs = numDocs > 0; + + // With autoCommit=true we always must flush the doc + // stores when we flush + _flushDocStores |= autoCommit; + string docStoreSegment = docWriter->getDocStoreSegment(); + if (docStoreSegment.empty()) + _flushDocStores = false; + + // Always flush deletes if there are any delete terms. + // TODO: when autoCommit=false we don't have to flush + // deletes with every flushed segment; we can save + // CPU/IO by buffering longer & flushing deletes only + // when they are full or writer is being closed. We + // have to fix the "applyDeletesSelectively" logic to + // apply to more than just the last flushed segment + bool flushDeletes = docWriter->hasDeletes(); + + if (infoStream != NULL) { + message(" flush: segment=" + docWriter->getSegment() + + " docStoreSegment=" + docWriter->getDocStoreSegment() + + " docStoreOffset=" + Misc::toString(docWriter->getDocStoreOffset()) + + " flushDocs=" + Misc::toString(flushDocs) + + " flushDeletes=" + Misc::toString(flushDeletes) + + " flushDocStores=" + Misc::toString(_flushDocStores) + + " numDocs=" + Misc::toString(numDocs) + + " numBufDelTerms=" + Misc::toString(docWriter->getNumBufferedDeleteTerms()) ); + message(" index before flush " + segString()); + } + + int32_t docStoreOffset = docWriter->getDocStoreOffset(); + + // docStoreOffset should only be non-zero when + // autoCommit == false + assert (!autoCommit || 0 == docStoreOffset); + + bool docStoreIsCompoundFile = false; + + // Check if the doc stores must be separately flushed + // because other segments, besides the one we are about + // to flush, reference it + if (_flushDocStores && (!flushDocs || !docWriter->getSegment().compare(docWriter->getDocStoreSegment())==0 )) { + // We must separately flush the doc store + if (infoStream != NULL) + message(" flush shared docStore segment " + docStoreSegment); + + docStoreIsCompoundFile = flushDocStores(); + _flushDocStores = false; + } + + string segment = docWriter->getSegment(); + + // If we are flushing docs, segment must not be NULL: + assert (!segment.empty() || !flushDocs); + + if (flushDocs || flushDeletes) { + + SegmentInfos* rollback = NULL; + + if (flushDeletes) + rollback = segmentInfos->clone(); + + bool success = false; + + try { + if (flushDocs) { + + if (0 == docStoreOffset && _flushDocStores) { + // This means we are flushing doc stores + // with this segment, so it will not be shared + // with other segments + assert (!docStoreSegment.empty()); + assert (docStoreSegment.compare(segment)==0); + docStoreOffset = -1; + docStoreIsCompoundFile = false; + docStoreSegment.clear(); + } + + int32_t flushedDocCount = docWriter->flush(_flushDocStores); + + newSegment = _CLNEW SegmentInfo(segment.c_str(), + flushedDocCount, + directory, false, true, + docStoreOffset, docStoreSegment.c_str(), + docStoreIsCompoundFile); + segmentInfos->insert(newSegment); + } + + if (flushDeletes) + // we should be able to change this so we can + // buffer deletes longer and then flush them to + // multiple flushed segments, when + // autoCommit=false + applyDeletes(flushDocs); + + doAfterFlush(); + + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message("hit exception flushing segment " + segment); + + if (flushDeletes) { + + // Carefully check if any partial .del files + // should be removed: + const int32_t size = rollback->size(); + for(int32_t i=0;iinfo(i)->getDelFileName(); + const string delFileName = rollback->info(i)->getDelFileName(); + if ( !newDelFileName.empty() && newDelFileName.compare(delFileName)!=0 ) + deleter->deleteFile(newDelFileName.c_str()); + } + + // Fully replace the segmentInfos since flushed + // deletes could have changed any of the + // SegmentInfo instances: + segmentInfos->clear(); + assert(false);//test me.. + segmentInfos->insert(rollback, false); + + } else { + // Remove segment we added, if any: + if ( newSegment != NULL && + segmentInfos->size() > 0 && + segmentInfos->info(segmentInfos->size()-1) == newSegment) + segmentInfos->remove(segmentInfos->size()-1); + } + if (flushDocs) + docWriter->abort(NULL); + deletePartialSegmentsFile(); + deleter->checkpoint(segmentInfos, false); + + if (!segment.empty()) + deleter->refresh(segment.c_str()); + } else if (flushDeletes) + _CLDELETE(rollback); + ) + + deleter->checkpoint(segmentInfos, autoCommit); + + if (flushDocs && mergePolicy->useCompoundFile(segmentInfos, + newSegment)) { + success = false; + try { + docWriter->createCompoundFile(segment); + newSegment->setUseCompoundFile(true); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message("hit exception creating compound file for newly flushed segment " + segment); + newSegment->setUseCompoundFile(false); + deleter->deleteFile( (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str() ); + deletePartialSegmentsFile(); + } + ) + + deleter->checkpoint(segmentInfos, autoCommit); + } + + ret = true; + } + + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->clearFlushPending(); + docWriter->resumeAllThreads(); + ) + return ret; +} + +int64_t IndexWriter::ramSizeInBytes() { + ensureOpen(); + return docWriter->getRAMUsed(); +} + +int32_t IndexWriter::numRamDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + return docWriter->getNumDocsInRAM(); +} + +int32_t IndexWriter::ensureContiguousMerge(MergePolicy::OneMerge* _merge) { + + int32_t first = segmentInfos->indexOf(_merge->segments->info(0)); + if (first == -1) + _CLTHROWA(CL_ERR_Merge, (string("could not find segment ") + _merge->segments->info(0)->name + " in current segments").c_str()); + + const int32_t numSegments = segmentInfos->size(); + + const int32_t numSegmentsToMerge = _merge->segments->size(); + for(int32_t i=0;isegments->info(i); + + if (first + i >= numSegments || !segmentInfos->info(first+i)->equals(info) ) { + if (segmentInfos->indexOf(info) == -1) + _CLTHROWA(CL_ERR_Merge, (string("MergePolicy selected a segment (") + info->name + ") that is not in the index").c_str()); + else + _CLTHROWA(CL_ERR_Merge, (string("MergePolicy selected non-contiguous segments to merge (") + _merge->getObjectName() + " vs " + segString() + "), which IndexWriter (currently) cannot handle").c_str() ); + } + } + + return first; +} + +bool IndexWriter::commitMerge(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert (_merge->registerDone); + + if (hitOOM) + return false; + + if (infoStream != NULL) + message("commitMerge: " + _merge->segString(directory)); + + // If merge was explicitly aborted, or, if abort() or + // rollbackTransaction() had been called since our merge + // started (which results in an unqualified + // deleter->refresh() call that will remove any index + // file that current segments does not reference), we + // abort this merge + if (_merge->isAborted()) { + if (infoStream != NULL) + message("commitMerge: skipping merge " + _merge->segString(directory) + ": it was aborted"); + + assert (_merge->increfDone); + decrefMergeSegments(_merge); + deleter->refresh(_merge->info->name.c_str()); + return false; + } + + bool success = false; + + int32_t start; + + try { + SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const SegmentInfos* sourceSegments = _merge->segments; + + start = ensureContiguousMerge(_merge); + if (infoStream != NULL) + message("commitMerge " + _merge->segString(directory)); + + // Carefully merge deletes that occurred after we + // started merging: + + BitVector* deletes = NULL; + int32_t docUpto = 0; + + const int32_t numSegmentsToMerge = sourceSegments->size(); + for(int32_t i=0;iinfo(i); + const SegmentInfo* currentInfo = sourceSegments->info(i); + + assert (currentInfo->docCount == previousInfo->docCount); + + const int32_t docCount = currentInfo->docCount; + + if (previousInfo->hasDeletions()) { + + // There were deletes on this segment when the merge + // started. The merge has collapsed away those + // deletes, but, if _CLNEW deletes were flushed since + // the merge started, we must now carefully keep any + // newly flushed deletes but mapping them to the _CLNEW + // docIDs. + + assert (currentInfo->hasDeletions()); + + // Load deletes present @ start of merge, for this segment: + BitVector previousDeletes(previousInfo->dir, previousInfo->getDelFileName().c_str()); + + if (!currentInfo->getDelFileName().compare(previousInfo->getDelFileName())==0 ){ + // This means this segment has had new deletes + // committed since we started the merge, so we + // must merge them: + if (deletes == NULL) + deletes = _CLNEW BitVector(_merge->info->docCount); + + BitVector currentDeletes(currentInfo->dir, currentInfo->getDelFileName().c_str()); + for(int32_t j=0;jset(docUpto); + docUpto++; + } + } + } else + docUpto += docCount - previousDeletes.count(); + + } else if (currentInfo->hasDeletions()) { + // This segment had no deletes before but now it + // does: + if (deletes == NULL) + deletes = _CLNEW BitVector(_merge->info->docCount); + BitVector currentDeletes(directory, currentInfo->getDelFileName().c_str()); + + for(int32_t j=0;jset(docUpto); + docUpto++; + } + + } else + // No deletes before or after + docUpto += currentInfo->docCount; + + _merge->checkAborted(directory); + } + + if (deletes != NULL) { + _merge->info->advanceDelGen(); + deletes->write(directory, _merge->info->getDelFileName().c_str() ); + _CLDELETE(deletes); + } + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception creating merged deletes file")); + deleter->refresh(_merge->info->name.c_str()); + } + ) + + // Simple optimization: if the doc store we are using + // has been closed and is in now compound format (but + // wasn't when we started), then we will switch to the + // compound format as well: + const string mergeDocStoreSegment = _merge->info->getDocStoreSegment(); + if ( !mergeDocStoreSegment.empty() && !_merge->info->getDocStoreIsCompoundFile()) { + const int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + const string docStoreSegment = info->getDocStoreSegment(); + if ( !docStoreSegment.empty() && + docStoreSegment.compare(mergeDocStoreSegment)==0 && + info->getDocStoreIsCompoundFile()) { + _merge->info->setDocStoreIsCompoundFile(true); + break; + } + } + } + + success = false; + SegmentInfos* rollback = NULL; + try { + rollback = segmentInfos->clone(); + int32_t segmentssize = _merge->segments->size(); + for ( int32_t i=0;iremove(start); + } + segmentInfos->add(_merge->info,start); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success && rollback != NULL) { + if (infoStream != NULL) + message(string("hit exception when checkpointing after merge")); + segmentInfos->clear(); + segmentInfos->insert(rollback,true); + deletePartialSegmentsFile(); + deleter->refresh(_merge->info->name.c_str()); + } + _CLDELETE(rollback); + ) + + if (_merge->optimize) + segmentsToOptimize->push_back(_merge->info); + + // Must checkpoint before decrefing so any newly + // referenced files in the _CLNEW merge->info are incref'd + // first: + deleter->checkpoint(segmentInfos, autoCommit); + + decrefMergeSegments(_merge); + + return true; +} + + +void IndexWriter::decrefMergeSegments(MergePolicy::OneMerge* _merge) { + const SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const int32_t numSegmentsToMerge = sourceSegmentsClone->size(); + assert (_merge->increfDone); + _merge->increfDone = false; + for(int32_t i=0;iinfo(i); + // Decref all files for this SegmentInfo (this + // matches the incref in mergeInit): + if (previousInfo->dir == directory) + deleter->decRef(previousInfo->files()); + } +} + +void IndexWriter::merge(MergePolicy::OneMerge* _merge) +{ + + assert (_merge->registerDone); + assert (!_merge->optimize || _merge->maxNumSegmentsOptimize > 0); + + bool success = false; + + try { + try { + try { + mergeInit(_merge); + + if (infoStream != NULL) + message("now merge\n merge=" + _merge->segString(directory) + "\n index=" + segString()); + + mergeMiddle(_merge); + success = true; + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_MergeAborted ) throw e; + _merge->setException(e); + addMergeException(_merge); + // We can ignore this exception, unless the merge + // involves segments from external directories, in + // which case we must throw it so, for example, the + // rollbackTransaction code in addIndexes* is + // executed. + if (_merge->isExternal) + throw e; + } + } _CLFINALLY ( + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + try { + + mergeFinish(_merge); + + if (!success) { + if (infoStream != NULL) + message(string("hit exception during merge")); + addMergeException(_merge); + if (_merge->info != NULL && segmentInfos->indexOf(_merge->info)==-1) + deleter->refresh(_merge->info->name.c_str()); + } + + // This merge (and, generally, any change to the + // segments) may now enable new merges, so we call + // merge policy & update pending merges. + if (success && !_merge->isAborted() && !closed && !closing) + updatePendingMerges(_merge->maxNumSegmentsOptimize, _merge->optimize); + + } _CLFINALLY ( + RunningMergesType::iterator itr = runningMerges->find(_merge); + if ( itr != runningMerges->end() ) runningMerges->remove( itr ); + // Optimize may be waiting on the final optimize + // merge to finish; and finishMerges() may be + // waiting for all merges to finish: + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + ) + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +bool IndexWriter::registerMerge(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_merge->registerDone) + return true; + + const int32_t count = _merge->segments->size(); + bool isExternal = false; + for(int32_t i=0;isegments->info(i); + if (mergingSegments->find(info) != mergingSegments->end()) + return false; + if (segmentInfos->indexOf(info) == -1) + return false; + if (info->dir != directory) + isExternal = true; + } + + pendingMerges->push_back(_merge); + + if (infoStream != NULL) + message( string("add merge to pendingMerges: ") + _merge->segString(directory) + " [total " + Misc::toString((int32_t)pendingMerges->size()) + " pending]"); + + _merge->mergeGen = mergeGen; + _merge->isExternal = isExternal; + + // OK it does not conflict; now record that this merge + // is running (while synchronized) to avoid race + // condition where two conflicting merges from different + // threads, start + for(int32_t i=0;iinsert(mergingSegments->end(),_merge->segments->info(i)); + + // Merge is now registered + _merge->registerDone = true; + return true; +} + +void IndexWriter::mergeInit(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + bool success = false; + try { + _mergeInit(_merge); + success = true; + } _CLFINALLY ( + if (!success) { + mergeFinish(_merge); + RunningMergesType::iterator itr = runningMerges->find(_merge); + if ( itr != runningMerges->end() ) runningMerges->remove(itr); + } + ) +} + +void IndexWriter::_mergeInit(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert (testPoint("startMergeInit")); + + assert (_merge->registerDone); + + if (_merge->info != NULL) + // mergeInit already done + return; + + if (_merge->isAborted()) + return; + + const SegmentInfos* sourceSegments = _merge->segments; + const int32_t end = sourceSegments->size(); + + ensureContiguousMerge(_merge); + + // Check whether this merge will allow us to skip + // merging the doc stores (stored field & vectors). + // This is a very substantial optimization (saves tons + // of IO) that can only be applied with + // autoCommit=false. + + Directory* lastDir = directory; + string lastDocStoreSegment; + int32_t next = -1; + + bool mergeDocStores = false; + bool doFlushDocStore = false; + const string currentDocStoreSegment = docWriter->getDocStoreSegment(); + + // Test each segment to be merged: check if we need to + // flush/merge doc stores + for (int32_t i = 0; i < end; i++) { + SegmentInfo* si = sourceSegments->info(i); + + // If it has deletions we must merge the doc stores + if (si->hasDeletions()) + mergeDocStores = true; + + // If it has its own (private) doc stores we must + // merge the doc stores + if (-1 == si->getDocStoreOffset()) + mergeDocStores = true; + + // If it has a different doc store segment than + // previous segments, we must merge the doc stores + string docStoreSegment = si->getDocStoreSegment(); + if (docStoreSegment.empty()) + mergeDocStores = true; + else if (lastDocStoreSegment.empty()) + lastDocStoreSegment = docStoreSegment; + else if (!lastDocStoreSegment.compare(docStoreSegment)==0 ) + mergeDocStores = true; + + // Segments' docScoreOffsets must be in-order, + // contiguous. For the default merge policy now + // this will always be the case but for an arbitrary + // merge policy this may not be the case + if (-1 == next) + next = si->getDocStoreOffset() + si->docCount; + else if (next != si->getDocStoreOffset()) + mergeDocStores = true; + else + next = si->getDocStoreOffset() + si->docCount; + + // If the segment comes from a different directory + // we must merge + if (lastDir != si->dir) + mergeDocStores = true; + + // If the segment is referencing the current "live" + // doc store outputs then we must merge + if (si->getDocStoreOffset() != -1 && !currentDocStoreSegment.empty() && si->getDocStoreSegment().compare(currentDocStoreSegment)==0 ) + doFlushDocStore = true; + } + + int32_t docStoreOffset; + string docStoreSegment; + bool docStoreIsCompoundFile; + + if (mergeDocStores) { + docStoreOffset = -1; + docStoreSegment.clear(); + docStoreIsCompoundFile = false; + } else { + SegmentInfo* si = sourceSegments->info(0); + docStoreOffset = si->getDocStoreOffset(); + docStoreSegment = si->getDocStoreSegment(); + docStoreIsCompoundFile = si->getDocStoreIsCompoundFile(); + } + + if (mergeDocStores && doFlushDocStore) { + // SegmentMerger intends to merge the doc stores + // (stored fields, vectors), and at least one of the + // segments to be merged refers to the currently + // live doc stores. + + // TODO: if we know we are about to merge away these + // newly flushed doc store files then we should not + // make compound file out of them... + if (infoStream != NULL) + message(string("flush at merge")); + flush(false, true); + } + + // We must take a full copy at this point so that we can + // properly merge deletes in commitMerge() + _merge->segmentsClone = _merge->segments->clone(); + + for (int32_t i = 0; i < end; i++) { + SegmentInfo* si = _merge->segmentsClone->info(i); + + // IncRef all files for this segment info to make sure + // they are not removed while we are trying to merge-> + if (si->dir == directory) + deleter->incRef(si->files()); + } + + _merge->increfDone = true; + + _merge->mergeDocStores = mergeDocStores; + + // Bind a _CLNEW segment name here so even with + // ConcurrentMergePolicy we keep deterministic segment + // names. + _merge->info = _CLNEW SegmentInfo(newSegmentName().c_str(), 0, + directory, false, true, + docStoreOffset, + docStoreSegment.c_str(), + docStoreIsCompoundFile); + // Also enroll the merged segment into mergingSegments; + // this prevents it from getting selected for a merge + // after our merge is done but while we are building the + // CFS: + mergingSegments->insert(_merge->info); +} + +void IndexWriter::mergeFinish(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_merge->increfDone) + decrefMergeSegments(_merge); + + assert (_merge->registerDone); + + const SegmentInfos* sourceSegments = _merge->segments; + const int32_t end = sourceSegments->size(); + for(int32_t i=0;ifind(sourceSegments->info(i)); + if ( itr != mergingSegments->end() ) mergingSegments->remove(itr); + } + MergingSegmentsType::iterator itr = mergingSegments->find(_merge->info); + if ( itr != mergingSegments->end() ) mergingSegments->remove(itr); + _merge->registerDone = false; +} + +int32_t IndexWriter::mergeMiddle(MergePolicy::OneMerge* _merge) { + + _merge->checkAborted(directory); + + const string mergedName = _merge->info->name; + + int32_t mergedDocCount = 0; + + const SegmentInfos* sourceSegments = _merge->segments; + SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const int32_t numSegments = sourceSegments->size(); + + if (infoStream != NULL) + message("merging " + _merge->segString(directory)); + + SegmentMerger merger (this, mergedName.c_str(), _merge) ; + + // This is try/finally to make sure merger's readers are + // closed: + + bool success = false; + + try { + int32_t totDocCount = 0; + + for (int32_t i = 0; i < numSegments; i++) { + SegmentInfo* si = sourceSegmentsClone->info(i); + IndexReader* reader = SegmentReader::get(si, MERGE_READ_BUFFER_SIZE, _merge->mergeDocStores); // no need to set deleter (yet) + merger.add(reader); + totDocCount += reader->numDocs(); + } + if (infoStream != NULL) { + message(string("merge: total ")+ Misc::toString(totDocCount)+" docs"); + } + + _merge->checkAborted(directory); + + mergedDocCount = _merge->info->docCount = merger.merge(_merge->mergeDocStores); + + assert (mergedDocCount == totDocCount); + + success = true; + + } _CLFINALLY ( + // close readers before we attempt to delete + // now-obsolete segments + merger.closeReaders(); + if (!success) { + if (infoStream != NULL) + message("hit exception during merge; now refresh deleter on segment " + mergedName); + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + addMergeException(_merge); + deleter->refresh(mergedName.c_str()); + } + } + ) + + if (!commitMerge(_merge)) + // commitMerge will return false if this merge was aborted + return 0; + + if (_merge->useCompoundFile) { + + success = false; + bool skip = false; + const string compoundFileName = mergedName + "." + IndexFileNames::COMPOUND_FILE_EXTENSION; + + try { + try { + merger.createCompoundFile(compoundFileName.c_str()); + success = true; + } catch (CLuceneError& ioe) { + if ( ioe.number() != CL_ERR_IO ) throw ioe; + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (segmentInfos->indexOf(_merge->info) == -1) { + // If another merge kicked in and merged our + // _CLNEW segment away while we were trying to + // build the compound file, we can hit a + // FileNotFoundException and possibly + // IOException over NFS. We can tell this has + // happened because our SegmentInfo is no + // longer in the segments; if this has + // happened it is safe to ignore the exception + // & skip finishing/committing our compound + // file creating. + if (infoStream != NULL) + message("hit exception creating compound file; ignoring it because our info (segment " + _merge->info->name + ") has been merged away"); + skip = true; + } else + throw ioe; + } + } + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception creating compound file during merge: skip=") + Misc::toString(skip)); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (!skip) + addMergeException(_merge); + deleter->deleteFile(compoundFileName.c_str()); + } + } + ) + + if (!skip) { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (skip || segmentInfos->indexOf(_merge->info) == -1 || _merge->isAborted()) { + // Our segment (committed in non-compound + // format) got merged away while we were + // building the compound format. + deleter->deleteFile(compoundFileName.c_str()); + } else { + success = false; + try { + _merge->info->setUseCompoundFile(true); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception checkpointing compound file during merge")); + + // Must rollback: + addMergeException(_merge); + _merge->info->setUseCompoundFile(false); + deletePartialSegmentsFile(); + deleter->deleteFile(compoundFileName.c_str()); + } + ) + + // Give deleter a chance to remove files now. + deleter->checkpoint(segmentInfos, autoCommit); + } + } + } + } + + return mergedDocCount; +} + +void IndexWriter::addMergeException(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if ( mergeGen == _merge->mergeGen ){ + MergeExceptionsType::iterator itr = mergeExceptions->begin(); + while ( itr != mergeExceptions->end() ){ + MergePolicy::OneMerge* x = *itr; + if ( x == _merge ){ + return; + } + } + } + mergeExceptions->push_back(_merge); +} + +void IndexWriter::deletePartialSegmentsFile() { + if (segmentInfos->getLastGeneration() != segmentInfos->getGeneration()) { + string segmentFileName = IndexFileNames::fileNameFromGeneration(IndexFileNames::SEGMENTS, + "", + segmentInfos->getGeneration()); + if (infoStream != NULL) + message("now delete partial segments file \"" + segmentFileName + "\""); + + deleter->deleteFile(segmentFileName.c_str()); + } +} + + +void IndexWriter::applyDeletes(bool flushedNewSegment) { + const DocumentsWriter::TermNumMapType& bufferedDeleteTerms = docWriter->getBufferedDeleteTerms(); + const vector* bufferedDeleteDocIDs = docWriter->getBufferedDeleteDocIDs(); + + if (infoStream != NULL) + message( string("flush ") + Misc::toString(docWriter->getNumBufferedDeleteTerms()) + + " buffered deleted terms and " + Misc::toString((int32_t)bufferedDeleteDocIDs->size()) + + " deleted docIDs on " + Misc::toString((int32_t)segmentInfos->size()) + " segments."); + + if (flushedNewSegment) { + IndexReader* reader = NULL; + try { + // Open readers w/o opening the stored fields / + // vectors because these files may still be held + // open for writing by docWriter + reader = SegmentReader::get(segmentInfos->info(segmentInfos->size() - 1), false); + + // Apply delete terms to the segment just flushed from ram + // apply appropriately so that a delete term is only applied to + // the documents buffered before it, not those buffered after it. + _internal->applyDeletesSelectively(bufferedDeleteTerms, *bufferedDeleteDocIDs, reader); + } _CLFINALLY ( + if (reader != NULL) { + try { + reader->doCommit(); + } _CLFINALLY ( + reader->doClose(); + _CLLDELETE(reader); + ) + } + ) + } + + int32_t infosEnd = segmentInfos->size(); + if (flushedNewSegment) { + infosEnd--; + } + + for (int32_t i = 0; i < infosEnd; i++) { + IndexReader* reader = NULL; + try { + reader = SegmentReader::get(segmentInfos->info(i), false); + + // Apply delete terms to disk segments + // except the one just flushed from ram. + _internal->applyDeletes(bufferedDeleteTerms, reader); + } _CLFINALLY ( + if (reader != NULL) { + try { + reader->doCommit(); + } _CLFINALLY ( + reader->doClose(); + ) + } + ) + } + + // Clean up bufferedDeleteTerms. + docWriter->clearBufferedDeletes(); +} + + +int32_t IndexWriter::getBufferedDeleteTermsSize() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getBufferedDeleteTerms().size(); +} + +int32_t IndexWriter::getNumBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getNumBufferedDeleteTerms(); +} + +void IndexWriter::Internal::applyDeletesSelectively(const DocumentsWriter::TermNumMapType& deleteTerms, + const vector& deleteIds, IndexReader* reader) +{ + DocumentsWriter::TermNumMapType::const_iterator iter = deleteTerms.begin(); + while (iter != deleteTerms.end() ) { + Term* term = iter->first; + TermDocs* docs = reader->termDocs(term); + if (docs != NULL) { + int32_t num = iter->second->getNum(); + try { + while (docs->next()) { + int32_t doc = docs->doc(); + if (doc >= num) { + break; + } + reader->deleteDocument(doc); + } + } _CLFINALLY ( + docs->close(); + _CLDELETE(docs); + ) + } + + iter++; + } + + if (deleteIds.size() > 0) { + vector::const_iterator iter2 = deleteIds.begin(); + while (iter2 != deleteIds.end()){ + reader->deleteDocument(*iter2); + ++iter2; + } + } +} + +void IndexWriter::Internal::applyDeletes(const DocumentsWriter::TermNumMapType& deleteTerms, IndexReader* reader) +{ + DocumentsWriter::TermNumMapType::const_iterator iter = deleteTerms.begin(); + while (iter != deleteTerms.end()) { + reader->deleteDocuments(iter->first); + iter++; + } +} + +SegmentInfo* IndexWriter::newestSegment() { + return segmentInfos->info(segmentInfos->size()-1); +} + +string IndexWriter::segString() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + std::string buffer; + for(int32_t i = 0; i < segmentInfos->size(); i++) { + if (i > 0) { + buffer+= " "; + } + buffer+= segmentInfos->info(i)->segString(directory); + } + + return buffer; +} + +bool IndexWriter::testPoint(const char* name) { + return true; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/IndexWriter.h clucene-core-2.3.3.4/src/core/CLucene/index/IndexWriter.h --- clucene-core-0.9.21b/src/core/CLucene/index/IndexWriter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/IndexWriter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1298 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_IndexWriter_ +#define _lucene_index_IndexWriter_ + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/Array.h" +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(store,Lock) +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(document,Document) + +#include "MergePolicy.h" +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(index) +class SegmentInfo; +class SegmentInfos; +class MergePolicy; +class IndexReader; +class SegmentReader; +class MergeScheduler; +class DocumentsWriter; +class IndexFileDeleter; +class LogMergePolicy; +class IndexDeletionPolicy; +class Term; + +/** + An IndexWriter creates and maintains an index. + +

The create argument to the + constructor + determines whether a new index is created, or whether an existing index is + opened. Note that you + can open an index with create=true even while readers are + using the index. The old readers will continue to search + the "point in time" snapshot they had opened, and won't + see the newly created index until they re-open. There are + also constructors + with no create argument which + will create a new index if there is not already an index at the + provided path and otherwise open the existing index.

+ +

In either case, documents are added with addDocument + and removed with deleteDocuments. + A document can be updated with updateDocument + (which just deletes and then adds the entire document). + When finished adding, deleting and updating documents, close should be called.

+ +

These changes are buffered in memory and periodically + flushed to the {@link Directory} (during the above method + calls). A flush is triggered when there are enough + buffered deletes (see {@link #setMaxBufferedDeleteTerms}) + or enough added documents since the last flush, whichever + is sooner. For the added documents, flushing is triggered + either by RAM usage of the documents (see {@link + #setRAMBufferSizeMB}) or the number of added documents. + The default is to flush when RAM usage hits 16 MB. For + best indexing speed you should flush by RAM usage with a + large RAM buffer. You can also force a flush by calling + {@link #flush}. When a flush occurs, both pending deletes + and added documents are flushed to the index. A flush may + also trigger one or more segment merges which by default + run with a background thread so as not to block the + addDocument calls (see below + for changing the {@link MergeScheduler}).

+ + +

The optional autoCommit argument to the + constructors + controls visibility of the changes to {@link IndexReader} instances reading the same index. + When this is false, changes are not + visible until {@link #close()} is called. + Note that changes will still be flushed to the + {@link org.apache.lucene.store.Directory} as new files, + but are not committed (no new segments_N file + is written referencing the new files) until {@link #close} is + called. If something goes terribly wrong (for example the + JVM crashes) before {@link #close()}, then + the index will reflect none of the changes made (it will + remain in its starting state). + You can also call {@link #abort()}, which closes the writer without committing any + changes, and removes any index + files that had been flushed but are now unreferenced. + This mode is useful for preventing readers from refreshing + at a bad time (for example after you've done all your + deletes but before you've done your adds). + It can also be used to implement simple single-writer + transactional semantics ("all or none").

+ +

When autoCommit is true then + every flush is also a commit ({@link IndexReader} + instances will see each flush as changes to the index). + This is the default, to match the behavior before 2.2. + When running in this mode, be careful not to refresh your + readers while optimize or segment merges are taking place + as this can tie up substantial disk space.

+ +

Regardless of autoCommit, an {@link + IndexReader} or {@link org.apache.lucene.search.IndexSearcher} will only see the + index as of the "point in time" that it was opened. Any + changes committed to the index after the reader was opened + are not visible until the reader is re-opened.

+ +

If an index will not have more documents added for a while and optimal search + performance is desired, then the optimize + method should be called before the index is closed.

+ +

Opening an IndexWriter creates a lock file for the directory in use. Trying to open + another IndexWriter on the same directory will lead to a + {@link LockObtainFailedException}. The {@link LockObtainFailedException} + is also thrown if an IndexReader on the same directory is used to delete documents + from the index.

+ + +

Expert: IndexWriter allows an optional + {@link IndexDeletionPolicy} implementation to be + specified. You can use this to control when prior commits + are deleted from the index. The default policy is {@link + KeepOnlyLastCommitDeletionPolicy} which removes all prior + commits as soon as a new commit is done (this matches + behavior before 2.2). Creating your own policy can allow + you to explicitly keep previous "point in time" commits + alive in the index for some time, to allow readers to + refresh to the new commit without having the old commit + deleted out from under them. This is necessary on + filesystems like NFS that do not support "delete on last + close" semantics, which Lucene's "point in time" search + normally relies on.

+ +

Expert: + IndexWriter allows you to separately change + the {@link MergePolicy} and the {@link MergeScheduler}. + The {@link MergePolicy} is invoked whenever there are + changes to the segments in the index. Its role is to + select which merges to do, if any, and return a {@link + MergePolicy.MergeSpecification} describing the merges. It + also selects merges to do for optimize(). (The default is + {@link LogByteSizeMergePolicy}. Then, the {@link + MergeScheduler} is invoked with the requested merges and + it decides when and how to run the merges. The default is + {@link ConcurrentMergeScheduler}.

+ */ +/* + * Clarification: Check Points (and commits) + * Being able to set autoCommit=false allows IndexWriter to flush and + * write new index files to the directory without writing a new segments_N + * file which references these new files. It also means that the state of + * the in memory SegmentInfos object is different than the most recent + * segments_N file written to the directory. + * + * Each time the SegmentInfos is changed, and matches the (possibly + * modified) directory files, we have a new "check point". + * If the modified/new SegmentInfos is written to disk - as a new + * (generation of) segments_N file - this check point is also an + * IndexCommitPoint. + * + * With autoCommit=true, every checkPoint is also a CommitPoint. + * With autoCommit=false, some checkPoints may not be commits. + * + * A new checkpoint always replaces the previous checkpoint and + * becomes the new "front" of the index. This allows the IndexFileDeleter + * to delete files that are referenced only by stale checkpoints. + * (files that were created since the last commit, but are no longer + * referenced by the "front" of the index). For this, IndexFileDeleter + * keeps track of the last non commit checkpoint. + */ +class CLUCENE_EXPORT IndexWriter:LUCENE_BASE { + bool isOpen; //indicates if the writers is open - this way close can be called multiple times + + // how to analyze text + CL_NS(analysis)::Analyzer* analyzer; + + CL_NS(search)::Similarity* similarity; // how to normalize + + bool closeDir; + bool closed; + bool closing; + + // Holds all SegmentInfo instances currently involved in + // merges + typedef CL_NS(util)::CLHashSet > MergingSegmentsType; + MergingSegmentsType* mergingSegments; + MergePolicy* mergePolicy; + MergeScheduler* mergeScheduler; + + typedef CL_NS(util)::CLLinkedList > PendingMergesType; + PendingMergesType* pendingMerges; + + typedef CL_NS(util)::CLHashSet, + CL_NS(util)::Deletor::Object > RunningMergesType; + RunningMergesType* runningMerges; + + typedef CL_NS(util)::CLArrayList MergeExceptionsType; + MergeExceptionsType* mergeExceptions; + int64_t mergeGen; + bool stopMerges; + + + /** If non-null, information about merges will be printed to this. + */ + std::ostream* infoStream; + static std::ostream* defaultInfoStream; + + + + bool commitPending; // true if segmentInfos has changes not yet committed + SegmentInfos* rollbackSegmentInfos; // segmentInfos we will fallback to if the commit fails + + SegmentInfos* localRollbackSegmentInfos; // segmentInfos we will fallback to if the commit fails + bool localAutoCommit; // saved autoCommit during local transaction + bool autoCommit; // false if we should commit only on close + + DocumentsWriter* docWriter; + IndexFileDeleter* deleter; + + typedef std::vector SegmentsToOptimizeType; + SegmentsToOptimizeType* segmentsToOptimize; // used by optimize to note those needing optimization + + + CL_NS(store)::LuceneLock* writeLock; + + void init(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit); + void init(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, bool create, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit); + void deinit(bool releaseWriteLock = true) throw(); + + // where this index resides + CL_NS(store)::Directory* directory; + bool bOwnsDirectory; + + + int32_t getSegmentsCounter(); + int32_t maxFieldLength; + int32_t mergeFactor; + int32_t minMergeDocs; + int32_t maxMergeDocs; + int32_t termIndexInterval; + + int64_t writeLockTimeout; + int64_t commitLockTimeout; + + // The normal read buffer size defaults to 1024, but + // increasing this during merging seems to yield + // performance gains. However we don't want to increase + // it too much because there are quite a few + // BufferedIndexInputs created during merging. See + // LUCENE-888 for details. + static const int32_t MERGE_READ_BUFFER_SIZE; + + // Used for printing messages + STATIC_DEFINE_MUTEX(MESSAGE_ID_LOCK) + static int32_t MESSAGE_ID; + int32_t messageID; + mutable bool hitOOM; + +public: + DEFINE_MUTEX(THIS_LOCK) + DEFINE_CONDITION(THIS_WAIT_CONDITION) + + // Release the write lock, if needed. + SegmentInfos* segmentInfos; + + // Release the write lock, if needed. + virtual ~IndexWriter(); + + /** + * The Java implementation of Lucene silently truncates any tokenized + * field if the number of tokens exceeds a certain threshold. Although + * that threshold is adjustable, it is easy for the client programmer + * to be unaware that such a threshold exists, and to become its + * unwitting victim. + * CLucene implements a less insidious truncation policy. Up to + * DEFAULT_MAX_FIELD_LENGTH tokens, CLucene behaves just as JLucene + * does. If the number of tokens exceeds that threshold without any + * indication of a truncation preference by the client programmer, + * CLucene raises an exception, prompting the client programmer to + * explicitly set a truncation policy by adjusting maxFieldLength. + */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_FIELD_LENGTH = 10000); + LUCENE_STATIC_CONSTANT(int32_t, FIELD_TRUNC_POLICY__WARN = -1); + + /** + * Returns the maximum number of terms that will be + * indexed for a single field in a document. + * @see #setMaxFieldLength + */ + int32_t getMaxFieldLength(); + /** + * The maximum number of terms that will be indexed for a single field in a + * document. This limits the amount of memory required for indexing, so that + * collections with very large files will not crash the indexing process by + * running out of memory. This setting refers to the number of running terms, + * not to the number of different terms.

+ * Note: see {@link DEFAULT_MAX_FIELD_LENGTH} for an important + * note regarding field lengths. + * @see #DEFAULT_MAX_FIELD_LENGTH + */ + void setMaxFieldLength(int32_t val); + + /** Determines the minimal number of documents required before the buffered + * in-memory documents are merging and a new Segment is created. + * Since Documents are merged in a {@link RAMDirectory}, + * large value gives faster indexing. At the same time, mergeFactor limits + * the number of files open in a FSDirectory. + * + *

The default value is DEFAULT_MAX_BUFFERED_DOCS.*/ + void setMaxBufferedDocs(int32_t val); + /** + * @see #setMaxBufferedDocs + */ + int32_t getMaxBufferedDocs(); + + /** + * Default value for the write lock timeout (1,000). + * @see #setDefaultWriteLockTimeout + */ + static int64_t WRITE_LOCK_TIMEOUT; + /** + * Sets the maximum time to wait for a write lock (in milliseconds). + */ + void setWriteLockTimeout(int64_t writeLockTimeout); + /** + * @see #setWriteLockTimeout + */ + int64_t getWriteLockTimeout(); + + /** + * Sets the maximum time to wait for a commit lock (in milliseconds). + */ + void setCommitLockTimeout(int64_t commitLockTimeout); + /** + * @see #setCommitLockTimeout + */ + int64_t getCommitLockTimeout(); + + /** + * Name of the write lock in the index. + */ + static const char* WRITE_LOCK_NAME; //"write.lock"; + + /** + * @deprecated + * @see LogMergePolicy#DEFAULT_MERGE_FACTOR + */ + static const int32_t DEFAULT_MERGE_FACTOR ; + + /** + * Value to denote a flush trigger is disabled + */ + static const int32_t DISABLE_AUTO_FLUSH; + + /** + * Disabled by default (because IndexWriter flushes by RAM usage + * by default). Change using {@link #setMaxBufferedDocs(int)}. + */ + static const int32_t DEFAULT_MAX_BUFFERED_DOCS; + + /** + * Default value is 16 MB (which means flush when buffered + * docs consume 16 MB RAM). Change using {@link #setRAMBufferSizeMB}. + */ + static const float_t DEFAULT_RAM_BUFFER_SIZE_MB; + + /** + * Disabled by default (because IndexWriter flushes by RAM usage + * by default). Change using {@link #setMaxBufferedDeleteTerms(int)}. + */ + static const int32_t DEFAULT_MAX_BUFFERED_DELETE_TERMS; + + /** + * @deprecated + * @see LogDocMergePolicy#DEFAULT_MAX_MERGE_DOCS + */ + static const int32_t DEFAULT_MAX_MERGE_DOCS; + + /** + * Absolute hard maximum length for a term. If a term + * arrives from the analyzer longer than this length, it + * is skipped and a message is printed to infoStream, if + * set (see {@link #setInfoStream}). + */ + static const int32_t MAX_TERM_LENGTH; + + + /* Determines how often segment indices are merged by addDocument(). With + * smaller values, less RAM is used while indexing, and searches on + * unoptimized indices are faster, but indexing speed is slower. With larger + * values more RAM is used while indexing and searches on unoptimized indices + * are slower, but indexing is faster. Thus larger values (> 10) are best + * for batched index creation, and smaller values (< 10) for indices that are + * interactively maintained. + * + *

This must never be less than 2. The default value is 10. + */ + int32_t getMergeFactor() const; + void setMergeFactor(int32_t val); + + + /** Expert: The fraction of terms in the "dictionary" which should be stored + * in RAM. Smaller values use more memory, but make searching slightly + * faster, while larger values use less memory and make searching slightly + * slower. Searching is typically not dominated by dictionary lookup, so + * tweaking this is rarely useful. + */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_TERM_INDEX_INTERVAL = 128); + /** Expert: Set the interval between indexed terms. Large values cause less + * memory to be used by IndexReader, but slow random-access to terms. Small + * values cause more memory to be used by an IndexReader, and speed + * random-access to terms. + * + * This parameter determines the amount of computation required per query + * term, regardless of the number of documents that contain that term. In + * particular, it is the maximum number of other terms that must be + * scanned before a term is located and its frequency and position information + * may be processed. In a large index with user-entered query terms, query + * processing time is likely to be dominated not by term lookup but rather + * by the processing of frequency and positional data. In a small index + * or when many uncommon query terms are generated (e.g., by wildcard + * queries) term lookup may become a dominant cost. + * + * In particular, numUniqueTerms/interval terms are read into + * memory by an IndexReader, and, on average, interval/2 terms + * must be scanned for each random term access. + * + * @see #DEFAULT_TERM_INDEX_INTERVAL + */ + void setTermIndexInterval(int32_t interval); + /** Expert: Return the interval between indexed terms. + * + * @see #setTermIndexInterval(int) + */ + int32_t getTermIndexInterval(); + + /**Determines the largest number of documents ever merged by addDocument(). + * Small values (e.g., less than 10,000) are best for interactive indexing, + * as this limits the length of pauses while indexing to a few seconds. + * Larger values are best for batched indexing and speedier searches. + * + *

The default value is {@link Integer#MAX_VALUE}. + */ + int32_t getMaxMergeDocs() const; + void setMaxMergeDocs(int32_t val); + + /** + * Constructs an IndexWriter for the index in path. + * Text will be analyzed with a. If create + * is true, then a new, empty index will be created in + * path, replacing the index already there, if any. + * + * @param path the path to the index directory + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(const char* path, CL_NS(analysis)::Analyzer* a, const bool create); + + /** + * Constructs an IndexWriter for the index in d. + * Text will be analyzed with a. If create + * is true, then a new, empty index will be created in + * d, replacing the index already there, if any. + * + * @param d the index directory + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, const bool create, const bool closeDirOnShutdown=false); + + /** + * Expert: constructs an IndexWriter with a custom {@link + * IndexDeletionPolicy}, for the index in d, + * first creating it if it does not already exist. Text + * will be analyzed with a. + * + * @param d the index directory + * @param autoCommit see above + * @param a the analyzer to use + * @param deletionPolicy see above + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be + * read/written to or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, const bool autoCommit, CL_NS(analysis)::Analyzer* a, IndexDeletionPolicy* deletionPolicy = NULL, const bool closeDirOnShutdown=false); + + /** + * Expert: constructs an IndexWriter with a custom {@link + * IndexDeletionPolicy}, for the index in d. + * Text will be analyzed with a. If + * create is true, then a new, empty index + * will be created in d, replacing the index + * already there, if any. + * + * @param d the index directory + * @param autoCommit see above + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @param deletionPolicy see above + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, const bool autoCommit, CL_NS(analysis)::Analyzer* a, const bool create, IndexDeletionPolicy* deletionPolicy = NULL, const bool closeDirOnShutdown=false); + + /**Returns the number of documents currently in this index. + * synchronized + */ + int32_t docCount(); + + + /** Returns the directory this index resides in. */ + CL_NS(store)::Directory* getDirectory(); + + /** Get the current setting of whether to use the compound file format. + * Note that this just returns the value you set with setUseCompoundFile(boolean) + * or the default. You cannot use this to query the status of an existing index. + * @see #setUseCompoundFile(boolean) + */ + bool getUseCompoundFile(); + + /** Setting to turn on usage of a compound file. When on, multiple files + * for each segment are merged into a single file once the segment creation + * is finished. This is done regardless of what directory is in use. + */ + void setUseCompoundFile(bool value); + + + /** Expert: Set the Similarity implementation used by this IndexWriter. + * + * @see Similarity#setDefault(Similarity) + */ + void setSimilarity(CL_NS(search)::Similarity* similarity); + + /** Expert: Return the Similarity implementation used by this IndexWriter. + * + *

This defaults to the current value of {@link Similarity#getDefault()}. + */ + CL_NS(search)::Similarity* getSimilarity(); + + /** Returns the analyzer used by this index. */ + CL_NS(analysis)::Analyzer* getAnalyzer(); + + // synchronized + std::string newSegmentName(); + + /** + * Prints a message to the infoStream (if non-null), + * prefixed with the identifying information for this + * writer and the thread that's calling it. + */ + void message(std::string message); + + /** + * Returns the current default infoStream for newly + * instantiated IndexWriters. + * @see #setDefaultInfoStream + */ + static std::ostream* getDefaultInfoStream(); + + /** + * Returns the current infoStream in use by this writer. + * @see #setInfoStream + */ + std::ostream* getInfoStream(); + + /** + * Returns the number of buffered deleted terms that will + * trigger a flush if enabled. + * @see #setMaxBufferedDeleteTerms + */ + int32_t getMaxBufferedDeleteTerms(); + + /** + * Expert: returns the current MergePolicy in use by this writer. + * @see #setMergePolicy + */ + MergePolicy* getMergePolicy(); + + /** + * Expert: returns the current MergePolicy in use by this + * writer. + * @see #setMergePolicy + */ + MergeScheduler* getMergeScheduler(); + + /** + * Returns the value set by {@link #setRAMBufferSizeMB} if enabled. + */ + float_t getRAMBufferSizeMB(); + + /** If non-null, this will be the default infoStream used + * by a newly instantiated IndexWriter. + * @see #setInfoStream + */ + static void setDefaultInfoStream(std::ostream* infoStream);\ + + /** If non-null, information about merges, deletes and a + * message when maxFieldLength is reached will be printed + * to this. + */ + void setInfoStream(std::ostream* infoStream); + + /** + *

Determines the minimal number of delete terms required before the buffered + * in-memory delete terms are applied and flushed. If there are documents + * buffered in memory at the time, they are merged and a new segment is + * created.

+ + *

Disabled by default (writer flushes by RAM usage).

+ * + * @throws IllegalArgumentException if maxBufferedDeleteTerms + * is enabled but smaller than 1 + * @see #setRAMBufferSizeMB + */ + void setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms); + + /** + * Expert: set the merge policy used by this writer. + */ + void setMergePolicy(MergePolicy* mp); + + /** + * Expert: set the merge scheduler used by this writer. + */ + void setMergeScheduler(MergeScheduler* mergeScheduler); + + /** Determines the amount of RAM that may be used for + * buffering added documents before they are flushed as a + * new Segment. Generally for faster indexing performance + * it's best to flush by RAM usage instead of document + * count and use as large a RAM buffer as you can. + * + *

When this is set, the writer will flush whenever + * buffered documents use this much RAM. Pass in {@link + * #DISABLE_AUTO_FLUSH} to prevent triggering a flush due + * to RAM usage. Note that if flushing by document count + * is also enabled, then the flush will be triggered by + * whichever comes first.

+ * + *

The default value is {@link #DEFAULT_RAM_BUFFER_SIZE_MB}.

+ * + * @throws IllegalArgumentException if ramBufferSize is + * enabled but non-positive, or it disables ramBufferSize + * when maxBufferedDocs is already disabled + */ + void setRAMBufferSizeMB(float_t mb); + + + /** Expert: the {@link MergeScheduler} calls this method + * to retrieve the next merge requested by the + * MergePolicy */ + MergePolicy::OneMerge* getNextMerge(); + + /** + * Merges the indicated segments, replacing them in the stack with a + * single segment. + */ + void merge(MergePolicy::OneMerge* merge); + + /** + * Deletes the document(s) containing term. + * @param term the term to identify the documents to be deleted + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void deleteDocuments(Term* term); + + /** + * Deletes the document(s) containing any of the + * terms. All deletes are flushed at the same time. + * @param terms array of terms to identify the documents + * to be deleted + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void deleteDocuments(const CL_NS(util)::ArrayBase* terms); + + /** + * Updates a document by first deleting the document(s) + * containing term and then adding the new + * document. The delete and then add are atomic as seen + * by a reader on the same index (flush may happen only after + * the add). + * @param term the term to identify the document(s) to be + * deleted + * @param doc the document to be added + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void updateDocument(Term* term, CL_NS(document)::Document* doc); + + /** + * Updates a document by first deleting the document(s) + * containing term and then adding the new + * document. The delete and then add are atomic as seen + * by a reader on the same index (flush may happen only after + * the add). + * @param term the term to identify the document(s) to be + * deleted + * @param doc the document to be added + * @param analyzer the analyzer to use when analyzing the document + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void updateDocument(Term* term, CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + /** + * Returns default write lock timeout for newly + * instantiated IndexWriters. + * @see #setDefaultWriteLockTimeout + */ + int64_t getDefaultWriteLockTimeout(); + + /** + * Sets the default (for any instance of IndexWriter) maximum time to wait for a write lock (in + * milliseconds). + */ + void setDefaultWriteLockTimeout(int64_t writeLockTimeout); + + std::string segString(); + + /** + * Closes the index with or without waiting for currently + * running merges to finish. This is only meaningful when + * using a MergeScheduler that runs merges in background + * threads. + * @param waitForMerges if true, this call will block + * until all merges complete; else, it will ask all + * running merges to abort, wait until those merges have + * finished (which should be at most a few seconds), and + * then return. + * + *

If an Exception is hit during close, eg due to disk + * full or some other reason, then both the on-disk index + * and the internal state of the IndexWriter instance will + * be consistent. However, the close will not be complete + * even though part of it (flushing buffered documents) + * may have succeeded, so the write lock will still be + * held.

+ * + *

If you can correct the underlying cause (eg free up + * some disk space) then you can call close() again. + * Failing that, if you want to force the write lock to be + * released (dangerous, because you may then lose buffered + * docs in the IndexWriter instance) then you can do + * something like this:

+ * + *
+   * try {
+   *   writer.close();
+   * } finally {
+   *   if (IndexReader.isLocked(directory)) {
+   *     IndexReader.unlock(directory);
+   *   }
+   * }
+   * 
+ * + * after which, you must be certain not to use the writer + * instance anymore.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void close(bool waitForMerges=true); + + /** + * Requests an "optimize" operation on an index, priming the index + * for the fastest available search. Traditionally this has meant + * merging all segments into a single segment as is done in the + * default merge policy, but individaul merge policies may implement + * optimize in different ways. + * + * @see LogMergePolicy#findMergesForOptimize + * + *

It is recommended that this method be called upon completion of indexing. In + * environments with frequent updates, optimize is best done during low volume times, if at all. + * + *

+ *

See http://www.gossamer-threads.com/lists/lucene/java-dev/47895 for more discussion.

+ * + *

Note that this can require substantial temporary free + * space in the Directory (see LUCENE-764 + * for details):

+ * + *
    + *
  • + * + *

    If no readers/searchers are open against the index, + * then free space required is up to 1X the total size of + * the starting index. For example, if the starting + * index is 10 GB, then you must have up to 10 GB of free + * space before calling optimize.

    + * + *
  • + * + *

    If readers/searchers are using the index, then free + * space required is up to 2X the size of the starting + * index. This is because in addition to the 1X used by + * optimize, the original 1X of the starting index is + * still consuming space in the Directory as the readers + * are holding the segments files open. Even on Unix, + * where it will appear as if the files are gone ("ls" + * won't list them), they still consume storage due to + * "delete on last close" semantics.

    + * + *

    Furthermore, if some but not all readers re-open + * while the optimize is underway, this will cause > 2X + * temporary space to be consumed as those new readers + * will then hold open the partially optimized segments at + * that time. It is best not to re-open readers while + * optimize is running.

    + * + *
+ * + *

The actual temporary usage could be much less than + * these figures (it depends on many factors).

+ * + *

In general, once the optimize completes, the total size of the + * index will be less than the size of the starting index. + * It could be quite a bit smaller (if there were many + * pending deletes) or just slightly smaller.

+ * + *

If an Exception is hit during optimize(), for example + * due to disk full, the index will not be corrupt and no + * documents will have been lost. However, it may have + * been partially optimized (some segments were merged but + * not all), and it's possible that one of the segments in + * the index will be in non-compound format even when + * using compound file format. This will occur when the + * Exception is hit during conversion of the segment into + * compound format.

+ * + *

This call will optimize those segments present in + * the index when the call started. If other threads are + * still adding documents and flushing segments, those + * newly created segments will not be optimized unless you + * call optimize again.

+ * + * @param doWait Specifies whether the call should block + * until the optimize completes. This is only meaningful + * with a {@link MergeScheduler} that is able to run merges + * in background threads. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void optimize(bool doWait=true); + + /** + * Optimize the index down to <= maxNumSegments. If + * maxNumSegments==1 then this is the same as {@link + * #optimize()}. + * @param maxNumSegments maximum number of segments left + * in the index after optimization finishes + * @param doWait Specifies whether the call should block + * until the optimize completes. This is only meaningful + * with a {@link MergeScheduler} that is able to run merges + * in background threads. + */ + void optimize(int32_t maxNumSegments, bool doWait=true); + + /** + * Flush all in-memory buffered updates (adds and deletes) + * to the Directory. + *

Note: if autoCommit=false, flushed data would still + * not be visible to readers, until {@link #close} is called. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void flush(); + + /** + * Adds a document to this index. If the document contains more than + * {@link #setMaxFieldLength(int)} terms for a given field, the remainder are + * discarded (depending on the policy, see #FIELD_TRUNC_POLICY__WARN) + * + *

Note that if an Exception is hit (for example disk full) + * then the index will be consistent, but this document + * may not have been added. Furthermore, it's possible + * the index will have one segment in non-compound format + * even when using compound files (when a merge has + * partially succeeded).

+ * + *

This method periodically flushes pending documents + * to the Directory (every {@link #setMaxBufferedDocs}), + * and also periodically merges segments in the index + * (every {@link #setMergeFactor} flushes). When this + * occurs, the method will take more time to run (possibly + * a long time if the index is large), and will require + * free temporary space in the Directory to do the + * merging.

+ * + *

The amount of free space required when a merge is triggered is + * up to 1X the size of all segments being merged, when no + * readers/searchers are open against the index, and up to 2X the + * size of all segments being merged when readers/searchers are open + * against the index (see {@link #optimize()} for details). The + * sequence of primitive merge operations performed is governed by + * the merge policy. + * + *

Note that each term in the document can be no longer + * than 16383 characters, otherwise an + * IllegalArgumentException will be thrown.

+ * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param analyzer use the provided analyzer instead of the + * value of {@link #getAnalyzer()} + */ + void addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer=NULL); + + + /** + * Expert: asks the mergePolicy whether any merges are + * necessary now and if so, runs the requested merges and + * then iterate (test again if merges are needed) until no + * more merges are returned by the mergePolicy. + * + * Explicit calls to maybeMerge() are usually not + * necessary. The most common case is when merge policy + * parameters have changed. + */ + void maybeMerge(); + + /** + * Close the IndexWriter without committing + * any of the changes that have occurred since it was + * opened. This removes any temporary files that had been + * created, after which the state of the index will be the + * same as it was when this writer was first opened. This + * can only be called when this IndexWriter was opened + * with autoCommit=false. + * @throws IllegalStateException if this is called when + * the writer was opened with autoCommit=true. + * @throws IOException if there is a low-level IO error + */ + void abort(); + + + /** + * Merges all segments from an array of indexes into this index. + *

+ * This is similar to addIndexes(Directory[]). However, no optimize() + * is called either at the beginning or at the end. Instead, merges + * are carried out as necessary. + * + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

+ * This requires this index not be among those to be added, and the + * upper bound* of those segment doc counts not exceed maxMergeDocs. + * + *

See {@link #addIndexes(Directory[])} for + * details on transactional semantics, temporary free + * space required in the Directory, and non-CFS segments + * on an Exception.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void addIndexesNoOptimize(CL_NS(util)::ArrayBase& dirs); + + /** Merges the provided indexes into this index. + *

After this completes, the index is optimized.

+ *

The provided IndexReaders are not closed.

+ + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

See {@link #addIndexes(Directory[])} for + * details on transactional semantics, temporary free + * space required in the Directory, and non-CFS segments + * on an Exception.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + //NOT IMPLEMENTED YET: void addIndexes(CL_NS(util)::ArrayBase& readers); + + /** Merges all segments from an array of indexes into this index. + * + *

This may be used to parallelize batch indexing. A large document + * collection can be broken into sub-collections. Each sub-collection can be + * indexed in parallel, on a different thread, process or machine. The + * complete index can then be created by merging sub-collection indexes + * with this method. + * + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

After this completes, the index is optimized. + * + *

This method is transactional in how Exceptions are + * handled: it does not commit a new segments_N file until + * all indexes are added. This means if an Exception + * occurs (for example disk full), then either no indexes + * will have been added or they all will have been.

+ * + *

If an Exception is hit, it's still possible that all + * indexes were successfully added. This happens when the + * Exception is hit when trying to build a CFS file. In + * this case, one segment in the index will be in non-CFS + * format, even when using compound file format.

+ * + *

Also note that on an Exception, the index may still + * have been partially or fully optimized even though none + * of the input indexes were added.

+ * + *

Note that this requires temporary free space in the + * Directory up to 2X the sum of all input indexes + * (including the starting index). If readers/searchers + * are open against the starting index, then temporary + * free space required will be higher by the size of the + * starting index (see {@link #optimize()} for details). + *

+ * + *

Once this completes, the final size of the index + * will be less than the sum of all input index sizes + * (including the starting index). It could be quite a + * bit smaller (if there were many pending deletes) or + * just slightly smaller.

+ * + *

See LUCENE-702 + * for details.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void addIndexes(CL_NS(util)::ArrayBase& dirs); + + /** Expert: Return the total size of all index files currently cached in memory. + * Useful for size management with flushRamDocs() + */ + int64_t ramSizeInBytes(); + + /** Expert: Return the number of documents whose segments are currently cached in memory. + * Useful when calling flush() + */ + int32_t numRamDocs(); + + /** for testing only */ + virtual bool testPoint(const char* name); +private: + class LockWith2; + class LockWithCFS; + friend class LockWith2; + friend class LockWithCFS; + friend class DocumentsWriter; + + /** Merges all RAM-resident segments. */ + void flushRamSegments(); + + /** Incremental segment merger. */ + void maybeMergeSegments(); + + /** Pops segments off of segmentInfos stack down to minSegment, merges them, + * and pushes the merged index onto the top of the segmentInfos stack. + */ + void mergeSegments(const uint32_t minSegment); + + /** Merges the named range of segments, replacing them in the stack with a + * single segment. */ + void mergeSegments(const uint32_t minSegment, const uint32_t end); + + void deleteFiles(std::vector& files); + void readDeleteableFiles(std::vector& files); + void writeDeleteableFiles(std::vector& files); + + /* + * Some operating systems (e.g. Windows) don't permit a file to be deleted + * while it is opened for read (e.g. by another process or thread). So we + * assume that when a delete fails it is because the file is open in another + * process, and queue the file for subsequent deletion. + */ + void deleteSegments(CL_NS(util)::CLVector* segments); + void deleteFiles(std::vector& files, CL_NS(store)::Directory* directory); + void deleteFiles(std::vector& files, std::vector& deletable); + + /** + * Casts current mergePolicy to LogMergePolicy, and throws + * an exception if the mergePolicy is not a LogMergePolicy. + */ + LogMergePolicy* getLogMergePolicy() const; + + void setMessageID(); + + void closeInternal(bool waitForMerges); + void messageState(); + + /** + * If we are flushing by doc count (not by RAM usage), and + * using LogDocMergePolicy then push maxBufferedDocs down + * as its minMergeDocs, to keep backwards compatibility. + */ + void pushMaxBufferedDocs(); + + void finishMerges(bool waitForMerges); + + /** Tells the docWriter to close its currently open shared + * doc stores (stored fields & vectors files). + * Return value specifices whether new doc store files are compound or not. + */ + bool flushDocStores(); + + //for test purposes +protected: + int32_t getDocCount(int32_t i); + int32_t getNumBufferedDocuments(); + int32_t getSegmentCount(); + int32_t getBufferedDeleteTermsSize(); + int32_t getNumBufferedDeleteTerms(); + virtual SegmentInfo* newestSegment(); + +private: + void waitForClose(); + void deletePartialSegmentsFile(); + + /** Returns true if any merges in pendingMerges or + * runningMerges are optimization merges. */ + bool optimizeMergesPending(); + + void resetMergeExceptions(); + + void updatePendingMerges(int32_t maxNumSegmentsOptimize, bool optimize); + + /* + * Begin a transaction. During a transaction, any segment + * merges that happen (or ram segments flushed) will not + * write a new segments file and will not remove any files + * that were present at the start of the transaction. You + * must make a matched (try/finally) call to + * commitTransaction() or rollbackTransaction() to finish + * the transaction. + * + * Note that buffered documents and delete terms are not handled + * within the transactions, so they must be flushed before the + * transaction is started. + */ + void startTransaction(); + + /* + * Rolls back the transaction and restores state to where + * we were at the start. + */ + void rollbackTransaction(); + + /* + * Commits the transaction. This will write the new + * segments file and remove and pending deletions we have + * accumulated during the transaction + */ + void commitTransaction(); + + + void maybeMerge(bool optimize); + void maybeMerge(int32_t maxNumSegmentsOptimize, bool optimize); + /** Does initial setup for a merge, which is fast but holds + * the synchronized lock on IndexWriter instance. */ + void mergeInit(MergePolicy::OneMerge* _merge); + void _mergeInit(MergePolicy::OneMerge* _merge); + + /* If any of our segments are using a directory != ours + * then copy them over. Currently this is only used by + * addIndexesNoOptimize(). */ + void copyExternalSegments(); + + + /* + * Called whenever the SegmentInfos has been updated and + * the index files referenced exist (correctly) in the + * index directory-> If we are in autoCommit mode, we + * commit the change immediately. Else, we mark + * commitPending. + */ + void checkpoint(); + + bool doFlush(bool flushDocStores); + + /* FIXME if we want to support non-contiguous segment merges */ + bool commitMerge(MergePolicy::OneMerge* merge); + + int32_t ensureContiguousMerge(MergePolicy::OneMerge* merge); + + void decrefMergeSegments(MergePolicy::OneMerge* _merge); + + /** Does fininishing for a merge, which is fast but holds + * the synchronized lock on IndexWriter instance. */ + void mergeFinish(MergePolicy::OneMerge* _merge); + + /** Does the actual (time-consuming) work of the merge, + * but without holding synchronized lock on IndexWriter + * instance */ + int32_t mergeMiddle(MergePolicy::OneMerge* _merge); + + void addMergeException(MergePolicy::OneMerge* _merge); + + /** Checks whether this merge involves any segments + * already participating in a merge. If not, this merge + * is "registered", meaning we record that its segments + * are now participating in a merge, and true is + * returned. Else (the merge conflicts) false is + * returned. */ + bool registerMerge(MergePolicy::OneMerge* _merge); + + // Called during flush to apply any buffered deletes. If + // flushedNewSegment is true then a new segment was just + // created and flushed from the ram segments, so we will + // selectively apply the deletes to that new segment. + void applyDeletes(bool flushedNewSegment); + + class Internal; + Internal* _internal; +protected: + // This is called after pending added and deleted + // documents have been flushed to the Directory but before + // the change is committed (_CLNEW segments_N file written). + virtual void doAfterFlush(); + + /** + * Used internally to throw an {@link + * AlreadyClosedException} if this IndexWriter has been + * closed. + * @throws AlreadyClosedException if this IndexWriter is + */ + void ensureOpen(); + + /** + * Flush all in-memory buffered udpates (adds and deletes) + * to the Directory. + * @param triggerMerge if true, we may merge segments (if + * deletes or docs were flushed) if necessary + * @param flushDocStores if false we are allowed to keep + * doc stores open to share with the next segment + */ + void flush(bool triggerMerge, bool flushDocStores); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MergePolicy.cpp clucene-core-2.3.3.4/src/core/CLucene/index/MergePolicy.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/MergePolicy.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MergePolicy.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,514 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MergePolicy.h" +#include "_SegmentInfos.h" +#include "IndexWriter.h" +#include "CLucene/store/Directory.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + +#define MESSAGE(msg) if ( writer != NULL && writer->getInfoStream() != NULL ) message(msg) + +const int32_t LogMergePolicy::DEFAULT_MAX_MERGE_DOCS = LUCENE_INT32_MAX_SHOULDBE; + +MergePolicy::OneMerge::OneMerge(SegmentInfos* segments, bool _useCompoundFile): + useCompoundFile(_useCompoundFile) +{ + if (0 == segments->size()) + _CLTHROWA(CL_ERR_Runtime,"segments must include at least one segment"); + this->segments = segments; + this->info = NULL; + this->segmentsClone = NULL; + this->mergeGen = 0; + this->maxNumSegmentsOptimize = 0; + aborted = mergeDocStores = optimize = increfDone = registerDone = isExternal = false; +} +MergePolicy::OneMerge::~OneMerge(){ + _CLDELETE(this->segmentsClone); + + while ( this->segments->size() > 0 ){ + this->segments->remove(0,true);//don't delete... + } + _CLDELETE(this->segments);//and finally delete the segments object itself +} + +const char* MergePolicy::OneMerge::getClassName(){ + return "MergePolicy::OneMerge"; +} +const char* MergePolicy::OneMerge::getObjectName() const{ + return getClassName(); +} +void MergePolicy::OneMerge::setException(CLuceneError& error) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + this->error.set(error.number(),error.what()); +} + +const CLuceneError& MergePolicy::OneMerge::getException(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return error; +} + +void MergePolicy::OneMerge::abort() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + aborted = true; +} + +bool MergePolicy::OneMerge::isAborted() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return aborted; +} + +void MergePolicy::OneMerge::checkAborted(CL_NS(store)::Directory* dir){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (aborted) + _CLTHROWA(CL_ERR_MergeAborted, (string("merge is aborted: ") + segString(dir)).c_str() ); +} + +std::string MergePolicy::OneMerge::segString(CL_NS(store)::Directory* dir) const{ + std::string b; + const int32_t numSegments = segments->size(); + for(int32_t i=0;i 0) b.append(" "); + b.append(segments->info(i)->segString(dir)); + } + if (info != NULL) + b.append(" into ").append(info->name); + if (optimize) + b.append(" [optimize]"); + return b; +} + + +MergePolicy::MergeSpecification::MergeSpecification(){ + merges = _CLNEW CLArrayList; +} +MergePolicy::MergeSpecification::~MergeSpecification(){ + _CLDELETE(merges); +} +void MergePolicy::MergeSpecification::add(OneMerge* merge) { + merges->push_back(merge); +} + +std::string MergePolicy::MergeSpecification::segString(CL_NS(store)::Directory* dir) { + std::string b = "MergeSpec:\n"; + int32_t count = merges->size(); + for(int32_t i=0;isegString(dir)); + } + return b; +} + + + +const float_t LogMergePolicy::LEVEL_LOG_SPAN = 0.75; + +void LogMergePolicy::message(const string& message) { + if (writer != NULL){ + string msg = "LMP: " + message; + writer->message( msg ); + } +} +int32_t LogMergePolicy::getMergeFactor(){ + return mergeFactor; +} +bool LogMergePolicy::isOptimized(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, std::vector& segmentsToOptimize){ + const int32_t numSegments = infos->size(); + int32_t numToOptimize = 0; + SegmentInfo* optimizeInfo = NULL; + for(int32_t i=0;iinfo(i); + vector::iterator itr = segmentsToOptimize.begin(); + while ( itr != segmentsToOptimize.end() ){ + if ( *itr == info ) { + numToOptimize++; + optimizeInfo = info; + } + itr++; + } + } + + return numToOptimize <= maxNumSegments && + (numToOptimize != 1 || isOptimized(writer, optimizeInfo)); +} + +bool LogMergePolicy::isOptimized(IndexWriter* writer, SegmentInfo* info){ + return !info->hasDeletions() && + !info->hasSeparateNorms() && + info->dir == writer->getDirectory() && + info->getUseCompoundFile() == _useCompoundFile; +} + +LogMergePolicy::LogMergePolicy(){ + this->maxMergeDocs = DEFAULT_MAX_MERGE_DOCS; + this->mergeFactor = DEFAULT_MERGE_FACTOR; + this->_useCompoundFile = true; + this->_useCompoundDocStore = true; + this->writer = NULL; + this->minMergeSize = this->maxMergeSize = 0; +} + +void LogMergePolicy::setMergeFactor(int32_t mergeFactor) { + if (mergeFactor < 2) + _CLTHROWA(CL_ERR_IllegalArgument, "mergeFactor cannot be less than 2"); + this->mergeFactor = mergeFactor; +} + +bool LogMergePolicy::useCompoundFile(SegmentInfos* /*infos*/, SegmentInfo* /*info*/) { + return _useCompoundFile; +} + +void LogMergePolicy::setUseCompoundFile(bool useCompoundFile) { + this->_useCompoundFile = useCompoundFile; +} + +bool LogMergePolicy::getUseCompoundFile() { + return _useCompoundFile; +} + +bool LogMergePolicy::useCompoundDocStore(SegmentInfos* /*infos*/) { + return _useCompoundDocStore; +} + +void LogMergePolicy::setUseCompoundDocStore(bool useCompoundDocStore) { + this->_useCompoundDocStore = useCompoundDocStore; +} + +bool LogMergePolicy::getUseCompoundDocStore() { + return _useCompoundDocStore; +} + +void LogMergePolicy::close() {} + + +MergePolicy::MergeSpecification* LogMergePolicy::findMergesForOptimize(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, vector& segmentsToOptimize) { + MergeSpecification* spec = NULL; + + assert (maxNumSegments > 0); + + if (!isOptimized(infos, writer, maxNumSegments, segmentsToOptimize)) { + + // Find the newest (rightmost) segment that needs to + // be optimized (other segments may have been flushed + // since optimize started): + int32_t last = infos->size(); + while(last > 0) { + const SegmentInfo* info = infos->info(--last); + + vector::iterator itr = segmentsToOptimize.begin(); + bool containsInfo = false; + while (itr != segmentsToOptimize.end() ){ + if ( *itr == info ){ + containsInfo = true; + break; + } + itr++; + } + if (containsInfo) { + last++; + break; + } + } + + if (last > 0) { + spec = _CLNEW MergeSpecification(); + + // First, enroll all "full" merges (size + // mergeFactor) to potentially be run concurrently: + while (last - maxNumSegments + 1 >= mergeFactor) { + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(last-mergeFactor, last, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + last -= mergeFactor; + } + + // Only if there are no full merges pending do we + // add a final partial (< mergeFactor segments) merge: + if (0 == spec->merges->size()) { + if (maxNumSegments == 1) { + + // Since we must optimize down to 1 segment, the + // choice is simple: + if (last > 1 || !isOptimized(writer, infos->info(0))){ + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(0, last, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } + } else if (last > maxNumSegments) { + + // Take care to pick a partial merge that is + // least cost, but does not make the index too + // lopsided. If we always just picked the + // partial tail then we could produce a highly + // lopsided index over time: + + // We must merge this many segments to leave + // maxNumSegments in the index (from when + // optimize was first kicked off): + const int32_t finalMergeSize = last - maxNumSegments + 1; + + // Consider all possible starting points: + int64_t bestSize = 0; + int32_t bestStart = 0; + + for(int32_t i=0;iinfo(j+i)); + if (i == 0 || (sumSize < 2*size(infos->info(i-1)) && sumSize < bestSize)) { + bestStart = i; + bestSize = sumSize; + } + } + + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(bestStart, bestStart+finalMergeSize, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } + } + + } else + _CLDELETE(spec); + } else + _CLDELETE(spec); + + return spec; +} + +MergePolicy::MergeSpecification* LogMergePolicy::findMerges(SegmentInfos* infos, IndexWriter* writer){ + + const int32_t numSegments = infos->size(); + this->writer = writer; + MESSAGE( string("findMerges: ") + Misc::toString(numSegments) + " segments"); + + // Compute levels, which is just log (base mergeFactor) + // of the size of each segment + ValueArray levels(numSegments); + const float_t norm = log((float_t)mergeFactor); + + for(int32_t i=0;iinfo(i); + int64_t _size = size(info); + + // Floor tiny segments + if (_size < 1) + _size = 1; + levels[i] = log((float_t)_size)/norm; + } + + float_t levelFloor; + if (minMergeSize <= 0) + levelFloor = 0.0; + else + levelFloor = log((float_t)minMergeSize)/norm; + + // Now, we quantize the log values into levels. The + // first level is any segment whose log size is within + // LEVEL_LOG_SPAN of the max size, or, who has such as + // segment "to the right". Then, we find the max of all + // other segments and use that to define the next level + // segment, etc. + + MergeSpecification* spec = NULL; + + int32_t start = 0; + while(start < numSegments) { + + // Find max level of all segments not already + // quantized. + float_t maxLevel = levels[start]; + for(int32_t i=1+start;i maxLevel) + maxLevel = level; + } + + // Now search backwards for the rightmost segment that + // falls into this level: + float_t levelBottom; + if (maxLevel < levelFloor) + // All remaining segments fall into the min level + levelBottom = -1.0F; + else { + levelBottom = maxLevel - LEVEL_LOG_SPAN; + + // Force a boundary at the level floor + if (levelBottom < levelFloor && maxLevel >= levelFloor) + levelBottom = levelFloor; + } + + int32_t upto = numSegments-1; + while(upto >= start) { + if (levels[upto] >= levelBottom) { + break; + } + upto--; + } + MESSAGE(string(" level ") + Misc::toString(levelBottom) + " to " + Misc::toString(maxLevel) + ": " + Misc::toString(1+upto-start) + " segments"); + + // Finally, record all merges that are viable at this level: + int32_t end = start + mergeFactor; + while(end <= 1+upto) { + bool anyTooLarge = false; + for(int32_t i=start;iinfo(i); + anyTooLarge |= (size(info) >= maxMergeSize || info->docCount >= maxMergeDocs); + } + + if (!anyTooLarge) { + if (spec == NULL) + spec = _CLNEW MergeSpecification(); + MESSAGE( string(" ") + Misc::toString(start) + " to " + Misc::toString(end) + ": add this merge"); + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(start, end, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } else + MESSAGE( string(" ") + Misc::toString(start) + " to " + Misc::toString(end) + ": contains segment over maxMergeSize or maxMergeDocs; skipping"); + + start = end; + end = start + mergeFactor; + } + + start = 1+upto; + } + + return spec; +} + +void LogMergePolicy::setMaxMergeDocs(int32_t maxMergeDocs) { + this->maxMergeDocs = maxMergeDocs; +} + +int32_t LogMergePolicy::getMaxMergeDocs() { + return maxMergeDocs; +} + +const char* LogMergePolicy::getClassName(){ + return "LogMergePolicy"; +} +const char* LogMergePolicy::getObjectName() const{ + return getClassName(); +} +bool LogMergePolicy::instanceOf(const char* other) const{ + const char* t = this->getObjectName(); + if ( t==other || strcmp( t, other )==0 ){ + return true; + } + t = getClassName(); + if ( t==other || strcmp( t, other )==0 ){ + return true; + } + return false; +} + + + + +LogDocMergePolicy::LogDocMergePolicy() { + minMergeSize = DEFAULT_MIN_MERGE_DOCS; + + // maxMergeSize is never used by LogDocMergePolicy; set + // it to Long.MAX_VALUE to disable it + maxMergeSize = LUCENE_INT64_MAX_SHOULDBE; +} + +void LogDocMergePolicy::setMinMergeDocs(int32_t minMergeDocs) { + minMergeSize = minMergeDocs; +} + +int32_t LogDocMergePolicy::getMinMergeDocs() { + return (int32_t)minMergeSize; +} + +int64_t LogDocMergePolicy::size(SegmentInfo* info) { + return info->docCount; +} + +const char* LogDocMergePolicy::getClassName(){ + return "LogDocMergePolicy"; +} +const char* LogDocMergePolicy::getObjectName() const{ + return getClassName(); +} + + + + +int64_t LogByteSizeMergePolicy::size(SegmentInfo* info) { + return info->sizeInBytes(); +} + +/** Default minimum segment size. @see setMinMergeMB */ +const float_t LogByteSizeMergePolicy::DEFAULT_MIN_MERGE_MB = 1.6; + +/** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeMB */ +const float_t LogByteSizeMergePolicy::DEFAULT_MAX_MERGE_MB = (float_t)LUCENE_INT64_MAX_SHOULDBE; + +LogByteSizeMergePolicy::LogByteSizeMergePolicy() { + minMergeSize = (int64_t) (DEFAULT_MIN_MERGE_MB*1024*1024); + maxMergeSize = (uint64_t) (DEFAULT_MAX_MERGE_MB); //*1024*1024 +} + +/**

Determines the largest segment (measured by total + * byte size of the segment's files, in MB) that may be + * merged with other segments. Small values (e.g., less + * than 50 MB) are best for interactive indexing, as this + * limits the length of pauses while indexing to a few + * seconds. Larger values are best for batched indexing + * and speedier searches.

+ * + *

Note that {@link #setMaxMergeDocs} is also + * used to check whether a segment is too large for + * merging (it's either or).

*/ +void LogByteSizeMergePolicy::setMaxMergeMB(float_t mb) { + maxMergeSize = (uint64_t) (mb*1024*1024); +} + +/** Returns the largest segment (meaured by total byte + * size of the segment's files, in MB) that may be merged + * with other segments. + * @see #setMaxMergeMB */ +float_t LogByteSizeMergePolicy::getMaxMergeMB() { + return ((float_t) maxMergeSize)/1024/1024; +} + +/** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "long tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ +void LogByteSizeMergePolicy::setMinMergeMB(float_t mb) { + minMergeSize = (int64_t) (mb*1024*1024); +} + +/** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeMB **/ +float_t LogByteSizeMergePolicy::getMinMergeMB() { + return ((float_t) minMergeSize)/1024/1024; +} + +const char* LogByteSizeMergePolicy::getClassName(){ + return "LogByteSizeMergePolicy"; +} +const char* LogByteSizeMergePolicy::getObjectName() const{ + return getClassName(); +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MergePolicy.h clucene-core-2.3.3.4/src/core/CLucene/index/MergePolicy.h --- clucene-core-0.9.21b/src/core/CLucene/index/MergePolicy.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MergePolicy.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,438 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_MergePolicy_ +#define _lucene_index_MergePolicy_ + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(store,Directory) +CL_NS_DEF(index) + +class SegmentInfo; +class SegmentInfos; +class IndexWriter; + +/** + *

Expert: a MergePolicy determines the sequence of + * primitive merge operations to be used for overall merge + * and optimize operations.

+ * + *

Whenever the segments in an index have been altered by + * {@link IndexWriter}, either the addition of a newly + * flushed segment, addition of many segments from + * addIndexes* calls, or a previous merge that may now need + * to cascade, {@link IndexWriter} invokes {@link + * #findMerges} to give the MergePolicy a chance to pick + * merges that are now required. This method returns a + * {@link MergeSpecification} instance describing the set of + * merges that should be done, or null if no merges are + * necessary. When IndexWriter.optimize is called, it calls + * {@link #findMergesForOptimize} and the MergePolicy should + * then return the necessary merges.

+ * + *

Note that the policy can return more than one merge at + * a time. In this case, if the writer is using {@link + * SerialMergeScheduler}, the merges will be run + * sequentially but if it is using {@link + * ConcurrentMergeScheduler} they will be run concurrently.

+ * + *

The default MergePolicy is {@link + * LogByteSizeMergePolicy}.

+ *

NOTE: This API is new and still experimental + * (subject to change suddenly in the next release)

+ */ +class CLUCENE_EXPORT MergePolicy: public CL_NS(util)::NamedObject { +public: + /** OneMerge provides the information necessary to perform + * an individual primitive merge operation, resulting in + * a single new segment. The merge spec includes the + * subset of segments to be merged as well as whether the + * new segment should use the compound file format. */ + class CLUCENE_EXPORT OneMerge: public CL_NS(util)::NamedObject { + public: + DEFINE_MUTEX(THIS_LOCK) + SegmentInfo* info; // used by IndexWriter + bool mergeDocStores; // used by IndexWriter + bool optimize; // used by IndexWriter + SegmentInfos* segmentsClone; // used by IndexWriter + bool increfDone; // used by IndexWriter + bool registerDone; // used by IndexWriter + int64_t mergeGen; // used by IndexWriter + bool isExternal; // used by IndexWriter + int32_t maxNumSegmentsOptimize; // used by IndexWriter + + SegmentInfos* segments; + const bool useCompoundFile; + bool aborted; + CLuceneError error; + + /** + * Constructor + * @memory, segments object is consumed. The SegmentInfo objects within are referenced + */ + OneMerge(SegmentInfos* segments, bool _useCompoundFile); + ~OneMerge(); + + /** Record that an exception occurred while executing + * this merge */ + void setException(CLuceneError& error); + + /** Retrieve previous exception set by {@link + * #setException}. */ + const CLuceneError& getException(); + + /** Mark this merge as aborted. If this is called + * before the merge is committed then the merge will + * not be committed. */ + void abort(); + + /** Returns true if this merge was aborted. */ + bool isAborted(); + + void checkAborted(CL_NS(store)::Directory* dir); + + std::string segString(CL_NS(store)::Directory* dir) const; + + static const char* getClassName(); + virtual const char* getObjectName() const; + }; + + /** + * A MergeSpecification instance provides the information + * necessary to perform multiple merges. It simply + * contains a list of {@link OneMerge} instances. + */ + + class CLUCENE_EXPORT MergeSpecification { + public: + MergeSpecification(); + ~MergeSpecification(); + + /** + * The subset of segments to be included in the primitive merge. + */ + CL_NS(util)::CLArrayList* merges; + + void add(OneMerge* merge); + + std::string segString(CL_NS(store)::Directory* dir); + }; + + + /** + * Determine what set of merge operations are now + * necessary on the index. The IndexWriter calls this + * whenever there is a change to the segments. This call + * is always synchronized on the IndexWriter instance so + * only one thread at a time will call this method. + * + * @param segmentInfos the total set of segments in the index + * @param writer IndexWriter instance + */ + virtual MergeSpecification* findMerges(SegmentInfos* segmentInfos, + IndexWriter* writer) = 0; + + /** + * Determine what set of merge operations are necessary in + * order to optimize the index. The IndexWriter calls + * this when its optimize() method is called. This call + * is always synchronized on the IndexWriter instance so + * only one thread at a time will call this method. + * + * @param segmentInfos the total set of segments in the index + * @param writer IndexWriter instance + * @param maxSegmentCount requested maximum number of + * segments in the index (currently this is always 1) + * @param segmentsToOptimize contains the specific + * SegmentInfo instances that must be merged away. This + * may be a subset of all SegmentInfos. + */ + virtual MergeSpecification* findMergesForOptimize(SegmentInfos* segmentInfos, + IndexWriter* writer, + int32_t maxSegmentCount, + std::vector& segmentsToOptimize) = 0; + + /** + * Release all resources for the policy. + */ + virtual void close() = 0; + + /** + * Returns true if a newly flushed (not from merge) + * segment should use the compound file format. + */ + virtual bool useCompoundFile(SegmentInfos* segments, SegmentInfo* newSegment) = 0; + + /** + * Returns true if the doc store files should use the + * compound file format. + */ + virtual bool useCompoundDocStore(SegmentInfos* segments) = 0; +}; + + + + + + + + + + + + + +/**

This class implements a {@link MergePolicy} that tries + * to merge segments into levels of exponentially + * increasing size, where each level has < mergeFactor + * segments in it. Whenever a given levle has mergeFactor + * segments or more in it, they will be merged.

+ * + *

This class is abstract and requires a subclass to + * define the {@link #size} method which specifies how a + * segment's size is determined. {@link LogDocMergePolicy} + * is one subclass that measures size by document count in + * the segment. {@link LogByteSizeMergePolicy} is another + * subclass that measures size as the total byte size of the + * file(s) for the segment.

+ */ +class CLUCENE_EXPORT LogMergePolicy: public MergePolicy { + + int32_t mergeFactor; + + int32_t maxMergeDocs; + + bool _useCompoundFile; + bool _useCompoundDocStore; + IndexWriter* writer; + + void message(const std::string& message); + + bool isOptimized(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, std::vector& segmentsToOptimize); + + /** Returns true if this single nfo is optimized (has no + * pending norms or deletes, is in the same dir as the + * writer, and matches the current compound file setting */ + bool isOptimized(IndexWriter* writer, SegmentInfo* info); + + +protected: + virtual int64_t size(SegmentInfo* info) = 0; + int64_t minMergeSize; + uint64_t maxMergeSize; + +public: + LogMergePolicy(); + + /** Defines the allowed range of log(size) for each + * level. A level is computed by taking the max segment + * log size, minuse LEVEL_LOG_SPAN, and finding all + * segments falling within that range. */ + static const float_t LEVEL_LOG_SPAN; + + /** Default merge factor, which is how many segments are + * merged at a time */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MERGE_FACTOR = 10); + + /** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeDocs */ + static const int32_t DEFAULT_MAX_MERGE_DOCS; + + /**

Returns the number of segments that are merged at + * once and also controls the total number of segments + * allowed to accumulate in the index.

*/ + int32_t getMergeFactor(); + + /** Determines how often segment indices are merged by + * addDocument(). With smaller values, less RAM is used + * while indexing, and searches on unoptimized indices are + * faster, but indexing speed is slower. With larger + * values, more RAM is used during indexing, and while + * searches on unoptimized indices are slower, indexing is + * faster. Thus larger values (> 10) are best for batch + * index creation, and smaller values (< 10) for indices + * that are interactively maintained. */ + void setMergeFactor(int32_t mergeFactor); + + // Javadoc inherited + bool useCompoundFile(SegmentInfos* infos, SegmentInfo* info); + + /** Sets whether compound file format should be used for + * newly flushed and newly merged segments. */ + void setUseCompoundFile(bool useCompoundFile); + + /** Returns true if newly flushed and newly merge segments + * are written in compound file format. @see + * #setUseCompoundFile */ + bool getUseCompoundFile(); + + // Javadoc inherited + bool useCompoundDocStore(SegmentInfos* infos); + + /** Sets whether compound file format should be used for + * newly flushed and newly merged doc store + * segment files (term vectors and stored fields). */ + void setUseCompoundDocStore(bool useCompoundDocStore); + + /** Returns true if newly flushed and newly merge doc + * store segment files (term vectors and stored fields) + * are written in compound file format. @see + * #setUseCompoundDocStore */ + bool getUseCompoundDocStore(); + + void close(); + + + /** Returns the merges necessary to optimize the index. + * This merge policy defines "optimized" to mean only one + * segment in the index, where that segment has no + * deletions pending nor separate norms, and it is in + * compound file format if the current useCompoundFile + * setting is true. This method returns multiple merges + * (mergeFactor at a time) so the {@link MergeScheduler} + * in use may make use of concurrency. */ + MergeSpecification* findMergesForOptimize(SegmentInfos* segmentInfos, + IndexWriter* writer, + int32_t maxSegmentCount, + std::vector& segmentsToOptimize); + + /** Checks if any merges are now necessary and returns a + * {@link MergePolicy.MergeSpecification} if so. A merge + * is necessary when there are more than {@link + * #setMergeFactor} segments at a given level. When + * multiple levels have too many segments, this method + * will return multiple merges, allowing the {@link + * MergeScheduler} to use concurrency. */ + MergeSpecification* findMerges(SegmentInfos* infos, IndexWriter* writer); + + /**

Determines the largest segment (measured by + * document count) that may be merged with other segments. + * Small values (e.g., less than 10,000) are best for + * interactive indexing, as this limits the length of + * pauses while indexing to a few seconds. Larger values + * are best for batched indexing and speedier + * searches.

+ * + *

The default value is {@link Integer#MAX_VALUE}.

+ * + *

The default merge policy ({@link + * LogByteSizeMergePolicy}) also allows you to set this + * limit by net size (in MB) of the segment, using {@link + * LogByteSizeMergePolicy#setMaxMergeMB}.

+ */ + void setMaxMergeDocs(int32_t maxMergeDocs); + + /** Returns the largest segment (measured by document + * count) that may be merged with other segments. + * @see #setMaxMergeDocs */ + int32_t getMaxMergeDocs(); + + + virtual bool instanceOf(const char* otherobject) const; + static const char* getClassName(); + virtual const char* getObjectName() const; +}; + + + + + + +/** This is a {@link LogMergePolicy} that measures size of a + * segment as the number of documents (not taking deletions + * into account). */ +class CLUCENE_EXPORT LogDocMergePolicy: public LogMergePolicy { +public: + + /** Default minimum segment size. @see setMinMergeDocs */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MIN_MERGE_DOCS = 1000); + + LogDocMergePolicy(); + + /** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "int64_t tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ + void setMinMergeDocs(int32_t minMergeDocs); + + /** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeDocs **/ + int32_t getMinMergeDocs(); + + + static const char* getClassName(); + virtual const char* getObjectName() const; +protected: + int64_t size(SegmentInfo* info); +}; + + +/** This is a {@link LogMergePolicy} that measures size of a + * segment as the total byte size of the segment's files. */ +class CLUCENE_EXPORT LogByteSizeMergePolicy: public LogMergePolicy { +protected: + int64_t size(SegmentInfo* info); + +public: + /** Default minimum segment size. @see setMinMergeMB */ + static const float_t DEFAULT_MIN_MERGE_MB; + + /** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeMB */ + static const float_t DEFAULT_MAX_MERGE_MB; + + LogByteSizeMergePolicy(); + + /**

Determines the largest segment (measured by total + * byte size of the segment's files, in MB) that may be + * merged with other segments. Small values (e.g., less + * than 50 MB) are best for interactive indexing, as this + * limits the length of pauses while indexing to a few + * seconds. Larger values are best for batched indexing + * and speedier searches.

+ * + *

Note that {@link #setMaxMergeDocs} is also + * used to check whether a segment is too large for + * merging (it's either or).

*/ + void setMaxMergeMB(float_t mb); + + /** Returns the largest segment (meaured by total byte + * size of the segment's files, in MB) that may be merged + * with other segments. + * @see #setMaxMergeMB */ + float_t getMaxMergeMB(); + + /** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "long tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ + void setMinMergeMB(float_t mb); + + /** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeMB **/ + float_t getMinMergeMB(); + + static const char* getClassName(); + virtual const char* getObjectName() const; +}; + + + +CL_NS_END +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MergeScheduler.cpp clucene-core-2.3.3.4/src/core/CLucene/index/MergeScheduler.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/MergeScheduler.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MergeScheduler.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,34 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MergeScheduler.h" +#include "IndexWriter.h" + + +CL_NS_DEF(index) + + +const char* SerialMergeScheduler::getObjectName() const{ + return getClassName(); +} +const char* SerialMergeScheduler::getClassName(){ + return "SerialMergeScheduler"; +} + +void SerialMergeScheduler::merge(IndexWriter* writer){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(true) { + MergePolicy::OneMerge* merge = writer->getNextMerge(); + if (merge == NULL) + break; + writer->merge(merge); + } +} + +void SerialMergeScheduler::close() {} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MergeScheduler.h clucene-core-2.3.3.4/src/core/CLucene/index/MergeScheduler.h --- clucene-core-0.9.21b/src/core/CLucene/index/MergeScheduler.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MergeScheduler.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,50 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_MergeScheduler_ +#define _lucene_index_MergeScheduler_ + +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" +CL_NS_DEF(index) + +class IndexWriter; + +/** Expert: {@link IndexWriter} uses an instance + * implementing this interface to execute the merges + * selected by a {@link MergePolicy}. The default + * MergeScheduler is {@link ConcurrentMergeScheduler}. + *

NOTE: This API is new and still experimental + * (subject to change suddenly in the next release)

+*/ +class CLUCENE_EXPORT MergeScheduler: public CL_NS(util)::NamedObject { +public: + /** Run the merges provided by {@link IndexWriter#getNextMerge()}. */ + virtual void merge(IndexWriter* writer) = 0; + + /** Close this MergeScheduler. */ + virtual void close() = 0; +}; + +/** A {@link MergeScheduler} that simply does each merge + * sequentially, using the current thread. */ +class CLUCENE_EXPORT SerialMergeScheduler: public MergeScheduler { +public: + DEFINE_MUTEX(THIS_LOCK) + + /** Just do the merges in sequence. We do this + * "synchronized" so that even if the application is using + * multiple threads, only one merge may run at a time. */ + void merge(IndexWriter* writer); + void close(); + + const char* getObjectName() const; + static const char* getClassName(); +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MultipleTermPositions.cpp clucene-core-2.3.3.4/src/core/CLucene/index/MultipleTermPositions.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/MultipleTermPositions.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MultipleTermPositions.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,199 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MultipleTermPositions.h" +#include "IndexReader.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_USE(util) + +CL_NS_DEF(index) + +void MultipleTermPositions::seek(Term*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::seek"); +} + +void MultipleTermPositions::seek(TermEnum*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::seek"); +} + +int32_t MultipleTermPositions::read(int32_t*, int32_t*,int32_t) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::read"); +} + +int32_t MultipleTermPositions::getPayloadLength() const { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::getPayloadLength"); +} + +uint8_t* MultipleTermPositions::getPayload(uint8_t*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::getPayload"); +} + +bool MultipleTermPositions::isPayloadAvailable() const{ + return false; +} + +TermDocs* MultipleTermPositions::__asTermDocs(){ + return (TermDocs*)this; +} +TermPositions* MultipleTermPositions::__asTermPositions(){ + return (TermPositions*)this; +} + + +class MultipleTermPositions::TermPositionsQueue : public CL_NS(util)::PriorityQueue > { +public: + TermPositionsQueue(TermPositions** termPositions, size_t termPositionsSize) { + initialize(termPositionsSize, false); + + size_t i=0; + while (termPositions[i]!=NULL) { + if (termPositions[i]->next()) + put(termPositions[i]); + else + _CLDELETE( termPositions[ i ] ); + + ++i; + } + } + virtual ~TermPositionsQueue(){ + } + + TermPositions* peek() { + return top(); + } + + bool lessThan(TermPositions* a, TermPositions* b) { + return a->doc() < b->doc(); + } +}; + +int IntQueue_sort(const void* a, const void* b){ + return ( *(int*)a - *(int*)b ); +} +class MultipleTermPositions::IntQueue { +private: + ValueArray* _array; + int32_t _index; + int32_t _lastIndex; + +public: + IntQueue():_array(_CLNEW ValueArray(16)), _index(0), _lastIndex(0){ + } + virtual ~IntQueue(){ + _CLLDELETE(_array); + } + + void add(const int32_t i) { + if (_lastIndex == _array->length) + _array->resize(_array->length*2); + + _array->values[_lastIndex++] = i; + } + + int32_t next() { + return _array->values[_index++]; + } + + void sort() { + int len = _lastIndex - _index; + qsort(_array->values+_index, len, sizeof(int32_t), IntQueue_sort); + } + + void clear() { + _index = 0; + _lastIndex = 0; + } + + int32_t size() { + return (_lastIndex - _index); + } +}; + +MultipleTermPositions::MultipleTermPositions(IndexReader* indexReader, const CL_NS(util)::ArrayBase* terms) : _posList(_CLNEW IntQueue()){ + CLLinkedList termPositions; + for ( size_t i=0;ilength;i++){ + termPositions.push_back( indexReader->termPositions(terms->values[i])); + } + + TermPositions** tps = _CL_NEWARRAY(TermPositions*, terms->length+1); // i == tpsSize + termPositions.toArray_nullTerminated(tps); + + _termPositionsQueue = _CLNEW TermPositionsQueue(tps,terms->length); + _CLDELETE_LARRAY(tps); +} + +MultipleTermPositions::~MultipleTermPositions() { + _CLLDELETE(_termPositionsQueue); + _CLLDELETE(_posList); +} + +bool MultipleTermPositions::next() { + if (_termPositionsQueue->size() == 0) + return false; + + _posList->clear(); + _doc = _termPositionsQueue->peek()->doc(); + + TermPositions* tp; + do { + tp = _termPositionsQueue->peek(); + + for (int32_t i = 0; i < tp->freq(); i++) + _posList->add(tp->nextPosition()); + + if (tp->next()) + _termPositionsQueue->adjustTop(); + else { + _termPositionsQueue->pop(); + tp->close(); + _CLLDELETE(tp); + } + } while (_termPositionsQueue->size() > 0 && _termPositionsQueue->peek()->doc() == _doc); + + _posList->sort(); + _freq = _posList->size(); + + return true; +} + +int32_t MultipleTermPositions::nextPosition() { + return _posList->next(); +} + +bool MultipleTermPositions::skipTo(int32_t target) { + while (_termPositionsQueue->peek() != NULL && target > _termPositionsQueue->peek()->doc()) { + TermPositions* tp = _termPositionsQueue->pop(); + if (tp->skipTo(target)) + _termPositionsQueue->put(tp); + else { + tp->close(); + _CLLDELETE(tp); + } + } + return next(); +} + +int32_t MultipleTermPositions::doc() const { + return _doc; +} + +int32_t MultipleTermPositions::freq() const { + return _freq; +} + +void MultipleTermPositions::close() { + while (_termPositionsQueue->size() > 0) { + TermPositions* tp = _termPositionsQueue->pop(); + tp->close(); + _CLLDELETE(tp); + } +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MultipleTermPositions.h clucene-core-2.3.3.4/src/core/CLucene/index/MultipleTermPositions.h --- clucene-core-0.9.21b/src/core/CLucene/index/MultipleTermPositions.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MultipleTermPositions.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,92 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_MultipleTermPositions_ +#define _lucene_index_MultipleTermPositions_ + +#include "Terms.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class Term; +class IndexReader; + +class CLUCENE_EXPORT MultipleTermPositions : public TermPositions { +private: + class TermPositionsQueue; + class IntQueue; + + int32_t _doc; + int32_t _freq; + TermPositionsQueue* _termPositionsQueue; + IntQueue* _posList; + +public: + /** + * Creates a new MultipleTermPositions instance. + * + * @exception IOException + */ + MultipleTermPositions(IndexReader* indexReader, const CL_NS(util)::ArrayBase* terms); + virtual ~MultipleTermPositions(); + + bool next(); + + int32_t nextPosition(); + + bool skipTo(const int32_t target); + + int32_t doc() const; + + int32_t freq() const; + + void close(); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + void seek(Term*); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + void seek(TermEnum*); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t read(int32_t*, int32_t*,int32_t); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t getPayloadLength() const; + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + uint8_t* getPayload(uint8_t*); + + /** + * + * @return false + */ + // Java-TODO: Remove warning after API has been finalized + bool isPayloadAvailable() const; + + TermDocs* __asTermDocs(); + TermPositions* __asTermPositions(); +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MultiReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/MultiReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/MultiReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MultiReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,363 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MultiReader.h" +#include "_MultiSegmentReader.h" + +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + + + +class MultiReader::Internal: LUCENE_BASE{ +public: + MultiSegmentReader::NormsCacheType normsCache; + + bool* closeOnClose; //remember which subreaders to close on close + bool _hasDeletions; + uint8_t* ones; + int32_t _maxDoc; + int32_t _numDocs; + + Internal(): + normsCache(true, true) + { + _maxDoc = 0; + _numDocs = -1; + ones = NULL; + _hasDeletions = false; + closeOnClose = NULL; + } + ~Internal(){ + _CLDELETE_ARRAY(ones); + _CLDELETE_ARRAY(closeOnClose); + } +}; + +MultiReader::MultiReader(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders) +{ + this->_internal = _CLNEW Internal(); + this->init(subReaders, closeSubReaders); +} + +void MultiReader::init(const CL_NS(util)::ArrayBase* _subReaders, bool closeSubReaders){ + this->subReaders = _CLNEW CL_NS(util)::ValueArray(_subReaders->length); + starts = _CL_NEWARRAY(int32_t, subReaders->length + 1); // build starts array + _internal->closeOnClose = _CL_NEWARRAY(bool, subReaders->length); + + for (size_t i = 0; i < subReaders->length; i++) { + this->subReaders->values[i] = _subReaders->values[i]; + starts[i] = _internal->_maxDoc; + + // compute maxDocs + _internal->_maxDoc += (*subReaders)[i]->maxDoc(); + _internal->closeOnClose[i] = closeSubReaders; + if ((*subReaders)[i]->hasDeletions()) + _internal->_hasDeletions = true; + } + starts[subReaders->length] = _internal->_maxDoc; +} + +MultiReader::~MultiReader() { +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed all IndexReader instances +// this instance managed have been destroyed to + + close(); + _CLDELETE(_internal); + _CLDELETE_ARRAY(starts); + _CLDELETE(subReaders); +} + + +IndexReader* MultiReader::reopen() { + ensureOpen(); + + bool reopened = false; + ValueArray newSubReaders(subReaders->length); + ValueArray newCloseOnClose(subReaders->length); + + bool success = false; + IndexReader* ret = NULL; + try { + for (size_t i = 0; i < subReaders->length; i++) { + newSubReaders[i] = (*subReaders)[i]->reopen(); + + // if at least one of the subreaders was updated we remember that + // and return a new MultiReader + if (newSubReaders[i] != (*subReaders)[i]) { + reopened = true; + // this is a new subreader instance, so on close() we don't close it + newCloseOnClose[i] = true; + } + } + + if (reopened) { + MultiReader* mr = _CLNEW MultiReader(&newSubReaders); + + for (size_t i = 0; i < subReaders->length; i++) { + if (newSubReaders[i] == (*subReaders)[i]) { + // 'give' the memory to the new object + mr->_internal->closeOnClose[i] = this->_internal->closeOnClose[i]; + this->subReaders->values[i] = NULL; + } + } + success = true; + ret = mr; + } else { + success = true; + ret = this; + } + } _CLFINALLY ( + if (!success && reopened) { + for (size_t i = 0; i < newSubReaders.length; i++) { + if (newSubReaders[i] != NULL) { + try { + if (newCloseOnClose[i]) { + newSubReaders.values[i]->close(); + _CLDELETE(newSubReaders.values[i]); + } + } catch (CLuceneError& ignore) { + if ( ignore.number() != CL_ERR_IO ) throw ignore; + // keep going - we want to clean up as much as possible + } + } + } + } + ) + return ret; +} + +ArrayBase* MultiReader::getTermFreqVectors(int32_t n){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVectors(n - starts[i]); // dispatch to segment +} + +TermFreqVector* MultiReader::getTermFreqVector(int32_t n, const TCHAR* field){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVector(n - starts[i], field); +} + +void MultiReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) { + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], field, mapper); +} + +void MultiReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper) { + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], mapper); +} + +bool MultiReader::isOptimized() { + return false; +} + + +int32_t MultiReader::numDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Don't call ensureOpen() here (it could affect performance) + if (_internal->_numDocs == -1) { // check cache + int32_t n = 0; // cache miss--recompute + for (size_t i = 0; i < subReaders->length; i++){ + n += (*subReaders)[i]->numDocs(); // sum from readers + } + _internal->_numDocs = n; + } + return _internal->_numDocs; +} + +int32_t MultiReader::maxDoc() const { + // Don't call ensureOpen() here (it could affect performance) + return _internal->_maxDoc; +} + +bool MultiReader::document(int32_t n, CL_NS(document)::Document& doc, const FieldSelector* fieldSelector){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->document(n - starts[i],doc, fieldSelector); // dispatch to segment reader +} + +bool MultiReader::isDeleted(const int32_t n) { + // Don't call ensureOpen() here (it could affect performance) + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->isDeleted(n - starts[i]); // dispatch to segment reader +} + +bool MultiReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return _internal->_hasDeletions; +} + +const ArrayBase* MultiReader::getSubReaders() const{ + return subReaders; +} + +uint8_t* MultiReader::norms(const TCHAR* field){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes; + bytes = _internal->normsCache.get((TCHAR*)field); + if (bytes != NULL){ + return bytes; // cache hit + } + + if ( !hasNorms(field) ) + return fakeNorms(); + + bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->norms(field, bytes + starts[i]); + + //Unfortunately the data in the normCache can get corrupted, since it's being loaded with string + //keys that may be deleted while still in use by the map. To prevent this field is duplicated + //and then stored in the normCache + TCHAR* key = STRDUP_TtoT(field); + //update cache + _internal->normsCache.put(key, bytes); + + return bytes; +} + +void MultiReader::norms(const TCHAR* field, uint8_t* result) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + uint8_t* bytes = norms(field); + if (bytes != NULL){ // return + memcpy(result,bytes, maxDoc() * sizeof(int32_t)); + } +} + + +void MultiReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){ + _internal->normsCache.removeitr( _internal->normsCache.find((TCHAR*)field) ); // clear cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->setNorm(n-starts[i], field, value); // dispatch +} + +TermEnum* MultiReader::terms() { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, NULL); +} + +TermEnum* MultiReader::terms(const Term* term) { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, term); +} + +int32_t MultiReader::docFreq(const Term* t) { + ensureOpen(); + int32_t total = 0; // sum freqs in Multi + for (size_t i = 0; i < subReaders->length; i++) + total += (*subReaders)[i]->docFreq(t); + return total; +} + +TermDocs* MultiReader::termDocs() { + ensureOpen(); + TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts); + return ret; +} + +TermPositions* MultiReader::termPositions() { + ensureOpen(); + TermPositions* ret = (TermPositions*)_CLNEW MultiTermPositions(subReaders, starts); + return ret; +} + +void MultiReader::doDelete(const int32_t n) { + _internal->_numDocs = -1; // invalidate cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->deleteDocument(n - starts[i]); // dispatch to segment reader + _internal->_hasDeletions = true; +} + +int32_t MultiReader::readerIndex(const int32_t n) const { // find reader for doc n: + return MultiSegmentReader::readerIndex(n, this->starts, this->subReaders->length); +} + +bool MultiReader::hasNorms(const TCHAR* field) { + ensureOpen(); + for (size_t i = 0; i < subReaders->length; i++) { + if ((*subReaders)[i]->hasNorms(field)) + return true; + } + return false; +} +uint8_t* MultiReader::fakeNorms() { + if (_internal->ones==NULL) + _internal->ones=SegmentReader::createFakeNorms(maxDoc()); + return _internal->ones; +} + +void MultiReader::doUndeleteAll(){ + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->undeleteAll(); + _internal->_hasDeletions = false; + _internal->_numDocs = -1; +} +void MultiReader::doCommit() { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->commit(); +} + +void MultiReader::doClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for (size_t i = 0; i < subReaders->length; i++){ + if ( (*subReaders)[i] == NULL ) continue; //reopen may take some memory... + if (_internal->closeOnClose[i]) { + subReaders->values[i]->close(); + _CLDELETE(subReaders->values[i]); + } + } +} + + +void MultiReader::getFieldNames(FieldOption fieldNames, StringArrayWithDeletor& retarray){ + ensureOpen(); + return MultiSegmentReader::getFieldNames(fieldNames, retarray, this->subReaders); +} + +bool MultiReader::isCurrent(){ + for (size_t i = 0; i < subReaders->length; i++) { + if (!(*subReaders)[i]->isCurrent()) { + return false; + } + } + + // all subreaders are up to date + return true; +} + +/** Not implemented. + * @throws UnsupportedOperationException + */ +int64_t MultiReader::getVersion() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "MultiReader does not support this method."); +} + +const char* MultiReader::getClassName(){ + return "MultiReader"; +} +const char* MultiReader::getObjectName() const{ + return getClassName(); +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MultiReader.h clucene-core-2.3.3.4/src/core/CLucene/index/MultiReader.h --- clucene-core-0.9.21b/src/core/CLucene/index/MultiReader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MultiReader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,129 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_MultiReader +#define _lucene_index_MultiReader + + +//#include "SegmentHeader.h" +#include "IndexReader.h" +CL_CLASS_DEF(document,Document) +//#include "Terms.h" +//#include "SegmentMergeQueue.h" + +CL_NS_DEF(index) + +/** An IndexReader which reads multiple indexes, appending their content. +*/ +class CLUCENE_EXPORT MultiReader:public IndexReader{ +private: + class Internal; + Internal* _internal; + int32_t readerIndex(const int32_t n) const; + bool hasNorms(const TCHAR* field); + uint8_t* fakeNorms(); + + void init(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders); +protected: + CL_NS(util)::ArrayBase* subReaders; + int32_t* starts; // 1st docno for each segment + + void doSetNorm(int32_t n, const TCHAR* field, uint8_t value); + void doUndeleteAll(); + void doCommit(); + void doClose(); + void doDelete(const int32_t n); +public: + /** + *

Construct a MultiReader aggregating the named set of (sub)readers. + * Directory locking for delete, undeleteAll, and setNorm operations is + * left to the subreaders.

+ * @param subReaders set of (sub)readers + * @param closeSubReaders The subReaders (IndexReader instances) are deleted if true + * @throws IOException + * @memory The subReaders array itself belongs to the caller + */ + MultiReader(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders=true); + + ~MultiReader(); + + + /** + * Tries to reopen the subreaders. + *
+ * If one or more subreaders could be re-opened (i. e. subReader.reopen() + * returned a new instance != subReader), then a new MultiReader instance + * is returned, otherwise this instance is returned. + *

+ * A re-opened instance might share one or more subreaders with the old + * instance. Index modification operations result in undefined behavior + * when performed before the old instance is closed. + * (see {@link IndexReader#reopen()}). + *

+ * If subreaders are shared, then the reference count of those + * readers is increased to ensure that the subreaders remain open + * until the last referring reader is closed. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexReader* reopen(); + + TermFreqVector* getTermFreqVector(int32_t n, const TCHAR* field=NULL); + + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + + /** Return an array of term frequency vectors for the specified document. + * The array contains a vector for each vectorized field in the document. + * Each vector vector contains term numbers and frequencies for all terms + * in a given vectorized field. + * If no such fields existed, the method returns null. + */ + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t n); + + bool isOptimized(); + + int32_t numDocs(); + int32_t maxDoc() const; + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + bool isDeleted(const int32_t n); + bool hasDeletions() const; + uint8_t* norms(const TCHAR* field); + void norms(const TCHAR* field, uint8_t* result); + TermEnum* terms(); + TermEnum* terms(const Term* term); + + //Returns the document frequency of the current term in the set + int32_t docFreq(const Term* t=NULL); + TermDocs* termDocs(); + TermPositions* termPositions(); + + /** + * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) + */ + void getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray); + + + /** + * Checks recursively if all subreaders are up to date. + */ + bool isCurrent(); + + /** Not implemented. + * @throws UnsupportedOperationException + */ + int64_t getVersion(); + + const CL_NS(util)::ArrayBase* getSubReaders() const; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/MultiSegmentReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/MultiSegmentReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/MultiSegmentReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/MultiSegmentReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,898 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/FieldSelector.h" +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" +#include "MultiReader.h" +#include "_MultiSegmentReader.h" + +CL_NS_USE(document) +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +void MultiSegmentReader::initialize(CL_NS(util)::ArrayBase* _subReaders){ + this->subReaders = _subReaders; + + _maxDoc = 0; + _numDocs = -1; + ones = NULL; + _hasDeletions = false; + + starts = _CL_NEWARRAY(int32_t, subReaders->length + 1); // build starts array + for (size_t i = 0; i < subReaders->length; i++) { + starts[i] = _maxDoc; + + // compute maxDocs + _maxDoc += (*subReaders)[i]->maxDoc(); + if ((*subReaders)[i]->hasDeletions()) + _hasDeletions = true; + } + starts[subReaders->length] = _maxDoc; +} + +MultiSegmentReader::MultiSegmentReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, bool closeDirectory): + DirectoryIndexReader(directory,sis,closeDirectory), + normsCache(NormsCacheType(true,true)) +{ + // To reduce the chance of hitting FileNotFound + // (and having to retry), we open segments in + // reverse because IndexWriter merges & deletes + // the newest segments first. + + ArrayBase* readers = _CLNEW ObjectArray(sis->size()); + for (int32_t i = (int32_t)sis->size()-1; i >= 0; i--) { + try { + readers->values[i] = SegmentReader::get(sis->info(i)); + } catch(CLuceneError& err) { + if ( err.number() != CL_ERR_IO ) throw err; + + // Close all readers we had opened: + for(i++;isize();i++) { + try { + (*readers)[i]->close(); + } catch (CLuceneError& err2) { + if ( err.number() != CL_ERR_IO ) throw err2; + // keep going - we want to clean up as much as possible + } + } + throw err; + } + } + initialize(readers); +} + +/** This contructor is only used for {@link #reopen()} */ +MultiSegmentReader::MultiSegmentReader( + CL_NS(store)::Directory* directory, + SegmentInfos* infos, + bool closeDirectory, + CL_NS(util)::ArrayBase* oldReaders, + int32_t* oldStarts, + NormsCacheType* oldNormsCache): + DirectoryIndexReader(directory, infos, closeDirectory), + normsCache(NormsCacheType(true,true)) +{ + // we put the old SegmentReaders in a map, that allows us + // to lookup a reader using its segment name + map segmentReaders; + if (oldReaders != NULL) { + // create a Map SegmentName->SegmentReader + for (size_t i = 0; i < oldReaders->length; i++) { + segmentReaders[((SegmentReader*)(*oldReaders)[i])->getSegmentName()] = i; + } + } + + ArrayBase* newReaders = _CLNEW ObjectArray(infos->size()); + + for (int32_t i = infos->size() - 1; i>=0; i--) { + // find SegmentReader for this segment + map::iterator oldReaderIndex = segmentReaders.find(infos->info(i)->name); + if ( oldReaderIndex == segmentReaders.end()) { + // this is a new segment, no old SegmentReader can be reused + newReaders->values[i] = NULL; + } else { + // there is an old reader for this segment - we'll try to reopen it + newReaders->values[i] = (*oldReaders)[oldReaderIndex->second]; + } + + bool success = false; + try { + SegmentReader* newReader; + if ((*newReaders)[i] == NULL || infos->info(i)->getUseCompoundFile() != ((SegmentReader*)(*newReaders)[i])->getSegmentInfo()->getUseCompoundFile()) { + // this is a new reader; in case we hit an exception we can close it safely + newReader = SegmentReader::get(infos->info(i)); + } else { + newReader = ((SegmentReader*)(*newReaders)[i])->reopenSegment(infos->info(i)); + } + if (newReader == (*newReaders)[i]) { + // this reader is being re-used, so we take ownership of it... + oldReaders->values[i] = NULL; + } + + newReaders->values[i] = newReader; + success = true; + } _CLFINALLY ( + if (!success) { + for (i++; i < infos->size(); i++) { + if (newReaders->values[i] != NULL) { + try { + (*newReaders)[i]->close(); + _CLDELETE(newReaders->values[i]); + }catch(CLuceneError& ignore){ + if ( ignore.number() != CL_ERR_IO ) throw ignore; + // keep going - we want to clean up as much as possible + } + } + } + } + ) + } + + // initialize the readers to calculate maxDoc before we try to reuse the old normsCache + initialize(newReaders); + + // try to copy unchanged norms from the old normsCache to the new one + if (oldNormsCache != NULL) { + NormsCacheType::iterator it = oldNormsCache->begin(); + while (it != oldNormsCache->end()) { + TCHAR* field = it->first; + if (!hasNorms(field)) { + continue; + } + uint8_t* oldBytes = it->second; + uint8_t* bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + + + for (size_t i = 0; i < subReaders->length; i++) { + map::iterator oldReaderIndex = segmentReaders.find(((SegmentReader*)(*subReaders)[i])->getSegmentName()); + + // this SegmentReader was not re-opened, we can copy all of its norms + if (oldReaderIndex != segmentReaders.end() && + ((*oldReaders)[oldReaderIndex->second] == (*subReaders)[i] + || ((SegmentReader*)(*oldReaders)[oldReaderIndex->second])->_norms.get(field) == ((SegmentReader*)(*subReaders)[i])->_norms.get(field))) { + // we don't have to synchronize here: either this constructor is called from a SegmentReader, + // in which case no old norms cache is present, or it is called from MultiReader.reopen(), + // which is synchronized + memcpy(bytes + starts[i], oldBytes + oldStarts[oldReaderIndex->second], starts[i+1] - starts[i]); + } else { + (*subReaders)[i]->norms(field, bytes+starts[i]); + } + } + + normsCache.put(field, bytes); // update cache + + it++; + } + } +} + + + +MultiSegmentReader::~MultiSegmentReader() { +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed all IndexReader instances +// this instance managed have been destroyed to + + _CLDELETE_ARRAY(ones); + _CLDELETE_ARRAY(starts); + + //Iterate through the subReaders and destroy each reader + _CLDELETE(subReaders); +} + +const char* MultiTermEnum::getObjectName() const{ return getClassName(); } +const char* MultiTermEnum::getClassName(){ return "MultiTermEnum"; } + + DirectoryIndexReader* MultiSegmentReader::doReopen(SegmentInfos* infos){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (infos->size() == 1) { + // The index has only one segment now, so we can't refresh the MultiSegmentReader. + // Return a new SegmentReader instead + return SegmentReader::get(infos, infos->info(0), false); + } else { + return _CLNEW MultiSegmentReader(_directory, infos, closeDirectory, subReaders, starts, &normsCache); + } + } + + +ArrayBase* MultiSegmentReader::getTermFreqVectors(int32_t n){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVectors(n - starts[i]); // dispatch to segment +} + +TermFreqVector* MultiSegmentReader::getTermFreqVector(int32_t n, const TCHAR* field){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVector(n - starts[i], field); +} +void MultiSegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper){ + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], field, mapper); +} + +void MultiSegmentReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper){ + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], mapper); +} + + +bool MultiSegmentReader::isOptimized() { + return false; +} + +int32_t MultiSegmentReader::numDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Don't call ensureOpen() here (it could affect performance) + if (_numDocs == -1) { // check cache + int32_t n = 0; // cache miss--recompute + for (size_t i = 0; i < subReaders->length; i++) + n += (*subReaders)[i]->numDocs(); // sum from readers + _numDocs = n; + } + return _numDocs; +} + +int32_t MultiSegmentReader::maxDoc() const { + // Don't call ensureOpen() here (it could affect performance) + return _maxDoc; +} + +const ArrayBase* MultiSegmentReader::getSubReaders() const{ + return subReaders; +} + +bool MultiSegmentReader::document(int32_t n, CL_NS(document)::Document& doc, const FieldSelector* fieldSelector){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->document(n - starts[i],doc, fieldSelector); // dispatch to segment reader +} + +bool MultiSegmentReader::isDeleted(const int32_t n) { + // Don't call ensureOpen() here (it could affect performance) + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->isDeleted(n - starts[i]); // dispatch to segment reader +} + +bool MultiSegmentReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return _hasDeletions; +} + +uint8_t* MultiSegmentReader::norms(const TCHAR* field){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes; + bytes = normsCache.get((TCHAR*)field); + if (bytes != NULL){ + return bytes; // cache hit + } + + if ( !hasNorms(field) ) + return fakeNorms(); + + bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->norms(field, bytes + starts[i]); + + //Unfortunately the data in the normCache can get corrupted, since it's being loaded with string + //keys that may be deleted while still in use by the map. To prevent this field is duplicated + //and then stored in the normCache + TCHAR* key = STRDUP_TtoT(field); + //update cache + normsCache.put(key, bytes); + + return bytes; +} + +void MultiSegmentReader::norms(const TCHAR* field, uint8_t* result) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes = normsCache.get((TCHAR*)field); + if (bytes==NULL && !hasNorms(field)) + bytes=fakeNorms(); + + if (bytes != NULL){ // cache hit + int32_t len = maxDoc(); + memcpy(result,bytes,len * sizeof(int32_t)); + } + + for (size_t i = 0; i < subReaders->length; i++) // read from segments + (*subReaders)[i]->norms(field, result + starts[i]); +} + + +void MultiSegmentReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){ + normsCache.removeitr( normsCache.find((TCHAR*)field) ); // clear cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->setNorm(n-starts[i], field, value); // dispatch +} + +TermEnum* MultiSegmentReader::terms() { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, NULL); +} + +TermEnum* MultiSegmentReader::terms(const Term* term) { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, term); +} + +int32_t MultiSegmentReader::docFreq(const Term* t) { + ensureOpen(); + int32_t total = 0; // sum freqs in Multi + for (size_t i = 0; i < subReaders->length; i++) + total += (*subReaders)[i]->docFreq(t); + return total; +} + +TermDocs* MultiSegmentReader::termDocs() { + ensureOpen(); + TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts); + return ret; +} + +TermPositions* MultiSegmentReader::termPositions() { + ensureOpen(); + TermPositions* ret = static_cast(_CLNEW MultiTermPositions(subReaders, starts)); + return ret; +} + +void MultiSegmentReader::setTermInfosIndexDivisor(int32_t indexDivisor) { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->setTermInfosIndexDivisor(indexDivisor); +} + +int32_t MultiSegmentReader::getTermInfosIndexDivisor() { + if (subReaders->length > 0) + return (*subReaders)[0]->getTermInfosIndexDivisor(); + else + _CLTHROWA(CL_ERR_IllegalState,"no readers"); +} + +void MultiSegmentReader::doDelete(const int32_t n) { + _numDocs = -1; // invalidate cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->deleteDocument(n - starts[i]); // dispatch to segment reader + _hasDeletions = true; +} + +int32_t MultiSegmentReader::readerIndex(int32_t n) const{ // find reader for doc n: + return readerIndex(n, this->starts, this->subReaders->length); +} + + +int32_t MultiSegmentReader::readerIndex(const int32_t n, int32_t* starts, int32_t numSubReaders) { // find reader for doc n: + int32_t lo = 0; // search starts array + int32_t hi = numSubReaders - 1; // for first element less + // than n, return its index + while (hi >= lo) { + int32_t mid = (lo + hi) >> 1; + int32_t midValue = starts[mid]; + if (n < midValue) + hi = mid - 1; + else if (n > midValue) + lo = mid + 1; + else{ // found a match + while (mid+1 < numSubReaders && starts[mid+1] == midValue) { + mid++; // scan to last match + } + return mid; + } + } + return hi; +} + +bool MultiSegmentReader::hasNorms(const TCHAR* field) { + ensureOpen(); + for (size_t i = 0; i < subReaders->length; i++) { + if ((*subReaders)[i]->hasNorms(field)) + return true; + } + return false; +} +uint8_t* MultiSegmentReader::fakeNorms() { + if (ones==NULL) + ones=SegmentReader::createFakeNorms(maxDoc()); + return ones; +} + +void MultiSegmentReader::doUndeleteAll(){ + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->undeleteAll(); + _hasDeletions = false; + _numDocs = -1; +} +void MultiSegmentReader::commitChanges() { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->commit(); +} + +void MultiSegmentReader::doClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for (size_t i = 0; i < subReaders->length; i++){ + if ( (*subReaders)[i] != NULL ){ + (*subReaders)[i]->close(); + _CLDELETE(subReaders->values[i]); + } + } + // maybe close directory + DirectoryIndexReader::doClose(); +} + +void MultiSegmentReader::getFieldNames(FieldOption fieldNames, StringArrayWithDeletor& retarray, CL_NS(util)::ArrayBase* subReaders) { + // maintain a unique set of field names + for (size_t i = 0; i < subReaders->length; i++) { + IndexReader* reader = (*subReaders)[i]; + StringArrayWithDeletor subFields(false); + reader->getFieldNames(fieldNames, subFields); + retarray.insert(retarray.end(),subFields.begin(),subFields.end()); + subFields.clear(); + } +} + + +void MultiSegmentReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ + StringArrayWithDeletor temp; + CLHashList hashList; + for (size_t i = 0; i < subReaders->length; i++) { + IndexReader* reader = (*subReaders)[i]; + reader->getFieldNames(fldOption, temp); + + //create a unique list of names. + StringArrayWithDeletor::iterator itr = temp.begin(); + while ( itr != temp.end() ){ + if ( hashList.find(*itr) == hashList.end() ) + hashList.insert(STRDUP_TtoT(*itr)); + itr++; + } + } + //move the items into the return + CLHashList::iterator itr = hashList.begin(); + while ( itr != hashList.end() ){ + retarray.push_back(*itr);//no need to copy, already done! + itr++; + } +} +const char* MultiSegmentReader::getClassName(){ + return "MultiSegmentReader"; +} +const char* MultiSegmentReader::getObjectName() const{ + return getClassName(); +} + + + + + + + + + + +void MultiTermDocs::init(ArrayBase* r, const int32_t* s){ + subReaders = r; + starts = s; + base = 0; + pointer = 0; + current = NULL; + term = NULL; + readerTermDocs = NULL; + + //Check if there are subReaders + if(subReaders != NULL && subReaders->length > 0){ + readerTermDocs = _CLNEW ValueArray(subReaders->length); + } +} +MultiTermDocs::MultiTermDocs(){ +//Func - Default constructor +// Initialises an empty MultiTermDocs. +// This constructor is needed to allow the constructor of MultiTermPositions +// initialise the instance by itself +//Pre - true +//Post - An empty + + init(NULL,NULL); +} + +MultiTermDocs::MultiTermDocs(ArrayBase* r, const int32_t* s){ +//Func - Constructor +//Pre - if r is NULL then rLen must be 0 else if r != NULL then rLen > 0 +// s != NULL +//Post - The instance has been created + init(r,s); +} + +MultiTermDocs::~MultiTermDocs(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + close(); +} + + +TermPositions* MultiTermDocs::__asTermPositions(){ + return NULL; +} + +int32_t MultiTermDocs::doc() const { + CND_PRECONDITION(current!=NULL,"current==NULL, check that next() was called"); + return base + current->doc(); +} +int32_t MultiTermDocs::freq() const { + CND_PRECONDITION(current!=NULL,"current==NULL, check that next() was called"); + return current->freq(); +} + +void MultiTermDocs::seek(TermEnum* termEnum){ + seek(termEnum->term(false)); +} + +void MultiTermDocs::seek( Term* tterm) { +//Func - Resets the instance for a new search +//Pre - tterm != NULL +//Post - The instance has been reset for a new search + + CND_PRECONDITION(tterm != NULL, "tterm is NULL"); + + //Assigning tterm is done as below for a reason + //The construction ensures that if seek is called from within + //MultiTermDocs with as argument this->term (seek(this->term)) that the assignment + //will succeed and all referencecounters represent the correct situation + + //Get a pointer from tterm and increase its reference counter + Term *TempTerm = _CL_POINTER(tterm); +//xx + //Finialize term to ensure we decrease the reference counter of the instance which term points to + _CLDECDELETE(term); + + //Assign TempTerm to term + term = TempTerm; + + base = 0; + pointer = 0; + current = NULL; +} + +bool MultiTermDocs::next() { + for(;;) { + if (current != NULL && current->next()) { + return true; + } else if (pointer < subReaders->length) { + base = starts[pointer]; + current = termDocs(pointer++); + } else { + return false; + } + } +} + +int32_t MultiTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) { + while (true) { + while (current == NULL) { + if (pointer < subReaders->length) { // try next segment + base = starts[pointer]; + current = termDocs(pointer++); + } else { + return 0; + } + } + int32_t end = current->read(docs, freqs,length); + if (end == 0) { // none left in segment + current = NULL; + } else { // got some + int32_t b = base; // adjust doc numbers + for (int32_t i = 0; i < end; i++) + docs[i] += b; + return end; + } + } +} + +bool MultiTermDocs::skipTo(const int32_t target) { +// do { +// if (!next()) +// return false; +// } while (target > doc()); +// return true; + for(;;) { + if ( current != NULL && current->skipTo(target - base)) { + return true; + } else if ( pointer < subReaders->length ) { + base = starts[pointer]; + current = termDocs(pointer++); + } else { + return false; + } + } +} + +void MultiTermDocs::close() { +//Func - Closes all MultiTermDocs managed by this instance +//Pre - true +//Post - All the MultiTermDocs have been closed + + + //Check if readerTermDocs is valid + if (readerTermDocs){ + TermDocs* curTD = NULL; + //iterate through the readerTermDocs array + for (size_t i = 0; i < subReaders->length; i++) { + //Retrieve the i-th TermDocs instance + curTD = (*readerTermDocs)[i]; + + //Check if it is a valid pointer + if (curTD != NULL) { + //Close it + curTD->close(); + _CLDELETE(curTD); + } + } + + _CLDELETE(readerTermDocs); + } + + //current previously pointed to a member of readerTermDocs; ensure that + //it doesn't now point to invalid memory. + current = NULL; + base = 0; + pointer = 0; + + _CLDECDELETE(term); +} + +TermDocs* MultiTermDocs::termDocs(IndexReader* reader) { + return reader->termDocs(); +} + +TermDocs* MultiTermDocs::termDocs(const int32_t i) { + if (term == NULL) + return NULL; + TermDocs* result = (*readerTermDocs)[i]; + if (result == NULL){ + _CLLDELETE(readerTermDocs->values[i]); + readerTermDocs->values[i] = termDocs((*subReaders)[i]); + result = (*readerTermDocs)[i]; + } + result->seek(term); + + return result; +} + + +MultiTermEnum::MultiTermEnum(ArrayBase* subReaders, const int32_t *starts, const Term* t){ +//Func - Constructor +// Opens all enumerations of all readers +//Pre - readers != NULL and contains an array of IndexReader instances each responsible for +// reading a single segment +// subReaders->length >= 0 and represents the number of readers in the readers array +// starts is an array of +//Post - An instance of has been created + +//Pre - if readers is NULL then subReaders->length must be 0 else if readers != NULL then subReaders->length > 0 +// s != NULL +//Post - The instance has been created + + CND_PRECONDITION(starts != NULL,"starts is NULL"); + + //Temporary variables + IndexReader* reader = NULL; + TermEnum* termEnum = NULL; + SegmentMergeInfo* smi = NULL; + _docFreq = 0; + _term = NULL; + queue = _CLNEW SegmentMergeQueue(subReaders->length); + + CND_CONDITION (queue != NULL, "Could not allocate memory for queue"); + + //iterate through all the readers + for ( size_t i=0;ilength;i++ ) { + //Get the i-th reader + reader = (*subReaders)[i]; + + //Check if the enumeration must start from term t + if (t != NULL) { + //termEnum is an enumeration of terms starting at or after the named term t + termEnum = reader->terms(t); + }else{ + //termEnum is an enumeration of all the Terms and TermInfos in the set. + termEnum = reader->terms(); + } + + //Instantiate an new SegmentMerginfo + smi = _CLNEW SegmentMergeInfo(starts[i], termEnum, reader); + + // Note that in the call termEnum->getTerm(false) below false is required because + // otherwise a reference is leaked. By passing false getTerm is + // ordered to return an unowned reference instead. (Credits for DSR) + if (t == NULL ? smi->next() : termEnum->term(false) != NULL){ + // initialize queue + queue->put(smi); + } else{ + //Close the SegmentMergeInfo + smi->close(); + //And have it deleted + _CLDELETE(smi); + } + } + + //Check if the queue has elements + if (t != NULL && queue->size() > 0) { + next(); + } +} + +MultiTermEnum::~MultiTermEnum(){ +//Func - Destructor +//Pre - true +//Post - All the resource have been freed and the instance has been deleted + + //Close the enumeration + close(); + + //Delete the queue + _CLDELETE(queue); +} + +bool MultiTermEnum::next(){ +//Func - Move the current term to the next in the set of enumerations +//Pre - true +//Post - Returns true if term has been moved to the next in the set of enumerations +// Returns false if this was not possible + + SegmentMergeInfo* top = queue->top(); + if (top == NULL) { + _CLDECDELETE(_term); + _term = NULL; + return false; + } + + //The getTerm method requires the client programmer to indicate whether he + // owns the returned reference, so we can discard ours + // right away. + _CLDECDELETE(_term); + + //Assign term the term of top and make sure the reference counter is increased + _term = _CL_POINTER(top->term); + _docFreq = 0; + + //Find the next term + while (top != NULL && _term->compareTo(top->term) == 0) { + //don't delete, this is the top + queue->pop(); + // increment freq + _docFreq += top->termEnum->docFreq(); + if (top->next()){ + // restore queue + queue->put(top); + }else{ + // done with a segment + top->close(); + _CLDELETE(top); + } + top = queue->top(); + } + + return true; +} + + +Term* MultiTermEnum::term(bool pointer) { + if ( pointer ) + return _CL_POINTER(_term); + else + return _term; +} + +int32_t MultiTermEnum::docFreq() const { +//Func - Returns the document frequency of the current term in the set +//Pre - termInfo != NULL +// next() must have been called once +//Post - The document frequency of the current enumerated term has been returned + + return _docFreq; +} + + +void MultiTermEnum::close() { +//Func - Closes the set of enumerations in the queue +//Pre - queue holds a valid reference to a SegmentMergeQueue +//Post - The queue has been closed all SegmentMergeInfo instance have been deleted by +// the closing of the queue +// term has been finalized and reset to NULL + + // Needed when this enumeration hasn't actually been exhausted yet + _CLDECDELETE(_term); + + //Close the queue This will destroy all SegmentMergeInfo instances! + queue->close(); + +} + + + + + +MultiTermPositions::MultiTermPositions(ArrayBase* r, const int32_t* s){ +//Func - Constructor +//Pre - if r is NULL then rLen must be 0 else if r != NULL then rLen > 0 +// s != NULL +//Post - The instance has been created + init(r,s); +} + + +TermDocs* MultiTermPositions::__asTermDocs(){ + return (TermDocs*) this; +} +TermPositions* MultiTermPositions::__asTermPositions(){ + return (TermPositions*) this; +} + + +TermDocs* MultiTermPositions::termDocs(IndexReader* reader) { +// Here in the MultiTermPositions class, we want this->current to always +// be a SegmentTermPositions rather than merely a SegmentTermDocs. +// To that end, we override the termDocs(IndexReader&) method to produce +// a SegmentTermPositions via the underlying reader's termPositions method +// rather merely producing a SegmentTermDocs via the reader's termDocs +// method. + + TermPositions* tp = reader->termPositions(); + TermDocs* ret = tp->__asTermDocs(); + + CND_CONDITION(ret != NULL, + "Dynamic downcast in MultiTermPositions::termDocs from" + " TermPositions to TermDocs failed." + ); + return ret; + } + +int32_t MultiTermPositions::nextPosition() { + //Func - + //Pre - current != NULL + //Post - + CND_PRECONDITION(current != NULL,"current is NULL"); + + TermPositions* curAsTP = current->__asTermPositions(); + + CND_CONDITION(curAsTP != NULL, + "Dynamic downcast in MultiTermPositions::nextPosition from" + " SegmentTermDocs to TermPositions failed." + ) + return curAsTP->nextPosition(); +} + +int32_t MultiTermPositions::getPayloadLength() const{ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->getPayloadLength(); +} + +uint8_t* MultiTermPositions::getPayload(uint8_t* data){ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->getPayload(data); +} + +bool MultiTermPositions::isPayloadAvailable() const{ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->isPayloadAvailable(); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_MultiSegmentReader.h clucene-core-2.3.3.4/src/core/CLucene/index/_MultiSegmentReader.h --- clucene-core-0.9.21b/src/core/CLucene/index/_MultiSegmentReader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_MultiSegmentReader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,232 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_MultiSegmentReader +#define _lucene_index_MultiSegmentReader + + +#include "DirectoryIndexReader.h" +#include "IndexReader.h" +CL_CLASS_DEF(document,Document) +//#include "Terms.h" +#include "_SegmentHeader.h" + +CL_NS_DEF(index) +class SegmentMergeQueue; + +class MultiSegmentReader:public DirectoryIndexReader{ + static int32_t readerIndex(const int32_t n, int32_t* starts, int32_t numSubReaders); +public: + typedef CL_NS(util)::CLHashtable > NormsCacheType; +private: + int32_t readerIndex(int32_t n) const; + bool hasNorms(const TCHAR* field); + uint8_t* fakeNorms(); + + void startCommit(); + void rollbackCommit(); + + bool _hasDeletions; + uint8_t* ones; + NormsCacheType normsCache; + int32_t _maxDoc; + int32_t _numDocs; + +protected: + CL_NS(util)::ArrayBase* subReaders; + int32_t* starts; // 1st docno for each segment + + void doSetNorm(int32_t n, const TCHAR* field, uint8_t value); + void doUndeleteAll(); + void commitChanges(); + // synchronized + void doClose(); + + // synchronized + void doDelete(const int32_t n); + DirectoryIndexReader* doReopen(SegmentInfos* infos); + + void initialize( CL_NS(util)::ArrayBase* subReaders); + +public: + + /** Construct reading the named set of readers. */ + MultiSegmentReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, bool closeDirectory); + + /** This contructor is only used for {@link #reopen()} */ + CLUCENE_LOCAL_DECL MultiSegmentReader( + CL_NS(store)::Directory* directory, + SegmentInfos* sis, + bool closeDirectory, + CL_NS(util)::ArrayBase* oldReaders, + int32_t* oldStarts, + NormsCacheType* oldNormsCache); + + virtual ~MultiSegmentReader(); + + /** Return an array of term frequency vectors for the specified document. + * The array contains a vector for each vectorized field in the document. + * Each vector vector contains term numbers and frequencies for all terms + * in a given vectorized field. + * If no such fields existed, the method returns null. + */ + TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field=NULL); + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber); + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + bool isOptimized(); + + // synchronized + int32_t numDocs(); + + int32_t maxDoc() const; + + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + + bool isDeleted(const int32_t n); + bool hasDeletions() const; + + // synchronized + uint8_t* norms(const TCHAR* field); + void norms(const TCHAR* field, uint8_t* result); + + TermEnum* terms(); + TermEnum* terms(const Term* term); + + //Returns the document frequency of the current term in the set + int32_t docFreq(const Term* t=NULL); + TermDocs* termDocs(); + TermPositions* termPositions(); + + void getFieldNames (FieldOption fldOption, StringArrayWithDeletor& retarray); + static void getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray, CL_NS(util)::ArrayBase* subReaders); + + void setTermInfosIndexDivisor(int32_t indexDivisor); + int32_t getTermInfosIndexDivisor(); + + const CL_NS(util)::ArrayBase* getSubReaders() const; + + friend class MultiReader; + friend class SegmentReader; + friend class DirectoryIndexReader; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +class MultiTermDocs:public virtual TermDocs { +protected: + CL_NS(util)::ArrayBase* readerTermDocs; + + CL_NS(util)::ArrayBase* subReaders; + const int32_t* starts; + Term* term; + + int32_t base; + size_t pointer; + + TermDocs* current; // == segTermDocs[pointer] + TermDocs* termDocs(const int32_t i); //< internal use only + virtual TermDocs* termDocs(IndexReader* reader); + void init(CL_NS(util)::ArrayBase* subReaders, const int32_t* starts); +public: + MultiTermDocs(); + MultiTermDocs(CL_NS(util)::ArrayBase* subReaders, const int32_t* s); + virtual ~MultiTermDocs(); + + int32_t doc() const; + int32_t freq() const; + + void seek(TermEnum* termEnum); + void seek(Term* tterm); + bool next(); + + /** Optimized implementation. */ + int32_t read(int32_t* docs, int32_t* freqs, int32_t length); + + /* A Possible future optimization could skip entire segments */ + bool skipTo(const int32_t target); + + void close(); + + virtual TermPositions* __asTermPositions(); +}; + + +//MultiTermEnum represents the enumeration of all terms of all readers +class MultiTermEnum:public TermEnum { +private: + SegmentMergeQueue* queue; + + Term* _term; + int32_t _docFreq; +public: + //Constructor + //Opens all enumerations of all readers + MultiTermEnum(CL_NS(util)::ArrayBase* subReaders, const int32_t* starts, const Term* t); + + //Destructor + ~MultiTermEnum(); + + //Move the current term to the next in the set of enumerations + bool next(); + + //Returns a pointer to the current term of the set of enumerations + Term* term(bool pointer=true); + + //Returns the document frequency of the current term in the set + int32_t docFreq() const; + + //Closes the set of enumerations in the queue + void close(); + + + const char* getObjectName() const; + static const char* getClassName(); +}; + + +#ifdef _MSC_VER + #pragma warning(disable : 4250) +#endif +class MultiTermPositions:public MultiTermDocs,public TermPositions { +protected: + TermDocs* termDocs(IndexReader* reader); +public: + MultiTermPositions(CL_NS(util)::ArrayBase* subReaders, const int32_t* s); + virtual ~MultiTermPositions() {}; + int32_t nextPosition(); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t getPayloadLength() const; + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + uint8_t* getPayload(uint8_t* data); + + /** + * + * @return false + */ + // TODO: Remove warning after API has been finalized + bool isPayloadAvailable() const; + + virtual TermDocs* __asTermDocs(); + virtual TermPositions* __asTermPositions(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/Payload.cpp clucene-core-2.3.3.4/src/core/CLucene/index/Payload.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/Payload.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/Payload.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,108 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Payload.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(index) + +Payload::Payload() : + data( * _CLNEW CL_NS(util)::ValueArray(0)) +{ + // nothing to do + this->deleteData = true; + this->deleteArray = true; +} +Payload::Payload(CL_NS(util)::ValueArray& _data, const int32_t offset, const int32_t length, bool deleteData): + data(_data) +{ + this->deleteData = false; + this->deleteArray = false; + this->setData(data,offset,length,deleteData); +} +Payload::Payload(uint8_t* data, const int32_t length, bool deleteData): + data(*_CLNEW CL_NS(util)::ValueArray) +{ + this->deleteData = false; + this->deleteArray = false; + this->setData(data,length,deleteData); +} + +Payload::~Payload() { + if ( deleteData ) this->data.deleteValues(); + if ( deleteArray ) _CLLDELETE(&this->data); +} + +void Payload::setData(uint8_t* data, const int32_t length, bool deleteData) { + if ( this->deleteData ) this->data.deleteValues(); + if ( this->deleteArray ) { + _CLLDELETE(&this->data); + this->data = *_CLNEW CL_NS(util)::ValueArray; + } + if (length < 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"length < 0"); + } + this->data.length = offset+length; + this->data.values = data; + this->deleteData = deleteData; + this->deleteArray = true; + this->_length = length; + this->offset = 0; + assert(false); +} + +void Payload::setData(CL_NS(util)::ValueArray& data, const int32_t offset, const int32_t length, bool deleteData) { + if ( this->deleteData ) this->data.deleteValues(); + if ( this->deleteArray ) { + _CLLDELETE(&this->data); + } + + if (offset < 0 || offset + length > data.length) { + _CLTHROWA(CL_ERR_IllegalArgument,"offset < 0 || offset + length > data.length"); + } + this->data = data; + this->_length = ( length < 0 ? data.length-offset : length ); + this->offset = offset; + this->deleteData = this->deleteArray = deleteData; + assert(false); +} + +const CL_NS(util)::ValueArray& Payload::getData() const{ + return data; +} + +int32_t Payload::getOffset() const { return offset; } + +int32_t Payload::length() const { return _length; } + +uint8_t Payload::byteAt(int index) const { + if (0 <= index && index < this->_length) { + return this->data[this->offset + index]; + } + _CLTHROWA(CL_ERR_IndexOutOfBounds,"Array index out of bounds at Payload::byteAt"); +} + +CL_NS(util)::ValueArray* Payload::toByteArray() const{ + CL_NS(util)::ValueArray* ret = _CLNEW CL_NS(util)::ValueArray(this->_length); + memcpy(ret->values, this->data.values + this->offset, this->_length * sizeof(uint8_t)); + return ret; +} + +void Payload::copyTo(uint8_t* target, const int32_t targetLen) const { + if (this->_length > targetLen) { + _CLTHROWA(CL_ERR_IndexOutOfBounds,"Array index out of bounds at Payload::byteAt"); + } + memcpy(target, this->data.values + this->offset, this->_length * sizeof(uint8_t)); +} + +Payload* Payload::clone() const{ + Payload* clone = _CLNEW Payload(*this->toByteArray(), 0, -1, true); + return clone; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/Payload.h clucene-core-2.3.3.4/src/core/CLucene/index/Payload.h --- clucene-core-0.9.21b/src/core/CLucene/index/Payload.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/Payload.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,128 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_Payload_ +#define _lucene_index_Payload_ + +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** +* A Payload is metadata that can be stored together with each occurrence +* of a term. This metadata is stored inline in the posting list of the +* specific term. +*

+* To store payloads in the index a {@link TokenStream} has to be used that +* produces {@link Token}s containing payload data. +*

+* Use {@link TermPositions#getPayloadLength()} and {@link TermPositions#getPayload(byte[], int)} +* to retrieve the payloads from the index.
+* +*/ +class CLUCENE_EXPORT Payload:LUCENE_REFBASE { +protected: + CL_NS(util)::ValueArray& data; + + /** the offset within the byte array */ + int32_t offset; + + /** the length of the payload data */ + int32_t _length; + + bool deleteData; + bool deleteArray; +public: + + /** Creates an empty payload and does not allocate a byte array. */ + Payload(); + + /** + * Creates a new payload with the the given array as data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * + * @param data the data of this payload + * @param length the length of the data + * @param deleteData delete data when payload is deleted + */ + Payload(uint8_t* data, const int32_t length, bool deleteData=false); + + /** + * Creates a new payload with the the given array as data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * + * @param data the data of this payload + * @param deleteData delete data when payload is deleted + */ + Payload(CL_NS(util)::ValueArray& data, const int32_t offset=0, const int32_t length=-1, bool deleteData=false); + + /* Desctructor - auto-delete the data container */ + ~Payload(); + + /** + * Sets this payloads data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * @param deleteData delete data when payload is deleted + */ + void setData(uint8_t* data, const int32_t length, bool deleteData=false); + + /** + * Sets this payloads data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * @param deleteData delete data when payload is deleted + */ + void setData(CL_NS(util)::ValueArray& data, const int32_t offset=0, const int32_t length=-1, bool deleteData=false); + + /** + * Returns a reference to the underlying byte array + * that holds this payloads data. + */ + const CL_NS(util)::ValueArray& getData() const; + + /** + * Returns the length of the payload data. + */ + int32_t length() const; + + /** + * Returns the offset in the underlying byte array + */ + int32_t getOffset() const; + + /** + * Returns the byte at the given index. + */ + uint8_t byteAt(int index) const; + + /** + * Allocates a new byte array, copies the payload data into it and returns it. Caller is responsible + * for deleting it later. + * @memory caller is responsible for deleting the returned array + */ + CL_NS(util)::ValueArray* toByteArray() const; + + /** + * Copies the payload data to a byte array. + * + * @param target the target byte array + * @param targetOffset the offset in the target byte array + */ + void copyTo(uint8_t* target, const int32_t targetLen) const; + + /** + * Clones this payload by creating a copy of the underlying + * byte array. + */ + Payload* clone() const; + +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_SegmentHeader.h clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentHeader.h --- clucene-core-0.9.21b/src/core/CLucene/index/_SegmentHeader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentHeader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,447 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SegmentHeader_ +#define _lucene_index_SegmentHeader_ + +#include "_SegmentInfos.h" +#include "CLucene/util/BitSet.h" +//#include "CLucene/util/VoidMap.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/index/IndexReader.h" +#include "Term.h" +#include "Terms.h" +#include "_TermInfo.h" +//#include "FieldInfos.h" +#include "_FieldsReader.h" +#include "_TermVector.h" +//#include "IndexReader.h" +#include "_TermInfosReader.h" +#include "_CompoundFile.h" +#include "DirectoryIndexReader.h" +#include "_SkipListReader.h" +#include "CLucene/util/_ThreadLocal.h" + +CL_NS_DEF(index) +class SegmentReader; + +class SegmentTermDocs:public virtual TermDocs { +protected: + const SegmentReader* parent; + CL_NS(store)::IndexInput* freqStream; + int32_t count; + int32_t df; + CL_NS(util)::BitSet* deletedDocs; + int32_t _doc; + int32_t _freq; + +private: + int32_t skipInterval; + int32_t maxSkipLevels; + DefaultSkipListReader* skipListReader; + + int64_t freqBasePointer; + int64_t proxBasePointer; + + int64_t skipPointer; + bool haveSkipped; + +protected: + bool currentFieldStoresPayloads; + +public: + ///\param Parent must be a segment reader + SegmentTermDocs( const SegmentReader* Parent); + virtual ~SegmentTermDocs(); + + virtual void seek(Term* term); + virtual void seek(TermEnum* termEnum); + virtual void seek(const TermInfo* ti,Term* term); + + virtual void close(); + virtual int32_t doc()const; + virtual int32_t freq()const; + + virtual bool next(); + + /** Optimized implementation. */ + virtual int32_t read(int32_t* docs, int32_t* freqs, int32_t length); + + /** Optimized implementation. */ + virtual bool skipTo(const int32_t target); + + virtual TermPositions* __asTermPositions(); + +protected: + virtual void skippingDoc(){} + virtual void skipProx(const int64_t /*proxPointer*/, const int32_t /*payloadLength*/){} +}; + + +class SegmentTermPositions: public SegmentTermDocs, public TermPositions { +private: + CL_NS(store)::IndexInput* proxStream; + int32_t proxCount; + int32_t position; + + // the current payload length + int32_t payloadLength; + // indicates whether the payload of the currend position has + // been read from the proxStream yet + bool needToLoadPayload; + + // these variables are being used to remember information + // for a lazy skip + int64_t lazySkipPointer; + int32_t lazySkipProxCount; + +public: + ///\param Parent must be a segment reader + SegmentTermPositions(const SegmentReader* Parent); + virtual ~SegmentTermPositions(); + +private: + void seek(const TermInfo* ti, Term* term); + +public: + void close(); + + int32_t nextPosition(); +private: + int32_t readDeltaPosition(); + +protected: + void skippingDoc(); + +public: + bool next(); + int32_t read(int32_t* docs, int32_t* freqs, int32_t length); + +protected: + /** Called by super.skipTo(). */ + void skipProx(const int64_t proxPointer, const int32_t _payloadLength); + +private: + void skipPositions( int32_t n ); + void skipPayload(); + + // It is not always neccessary to move the prox pointer + // to a new document after the freq pointer has been moved. + // Consider for example a phrase query with two terms: + // the freq pointer for term 1 has to move to document x + // to answer the question if the term occurs in that document. But + // only if term 2 also matches document x, the positions have to be + // read to figure out if term 1 and term 2 appear next + // to each other in document x and thus satisfy the query. + // So we move the prox pointer lazily to the document + // as soon as positions are requested. + void lazySkip(); + +public: + int32_t getPayloadLength() const; + + uint8_t* getPayload(uint8_t* data); + + bool isPayloadAvailable() const; + +private: + virtual TermDocs* __asTermDocs(); + virtual TermPositions* __asTermPositions(); + + //resolve SegmentTermDocs/TermPositions ambiguity + void seek(Term* term){ SegmentTermDocs::seek(term); } + void seek(TermEnum* termEnum){ SegmentTermDocs::seek(termEnum); } + int32_t doc() const{ return SegmentTermDocs::doc(); } + int32_t freq() const{ return SegmentTermDocs::freq(); } + bool skipTo(const int32_t target){ return SegmentTermDocs::skipTo(target); } +}; + + + + +/** + * An IndexReader responsible for reading 1 segment of an index + */ +class SegmentReader: public DirectoryIndexReader { + /** + * The class Norm represents the normalizations for a field. + * These normalizations are read from an IndexInput in into an array of bytes called bytes + */ + class Norm :LUCENE_BASE{ + int32_t number; + int64_t normSeek; + SegmentReader* _this; + const char* segment; ///< pointer to segment name + volatile int32_t refCount; + bool useSingleNormStream; + bool rollbackDirty; + + + /** Closes the underlying IndexInput for this norm. + * It is still valid to access all other norm properties after close is called. + * @throws IOException + */ + void close(); + public: + DEFINE_MUTEX(THIS_LOCK) + + CL_NS(store)::IndexInput* in; + uint8_t* bytes; + bool dirty; + //Constructor + Norm(CL_NS(store)::IndexInput* instrm, bool useSingleNormStream, int32_t number, int64_t normSeek, SegmentReader* reader, const char* segment); + //Destructor + ~Norm(); + + void reWrite(SegmentInfo* si); + + void incRef(); + void decRef(); + friend class SegmentReader; + + static void doDelete(Norm* norm); + }; + friend class SegmentReader::Norm; + + //Holds the name of the segment that is being read + std::string segment; + SegmentInfo* si; + int32_t readBufferSize; + + //Indicates if there are documents marked as deleted + bool deletedDocsDirty; + bool normsDirty; + bool undeleteAll; + + bool rollbackDeletedDocsDirty; + bool rollbackNormsDirty; + bool rollbackUndeleteAll; + + + //Holds all norms for all fields in the segment + typedef CL_NS(util)::CLHashtable NormsType; + NormsType _norms; + + uint8_t* ones; + uint8_t* fakeNorms(); + + // optionally used for the .nrm file shared by multiple norms + CL_NS(store)::IndexInput* singleNormStream; + + // Compound File Reader when based on a compound file segment + CompoundFileReader* cfsReader; + CompoundFileReader* storeCFSReader; + + ///Reads the Field Info file + FieldsReader* fieldsReader; + TermVectorsReader* termVectorsReaderOrig; + CL_NS(util)::ThreadLocal >termVectorsLocal; + + void initialize(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores, bool doingReopen); + + /** + * Create a clone from the initial TermVectorsReader and store it in the ThreadLocal. + * @return TermVectorsReader + */ + TermVectorsReader* getTermVectorsReader(); + + FieldsReader* getFieldsReader(); + FieldInfos* getFieldInfos(); + +protected: + ///Marks document docNum as deleted + void doDelete(const int32_t docNum); + void doUndeleteAll(); + void commitChanges(); + void doSetNorm(int32_t doc, const TCHAR* field, uint8_t value); + + // can return null if norms aren't stored + uint8_t* getNorms(const TCHAR* field); + + /** + * Decrements the RC of the norms this reader is using + */ + void decRefNorms(); + + + DirectoryIndexReader* doReopen(SegmentInfos* infos); + +public: + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfo* si, bool doOpenStores=true); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores=true); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfos* sis, SegmentInfo* si, bool closeDir); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param readBufferSize defaults to BufferedIndexInput::BUFFER_SIZE + */ + static SegmentReader* get(CL_NS(store)::Directory* dir, SegmentInfo* si, + SegmentInfos* sis, + bool closeDir, bool ownDir, + int32_t readBufferSize=-1, + bool doOpenStores=true); + + + + SegmentReader(); + ///Destructor. + virtual ~SegmentReader(); + + ///Closes all streams to the files of a single segment + void doClose(); + + ///Checks if a segment managed by SegmentInfo si has deletions + static bool hasDeletions(const SegmentInfo* si); + bool hasDeletions() const; + bool hasNorms(const TCHAR* field); + + ///Returns all file names managed by this SegmentReader + void files(std::vector& retarray); + ///Returns an enumeration of all the Terms and TermInfos in the set. + TermEnum* terms(); + ///Returns an enumeration of terms starting at or after the named term t + TermEnum* terms(const Term* t); + + ///Gets the document identified by n + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + + ///Checks if the n-th document has been marked deleted + bool isDeleted(const int32_t n); + + ///Returns an unpositioned TermDocs enumerator. + TermDocs* termDocs(); + ///Returns an unpositioned TermPositions enumerator. + TermPositions* termPositions(); + + ///Returns the number of documents which contain the term t + int32_t docFreq(const Term* t); + + ///Returns the actual number of documents in the segment + int32_t numDocs(); + ///Returns the number of all the documents in the segment including the ones that have + ///been marked deleted + int32_t maxDoc() const; + + + void setTermInfosIndexDivisor(int32_t indexDivisor); + + int32_t getTermInfosIndexDivisor(); + + ///Returns the bytes array that holds the norms of a named field. + ///Returns fake norms if norms aren't available + uint8_t* norms(const TCHAR* field); + + ///Reads the Norms for field from disk + void norms(const TCHAR* field, uint8_t* bytes); + + ///concatenating segment with ext and x + std::string SegmentName(const char* ext, const int32_t x=-1); + ///Creates a filename in buffer by concatenating segment with ext and x + void SegmentName(char* buffer,int32_t bufferLen,const char* ext, const int32_t x=-1 ); + + /** + * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) + */ + void getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray); + + static bool usesCompoundFile(SegmentInfo* si); + + /** Return a term frequency vector for the specified document and field. The + * vector returned contains term numbers and frequencies for all terms in + * the specified field of this document, if the field had storeTermVector + * flag set. If the flag was not set, the method returns null. + * @throws IOException + */ + TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field=NULL); + + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + + /** Return an array of term frequency vectors for the specified document. + * The array contains a vector for each vectorized field in the document. + * Each vector vector contains term numbers and frequencies for all terms + * in a given vectorized field. + * If no such fields existed, the method returns null. + * @throws IOException + */ + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber); + + static const char* getClassName(); + const char* getObjectName() const; + + // for testing only + bool normsClosed(); + +private: + //Open all norms files for all fields + void openNorms(CL_NS(store)::Directory* cfsDir, int32_t readBufferSize); + + ///a bitVector that manages which documents have been deleted + CL_NS(util)::BitSet* deletedDocs; + ///an IndexInput to the frequency file + CL_NS(store)::IndexInput* freqStream; + ///For reading the fieldInfos file + FieldInfos* _fieldInfos; + ///For reading the Term Dictionary .tis file + TermInfosReader* tis; + ///an IndexInput to the prox file + CL_NS(store)::IndexInput* proxStream; + + static bool hasSeparateNorms(SegmentInfo* si); + static uint8_t* createFakeNorms(int32_t size); + + void loadDeletedDocs(); + SegmentReader* reopenSegment(SegmentInfo* si); + + /** Returns the field infos of this segment */ + FieldInfos* fieldInfos(); + + /** + * Return the name of the segment this reader is reading. + */ + const char* getSegmentName(); + + /** + * Return the SegmentInfo of the segment this reader is reading. + */ + SegmentInfo* getSegmentInfo(); + void setSegmentInfo(SegmentInfo* info); + void startCommit(); + void rollbackCommit(); + + //allow various classes to access the internals of this. this allows us to have + //a more tight idea of the package + friend class IndexReader; + friend class IndexWriter; + friend class SegmentTermDocs; + friend class SegmentTermPositions; + friend class MultiReader; + friend class MultiSegmentReader; + friend class SegmentMerger; +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentInfos.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentInfos.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentInfos.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentInfos.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1131 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "_SegmentInfos.h" +#include "_IndexFileNames.h" +#include "_SegmentHeader.h" +#include "MultiReader.h" +#include +#include + +#include "CLucene/store/Directory.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(store) +CL_NS_USE(util) + +CL_NS_DEF(index) + +SegmentInfo::SegmentInfo(const char* _name, const int32_t _docCount, CL_NS(store)::Directory* _dir, + bool _isCompoundFile, bool _hasSingleNormFile, + int32_t _docStoreOffset, const char* _docStoreSegment, bool _docStoreIsCompoundFile) + : + docCount(_docCount), + preLockless(false), + delGen(SegmentInfo::NO), + isCompoundFile(_isCompoundFile ? SegmentInfo::YES : SegmentInfo::NO), + hasSingleNormFile(_hasSingleNormFile), + _sizeInBytes(-1), + docStoreOffset(_docStoreOffset), + docStoreSegment( _docStoreSegment == NULL ? "" : _docStoreSegment ), + docStoreIsCompoundFile(_docStoreIsCompoundFile) +{ + CND_PRECONDITION(docStoreOffset == -1 || !docStoreSegment.empty(), "failed testing for (docStoreOffset == -1 || docStoreSegment != NULL)"); + + this->name = _name; + this->dir = _dir; +} + +string SegmentInfo::segString(Directory* dir) { + string cfs; + try { + if (getUseCompoundFile()) + cfs = "c"; + else + cfs = "C"; + } catch (CLuceneError& ioe) { + if ( ioe.number() != CL_ERR_IO ) throw ioe; + cfs = "?"; + } + + string docStore; + + if (docStoreOffset != -1) + docStore = string("->") + docStoreSegment; + else + docStore = ""; + + return string(name) + ":" + + cfs + + string(this->dir == dir ? "" : "x") + + Misc::toString(docCount) + docStore; +} + SegmentInfo::SegmentInfo(CL_NS(store)::Directory* _dir, int32_t format, CL_NS(store)::IndexInput* input): + _sizeInBytes(-1) + { + this->dir = _dir; + + { + char aname[CL_MAX_PATH]; + input->readString(aname, CL_MAX_PATH); + this->name = aname; + } + + docCount = input->readInt(); + if (format <= SegmentInfos::FORMAT_LOCKLESS) { + delGen = input->readLong(); + if (format <= SegmentInfos::FORMAT_SHARED_DOC_STORE) { + docStoreOffset = input->readInt(); + if (docStoreOffset != -1) { + char aname[CL_MAX_PATH]; + input->readString(aname, CL_MAX_PATH); + docStoreSegment = aname; + docStoreIsCompoundFile = (1 == input->readByte()); + } else { + docStoreSegment = name; + docStoreIsCompoundFile = false; + } + } else { + docStoreOffset = -1; + docStoreSegment = name; + docStoreIsCompoundFile = false; + } + if (format <= SegmentInfos::FORMAT_SINGLE_NORM_FILE) { + hasSingleNormFile = (1 == input->readByte()); + } else { + hasSingleNormFile = false; + } + int32_t numNormGen = input->readInt(); + normGen.deleteValues(); + if (numNormGen == NO) { + // normGen is already NULL, we'll just set normGenLen to 0 + } else { + normGen.values = _CL_NEWARRAY(int64_t, numNormGen); + normGen.length = numNormGen; + for(int32_t j=0;jreadLong(); + } + } + isCompoundFile = input->readByte(); + preLockless = (isCompoundFile == CHECK_DIR); + } else { + delGen = CHECK_DIR; + //normGen=NULL; normGenLen=0; + isCompoundFile = CHECK_DIR; + preLockless = true; + hasSingleNormFile = false; + docStoreOffset = -1; + docStoreIsCompoundFile = false; + } + } + + void SegmentInfo::reset(const SegmentInfo* src) { + clearFiles(); + this->name = src->name; + docCount = src->docCount; + dir = src->dir; + preLockless = src->preLockless; + delGen = src->delGen; + docStoreOffset = src->docStoreOffset; + docStoreIsCompoundFile = src->docStoreIsCompoundFile; + if (src->normGen.values == NULL) { + this->normGen.deleteValues(); + }else{ + // optimized case to allocate new array only if current memory buffer is too small + if (this->normGen.length < src->normGen.length) { + normGen.resize(src->normGen.length); + }else{ + this->normGen.length = src->normGen.length; + } + memcpy(this->normGen.values, src->normGen.values, sizeof(int64_t) * this->normGen.length); + } + isCompoundFile = src->isCompoundFile; + hasSingleNormFile = src->hasSingleNormFile; + } + + SegmentInfo::~SegmentInfo(){ + normGen.deleteValues(); + } + + void SegmentInfo::setNumFields(const int32_t numFields) { + if (normGen.values == NULL) { + // normGen is null if we loaded a pre-2.1 segment + // file, or, if this segments file hasn't had any + // norms set against it yet: + normGen.resize(numFields); + + if (preLockless) { + // Do nothing: thus leaving normGen[k]==CHECK_DIR (==0), so that later we know + // we have to check filesystem for norm files, because this is prelockless. + + } else { + // This is a FORMAT_LOCKLESS segment, which means + // there are no separate norms: + for(int32_t i=0;i& __files = files(); + size_t size = __files.size(); + _sizeInBytes = 0; + for(size_t i=0;ifileLength(fileName); + } + } + return _sizeInBytes; + } + + void SegmentInfo::addIfExists(std::vector& files, const std::string& fileName){ + if (dir->fileExists(fileName.c_str())) + files.push_back(fileName); + } + + const vector& SegmentInfo::files(){ + if (!_files.empty()) { + // Already cached: + return _files; + } + + bool useCompoundFile = getUseCompoundFile(); + + if (useCompoundFile) { + _files.push_back( string(name) + "." + IndexFileNames::COMPOUND_FILE_EXTENSION); + } else { + ConstValueArray& exts = IndexFileNames::NON_STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i& exts = IndexFileNames::STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i& exts = IndexFileNames::STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i= YES || dir->fileExists(delFileName.c_str()))) { + _files.push_back(delFileName); + } + + // Careful logic for norms files + if (normGen.values != NULL) { + for(size_t i=0;i= YES) { + // Definitely a separate norm file, with generation: + string gens = string(".") + IndexFileNames::SEPARATE_NORMS_EXTENSION; + gens += Misc::toString((int64_t)i); + _files.push_back(IndexFileNames::fileNameFromGeneration(name.c_str(), gens.c_str(), gen)); + } else if (NO == gen) { + // No separate norms but maybe plain norms + // in the non compound file case: + if (!hasSingleNormFile && !useCompoundFile) { + string fileName = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + fileName += i; + if (dir->fileExists(fileName.c_str())) { + _files.push_back(fileName); + } + } + } else if (CHECK_DIR == gen) { + // Pre-2.1: we have to check file existence + string fileName; + if (useCompoundFile) { + fileName = name + "." + IndexFileNames::SEPARATE_NORMS_EXTENSION; + fileName += Misc::toString((int64_t)i); + } else if (!hasSingleNormFile) { + fileName = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + fileName += Misc::toString((int64_t)i); + } + if ( !fileName.empty() && dir->fileExists(fileName.c_str())) { + _files.push_back(fileName); + } + } + } + } else if (preLockless || (!hasSingleNormFile && !useCompoundFile)) { + // Pre-2.1: we have to scan the dir to find all + // matching _X.sN/_X.fN files for our segment: + string prefix; + if (useCompoundFile) + prefix = name + "." + IndexFileNames::SEPARATE_NORMS_EXTENSION; + else + prefix = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + size_t prefixLength = prefix.length(); + vector allFiles; + if (dir->list(allFiles) == false ){ + string err = "cannot read directory "; + err += dir->toString(); + err += ": list() returned null"; + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + for(size_t i=0;i prefixLength && _istdigit(fileName[prefixLength]) && fileName.compare(0,prefix.length(),prefix)==0 ) { + _files.push_back(fileName); + } + } + } + return _files; + } + + + + bool SegmentInfo::hasDeletions() const { + // Cases: + // + // delGen == NO: this means this segment was written + // by the LOCKLESS code and for certain does not have + // deletions yet + // + // delGen == CHECK_DIR: this means this segment was written by + // pre-LOCKLESS code which means we must check + // directory to see if .del file exists + // + // delGen >= YES: this means this segment was written by + // the LOCKLESS code and for certain has + // deletions + // + if (delGen == NO) { + return false; + } else if (delGen >= YES) { + return true; + } else { + return dir->fileExists(getDelFileName().c_str()); + } + } + + void SegmentInfo::advanceDelGen() { + // delGen 0 is reserved for pre-LOCKLESS format + if (delGen == NO) { + delGen = YES; + } else { + delGen++; + } + clearFiles(); + } + + void SegmentInfo::clearDelGen() { + delGen = NO; + clearFiles(); + } + + SegmentInfo* SegmentInfo::clone () { + SegmentInfo* si = _CLNEW SegmentInfo(name.c_str(), docCount, dir); + si->isCompoundFile = isCompoundFile; + si->delGen = delGen; + si->preLockless = preLockless; + si->hasSingleNormFile = hasSingleNormFile; + if (this->normGen.values != NULL) { + si->normGen.resize(this->normGen.length); + memcpy(si->normGen.values, this->normGen.values, sizeof(int64_t) * this->normGen.length); + } + si->docStoreOffset = docStoreOffset; + si->docStoreSegment = docStoreSegment; + si->docStoreIsCompoundFile = docStoreIsCompoundFile; + + return si; + } + + string SegmentInfo::getDelFileName() const { + if (delGen == NO) { + // In this case we know there is no deletion filename + // against this segment + return NULL; + } else { + // If delGen is CHECK_DIR, it's the pre-lockless-commit file format + return IndexFileNames::fileNameFromGeneration(name.c_str(), (string(".") + IndexFileNames::DELETES_EXTENSION).c_str(), delGen); + } + } + + bool SegmentInfo::hasSeparateNorms(const int32_t fieldNumber) const { + if ((normGen.values == NULL && preLockless) || (normGen.values != NULL && normGen[fieldNumber] == CHECK_DIR)) { + // Must fallback to directory file exists check: + return dir->fileExists( (name + string(".s") + Misc::toString(fieldNumber)).c_str() ); + } else if (normGen.values == NULL || normGen[fieldNumber] == NO) { + return false; + } else { + return true; + } + } + + bool SegmentInfo::hasSeparateNorms() const { + if (normGen.values == NULL) { + if (!preLockless) { + // This means we were created w/ LOCKLESS code and no + // norms are written yet: + return false; + } else { + // This means this segment was saved with pre-LOCKLESS + // code. So we must fallback to the original + // directory list check: + vector result; + if ( !dir->list(result) ) { + _CLTHROWA(CL_ERR_IO, (string("cannot read directory: ") + dir->toString() + string(" list() returned NULL")).c_str() ); + } + + string pattern = name + string(".s"); + for ( vector::iterator itr = result.begin(); + itr != result.end() ; itr ++ ){ + if(strncmp(itr->c_str(), pattern.c_str(), pattern.length() ) == 0 && + isdigit( (*itr)[pattern.length()])) { + return true; + } + } + return false; + } + } else { + // This means this segment was saved with LOCKLESS + // code so we first check whether any normGen's are >= 1 + // (meaning they definitely have separate norms): + for(size_t i=0;i= YES) { + return true; + } + } + // Next we look for any == 0. These cases were + // pre-LOCKLESS and must be checked in directory: + for(size_t j=0;jisCompoundFile = YES; + } else { + this->isCompoundFile = NO; + } + clearFiles(); + } + + bool SegmentInfo::getUseCompoundFile() const { + if (isCompoundFile == NO) { + return false; + } else if (isCompoundFile == YES) { + return true; + } else { + return dir->fileExists( ((string)name + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str() ); + } + } + + int32_t SegmentInfo::getDocStoreOffset() const { return docStoreOffset; } + + bool SegmentInfo::getDocStoreIsCompoundFile() const { return docStoreIsCompoundFile; } + + void SegmentInfo::setDocStoreIsCompoundFile(const bool v) { + docStoreIsCompoundFile = v; + clearFiles(); + } + + const string& SegmentInfo::getDocStoreSegment() const { + return docStoreSegment; + } + + void SegmentInfo::setDocStoreOffset(const int32_t offset) { + docStoreOffset = offset; + clearFiles(); + } + + void SegmentInfo::write(CL_NS(store)::IndexOutput* output) { + output->writeString(name); + output->writeInt(docCount); + output->writeLong(delGen); + output->writeInt(docStoreOffset); + if (docStoreOffset != -1) { + output->writeString(docStoreSegment); + output->writeByte(static_cast(docStoreIsCompoundFile ? 1:0)); + } + + output->writeByte(static_cast(hasSingleNormFile ? 1:0)); + if (normGen.values == NULL) { + output->writeInt(NO); + } else { + output->writeInt(normGen.length); + for(size_t j = 0; j < normGen.length; j++) { + output->writeLong(normGen[j]); + } + } + output->writeByte(isCompoundFile); + } + + void SegmentInfo::clearFiles() { + _files.clear(); + _sizeInBytes = -1; + } + + /** We consider another SegmentInfo instance equal if it + * has the same dir and same name. */ + bool SegmentInfo::equals(const SegmentInfo* obj) { + return (obj->dir == this->dir && obj->name.compare(this->name) == 0 ); + } + + + + + + std::ostream* SegmentInfos::infoStream = NULL; + + /** If non-null, information about retries when loading + * the segments file will be printed to this. + */ + void SegmentInfos::setInfoStream(std::ostream* infoStream) { + SegmentInfos::infoStream = infoStream; + } + + /** + * @see #setInfoStream + */ + std::ostream* SegmentInfos::getInfoStream() { + return infoStream; + } + + SegmentInfos::SegmentInfos(bool deleteMembers, int32_t reserveCount) : + generation(0),lastGeneration(0), infos(deleteMembers) { + //Func - Constructor + //Pre - deleteMembers indicates if the instance to be created must delete + // all SegmentInfo instances it manages when the instance is destroyed or not + // true -> must delete, false may not delete + //Post - An instance of SegmentInfos has been created. + + //initialize counter to 0 + counter = 0; + version = Misc::currentTimeMillis(); + if (reserveCount > 1) + infos.reserve(reserveCount); + } + + SegmentInfos::~SegmentInfos(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed. Depending on the constructor used + // the SegmentInfo instances that this instance managed have been deleted or not. + + //Clear the list of SegmentInfo instances - make sure everything is deleted + infos.clear(); + } + + SegmentInfo* SegmentInfos::info(int32_t i) const { + //Func - Returns a reference to the i-th SegmentInfo in the list. + //Pre - i >= 0 + //Post - A reference to the i-th SegmentInfo instance has been returned + + CND_PRECONDITION(i >= 0 && i < infos.size(), "i is out of bounds"); + + //Get the i-th SegmentInfo instance + SegmentInfo *ret = infos[i]; + + //Condition check to see if the i-th SegmentInfo has been retrieved + CND_CONDITION(ret != NULL,"No SegmentInfo instance found"); + + return ret; + } + + int64_t SegmentInfos::getCurrentSegmentGeneration( std::vector& files ) { + if ( files.size() == 0 ) { + return -1; + } + + int64_t max = -1; + + vector::iterator itr = files.begin(); + const char* file; + size_t seglen = strlen(IndexFileNames::SEGMENTS); + while ( itr != files.end() ) { + file = itr->c_str(); + if ( strncmp( file, IndexFileNames::SEGMENTS, seglen ) == 0 && strcmp( file, IndexFileNames::SEGMENTS_GEN ) != 0 ) { + int64_t gen = generationFromSegmentsFileName( file ); + if ( gen > max ) { + max = gen; + } + } + + itr++; + } + + return max; + } + + int64_t SegmentInfos::getCurrentSegmentGeneration( const CL_NS(store)::Directory* directory ) { + vector files; + if ( !directory->list(&files) ){ + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + string(": list() returned NULL")).c_str() ); + } + int64_t gen = getCurrentSegmentGeneration( files ); + return gen; + } + + string SegmentInfos::getCurrentSegmentFileName( vector& files ) { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", getCurrentSegmentGeneration( files )); + } + + std::string SegmentInfos::getCurrentSegmentFileName( CL_NS(store)::Directory* directory ) { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", getCurrentSegmentGeneration( directory )); + } + + std::string SegmentInfos::getCurrentSegmentFileName() { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", lastGeneration ); + } + + int64_t SegmentInfos::generationFromSegmentsFileName( const char* fileName ) { + if ( strcmp( fileName, IndexFileNames::SEGMENTS ) == 0 ) { + return 0; + } else if ( strncmp( fileName, IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS) ) == 0 ) { + return CL_NS(util)::Misc::base36ToLong( fileName + strlen( IndexFileNames::SEGMENTS )+1 ); + } else { + TCHAR err[CL_MAX_PATH + 35]; + _sntprintf(err,CL_MAX_PATH + 35,_T("fileName \"%s\" is not a segments file"), fileName); + _CLTHROWA(CL_ERR_IllegalArgument, err); + return 0; + } + } + + std::string SegmentInfos::getNextSegmentFileName() { + int64_t nextGeneration; + + if ( generation == -1 ) { + nextGeneration = 1; + } else { + nextGeneration = generation+1; + } + + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", nextGeneration ); + } + + void SegmentInfos::clearto(size_t from, size_t end){ + size_t range = end - from; + if ( (infos.size() - from) >= range) { // Make sure we actually need to remove + segmentInfosType::iterator itr,bitr=infos.begin()+from,eitr=infos.end(); + size_t count = 0; + for(itr=bitr;itr!=eitr && count < range;++itr, count++) { + _CLLDELETE((*itr)); + } + infos.erase(bitr,bitr + count); + } + } + void SegmentInfos::add(SegmentInfo* info, int32_t pos){ + if ( pos == -1 ){ + infos.push_back(info); + }else{ + if ( pos < 0 || pos >= (int32_t)infos.size()+1 ) _CLTHROWA(CL_ERR_IllegalArgument, "pos is out of range"); + infos.insert( infos.begin()+pos, info ); + } + } + int32_t SegmentInfos::size() const{ + return infos.size(); + } + SegmentInfo* SegmentInfos::elementAt(int32_t pos) { + return infos.at(pos); + } + void SegmentInfos::setElementAt(SegmentInfo* si, int32_t pos) { + infos.set(pos, si); + } + void SegmentInfos::clear() { infos.clear(); } + + + void SegmentInfos::insert(SegmentInfos* _infos, bool takeMemory){ + infos.insert(infos.end(),_infos->infos.begin(),_infos->infos.end()); + if ( takeMemory ){ + while (_infos->infos.size() > 0 ) + _infos->infos.remove(_infos->infos.begin(), true ); + } + } + void SegmentInfos::insert(SegmentInfo* info){ + infos.push_back(info); + } + int32_t SegmentInfos::indexOf(const SegmentInfo* info) const{ + segmentInfosType::const_iterator itr = infos.begin(); + int32_t c=-1; + while ( itr != infos.end()){ + c++; + if ( *itr == info ){ + return c; + } + itr++; + } + return -1; + } + void SegmentInfos::range(size_t from, size_t to, SegmentInfos& ret) const{ + segmentInfosType::const_iterator itr = infos.begin(); + itr+= from; + for (size_t i=from;iopenInput(segmentFileName); + CND_CONDITION(input != NULL,"input == NULL"); + + generation = generationFromSegmentsFileName( segmentFileName ); + lastGeneration = generation; + + try { + int32_t format = input->readInt(); + if(format < 0){ // file contains explicit format info + // check that it is a format we can understand + if (format < CURRENT_FORMAT){ + char err[30]; + cl_sprintf(err,30,"Unknown format version: %d", format); + _CLTHROWA(CL_ERR_CorruptIndex, err); + } + version = input->readLong(); // read version + counter = input->readInt(); // read counter + } + else{ // file is in old format without explicit format info + counter = format; + } + + for (int32_t i = input->readInt(); i > 0; i--) { // read segmentInfos + infos.push_back( _CLNEW SegmentInfo(directory, format, input) ); + } + + if(format >= 0){ // in old format the version number may be at the end of the file + if (input->getFilePointer() >= input->length()) + version = CL_NS(util)::Misc::currentTimeMillis(); // old file format without version number + else + version = input->readLong(); // read version + } + success = true; + } _CLFINALLY({ + input->close(); + _CLDELETE(input); + if (!success) { + // Clear any segment infos we had loaded so we + // have a clean slate on retry: + clear(); + } + }); + } + + void SegmentInfos::read(Directory* directory) { + generation = lastGeneration = -1; + + FindSegmentsRead find(directory, this); + + find.run(); + } + + + void SegmentInfos::write(Directory* directory){ + //Func - Writes a new segments file based upon the SegmentInfo instances it manages + //Pre - directory is a valid reference to a Directory + //Post - The new segment has been written to disk + + string segmentFileName = getNextSegmentFileName(); + + // Always advance the generation on write: + if (generation == -1) { + generation = 1; + } else { + generation++; + } + + IndexOutput* output = directory->createOutput(segmentFileName.c_str()); + + bool success = false; + + try { + output->writeInt(CURRENT_FORMAT); // write FORMAT + output->writeLong(++version); // every write changes + // the index + output->writeInt(counter); // write counter + output->writeInt(size()); // write infos + for (int32_t i = 0; i < size(); i++) { + info(i)->write(output); + } + }_CLFINALLY ( + try { + output->close(); + _CLDELETE(output); + success = true; + } _CLFINALLY ( + if (!success) { + // Try not to leave a truncated segments_N file in + // the index: + directory->deleteFile(segmentFileName.c_str()); + } + ) + ) + + try { + output = directory->createOutput(IndexFileNames::SEGMENTS_GEN); + try { + output->writeInt(FORMAT_LOCKLESS); + output->writeLong(generation); + output->writeLong(generation); + } _CLFINALLY( + output->close(); + _CLDELETE(output); + ) + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ) throw e; + // It's OK if we fail to write this file since it's + // used only as one of the retry fallbacks. + } + + lastGeneration = generation; + } + + SegmentInfos* SegmentInfos::clone() const{ + SegmentInfos* sis = _CLNEW SegmentInfos(true, infos.size()); + for(size_t i=0;isetElementAt(infos[i]->clone(), i); + } + return sis; + } + + int64_t SegmentInfos::getVersion() const { return version; } + int64_t SegmentInfos::getGeneration() const { return generation; } + int64_t SegmentInfos::getLastGeneration() const { return lastGeneration; } + + int64_t SegmentInfos::readCurrentVersion(Directory* directory){ + FindSegmentsVersion find(directory); + return find.run(); + } + + //void SegmentInfos::setDefaultGenFileRetryCount(const int32_t count) { defaultGenFileRetryCount = count; } + int32_t SegmentInfos::getDefaultGenFileRetryCount() { return defaultGenFileRetryCount; } + + //void SegmentInfos::setDefaultGenFileRetryPauseMsec(const int32_t msec) { defaultGenFileRetryPauseMsec = msec; } + int32_t SegmentInfos::getDefaultGenFileRetryPauseMsec() { return defaultGenFileRetryPauseMsec; } + + //void SegmentInfos::setDefaultGenLookaheadCount(const int32_t count) { defaultGenLookaheadCount = count;} + int32_t SegmentInfos::getDefaultGenLookahedCount() { return defaultGenLookaheadCount; } + + void SegmentInfos::_FindSegmentsFile::doRun(){ + string segmentFileName; + int64_t lastGen = -1; + int64_t gen = 0; + int32_t genLookaheadCount = 0; + bool retry = false; + CLuceneError exc; //saved exception + + int32_t method = 0; + + // Loop until we succeed in calling doBody() without + // hitting an IOException. An IOException most likely + // means a commit was in process and has finished, in + // the time it took us to load the now-old infos files + // (and segments files). It's also possible it's a + // true error (corrupt index). To distinguish these, + // on each retry we must see "forward progress" on + // which generation we are trying to load. If we + // don't, then the original error is real and we throw + // it. + + // We have three methods for determining the current + // generation. We try the first two in parallel, and + // fall back to the third when necessary. + + while( true ) { + + if ( 0 == method ) { + // Method 1: list the directory and use the highest + // segments_N file. This method works well as long + // as there is no stale caching on the directory + // contents (NOTE: NFS clients often have such stale + // caching): + vector files; + + int64_t genA = -1; + + if (directory != NULL){ + if (directory->list(&files)) { + genA = getCurrentSegmentGeneration( files ); + files.clear(); + } + } + + + if ( infoStream ){ + (*infoStream) << "[SIS]: directory listing genA=" << genA << "\n"; + } + + // Method 2: open segments.gen and read its + // contents. Then we take the larger of the two + // gen's. This way, if either approach is hitting + // a stale cache (NFS) we have a better chance of + // getting the right generation. + int64_t genB = -1; + if (directory != NULL) { + CLuceneError e; + for(int32_t i=0;iopenInput(IndexFileNames::SEGMENTS_GEN, genInput, e) ){ + if (e.number() == CL_ERR_IO ) { + if ( infoStream ){ + (*infoStream) << "[SIS]: segments.gen open: IOException " << e.what() << "\n"; + } + break; + } else { + genInput->close(); + _CLLDELETE(genInput); + throw e; + } + } + + if (genInput != NULL) { + try { + int32_t version = genInput->readInt(); + if (version == FORMAT_LOCKLESS) { + int64_t gen0 = genInput->readLong(); + int64_t gen1 = genInput->readLong(); + //CL_TRACE("fallback check: %d; %d", gen0, gen1); + if (gen0 == gen1) { + // The file is consistent. + genB = gen0; + genInput->close(); + _CLDELETE(genInput); + break; + } + } + } catch (CLuceneError &err2) { + if (err2.number() != CL_ERR_IO) { + genInput->close(); + _CLLDELETE(genInput); + throw err2; // retry only for IOException + } + } _CLFINALLY({ + genInput->close(); + _CLDELETE(genInput); + }); + } + + _LUCENE_SLEEP(defaultGenFileRetryPauseMsec); + /* + //todo: Wrap the LUCENE_SLEEP call above with the following try/catch block if + // InterruptedException is implemented + try { + } catch (CLuceneError &e) { + //if (err2.number != CL_ERR_Interrupted) // retry only for InterruptedException + // todo: see if CL_ERR_Interrupted needs to be added... + throw e; + }*/ + + } + } + + //CL_TRACE("%s check: genB=%d", IndexFileNames::SEGMENTS_GEN, genB); + + // Pick the larger of the two gen's: + if (genA > genB) + gen = genA; + else + gen = genB; + + if (gen == -1) { + // Neither approach found a generation + _CLTHROWA(CL_ERR_IO, (string("No segments* file found in ") + directory->toString()).c_str()); + } + } + + // Third method (fallback if first & second methods + // are not reliable): since both directory cache and + // file contents cache seem to be stale, just + // advance the generation. + if ( 1 == method || ( 0 == method && lastGen == gen && retry )) { + + method = 1; + + if (genLookaheadCount < defaultGenLookaheadCount) { + gen++; + genLookaheadCount++; + //CL_TRACE("look ahead increment gen to %d", gen); + } + } + + if (lastGen == gen) { + + // This means we're about to try the same + // segments_N last tried. This is allowed, + // exactly once, because writer could have been in + // the process of writing segments_N last time. + + if (retry) { + // OK, we've tried the same segments_N file + // twice in a row, so this must be a real + // error. We throw the original exception we + // got. + throw exc; + } else { + retry = true; + } + + } else { + // Segment file has advanced since our last loop, so + // reset retry: + retry = false; + } + + lastGen = gen; + + segmentFileName = IndexFileNames::fileNameFromGeneration(IndexFileNames::SEGMENTS, "", gen); + + CLuceneError saved_error; + if ( tryDoBody(segmentFileName.c_str(), saved_error) ){ + return; + } + + // Save the original root cause: + if (exc.number() == 0) { + CND_CONDITION( saved_error.number() > 0, "Unsupported error code"); + exc.set(saved_error.number(),saved_error.what()); + } + + //CL_TRACE("primary Exception on '" + segmentFileName + "': " + err + "'; will retry: retry=" + retry + "; gen = " + gen); + + if (!retry && gen > 1) { + + // This is our first time trying this segments + // file (because retry is false), and, there is + // possibly a segments_(N-1) (because gen > 1). + // So, check if the segments_(N-1) exists and + // try it if so: + string prevSegmentFileName = IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", gen-1 ); + + bool prevExists=false; + if (directory != NULL) + prevExists = directory->fileExists(prevSegmentFileName.c_str()); + else + prevExists = Misc::dir_Exists( (string(fileDirectory) + prevSegmentFileName).c_str() ); + + if (prevExists) { + //CL_TRACE("fallback to prior segment file '%s'", prevSegmentFileName); + CLuceneError saved_error; + if ( tryDoBody(prevSegmentFileName.c_str(), saved_error) ){ + return; + } + //CL_TRACE("secondary Exception on '" + prevSegmentFileName + "': " + err2 + "'; will retry"); + } + } + } + } + SegmentInfos::FindSegmentsRead::FindSegmentsRead( CL_NS(store)::Directory* dir, SegmentInfos* _this ) : + SegmentInfos::FindSegmentsFile(dir) { + this->_this = _this; + } + bool SegmentInfos::FindSegmentsRead::doBody( const char* segmentFileName ) { + //Have SegmentInfos read the segments file in directory + _this->read(directory, segmentFileName); + return true; + } + + SegmentInfos::FindSegmentsVersion::FindSegmentsVersion( CL_NS(store)::Directory* dir ) : + SegmentInfos::FindSegmentsFile(dir) { + } + + int64_t SegmentInfos::FindSegmentsVersion::doBody( const char* segmentFileName ) { + + IndexInput* input = directory->openInput( segmentFileName ); + + int32_t format = 0; + int64_t version=0; + try { + format = input->readInt(); + if(format < 0){ + if(format < CURRENT_FORMAT){ + char err[30]; + cl_sprintf(err,30,"Unknown format version: %d",format); + _CLTHROWA(CL_ERR_CorruptIndex,err); + } + version = input->readLong(); // read version + } + } + _CLFINALLY( input->close(); _CLDELETE(input); ); + + if(format < 0) + return version; + + // We cannot be sure about the format of the file. + // Therefore we have to read the whole file and cannot simply seek to the version entry. + SegmentInfos* sis = _CLNEW SegmentInfos(); + sis->read(directory, segmentFileName); + version = sis->getVersion(); + _CLDELETE(sis); + + return version; + + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_SegmentInfos.h clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentInfos.h --- clucene-core-0.9.21b/src/core/CLucene/index/_SegmentInfos.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentInfos.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,532 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SegmentInfos_ +#define _lucene_index_SegmentInfos_ + + +//#include "IndexReader.h" +#include "CLucene/util/Misc.h" +#include "_IndexFileNames.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) + +CL_NS_DEF(index) + + class SegmentInfo :LUCENE_BASE{ + public: + + LUCENE_STATIC_CONSTANT(int32_t, NO = -1); // e.g. no norms; no deletes; + LUCENE_STATIC_CONSTANT(int32_t, YES = 1); // e.g. have norms; have deletes; + LUCENE_STATIC_CONSTANT(int32_t, CHECK_DIR = 0); // e.g. must check dir to see if there are norms/deletions + LUCENE_STATIC_CONSTANT(int32_t, WITHOUT_GEN = 0); // a file name that has no GEN in it. + + std::string name; // unique name in dir + int32_t docCount; // number of docs in seg + CL_NS(store)::Directory* dir; // where segment resides + + private: + bool preLockless; // true if this is a segments file written before + // lock-less commits (2.1) + + int64_t delGen; // current generation of del file; NO if there + // are no deletes; CHECK_DIR if it's a pre-2.1 segment + // (and we must check filesystem); YES or higher if + // there are deletes at generation N + + CL_NS(util)::ValueArray normGen; // current generation of each field's norm file. + // If this array is null, for lockLess this means no + // separate norms. For preLockLess this means we must + // check filesystem. If this array is not null, its + // values mean: NO says this field has no separate + // norms; CHECK_DIR says it is a preLockLess segment and + // filesystem must be checked; >= YES says this field + // has separate norms with the specified generation + + int8_t isCompoundFile; // NO if it is not; YES if it is; CHECK_DIR if it's + // pre-2.1 (ie, must check file system to see + // if .cfs and .nrm exist) + + bool hasSingleNormFile; // true if this segment maintains norms in a single file; + // false otherwise + // this is currently false for segments populated by DocumentWriter + // and true for newly created merged segments (both + // compound and non compound). + + private: + + std::vector _files; // cached list of files that this segment uses + // in the Directory + + int64_t _sizeInBytes; // total byte size of all of our files (computed on demand) + + int32_t docStoreOffset; // if this segment shares stored fields & vectors, this + // offset is where in that file this segment's docs begin + std::string docStoreSegment; // name used to derive fields/vectors file we share with + // other segments + // This string is being interned. There might be a way around this, + // and if found, this would greatly improve perfomance. + + bool docStoreIsCompoundFile; // whether doc store files are stored in compound file (*.cfx) + + /* Called whenever any change is made that affects which + * files this segment has. */ + void clearFiles(); + + void addIfExists(std::vector& files, const std::string& fileName); + + public: + SegmentInfo(const char* _name, const int32_t _docCount, CL_NS(store)::Directory* _dir, + bool _isCompoundFile=SegmentInfo::CHECK_DIR, + bool _hasSingleNormFile=false, + int32_t _docStoreOffset = -1, + const char* _docStoreSegment = NULL, + bool _docStoreIsCompoundFile = false); + + /** + * Construct a new SegmentInfo instance by reading a + * previously saved SegmentInfo from input. + * + * @param dir directory to load from + * @param format format of the segments info file + * @param input input handle to read segment info from + */ + SegmentInfo(CL_NS(store)::Directory* dir, int32_t format, CL_NS(store)::IndexInput* input); + + ~SegmentInfo(); + + void setNumFields(const int32_t numFields); + int64_t sizeInBytes(); + bool hasDeletions() const; + + void advanceDelGen(); + void clearDelGen(); + + SegmentInfo* clone (); + + std::string getDelFileName() const; + + /** + * Returns true if this field for this segment has saved a separate norms file (__N.sX). + * + * @param fieldNumber the field index to check + */ + bool hasSeparateNorms(const int32_t fieldNumber) const; + + /** + * Returns true if any fields in this segment have separate norms. + */ + bool hasSeparateNorms() const; + + /** + * Get the file name for the norms file for this field. + * + * @param number field index + */ + std::string getNormFileName(const int32_t number) const; + + /** + * Increment the generation count for the norms file for + * this field. + * + * @param fieldIndex field whose norm file will be rewritten + */ + void advanceNormGen(const int32_t fieldIndex); + + /** + * Mark whether this segment is stored as a compound file. + * + * @param isCompoundFile true if this is a compound file; + * else, false + */ + void setUseCompoundFile(const bool isCompoundFile); + + /** + * Returns true if this segment is stored as a compound + * file; else, false. + */ + bool getUseCompoundFile() const; + + /* + * Return all files referenced by this SegmentInfo. The + * returns List is a locally cached List so you should not + * modify it. + */ + const std::vector& files(); + + /** + * Copy everything from src SegmentInfo into our instance. + */ + void reset(const SegmentInfo* src); + + /** + * Save this segment's info. + */ + void write(CL_NS(store)::IndexOutput* output); + + int32_t getDocStoreOffset() const; + + bool getDocStoreIsCompoundFile() const; + + void setDocStoreIsCompoundFile(const bool v); + + /** + * Returns a reference to docStoreSegment + */ + const std::string& getDocStoreSegment() const; + + void setDocStoreOffset(const int32_t offset); + + /** We consider another SegmentInfo instance equal if it + * has the same dir and same name. */ + bool equals(const SegmentInfo* obj); + + ///Gets the Directory where the segment resides + CL_NS(store)::Directory* getDir() const{ return dir; } //todo: since dir is public, consider removing this function + + friend class SegmentReader; + + /** Used for debugging */ + std::string segString(CL_NS(store)::Directory* dir); + }; + + typedef CL_NS(util)::CLVector > segmentInfosType; + //SegmentInfos manages a list of SegmentInfo instances + //Each SegmentInfo contains information about a segment in a directory. + // + //The active segments in the index are stored in the segment info file. + //An index only has a single file in this format, and it is named "segments". + //This lists each segment by name, and also contains the size of each segment. + //The format of the file segments is defined as follows: + // + // SegCount + //Segments --> SegCount, + // + //SegCount, SegSize --> UInt32 + // + //SegName --> String + // + //SegName is the name of the segment, and is used as the file name prefix + //for all of the files that compose the segment's index. + // + //SegSize is the number of documents contained in the segment index. + // + //Note: + //At http://jakarta.apache.org/lucene/docs/fileformats.html the definition + //of all file formats can be found. Note that java lucene currently + //defines Segments as follows: + // + //Segments --> Format, Version, SegCount, SegCount + // + //Format, SegCount, SegSize --> UInt32 + // + //Format and Version have not been implemented yet + + class IndexReader; + + class SegmentInfos: LUCENE_BASE { + public: + DEFINE_MUTEX(THIS_LOCK) + + /** The file format version, a negative number. */ + /* Works since counter, the old 1st entry, is always >= 0 */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-1); + + /** This format adds details used for lockless commits. It differs + * slightly from the previous format in that file names + * are never re-used (write once). Instead, each file is + * written to the next generation. For example, + * segments_1, segments_2, etc. This allows us to not use + * a commit lock. See file + * formats for details. + */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_LOCKLESS=-2); + + /** This format adds a "hasSingleNormFile" flag into each segment info. + * See LUCENE-756 + * for details. + */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_SINGLE_NORM_FILE=-3); + + /** This format allows multiple segments to share a single + * vectors and stored fields file. */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_SHARED_DOC_STORE=-4); + + private: + /* This must always point to the most recent file format. */ + LUCENE_STATIC_CONSTANT(int32_t,CURRENT_FORMAT=FORMAT_SHARED_DOC_STORE); + + public: + int32_t counter; // used to name new segments + + /** + * counts how often the index has been changed by adding or deleting docs. + * starting with the current time in milliseconds forces to create unique version numbers. + */ + int64_t version; + + private: + int64_t generation; // generation of the "segments_N" for the next commit + int64_t lastGeneration; // generation of the "segments_N" file we last successfully read + // or wrote; this is normally the same as generation except if + // there was an IOException that had interrupted a commit + + /** + * If non-null, information about loading segments_N files + * will be printed here. @see #setInfoStream. + */ + static std::ostream* infoStream; + + LUCENE_STATIC_CONSTANT(int32_t,defaultGenFileRetryCount=10); + LUCENE_STATIC_CONSTANT(int32_t,defaultGenFileRetryPauseMsec=50); + LUCENE_STATIC_CONSTANT(int32_t,defaultGenLookaheadCount=10); + + segmentInfosType infos; + + friend class IndexWriter; //allow IndexWriter to use counter + + static void message(const char* _message, ...); + + public: + SegmentInfos(bool deleteMembers=true, int32_t reserveCount=0); + ~SegmentInfos(); + + //Returns a reference to the i-th SegmentInfo in the list. + SegmentInfo* info(int32_t i) const; + + /** + * Get the generation (N) of the current segments_N file + * from a list of files. + * + * @param files -- array of file names to check + */ + static int64_t getCurrentSegmentGeneration( std::vector& files ); + + /** + * Get the generation (N) of the current segments_N file + * in the directory. + * + * @param directory -- directory to search for the latest segments_N file + */ + static int64_t getCurrentSegmentGeneration( const CL_NS(store)::Directory* directory ); + + /** + * Get the filename of the current segments_N file + * from a list of files. + * + * @param files -- array of file names to check + */ + static std::string getCurrentSegmentFileName( std::vector& files ); + + /** + * Get the filename of the current segments_N file + * in the directory. + * + * @param directory -- directory to search for the latest segments_N file + */ + static std::string getCurrentSegmentFileName( CL_NS(store)::Directory* directory ); + + /** + * Get the segments_N filename in use by this segment infos. + */ + std::string getCurrentSegmentFileName(); + + /** + * Parse the generation off the segments file name and + * return it. + */ + static int64_t generationFromSegmentsFileName( const char* fileName ); + + /** + * Get the next segments_N filename that will be written. + */ + std::string getNextSegmentFileName(); + + /* public vector-like operations */ + //delete and clears objects 'from' from to 'to' + void clearto(size_t to, size_t end); + //count of segment infos + int32_t size() const; + /** add a segment info + * @param pos position to add the info at. -1 for last position + */ + void add(SegmentInfo* info, int32_t pos=-1); + SegmentInfo* elementAt(int32_t pos); + void setElementAt(SegmentInfo* si, int32_t pos); + void clear(); + + void insert(SegmentInfos* infos, bool takeMemory); + void insert(SegmentInfo* info); + int32_t indexOf(const SegmentInfo* info) const; + void range(size_t from, size_t to, SegmentInfos& ret) const; + void remove(size_t index, bool dontDelete=false); + + /** + * Read a particular segmentFileName. Note that this may + * throw an IOException if a commit is in process. + * + * @param directory -- directory containing the segments file + * @param segmentFileName -- segment file to load + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void read(CL_NS(store)::Directory* directory, const char* segmentFileName); + + /** + * This version of read uses the retry logic (for lock-less + * commits) to find the right segments file to load. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void read(CL_NS(store)::Directory* directory); + + //Writes a new segments file based upon the SegmentInfo instances it manages + //note: still does not support lock-less writes (still pre-2.1 format) + void write(CL_NS(store)::Directory* directory); + + /** + * Returns a copy of this instance, also copying each + * SegmentInfo. + */ + SegmentInfos* clone() const; + + /** + * version number when this SegmentInfos was generated. + */ + int64_t getVersion() const; + int64_t getGeneration() const; + int64_t getLastGeneration() const; + + /** + * Current version number from segments file. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static int64_t readCurrentVersion(CL_NS(store)::Directory* directory); + + + /** If non-null, information about retries when loading + * the segments file will be printed to this. + */ + static void setInfoStream(std::ostream* infoStream); + + /** + * @see #setInfoStream + */ + static std::ostream* getInfoStream(); + + /** + * Advanced: set how many times to try loading the + * segments.gen file contents to determine current segment + * generation. This file is only referenced when the + * primary method (listing the directory) fails. + */ + //static void setDefaultGenFileRetryCount(const int32_t count); + /** + * @see #setDefaultGenFileRetryCount + */ + static int32_t getDefaultGenFileRetryCount(); + + /** + * Advanced: set how many milliseconds to pause in between + * attempts to load the segments.gen file. + */ + //static void setDefaultGenFileRetryPauseMsec(const int32_t msec); + /** + * @see #setDefaultGenFileRetryPauseMsec + */ + static int32_t getDefaultGenFileRetryPauseMsec(); + + /** + * Advanced: set how many times to try incrementing the + * gen when loading the segments file. This only runs if + * the primary (listing directory) and secondary (opening + * segments.gen file) methods fail to find the segments + * file. + */ + //static void setDefaultGenLookaheadCount(const int32_t count); + /** + * @see #setDefaultGenLookaheadCount + */ + static int32_t getDefaultGenLookahedCount(); + + class _FindSegmentsFile: LUCENE_BASE{ + protected: + const char* fileDirectory; + CL_NS(store)::Directory* directory; + + void doRun(); + virtual bool tryDoBody(const char* segmentFileName, CLuceneError& ret_err) = 0; + }; + + /** + * Utility class for executing code that needs to do + * something with the current segments file. This is + * necessary with lock-less commits because from the time + * you locate the current segments file name, until you + * actually open it, read its contents, or check modified + * time, etc., it could have been deleted due to a writer + * commit finishing. + */ + template + class FindSegmentsFile: public _FindSegmentsFile{ + protected: + virtual RET doBody(const char* segmentFileName) = 0; + RET result; + + //catch only IO errors, return true on success... + bool tryDoBody(const char* segmentFileName, CLuceneError& ret_err){ + try{ + result = doBody(segmentFileName); + return true; + } catch (CLuceneError& err) { + result = 0; + ret_err.set(err.number(),err.what()); + } + return false; + } + public: + FindSegmentsFile( CL_NS(store)::Directory* dir ){ + this->directory = dir; + this->fileDirectory = NULL; + this->result = 0; + } + FindSegmentsFile( const char* dir ){ + this->directory = NULL; + this->fileDirectory = dir; + this->result = 0; + } + ~FindSegmentsFile(){ + } + + RET run(){ + doRun(); + return result; + }; + }; + //friend class SegmentInfos::FindSegmentsFile; + + class FindSegmentsVersion: public FindSegmentsFile { + public: + FindSegmentsVersion( CL_NS(store)::Directory* dir ); + FindSegmentsVersion( const char* dir ); + int64_t doBody( const char* segmentFileName ); + }; + friend class SegmentInfos::FindSegmentsVersion; + + class FindSegmentsRead: public FindSegmentsFile { + SegmentInfos* _this; + public: + FindSegmentsRead( CL_NS(store)::Directory* dir, SegmentInfos* _this ); + FindSegmentsRead( const char* dir, SegmentInfos* _this ); + bool doBody( const char* segmentFileName ); + }; + friend class SegmentInfos::FindSegmentsRead; + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentMergeInfo.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentMergeInfo.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentMergeInfo.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentMergeInfo.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,107 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentTermEnum.h" + +CL_NS_DEF(index) + +SegmentMergeInfo::SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r): + docMap(NULL), + termEnum(te), + base(b), + reader(r) +{ +//Func - Constructor +//Pre - b >= 0 +// te contains a valid reference to a SegmentTermEnum instance +// r contains a valid reference to a SegmentReader instance +//Post - The instance has been created + + CND_PRECONDITION(b >= 0, "b is a negative number"); + + postings=NULL; + term = te->term(); +} + +SegmentMergeInfo::~SegmentMergeInfo(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + close(); +} + +int32_t* SegmentMergeInfo::getDocMap(){ + if ( docMap == NULL ){ + // build array which maps document numbers around deletions + if (reader->hasDeletions()) { + //Get the total number of documents managed by the reader including the deleted ones + int32_t maxDoc = reader->maxDoc(); + //Create a map for all documents + docMap = _CL_NEWARRAY(int32_t,maxDoc); + int32_t j = 0; + //Iterate through all the document numbers + for (int32_t i = 0; i < maxDoc; i++) { + //Check if document i is marked deleted + if (reader->isDeleted(i)){ + //Document i has not been marked deleted so assign -1 + docMap[i] = -1; + }else{ + docMap[i] = j++; + } + } + } + } + return docMap; +} + +TermPositions* SegmentMergeInfo::getPositions() { + if (postings == NULL) { + postings = reader->termPositions(); + } + return postings; +} + + +bool SegmentMergeInfo::next() { +//Func - Moves the current term of the enumeration termEnum to the next and term +// points to this new current term +//Pre - true +//Post - Returns true if the term has been moved to the next otherwise false + if (termEnum->next()) { + _CLDECDELETE(term); + term = termEnum->term(); + return true; + } else { + _CLDECDELETE(term); //TODO: test HighFreqTerms errors with this + term = NULL; + return false; + } +} + +void SegmentMergeInfo::close() { +//Func - Closes the the resources +//Pre - true +//Post - The resources have been closed + + //First make sure posting has been closed + if ( postings != NULL ){ + postings->close(); + _CLVDELETE(postings); //todo: not a clucene object... should be + } + + if ( termEnum != NULL ){ + termEnum->close(); + _CLDELETE(termEnum); + } + _CLDECDELETE(term); + _CLDELETE_ARRAY(docMap); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_SegmentMergeInfo.h clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentMergeInfo.h --- clucene-core-0.9.21b/src/core/CLucene/index/_SegmentMergeInfo.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentMergeInfo.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,48 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SegmentMergeInfo_ +#define _lucene_index_SegmentMergeInfo_ + + +//#include "SegmentTermEnum.h" +//#include "SegmentHeader.h" +#include "Terms.h" + +CL_NS_DEF(index) +class IndexReader; + +class SegmentMergeInfo:LUCENE_BASE { +private: + int32_t* docMap; // maps around deleted docs + TermPositions* postings; +public: + TermEnum* termEnum; + Term* term; + int32_t base; + IndexReader* reader; + + //Constructor + SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r); + + //Destructor + ~SegmentMergeInfo(); + + //Moves the current term of the enumeration termEnum to the next and term + //points to this new current term + bool next(); + + //Closes the the resources + void close(); + + // maps around deleted docs + int32_t* getDocMap(); + + TermPositions* getPositions(); +}; +CL_NS_END +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentMergeQueue.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentMergeQueue.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentMergeQueue.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentMergeQueue.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,76 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" + +CL_NS_DEF(index) + + + SegmentMergeQueue::SegmentMergeQueue(const int32_t size) { + //Func - Constructor + // Creates a queue of length size + //Pre - size >= 0 + //Post - The queue has been created of length size + + //BVK: bug. changed condition from size > 0 to size >= 0 + //if size is 0, as it is when retrieving a TermEnum + //from an empty index this should this should not fail. + CND_PRECONDITION(size >= 0, "size is too small"); + + //Call the initialize method of its superclass. The boolean value passed here + //indicates that the superclass PriorityQueue takes the responsibility to have its elements deleted + //The destructor of SegmentMergInfo will make sure that each intstance it will be closed properly + //before it is deleted + initialize(size,true); + } + + SegmentMergeQueue::~SegmentMergeQueue(){ + //Func - Destructor + // Does nothing as its parent class will clean up everything + //Pre - true + //Post - true + close(); + } + + void SegmentMergeQueue::close() { + //Func - Closes and destroyes all SegmentMergeInfo Instances in the queue + //Pre - true + //post - All SegmentMergeInfo Instances in the queue have been closed and deleted + // The queue is now empty but can still be used + + //call the clear method of the parent class PriorityQueue + clear(); + } + + bool SegmentMergeQueue::lessThan(SegmentMergeInfo* stiA, SegmentMergeInfo* stiB) { + //Func - Overloaded method that implements the lessThan operator for the parent class + // This method is used by the parent class Priority queue to reorder its internal + // data structures. This implementation check if stiA is less than the current term of stiB. + //Pre - stiA != NULL + // stiB != NULL + //Post - true is returned if stiA < stiB otherwise false + + CND_PRECONDITION(stiA != NULL, "stiA is NULL"); + CND_PRECONDITION(stiB != NULL, "stiB is NULL"); + + //Compare the two terms + int32_t comparison = stiA->term->compareTo(stiB->term); + //Check if they match + if (comparison == 0){ //todo: can we do an optimized compare here? compare using equals, then compare properly? + //If the match check if the base of stiA is smaller than the base of stiB + //Note that different bases means that the terms of stiA an stiB ly in different segments + return stiA->base < stiB->base; + }else{ + //Terms didn't match so return the difference in positions + return comparison < 0; + } + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_SegmentMergeQueue.h clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentMergeQueue.h --- clucene-core-0.9.21b/src/core/CLucene/index/_SegmentMergeQueue.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentMergeQueue.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,34 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SegmentMergeQueue_ +#define _lucene_index_SegmentMergeQueue_ + +#include "CLucene/util/PriorityQueue.h" +//#include "SegmentMergeInfo.h" + +CL_NS_DEF(index) + class SegmentMergeQueue :public CL_NS(util)::PriorityQueue > { + public: + //Constructor + //Creates a queue of length size + SegmentMergeQueue(const int32_t size); + + //Destructor + //Does nothing as its parent class will clean up everything + ~SegmentMergeQueue(); + + //Closes and destroyes all SegmentMergeInfo Instances in the queue + void close(); + protected: + //Overloaded method that implements the lessThan operator for the parent class + //This method is used by the parent class Priority queue to reorder its internal + //data structures. This implementation check if stiA is less than the current term of stiB. + bool lessThan(SegmentMergeInfo* stiA, SegmentMergeInfo* stiB); + + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentMerger.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentMerger.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentMerger.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentMerger.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,813 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/Misc.h" +#include "IndexReader.h" +#include "IndexWriter.h" +#include "_SegmentMerger.h" +#include "_FieldsWriter.h" +#include "CLucene/document/Document.h" +#include +#include "CLucene/index/_IndexFileNames.h" +#include "_CompoundFile.h" +#include "_SkipListWriter.h" +#include "CLucene/document/FieldSelector.h" + +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_USE(store) +CL_NS_DEF(index) + +const uint8_t SegmentMerger::NORMS_HEADER[] = {'N','R','M', (uint8_t)-1}; +const int SegmentMerger::NORMS_HEADER_length = 4; +int32_t SegmentMerger::MAX_RAW_MERGE_DOCS = 4192; + +void SegmentMerger::init(){ + skipListWriter = NULL; + freqOutput = NULL; + proxOutput = NULL; + termInfosWriter = NULL; + queue = NULL; + fieldInfos = NULL; + checkAbort = NULL; + skipInterval = 0; +} + +SegmentMerger::SegmentMerger(IndexWriter* writer, const char* name, MergePolicy::OneMerge* merge){ +//Func - Constructor +//Pre - dir holds a valid reference to a Directory +// name != NULL +//Post - Instance has been created + + CND_PRECONDITION(name != NULL, "name is NULL"); + + this->init(); + this->directory = writer->getDirectory(); + this->segment = name; + if (merge != NULL) + this->checkAbort = _CLNEW CheckAbort(merge, directory); + this->termIndexInterval= writer->getTermIndexInterval(); + this->mergedDocs = 0; + this->maxSkipLevels = 0; +} + +SegmentMerger::~SegmentMerger(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + //Clear the readers set + readers.clear(); + + //Delete field Infos + _CLDELETE(fieldInfos); + //Close and destroy the IndexOutput to the Frequency File + if (freqOutput != NULL){ + freqOutput->close(); + _CLDELETE(freqOutput); + } + //Close and destroy the IndexOutput to the Prox File + if (proxOutput != NULL){ + proxOutput->close(); + _CLDELETE(proxOutput); + } + //Close and destroy the termInfosWriter + if (termInfosWriter != NULL){ + termInfosWriter->close(); + _CLDELETE(termInfosWriter); + } + //Close and destroy the queue + if (queue != NULL){ + queue->close(); + _CLDELETE(queue); + } + + _CLDELETE(checkAbort); + _CLDELETE(skipListWriter); + +} + +void SegmentMerger::add(IndexReader* reader) { +//Func - Adds a IndexReader to the set of readers +//Pre - reader contains a valid reference to a IndexReader +//Post - The SegementReader reader has been added to the set of readers + + readers.push_back(reader); +} + +IndexReader* SegmentMerger::segmentReader(const int32_t i) { +//Func - Returns a reference to the i-th IndexReader +//Pre - 0 <= i < readers.size() +//Post - A reference to the i-th IndexReader has been returned + + CND_PRECONDITION(i >= 0, "i is a negative number"); + CND_PRECONDITION((size_t)i < readers.size(), "i is bigger than the number of IndexReader instances"); + + //Retrieve the i-th IndexReader + IndexReader* ret = readers[i]; + CND_CONDITION(ret != NULL,"No IndexReader found"); + + return ret; +} + +int32_t SegmentMerger::merge(bool mergeDocStores) { + this->mergeDocStores = mergeDocStores; + + // NOTE: it's important to add calls to + // checkAbort.work(...) if you make any changes to this + // method that will spend alot of time. The frequency + // of this check impacts how long + // IndexWriter.close(false) takes to actually stop the + // threads. + + mergedDocs = mergeFields(); + + mergeTerms(); + mergeNorms(); + + if (mergeDocStores && fieldInfos->hasVectors()) + mergeVectors(); + + return mergedDocs; +} + +void SegmentMerger::closeReaders(){ + for (uint32_t i = 0; i < readers.size(); i++) { // close readers + IndexReader* reader = readers[i]; + reader->close(); + } +} + +void SegmentMerger::createCompoundFile(const char* filename, std::vector* files){ + CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, filename, checkAbort); + + bool ownFiles = false; + if ( files == NULL ){ + files = new vector; + files->reserve(IndexFileNames::COMPOUND_EXTENSIONS().length + 1); + ownFiles = true; + } + + // Basic files + for (int32_t i = 0; i < IndexFileNames::COMPOUND_EXTENSIONS().length; i++) { + const char* ext = IndexFileNames::COMPOUND_EXTENSIONS()[i]; + if (mergeDocStores || (strcmp(ext,IndexFileNames::FIELDS_EXTENSION) != 0 && + strcmp(ext,IndexFileNames::FIELDS_INDEX_EXTENSION) != 0 ) ){ + files->push_back ( string(segment) + "." + ext ); + } + } + + // Field norm files + for (size_t i = 0; i < fieldInfos->size(); i++) { + FieldInfo* fi = fieldInfos->fieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + files->push_back ( segment + "." + IndexFileNames::NORMS_EXTENSION ); + break; + } + } + + // Vector files + if ( mergeDocStores && fieldInfos->hasVectors()) { + for (int32_t i = 0; i < IndexFileNames::VECTOR_EXTENSIONS().length; i++) { + files->push_back ( segment + "." + IndexFileNames::VECTOR_EXTENSIONS()[i] ); + } + } + + // Now merge all added files + for ( size_t i=0;isize();i++ ){ + cfsWriter->addFile( (*files)[i].c_str()); + } + + // Perform the merge + cfsWriter->close(); + _CLDELETE(cfsWriter); + if ( ownFiles ) delete files; +} + +void SegmentMerger::addIndexed(IndexReader* reader, FieldInfos* fieldInfos, StringArrayWithDeletor& names, + bool storeTermVectors, bool storePositionWithTermVector, + bool storeOffsetWithTermVector, bool storePayloads){ + + StringArrayWithDeletor::const_iterator itr = names.begin(); + while ( itr != names.end() ){ + fieldInfos->add(*itr, true, + storeTermVectors, storePositionWithTermVector, + storeOffsetWithTermVector, !reader->hasNorms(*itr), storePayloads); + + ++itr; + } +} + + +// for merging we don't want to compress/uncompress the data, so to tell the FieldsReader that we're +// in merge mode, we use this FieldSelector +class FieldSelectorMerge: public FieldSelector{ +public: + FieldSelectorResult accept(const TCHAR* /*fieldName*/) const{ + return FieldSelector::LOAD_FOR_MERGE; + } +}; + + +int32_t SegmentMerger::mergeFields() { +//Func - Merge the fields of all segments +//Pre - true +//Post - The field infos and field values of all segments have been merged. + + if (!mergeDocStores) { + // When we are not merging by doc stores, that means + // all segments were written as part of a single + // autoCommit=false IndexWriter session, so their field + // name -> number mapping are the same. So, we start + // with the fieldInfos of the last segment in this + // case, to keep that numbering. + assert(readers[readers.size()-1]->instanceOf(SegmentReader::getClassName())); + assert(false);//check last...and remove if correct... + SegmentReader* sr = (SegmentReader*)readers[readers.size()-1]; + fieldInfos = sr->fieldInfos()->clone(); + } else { + //Create a new FieldInfos + fieldInfos = _CLNEW FieldInfos(); // merge field names + } + //Condition check to see if fieldInfos points to a valid instance + CND_CONDITION(fieldInfos != NULL,"Memory allocation for fieldInfos failed"); + + IndexReader* reader = NULL; + + //Iterate through all readers + for (uint32_t i = 0; i < readers.size(); i++){ + //get the i-th reader + reader = readers[i]; + //Condition check to see if reader points to a valid instance + CND_CONDITION(reader != NULL,"No IndexReader found"); + + if (reader->instanceOf(SegmentReader::getClassName())) { + SegmentReader* segmentReader = (SegmentReader*) reader; + for (size_t j = 0; j < segmentReader->getFieldInfos()->size(); j++) { + FieldInfo* fi = segmentReader->getFieldInfos()->fieldInfo(j); + fieldInfos->add(fi->name, fi->isIndexed, fi->storeTermVector, + fi->storePositionWithTermVector, fi->storeOffsetWithTermVector, + !reader->hasNorms(fi->name), fi->storePayloads); + } + } else { + StringArrayWithDeletor tmp; + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION_OFFSET, tmp); + addIndexed(reader, fieldInfos, tmp, true, true, true, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION, tmp); + addIndexed(reader, fieldInfos, tmp, true, true, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_OFFSET, tmp); + addIndexed(reader, fieldInfos, tmp, true, false, true, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR, tmp); + addIndexed(reader, fieldInfos, tmp, true, false, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::STORES_PAYLOADS, tmp); + addIndexed(reader, fieldInfos, tmp, false, false, false, true); + + tmp.clear(); reader->getFieldNames(IndexReader::INDEXED, tmp); + addIndexed(reader, fieldInfos, tmp, false, false, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::UNINDEXED, tmp); + if ( tmp.size() > 0 ){ + TCHAR** arr = _CL_NEWARRAY(TCHAR*,tmp.size()+1); + tmp.toArray_nullTerminated(arr); + fieldInfos->add((const TCHAR**)arr, false); + _CLDELETE_ARRAY(arr); //no need to delete the contents, since tmp is responsible for it + } + } + } + + //Write the new FieldInfos file to the directory + fieldInfos->write(directory, Misc::segmentname(segment.c_str(),".fnm").c_str() ); + + int32_t docCount = 0; + + if (mergeDocStores) { + + // If the i'th reader is a SegmentReader and has + // identical fieldName -> number mapping, then this + // array will be non-NULL at position i: + ValueArray matchingSegmentReaders(readers.size()); + + // If this reader is a SegmentReader, and all of its + // field name -> number mappings match the "merged" + // FieldInfos, then we can do a bulk copy of the + // stored fields: + for (size_t i = 0; i < readers.size(); i++) { + IndexReader* reader = readers[i]; + if (reader->instanceOf(SegmentReader::getClassName())) { + SegmentReader* segmentReader = (SegmentReader*) reader; + bool same = true; + FieldInfos* segmentFieldInfos = segmentReader->getFieldInfos(); + for (size_t j = 0; same && j < segmentFieldInfos->size(); j++) + same = _tcscmp(fieldInfos->fieldName(j), segmentFieldInfos->fieldName(j)) == 0; + if (same) { + matchingSegmentReaders.values[i] = segmentReader; + } + } + } + + // Used for bulk-reading raw bytes for stored fields + ValueArray rawDocLengths(MAX_RAW_MERGE_DOCS); + + // merge field values + FieldsWriter fieldsWriter(directory, segment.c_str(), fieldInfos); + + try { + for (size_t i = 0; i < readers.size(); i++) { + IndexReader* reader = readers[i]; + SegmentReader* matchingSegmentReader = matchingSegmentReaders[i]; + FieldsReader* matchingFieldsReader; + if (matchingSegmentReader != NULL) + matchingFieldsReader = matchingSegmentReader->getFieldsReader(); + else + matchingFieldsReader = NULL; + const int32_t maxDoc = reader->maxDoc(); + Document doc; + FieldSelectorMerge fieldSelectorMerge; + for (int32_t j = 0; j < maxDoc;) { + if (!reader->isDeleted(j)) { // skip deleted docs + if (matchingSegmentReader != NULL) { + // We can optimize this case (doing a bulk + // byte copy) since the field numbers are + // identical + int32_t start = j; + int32_t numDocs = 0; + do { + j++; + numDocs++; + } while(j < maxDoc && !matchingSegmentReader->isDeleted(j) && numDocs < MAX_RAW_MERGE_DOCS); + + IndexInput* stream = matchingFieldsReader->rawDocs(rawDocLengths.values, start, numDocs); + fieldsWriter.addRawDocuments(stream, rawDocLengths.values, numDocs); + docCount += numDocs; + if (checkAbort != NULL) + checkAbort->work(300*numDocs); + } else { + doc.clear(); + reader->document(j, doc, &fieldSelectorMerge); + fieldsWriter.addDocument(&doc); + j++; + docCount++; + if (checkAbort != NULL) + checkAbort->work(300); + } + } else + j++; + } + } + } _CLFINALLY ( + fieldsWriter.close(); + ) + + CND_PRECONDITION (docCount*8 == directory->fileLength( (segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ), + (string("after mergeFields: fdx size mismatch: ") + Misc::toString(docCount) + " docs vs " + Misc::toString(directory->fileLength( (segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() )) + " length in bytes of " + segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ); + + } else{ + // If we are skipping the doc stores, that means there + // are no deletions in any of these segments, so we + // just sum numDocs() of each segment to get total docCount + for (size_t i = 0; i < readers.size(); i++) + docCount += readers[i]->numDocs(); + } + return docCount; +} + + +void SegmentMerger::mergeVectors(){ + TermVectorsWriter* termVectorsWriter = + _CLNEW TermVectorsWriter(directory, segment.c_str(), fieldInfos); + + try { + for (uint32_t r = 0; r < readers.size(); r++) { + IndexReader* reader = readers[r]; + int32_t maxDoc = reader->maxDoc(); + for (int32_t docNum = 0; docNum < maxDoc; docNum++) { + // skip deleted docs + if (reader->isDeleted(docNum)) + continue; + + ArrayBase* tmp = reader->getTermFreqVectors(docNum); +// if ( tmp != NULL ){ + termVectorsWriter->addAllDocVectors(tmp); + _CLLDELETE(tmp); +// } + if (checkAbort != NULL) + checkAbort->work(300); + } + } + }_CLFINALLY( + if ( termVectorsWriter != NULL ){ + termVectorsWriter->close(); + _CLDELETE(termVectorsWriter); + } + ); + + CND_PRECONDITION(4+mergedDocs*8 == directory->fileLength( (segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ), + (string("after mergeVectors: tvx size mismatch: ") + Misc::toString(mergedDocs) + " docs vs " + Misc::toString(directory->fileLength( (segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() )) + " length in bytes of " + segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ) + +} + + +void SegmentMerger::mergeTerms() { +//Func - Merge the terms of all segments +//Pre - fieldInfos != NULL +//Post - The terms of all segments have been merged + + CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL"); + + try{ + //Open an IndexOutput to the new Frequency File + freqOutput = directory->createOutput( Misc::segmentname(segment.c_str(),".frq").c_str() ); + + //Open an IndexOutput to the new Prox File + proxOutput = directory->createOutput( Misc::segmentname(segment.c_str(),".prx").c_str() ); + + //Instantiate a new termInfosWriter which will write in directory + //for the segment name segment using the new merged fieldInfos + termInfosWriter = _CLNEW TermInfosWriter(directory, segment.c_str(), fieldInfos, termIndexInterval); + + //Condition check to see if termInfosWriter points to a valid instance + CND_CONDITION(termInfosWriter != NULL,"Memory allocation for termInfosWriter failed") ; + + skipInterval = termInfosWriter->skipInterval; + maxSkipLevels = termInfosWriter->maxSkipLevels; + skipListWriter = _CLNEW DefaultSkipListWriter(skipInterval, maxSkipLevels, mergedDocs, freqOutput, proxOutput); + queue = _CLNEW SegmentMergeQueue(readers.size()); + + //And merge the Term Infos + mergeTermInfos(); + }_CLFINALLY( + if ( freqOutput != NULL ){ + freqOutput->close(); + _CLDELETE(freqOutput); + } + if ( proxOutput != NULL ){ + proxOutput->close(); + _CLDELETE(proxOutput); + } + if ( termInfosWriter != NULL ){ + termInfosWriter->close(); + _CLDELETE(termInfosWriter); + } + if ( queue != NULL ){ + queue->close(); + _CLDELETE(queue); + } + ); +} + +void SegmentMerger::mergeTermInfos(){ +//Func - Merges all TermInfos into a single segment +//Pre - true +//Post - All TermInfos have been merged into a single segment + + //Condition check to see if queue points to a valid instance + CND_CONDITION(queue != NULL, "Memory allocation for queue failed") ; + + //base is the id of the first document in a segment + int32_t base = 0; + + IndexReader* reader = NULL; + SegmentMergeInfo* smi = NULL; + + //iterate through all the readers + for (uint32_t i = 0; i < readers.size(); i++) { + //Get the i-th reader + reader = readers[i]; + + //Condition check to see if reader points to a valid instance + CND_CONDITION(reader != NULL, "No IndexReader found"); + + //Get the term enumeration of the reader + TermEnum* termEnum = reader->terms(); + //Instantiate a new SegmentMerginfo for the current reader and enumeration + smi = _CLNEW SegmentMergeInfo(base, termEnum, reader); + + //Condition check to see if smi points to a valid instance + CND_CONDITION(smi != NULL, "Memory allocation for smi failed") ; + + //Increase the base by the number of documents that have not been marked deleted + //so base will contain a new value for the first document of the next iteration + base += reader->numDocs(); + //Get the next current term + if (smi->next()){ + //Store the SegmentMergeInfo smi with the initialized SegmentTermEnum TermEnum + //into the queue + queue->put(smi); + }else{ + //Apparently the end of the TermEnum of the SegmentTerm has been reached so + //close the SegmentMergeInfo smi + smi->close(); + //And destroy the instance and set smi to NULL (It will be used later in this method) + _CLDELETE(smi); + } + } + + //Instantiate an array of SegmentMergeInfo instances called match + SegmentMergeInfo** match = _CL_NEWARRAY(SegmentMergeInfo*,readers.size()); + + //Condition check to see if match points to a valid instance + CND_CONDITION(match != NULL, "Memory allocation for match failed") ; + + SegmentMergeInfo* top = NULL; + + //As long as there are SegmentMergeInfo instances stored in the queue + while (queue->size() > 0) { + int32_t matchSize = 0; + + // pop matching terms + + //Pop the first SegmentMergeInfo from the queue + match[matchSize++] = queue->pop(); + //Get the Term of match[0] + Term* term = match[0]->term; + + //Condition check to see if term points to a valid instance + CND_CONDITION(term != NULL,"term is NULL") ; + + //Get the current top of the queue + top = queue->top(); + + //For each SegmentMergInfo still in the queue + //Check if term matches the term of the SegmentMergeInfo instances in the queue + while (top != NULL && term->equals(top->term) ){ + //A match has been found so add the matching SegmentMergeInfo to the match array + match[matchSize++] = queue->pop(); + //Get the next SegmentMergeInfo + top = queue->top(); + } + int32_t df = mergeTermInfo(match, matchSize); // add new TermInfo + if (checkAbort != NULL) + checkAbort->work(df/3.0); + + //Restore the SegmentTermInfo instances in the match array back into the queue + while (matchSize > 0){ + smi = match[--matchSize]; + + //Condition check to see if smi points to a valid instance + CND_CONDITION(smi != NULL,"smi is NULL") ; + + //Move to the next term in the enumeration of SegmentMergeInfo smi + if (smi->next()){ + //There still are some terms so restore smi in the queue + queue->put(smi); + + }else{ + //Done with a segment + //No terms anymore so close this SegmentMergeInfo instance + smi->close(); + _CLDELETE( smi ); + } + } + } + _CLDELETE_ARRAY(match); +} + +int32_t SegmentMerger::mergeTermInfo( SegmentMergeInfo** smis, int32_t n){ +//Func - Merge the TermInfo of a term found in one or more segments. +//Pre - smis != NULL and it contains segments that are positioned at the same term. +// n is equal to the number of SegmentMergeInfo instances in smis +// freqOutput != NULL +// proxOutput != NULL +//Post - The TermInfo of a term has been merged + + CND_PRECONDITION(smis != NULL, "smis is NULL"); + CND_PRECONDITION(freqOutput != NULL, "freqOutput is NULL"); + CND_PRECONDITION(proxOutput != NULL, "proxOutput is NULL"); + + //Get the file pointer of the IndexOutput to the Frequency File + int64_t freqPointer = freqOutput->getFilePointer(); + //Get the file pointer of the IndexOutput to the Prox File + int64_t proxPointer = proxOutput->getFilePointer(); + + //Process postings from multiple segments all positioned on the same term. + int32_t df = appendPostings(smis, n); + + int64_t skipPointer = skipListWriter->writeSkip(freqOutput); + + //df contains the number of documents across all segments where this term was found + if (df > 0) { + //add an entry to the dictionary with pointers to prox and freq files + termInfo.set(df, freqPointer, proxPointer, (int32_t)(skipPointer - freqPointer)); + //Precondition check for to be sure that the reference to + //smis[0]->term will be valid + CND_PRECONDITION(smis[0]->term != NULL, "smis[0]->term is NULL"); + //Write a new TermInfo + termInfosWriter->add(smis[0]->term, &termInfo); + } + return df; +} + + +int32_t SegmentMerger::appendPostings(SegmentMergeInfo** smis, int32_t n){ +//Func - Process postings from multiple segments all positioned on the +// same term. Writes out merged entries into freqOutput and +// the proxOutput streams. +//Pre - smis != NULL and it contains segments that are positioned at the same term. +// n is equal to the number of SegmentMergeInfo instances in smis +// freqOutput != NULL +// proxOutput != NULL +//Post - Returns number of documents across all segments where this term was found + + CND_PRECONDITION(smis != NULL, "smis is NULL"); + CND_PRECONDITION(freqOutput != NULL, "freqOutput is NULL"); + CND_PRECONDITION(proxOutput != NULL, "proxOutput is NULL"); + + int32_t lastDoc = 0; + int32_t df = 0; //Document Counter + + skipListWriter->resetSkip(); + bool storePayloads = fieldInfos->fieldInfo(smis[0]->term->field())->storePayloads; + int32_t lastPayloadLength = -1; // ensures that we write the first length + + SegmentMergeInfo* smi = NULL; + + //Iterate through all SegmentMergeInfo instances in smis + for ( int32_t i=0;igetPositions(); + assert(postings != NULL); + //Get the base of this segment + int32_t base = smi->base; + //Get the docMap so we can see which documents have been deleted + int32_t* docMap = smi->getDocMap(); + //Seek the termpost + postings->seek(smi->termEnum); + while (postings->next()) { + int32_t doc = postings->doc(); + //Check if there are deletions + if (docMap != NULL) + doc = docMap[doc]; // map around deletions + doc += base; // convert to merged space + + //Condition check to see doc is eaqual to or bigger than lastDoc + if (doc < 0 || (df > 0 && doc <= lastDoc)) + _CLTHROWA(CL_ERR_CorruptIndex, (string("docs out of order (") + Misc::toString(doc) + + " <= " + Misc::toString(lastDoc) + " )").c_str()); + + //Increase the total frequency over all segments + df++; + + if ((df % skipInterval) == 0) { + skipListWriter->setSkipData(lastDoc, storePayloads, lastPayloadLength); + skipListWriter->bufferSkip(df); + } + + //Calculate a new docCode + //use low bit to flag freq=1 + int32_t docCode = (doc - lastDoc) << 1; + lastDoc = doc; + + //Get the frequency of the Term + int32_t freq = postings->freq(); + if (freq == 1){ + //write doc & freq=1 + freqOutput->writeVInt(docCode | 1); + }else{ + //write doc + freqOutput->writeVInt(docCode); + //write frequency in doc + freqOutput->writeVInt(freq); + } + + /** See {@link DocumentWriter#writePostings(Posting[], String)} for + * documentation about the encoding of positions and payloads + */ + int32_t lastPosition = 0; + // write position deltas + for (int32_t j = 0; j < freq; j++) { + //Get the next position + int32_t position = postings->nextPosition(); + int32_t delta = position - lastPosition; + if (storePayloads) { + size_t payloadLength = postings->getPayloadLength(); + if (payloadLength == lastPayloadLength) { + proxOutput->writeVInt(delta * 2); + } else { + proxOutput->writeVInt(delta * 2 + 1); + proxOutput->writeVInt(payloadLength); + lastPayloadLength = payloadLength; + } + if (payloadLength > 0) { + if ( payloadBuffer.length < payloadLength ){ + payloadBuffer.resize(payloadLength); + } + postings->getPayload(payloadBuffer.values); + proxOutput->writeBytes(payloadBuffer.values, payloadLength); + } + } else { + proxOutput->writeVInt(delta); + } + lastPosition = position; + } + } + } + + //Return total number of documents across all segments where term was found + return df; +} + +void SegmentMerger::mergeNorms() { +//Func - Merges the norms for all fields +//Pre - fieldInfos != NULL +//Post - The norms for all fields have been merged + ValueArray normBuffer; + IndexOutput* output = NULL; + try { + + CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL"); + + IndexReader* reader = NULL; + + //iterate through all the Field Infos instances + for (size_t i = 0; i < fieldInfos->size(); i++) { + //Get the i-th FieldInfo + FieldInfo* fi = fieldInfos->fieldInfo(i); + //Is this Field indexed? + if (fi->isIndexed && !fi->omitNorms){ + //Instantiate an IndexOutput to that norm file + if (output == NULL) { + output = directory->createOutput( (segment + "." + IndexFileNames::NORMS_EXTENSION).c_str() ); + output->writeBytes(NORMS_HEADER,NORMS_HEADER_length); + } + + //Condition check to see if output points to a valid instance + CND_CONDITION(output != NULL, "No Outputstream retrieved"); + + //Iterate through all IndexReaders + for (uint32_t j = 0; j < readers.size(); j++) { + //Get the i-th IndexReader + reader = readers[j]; + + //Condition check to see if reader points to a valid instance + CND_CONDITION(reader != NULL, "No reader found"); + + //Get the total number of documents including the documents that have been marked deleted + size_t maxDoc = reader->maxDoc(); + + //Get an IndexInput to the norm file for this field in this segment + if ( normBuffer.length < maxDoc ){ + normBuffer.resize(maxDoc); + memset(normBuffer.values,0,sizeof(uint8_t) * maxDoc); + } + reader->norms(fi->name, normBuffer.values); + + if (!reader->hasDeletions()) { + //optimized case for segments without deleted docs + output->writeBytes(normBuffer.values, maxDoc); + } else { + // this segment has deleted docs, so we have to + // check for every doc if it is deleted or not + + for(size_t k = 0; k < maxDoc; k++) { + //Check if document k is deleted + if (!reader->isDeleted(k)){ + //write the new norm + output->writeByte(normBuffer[k]); + } + } + } + if (checkAbort != NULL) + checkAbort->work(maxDoc); + } + } + } + }_CLFINALLY( + if ( output != NULL ){ + output->close(); + _CLDELETE(output); + } + ); +} + + +SegmentMerger::CheckAbort::CheckAbort(MergePolicy::OneMerge* merge, Directory* dir) { + this->merge = merge; + this->dir = dir; + this->workCount = 0; +} + +void SegmentMerger::CheckAbort::work(float_t units){ + workCount += units; + if (workCount >= 10000.0) { + merge->checkAborted(dir); + workCount = 0; + } +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_SegmentMerger.h clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentMerger.h --- clucene-core-0.9.21b/src/core/CLucene/index/_SegmentMerger.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentMerger.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,198 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SegmentMerger_ +#define _lucene_index_SegmentMerger_ + + +CL_CLASS_DEF(store,Directory) +#include "CLucene/store/_RAMDirectory.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" +#include "IndexReader.h" +#include "_TermInfosWriter.h" +#include "Terms.h" +#include "MergePolicy.h" + +CL_NS_DEF(index) +class DefaultSkipListWriter; +/** +* The SegmentMerger class combines two or more Segments, represented by an IndexReader ({@link #add}, +* into a single Segment. After adding the appropriate readers, call the merge method to combine the +* segments. +*

+* If the compoundFile flag is set, then the segments will be merged into a compound file. +* +* +* @see #merge +* @see #add +*/ +class SegmentMerger:LUCENE_BASE { + CL_NS(util)::ValueArray payloadBuffer; + + //Directory of the segment + CL_NS(store)::Directory* directory; + //name of the new segment + std::string segment; + //Set of IndexReaders + CL_NS(util)::CLVector > readers; + //Field Infos for t he FieldInfo instances of all fields + FieldInfos* fieldInfos; + + int32_t mergedDocs; + + // Whether we should merge doc stores (stored fields and + // vectors files). When all segments we are merging + // already share the same doc store files, we don't need + // to merge the doc stores. + bool mergeDocStores; + + /** Maximum number of contiguous documents to bulk-copy + when merging stored fields */ + static int32_t MAX_RAW_MERGE_DOCS; + + //The queue that holds SegmentMergeInfo instances + SegmentMergeQueue* queue; + //IndexOutput to the new Frequency File + CL_NS(store)::IndexOutput* freqOutput; + //IndexOutput to the new Prox File + CL_NS(store)::IndexOutput* proxOutput; + //Writes Terminfos that have been merged + TermInfosWriter* termInfosWriter; + TermInfo termInfo; //(new) minimize consing + + int32_t termIndexInterval; + int32_t skipInterval; + int32_t maxSkipLevels; + DefaultSkipListWriter* skipListWriter; + +public: + static const uint8_t NORMS_HEADER[]; + static const int NORMS_HEADER_length; + + /** + * + * @param dir The Directory to merge the other segments into + * @param name The name of the new segment + * @param compoundFile true if the new segment should use a compoundFile + */ + SegmentMerger( IndexWriter* writer, const char* name, MergePolicy::OneMerge* merge ); + + SegmentMerger(IndexWriter* writer, std::string name, MergePolicy::OneMerge* merge); + + void init(); + + //Destructor + ~SegmentMerger(); + + /** + * Add an IndexReader to the collection of readers that are to be merged + * @param reader + */ + void add(IndexReader* reader); + + /** + * + * @param i The index of the reader to return + * @return The ith reader to be merged + */ + IndexReader* segmentReader(const int32_t i); + + /** + * Merges the readers specified by the {@link #add} method + * into the directory passed to the constructor. + * @param mergeDocStores if false, we will not merge the + * stored fields nor vectors files + * @return The number of documents that were merged + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t merge(bool mergeDocStores); + /** + * close all IndexReaders that have been added. + * Should not be called before merge(). + * @throws IOException + */ + void closeReaders(); + + + class CheckAbort { + private: + float_t workCount; + MergePolicy::OneMerge* merge; + CL_NS(store)::Directory* dir; + public: + CheckAbort(MergePolicy::OneMerge* merge, CL_NS(store)::Directory* dir); + + /** + * Records the fact that roughly units amount of work + * have been done since this method was last called. + * When adding time-consuming code into SegmentMerger, + * you should test different values for units to ensure + * that the time in between calls to merge.checkAborted + * is up to ~ 1 second. + */ + void work(float_t units); + }; + +private: + CheckAbort* checkAbort; + + void addIndexed(IndexReader* reader, FieldInfos* fieldInfos, StringArrayWithDeletor& names, + bool storeTermVectors, bool storePositionWithTermVector, + bool storeOffsetWithTermVector, bool storePayloads); + + /** + * Merge the fields of all segments + * @return The number of documents in all of the readers + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t mergeFields(); + + /** + * Merge the TermVectors from each of the segments into the new one. + * @throws IOException + */ + void mergeVectors(); + + /** Merge the terms of all segments */ + void mergeTerms(); + + /** Merges all TermInfos into a single segment */ + void mergeTermInfos(); + + /** Merge one term found in one or more segments. The array smis + * contains segments that are positioned at the same term. N + * is the number of cells in the array actually occupied. + * + * @param smis array of segments + * @param n number of cells in the array actually occupied + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t mergeTermInfo( SegmentMergeInfo** smis, int32_t n); + + /** Process postings from multiple segments all positioned on the + * same term. Writes out merged entries into freqOutput and + * the proxOutput streams. + * + * @param smis array of segments + * @param n number of cells in the array actually occupied + * @return number of documents across all segments where this term was found + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t appendPostings(SegmentMergeInfo** smis, int32_t n); + + //Merges the norms for all fields + void mergeNorms(); + + void createCompoundFile(const char* filename, std::vector* files=NULL); + friend class IndexWriter; //allow IndexWriter to use createCompoundFile +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1120 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/Misc.h" +#include "_SegmentHeader.h" +#include "_MultiSegmentReader.h" +#include "_FieldInfos.h" +#include "_FieldsReader.h" +#include "IndexReader.h" +#include "_TermInfosReader.h" +#include "Terms.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentMerger.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(search) +CL_NS_DEF(index) + + SegmentReader::Norm::Norm(IndexInput* instrm, bool _useSingleNormStream, int32_t n, int64_t ns, SegmentReader* r, const char* seg): + number(n), + normSeek(ns), + _this(r), + segment(seg), + useSingleNormStream(_useSingleNormStream), + in(instrm), + bytes(NULL), + dirty(false){ + //Func - Constructor + //Pre - instrm is a valid reference to an IndexInput + //Post - A Norm instance has been created with an empty bytes array + + refCount = 1; + bytes = NULL; + dirty = false; + } + + SegmentReader::Norm::~Norm() { + //Func - Destructor + //Pre - true + //Post - The IndexInput in has been deleted (and closed by its destructor) + // and the array too. + + //Close and destroy the inputstream in-> The inputstream will be closed + // by its destructor. Note that the IndexInput 'in' actually is a pointer!!!!! + if ( in != _this->singleNormStream ) + _CLDELETE(in); + + //Delete the bytes array + _CLDELETE_ARRAY(bytes); + + } + void SegmentReader::Norm::doDelete(Norm* norm){ + if ( norm->refCount == 0 ){ + _CLLDELETE(norm); + } + } + + void SegmentReader::Norm::close(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (in != NULL && !useSingleNormStream) { + in->close(); + _CLDELETE(in); + } + in = NULL; + } + + void SegmentReader::Norm::incRef() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (refCount > 0); + refCount++; + } + + void SegmentReader::Norm::decRef(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (refCount > 0); + if (refCount == 1) { + close(); + } + refCount--; + } + void SegmentReader::Norm::reWrite(SegmentInfo* si){ + // NOTE: norms are re-written in regular directory, not cfs + si->advanceNormGen(this->number); + IndexOutput* out = _this->directory()->createOutput(si->getNormFileName(this->number).c_str()); + try { + out->writeBytes(bytes, _this->maxDoc()); + }_CLFINALLY( + out->close(); + _CLDELETE(out) + ); + this->dirty = false; + } + + void SegmentReader::initialize(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores, bool doingReopen){ + //Pre - si-> is a valid reference to SegmentInfo instance + // identified by si-> + //Post - All files of the segment have been read + + this->deletedDocs = NULL; + this->ones = NULL; + //There are no documents yet marked as deleted + this->deletedDocsDirty = false; + + this->normsDirty=false; + this->undeleteAll=false; + + this->rollbackDeletedDocsDirty = false; + this->rollbackNormsDirty = false; + this->rollbackUndeleteAll = false; + + //Duplicate the name of the segment from SegmentInfo to segment + this->segment = si->name; + + // make sure that all index files have been read or are kept open + // so that if an index update removes them we'll still have them + this->freqStream = NULL; + this->proxStream = NULL; + this->singleNormStream = NULL; + this->termVectorsReaderOrig = NULL; + this->_fieldInfos = NULL; + this->tis = NULL; + this->fieldsReader = NULL; + this->cfsReader = NULL; + this->storeCFSReader = NULL; + + this->segment = si->name; + this->si = si; + this->readBufferSize = readBufferSize; + + if ( doingReopen ) return; // the rest is done in the reopen code... + + bool success = false; + + try { + // Use compound file directory for some files, if it exists + Directory* cfsDir = directory(); + if (si->getUseCompoundFile()) { + cfsReader = _CLNEW CompoundFileReader(directory(), (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str(), readBufferSize); + cfsDir = cfsReader; + } + + Directory* storeDir; + + if (doOpenStores) { + if (si->getDocStoreOffset() != -1) { + if (si->getDocStoreIsCompoundFile()) { + storeCFSReader = _CLNEW CompoundFileReader(directory(), (si->getDocStoreSegment() + "." + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION).c_str(), readBufferSize); + storeDir = storeCFSReader; + } else { + storeDir = directory(); + } + } else { + storeDir = cfsDir; + } + } else + storeDir = NULL; + + // No compound file exists - use the multi-file format + _fieldInfos = _CLNEW FieldInfos(cfsDir, (segment + ".fnm").c_str() ); + + string fieldsSegment; + + if (si->getDocStoreOffset() != -1) + fieldsSegment = si->getDocStoreSegment(); + else + fieldsSegment = segment; + + if (doOpenStores) { + fieldsReader = _CLNEW FieldsReader(storeDir, fieldsSegment.c_str(), _fieldInfos, readBufferSize, + si->getDocStoreOffset(), si->docCount); + + // Verify two sources of "maxDoc" agree: + if (si->getDocStoreOffset() == -1 && fieldsReader->size() != si->docCount) { + string err = "doc counts differ for segment "; + err += si->name; + err += ": fieldsReader shows "; + err += fieldsReader->size(); + err += " but segmentInfo shows "; + err += si->docCount; + _CLTHROWA(CL_ERR_CorruptIndex, err.c_str() ); + } + } + + tis = _CLNEW TermInfosReader(cfsDir, segment.c_str(), _fieldInfos, readBufferSize); + + loadDeletedDocs(); + + // make sure that all index files have been read or are kept open + // so that if an index update removes them we'll still have them + freqStream = cfsDir->openInput( (segment + ".frq").c_str(), readBufferSize); + proxStream = cfsDir->openInput( (segment + ".prx").c_str(), readBufferSize); + openNorms(cfsDir, readBufferSize); + + if (doOpenStores && _fieldInfos->hasVectors()) { // open term vector files only as needed + string vectorsSegment; + if (si->getDocStoreOffset() != -1) + vectorsSegment = si->getDocStoreSegment(); + else + vectorsSegment = segment; + termVectorsReaderOrig = _CLNEW TermVectorsReader(storeDir, vectorsSegment.c_str(), _fieldInfos, readBufferSize, si->getDocStoreOffset(), si->docCount); + } + success = true; + } _CLFINALLY ( + + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + doClose(); + } + ) + } + + SegmentReader* SegmentReader::get(SegmentInfo* si, bool doOpenStores) { + return get(si->dir, si, NULL, false, false, BufferedIndexInput::BUFFER_SIZE, doOpenStores); + } + + SegmentReader* SegmentReader::get(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores){ + return get(si->dir, si, NULL, false, false, readBufferSize, doOpenStores); + } + SegmentReader* SegmentReader::get(SegmentInfos* sis, SegmentInfo* si, + bool closeDir) { + return get(si->dir, si, sis, closeDir, true, BufferedIndexInput::BUFFER_SIZE, true); + } + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + SegmentReader* SegmentReader::get(Directory* dir, SegmentInfo* si, + SegmentInfos* sis, + bool closeDir, bool ownDir, + int32_t readBufferSize, + bool doOpenStores){ + SegmentReader* instance = _CLNEW SegmentReader(); //todo: make this configurable... + instance->init(dir, sis, closeDir); + instance->initialize(si, readBufferSize==-1 ? BufferedIndexInput::BUFFER_SIZE : readBufferSize, doOpenStores, false); + return instance; + } + + SegmentReader::SegmentReader(): + DirectoryIndexReader(), + _norms(false,true) + { + } + SegmentReader::~SegmentReader(){ + //Func - Destructor. + //Pre - doClose has been invoked! + //Post - the instance has been destroyed + + doClose(); //this means that index reader doesn't need to be closed manually + + _CLDELETE(_fieldInfos); + _CLDELETE(fieldsReader); + _CLDELETE(tis); + _CLDELETE(freqStream); + _CLDELETE(proxStream); + _CLDELETE(deletedDocs); + _CLDELETE_ARRAY(ones); + _CLDELETE(termVectorsReaderOrig) + _CLDECDELETE(cfsReader); + //termVectorsLocal->unregister(this); + } + + void SegmentReader::commitChanges(){ + if (deletedDocsDirty) { // re-write deleted + si->advanceDelGen(); + + // We can write directly to the actual name (vs to a + // .tmp & renaming it) because the file is not live + // until segments file is written: + deletedDocs->write(directory(), si->getDelFileName().c_str()); + } + if (undeleteAll && si->hasDeletions()) { + si->clearDelGen(); + } + if (normsDirty) { // re-write norms + si->setNumFields(_fieldInfos->size()); + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + if (norm->dirty) { + norm->reWrite(si); + } + it++; + } + } + deletedDocsDirty = false; + normsDirty = false; + undeleteAll = false; + } + + void SegmentReader::doClose() { + //Func - Closes all streams to the files of a single segment + //Pre - fieldsReader != NULL + // tis != NULL + //Post - All streams to files have been closed + + _CLDELETE(deletedDocs); + + // close the single norms stream + if (singleNormStream != NULL) { + // we can close this stream, even if the norms + // are shared, because every reader has it's own + // singleNormStream + singleNormStream->close(); + _CLDELETE(singleNormStream); + } + + // re-opened SegmentReaders have their own instance of FieldsReader + if (fieldsReader != NULL) { + fieldsReader->close(); + _CLDELETE(fieldsReader); + } + + if (tis != NULL) { + tis->close(); + _CLDELETE(tis); + } + + //Close the frequency stream + if (freqStream != NULL){ + freqStream->close(); + _CLDELETE(freqStream); + } + //Close the prox stream + if (proxStream != NULL){ + proxStream->close(); + _CLDELETE(proxStream); + } + + if (termVectorsReaderOrig != NULL){ + termVectorsReaderOrig->close(); + _CLDELETE(termVectorsReaderOrig); + } + + if (cfsReader != NULL){ + cfsReader->close(); + _CLDECDELETE(cfsReader); + } + + if (storeCFSReader != NULL){ + storeCFSReader->close(); + _CLDELETE(storeCFSReader); + } + + this->decRefNorms(); + _norms.clear(); + + // maybe close directory + DirectoryIndexReader::doClose(); + } + + bool SegmentReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return deletedDocs != NULL; + } + + //static + bool SegmentReader::usesCompoundFile(SegmentInfo* si) { + return si->getUseCompoundFile(); + } + + //static + bool SegmentReader::hasSeparateNorms(SegmentInfo* si) { + return si->hasSeparateNorms(); + } + + bool SegmentReader::hasDeletions(const SegmentInfo* si) { + //Func - Static method + // Checks if a segment managed by SegmentInfo si-> has deletions + //Pre - si-> holds a valid reference to an SegmentInfo instance + //Post - if the segement contains deleteions true is returned otherwise flas + + // Don't call ensureOpen() here (it could affect performance) + return si->hasDeletions(); + } + + //synchronized + void SegmentReader::doDelete(const int32_t docNum){ + //Func - Marks document docNum as deleted + //Pre - docNum >=0 and DocNum < maxDoc() + // docNum contains the number of the document that must be + // marked deleted + //Post - The document identified by docNum has been marked deleted + + SCOPED_LOCK_MUTEX(THIS_LOCK) + + CND_PRECONDITION(docNum >= 0, "docNum is a negative number"); + CND_PRECONDITION(docNum < maxDoc(), "docNum is bigger than the total number of documents"); + + //Check if deletedDocs exists + if (deletedDocs == NULL){ + deletedDocs = _CLNEW BitSet(maxDoc()); + + //Condition check to see if deletedDocs points to a valid instance + CND_CONDITION(deletedDocs != NULL,"No memory could be allocated for deletedDocs"); + } + //Flag that there are documents marked deleted + deletedDocsDirty = true; + undeleteAll = false; + //Mark document identified by docNum as deleted + deletedDocs->set(docNum); + + } + + void SegmentReader::doUndeleteAll(){ + _CLDELETE(deletedDocs); + deletedDocsDirty = false; + undeleteAll = true; + } + + void SegmentReader::files(vector& retarray) { + //Func - Returns all file names managed by this SegmentReader + //Pre - segment != NULL + //Post - All filenames managed by this SegmentRead have been returned + vector tmp = si->files(); + retarray.insert(retarray.end(),tmp.begin(),tmp.end()); + } + + TermEnum* SegmentReader::terms() { + //Func - Returns an enumeration of all the Terms and TermInfos in the set. + //Pre - tis != NULL + //Post - An enumeration of all the Terms and TermInfos in the set has been returned + + CND_PRECONDITION(tis != NULL, "tis is NULL"); + + ensureOpen(); + return tis->terms(); + } + + TermEnum* SegmentReader::terms(const Term* t) { + //Func - Returns an enumeration of terms starting at or after the named term t + //Pre - t != NULL + // tis != NULL + //Post - An enumeration of terms starting at or after the named term t + + CND_PRECONDITION(t != NULL, "t is NULL"); + CND_PRECONDITION(tis != NULL, "tis is NULL"); + + ensureOpen(); + return tis->terms(t); + } + + bool SegmentReader::document(int32_t n, Document& doc, const FieldSelector* fieldSelector) { + //Func - writes the fields of document n into doc + //Pre - n >=0 and identifies the document n + //Post - if the document has been deleted then an exception has been thrown + // otherwise a reference to the found document has been returned + + SCOPED_LOCK_MUTEX(THIS_LOCK) + + ensureOpen(); + + CND_PRECONDITION(n >= 0, "n is a negative number"); + + //Check if the n-th document has been marked deleted + if (isDeleted(n)){ + _CLTHROWA( CL_ERR_InvalidState,"attempt to access a deleted document" ); + } + + //Retrieve the n-th document + return fieldsReader->doc(n, doc, fieldSelector); + } + + + bool SegmentReader::isDeleted(const int32_t n){ + //Func - Checks if the n-th document has been marked deleted + //Pre - n >=0 and identifies the document n + //Post - true has been returned if document n has been deleted otherwise fralse + + SCOPED_LOCK_MUTEX(THIS_LOCK) + + CND_PRECONDITION(n >= 0, "n is a negative number"); + + //Is document n deleted + bool ret = (deletedDocs != NULL && deletedDocs->get(n)); + + return ret; + } + + TermDocs* SegmentReader::termDocs() { + //Func - Returns an unpositioned TermDocs enumerator. + //Pre - true + //Post - An unpositioned TermDocs enumerator has been returned + + ensureOpen(); + return _CLNEW SegmentTermDocs(this); + } + + TermPositions* SegmentReader::termPositions() { + //Func - Returns an unpositioned TermPositions enumerator. + //Pre - true + //Post - An unpositioned TermPositions enumerator has been returned + + ensureOpen(); + return _CLNEW SegmentTermPositions(this); + } + + int32_t SegmentReader::docFreq(const Term* t) { + //Func - Returns the number of documents which contain the term t + //Pre - t holds a valid reference to a Term + //Post - The number of documents which contain term t has been returned + + ensureOpen(); + + //Get the TermInfo ti for Term t in the set + TermInfo* ti = tis->get(t); + //Check if an TermInfo has been returned + if (ti){ + //Get the frequency of the term + int32_t ret = ti->docFreq; + //TermInfo ti is not needed anymore so delete it + _CLDELETE( ti ); + //return the number of documents which containt term t + return ret; + } + else + //No TermInfo returned so return 0 + return 0; + } + + int32_t SegmentReader::numDocs() { + //Func - Returns the actual number of documents in the segment + //Pre - true + //Post - The actual number of documents in the segments + + ensureOpen(); + + //Get the number of all the documents in the segment including the ones that have + //been marked deleted + int32_t n = maxDoc(); + + //Check if there any deleted docs + if (deletedDocs != NULL) + //Substract the number of deleted docs from the number returned by maxDoc + n -= deletedDocs->count(); + + //return the actual number of documents in the segment + return n; + } + + int32_t SegmentReader::maxDoc() const { + //Func - Returns the number of all the documents in the segment including + // the ones that have been marked deleted + //Pre - true + //Post - The total number of documents in the segment has been returned + + // Don't call ensureOpen() here (it could affect performance) + + return si->docCount; + } + + + void SegmentReader::setTermInfosIndexDivisor(int32_t indexDivisor){ + tis->setIndexDivisor(indexDivisor); + } + + int32_t SegmentReader::getTermInfosIndexDivisor() { + return tis->getIndexDivisor(); + } + + +void SegmentReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ + ensureOpen(); + + size_t len = _fieldInfos->size(); + for (size_t i = 0; i < len; i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + bool v=false; + if (fldOption & IndexReader::ALL) { + v=true; + }else { + if (!fi->isIndexed && (fldOption & IndexReader::UNINDEXED) ) + v=true; + else if (fi->isIndexed && (fldOption & IndexReader::INDEXED) ) + v=true; + else if (fi->storePayloads && (fldOption & IndexReader::STORES_PAYLOADS) ) + v=true; + else if (fi->isIndexed && fi->storeTermVector == false && ( fldOption & IndexReader::INDEXED_NO_TERMVECTOR) ) + v=true; + else if ( (fldOption & IndexReader::TERMVECTOR) && + fi->storeTermVector == true && + fi->storePositionWithTermVector == false && + fi->storeOffsetWithTermVector == false ) + v=true; + else if (fi->isIndexed && fi->storeTermVector && (fldOption & IndexReader::INDEXED_WITH_TERMVECTOR) ) + v=true; + else if (fi->storePositionWithTermVector && fi->storeOffsetWithTermVector == false && + (fldOption & IndexReader::TERMVECTOR_WITH_POSITION)) + v=true; + else if (fi->storeOffsetWithTermVector && fi->storePositionWithTermVector == false && + (fldOption & IndexReader::TERMVECTOR_WITH_OFFSET) ) + v=true; + else if ((fi->storeOffsetWithTermVector && fi->storePositionWithTermVector) && + (fldOption & IndexReader::TERMVECTOR_WITH_POSITION_OFFSET) ) + v=true; + } + if ( v ) + retarray.push_back(STRDUP_TtoT(fi->name)); + } +} + +bool SegmentReader::hasNorms(const TCHAR* field){ + ensureOpen(); + return _norms.find(field) != _norms.end(); +} + + + void SegmentReader::norms(const TCHAR* field, uint8_t* bytes) { + //Func - Reads the Norms for field from disk starting at offset in the inputstream + //Pre - field != NULL + // bytes != NULL is an array of bytes which is to be used to read the norms into. + // it is advisable to have bytes initalized by zeroes! + //Post - The if an inputstream to the norm file could be retrieved the bytes have been read + // You are never sure whether or not the norms have been read into bytes properly!!!!!!!!!!!!!!!!! + + CND_PRECONDITION(field != NULL, "field is NULL"); + CND_PRECONDITION(bytes != NULL, "field is NULL"); + + SCOPED_LOCK_MUTEX(THIS_LOCK) + + ensureOpen(); + Norm* norm = _norms.get(field); + if ( norm == NULL ){ + memcpy(bytes, fakeNorms(), maxDoc()); + return; + } + + + {SCOPED_LOCK_MUTEX(norm->THIS_LOCK) + if (norm->bytes != NULL) { // can copy from cache + memcpy(bytes, norm->bytes, maxDoc()); + return; + } + + // Read from disk. norm.in may be shared across multiple norms and + // should only be used in a synchronized context. + IndexInput* normStream; + if (norm->useSingleNormStream) { + normStream = singleNormStream; + } else { + normStream = norm->in; + } + normStream->seek(norm->normSeek); + normStream->readBytes(bytes, maxDoc()); + } + } + + uint8_t* SegmentReader::createFakeNorms(int32_t size) { + uint8_t* ones = _CL_NEWARRAY(uint8_t,size); + if ( size > 0 ) + memset(ones, DefaultSimilarity::encodeNorm(1.0f), size); + return ones; + } + + uint8_t* SegmentReader::fakeNorms() { + if (ones==NULL) + ones=createFakeNorms(maxDoc()); + return ones; + } + // can return NULL if norms aren't stored + uint8_t* SegmentReader::getNorms(const TCHAR* field) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + Norm* norm = _norms.get(field); + if (norm == NULL) return NULL; // not indexed, or norms not stored + + {SCOPED_LOCK_MUTEX(norm->THIS_LOCK) + if (norm->bytes == NULL) { // value not yet read + uint8_t* bytes = _CL_NEWARRAY(uint8_t, maxDoc()); + norms(field, bytes); + norm->bytes = bytes; // cache it + // it's OK to close the underlying IndexInput as we have cached the + // norms and will never read them again. + norm->close(); + } + return norm->bytes; + } + } + + void SegmentReader::decRefNorms(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->decRef(); + it++; + } + } + + DirectoryIndexReader* SegmentReader::doReopen(SegmentInfos* infos){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + DirectoryIndexReader* newReader; + + if (infos->size() == 1) { + SegmentInfo* si = infos->info(0); + if (segment.compare(si->name)==0 && si->getUseCompoundFile() == this->si->getUseCompoundFile()) { + newReader = reopenSegment(si); + } else { + // segment not referenced anymore, reopen not possible + // or segment format changed + newReader = SegmentReader::get(infos, infos->info(0), false); + } + } else { + ValueArray readers(1); + readers.values[0] = this; + return _CLNEW MultiSegmentReader(_directory, infos, closeDirectory, &readers, NULL, NULL); + } + + return newReader; + } + + + uint8_t* SegmentReader::norms(const TCHAR* field) { + //Func - Returns the bytes array that holds the norms of a named field + //Pre - field != NULL and contains the name of the field for which the norms + // must be retrieved + //Post - If there was norm for the named field then a bytes array has been allocated + // and returned containing the norms for that field. If the named field is unknown NULL is returned. + + CND_PRECONDITION(field != NULL, "field is NULL"); + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes = getNorms(field); + if (bytes==NULL) + bytes=fakeNorms(); + return bytes; + } + + void SegmentReader::doSetNorm(int32_t doc, const TCHAR* field, uint8_t value){ + Norm* norm = _norms.get(field); + if (norm == NULL) // not an indexed field + return; + norm->dirty = true; // mark it dirty + normsDirty = true; + + uint8_t* bits = norms(field); + bits[doc] = value; // set the value + } + + + string SegmentReader::SegmentName(const char* ext, const int32_t x){ + //Func - Returns an allocated buffer in which it creates a filename by + // concatenating segment with ext and x + //Pre ext != NULL and holds the extension + // x contains a number + //Post - A buffer has been instantiated an when x = -1 buffer contains the concatenation of + // segment and ext otherwise buffer contains the contentation of segment, ext and x + + CND_PRECONDITION(ext != NULL, "ext is NULL"); + + return Misc::segmentname(segment.c_str(),ext,x); + } + + void SegmentReader::openNorms(Directory* cfsDir, int32_t readBufferSize) { + //Func - Open all norms files for all fields + // Creates for each field a norm Instance with an open inputstream to + // a corresponding norm file ready to be read + //Pre - true + //Post - For each field a norm instance has been created with an open inputstream to + // a corresponding norm file ready to be read + int64_t nextNormSeek = SegmentMerger::NORMS_HEADER_length; //skip header (header unused for now) + int32_t _maxDoc = maxDoc(); + for (size_t i = 0; i < _fieldInfos->size(); i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + if (_norms.find(fi->name) != _norms.end()) { + // in case this SegmentReader is being re-opened, we might be able to + // reuse some norm instances and skip loading them here + continue; + } + if (fi->isIndexed && !fi->omitNorms) { + Directory* d = directory(); + string fileName = si->getNormFileName(fi->number); + if (!si->hasSeparateNorms(fi->number)) { + d = cfsDir; + } + + // singleNormFile means multiple norms share this file + string ext = string(".") + IndexFileNames::NORMS_EXTENSION; + bool singleNormFile = fileName.compare(fileName.length()-ext.length(),ext.length(),ext)==0; + IndexInput* normInput = NULL; + int64_t normSeek; + + if (singleNormFile) { + normSeek = nextNormSeek; + if (singleNormStream==NULL) { + singleNormStream = d->openInput(fileName.c_str(), readBufferSize); + } + // All norms in the .nrm file can share a single IndexInput since + // they are only used in a synchronized context. + // If this were to change in the future, a clone could be done here. + normInput = singleNormStream; + } else { + normSeek = 0; + normInput = d->openInput(fileName.c_str()); + } + + _norms[fi->name] = _CLNEW Norm(normInput, singleNormFile, fi->number, normSeek, this, segment.c_str()); + nextNormSeek += _maxDoc; // increment also if some norms are separate + } + } + } + + + TermVectorsReader* SegmentReader::getTermVectorsReader() { + TermVectorsReader* tvReader = termVectorsLocal.get(); + if (tvReader == NULL) { + tvReader = termVectorsReaderOrig->clone(); + termVectorsLocal.set(tvReader); + } + return tvReader; + } + + FieldsReader* SegmentReader::getFieldsReader() { + return fieldsReader; + } + + FieldInfos* SegmentReader::getFieldInfos() { + return _fieldInfos; + } + + TermFreqVector* SegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field){ + ensureOpen(); + if ( field != NULL ){ + // Check if this field is invalid or has no stored term vector + FieldInfo* fi = _fieldInfos->fieldInfo(field); + if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL ) + return NULL; + } + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return NULL; + return termVectorsReader->get(docNumber, field); + } + + ArrayBase* SegmentReader::getTermFreqVectors(int32_t docNumber) { + ensureOpen(); + if (termVectorsReaderOrig == NULL) + return NULL; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return NULL; + + return termVectorsReader->get(docNumber); + } + + + + void SegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) { + ensureOpen(); + FieldInfo* fi = _fieldInfos->fieldInfo(field); + if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL) + return; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + { + return; + } + + + termVectorsReader->get(docNumber, field, mapper); + } + + + void SegmentReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper){ + ensureOpen(); + if (termVectorsReaderOrig == NULL) + return; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return; + + termVectorsReader->get(docNumber, mapper); + } + + + void SegmentReader::loadDeletedDocs(){ + // NOTE: the bitvector is stored using the regular directory, not cfs + if (hasDeletions(si)) { + deletedDocs = _CLNEW BitVector(directory(), si->getDelFileName().c_str()); + + // Verify # deletes does not exceed maxDoc for this segment: + if (deletedDocs->count() > maxDoc()) { + string err = "number of deletes ("; + err += deletedDocs->count(); + err += ") exceeds max doc ("; + err += maxDoc(); + err += ") for segment "; + err += si->name; + _CLTHROWA(CL_ERR_CorruptIndex, err.c_str()); + } + } + } + + SegmentReader* SegmentReader::reopenSegment(SegmentInfo* si){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + bool deletionsUpToDate = (this->si->hasDeletions() == si->hasDeletions()) + && (!si->hasDeletions() || this->si->getDelFileName().compare(si->getDelFileName())==0 ); + bool normsUpToDate = true; + + + ValueArrayfieldNormsChanged(_fieldInfos->size()); + if (normsUpToDate) { + for (size_t i = 0; i < _fieldInfos->size(); i++) { + if (this->si->getNormFileName(i).compare(si->getNormFileName(i)) != 0) { + normsUpToDate = false; + fieldNormsChanged.values[i] = true; + } + } + } + + if (normsUpToDate && deletionsUpToDate) { + this->si = si; //force the result to use the new segment info (the old one is going to go away!) + return this; + } + + + // clone reader + SegmentReader* clone = NULL; + bool success = false; + try { + clone = _CLNEW SegmentReader(); + clone->init(_directory, NULL, false); + clone->initialize(si, readBufferSize, false, true); + clone->cfsReader = cfsReader; + clone->storeCFSReader = storeCFSReader; + clone->_fieldInfos = _fieldInfos; + clone->tis = tis; + clone->freqStream = freqStream; + clone->proxStream = proxStream; + clone->termVectorsReaderOrig = termVectorsReaderOrig; + + // we have to open a new FieldsReader, because it is not thread-safe + // and can thus not be shared among multiple SegmentReaders + // TODO: Change this in case FieldsReader becomes thread-safe in the future + string fieldsSegment; + + Directory* storeDir = directory(); + + if (si->getDocStoreOffset() != -1) { + fieldsSegment = si->getDocStoreSegment(); + if (storeCFSReader != NULL) { + storeDir = storeCFSReader; + } + } else { + fieldsSegment = segment; + if (cfsReader != NULL) { + storeDir = cfsReader; + } + } + + if (fieldsReader != NULL) { + clone->fieldsReader = _CLNEW FieldsReader(storeDir, fieldsSegment.c_str(), _fieldInfos, readBufferSize, + si->getDocStoreOffset(), si->docCount); + } + + + if (!deletionsUpToDate) { + // load deleted docs + clone->deletedDocs = NULL; + clone->loadDeletedDocs(); + } else { + clone->deletedDocs = this->deletedDocs; + } + + if (!normsUpToDate) { + // load norms + for (size_t i = 0; i < fieldNormsChanged.length; i++) { + // copy unchanged norms to the cloned reader and incRef those norms + if (!fieldNormsChanged[i]) { + const TCHAR* curField = _fieldInfos->fieldInfo(i)->name; + Norm* norm = this->_norms.get(curField); + norm->incRef(); + norm->_this = clone; //give the norm to the clone + clone->_norms.put(curField, norm); + } + } + + clone->openNorms(si->getUseCompoundFile() ? cfsReader : directory(), readBufferSize); + } else { + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + const TCHAR* field = it->first; + Norm* norm = _norms[field]; + norm->incRef(); + norm->_this = clone; //give the norm to the clone + clone->_norms.put(field, norm); + it++; + } + } + + if (clone->singleNormStream == NULL) { + for (size_t i = 0; i < _fieldInfos->size(); i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + Directory* d = si->getUseCompoundFile() ? cfsReader : directory(); + string fileName = si->getNormFileName(fi->number); + if (si->hasSeparateNorms(fi->number)) { + continue; + } + + string ext = string(".") + IndexFileNames::NORMS_EXTENSION; + if (fileName.compare(fileName.length()-ext.length(),ext.length(),ext)==0) { + clone->singleNormStream = d->openInput(fileName.c_str(), readBufferSize); + break; + } + } + } + } + + success = true; + } _CLFINALLY ( + if (!success) { + // An exception occured during reopen, we have to decRef the norms + // that we incRef'ed already and close singleNormsStream and FieldsReader + clone->decRefNorms(); + } + ) + + //disown this memory + this->freqStream = NULL; + this->_fieldInfos = NULL; + this->tis = NULL; + this->deletedDocs = NULL; + this->ones = NULL; + this->termVectorsReaderOrig = NULL; + this->cfsReader = NULL; + this->freqStream = NULL; + this->proxStream = NULL; + this->termVectorsReaderOrig = NULL; + this->cfsReader = NULL; + this->storeCFSReader = NULL; + this->singleNormStream = NULL; + + return clone; + } + + + + /** Returns the field infos of this segment */ + FieldInfos* SegmentReader::fieldInfos() { + return _fieldInfos; + } + + /** + * Return the name of the segment this reader is reading. + */ + const char* SegmentReader::getSegmentName() { + return segment.c_str(); + } + + /** + * Return the SegmentInfo of the segment this reader is reading. + */ + SegmentInfo* SegmentReader::getSegmentInfo() { + return si; + } + + void SegmentReader::setSegmentInfo(SegmentInfo* info) { + si = info; + } + + void SegmentReader::startCommit() { + DirectoryIndexReader::startCommit(); + rollbackDeletedDocsDirty = deletedDocsDirty; + rollbackNormsDirty = normsDirty; + rollbackUndeleteAll = undeleteAll; + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->rollbackDirty = norm->dirty; + } + } + + void SegmentReader::rollbackCommit() { + DirectoryIndexReader::rollbackCommit(); + deletedDocsDirty = rollbackDeletedDocsDirty; + normsDirty = rollbackNormsDirty; + undeleteAll = rollbackUndeleteAll; + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->dirty = norm->rollbackDirty; + } + } + + const char* SegmentReader::getClassName(){ + return "SegmentReader"; + } + const char* SegmentReader::getObjectName() const{ + return getClassName(); + } + + bool SegmentReader::normsClosed() { + if (singleNormStream != NULL) { + return false; + } + NormsType::iterator it = _norms.begin(); + while ( it != _norms.end() ) { + Norm* norm = it->second; + if (norm->refCount > 0) { + return false; + } + } + return true; + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentTermDocs.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentTermDocs.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentTermDocs.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentTermDocs.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,159 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" + +#include "CLucene/store/IndexInput.h" +#include "Term.h" +#include + +CL_NS_DEF(index) + + SegmentTermDocs::SegmentTermDocs(const SegmentReader* _parent) : parent(_parent),freqStream(_parent->freqStream->clone()), + count(0),df(0),deletedDocs(_parent->deletedDocs),_doc(0),_freq(0),skipInterval(_parent->tis->getSkipInterval()), + maxSkipLevels(_parent->tis->getMaxSkipLevels()),skipListReader(NULL),freqBasePointer(0),proxBasePointer(0), + skipPointer(0),haveSkipped(false) + { + CND_CONDITION(_parent != NULL,"Parent is NULL"); + } + + SegmentTermDocs::~SegmentTermDocs() { + close(); + } + + TermPositions* SegmentTermDocs::__asTermPositions(){ + return NULL; + } + + void SegmentTermDocs::seek(Term* term) { + TermInfo* ti = parent->tis->get(term); + seek(ti, term); + _CLDELETE(ti); + } + + void SegmentTermDocs::seek(TermEnum* termEnum){ + TermInfo* ti=NULL; + Term* term = NULL; + + // use comparison of fieldinfos to verify that termEnum belongs to the same segment as this SegmentTermDocs + if ( termEnum->getObjectName() == SegmentTermEnum::getClassName() && + ((SegmentTermEnum*)termEnum)->fieldInfos == parent->_fieldInfos ){ + SegmentTermEnum* segmentTermEnum = (SegmentTermEnum*) termEnum; + term = segmentTermEnum->term(false); + ti = segmentTermEnum->getTermInfo(); + }else{ + term = termEnum->term(false); + ti = parent->tis->get(term); + } + + seek(ti,term); + _CLDELETE(ti); + } + void SegmentTermDocs::seek(const TermInfo* ti,Term* term) { + count = 0; + FieldInfo* fi = parent->_fieldInfos->fieldInfo(term->field()); + currentFieldStoresPayloads = (fi != NULL) ? fi->storePayloads : false; + if (ti == NULL) { + df = 0; + } else { // punt case + df = ti->docFreq; + _doc = 0; + freqBasePointer = ti->freqPointer; + proxBasePointer = ti->proxPointer; + skipPointer = freqBasePointer + ti->skipOffset; + freqStream->seek(freqBasePointer); + haveSkipped = false; + } + } + + void SegmentTermDocs::close() { + _CLDELETE( freqStream ); + _CLDELETE( skipListReader ); + } + + int32_t SegmentTermDocs::doc()const { + return _doc; + } + int32_t SegmentTermDocs::freq()const { + return _freq; + } + + bool SegmentTermDocs::next() { + while (true) { + if (count == df) + return false; + + uint32_t docCode = freqStream->readVInt(); + _doc += docCode >> 1; //unsigned shift + if ((docCode & 1) != 0) // if low bit is set + _freq = 1; // _freq is one + else + _freq = freqStream->readVInt(); // else read _freq + count++; + + if ( (deletedDocs == NULL) || (_doc >= 0 && deletedDocs->get(_doc) == false ) ) + break; + skippingDoc(); + } + return true; + } + + int32_t SegmentTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) { + int32_t i = 0; + //todo: one optimization would be to get the pointer buffer for ram or mmap dirs + //and iterate over them instead of using readByte() intensive functions. + while (ireadVInt(); + _doc += docCode >> 1; + if ((docCode & 1) != 0) // if low bit is set + _freq = 1; // _freq is one + else + _freq = freqStream->readVInt(); // else read _freq + count++; + + if (deletedDocs == NULL || (_doc >= 0 && !deletedDocs->get(_doc))) { + docs[i] = _doc; + freqs[i] = _freq; + i++; + } + } + return i; + } + + bool SegmentTermDocs::skipTo(const int32_t target){ + assert(count <= df ); + + if (df >= skipInterval) { // optimized case + if (skipListReader == NULL) + skipListReader = _CLNEW DefaultSkipListReader(freqStream->clone(), maxSkipLevels, skipInterval); // lazily clone + + if (!haveSkipped) { // lazily initialize skip stream + skipListReader->init(skipPointer, freqBasePointer, proxBasePointer, df, currentFieldStoresPayloads); + haveSkipped = true; + } + + int32_t newCount = skipListReader->skipTo(target); + if (newCount > count) { + freqStream->seek(skipListReader->getFreqPointer()); + skipProx(skipListReader->getProxPointer(), skipListReader->getPayloadLength()); + + _doc = skipListReader->getDoc(); + count = newCount; + } + } + + // done skipping, now just scan + do { + if (!next()) + return false; + } while (target > _doc); + return true; + } + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentTermEnum.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentTermEnum.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentTermEnum.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,389 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" +#include "_SegmentTermEnum.h" + +#include "Terms.h" +#include "_FieldInfos.h" +#include "Term.h" +#include "_TermInfo.h" +#include "_TermInfosWriter.h" + +CL_NS_USE(store) +CL_NS_DEF(index) + + SegmentTermEnum::SegmentTermEnum(IndexInput* i, FieldInfos* fis, const bool isi): + fieldInfos(fis){ + //Func - Constructor + //Pre - i holds a reference to an instance of IndexInput + // fis holds a reference to an instance of FieldInfos + // isi + //Post - An instance of SegmentTermEnum has been created + input = i; + position = -1; + //Instantiate a Term with empty field, empty text and which is interned (see term.h what interned means) + _term = _CLNEW Term; + isIndex = isi; + termInfo = _CLNEW TermInfo(); + indexPointer = 0; + buffer = NULL; + bufferLength = 0; + prev = NULL; + formatM1SkipInterval = 0; + maxSkipLevels = 1; + + //Set isClone to false as the instance is not clone of another instance + isClone = false; + + + int32_t firstInt = input->readInt(); + if (firstInt >= 0) { + // original-format file, without explicit format version number + format = 0; + size = firstInt; + + // back-compatible settings + indexInterval = 128; + skipInterval = LUCENE_INT32_MAX_SHOULDBE; // switch off skipTo optimization + + } else { + // we have a format version number + format = firstInt; + + // check that it is a format we can understand + if (format < TermInfosWriter::FORMAT){ + TCHAR err[30]; + _sntprintf(err,30,_T("Unknown format version: %d"), format); + _CLTHROWT(CL_ERR_CorruptIndex,err); + } + + size = input->readLong(); // read the size + + if(format == -1){ + if (!isIndex) { + indexInterval = input->readInt(); + formatM1SkipInterval = input->readInt(); + } + // switch off skipTo optimization for file format prior to 1.4rc2 in order to avoid a bug in + // skipTo implementation of these versions + skipInterval = LUCENE_INT32_MAX_SHOULDBE; + }else{ + indexInterval = input->readInt(); + skipInterval = input->readInt(); + if ( format == -3 ) { + // this new format introduces multi-level skipping + maxSkipLevels = input->readInt(); + } + } + } + } + + SegmentTermEnum::SegmentTermEnum(const SegmentTermEnum& clone): + fieldInfos(clone.fieldInfos) + { + //Func - Constructor + // The instance is created by cloning all properties of clone + //Pre - clone holds a valid reference to SegmentTermEnum + //Post - An instance of SegmentTermEnum with the same properties as clone + + input = clone.input->clone(); + //Copy the postion from the clone + position = clone.position; + + if ( clone._term != NULL ){ + _term = _CLNEW Term; + _term->set(clone._term,clone._term->text()); + }else + _term = NULL; + isIndex = clone.isIndex; + termInfo = _CLNEW TermInfo(clone.termInfo); + indexPointer = clone.indexPointer; + buffer = clone.buffer==NULL?NULL:(TCHAR*)malloc(sizeof(TCHAR) * (clone.bufferLength+1)); + bufferLength = clone.bufferLength; + prev = clone.prev==NULL?NULL:_CLNEW Term(clone.prev->field(),clone.prev->text(),false); + size = clone.size; + + format = clone.format; + indexInterval= clone.indexInterval; + skipInterval = clone.skipInterval; + formatM1SkipInterval = clone.formatM1SkipInterval; + maxSkipLevels = clone.maxSkipLevels; + + //Set isClone to true as this instance is a clone of another instance + isClone = true; + + //Copy the contents of buffer of clone to the buffer of this instance + if ( clone.buffer != NULL ) + memcpy(buffer,clone.buffer,bufferLength * sizeof(TCHAR)); + } + + SegmentTermEnum::~SegmentTermEnum(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed. If this instance was a clone + // then the inputstream is closed and deleted too. + + //todo: revisit this... close() should clean up most of everything. + + //Finalize prev + _CLDECDELETE(prev ); + //Finalize term + _CLDECDELETE( _term ); + + + //Delete the buffer if necessary + if ( buffer != NULL ) free(buffer); + //Delete termInfo if necessary + _CLDELETE(termInfo); + + //Check if this instance is a clone + if ( isClone ){ + //Close the inputstream + input->close(); + //delete the inputstream + _CLDELETE(input); + } + } + + const char* SegmentTermEnum::getObjectName() const{ return getClassName(); } + const char* SegmentTermEnum::getClassName(){ return "SegmentTermEnum"; } + + bool SegmentTermEnum::next(){ + //Func - Moves the current of the set to the next in the set + //Pre - true + //Post - If the end has been reached NULL is returned otherwise the term has + // become the next Term in the enumeration + + //Increase position by and and check if the end has been reached + if (position++ >= size-1) { + //delete term + _CLDECDELETE(_term); + return false; + } + + //delete the previous enumerated term + Term* tmp=NULL; + if ( prev != NULL ){ + if ( _LUCENE_ATOMIC_INT_GET(prev->__cl_refcount) > 1 ){ + _CLDECDELETE(prev); //todo: tune other places try and delete its term + }else + tmp = prev; //we are going to re-use this term + } + //prev becomes the current enumerated term + prev = _term; + //term becomes the next term read from inputStream input + _term = readTerm(tmp); + + //Read docFreq, the number of documents which contain the term. + termInfo->docFreq = input->readVInt(); + //Read freqPointer, a pointer into the TermFreqs file (.frq) + termInfo->freqPointer += input->readVLong(); + + //Read proxPointer, a pointer into the TermPosition file (.prx). + termInfo->proxPointer += input->readVLong(); + + if(format == -1){ + // just read skipOffset in order to increment file pointer; + // value is never used since skipTo is switched off + if (!isIndex) { + if (termInfo->docFreq > formatM1SkipInterval) { + termInfo->skipOffset = input->readVInt(); + } + } + }else{ + if (termInfo->docFreq >= skipInterval) + termInfo->skipOffset = input->readVInt(); + } + + //Check if the enumeration is an index + if (isIndex) + //read index pointer + indexPointer += input->readVLong(); + + return true; + } + + Term* SegmentTermEnum::term(bool pointer) { + if ( pointer ) + return _CL_POINTER(_term); + else + return _term; + } + + void SegmentTermEnum::scanTo(const Term *term){ + //Func - Scan for Term without allocating new Terms + //Pre - term != NULL + //Post - The iterator term has been moved to the position where Term is expected to be + // in the enumeration + while ( term->compareTo(this->_term) > 0 && next()) + { + } + } + + void SegmentTermEnum::close() { + //Func - Closes the enumeration to further activity, freeing resources. + //Pre - true + //Post - The inputStream input has been closed + + input->close(); + } + + int32_t SegmentTermEnum::docFreq() const { + //Func - Returns the document frequency of the current term in the set + //Pre - termInfo != NULL + // next() must have been called once + //Post - The document frequency of the current enumerated term has been returned + + return termInfo->docFreq; + } + + void SegmentTermEnum::seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti) { + //Func - Repositions term and termInfo within the enumeration + //Pre - pointer >= 0 + // p >= 0 and contains the new position within the enumeration + // t is a valid reference to a Term and is the new current term in the enumeration + // ti is a valid reference to a TermInfo and is corresponding TermInfo form the new + // current Term + //Post - term and terminfo have been repositioned within the enumeration + + //Reset the IndexInput input to pointer + input->seek(pointer); + //Assign the new position + position = p; + + //finalize the current term + if ( _term == NULL || _LUCENE_ATOMIC_INT_GET(_term->__cl_refcount) > 1 ){ + _CLDECDELETE(_term); + //Get a pointer from t and increase the reference counter of t + _term = _CLNEW Term; //cannot use reference, because TermInfosReader uses non ref-counted array + } + _term->set(t,t->text()); + + //finalize prev + _CLDECDELETE(prev); + + //Change the current termInfo so it matches the new current term + termInfo->set(ti); + + //Have the buffer grown if needed + if ( bufferLength <= _term->textLength() ) + growBuffer(_term->textLength(), true ); // copy term text into buffer + else + _tcsncpy(buffer,_term->text(),bufferLength); //just copy the buffer + } + + TermInfo* SegmentTermEnum::getTermInfo()const { + //Func - Returns a clone of the current termInfo + //Pre - termInfo != NULL + // next() must have been called once + //Post - A clone of the current termInfo has been returned + + return _CLNEW TermInfo(*termInfo); //clone + } + + void SegmentTermEnum::getTermInfo(TermInfo* ti)const { + //Func - Retrieves a clone of termInfo through the reference ti + //Pre - ti contains a valid reference to TermInfo + // termInfo != NULL + // next() must have been called once + //Post - ti contains a clone of termInfo + + ti->set(termInfo); + } + + int64_t SegmentTermEnum::freqPointer()const { + //Func - Returns the freqpointer of the current termInfo + //Pre - termInfo != NULL + // next() must have been called once + //Post - The freqpointer of the current termInfo has been returned + + return termInfo->freqPointer; + } + + int64_t SegmentTermEnum::proxPointer()const { + //Func - Returns the proxPointer of the current termInfo + //Pre - termInfo != NULL + // next() must have been called once + //Post - the proxPointer of the current termInfo has been returned + + return termInfo->proxPointer; + } + + SegmentTermEnum* SegmentTermEnum::clone() const { + //Func - Returns a clone of this instance + //Pre - true + //Post - An clone of this instance has been returned + + return _CLNEW SegmentTermEnum(*this); + } + + Term* SegmentTermEnum::readTerm(Term* reuse) { + //Func - Reads the next term in the enumeration + //Pre - true + //Post - The next Term in the enumeration has been read and returned + + //Read the start position from the inputStream input + int32_t start = input->readVInt(); + //Read the length of term in the inputStream input + int32_t length = input->readVInt(); + + //Calculated the total lenght of bytes that buffer must be to contain the current + //chars in buffer and the new ones yet to be read + uint32_t totalLength = start + length; + + if (static_cast(bufferLength) < totalLength+1) + growBuffer(totalLength, false); //dont copy the buffer over. + + //Read a length number of characters into the buffer from position start in the inputStream input + input->readChars(buffer, start, length); + //Null terminate the string + buffer[totalLength] = 0; + + //Return a new Term + int32_t field = input->readVInt(); + const TCHAR* fieldname = fieldInfos->fieldName(field); + if ( reuse == NULL ) + reuse = _CLNEW Term; + + reuse->set(fieldname, buffer, false); + return reuse; + } + + void SegmentTermEnum::growBuffer(const uint32_t length, bool force_copy) { + //Func - Instantiate a buffer of length length+1 + //Pre - length > 0 + //Post - pre(buffer) has been deleted with its contents. A new buffer + // has been allocated of length length+1 and the text of term has been copied + // to buffer + //todo: we could guess that we will need to re-grow this + //buffer a few times...so start off with a reasonable grow + //value... + if ( bufferLength > length ) + return; + + //Store the new bufferLength + if ( length - bufferLength < 8 ) + bufferLength = length+8; + else + bufferLength = length+1; + + bool copy = buffer==NULL; + + //Instantiate the new buffer + 1 is needed for terminator '\0' + if ( buffer == NULL ) + buffer = (TCHAR*)malloc(sizeof(TCHAR) * (bufferLength+1)); + else + buffer = (TCHAR*)realloc(buffer, sizeof(TCHAR) * (bufferLength+1)); + + if ( copy || force_copy){ + //Copy the text of term into buffer + _tcsncpy(buffer,_term->text(),bufferLength); + } + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_SegmentTermEnum.h clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentTermEnum.h --- clucene-core-0.9.21b/src/core/CLucene/index/_SegmentTermEnum.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_SegmentTermEnum.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,133 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SegmentTermEnum_ +#define _lucene_index_SegmentTermEnum_ + + +//#include "Terms.h" +//#include "FieldInfos.h" +//#include "TermInfo.h" + +CL_NS_DEF(index) + +/** + * SegmentTermEnum is an enumeration of all Terms and TermInfos + */ +class SegmentTermEnum:public TermEnum{ +private: + Term* _term; ///points to the current Term in the enumeration + TermInfo* termInfo; ///points to the TermInfo matching the current Term in the enumeration + + bool isIndex; ///Indicates if the Segment is a an index + bool isClone; ///Indicates if SegmentTermEnum is an orignal instance or + ///a clone of another SegmentTermEnum + + TCHAR* buffer; ///The buffer that contains the data read from the Term Infos File + uint32_t bufferLength; ///Length of the buffer + + int32_t format; + int32_t formatM1SkipInterval; + + CL_NS(store)::IndexInput* input; ///The IndexInput that reads from the Term Infos File + FieldInfos* fieldInfos; ///contains the Field Infos for the segment + int64_t size; ///The size of the enumeration + int64_t position; ///The position of the current (term) in the enumeration + int64_t indexPointer; + Term* prev; ///The previous current + int32_t indexInterval; + int32_t skipInterval; + int32_t maxSkipLevels; + + friend class TermInfosReader; + friend class SegmentTermDocs; +protected: + + /** + * Constructor. + * The instance is created by cloning all properties of clone + */ + SegmentTermEnum( const SegmentTermEnum& clone); + +public: + ///Constructor + SegmentTermEnum(CL_NS(store)::IndexInput* i, FieldInfos* fis, const bool isi ); + + ///Destructor + ~SegmentTermEnum(); + + /** + * Moves the current of the set to the next in the set + */ + bool next(); + + /** + * Returns the current term. + */ + Term* term(bool pointer=true); + + /** + * Scan for Term term without allocating new Terms + */ + void scanTo(const Term *term); + + /** + * Closes the enumeration to further activity, freeing resources. + */ + void close(); + + /** + * Returns the document frequency of the current term in the set + */ + int32_t docFreq() const; + + /** + * Repositions term and termInfo within the enumeration + */ + void seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti); + + /** + * Returns a clone of the current termInfo + */ + TermInfo* getTermInfo()const; + + /** + * Retrieves a clone of termInfo through the reference ti + */ + void getTermInfo(TermInfo* ti)const; + + /** + * Returns the freqPointer from the current TermInfo in the enumeration. + */ + int64_t freqPointer() const; + + /** + * Returns the proxPointer from the current TermInfo in the enumeration. + */ + int64_t proxPointer() const; + + /** + * Returns a clone of this instance + */ + SegmentTermEnum* clone() const; + + const char* getObjectName() const; + static const char* getClassName(); + +private: + /** + * Reads the next term in the enumeration + */ + Term* readTerm(Term* reuse); + /** + * Instantiate a buffer of length length+1 + * TODO: deprecate this... + */ + void growBuffer(const uint32_t length, bool force_copy); + +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentTermPositions.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentTermPositions.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentTermPositions.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentTermPositions.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,165 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" + +#include "Terms.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +SegmentTermPositions::SegmentTermPositions(const SegmentReader* _parent): + SegmentTermDocs(_parent), proxStream(NULL)// the proxStream will be cloned lazily when nextPosition() is called for the first time + ,lazySkipPointer(-1), lazySkipProxCount(0) +{ + CND_CONDITION(_parent != NULL, "Parent is NULL"); +} + +SegmentTermPositions::~SegmentTermPositions() { + close(); +} + +TermDocs* SegmentTermPositions::__asTermDocs(){ + return (TermDocs*) this; +} +TermPositions* SegmentTermPositions::__asTermPositions(){ + return (TermPositions*) this; +} + +void SegmentTermPositions::seek(const TermInfo* ti, Term* term) { + SegmentTermDocs::seek(ti, term); + if (ti != NULL) + lazySkipPointer = ti->proxPointer; + + lazySkipProxCount = 0; + proxCount = 0; + payloadLength = 0; + needToLoadPayload = false; +} + +void SegmentTermPositions::close() { + SegmentTermDocs::close(); + //Check if proxStream still exists + if(proxStream){ + proxStream->close(); + _CLDELETE( proxStream ); + } +} + +int32_t SegmentTermPositions::nextPosition() { + // perform lazy skips if neccessary + lazySkip(); + proxCount--; + return position += readDeltaPosition(); +} + +int32_t SegmentTermPositions::readDeltaPosition() { + int32_t delta = proxStream->readVInt(); + if (currentFieldStoresPayloads) { + // if the current field stores payloads then + // the position delta is shifted one bit to the left. + // if the LSB is set, then we have to read the current + // payload length + if ((delta & 1) != 0) { + payloadLength = proxStream->readVInt(); + } + delta = (int32_t)((uint32_t)delta >> (uint32_t)1); + needToLoadPayload = true; + } + return delta; +} + +void SegmentTermPositions::skippingDoc() { + lazySkipProxCount += _freq; +} + +bool SegmentTermPositions::next() { + // we remember to skip the remaining positions of the current + // document lazily + lazySkipProxCount += proxCount; + + if (SegmentTermDocs::next()) { // run super + proxCount = _freq; // note frequency + position = 0; // reset position + return true; + } + return false; +} + +int32_t SegmentTermPositions::read(int32_t* /*docs*/, int32_t* /*freqs*/, int32_t /*length*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation,"TermPositions does not support processing multiple documents in one call. Use TermDocs instead."); +} + +void SegmentTermPositions::skipProx(const int64_t proxPointer, const int32_t _payloadLength){ + // we save the pointer, we might have to skip there lazily + lazySkipPointer = proxPointer; + lazySkipProxCount = 0; + proxCount = 0; + this->payloadLength = _payloadLength; + needToLoadPayload = false; +} + +void SegmentTermPositions::skipPositions(const int32_t n) { + for ( int32_t f = n; f > 0; f-- ) { // skip unread positions + readDeltaPosition(); + skipPayload(); + } +} + +void SegmentTermPositions::skipPayload() { + if (needToLoadPayload && payloadLength > 0) { + proxStream->seek(proxStream->getFilePointer() + payloadLength); + } + needToLoadPayload = false; +} + +void SegmentTermPositions::lazySkip() { + if (proxStream == NULL) { + // clone lazily + proxStream = parent->proxStream->clone(); + } + + // we might have to skip the current payload + // if it was not read yet + skipPayload(); + + if (lazySkipPointer != -1) { + proxStream->seek(lazySkipPointer); + lazySkipPointer = -1; + } + + if (lazySkipProxCount != 0) { + skipPositions(lazySkipProxCount); + lazySkipProxCount = 0; + } +} + +int32_t SegmentTermPositions::getPayloadLength() const { return payloadLength; } + +uint8_t* SegmentTermPositions::getPayload(uint8_t* data) { + if (!needToLoadPayload) { + _CLTHROWA(CL_ERR_IO, "Payload cannot be loaded more than once for the same term position."); + } + + // read payloads lazily + uint8_t* retArray; + // TODO: Complete length logic ( possibly using ValueArray ? ) + if (data == NULL /*|| data.length - offset < payloadLength*/) { + // the array is too small to store the payload data, + // so we allocate a new one + _CLDELETE_ARRAY(data); + retArray = _CL_NEWARRAY(uint8_t, payloadLength); + } else { + retArray = data; + } + proxStream->readBytes(retArray, payloadLength); + needToLoadPayload = false; + return retArray; +} +bool SegmentTermPositions::isPayloadAvailable() const { return needToLoadPayload && (payloadLength > 0); } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SegmentTermVector.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SegmentTermVector.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SegmentTermVector.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SegmentTermVector.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,156 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_FieldInfos.h" +#include "_TermVector.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/Array.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +ValueArray SegmentTermPositionVector::EMPTY_TERM_POS; + +SegmentTermVector::SegmentTermVector(const TCHAR* _field, + ArrayBase* _terms, ArrayBase* _termFreqs) { + this->field = STRDUP_TtoT(_field); // TODO: Try and avoid this dup (using intern'ing perhaps?) + this->terms = _terms; + this->termFreqs = _termFreqs; +} + +SegmentTermVector::~SegmentTermVector(){ + _CLDELETE_LCARRAY(field); + _CLDELETE(terms); + _CLDELETE(termFreqs); +} +TermPositionVector* SegmentTermVector::__asTermPositionVector(){ + return NULL; +} + +const TCHAR* SegmentTermVector::getField() { + return field; +} + +TCHAR* SegmentTermVector::toString() const{ + StringBuffer sb; + sb.appendChar('{'); + sb.append(field); + sb.append(_T(": ")); + + int32_t i=0; + while ( terms && terms->values[i] != NULL ){ + if (i>0) + sb.append(_T(", ")); + sb.append(terms->values[i]); + sb.appendChar('/'); + + sb.appendInt((*termFreqs)[i]); + } + sb.appendChar('}'); + return sb.toString(); +} + +int32_t SegmentTermVector::size() { + if ( terms == NULL ) + return 0; + + return terms->length; +} + +const CL_NS(util)::ArrayBase* SegmentTermVector::getTerms() { + return (CL_NS(util)::ArrayBase*)terms; +} + +const ArrayBase* SegmentTermVector::getTermFrequencies() { + return termFreqs; +} + +int32_t SegmentTermVector::binarySearch(const ArrayBase& a, const TCHAR* key) const +{ + int32_t low = 0; + int32_t hi = a.length - 1; + int32_t mid = 0; + while (low <= hi) + { + mid = (low + hi) >> 1; + + int32_t c = _tcscmp(a[mid],key); + if (c==0) + return mid; + else if (c > 0) + hi = mid - 1; + else // This gets the insertion point right on the last loop. + low = ++mid; + } + return -mid - 1; +} + +int32_t SegmentTermVector::indexOf(const TCHAR* termText) { + if(terms == NULL) + return -1; + int32_t res = binarySearch(*terms, termText); + return res >= 0 ? res : -1; +} + +ArrayBase* SegmentTermVector::indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len) { + // TODO: there must be a more efficient way of doing this. + // At least, we could advance the lower bound of the terms array + // as we find valid indexes. Also, it might be possible to leverage + // this even more by starting in the middle of the termNumbers array + // and thus dividing the terms array maybe in half with each found index. + ArrayBase* ret = _CLNEW ValueArray(len); + for (int32_t i=0; ivalues[i] = indexOf(termNumbers[start+ i]); + } + return ret; +} + + +SegmentTermPositionVector::SegmentTermPositionVector(const TCHAR* field, + ArrayBase* terms, ArrayBase* termFreqs, + ArrayBase< ArrayBase* >* _positions, + ArrayBase< ArrayBase* >* _offsets) + : SegmentTermVector(field,terms,termFreqs), + positions(_positions), + offsets(_offsets) +{ +} +SegmentTermPositionVector::~SegmentTermPositionVector(){ + _CLLDELETE(offsets); + _CLLDELETE(positions); +} + +ArrayBase* SegmentTermPositionVector::indexesOf(const ArrayBase& termNumbers, const int32_t start, const int32_t len) +{ + return SegmentTermVector::indexesOf(termNumbers, start, len); +} + +TermPositionVector* SegmentTermPositionVector::__asTermPositionVector(){ + return this; +} + +const ArrayBase* SegmentTermPositionVector::getOffsets(const size_t index) { + if(offsets == NULL) + return NULL; + if (index < offsets->length) + return offsets->values[index]; + else + return TermVectorOffsetInfo_EMPTY_OFFSET_INFO; +} + +const ArrayBase* SegmentTermPositionVector::getTermPositions(const size_t index) { + if(positions == NULL) + return NULL; + + if (index < positions->length) + return positions->values[index]; + else + return &EMPTY_TERM_POS; +} + +CL_NS_END + diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SkipListReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SkipListReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SkipListReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SkipListReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,325 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SkipListReader.h" + +CL_NS_USE(store) +CL_NS_DEF(index) + +MultiLevelSkipListReader::MultiLevelSkipListReader(IndexInput* _skipStream, const int32_t maxSkipLevels, + const int32_t _skipInterval): + maxNumberOfSkipLevels(maxSkipLevels),numberOfLevelsToBuffer(1), + skipStream(CL_NS(util)::ObjectArray(maxSkipLevels)), + skipPointer(_CL_NEWARRAY(int64_t,maxSkipLevels)), + skipInterval(_CL_NEWARRAY(int32_t,maxSkipLevels)), + numSkipped(_CL_NEWARRAY(int32_t,maxSkipLevels)), + skipDoc(_CL_NEWARRAY(int32_t,maxSkipLevels)), + childPointer(_CL_NEWARRAY(int64_t,maxSkipLevels)) +{ + memset(this->skipPointer,0,sizeof(int64_t) * maxSkipLevels); + memset(this->skipInterval,0,sizeof(int32_t) * maxSkipLevels); + memset(this->numSkipped,0,sizeof(int32_t) * maxSkipLevels); + memset(this->skipDoc,0,sizeof(int32_t) * maxSkipLevels); + memset(this->childPointer,0,sizeof(int32_t) * maxSkipLevels); + + this->numberOfLevelsToBuffer = 0; + this->numberOfSkipLevels = 0; + this->docCount = 0; + this->lastDoc = 0; + this->lastChildPointer = 0; + this->haveSkipped = false; + this->skipStream[0] = _skipStream; + this->inputIsBuffered = _skipStream->instanceOf(BufferedIndexInput::getClassName()); + this->skipInterval[0] = _skipInterval; + for (int32_t i = 1; i < maxSkipLevels; i++) { + // cache skip intervals + this->skipInterval[i] = this->skipInterval[i - 1] * _skipInterval; + } +} +MultiLevelSkipListReader::~MultiLevelSkipListReader(){ + close(); + _CLDELETE_LARRAY(skipPointer); + _CLDELETE_LARRAY(childPointer); + _CLDELETE_LARRAY(numSkipped); + _CLDELETE_LARRAY(skipInterval); + _CLDELETE_LARRAY(skipDoc); +} + +int32_t MultiLevelSkipListReader::getDoc() const { + return lastDoc; +} + +int32_t MultiLevelSkipListReader::skipTo(const int32_t target) { + if (!haveSkipped) { + // first time, load skip levels + loadSkipLevels(); + haveSkipped = true; + } + + // walk up the levels until highest level is found that has a skip + // for this target + int32_t level = 0; + while (level < numberOfSkipLevels - 1 && target > skipDoc[level + 1]) { + level++; + } + + while (level >= 0) { + if (target > skipDoc[level]) { + if (!loadNextSkip(level)) { + continue; + } + } else { + // no more skips on this level, go down one level + if (level > 0 && lastChildPointer > skipStream[level - 1]->getFilePointer()) { + seekChild(level - 1); + } + level--; + } + } + + return numSkipped[0] - skipInterval[0] - 1; +} + +bool MultiLevelSkipListReader::loadNextSkip(const int32_t level) { + // we have to skip, the target document is greater than the current + // skip list entry + setLastSkipData(level); + + numSkipped[level] += skipInterval[level]; + + if (numSkipped[level] > docCount) { + // this skip list is exhausted + skipDoc[level] = LUCENE_INT32_MAX_SHOULDBE; + if (numberOfSkipLevels > level) numberOfSkipLevels = level; + return false; + } + + // read next skip entry + skipDoc[level] += readSkipData(level, skipStream[level]); + + if (level != 0) { + // read the child pointer if we are not on the leaf level + childPointer[level] = skipStream[level]->readVLong() + skipPointer[level - 1]; + } + return true; +} + +void MultiLevelSkipListReader::seekChild(const int32_t level) { + skipStream[level]->seek(lastChildPointer); + numSkipped[level] = numSkipped[level + 1] - skipInterval[level + 1]; + skipDoc[level] = lastDoc; + if (level > 0) { + childPointer[level] = skipStream[level]->readVLong() + skipPointer[level - 1]; + } +} + +void MultiLevelSkipListReader::close() { + for (int32_t i = 1; i < maxNumberOfSkipLevels; i++) { + if (skipStream[i] != NULL) { + //skipStream[i]->close(); + _CLDELETE(skipStream[i]); // ISH: We actually do need to nullify pointer here + } + } +} + +void MultiLevelSkipListReader::init(const int64_t _skipPointer, const int32_t df) { + this->skipPointer[0] = _skipPointer; + this->docCount = df; + memset(skipDoc,0,sizeof(int32_t) * maxNumberOfSkipLevels); + memset(numSkipped,0,sizeof(int32_t) * maxNumberOfSkipLevels); + memset(childPointer,0,sizeof(int64_t) * maxNumberOfSkipLevels); + if ( numberOfSkipLevels > 1 ) + { + for (int i=1;i maxNumberOfSkipLevels) { + numberOfSkipLevels = maxNumberOfSkipLevels; + } + + skipStream[0]->seek(skipPointer[0]); + + int32_t toBuffer = numberOfLevelsToBuffer; + + for (int32_t i = numberOfSkipLevels - 1; i > 0; i--) { + // the length of the current level + int64_t length = skipStream[0]->readVLong(); + + // the start pointer of the current level + skipPointer[i] = skipStream[0]->getFilePointer(); + if (toBuffer > 0) { + // buffer this level + skipStream[i] = _CLNEW SkipBuffer(skipStream[0], (int32_t) length); + toBuffer--; + } else { + // clone this stream, it is already at the start of the current level + skipStream[i] = skipStream[0]->clone(); + if (inputIsBuffered && length < BufferedIndexInput::BUFFER_SIZE) { + ((BufferedIndexInput*) skipStream[i])->setBufferSize((int32_t) length); + } + + // move base stream beyond the current level + skipStream[0]->seek(skipStream[0]->getFilePointer() + length); + } + } + + // use base stream for the lowest level + skipPointer[0] = skipStream[0]->getFilePointer(); +} + +void MultiLevelSkipListReader::setLastSkipData(const int32_t level) { + lastDoc = skipDoc[level]; + lastChildPointer = childPointer[level]; +} + +MultiLevelSkipListReader::SkipBuffer::SkipBuffer(IndexInput* input, const int32_t _length):pos(0) +{ + data = _CL_NEWARRAY(uint8_t,_length); + this->_datalength = _length; + pointer = input->getFilePointer(); + input->readBytes(data, _length); +} +MultiLevelSkipListReader::SkipBuffer::~SkipBuffer() +{ + _CLLDELETE(data); +} + +void MultiLevelSkipListReader::SkipBuffer::close() { + _CLDELETE(data); + _datalength=0; +} + +int64_t MultiLevelSkipListReader::SkipBuffer::getFilePointer() const { + return pointer + pos; +} + +int64_t MultiLevelSkipListReader::SkipBuffer::length() const { + return _datalength; +} + +uint8_t MultiLevelSkipListReader::SkipBuffer::readByte() { + return data[pos++]; +} + +void MultiLevelSkipListReader::SkipBuffer::readBytes(uint8_t* b, const int32_t len) { + memcpy(b,data+pos,len*sizeof(uint8_t)); + pos += len; +} + +void MultiLevelSkipListReader::SkipBuffer::seek(const int64_t _pos) { + this->pos = static_cast(_pos - pointer); +} + +const char* MultiLevelSkipListReader::SkipBuffer::getObjectName() const{ return getClassName(); } +const char* MultiLevelSkipListReader::SkipBuffer::getClassName(){ return "MultiLevelSkipListReader::SkipBuffer"; } + +const char* MultiLevelSkipListReader::SkipBuffer::getDirectoryType() const{ return "SKIP"; } +MultiLevelSkipListReader::SkipBuffer::SkipBuffer(const SkipBuffer& other): + IndexInput(other) +{ + data = _CL_NEWARRAY(uint8_t,other._datalength); + memcpy(data,other.data,other._datalength * sizeof(uint8_t)); + this->_datalength = other._datalength; + this->pointer = other.pointer; + this->pos = other.pos; +} +IndexInput* MultiLevelSkipListReader::SkipBuffer::clone() const{ + return _CLNEW SkipBuffer(*this); +} + + + + + + + +DefaultSkipListReader::DefaultSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval) + : MultiLevelSkipListReader(_skipStream, maxSkipLevels, _skipInterval) +{ + freqPointer = _CL_NEWARRAY(int64_t,maxSkipLevels); + proxPointer = _CL_NEWARRAY(int64_t,maxSkipLevels); + payloadLength = _CL_NEWARRAY(int32_t,maxSkipLevels); + memset(freqPointer,0, sizeof(int64_t) * maxSkipLevels); + memset(proxPointer,0, sizeof(int64_t) * maxSkipLevels); + memset(payloadLength,0, sizeof(int32_t) * maxSkipLevels); + this->lastFreqPointer = 0; + this->lastProxPointer = 0; + this->lastPayloadLength = 0; + this->currentFieldStoresPayloads = false; +} + +DefaultSkipListReader::~DefaultSkipListReader(){ + _CLDELETE_LARRAY(freqPointer); + _CLDELETE_LARRAY(proxPointer); + _CLDELETE_LARRAY(payloadLength); +} + +void DefaultSkipListReader::init(const int64_t _skipPointer, const int64_t freqBasePointer, const int64_t proxBasePointer, const int32_t df, const bool storesPayloads) { + MultiLevelSkipListReader::init(_skipPointer, df); + this->currentFieldStoresPayloads = storesPayloads; + lastFreqPointer = freqBasePointer; + lastProxPointer = proxBasePointer; + + for (int32_t j=0; jreadVInt(); + if ((delta & 1) != 0) { + payloadLength[level] = _skipStream->readVInt(); + } + delta = (int32_t)(((uint32_t)delta) >> (uint32_t)1); + } else { + delta = _skipStream->readVInt(); + } + freqPointer[level] += _skipStream->readVInt(); + proxPointer[level] += _skipStream->readVInt(); + + return delta; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_SkipListReader.h clucene-core-2.3.3.4/src/core/CLucene/index/_SkipListReader.h --- clucene-core-0.9.21b/src/core/CLucene/index/_SkipListReader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_SkipListReader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SkipListReader_ +#define _lucene_index_SkipListReader_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** + * This abstract class reads skip lists with multiple levels. + * + * See {@link MultiLevelSkipListWriter} for the information about the encoding + * of the multi level skip lists. + * + * Subclasses must implement the abstract method {@link #readSkipData(int, IndexInput)} + * which defines the actual format of the skip data. + */ +class MultiLevelSkipListReader : LUCENE_BASE { +protected: + // number of levels in this skip list + int32_t numberOfSkipLevels; + + // the maximum number of skip levels possible for this index + int32_t maxNumberOfSkipLevels; +private: + // Expert: defines the number of top skip levels to buffer in memory. + // Reducing this number results in less memory usage, but possibly + // slower performance due to more random I/Os. + // Please notice that the space each level occupies is limited by + // the skipInterval. The top level can not contain more than + // skipLevel entries, the second top level can not contain more + // than skipLevel^2 entries and so forth. + int32_t numberOfLevelsToBuffer; + + int32_t docCount; + bool haveSkipped; + + CL_NS(util)::ObjectArray skipStream; // skipStream for each level + int64_t* skipPointer; // the start pointer of each skip level + int32_t* skipInterval; // skipInterval of each level + int32_t* numSkipped; // number of docs skipped per level + + int32_t* skipDoc; // doc id of current skip entry per level + int32_t lastDoc; // doc id of last read skip entry with docId <= target + int64_t* childPointer; // child pointer of current skip entry per level + int64_t lastChildPointer; // childPointer of last read skip entry with docId <= target + + bool inputIsBuffered; + +public: + /** + * @memory consumes _skipStream + */ + MultiLevelSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval); + virtual ~MultiLevelSkipListReader(); + + /** Returns the id of the doc to which the last call of {@link #skipTo(int)} + * has skipped. */ + int32_t getDoc() const; + + /** Skips entries to the first beyond the current whose document number is + * greater than or equal to target. Returns the current doc count. + */ + int32_t skipTo(const int32_t target); + +private: + bool loadNextSkip(const int32_t level); + +protected: + /** Seeks the skip entry on the given level */ + virtual void seekChild(const int32_t level); + + void close(); + + /** initializes the reader */ + void init(const int64_t _skipPointer, const int32_t df); + +private: + /** Loads the skip levels */ + void loadSkipLevels(); + +protected: + /** + * Subclasses must implement the actual skip data encoding in this method. + * + * @param level the level skip data shall be read from + * @param skipStream the skip stream to read from + */ + virtual int32_t readSkipData(const int32_t level, CL_NS(store)::IndexInput* skipStream) = 0; + + /** Copies the values of the last read skip entry on this level */ + virtual void setLastSkipData(const int32_t level); + +protected: + /** used to buffer the top skip levels */ + class SkipBuffer : public CL_NS(store)::IndexInput { + private: + uint8_t* data; + int64_t pointer; + int32_t pos; + size_t _datalength; + + public: + SkipBuffer(CL_NS(store)::IndexInput* input, const int32_t length); + virtual ~SkipBuffer(); + + private: + void close(); + + int64_t getFilePointer() const; + + int64_t length() const; + + uint8_t readByte(); + + /* Make sure b is passed after the offset has been calculated into it, if necessary! */ + void readBytes(uint8_t* b, const int32_t len); + + void seek(const int64_t _pos); + + SkipBuffer(const SkipBuffer& other); + CL_NS(store)::IndexInput* clone() const; + + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + }; +}; + + +/** + * Implements the skip list reader for the default posting list format + * that stores positions and payloads. + * + */ +class DefaultSkipListReader: public MultiLevelSkipListReader { +private: + bool currentFieldStoresPayloads; + int64_t* freqPointer; + int64_t* proxPointer; + int32_t* payloadLength; + + int64_t lastFreqPointer; + int64_t lastProxPointer; + int32_t lastPayloadLength; + +public: + DefaultSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval); + virtual ~DefaultSkipListReader(); + + void init(const int64_t _skipPointer, const int64_t freqBasePointer, const int64_t proxBasePointer, const int32_t df, const bool storesPayloads); + + /** Returns the freq pointer of the doc to which the last call of + * {@link MultiLevelSkipListReader#skipTo(int)} has skipped. */ + int64_t getFreqPointer() const; + + /** Returns the prox pointer of the doc to which the last call of + * {@link MultiLevelSkipListReader#skipTo(int)} has skipped. */ + int64_t getProxPointer() const; + + /** Returns the payload length of the payload stored just before + * the doc to which the last call of {@link MultiLevelSkipListReader#skipTo(int)} + * has skipped. */ + int32_t getPayloadLength() const; + +protected: + void seekChild(const int32_t level); + + void setLastSkipData(const int32_t level); + + int32_t readSkipData(const int32_t level, CL_NS(store)::IndexInput* _skipStream); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/SkipListWriter.cpp clucene-core-2.3.3.4/src/core/CLucene/index/SkipListWriter.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/SkipListWriter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/SkipListWriter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SkipListWriter.h" +#include "CLucene/util/_Arrays.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +void MultiLevelSkipListWriter::bufferSkip(int32_t df){ + int32_t numLevels; + + // determine max level + for (numLevels = 0; (df % skipInterval) == 0 && numLevels < numberOfSkipLevels; df /= skipInterval) { + numLevels++; + } + + int64_t childPointer = 0; + + for (int32_t level = 0; level < numLevels; level++) { + writeSkipData(level, (*skipBuffer)[level]); + + int64_t newChildPointer = (*skipBuffer)[level]->getFilePointer(); + + if (level != 0) { + // store child pointers for all levels except the lowest + (*skipBuffer)[level]->writeVLong(childPointer); + } + + //remember the childPointer for the next level + childPointer = newChildPointer; + } +} + +int64_t MultiLevelSkipListWriter::writeSkip(IndexOutput* output){ + int64_t skipPointer = output->getFilePointer(); + if (skipBuffer == NULL || skipBuffer->length == 0) return skipPointer; + + for (int32_t level = numberOfSkipLevels - 1; level > 0; level--) { + int64_t length = (*skipBuffer)[level]->getFilePointer(); + if (length > 0) { + output->writeVLong(length); + (*skipBuffer)[level]->writeTo(output); + } + } + (*skipBuffer)[0]->writeTo(output); + + return skipPointer; +} + +MultiLevelSkipListWriter::MultiLevelSkipListWriter(int32_t skipInterval, int32_t maxSkipLevels, int32_t df) { + this->skipBuffer = NULL; + this->skipInterval = skipInterval; + + // calculate the maximum number of skip levels for this document frequency + numberOfSkipLevels = df == 0 ? 0 : (int32_t) floor(log((float_t)df) / log((float_t)skipInterval)); + + // make sure it does not exceed maxSkipLevels + if (numberOfSkipLevels > maxSkipLevels) { + numberOfSkipLevels = maxSkipLevels; + } +} +MultiLevelSkipListWriter::~MultiLevelSkipListWriter(){ + _CLDELETE(skipBuffer); +} + +void MultiLevelSkipListWriter::init() { + skipBuffer = _CLNEW CL_NS(util)::ObjectArray(numberOfSkipLevels); + for (int32_t i = 0; i < numberOfSkipLevels; i++) { + skipBuffer->values[i] = _CLNEW RAMOutputStream; + } +} + +void MultiLevelSkipListWriter::resetSkip() { + // creates new buffers or empties the existing ones + if (skipBuffer == NULL) { + init(); + } else { + for (size_t i = 0; i < skipBuffer->length; i++) { + (*skipBuffer)[i]->reset(); + } + } +} + + + + +void DefaultSkipListWriter::setSkipData(int32_t doc, bool storePayloads, int32_t payloadLength) { + this->curDoc = doc; + this->curStorePayloads = storePayloads; + this->curPayloadLength = payloadLength; + this->curFreqPointer = freqOutput->getFilePointer(); + this->curProxPointer = proxOutput->getFilePointer(); +} + +void DefaultSkipListWriter::resetSkip() { + MultiLevelSkipListWriter::resetSkip(); + memset(lastSkipDoc, 0, numberOfSkipLevels * sizeof(int32_t) ); + Arrays::fill(lastSkipPayloadLength, numberOfSkipLevels, -1); // we don't have to write the first length in the skip list + Arrays::fill(lastSkipFreqPointer, numberOfSkipLevels, freqOutput->getFilePointer()); + Arrays::fill(lastSkipProxPointer, numberOfSkipLevels, proxOutput->getFilePointer()); +} + +void DefaultSkipListWriter::writeSkipData(int32_t level, IndexOutput* skipBuffer){ + // To efficiently store payloads in the posting lists we do not store the length of + // every payload. Instead we omit the length for a payload if the previous payload had + // the same length. + // However, in order to support skipping the payload length at every skip point must be known. + // So we use the same length encoding that we use for the posting lists for the skip data as well: + // Case 1: current field does not store payloads + // SkipDatum --> DocSkip, FreqSkip, ProxSkip + // DocSkip,FreqSkip,ProxSkip --> VInt + // DocSkip records the document number before every SkipInterval th document in TermFreqs. + // Document numbers are represented as differences from the previous value in the sequence. + // Case 2: current field stores payloads + // SkipDatum --> DocSkip, PayloadLength?, FreqSkip,ProxSkip + // DocSkip,FreqSkip,ProxSkip --> VInt + // PayloadLength --> VInt + // In this case DocSkip/2 is the difference between + // the current and the previous value. If DocSkip + // is odd, then a PayloadLength encoded as VInt follows, + // if DocSkip is even, then it is assumed that the + // current payload length equals the length at the previous + // skip point + if (curStorePayloads) { + int32_t delta = curDoc - lastSkipDoc[level]; + if (curPayloadLength == lastSkipPayloadLength[level]) { + // the current payload length equals the length at the previous skip point, + // so we don't store the length again + skipBuffer->writeVInt(delta * 2); + } else { + // the payload length is different from the previous one. We shift the DocSkip, + // set the lowest bit and store the current payload length as VInt. + skipBuffer->writeVInt(delta * 2 + 1); + skipBuffer->writeVInt(curPayloadLength); + lastSkipPayloadLength[level] = curPayloadLength; + } + } else { + // current field does not store payloads + skipBuffer->writeVInt(curDoc - lastSkipDoc[level]); + } + skipBuffer->writeVInt((int32_t) (curFreqPointer - lastSkipFreqPointer[level])); + skipBuffer->writeVInt((int32_t) (curProxPointer - lastSkipProxPointer[level])); + + lastSkipDoc[level] = curDoc; + //System.out.println("write doc at level " + level + ": " + curDoc); + + lastSkipFreqPointer[level] = curFreqPointer; + lastSkipProxPointer[level] = curProxPointer; +} + +DefaultSkipListWriter::DefaultSkipListWriter(int32_t skipInterval, int32_t numberOfSkipLevels, int32_t docCount, IndexOutput* freqOutput, IndexOutput* proxOutput): + MultiLevelSkipListWriter(skipInterval, numberOfSkipLevels, docCount) +{ + this->freqOutput = freqOutput; + this->proxOutput = proxOutput; + this->curDoc = this->curPayloadLength = 0; + this->curFreqPointer =this->curProxPointer = 0; + + lastSkipDoc = _CL_NEWARRAY(int32_t,numberOfSkipLevels); + lastSkipPayloadLength = _CL_NEWARRAY(int32_t,numberOfSkipLevels); + lastSkipFreqPointer = _CL_NEWARRAY(int64_t,numberOfSkipLevels); + lastSkipProxPointer = _CL_NEWARRAY(int64_t,numberOfSkipLevels); +} +DefaultSkipListWriter::~DefaultSkipListWriter(){ + _CLDELETE_ARRAY(lastSkipDoc); + _CLDELETE_ARRAY(lastSkipPayloadLength); + _CLDELETE_ARRAY(lastSkipFreqPointer); + _CLDELETE_ARRAY(lastSkipProxPointer); +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_SkipListWriter.h clucene-core-2.3.3.4/src/core/CLucene/index/_SkipListWriter.h --- clucene-core-0.9.21b/src/core/CLucene/index/_SkipListWriter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_SkipListWriter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,130 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SkipListWriter_ +#define _lucene_index_SkipListWriter_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** + * This abstract class writes skip lists with multiple levels. + * + * Example for skipInterval = 3: + * c (skip level 2) + * c c c (skip level 1) + * x x x x x x x x x x (skip level 0) + * d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) + * 3 6 9 12 15 18 21 24 27 30 (df) + * + * d - document + * x - skip data + * c - skip data with child pointer + * + * Skip level i contains every skipInterval-th entry from skip level i-1. + * Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). + * + * Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. + * This guarantess a logarithmic amount of skips to find the target document. + * + * While this class takes care of writing the different skip levels, + * subclasses must define the actual format of the skip data. + * + */ +class MultiLevelSkipListWriter { +private: + // the skip interval in the list with level = 0 + int32_t skipInterval; + + // for every skip level a different buffer is used + CL_NS(util)::ArrayBase* skipBuffer; + + + /** + * Writes the current skip data to the buffers. The current document frequency determines + * the max level is skip data is to be written to. + * + * @param df the current document frequency + * @throws IOException + */ + void bufferSkip(int32_t df); + + /** + * Writes the buffered skip lists to the given output. + * + * @param output the IndexOutput the skip lists shall be written to + * @return the pointer the skip list starts + */ + int64_t writeSkip(CL_NS(store)::IndexOutput* output); + +protected: + // number of levels in this skip list + int32_t numberOfSkipLevels; + + MultiLevelSkipListWriter(int32_t skipInterval, int32_t maxSkipLevels, int32_t df); + virtual ~MultiLevelSkipListWriter(); + void init(); + + void resetSkip(); + + /** + * Subclasses must implement the actual skip data encoding in this method. + * + * @param level the level skip data shall be writting for + * @param skipBuffer the skip buffer to write to + */ + virtual void writeSkipData(int32_t level, CL_NS(store)::IndexOutput* skipBuffer) = 0; + + friend class SegmentMerger; + friend class DocumentsWriter; +}; + +/** + * Implements the skip list writer for the default posting list format + * that stores positions and payloads. + * + */ +class DefaultSkipListWriter: public MultiLevelSkipListWriter { +private: + int32_t* lastSkipDoc; + int32_t* lastSkipPayloadLength; + int64_t* lastSkipFreqPointer; + int64_t* lastSkipProxPointer; + + CL_NS(store)::IndexOutput* freqOutput; + CL_NS(store)::IndexOutput* proxOutput; + + int32_t curDoc; + bool curStorePayloads; + int32_t curPayloadLength; + int64_t curFreqPointer; + int64_t curProxPointer; + + /** + * Sets the values for the current skip data. + */ + void setSkipData(int32_t doc, bool storePayloads, int32_t payloadLength); + +protected: + void resetSkip(); + + void writeSkipData(int32_t level, CL_NS(store)::IndexOutput* skipBuffer); +public: + + DefaultSkipListWriter(int32_t skipInterval, int32_t numberOfSkipLevels, int32_t docCount, + CL_NS(store)::IndexOutput* freqOutput, CL_NS(store)::IndexOutput* proxOutput); + ~DefaultSkipListWriter(); + + friend class SegmentMerger; + friend class DocumentsWriter; +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/Term.cpp clucene-core-2.3.3.4/src/core/CLucene/index/Term.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/Term.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/Term.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,260 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Term.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +Term::Term(){ + //Intern fld and assign it to field + _field = LUCENE_BLANK_STRING; + internF = false; + cachedHashCode = 0; + textLen = 0; + + //Duplicate txt and assign it to text + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + textLen = 0; +} + +Term::Term(const TCHAR* fld, const TCHAR* txt, bool internField){ +//Func - Constructor. +// Constructs a Term with the given field and text. Field and text are not copied +// Field and text are deleted in destructor only if intern is false. +//Pre - fld != NULL and contains the name of the field +// txt != NULL and contains the value of the field +// internF is true or false and indicates if term Field is interned or not +// internT is true or false and indicates if term Text is interned or not +// canDelete defaults to true but can be false and indicates to the IGarbageCollector that the Term can be deleted when finalized +//Post - An instance of Term has been created.Field and txt have not been copied but assigned + + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fld,txt,internField); +} + + +Term::Term(const Term* fieldTerm, const TCHAR* txt){ + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fieldTerm,txt); +} + +Term::Term(const TCHAR* fld, const TCHAR* txt){ + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fld,txt); +} + +Term::~Term(){ +//Func - Destructor. +//Pre - true +//Post - The instance has been destroyed. field and text have been deleted if pre(intrn) is false + + //Unintern field + if ( internF ) + CLStringIntern::unintern(_field); + _field = NULL; + +#ifndef LUCENE_TERM_TEXT_LENGTH + //Deletetext if it is the owner + _CLDELETE_CARRAY( _text ); +#endif +} + +const TCHAR* Term::field() const { +//Func - Returns the field of this term, an interned string. The field indicates +// the part of a document which this term came from. +//Pre - true +//Post - field has been returned + + return _field; +} + +const TCHAR* Term::text() const { +//Func - Returns the text of this term. In the case of words, this is simply the +// text of the word. In the case of dates and other types, this is an +// encoding of the object as a string. +//Pre - true +//Post - text has been returned + + return _text; +} + + +void Term::set(const Term* term, const TCHAR* txt){ + set(term->field(),txt,false); +} + +void Term::set(const TCHAR* fld, const TCHAR* txt,const bool internField){ +//Func - Resets the field and text of a Term. +//Pre - fld != NULL and contains the name of the field +// txt != NULL and contains the value of the field +// internF is true or false +// internT is true or false +//Post - field and text of Term have been reset + + CND_PRECONDITION(fld != NULL, "fld contains NULL"); + CND_PRECONDITION(txt != NULL, "txt contains NULL"); + + //save field for unintern later + const TCHAR* oldField = _field; + //bool oldInternF = internF; //Not used + cachedHashCode = 0; + + textLen = _tcslen(txt); + + //Delete text if it is the owner +#ifdef LUCENE_TERM_TEXT_LENGTH + if ( textLen > LUCENE_TERM_TEXT_LENGTH ) + textLen = LUCENE_TERM_TEXT_LENGTH; + _tcsncpy(_text,txt,textLen+1); + _text[textLen]=0; +#else + + //if the term text buffer is bigger than what we have + if ( _text && textLen > textLenBuf){ + _CLDELETE_ARRAY( _text ); + textLenBuf = 0; + } + + if ( _text==NULL ){ + //duplicate the text + _text = stringDuplicate(txt); + textLenBuf = textLen; + }else{ + //re-use the buffer + _tcscpy(_text,txt); + } + +#endif + + //Set Term Field + if ( internField ) + _field = CLStringIntern::intern(fld); + else + _field = fld; + + //unintern old field after interning new one, + if ( internF ) + CLStringIntern::unintern(oldField); + internF = internField; + + CND_PRECONDITION(_tcscmp(fld, _field)==0,"field not equal"); +} + +/** Compares two terms, returning true iff they have the same + field and text. */ +bool Term::equals(const Term* other) const{ + if (other == this) + return true; + if (other == NULL) + return false; + + if ( cachedHashCode != 0 && other->cachedHashCode != 0 && other->cachedHashCode != cachedHashCode ) + return false; + + if ( _field==other->_field ){ + //this can be quicker than using compareTo, because checks + //field length first + if ( textLen == other->textLen ){ + return (_tcscmp(_text,other->_text)==0); + }else + return false; + }else + return false; +} + +size_t Term::hashCode(){ + if ( cachedHashCode == 0 ) + cachedHashCode = Misc::thashCode(_field) + Misc::thashCode(_text,textLen); + return cachedHashCode; +} + +size_t Term::textLength() const { return textLen; } + +int32_t Term::compareTo(const Term* other) const { +//Func - Compares two terms, to see if this term belongs before,is equal to or after +// after the argument term. +//Pre - other is a reference to another term +//Post - A negative integer is returned if this term belongs before the argument, +// zero is returned if this term is equal to the argument, and a positive integer +// if this term belongs after the argument. + + //Check ret to see if text needs to be compared + if ( _field == other->_field ){ // fields are interned + //Compare text with text of other and return the result + return _tcscmp(_text,other->_text); + }else{ + int32_t ret = _tcscmp(_field,other->_field); + if ( ret == 0 ){ + return _tcscmp(_text,other->_text); + }else{ + return ret; + } + } +} + +int32_t Term::hashedCompareTo(Term* other) { + size_t hc1 = this->hashCode(); + size_t hc2 = other->hashCode(); + + if ( hc1 == hc2 ) + return compareTo(other); + else if ( hc1 > hc2 ) + return -1; + else + return 1; +} + +TCHAR* Term::toString() const{ +//Func - Forms the contents of Field and term in some kind of tuple notation +// +//Pre - true +//Post - a string formatted as is returned if pre(field) is NULL and +// text is NULL the returned string will be formatted as <:> + + // Note: Should this representation ever change, make sure to update Query and Filter classes + // that may be using this format without calling toString (to save on memory allocations) + // For example: PrefixFilter::toString() + + return CL_NS(util)::Misc::join( _field, _T(":"), _text); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_Term.h clucene-core-2.3.3.4/src/core/CLucene/index/_Term.h --- clucene-core-0.9.21b/src/core/CLucene/index/_Term.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_Term.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,36 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_internal_Term_ +#define _lucene_index_internal_Term_ + +#include "Term.h" +#include + +CL_NS_DEF(index) + + +class Term_Equals:public CL_NS_STD(binary_function) +{ +public: + bool operator()( const Term* val1, const Term* val2 ) const{ + return val1->equals(val2); + } +}; + +class Term_Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Term* t1, Term* t2 ) const{ + return ( t1->compareTo(t2) < 0 ); + } + size_t operator()( Term* t ) const{ + return t->hashCode(); + } +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/Term.h clucene-core-2.3.3.4/src/core/CLucene/index/Term.h --- clucene-core-0.9.21b/src/core/CLucene/index/Term.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/Term.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,137 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_Term_ +#define _lucene_index_Term_ + +CL_NS_DEF(index) + +/** +A Term represents a word from text. This is the unit of search. It is +composed of two elements, the text of the word, as a string, and the name of +the field that the text occured in, an interned string. + +Note that terms may represent more than words from text fields, but also +things like dates, email addresses, urls, etc. + +IMPORTANT NOTE: +Term inherits from the template class LUCENE_REFBASE which tries to do +some garbage collection by counting the references an instance has. As a result +of this construction you MUST use _CLDECDELETE(obj) when you want to delete an +of Term! + +ABOUT intrn + +intrn indicates if field and text are interned or not. Interning of Strings is the process of +converting duplicated strings to shared ones. + +*/ +class CLUCENE_EXPORT Term:LUCENE_REFBASE { +private: + size_t cachedHashCode; + const TCHAR* _field; + //CLStringIntern::iterator fielditr; +#ifdef LUCENE_TERM_TEXT_LENGTH + TCHAR _text[LUCENE_TERM_TEXT_LENGTH+1]; +#else + TCHAR* _text; + size_t textLenBuf; //a cache of text len, this allows for a preliminary comparison of text lengths + //bool dupT; //Indicates if Term Text is duplicated (and therefore must be deleted). +#endif + size_t textLen; //a cache of text len, this allows for a preliminary comparison of text lengths + bool internF; //Indicates if Term Field is interned(and therefore must be uninternd). +public: + + //uses the specified fieldTerm's field. this saves on intern'ing time. + /** Constructs a Term with the given field and text. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + Term(const Term* fieldTerm, const TCHAR* txt); + + /** Constructs a blank term */ + Term(); + + /** Constructs a Term with the given field and text. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + Term(const TCHAR* fld, const TCHAR* txt, bool internField); + + /** + * Constructor. Constructs a Term with the given field and text. Field and text are not copied + * Field and text are deleted in destructor only if intern is false. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + Term(const TCHAR* fld, const TCHAR* txt); + + ///Destructor. + ~Term(); + + ///Returns the field of this term, an interned string. The field indicates + ///the part of a document which this term came from. + const TCHAR* field() const; /// + TCHAR* toString() const; + + size_t hashCode(); +}; + +class Term_UnorderedCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Term* t1, Term* t2 ) const{ + return ( t1->hashedCompareTo(t2) < 0 ); + } + size_t operator()( Term* t ) const{ + return t->hashCode(); + } +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/TermInfo.cpp clucene-core-2.3.3.4/src/core/CLucene/index/TermInfo.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/TermInfo.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/TermInfo.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_TermInfo.h" + + +CL_NS_DEF(index) + +TermInfo::TermInfo(){ +//Func - Constructor +//Pre - true +//Post - Instance has been created + + docFreq = 0; + freqPointer = 0; + proxPointer = 0; + skipOffset = 0; +} + +TermInfo::~TermInfo(){ +//Func - Destructor. +//Pre - true +//Post - Instance has been destroyed +} + +TermInfo::TermInfo(const int32_t df, const int64_t fp, const int64_t pp){ +//Func - Constructor. +//Pre - df >= 0, fp >= 0 pp >= 0 +//Post - An instance has been created with FreqPointer = fp, proxPointer=pp and docFreq= df + + CND_PRECONDITION(df >= 0, "df contains negative number"); + CND_PRECONDITION(fp >= 0, "fp contains negative number"); + CND_PRECONDITION(pp >= 0, "pp contains negative number"); + + freqPointer = fp; + proxPointer = pp; + docFreq = df; + skipOffset = 0; +} + +TermInfo::TermInfo(const TermInfo* ti) { +//Func - Constructor. +// Initialises this instance by copying the values of another TermInfo ti +//Pre - ti is a reference to another TermInfo +// ti->docFreq >= 0 +// ti->freqPointer >= 0 +// ti->proxPointer >= 0 +//Post - Values of ti have been copied to the values of this Instance. + + CND_PRECONDITION(ti->docFreq >= 0, "ti->docFreq contains negative number"); + CND_PRECONDITION(ti->freqPointer >= 0, "ti->freqPointer contains negative number"); + CND_PRECONDITION(ti->proxPointer >= 0, "ti->proxPointer contains negative number"); + + docFreq = ti->docFreq; + freqPointer = ti->freqPointer; + proxPointer = ti->proxPointer; + skipOffset = ti->skipOffset; +} + +void TermInfo::set(const int32_t df, const int64_t fp, const int64_t pp, int32_t so) { +//Func - Sets a new document frequency, a new freqPointer and a new proxPointer +//Pre - df >= 0, fp >= 0 pp >= 0 +//Post - The new document frequency, a new freqPointer and a new proxPointer +// have been set + + CND_PRECONDITION(df >= 0, "df contains negative number"); + CND_PRECONDITION(fp >= 0, "fp contains negative number"); + CND_PRECONDITION(pp >= 0, "pp contains negative number"); + + docFreq = df; + freqPointer = fp; + proxPointer = pp; + skipOffset = so; +} + +void TermInfo::set(const TermInfo* ti) { +//Func - Sets a new document frequency, a new freqPointer and a new proxPointer +// by copying these values from another instance of TermInfo +//Pre - ti is a reference to another TermInfo +// ti->docFreq >= 0 +// ti->freqPointer >= 0 +// ti->proxPointer >= 0 +//Post - Values of ti have been copied to the values of this Instance. + + CND_PRECONDITION(ti->docFreq >= 0, "ti->docFreq contains negative number"); + CND_PRECONDITION(ti->freqPointer >= 0, "ti->freqPointer contains negative number"); + CND_PRECONDITION(ti->proxPointer >= 0, "ti->proxPointer contains negative number"); + + docFreq = ti->docFreq; + freqPointer = ti->freqPointer; + proxPointer = ti->proxPointer; + skipOffset = ti->skipOffset; +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_TermInfo.h clucene-core-2.3.3.4/src/core/CLucene/index/_TermInfo.h --- clucene-core-0.9.21b/src/core/CLucene/index/_TermInfo.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_TermInfo.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_TermInfo +#define _lucene_index_TermInfo + + +CL_NS_DEF(index) + +// A TermInfo is the record of information stored for a term. +class TermInfo: LUCENE_BASE{ +public: + // The number of documents which contain the term. + int32_t docFreq; + + //A pointer into the TermFreqs file (.frq) + //The .frq file contains the lists of documents which contain each term, + //along with the frequency of the term in that document. + int64_t freqPointer; + + //A pointer into the TermPosition file (.prx). + //The .prx file contains the lists of positions that each term + //occurs at within documents. + int64_t proxPointer; + + int32_t skipOffset; + + //Constructor + TermInfo(); + + //Constructor + TermInfo(const int32_t df, const int64_t fp, const int64_t pp); + + //Constructor + //Initialises this instance by copying the values of another TermInfo ti + TermInfo(const TermInfo* ti); + + //Destructor + ~TermInfo(); + + //Sets a new document frequency, a new freqPointer and a new proxPointer + void set(const int32_t docFreq, const int64_t freqPointer, const int64_t proxPointer, int32_t skipOffset); + + //Sets a new document frequency, a new freqPointer and a new proxPointer + //by copying these values from another instance of TermInfo + void set(const TermInfo* ti); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/TermInfosReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/TermInfosReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/TermInfosReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/TermInfosReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,456 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" + +#include "_TermInfo.h" +#include "_FieldInfos.h" +#include "_SegmentTermEnum.h" +#include "_FieldInfos.h" +#include "_TermInfo.h" +#include "_TermInfosWriter.h" +#include "_TermInfosReader.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + + + TermInfosReader::TermInfosReader(Directory* dir, const char* seg, FieldInfos* fis, const int32_t readBufferSize): + directory (dir),fieldInfos (fis), indexTerms(NULL), indexInfos(NULL), indexPointers(NULL), indexDivisor(1) + { + //Func - Constructor. + // Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii) + //Pre - dir is a reference to a valid Directory + // Fis contains a valid reference to an FieldInfos instance + // seg != NULL and contains the name of the segment + //Post - An instance has been created and the index named seg has been read. (Remember + // a segment is nothing more then an independently readable index) + + CND_PRECONDITION(seg != NULL, "seg is NULL"); + + //Initialize the name of the segment + segment = seg; + + //Create a filname fo a Term Info File + string tisFile = Misc::segmentname(segment,".tis"); + string tiiFile = Misc::segmentname(segment,".tii"); + bool success = false; + origEnum = indexEnum = NULL; + _size = indexTermsLength = totalIndexInterval = 0; + + try { + //Create an SegmentTermEnum for storing all the terms read of the segment + origEnum = _CLNEW SegmentTermEnum( directory->openInput( tisFile.c_str(), readBufferSize ), fieldInfos, false); + _size = origEnum->size; + totalIndexInterval = origEnum->indexInterval; + indexEnum = _CLNEW SegmentTermEnum( directory->openInput( tiiFile.c_str(), readBufferSize ), fieldInfos, true); + + //Check if enumerator points to a valid instance + CND_CONDITION(origEnum != NULL, "No memory could be allocated for orig enumerator"); + CND_CONDITION(indexEnum != NULL, "No memory could be allocated for index enumerator"); + + success = true; + } _CLFINALLY({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); + + } + + TermInfosReader::~TermInfosReader(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + //Close the TermInfosReader to be absolutly sure that enumerator has been closed + //and the arrays indexTerms, indexPointers and indexInfos and their elements + //have been destroyed + close(); + } + int32_t TermInfosReader::getSkipInterval() const { + return origEnum->skipInterval; + } + + int32_t TermInfosReader::getMaxSkipLevels() const { + return origEnum->maxSkipLevels; + } + + void TermInfosReader::setIndexDivisor(const int32_t _indexDivisor) { + if (indexDivisor < 1) + _CLTHROWA(CL_ERR_IllegalArgument, "indexDivisor must be > 0"); + + if (indexTerms != NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "index terms are already loaded"); + + this->indexDivisor = _indexDivisor; + totalIndexInterval = origEnum->indexInterval * _indexDivisor; + } + + int32_t TermInfosReader::getIndexDivisor() const { return indexDivisor; } + void TermInfosReader::close() { + + //Check if indexTerms and indexInfos exist + if (indexTerms && indexInfos){ + //Iterate through arrays indexTerms and indexPointer to + //destroy their elements +#ifdef _DEBUG + for ( int32_t i=0; iclose(); + + //Get a pointer to IndexInput used by the enumeration but + //instantiated in the constructor by directory.open( tisFile ) + IndexInput *is = origEnum->input; + + //Delete the enumuration enumerator + _CLDELETE(origEnum); + + //Delete the IndexInput + _CLDELETE(is); + } + + if (indexEnum != NULL){ + indexEnum->close(); + + //Get a pointer to IndexInput used by the enumeration but + //instantiated in the constructor by directory.open( tiiFile ) + IndexInput *is = indexEnum->input; + + //Delete the enumuration enumerator + _CLDELETE(indexEnum); + + //Delete the IndexInput + _CLDELETE(is); + } + enumerators.setNull(); + } + + int64_t TermInfosReader::size() const{ + //Func - Return the size of the enumeration of TermInfos + //Pre - true + //Post - size has been returened + + return _size; + } + + + Term* TermInfosReader::get(const int32_t position) { + //Func - Returns the nth term in the set + //Pre - position > = 0 + //Post - The n-th term in the set has been returned + + //Check if the size is 0 because then there are no terms + if (_size == 0) + return NULL; + + SegmentTermEnum* enumerator = getEnum(); + + if ( + enumerator != NULL //an enumeration exists + && enumerator->term(false) != NULL // term is at or past current + && position >= enumerator->position + && position < (enumerator->position + totalIndexInterval) + ) + { + return scanEnum(position); // can avoid seek + } + + //random-access: must seek + seekEnum(position / totalIndexInterval); + + //Get the Term at position + return scanEnum(position); + } + + SegmentTermEnum* TermInfosReader::getEnum(){ + SegmentTermEnum* termEnum = enumerators.get(); + if (termEnum == NULL){ + termEnum = terms(); + enumerators.set(termEnum); + } + return termEnum; + } + + TermInfo* TermInfosReader::get(const Term* term){ + //Func - Returns a TermInfo for a term + //Pre - term holds a valid reference to term + //Post - if term can be found its TermInfo has been returned otherwise NULL + + //If the size of the enumeration is 0 then no Terms have been read + if (_size == 0) + return NULL; + + ensureIndexIsRead(); + + // optimize sequential access: first try scanning cached enum w/o seeking + SegmentTermEnum* enumerator = getEnum(); + + // optimize sequential access: first try scanning cached enumerator w/o seeking + if ( + //the current term of the enumeration enumerator is not at the end AND + enumerator->term(false) != NULL && + ( + //there exists a previous current called prev and term is positioned after this prev OR + ( enumerator->prev != NULL && term->compareTo(enumerator->prev) > 0) || + //term is positioned at the same position as the current of enumerator or at a higher position + term->compareTo(enumerator->term(false)) >= 0 ) + ) + { + + //Calculate the offset for the position + int32_t _enumOffset = (int32_t)(enumerator->position/totalIndexInterval)+1; + + // but before end of block + if ( + //the length of indexTerms (the number of terms in enumerator) equals + //_enum_offset OR + indexTermsLength == _enumOffset || + //term is positioned in front of term found at _enumOffset in indexTerms + term->compareTo(&indexTerms[_enumOffset]) < 0){ + + //no need to seek, retrieve the TermInfo for term + return scanEnum(term); + } + } + + //Reposition current term in the enumeration + seekEnum(getIndexOffset(term)); + //Return the TermInfo for term + return scanEnum(term); + } + + + int64_t TermInfosReader::getPosition(const Term* term) { + //Func - Returns the position of a Term in the set + //Pre - term holds a valid reference to a Term + // enumerator != NULL + //Post - If term was found then its position is returned otherwise -1 + + //if the enumeration is empty then return -1 + if (_size == 0) + return -1; + + ensureIndexIsRead(); + + //Retrieve the indexOffset for term + int32_t indexOffset = getIndexOffset(term); + seekEnum(indexOffset); + + SegmentTermEnum* enumerator = getEnum(); + + while(term->compareTo(enumerator->term(false)) > 0 && enumerator->next()) {} + + if ( term->equals(enumerator->term(false)) ){ + return enumerator->position; + }else + return -1; + } + + SegmentTermEnum* TermInfosReader::terms(const Term* term) { + //Func - Returns an enumeration of terms starting at or after the named term. + // If term is null then enumerator is set to the beginning + //Pre - term holds a valid reference to a Term + // enumerator != NULL + //Post - An enumeration of terms starting at or after the named term has been returned + + SegmentTermEnum* enumerator = NULL; + if ( term != NULL ){ + //Seek enumerator to term; delete the new TermInfo that's returned. + TermInfo* ti = get(term); + _CLLDELETE(ti); + enumerator = getEnum(); + }else + enumerator = origEnum; + + //Clone the entire enumeration + SegmentTermEnum* cln = enumerator->clone(); + + //Check if cln points to a valid instance + CND_CONDITION(cln != NULL,"cln is NULL"); + + return cln; + } + + + void TermInfosReader::ensureIndexIsRead() { + //Func - Reads the term info index file or .tti file. + // This file contains every IndexInterval-th entry from the .tis file, + // along with its location in the "tis" file. This is designed to be read entirely + // into memory and used to provide random access to the "tis" file. + //Pre - indexTerms = NULL + // indexInfos = NULL + // indexPointers = NULL + //Post - The term info index file has been read into memory + + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if ( indexTerms != NULL ) + return; + + try { + indexTermsLength = (size_t)indexEnum->size; + + //Instantiate an block of Term's,so that each one doesn't have to be new'd + indexTerms = new Term[indexTermsLength]; + CND_CONDITION(indexTerms != NULL,"No memory could be allocated for indexTerms");//Check if is indexTerms is a valid array + + //Instantiate an big block of TermInfo's, so that each one doesn't have to be new'd + indexInfos = _CL_NEWARRAY(TermInfo,indexTermsLength); + CND_CONDITION(indexInfos != NULL,"No memory could be allocated for indexInfos"); //Check if is indexInfos is a valid array + + //Instantiate an array indexPointers that contains pointers to the term info index file + indexPointers = _CL_NEWARRAY(int64_t,indexTermsLength); + CND_CONDITION(indexPointers != NULL,"No memory could be allocated for indexPointers");//Check if is indexPointers is a valid array + + //Iterate through the terms of indexEnum + for (int32_t i = 0; indexEnum->next(); ++i){ + indexTerms[i].set(indexEnum->term(false),indexEnum->term(false)->text()); + indexEnum->getTermInfo(&indexInfos[i]); + indexPointers[i] = indexEnum->indexPointer; + + for (int32_t j = 1; j < indexDivisor; j++) + if (!indexEnum->next()) + break; + } + }_CLFINALLY( + indexEnum->close(); + //Close and delete the IndexInput is. The close is done by the destructor. + _CLDELETE( indexEnum->input ); + _CLDELETE( indexEnum ); + ); + } + + + int32_t TermInfosReader::getIndexOffset(const Term* term){ + //Func - Returns the offset of the greatest index entry which is less than or equal to term. + //Pre - term holds a reference to a valid term + // indexTerms != NULL + //Post - The new offset has been returned + + //Check if is indexTerms is a valid array + CND_PRECONDITION(indexTerms != NULL,"indexTerms is NULL"); + + int32_t lo = 0; + int32_t hi = indexTermsLength - 1; + int32_t mid; + int32_t delta; + + while (hi >= lo) { + //Start in the middle betwee hi and lo + mid = (lo + hi) >> 1; + + //Check if is indexTerms[mid] is a valid instance of Term + CND_PRECONDITION(&indexTerms[mid] != NULL,"indexTerms[mid] is NULL"); + CND_PRECONDITION(mid < indexTermsLength,"mid >= indexTermsLength"); + + //Determine if term is before mid or after mid + delta = term->compareTo(&indexTerms[mid]); + if (delta < 0){ + //Calculate the new hi + hi = mid - 1; + }else if (delta > 0){ + //Calculate the new lo + lo = mid + 1; + }else{ + //term has been found so return its position + return mid; + } + } + // the new starting offset + return hi; + } + + void TermInfosReader::seekEnum(const int32_t indexOffset) { + //Func - Reposition the current Term and TermInfo to indexOffset + //Pre - indexOffset >= 0 + // indexTerms != NULL + // indexInfos != NULL + // indexPointers != NULL + //Post - The current Term and Terminfo have been repositioned to indexOffset + + CND_PRECONDITION(indexOffset >= 0, "indexOffset contains a negative number"); + CND_PRECONDITION(indexTerms != NULL, "indexTerms is NULL"); + CND_PRECONDITION(indexInfos != NULL, "indexInfos is NULL"); + CND_PRECONDITION(indexPointers != NULL, "indexPointers is NULL"); + + SegmentTermEnum* enumerator = getEnum(); + enumerator->seek( + indexPointers[indexOffset], + (indexOffset * totalIndexInterval) - 1, + &indexTerms[indexOffset], + &indexInfos[indexOffset] + ); + } + + + TermInfo* TermInfosReader::scanEnum(const Term* term) { + //Func - Scans the Enumeration of terms for term and returns the corresponding TermInfo instance if found. + // The search is started from the current term. + //Pre - term contains a valid reference to a Term + // enumerator != NULL + //Post - if term has been found the corresponding TermInfo has been returned otherwise NULL + // has been returned + + SegmentTermEnum* enumerator = getEnum(); + enumerator->scanTo(term); + + //Check if the at the position the Term term can be found + if (enumerator->term(false) != NULL && term->equals(enumerator->term(false)) ){ + //Return the TermInfo instance about term + return enumerator->getTermInfo(); + }else{ + //term was not found so no TermInfo can be returned + return NULL; + } + } + + Term* TermInfosReader::scanEnum(const int32_t position) { + //Func - Scans the enumeration to the requested position and returns the + // Term located at that position + //Pre - position > = 0 + // enumerator != NULL + //Post - The Term at the requested position has been returned + + SegmentTermEnum* enumerator = getEnum(); + + //As long the position of the enumeration enumerator is smaller than the requested one + while(enumerator->position < position){ + //Move the current of enumerator to the next + if (!enumerator->next()){ + //If there is no next it means that the requested position was to big + return NULL; + } + } + + //Return the Term a the requested position + return enumerator->term(); + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_TermInfosReader.h clucene-core-2.3.3.4/src/core/CLucene/index/_TermInfosReader.h --- clucene-core-0.9.21b/src/core/CLucene/index/_TermInfosReader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_TermInfosReader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,130 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_TermInfosReader_ +#define _lucene_index_TermInfosReader_ + + +//#include "Terms.h" +#include "_SegmentTermEnum.h" +CL_CLASS_DEF(store,Directory) +//CL_CLASS_DEF(store,IndexInput) +#include "CLucene/util/_ThreadLocal.h" +//#include "FieldInfos.h" +//#include "TermInfo.h" +//#include "TermInfosWriter.h" + +CL_NS_DEF(index) +/** This stores a monotonically increasing set of pairs in a +* Directory. Pairs are accessed either by Term or by ordinal position the +* set. +* +* PORT STATUS: 365707 (jlucene 1.9) -- started port to JLucene 2.3.2 +*/ + class TermInfosReader :LUCENE_BASE{ + private: + CL_NS(store)::Directory* directory; + const char* segment; + FieldInfos* fieldInfos; + + CL_NS(util)::ThreadLocal > enumerators; + + SegmentTermEnum* getEnum(); + SegmentTermEnum* origEnum; + SegmentTermEnum* indexEnum; + int64_t _size; + + Term* indexTerms; //note: this is a list of objects, not arrays! + int32_t indexTermsLength; + TermInfo* indexInfos; + int64_t* indexPointers; + + int32_t indexDivisor; + int32_t totalIndexInterval; + + DEFINE_MUTEX(THIS_LOCK) + + public: + /** + * Constructor. + * Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii) + */ + TermInfosReader(CL_NS(store)::Directory* dir, const char* segment, FieldInfos* fis, + const int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + ~TermInfosReader(); + + int32_t getSkipInterval() const; + int32_t getMaxSkipLevels() const; + + /** + *

Sets the indexDivisor, which subsamples the number + * of indexed terms loaded into memory. This has a + * similar effect as {@link + * IndexWriter#setTermIndexInterval} except that setting + * must be done at indexing time while this setting can be + * set per reader. When set to N, then one in every + * N*termIndexInterval terms in the index is loaded into + * memory. By setting this to a value > 1 you can reduce + * memory usage, at the expense of higher latency when + * loading a TermInfo. The default value is 1.

+ * + * NOTE: you must call this before the term + * index is loaded. If the index is already loaded, + * an IllegalStateException is thrown. + * + * @throws IllegalStateException if the term index has + * already been loaded into memory. + */ + void setIndexDivisor(const int32_t _indexDivisor); + + /** Returns the indexDivisor. + * @see #setIndexDivisor + */ + int32_t getIndexDivisor() const; + + /** Close the enumeration of TermInfos */ + void close(); + + /** Returns the number of term/value pairs in the set. */ + int64_t size() const; + + /** + * Returns an enumeration of terms starting at or after the named term. + * If no term is specified, an enumeration of all the Terms + * and TermInfos in the set is returned. + */ + SegmentTermEnum* terms(const Term* term=NULL); + + /** Returns the TermInfo for a Term in the set, or null. */ + TermInfo* get(const Term* term); + private: + /** Reads the term info index file or .tti file. */ + void ensureIndexIsRead(); + + /** Returns the offset of the greatest index entry which is less than or equal to term.*/ + int32_t getIndexOffset(const Term* term); + + /** Reposition the current Term and TermInfo to indexOffset */ + void seekEnum(const int32_t indexOffset); + + /** Scans the Enumeration of terms for term and returns the corresponding TermInfo instance if found. + * The search is started from the current term. + */ + TermInfo* scanEnum(const Term* term); + + /** Scans the enumeration to the requested position and returns the Term located at that position */ + Term* scanEnum(const int32_t position); + + /** Returns the position of a Term in the set or -1. */ + int64_t getPosition(const Term* term); + + /** Returns the nth term in the set. synchronized */ + Term* get(const int32_t position); + + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/TermInfosWriter.cpp clucene-core-2.3.3.4/src/core/CLucene/index/TermInfosWriter.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/TermInfosWriter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/TermInfosWriter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,245 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/util/Misc.h" +#include "Term.h" +#include "_TermInfo.h" +#include "IndexWriter.h" +#include "_FieldInfos.h" +#include "_TermInfosWriter.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + + TermInfosWriter::TermInfosWriter(Directory* directory, const char* segment, FieldInfos* fis, int32_t interval): + fieldInfos(fis){ + //Func - Constructor + //Pre - directory contains a valid reference to a Directory + // segment != NULL + // fis contains a valid reference to a reference FieldInfos + //Post - The instance has been created + + CND_PRECONDITION(segment != NULL, "segment is NULL"); + //Initialize instance + initialise(directory,segment,interval, false); + + other = _CLNEW TermInfosWriter(directory, segment,fieldInfos, interval, true); + + CND_CONDITION(other != NULL, "other is NULL"); + + other->other = this; + } + + TermInfosWriter::TermInfosWriter(Directory* directory, const char* segment, FieldInfos* fis, int32_t interval, bool isIndex): + fieldInfos(fis){ + //Func - Constructor + //Pre - directory contains a valid reference to a Directory + // segment != NULL + // fis contains a valid reference to a reference FieldInfos + // isIndex is true or false + //Post - The instance has been created + + CND_PRECONDITION(segment != NULL, "segment is NULL"); + initialise(directory,segment,interval,isIndex); + } + + void TermInfosWriter::initialise(Directory* directory, const char* segment, int32_t interval, bool IsIndex){ + //Func - Helps constructors to initialize Instance + //Pre - directory contains a valid reference to a Directory + // segment != NULL + // fis contains a valid reference to a reference FieldInfos + //Post - The instance has been initialized + + + maxSkipLevels = 10; + lastTermTextLength = 0; + lastFieldNumber = -1; + + lastTi = _CLNEW TermInfo(); + + CND_CONDITION(lastTi != NULL, "Could not allocate memory for lastTi"); + + lastIndexPointer = 0; + size = 0; + isIndex = IsIndex; + indexInterval = interval; + skipInterval = TermInfosWriter::DEFAULT_TERMDOCS_SKIP_INTERVAL; + + output = directory->createOutput( Misc::segmentname(segment, (isIndex ? ".tii" : ".tis")).c_str() ); + + output->writeInt(FORMAT); // write format + output->writeLong(0); // leave space for size + output->writeInt(indexInterval);// write indexInterval + output->writeInt(skipInterval); // write skipInterval + + output->writeInt(maxSkipLevels); // write maxSkipLevels + + //Set other to NULL by Default + other = NULL; + } + + TermInfosWriter::~TermInfosWriter(){ + //Func - Destructor + //Pre - true + //Post - de instance has been destroyed + + close(); + } + + void TermInfosWriter::add(Term* term, TermInfo* ti){ + const size_t length = term->textLength(); + if ( termTextBuffer.values == NULL || termTextBuffer.length < length ){ + termTextBuffer.resize( (int32_t)(length*1.25) ); + } + _tcsncpy(termTextBuffer.values, term->text(), length); + + add(fieldInfos->fieldNumber(term->field()), termTextBuffer.values, length, ti); + } + + // Currently used only by assert statement + int32_t TermInfosWriter::compareToLastTerm(int32_t fieldNumber, const TCHAR* termText, int32_t length) { + int32_t pos = 0; + + if (lastFieldNumber != fieldNumber) { + const int32_t cmp = _tcscmp(fieldInfos->fieldName(lastFieldNumber), fieldInfos->fieldName(fieldNumber)); + // If there is a field named "" (empty string) then we + // will get 0 on this comparison, yet, it's "OK". But + // it's not OK if two different field numbers map to + // the same name. + if (cmp != 0 || lastFieldNumber != -1) + return cmp; + } + + //TODO: is this just a _tcsncmp??? + while(pos < length && pos < lastTermTextLength) { + const TCHAR c1 = lastTermText[pos]; + const TCHAR c2 = termText[pos]; + if (c1 < c2) + return -1; + else if (c1 > c2) + return 1; + pos++; + } + + if (pos < lastTermTextLength) + // Last term was longer + return 1; + else if (pos < length) + // Last term was shorter + return -1; + else + return 0; + } + + void TermInfosWriter::add(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength, const TermInfo* ti) { + //Func - Writes a Term and TermInfo to the outputstream + //Pre - Term must be lexicographically greater than all previous Terms added. + // Pointers of TermInfo ti (freqPointer and proxPointer) must be positive and greater than all previous. + +// TODO: This is a hack. If _ASCII is defined, Misc::toString(const TCHAR*, int) will cause linking errors, +// at least on VS. Needs a prettier fix no doubt... ISH 2009-11-08 +#ifdef _ASCII + assert(compareToLastTerm(fieldNumber, termText, termTextLength) < 0 || + (isIndex && termTextLength == 0 && lastTermTextLength == 0)); +#else + CND_PRECONDITION(compareToLastTerm(fieldNumber, termText, termTextLength) < 0 || + (isIndex && termTextLength == 0 && lastTermTextLength == 0), + (string("Terms are out of order: field=") + Misc::toString(fieldInfos->fieldName(fieldNumber)) + + " (number " + Misc::toString(fieldNumber) + ")" + + " lastField=" + Misc::toString(fieldInfos->fieldName(lastFieldNumber)) + + " (number " + Misc::toString(lastFieldNumber) + ")" + + " text=" + Misc::toString(termText, termTextLength) + + " lastText=" + Misc::toString(lastTermText.values, lastTermTextLength) + ).c_str() ); +#endif + + CND_PRECONDITION(ti->freqPointer >= lastTi->freqPointer, ("freqPointer out of order (" + Misc::toString(ti->freqPointer) + " < " + Misc::toString(lastTi->freqPointer) + ")").c_str()); + CND_PRECONDITION(ti->proxPointer >= lastTi->proxPointer, ("proxPointer out of order (" + Misc::toString(ti->proxPointer) + " < " + Misc::toString(lastTi->proxPointer) + ")").c_str()); + + if (!isIndex && size % indexInterval == 0){ + //add an index term + other->add(lastFieldNumber, lastTermText.values, lastTermTextLength, lastTi); // add an index term + } + + //write term + writeTerm(fieldNumber, termText, termTextLength); + // write doc freq + output->writeVInt(ti->docFreq); + //write pointers + output->writeVLong(ti->freqPointer - lastTi->freqPointer); + output->writeVLong(ti->proxPointer - lastTi->proxPointer); + if (ti->docFreq >= skipInterval) { + output->writeVInt(ti->skipOffset); + } + + if (isIndex){ + output->writeVLong(other->output->getFilePointer() - lastIndexPointer); + lastIndexPointer = other->output->getFilePointer(); // write pointer + } + if (lastTermText.length < termTextLength || lastTermText.length == 0){ + lastTermText.resize( (int32_t)cl_max(10.0,termTextLength*1.25) ); + } + if ( termText != NULL ) + _tcsncpy(lastTermText.values,termText,termTextLength); + else + lastTermText.values[0] = 0; + + lastTermTextLength = termTextLength; + lastFieldNumber = fieldNumber; + + lastTi->set(ti); + size++; + } + + void TermInfosWriter::close() { + //Func - Closes the TermInfosWriter + //Pre - true + //Post - The TermInfosWriter has been closed + + if (output){ + //write size at start + output->seek(4); // write size after format + output->writeLong(size); + output->close(); + _CLDELETE(output); + + if (!isIndex){ + if(other){ + other->close(); + _CLDELETE( other ); + } + } + _CLDELETE(lastTi); + } + } + + void TermInfosWriter::writeTerm(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength){ + + // Compute prefix in common with last term: + int32_t start = 0; + const int32_t limit = termTextLength < lastTermTextLength ? termTextLength : lastTermTextLength; + while(start < limit) { + if (termText[start] != lastTermText.values[start]) + break; + start++; + } + + int32_t length = termTextLength - start; + + output->writeVInt(start); // write shared prefix length + output->writeVInt(length); // write delta length + output->writeChars(termText+start, length); // write delta chars + output->writeVInt(fieldNumber); // write field num + } + + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_TermInfosWriter.h clucene-core-2.3.3.4/src/core/CLucene/index/_TermInfosWriter.h --- clucene-core-0.9.21b/src/core/CLucene/index/_TermInfosWriter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_TermInfosWriter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_TermInfosWriter_ +#define _lucene_index_TermInfosWriter_ + +#include "CLucene/util/Array.h" + +CL_CLASS_DEF(store,Directory) +//#include "FieldInfos.h" +//#include "TermInfo.h" +//#include "Term.h" + +CL_NS_DEF(index) +class FieldInfos; +class TermInfo; + + // This stores a monotonically increasing set of pairs in a + // Directory. A TermInfos can be written once, in order. + class TermInfosWriter :LUCENE_BASE{ + private: + FieldInfos* fieldInfos; + CL_NS(store)::IndexOutput* output; + TermInfo* lastTi; + int64_t size; + + int64_t lastIndexPointer; + bool isIndex; + CL_NS(util)::ValueArray lastTermText; + int32_t lastTermTextLength; + int32_t lastFieldNumber; + + CL_NS(util)::ValueArray termTextBuffer; + + TermInfosWriter* other; + + //inititalize + TermInfosWriter(CL_NS(store)::Directory* directory, const char* segment, FieldInfos* fis, int32_t interval, bool isIndex); + + int32_t compareToLastTerm(int32_t fieldNumber, const TCHAR* termText, int32_t length); + public: + /** Expert: The maximum number of skip levels. Smaller values result in + * slightly smaller indexes, but slower skipping in big posting lists. + */ + int32_t maxSkipLevels; + + /** The file format version, a negative number. */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-3); + + //Expert: The fraction of {@link TermDocs} entries stored in skip tables, + //used to accellerate {@link TermDocs#skipTo(int)}. Larger values result in + //smaller indices, greater acceleration, but fewer accelerable cases, while + //smaller values result in bigger indices, less acceleration and more + //accelerable cases. More detailed experiments would be useful here. */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_TERMDOCS_SKIP_INTERVAL=16); + + + /** + * Expert: The fraction of terms in the "dictionary" which should be stored + * in RAM. Smaller values use more memory, but make searching slightly + * faster, while larger values use less memory and make searching slightly + * slower. Searching is typically not dominated by dictionary lookup, so + * tweaking this is rarely useful. + */ + int32_t indexInterval;// = 128 + + /** + * Expert: The fraction of {@link TermDocs} entries stored in skip tables, + * used to accellerate {@link TermDocs#SkipTo(int32_t)}. Larger values result in + * smaller indexes, greater acceleration, but fewer accelerable cases, while + * smaller values result in bigger indexes, less acceleration and more + * accelerable cases. More detailed experiments would be useful here. + */ + int32_t skipInterval;// = 16 + + TermInfosWriter(CL_NS(store)::Directory* directory, const char* segment, FieldInfos* fis, int32_t interval); + + ~TermInfosWriter(); + + + void add(Term* term, TermInfo* ti); + + /** Adds a new <, TermInfo> pair to the set. + Term must be lexicographically greater than all previous Terms added. + TermInfo pointers must be positive and greater than all previous.*/ + void add(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength, const TermInfo* ti); + + /** Called to complete TermInfos creation. */ + void close(); + + private: + /** Helps constructors to initialize instances */ + void initialise(CL_NS(store)::Directory* directory, const char* segment, int32_t interval, bool IsIndex); + void writeTerm(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength); + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/Terms.cpp clucene-core-2.3.3.4/src/core/CLucene/index/Terms.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/Terms.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/Terms.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,30 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Terms.h" +#include "Term.h" + +CL_NS_DEF(index) + +TermDocs::~TermDocs(){ +} + +TermEnum::~TermEnum(){ +} + +bool TermEnum::skipTo(Term* target){ + do { + if (!next()) + return false; + } while (target->compareTo(term(false)) > 0); + return true; +} + +TermPositions::~TermPositions(){ +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/Terms.h clucene-core-2.3.3.4/src/core/CLucene/index/Terms.h --- clucene-core-0.9.21b/src/core/CLucene/index/Terms.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/Terms.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,189 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_Terms_ +#define _lucene_index_Terms_ + +#include "CLucene/util/Equators.h" +CL_NS_DEF(index) + +//predefine +class Term; +class TermEnum; +class TermPositions; + +/** TermDocs provides an interface for enumerating <document, frequency> + pairs for a term.

The document portion names each document containing + the term. Documents are indicated by number. The frequency portion gives + the number of times the term occurred in each document.

The pairs are + ordered by document number. + + @see IndexReader#termDocs() + */ +class CLUCENE_EXPORT TermDocs { +public: + virtual ~TermDocs(); + + // Sets this to the data for a term. + // The enumeration is reset to the start of the data for this term. + virtual void seek(Term* term)=0; + + /** Sets this to the data for the current term in a {@link TermEnum}. + * This may be optimized in some implementations. + */ + virtual void seek(TermEnum* termEnum)=0; + + // Returns the current document number.

This is invalid until {@link + // #next()} is called for the first time. + virtual int32_t doc() const=0; + + // Returns the frequency of the term within the current document.

This + // is invalid until {@link #next()} is called for the first time. + virtual int32_t freq() const=0; + + // Moves to the next pair in the enumeration.

Returns true iff there is + // such a next pair in the enumeration. + virtual bool next() =0; + + // Attempts to read multiple entries from the enumeration, up to length of + // docs. Document numbers are stored in docs, and term + // frequencies are stored in freqs. The freqs array must be as + // int64_t as the docs array. + // + //

Returns the number of entries read. Zero is only returned when the + // stream has been exhausted. + virtual int32_t read(int32_t* docs, int32_t* freqs, int32_t length)=0; + + // Skips entries to the first beyond the current whose document number is + // greater than or equal to target.

Returns true iff there is such + // an entry.

Behaves as if written:

+	//   bool skipTo(int32_t target) {
+	//     do {
+	//       if (!next())
+	// 	     return false;
+	//     } while (target > doc());
+	//     return true;
+	//   }
+	// 
+ // Some implementations are considerably more efficient than that. + virtual bool skipTo(const int32_t target)=0; + + // Frees associated resources. + virtual void close() = 0; + + + /** Solve the diamond inheritence problem by providing a reinterpret function. + * No dynamic casting is required and no RTTI data is needed to do this + */ + virtual TermPositions* __asTermPositions()=0; +}; + + +/** Abstract class for enumerating terms. + +

Term enumerations are always ordered by Term.compareTo(). Each term in + the enumeration is greater than all that precede it. +*/ +class CLUCENE_EXPORT TermEnum: LUCENE_BASE, public CL_NS(util)::NamedObject { +public: + /** Increments the enumeration to the next element. True if one exists.*/ + virtual bool next()=0; + + /** + * Returns the current Term in the enumeration. + * @param pointer if true, then increment the reference count before returning + */ + virtual Term* term(bool pointer=true)=0; + + /** Returns the docFreq of the current Term in the enumeration.*/ + virtual int32_t docFreq() const=0; + + /** Closes the enumeration to further activity, freeing resources. */ + virtual void close() =0; + + virtual ~TermEnum(); + + // Term Vector support + /** Skips terms to the first beyond the current whose value is + * greater or equal to target.

Returns true iff there is such + * an entry.

Behaves as if written:

+	*   public boolean skipTo(Term target) {
+	*     do {
+	*       if (!next())
+	* 	     return false;
+	*     } while (target > term());
+	*     return true;
+	*   }
+	* 
+ * Some implementations are considerably more efficient than that. + */ + virtual bool skipTo(Term* target); +}; + + + +/** + * TermPositions provides an interface for enumerating the <document, + * frequency, <position>* > tuples for a term.

The document and + * frequency are the same as for a TermDocs. The positions portion lists the ordinal + * positions of each occurrence of a term in a document. + * + * @see IndexReader#termPositions() + */ +class CLUCENE_EXPORT TermPositions: public virtual TermDocs { +public: + /** Returns next position in the current document. It is an error to call + this more than {@link #freq()} times + without calling {@link #next()}

This is + invalid until {@link #next()} is called for + the first time. + */ + virtual int32_t nextPosition() = 0; + + virtual ~TermPositions(); + + /** + * Returns the length of the payload at the current term position. + * This is invalid until {@link #nextPosition()} is called for + * the first time.
+ * @return length of the current payload in number of bytes + */ + virtual int32_t getPayloadLength() const = 0; + + /** + * Returns the payload data at the current term position. + * This is invalid until {@link #nextPosition()} is called for + * the first time. + * This method must not be called more than once after each call + * of {@link #nextPosition()}. However, payloads are loaded lazily, + * so if the payload data for the current position is not needed, + * this method may not be called at all for performance reasons.
+ * + * @param data the array into which the data of this payload is to be + * stored, if it is big enough; otherwise, a new byte[] array + * is allocated for this purpose. + * @return a byte[] array containing the data of this payload + */ + virtual uint8_t* getPayload(uint8_t* data) = 0; + + /** + * Checks if a payload can be loaded at this position. + *

+ * Payloads can only be loaded once per call to + * {@link #nextPosition()}. + * + * @return true if there is a payload available at this position that can be loaded + */ + virtual bool isPayloadAvailable() const = 0; + + /** Solve the diamond inheritence problem by providing a reinterpret function. + * No dynamic casting is required and no RTTI data is needed to do this + */ + virtual TermDocs* __asTermDocs()=0; + virtual TermPositions* __asTermPositions()=0; +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/_TermVector.h clucene-core-2.3.3.4/src/core/CLucene/index/_TermVector.h --- clucene-core-0.9.21b/src/core/CLucene/index/_TermVector.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/_TermVector.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,330 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_internal_termvector_h +#define _lucene_index_internal_termvector_h + +#include "CLucene/util/Array.h" +#include "_FieldInfos.h" +#include "TermVector.h" +//#include "FieldInfos.h" + +CL_NS_DEF(index) + +class TermVectorsWriter:LUCENE_BASE { +private: + CL_NS(store)::IndexOutput* tvx, *tvd, *tvf; + FieldInfos* fieldInfos; + +public: + TermVectorsWriter(CL_NS(store)::Directory* directory, const char* segment, + FieldInfos* fieldInfos); + ~TermVectorsWriter(); + + /** + * Add a complete document specified by all its term vectors. If document has no + * term vectors, add value for tvx. + * + * @param vectors + * @throws IOException + */ + void addAllDocVectors(CL_NS(util)::ArrayBase* vectors); + + /** Close all streams. + * to suppress exceptions from being thrown, pass an error object to be filled in + */ + void close(CLuceneError* err = NULL); +}; + +/** + */ +class SegmentTermVector: public /*virtual*/ TermFreqVector { +private: + TCHAR* field; + CL_NS(util)::ArrayBase* terms; + CL_NS(util)::ArrayBase* termFreqs; + + int32_t binarySearch(const CL_NS(util)::ArrayBase& array, const TCHAR* key) const; +public: + //note: termFreqs must be the same length as terms + SegmentTermVector(const TCHAR* field, CL_NS(util)::ArrayBase* terms, + CL_NS(util)::ArrayBase* termFreqs); + virtual ~SegmentTermVector(); + + /** + * + * @return The number of the field this vector is associated with + */ + const TCHAR* getField(); + TCHAR* toString() const; + int32_t size(); + const CL_NS(util)::ArrayBase* getTerms(); + const CL_NS(util)::ArrayBase* getTermFrequencies(); + int32_t indexOf(const TCHAR* termText); + CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len); + + virtual TermPositionVector* __asTermPositionVector(); +}; + + + +/** +* @version $Id: +*/ +class TermVectorMapper; // Forward declaration + +class CLUCENE_EXPORT TermVectorsReader:LUCENE_BASE { +public: + LUCENE_STATIC_CONSTANT(int32_t, FORMAT_VERSION = 2); + LUCENE_STATIC_CONSTANT(uint8_t, STORE_POSITIONS_WITH_TERMVECTOR = 0x1); + LUCENE_STATIC_CONSTANT(uint8_t, STORE_OFFSET_WITH_TERMVECTOR = 0x2); +private: + + //The size in bytes that the FORMAT_VERSION will take up at the beginning of each file + LUCENE_STATIC_CONSTANT(int32_t, FORMAT_SIZE = 4); + + FieldInfos* fieldInfos; + + CL_NS(store)::IndexInput* tvx; + CL_NS(store)::IndexInput* tvd; + CL_NS(store)::IndexInput* tvf; + int64_t _size; // TODO: size_t ? + + // The docID offset where our docs begin in the index + // file. This will be 0 if we have our own private file. + int32_t docStoreOffset; + + int32_t tvdFormat; + int32_t tvfFormat; + +public: + TermVectorsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fieldInfos, + int32_t readBufferSize=LUCENE_STREAM_BUFFER_SIZE, int32_t docStoreOffset=-1, int32_t size=0); + ~TermVectorsReader(); + +private: + int32_t checkValidFormat(CL_NS(store)::IndexInput* in); + +public: + void close(); + + /** + * + * @return The number of documents in the reader + */ + int64_t size() const; + +public: + void get(const int32_t docNum, const TCHAR* field, TermVectorMapper* mapper); + + /** + * Retrieve the term vector for the given document and field + * @param docNum The document number to retrieve the vector for + * @param field The field within the document to retrieve + * @return The TermFreqVector for the document and field or null if there is no termVector for this field. + * @throws IOException if there is an error reading the term vector files + */ + TermFreqVector* get(const int32_t docNum, const TCHAR* field); + + /** + * Return all term vectors stored for this document or null if the could not be read in. + * + * @param docNum The document number to retrieve the vector for + * @return All term frequency vectors + * @throws IOException if there is an error reading the term vector files + */ + CL_NS(util)::ArrayBase* get(const int32_t docNum); + //bool get(int32_t docNum, CL_NS(util)::ObjectArray& result); + + void get(const int32_t docNumber, TermVectorMapper* mapper); + +private: + CL_NS(util)::ObjectArray* readTermVectors(const int32_t docNum, + const TCHAR** fields, const int64_t* tvfPointers, const int32_t len); + + void readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, + const int32_t len, TermVectorMapper* mapper); + + /** + * + * @param field The field to read in + * @param tvfPointer The pointer within the tvf file where we should start reading + * @param mapper The mapper used to map the TermVector + * @return The TermVector located at that position + * @throws IOException + */ + void readTermVector(const TCHAR* field, const int64_t tvfPointer, TermVectorMapper* mapper); + + + DEFINE_MUTEX(THIS_LOCK) + TermVectorsReader(const TermVectorsReader& copy); + +public: + TermVectorsReader* clone() const; +}; + + +class SegmentTermPositionVector: public SegmentTermVector, public TermPositionVector { +protected: + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* positions; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* offsets; + static CL_NS(util)::ValueArray EMPTY_TERM_POS; +public: + SegmentTermPositionVector(const TCHAR* field, + CL_NS(util)::ArrayBase* terms, + CL_NS(util)::ArrayBase* termFreqs, + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* _positions, + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* _offsets); + ~SegmentTermPositionVector(); + + /** + * Returns an array of TermVectorOffsetInfo in which the term is found. + * + * @param index The position in the array to get the offsets from + * @return An array of TermVectorOffsetInfo objects or the empty list + * @see org.apache.lucene.analysis.Token + */ + const CL_NS(util)::ArrayBase* getOffsets(const size_t index); + + /** + * Returns an array of positions in which the term is found. + * Terms are identified by the index at which its number appears in the + * term String array obtained from the indexOf method. + */ + const CL_NS(util)::ArrayBase* getTermPositions(const size_t index); + + // disambiguation + const TCHAR* getField(){ return SegmentTermVector::getField(); } + TCHAR* toString() const{ return SegmentTermVector::toString(); } + int32_t size(){ return SegmentTermVector::size(); } + const CL_NS(util)::ArrayBase* getTerms(){ return SegmentTermVector::getTerms(); } + const CL_NS(util)::ArrayBase* getTermFrequencies(){ return SegmentTermVector::getTermFrequencies(); } + int32_t indexOf(const TCHAR* termText){ return SegmentTermVector::indexOf(termText); } + CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len); + + virtual TermPositionVector* __asTermPositionVector(); +}; + +/** + * The TermVectorMapper can be used to map Term Vectors into your own + * structure instead of the parallel array structure used by + * {@link org.apache.lucene.index.IndexReader#getTermFreqVector(int,String)}. + *

+ * It is up to the implementation to make sure it is thread-safe. + * + * + **/ +class CLUCENE_EXPORT TermVectorMapper : LUCENE_BASE{ +private: + bool ignoringPositions; + bool ignoringOffsets; + +protected: + TermVectorMapper(); + virtual ~TermVectorMapper(){}; + + /** + * + * @param ignoringPositions true if this mapper should tell Lucene to ignore positions even if they are stored + * @param ignoringOffsets similar to ignoringPositions + */ + TermVectorMapper(const bool _ignoringPositions, const bool _ignoringOffsets); + +public: + /** + * Tell the mapper what to expect in regards to field, number of terms, offset and position storage. + * This method will be called once before retrieving the vector for a field. + * + * This method will be called before {@link #map(String,int,TermVectorOffsetInfo[],int[])}. + * @param field The field the vector is for + * @param numTerms The number of terms that need to be mapped + * @param storeOffsets true if the mapper should expect offset information + * @param storePositions true if the mapper should expect positions info + */ + virtual void setExpectations(const TCHAR* _field, const int32_t numTerms, const bool storeOffsets, + const bool storePositions) = 0; + + /** + * Map the Term Vector information into your own structure + * @param term The term to add to the vector + * @param frequency The frequency of the term in the document + * @param offsets null if the offset is not specified, otherwise the offset into the field of the term + * @param positions null if the position is not specified, otherwise the position in the field of the term + * @memory offset and position objects must be cleaned up by implementing class + */ + virtual void map(const TCHAR* term, const int32_t termLen, const int32_t frequency, + CL_NS(util)::ArrayBase* _offsets, + CL_NS(util)::ArrayBase* _positions) = 0; + + /** + * Indicate to Lucene that even if there are positions stored, this mapper is not interested in them and they + * can be skipped over. Derived classes should set this to true if they want to ignore positions. The default + * is false, meaning positions will be loaded if they are stored. + * @return false + */ + bool isIgnoringPositions() const; + + /** + * + * @see #isIgnoringPositions() Same principal as {@link #isIgnoringPositions()}, but applied to offsets. false by default. + * @return false + */ + bool isIgnoringOffsets() const; + + /** + * Passes down the index of the document whose term vector is currently being mapped, + * once for each top level call to a term vector reader. + *

+ * Default implementation IGNORES the document number. Override if your implementation needs the document number. + *

+ * NOTE: Document numbers are internal to Lucene and subject to change depending on indexing operations. + * + * @param documentNumber index of document currently being mapped + */ + virtual void setDocumentNumber(const int32_t documentNumber); +}; + +/** + * Models the existing parallel array structure + */ +class ParallelArrayTermVectorMapper : public TermVectorMapper +{ +private: + CL_NS(util)::ArrayBase* terms; + CL_NS(util)::ArrayBase* termFreqs; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* positions; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* offsets; + int32_t currentPosition; + bool storingOffsets; + bool storingPositions; + TCHAR* field; + +public: + ParallelArrayTermVectorMapper(); + virtual ~ParallelArrayTermVectorMapper(); + + void setExpectations(const TCHAR* _field, const int32_t numTerms, + const bool storeOffsets, const bool storePositions); + + void map(const TCHAR* term, const int32_t termLen, const int32_t frequency, + CL_NS(util)::ArrayBase* _offsets, + CL_NS(util)::ArrayBase* _positions); + + /** + * Construct the vector + * @return The {@link TermFreqVector} based on the mappings. + * @memory Caller is responsible for freeing up the returned object + */ + TermFreqVector* materializeVector(); + + void reset() + { + currentPosition = 0; + } +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/TermVector.h clucene-core-2.3.3.4/src/core/CLucene/index/TermVector.h --- clucene-core-0.9.21b/src/core/CLucene/index/TermVector.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/TermVector.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,159 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_termvector_h +#define _lucene_index_termvector_h + + +//#include "FieldInfos.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class TermPositionVector; + + +/** Provides access to stored term vector of + * a document field. The vector consists of the name of the field, an array of the terms tha occur in the field of the + * {@link org.apache.lucene.document.Document} and a parallel array of frequencies. Thus, getTermFrequencies()[5] corresponds with the + * frequency of getTerms()[5], assuming there are at least 5 terms in the Document. + */ +class CLUCENE_EXPORT TermFreqVector:LUCENE_BASE { +public: + virtual ~TermFreqVector(){ + } + + /** + * The Field name. + * @return The name of the field this vector is associated with. + * + */ + virtual const TCHAR* getField() = 0; + + /** + * @return The number of terms in the term vector. + */ + virtual int32_t size() = 0; + + /** + * @return An Array of term texts in ascending order. + */ + virtual const CL_NS(util)::ArrayBase* getTerms() = 0; + + + /** Array of term frequencies. Locations of the array correspond one to one + * to the terms in the array obtained from getTerms + * method. Each location in the array contains the number of times this + * term occurs in the document or the document field. + * + * The size of the returned array is size() + * @memory Returning a pointer to internal data. Do not delete. + */ + virtual const CL_NS(util)::ArrayBase* getTermFrequencies() = 0; + + + /** Return an index in the term numbers array returned from + * getTerms at which the term with the specified + * term appears. If this term does not appear in the array, + * return -1. + */ + virtual int32_t indexOf(const TCHAR* term) = 0; + + /** Just like indexOf(int32_t) but searches for a number of terms + * at the same time. Returns an array that has the same size as the number + * of terms searched for, each slot containing the result of searching for + * that term number. + * + * @param terms array containing terms to look for + * @param start index in the array where the list of terms starts + * @param len the number of terms in the list + */ + virtual CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& terms, const int32_t start, const int32_t len) = 0; + + /** Solve the diamond inheritence problem by providing a reinterpret function. + * No dynamic casting is required and no RTTI data is needed to do this + */ + virtual TermPositionVector* __asTermPositionVector()=0; +}; + + +/** +* The TermVectorOffsetInfo class holds information pertaining to a Term in a {@link TermPositionVector}'s +* offset information. This offset information is the character offset as set during the Analysis phase (and thus may not be the actual offset in the +* original content). +*/ +struct CLUCENE_EXPORT TermVectorOffsetInfo { +private: + int32_t startOffset; + int32_t endOffset; +public: // TODO: Remove after TermVectorWriter has been ported; + TermVectorOffsetInfo(); + ~TermVectorOffsetInfo(); + TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset); + + /** + * The accessor for the ending offset for the term + * @return The offset + */ + int32_t getEndOffset() const; + void setEndOffset(const int32_t _endOffset); + + /** + * The accessor for the starting offset of the term. + * + * @return The offset + */ + int32_t getStartOffset() const; + void setStartOffset(const int32_t _startOffset); + + /** + * Two TermVectorOffsetInfos are equals if both the start and end offsets are the same + * @param o The comparison Object + * @return true if both {@link #getStartOffset()} and {@link #getEndOffset()} are the same for both objects. + */ + bool equals(TermVectorOffsetInfo* o); + size_t hashCode() const; +}; + + +/** +* Convenience declaration when creating a {@link org.apache.lucene.index.TermPositionVector} that stores only position information. +*/ +extern CL_NS(util)::ObjectArray* TermVectorOffsetInfo_EMPTY_OFFSET_INFO; + +/** Extends TermFreqVector to provide additional information about + * positions in which each of the terms is found. A TermPositionVector not necessarily + * contains both positions and offsets, but at least one of these arrays exists. + */ +class CLUCENE_EXPORT TermPositionVector: public virtual TermFreqVector { +public: + + /** Returns an array of positions in which the term is found. + * Terms are identified by the index at which its number appears in the + * term String array obtained from the indexOf method. + * May return null if positions have not been stored. + */ + virtual const CL_NS(util)::ArrayBase* getTermPositions(const size_t index) = 0; + + /** + * Returns an array of TermVectorOffsetInfo in which the term is found. + * May return null if offsets have not been stored. + * + * @see org.apache.lucene.analysis.Token + * + * @param index The position in the array to get the offsets from + * @return An array of TermVectorOffsetInfo objects or the empty list + */ + virtual const CL_NS(util)::ArrayBase* getOffsets(const size_t index) = 0; + + virtual ~TermPositionVector(){ + } +}; + + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/TermVectorReader.cpp clucene-core-2.3.3.4/src/core/CLucene/index/TermVectorReader.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/TermVectorReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/TermVectorReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,551 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_TermVector.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include "_IndexFileNames.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +TermVectorsReader::TermVectorsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fieldInfos, + int32_t readBufferSize, int32_t docStoreOffset, int32_t size): + fieldInfos(NULL), tvx(NULL), tvd(NULL), tvf(NULL), _size(0), docStoreOffset(0) + { + + bool success = false; + + char fbuf[CL_MAX_NAME]; + strcpy(fbuf,segment); + strcat(fbuf,"."); + char* fpbuf=fbuf+strlen(fbuf); + + strcpy(fpbuf,IndexFileNames::VECTORS_INDEX_EXTENSION); + try { + if (d->fileExists(fbuf)) { + tvx = d->openInput(fbuf, readBufferSize); + checkValidFormat(tvx); + + strcpy(fpbuf,IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + tvd = d->openInput(fbuf, readBufferSize); + tvdFormat = checkValidFormat(tvd); + + strcpy(fpbuf,IndexFileNames::VECTORS_FIELDS_EXTENSION); + tvf = d->openInput(fbuf, readBufferSize); + tvfFormat = checkValidFormat(tvf); + if (-1 == docStoreOffset) { + this->docStoreOffset = 0; + this->_size = static_cast(tvx->length() >> 3); + } else { + this->docStoreOffset = docStoreOffset; + this->_size = size; + // Verify the file is long enough to hold all of our + // docs + CND_CONDITION( ((int64_t) (tvx->length() / 8)) >= size + docStoreOffset , "file is not long enough to hold all of our docs"); + } + } + + this->fieldInfos = fieldInfos; + success = true; + } _CLFINALLY ({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); +} + +TermVectorsReader::TermVectorsReader(const TermVectorsReader& copy) +{ + tvx = copy.tvx->clone(); + tvd = copy.tvd->clone(); + tvf = copy.tvf->clone(); + + tvdFormat = copy.tvdFormat; + tvfFormat = copy.tvfFormat; + _size = copy._size; + fieldInfos = copy.fieldInfos; + docStoreOffset = copy.docStoreOffset; +} +TermVectorsReader* TermVectorsReader::clone() const{ + if (tvx == NULL || tvd == NULL || tvf == NULL) + return NULL; + return _CLNEW TermVectorsReader(*this); +} + +TermVectorsReader::~TermVectorsReader(){ + close(); +} + +int32_t TermVectorsReader::checkValidFormat(CL_NS(store)::IndexInput* in){ + int32_t format = in->readInt(); + if (format > TermVectorsReader::FORMAT_VERSION) + { + CL_NS(util)::StringBuffer err; + err.append(_T("Incompatible format version: ")); + err.appendInt(format); + err.append(_T(" expected ")); + err.appendInt(TermVectorsReader::FORMAT_VERSION); + err.append(_T(" or less")); + _CLTHROWT(CL_ERR_CorruptIndex,err.getBuffer()); + } + return format; +} + +void TermVectorsReader::close(){ + // make all effort to close up. Keep the first exception + // and throw it as a new one. + // todo: why don't we trap the exception and at least make sure that + // all streams that we can close are closed? + CLuceneError keep; + bool thrown = false; + + if (tvx != NULL){ + try{tvx->close();} + catch(CLuceneError& err){ + if ( err.number() == CL_ERR_IO ){ + keep = err; + thrown = true; + }else + throw err; + } + _CLDELETE(tvx);//delete even if error thrown + } + if (tvd != NULL){ + try{tvd->close();} + catch(CLuceneError& err){ + if ( err.number() == CL_ERR_IO ){ + keep = err; + thrown = true; + }else + throw err; + } + _CLDELETE(tvd); + } + if (tvf != NULL){ + try{tvf->close();} + catch(CLuceneError& err){ + if ( err.number() == CL_ERR_IO ){ + keep = err; + thrown = true; + }else + throw err; + } + _CLDELETE(tvf); + } + + if ( thrown ) + throw keep; +} + +int64_t TermVectorsReader::size() const{ + return _size; +} + +void TermVectorsReader::get(const int32_t docNum, const TCHAR* field, TermVectorMapper* mapper){ + if (tvx != NULL) { + int32_t fieldNumber = fieldInfos->fieldNumber(field); + //We need to account for the FORMAT_SIZE at when seeking in the tvx + //We don't need to do this in other seeks because we already have the + // file pointer + //that was written in another file + tvx->seek(((docNum + docStoreOffset) * 8L) + FORMAT_SIZE); + int64_t position = tvx->readLong(); + + tvd->seek(position); + int32_t fieldCount = tvd->readVInt(); + // There are only a few fields per document. We opt for a full scan + // rather then requiring that they be ordered. We need to read through + // all of the fields anyway to get to the tvf pointers. + int32_t number = 0; + int32_t found = -1; + for (int32_t i = 0; i < fieldCount; ++i) { + if(tvdFormat == FORMAT_VERSION) + number = tvd->readVInt(); + else + number += tvd->readVInt(); + + if (number == fieldNumber) + found = i; + } + + // This field, although valid in the segment, was not found in this + // document + if (found != -1) { + // Compute position in the tvf file + position = 0; + for (int32_t i = 0; i <= found; i++) // TODO: Was ++i, make sure its still good + position += tvd->readVLong(); + + mapper->setDocumentNumber(docNum); + readTermVector(field, position, mapper); + } else { + // "Field not found" + } + } else { + // "No tvx file" + } +} + +TermFreqVector* TermVectorsReader::get(const int32_t docNum, const TCHAR* field){ + // Check if no term vectors are available for this segment at all + ParallelArrayTermVectorMapper* mapper = _CLNEW ParallelArrayTermVectorMapper(); + get(docNum, field, (TermVectorMapper*)mapper); + + TermFreqVector* ret = mapper->materializeVector(); + _CLLDELETE(mapper); + return ret; +} + + +ArrayBase* TermVectorsReader::get(const int32_t docNum){ + ObjectArray* result = NULL; + // Check if no term vectors are available for this segment at all + if (tvx != NULL) { + //We need to offset by + tvx->seek(((docNum + docStoreOffset) * 8L) + FORMAT_SIZE); + int64_t position = tvx->readLong(); + + tvd->seek(position); + int32_t fieldCount = tvd->readVInt(); + + // No fields are vectorized for this document + if (fieldCount != 0) { + int32_t number = 0; + const TCHAR** fields = _CL_NEWARRAY(const TCHAR*,fieldCount+1); + + { //msvc6 scope fix + for (int32_t i = 0; i < fieldCount; ++i) { + if(tvdFormat == FORMAT_VERSION) + number = tvd->readVInt(); + else + number += tvd->readVInt(); + fields[i] = fieldInfos->fieldName(number); + } + } + fields[fieldCount]=NULL; + + // Compute position in the tvf file + position = 0; + int64_t* tvfPointers = _CL_NEWARRAY(int64_t,fieldCount); + { //msvc6 scope fix + for (int32_t i = 0; i < fieldCount; ++i) { + position += tvd->readVLong(); + tvfPointers[i] = position; + } + } + + result = (ObjectArray*)readTermVectors(docNum, fields, tvfPointers, fieldCount); + + _CLDELETE_ARRAY(tvfPointers); + _CLDELETE_ARRAY(fields); + } + } else { + // "No tvx file" + } + return result; +} + +void TermVectorsReader::get(const int32_t docNumber, TermVectorMapper* mapper) { + // Check if no term vectors are available for this segment at all + if (tvx != NULL) { + //We need to offset by + tvx->seek((docNumber * 8L) + FORMAT_SIZE); + int64_t position = tvx->readLong(); + + tvd->seek(position); + int32_t fieldCount = tvd->readVInt(); + + // No fields are vectorized for this document + if (fieldCount != 0) { + int32_t number = 0; + const TCHAR** fields = _CL_NEWARRAY(const TCHAR*, fieldCount+1); + + { //msvc6 scope fix + for (int32_t i = 0; i < fieldCount; i++) { + if(tvdFormat == FORMAT_VERSION) + number = tvd->readVInt(); + else + number += tvd->readVInt(); + + fields[i] = fieldInfos->fieldName(number); + } + } + fields[fieldCount]=NULL; + + // Compute position in the tvf file + position = 0; + int64_t* tvfPointers = _CL_NEWARRAY(int64_t,fieldCount); + { //msvc6 scope fix + for (int32_t i = 0; i < fieldCount; i++) { + position += tvd->readVLong(); + tvfPointers[i] = position; + } + } + + mapper->setDocumentNumber(docNumber); + readTermVectors(fields, tvfPointers, fieldCount, mapper); + + _CLDELETE_ARRAY(tvfPointers); + _CLDELETE_ARRAY(fields); + } + } else { + // "No tvx file" + } + } + +ObjectArray* TermVectorsReader::readTermVectors(const int32_t docNum, + const TCHAR** fields, const int64_t* tvfPointers, const int32_t len){ + ObjectArray* res = _CLNEW CL_NS(util)::ObjectArray(len); + ParallelArrayTermVectorMapper* mapper = _CLNEW ParallelArrayTermVectorMapper(); + for (int32_t i = 0; i < len; i++) { + mapper->setDocumentNumber(docNum); + readTermVector(fields[i], tvfPointers[i], mapper); + res->values[i] = static_cast(mapper->materializeVector()); + mapper->reset(); + } + _CLLDELETE(mapper); + return res; +} + +void TermVectorsReader::readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, + const int32_t len, TermVectorMapper* mapper){ + for (int32_t i = 0; i < len; i++) { + readTermVector(fields[i], tvfPointers[i], mapper); + } +} + +void TermVectorsReader::readTermVector(const TCHAR* field, const int64_t tvfPointer, TermVectorMapper* mapper){ + //Now read the data from specified position + //We don't need to offset by the FORMAT here since the pointer already includes the offset + tvf->seek(tvfPointer); + + int32_t numTerms = tvf->readVInt(); + // If no terms - return a constant empty termvector. However, this should never occur! + if (numTerms == 0) + return; + + bool storePositions; + bool storeOffsets; + + if(tvfFormat == FORMAT_VERSION){ + uint8_t bits = tvf->readByte(); + storePositions = (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0; + storeOffsets = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0; + } + else{ + tvf->readVInt(); + storePositions = false; + storeOffsets = false; + } + mapper->setExpectations(field, numTerms, storeOffsets, storePositions); + + int32_t start = 0; + int32_t deltaLength = 0; + int32_t totalLength = 0; + ValueArray buffer(10); // init the buffer with a length of 10 character + + for (int32_t i = 0; i < numTerms; ++i) { + start = tvf->readVInt(); + deltaLength = tvf->readVInt(); + totalLength = start + deltaLength; + if (buffer.length < totalLength + 1) // increase buffer + { + buffer.resize(totalLength+1); + } + + //read the term + tvf->readChars(buffer.values, start, deltaLength); + buffer.values[totalLength] = '\0'; //null terminate term + + //read the frequency + int32_t freq = tvf->readVInt(); + ValueArray* positions = NULL; + + if (storePositions) { //read in the positions + //does the mapper even care about positions? + if (mapper->isIgnoringPositions() == false) { + positions = _CLNEW ValueArray(freq); + int32_t prevPosition = 0; + for (int32_t j = 0; j < freq; j++) + { + positions->values[j] = prevPosition + tvf->readVInt(); + prevPosition = positions->values[j]; + } + } else { + //we need to skip over the positions. Since these are VInts, I don't believe there is anyway to know for sure how far to skip + // + for (int32_t j = 0; j < freq; j++) + { + tvf->readVInt(); + } + } + } + + ArrayBase* offsets = NULL; + if (storeOffsets) { + //does the mapper even care about offsets? + if (mapper->isIgnoringOffsets() == false) { + offsets = _CLNEW ObjectArray(freq); + int32_t prevOffset = 0; + for (int32_t j = 0; j < freq; j++) { + int32_t startOffset = prevOffset + tvf->readVInt(); + int32_t endOffset = startOffset + tvf->readVInt(); + offsets->values[j] = _CLNEW TermVectorOffsetInfo(startOffset, endOffset); + prevOffset = endOffset; + } + } else { + for (int32_t j = 0; j < freq; j++){ + tvf->readVInt(); + tvf->readVInt(); + } + } + } + mapper->map(buffer.values, totalLength, freq, offsets, positions); + } +} + +ObjectArray* TermVectorOffsetInfo_EMPTY_OFFSET_INFO = _CLNEW ObjectArray; + +TermVectorOffsetInfo::TermVectorOffsetInfo() { + startOffset = 0; + endOffset=0; +} +TermVectorOffsetInfo::~TermVectorOffsetInfo() { +} + +TermVectorOffsetInfo::TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset) { + this->endOffset = endOffset; + this->startOffset = startOffset; +} + +int32_t TermVectorOffsetInfo::getEndOffset() const{ + return endOffset; +} + +void TermVectorOffsetInfo::setEndOffset(const int32_t _endOffset) { + this->endOffset = _endOffset; +} + +int32_t TermVectorOffsetInfo::getStartOffset() const{ + return startOffset; +} + +void TermVectorOffsetInfo::setStartOffset(const int32_t _startOffset) { + this->startOffset = _startOffset; +} + +bool TermVectorOffsetInfo::equals(TermVectorOffsetInfo* termVectorOffsetInfo) { + if (this == termVectorOffsetInfo) + return true; + + if (endOffset != termVectorOffsetInfo->endOffset) return false; + if (startOffset != termVectorOffsetInfo->startOffset) return false; + + return true; +} + +size_t TermVectorOffsetInfo::hashCode() const{ + size_t result; + result = startOffset; + result = 29 * result + endOffset; + return result; +} + +TermVectorMapper::TermVectorMapper(){ + this->ignoringPositions = false; + this->ignoringOffsets = false; +} + +TermVectorMapper::TermVectorMapper(const bool _ignoringPositions, const bool _ignoringOffsets){ + this->ignoringPositions = _ignoringPositions; + this->ignoringOffsets = _ignoringOffsets; +} + +bool TermVectorMapper::isIgnoringPositions() const +{ + return ignoringPositions; +} + +bool TermVectorMapper::isIgnoringOffsets() const +{ + return ignoringOffsets; +} + +void TermVectorMapper::setDocumentNumber(const int32_t /*documentNumber*/) +{ + //default implementation does nothing... +} + +ParallelArrayTermVectorMapper::ParallelArrayTermVectorMapper(): + terms(NULL), + termFreqs(NULL), + positions(NULL), + offsets(NULL), + currentPosition(0), + field(NULL) +{ +} +ParallelArrayTermVectorMapper::~ParallelArrayTermVectorMapper(){ + _CLDELETE_LCARRAY(field); +} + +void ParallelArrayTermVectorMapper::setExpectations(const TCHAR* _field, const int32_t numTerms, + const bool storeOffsets, const bool storePositions) { + _CLDELETE_LCARRAY(field); + this->field = STRDUP_TtoT(_field); + + terms = _CLNEW CL_NS(util)::TCharArray(numTerms); + termFreqs = _CLNEW ValueArray(numTerms); + + this->storingOffsets = storeOffsets; + this->storingPositions = storePositions; + if(storePositions){ + positions = (ArrayBase< ArrayBase* >*)_CLNEW ObjectArray< ValueArray >(numTerms); + } + if(storeOffsets){ + offsets = _CLNEW ObjectArray< ArrayBase >(numTerms); + } +} + +void ParallelArrayTermVectorMapper::map(const TCHAR* term, int32_t termLen, const int32_t frequency, + ArrayBase* _offsets, + ArrayBase* _positions) { + terms->values[currentPosition] = STRDUP_TtoT(term); + + termFreqs->values[currentPosition] = frequency; + + if (storingOffsets) + { + this->offsets->values[currentPosition] = _offsets; + } + if (storingPositions) + { + this->positions->values[currentPosition] = _positions; + } + currentPosition++; +} + +TermFreqVector* ParallelArrayTermVectorMapper::materializeVector() { + SegmentTermVector* tv = NULL; + if (field != NULL && terms != NULL) { + if (storingPositions || storingOffsets) { + tv = _CLNEW SegmentTermPositionVector(field, terms, termFreqs, positions, offsets); + } else { + tv = _CLNEW SegmentTermVector(field, terms, termFreqs); + } + } + return tv; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/index/TermVectorWriter.cpp clucene-core-2.3.3.4/src/core/CLucene/index/TermVectorWriter.cpp --- clucene-core-0.9.21b/src/core/CLucene/index/TermVectorWriter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/index/TermVectorWriter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,230 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_TermVector.h" +#include "_IndexFileNames.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(index) + + TermVectorsWriter::TermVectorsWriter(CL_NS(store)::Directory* directory, + const char* segment,FieldInfos* fieldInfos) + { + // Open files for TermVector storage + char fbuf[CL_MAX_NAME]; + strcpy(fbuf,segment); + strcat(fbuf,"."); + char* fpbuf=fbuf+strlen(fbuf); + + strcpy(fpbuf,IndexFileNames::VECTORS_INDEX_EXTENSION); + tvx = directory->createOutput(fbuf); + tvx->writeInt(TermVectorsReader::FORMAT_VERSION); + + strcpy(fpbuf,IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + tvd = directory->createOutput(fbuf); + tvd->writeInt(TermVectorsReader::FORMAT_VERSION); + + strcpy(fpbuf,IndexFileNames::VECTORS_FIELDS_EXTENSION); + tvf = directory->createOutput(fbuf); + tvf->writeInt(TermVectorsReader::FORMAT_VERSION); + + this->fieldInfos = fieldInfos; + } + + void TermVectorsWriter::close(CLuceneError* err){ + CLuceneError keep; + bool bError = false; + + if ( tvx != NULL ){ + try{ + tvx->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvx); + _CLDELETE(tvd); + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvx); + } + + if ( tvd != NULL ){ + try{ + tvd->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvd); + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvd); + } + + if ( tvf != NULL ){ + try{ + tvf->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvf); + } + + if (bError) + { + if ( err != NULL ) + err->set(keep.number(), keep.what()); + else + throw keep; + } + } + + TermVectorsWriter::~TermVectorsWriter(){ + CLuceneError err; + close(&err); + } + + + void TermVectorsWriter::addAllDocVectors(ArrayBase* _vectors){ + + tvx->writeLong(tvd->getFilePointer()); + + if (_vectors != NULL) { + ArrayBase& vectors = *_vectors; + + const int32_t numFields = vectors.length; + tvd->writeVInt(numFields); + + ValueArray fieldPointers(numFields); + + for (int32_t i=0; igetFilePointer(); + + const int32_t fieldNumber = fieldInfos->fieldNumber(vectors[i]->getField()); + + // 1st pass: write field numbers to tvd + tvd->writeVInt(fieldNumber); + + const int32_t numTerms = vectors[i]->size(); + tvf->writeVInt(numTerms); + + TermPositionVector* tpVector = NULL; + + uint8_t bits = 0; + bool storePositions = false; + bool storeOffsets = false; + + if ( vectors[i]->__asTermPositionVector() != NULL ) { + // May have positions & offsets + tpVector = vectors[i]->__asTermPositionVector(); + storePositions = tpVector->size() > 0 && tpVector->getTermPositions(0) != NULL; + storeOffsets = tpVector->size() > 0 && tpVector->getOffsets(0) != NULL; + bits = ((storePositions ? TermVectorsReader::STORE_POSITIONS_WITH_TERMVECTOR : 0) + + (storeOffsets ? TermVectorsReader::STORE_OFFSET_WITH_TERMVECTOR : 0)); + } else { + tpVector = NULL; + bits = 0; + storePositions = false; + storeOffsets = false; + } + + tvf->writeVInt(bits); + + const ArrayBase& terms = *vectors[i]->getTerms(); + const ArrayBase& freqs = *vectors[i]->getTermFrequencies(); + + const TCHAR* lastTermText = LUCENE_BLANK_STRING; + size_t lastTermTextLen = 0; + + for (int32_t j=0; jwriteVInt(start); // write shared prefix length + tvf->writeVInt(length); // write delta length + tvf->writeChars(termText + start, length); // write delta chars + lastTermText = termText; + + const int32_t termFreq = freqs[j]; + + tvf->writeVInt(termFreq); + + if (storePositions) { + const ArrayBase* _positions = tpVector->getTermPositions(j); + if (_positions == NULL) + _CLTHROWA(CL_ERR_IllegalState, "Trying to write positions that are NULL!"); + const ArrayBase& positions = *_positions; + assert (positions.length == termFreq); + + // use delta encoding for positions + int32_t lastPosition = 0; + for(int32_t k=0;kwriteVInt(position-lastPosition); + lastPosition = position; + } + } + + if (storeOffsets) { + const ArrayBase* _offsets = tpVector->getOffsets(j); + if (_offsets == NULL) + _CLTHROWA(CL_ERR_IllegalState, "Trying to write offsets that are NULL!"); + const ArrayBase& offsets = *_offsets; + assert (offsets.length == termFreq); + + // use delta encoding for offsets + int32_t lastEndOffset = 0; + for(int k=0;kgetStartOffset(); + const int32_t endOffset = offsets[k]->getEndOffset(); + tvf->writeVInt(startOffset-lastEndOffset); + tvf->writeVInt(endOffset-startOffset); + lastEndOffset = endOffset; + } + } + } + } + + // 2nd pass: write field pointers to tvd + int64_t lastFieldPointer = 0; + for (int32_t i=0; iwriteVLong(fieldPointer-lastFieldPointer); + lastFieldPointer = fieldPointer; + } + } else + tvd->writeVInt(0); + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/_CharStream.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/_CharStream.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/_CharStream.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/_CharStream.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,121 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_CharStream_ +#define _lucene_queryParser_CharStream_ + +CL_NS_DEF(queryParser) + +/** + * This interface describes a character stream that maintains line and + * column number positions of the characters. It also has the capability + * to backup the stream to some extent. An implementation of this + * interface is used in the TokenManager implementation generated by + * JavaCCParser. + * + * All the methods except backup can be implemented in any fashion. backup + * needs to be implemented correctly for the correct operation of the lexer. + * Rest of the methods are all used to get information like line number, + * column number and the String that constitutes a token and are not used + * by the lexer. Hence their implementation won't affect the generated lexer's + * operation. + */ +class CharStream :LUCENE_BASE { +public: + /** + * Returns the next character from the selected input. The method + * of selecting the input is the responsibility of the class + * implementing this interface. Can throw any java.io.IOException. + */ + virtual TCHAR readChar() = 0; + + /** + * Returns the column position of the character last read. + * @deprecated + * @see #getEndColumn + */ + virtual int32_t getColumn() const = 0; + + /** + * Returns the line number of the character last read. + * @deprecated + * @see #getEndLine + */ + virtual int32_t getLine() const = 0; + + /** + * Returns the column number of the last character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getEndColumn() const = 0; + + /** + * Returns the line number of the last character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getEndLine() const = 0; + + /** + * Returns the column number of the first character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getBeginColumn() const = 0; + + /** + * Returns the line number of the first character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getBeginLine() const = 0; + + /** + * Backs up the input stream by amount steps. Lexer calls this method if it + * had already read some characters, but could not use them to match a + * (longer) token. So, they will be used again as the prefix of the next + * token and it is the implemetation's responsibility to do this right. + */ + virtual void backup(const int32_t amount) = 0; + + /** + * Returns the next character that marks the beginning of the next token. + * All characters must remain in the buffer between two successive calls + * to this method to implement backup correctly. + */ + virtual TCHAR BeginToken() = 0; + + /** + * Returns a string made up of characters from the marked token beginning + * to the current buffer position. Implementations have the choice of returning + * anything that they want to. For example, for efficiency, one might decide + * to just return null, which is a valid implementation. + */ + virtual TCHAR* GetImage() = 0; + + /** + * Returns an array of characters that make up the suffix of length 'len' for + * the currently matched token. This is used to build up the matched string + * for use in actions in the case of MORE. A simple and inefficient + * implementation of this is as follows : + * + * { + * String t = GetImage(); + * return t.substring(t.length() - len, t.length()).toCharArray(); + * } + */ + virtual TCHAR* GetSuffix(const int32_t len) = 0; + + /** + * The lexer calls this function to indicate that it is done with the stream + * and hence implementations can free any resources held by this class. + * Again, the body of this function can be just empty and it will not + * affect the lexer's operation. + */ + virtual void Done() = 0; + + //CharStream(){}; + //virtual ~CharStream(){}; +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/FastCharStream.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/FastCharStream.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/FastCharStream.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/FastCharStream.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,121 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF(queryParser) + +FastCharStream::FastCharStream(CL_NS(util)::Reader* r, bool ownsReader) : + buffer(NULL), + _bufferSize(0), + bufferLength(0), + bufferPosition(0), + tokenStart(0), + bufferStart(0), + input(r), + _ownsReader(ownsReader) +{ +} + +FastCharStream::~FastCharStream() +{ + if (_ownsReader ){ + _CLLDELETE(input); + } + _CLDELETE_LCARRAY(buffer); +} + +TCHAR FastCharStream::readChar() { + if (bufferPosition >= bufferLength) + refill(); + return buffer[bufferPosition++]; +} + +void FastCharStream::refill() { + int32_t newPosition = bufferLength - tokenStart; + + if (tokenStart == 0) { // token won't fit in buffer + if (buffer == NULL) { // first time: alloc buffer + buffer = _CL_NEWARRAY(TCHAR, 2048); + _bufferSize = 2048; + } else if (bufferLength == _bufferSize) { // grow buffer + _bufferSize *= 2; + TCHAR* newBuffer = _CL_NEWARRAY(TCHAR, _bufferSize); + _tcsncpy(newBuffer, buffer, bufferLength); + _CLDELETE_LCARRAY(buffer); + buffer = newBuffer; + } + } else { // shift token to front + _tcsncpy(buffer, buffer+tokenStart,newPosition); + } + + bufferLength = newPosition; // update state + bufferPosition = newPosition; + bufferStart += tokenStart; + tokenStart = 0; + + const TCHAR* charBuf = NULL; + int32_t charsRead = // fill space in buffer + input->read(charBuf, newPosition, _bufferSize-newPosition); + if (charsRead == -1){ + _CLTHROWA(CL_ERR_IO, "read past eof"); + } + else { + memcpy(buffer, charBuf, charsRead * sizeof(TCHAR)); // TODO: Can we use the reader buffer instead of copying to our own? + bufferLength += charsRead; + } +} + +void FastCharStream::backup(const int32_t amount) { + bufferPosition -= amount; +} + +TCHAR* FastCharStream::GetImage() { + size_t len = bufferPosition - tokenStart; + TCHAR* ret = _CL_NEWARRAY(TCHAR, len + 1); + _tcsncpy(ret, buffer+tokenStart, len); + ret[len] = 0; // NULL terminated string + return ret; +} + +TCHAR* FastCharStream::GetSuffix(const int32_t len) { + TCHAR* value = _CL_NEWARRAY(TCHAR, len + 1); + _tcsncpy(value, buffer+(bufferPosition - len), len); + value[len] = 0; // NULL terminated string + return value; +} + +void FastCharStream::Done() { +} + +TCHAR FastCharStream::BeginToken() { + tokenStart = bufferPosition; + return readChar(); +} + +int32_t FastCharStream::getColumn() const { + return bufferStart + bufferPosition; +} +int32_t FastCharStream::getLine() const { + return 1; +} +int32_t FastCharStream::getEndColumn() const { + return bufferStart + bufferPosition; +} +int32_t FastCharStream::getEndLine() const { + return 1; +} +int32_t FastCharStream::getBeginColumn() const { + return bufferStart + tokenStart; +} +int32_t FastCharStream::getBeginLine() const { + return 1; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/_FastCharStream.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/_FastCharStream.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/_FastCharStream.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/_FastCharStream.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_FastCharStream_ +#define _lucene_queryParser_FastCharStream_ + +CL_CLASS_DEF(util,Reader) + +CL_NS_DEF(queryParser) + +class CharStream; + +/** An efficient implementation of JavaCC's CharStream interface.

Note that + * this does not do line-number counting, but instead keeps track of the + * character position of the token in the input, as required by Lucene's {@link + * org.apache.lucene.analysis.Token} API. */ +class FastCharStream : public CharStream { +protected: + TCHAR* buffer; + size_t _bufferSize; // To keep track of the buffer size in memory + + int32_t bufferLength; // end of valid chars + int32_t bufferPosition; // next char to read + + int32_t tokenStart; // offset in buffer + int32_t bufferStart; // position in file of buffer + + CL_NS(util)::Reader* input; // source of chars + bool _ownsReader; // Should we delete the reader once done with it, or in destructor? + + +public: + /** Constructs from a Reader. */ + FastCharStream(CL_NS(util)::Reader* r, bool ownsReader = false); + virtual ~FastCharStream(); + + TCHAR readChar(); + +private: + void refill(); + +public: + void backup(const int32_t amount); + + /*@memory Caller is responsible for deleting the returned string */ + TCHAR* GetImage(); + + /*@memory Caller is responsible for deleting the returned string */ + TCHAR* GetSuffix(const int32_t len); + + void Done(); + + TCHAR BeginToken(); + + int32_t getColumn() const; + int32_t getLine() const; + int32_t getEndColumn() const; + int32_t getEndLine() const; + int32_t getBeginColumn() const; + int32_t getBeginLine() const; +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/Lexer.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/Lexer.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/Lexer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/Lexer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,371 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryParser.h" +#include "_TokenList.h" +#include "QueryToken.h" +#include "_Lexer.h" + +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_FastCharStream.h" + +CL_NS_USE(util) + +CL_NS_DEF2(queryParser,legacy) +Lexer::Lexer(QueryParserBase* queryparser, const TCHAR* query) { + //Func - Constructor + //Pre - query != NULL and contains the query string + //Post - An instance of Lexer has been created + + this->queryparser = queryparser; + + CND_PRECONDITION(query != NULL, "query is NULL"); + + //The InputStream of Reader must be destroyed in the destructor + delSR = true; + + StringReader *r = _CLNEW StringReader(query); + + //Check to see if r has been created properly + CND_CONDITION(r != NULL, "Could not allocate memory for StringReader r"); + + //Instantie a FastCharStream instance using r and assign it to reader + reader = _CLNEW FastCharStream(r); + + //Check to see if reader has been created properly + CND_CONDITION(reader != NULL, "Could not allocate memory for FastCharStream reader"); + + //The InputStream of Reader must be destroyed in the destructor + delSR = true; + +} + + +Lexer::Lexer(QueryParserBase* queryparser, BufferedReader* source) { + //Func - Constructor + // Initializes a new instance of the Lexer class with the specified + // TextReader to lex. + //Pre - Source contains a valid reference to a Reader + //Post - An instance of Lexer has been created using source as the reader + + this->queryparser = queryparser; + + //Instantie a FastCharStream instance using r and assign it to reader + reader = _CLNEW FastCharStream(source); + + //Check to see if reader has been created properly + CND_CONDITION(reader != NULL, "Could not allocate memory for FastCharStream reader"); + + //The InputStream of Reader must not be destroyed in the destructor + delSR = false; +} + + +Lexer::~Lexer() { + //Func - Destructor + //Pre - true + //Post - if delSR was true the InputStream input of reader has been deleted + // The instance of Lexer has been destroyed + + if (delSR) { + _CLDELETE(reader->input); + } + + _CLDELETE(reader); +} + + +void Lexer::Lex(TokenList *tokenList) { + //Func - Breaks the input stream onto the tokens list tokens + //Pre - tokens != NULL and contains a TokenList in which the tokens can be stored + //Post - The tokens have been added to the TokenList tokens + + CND_PRECONDITION(tokenList != NULL, "tokens is NULL"); + + //Get all the tokens + while(true) { + //Add the token to the tokens list + + //Get the next token + QueryToken* token = _CLNEW QueryToken; + if ( !GetNextToken(token) ){ + _CLDELETE(token); + break; + } + tokenList->add(token); + } + + //The end has been reached so create an EOF_ token + //Add the final token to the TokenList _tokens + tokenList->add(_CLNEW QueryToken( QueryToken::EOF_)); +} + + +bool Lexer::GetNextToken(QueryToken* token) { + while(!reader->Eos()) { + int ch = reader->GetNext(); + + if ( ch == -1 ) + break; + + // skipping whitespaces + if( _istspace(ch)!=0 ) { + continue; + } + TCHAR buf[2] = {ch,'\0'}; + switch(ch) { + case '+': + token->set(buf, QueryToken::PLUS); + return true; + case '-': + token->set(buf, QueryToken::MINUS); + return true; + case '(': + token->set(buf, QueryToken::LPAREN); + return true; + case ')': + token->set(buf, QueryToken::RPAREN); + return true; + case ':': + token->set(buf, QueryToken::COLON); + return true; + case '!': + token->set(buf, QueryToken::NOT); + return true; + case '^': + token->set(buf, QueryToken::CARAT); + return true; + case '~': + if( _istdigit( reader->Peek() )!=0 ) { + TCHAR number[LUCENE_MAX_FIELD_LEN]; + ReadIntegerNumber(ch, number,LUCENE_MAX_FIELD_LEN); + token->set(number, QueryToken::SLOP); + return true; + }else{ + token->set(buf, QueryToken::FUZZY); + return true; + } + break; + case '"': + return ReadQuoted(ch, token); + case '[': + return ReadInclusiveRange(ch, token); + case '{': + return ReadExclusiveRange(ch, token); + case ']': + case '}': + case '*': + queryparser->throwParserException( _T("Unrecognized char %d at %d::%d."), + ch, reader->Column(), reader->Line() ); + return false; + default: + return ReadTerm(ch, token); + + // end of swith + } + + } + return false; +} + + +void Lexer::ReadIntegerNumber(const TCHAR ch, TCHAR* buf, int buflen) { + int bp=0; + buf[bp++] = ch; + + int c = reader->Peek(); + while( c!=-1 && _istdigit(c)!=0 && bpGetNext(); + c = reader->Peek(); + } + buf[bp++] = 0; +} + + +bool Lexer::ReadInclusiveRange(const TCHAR prev, QueryToken* token) { + int ch = prev; + StringBuffer range; + range.appendChar(ch); + + while(!reader->Eos()) { + ch = reader->GetNext(); + if ( ch == -1 ) + break; + range.appendChar(ch); + + if(ch == ']'){ + token->set(range.getBuffer(), QueryToken::RANGEIN); + return true; + } + } + queryparser->throwParserException(_T("Unterminated inclusive range! %d %d::%d"),' ', + reader->Column(),reader->Column()); + return false; +} + + +bool Lexer::ReadExclusiveRange(const TCHAR prev, QueryToken* token) { + int ch = prev; + StringBuffer range; + range.appendChar(ch); + + while(!reader->Eos()) { + ch = reader->GetNext(); + + if (ch==-1) + break; + range.appendChar(ch); + + if(ch == '}'){ + token->set(range.getBuffer(), QueryToken::RANGEEX); + return true; + } + } + queryparser->throwParserException(_T("Unterminated exclusive range! %d %d::%d"),' ', + reader->Column(),reader->Column() ); + return false; +} + +bool Lexer::ReadQuoted(const TCHAR prev, QueryToken* token) { + int ch = prev; + StringBuffer quoted; + quoted.appendChar(ch); + + while(!reader->Eos()) { + ch = reader->GetNext(); + + if (ch==-1) + break; + + quoted.appendChar(ch); + + if(ch == '"'){ + token->set(quoted.getBuffer(), QueryToken::QUOTED); + return true; + } + } + queryparser->throwParserException(_T("Unterminated string! %d %d::%d"),' ', + reader->Column(),reader->Column()); + return false; +} + + +bool Lexer::ReadTerm(const TCHAR prev, QueryToken* token) { + int ch = prev; + bool completed = false; + int32_t asteriskCount = 0; + bool hasQuestion = false; + + StringBuffer val; + TCHAR buf[3]; //used for readescaped + + while(true) { + switch(ch) { + case -1: + break; + case '\\': + { + if ( ReadEscape(ch, buf) ) + val.append( buf ); + else + return false; + } + break; + + case LUCENE_WILDCARDTERMENUM_WILDCARD_STRING: + asteriskCount++; + val.appendChar(ch); + break; + case LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR: + hasQuestion = true; + val.appendChar(ch); + break; + case '\n': + case '\t': + case ' ': + case '+': + case '-': + case '!': + case '(': + case ')': + case ':': + case '^': + case '[': + case ']': + case '{': + case '}': + case '~': + case '"': + // create new QueryToken + reader->UnGet(); + completed = true; + break; + default: + val.appendChar(ch); + break; + // end of switch + } + + if(completed || ch==-1 || reader->Eos() ) + break; + else + ch = reader->GetNext(); + } + + // create new QueryToken + if(hasQuestion) + token->set(val.getBuffer(), QueryToken::WILDTERM); + else if(asteriskCount == 1 && val.getBuffer()[val.length() - 1] == '*') + token->set(val.getBuffer(), QueryToken::PREFIXTERM); + else if(asteriskCount > 0) + token->set(val.getBuffer(), QueryToken::WILDTERM); + else if( _tcsicmp(val.getBuffer(), _T("AND"))==0 || _tcscmp(val.getBuffer(), _T("&&"))==0 ) + token->set(val.getBuffer(), QueryToken::AND_); + else if( _tcsicmp(val.getBuffer(), _T("OR"))==0 || _tcscmp(val.getBuffer(), _T("||"))==0) + token->set(val.getBuffer(), QueryToken::OR); + else if( _tcsicmp(val.getBuffer(), _T("NOT"))==0 ) + token->set(val.getBuffer(), QueryToken::NOT); + else { + bool isnum = true; + int32_t nlen=val.length(); + for (int32_t i=0;iset(val.getBuffer(), QueryToken::NUMBER); + else + token->set(val.getBuffer(), QueryToken::TERM); + } + return true; +} + + +bool Lexer::ReadEscape(TCHAR prev, TCHAR* buf) { + TCHAR ch = prev; + int bp=0; + buf[bp++] = ch; + + ch = reader->GetNext(); + int32_t idx = _tcscspn( buf, _T("\\+-!():^[]{}\"~*") ); + if(idx == 0) { + buf[bp++] = ch; + buf[bp++]=0; + return true; + } + queryparser->throwParserException(_T("Unrecognized escape sequence at %d %d::%d"), ' ', + reader->Column(),reader->Line()); + return false; +} + + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/_Lexer.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/_Lexer.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/_Lexer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/_Lexer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,65 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_legacy_Lexer_ +#define _lucene_queryParser_legacy_Lexer_ + + +CL_CLASS_DEF(util,FastCharStream) +CL_CLASS_DEF(util,BufferedReader) +CL_CLASS_DEF(util,StringBuffer) + +//#include "TokenList.h" +class QueryToken; +class TokenList; +class QueryParserBase; + +CL_NS_DEF2(queryParser,legacy) + + // A simple Lexer that is used by QueryParser. + class Lexer:LUCENE_BASE + { + private: + CL_NS(util)::FastCharStream* reader; + QueryParserBase* queryparser; //holds the queryparser so that we can do callbacks + bool delSR; //Indicates if the reader must be deleted or not + + public: + // Initializes a new instance of the Lexer class with the specified + // query to lex. + Lexer(QueryParserBase* queryparser, const TCHAR* query); + + // Initializes a new instance of the Lexer class with the specified + // TextReader to lex. + Lexer(QueryParserBase* queryparser, CL_NS(util)::BufferedReader* source); + + //Breaks the input stream onto the tokens list tokens + void Lex(TokenList *tokens); + + ~Lexer(); + + private: + bool GetNextToken(QueryToken* token); + + // Reads an integer number. buf should quite large, probably as large as a field should ever be + void ReadIntegerNumber(const TCHAR ch, TCHAR* buf, int buflen); + + // Reads an inclusive range like [some words] + bool ReadInclusiveRange(const TCHAR prev, QueryToken* token); + + // Reads an exclusive range like {some words} + bool ReadExclusiveRange(const TCHAR prev, QueryToken* token); + + // Reads quoted string like "something else" + bool ReadQuoted(const TCHAR prev, QueryToken* token); + + bool ReadTerm(const TCHAR prev, QueryToken* token); + + //reads an escaped character into the buf. Buf requires at least 3 characters + bool ReadEscape(const TCHAR prev, TCHAR* buf); + }; +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/MultiFieldQueryParser.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/MultiFieldQueryParser.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/MultiFieldQueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/MultiFieldQueryParser.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,216 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MultiFieldQueryParser.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/BooleanClause.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/SearchHeader.h" +#include "QueryParser.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(search) +CL_NS_USE(analysis) + +CL_NS_DEF2(queryParser,legacy) + +MultiFieldQueryParser::MultiFieldQueryParser(const TCHAR** fields, CL_NS(analysis)::Analyzer* a, BoostMap* boosts): + QueryParser(NULL,a) +{ + this->fields = fields; + this->boosts = boosts; +} +MultiFieldQueryParser::~MultiFieldQueryParser(){ +} + +//static +Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** fields, Analyzer* analyzer) +{ + BooleanQuery* bQuery = _CLNEW BooleanQuery( true ); + int32_t i = 0; + while ( fields[i] != NULL ){ + Query* q = QueryParser::parse(query, fields[i], analyzer); + if (q && ( !q->instanceOf(BooleanQuery::getClassName()) || ((BooleanQuery*)q)->getClauseCount() > 0)) { + //todo: Move to using BooleanClause::Occur + bQuery->add(q, true, false, false); + } else { + _CLDELETE(q); + } + + i++; + } + return bQuery; +} + +//static +Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** fields, const uint8_t* flags, Analyzer* analyzer) +{ + BooleanQuery* bQuery = _CLNEW BooleanQuery( true ); + int32_t i = 0; + while ( fields[i] != NULL ) + { + Query* q = QueryParser::parse(query, fields[i], analyzer); + if (q && ( !q->instanceOf(BooleanQuery::getClassName()) || ((BooleanQuery*)q)->getClauseCount() > 0)) { + uint8_t flag = flags[i]; + switch (flag) + { + //todo: Move to using BooleanClause::Occur + case MultiFieldQueryParser::REQUIRED_FIELD: + bQuery->add(q, true, true, false); + break; + case MultiFieldQueryParser::PROHIBITED_FIELD: + bQuery->add(q, true, false, true); + break; + default: + bQuery->add(q, true, false, false); + break; + } + } else { + _CLDELETE(q); + } + + i++; + } + return bQuery; +} + +//not static +CL_NS(search)::Query* MultiFieldQueryParser::parse(const TCHAR* query) { + return parse(query, this->fields, this->analyzer); +} + +Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::GetFieldQuery(fields[i], queryText); + if (q != NULL) { + //If the user passes a map of boosts + if (boosts != NULL) { + //Get the boost from the map and apply them + BoostMap::iterator itr = boosts->find( fields[i]); + if (itr != boosts->end()) { + q->setBoost(itr->second); + } + } + if (q->instanceOf(PhraseQuery::getClassName()) ) { + ((PhraseQuery*)q)->setSlop(slop); + } + //if (q instanceof MultiPhraseQuery) { + // ((MultiPhraseQuery) q).setSlop(slop); + //} + q = QueryAddedCallback(fields[i], q); + if ( q ) + clauses.push_back(_CLNEW BooleanClause(q, true, false,false)); + } + } + if (clauses.size() == 0) // happens for stopwords + return NULL; + Query* q = QueryParser::GetBooleanQuery(clauses); + return q; + }else{ + Query* q = QueryParser::GetFieldQuery(field, queryText); + if ( q ) + q = QueryAddedCallback(field,q); + return q; + } +} + + +Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText){ + return GetFieldQuery(field, queryText, 0); +} + + +CL_NS(search)::Query* MultiFieldQueryParser::GetFuzzyQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::GetFuzzyQuery(fields[i], termStr); //todo: , minSimilarity + if ( q ){ + q = QueryAddedCallback(fields[i], q); + if ( q ){ + clauses.push_back(_CLNEW BooleanClause(q,true,false,false) ); + } + } + } + return QueryParser::GetBooleanQuery(clauses); + }else{ + Query* q = QueryParser::GetFuzzyQuery(field, termStr);//todo: , minSimilarity + if ( q ) + q = QueryAddedCallback(field,q); + return q; + } +} + +Query* MultiFieldQueryParser::GetPrefixQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::GetPrefixQuery(fields[i], termStr); + if ( q ){ + q = QueryAddedCallback(fields[i],q); + if ( q ){ + clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); + } + } + } + return QueryParser::GetBooleanQuery(clauses); + }else{ + Query* q = QueryParser::GetPrefixQuery(field, termStr); + if ( q ) + q = QueryAddedCallback(field,q); + return q; + } +} + +Query* MultiFieldQueryParser::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::GetWildcardQuery(fields[i], termStr); + if ( q ){ + q = QueryAddedCallback(fields[i],q); + if ( q ){ + clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); + } + } + } + return QueryParser::GetBooleanQuery(clauses); + }else{ + Query* q = QueryParser::GetWildcardQuery(field, termStr); + if ( q ) + q = QueryAddedCallback(field,q); + return q; + } +} + + +Query* MultiFieldQueryParser::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::GetRangeQuery(fields[i], part1, part2, inclusive); + if ( q ){ + q = QueryAddedCallback(fields[i],q); + if ( q ){ + clauses.push_back(_CLNEW BooleanClause(q,true,false,false)); + } + } + } + return QueryParser::GetBooleanQuery(clauses); + }else{ + Query* q = QueryParser::GetRangeQuery(field, part1, part2, inclusive); + if ( q ) + q = QueryAddedCallback(field,q); + return q; + } +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/MultiFieldQueryParser.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/MultiFieldQueryParser.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/MultiFieldQueryParser.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/MultiFieldQueryParser.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,131 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_legacy_MultiFieldQueryParser +#define _lucene_queryParser_legacy_MultiFieldQueryParser + +#include "QueryParser.h" +#include "CLucene/util/VoidMap.h" + +CL_NS_DEF2(queryParser,legacy) + + typedef CL_NS(util)::CLHashMap BoostMap; + + /** + * A QueryParser which constructs queries to search multiple fields. + * + */ + class CLUCENE_EXPORT MultiFieldQueryParser: public QueryParser + { + protected: + const TCHAR** fields; + BoostMap* boosts; + public: + LUCENE_STATIC_CONSTANT(uint8_t, NORMAL_FIELD=0); + LUCENE_STATIC_CONSTANT(uint8_t, REQUIRED_FIELD=1); + LUCENE_STATIC_CONSTANT(uint8_t, PROHIBITED_FIELD=2); + + /** + * Creates a MultiFieldQueryParser. + * + *

It will, when parse(String query) + * is called, construct a query like this (assuming the query consists of + * two terms and you specify the two fields title and body):

+ * + * + * (title:term1 body:term1) (title:term2 body:term2) + * + * + *

When setDefaultOperator(AND_OPERATOR) is set, the result will be:

+ * + * + * +(title:term1 body:term1) +(title:term2 body:term2) + * + * + *

In other words, all the query's terms must appear, but it doesn't matter in + * what fields they appear.

+ */ + MultiFieldQueryParser(const TCHAR** fields, CL_NS(analysis)::Analyzer* a, BoostMap* boosts = NULL); + virtual ~MultiFieldQueryParser(); + + /** + *

+ * Parses a query which searches on the fields specified. + *

+ * If x fields are specified, this effectively constructs: + *

+     * 
+     * (field1:query) (field2:query) (field3:query)...(fieldx:query)
+     * 
+     * 
+ * + * @param query Query string to parse + * @param fields Fields to search on + * @param analyzer Analyzer to use + * @throws ParserException if query parsing fails + * @throws TokenMgrError if query parsing fails + */ + static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** fields, CL_NS(analysis)::Analyzer* analyzer); + + /** + *

+ * Parses a query, searching on the fields specified. + * Use this if you need to specify certain fields as required, + * and others as prohibited. + *

+     * Usage:
+     * 
+     * TCHAR** fields = {"filename", "contents", "description"};
+     * int8_t* flags = {MultiFieldQueryParser::NORMAL FIELD,
+     *                MultiFieldQueryParser::REQUIRED FIELD,
+     *                MultiFieldQueryParser::PROHIBITED FIELD};
+     * parse(query, fields, flags, analyzer);
+     * 
+     * 
+ *

+ * The code above would construct a query: + *

+     * 
+     * (filename:query) +(contents:query) -(description:query)
+     * 
+     * 
+ * + * @param query Query string to parse + * @param fields Fields to search on + * @param flags Flags describing the fields + * @param analyzer Analyzer to use + * @throws ParserException if query parsing fails + * @throws TokenMgrError if query parsing fails + */ + static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** fields, const uint8_t* flags, CL_NS(analysis)::Analyzer* analyzer); + + // non-static version of the above + CL_NS(search)::Query* parse(const TCHAR* query); + + protected: + CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText); + CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop); + CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field, TCHAR* termStr); + CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive); + CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field, TCHAR* termStr); + CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr); + + /** + * A special virtual function for the MultiFieldQueryParser which can be used + * to clean up queries. Once the field name is known and the query has been + * created, its passed to this function. + * An example of this usage is to set boosts. + */ + virtual CL_NS(search)::Query* QueryAddedCallback(const TCHAR* field, CL_NS(search)::Query* query){ return query; } + }; +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryParserBase.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryParserBase.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryParserBase.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryParserBase.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,384 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryParser.h" + +#include "CLucene/search/TermQuery.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/RangeQuery.h" +#include "CLucene/search/FuzzyQuery.h" +#include "CLucene/search/WildcardQuery.h" +#include "CLucene/search/PrefixQuery.h" +#include "CLucene/search/BooleanQuery.h" + +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/BooleanClause.h" +#include "CLucene/search/Query.h" +#include "CLucene/index/Term.h" +#include "QueryToken.h" + +#include "_TokenList.h" +#include "_Lexer.h" + +CL_NS_USE(search) +CL_NS_USE(util) +CL_NS_USE(analysis) +CL_NS_USE(index) + +CL_NS_DEF2(queryParser,legacy) + +QueryParserBase::QueryParserBase(Analyzer* analyzer){ +//Func - Constructor +//Pre - true +//Post - instance has been created with PhraseSlop = 0 + this->analyzer = analyzer; + this->defaultOperator = OR_OPERATOR; + this->phraseSlop = 0; + this->lowercaseExpandedTerms = true; +} + +QueryParserBase::~QueryParserBase(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed +} + + +void QueryParserBase::discardEscapeChar(TCHAR* source) const{ + int len = _tcslen(source); + for (int i = 0; i < len; i++) { + if (source[i] == '\\' && source[i+1] != '\0' ) { + _tcscpy(source+i,source+i+1); + len--; + } + } +} + +void QueryParserBase::AddClause(std::vector& clauses, int32_t conj, int32_t mods, Query* q){ +//Func - Adds the next parsed clause. +//Pre - +//Post - + + bool required, prohibited; + + // If this term is introduced by AND, make the preceding term required, + // unless it's already prohibited. + const uint32_t nPreviousClauses = clauses.size(); + if (nPreviousClauses > 0 && conj == CONJ_AND) { + BooleanClause* c = clauses[nPreviousClauses-1]; + if (!c->prohibited) + c->required = true; + } + + if (nPreviousClauses > 0 && defaultOperator == AND_OPERATOR && conj == CONJ_OR) { + // If this term is introduced by OR, make the preceding term optional, + // unless it's prohibited (that means we leave -a OR b but +a OR b-->a OR b) + // notice if the input is a OR b, first term is parsed as required; without + // this modification a OR b would parse as +a OR b + BooleanClause* c = clauses[nPreviousClauses-1]; + if (!c->prohibited){ + c->required = false; + c->prohibited = false; + } + } + + // We might have been passed a NULL query; the term might have been + // filtered away by the analyzer. + if (q == NULL) + return; + + if (defaultOperator == OR_OPERATOR) { + // We set REQUIRED if we're introduced by AND or +; PROHIBITED if + // introduced by NOT or -; make sure not to set both. + prohibited = (mods == MOD_NOT); + required = (mods == MOD_REQ); + if (conj == CONJ_AND && !prohibited) { + required = true; + } + } else { + // We set PROHIBITED if we're introduced by NOT or -; We set REQUIRED + // if not PROHIBITED and not introduced by OR + prohibited = (mods == MOD_NOT); + required = (!prohibited && conj != CONJ_OR); + } + + if ( required && prohibited ) + throwParserException( _T("Clause cannot be both required and prohibited"), ' ',0,0); + clauses.push_back(_CLNEW BooleanClause(q,true, required, prohibited)); +} + +void QueryParserBase::throwParserException(const TCHAR* message, TCHAR ch, int32_t col, int32_t line ) +{ + TCHAR msg[1024]; + _sntprintf(msg,1024,message,ch,col,line); + _CLTHROWT (CL_ERR_Parse, msg ); +} + + +Query* QueryParserBase::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){ + Query* ret = GetFieldQuery(field,queryText); + if ( ret && ret->instanceOf(PhraseQuery::getClassName()) ) + ((PhraseQuery*)ret)->setSlop(slop); + + return ret; +} + +Query* QueryParserBase::GetFieldQuery(const TCHAR* field, TCHAR* queryText){ +//Func - Returns a query for the specified field. +// Use the analyzer to get all the tokens, and then build a TermQuery, +// PhraseQuery, or nothing based on the term count +//Pre - field != NULL +// analyzer contains a valid reference to an Analyzer +// queryText != NULL and contains the query +//Post - A query instance has been returned for the specified field + + CND_PRECONDITION(field != NULL, "field is NULL"); + CND_PRECONDITION(queryText != NULL, "queryText is NULL"); + + //Instantiate a stringReader for queryText + StringReader reader(queryText); + TokenStream* source = analyzer->tokenStream(field, &reader); + CND_CONDITION(source != NULL,"source is NULL"); + + StringArrayWithDeletor v; + + Token t; + int positionCount = 0; + bool severalTokensAtSamePosition = false; + + //Get the tokens from the source + try{ + while (source->next(&t)){ + v.push_back(STRDUP_TtoT(t.termBuffer())); + + if (t.getPositionIncrement() != 0) + positionCount += t.getPositionIncrement(); + else + severalTokensAtSamePosition = true; + } + }catch(CLuceneError& err){ + if ( err.number() != CL_ERR_IO ) { + _CLLDELETE(source); + throw err; + } + } + _CLDELETE(source); + + //Check if there are any tokens retrieved + if (v.size() == 0){ + return NULL; + }else{ + if (v.size() == 1){ + Term* t = _CLNEW Term(field, v[0]); + Query* ret = _CLNEW TermQuery( t ); + _CLDECDELETE(t); + return ret; + }else{ + if (severalTokensAtSamePosition) { + if (positionCount == 1) { + // no phrase query: + BooleanQuery* q = _CLNEW BooleanQuery( true ); //todo: disableCoord=true here, but not implemented in BooleanQuery + StringArray::iterator itr = v.begin(); + while ( itr != v.end() ){ + Term* t = _CLNEW Term(field, *itr); + q->add(_CLNEW TermQuery(t),true, false,false);//should occur... + _CLDECDELETE(t); + ++itr; + } + return q; + }else { + _CLTHROWA(CL_ERR_UnsupportedOperation, "MultiPhraseQuery NOT Implemented"); + } + }else{ + PhraseQuery* q = _CLNEW PhraseQuery; + q->setSlop(phraseSlop); + + StringArrayWithDeletor::iterator itr = v.begin(); + while ( itr != v.end() ){ + const TCHAR* data = *itr; + Term* t = _CLNEW Term(field, data); + q->add(t); + _CLDECDELETE(t); + ++itr; + } + return q; + } + } + } +} + +void QueryParserBase::setLowercaseExpandedTerms(bool lowercaseExpandedTerms){ + this->lowercaseExpandedTerms = lowercaseExpandedTerms; +} +bool QueryParserBase::getLowercaseExpandedTerms() const { + return lowercaseExpandedTerms; +} +void QueryParserBase::setDefaultOperator(int oper){ + this->defaultOperator=oper; +} +int QueryParserBase::getDefaultOperator() const{ + return defaultOperator; +} + + +Query* QueryParserBase::ParseRangeQuery(const TCHAR* field, TCHAR* queryText, bool inclusive) +{ + //todo: this must be fixed, [-1--5] (-1 to -5) should yield a result, but won't parse properly + //because it uses an analyser, should split it up differently... + + // Use the analyzer to get all the tokens. There should be 1 or 2. + StringReader reader(queryText); + TokenStream* source = analyzer->tokenStream(field, &reader); + + TCHAR* terms[2]; + terms[0]=NULL;terms[1]=NULL; + Token t; + bool tret=false; + bool from=true; + do + { + try{ + tret = (source->next(&t) != NULL); + }catch (CLuceneError& err){ + if ( err.number() == CL_ERR_IO ) + tret=false; + else + throw err; + } + if (tret) + { + if ( !from && _tcscmp(t.termBuffer(),_T("TO"))==0 ) + continue; + + + TCHAR* tmp = STRDUP_TtoT(t.termBuffer()); + discardEscapeChar(tmp); + terms[from? 0 : 1] = tmp; + + if (from) + from = false; + else + break; + } + }while(tret); + if ((terms[0] == NULL) || (terms[1] == NULL)) { + _CLTHROWA(CL_ERR_Parse, "No range given."); + } + Query* ret = GetRangeQuery(field, terms[0], terms[1],inclusive); + _CLDELETE_CARRAY(terms[0]); + _CLDELETE_CARRAY(terms[1]); + _CLDELETE(source); + + return ret; +} + +Query* QueryParserBase::GetPrefixQuery(const TCHAR* field, TCHAR* termStr){ +//Pre - field != NULL and field contains the name of the field that the query will use +// termStr != NULL and is the token to use for building term for the query +// (WITH or WITHOUT a trailing '*' character!) +//Post - A PrefixQuery instance has been returned + + CND_PRECONDITION(field != NULL,"field is NULL"); + CND_PRECONDITION(termStr != NULL,"termStr is NULL"); + + if ( lowercaseExpandedTerms ) + _tcslwr(termStr); + + Term* t = _CLNEW Term(field, termStr); + CND_CONDITION(t != NULL,"Could not allocate memory for term t"); + + Query *q = _CLNEW PrefixQuery(t); + CND_CONDITION(q != NULL,"Could not allocate memory for PrefixQuery q"); + + _CLDECDELETE(t); + return q; +} + +Query* QueryParserBase::GetFuzzyQuery(const TCHAR* field, TCHAR* termStr){ +//Func - Factory method for generating a query (similar to getPrefixQuery}). Called when parser parses +// an input term token that has the fuzzy suffix (~) appended. +//Pre - field != NULL and field contains the name of the field that the query will use +// termStr != NULL and is the token to use for building term for the query +// (WITH or WITHOUT a trailing '*' character!) +//Post - A FuzzyQuery instance has been returned + + CND_PRECONDITION(field != NULL,"field is NULL"); + CND_PRECONDITION(termStr != NULL,"termStr is NULL"); + + if ( lowercaseExpandedTerms ) + _tcslwr(termStr); + + Term* t = _CLNEW Term(field, termStr); + CND_CONDITION(t != NULL,"Could not allocate memory for term t"); + + Query *q = _CLNEW FuzzyQuery(t); + CND_CONDITION(q != NULL,"Could not allocate memory for FuzzyQuery q"); + + _CLDECDELETE(t); + return q; +} + + +Query* QueryParserBase::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){ + CND_PRECONDITION(field != NULL,"field is NULL"); + CND_PRECONDITION(termStr != NULL,"termStr is NULL"); + + if ( lowercaseExpandedTerms ) + _tcslwr(termStr); + + Term* t = _CLNEW Term(field, termStr); + CND_CONDITION(t != NULL,"Could not allocate memory for term t"); + Query* q = _CLNEW WildcardQuery(t); + _CLDECDELETE(t); + + return q; +} + +Query* QueryParserBase::GetBooleanQuery(std::vector& clauses ) { + return GetBooleanQuery( clauses, false ); +} + +Query* QueryParserBase::GetBooleanQuery(std::vector& clauses, bool disableCoord){ + if ( clauses.size() == 0 ) + return NULL; + + BooleanQuery* query = _CLNEW BooleanQuery( disableCoord ); + //Condition check to see if query has been allocated properly + CND_CONDITION(query != NULL, "No memory could be allocated for query"); + + //iterate through all the clauses + for( uint32_t i=0;iadd(clauses[i]); + } + return query; +} + + +CL_NS(search)::Query* QueryParserBase::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){ + //todo: does jlucene handle rangequeries differntly? if we are using + //a certain type of analyser, the terms may be filtered out, which + //is not necessarily what we want. + if (lowercaseExpandedTerms) { + _tcslwr(part1); + _tcslwr(part2); + } + //todo: should see if we can parse the strings as dates... currently we leave that up to the end-developer... + Term* t1 = _CLNEW Term(field,part1); + Term* t2 = _CLNEW Term(field,part2); + Query* ret = _CLNEW RangeQuery(t1, t2, inclusive); + _CLDECDELETE(t1); + _CLDECDELETE(t2); + + return ret; +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryParser.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryParser.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryParser.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,507 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryParser.h" + +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/BooleanClause.h" +#include "CLucene/search/Query.h" +#include "CLucene/index/Term.h" +#include "QueryToken.h" + +#include "_TokenList.h" +#include "_Lexer.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_USE(analysis) +CL_NS_USE(search) + +CL_NS_DEF2(queryParser,legacy) + + QueryParser::QueryParser(const TCHAR* _field, Analyzer* _analyzer) : QueryParserBase(_analyzer){ + //Func - Constructor. + // Instantiates a QueryParser for the named field _field + //Pre - _field != NULL + //Post - An instance has been created + + if ( _field ) + field = STRDUP_TtoT(_field); + else + field = NULL; + tokens = NULL; + lowercaseExpandedTerms = true; + } + + QueryParser::~QueryParser() { + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + _CLDELETE_CARRAY(field); + } + + //static + Query* QueryParser::parse(const TCHAR* query, const TCHAR* field, Analyzer* analyzer){ + //Func - Returns a new instance of the Query class with a specified query, field and + // analyzer values. + //Pre - query != NULL and holds the query to parse + // field != NULL and holds the default field for query terms + // analyzer holds a valid reference to an Analyzer and is used to + // find terms in the query text + //Post - query has been parsed and an instance of Query has been returned + + CND_PRECONDITION(query != NULL, "query is NULL"); + CND_PRECONDITION(field != NULL, "field is NULL"); + + QueryParser parser(field, analyzer); + return parser.parse(query); + } + + Query* QueryParser::parse(const TCHAR* query){ + //Func - Returns a parsed Query instance + //Pre - query != NULL and contains the query value to be parsed + //Post - Returns a parsed Query Instance + + CND_PRECONDITION(query != NULL, "query is NULL"); + + //Instantie a Stringer that can read the query string + BufferedReader* r = _CLNEW StringReader(query); + + //Check to see if r has been created properly + CND_CONDITION(r != NULL, "Could not allocate memory for StringReader r"); + + //Pointer for the return value + Query* ret = NULL; + + try{ + //Parse the query managed by the StringReader R and return a parsed Query instance + //into ret + ret = parse(r); + }_CLFINALLY ( + _CLDELETE(r); + ); + + return ret; + } + + Query* QueryParser::parse(BufferedReader* reader){ + //Func - Returns a parsed Query instance + //Pre - reader contains a valid reference to a Reader and manages the query string + //Post - A parsed Query instance has been returned or + + //instantiate the TokenList tokens + TokenList _tokens; + this->tokens = &_tokens; + + //Instantiate a lexer + Lexer lexer(this, reader); + + //tokens = lexer.Lex(); + //Lex the tokens + lexer.Lex(tokens); + + //Peek to the first token and check if is an EOF + if (tokens->peek()->Type == QueryToken::EOF_){ + // The query string failed to yield any tokens. We discard the + // TokenList tokens and raise an exceptioin. + QueryToken* token = this->tokens->extract(); + _CLDELETE(token); + _CLTHROWA(CL_ERR_Parse, "No query given."); + } + + //Return the parsed Query instance + Query* ret = MatchQuery(field); + this->tokens = NULL; + return ret; + } + + int32_t QueryParser::MatchConjunction(){ + //Func - matches for CONJUNCTION + // CONJUNCTION ::= | + //Pre - tokens != NULL + //Post - if the first token is an AND or an OR then + // the token is extracted and deleted and CONJ_AND or CONJ_OR is returned + // otherwise CONJ_NONE is returned + + CND_PRECONDITION(tokens != NULL, "tokens is NULL"); + + switch(tokens->peek()->Type){ + case QueryToken::AND_ : + //Delete the first token of tokenlist + ExtractAndDeleteToken(); + return CONJ_AND; + case QueryToken::OR : + //Delete the first token of tokenlist + ExtractAndDeleteToken(); + return CONJ_OR; + default : + return CONJ_NONE; + } + } + + int32_t QueryParser::MatchModifier(){ + //Func - matches for MODIFIER + // MODIFIER ::= | | + //Pre - tokens != NULL + //Post - if the first token is a PLUS the token is extracted and deleted and MOD_REQ is returned + // if the first token is a MINUS or NOT the token is extracted and deleted and MOD_NOT is returned + // otherwise MOD_NONE is returned + CND_PRECONDITION(tokens != NULL, "tokens is NULL"); + + switch(tokens->peek()->Type){ + case QueryToken::PLUS : + //Delete the first token of tokenlist + ExtractAndDeleteToken(); + return MOD_REQ; + case QueryToken::MINUS : + case QueryToken::NOT : + //Delete the first token of tokenlist + ExtractAndDeleteToken(); + return MOD_NOT; + default : + return MOD_NONE; + } + } + + Query* QueryParser::MatchQuery(const TCHAR* field){ + //Func - matches for QUERY + // QUERY ::= [MODIFIER] QueryParser::CLAUSE ( [MODIFIER] CLAUSE)* + //Pre - field != NULL + //Post - + + CND_PRECONDITION(tokens != NULL, "tokens is NULL"); + + vector clauses; + + Query* q = NULL; + + int32_t mods = MOD_NONE; + int32_t conj = CONJ_NONE; + + //match for MODIFIER + mods = MatchModifier(); + + //match for CLAUSE + q = MatchClause(field); + AddClause(clauses, CONJ_NONE, mods, q); + + // match for CLAUSE* + while(true){ + QueryToken* p = tokens->peek(); + if(p->Type == QueryToken::EOF_){ + QueryToken* qt = MatchQueryToken(QueryToken::EOF_); + _CLDELETE(qt); + break; + } + + if(p->Type == QueryToken::RPAREN){ + //MatchQueryToken(QueryToken::RPAREN); + break; + } + + //match for a conjuction (AND OR NOT) + conj = MatchConjunction(); + //match for a modifier + mods = MatchModifier(); + + q = MatchClause(field); + if ( q != NULL ) + AddClause(clauses, conj, mods, q); + } + + // finalize query + if(clauses.size() == 1){ //bvk: removed this && firstQuery != NULL + BooleanClause* c = clauses[0]; + Query* q = c->getQuery(); + + //Condition check to be sure clauses[0] is valid + CND_CONDITION(c != NULL, "c is NULL"); + + //Tell the boolean clause not to delete its query + c->deleteQuery=false; + //Clear the clauses list + clauses.clear(); + _CLDELETE(c); + + return q; + }else{ + return GetBooleanQuery(clauses); + } + } + + Query* QueryParser::MatchClause(const TCHAR* field){ + //Func - matches for CLAUSE + // CLAUSE ::= [TERM ] ( TERM | ( QUERY )) + //Pre - field != NULL + //Post - + + Query* q = NULL; + const TCHAR* sfield = field; + TCHAR* tmp = NULL; + + QueryToken *DelToken = NULL; + + //match for [TERM ] + QueryToken* term = tokens->extract(); + if(term->Type == QueryToken::TERM && tokens->peek()->Type == QueryToken::COLON){ + DelToken = MatchQueryToken(QueryToken::COLON); + + CND_CONDITION(DelToken != NULL,"DelToken is NULL"); + _CLDELETE(DelToken); + + tmp = STRDUP_TtoT(term->Value); + discardEscapeChar(tmp); + sfield = tmp; + _CLDELETE(term); + }else{ + tokens->push(term); + term = NULL; + } + + // match for + // TERM | ( QUERY ) + if(tokens->peek()->Type == QueryToken::LPAREN){ + DelToken = MatchQueryToken(QueryToken::LPAREN); + + CND_CONDITION(DelToken != NULL,"DelToken is NULL"); + _CLDELETE(DelToken); + + q = MatchQuery(sfield); + //DSR:2004.11.01: + //If exception is thrown while trying to match trailing parenthesis, + //need to prevent q from leaking. + + try{ + DelToken = MatchQueryToken(QueryToken::RPAREN); + + CND_CONDITION(DelToken != NULL,"DelToken is NULL"); + _CLDELETE(DelToken); + + }catch(...) { + _CLDELETE(q); + throw; + } + }else{ + q = MatchTerm(sfield); + } + + _CLDELETE_CARRAY(tmp); + return q; + } + + + Query* QueryParser::MatchTerm(const TCHAR* field){ + //Func - matches for TERM + // TERM ::= TERM | PREFIXTERM | WILDTERM | NUMBER + // [ ] [ []] + // | ( | ) [ ] + // | [SLOP] [ ] + //Pre - field != NULL + //Post - + + QueryToken* term = NULL; + QueryToken* slop = NULL; + QueryToken* boost = NULL; + + bool prefix = false; + bool wildcard = false; + bool fuzzy = false; + bool rangein = false; + Query* q = NULL; + + term = tokens->extract(); + QueryToken* DelToken = NULL; //Token that is about to be deleted + + switch(term->Type){ + case QueryToken::TERM: + case QueryToken::NUMBER: + case QueryToken::PREFIXTERM: + case QueryToken::WILDTERM: + { //start case + //Check if type of QueryToken term is a prefix term + if(term->Type == QueryToken::PREFIXTERM){ + prefix = true; + } + //Check if type of QueryToken term is a wildcard term + if(term->Type == QueryToken::WILDTERM){ + wildcard = true; + } + //Peek to see if the type of the next token is fuzzy term + if(tokens->peek()->Type == QueryToken::FUZZY){ + DelToken = MatchQueryToken(QueryToken::FUZZY); + + CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); + _CLDELETE(DelToken); + + fuzzy = true; + } + if(tokens->peek()->Type == QueryToken::CARAT){ + DelToken = MatchQueryToken(QueryToken::CARAT); + + CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); + _CLDELETE(DelToken); + + boost = MatchQueryToken(QueryToken::NUMBER); + + if(tokens->peek()->Type == QueryToken::FUZZY){ + DelToken = MatchQueryToken(QueryToken::FUZZY); + + CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); + _CLDELETE(DelToken); + + fuzzy = true; + } + } //end if type==CARAT + + discardEscapeChar(term->Value); //clean up + if(wildcard){ + q = GetWildcardQuery(field,term->Value); + break; + }else if(prefix){ + //Create a PrefixQuery + term->Value[_tcslen(term->Value)-1] = 0; //discard the * + q = GetPrefixQuery(field,term->Value); + break; + }else if(fuzzy){ + //Create a FuzzyQuery + + //Check if the last char is a ~ + if(term->Value[_tcslen(term->Value)-1] == '~'){ + //remove the ~ + term->Value[_tcslen(term->Value)-1] = '\0'; + } + + q = GetFuzzyQuery(field,term->Value); + break; + }else{ + q = GetFieldQuery(field, term->Value); + break; + } + } + + + case QueryToken::RANGEIN: + case QueryToken::RANGEEX:{ + if(term->Type == QueryToken::RANGEIN){ + rangein = true; + } + + if(tokens->peek()->Type == QueryToken::CARAT){ + DelToken = MatchQueryToken(QueryToken::CARAT); + + CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); + _CLDELETE(DelToken); + + boost = MatchQueryToken(QueryToken::NUMBER); + } + + TCHAR* noBrackets = term->Value + 1; + noBrackets[_tcslen(noBrackets)-1] = 0; + q = ParseRangeQuery(field, noBrackets, rangein); + break; + } + + + case QueryToken::QUOTED:{ + if(tokens->peek()->Type == QueryToken::SLOP){ + slop = MatchQueryToken(QueryToken::SLOP); + } + + if(tokens->peek()->Type == QueryToken::CARAT){ + DelToken = MatchQueryToken(QueryToken::CARAT); + + CND_CONDITION(DelToken !=NULL, "DelToken is NULL"); + _CLDELETE(DelToken); + + boost = MatchQueryToken(QueryToken::NUMBER); + } + + //remove the quotes + TCHAR* quotedValue = term->Value+1; + quotedValue[_tcslen(quotedValue)-1] = '\0'; + + int32_t islop = phraseSlop; + if(slop != NULL ){ + try { + islop = _ttoi(slop->Value+1); + }catch(...){ + //ignored + } + } + + q = GetFieldQuery(field, quotedValue, islop); + _CLDELETE(slop); + } + + default: + break; + } // end of switch + + _CLDELETE(term); + + + if( q!=NULL && boost != NULL ){ + float_t f = 1.0F; + try { + f = _tcstod(boost->Value, NULL); + }catch(...){ + //ignored + } + _CLDELETE(boost); + + q->setBoost( f); + } + + return q; + } + + QueryToken* QueryParser::MatchQueryToken(QueryToken::Types expectedType){ + //Func - matches for QueryToken of the specified type and returns it + // otherwise Exception throws + //Pre - tokens != NULL + //Post - + + CND_PRECONDITION(tokens != NULL,"tokens is NULL"); + + if(tokens->count() == 0){ + throwParserException(_T("Error: Unexpected end of program"),' ',0,0); + } + + //Extract a token form the TokenList tokens + QueryToken* t = tokens->extract(); + //Check if the type of the token t matches the expectedType + if (expectedType != t->Type){ + TCHAR buf[200]; + _sntprintf(buf,200,_T("Error: Unexpected QueryToken: %d, expected: %d"),t->Type,expectedType); + _CLDELETE(t); + throwParserException(buf,' ',0,0); + } + + //Return the matched token + return t; + } + + void QueryParser::ExtractAndDeleteToken(void){ + //Func - Extracts the first token from the Tokenlist tokenlist + // and destroys it + //Pre - true + //Post - The first token has been extracted and destroyed + + CND_PRECONDITION(tokens != NULL, "tokens is NULL"); + + //Extract the token from the TokenList tokens + QueryToken* t = tokens->extract(); + //Condition Check Token may not be NULL + CND_CONDITION(t != NULL, "Token is NULL"); + //Delete Token + _CLDELETE(t); + } + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryParser.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryParser.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryParser.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryParser.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,336 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_legacy_QueryParser_ +#define _lucene_queryParser_legacy_QueryParser_ + + +//#include "CLucene/analysis/AnalysisHeader.h" +CL_CLASS_DEF(util,BufferedReader) +//#include "CLucene/search/SearchHeader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(search,Query) +CL_CLASS_DEF(search,BooleanClause) +CL_CLASS_DEF2(queryParser,legacy,TokenList) + +#include + +//#include "TokenList.h" +#include "QueryToken.h" +//#include "QueryParserBase.h" +//#include "Lexer.h" + +CL_NS_DEF2(queryParser,legacy) + + +/** +* Contains default implementations used by QueryParser. +* You can override any of these to provide a customised QueryParser. +*/ +class CLUCENE_EXPORT QueryParserBase:LUCENE_BASE +{ +protected: + /* The actual operator the parser uses to combine query terms */ + int defaultOperator; + int32_t phraseSlop; + + bool lowercaseExpandedTerms; + + LUCENE_STATIC_CONSTANT(int, CONJ_NONE=0); + LUCENE_STATIC_CONSTANT(int, CONJ_AND=1); + LUCENE_STATIC_CONSTANT(int, CONJ_OR=2); + + LUCENE_STATIC_CONSTANT(int, MOD_NONE=0); + LUCENE_STATIC_CONSTANT(int, MOD_NOT=10); + LUCENE_STATIC_CONSTANT(int, MOD_REQ=11); + + CL_NS(analysis)::Analyzer* analyzer; + +public: + QueryParserBase(CL_NS(analysis)::Analyzer* analyzer); + virtual ~QueryParserBase(); + + /** + * Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically + * lower-cased or not. Default is true. + */ + void setLowercaseExpandedTerms(bool lowercaseExpandedTerms); + + /** + * @see #setLowercaseExpandedTerms(boolean) + */ + bool getLowercaseExpandedTerms() const; + + //values used for setOperator + LUCENE_STATIC_CONSTANT(int, OR_OPERATOR=0); + LUCENE_STATIC_CONSTANT(int, AND_OPERATOR=1); + + /** + * Sets the boolean operator of the QueryParser. + * In default mode (OR_OPERATOR) terms without any modifiers + * are considered optional: for example capital of Hungary is equal to + * capital OR of OR Hungary.
+ * In AND_OPERATOR mode terms are considered to be in conjuction: the + * above mentioned query is parsed as capital AND of AND Hungary + */ + void setDefaultOperator(int oper); + /** + * Gets implicit operator setting, which will be either AND_OPERATOR + * or OR_OPERATOR. + */ + int getDefaultOperator() const; + + //public so that the lexer can call this + virtual void throwParserException(const TCHAR* message, TCHAR ch, int32_t col, int32_t line ); + + /** + * Sets the default slop for phrases. If zero, then exact phrase matches + * are required. Default value is zero. + */ + void setPhraseSlop(int phraseSlop) { this->phraseSlop = phraseSlop; } + + /** + * Gets the default slop for phrases. + */ + int getPhraseSlop() { return phraseSlop; } + +protected: + + /** + * Removes the escaped characters + */ + void discardEscapeChar(TCHAR* token) const; + + //Analyzes the expanded term termStr with the StandardFilter and the LowerCaseFilter. + TCHAR* AnalyzeExpandedTerm(const TCHAR* field, TCHAR* termStr); + + // Adds the next parsed clause. + virtual void AddClause(std::vector& clauses, int32_t conj, int32_t mods, CL_NS(search)::Query* q); + + /** + * Returns a termquery, phrasequery for the specified field. + * Note: this is only a partial implementation, since MultiPhraseQuery is not implemented yet + * return NULL to disallow + */ + virtual CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText); + + /** + * Delegates to GetFieldQuery(string, string), and adds slop onto phrasequery. + * Can be used to remove slop functionality + */ + virtual CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop); + + /** + * Factory method for generating a query (similar to + * {@link #GetWildcardQuery}). Called when parser parses an input term + * token that uses prefix notation; that is, contains a single '*' wildcard + * character as its last character. Since this is a special case + * of generic wildcard term, and such a query can be optimized easily, + * this usually results in a different query object. + *

+ * Depending on settings, a prefix term may be lower-cased + * automatically. It will not go through the default Analyzer, + * however, since normal Analyzers are unlikely to work properly + * with wildcard templates. + *

+ * Can be overridden by extending classes, to provide custom handling for + * wild card queries, which may be necessary due to missing analyzer calls. + * + * @param field Name of the field query will use. + * @param termStr Term token to use for building term for the query + * (without trailing '*' character!) + * + * @return Resulting {@link Query} built for the term + * return NULL to disallow + */ + virtual CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field, TCHAR* termStr); + + /** + * Factory method for generating a query. Called when parser + * parses an input term token that contains one or more wildcard + * characters (? and *), but is not a prefix term token (one + * that has just a single * character at the end) + *

+ * Depending on settings, prefix term may be lower-cased + * automatically. It will not go through the default Analyzer, + * however, since normal Analyzers are unlikely to work properly + * with wildcard templates. + *

+ * Can be overridden by extending classes, to provide custom handling for + * wildcard queries, which may be necessary due to missing analyzer calls. + * + * @param field Name of the field query will use. + * @param termStr Term token that contains one or more wild card + * characters (? or *), but is not simple prefix term + * + * @return Resulting {@link Query} built for the term + * return NULL to disallow + */ + virtual CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr); + + /** + * Factory method for generating a query (similar to + * {@link #GetWildcardQuery}). Called when parser parses + * an input term token that has the fuzzy suffix (~) appended. + * + * @param field Name of the field query will use. + * @param termStr Term token to use for building term for the query + * + * @return Resulting {@link Query} built for the term + * return NULL to disallow + */ + virtual CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field, TCHAR* termStr); + + /** + * Factory method for generating query, given a set of clauses. + * By default creates a boolean query composed of clauses passed in. + * + * Can be overridden by extending classes, to modify query being + * returned. + * + * @param clauses Vector that contains {@link BooleanClause} instances + * to join. + * + * @return Resulting {@link Query} object. + * return NULL to disallow + * + * @memory clauses must all be cleaned up by this function. + */ + virtual CL_NS(search)::Query* GetBooleanQuery(std::vector& clauses); + virtual CL_NS(search)::Query* GetBooleanQuery(std::vector& clauses, bool disableCoord ); + + /** + * return NULL to disallow + */ + virtual CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive); + virtual CL_NS(search)::Query* ParseRangeQuery(const TCHAR* field, TCHAR* str, bool inclusive); +}; + +/** +* @brief CLucene's default query parser. +* +*

It's a query parser. +* The only method that clients should need to call is Parse(). +* The syntax for query const TCHAR*s is as follows: +* A Query is a series of clauses. A clause may be prefixed by:

+*
    +*
  • a plus (+) or a minus (-) sign, indicating that the +* clause is required or prohibited respectively; or
  • +*
  • a term followed by a colon, indicating the field to be searched. +* This enables one to construct queries which search multiple fields.
  • +*
+*

+* A clause may be either:

+*
    +*
  • a term, indicating all the documents that contain this term; or
  • +*
  • a nested query, enclosed in parentheses. Note that this may be +* used with a +/- prefix to require any of a set of terms.
  • +*
+*

+* Thus, in BNF, the query grammar is:

+* +* Query ::= ( Clause )* +* Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" ) +* +*

+* Examples of appropriately formatted queries can be found in the test cases. +*

+*/ +class CLUCENE_EXPORT QueryParser : public QueryParserBase +{ +private: + TCHAR* field; + TokenList* tokens; +public: + /** + * Initializes a new instance of the QueryParser class with a specified field and + * analyzer values. + */ + QueryParser(const TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); + ~QueryParser(); + + /** + * Returns a parsed Query instance. + * Note: this call is not threadsafe, either use a seperate QueryParser for each thread, or use a thread lock + * The query value to be parsed. + * A parsed Query instance. + */ + virtual CL_NS(search)::Query* parse(const TCHAR* query); + + /** + * Returns a parsed Query instance. + * Note: this call is not threadsafe, either use a seperate QueryParser for each thread, or use a thread lock + * The TextReader value to be parsed. + * A parsed Query instance. + */ + virtual CL_NS(search)::Query* parse(CL_NS(util)::BufferedReader* reader); + + /** + * Returns a new instance of the Query class with a specified query, field and + * analyzer values. + */ + static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); + + CL_NS(analysis)::Analyzer* getAnalyzer() { return analyzer; } + + /** + * @return Returns the field. + */ + const TCHAR* getField(); + + //deprecated functions + _CL_DEPRECATED( setLowercaseExpandedTerms ) void setLowercaseWildcardTerms(bool lowercaseWildcardTerms); + _CL_DEPRECATED( getLowercaseExpandedTerms ) bool getLowercaseWildcardTerms() const; +private: + /** + * matches for CONJUNCTION + * CONJUNCTION ::= | + */ + int32_t MatchConjunction(); + + /** + * matches for MODIFIER + * MODIFIER ::= | | + */ + int32_t MatchModifier(); + + /** + * matches for QUERY + * QUERY ::= [MODIFIER] CLAUSE ( [MODIFIER] CLAUSE)* + */ + CL_NS(search)::Query* MatchQuery(const TCHAR* field); + + /** + * matches for CLAUSE + * CLAUSE ::= [TERM ] ( TERM | ( QUERY )) + */ + CL_NS(search)::Query* MatchClause(const TCHAR* field); + + /** + * matches for TERM + * TERM ::= TERM | PREFIXTERM | WILDTERM | NUMBER + * [ ] [ []] + * + * | ( | ) [ ] + * | [SLOP] [ ] + */ + CL_NS(search)::Query* MatchTerm(const TCHAR* field); + + /** + * matches for QueryToken of the specified type and returns it + * otherwise Exception throws + */ + QueryToken* MatchQueryToken(QueryToken::Types expectedType); + + /** + * Extracts the first token from the Tokenlist tokenlist + * and destroys it + */ + void ExtractAndDeleteToken(void); +}; +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryToken.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryToken.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryToken.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryToken.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,72 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryToken.h" + +CL_NS_DEF2(queryParser,legacy) + +QueryToken::QueryToken(): + Value(NULL) +{ + set(UNKNOWN_); +} +QueryToken::QueryToken(const TCHAR* value, const int32_t start, const int32_t end, const QueryToken::Types type): + Value(NULL) +{ + set(value,start,end,type); +} + +QueryToken::~QueryToken(){ +//Func - Destructor +//Pre - true +//Post - Instance has been destroyed + + #ifndef LUCENE_TOKEN_WORD_LENGTH + _CLDELETE_CARRAY( Value ); + #endif +} + +// Initializes a new instance of the Token class LUCENE_EXPORT. +// +QueryToken::QueryToken(const TCHAR* value, const QueryToken::Types type): + Value(NULL) +{ + set(value,type); +} + +// Initializes a new instance of the Token class LUCENE_EXPORT. +// +QueryToken::QueryToken(QueryToken::Types type): + Value(NULL) +{ + set(type); +} + + +void QueryToken::set(const TCHAR* value, const Types type){ + set(value,0,-1,type); +} +void QueryToken::set(const TCHAR* value, const int32_t start, const int32_t end, const Types type){ + #ifndef LUCENE_TOKEN_WORD_LENGTH + _CLDELETE_CARRAY(Value); + Value = STRDUP_TtoT(value); + #else + _tcsncpy(Value,value,LUCENE_TOKEN_WORD_LENGTH); + Value[LUCENE_TOKEN_WORD_LENGTH]; + #endif + this->Start = start; + this->End = end; + this->Type = type; + + if ( this->End < 0 ) + this->End = _tcslen(Value); +} +void QueryToken::set(Types type){ + set(LUCENE_BLANK_STRING,0,0,type); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryToken.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryToken.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/QueryToken.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/QueryToken.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,70 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_legacy_QueryToken_ +#define _lucene_queryParser_legacy_QueryToken_ + +CL_NS_DEF2(queryParser,legacy) + + // Token class that used by QueryParser. + class CLUCENE_EXPORT QueryToken:LUCENE_BASE + { + public: + enum Types + { + AND_, + OR, + NOT, + PLUS, + MINUS, + LPAREN, + RPAREN, + COLON, + CARAT, + QUOTED, + TERM, + SLOP, + FUZZY, + PREFIXTERM, + WILDTERM, + RANGEIN, + RANGEEX, + NUMBER, + EOF_, + UNKNOWN_ + }; + + + #ifdef LUCENE_TOKEN_WORD_LENGTH + TCHAR Value[LUCENE_TOKEN_WORD_LENGTH+1]; + #else + TCHAR* Value; + #endif + + int32_t Start; + int32_t End; + QueryToken::Types Type; + + // Initializes a new instance of the Token class. + QueryToken(const TCHAR* value, const int32_t start, const int32_t end, const Types type); + + // Initializes a new instance of the Token class. + QueryToken(const TCHAR* value, const Types type); + + // Initializes a new instance of the Token class. + QueryToken(Types type); + + // Initializes an empty instance of the Token class. + QueryToken(); + + ~QueryToken(); + + void set(const TCHAR* value, const int32_t start, const int32_t end, const Types type); + void set(const TCHAR* value, const Types type); + void set(Types type); + }; +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/TokenList.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/TokenList.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/TokenList.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/TokenList.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,79 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_TokenList.h" + +//#include "CLucene/util/VoidMap.h" +#include "CLucene/util/VoidList.h" +#include "QueryToken.h" + +CL_NS_DEF2(queryParser,legacy) + + TokenList::TokenList(){ + //Func - Constructor + //Pre - true + //Post - Instance has been created + } + + TokenList::~TokenList(){ + //Func - Destructor + //Pre - true + //Post - The tokenlist has been destroyed + + tokens.clear(); + } + + void TokenList::add(QueryToken* token){ + //Func - Adds a QueryToken token to the TokenList + //Pre - token != NULL + //Post - token has been added to the token list + + CND_PRECONDITION(token != NULL, "token != NULL"); + + tokens.insert(tokens.begin(),token); + } + + void TokenList::push(QueryToken* token){ + //Func - + //Pre - token != NULL + //Post - + + CND_PRECONDITION(token != NULL, "token is NULL"); + + tokens.push_back(token); + } + + QueryToken* TokenList::peek() { + /* DSR:2004.11.01: Reverted my previous (circa April 2004) fix (which + ** raised an exception if Peek was called when there were no tokens) in + ** favor of returning the EOF token. This solution is much better + ** integrated with the rest of the code in the queryParser subsystem. */ + size_t nTokens = tokens.size(); + if (nTokens == 0) { + push(_CLNEW QueryToken(QueryToken::EOF_)); + nTokens++; + } + return tokens[nTokens-1]; + } + + QueryToken* TokenList::extract(){ + //Func - Extract token from the TokenList + //Pre - true + //Post - Retracted token has been returned + + QueryToken* token = peek(); + //Retract the current peeked token + tokens.delete_back(); + + return token; + } + + int32_t TokenList::count() const + { + return tokens.size(); + } +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/_TokenList.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/_TokenList.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/legacy/_TokenList.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/legacy/_TokenList.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,36 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_legacy_TokenList_ +#define _lucene_queryParser_legacy_TokenList_ + + +//#include "QueryToken.h" +CL_NS_DEF2(queryParser,legacy) + +class QueryToken; + + // Represents a list of the tokens. + class TokenList:LUCENE_BASE + { + private: + CL_NS(util)::CLVector tokens; //todo:,CL_NS(util)::Deletor::Object + public: + TokenList(); + ~TokenList(); + + void add(QueryToken* token); + + void push(QueryToken* token); + + QueryToken* peek(); + + QueryToken* extract(); + + int32_t count() const; + }; +CL_NS_END2 +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MultiFieldQueryParser.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/BooleanClause.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/MultiPhraseQuery.h" +#include "CLucene/search/SearchHeader.h" +#include "QueryParser.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(search) +CL_NS_USE(analysis) + +CL_NS_DEF(queryParser) + + +MultiFieldQueryParser::MultiFieldQueryParser(const TCHAR** _fields, CL_NS(analysis)::Analyzer* a, BoostMap* _boosts): + QueryParser(NULL,a), fields(_fields), boosts(_boosts) +{ +} +MultiFieldQueryParser::~MultiFieldQueryParser(){ +} + +Query* MultiFieldQueryParser::getFieldQuery(const TCHAR* field, TCHAR* queryText, const int32_t slop){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getFieldQuery(fields[i], queryText); + if (q != NULL) { + //If the user passes a map of boosts + if (boosts != NULL) { + //Get the boost from the map and apply them + BoostMap::const_iterator itr = boosts->find((TCHAR*)fields[i]); + if (itr != boosts->end()) { + q->setBoost(itr->second); + } + } + if (q->instanceOf(PhraseQuery::getClassName())) { + ((PhraseQuery*)q)->setSlop(slop); + } + if (q->instanceOf(MultiPhraseQuery::getClassName())) { + ((MultiPhraseQuery*) q)->setSlop(slop); + } + clauses.push_back(_CLNEW BooleanClause(q, true, BooleanClause::SHOULD)); + } + } + if (clauses.size() == 0) // happens for stopwords + return NULL; + return QueryParser::getBooleanQuery(clauses, true); + }else{ + return QueryParser::getFieldQuery(field, queryText); + } +} + +Query* MultiFieldQueryParser::getFuzzyQuery(const TCHAR* field, TCHAR* termStr, const float_t minSimilarity){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getFuzzyQuery(fields[i], termStr, minSimilarity); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::SHOULD) ); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getFuzzyQuery(field, termStr, minSimilarity); +} + +Query* MultiFieldQueryParser::getPrefixQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getPrefixQuery(fields[i], termStr); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getPrefixQuery(field, termStr); +} + +Query* MultiFieldQueryParser::getWildcardQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getWildcardQuery(fields[i], termStr); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getWildcardQuery(field, termStr); +} + + +Query* MultiFieldQueryParser::getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getRangeQuery(fields[i], part1, part2, inclusive); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + }else{ + return QueryParser::getRangeQuery(field, part1, part2, inclusive); + } +} + +//static +Query* MultiFieldQueryParser::parse(const TCHAR** _queries, const TCHAR** _fields, Analyzer* analyzer) +{ + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) + { + if (_queries[i] == NULL) { + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_queries.length != _fields.length"); + } + // TODO: Reuse qp instead of creating it over and over again + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(_queries[i]); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName()) || ((BooleanQuery*)q)->getClauseCount() > 0))) { + bQuery->add(q, true, BooleanClause::SHOULD); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +// static +Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** _fields, const uint8_t* flags, Analyzer* analyzer) { + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) { + //TODO: this is really confusing... why not refactor _fields and flags to use a array object. + //flags can be NULL since NULL == 0... + /*if (flags[i] == NULL) { + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_fields.length != flags.length"); + }*/ + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(query); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName())) || ((BooleanQuery*)q)->getClauseCount()>0)) { + bQuery->add(q, true, (BooleanClause::Occur)flags[i]); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +//static +Query* MultiFieldQueryParser::parse(const TCHAR** _queries, const TCHAR** _fields, const uint8_t* flags, Analyzer* analyzer){ + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) + { + //TODO: this is really confusing... why not refactor _fields and flags to use a array object. + //flags can be NULL since NULL == 0... + if (_queries[i] == NULL ) { //|| flags[i] == NULL + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_queries, _fields, and flags array have have different length"); + } + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(_queries[i]); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName())) || ((BooleanQuery*)q)->getClauseCount()>0)) { + bQuery->add(q, true, (BooleanClause::Occur)flags[i]); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/MultiFieldQueryParser.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/MultiFieldQueryParser.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/MultiFieldQueryParser.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/MultiFieldQueryParser.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,163 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_MultiFieldQueryParser_ +#define _lucene_queryParser_MultiFieldQueryParser_ + +#include "QueryParser.h" +#include "CLucene/util/VoidMap.h" + + +CL_NS_DEF(queryParser) + +typedef CL_NS(util)::CLHashMap BoostMap; + +/** +* A QueryParser which constructs queries to search multiple fields. +* +*/ +class CLUCENE_EXPORT MultiFieldQueryParser: public QueryParser +{ +protected: + const TCHAR** fields; + BoostMap* boosts; +public: + /** + * Creates a MultiFieldQueryParser. + * Allows passing of a map with term to Boost, and the boost to apply to each term. + * + *

It will, when parse(String query) + * is called, construct a query like this (assuming the query consists of + * two terms and you specify the two fields title and body):

+ * + * + * (title:term1 body:term1) (title:term2 body:term2) + * + * + *

When setDefaultOperator(AND_OPERATOR) is set, the result will be:

+ * + * + * +(title:term1 body:term1) +(title:term2 body:term2) + * + * + *

When you pass a boost (title=>5 body=>10) you can get

+ * + * + * +(title:term1^5.0 body:term1^10.0) +(title:term2^5.0 body:term2^10.0) + * + * + *

In other words, all the query's terms must appear, but it doesn't matter in + * what fields they appear.

+ */ + MultiFieldQueryParser(const TCHAR** _fields, CL_NS(analysis)::Analyzer* a, BoostMap* _boosts = NULL); + virtual ~MultiFieldQueryParser(); + + +protected: + CL_NS(search)::Query* getFieldQuery(const TCHAR* field, TCHAR* queryText, const int32_t slop); + CL_NS(search)::Query* getFieldQuery(const TCHAR* field, TCHAR* queryText) { return getFieldQuery(field,queryText,0); } + CL_NS(search)::Query* getFuzzyQuery(const TCHAR* field, TCHAR* termStr, const float_t minSimilarity); + CL_NS(search)::Query* getPrefixQuery(const TCHAR* field, TCHAR* termStr); + CL_NS(search)::Query* getWildcardQuery(const TCHAR* field, TCHAR* termStr); + CL_NS(search)::Query* getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive); + +public: + /** + * Parses a query which searches on the fields specified. + *

+ * If x fields are specified, this effectively constructs: + *

+  * 
+  * (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx)
+  * 
+  * 
+ * @param queries Queries strings to parse + * @param fields Fields to search on + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the queries array differs + * from the length of the fields array + */ + static CL_NS(search)::Query* parse(const TCHAR** _queries, const TCHAR** _fields, + CL_NS(analysis)::Analyzer* analyzer); + + /** + * Parses a query, searching on the fields specified. + * Use this if you need to specify certain fields as required, + * and others as prohibited. + *

+  * Usage:
+  * 
+  * String[] fields = {"filename", "contents", "description"};
+  * BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
+  *                BooleanClause.Occur.MUST,
+  *                BooleanClause.Occur.MUST_NOT};
+  * MultiFieldQueryParser.parse("query", fields, flags, analyzer);
+  * 
+  * 
+ *

+ * The code above would construct a query: + *

+  * 
+  * (filename:query) +(contents:query) -(description:query)
+  * 
+  * 
+ * + * @param query Query string to parse + * @param fields Fields to search on + * @param flags Flags describing the fields + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the fields array differs + * from the length of the flags array + */ + static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** _fields, + const uint8_t* flags, CL_NS(analysis)::Analyzer* analyzer); + + /** + * Parses a query, searching on the fields specified. + * Use this if you need to specify certain fields as required, + * and others as prohibited. + *

+  * Usage:
+  * 
+  * String[] query = {"query1", "query2", "query3"};
+  * String[] fields = {"filename", "contents", "description"};
+  * BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
+  *                BooleanClause.Occur.MUST,
+  *                BooleanClause.Occur.MUST_NOT};
+  * MultiFieldQueryParser.parse(query, fields, flags, analyzer);
+  * 
+  * 
+ *

+ * The code above would construct a query: + *

+  * 
+  * (filename:query1) +(contents:query2) -(description:query3)
+  * 
+  * 
+ * + * @param queries Queries string to parse + * @param fields Fields to search on + * @param flags Flags describing the fields + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the queries, fields, + * and flags array differ + */ + static CL_NS(search)::Query* parse(const TCHAR** _queries, const TCHAR** _fields, const uint8_t* flags, + CL_NS(analysis)::Analyzer* analyzer); + + CL_NS(search)::Query* parse(const TCHAR* _query){return QueryParser::parse(_query);} +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParserConstants.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParserConstants.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParserConstants.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParserConstants.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_QueryParserConstants_ +#define _lucene_queryParser_QueryParserConstants_ + +CL_NS_DEF(queryParser) + +class CLUCENE_EXPORT QueryParserConstants { +public: + enum Types { + _EOF = 0, + _NUM_CHAR = 1, + _ESCAPED_CHAR = 2, + _TERM_START_CHAR = 3, + _TERM_CHAR = 4, + _WHITESPACE = 5, + AND = 7, + OR = 8, + NOT = 9, + PLUS = 10, + MINUS = 11, + LPAREN = 12, + RPAREN = 13, + COLON = 14, + STAR = 15, + CARAT = 16, + QUOTED = 17, + TERM = 18, + FUZZY_SLOP = 19, + PREFIXTERM = 20, + WILDTERM = 21, + RANGEIN_START = 22, + RANGEEX_START = 23, + NUMBER = 24, + RANGEIN_TO = 25, + RANGEIN_END = 26, + RANGEIN_QUOTED = 27, + RANGEIN_GOOP = 28, + RANGEEX_TO = 29, + RANGEEX_END = 30, + RANGEEX_QUOTED = 31, + RANGEEX_GOOP = 32 + }; + + enum LexStates { + Boost = 0, + RangeEx = 1, + RangeIn = 2, + DEFAULT = 3 + }; + + static const TCHAR* tokenImage[]; + +protected: + /** + * Used to convert raw characters to their escaped version + * when these raw version cannot be used as part of an ASCII + * string literal, while formatting an error message. + * Called internally only by error reporting tools. + */ + static TCHAR* addEscapes(TCHAR* str); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParser.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParser.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParser.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1502 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "QueryParserConstants.h" +#include "QueryParserTokenManager.h" +#include "QueryParser.h" + +#include "CLucene/analysis/AnalysisHeader.h" + +#include "CLucene/search/SearchHeader.h" + +#include "CLucene/search/Query.h" +#include "CLucene/search/TermQuery.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/FuzzyQuery.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/WildcardQuery.h" +#include "CLucene/search/PrefixQuery.h" +#include "CLucene/search/RangeQuery.h" +#include "CLucene/search/MatchAllDocsQuery.h" +#include "CLucene/search/MultiPhraseQuery.h" +#include "CLucene/search/ConstantScoreQuery.h" + +#include "CLucene/document/DateField.h" +#include "CLucene/document/DateTools.h" + +#include "CLucene/index/Term.h" +#include "QueryToken.h" + +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_USE(analysis) +CL_NS_USE(search) + +CL_NS_DEF(queryParser) + +const TCHAR* QueryParserConstants::tokenImage[] = { + _T(""), + _T("<_NUM_CHAR>"), + _T("<_ESCAPED_CHAR>"), + _T("<_TERM_START_CHAR>"), + _T("<_TERM_CHAR>"), + _T("<_WHITESPACE>"), + _T(""), + _T(""), + _T(""), + _T(""), + _T("\"+\""), + _T("\"-\""), + _T("\"(\""), + _T("\")\""), + _T("\":\""), + _T("\"*\""), + _T("\"^\""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T("\"[\""), + _T("\"{\""), + _T(""), + _T("\"TO\""), + _T("\"]\""), + _T(""), + _T(""), + _T("\"TO\""), + _T("\"}\""), + _T(""), + _T("") +}; + +const int32_t QueryParser::jj_la1_0[] = {0x180,0x180,0xe00,0xe00,0x1f69f80,0x48000,0x10000,0x1f69000,0x1348000,0x80000,0x80000,0x10000,0x18000000,0x2000000,0x18000000,0x10000,0x80000000,0x20000000,0x80000000,0x10000,0x80000,0x10000,0x1f68000}; +const int32_t QueryParser::jj_la1_1[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0}; + +struct QueryParser::JJCalls { +public: + int32_t gen; + QueryToken* first; + int32_t arg; + JJCalls* next; + + JJCalls(); + ~JJCalls(); +}; + +QueryParser::QueryParser(const TCHAR* f, Analyzer* a) : _operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(a),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + StringReader* rdr = _CLNEW StringReader(_T("")); + _init(_CLNEW FastCharStream(rdr, true)); + + if ( f ) + field = STRDUP_TtoT(f); +} + +void QueryParser::_deleteTokens(){ + QueryToken* t = _firstToken; + while (true){ + if (_firstToken == NULL) break; + t = _firstToken->next; + _CLLDELETE(_firstToken); + _firstToken = t; + } +} + +QueryParser::~QueryParser(){ + _CLLDELETE(fieldToDateResolution); + _CLLDELETE(token_source); + + _deleteTokens(); + + _CLLDELETE(jj_expentries); + _CLLDELETE(jj_expentry); + _CLLDELETE(jj_2_rtns); + + _CLDELETE_CARRAY(field); +} + +CL_NS(search)::Query* QueryParser::parse(const TCHAR* q, const TCHAR* f, CL_NS(analysis)::Analyzer* a){ + QueryParser* qp = _CLNEW QueryParser(f, a); + CL_NS(search)::Query* qry = qp->parse(q); + _CLDELETE(qp); + return qry; +} + +Query* QueryParser::parse(const TCHAR* _query) +{ + StringReader* rdr = _CLNEW StringReader(_query); + ReInit(_CLNEW FastCharStream(rdr, true)); + try { + // TopLevelQuery is a Query followed by the end-of-input (EOF) + Query* res = TopLevelQuery(field); + return (res!=NULL) ? res : _CLNEW BooleanQuery(); + } + catch (CLuceneError& e) { + // rethrow to include the original query: + if (e.number()==CL_ERR_Parse || e.number()==CL_ERR_TokenMgr) { + TCHAR* _twhat = e.twhat(); + const size_t errLen = _tcslen(_twhat) + _tcslen(_query) + 20; // make sure we have enough room for our error message + TCHAR *err = _CL_NEWARRAY(TCHAR,errLen); + cl_stprintf(err, errLen, _T("Cannot parse '%s': %s"), _query,_twhat); + _CLTHROWT_DEL(CL_ERR_Parse, err); + } else if (e.number()==CL_ERR_TooManyClauses) { + const size_t errLen = _tcslen(_query) + 25; // make sure we have enough room for our error message + TCHAR *err = _CL_NEWARRAY(TCHAR,errLen); + cl_stprintf(err, errLen, _T("Cannot parse '%s': too many boolean clauses"), _query); + _CLTHROWT_DEL(CL_ERR_Parse, err); + } else + throw e; + } +} + +Analyzer* QueryParser::getAnalyzer() const { + return analyzer; +} + +const TCHAR* QueryParser::getField() const { + return field; +} + +float_t QueryParser::getFuzzyMinSim() const { + return fuzzyMinSim; +} + +void QueryParser::setFuzzyMinSim(const float_t _fuzzyMinSim) { + fuzzyMinSim = _fuzzyMinSim; +} + +int32_t QueryParser::getFuzzyPrefixLength() const { + return fuzzyPrefixLength; +} + +void QueryParser::setFuzzyPrefixLength(const int32_t _fuzzyPrefixLength) { + fuzzyPrefixLength = _fuzzyPrefixLength; +} + +void QueryParser::setPhraseSlop(const int32_t _phraseSlop) { + phraseSlop = _phraseSlop; +} +int32_t QueryParser::getPhraseSlop() const { + return phraseSlop; +} +void QueryParser::setAllowLeadingWildcard(const bool _allowLeadingWildcard) { + allowLeadingWildcard = _allowLeadingWildcard; +} +bool QueryParser::getAllowLeadingWildcard() const { + return allowLeadingWildcard; +} +void QueryParser::setEnablePositionIncrements(const bool _enable) { + enablePositionIncrements = _enable; +} +bool QueryParser::getEnablePositionIncrements() const { + return enablePositionIncrements; +} +void QueryParser::setDefaultOperator(Operator _op) { + _operator = _op; +} +QueryParser::Operator QueryParser::getDefaultOperator() const { + return _operator; +} +void QueryParser::setLowercaseExpandedTerms(const bool _lowercaseExpandedTerms) { + lowercaseExpandedTerms = _lowercaseExpandedTerms; +} +bool QueryParser::getLowercaseExpandedTerms() const { + return lowercaseExpandedTerms; +} +void QueryParser::setUseOldRangeQuery(const bool _useOldRangeQuery) { + useOldRangeQuery = _useOldRangeQuery; +} +bool QueryParser::getUseOldRangeQuery() const { + return useOldRangeQuery; +} +void QueryParser::setDateResolution(const CL_NS(document)::DateTools::Resolution _dateResolution) { + dateResolution = _dateResolution; +} +void QueryParser::setDateResolution(const TCHAR* fieldName, const CL_NS(document)::DateTools::Resolution _dateResolution) { + if (fieldName == NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "Field cannot be null."); + + if (fieldToDateResolution == NULL) { + // lazily initialize HashMap + fieldToDateResolution = _CLNEW FieldToDateResolutionType(); + } + + fieldToDateResolution->put(fieldName, _dateResolution); +} +CL_NS(document)::DateTools::Resolution QueryParser::getDateResolution(const TCHAR* fieldName) const { + if (fieldName == NULL) + _CLTHROWA(CL_ERR_IllegalArgument,"Field cannot be null."); + + if (fieldToDateResolution == NULL) { + // no field specific date resolutions set; return default date resolution instead + return dateResolution; + } + + CL_NS(document)::DateTools::Resolution resolution = fieldToDateResolution->get(fieldName); + if (resolution == CL_NS(document)::DateTools::NO_RESOLUTION) { + // no date resolutions set for the given field; return default date resolution instead + resolution = dateResolution; + } + + return resolution; +} + +void QueryParser::addClause(std::vector& clauses, int32_t conj, int32_t mods, Query* q){ + bool required, prohibited; + + // If this term is introduced by AND, make the preceding term required, + // unless it's already prohibited + const uint32_t nPreviousClauses = clauses.size(); + if (nPreviousClauses > 0 && conj == CONJ_AND) { + BooleanClause* c = clauses[nPreviousClauses-1]; + if (!c->isProhibited()) + c->setOccur(BooleanClause::MUST); + } + + if (nPreviousClauses > 0 && _operator == AND_OPERATOR && conj == CONJ_OR) { + // If this term is introduced by OR, make the preceding term optional, + // unless it's prohibited (that means we leave -a OR b but +a OR b-->a OR b) + // notice if the input is a OR b, first term is parsed as required; without + // this modification a OR b would parsed as +a OR b + BooleanClause* c = clauses[nPreviousClauses-1]; + if (!c->isProhibited()) + c->setOccur(BooleanClause::SHOULD); + } + + // We might have been passed a null query; the term might have been + // filtered away by the analyzer. + if (q == NULL) + return; + + if (_operator == OR_OPERATOR) { + // We set REQUIRED if we're introduced by AND or +; PROHIBITED if + // introduced by NOT or -; make sure not to set both. + prohibited = (mods == MOD_NOT); + required = (mods == MOD_REQ); + if (conj == CONJ_AND && !prohibited) { + required = true; + } + } else { + // We set PROHIBITED if we're introduced by NOT or -; We set REQUIRED + // if not PROHIBITED and not introduced by OR + prohibited = (mods == MOD_NOT); + required = (!prohibited && conj != CONJ_OR); + } + if (required && !prohibited) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::MUST)); + else if (!required && !prohibited) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::SHOULD)); + else if (!required && prohibited) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::MUST_NOT)); + else { + _CLTHROWA(CL_ERR_Runtime, "Clause cannot be both required and prohibited"); + } +} + +Query* QueryParser::getFieldQuery(const TCHAR* _field, TCHAR* queryText) { + // Use the analyzer to get all the tokens, and then build a TermQuery, + // PhraseQuery, or nothing based on the term count + + StringReader reader(queryText); + TokenStream* source = analyzer->tokenStream(_field, &reader); + + CLVector > v; + CL_NS(analysis)::Token* t = NULL; + int32_t positionCount = 0; + bool severalTokensAtSamePosition = false; + + while (true) { + t = _CLNEW Token(); + try { + Token* _t = source->next(t); + if (_t == NULL) _CLDELETE(t); + }_CLCATCH_ERR(CL_ERR_IO, _CLLDELETE(source);_CLLDELETE(t);_CLDELETE_LCARRAY(queryText);,{ + t = NULL; + }); + if (t == NULL) + break; + v.push_back(t); + if (t->getPositionIncrement() != 0) + positionCount += t->getPositionIncrement(); + else + severalTokensAtSamePosition = true; + } + try { + source->close(); + } + _CLCATCH_ERR_CLEANUP(CL_ERR_IO, {_CLLDELETE(source);_CLLDELETE(t);_CLDELETE_LCARRAY(queryText);} ); /* cleanup */ + _CLLDELETE(source); + + if (v.size() == 0) + return NULL; + else if (v.size() == 1) { + Term* tm = _CLNEW Term(_field, v.at(0)->termBuffer()); + Query* ret = _CLNEW TermQuery( tm ); + _CLDECDELETE(tm); + return ret; + } else { + if (severalTokensAtSamePosition) { + if (positionCount == 1) { + // no phrase query: + BooleanQuery* q = _CLNEW BooleanQuery(true); + for(size_t i=0; itermBuffer()); + q->add(_CLNEW TermQuery(tm), true, BooleanClause::SHOULD); + _CLDECDELETE(tm); + } + return q; + }else { + MultiPhraseQuery* mpq = _CLNEW MultiPhraseQuery(); + mpq->setSlop(phraseSlop); + CLArrayList multiTerms; + int32_t position = -1; + for (size_t i = 0; i < v.size(); i++) { + t = v.at(i); + if (t->getPositionIncrement() > 0 && multiTerms.size() > 0) { + ValueArray termsArray(multiTerms.size()); + multiTerms.toArray(termsArray.values); + if (enablePositionIncrements) { + mpq->add(&termsArray,position); + } else { + mpq->add(&termsArray); + } + multiTerms.clear(); + } + position += t->getPositionIncrement(); + multiTerms.push_back(_CLNEW Term(field, t->termBuffer())); + } + ValueArray termsArray(multiTerms.size()); + multiTerms.toArray(termsArray.values); + if (enablePositionIncrements) { + mpq->add(&termsArray,position); + } else { + mpq->add(&termsArray); + } + return mpq; + } + }else { + PhraseQuery* pq = _CLNEW PhraseQuery(); + pq->setSlop(phraseSlop); + int32_t position = -1; + + for (size_t i = 0; i < v.size(); i++) { + t = v.at(i); + Term* tm = _CLNEW Term(_field, t->termBuffer()); + if (enablePositionIncrements) { + position += t->getPositionIncrement(); + pq->add(tm,position); + } else { + pq->add(tm); + } + _CLDECDELETE(tm); + } + return pq; + } + } +} + +Query* QueryParser::getFieldQuery(const TCHAR* _field, TCHAR* queryText, const int32_t slop) { + Query* query = getFieldQuery(_field, queryText); + + if (query) { + if ( query->instanceOf(PhraseQuery::getClassName()) ) { + static_cast(query)->setSlop(slop); + } else if ( query->instanceOf(MultiPhraseQuery::getClassName()) ) { + static_cast(query)->setSlop(slop); + } + } + return query; +} + +Query* QueryParser::getRangeQuery(const TCHAR* _field, TCHAR* part1, TCHAR* part2, const bool inclusive) +{ + if (lowercaseExpandedTerms) { + _tcslwr(part1); + _tcslwr(part2); + } + + TCHAR* _part1 = part1, *_part2 = part2; // just in case anything go wrong... + try { + /*DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); // SHORT means completely numeric + df.setLenient(true); + Date d1 = df.parse(part1); + Date d2 = df.parse(part2); + */ + const int64_t d1 = CL_NS(document)::DateTools::stringToTime(part1); + int64_t d2 = CL_NS(document)::DateTools::stringToTime(part2); + if (inclusive) { + // The user can only specify the date, not the time, so make sure + // the time is set to the latest possible time of that date to really + // include all documents: + d2 = CL_NS(document)::DateTools::timeMakeInclusive(d2); + } + + CL_NS(document)::DateTools::Resolution resolution = getDateResolution(_field); + if (resolution == CL_NS(document)::DateTools::NO_RESOLUTION) { + // no default or field specific date resolution has been set, + // use deprecated DateField to maintain compatibilty with + // pre-1.9 Lucene versions. + _part1 = CL_NS(document)::DateField::timeToString(d1); + _part2 = CL_NS(document)::DateField::timeToString(d2); + } else { + _part1 = CL_NS(document)::DateTools::timeToString(d1, resolution); + _part2 = CL_NS(document)::DateTools::timeToString(d2, resolution); + } + } + catch (...) { } + + if(useOldRangeQuery) + { + Term* t1 = _CLNEW Term(_field,part1); + Term* t2 = _CLNEW Term(_field,part2); + Query* ret = _CLNEW RangeQuery(t1, t2, inclusive); + _CLDECDELETE(t1); + _CLDECDELETE(t2); + + // Make sure to delete the date strings we allocated only if we indeed allocated them + if (part1 != _part1) _CLDELETE_LCARRAY(_part1); + if (part2 != _part2) _CLDELETE_LCARRAY(_part2); + + return ret; + } + else + { + Query* q = _CLNEW ConstantScoreRangeQuery(_field,part1,part2,inclusive,inclusive); + + // Make sure to delete the date strings we allocated only if we indeed allocated them + if (part1 != _part1) _CLDELETE_LCARRAY(_part1); + if (part2 != _part2) _CLDELETE_LCARRAY(_part2); + + return q; + } +} + +Query* QueryParser::getBooleanQuery(std::vector& clauses, bool disableCoord) +{ + if (clauses.size()==0) { + return NULL; // all clause words were filtered away by the analyzer. + } + BooleanQuery* query = _CLNEW BooleanQuery(disableCoord); + + for (size_t i = 0; i < clauses.size(); i++) { + query->add(clauses[i]); + } + return query; +} + +Query* QueryParser::getWildcardQuery(const TCHAR* _field, TCHAR* termStr) +{ + if (_tcscmp(_T("*"), _field) == 0) { + if (_tcscmp(_T("*"), termStr) == 0) + return _CLNEW MatchAllDocsQuery(); + } + if (!allowLeadingWildcard && (termStr[0]==_T('*') || termStr[0]==_T('?'))){ + _CLDELETE_LCARRAY(termStr); + _CLTHROWT(CL_ERR_Parse,_T("'*' or '?' not allowed as first character in WildcardQuery")); + } + if (lowercaseExpandedTerms) { + _tcslwr(termStr); + } + + Term* t = _CLNEW Term(_field, termStr); + Query* q = _CLNEW WildcardQuery(t); + _CLDECDELETE(t); + + return q; +} + +Query* QueryParser::getPrefixQuery(const TCHAR* _field, TCHAR* _termStr) +{ + if (!allowLeadingWildcard && _termStr[0] == _T('*')){ + _CLDELETE_LCARRAY(_termStr); + _CLTHROWT(CL_ERR_Parse,_T("'*' not allowed as first character in PrefixQuery")); + } + if (lowercaseExpandedTerms) { + _tcslwr(_termStr); + } + Term* t = _CLNEW Term(_field, _termStr); + Query *q = _CLNEW PrefixQuery(t); + _CLDECDELETE(t); + return q; +} + +Query* QueryParser::getFuzzyQuery(const TCHAR* _field, TCHAR* termStr, const float_t minSimilarity) +{ + if (lowercaseExpandedTerms) { + _tcslwr(termStr); + } + + Term* t = _CLNEW Term(_field, termStr); + Query *q = _CLNEW FuzzyQuery(t, minSimilarity, fuzzyPrefixLength); + _CLDECDELETE(t); + return q; +} + +TCHAR* QueryParser::discardEscapeChar(TCHAR* input, TCHAR* output) { + // Create char array to hold unescaped char sequence + const size_t inputLen = _tcslen(input); + bool outputOwned=false; + if (output == NULL){ + // TODO: Perhaps we can re-use an inner buffer instead of creating new char arrays here and in several other places + output = _CL_NEWARRAY(TCHAR, inputLen + 1); + outputOwned=true; + } + + // The length of the output can be less than the input + // due to discarded escape chars. This variable holds + // the actual length of the output + int32_t length = 0; + + // We remember whether the last processed character was + // an escape character + bool lastCharWasEscapeChar = false; + + // The multiplier the current unicode digit must be multiplied with. + // E. g. the first digit must be multiplied with 16^3, the second with 16^2... + uint32_t codePointMultiplier = 0; + + // Used to calculate the codepoint of the escaped unicode character + int32_t codePoint = 0; + + for (size_t i = 0; i < inputLen; i++) { + TCHAR curChar = input[i]; + if (codePointMultiplier > 0) { + try { + codePoint += hexToInt(curChar) * codePointMultiplier; + } catch (CLuceneError& e) { + if (outputOwned)_CLDELETE_LCARRAY(output); + throw e; + } + codePointMultiplier = codePointMultiplier >> 4; + if (codePointMultiplier == 0) { + output[length++] = (TCHAR)codePoint; + codePoint = 0; + } + } else if (lastCharWasEscapeChar) { + if (curChar == _T('u')) { + // found an escaped unicode character + codePointMultiplier = 16 * 16 * 16; + } else { + // this character was escaped + output[length] = curChar; + length++; + } + lastCharWasEscapeChar = false; + } else { + if (curChar == _T('\\')) { + lastCharWasEscapeChar = true; + } else { + output[length] = curChar; + length++; + } + } + } + + if (codePointMultiplier > 0) { + if (outputOwned)_CLDELETE_LCARRAY(output); + _CLTHROWT(CL_ERR_Parse, _T("Truncated unicode escape sequence.")); + } + + if (lastCharWasEscapeChar) { + if (outputOwned)_CLDELETE_LCARRAY(output); + _CLTHROWT(CL_ERR_Parse,_T("Term can not end with escape character.")); + } + + output[length]=0; + return output; +} + +//static +int32_t QueryParser::hexToInt(TCHAR c) { + if (_T('0') <= c && c <= _T('9')) { + return c - _T('0'); + } else if (_T('a') <= c && c <= _T('f')){ + return c - _T('a') + 10; + } else if (_T('A') <= c && c <= _T('F')) { + return c - _T('A') + 10; + } else { + TCHAR err[50]; + cl_stprintf(err,50, _T("Non-hex character in unicode escape sequence: %c"), c); + _CLTHROWT(CL_ERR_Parse,err); + } +} + +//static +TCHAR* QueryParser::escape(const TCHAR* s) { + size_t len = _tcslen(s); + // Create a StringBuffer object a bit longer from the length of the query (to prevent some reallocations), + // and declare we are the owners of the buffer (to save on a copy) + // TODO: 1. Test to see what is the optimal initial length + // 2. Allow re-using the provided string buffer (argument s) instead of creating another one? + StringBuffer sb(len+5); + for (size_t i = 0; i < len; i++) { + const TCHAR c = s[i]; + // These characters are part of the query syntax and must be escaped + if (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' || c == ')' || c == ':' + || c == '^' || c == '[' || c == ']' || c == '"' || c == '{' || c == '}' || c == '~' + || c == '*' || c == '?' || c == '|' || c == '&') { + sb.appendChar(_T('\\')); + } + sb.appendChar(c); + } + return sb.giveBuffer(); +} + +int32_t QueryParser::Conjunction() { + int32_t ret = CONJ_NONE; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + case OR: + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + jj_consume_token(AND); + ret = CONJ_AND; + break; + case OR: + jj_consume_token(OR); + ret = CONJ_OR; + break; + default: + jj_la1[0] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + break; + default: + jj_la1[1] = jj_gen; + } + return ret; +} + +int32_t QueryParser::Modifiers() { + int32_t ret = MOD_NONE; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case NOT: + case PLUS: + case MINUS: + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case PLUS: + jj_consume_token(PLUS); + ret = MOD_REQ; + break; + case MINUS: + jj_consume_token(MINUS); + ret = MOD_NOT; + break; + case NOT: + jj_consume_token(NOT); + ret = MOD_NOT; + break; + default: + jj_la1[2] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + break; + default: + jj_la1[3] = jj_gen; + } + return ret; +} + +Query* QueryParser::TopLevelQuery(TCHAR* _field) { + Query* q = NULL;; + try { + q = fQuery(_field); + jj_consume_token(0); + } catch (CLuceneError& e) { + _CLLDELETE(q); + throw e; + } + return q; +} + +Query* QueryParser::fQuery(TCHAR* _field) { + CLVector > clauses; + Query *q, *firstQuery=NULL; + int32_t conj, mods; + mods = Modifiers(); + q = fClause(_field); + addClause(clauses, CONJ_NONE, mods, q); + if (mods == MOD_NONE) + firstQuery=q; + while (true) { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + case OR: + case NOT: + case PLUS: + case MINUS: + case LPAREN: + case STAR: + case QUOTED: + case TERM: + case PREFIXTERM: + case WILDTERM: + case RANGEIN_START: + case RANGEEX_START: + case NUMBER: + break; + default: + jj_la1[4] = jj_gen; + goto label_1_brk; + } + + conj = Conjunction(); + mods = Modifiers(); + q = fClause(_field); + addClause(clauses, conj, mods, q); + } + +label_1_brk: + if (clauses.size() == 1 && firstQuery != NULL){ + clauses[0]->deleteQuery = false; + return firstQuery; + }else{ + clauses.setDoDelete(false); + return getBooleanQuery(clauses); + } +} + +Query* QueryParser::fClause(TCHAR* _field) { + Query* q=NULL; + QueryToken *fieldToken=NULL, *boost=NULL; + TCHAR* tmpField=NULL; + if (jj_2_1(2)) { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case TERM: + { + fieldToken = jj_consume_token(TERM); + jj_consume_token(COLON); + // make sure to delete _field only if it's not contained already by the QP + tmpField=discardEscapeChar(fieldToken->image); + break; + } + case STAR: + jj_consume_token(STAR); + jj_consume_token(COLON); + tmpField=_CL_NEWARRAY(TCHAR,2); + tmpField[0]=_T('*'); + tmpField[1]=0; + break; + default: + jj_la1[5] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case STAR: + case QUOTED: + case TERM: + case PREFIXTERM: + case WILDTERM: + case RANGEIN_START: + case RANGEEX_START: + case NUMBER: + { + q = fTerm( tmpField==NULL ? _field : tmpField ); + break; + } + case LPAREN: + { + jj_consume_token(LPAREN); + q = fQuery( tmpField==NULL ? _field : tmpField ); + jj_consume_token(RPAREN); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[6] = jj_gen; + break; + } + default: + { + jj_la1[7] = jj_gen; + jj_consume_token(-1); + _CLDELETE_LCARRAY(tmpField); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + _CLDELETE_LCARRAY(tmpField); + if (q && boost != NULL) { + float_t f = 1.0; + try { + f = _tcstod(boost->image, NULL); + q->setBoost(f); + } catch (...) { /* ignore errors */ } + } + return q; +} + +Query* QueryParser::fTerm(const TCHAR* _field) { + QueryToken *term, *boost=NULL, *fuzzySlop=NULL, *goop1, *goop2; + bool prefix = false; + bool wildcard = false; + bool fuzzy = false; + //bool rangein = false; + Query* q = NULL; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case STAR: + case TERM: + case PREFIXTERM: + case WILDTERM: + case NUMBER: + { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case TERM: + term = jj_consume_token(TERM); + break; + case STAR: + term = jj_consume_token(STAR); + wildcard=true; + break; + case PREFIXTERM: + term = jj_consume_token(PREFIXTERM); + prefix=true; + break; + case WILDTERM: + term = jj_consume_token(WILDTERM); + wildcard=true; + break; + case NUMBER: + term = jj_consume_token(NUMBER); + break; + default: + jj_la1[8] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + { + fuzzySlop = jj_consume_token(FUZZY_SLOP); + fuzzy=true; + } + else + jj_la1[9] = jj_gen; + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + { + fuzzySlop = jj_consume_token(FUZZY_SLOP); + fuzzy=true; + } + else + jj_la1[10] = jj_gen; + } + else + jj_la1[11] = jj_gen; + + TCHAR* termImage=NULL; + if (wildcard) { + termImage=discardEscapeChar(term->image); + q = getWildcardQuery(_field, termImage); + } else if (prefix) { + termImage = STRDUP_TtoT(term->image); + size_t tiLen = _tcslen(termImage); + termImage[tiLen-1]=0; + q = getPrefixQuery(_field,discardEscapeChar(termImage, termImage)); + } else if (fuzzy) { + float_t fms = fuzzyMinSim; + try { + if (fuzzySlop->image[1] != 0) + fms = _tcstod(fuzzySlop->image + 1, NULL); + } catch (...) { /* ignore exceptions */ } + if(fms < 0.0f || fms > 1.0f){ + _CLTHROWT(CL_ERR_Parse, _T("Minimum similarity for a FuzzyQuery has to be between 0.0f and 1.0f !")); + } + termImage=discardEscapeChar(term->image); + q = getFuzzyQuery(_field, termImage,fms); + } else { + termImage=discardEscapeChar(term->image); + q = getFieldQuery(_field, termImage); + } + _CLDELETE_LCARRAY(termImage); + break; + } + case RANGEIN_START: + { + jj_consume_token(RANGEIN_START); + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEIN_GOOP: + goop1 = jj_consume_token(RANGEIN_GOOP); + break; + case RANGEIN_QUOTED: + goop1 = jj_consume_token(RANGEIN_QUOTED); + break; + default: + jj_la1[12] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == RANGEIN_TO) + jj_consume_token(RANGEIN_TO); + else + jj_la1[13] = jj_gen; + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEIN_GOOP: + goop2 = jj_consume_token(RANGEIN_GOOP); + break; + case RANGEIN_QUOTED: + goop2 = jj_consume_token(RANGEIN_QUOTED); + break; + default: + jj_la1[14] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + jj_consume_token(RANGEIN_END); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[15] = jj_gen; + + // TODO: Allow analysis::Term to accept ownership on a TCHAR* and save on extra dup's + if (goop1->kind == RANGEIN_QUOTED) { + _tcscpy(goop1->image, goop1->image+1); + goop1->image[_tcslen(goop1->image)-1]='\0'; + } + if (goop2->kind == RANGEIN_QUOTED) { + _tcscpy(goop2->image, goop2->image+1); + goop2->image[_tcslen(goop2->image)-1]='\0'; + } + TCHAR* t1 = discardEscapeChar(goop1->image); + TCHAR* t2 = discardEscapeChar(goop2->image); + q = getRangeQuery(_field, t1, t2, true); + _CLDELETE_LCARRAY(t1); + _CLDELETE_LCARRAY(t2); + break; + } + case RANGEEX_START: + { + jj_consume_token(RANGEEX_START); + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEEX_GOOP: + goop1 = jj_consume_token(RANGEEX_GOOP); + break; + case RANGEEX_QUOTED: + goop1 = jj_consume_token(RANGEEX_QUOTED); + break; + default: + jj_la1[16] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == RANGEEX_TO) + jj_consume_token(RANGEEX_TO); + else + jj_la1[17] = jj_gen; + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEEX_GOOP: + goop2 = jj_consume_token(RANGEEX_GOOP); + break; + case RANGEEX_QUOTED: + goop2 = jj_consume_token(RANGEEX_QUOTED); + break; + default: + jj_la1[18] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + jj_consume_token(RANGEEX_END); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[19] = jj_gen; + + if (goop1->kind == RANGEEX_QUOTED) + goop1->image = goop1->image + 1; + + if (goop2->kind == RANGEEX_QUOTED) + goop2->image = goop2->image + 1; + + TCHAR* t1 = discardEscapeChar(goop1->image); + TCHAR* t2 = discardEscapeChar(goop2->image); + q = getRangeQuery(_field, t1, t2, false); + _CLDELETE_LCARRAY(t1); + _CLDELETE_LCARRAY(t2); + break; + } + case QUOTED: + { + term = jj_consume_token(QUOTED); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + fuzzySlop = jj_consume_token(FUZZY_SLOP); + else + jj_la1[20] = jj_gen; + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[21] = jj_gen; + + int32_t s = phraseSlop; + + if (fuzzySlop != NULL) { + try { + s = _ttoi(fuzzySlop->image + 1); + } + catch (...) { /* ignore exceptions */ } + } + // TODO: Make sure this hack, save an extra dup, is legal and not harmful + const size_t st = _tcslen(term->image); + term->image[st-1]='\0'; + TCHAR* tmp = discardEscapeChar(term->image+1); + q = getFieldQuery(_field, tmp, s); + _CLDELETE_LCARRAY(tmp); + break; + } + default: + { + jj_la1[22] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + if (boost != NULL) { + float_t f = 1.0; + try { + f = _tcstod(boost->image, NULL); + } + catch (...) { + /* Should this be handled somehow? (defaults to "no boost", if + * boost number is invalid) + */ + } + + // avoid boosting null queries, such as those caused by stop words + if (q != NULL) { + q->setBoost(f); + } + } + return q; +} + +bool QueryParser::jj_2_1(const int32_t xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_1(); } + catch(CLuceneError& e) { + // TODO: Improve this handling + if (e.number()==CL_ERR_Parse && _tcscmp(e.twhat(),_T("LookaheadSuccess"))==0) + return true; + else + throw e; + } + _CLFINALLY( jj_save(0, xla); ); +} + +bool QueryParser::jj_3R_2() { + if (jj_scan_token(TERM)) return true; + if (jj_scan_token(COLON)) return true; + return false; +} + +bool QueryParser::jj_3_1() { + QueryToken* xsp = jj_scanpos; + if (jj_3R_2()) { + jj_scanpos = xsp; + if (jj_3R_3()) return true; + } + return false; +} + +bool QueryParser::jj_3R_3() { + if (jj_scan_token(STAR)) return true; + if (jj_scan_token(COLON)) return true; + return false; +} + +QueryParser::QueryParser(CharStream* stream):_operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(NULL),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + _init(stream); +} + +void QueryParser::_init(CharStream* stream){ + if (token_source == NULL) + token_source = _CLNEW QueryParserTokenManager(stream); + _firstToken = token = _CLNEW QueryToken(); + jj_ntk = -1; + jj_gen = 0; + for (int32_t i = 0; i < 23; i++) jj_la1[i] = -1; + jj_2_rtns = new JJCalls(); +} + +QueryToken* QueryParser::jj_consume_token(const int32_t kind) +{ + QueryToken* oldToken = token; + if (token->next != NULL) + token = token->next; + else + token = token->next = token_source->getNextToken(); + jj_ntk = -1; + if (token->kind == kind) { + jj_gen++; + if (++jj_gc > 100) { + jj_gc = 0; + JJCalls* c = jj_2_rtns; + while (c != NULL) { + if (c->gen < jj_gen) c->first = NULL; + c = c->next; + } + } + return token; + } + token = oldToken; + jj_kind = kind; + generateParseException(); + return NULL; +} + +bool QueryParser::jj_scan_token(const int32_t kind) { + if (jj_scanpos == jj_lastpos) { + jj_la--; + if (jj_scanpos->next == NULL) { + jj_lastpos = jj_scanpos = jj_scanpos->next = token_source->getNextToken(); + } else { + jj_lastpos = jj_scanpos = jj_scanpos->next; + } + } else { + jj_scanpos = jj_scanpos->next; + } + if (jj_rescan) { + int32_t i = 0; QueryToken* tok = token; + while (tok != NULL && tok != jj_scanpos) { i++; tok = tok->next; } + if (tok != NULL) jj_add_error_token(kind, i); + } + if (jj_scanpos->kind != kind) return true; + if (jj_la == 0 && jj_scanpos == jj_lastpos) _CLTHROWT(CL_ERR_Parse, _T("LookaheadSuccess")); + return false; +} + +void QueryParser::ReInit(CharStream* stream) { + token_source->ReInit(stream); + delete jj_2_rtns; + _deleteTokens(); + _init(NULL); +} + +QueryParser::QueryParser(QueryParserTokenManager* tm):_operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(NULL),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + ReInit(tm); +} + +void QueryParser::ReInit(QueryParserTokenManager* tm){ + _CLLDELETE(token_source); + token_source = tm; + _deleteTokens(); + _firstToken = token = _CLNEW QueryToken(); + jj_ntk = -1; + jj_gen = 0; + for (int32_t i = 0; i < 23; i++) jj_la1[i] = -1; + delete jj_2_rtns; + jj_2_rtns = new JJCalls(); +} + +QueryToken* QueryParser::getNextToken() { + if (token->next != NULL) token = token->next; + else token = token->next = token_source->getNextToken(); + jj_ntk = -1; + jj_gen++; + return token; +} + +QueryToken* QueryParser::getToken(int32_t index) { + QueryToken* t = lookingAhead ? jj_scanpos : token; + for (int32_t i = 0; i < index; i++) { + if (t->next != NULL) t = t->next; + else t = t->next = token_source->getNextToken(); + } + return t; +} + +int32_t QueryParser::f_jj_ntk() { + if ((jj_nt=token->next) == NULL){ + token->next=token_source->getNextToken(); + jj_ntk = token->next->kind; + return jj_ntk; + } + else{ + jj_ntk = jj_nt->kind; + return jj_ntk; + } +} + +QueryParser::JJCalls::JJCalls():gen(0),first(NULL),arg(0),next(NULL) +{ +} +QueryParser::JJCalls::~JJCalls(){ + _CLLDELETE(first); + delete next; +} + +void QueryParser::jj_add_error_token(const int32_t kind, int32_t pos) { + if (pos >= 100) return; + if (pos == jj_endpos + 1) { + jj_lasttokens[jj_endpos++] = kind; + } else if (jj_endpos != 0) { + _CLLDELETE(jj_expentry); + jj_expentry = _CLNEW ValueArray(jj_endpos); + for (int32_t i = 0; i < jj_endpos; i++) { + jj_expentry->values[i] = jj_lasttokens[i]; + } + bool exists = false; + if (!jj_expentries) jj_expentries = _CLNEW CL_NS(util)::CLVector*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >(); + for (size_t i=0;isize();i++){ + const ValueArray* oldentry = jj_expentries->at(i); + if (oldentry->length == jj_expentry->length) { + exists = true; + for (size_t i = 0; i < jj_expentry->length; i++) { + if (oldentry->values[i] != jj_expentry->values[i]) { + exists = false; + break; + } + } + if (exists) break; + } + } + if (!exists) {jj_expentries->push_back(jj_expentry); jj_expentry=NULL;} + if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; + } +} + +void QueryParser::generateParseException() { + // lazily create the vectors required for this operation + if (!jj_expentries) + jj_expentries = _CLNEW CL_NS(util)::CLVector*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >(); + else + jj_expentries->clear(); + bool la1tokens[33]; + for (int32_t i = 0; i < 33; i++) { + la1tokens[i] = false; + } + if (jj_kind >= 0) { + la1tokens[jj_kind] = true; + jj_kind = -1; + } + for (int32_t i = 0; i < 23; i++) { + if (jj_la1[i] == jj_gen) { + for (int32_t j = 0; j < 32; j++) { + if ((jj_la1_0[i] & (1<(1); + jj_expentry->values[0] = i; + jj_expentries->push_back(jj_expentry); + jj_expentry=NULL; + } + } + jj_endpos = 0; + jj_rescan_token(); + jj_add_error_token(0, 0); + + TCHAR* err = getParseExceptionMessage(token, jj_expentries, tokenImage); + _CLTHROWT_DEL(CL_ERR_Parse, err); +} + +void QueryParser::jj_rescan_token() { + jj_rescan = true; + JJCalls* p = jj_2_rtns; + do { + if (p->gen > jj_gen) { + jj_la = p->arg; jj_lastpos = jj_scanpos = p->first; + jj_3_1(); + } + p = p->next; + } while (p != NULL); + jj_rescan = false; +} + +void QueryParser::jj_save(const int32_t /*index*/, int32_t xla) { + JJCalls* p = jj_2_rtns; + while (p->gen > jj_gen) { + if (p->next == NULL) { p = p->next = new JJCalls(); break; } + p = p->next; + } + p->gen = jj_gen + xla - jj_la; + p->first = token; + p->arg = xla; +} + +TCHAR* QueryParserConstants::addEscapes(TCHAR* str) { + const size_t len = _tcslen(str); + StringBuffer retval(len * 2); + TCHAR ch; + for (size_t i = 0; i < len; i++) { + switch (str[i]) + { + case 0 : + continue; + case _T('\b'): + retval.append(_T("\\b")); + continue; + case _T('\t'): + retval.append(_T("\\t")); + continue; + case _T('\n'): + retval.append(_T("\\n")); + continue; + case _T('\f'): + retval.append(_T("\\f")); + continue; + case _T('\r'): + retval.append(_T("\\r")); + continue; + case _T('"'): + retval.append(_T("\\\"")); + continue; + case _T('\''): + retval.append(_T("\\'")); + continue; + case _T('\\'): + retval.append(_T("\\\\")); + continue; + default: + if ((ch = str[i]) < 0x20 || ch > 0x7e) { + TCHAR buf[4]; + _sntprintf(buf, 4, _T("%012X"), static_cast(ch)); + retval.append(_T("\\u")); + retval.append(buf); + } else { + retval.appendChar(ch); + } + continue; + } + } + return retval.giveBuffer(); +} + +TCHAR* QueryParser::getParseExceptionMessage(QueryToken* currentToken, + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >* expectedTokenSequences, + const TCHAR* tokenImage[]) +{ + // TODO: Check to see what's a realistic initial value for the buffers here + // TODO: Make eol configurable (will be useful for PrintStream implementation as well later)? + const TCHAR* eol = _T("\n"); + + StringBuffer expected(CL_MAX_PATH); + size_t maxSize = 0; + for (size_t i = 0; i < expectedTokenSequences->size(); i++) { + if (maxSize < expectedTokenSequences->at(i)->length) { + maxSize = expectedTokenSequences->at(i)->length; + } + for (size_t j = 0; j < expectedTokenSequences->at(i)->length; j++) { + expected.append(tokenImage[expectedTokenSequences->at(i)->values[j]]); + expected.appendChar(_T(' ')); + } + if (expectedTokenSequences->at(i)->values[expectedTokenSequences->at(i)->length - 1] != 0) { + expected.append(_T("...")); + } + expected.append(eol); + expected.append(_T(" ")); + } + + StringBuffer retval(CL_MAX_PATH); + retval.append(_T("Encountered \"")); + QueryToken* tok = currentToken->next; + for (size_t i = 0; i < maxSize; i++) { + if (i != 0) retval.appendChar(' '); + if (tok->kind == 0) { + retval.append(tokenImage[0]); + break; + } + if (tok->image){ + TCHAR* buf = addEscapes(tok->image); + retval.append(buf); + _CLDELETE_CARRAY(buf); + } + tok = tok->next; + } + retval.append(_T("\" at line ")); + retval.appendInt(currentToken->next->beginLine); + retval.append(_T(", column ")); + retval.appendInt(currentToken->next->beginColumn); + retval.appendChar(_T('.')); + retval.append(eol); + if (expectedTokenSequences->size() == 1) { + retval.append(_T("Was expecting:")); + retval.append(eol); + retval.append(_T(" ")); + } else { + retval.append(_T("Was expecting one of:")); + retval.append(eol); + retval.append(_T(" ")); + } + retval.append(expected.getBuffer()); + + return retval.giveBuffer(); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParser.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParser.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParser.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParser.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,530 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_QueryParser_ +#define _lucene_queryParser_QueryParser_ + +#include "CLucene/util/Array.h" +#include "QueryParserTokenManager.h" +#include "CLucene/document/DateTools.h" +#include "CLucene/util/VoidMap.h" +#include "CLucene/util/VoidList.h" + +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(search,Query) +CL_CLASS_DEF(search,BooleanClause) + +CL_NS_DEF(queryParser) + +class QueryParserConstants; + +/** + * This class is generated by JavaCC. The most important method is + * {@link #parse(String)}. + * + * The syntax for query strings is as follows: + * A Query is a series of clauses. + * A clause may be prefixed by: + *
    + *
  • a plus (+) or a minus (-) sign, indicating + * that the clause is required or prohibited respectively; or + *
  • a term followed by a colon, indicating the field to be searched. + * This enables one to construct queries which search multiple fields. + *
+ * + * A clause may be either: + *
    + *
  • a term, indicating all the documents that contain this term; or + *
  • a nested query, enclosed in parentheses. Note that this may be used + * with a +/- prefix to require any of a set of + * terms. + *
+ * + * Thus, in BNF, the query grammar is: + *
+ *   Query  ::= ( Clause )*
+ *   Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" )
+ * 
+ * + *

+ * Examples of appropriately formatted queries can be found in the query syntax + * documentation. + *

+ * + *

+ * In {@link RangeQuery}s, QueryParser tries to detect date values, e.g. + * date:[6/1/2005 TO 6/4/2005] produces a range query that searches + * for "date" fields between 2005-06-01 and 2005-06-04. Note that the format + * of the accepted input depends on {@link #setLocale(Locale) the locale}. + * By default a date is converted into a search term using the deprecated + * {@link DateField} for compatibility reasons. + * To use the new {@link DateTools} to convert dates, a + * {@link org.apache.lucene.document.DateTools.Resolution} has to be set. + *

+ *

+ * The date resolution that shall be used for RangeQueries can be set + * using {@link #setDateResolution(DateTools.Resolution)} + * or {@link #setDateResolution(String, DateTools.Resolution)}. The former + * sets the default date resolution for all fields, whereas the latter can + * be used to set field specific date resolutions. Field specific date + * resolutions take, if set, precedence over the default date resolution. + *

+ *

+ * If you use neither {@link DateField} nor {@link DateTools} in your + * index, you can create your own + * query parser that inherits QueryParser and overwrites + * {@link #getRangeQuery(String, String, String, boolean)} to + * use a different method for date conversion. + *

+ * + *

Note that QueryParser is not thread-safe.

+ * + * @author Brian Goetz + * @author Peter Halacsy + * @author Tatu Saloranta + */ +class CLUCENE_EXPORT QueryParser : public virtual QueryParserConstants +{ +private: + LUCENE_STATIC_CONSTANT(int32_t, CONJ_NONE=0); + LUCENE_STATIC_CONSTANT(int32_t, CONJ_AND=1); + LUCENE_STATIC_CONSTANT(int32_t, CONJ_OR=2); + + LUCENE_STATIC_CONSTANT(int32_t, MOD_NONE=0); + LUCENE_STATIC_CONSTANT(int32_t, MOD_NOT=10); + LUCENE_STATIC_CONSTANT(int32_t, MOD_REQ=11); + +public: + /** The default operator for parsing queries. + * Use {@link QueryParser#setDefaultOperator} to change it. + */ + enum Operator { + OR_OPERATOR, + AND_OPERATOR + }; + +private: + /** The actual operator that parser uses to combine query terms */ + Operator _operator; + + bool lowercaseExpandedTerms; + bool useOldRangeQuery; + bool allowLeadingWildcard; + bool enablePositionIncrements; + + CL_NS(analysis)::Analyzer* analyzer; + TCHAR* field; + int32_t phraseSlop; + float_t fuzzyMinSim; + int32_t fuzzyPrefixLength; + //TODO: Locale locale = Locale.getDefault(); + + // the default date resolution + CL_NS(document)::DateTools::Resolution dateResolution; + // maps field names to date resolutions + typedef CL_NS(util)::CLHashMap FieldToDateResolutionType; + FieldToDateResolutionType* fieldToDateResolution; + +public: + /** Constructs a query parser. + * @param f the default field for query terms. + * @param a used to find terms in the query text. + */ + QueryParser(const TCHAR* f, CL_NS(analysis)::Analyzer* a); + virtual ~QueryParser(); + void _deleteTokens(); + + /** For backward compatibility */ + static CL_NS(search)::Query* parse(const TCHAR* q, const TCHAR* f, CL_NS(analysis)::Analyzer* a); + + /** Parses a query string, returning a {@link org.apache.lucene.search.Query}. + * @param query the query string to be parsed. + * @throws ParseException if the parsing fails + */ + CL_NS(search)::Query* parse(const TCHAR* _query); + + /** + * @return Returns the analyzer. + */ + CL_NS(analysis)::Analyzer* getAnalyzer() const; + + /** + * @return Returns the field. + */ + const TCHAR* getField() const; + + /** + * Get the minimal similarity for fuzzy queries. + */ + float_t getFuzzyMinSim() const; + + /** + * Set the minimum similarity for fuzzy queries. + * Default is 0.5f. + */ + void setFuzzyMinSim(const float_t _fuzzyMinSim); + + /** + * Get the prefix length for fuzzy queries. + * @return Returns the fuzzyPrefixLength. + */ + int32_t getFuzzyPrefixLength() const; + + /** + * Set the prefix length for fuzzy queries. Default is 0. + * @param fuzzyPrefixLength The fuzzyPrefixLength to set. + */ + void setFuzzyPrefixLength(const int32_t _fuzzyPrefixLength); + + /** + * Sets the default slop for phrases. If zero, then exact phrase matches + * are required. Default value is zero. + */ + void setPhraseSlop(const int32_t _phraseSlop); + + /** + * Gets the default slop for phrases. + */ + int32_t getPhraseSlop() const; + + /** + * Set to true to allow leading wildcard characters. + *

+ * When set, * or ? are allowed as + * the first character of a PrefixQuery and WildcardQuery. + * Note that this can produce very slow + * queries on big indexes. + *

+ * Default: false. + */ + void setAllowLeadingWildcard(const bool _allowLeadingWildcard); + + /** + * @see #setAllowLeadingWildcard(boolean) + */ + bool getAllowLeadingWildcard() const; + + /** + * Set to true to enable position increments in result query. + *

+ * When set, result phrase and multi-phrase queries will + * be aware of position increments. + * Useful when e.g. a StopFilter increases the position increment of + * the token that follows an omitted token. + *

+ * Default: false. + */ + void setEnablePositionIncrements(const bool _enable); + + /** + * @see #setEnablePositionIncrements(boolean) + */ + bool getEnablePositionIncrements() const; + + /** + * Sets the boolean operator of the QueryParser. + * In default mode (OR_OPERATOR) terms without any modifiers + * are considered optional: for example capital of Hungary is equal to + * capital OR of OR Hungary.
+ * In AND_OPERATOR mode terms are considered to be in conjuction: the + * above mentioned query is parsed as capital AND of AND Hungary + */ + void setDefaultOperator(Operator _op); + + /** + * Gets implicit operator setting, which will be either AND_OPERATOR + * or OR_OPERATOR. + */ + Operator getDefaultOperator() const; + + /** + * Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically + * lower-cased or not. Default is true. + */ + void setLowercaseExpandedTerms(const bool _lowercaseExpandedTerms); + + /** + * @see #setLowercaseExpandedTerms(boolean) + */ + bool getLowercaseExpandedTerms() const; + + /** + * By default QueryParser uses new ConstantScoreRangeQuery in preference to RangeQuery + * for range queries. This implementation is generally preferable because it + * a) Runs faster b) Does not have the scarcity of range terms unduly influence score + * c) avoids any "TooManyBooleanClauses" exception. + * However, if your application really needs to use the old-fashioned RangeQuery and the above + * points are not required then set this option to true + * Default is false. + */ + void setUseOldRangeQuery(const bool _useOldRangeQuery); + + /** + * @see #setUseOldRangeQuery(boolean) + */ + bool getUseOldRangeQuery() const; + + /** + * Set locale used by date range parsing. + * + void setLocale(const Locale _locale) { + locale = _locale; + } + + + * Returns current locale, allowing access by subclasses. + * + Locale getLocale() const { + return locale; + } + */ + + /** + * Sets the default date resolution used by RangeQueries for fields for which no + * specific date resolutions has been set. Field specific resolutions can be set + * with {@link #setDateResolution(String, DateTools.Resolution)}. + * + * @param dateResolution the default date resolution to set + */ + void setDateResolution(const CL_NS(document)::DateTools::Resolution _dateResolution); + + /** + * Sets the date resolution used by RangeQueries for a specific field. + * + * @param fieldName field for which the date resolution is to be set + * @param dateResolution date resolution to set + */ + void setDateResolution(const TCHAR* fieldName, const CL_NS(document)::DateTools::Resolution _dateResolution); + + /** + * Returns the date resolution that is used by RangeQueries for the given field. + * Returns null (NO_RESOLUTION), if no default or field specific date resolution has been set + * for the given field. + * + */ + CL_NS(document)::DateTools::Resolution getDateResolution(const TCHAR* fieldName) const; + +protected: + void addClause(std::vector& clauses, int32_t conj, int32_t mods, CL_NS(search)::Query* q); + + /** + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFieldQuery(const TCHAR* _field, TCHAR* queryText); + + /** + * Base implementation delegates to {@link #getFieldQuery(String,String)}. + * This method may be overridden, for example, to return + * a SpanNearQuery instead of a PhraseQuery. + * + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFieldQuery(const TCHAR* _field, TCHAR* queryText, const int32_t slop); + + /** + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive); + + /** + * Factory method for generating query, given a set of clauses. + * By default creates a boolean query composed of clauses passed in. + * + * Can be overridden by extending classes, to modify query being + * returned. + * + * @param clauses Vector that contains {@link BooleanClause} instances + * to join. + * @param disableCoord true if coord scoring should be disabled. + * + * @return Resulting {@link Query} object. + * @exception ParseException throw in overridden method to disallow + */ + CL_NS(search)::Query* getBooleanQuery(std::vector& clauses, bool disableCoord = false); + + /** + * Factory method for generating a query. Called when parser + * parses an input term token that contains one or more wildcard + * characters (? and *), but is not a prefix term token (one + * that has just a single * character at the end) + *

+ * Depending on settings, prefix term may be lower-cased + * automatically. It will not go through the default Analyzer, + * however, since normal Analyzers are unlikely to work properly + * with wildcard templates. + *

+ * Can be overridden by extending classes, to provide custom handling for + * wildcard queries, which may be necessary due to missing analyzer calls. + * + * @param field Name of the field query will use. + * @param termStr Term token that contains one or more wild card + * characters (? or *), but is not simple prefix term + * + * @return Resulting {@link Query} built for the term + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getWildcardQuery(const TCHAR* _field, TCHAR* termStr); + + /** + * Factory method for generating a query (similar to + * {@link #getWildcardQuery}). Called when parser parses an input term + * token that uses prefix notation; that is, contains a single '*' wildcard + * character as its last character. Since this is a special case + * of generic wildcard term, and such a query can be optimized easily, + * this usually results in a different query object. + *

+ * Depending on settings, a prefix term may be lower-cased + * automatically. It will not go through the default Analyzer, + * however, since normal Analyzers are unlikely to work properly + * with wildcard templates. + *

+ * Can be overridden by extending classes, to provide custom handling for + * wild card queries, which may be necessary due to missing analyzer calls. + * + * @param field Name of the field query will use. + * @param termStr Term token to use for building term for the query + * (without trailing '*' character!) + * + * @return Resulting {@link Query} built for the term + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getPrefixQuery(const TCHAR* _field, TCHAR* _termStr); + + /** + * Factory method for generating a query (similar to + * {@link #getWildcardQuery}). Called when parser parses + * an input term token that has the fuzzy suffix (~) appended. + * + * @param field Name of the field query will use. + * @param termStr Term token to use for building term for the query + * + * @return Resulting {@link Query} built for the term + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFuzzyQuery(const TCHAR* _field, TCHAR* termStr, const float_t minSimilarity); + +private: + /** + * Returns a String where the escape char has been + * removed, or kept only once if there was a double escape. + * + * Supports escaped unicode characters, e. g. translates + * A to A. + * + * @memory caller is responsible to free the returned string + * + */ + TCHAR* discardEscapeChar(TCHAR* input, TCHAR* output=NULL); + + /** Returns the numeric value of the hexadecimal character */ + static int32_t hexToInt(TCHAR c); + + struct JJCalls; + +public: + /** + * Returns a String where those characters that QueryParser + * expects to be escaped are escaped by a preceding \. + * + * @memory caller is responsible to free the returned string + */ + static TCHAR* escape(const TCHAR* s); + + // * Query ::= ( Clause )* + // * Clause ::= ["+", "-"] [ ":"] ( | "(" Query ")" ) + int32_t Conjunction(); + + int32_t Modifiers(); + + // This makes sure that there is no garbage after the query string + CL_NS(search)::Query* TopLevelQuery(TCHAR* _field); + + CL_NS(search)::Query* fQuery(TCHAR* _field); + + CL_NS(search)::Query* fClause(TCHAR* _field); + +public: + CL_NS(search)::Query* fTerm(const TCHAR* _field); + +private: + bool jj_2_1(const int32_t xla); + bool jj_3R_2(); + bool jj_3_1(); + bool jj_3R_3(); + +public: + QueryParserTokenManager* token_source; + QueryToken *token, *jj_nt; +private: + QueryToken *_firstToken; + int32_t jj_ntk; + QueryToken *jj_scanpos, *jj_lastpos; + int32_t jj_la; +public: + bool lookingAhead; +private: + bool jj_semLA; + int32_t jj_gen; + int32_t jj_la1[23]; + static const int32_t jj_la1_0[]; + static const int32_t jj_la1_1[]; + JJCalls* jj_2_rtns; + bool jj_rescan; + int32_t jj_gc; + +public: + QueryParser(CharStream* stream); + void ReInit(CharStream* stream); + QueryParser(QueryParserTokenManager* tm); + void ReInit(QueryParserTokenManager* tm); + +private: + void _init(CharStream* stream); + QueryToken* jj_consume_token(const int32_t kind); + bool jj_scan_token(const int32_t kind); + +public: + QueryToken* getNextToken(); + QueryToken* getToken(int32_t index); + +private: + int32_t f_jj_ntk(); + + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, + CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > + >* jj_expentries; + CL_NS(util)::ValueArray* jj_expentry; + int32_t jj_kind; + int32_t jj_lasttokens[100]; + int32_t jj_endpos; + + void jj_add_error_token(const int32_t kind, int32_t pos); + +public: + void generateParseException(); + + //void enable_tracing() {} + //void disable_tracing() {} + +private: + void jj_rescan_token(); + void jj_save(const int32_t index, int32_t xla); + + TCHAR* getParseExceptionMessage(QueryToken* currentToken, + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, + CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >* expectedTokenSequences, + const TCHAR* tokenImage[]); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParserTokenManager.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParserTokenManager.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParserTokenManager.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParserTokenManager.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1265 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "QueryParserTokenManager.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "QueryToken.h" + +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF(queryParser) + +const int64_t QueryParserTokenManager::jjbitVec2[]={0x0L, 0x0L, _ILONGLONG(0xffffffffffffffff), _ILONGLONG(0xffffffffffffffff)}; +const int64_t QueryParserTokenManager::jjbitVec0[] = { + _ILONGLONG(0xfffffffffffffffe), _ILONGLONG(0xffffffffffffffff), _ILONGLONG(0xffffffffffffffff), _ILONGLONG(0xffffffffffffffff) +}; +const int32_t QueryParserTokenManager::jjnextStates[]={ + 15, 17, 18, 29, 32, 23, 33, 30, 20, 21, 32, 23, 33, 31, 34, 27, + 2, 4, 5, 0, 1 +}; +const TCHAR* QueryParserTokenManager::jjstrLiteralImages[]={ + _T(""), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, _T("\53"), _T("\55)"), _T("\50)"), + _T("\51"), _T("\72"), _T("\52"), _T("\136"), NULL, NULL, NULL, NULL, NULL, _T("\133"), _T("\173"), NULL, + _T("\124\117"), _T("\135"), NULL, NULL, _T("\124\117"), _T("\175"), NULL, NULL +}; +const TCHAR* QueryParserTokenManager::lexStateNames [] = { + _T("Boost"), + _T("RangeEx"), + _T("RangeIn"), + _T("DEFAULT") +}; +const int32_t QueryParserTokenManager::jjnewLexState [] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 2, 1, 3, + -1, 3, -1, -1, -1, 3, -1, -1 +}; +const int64_t QueryParserTokenManager::jjtoToken [] = { + _ILONGLONG(0x1ffffff81) +}; +const int64_t QueryParserTokenManager::jjtoSkip [] = { + _ILONGLONG(0x40) +}; + +QueryParserTokenManager::QueryParserTokenManager(CharStream* stream, const int32_t lexState) : + input_stream(stream), curChar(0), curLexState(3), defaultLexState(3),jjnewStateCnt(0),jjround(0), + jjmatchedPos(0),jjmatchedKind(0) +{ + if (lexState > -1) + SwitchTo(lexState); +} +QueryParserTokenManager::~QueryParserTokenManager() +{ + _CLLDELETE(input_stream); +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_3(const int32_t /*pos*/, int64_t /*active0*/) +{ + return -1; +} + +int32_t QueryParserTokenManager::jjStartNfa_3(int32_t pos, int64_t active0) +{ + return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStopAtPos(const int32_t pos, const int32_t kind) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + return pos + 1; +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_3(int32_t pos, int32_t kind, int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos + 1; + } + return jjMoveNfa_3(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_3() +{ + switch(curChar) + { + case 40: + return jjStopAtPos(0, 12); + case 41: + return jjStopAtPos(0, 13); + case 42: + return jjStartNfaWithStates_3(0, 15, 36); + case 43: + return jjStopAtPos(0, 10); + case 45: + return jjStopAtPos(0, 11); + case 58: + return jjStopAtPos(0, 14); + case 91: + return jjStopAtPos(0, 22); + case 94: + return jjStopAtPos(0, 16); + case 123: + return jjStopAtPos(0, 23); + default : + return jjMoveNfa_3(0, 0); + } +} + +void QueryParserTokenManager::jjCheckNAdd(const int32_t state) +{ + if (jjrounds[state] != jjround) + { + jjstateSet[jjnewStateCnt++] = state; + jjrounds[state] = jjround; + } +} + +void QueryParserTokenManager::jjAddStates(int32_t start, const int32_t end) +{ + do { + jjstateSet[jjnewStateCnt++] = jjnextStates[start]; + } while (start++ != end); +} + +void QueryParserTokenManager::jjCheckNAddTwoStates(const int32_t state1, const int32_t state2) +{ + jjCheckNAdd(state1); + jjCheckNAdd(state2); +} + +void QueryParserTokenManager::jjCheckNAddStates(int32_t start, const int32_t end) +{ + do { + jjCheckNAdd(jjnextStates[start]); + } while (start++ != end); +} + +void QueryParserTokenManager::jjCheckNAddStates(const int32_t start) +{ + jjCheckNAdd(jjnextStates[start]); + jjCheckNAdd(jjnextStates[start + 1]); +} + +int32_t QueryParserTokenManager::jjMoveNfa_3(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 36; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = (uint64_t) (((uint64_t)1L) << ((int32_t)curChar)); + do + { + switch(jjstateSet[--i]) + { + case 36: + case 25: + if (( _ILONGLONG(0xfbfffcf8ffffd9ff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 0: + if (( _ILONGLONG(0xfbffd4f8ffffd9ff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + else if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddStates(0, 2); + else if (curChar == 33) + { + if (kind > 9) + kind = 9; + } + if ((_ILONGLONG(0x7bffd0f8ffffd9ff) & l) != 0L) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + else if (curChar == 42) + { + if (kind > 20) + kind = 20; + } + if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 4; + break; + case 4: + if (curChar == 38 && kind > 7) + kind = 7; + break; + case 5: + if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 4; + break; + case 13: + if (curChar == 33 && kind > 9) + kind = 9; + break; + case 14: + case 16: + if (curChar == 34) + jjCheckNAddStates(0, 2); + break; + case 15: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(0, 2); + break; + case 18: + if (curChar == 34 && kind > 17) + kind = 17; + break; + case 20: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 19) + kind = 19; + jjAddStates(8, 9); + break; + case 21: + if (curChar == 46) + jjCheckNAdd(22); + break; + case 22: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 19) + kind = 19; + jjCheckNAdd(22); + break; + case 23: + if (curChar == 42 && kind > 20) + kind = 20; + break; + case 24: + if ((_ILONGLONG(0xfbffd4f8ffffd9ff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 27: + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if ((_ILONGLONG(0x7bffd0f8ffffd9ff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + if ((_ILONGLONG(0x7bfff8f8ffffd9ff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 31: + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + if ((_ILONGLONG(0x7bfff8f8ffffd9ff) & l) != 0L) + jjCheckNAddStates(10, 12); + break; + case 34: + jjCheckNAddStates(10, 12); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 36: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + else if (curChar == 92) + jjCheckNAddTwoStates(27, 27); + break; + case 0: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + else if (curChar == 92) + jjCheckNAddStates(13, 15); + else if (curChar == 126) + { + if (kind > 19) + kind = 19; + jjstateSet[jjnewStateCnt++] = 20; + } + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 11; + else if (curChar == 124) + jjstateSet[jjnewStateCnt++] = 8; + else if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 6; + else if (curChar == 65) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 1: + if (curChar == 68 && kind > 7) + kind = 7; + break; + case 2: + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 1; + break; + case 3: + if (curChar == 65) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 6: + if (curChar == 82 && kind > 8) + kind = 8; + break; + case 7: + if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 6; + break; + case 8: + if (curChar == 124 && kind > 8) + kind = 8; + break; + case 9: + if (curChar == 124) + jjstateSet[jjnewStateCnt++] = 8; + break; + case 10: + if (curChar == 84 && kind > 9) + kind = 9; + break; + case 11: + if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 10; + break; + case 12: + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 11; + break; + case 15: + jjAddStates(0, 2); + break; + case 17: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 16; + break; + case 19: + if (curChar != 126) + break; + if (kind > 19) + kind = 19; + jjstateSet[jjnewStateCnt++] = 20; + break; + case 24: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 25: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 26: + if (curChar == 92) + jjCheckNAddTwoStates(27, 27); + break; + case 27: + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 30: + if (curChar == 92) + jjCheckNAddTwoStates(31, 31); + break; + case 31: + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + jjCheckNAddStates(10, 12); + break; + case 33: + if (curChar == 92) + jjCheckNAddTwoStates(34, 34); + break; + case 34: + jjCheckNAddStates(10, 12); + break; + case 35: + if (curChar == 92) + jjCheckNAddStates(13, 15); + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 36: + case 25: + case 27: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 0: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + break; + case 15: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(0, 2); + break; + case 24: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + case 31: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + case 34: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjCheckNAddStates(10, 12); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 36 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_1(const int32_t pos, const int64_t active0) +{ + switch (pos) + { + case 0: + if ((active0 & 0x20000000L) != 0L) + { + jjmatchedKind = 32; + return 6; + } + return -1; + default : + return -1; + } +} + +int32_t QueryParserTokenManager::jjStartNfa_1(int32_t pos, int64_t active0) +{ + return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_1(const int32_t pos, const int32_t kind, const int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos + 1; + } + return jjMoveNfa_1(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_1() +{ + switch(curChar) + { + case 84: + return jjMoveStringLiteralDfa1_1(0x20000000L); + case 125: + return jjStopAtPos(0, 30); + default : + return jjMoveNfa_1(0, 0); + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa1_1(int64_t active0) +{ + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else { + jjStopStringLiteralDfa_1(0, active0); + return 1; + } + } + switch(curChar) + { + case 79: + if ((active0 & 0x20000000L) != 0L) + return jjStartNfaWithStates_1(1, 29, 6); + break; + default : + break; + } + return jjStartNfa_1(0, active0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_1(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 7; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0xfffffffeffffffff) & l) != 0L) + { + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + } + if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 1: + if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 2: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(16, 18); + break; + case 3: + if (curChar == 34) + jjCheckNAddStates(16, 18); + break; + case 5: + if (curChar == 34 && kind > 31) + kind = 31; + break; + case 6: + if ((_ILONGLONG(0xfffffffeffffffff) & l) == 0L) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if ((_ILONGLONG(0xdfffffffffffffff) & l) == 0L) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + case 2: + jjAddStates(16, 18); + break; + case 4: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 3; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + case 2: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(16, 18); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_0() +{ + return jjMoveNfa_0(0, 0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_0(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 3; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 24) + kind = 24; + jjAddStates(19, 20); + break; + case 1: + if (curChar == 46) + jjCheckNAdd(2); + break; + case 2: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 24) + kind = 24; + jjCheckNAdd(2); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + /* + uint64_t l = ((uint64_t)1L) << (curChar & 63); + do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt);*/ + i = startsAt; + } + else + { + /* + int32_t hiByte = (int)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt);*/ + i = startsAt; + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_2(const int32_t pos, const int64_t active0) +{ + switch (pos) + { + case 0: + if ((active0 & 0x2000000L) != 0L) + { + jjmatchedKind = 28; + return 6; + } + return -1; + default : + return -1; + } +} + +int32_t QueryParserTokenManager::jjStartNfa_2(int32_t pos, int64_t active0) +{ + return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_2(const int32_t pos, const int32_t kind, const int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos+1; + } + return jjMoveNfa_2(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_2() +{ + switch(curChar) + { + case 84: + return jjMoveStringLiteralDfa1_2(0x2000000L); + case 93: + return jjStopAtPos(0, 26); + default : + return jjMoveNfa_2(0, 0); + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa1_2(const int64_t active0) +{ + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else { + jjStopStringLiteralDfa_2(0, active0); + return 1; + } + } + switch(curChar) + { + case 79: + if ((active0 & 0x2000000L) != 0L) + return jjStartNfaWithStates_2(1, 25, 6); + break; + default : + break; + } + return jjStartNfa_2(0, active0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_2(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 7; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0xfffffffeffffffff) & l) != 0L) + { + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + } + if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 1: + if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 2: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(16, 18); + break; + case 3: + if (curChar == 34) + jjCheckNAddStates(16, 18); + break; + case 5: + if (curChar == 34 && kind > 27) + kind = 27; + break; + case 6: + if ((_ILONGLONG(0xfffffffeffffffff) & l) == 0L) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if ((_ILONGLONG(0xffffffffdfffffff) & l) == 0L) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + case 2: + jjAddStates(16, 18); + break; + case 4: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 3; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + case 2: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(16, 18); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +/*static*/ +bool QueryParserTokenManager::jjCanMove_0(const int32_t hiByte, const int32_t i1, const int32_t i2, const int64_t l1, const int64_t l2) +{ + switch(hiByte) + { + case 0: + return ((jjbitVec2[i2] & l2) != 0L); + default : + if ((jjbitVec0[i1] & l1) != 0L) + return true; + return false; + } +} + +void QueryParserTokenManager::ReInit(CharStream* stream) +{ + jjmatchedPos = jjnewStateCnt = 0; + curLexState = defaultLexState; + _CLLDELETE(input_stream); + input_stream = stream; + ReInitRounds(); +} + +void QueryParserTokenManager::ReInitRounds() +{ + jjround = 0x80000001; + for (int32_t i = 36; i-- > 0;) + jjrounds[i] = 0x80000000; +} + +void QueryParserTokenManager::ReInit(CharStream* stream, const int32_t lexState) +{ + ReInit(stream); + SwitchTo(lexState); +} + +void QueryParserTokenManager::SwitchTo(const int32_t lexState) +{ + if (lexState >= 4 || lexState < 0) { + TCHAR err[CL_MAX_PATH]; + // TODO: use TokenMgrError::INVALID_LEXICAL_STATE? + _sntprintf(err,CL_MAX_PATH,_T("Error: Ignoring invalid lexical state : %d. State unchanged."), lexState); + _CLTHROWA(CL_ERR_TokenMgr,err); + } + else + curLexState = lexState; +} + +QueryToken* QueryParserTokenManager::jjFillToken(){ + QueryToken* t = QueryToken::newToken(jjmatchedKind); + t->kind = jjmatchedKind; + const TCHAR* im = jjstrLiteralImages[jjmatchedKind]; + t->image = (im == NULL) ? input_stream->GetImage() : stringDuplicate(im); + t->beginLine = input_stream->getBeginLine(); + t->beginColumn = input_stream->getBeginColumn(); + t->endLine = input_stream->getEndLine(); + t->endColumn = input_stream->getEndColumn(); + return t; +} + +QueryToken* QueryParserTokenManager::getNextToken() { + QueryToken* matchedToken = NULL; + int32_t curPos = 0; + + for (;;) { + try + { + curChar = input_stream->BeginToken(); + } + _CLCATCH_ERR_ELSE(CL_ERR_IO, { /*else*/ + jjmatchedKind = 0; + matchedToken = jjFillToken(); + return matchedToken; + }); + + switch(curLexState){ + case 0: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_0(); + break; + case 1: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_1(); + break; + case 2: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_2(); + break; + case 3: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_3(); + break; + } + if (jjmatchedKind != 0x7fffffff){ + if (jjmatchedPos + 1 < curPos) + input_stream->backup(curPos - jjmatchedPos - 1); + if ((jjtoToken[jjmatchedKind >> 6] & ((uint64_t)(1L << (jjmatchedKind & 63)))) != (uint64_t)0L) + { + matchedToken = jjFillToken(); + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + return matchedToken; + } + else + { + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + continue; + } + } + int32_t error_line = input_stream->getEndLine(); + int32_t error_column = input_stream->getEndColumn(); + TCHAR* error_after = NULL; + bool EOFSeen = false; + try { input_stream->readChar(); input_stream->backup(1); } + _CLCATCH_ERR_ELSE(CL_ERR_IO, { /*else*/ + EOFSeen = true; + if (curPos <= 1) { + error_after = _CL_NEWARRAY(TCHAR,2); + error_after[0] = _T(' '); + error_after[1] = 0; + } else { + error_after = input_stream->GetImage(); + } + if (curChar == _T('\n') || curChar == _T('\r')) { + error_line++; + error_column = 0; + } + else + error_column++; + }); + if (!EOFSeen) { + input_stream->backup(1); + if (curPos <= 1) { + error_after = _CL_NEWARRAY(TCHAR,2); + error_after[0] = _T(' '); + error_after[1] = 0; + } else { + error_after = input_stream->GetImage(); + } + } + // TODO: TokenMgrError.LEXICAL_ERROR ? + TCHAR* err = getLexicalError(EOFSeen, curLexState, error_line, error_column, error_after, curChar); + _CLDELETE_LCARRAY(error_after); + _CLTHROWT_DEL(CL_ERR_TokenMgr,err); + } +} + +TCHAR* QueryParserTokenManager::getLexicalError(bool EOFSeen, int32_t /*lexState*/, int32_t errorLine, + int32_t errorColumn, TCHAR* errorAfter, TCHAR curChar) +{ + TCHAR* tmp = NULL; + CL_NS(util)::StringBuffer sb(100); + sb.append(_T("Lexical error at line ")); + sb.appendInt(errorLine); + sb.append(_T(", column ")); + sb.appendInt(errorColumn); + sb.append(_T(". Encountered: ")); + if (EOFSeen){ + sb.append(_T(" ")); + }else{ + sb.appendChar(_T('"')); + sb.appendChar(curChar); // TODO: addEscapes ? + sb.appendChar(_T('"')); + sb.append(_T(" (")); + sb.appendInt((int32_t)curChar); + sb.append(_T("), ")); + } + sb.append(_T("after : \"")); + + tmp = addEscapes(errorAfter); + sb.append(tmp); + _CLDELETE_LCARRAY(tmp); + + sb.appendChar(_T('"')); + return sb.giveBuffer(); +} + +CL_NS_END // QueryParserTokenManager diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParserTokenManager.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParserTokenManager.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryParserTokenManager.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryParserTokenManager.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_QueryParserTokenManager_ +#define _lucene_queryParser_QueryParserTokenManager_ + +#include "QueryParserConstants.h" + +CL_NS_DEF(queryParser) + +class CharStream; +class QueryToken; + +class CLUCENE_EXPORT QueryParserTokenManager: public virtual QueryParserConstants +{ +public: + // TODO: PrintStream debugStream = System.out; + // TODO: setDebugStream(PrintStream ds) { debugStream = ds; } + +private: + int32_t jjStopStringLiteralDfa_3(const int32_t pos, int64_t active0); + int32_t jjStartNfa_3(int32_t pos, int64_t active0); + int32_t jjStopAtPos(const int32_t pos, const int32_t kind); + + int32_t jjStartNfaWithStates_3(int32_t pos, int32_t kind, int32_t state); + + int32_t jjMoveStringLiteralDfa0_3(); + + void jjCheckNAdd(const int32_t state); + void jjAddStates(int32_t start, const int32_t end); + void jjCheckNAddTwoStates(const int32_t state1, const int32_t state2); + void jjCheckNAddStates(int32_t start, const int32_t end); + void jjCheckNAddStates(const int32_t start); + + static const int64_t jjbitVec0[]; + static const int64_t jjbitVec2[]; + + int32_t jjMoveNfa_3(const int32_t startState, int32_t curPos); + + int32_t jjStopStringLiteralDfa_1(const int32_t pos, const int64_t active0); + + int32_t jjStartNfa_1(int32_t pos, int64_t active0); + + int32_t jjStartNfaWithStates_1(const int32_t pos, const int32_t kind, const int32_t state); + + int32_t jjMoveStringLiteralDfa0_1(); + int32_t jjMoveStringLiteralDfa1_1(int64_t active0); + int32_t jjMoveNfa_1(const int32_t startState, int32_t curPos); + int32_t jjMoveStringLiteralDfa0_0(); + + int32_t jjMoveNfa_0(const int32_t startState, int32_t curPos); + int32_t jjStopStringLiteralDfa_2(const int32_t pos, const int64_t active0); + int32_t jjStartNfa_2(int32_t pos, int64_t active0); + + int32_t jjStartNfaWithStates_2(const int32_t pos, const int32_t kind, const int32_t state); + + int32_t jjMoveStringLiteralDfa0_2(); + int32_t jjMoveStringLiteralDfa1_2(const int64_t active0); + + int32_t jjMoveNfa_2(const int32_t startState, int32_t curPos); + + static const int32_t jjnextStates[]; + + static bool jjCanMove_0(const int32_t hiByte, const int32_t i1, const int32_t i2, const int64_t l1, + const int64_t l2); + +public: + static const TCHAR* jjstrLiteralImages []; + static const TCHAR* lexStateNames []; + static const int32_t jjnewLexState []; + static const int64_t jjtoToken []; + static const int64_t jjtoSkip []; +protected: + CharStream* input_stream; +private: + int32_t jjrounds[36]; + int32_t jjstateSet[72]; +protected: + TCHAR curChar; +public: + QueryParserTokenManager(CharStream* stream, const int32_t lexState = -1); + virtual ~QueryParserTokenManager(); + + void ReInit(CharStream* stream); +private: + void ReInitRounds(); +public: + void ReInit(CharStream* stream, const int32_t lexState); + void SwitchTo(const int32_t lexState); + +protected: + QueryToken* jjFillToken(); + + int32_t curLexState; + int32_t defaultLexState; + int32_t jjnewStateCnt; + uint32_t jjround; + int32_t jjmatchedPos; + int32_t jjmatchedKind; + +public: + QueryToken* getNextToken(); + +private: + static TCHAR* getLexicalError(bool EOFSeen, int32_t lexState, int32_t errorLine, int32_t errorColumn, + TCHAR* errorAfter, TCHAR curChar); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryToken.cpp clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryToken.cpp --- clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryToken.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryToken.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,51 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryToken.h" + +CL_NS_DEF(queryParser) + + +QueryToken::QueryToken() : + kind(0), + beginLine(0), + beginColumn(0), + endLine(0), + endColumn(0), + image(NULL), + next(NULL), + specialToken(NULL) +{ +} + +QueryToken::~QueryToken() +{ +#ifndef LUCENE_TOKEN_WORD_LENGTH + _CLDELETE_LCARRAY( image ); +#endif +} + +TCHAR* QueryToken::toString() const +{ +#ifndef LUCENE_TOKEN_WORD_LENGTH + return image; +#else + return STRDUP_TtoT(image); +#endif +} + +/*static*/ +QueryToken* QueryToken::newToken(const int32_t /*ofKind*/) +{ + //switch(ofKind) + //{ + //default : return _CLNEW Token(); + //} + return _CLNEW QueryToken(); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryToken.h clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryToken.h --- clucene-core-0.9.21b/src/core/CLucene/queryParser/QueryToken.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/queryParser/QueryToken.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,94 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_Token_ +#define _lucene_queryParser_Token_ + +CL_NS_DEF(queryParser) + +/** + * Describes the input token stream. + */ +class CLUCENE_EXPORT QueryToken{ +public: + QueryToken(); + ~QueryToken(); + + /** + * An integer that describes the kind of this token. This numbering + * system is determined by JavaCCParser, and a table of these numbers is + * stored in the file ...Constants.java. + */ + int32_t kind; + + /** + * beginLine and beginColumn describe the position of the first character + * of this token; endLine and endColumn describe the position of the + * last character of this token. + */ + int32_t beginLine, beginColumn, endLine, endColumn; + + /** + * The string image of the token. + */ + TCHAR* image; + + /* + TODO: If LUCENE_TOKEN_WORD_LENGTH is still necessary, use the #defines below + #ifdef LUCENE_TOKEN_WORD_LENGTH + TCHAR image[LUCENE_TOKEN_WORD_LENGTH+1]; + #else + TCHAR* image; + #endif + */ + + /** + * A reference to the next regular (non-special) token from the input + * stream. If this is the last token from the input stream, or if the + * token manager has not read tokens beyond this one, this field is + * set to null. This is true only if this token is also a regular + * token. Otherwise, see below for a description of the contents of + * this field. + */ + QueryToken* next; + + /** + * This field is used to access special tokens that occur prior to this + * token, but after the immediately preceding regular (non-special) token. + * If there are no such special tokens, this field is set to null. + * When there are more than one such special token, this field refers + * to the last of these special tokens, which in turn refers to the next + * previous special token through its specialToken field, and so on + * until the first special token (whose specialToken field is null). + * The next fields of special tokens refer to other special tokens that + * immediately follow it (without an intervening regular token). If there + * is no such token, this field is null. + */ + QueryToken* specialToken; + + /** + * Returns the image. + */ + TCHAR* toString() const; + + /** + * Returns a new Token object, by default. However, if you want, you + * can create and return subclass objects based on the value of ofKind. + * Simply add the cases to the switch for all those special cases. + * For example, if you have a subclass of Token called IDToken that + * you want to create if ofKind is ID, simlpy add something like : + * + * case MyParserConstants.ID : return new IDToken(); + * + * to the following switch statement. Then you can cast matchedToken + * variable to the appropriate type and use it in your lexical actions. + */ + static QueryToken* newToken(const int32_t ofKind); + +}; +CL_NS_END +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/BooleanClause.h clucene-core-2.3.3.4/src/core/CLucene/search/BooleanClause.h --- clucene-core-0.9.21b/src/core/CLucene/search/BooleanClause.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/BooleanClause.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,107 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_BooleanClause_ +#define _lucene_search_BooleanClause_ + +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(search,Query) + +CL_NS_DEF(search) + +// A clause in a BooleanQuery. +class CLUCENE_EXPORT BooleanClause:LUCENE_BASE { +public: + /** Specifies how clauses are to occur in matching documents. */ + enum Occur { + /** Use this operator for clauses that must appear in the matching documents. */ + MUST=1, + + /** Use this operator for clauses that should appear in the + * matching documents. For a BooleanQuery with no MUST + * clauses one or more SHOULD clauses must match a document + * for the BooleanQuery to match. + * @see BooleanQuery#setMinimumNumberShouldMatch + */ + SHOULD=2, + + /** Use this operator for clauses that must not appear in the matching documents. + * Note that it is not possible to search for queries that only consist + * of a MUST_NOT clause. */ + MUST_NOT=4 + }; +private: + /** The query whose matching documents are combined by the boolean query. + * @deprecated use {@link #setQuery(Query)} instead */ + Query* query; + + Occur occur; + + /* Middle layer for the Occur enum; will be removed soon enough. */ + void setFields(Occur occur); +public: + bool deleteQuery; + + + int32_t getClauseCount(); + + + /** Constructs a BooleanClause with query q, required + * r and prohibited p. + * @deprecated use BooleanClause(Query, Occur) instead + *

    + *
  • For BooleanClause(query, true, false) use BooleanClause(query, BooleanClause.Occur.MUST) + *
  • For BooleanClause(query, false, false) use BooleanClause(query, BooleanClause.Occur.SHOULD) + *
  • For BooleanClause(query, false, true) use BooleanClause(query, BooleanClause.Occur.MUST_NOT) + *
+ */ + BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p); + + BooleanClause(const BooleanClause& clone); + + /** Constructs a BooleanClause. + */ + BooleanClause(Query* q, const bool DeleteQuery, Occur o); + + + BooleanClause* clone() const; + + ~BooleanClause(); + + + /** Returns true if o is equal to this. */ + bool equals(const BooleanClause* other) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + Occur getOccur() const; + void setOccur(Occur o); + + Query* getQuery() const; + void setQuery(Query* q); + + bool isProhibited() const; + bool isRequired() const; + + TCHAR* toString() const; + +public: // TODO: Make private and remove for CLucene 2.3.2 + /** If true, documents documents which do not + match this sub-query will not match the boolean query. + @deprecated use {@link #setOccur(BooleanClause.Occur)} instead */ + bool required; + + /** If true, documents documents which do + match this sub-query will not match the boolean query. + @deprecated use {@link #setOccur(BooleanClause.Occur)} instead */ + bool prohibited; +}; + + +CL_NS_END +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/BooleanQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/BooleanQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/BooleanQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/BooleanQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,561 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "BooleanQuery.h" + +#include "BooleanClause.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_Arrays.h" +#include "SearchHeader.h" +#include "_BooleanScorer.h" +#include "_ConjunctionScorer.h" +#include "Similarity.h" +#include "Explanation.h" +#include "_BooleanScorer2.h" +#include "Scorer.h" + +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + class BooleanClause_Compare:public CL_NS_STD(binary_function) + { + public: + bool operator()( const BooleanClause* val1, const BooleanClause* val2 ) const { + return val1->equals(val2); + } + }; + + + class BooleanWeight: public Weight { + protected: + Searcher* searcher; + Similarity* similarity; + CL_NS(util)::CLVector > weights; + BooleanQuery::ClausesType* clauses; + BooleanQuery* parentQuery; + public: + BooleanWeight(Searcher* searcher, + CL_NS(util)::CLVector >* clauses, + BooleanQuery* parentQuery); + virtual ~BooleanWeight(); + Query* getQuery(); + float_t getValue(); + float_t sumOfSquaredWeights(); + void normalize(float_t norm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + };// BooleanWeight + + + BooleanQuery::BooleanQuery( bool disableCoord ): + clauses(_CLNEW BooleanQuery::ClausesType(true)) + { + this->minNrShouldMatch = 0; + this->disableCoord = disableCoord; + } + + Weight* BooleanQuery::_createWeight(Searcher* searcher) { + return _CLNEW BooleanWeight(searcher, clauses,this); + } + + BooleanQuery::BooleanQuery(const BooleanQuery& clone): + Query(clone), + clauses(_CLNEW ClausesType(true)), + disableCoord(clone.disableCoord) + { + minNrShouldMatch = clone.minNrShouldMatch; + for ( uint32_t i=0;isize();i++ ){ + BooleanClause* clause = (*clone.clauses)[i]->clone(); + clause->deleteQuery=true; + add(clause); + } + } + + BooleanQuery::~BooleanQuery(){ + clauses->clear(); + _CLDELETE(clauses); + } + + size_t BooleanQuery::hashCode() const { + //todo: do cachedHashCode, and invalidate on add/remove clause + size_t ret = 0; + for (uint32_t i = 0 ; i < clauses->size(); i++) { + BooleanClause* c = (*clauses)[i]; + ret = 31 * ret + c->hashCode(); + } + ret = ret ^ Similarity::floatToByte(getBoost()); + return ret; + } + + const char* BooleanQuery::getObjectName() const{ + return getClassName(); + } + const char* BooleanQuery::getClassName(){ + return "BooleanQuery"; + } + + /** + * Default value is 1024. Use org.apache.lucene.maxClauseCount + * system property to override. + */ + size_t BooleanQuery::maxClauseCount = LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT; + size_t BooleanQuery::getMaxClauseCount(){ + return maxClauseCount; + } + + void BooleanQuery::setMaxClauseCount(const size_t maxClauseCount){ + if (maxClauseCount < 1) + _CLTHROWA(CL_ERR_IllegalArgument, "maxClauseCount must be >= 1"); + BooleanQuery::maxClauseCount = maxClauseCount; + } + + Similarity* BooleanQuery::getSimilarity( Searcher* searcher ) { + + Similarity* result = Query::getSimilarity( searcher ); + return result; + + } + + void BooleanQuery::add(Query* query, const bool deleteQuery, const bool required, const bool prohibited) { + BooleanClause* bc = _CLNEW BooleanClause(query,deleteQuery,required, prohibited); + try{ + add(bc); + }catch(...){ + _CLDELETE(bc); + throw; + } + } + + void BooleanQuery::add(Query* query, const bool deleteQuery, BooleanClause::Occur occur) { + BooleanClause* bc = _CLNEW BooleanClause(query,deleteQuery,occur); + try{ + add(bc); + }catch(...){ + _CLDELETE(bc); + throw; + } + } + + void BooleanQuery::add(BooleanClause* clause) { + if (clauses->size() >= getMaxClauseCount()) + _CLTHROWA(CL_ERR_TooManyClauses,"Too Many Clauses"); + + clauses->push_back(clause); + } + + int32_t BooleanQuery::getMinNrShouldMatch(){ + return minNrShouldMatch; + } + bool BooleanQuery::getUseScorer14() { + return getAllowDocsOutOfOrder(); + } + + bool BooleanQuery::allowDocsOutOfOrder = false; + + void BooleanQuery::setUseScorer14( bool use14 ) { + setAllowDocsOutOfOrder(use14); + } + + void BooleanQuery::setAllowDocsOutOfOrder(bool allow) { + allowDocsOutOfOrder = allow; + } + + bool BooleanQuery::getAllowDocsOutOfOrder() { + return allowDocsOutOfOrder; + } + + + size_t BooleanQuery::getClauseCount() const { + return (int32_t) clauses->size(); + } + + TCHAR* BooleanQuery::toString(const TCHAR* field) const{ + StringBuffer buffer; + bool needParens=(getBoost() != 1.0) /* TODO: || (getMinimumNumberShouldMatch()>0)*/ ; + if (needParens) { + buffer.append(_T("(")); + } + + for (uint32_t i = 0 ; i < clauses->size(); i++) { + BooleanClause* c = (*clauses)[i]; + if (c->prohibited) + buffer.append(_T("-")); + else if (c->required) + buffer.append(_T("+")); + + if ( c->getQuery()->instanceOf(BooleanQuery::getClassName()) ) { // wrap sub-bools in parens + buffer.append(_T("(")); + + TCHAR* buf = c->getQuery()->toString(field); + buffer.append(buf); + _CLDELETE_CARRAY( buf ); + + buffer.append(_T(")")); + } else { + TCHAR* buf = c->getQuery()->toString(field); + buffer.append(buf); + _CLDELETE_CARRAY( buf ); + } + if (i != clauses->size()-1) + buffer.append(_T(" ")); + } + + if (needParens) { + buffer.append(_T(")")); + } + + if (getBoost() != 1.0) { + buffer.appendChar(_T('^')); + buffer.appendFloat(getBoost(),1); + } + return buffer.toString(); + } + + bool BooleanQuery::isCoordDisabled() { return disableCoord; } + void BooleanQuery::setCoordDisabled( bool disableCoord ) { this->disableCoord = disableCoord; } + + BooleanClause** BooleanQuery::getClauses() const + { + CND_MESSAGE(false, "Warning: BooleanQuery::getClauses() is deprecated") + BooleanClause** ret = _CL_NEWARRAY(BooleanClause*, clauses->size()+1); + getClauses(ret); + return ret; + } + + void BooleanQuery::getClauses(BooleanClause** ret) const + { + size_t size=clauses->size(); + for ( uint32_t i=0;isize() == 1) { // optimize 1-clause queries + BooleanClause* c = (*clauses)[0]; + if (!c->prohibited) { // just return clause + Query* query = c->getQuery()->rewrite(reader); // rewrite first + + //if the query doesn't actually get re-written, + //then return a clone (because the BooleanQuery + //will register different to the returned query. + if ( query == c->getQuery() ) + query = query->clone(); + + if (getBoost() != 1.0f) { // incorporate boost + query->setBoost(getBoost() * query->getBoost()); + } + + return query; + } + } + + BooleanQuery* clone = NULL; // recursively rewrite + for (uint32_t i = 0 ; i < clauses->size(); i++) { + BooleanClause* c = (*clauses)[i]; + Query* query = c->getQuery()->rewrite(reader); + if (query != c->getQuery()) { // clause rewrote: must clone + if (clone == NULL) + clone = (BooleanQuery*)this->clone(); + clone->clauses->set (i, _CLNEW BooleanClause(query, true, c->getOccur())); + } + } + if (clone != NULL) { + return clone; // some clauses rewrote + } else + return this; // no clauses rewrote + } + + void BooleanQuery::extractTerms( TermSet * termset ) const + { + for (size_t i = 0 ; i < clauses->size(); i++) + { + BooleanClause* clause = (*clauses)[i]; + clause->getQuery()->extractTerms( termset ); + } + } + + Query* BooleanQuery::clone() const{ + BooleanQuery* clone = _CLNEW BooleanQuery(*this); + return clone; + } + + /** Returns true iff o is equal to this. */ + bool BooleanQuery::equals(Query* o)const { + if (!(o->instanceOf(BooleanQuery::getClassName()))) + return false; + const BooleanQuery* other = (BooleanQuery*)o; + + bool ret = (this->getBoost() == other->getBoost()); + if ( ret ){ + CLListEquals comp; + ret = comp.equals(this->clauses,other->clauses); + } + return ret; + } + + + float_t BooleanWeight::getValue() { return parentQuery->getBoost(); } + Query* BooleanWeight::getQuery() { return (Query*)parentQuery; } + + BooleanWeight::BooleanWeight(Searcher* searcher, + CLVector >* clauses, BooleanQuery* parentQuery) + { + this->searcher = searcher; + this->similarity = parentQuery->getSimilarity( searcher ); + this->parentQuery = parentQuery; + this->clauses = clauses; + for (uint32_t i = 0 ; i < clauses->size(); i++) { + weights.push_back((*clauses)[i]->getQuery()->_createWeight(searcher)); + } + } + BooleanWeight::~BooleanWeight(){ + this->weights.clear(); + } + + float_t BooleanWeight::sumOfSquaredWeights() { + float_t sum = 0.0f; + for (uint32_t i = 0 ; i < weights.size(); i++) { + BooleanClause* c = (*clauses)[i]; + Weight* w = weights[i]; + float_t s = w->sumOfSquaredWeights(); // sum sub weights + if (!c->isProhibited()) + // only add to sum for non-prohibited clauses + sum += s; + } + sum *= parentQuery->getBoost() * parentQuery->getBoost(); // boost each sub-weight + return sum ; + } + + void BooleanWeight::normalize(float_t norm) { + norm *= parentQuery->getBoost(); // incorporate boost + for (uint32_t i = 0 ; i < weights.size(); i++) { + Weight* w = weights[i]; + // normalize all clauses, (even if prohibited in case of side affects) + w->normalize(norm); + } + } + + Scorer* BooleanWeight::scorer(IndexReader* reader){ + BooleanScorer2* result = _CLNEW BooleanScorer2(similarity, + parentQuery->minNrShouldMatch, + parentQuery->allowDocsOutOfOrder); + + for (size_t i = 0 ; i < weights.size(); i++) { + BooleanClause* c = (*clauses)[i]; + Weight* w = weights[i]; + Scorer* subScorer = w->scorer(reader); + if (subScorer != NULL) + result->add(subScorer, c->isRequired(), c->isProhibited()); + else if (c->isRequired()){ + _CLDELETE(result); + return NULL; + } + } + + return result; + + } + + Explanation* BooleanWeight::explain(IndexReader* reader, int32_t doc){ + const int32_t minShouldMatch = parentQuery->getMinNrShouldMatch(); + ComplexExplanation* sumExpl = _CLNEW ComplexExplanation(); + sumExpl->setDescription(_T("sum of:")); + int32_t coord = 0; + int32_t maxCoord = 0; + float_t sum = 0.0f; + bool fail = false; + int32_t shouldMatchCount = 0; + for (size_t i = 0 ; i < weights.size(); i++) { + BooleanClause* c = (*clauses)[i]; + Weight* w = weights[i]; + Explanation* e = w->explain(reader, doc); + if (!c->isProhibited()) maxCoord++; + if (e->isMatch()){ + if (!c->isProhibited()) { + sumExpl->addDetail(e); + sum += e->getValue(); + coord++; + } else { + StringBuffer buf(100); + buf.append(_T("match on prohibited clause (")); + TCHAR* tmp = c->getQuery()->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + buf.appendChar(_T(')')); + + Explanation* r = _CLNEW Explanation(0.0f, buf.getBuffer()); + r->addDetail(e); + sumExpl->addDetail(r); + fail = true; + } + if (c->getOccur() == BooleanClause::SHOULD) + shouldMatchCount++; + } else if (c->isRequired()) { + StringBuffer buf(100); + buf.append(_T("no match on required clause (")); + TCHAR* tmp = c->getQuery()->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + buf.appendChar(_T(')')); + + Explanation* r = _CLNEW Explanation(0.0f, buf.getBuffer()); + r->addDetail(e); + sumExpl->addDetail(r); + fail = true; + } else { + _CLLDELETE(e); + } + } + if (fail) { + sumExpl->setMatch(false); + sumExpl->setValue(0.0f); + sumExpl->setDescription(_T("Failure to meet condition(s) of required/prohibited clause(s)")); + return sumExpl; + } else if (shouldMatchCount < minShouldMatch) { + sumExpl->setMatch(false); + sumExpl->setValue(0.0f); + + StringBuffer buf(60); + buf.append(_T("Failure to match minimum number of optional clauses: ")); + buf.appendInt(minShouldMatch); + sumExpl->setDescription(buf.getBuffer()); + return sumExpl; + } + + sumExpl->setMatch(0 < coord ? true : false); + sumExpl->setValue(sum); + + float_t coordFactor = similarity->coord(coord, maxCoord); + if (coordFactor == 1.0f) // coord is no-op + return sumExpl; // eliminate wrapper + else { + ComplexExplanation* result = _CLNEW ComplexExplanation(sumExpl->isMatch(), + sum*coordFactor, + _T("product of:")); + result->addDetail(sumExpl); + + StringBuffer buf(30); + buf.append(_T("coord(")); + buf.appendInt(coord); + buf.appendChar(_T('/')); + buf.appendInt(maxCoord); + buf.appendChar(_T(')')); + result->addDetail(_CLNEW Explanation(coordFactor,buf.getBuffer())); + return result; + } + } + + BooleanClause::BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p): + query(q), + occur(SHOULD), + deleteQuery(DeleteQuery), + required(req), + prohibited(p) + { + if (required) { + if (prohibited) { + // prohibited && required doesn't make sense, but we want the old behaviour: + occur = MUST_NOT; + } else { + occur = MUST; + } + } else { + if (prohibited) { + occur = MUST_NOT; + } else { + occur = SHOULD; + } + } + } + + BooleanClause::BooleanClause(const BooleanClause& clone): + query(clone.query->clone()), + occur(clone.occur), + deleteQuery(true), + required(clone.required), + prohibited(clone.prohibited) + { + } + + BooleanClause::BooleanClause(Query* q, const bool DeleteQuery, Occur o): + query(q), + occur(o), + deleteQuery(DeleteQuery) + { + setFields(occur); + } + + + BooleanClause* BooleanClause::clone() const { + BooleanClause* ret = _CLNEW BooleanClause(*this); + return ret; + } + + BooleanClause::~BooleanClause(){ + if ( deleteQuery ) + _CLDELETE( query ); + } + + + /** Returns true if o is equal to this. */ + bool BooleanClause::equals(const BooleanClause* other) const { + return this->query->equals(other->query) + && (this->required == other->required) + && (this->prohibited == other->prohibited) // TODO: Remove these + && (this->occur == other->getOccur() ); + } + + /** Returns a hash code value for this object.*/ + size_t BooleanClause::hashCode() const { + return query->hashCode() ^ ( (occur == MUST) ?1:0) ^ ( (occur == MUST_NOT)?2:0); + } + + BooleanClause::Occur BooleanClause::getOccur() const { return occur; } + void BooleanClause::setOccur(Occur o) { + occur = o; + setFields(o); + } + + Query* BooleanClause::getQuery() const { return query; } + void BooleanClause::setQuery(Query* q) { + if ( deleteQuery ) + _CLDELETE( query ); + query = q; + } + + bool BooleanClause::isProhibited() const { return prohibited; /* TODO: return (occur == MUST_NOT); */ } + bool BooleanClause::isRequired() const { return required; /* TODO: return (occur == MUST); */ } + + TCHAR* BooleanClause::toString() const { + CL_NS(util)::StringBuffer buffer; + if (occur == MUST) + buffer.append(_T("+")); + else if (occur == MUST_NOT) + buffer.append(_T("-")); + buffer.append( query->toString() ); + return buffer.toString(); + } + + void BooleanClause::setFields(Occur occur) { + if (occur == MUST) { + required = true; + prohibited = false; + } else if (occur == SHOULD) { + required = false; + prohibited = false; + } else if (occur == MUST_NOT) { + required = false; + prohibited = true; + } else { + _CLTHROWT (CL_ERR_UnknownOperator, _T("Unknown operator")); + } + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/BooleanQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/BooleanQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/BooleanQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/BooleanQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,157 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_BooleanQuery_ +#define _lucene_search_BooleanQuery_ + +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(search,Weight) +#include "Query.h" +#include "BooleanClause.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + + + // A Query that matches documents matching boolean combinations of other + // queries, typically {@link TermQuery}s or {@link PhraseQuery}s. + class CLUCENE_EXPORT BooleanQuery:public Query { + public: + typedef CL_NS(util)::CLVector > ClausesType; + private: + ClausesType* clauses; + static size_t maxClauseCount; + + /** Whether hit docs may be collected out of docid order. */ + static bool allowDocsOutOfOrder; + + bool disableCoord; + protected: + int32_t minNrShouldMatch; + Weight* _createWeight(Searcher* searcher); + BooleanQuery(const BooleanQuery& clone); + + public: + /** Constructs an empty boolean query. */ + BooleanQuery( bool disableCoord = false ); + + ~BooleanQuery(); + const char* getObjectName() const; + static const char* getClassName(); + + /** Return the maximum number of clauses permitted, 1024 by default. + * Attempts to add more than the permitted number of clauses cause {@link + * TooManyClauses} to be thrown.*/ + static size_t getMaxClauseCount(); + + /** Set the maximum number of clauses permitted. */ + static void setMaxClauseCount(const size_t maxClauseCount); + + /** Adds a clause to a boolean query. Clauses may be: + *
    + *
  • required which means that documents which do not + * match this sub-query will not match the boolean query; + *
  • prohibited which means that documents which do + * match this sub-query will not match the boolean query; or + *
  • neither, in which case matched documents are neither prohibited from + * nor required to match the sub-query. However, a document must match at + * least 1 sub-query to match the boolean query. + *
+ * It is an error to specify a clause as both required and + * prohibited. + * + * @deprecated use {@link #add(Query, BooleanClause.Occur)} instead: + *
    + *
  • For add(query, true, false) use add(query, BooleanClause.Occur.MUST) + *
  • For add(query, false, false) use add(query, BooleanClause.Occur.SHOULD) + *
  • For add(query, false, true) use add(query, BooleanClause.Occur.MUST_NOT) + *
+ */ + void add(Query* query, const bool required, const bool prohibited){ + add(query,false,required,prohibited); + } + void add(Query* query, const bool deleteQuery, const bool required, const bool prohibited); + + void add(Query* query, const bool deleteQuery, BooleanClause::Occur occur); + void add(Query* query, BooleanClause::Occur occur) { add(query,false,occur); }; + + /** Copies the clauses of this query into the array. + * The array must be at least as long as getClauseCount() + * If you want to use the clauses, make sure you null terminate it. + */ + void getClauses(BooleanClause** clauses) const; + + ///@deprecated + _CL_DEPRECATED( getClauses(clauses) ) BooleanClause** getClauses() const; + + /** + * Give client code access to clauses.size() so we know how + * large the array returned by getClauses is. + */ + size_t getClauseCount() const; + + /** Adds a clause to a boolean query. + * @see #getMaxClauseCount() + */ + void add(BooleanClause* clause); + + Query* rewrite(CL_NS(index)::IndexReader* reader); + Query* clone() const; + + /** Expert: adds all terms occurring in this query to the termset set. */ + void extractTerms( TermSet * termset ) const; + + bool equals(Query* o) const; + Similarity* getSimilarity( Searcher* searcher ); + + bool isCoordDisabled(); + void setCoordDisabled( bool disableCoord ); + + static bool getUseScorer14(); + static void setUseScorer14( bool use14 ); + + /** + * Expert: Indicates whether hit docs may be collected out of docid + * order. + * + *

+ * Background: although the contract of the Scorer class requires that + * documents be iterated in order of doc id, this was not true in early + * versions of Lucene. Many pieces of functionality in the current + * Lucene code base have undefined behavior if this contract is not + * upheld, but in some specific simple cases may be faster. (For + * example: disjunction queries with less than 32 prohibited clauses; + * This setting has no effect for other queries.) + *

+ * + *

+ * Specifics: By setting this option to true, calls to + * {@link HitCollector#collect(int,float)} might be + * invoked first for docid N and only later for docid N-1. + * Being static, this setting is system wide. + *

+ */ + static void setAllowDocsOutOfOrder(bool allow); + + /** + * Whether hit docs may be collected out of docid order. + * @see #setAllowDocsOutOfOrder(boolean) + */ + static bool getAllowDocsOutOfOrder(); + + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + //internal + int32_t getMinNrShouldMatch(); + friend class BooleanWeight; + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/BooleanScorer2.cpp clucene-core-2.3.3.4/src/core/CLucene/search/BooleanScorer2.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/BooleanScorer2.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/BooleanScorer2.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,688 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_BooleanScorer2.h" + +#include "Scorer.h" +#include "SearchHeader.h" +#include "Similarity.h" +#include "ScorerDocQueue.h" +#include "Explanation.h" + +#include "_BooleanScorer.h" +#include "_BooleanScorer.h" +#include "_ConjunctionScorer.h" +#include "_DisjunctionSumScorer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + +class BooleanScorer2::Coordinator { +public: + int32_t maxCoord; + int32_t nrMatchers; // to be increased by score() of match counting scorers. + float_t* coordFactors; + Scorer* parentScorer; + + Coordinator( Scorer* parent ): + maxCoord(0), + nrMatchers(0), + coordFactors(NULL), + parentScorer(parent) + { + } + + virtual ~Coordinator() + { + _CLDELETE_ARRAY(coordFactors); + } + + void init() + { + coordFactors = _CL_NEWARRAY( float_t, maxCoord+1 ); + Similarity* sim = parentScorer->getSimilarity(); + for ( int32_t i = 0; i <= maxCoord; i++ ) { + coordFactors[i] = sim->coord(i, maxCoord); + } + } + + + void initDoc() { + nrMatchers = 0; + } + + float_t coordFactor() { + return coordFactors[nrMatchers]; + } +}; + +class BooleanScorer2::SingleMatchScorer: public Scorer { +public: + Scorer* scorer; + Coordinator* coordinator; + int32_t lastScoredDoc; + + SingleMatchScorer( Scorer* _scorer, Coordinator* _coordinator ) : + Scorer( _scorer->getSimilarity() ), scorer(_scorer), coordinator(_coordinator), lastScoredDoc(-1) + { + } + + virtual ~SingleMatchScorer() + { + _CLDELETE( scorer ); + } + + float_t score() + { + if ( doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers++; + } + return scorer->score(); + } + + int32_t doc() const { + return scorer->doc(); + } + + bool next() { + return scorer->next(); + } + + bool skipTo( int32_t docNr ) { + return scorer->skipTo( docNr ); + } + + virtual TCHAR* toString() { + return scorer->toString(); + } + + Explanation* explain(int32_t doc) { + return scorer->explain( doc ); + } + +}; + +/** A scorer that matches no document at all. */ +class BooleanScorer2::NonMatchingScorer: public Scorer { +public: + + NonMatchingScorer() : + Scorer( NULL ) + { + } + virtual ~NonMatchingScorer() {}; + + int32_t doc() const { + _CLTHROWA(CL_ERR_UnsupportedOperation, "UnsupportedOperationException: BooleanScorer2::NonMatchingScorer::doc"); + return 0; + } + bool next() { return false; } + float_t score() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "UnsupportedOperationException: BooleanScorer2::NonMatchingScorer::score"); + return 0.0; + } + bool skipTo( int32_t /*target*/ ) { return false; } + virtual TCHAR* toString() { return stringDuplicate(_T("NonMatchingScorer")); } + + Explanation* explain( int32_t /*doc*/ ) { + Explanation* e = _CLNEW Explanation(); + e->setDescription(_T("No document matches.")); + return e; + } + +}; + +/** A Scorer for queries with a required part and an optional part. + * Delays skipTo() on the optional part until a score() is needed. + *
+ * This Scorer implements {@link Scorer#skipTo(int)}. + */ +class BooleanScorer2::ReqOptSumScorer: public Scorer { +private: + /** The scorers passed from the constructor. + * These are set to null as soon as their next() or skipTo() returns false. + */ + Scorer* reqScorer; + Scorer* optScorer; + bool firstTimeOptScorer; + +public: + /** Construct a ReqOptScorer. + * @param reqScorer The required scorer. This must match. + * @param optScorer The optional scorer. This is used for scoring only. + */ + ReqOptSumScorer( Scorer* _reqScorer, Scorer* _optScorer ) : + Scorer( NULL ), reqScorer(_reqScorer), optScorer(_optScorer), firstTimeOptScorer(true) + { + } + + virtual ~ReqOptSumScorer() + { + _CLDELETE( reqScorer ); + _CLDELETE( optScorer ); + } + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + * @return The score of the required scorer, eventually increased by the score + * of the optional scorer when it also matches the current document. + */ + float_t score() + { + int32_t curDoc = reqScorer->doc(); + float_t reqScore = reqScorer->score(); + + if ( firstTimeOptScorer ) { + firstTimeOptScorer = false; + if ( !optScorer->skipTo( curDoc ) ) { + _CLDELETE(optScorer); + return reqScore; + } + } else if ( optScorer == NULL ) { + return reqScore; + } else if (( optScorer->doc() < curDoc ) && ( !optScorer->skipTo( curDoc ))) { + _CLDELETE(optScorer); + return reqScore; + } + + return ( optScorer->doc() == curDoc ) + ? reqScore + optScorer->score() + : reqScore; + } + + int32_t doc() const { + return reqScorer->doc(); + } + + bool next() { + return reqScorer->next(); + } + + bool skipTo( int32_t target ) { + return reqScorer->skipTo( target ); + } + + virtual TCHAR* toString() { + return stringDuplicate(_T("ReqOptSumScorer")); + } + + /** Explain the score of a document. + * @todo Also show the total score. + * See BooleanScorer.explain() on how to do this. + */ + Explanation* explain( int32_t doc ) { + Explanation* res = _CLNEW Explanation(); + res->setDescription(_T("required, optional")); + res->addDetail(reqScorer->explain(doc)); + res->addDetail(optScorer->explain(doc)); + return res; + } +}; + + +/** A Scorer for queries with a required subscorer and an excluding (prohibited) subscorer. +*
+* This Scorer implements {@link Scorer#skipTo(int)}, +* and it uses the skipTo() on the given scorers. +*/ +class BooleanScorer2::ReqExclScorer: public Scorer { +private: + Scorer* reqScorer; + Scorer* exclScorer; + bool firstTime; + +public: + /** Construct a ReqExclScorer. + * @param reqScorer The scorer that must match, except where + * @param exclScorer indicates exclusion. + */ + ReqExclScorer( Scorer* _reqScorer, Scorer* _exclScorer ) : + Scorer( NULL ), reqScorer(_reqScorer), exclScorer(_exclScorer), firstTime(true) + { + } + + virtual ~ReqExclScorer() + { + _CLDELETE( reqScorer ); + _CLDELETE( exclScorer ); + } + + int32_t doc() const { + return reqScorer->doc(); + } + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + * @return The score of the required scorer. + */ + float_t score() { + return reqScorer->score(); + } + + virtual TCHAR* toString() { + return stringDuplicate(_T("ReqExclScorer")); + } + + Explanation* explain( int32_t doc ) { + Explanation* res = _CLNEW Explanation(); + if (exclScorer->skipTo(doc) && (exclScorer->doc() == doc)) { + res->setDescription(_T("excluded")); + } else { + res->setDescription(_T("not excluded")); + res->addDetail(reqScorer->explain(doc)); + } + return res; + } + + + bool next() + { + if ( firstTime ) { + if ( !exclScorer->next() ) { + _CLDELETE( exclScorer ); + } + firstTime = false; + } + if ( reqScorer == NULL ) { + return false; + } + if ( !reqScorer->next() ) { + _CLDELETE( reqScorer ); // exhausted, nothing left + return false; + } + if ( exclScorer == NULL ) { + return true;// reqScorer.next() already returned true + } + return toNonExcluded(); + } + + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
When this method is used the {@link #explain(int)} method should not be used. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo( int32_t target ) + { + if ( firstTime ) { + firstTime = false; + if ( !exclScorer->skipTo( target )) { + _CLDELETE( exclScorer ); // exhausted + } + } + if ( reqScorer == NULL ) { + return false; + } + if ( exclScorer == NULL ) { + return reqScorer->skipTo( target ); + } + if ( !reqScorer->skipTo( target )) { + _CLDELETE( reqScorer ); + return false; + } + return toNonExcluded(); + } + + +private: + /** Advance to non excluded doc. + *
On entry: + *
    + *
  • reqScorer != null, + *
  • exclScorer != null, + *
  • reqScorer was advanced once via next() or skipTo() + * and reqScorer.doc() may still be excluded. + *
+ * Advances reqScorer a non excluded required doc, if any. + * @return true iff there is a non excluded required doc. + */ + bool toNonExcluded() + { + int32_t exclDoc = exclScorer->doc(); + + do { + int32_t reqDoc = reqScorer->doc(); + if ( reqDoc < exclDoc ) { + return true; // reqScorer advanced to before exclScorer, ie. not excluded + } else if ( reqDoc > exclDoc ) { + if (! exclScorer->skipTo(reqDoc)) { + _CLDELETE( exclScorer ); // exhausted, no more exclusions + return true; + } + exclDoc = exclScorer->doc(); + if ( exclDoc > reqDoc ) { + return true; // not excluded + } + } + } while ( reqScorer->next() ); + + _CLDELETE( reqScorer ); // exhausted, nothing left + return false; + } + +}; + +class BooleanScorer2::BSConjunctionScorer: public CL_NS(search)::ConjunctionScorer { +private: + CL_NS(search)::BooleanScorer2::Coordinator* coordinator; + int32_t lastScoredDoc; + int32_t requiredNrMatchers; + typedef CL_NS(util)::CLVector > ScorersType; +public: + BSConjunctionScorer( CL_NS(search)::BooleanScorer2::Coordinator* _coordinator, ScorersType* _requiredScorers, int32_t _requiredNrMatchers ): + ConjunctionScorer( Similarity::getDefault(), _requiredScorers ), + coordinator(_coordinator), + lastScoredDoc(-1), + requiredNrMatchers(_requiredNrMatchers) + { + } + + virtual ~BSConjunctionScorer(){ + } + float_t score() + { + if ( this->doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers += requiredNrMatchers; + } + return ConjunctionScorer::score(); + } + virtual TCHAR* toString() {return stringDuplicate(_T("BSConjunctionScorer"));} +}; + +class BooleanScorer2::BSDisjunctionSumScorer: public CL_NS(search)::DisjunctionSumScorer { +private: + CL_NS(search)::BooleanScorer2::Coordinator* coordinator; + int32_t lastScoredDoc; + typedef CL_NS(util)::CLVector > ScorersType; +public: + BSDisjunctionSumScorer( + CL_NS(search)::BooleanScorer2::Coordinator* _coordinator, + ScorersType* subScorers, + int32_t minimumNrMatchers ): + DisjunctionSumScorer( subScorers, minimumNrMatchers ), + coordinator(_coordinator), + lastScoredDoc(-1) + { + } + + float_t score() { + if ( this->doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers += _nrMatchers; + } + return DisjunctionSumScorer::score(); + } + + virtual ~BSDisjunctionSumScorer(){ + } + virtual TCHAR* toString() {return stringDuplicate(_T("BSDisjunctionSumScorer"));} +}; + +class BooleanScorer2::Internal{ +public: + typedef CL_NS(util)::CLVector > ScorersType; + + ScorersType requiredScorers; + ScorersType optionalScorers; + ScorersType prohibitedScorers; + + BooleanScorer2::Coordinator *coordinator; + Scorer* countingSumScorer; + + size_t minNrShouldMatch; + bool allowDocsOutOfOrder; + + + void initCountingSumScorer() + { + coordinator->init(); + countingSumScorer = makeCountingSumScorer(); + } + + Scorer* countingDisjunctionSumScorer( ScorersType* scorers, int32_t minNrShouldMatch ) + { + return _CLNEW BSDisjunctionSumScorer( coordinator, scorers, minNrShouldMatch ); + } + + Scorer* countingConjunctionSumScorer( ScorersType* requiredScorers ) + { + return _CLNEW BSConjunctionScorer( coordinator, requiredScorers, requiredScorers->size() ); + } + + Scorer* dualConjunctionSumScorer( Scorer* req1, Scorer* req2 ) + { + ValueArray scorers(2); + scorers[0] = req1; + scorers[1] = req2; + return _CLNEW CL_NS(search)::ConjunctionScorer( Similarity::getDefault(), &scorers ); + + } + + Scorer* makeCountingSumScorer() + { + return ( requiredScorers.size() == 0 ) ? + makeCountingSumScorerNoReq() : + makeCountingSumScorerSomeReq(); + } + + Scorer* makeCountingSumScorerNoReq() + { + if ( optionalScorers.size() == 0 ) { + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else { + size_t nrOptRequired = ( minNrShouldMatch < 1 ) ? 1 : minNrShouldMatch; + if ( optionalScorers.size() < nrOptRequired ) { + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else { + Scorer* requiredCountingSumScorer = + ( optionalScorers.size() > nrOptRequired ) + ? countingDisjunctionSumScorer( &optionalScorers, nrOptRequired ) + : + ( optionalScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer((Scorer*) optionalScorers[0], coordinator) + : countingConjunctionSumScorer( &optionalScorers ); + return addProhibitedScorers( requiredCountingSumScorer ); + } + } + } + + Scorer* makeCountingSumScorerSomeReq() + { + if ( optionalScorers.size() < minNrShouldMatch ) { + requiredScorers.setDoDelete(true); + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else if ( optionalScorers.size() == minNrShouldMatch ) { + Internal::ScorersType allReq( false ); + for ( Internal::ScorersType::iterator it = requiredScorers.begin(); it != requiredScorers.end(); it++ ) { + allReq.push_back( *it ); + } + for ( Internal::ScorersType::iterator it2 = optionalScorers.begin(); it2 != optionalScorers.end(); it2++ ) { + allReq.push_back( *it2 ); + } + return addProhibitedScorers( countingConjunctionSumScorer( &allReq )); + } else { + Scorer* requiredCountingSumScorer = + ( requiredScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer( (Scorer*)requiredScorers[0], coordinator ) + : countingConjunctionSumScorer( &requiredScorers ); + if ( minNrShouldMatch > 0 ) { + return addProhibitedScorers( + dualConjunctionSumScorer( + requiredCountingSumScorer, + countingDisjunctionSumScorer( + &optionalScorers, + minNrShouldMatch ))); + } else { + return _CLNEW ReqOptSumScorer( + addProhibitedScorers( requiredCountingSumScorer ), + (( optionalScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer( (Scorer*)optionalScorers[0], coordinator ) + : countingDisjunctionSumScorer( &optionalScorers, 1 ))); + } + } + } + + Scorer* addProhibitedScorers( Scorer* requiredCountingSumScorer ) + { + return ( prohibitedScorers.size() == 0 ) + ? requiredCountingSumScorer + : _CLNEW ReqExclScorer( requiredCountingSumScorer, + (( prohibitedScorers.size() == 1 ) + ? (Scorer*)prohibitedScorers[0] + : _CLNEW CL_NS(search)::DisjunctionSumScorer( &prohibitedScorers ))); + } + + + Internal( BooleanScorer2* parent, int32_t _minNrShouldMatch, bool _allowDocsOutOfOrder ): + requiredScorers(false), + optionalScorers(false), + prohibitedScorers(false), + countingSumScorer(NULL), + minNrShouldMatch(_minNrShouldMatch), + allowDocsOutOfOrder(_allowDocsOutOfOrder) + { + if ( _minNrShouldMatch < 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument, "Minimum number of optional scorers should not be negative"); + } + + this->coordinator = _CLNEW Coordinator( parent ); + + } + ~Internal(){ + _CLDELETE( coordinator ); + _CLDELETE( countingSumScorer ); + /* TODO: these leak memory... haven't figure out how it should be fixed though... + requiredScorers.clear(); + optionalScorers.clear(); + prohibitedScorers.clear(); + */ + } + +}; + + + + + +BooleanScorer2::BooleanScorer2( Similarity* similarity, int32_t minNrShouldMatch, bool allowDocsOutOfOrder ): + Scorer( similarity ) +{ + _internal = new Internal(this, minNrShouldMatch, allowDocsOutOfOrder); +} + +BooleanScorer2::~BooleanScorer2() +{ + delete _internal; +} + +void BooleanScorer2::add( Scorer* scorer, bool required, bool prohibited ) +{ + if ( !prohibited ) { + _internal->coordinator->maxCoord++; + } + + if ( required ) { + if ( prohibited ) { + _CLTHROWA(CL_ERR_IllegalArgument, "scorer cannot be required and prohibited"); + } + _internal->requiredScorers.push_back( scorer ); + } else if ( prohibited ) { + _internal->prohibitedScorers.push_back( scorer ); + } else { + _internal->optionalScorers.push_back( scorer ); + } + +} + +void BooleanScorer2::score( HitCollector* hc ) +{ + if ( _internal->allowDocsOutOfOrder && _internal->requiredScorers.size() == 0 && _internal->prohibitedScorers.size() < 32 ) { + + BooleanScorer* bs = _CLNEW BooleanScorer( getSimilarity(), _internal->minNrShouldMatch ); + Internal::ScorersType::iterator si = _internal->optionalScorers.begin(); + while ( si != _internal->optionalScorers.end() ) { + bs->add( (*si), false /* required */, false /* prohibited */ ); + si++; + } + si = _internal->prohibitedScorers.begin(); + while ( si != _internal->prohibitedScorers.end() ) { + bs->add( (*si), false /* required */, true /* prohibited */ ); + si++; + } + bs->score( hc ); + } else { + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + while ( _internal->countingSumScorer->next() ) { + hc->collect( _internal->countingSumScorer->doc(), score() ); + } + } +} + +int32_t BooleanScorer2::doc() const +{ + return _internal->countingSumScorer->doc(); +} + +bool BooleanScorer2::next() +{ + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + return _internal->countingSumScorer->next(); +} + +float_t BooleanScorer2::score() +{ + _internal->coordinator->initDoc(); + float_t sum = _internal->countingSumScorer->score(); + return sum * _internal->coordinator->coordFactor(); +} + +bool BooleanScorer2::skipTo( int32_t target ) +{ + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + return _internal->countingSumScorer->skipTo( target ); +} + +TCHAR* BooleanScorer2::toString() +{ + return stringDuplicate(_T("BooleanScorer2")); +} + +Explanation* BooleanScorer2::explain( int32_t /*doc*/ ) +{ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer2::explain"); + /* How to explain the coordination factor? + initCountingSumScorer(); + return countingSumScorer.explain(doc); // misses coord factor. + */ +} + +bool BooleanScorer2::score( HitCollector* hc, int32_t max ) +{ + int32_t docNr = _internal->countingSumScorer->doc(); + while ( docNr < max ) { + hc->collect( docNr, score() ); + if ( !_internal->countingSumScorer->next() ) { + return false; + } + docNr = _internal->countingSumScorer->doc(); + } + return true; +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_BooleanScorer2.h clucene-core-2.3.3.4/src/core/CLucene/search/_BooleanScorer2.h --- clucene-core-0.9.21b/src/core/CLucene/search/_BooleanScorer2.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_BooleanScorer2.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,46 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#ifndef _lucene_search_BooleanScorer2_ +#define _lucene_search_BooleanScorer2_ + +#include "Scorer.h" + +CL_NS_DEF(search) + + class CLUCENE_EXPORT BooleanScorer2: public Scorer { + private: + class Internal; + friend class Internal; + Internal* _internal; + + class Coordinator; + class SingleMatchScorer; + class NonMatchingScorer; + class ReqOptSumScorer; + class ReqExclScorer; + class BSConjunctionScorer; + class BSDisjunctionSumScorer; + protected: + bool score( HitCollector* hc, const int32_t max ); + public: + + BooleanScorer2( Similarity* similarity, int32_t minNrShouldMatch = 0, bool allowDocsOutOfOrder = false ); + virtual ~BooleanScorer2(); + + void add( Scorer* scorer, bool required, bool prohibited ); + void score( HitCollector* hc ); + int32_t doc() const; + bool next(); + float_t score(); + bool skipTo( int32_t target ); + Explanation* explain( int32_t doc ); + virtual TCHAR* toString(); + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/BooleanScorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/BooleanScorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/BooleanScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/BooleanScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,299 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SearchHeader.h" +#include "_BooleanScorer.h" + +#include "Scorer.h" +#include "Similarity.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + BooleanScorer::BooleanScorer(Similarity* similarity, int32_t minNrShouldMatch ): + Scorer(similarity), + scorers(NULL), + maxCoord(1), + nextMask(1), + end(0), + current(NULL), + minNrShouldMatch(minNrShouldMatch), + requiredMask(0), + prohibitedMask(0), + coordFactors(NULL) + { + bucketTable = _CLNEW BucketTable(this); + } + + BooleanScorer::~BooleanScorer(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + _CLDELETE(bucketTable); + _CLDELETE_ARRAY(coordFactors); + _CLDELETE(scorers); + } + + + bool BooleanScorer::next() { + bool more; + do { + while (bucketTable->first != NULL) { // more queued + current = bucketTable->first; + bucketTable->first = current->next; // pop the queue + + // check prohibited & required + if ((current->bits & prohibitedMask) == 0 && + (current->bits & requiredMask) == requiredMask) { + return true; + } + } + + // refill the queue + more = false; + end += BooleanScorer::BucketTable_SIZE; + for (SubScorer* sub = scorers; sub != NULL; sub = sub->next) { + Scorer* scorer = sub->scorer; + int32_t doc; + while (!sub->done && (doc=scorer->doc()) < end) { + sub->collector->collect(doc, scorer->score()); + sub->done = !scorer->next(); + } + if (!sub->done) { + more = true; + } + } + } while (bucketTable->first != NULL || more); + + return false; + } + + float_t BooleanScorer::score(){ + if (coordFactors == NULL) + computeCoordFactors(); + return current->score * coordFactors[current->coord]; + } + + void BooleanScorer::score( HitCollector* results ) { + next(); + score( results, LUCENE_INT32_MAX_SHOULDBE ); + } + + bool BooleanScorer::skipTo(int32_t /*target*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::skipTo"); + } + + Explanation* BooleanScorer::explain(int32_t /*doc*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::explain"); + } + + TCHAR* BooleanScorer::toString() { + CL_NS(util)::StringBuffer buffer; + buffer.append(_T("boolean(")); + for (SubScorer* sub = scorers; sub != NULL; sub = sub->next) { + TCHAR* tmp = sub->scorer->toString(); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + buffer.appendChar(_T(' ')); + } + buffer.appendChar(_T(')')); + return buffer.toString(); + } + + void BooleanScorer::add(Scorer* scorer, const bool required, const bool prohibited) { + int32_t mask = 0; + if (required || prohibited) { + if (nextMask == 0) + _CLTHROWA(CL_ERR_IndexOutOfBounds, "More than 32 required/prohibited clauses in query."); + mask = nextMask; + nextMask = ( nextMask << 1 ); + } else + mask = 0; + + if (!prohibited) + maxCoord++; + + if (prohibited) + prohibitedMask |= mask; // update prohibited mask + else if (required) + requiredMask |= mask; // update required mask + + //scorer, HitCollector, and scorers is delete in the SubScorer + scorers = _CLNEW SubScorer(scorer, required, prohibited, + bucketTable->newCollector(mask), scorers); + } + + void BooleanScorer::computeCoordFactors(){ + coordFactors = _CL_NEWARRAY(float_t,maxCoord); + for (int32_t i = 0; i < maxCoord; i++) + coordFactors[i] = getSimilarity()->coord(i, maxCoord-1); + } + + bool BooleanScorer::score( HitCollector* results, const int32_t maxDoc ) { + if ( coordFactors == NULL ) { + computeCoordFactors(); + } + + bool more; + Bucket* tmp; + + do { + bucketTable->first = NULL; + while ( current != NULL ) { + + if (( current->bits & prohibitedMask ) == 0 && + ( current->bits & requiredMask ) == requiredMask ) { + + if ( current->doc >= maxDoc ) { + tmp = current; + current = current->next; + tmp->next = bucketTable->first; + bucketTable->first = tmp; + continue; + } + + if ( current->coord >= minNrShouldMatch ) { + results->collect( current->doc, current->score * coordFactors[current->coord] ); + } + } + + current = current->next; + } + + if ( bucketTable->first != NULL ) { + current = bucketTable->first; + bucketTable->first = current->next; + return true; + } + + more = false; + end += BucketTable_SIZE; + + for ( SubScorer* sub = scorers; sub != NULL; sub = sub->next ) { + if ( !sub->done ) { + sub->done = !sub->scorer->score( sub->collector, end ); + if ( !sub->done ) + more = true; + } + } + current = bucketTable->first; + + } while ( current != NULL || more ); + + return false; + } + + + + BooleanScorer::SubScorer::SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt): + scorer(scr), + required(r), + prohibited(p), + collector(c), + next(nxt) + { + //Func - Constructor + //Pre - scr != NULL, + // c != NULL + // nxt may or may not be NULL + //Post - The instance has been created + + CND_PRECONDITION(scr != NULL,"scr is NULL"); + CND_PRECONDITION(c != NULL,"c is NULL"); + + done = !scorer->next(); + } + + BooleanScorer::SubScorer::~SubScorer(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + for (SubScorer * ptr = next; ptr; ){ + SubScorer* next = ptr->next; + ptr->next = NULL; + _CLDELETE(ptr); + ptr = next; + } + _CLDELETE(scorer); + _CLDELETE(collector); + } + + BooleanScorer::Bucket::Bucket(): + doc(-1), + score(0.0), + bits(0), + coord(0), + next(NULL) + { + } + BooleanScorer::Bucket::~Bucket(){ + } + + + + + BooleanScorer::BucketTable::BucketTable(BooleanScorer* scr): + scorer(scr), + first(NULL) + { + buckets = new Bucket[BucketTable_SIZE]; + } + BooleanScorer::BucketTable::~BucketTable(){ + clear(); + delete [] buckets; + } + + void BooleanScorer::BucketTable::clear(){ + //delete first; + first = NULL; + } + int32_t BooleanScorer::BucketTable::size() const { return BooleanScorer::BucketTable_SIZE; } + + HitCollector* BooleanScorer::BucketTable::newCollector(const int32_t mask) { + return _CLNEW Collector(mask, this); + } + + + + + + + + + + BooleanScorer::Collector::Collector(const int32_t msk, BucketTable* bucketTbl): + bucketTable(bucketTbl), + mask(msk) + { + } + + void BooleanScorer::Collector::collect(const int32_t doc, const float_t score){ + BucketTable* table = bucketTable; + int32_t i = doc & (BooleanScorer::BucketTable_SIZE-1); + Bucket* bucket = &table->buckets[i]; + + if (bucket->doc != doc) { // invalid bucket + bucket->doc = doc; // set doc + bucket->score = score; // initialize score + bucket->bits = mask; // initialize mask + bucket->coord = 1; // initialize coord + + bucket->next = table->first; // push onto valid list + table->first = bucket; + } else { // valid bucket + bucket->score += score; // increment score + bucket->bits |= mask; // add bits in mask + bucket->coord++; // increment coord + } + } + + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_BooleanScorer.h clucene-core-2.3.3.4/src/core/CLucene/search/_BooleanScorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/_BooleanScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_BooleanScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,101 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_BooleanScorer_ +#define _lucene_search_BooleanScorer_ + + +#include "Scorer.h" + +CL_NS_DEF(search) + + class BooleanScorer: public Scorer { + private: + + class Bucket { + public: + int32_t doc; // tells if bucket is valid + float_t score; // incremental score + int32_t bits; // used for bool constraints + int32_t coord; // count of terms in score + Bucket* next; // next valid bucket + + Bucket(); + virtual ~Bucket(); + }; + + class SubScorer { + public: + bool done; + Scorer* scorer; + bool required; + bool prohibited; + HitCollector* collector; + SubScorer* next; + SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt); + virtual ~SubScorer(); + }; + + class BucketTable { + private: + BooleanScorer* scorer; + public: + Bucket* buckets; + Bucket* first; // head of valid list + + BucketTable(BooleanScorer* scr); + int32_t size() const; + HitCollector* newCollector(const int32_t mask); + void clear(); + virtual ~BucketTable(); + }; + + class Collector: public HitCollector { + private: + BucketTable* bucketTable; + int32_t mask; + public: + Collector(const int32_t mask, BucketTable* bucketTable); + + void collect(const int32_t doc, const float_t score); + }; + + SubScorer* scorers; + BucketTable* bucketTable; + + int32_t maxCoord; + int32_t nextMask; + + int32_t end; + Bucket* current; + + int32_t minNrShouldMatch; + + public: + LUCENE_STATIC_CONSTANT(int32_t,BucketTable_SIZE=1024); + int32_t requiredMask; + int32_t prohibitedMask; + float_t* coordFactors; + + BooleanScorer( Similarity* similarity, int32_t minNrShouldMatch = 1 ); + virtual ~BooleanScorer(); + void add(Scorer* scorer, const bool required, const bool prohibited); + int32_t doc() const { return current->doc; } + bool next(); + float_t score(); + void score( HitCollector* hc ); + bool skipTo(int32_t target); + Explanation* explain(int32_t doc); + virtual TCHAR* toString(); + void computeCoordFactors(); + + protected: + bool score( HitCollector* hc, const int32_t max ); + + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/CachingSpanFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/search/CachingSpanFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/CachingSpanFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/CachingSpanFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,120 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CachingSpanFilter.h" +#include "CLucene/index/IndexReader.h" + + +CL_NS_DEF(search) + +/** + * Result wrapper for the cache + */ +class ResultHolder : LUCENE_BASE +{ + bool deleteResult; +public: + SpanFilterResult * result; + + ResultHolder(SpanFilterResult * result, bool deleteResult ) + { + this->result = result; + this->deleteResult = deleteResult; + } + ~ResultHolder() + { + if ( deleteResult ) + _CLDELETE( result ); + } +}; + +struct CachingSpanFilter::Internal +{ + typedef CL_NS(util)::CLHashMap< + CL_NS(index)::IndexReader *, + ResultHolder *, + CL_NS(util)::Compare::Void, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object + > ResultCacheType; + + ResultCacheType cache; + DEFINE_MUTEX(cache_LOCK) + + Internal() : cache(false,true) + {} +}; + +CachingSpanFilter::CachingSpanFilter( SpanFilter * filter, bool deleteFilter ) +{ + _internal = _CLNEW Internal(); + this->filter = filter; + this->deleteFilter = deleteFilter; +} + +CachingSpanFilter::CachingSpanFilter( const CachingSpanFilter& copy ) +{ + _internal = _CLNEW Internal(); + this->filter = (SpanFilter*)copy.filter->clone(); + this->deleteFilter = true; +} + +CachingSpanFilter::~CachingSpanFilter() +{ + _CLDELETE( _internal ); + if( deleteFilter ) + { + _CLDELETE( filter ); + } + else + filter = NULL; +} + +Filter* CachingSpanFilter::clone() const +{ + return _CLNEW CachingSpanFilter( *this ); +} + +CL_NS(util)::BitSet* CachingSpanFilter::bits( CL_NS(index)::IndexReader * reader ) +{ + SpanFilterResult * result = getCachedResult( reader ); + return result != NULL ? result->getBits() : NULL; +} + +SpanFilterResult * CachingSpanFilter::getCachedResult( CL_NS(index)::IndexReader * reader ) +{ + SCOPED_LOCK_MUTEX( _internal->cache_LOCK ) + + ResultHolder * resultHolder = _internal->cache.get( reader ); + if( ! resultHolder ) + { + SpanFilterResult * result = filter->bitSpans( reader ); + resultHolder = _CLNEW ResultHolder( result, true ); + _internal->cache.put( reader, resultHolder ); + } + + return resultHolder->result; +} + +SpanFilterResult * CachingSpanFilter::bitSpans( CL_NS(index)::IndexReader * reader ) +{ + return getCachedResult( reader ); +} + +TCHAR* CachingSpanFilter::toString() +{ + TCHAR* ft = filter->toString(); + size_t len = _tcslen( ft ) + 20; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T( "CachingSpanFilter(%s)" ), ft ); + _CLDELETE_CARRAY( ft ); + return ret; +} + +CL_NS_END \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/CachingSpanFilter.h clucene-core-2.3.3.4/src/core/CLucene/search/CachingSpanFilter.h --- clucene-core-0.9.21b/src/core/CLucene/search/CachingSpanFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/CachingSpanFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,60 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_CachingSpanFilter_ +#define _lucene_search_CachingSpanFilter_ + +#include "SpanFilter.h" + +CL_NS_DEF(search) + +/** + * Wraps another SpanFilter's result and caches it. The purpose is to allow + * filters to simply filter, and then wrap with this class to add caching. + */ +class CachingSpanFilter : public SpanFilter +{ + struct Internal; + Internal* _internal; + +protected: + SpanFilter * filter; + bool deleteFilter; + +protected: + CachingSpanFilter( const CachingSpanFilter& copy ); + +public: + /** + * @param filter Filter to cache results of + */ + CachingSpanFilter( SpanFilter * filter, bool deleteFilter=true ); + + virtual ~CachingSpanFilter(); + + virtual Filter* clone() const; + + virtual CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader * reader ); + + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ); + + virtual TCHAR* toString(); + +private: + SpanFilterResult * getCachedResult( CL_NS(index)::IndexReader * reader ); + +// public boolean equals(Object o) { +// if (!(o instanceof CachingSpanFilter)) return false; +// return this.filter.equals(((CachingSpanFilter)o).filter); +// } +// +// public int hashCode() { +// return filter.hashCode() ^ 0x1117BF25; +// } +}; + +CL_NS_END +#endif // _lucene_search_CachingSpanFilter_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/CachingWrapperFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/search/CachingWrapperFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/CachingWrapperFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/CachingWrapperFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,114 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CachingWrapperFilter.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_DEF(search) +CL_NS_USE(index) +CL_NS_USE(util) + + +class BitSetHolder: LUCENE_BASE{ + bool deleteBs; +public: + CL_NS(util)::BitSet* bits; + + BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs){ + this->bits = bits; + this->deleteBs = deleteBs; + } + ~BitSetHolder(){ + if ( deleteBs ) + _CLDELETE(bits); + } +}; + +struct AbstractCachingFilter::Internal{ + typedef CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object > CacheType; + + CacheType cache; + DEFINE_MUTEX(cache_LOCK) + Internal(): + cache(false,true) + { + } +}; + +AbstractCachingFilter::AbstractCachingFilter(): + _internal(new Internal) +{ +} +AbstractCachingFilter::AbstractCachingFilter(const AbstractCachingFilter& /*copy*/): + _internal(new Internal) +{ +} +AbstractCachingFilter::~AbstractCachingFilter(){ + delete _internal; +} + +BitSet* AbstractCachingFilter::bits(IndexReader* reader){ + SCOPED_LOCK_MUTEX(_internal->cache_LOCK) + BitSetHolder* cached = _internal->cache.get(reader); + if ( cached != NULL ) + return cached->bits; + BitSet* bs = doBits(reader); + BitSetHolder* bsh = _CLNEW BitSetHolder(bs, doShouldDeleteBitSet(bs)); + _internal->cache.put(reader,bsh); + return bs; +} +void AbstractCachingFilter::closeCallback(CL_NS(index)::IndexReader* reader, void*){ + SCOPED_LOCK_MUTEX(_internal->cache_LOCK) + _internal->cache.remove(reader); +} + + + + +CachingWrapperFilter::CachingWrapperFilter(Filter* filter, bool deleteFilter): + AbstractCachingFilter() +{ + this->filter = filter; + this->deleteFilter = deleteFilter; +} +CachingWrapperFilter::CachingWrapperFilter(const CachingWrapperFilter& copy): + AbstractCachingFilter(copy) +{ + this->filter = copy.filter->clone(); + this->deleteFilter = true; +} +Filter* CachingWrapperFilter::clone() const{ + return _CLNEW CachingWrapperFilter(*this); +} +TCHAR* CachingWrapperFilter::toString(){ + TCHAR* fs = filter->toString(); + int len = _tcslen(fs)+23; + TCHAR* ret = _CL_NEWARRAY(TCHAR,len); + _sntprintf(ret,len,_T("CachingWrapperFilter(%s)"),fs); + _CLDELETE_CARRAY(fs); + return ret; +} +BitSet* CachingWrapperFilter::doBits(IndexReader* reader){ + return filter->bits(reader); +} +bool CachingWrapperFilter::doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ){ + return filter->shouldDeleteBitSet(bits); +} +CachingWrapperFilter::~CachingWrapperFilter(){ + if ( deleteFilter ){ + _CLDELETE(filter); + }else + filter=NULL; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/CachingWrapperFilter.h clucene-core-2.3.3.4/src/core/CLucene/search/CachingWrapperFilter.h --- clucene-core-0.9.21b/src/core/CLucene/search/CachingWrapperFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/CachingWrapperFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_CachingWrapperFilter_ +#define _lucene_search_CachingWrapperFilter_ + +//#include "CLucene/util/BitSet.h" +//#include "CLucene/index/IndexReader.h" +#include "Filter.h" + +CL_NS_DEF(search) +/** + * Wraps another filter's result and caches it. The purpose is to allow + * filters to implement this and allow itself to be cached. Alternatively, + * use the CachingWrapperFilter to cache the filter. + */ +class CLUCENE_EXPORT AbstractCachingFilter: public Filter +{ + struct Internal; + Internal* _internal; + void closeCallback(CL_NS(index)::IndexReader* reader, void* param); +protected: + AbstractCachingFilter( const AbstractCachingFilter& copy ); + virtual CL_NS(util)::BitSet* doBits( CL_NS(index)::IndexReader* reader ) = 0; + virtual bool doShouldDeleteBitSet( CL_NS(util)::BitSet* /*bits*/ ){ return false; } + AbstractCachingFilter(); +public: + virtual ~AbstractCachingFilter(); + + /** Returns a BitSet with true for documents which should be permitted in + search results, and false for those that should not. */ + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); + + virtual Filter *clone() const = 0; + virtual TCHAR *toString() = 0; + + bool shouldDeleteBitSet( const CL_NS(util)::BitSet* /*bits*/ ) const{ return false; } +}; + +/** + * Wraps another filter's result and caches it. The purpose is to allow + * filters to simply filter, and then wrap with this class to add + * caching, keeping the two concerns decoupled yet composable. + */ +class CLUCENE_EXPORT CachingWrapperFilter: public AbstractCachingFilter +{ +private: + Filter* filter; + bool deleteFilter; +protected: + CachingWrapperFilter( const CachingWrapperFilter& copy ); + CL_NS(util)::BitSet* doBits( CL_NS(index)::IndexReader* reader ); + bool doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ); +public: + CachingWrapperFilter( Filter* filter, bool deleteFilter=true ); + ~CachingWrapperFilter(); + + Filter *clone() const; + TCHAR *toString(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/ChainedFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/search/ChainedFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/ChainedFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/ChainedFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,219 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/IndexReader.h" +#include "ChainedFilter.h" + +CL_NS_DEF(search) +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(document) + + +ChainedFilter::ChainedFilter( Filter ** _filters, int _op ): + Filter(), + filters(_filters), + logicArray(NULL), + logic(_op) +{ +} +ChainedFilter::ChainedFilter( Filter** _filters, int* _array ): + Filter(), + filters(_filters), + logicArray(_array), + logic(-1) +{ +} +ChainedFilter::ChainedFilter( const ChainedFilter& copy ) : + Filter(copy), + logicArray( copy.logicArray ), + logic( copy.logic ) +{ + filters = copy.filters; +} +ChainedFilter::~ChainedFilter(void) +{ + +} + +Filter* ChainedFilter::clone() const { + return _CLNEW ChainedFilter(*this ); +} + +const TCHAR* ChainedFilter::getLogicString(int logic){ + if ( logic == ChainedFilter::OR ) + return _T("OR"); + else if ( logic == ChainedFilter::AND ) + return _T("AND"); + else if ( logic == ChainedFilter::ANDNOT ) + return _T("ANDNOT"); + else if ( logic == ChainedFilter::XOR ) + return _T("XOR"); + else if ( logic >= ChainedFilter::USER ){ + return _T("USER"); + } + return _T(""); +} + +TCHAR* ChainedFilter::toString() +{ + + Filter** filter = filters; + + StringBuffer buf(_T("ChainedFilter: [")); + int* la = logicArray; + while(*filter ) + { + if ( filter != filters ) + buf.appendChar(' '); + buf.append(getLogicString(logic==-1?*la:logic)); + buf.appendChar(' '); + + TCHAR* filterstr = (*filter)->toString(); + buf.append(filterstr); + _CLDELETE_ARRAY( filterstr ); + + filter++; + if ( logic == -1 ) + la++; + } + + buf.appendChar(']'); + + return buf.toString(); +} + + +/** Returns a BitSet with true for documents which should be permitted in +search results, and false for those that should not. */ +BitSet* ChainedFilter::bits( IndexReader* reader ) +{ + if( logic != -1 ) + return bits( reader, logic ); + else if( logicArray != NULL ) + return bits( reader, logicArray ); + else + return bits( reader, DEFAULT ); +} + + +BitSet* ChainedFilter::bits( IndexReader* reader, int logic ) +{ + BitSet* bts = NULL; + + Filter** filter = filters; + + // see discussion at top of file + if( *filter ) { + BitSet* tmp = (*filter)->bits( reader ); + if ( (*filter)->shouldDeleteBitSet(tmp) ) //if we are supposed to delete this BitSet, then + bts = tmp; //we can safely call it our own + else if ( tmp == NULL ){ + int32_t len = reader->maxDoc(); + bts = _CLNEW BitSet( len ); //bitset returned null, which means match _all_ + for (int32_t i=0;iset(i); + }else{ + bts = tmp->clone(); //else it is probably cached, so we need to copy it before using it. + } + filter++; + } + else + bts = _CLNEW BitSet( reader->maxDoc() ); + + while( *filter ) { + doChain( bts, reader, logic, *filter ); + filter++; + } + + return bts; +} + + +BitSet* ChainedFilter::bits( IndexReader* reader, int* _logicArray ) +{ + BitSet* bts = NULL; + + Filter** filter = filters; + int* logic = _logicArray; + + // see discussion at top of file + if( *filter ) { + BitSet* tmp = (*filter)->bits( reader ); + if ( (*filter)->shouldDeleteBitSet(tmp) ) //if we are supposed to delete this BitSet, then + bts = tmp; //we can safely call it our own + else if ( tmp == NULL ){ + int32_t len = reader->maxDoc(); + bts = _CLNEW BitSet( len ); //bitset returned null, which means match _all_ + for (int32_t i=0;iset(i); //todo: this could mean that we can skip certain types of filters + } + else + { + bts = tmp->clone(); //else it is probably cached, so we need to copy it before using it. + } + filter++; + logic++; + } + else + bts = _CLNEW BitSet( reader->maxDoc() ); + + while( *filter ) { + doChain( bts, reader, *logic, *filter ); + filter++; + logic++; + } + + return bts; +} + +void ChainedFilter::doUserChain( CL_NS(util)::BitSet* /*chain*/, CL_NS(util)::BitSet* /*filter*/, int /*logic*/ ){ + _CLTHROWA(CL_ERR_Runtime,"User chain logic not implemented by superclass"); +} + +BitSet* ChainedFilter::doChain( BitSet* resultset, IndexReader* reader, int logic, Filter* filter ) +{ + BitSet* filterbits = filter->bits( reader ); + int32_t maxDoc = reader->maxDoc(); + int32_t i=0; + if ( logic >= ChainedFilter::USER ){ + doUserChain(resultset,filterbits,logic); + }else{ + switch( logic ) + { + case OR: + for( i=0; i < maxDoc; i++ ) + resultset->set( i, (resultset->get(i) || (filterbits==NULL || filterbits->get(i) ))?1:0 ); + break; + case AND: + for( i=0; i < maxDoc; i++ ) + resultset->set( i, (resultset->get(i) && (filterbits==NULL || filterbits->get(i) ))?1:0 ); + break; + case ANDNOT: + for( i=0; i < maxDoc; i++ ) + resultset->set( i, (resultset->get(i) && (filterbits==NULL || filterbits->get(i)))?0:1 ); + break; + case XOR: + for( i=0; i < maxDoc; i++ ) + resultset->set( i, resultset->get(i) ^ ((filterbits==NULL || filterbits->get(i) )?1:0) ); + break; + default: + doChain( resultset, reader, DEFAULT, filter ); + } + } + + if ( filter->shouldDeleteBitSet(filterbits) ) + _CLDELETE( filterbits ); + + return resultset; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/ChainedFilter.h clucene-core-2.3.3.4/src/core/CLucene/search/ChainedFilter.h --- clucene-core-0.9.21b/src/core/CLucene/search/ChainedFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/ChainedFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,86 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_ChainedFilter_ +#define _lucene_search_ChainedFilter_ + +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/BitSet.h" +#include "Filter.h" + +CL_NS_DEF(search) + +/* +Discussion - brian@unixpoet.com + +From ChainedFilter.java: + +... + +// First AND operation takes place against a completely false +// bitset and will always return zero results. Thanks to +// Daniel Armbrust for pointing this out and suggesting workaround. + +if (logic[0] == AND) +{ + result = (BitSet) chain[i].bits(reader).clone(); + ++i; +} + +... + +The observation is correct and it was buggy. The problem is that the same +issue remains for the ANDNOT logic op but with the inverse result: all bits +set to 1. The result of the other ops, i.e. OR, AND, XOR for the first filter +ends up just copying the bitset of the first filter (explicitly in the case of the AND). + +Why not do the same for the NAND? This will have the side effect of rendering the first op +in the logic array superflous - not a big problem. + +The only "problem" is that we will return different results then the Java +Lucene code - though I prefer CLucene to be a correct implementation and only maintain +API compat rather than full 100% compat with Lucene. +*/ +class CLUCENE_EXPORT ChainedFilter: public Filter +{ +public: + LUCENE_STATIC_CONSTANT(int, OR = 0); //set current bit if the chain is set OR if the filter bit is set + LUCENE_STATIC_CONSTANT(int, AND = 1); //set current bit if the chain is set AND the filter bit is set + LUCENE_STATIC_CONSTANT(int, ANDNOT = 2); //set current bit if the chain is not set AND the filter bit is not set + LUCENE_STATIC_CONSTANT(int, XOR = 3); //set current bit if the chain is set OR the filter bit is set BUT not both is set + + LUCENE_STATIC_CONSTANT(int, USER = 5); //add this value to user defined value, then override doUserChain + + LUCENE_STATIC_CONSTANT(int, DEFAULT = OR); + +protected: + Filter **filters; + int *logicArray; + int logic; + + ChainedFilter( const ChainedFilter& copy ); + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader, int logic ); + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader, int* logicArray ); + CL_NS(util)::BitSet* doChain( CL_NS(util)::BitSet* result, CL_NS(index)::IndexReader* reader, int logic, Filter* filter ); + + virtual void doUserChain( CL_NS(util)::BitSet* chain, CL_NS(util)::BitSet* filter, int logic ); + virtual const TCHAR* getLogicString(int logic); +public: + ChainedFilter( Filter** filters, int op = DEFAULT ); + ChainedFilter( Filter** filters, int* _array ); + virtual ~ChainedFilter(); + + /** Returns a BitSet with true for documents which should be permitted in + search results, and false for those that should not. */ + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); + + virtual Filter* clone() const; + + TCHAR* toString(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Compare.cpp clucene-core-2.3.3.4/src/core/CLucene/search/Compare.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/Compare.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Compare.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,120 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Compare.h" +#include "SearchHeader.h" + +CL_NS_DEF(search) + +ScoreDocComparators::ScoreDocComparators(){} +ScoreDocComparators::~ScoreDocComparators(){ +} + +int32_t ScoreDocComparators::Relevance::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + if (i->score > j->score) return -1; + if (i->score < j->score) return 1; + return 0; +} +CL_NS(util)::Comparable* ScoreDocComparators::Relevance::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::Float (i->score); +} +int32_t ScoreDocComparators::Relevance::sortType() { + return SortField::DOCSCORE; +} + + + +ScoreDocComparators::IndexOrder::IndexOrder(): + ScoreDocComparator() +{ + +} +int32_t ScoreDocComparators::IndexOrder::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + if (i->doc < j->doc) return -1; + if (i->doc > j->doc) return 1; + return 0; +} +CL_NS(util)::Comparable* ScoreDocComparators::IndexOrder::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::Int32(i->doc); +} +int32_t ScoreDocComparators::IndexOrder::sortType() { + return SortField::DOC; +} + + + +ScoreDocComparators::String::String(FieldCache::StringIndex* index, int32_t len) +{ + this->length = len; + this->index = index; +} + +int32_t ScoreDocComparators::String::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=length") + if (index->order[i->doc] < index->order[j->doc]) return -1; + if (index->order[i->doc] > index->order[j->doc]) return 1; + return 0; +} + +CL_NS(util)::Comparable* ScoreDocComparators::String::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::TChar(index->lookup[index->order[i->doc]]); +} + +int32_t ScoreDocComparators::String::sortType() { + return SortField::STRING; +} + + +ScoreDocComparators::Int32::Int32(int32_t* fieldOrder, int32_t len) +{ + this->fieldOrder = fieldOrder; + this->length = len; +} + + +int32_t ScoreDocComparators::Int32::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=length") + if (fieldOrder[i->doc] < fieldOrder[j->doc]) return -1; + if (fieldOrder[i->doc] > fieldOrder[j->doc]) return 1; + return 0; +} + +CL_NS(util)::Comparable* ScoreDocComparators::Int32::sortValue (struct ScoreDoc* i) { + CND_PRECONDITION(i->docdoc>=length") + return _CLNEW CL_NS(util)::Compare::Int32(fieldOrder[i->doc]); +} + +int32_t ScoreDocComparators::Int32::sortType() { + return SortField::INT; +} + +ScoreDocComparators::Float::Float(float_t* fieldOrder, int32_t len) +{ + this->fieldOrder = fieldOrder; + this->length = len; +} + +int32_t ScoreDocComparators::Float::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=length") + if (fieldOrder[i->doc] < fieldOrder[j->doc]) return -1; + if (fieldOrder[i->doc] > fieldOrder[j->doc]) return 1; + return 0; +} + +CL_NS(util)::Comparable* ScoreDocComparators::Float::sortValue (struct ScoreDoc* i) { + CND_PRECONDITION(i->docdoc>=length") + return _CLNEW CL_NS(util)::Compare::Float(fieldOrder[i->doc]); +} + +int32_t ScoreDocComparators::Float::sortType() { + return SortField::FLOAT; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Compare.h clucene-core-2.3.3.4/src/core/CLucene/search/Compare.h --- clucene-core-0.9.21b/src/core/CLucene/search/Compare.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Compare.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,74 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Compare_ +#define _lucene_search_Compare_ + + +//#include "FieldSortedHitQueue.h" +#include "Sort.h" +#include "FieldCache.h" + +CL_NS_DEF(search) + + +class CLUCENE_EXPORT ScoreDocComparators:LUCENE_BASE { +protected: + ScoreDocComparators(); +public: + ~ScoreDocComparators(); + + class CLUCENE_EXPORT Relevance:public ScoreDocComparator { + public: + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + class CLUCENE_EXPORT IndexOrder:public ScoreDocComparator{ + public: + IndexOrder(); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + + class CLUCENE_EXPORT String: public ScoreDocComparator { + FieldCache::StringIndex* index; + int32_t length; + public: + String(FieldCache::StringIndex* index, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + + int32_t sortType(); + }; + + class CLUCENE_EXPORT Int32:public ScoreDocComparator{ + int32_t* fieldOrder; + int32_t length; + public: + Int32(int32_t* fieldOrder, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + class CLUCENE_EXPORT Float:public ScoreDocComparator { + float_t* fieldOrder; + int32_t length; + public: + Float(float_t* fieldOrder, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/ConjunctionScorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/ConjunctionScorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/ConjunctionScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/ConjunctionScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,133 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_ConjunctionScorer.h" +#include "Similarity.h" +#include "CLucene/util/_Arrays.h" +#include +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + ConjunctionScorer::ConjunctionScorer(Similarity* similarity, ScorersType* _scorers): + Scorer(similarity), + firstTime(true), + more(false), + coord(0.0), + lastDoc(-1) + { + this->scorers = _CLNEW CL_NS(util)::ObjectArray(_scorers->size()); + _scorers->toArray(this->scorers->values); + coord = getSimilarity()->coord(this->scorers->length, this->scorers->length); + } + ConjunctionScorer::ConjunctionScorer(Similarity* similarity, const CL_NS(util)::ArrayBase* _scorers): + Scorer(similarity), + firstTime(true), + more(false), + coord(0.0), + lastDoc(-1) + { + this->scorers = _CLNEW CL_NS(util)::ObjectArray(_scorers->length); + memcpy(this->scorers->values, _scorers->values, _scorers->length * sizeof(Scorer*)); + coord = getSimilarity()->coord(this->scorers->length, this->scorers->length); + } + ConjunctionScorer::~ConjunctionScorer(){ + _CLLDELETE(scorers); + } + + TCHAR* ConjunctionScorer::toString(){ + return stringDuplicate(_T("ConjunctionScorer")); + } + + int32_t ConjunctionScorer::doc() const{ + return lastDoc; + } + + bool ConjunctionScorer::next() { + if (firstTime) { + init(0); + } else if (more) { + more = scorers->values[(scorers->length-1)]->next(); + } + return doNext(); + } + + bool ConjunctionScorer::doNext() { + int32_t first=0; + Scorer* lastScorer = scorers->values[scorers->length-1]; + Scorer* firstScorer; + while (more && (firstScorer=scorers->values[first])->doc() < (lastDoc=lastScorer->doc())) { + more = firstScorer->skipTo(lastDoc); + lastScorer = firstScorer; + first = (first == (scorers->length-1)) ? 0 : first+1; + } + return more; + } + + bool ConjunctionScorer::skipTo(int32_t target) { + if (firstTime) + return init(target); + else if (more) + more = scorers->values[(scorers->length-1)]->skipTo(target); + return doNext(); + } + int ConjunctionScorer_sort(const void* _elem1, const void* _elem2){ + const Scorer* elem1 = *(const Scorer**)_elem1; + const Scorer* elem2 = *(const Scorer**)_elem2; + return elem1->doc() - elem2->doc(); + } + + bool ConjunctionScorer::init(int32_t target) { + firstTime = false; + more = scorers->length>1; + + + for (size_t i=0; ilength; i++) { + more = target==0 ? scorers->values[i]->next() : scorers->values[i]->skipTo(target); + if (!more) + return false; + } + + // Sort the array the first time... + // We don't need to sort the array in any future calls because we know + // it will already start off sorted (all scorers on same doc). + + // note that this comparator is not consistent with equals! + qsort(scorers->values,scorers->length, sizeof(Scorer*), ConjunctionScorer_sort); + + doNext(); + + // If first-time skip distance is any predictor of + // scorer sparseness, then we should always try to skip first on + // those scorers. + // Keep last scorer in it's last place (it will be the first + // to be skipped on), but reverse all of the others so that + // they will be skipped on in order of original high skip. + int32_t end=(scorers->length-1)-1; + for (int32_t i=0; i<(end>>1); i++) { + Scorer* tmp = scorers->values[i]; + scorers->values[i] = scorers->values[end-i]; + scorers->values[end-i] = tmp; + } + return more; + } + + float_t ConjunctionScorer::score(){ + float_t sum = 0.0f; + for (size_t i = 0; i < scorers->length; i++) { + sum += scorers->values[i]->score(); + } + return sum * coord; + } + Explanation* ConjunctionScorer::explain(int32_t /*doc*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: ConjunctionScorer::explain"); + } + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_ConjunctionScorer.h clucene-core-2.3.3.4/src/core/CLucene/search/_ConjunctionScorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/_ConjunctionScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_ConjunctionScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,41 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_ConjunctionScorer_ +#define _lucene_search_ConjunctionScorer_ + +#include "Scorer.h" +#include "CLucene/util/Array.h" +CL_NS_DEF(search) + +/** Scorer for conjunctions, sets of queries, all of which are required. */ +class ConjunctionScorer: public Scorer { +private: + CL_NS(util)::ArrayBase* scorers; + typedef CL_NS(util)::CLVector > ScorersType; + bool firstTime; + bool more; + float_t coord; + int32_t lastDoc; + + Scorer* last(); + bool doNext(); + + bool init(int32_t target); +public: + ConjunctionScorer(Similarity* similarity, ScorersType* scorers); + ConjunctionScorer(Similarity* similarity, const CL_NS(util)::ArrayBase* scorers); + virtual ~ConjunctionScorer(); + virtual TCHAR* toString(); + int32_t doc() const; + bool next(); + bool skipTo(int32_t target); + virtual float_t score(); + virtual Explanation* explain(int32_t doc); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/ConstantScoreQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/ConstantScoreQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/ConstantScoreQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/ConstantScoreQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,312 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "ConstantScoreQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "RangeFilter.h" +#include "Similarity.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + +class ConstantScorer : public Scorer { + BitSet* bits; + const float_t theScore; + int32_t _doc; + +public: + ConstantScorer(Similarity* similarity, IndexReader* reader, Weight* w, Filter* filter) : Scorer(similarity), + bits(filter->bits(reader)), theScore(w->getValue()), _doc(-1) + { + } + virtual ~ConstantScorer() { + _CLLDELETE(bits); + } + + bool next() { + _doc = bits->nextSetBit(_doc+1); + return _doc >= 0; + } + + int32_t doc() const { + return _doc; + } + + float_t score() { + return theScore; + } + + bool skipTo(int32_t target) { + _doc = bits->nextSetBit(target); + return _doc >= 0; + } + + Explanation* explain(int32_t /*doc*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation at ConstantScoreQuery::explain"); + } + + TCHAR* toString(){ + return STRDUP_TtoT(_T("ConstantScorer")); + } + + friend class ConstantWeight; +}; + +class ConstantWeight : public Weight { +private: + Similarity* similarity; + float_t queryNorm; + float_t queryWeight; + const ConstantScoreQuery* parentQuery; + +public: + ConstantWeight(ConstantScoreQuery* enclosingInstance, Searcher* searcher) : + similarity(enclosingInstance->getSimilarity(searcher)), + queryNorm(0), queryWeight(0), + parentQuery(enclosingInstance) + { + } + virtual ~ConstantWeight(){} + + Query* getQuery() { + return (Query*)parentQuery; + } + + float_t getValue() { + return queryWeight; + } + + float_t sumOfSquaredWeights() { + queryWeight = parentQuery->getBoost(); + return queryWeight * queryWeight; + } + + void normalize(float_t norm) { + this->queryNorm = norm; + queryWeight *= this->queryNorm; + } + + Scorer* scorer(IndexReader* reader) { + return _CLNEW ConstantScorer(similarity, reader, this, parentQuery->filter); + } + + Explanation* explain(IndexReader* reader, int32_t doc) { + ConstantScorer* cs = (ConstantScorer*)scorer(reader); + bool exists = cs->bits->get(doc); + _CLDELETE(cs); + + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + if (exists) { + StringBuffer buf(100); + buf.append(_T("ConstantScoreQuery(")); + + TCHAR* tmp = parentQuery->filter->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + + buf.append(_T("), product of:")); + + result->setDescription(buf.getBuffer()); + result->setValue(queryWeight); + result->setMatch(true); + result->addDetail(_CLNEW Explanation(parentQuery->getBoost(), _T("boost"))); + result->addDetail(_CLNEW Explanation(queryNorm, _T("queryNorm"))); + } else { + StringBuffer buf(100); + buf.append(_T("ConstantScoreQuery(")); + + TCHAR* tmp = parentQuery->filter->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + + buf.append(_T(") doesn't match id ")); + buf.appendInt(doc); + + result->setDescription(buf.getBuffer()); + result->setValue(0); + result->setMatch(true); + } + + _CLLDELETE(cs); + return result; + } +}; + +ConstantScoreQuery::ConstantScoreQuery(Filter* _filter) : filter(_filter) { +} + +ConstantScoreQuery::~ConstantScoreQuery() { + _CLLDELETE(filter); +} + +Filter* ConstantScoreQuery::getFilter() const { + return filter; +} + +Query* ConstantScoreQuery::rewrite(IndexReader* reader) { + return this; +} + +void ConstantScoreQuery::extractTerms( TermSet * termset ) const +{ + // OK to not add any terms when used for MultiSearcher, + // but may not be OK for highlighting +} + +Weight* ConstantScoreQuery::_createWeight(Searcher* searcher) { + return _CLNEW /*ConstantScoreQuery::*/ConstantWeight(this, searcher); +} + +TCHAR* ConstantScoreQuery::toString(const TCHAR* /*field*/) const +{ + StringBuffer buf; + buf.append(_T("ConstantScore(")); + TCHAR* tmp = filter->toString(); + buf.append(tmp); + _CLLDELETE(tmp); + buf.appendBoost(getBoost()); + buf.appendChar(_T(')')); + return buf.giveBuffer(); +} + +// TODO: Filter is missing an equals() function, hence this equals() is incomplete +bool ConstantScoreQuery::equals(Query* o) const { + if (this == o) return true; + if (!(o->instanceOf("ConstantScoreQuery"))) return false; + ConstantScoreQuery* other = (ConstantScoreQuery*)o; + return this->getBoost()==other->getBoost() + /*&& filter->equals(other->filter)*/; +} + +// TODO: Filter is missing hashCode() +size_t ConstantScoreQuery::hashCode() const { + // Simple add is OK since no existing filter hashcode has a float component. + //return filter->hashCode() + FloatToIntBits(getBoost()); + return 0; +} + +ConstantScoreQuery::ConstantScoreQuery( const ConstantScoreQuery& copy ) : filter(copy.getFilter()->clone()) +{ +} + +const char* ConstantScoreQuery::getObjectName() const { return "ConstantScoreQuery"; } +Query* ConstantScoreQuery::clone() const{ + return _CLNEW ConstantScoreQuery(*this); +} + +ConstantScoreRangeQuery::ConstantScoreRangeQuery( const ConstantScoreRangeQuery& copy ): + fieldName(const_cast(CLStringIntern::intern(copy.fieldName))), + lowerVal(STRDUP_TtoT(copy.lowerVal)), upperVal(STRDUP_TtoT(copy.upperVal)), + includeLower(copy.includeLower),includeUpper(copy.includeUpper) +{ +} + +ConstantScoreRangeQuery::ConstantScoreRangeQuery(const TCHAR* _fieldName, const TCHAR* _lowerVal, const TCHAR* _upperVal, + bool _includeLower, bool _includeUpper) : fieldName(NULL), lowerVal(NULL), upperVal(NULL) +{ + // do a little bit of normalization... + // open ended range queries should always be inclusive. + if (_lowerVal==NULL) { + _includeLower=true; + } else if (_includeLower && _tcscmp(_lowerVal, _T(""))==0) { + _lowerVal=NULL; + } + if (_upperVal==NULL) { + _includeUpper=true; + } + + this->fieldName = const_cast(CLStringIntern::intern(_fieldName)); // intern it, just like terms... + if (_lowerVal != NULL) + this->lowerVal = STRDUP_TtoT(_lowerVal); + if (_upperVal != NULL) + this->upperVal = STRDUP_TtoT(_upperVal); + this->includeLower = _includeLower; + this->includeUpper = _includeUpper; +} +ConstantScoreRangeQuery::~ConstantScoreRangeQuery(){ + _CLDELETE_LCARRAY(lowerVal); + _CLDELETE_LCARRAY(upperVal); + CLStringIntern::unintern(this->fieldName); +} + +Query* ConstantScoreRangeQuery::rewrite(CL_NS(index)::IndexReader* reader) { + // Map to RangeFilter semantics which are slightly different... + const TCHAR* lowerSafe = lowerVal!=NULL?lowerVal:_T(""); + RangeFilter* rangeFilt = _CLNEW RangeFilter(fieldName, + lowerSafe, + upperVal, + (_tcscmp(lowerSafe, _T(""))==0)?false:includeLower, + upperVal==NULL?false:includeUpper); + Query* q = _CLNEW ConstantScoreQuery(rangeFilt); + q->setBoost(getBoost()); + return q; +} + +TCHAR* ConstantScoreRangeQuery::toString(const TCHAR* field) const +{ + StringBuffer buffer(30); + if (_tcscmp(getField(), field) != 0) + { + buffer.append(getField()); + buffer.appendChar(_T(':')); + } + buffer.appendChar(includeLower ? _T('[') : _T('{')); + buffer.append(lowerVal != NULL ? lowerVal : _T("*")); + buffer.append(_T(" TO ")); + buffer.append(upperVal != NULL ? upperVal : _T("*")); + buffer.appendChar(includeUpper ? _T(']') : _T('}')); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); +} + +bool ConstantScoreRangeQuery::equals(Query* o) const { + if (this == o) return true; + if (!(o->instanceOf("ConstantScoreRangeQuery"))) return false; + ConstantScoreRangeQuery* other = (ConstantScoreRangeQuery*) o; + + if (this->fieldName != other->fieldName // interned comparison + || this->includeLower != other->includeLower + || this->includeUpper != other->includeUpper + ) { return false; } + if (this->lowerVal != NULL ? _tcscmp(this->lowerVal, other->lowerVal) != 0 : other->lowerVal != NULL) return false; + if (this->upperVal != NULL ? _tcscmp(this->upperVal, other->upperVal) != 0 : other->upperVal != NULL) return false; + return this->getBoost() == other->getBoost(); +} + +// TODO: Complete this +size_t ConstantScoreRangeQuery::hashCode() const +{ + int32_t h = Similarity::floatToByte( getBoost() ) ^ Misc::thashCode( fieldName ); + // hashCode of "" is 0, so don't use that for null... + + h ^= ( lowerVal != NULL ) ? Misc::thashCode( lowerVal ) : 0x965a965a; + // don't just XOR upperVal with out mixing either it or h, as it will cancel + // out lowerVal if they are equal. + + h ^= (h << 17) | (h >> 16); // a reversible (one to one) 32 bit mapping mix + h ^= (upperVal != NULL) ? Misc::thashCode( upperVal ) : 0x5a695a69; + h ^= (includeLower ? 0x665599aa : 0) ^ (includeUpper ? 0x99aa5566 : 0); + + return h; +} + +const char* ConstantScoreRangeQuery::getObjectName() const { return "ConstantScoreRangeQuery"; } +Query* ConstantScoreRangeQuery::clone() const{ + return _CLNEW ConstantScoreRangeQuery(*this); +} + +CL_NS_END + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/ConstantScoreQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/ConstantScoreQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/ConstantScoreQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/ConstantScoreQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_ConstantScoreQuery_ +#define _lucene_search_ConstantScoreQuery_ + +CL_CLASS_DEF(index,IndexReader) + +#include "Query.h" +#include "Filter.h" +#include "Explanation.h" + +CL_NS_DEF(search) + +/** + * A query that wraps a filter and simply returns a constant score equal to the + * query boost for every document in the filter. + * + */ +class CLUCENE_EXPORT ConstantScoreQuery : public Query { +protected: + Filter* filter; + +public: + /** + * Constructs a new ConstantScoreQuery, and takes ownership of the filter object + * + * @memory this object consumes _filter + */ + ConstantScoreQuery(Filter* _filter); + virtual ~ConstantScoreQuery(); + + /** Returns the encapsulated filter */ + Filter* getFilter() const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Constant score query does not return any terms */ + void extractTerms( TermSet * termset ) const; + +protected: + Weight* _createWeight(Searcher* searcher); + +public: + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object. */ + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(){ return "ConstantScoreQuery"; } + Query* clone() const; + + friend class ConstantWeight; + +protected: + ConstantScoreQuery( const ConstantScoreQuery& copy ); +}; + + +/** + * A range query that returns a constant score equal to its boost for + * all documents in the range. + *

+ * It does not have an upper bound on the number of clauses covered in the range. + *

+ * If an endpoint is null, it is said to be "open". + * Either or both endpoints may be open. Open endpoints may not be exclusive + * (you can't select all but the first or last term without explicitly specifying the term to exclude.) + * + */ +class CLUCENE_EXPORT ConstantScoreRangeQuery : public Query +{ +private: + TCHAR* fieldName; + TCHAR* lowerVal; + TCHAR* upperVal; + bool includeLower; + bool includeUpper; + +public: + ConstantScoreRangeQuery(const TCHAR* _fieldName, const TCHAR* _lowerVal, const TCHAR* _upperVal, + bool _includeLower, bool _includeUpper); + virtual ~ConstantScoreRangeQuery(); + + /** Returns the field name for this query */ + TCHAR* getField() const { return fieldName; } + /** Returns the value of the lower endpoint of this range query, null if open ended */ + TCHAR* getLowerVal() const { return lowerVal; } + /** Returns the value of the upper endpoint of this range query, null if open ended */ + TCHAR* getUpperVal() const { return upperVal; } + /** Returns true if the lower endpoint is inclusive */ + bool includesLower() const { return includeLower; } + /** Returns true if the upper endpoint is inclusive */ + bool includesUpper() const { return includeUpper; } + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(){ return "ConstantScoreRangeQuery"; } + Query* clone() const; +protected: + ConstantScoreRangeQuery( const ConstantScoreRangeQuery& copy ); +}; + +CL_NS_END + +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/DateFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/search/DateFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/DateFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/DateFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "DateFilter.h" +#include "CLucene/document/DateField.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Terms.h" +#include "CLucene/util/BitSet.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_DEF(search) + + DateFilter::~DateFilter(){ + _CLDECDELETE( start ); + _CLDECDELETE( end ); + } + + DateFilter::DateFilter(const DateFilter& copy): + start( _CL_POINTER(copy.start) ), + end ( _CL_POINTER(copy.end) ) + { + } + + /** Constructs a filter for field f matching times between + from and to. */ + DateFilter::DateFilter(const TCHAR* f, int64_t from, int64_t to) + { + TCHAR* tmp = DateField::timeToString(from); + start = _CLNEW Term(f, tmp); + _CLDELETE_CARRAY(tmp); + + tmp = DateField::timeToString(to); + end = _CLNEW Term(start, tmp); + _CLDELETE_CARRAY(tmp); + } + + /** Constructs a filter for field f matching times before + time. */ + DateFilter* DateFilter::Before(const TCHAR* field, int64_t time) { + return _CLNEW DateFilter(field, 0,time); + } + + /** Constructs a filter for field f matching times after + time. */ + DateFilter* DateFilter::After(const TCHAR* field, int64_t time) { + return _CLNEW DateFilter(field,time, DATEFIELD_DATE_MAX ); + } + + /** Returns a BitSet with true for documents which should be permitted in + search results, and false for those that should not. */ + BitSet* DateFilter::bits(IndexReader* reader) { + BitSet* bts = _CLNEW BitSet(reader->maxDoc()); + + TermEnum* enumerator = reader->terms(start); + if (enumerator->term(false) == NULL){ + _CLDELETE(enumerator); + return bts; + } + TermDocs* termDocs = reader->termDocs(); + + try { + while (enumerator->term(false)->compareTo(end) <= 0) { + termDocs->seek(enumerator->term(false)); + while (termDocs->next()) { + bts->set(termDocs->doc()); + } + if (!enumerator->next()) { + break; + } + } + } _CLFINALLY ( + termDocs->close(); + _CLDELETE(termDocs); + enumerator->close(); + _CLDELETE(enumerator); + ); + return bts; + } + + Filter* DateFilter::clone() const{ + return _CLNEW DateFilter(*this); + } + + TCHAR* DateFilter::toString(){ + size_t len = _tcslen(start->field()) + start->textLength() + end->textLength() + 8; + TCHAR* ret = _CL_NEWARRAY(TCHAR,len); + ret[0]=0; + _sntprintf(ret,len,_T("%s: [%s-%s]"), start->field(),start->text(),end->text()); + return ret; + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/DateFilter.h clucene-core-2.3.3.4/src/core/CLucene/search/DateFilter.h --- clucene-core-0.9.21b/src/core/CLucene/search/DateFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/DateFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,61 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_DateFilter_ +#define _lucene_search_DateFilter_ + + +//#include "CLucene/document/DateField.h" +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/BitSet.h" +#include "Filter.h" + +CL_NS_DEF(search) + + +// Deprecated. Instead, use RangeFilter combined with DateTools. + + + /** + * A Filter that restricts search results to a range of time. + * + *

For this to work, documents must have been indexed with a + * {@link DateField}. + */ + class CLUCENE_EXPORT DateFilter: public Filter { + private: + CL_NS(index)::Term* start; + CL_NS(index)::Term* end; + + protected: + DateFilter(const DateFilter& copy); + public: + ~DateFilter(); + + /** Constructs a filter for field f matching times between + from and to. */ + DateFilter(const TCHAR* f, int64_t from, int64_t to); + + /** Constructs a filter for field f matching times before + time. */ + static DateFilter* Before(const TCHAR* field, int64_t time) ; + + /** Constructs a filter for field f matching times after + time. */ + static DateFilter* After(const TCHAR* field, int64_t time) ; + + /** Returns a BitSet with true for documents which should be permitted in + search results, and false for those that should not. */ + CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader) ; + + Filter* clone() const; + + TCHAR* toString(); + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/DisjunctionSumScorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/DisjunctionSumScorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/DisjunctionSumScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/DisjunctionSumScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,201 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "Scorer.h" +#include "ScorerDocQueue.h" +#include "SearchHeader.h" +#include "Explanation.h" + +#include "CLucene/util/StringBuffer.h" + +#include "_DisjunctionSumScorer.h" + + +CL_NS_DEF(search) + +DisjunctionSumScorer::DisjunctionSumScorer( DisjunctionSumScorer::ScorersType* _subScorers, const int32_t _minimumNrMatchers ) : + Scorer( NULL ), + minimumNrMatchers(_minimumNrMatchers), + scorerDocQueue(NULL), + queueSize(-1), + currentDoc(-1), + currentScore(-1.0f), + nrScorers(0), + _nrMatchers(-1) +{ + if ( minimumNrMatchers <= 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"Minimum nr of matchers must be positive"); + } + + nrScorers = _subScorers->size(); + + if ( nrScorers <= 1 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"There must be at least 2 subScorers"); + } + + for ( DisjunctionSumScorer::ScorersType::iterator itr = _subScorers->begin(); itr != _subScorers->end(); itr++ ) { + subScorers.push_back( *itr ); + } +} + +DisjunctionSumScorer::~DisjunctionSumScorer() +{ + _CLLDELETE( scorerDocQueue ); +} + +void DisjunctionSumScorer::score( HitCollector* hc ) +{ + while( next() ) { + hc->collect( currentDoc, currentScore ); + } +} + +bool DisjunctionSumScorer::next() +{ + if ( scorerDocQueue == NULL ) { + initScorerDocQueue(); + } + return ( scorerDocQueue->size() >= minimumNrMatchers ) && advanceAfterCurrent(); +} + +float_t DisjunctionSumScorer::score() +{ + return currentScore; +} +int32_t DisjunctionSumScorer::doc() const +{ + return currentDoc; +} + +int32_t DisjunctionSumScorer::nrMatchers() const +{ + return _nrMatchers; +} + +bool DisjunctionSumScorer::skipTo( int32_t target ) +{ + if ( scorerDocQueue == NULL ) { + initScorerDocQueue(); + } + if ( queueSize < minimumNrMatchers ) { + return false; + } + if ( target <= currentDoc ) { + return true; + } + do { + if ( scorerDocQueue->topDoc() >= target ) { + return advanceAfterCurrent(); + } else if ( !scorerDocQueue->topSkipToAndAdjustElsePop( target )) { + if ( --queueSize < minimumNrMatchers ) { + return false; + } + } + } while ( true ); +} + +TCHAR* DisjunctionSumScorer::toString() +{ + return stringDuplicate(_T("DisjunctionSumScorer")); +} + +Explanation* DisjunctionSumScorer::explain( int32_t doc ){ + Explanation* res = _CLNEW Explanation(); + float_t sumScore = 0.0f; + int32_t nrMatches = 0; + ScorersType::iterator ssi = subScorers.begin(); + while (ssi != subScorers.end()) { + Explanation* es = reinterpret_cast(*ssi)->explain(doc); + if (es->getValue() > 0.0f) { // indicates match + sumScore += es->getValue(); + nrMatches++; + } + res->addDetail(es); + ++ssi; + } + + CL_NS(util)::StringBuffer buf(50); + if (_nrMatchers >= minimumNrMatchers) { + buf.append(_T("sum over at least ")); + buf.appendInt(minimumNrMatchers); + buf.append(_T(" of ")); + buf.appendInt(subScorers.size()); + buf.appendChar(_T(':')); + + res->setValue(sumScore); + res->setDescription(buf.getBuffer()); + } else { + buf.appendInt(nrMatches); + buf.append(_T(" match(es) but at least ")); + buf.appendInt(minimumNrMatchers); + buf.append(_T(" of ")); + buf.appendInt(subScorers.size()); + buf.append(_T(" needed")); + + res->setValue(0.0f); + res->setDescription(buf.getBuffer()); + } + return res; +} + +bool DisjunctionSumScorer::score( HitCollector* hc, const int32_t max ) +{ + while ( currentDoc < max ) { + hc->collect( currentDoc, currentScore ); + if ( !next() ) { + return false; + } + } + return true; +} + +bool DisjunctionSumScorer::advanceAfterCurrent() +{ + do { // repeat until minimum nr of matchers + currentDoc = scorerDocQueue->topDoc(); + currentScore = scorerDocQueue->topScore(); + + _nrMatchers = 1; + do { // Until all subscorers are after currentDoc + if ( !scorerDocQueue->topNextAndAdjustElsePop() ) { + if ( --queueSize == 0 ) { + break; // nothing more to advance, check for last match. + } + } + if ( scorerDocQueue->topDoc() != currentDoc ) { + break; // All remaining subscorers are after currentDoc. + } + currentScore += scorerDocQueue->topScore(); + _nrMatchers++; + } while( true ); + + if ( _nrMatchers >= minimumNrMatchers ) { + return true; + } else if ( queueSize < minimumNrMatchers ) { + return false; + } + } while( true ); +} + +void DisjunctionSumScorer::initScorerDocQueue() +{ + // No need to _CLLDELETE here since this function since this function is only called if scorerDocQueue==NULL + scorerDocQueue = _CLNEW ScorerDocQueue( nrScorers ); + queueSize = 0; + + for ( ScorersType::iterator it = subScorers.begin(); it != subScorers.end(); ++it ) { + Scorer* scorer = (Scorer*)(*it); + if ( scorer->next() ) { // doc() method will be used in scorerDocQueue. + if ( scorerDocQueue->insert( scorer )) { + queueSize++; + } + } + } +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_DisjunctionSumScorer.h clucene-core-2.3.3.4/src/core/CLucene/search/_DisjunctionSumScorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/_DisjunctionSumScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_DisjunctionSumScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_DisjunctionSumScorer_ +#define _lucene_search_DisjunctionSumScorer_ + +CL_NS_USE(util) +CL_NS_DEF(search) + +/** A Scorer for OR like queries, counterpart of ConjunctionScorer. +* This Scorer implements {@link Scorer#skipTo(int)} and uses skipTo() on the given Scorers. +* @java-todo Implement score(HitCollector, int). +*/ +class DisjunctionSumScorer : public Scorer { +public: + typedef CL_NS(util)::CLVector > ScorersType; +private: + /** The minimum number of scorers that should match. */ + int32_t minimumNrMatchers; + + /** The scorerDocQueue contains all subscorers ordered by their current doc(), + * with the minimum at the top. + *
The scorerDocQueue is initialized the first time next() or skipTo() is called. + *
An exhausted scorer is immediately removed from the scorerDocQueue. + *
If less than the minimumNrMatchers scorers + * remain in the scorerDocQueue next() and skipTo() return false. + *

+ * After each to call to next() or skipTo() + * currentSumScore is the total score of the current matching doc, + * nrMatchers is the number of matching scorers, + * and all scorers are after the matching doc, or are exhausted. + */ + ScorerDocQueue* scorerDocQueue; + int32_t queueSize; // used to avoid size() method calls on scorerDocQueue + + /** The document number of the current match. */ + int32_t currentDoc; + float_t currentScore; + + /** Called the first time next() or skipTo() is called to + * initialize scorerDocQueue. + */ + void initScorerDocQueue(); + +protected: + /** The number of subscorers. */ + int32_t nrScorers; + + /** The subscorers. */ + DisjunctionSumScorer::ScorersType subScorers; + + /** The number of subscorers that provide the current match. */ + int32_t _nrMatchers; + + /** Expert: Collects matching documents in a range. Hook for optimization. + * Note that {@link #next()} must be called once before this method is called + * for the first time. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + * @param max Do not score documents past this. + * @return true if more matching documents may remain. + */ + bool score( HitCollector* hc, const int32_t max ); + + /** Advance all subscorers after the current document determined by the + * top of the scorerDocQueue. + * Repeat until at least the minimum number of subscorers match on the same + * document and all subscorers are after that document or are exhausted. + *
On entry the scorerDocQueue has at least minimumNrMatchers + * available. At least the scorer with the minimum document number will be advanced. + * @return true iff there is a match. + *
In case there is a match, currentDoc, currentSumScore, + * and nrMatchers describe the match. + * + * @todo Investigate whether it is possible to use skipTo() when + * the minimum number of matchers is bigger than one, ie. try and use the + * character of ConjunctionScorer for the minimum number of matchers. + * Also delay calling score() on the sub scorers until the minimum number of + * matchers is reached. + *
For this, a Scorer array with minimumNrMatchers elements might + * hold Scorers at currentDoc that are temporarily popped from scorerQueue. + */ + bool advanceAfterCurrent(); + +public: + /** Construct a DisjunctionScorer, using one as the minimum number + * of matching subscorers. + * @param subScorers A collection of at least two subscorers. + * @param minimumNrMatchers The positive minimum number of subscorers that should + * match to match this query. + *
When minimumNrMatchers is bigger than + * the number of subScorers, + * no matches will be produced. + *
When minimumNrMatchers equals the number of subScorers, + * it more efficient to use ConjunctionScorer. + */ + DisjunctionSumScorer( DisjunctionSumScorer::ScorersType* _subScorers, const int32_t _minimumNrMatchers = 1); + virtual ~DisjunctionSumScorer(); + + /** Scores and collects all matching documents. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + *
When this method is used the {@link #explain(int)} method should not be used. + */ + void score( HitCollector* hc ); + bool next(); + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + virtual float_t score(); + + int32_t doc() const; + + /** Returns the number of subscorers matching the current document. + * Initially invalid, until {@link #next()} is called the first time. + */ + int32_t nrMatchers() const; + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
When this method is used the {@link #explain(int)} method should not be used. + *
The implementation uses the skipTo() method on the subscorers. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo( int32_t target ); + + virtual TCHAR* toString(); + + /** @return An explanation for the score of a given document. */ + Explanation* explain( int32_t doc ); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/ExactPhraseScorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/ExactPhraseScorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/ExactPhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/ExactPhraseScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,91 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/Terms.h" +#include "SearchHeader.h" +#include "SearchHeader.h" +#include "Scorer.h" +#include "_ExactPhraseScorer.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + ExactPhraseScorer::ExactPhraseScorer(Weight* weight, TermPositions** tps, + int32_t* offsets, Similarity* similarity, uint8_t* norms): + PhraseScorer(weight, tps, offsets, similarity, norms){ + //Func - Constructor + //Pre - tps != NULL + // tpsLength >= 0 + // n != NULL + //Post - Instance has been created + + CND_PRECONDITION(tps != NULL,"tps is NULL"); + CND_PRECONDITION(tps[0] != NULL,"tps is NULL"); + //CND_PRECONDITION(n != NULL,"n is NULL") =this is checked already in PhraseScorer + + } + + ExactPhraseScorer::~ExactPhraseScorer(){} + + float_t ExactPhraseScorer::phraseFreq(){ + //Func - Returns the freqency of the phrase + //Pre - first != NULL + // last != NULL + // pq != NULL + // size of the PhraseQueue pq is 0 + //Post - The frequency of the phrase has been returned + + CND_PRECONDITION(first != NULL,"first is NULL"); + CND_PRECONDITION(last != NULL,"last is NULL"); + CND_PRECONDITION(pq != NULL,"pq is NULL"); + CND_PRECONDITION(pq->size()==0,"pq is not empty"); + + // sort list with pq + pq->clear(); + + //Add the nodes of the list of PhrasePositions and store them + //into the PhraseQueue pq so it can used to build + //a list of sorted nodes + for (PhrasePositions* pp = first; pp != NULL; pp = pp->_next) { + //Read the first TermPosition of the current PhrasePositions pp + pp->firstPosition(); + //Store the current PhrasePositions pp into the PhraseQueue pq + pq->put(pp); + } + //pqToList requires that first and last be NULL when it's called. + //This is done at the beginning of pqToList() + //In this case, the nodes of the linked list are referenced by pq (see + //above loop), so we can clear our pointers to the head and tail of the + //linked list without fear of leaking the nodes. + + //rebuild list from pq + pqToList(); + + // for counting how many times the exact phrase is found in current document, + // just count how many times all PhrasePosition's have exactly the same position. + int32_t freq = 0; + do { //find position with all terms + while (first->position < last->position){ //scan forward in first + do{ + if (!first->nextPosition()){ + return (float_t)freq; + } + } while (first->position < last->position); + //Make the current first node the last node in the list + firstToLast(); + } + //all equal: a match has been found + freq++; + } while (last->nextPosition()); + + return (float_t)freq; + } + + TCHAR* ExactPhraseScorer::toString(){ + return stringDuplicate(_T("ExactPhraseScorer")); + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_ExactPhraseScorer.h clucene-core-2.3.3.4/src/core/CLucene/search/_ExactPhraseScorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/_ExactPhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_ExactPhraseScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_ExactPhraseScorer_ +#define _lucene_search_ExactPhraseScorer_ + +#include "_PhraseScorer.h" + +CL_NS_DEF(search) + + class ExactPhraseScorer: public PhraseScorer { + public: + ExactPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, int32_t* offsets, + Similarity* similarity, uint8_t* norms ); + + virtual ~ExactPhraseScorer(); + + virtual TCHAR* toString(); + + protected: + //Returns the exact freqency of the phrase + float_t phraseFreq(); + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Explanation.cpp clucene-core-2.3.3.4/src/core/CLucene/search/Explanation.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/Explanation.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Explanation.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Explanation.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + +Explanation::Explanation(float_t _value, const TCHAR* _description):value(_value),details(NULL) +{ + _tcsncpy(this->description,_description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); +} + +Explanation::Explanation():value(0), details(NULL) +{ + this->description[0]=0; +} + +Explanation::Explanation(const Explanation& copy):details(NULL) +{ + set(copy); +} +void Explanation::set(const Explanation& copy){ + this->value = copy.value; + _tcsncpy(description,copy.description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); + + _CLDELETE(this->details); + + if (copy.details != NULL) { + this->details = _CLNEW CL_NS(util)::CLArrayList >(true); + CL_NS(util)::CLArrayList >::const_iterator itr; + itr = copy.details->begin(); + while ( itr != copy.details->end() ){ + details->push_back( (*itr)->clone() ); + ++itr; + } + } +} +Explanation* Explanation::clone() const{ + return _CLNEW Explanation(*this); +} + +Explanation::~Explanation(){ + _CLLDELETE(this->details); +} + +bool Explanation::isMatch() const { + return (0.0f < getValue()); +} + +float_t Explanation::getValue() const{ + return value; +} +void Explanation::setValue(const float_t value) { + this->value = value; +} + +const TCHAR* Explanation::getDescription() const { + return description; +} +void Explanation::setDescription(const TCHAR* description) { + _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); +} + +TCHAR* Explanation::getSummary() { + StringBuffer buf(210); + buf.appendFloat(getValue(), 2); + buf.append(_T(" = ")); + buf.append(getDescription()); + return buf.giveBuffer(); +} + +size_t Explanation::getDetailsLength() const {return (details==NULL)?0:details->size();} +void Explanation::getDetails(Explanation** ret) { + if (details==NULL){ + ret[0]=NULL; + return; + } + size_t size = details->size(); + for ( size_t i=0;iclone(); + } + ret[size] = NULL; +} +Explanation* Explanation::getDetail(const size_t i){return (*details)[i];} + +void Explanation::addDetail(Explanation* detail) { + if (details==NULL) details = _CLNEW CL_NS(util)::CLArrayList >(true); + details->push_back(detail); +} + +TCHAR* Explanation::toString() { + return toString(0); +} + +TCHAR* Explanation::toString(int32_t depth) { + StringBuffer buffer; + for (int32_t i = 0; i < depth; i++) { + buffer.append(_T(" ")); + } + TCHAR* tSum = getSummary(); + buffer.append(tSum); + _CLDELETE_LCARRAY(tSum); + buffer.appendChar(_T('\n')); + + if (details != NULL){ + for ( size_t j=0;jsize();j++ ){ + TCHAR* tmp = (*details)[j]->toString(depth+1); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + } + } + return buffer.toString(); +} + +TCHAR* Explanation::toHtml() { + StringBuffer buffer; + TCHAR* tmp; + buffer.append(_T("

    \n")); + + buffer.append(_T("
  • ")); + TCHAR* tSum = getSummary(); + buffer.append(tSum); + _CLDELETE_LCARRAY(tSum); + buffer.append(_T("
    \n")); + + if (details != NULL){ + for ( size_t i=0;isize();i++ ){ + tmp = (*details)[i]->toHtml(); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + } + } + buffer.append(_T("
  • \n")); + buffer.append(_T("
\n")); + + return buffer.toString(); +} + +ComplexExplanation::ComplexExplanation():Explanation(){} +ComplexExplanation::ComplexExplanation(const ComplexExplanation& copy): + Explanation(copy) +{ + this->match = copy.match; +} +ComplexExplanation::ComplexExplanation(const bool _match, const float_t _value, const TCHAR* _description): + Explanation(_value, _description), match(_match) +{ +} +ComplexExplanation::~ComplexExplanation(){ +} + +bool ComplexExplanation::getMatch() const { return match; } +void ComplexExplanation::setMatch(const bool _match) { this->match = _match; } +bool ComplexExplanation::isMatch() const {return getMatch();} + +TCHAR* ComplexExplanation::getSummary() { + StringBuffer buf(220); + buf.appendFloat(getValue(),2); + buf.append(_T(" = ")); + buf.append(isMatch() ? _T("(MATCH) ") : _T("(NON-MATCH) ")); + buf.append(getDescription()); + return buf.giveBuffer(); +} + +Explanation* ComplexExplanation::clone() const{ + return _CLNEW ComplexExplanation(*this); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Explanation.h clucene-core-2.3.3.4/src/core/CLucene/search/Explanation.h --- clucene-core-0.9.21b/src/core/CLucene/search/Explanation.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Explanation.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,120 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Explanation +#define _lucene_search_Explanation + +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + +#define LUCENE_SEARCH_EXPLANATION_DESC_LEN 200 + +/** Expert: Describes the score computation for document and query. */ +class CLUCENE_EXPORT Explanation { +private: + float_t value; // the value of this node + TCHAR description[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; // what it represents + CL_NS(util)::CLArrayList >* details; // sub-explanations + +public: + Explanation(); + Explanation(float_t _value, const TCHAR* _description); + virtual ~Explanation(); + + /** + * Indicates whether or not this Explanation models a good match. + * + *

+ * By default, an Explanation represents a "match" if the value is positive. + *

+ * @see #getValue + */ + virtual bool isMatch() const; + + /** The value assigned to this explanation node. */ + float_t getValue() const; + /** Sets the value assigned to this explanation node. */ + void setValue(const float_t value); + + /** A description of this explanation node. */ + const TCHAR* getDescription() const; /// + * If the match statis is explicitly set (ie: not null) this method + * uses it; otherwise it defers to the superclass. + *

+ * @see #getMatch + */ + bool isMatch() const; + + Explanation* clone() const; + +protected: + TCHAR* getSummary(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FieldCache.cpp clucene-core-2.3.3.4/src/core/CLucene/search/FieldCache.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/FieldCache.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FieldCache.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,65 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "FieldCache.h" +#include "_FieldCacheImpl.h" +#include "Sort.h" + +CL_NS_DEF(search) + +FieldCache* FieldCache_DEFAULT = NULL; +int32_t FieldCache::STRING_INDEX = -1; + +FieldCache* FieldCache::DEFAULT(){ + if ( FieldCache_DEFAULT == NULL ) + FieldCache_DEFAULT = _CLNEW FieldCacheImpl(); + return FieldCache_DEFAULT; +} +void FieldCache::_shutdown(){ + _CLDELETE(FieldCache_DEFAULT); +} + +FieldCacheAuto::FieldCacheAuto(int32_t len, int32_t type){ + contentType = type; + contentLen = len; + ownContents = false; + + intArray=NULL; + floatArray=NULL; + stringIndex=NULL; + stringArray=NULL; + comparableArray=NULL; + sortComparator=NULL; + scoreDocComparator=NULL; +} +FieldCacheAuto::~FieldCacheAuto(){ + if ( contentType == FieldCacheAuto::INT_ARRAY ){ + _CLDELETE_ARRAY(intArray); + }else if ( contentType == FieldCacheAuto::FLOAT_ARRAY ){ + _CLDELETE_ARRAY(floatArray); + }else if ( contentType == FieldCacheAuto::STRING_INDEX ){ + _CLDELETE(stringIndex); + }else if ( contentType == FieldCacheAuto::STRING_ARRAY ){ + if ( ownContents ){ + for ( int32_t i=0;ifield as integers and returns an array + * of size reader.maxDoc() of the value each document + * has in the given field. + * @param reader Used to get field values. + * @param field Which field contains the integers. + * @return The values in the given field for each document. + * @throws IOException If any error occurs. + */ + virtual FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; + + /** Checks the internal cache for an appropriate entry, and if + * none is found, reads the terms in field as floats and returns an array + * of size reader.maxDoc() of the value each document + * has in the given field. + * @param reader Used to get field values. + * @param field Which field contains the floats. + * @return The values in the given field for each document. + * @throws IOException If any error occurs. + */ + virtual FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; + + /** Checks the internal cache for an appropriate entry, and if none + * is found, reads the term values in field and returns an array + * of size reader.maxDoc() containing the value each document + * has in the given field. + * @param reader Used to get field values. + * @param field Which field contains the strings. + * @return The values in the given field for each document. + * @throws IOException If any error occurs. + */ + virtual FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; + + /** Checks the internal cache for an appropriate entry, and if none + * is found reads the term values in field and returns + * an array of them in natural order, along with an array telling + * which element in the term array each document uses. + * @param reader Used to get field values. + * @param field Which field contains the strings. + * @return Array of terms and index into the array for each document. + * @throws IOException If any error occurs. + */ + virtual FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; + + /** Checks the internal cache for an appropriate entry, and if + * none is found reads field to see if it contains integers, floats + * or strings, and then calls one of the other methods in this class to get the + * values. For string values, a FieldCache::StringIndex is returned. After + * calling this method, there is an entry in the cache for both + * type AUTO and the actual found type. + * @param reader Used to get field values. + * @param field Which field contains the values. + * @return int32_t[], float_t[] or FieldCache::StringIndex. + * @throws IOException If any error occurs. + */ + virtual FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0; + + /** Checks the internal cache for an appropriate entry, and if none + * is found reads the terms out of field and calls the given SortComparator + * to get the sort values. A hit in the cache will happen if reader, + * field, and comparator are the same (using equals()) + * as a previous call to this method. + * @param reader Used to get field values. + * @param field Which field contains the values. + * @param comparator Used to convert terms into something to sort by. + * @return Array of sort objects, one for each document. + * @throws IOException If any error occurs. + */ + virtual FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator) = 0; + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); +}; + +/** A class holding an AUTO field. In java lucene an Object + is used, but we use this. + contentType: + 1 - integer array + 2 - float array + 3 - FieldCache::StringIndex object + This class is also used when returning getInt, getFloat, etc + because we have no way of returning the size of the array and + this class can be used to determine the array size +*/ +class CLUCENE_EXPORT FieldCacheAuto:LUCENE_BASE{ +public: + enum{ + INT_ARRAY=1, + FLOAT_ARRAY=2, + STRING_INDEX=3, + STRING_ARRAY=4, + COMPARABLE_ARRAY=5, + SORT_COMPARATOR=6, + SCOREDOC_COMPARATOR=7 + }; + + FieldCacheAuto(int32_t len, int32_t type); + ~FieldCacheAuto(); + ///if contents should be deleted too, depending on type + bool ownContents; + int32_t contentLen; //number of items in the list + uint8_t contentType; + int32_t* intArray; //item 1 + float_t* floatArray; //item 2 + FieldCache::StringIndex* stringIndex; //item 3 + TCHAR** stringArray; //item 4 + CL_NS(util)::Comparable** comparableArray; //item 5 + SortComparator* sortComparator; //item 6 + ScoreDocComparator* scoreDocComparator; //item 7 + +}; + + +CL_NS_END + +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FieldCacheImpl.cpp clucene-core-2.3.3.4/src/core/CLucene/search/FieldCacheImpl.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/FieldCacheImpl.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FieldCacheImpl.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,577 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_FieldCacheImpl.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" +#include "Sort.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_DEF(search) + +///the type that is stored in the field cache. can't use a typedef because +///the decorated name would become too long +class fieldcacheCacheReaderType: public CL_NS(util)::CLHashMap, + CL_NS(util)::Deletor::Object >{ +public: + fieldcacheCacheReaderType(){ + setDeleteKey(false); + setDeleteValue(false); + } + ~fieldcacheCacheReaderType(){ + iterator itr = begin(); + while ( itr != end() ){ + FieldCacheImpl::FileEntry* f = itr->first; + if ( f->getType() != SortField::AUTO ) + _CLDELETE( itr->second ); + _CLDELETE( f ); + ++itr; + } + clear(); + } +}; + +//note: typename gets too long if using cacheReaderType as a typename +class fieldcacheCacheType: public CL_NS(util)::CLHashMap< + CL_NS(index)::IndexReader*, + fieldcacheCacheReaderType*, + CL_NS(util)::Compare::Void, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object >{ +public: + fieldcacheCacheType ( const bool deleteKey, const bool deleteValue) + { + setDeleteKey(deleteKey); + setDeleteValue(deleteValue); + } + virtual ~fieldcacheCacheType(){ + + } +}; + +FieldCache::StringIndex::StringIndex (int32_t* values, TCHAR** lookup, int count) { + this->count = count; + this->order = values; + this->lookup = lookup; +} + +FieldCache::StringIndex::~StringIndex(){ + _CLDELETE_ARRAY(order); + + for ( int i=0;iclear(); + _CLDELETE(cache); +} + +FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, int32_t type) { + this->field = CLStringIntern::intern(field); + this->type = type; + this->custom = NULL; + this->_hashCode = 0; + } + + /** Creates one of these objects for a custom comparator. */ + FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, SortComparatorSource* custom) { + this->field = CLStringIntern::intern(field); + this->type = SortField::CUSTOM; + this->custom = custom; + this->_hashCode = 0; + } + FieldCacheImpl::FileEntry::~FileEntry(){ + CLStringIntern::unintern(field); + } + + size_t FieldCacheImpl::FileEntry::hashCode(){ + if ( _hashCode == 0 ){ + //todo: cache hashcode? + size_t ret = Misc::thashCode(field); + if ( custom != NULL ) + ret = ret ^ custom->hashCode(); + ret = ret ^ (type*7); //type with a seed + _hashCode = ret; + } + return _hashCode; + } + int32_t FieldCacheImpl::FileEntry::compareTo(const FieldCacheImpl::FileEntry* other) const{ + if ( other->field == this->field ){ + if ( other->type == this->type ){ + if ( other->custom == NULL ){ + if ( this->custom == NULL ) + return 0; //both null + else + return 1; + }else if ( this->custom == NULL ) + return -1; + else if ( other->custom < this->custom ) + return -1; + else if ( other->custom > this->custom ) + return 1; + else + return 0; + }else if ( other->type > this->type ) + return 1; + else + return -1; + + }else + return _tcscmp(other->field,this->field); + } + + /** Two of these are equal iff they reference the same field and type. */ + /*bool FieldCacheImpl::FileEntry::equals (FileEntry* other) { + if (other->field == field && other->type == type) { + if (other->custom == NULL) { + if (custom == NULL) + return true; + } else if (other->custom->equals (custom)) { + return true; + } + } + }*/ + + /** Composes a hashcode based on the field and type. */ + /*size_t FieldCacheImpl::FileEntry::hashCode() { + return field->hashCode() ^ type ^ (custom==NULL ? 0 : custom->hashCode()); + }*/ + + + + + + /** See if an object is in the cache. */ + FieldCacheAuto* FieldCacheImpl::lookup (IndexReader* reader, const TCHAR* field, int32_t type) { + FieldCacheAuto* ret = NULL; + FileEntry* entry = _CLNEW FileEntry (field, type); + { + SCOPED_LOCK_MUTEX(THIS_LOCK) + fieldcacheCacheReaderType* readerCache = cache->get(reader); + if (readerCache != NULL) + ret = readerCache->get (entry); + _CLDELETE(entry); + } + return ret; + } + + + /** See if a custom object is in the cache. */ + FieldCacheAuto* FieldCacheImpl::lookup (IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer) { + FieldCacheAuto* ret = NULL; + FileEntry* entry = _CLNEW FileEntry (field, comparer); + { + SCOPED_LOCK_MUTEX(THIS_LOCK) + fieldcacheCacheReaderType* readerCache = cache->get(reader); + if (readerCache != NULL) + ret = readerCache->get (entry); + _CLDELETE(entry); +} + return ret; + } + + void FieldCacheImpl::closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl){ + FieldCacheImpl* fci = (FieldCacheImpl*)fieldCacheImpl; + SCOPED_LOCK_MUTEX(fci->THIS_LOCK) + fci->cache->remove(reader); + } + + /** Put an object into the cache. */ + void FieldCacheImpl::store (IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value) { + FileEntry* entry = _CLNEW FileEntry (field, type); + { + SCOPED_LOCK_MUTEX(THIS_LOCK) + fieldcacheCacheReaderType* readerCache = cache->get(reader); + if (readerCache == NULL) { + readerCache = _CLNEW fieldcacheCacheReaderType; + cache->put(reader,readerCache); + reader->addCloseCallback(closeCallback, this); + } + readerCache->put (entry, value); + //this is supposed to return the previous value, but it needs to be deleted!!! + } + } + + /** Put a custom object into the cache. */ + void FieldCacheImpl::store (IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value) { + FileEntry* entry = _CLNEW FileEntry (field, comparer); + { + SCOPED_LOCK_MUTEX(THIS_LOCK) + fieldcacheCacheReaderType* readerCache = cache->get(reader); + if (readerCache == NULL) { + readerCache = _CLNEW fieldcacheCacheReaderType; + cache->put(reader, readerCache); + reader->addCloseCallback(FieldCacheImpl::closeCallback, this); + } + readerCache->put(entry, value); + //this is supposed to return the previous value, but it needs to be deleted!!! + } + } + + + + + + // inherit javadocs + FieldCacheAuto* FieldCacheImpl::getInts (IndexReader* reader, const TCHAR* field) { + field = CLStringIntern::intern(field); + FieldCacheAuto* ret = lookup (reader, field, SortField::INT); + if (ret == NULL) { + int32_t retLen = reader->maxDoc(); + int32_t* retArray = _CL_NEWARRAY(int32_t,retLen); + memset(retArray,0,sizeof(int32_t)*retLen); + if (retLen > 0) { + TermDocs* termDocs = reader->termDocs(); + + Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); + TermEnum* termEnum = reader->terms (term); + _CLDECDELETE(term); + try { + if (termEnum->term(false) == NULL) { + _CLTHROWA(CL_ERR_Runtime,"no terms in field"); //todo: add detailed error: + field); + } + do { + Term* term = termEnum->term(false); + if (term->field() != field) + break; + + int32_t termval = _ttoi(term->text()); + termDocs->seek (termEnum); + while (termDocs->next()) { + retArray[termDocs->doc()] = termval; + } + } while (termEnum->next()); + } _CLFINALLY( + termDocs->close(); + _CLDELETE(termDocs); + termEnum->close(); + _CLDELETE(termEnum); + ) + } + + FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::INT_ARRAY); + fa->intArray = retArray; + + store (reader, field, SortField::INT, fa); + CLStringIntern::unintern(field); + return fa; + } + CLStringIntern::unintern(field); + return ret; + } + + // inherit javadocs + FieldCacheAuto* FieldCacheImpl::getFloats (IndexReader* reader, const TCHAR* field){ + field = CLStringIntern::intern(field); + FieldCacheAuto* ret = lookup (reader, field, SortField::FLOAT); + if (ret == NULL) { + int32_t retLen = reader->maxDoc(); + float_t* retArray = _CL_NEWARRAY(float_t,retLen); + memset(retArray,0,sizeof(float_t)*retLen); + if (retLen > 0) { + TermDocs* termDocs = reader->termDocs(); + + Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); + TermEnum* termEnum = reader->terms (term); + _CLDECDELETE(term); + + try { + if (termEnum->term(false) == NULL) { + _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: make richer error + field); + } + do { + Term* term = termEnum->term(false); + if (term->field() != field) + break; + + float_t termval = _tcstod(term->text(),NULL); + termDocs->seek (termEnum); + while (termDocs->next()) { + retArray[termDocs->doc()] = termval; + } + } while (termEnum->next()); + } _CLFINALLY( + termDocs->close(); + _CLDELETE(termDocs); + termEnum->close(); + _CLDELETE(termEnum); + ) + } + + FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::FLOAT_ARRAY); + fa->floatArray = retArray; + + store (reader, field, SortField::FLOAT, fa); + CLStringIntern::unintern(field); + return fa; + } + CLStringIntern::unintern(field); + return ret; + } + + + // inherit javadocs + FieldCacheAuto* FieldCacheImpl::getStrings (IndexReader* reader, const TCHAR* field){ + //todo: this is not really used, i think? + field = CLStringIntern::intern(field); + FieldCacheAuto* ret = lookup (reader, field, SortField::STRING); + if (ret == NULL) { + int32_t retLen = reader->maxDoc(); + TCHAR** retArray = _CL_NEWARRAY(TCHAR*,retLen+1); + memset(retArray,0,sizeof(TCHAR*)*(retLen+1)); + if (retLen > 0) { + TermDocs* termDocs = reader->termDocs(); + + Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); + TermEnum* termEnum = reader->terms (term); + _CLDECDELETE(term); + + try { + if (termEnum->term(false) == NULL) { + _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: extend to + field); + } + do { + Term* term = termEnum->term(false); + if (term->field() != field) + break; + const TCHAR* termval = term->text(); + termDocs->seek (termEnum); + while (termDocs->next()) { + retArray[termDocs->doc()] = STRDUP_TtoT(termval); //todo: any better way of doing this??? + } + } while (termEnum->next()); + } _CLFINALLY( + retArray[retLen]=NULL; + termDocs->close(); + _CLDELETE(termDocs); + termEnum->close(); + _CLDELETE(termEnum); + ) + } + FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::STRING_ARRAY); + fa->stringArray = retArray; + fa->ownContents=true; + store (reader, field, SortField::STRING, fa); + CLStringIntern::unintern(field); + return fa; + } + CLStringIntern::unintern(field); + return ret; + } + + // inherit javadocs + FieldCacheAuto* FieldCacheImpl::getStringIndex (IndexReader* reader, const TCHAR* field){ + field = CLStringIntern::intern(field); + FieldCacheAuto* ret = lookup (reader, field, STRING_INDEX); + int32_t t = 0; // current term number + if (ret == NULL) { + int32_t retLen = reader->maxDoc(); + int32_t* retArray = _CL_NEWARRAY(int32_t,retLen); + memset(retArray,0,sizeof(int32_t)*retLen); + + TCHAR** mterms = _CL_NEWARRAY(TCHAR*,retLen+2); + mterms[0]=NULL; + if ( retLen > 0 ) { + TermDocs* termDocs = reader->termDocs(); + + Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); + TermEnum* termEnum = reader->terms (term); + _CLDECDELETE(term); + + + CND_PRECONDITION(t+1 <= retLen, "t out of bounds"); + + // an entry for documents that have no terms in this field + // should a document with no terms be at top or bottom? + // this puts them at the top - if it is changed, FieldDocSortedHitQueue + // needs to change as well. + mterms[t++] = NULL; + + try { + if (termEnum->term(false) == NULL) { + _CLTHROWA(CL_ERR_Runtime,"no terms in field"); //todo: make rich message " + field); + } + do { + Term* term = termEnum->term(false); + if (term->field() != field) + break; + + // store term text + // we expect that there is at most one term per document + if (t >= retLen+1) + _CLTHROWA(CL_ERR_Runtime,"there are more terms than documents in field"); //todo: rich error \"" + field + "\""); + mterms[t] = STRDUP_TtoT(term->text()); + + termDocs->seek (termEnum); + while (termDocs->next()) { + retArray[termDocs->doc()] = t; + } + + t++; + } while (termEnum->next()); + CND_PRECONDITION(tclose(); + _CLDELETE(termDocs); + termEnum->close(); + _CLDELETE(termEnum); + ); + + if (t == 0) { + // if there are no terms, make the term array + // have a single NULL entry + _CLDELETE_ARRAY(mterms); + mterms = _CL_NEWARRAY(TCHAR*,1); //todo: delete old mterms? + mterms[0]=NULL; + } else if (t < retLen) { //todo: check, was mterms.length + // if there are less terms than documents, + // trim off the dead array space + //const TCHAR** terms = _CL_NEWARRAY(TCHAR,t); + //System.arraycopy (mterms, 0, terms, 0, t); + //mterms = terms; + + //we simply shorten the length of the array... + + } + } + FieldCache::StringIndex* value = _CLNEW FieldCache::StringIndex (retArray, mterms,t); + + FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::STRING_INDEX); + fa->stringIndex = value; + fa->ownContents=true; + store (reader, field, STRING_INDEX, fa); + CLStringIntern::unintern(field); + return fa; + } + CLStringIntern::unintern(field); + return ret; + } + + // inherit javadocs + FieldCacheAuto* FieldCacheImpl::getAuto (IndexReader* reader, const TCHAR* field) { + field = CLStringIntern::intern(field); + FieldCacheAuto* ret = lookup (reader, field, SortField::AUTO); + if (ret == NULL) { + Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false); + TermEnum* enumerator = reader->terms (term); + _CLDECDELETE(term); + + try { + Term* term = enumerator->term(false); + if (term == NULL) { + _CLTHROWA(CL_ERR_Runtime,"no terms in field - cannot determine sort type"); //todo: make rich error: " + field + " + } + if (term->field() == field) { + const TCHAR* termtext = term->text(); + size_t termTextLen = term->textLength(); + + bool isint=true; + for ( size_t i=0;iclose(); _CLDELETE(enumerator) ); + + } + CLStringIntern::unintern(field); + return ret; + } + + + // inherit javadocs + FieldCacheAuto* FieldCacheImpl::getCustom (IndexReader* reader, const TCHAR* field, SortComparator* comparator){ + field = CLStringIntern::intern(field); + + FieldCacheAuto* ret = lookup (reader, field, comparator); + if (ret == NULL) { + int32_t retLen = reader->maxDoc(); + Comparable** retArray = _CL_NEWARRAY(Comparable*,retLen); + memset(retArray,0,sizeof(Comparable*)*retLen); + if (retLen > 0) { + TermDocs* termDocs = reader->termDocs(); + TermEnum* termEnum = reader->terms (); + + try { + if (termEnum->term(false) == NULL) { + _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: make rich error + field); + } + do { + Term* term = termEnum->term(false); + if (term->field() != field) + break; + Comparable* termval = comparator->getComparable (term->text()); + termDocs->seek (termEnum); + while (termDocs->next()) { + retArray[termDocs->doc()] = termval; + } + } while (termEnum->next()); + } _CLFINALLY ( + termDocs->close(); + _CLDELETE(termDocs); + termEnum->close(); + _CLDELETE(termEnum); + ); + } + + FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::COMPARABLE_ARRAY); + fa->comparableArray = retArray; + fa->ownContents=true; + store (reader, field, SortField::CUSTOM, fa); + CLStringIntern::unintern(field); + return fa; + } + CLStringIntern::unintern(field); + return ret; + } + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_FieldCacheImpl.h clucene-core-2.3.3.4/src/core/CLucene/search/_FieldCacheImpl.h --- clucene-core-0.9.21b/src/core/CLucene/search/_FieldCacheImpl.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_FieldCacheImpl.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,119 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FieldCacheImpl_ +#define _lucene_search_FieldCacheImpl_ + +CL_CLASS_DEF(index,IndexReader) +CL_CLASS_DEF(search,SortComparator) +CL_CLASS_DEF(search,SortComparatorSource) +#include "FieldCache.h" +#include "CLucene/LuceneThreads.h" +CL_NS_DEF(search) + +class fieldcacheCacheType; + +/** + * Expert: The default cache implementation, storing all values in memory. + * + */ +class FieldCacheImpl: public FieldCache { +public: + DEFINE_MUTEX(THIS_LOCK) + + /** Expert: Every key in the internal cache is of this type. */ + class FileEntry:LUCENE_BASE { + const TCHAR* field; // which Field + int32_t type; // which SortField type + SortComparatorSource* custom; // which custom comparator + size_t _hashCode; + public: + /** Creates one of these objects. */ + FileEntry (const TCHAR* field, int32_t type); + + /** Creates one of these objects for a custom comparator. */ + FileEntry (const TCHAR* field, SortComparatorSource* custom); + ~FileEntry(); + + int32_t getType() const{ return type; } + + /** Two of these are equal iff they reference the same field and type. */ + bool equals (FileEntry* other) const; + + /** Composes a hashcode based on the field and type. */ + size_t hashCode(); + + int32_t compareTo(const FileEntry* other) const; + + class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // + { + public: + bool operator()( FileEntry* f1, FileEntry* f2 ) const{ + return ( f1->compareTo(f2) < 0 ); + } + size_t operator()( FileEntry* t ) const{ + return t->hashCode(); + } + }; + class Equals:LUCENE_BASE, public CL_NS(util)::Compare::_base // + { + public: + bool operator()( FileEntry* f1, FileEntry* f2 ) const{ + return ( f1->compareTo(f2) == 0 ); + } + }; + }; + + FieldCacheImpl(); + virtual ~FieldCacheImpl(); +private: + /** The internal cache. Maps FileEntry to array of interpreted term values. **/ + //todo: make indexreader remove itself from here when the reader is shut + fieldcacheCacheType* cache; + + /** See if an object is in the cache. */ + FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type) ; + + /** See if a custom object is in the cache. */ + FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer); + + /** Put an object into the cache. */ + void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value); + + /** Put a custom object into the cache. */ + void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value); + +public: + + // inherit javadocs + FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field); + + // inherit javadocs + FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field); + + // inherit javadocs + FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field); + + // inherit javadocs + FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field); + + // inherit javadocs + FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field); + + // inherit javadocs + FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator); + + + /** + * Callback for when IndexReader closes. This causes + * any cache to be removed for the specified reader. + */ + static void closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl); +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FieldDoc.h clucene-core-2.3.3.4/src/core/CLucene/search/FieldDoc.h --- clucene-core-0.9.21b/src/core/CLucene/search/FieldDoc.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FieldDoc.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FieldDoc_ +#define _lucene_search_FieldDoc_ + +#include "SearchHeader.h" + +CL_NS_DEF(search) + +/** + * Expert: A ScoreDoc which also contains information about + * how to sort the referenced document. In addition to the + * document number and score, this object contains an array + * of values for the document from the field(s) used to sort. + * For example, if the sort criteria was to sort by fields + * "a", "b" then "c", the fields object array + * will have three elements, corresponding respectively to + * the term values for the document in fields "a", "b" and "c". + * The class of each element in the array will be either + * Integer, Float or String depending on the type of values + * in the terms of each field. + * + * @see ScoreDoc + * @see TopFieldDocs + */ +class CLUCENE_EXPORT FieldDoc: LUCENE_BASE { +public: + //FieldDoc did inherit from ScoreDoc, but now we make the scoredoc a member + struct ScoreDoc scoreDoc; + + /** Expert: The values which are used to sort the referenced document. + * The order of these will match the original sort criteria given by a + * Sort object. Each Object will be either an Integer, Float or String, + * depending on the type of values in the terms of the original field. + * @see Sort + * @see Searchable#search(Query,Filter,int32_t,Sort) + */ + CL_NS(util)::Comparable** fields; + + /** Expert: Creates one of these objects with empty sort information. */ + FieldDoc (int32_t doc, float_t score); + /** Expert: Creates one of these objects with the given sort information. */ + FieldDoc (int32_t doc, float_t score, CL_NS(util)::Comparable** fields); + ~FieldDoc(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FieldDocSortedHitQueue.cpp clucene-core-2.3.3.4/src/core/CLucene/search/FieldDocSortedHitQueue.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/FieldDocSortedHitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FieldDocSortedHitQueue.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,171 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_FieldDocSortedHitQueue.h" + + +CL_NS_USE(util) +CL_NS_DEF(search) + + +FieldDoc::FieldDoc (int32_t doc, float_t score) +{ + this->scoreDoc.doc = doc; + this->scoreDoc.score = score; + fields=NULL; +} + +FieldDoc::FieldDoc (int32_t doc, float_t score, CL_NS(util)::Comparable** fields) +{ + this->scoreDoc.doc = doc; + this->scoreDoc.score = score; + this->fields = fields; +} + +FieldDoc::~FieldDoc(){ + if ( fields != NULL ){ + for ( int i=0;fields[i]!=NULL;i++ ) + _CLDELETE(fields[i]); + _CLDELETE_ARRAY(fields); + } +} + + + +FieldDocSortedHitQueue::FieldDocSortedHitQueue (SortField** fields, int32_t size) { + this->fields = fields; + _countsize(); + //this->collators = hasCollators (fields); + initialize (size,true); +} + +bool FieldDocSortedHitQueue::lessThan (FieldDoc* docA, FieldDoc* docB) { + const int32_t n = fieldsLen; + int32_t c = 0; + float_t f1,f2,r1,r2; + int32_t i1,i2; + const TCHAR *s1, *s2; + + for (int32_t i=0; igetType(); + if (fields[i]->getReverse()) { + switch (type) { + case SortField::DOCSCORE: + r1 = reinterpret_cast(docA->fields[i])->getValue(); + r2 = reinterpret_cast(docB->fields[i])->getValue(); + if (r1 < r2) c = -1; + if (r1 > r2) c = 1; + break; + case SortField::DOC: + case SortField::INT: + i1 = reinterpret_cast(docA->fields[i])->getValue(); + i2 = reinterpret_cast(docB->fields[i])->getValue(); + if (i1 > i2) c = -1; + if (i1 < i2) c = 1; + break; + case SortField::STRING: + s1 = reinterpret_cast(docA->fields[i])->getValue(); + s2 = reinterpret_cast(docB->fields[i])->getValue(); + if (s2 == NULL) c = -1; // could be NULL if there are + else if (s1 == NULL) c = 1; // no terms in the given field + else c = _tcscmp(s2,s1); //else if (fields[i].getLocale() == NULL) { + + /*todo: collators not impl + } else { + c = collators[i].compare (s2, s1); + }*/ + break; + case SortField::FLOAT: + f1 = reinterpret_cast(docA->fields[i])->getValue(); + f2 = reinterpret_cast(docB->fields[i])->getValue(); + if (f1 > f2) c = -1; + if (f1 < f2) c = 1; + break; + case SortField::CUSTOM: + c = docB->fields[i]->compareTo (docA->fields[i]); + break; + case SortField::AUTO: + // we cannot handle this - even if we determine the type of object (float_t or + // Integer), we don't necessarily know how to compare them (both SCORE and + // float_t both contain floats, but are sorted opposite of each other). Before + // we get here, each AUTO should have been replaced with its actual value. + _CLTHROWA (CL_ERR_Runtime,"FieldDocSortedHitQueue cannot use an AUTO SortField"); + default: + _CLTHROWA (CL_ERR_Runtime, "invalid SortField type"); //todo: rich error... : "+type); + } + } else { + switch (type) { + case SortField::DOCSCORE: + r1 = reinterpret_cast(docA->fields[i])->getValue(); + r2 = reinterpret_cast(docB->fields[i])->getValue(); + if (r1 > r2) c = -1; + if (r1 < r2) c = 1; + break; + case SortField::DOC: + case SortField::INT: + i1 = reinterpret_cast(docA->fields[i])->getValue(); + i2 = reinterpret_cast(docB->fields[i])->getValue(); + if (i1 < i2) c = -1; + if (i1 > i2) c = 1; + break; + case SortField::STRING: + s1 = reinterpret_cast(docA->fields[i])->getValue(); + s2 = reinterpret_cast(docB->fields[i])->getValue(); + // NULL values need to be sorted first, because of how FieldCache.getStringIndex() + // works - in that routine, any documents without a value in the given field are + // put first. + if (s1 == NULL) c = -1; // could be NULL if there are + else if (s2 == NULL) c = 1; // no terms in the given field + else c = _tcscmp(s1,s2); //else if (fields[i].getLocale() == NULL) { + + /* todo: collators not implemented } else { + c = collators[i].compare (s1, s2); + }*/ + break; + case SortField::FLOAT: + f1 = reinterpret_cast(docA->fields[i])->getValue(); + f2 = reinterpret_cast(docB->fields[i])->getValue(); + if (f1 < f2) c = -1; + if (f1 > f2) c = 1; + break; + case SortField::CUSTOM: + c = docA->fields[i]->compareTo (docB->fields[i]); + break; + case SortField::AUTO: + // we cannot handle this - even if we determine the type of object (float_t or + // Integer), we don't necessarily know how to compare them (both SCORE and + // float_t both contain floats, but are sorted opposite of each other). Before + // we get here, each AUTO should have been replaced with its actual value. + _CLTHROWA (CL_ERR_Runtime,"FieldDocSortedHitQueue cannot use an AUTO SortField"); + default: + _CLTHROWA (CL_ERR_Runtime,"invalid SortField type"); //todo: rich error... : "+type); + } + } + } + return c > 0; +} + +void FieldDocSortedHitQueue::setFields (SortField** fields) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (this->fields == NULL) { + this->fields = fields; + _countsize(); + //this->collators = hasCollators (fields); + }else if ( fields == NULL ) + this->fields = NULL; +} + +FieldDocSortedHitQueue::~FieldDocSortedHitQueue(){ + if ( fields != NULL ){ + for ( int i=0;fields[i]!=NULL;i++ ) + _CLDELETE(fields[i]); + _CLDELETE_ARRAY(fields); + } +} + +CL_NS_END + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_FieldDocSortedHitQueue.h clucene-core-2.3.3.4/src/core/CLucene/search/_FieldDocSortedHitQueue.h --- clucene-core-0.9.21b/src/core/CLucene/search/_FieldDocSortedHitQueue.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_FieldDocSortedHitQueue.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,120 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FieldDocSortedHitQueue_ +#define _lucene_search_FieldDocSortedHitQueue_ + + +#include "Sort.h" +#include "FieldDoc.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_DEF(search) + +/** + * Expert: Collects sorted results from Searchable's and collates them. + * The elements put into this queue must be of type FieldDoc. + */ +class FieldDocSortedHitQueue: + public CL_NS(util)::PriorityQueue > +{ +private: + DEFINE_MUTEX(THIS_LOCK) + + // this cannot contain AUTO fields - any AUTO fields should + // have been resolved by the time this class is used. + SortField** fields; + int32_t fieldsLen; + + void _countsize(){ + fieldsLen=0; + while(fields[fieldsLen]!=NULL) + fieldsLen++; + } + + // used in the case where the fields are sorted by locale + // based strings + //todo: not implemented in clucene because locales has not been implemented + //Collator[] collators; //volatile + +public: + /** + * Creates a hit queue sorted by the given list of fields. + * @param fields Field names, in priority order (highest priority first). + * @param size The number of hits to retain. Must be greater than zero. + */ + FieldDocSortedHitQueue (SortField** fields, int32_t size); + ~FieldDocSortedHitQueue(); + + + /** + * Allows redefinition of sort fields if they are NULL. + * This is to handle the case using ParallelMultiSearcher where the + * original list contains AUTO and we don't know the actual sort + * type until the values come back. The fields can only be set once. + * This method is thread safe. + * @param fields + */ + void setFields (SortField** fields); + + /** Returns the fields being used to sort. */ + SortField** getFields() { + return fields; + } + + /** Returns an array of collators, possibly NULL. The collators + * correspond to any SortFields which were given a specific locale. + * @param fields Array of sort fields. + * @return Array, possibly NULL. + + private Collator[] hasCollators (SortField[] fields) { + if (fields == NULL) return NULL; + Collator[] ret = new Collator[fields.length]; + for (int32_t i=0; ia is less relevant than b. + * @param a FieldDoc + * @param b FieldDoc + * @return true if document a should be sorted after document b. + */ + bool lessThan (FieldDoc* docA, FieldDoc* docB); +}; + + +/** +* Expert: Returned by low-level sorted search implementations. +* +* @see Searchable#search(Query,Filter,int32_t,Sort) +*/ +class TopFieldDocs: public TopDocs { +public: + /// The fields which were used to sort results by. + SortField** fields; + + FieldDoc** fieldDocs; + + /** Creates one of these objects. + * @param totalHits Total number of hits for the query. + * @param fieldDocs The top hits for the query. + * @param scoreDocs The top hits for the query. + * @param scoreDocsLen Length of fieldDocs and scoreDocs + * @param fields The sort criteria used to find the top hits. + */ + TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields); + ~TopFieldDocs(); +}; + +CL_NS_END +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FieldSortedHitQueue.cpp clucene-core-2.3.3.4/src/core/CLucene/search/FieldSortedHitQueue.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/FieldSortedHitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FieldSortedHitQueue.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,258 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "FieldSortedHitQueue.h" +#include "_FieldDocSortedHitQueue.h" +#include "_FieldCacheImpl.h" +#include "Compare.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_DEF(search) + + +//note: typename gets too long if using cacheReaderType as a typename +class hitqueueCacheType: public CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object >{ +public: + hitqueueCacheType(bool deleteKey, bool deleteValue){ + setDeleteKey(deleteKey); + setDeleteValue(deleteValue); + } + ~hitqueueCacheType(){ + clear(); + } +}; + + +///the type that is stored in the field cache. can't use a typedef because +///the decorated name would become too long +class hitqueueCacheReaderType: public CL_NS(util)::CLHashMap, + CL_NS(util)::Deletor::Object >{ + +public: + hitqueueCacheReaderType(bool deleteValue){ + setDeleteKey(true); + setDeleteValue(deleteValue); + } + ~hitqueueCacheReaderType(){ + clear(); + } +}; + +hitqueueCacheType* FieldSortedHitQueue::Comparators = _CLNEW hitqueueCacheType(false,true); +DEFINE_MUTEX(FieldSortedHitQueue::Comparators_LOCK) + +void FieldSortedHitQueue::_shutdown(){ + Comparators->clear(); + _CLDELETE(Comparators); +} + +FieldSortedHitQueue::FieldSortedHitQueue (IndexReader* reader, SortField** _fields, int32_t size): + fieldsLen(0), + maxscore(1.0f) +{ + while ( _fields[fieldsLen] != 0 ) + fieldsLen++; + + comparators = _CL_NEWARRAY(ScoreDocComparator*,fieldsLen+1); + SortField** tmp = _CL_NEWARRAY(SortField*,fieldsLen+1); + for (int32_t i=0; igetField(); + //todo: fields[i].getLocale(), not implemented + comparators[i] = getCachedComparator (reader, fieldname, _fields[i]->getType(), _fields[i]->getFactory()); + tmp[i] = _CLNEW SortField (fieldname, comparators[i]->sortType(), _fields[i]->getReverse()); + } + comparatorsLen = fieldsLen; + comparators[fieldsLen]=NULL; + tmp[fieldsLen] = NULL; + this->fields = tmp; + + initialize(size,true); +} + + +bool FieldSortedHitQueue::lessThan (FieldDoc* docA, FieldDoc* docB) { + // keep track of maximum score + if (docA->scoreDoc.score > maxscore) maxscore = docA->scoreDoc.score; + if (docB->scoreDoc.score > maxscore) maxscore = docB->scoreDoc.score; + + // run comparators + int32_t c = 0; + for ( int32_t i=0; c==0 && igetReverse()) ? comparators[i]->compare (&docB->scoreDoc, &docA->scoreDoc) : + comparators[i]->compare (&docA->scoreDoc, &docB->scoreDoc); + } + // avoid random sort order that could lead to duplicates (bug #31241): + if (c == 0) + return docA->scoreDoc.doc > docB->scoreDoc.doc; + return c > 0; +} + + +//static +ScoreDocComparator* FieldSortedHitQueue::comparatorString (IndexReader* reader, const TCHAR* field) { + //const TCHAR* field = CLStringIntern::intern(fieldname); + FieldCacheAuto* fa = FieldCache::DEFAULT()->getStringIndex (reader, field); + //CLStringIntern::unintern(field); + + CND_PRECONDITION(fa->contentType==FieldCacheAuto::STRING_INDEX,"Content type is incorrect"); + fa->ownContents = false; + return _CLNEW ScoreDocComparators::String(fa->stringIndex, fa->contentLen); +} + +//static +ScoreDocComparator* FieldSortedHitQueue::comparatorInt (IndexReader* reader, const TCHAR* field){ + //const TCHAR* field = CLStringIntern::intern(fieldname); + FieldCacheAuto* fa = FieldCache::DEFAULT()->getInts (reader, field); + //CLStringIntern::unintern(field); + + CND_PRECONDITION(fa->contentType==FieldCacheAuto::INT_ARRAY,"Content type is incorrect"); + return _CLNEW ScoreDocComparators::Int32(fa->intArray, fa->contentLen); + } + +//static + ScoreDocComparator* FieldSortedHitQueue::comparatorFloat (IndexReader* reader, const TCHAR* field) { + //const TCHAR* field = CLStringIntern::intern(fieldname); + FieldCacheAuto* fa = FieldCache::DEFAULT()->getFloats (reader, field); + //CLStringIntern::unintern(field); + + CND_PRECONDITION(fa->contentType==FieldCacheAuto::FLOAT_ARRAY,"Content type is incorrect"); + return _CLNEW ScoreDocComparators::Float (fa->floatArray, fa->contentLen); + } +//static + ScoreDocComparator* FieldSortedHitQueue::comparatorAuto (IndexReader* reader, const TCHAR* field){ + //const TCHAR* field = CLStringIntern::intern(fieldname); + FieldCacheAuto* fa = FieldCache::DEFAULT()->getAuto (reader, field); + //CLStringIntern::unintern(field); + + if (fa->contentType == FieldCacheAuto::STRING_INDEX ) { + return comparatorString (reader, field); + } else if (fa->contentType == FieldCacheAuto::INT_ARRAY) { + return comparatorInt (reader, field); + } else if (fa->contentType == FieldCacheAuto::FLOAT_ARRAY) { + return comparatorFloat (reader, field); + } else if (fa->contentType == FieldCacheAuto::STRING_ARRAY) { + return comparatorString (reader, field); + } else { + _CLTHROWA(CL_ERR_Runtime, "unknown data type in field"); //todo: rich error information: '"+field+"'"); + } + } + + + //todo: Locale locale, not implemented yet + ScoreDocComparator* FieldSortedHitQueue::getCachedComparator (IndexReader* reader, const TCHAR* fieldname, int32_t type, SortComparatorSource* factory){ + if (type == SortField::DOC) + return ScoreDocComparator::INDEXORDER(); + if (type == SortField::DOCSCORE) + return ScoreDocComparator::RELEVANCE(); + ScoreDocComparator* comparator = lookup (reader, fieldname, type, factory); + if (comparator == NULL) { + switch (type) { + case SortField::AUTO: + comparator = comparatorAuto (reader, fieldname); + break; + case SortField::INT: + comparator = comparatorInt (reader, fieldname); + break; + case SortField::FLOAT: + comparator = comparatorFloat (reader, fieldname); + break; + case SortField::STRING: + //if (locale != NULL) + // comparator = comparatorStringLocale (reader, fieldname, locale); + //else + comparator = comparatorString (reader, fieldname); + break; + case SortField::CUSTOM: + comparator = factory->newComparator (reader, fieldname); + break; + default: + _CLTHROWA(CL_ERR_Runtime,"unknown field type"); + //todo: extend error + //throw _CLNEW RuntimeException ("unknown field type: "+type); + } + store (reader, fieldname, type, factory, comparator); + } + return comparator; + } + + + FieldDoc* FieldSortedHitQueue::fillFields (FieldDoc* doc) const{ + int32_t n = comparatorsLen; + Comparable** fields = _CL_NEWARRAY(Comparable*,n+1); + for (int32_t i=0; isortValue(&doc->scoreDoc); + fields[n]=NULL; + doc->fields = fields; + if (maxscore > 1.0f) + doc->scoreDoc.score /= maxscore; // normalize scores + return doc; + } + + ScoreDocComparator* FieldSortedHitQueue::lookup (IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory) { + ScoreDocComparator* sdc = NULL; + FieldCacheImpl::FileEntry* entry = (factory != NULL) + ? _CLNEW FieldCacheImpl::FileEntry (field, factory) + : _CLNEW FieldCacheImpl::FileEntry (field, type); + + { + SCOPED_LOCK_MUTEX(Comparators_LOCK) + hitqueueCacheReaderType* readerCache = Comparators->get(reader); + if (readerCache == NULL){ + _CLDELETE(entry); + return NULL; + } + + sdc = readerCache->get (entry); + _CLDELETE(entry); + } + return sdc; + } + + void FieldSortedHitQueue::closeCallback(CL_NS(index)::IndexReader* reader, void*){ + SCOPED_LOCK_MUTEX(Comparators_LOCK) + Comparators->remove(reader); + } + + //static + void FieldSortedHitQueue::store (IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory, ScoreDocComparator* value) { + FieldCacheImpl::FileEntry* entry = (factory != NULL) + ? _CLNEW FieldCacheImpl::FileEntry (field, factory) + : _CLNEW FieldCacheImpl::FileEntry (field, type); + + { + SCOPED_LOCK_MUTEX(Comparators_LOCK) + hitqueueCacheReaderType* readerCache = Comparators->get(reader); + if (readerCache == NULL) { + readerCache = _CLNEW hitqueueCacheReaderType(true); + Comparators->put(reader,readerCache); + reader->addCloseCallback(FieldSortedHitQueue::closeCallback,NULL); + } + readerCache->put (entry, value); + //return NULL; //supposed to return previous value... + } + } + +FieldSortedHitQueue::~FieldSortedHitQueue(){ + _CLDELETE_ARRAY(comparators); + if ( fields != NULL ){ + for ( int i=0;fields[i]!=NULL;i++ ) + _CLDELETE(fields[i]); + _CLDELETE_ARRAY(fields); + } +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FieldSortedHitQueue.h clucene-core-2.3.3.4/src/core/CLucene/search/FieldSortedHitQueue.h --- clucene-core-0.9.21b/src/core/CLucene/search/FieldSortedHitQueue.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FieldSortedHitQueue.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,196 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FieldSortedHitQueue_ +#define _lucene_search_FieldSortedHitQueue_ + + +CL_CLASS_DEF(search,FieldDoc) +CL_CLASS_DEF(search,SortComparatorSource) +CL_CLASS_DEF(search,SortField) +#include "FieldDoc.h" //required to expose destructor +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + +class hitqueueCacheReaderType; +class hitqueueCacheType; +class ScoreDocComparator; + +/** + * Expert: A hit queue for sorting by hits by terms in more than one field. + * Uses FieldCache.DEFAULT for maintaining internal term lookup tables. + * + * @see Searchable#search(Query,Filter,int32_t,Sort) + * @see FieldCache + */ +class CLUCENE_EXPORT FieldSortedHitQueue: public CL_NS(util)::PriorityQueue > { + +public: //todo: remove this and below after close callback is implemented + + /** Internal cache of comparators. Similar to FieldCache, only + * caches comparators instead of term values. + */ + static hitqueueCacheType* Comparators; + STATIC_DEFINE_MUTEX(Comparators_LOCK) + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); +private: + + /** Returns a comparator if it is in the cache.*/ + static ScoreDocComparator* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory); + + /** Stores a comparator into the cache. + returns the valid ScoreDocComparator. + */ + static void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory, ScoreDocComparator* value); + + + //todo: Locale locale, not implemented yet + static ScoreDocComparator* getCachedComparator (CL_NS(index)::IndexReader* reader, + const TCHAR* fieldname, int32_t type, SortComparatorSource* factory); + + + /** + * Returns a comparator for sorting hits according to a field containing integers. + * @param reader Index to use. + * @param fieldname Field containg integer values. + * @return Comparator for sorting hits. + * @throws IOException If an error occurs reading the index. + */ + static ScoreDocComparator* comparatorInt (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); + + /** + * Returns a comparator for sorting hits according to a field containing floats. + * @param reader Index to use. + * @param fieldname Field containg float values. + * @return Comparator for sorting hits. + * @throws IOException If an error occurs reading the index. + */ + static ScoreDocComparator* comparatorFloat (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); + + /** + * Returns a comparator for sorting hits according to a field containing strings. + * @param reader Index to use. + * @param fieldname Field containg string values. + * @return Comparator for sorting hits. + * @throws IOException If an error occurs reading the index. + */ + static ScoreDocComparator* comparatorString (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); + + + //todo: + /** + * Returns a comparator for sorting hits according to a field containing strings. + * @param reader Index to use. + * @param fieldname Field containg string values. + * @return Comparator for sorting hits. + * @throws IOException If an error occurs reading the index. + + static ScoreDocComparator* comparatorStringLocale (IndexReader* reader, TCHAR* fieldname, Locale locale){ + Collator collator = Collator.getInstance (locale); + TCHAR* field = fieldname.intern(); + TCHAR** index = FieldCache.DEFAULT.getStrings (reader, field); + return _CLNEW ScoreDocComparator() { + + public int32_t compare (ScoreDoc i, ScoreDoc j) { + return collator.compare (index[i.doc], index[j.doc]); + } + + public Comparable sortValue (ScoreDoc i) { + return index[i.doc]; + } + + public int32_t sortType() { + return SortField.STRING; + } + }; + }*/ + + /** + * Returns a comparator for sorting hits according to values in the given field. + * The terms in the field are looked at to determine whether they contain integers, + * floats or strings. Once the type is determined, one of the other static methods + * in this class is called to get the comparator. + * @param reader Index to use. + * @param fieldname Field containg values. + * @return Comparator for sorting hits. + * @throws IOException If an error occurs reading the index. + */ + static ScoreDocComparator* comparatorAuto (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); + + +protected: + /** Stores a comparator corresponding to each field being sorted by */ + ScoreDocComparator** comparators; + int32_t comparatorsLen; + + /** Stores the sort criteria being used. */ + SortField** fields; + int32_t fieldsLen; + + /** Stores the maximum score value encountered, for normalizing. + * we only care about scores greater than 1.0 - if all the scores + * are less than 1.0, we don't have to normalize. */ + float_t maxscore; + + /** + * Returns whether a is less relevant than b. + * @param a ScoreDoc + * @param b ScoreDoc + * @return true if document a should be sorted after document b. + */ + bool lessThan (FieldDoc* docA, FieldDoc* docB); +public: + + /** + * Creates a hit queue sorted by the given list of fields. + * @param reader Index to use. + * @param fields Field names, in priority order (highest priority first). Cannot be null or empty. + * @param size The number of hits to retain. Must be greater than zero. + * @throws IOException + */ + FieldSortedHitQueue (CL_NS(index)::IndexReader* reader, SortField** fields, int32_t size); + + ~FieldSortedHitQueue(); + + /** + * Callback for when IndexReader closes. This causes + * any Comparators to be removed for the specified reader. + */ + static void closeCallback(CL_NS(index)::IndexReader* reader, void* param); + + /** + * Given a FieldDoc object, stores the values used + * to sort the given document. These values are not the raw + * values out of the index, but the internal representation + * of them. This is so the given search hit can be collated + * by a MultiSearcher with other search hits. + * @param doc The FieldDoc to store sort values into. + * @return The same FieldDoc passed in. + * @see Searchable#search(Query,Filter,int32_t,Sort) + */ + FieldDoc* fillFields (FieldDoc* doc) const; + + void setFields (SortField** fields){ + this->fields = fields; + } + + /** Returns the SortFields being used by this hit queue. */ + SortField** getFields() { + return fields; + } +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FilteredTermEnum.cpp clucene-core-2.3.3.4/src/core/CLucene/search/FilteredTermEnum.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/FilteredTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FilteredTermEnum.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,119 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "FilteredTermEnum.h" +#include "CLucene/index/Term.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + +FilteredTermEnum::FilteredTermEnum():currentTerm(NULL),actualEnum(NULL){ +} + + FilteredTermEnum::~FilteredTermEnum() { + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + close(); + } + + int32_t FilteredTermEnum::docFreq() const { + //Func - Returns the docFreq of the current Term in the enumeration. + //Pre - next() must have been called at least once + //Post - if actualEnum is NULL result is -1 otherwise the frequencey is returned + + if (actualEnum == NULL){ + return -1; + } + return actualEnum->docFreq(); + } + + bool FilteredTermEnum::next() { + //Func - Increments the enumeration to the next element. + //Pre - true + //Post - Returns True if the enumeration has been moved to the next element otherwise false + + //The actual enumerator is not initialized! + if (actualEnum == NULL){ + return false; + } + + //Finalize the currentTerm and reset it to NULL + _CLDECDELETE( currentTerm ); + + //Iterate through the enumeration + while (currentTerm == NULL) { + if (endEnum()) + return false; + if (actualEnum->next()) { + //Order term not to return reference ownership here. */ + Term* term = actualEnum->term(false); + //Compare the retrieved term + if (termCompare(term)){ + //Matched so finalize the current + _CLDECDELETE(currentTerm); + //Get a reference to the matched term + currentTerm = _CL_POINTER(term); + return true; + } + }else + return false; + } + _CLDECDELETE(currentTerm); + currentTerm = NULL; + + return false; + } + + Term* FilteredTermEnum::term(bool pointer) { + if ( pointer ) + return _CL_POINTER(currentTerm); + else + return currentTerm; + } + + void FilteredTermEnum::close(){ + //Func - Closes the enumeration to further activity, freeing resources. + //Pre - true + //Post - The Enumeration has been closed + + //Check if actualEnum is valid + if (actualEnum){ + //Close the enumeration + actualEnum->close(); + //Destroy the enumeration + _CLDELETE(actualEnum); + } + + //Destroy currentTerm + _CLDECDELETE(currentTerm); + } + + void FilteredTermEnum::setEnum(TermEnum* actualEnum) { + //Func - Sets the actual Enumeration + //Pre - actualEnum != NULL + //Post - The instance has been created + + CND_PRECONDITION(actualEnum != NULL,"actualEnum is NULL"); + + _CLLDELETE(this->actualEnum); + this->actualEnum = actualEnum; + + // Find the first term that matches + //Ordered term not to return reference ownership here. + Term* term = actualEnum->term(false); + if (term != NULL && termCompare(term)){ + _CLDECDELETE(currentTerm); + currentTerm = _CL_POINTER(term); + }else{ + next(); + } + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FilteredTermEnum.h clucene-core-2.3.3.4/src/core/CLucene/search/FilteredTermEnum.h --- clucene-core-0.9.21b/src/core/CLucene/search/FilteredTermEnum.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FilteredTermEnum.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,58 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FilteredTermEnum_ +#define _lucene_search_FilteredTermEnum_ + + +CL_CLASS_DEF(index,Term) +#include "CLucene/index/Terms.h" + +CL_NS_DEF(search) +/** Abstract class for enumerating a subset of all terms. + +

Term enumerations are always ordered by Term.compareTo(). Each term in +the enumeration is greater than all that precede it. */ +class CLUCENE_EXPORT FilteredTermEnum: public CL_NS(index)::TermEnum { +public: + FilteredTermEnum(); + virtual ~FilteredTermEnum(); + + /** Equality measure on the term */ + virtual float_t difference() = 0; + + /** + * Returns the docFreq of the current Term in the enumeration. + * Returns -1 if no Term matches or all terms have been enumerated. + */ + int32_t docFreq() const; + + /** Increments the enumeration to the next element. True if one exists. */ + bool next() ; + + /** Returns the current Term in the enumeration. + * Returns null if no Term matches or all terms have been enumerated. */ + CL_NS(index)::Term* term(bool pointer=true); + + /** Closes the enumeration to further activity, freeing resources. */ + void close(); + +protected: + /** Equality compare on the term */ + virtual bool termCompare(CL_NS(index)::Term* term) = 0; + + /** Indicates the end of the enumeration has been reached */ + virtual bool endEnum() = 0; + + void setEnum(CL_NS(index)::TermEnum* actualEnum) ; + +private: + CL_NS(index)::Term* currentTerm; + CL_NS(index)::TermEnum* actualEnum; + +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Filter.h clucene-core-2.3.3.4/src/core/CLucene/search/Filter.h --- clucene-core-0.9.21b/src/core/CLucene/search/Filter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Filter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,42 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Filter_ +#define _lucene_search_Filter_ + +CL_CLASS_DEF(util,BitSet) +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + // Abstract base class providing a mechanism to restrict searches to a subset + // of an index. + class CLUCENE_EXPORT Filter: LUCENE_BASE { + public: + virtual ~Filter(){ + } + + virtual Filter* clone() const = 0; + + /** + * Returns a BitSet with true for documents which should be permitted in + * search results, and false for those that should not. + * @memory see {@link #shouldDeleteBitSet} + */ + virtual CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader)=0; + + /** + * Because of the problem of cached bitsets with the CachingWrapperFilter, + * CLucene has no way of knowing whether to delete the bitset returned from bits(). + * To properly clean memory from bits(), pass the bitset to this function. The + * Filter should be deleted if this function returns true. + */ + virtual bool shouldDeleteBitSet(const CL_NS(util)::BitSet*) const{ return true; } + + //Creates a user-readable version of this query and returns it as as string + virtual TCHAR* toString()=0; + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FilterResultCache.cpp clucene-core-2.3.3.4/src/core/CLucene/search/FilterResultCache.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/FilterResultCache.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FilterResultCache.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,48 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CachingWrapperFilter.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_DEF(search) +CL_NS_USE(index) +CL_NS_USE(util) + + +template +FilterResultCache::FilterResultCache( bool bDeleteResults ) +{ + this->bDeleteResults = bDeleteResults; +} + +template +FilterResultCache::~FilterResultCache() +{ +} + +template +T* FilterResultCache::getResult( CL_NS(index)::IndexReader* reader ) +{ + SCOPED_LOCK_MUTEX( cache_LOCK ) + ResultHolder * cached = cache.get( reader ); + if( cached != NULL ) + return cached->result; + + T * result = fiter->( reader ); + ResultHolder * holder = _CLNEW ResultHolder( result, bDeleteResults ); + cache.put( reader, holder ); + return result; +} + +template +void FilterResultCache::closeCallback( CL_NS(index)::IndexReader* reader, void* ) +{ + SCOPED_LOCK_MUTEX( cache_LOCK ) + cache.remove( reader ); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FilterResultCache.h clucene-core-2.3.3.4/src/core/CLucene/search/FilterResultCache.h --- clucene-core-0.9.21b/src/core/CLucene/search/FilterResultCache.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FilterResultCache.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FilterResultCache_ +#define _lucene_search_FilterResultCache_ + +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + +/** + * Holds one cached result + */ +template +class ResultHolder : LUCENE_BASE +{ + bool deleteRes; +public: + T* result; + + ResultHolder( T * result, bool deleteRes ) + { + this->result = result; + this->deleteRes = deleteRes; + } + ~ResultHolder(){ + if ( deleteRes ) + _CLDELETE( result ); + } +}; + +/** + * Wraps another filter's result and caches it. The purpose is to allow + * filters to implement this and allow itself to be cached. Alternatively, + * use the CachingWrapperFilter to cache the filter. + */ +template +class FilterResultCache +{ + typedef CL_NS(util)::CLHashMap< + CL_NS(index)::IndexReader*, + BitSetHolder*, + CL_NS(util)::Compare::Void, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object > + > CacheType; + + CacheType cache; + bool bDeleteResults; + DEFINE_MUTEX( cache_LOCK ) + + +public: + FilterResultCache( bool bDeleteResults ); + virtual ~FilterResultCache(); + + T* getResult( CL_NS(index)::IndexReader* reader ); + +protected: + void closeCallback( CL_NS(index)::IndexReader* reader, void* param ); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FuzzyQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/FuzzyQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/FuzzyQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FuzzyQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,425 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.h" +#include "Similarity.h" +#include "FuzzyQuery.h" +#include "BooleanQuery.h" +#include "BooleanClause.h" +#include "TermQuery.h" + +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + +/** Finds and returns the smallest of three integers + * precondition: Must define int32_t __t for temporary storage and result + */ +#define min3(a, b, c) __t = (a < b) ? a : b; __t = (__t < c) ? __t : c; + + + FuzzyTermEnum::FuzzyTermEnum(IndexReader* reader, Term* term, float_t minSimilarity, size_t _prefixLength): + FilteredTermEnum(),d(NULL),dLen(0),_similarity(0),_endEnum(false),searchTerm(_CL_POINTER(term)), + text(NULL),textLen(0),prefix(NULL)/* ISH: was STRDUP_TtoT(LUCENE_BLANK_STRING)*/,prefixLength(0), + minimumSimilarity(minSimilarity) + { + CND_PRECONDITION(term != NULL,"term is NULL"); + + if (minSimilarity >= 1.0f) + _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity cannot be greater than or equal to 1"); + else if (minSimilarity < 0.0f) + _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity cannot be less than 0"); + + scale_factor = 1.0f / (1.0f - minimumSimilarity); // only now we are safe from a division by zero + //TODO: this.field = searchTerm.field(); + + //The prefix could be longer than the word. + //It's kind of silly though. It means we must match the entire word. + const size_t fullSearchTermLength = searchTerm->textLength(); + const size_t realPrefixLength = _prefixLength > fullSearchTermLength ? fullSearchTermLength : _prefixLength; + + text = STRDUP_TtoT(searchTerm->text() + realPrefixLength); + textLen = fullSearchTermLength - realPrefixLength; + + prefix = _CL_NEWARRAY(TCHAR,realPrefixLength+1); + _tcsncpy(prefix, searchTerm->text(), realPrefixLength); + prefix[realPrefixLength]='\0'; + prefixLength = realPrefixLength; + + initializeMaxDistances(); + + Term* trm = _CLNEW Term(searchTerm->field(), prefix); // _CLNEW Term(term, prefix); -- not intern'd? + setEnum(reader->terms(trm)); + _CLLDECDELETE(trm); + + + /* LEGACY: + //Initialize e to NULL + e = NULL; + eWidth = 0; + eHeight = 0; + + if(prefixLength > 0 && prefixLength < textLen){ + this->prefixLength = prefixLength; + + prefix = _CL_NEWARRAY(TCHAR,prefixLength+1); + _tcsncpy(prefix,text,prefixLength); + prefix[prefixLength]='\0'; + + textLen = prefixLength; + text[textLen]='\0'; + } + */ + } + + FuzzyTermEnum::~FuzzyTermEnum(){ + close(); + } + + const char* FuzzyTermEnum::getObjectName() const{ return getClassName(); } + const char* FuzzyTermEnum::getClassName(){ return "FuzzyTermEnum"; } + + bool FuzzyTermEnum::endEnum() { + return _endEnum; + } + + void FuzzyTermEnum::close(){ + + FilteredTermEnum::close(); + + //Finalize the searchTerm + _CLDECDELETE(searchTerm); + + free(d); + d=NULL; + + _CLDELETE_CARRAY(text); + + _CLDELETE_CARRAY(prefix); + } + + bool FuzzyTermEnum::termCompare(Term* term) { + //Func - Compares term with the searchTerm using the Levenshtein distance. + //Pre - term is NULL or term points to a Term + //Post - if pre(term) is NULL then false is returned otherwise + // if the distance of the current term in the enumeration is bigger than the FUZZY_THRESHOLD + // then true is returned + + if (term == NULL){ + return false; //Note that endEnum is not set to true! + } + + const TCHAR* termText = term->text(); + const size_t termTextLen = term->textLength(); + + //Check if the field name of searchTerm of term match + //(we can use == because fields are interned) + if ( searchTerm->field() == term->field() && + (prefixLength==0 || _tcsncmp(termText,prefix,prefixLength)==0 )) { + + const TCHAR* target = termText+prefixLength; + const size_t targetLen = termTextLen-prefixLength; + _similarity = similarity(target, targetLen); + return (_similarity > minimumSimilarity); + } + _endEnum = true; + return false; + } + + float_t FuzzyTermEnum::difference() { + return (float_t)((_similarity - minimumSimilarity) * scale_factor ); + } + + // TODO: had synchronized in definition + float_t FuzzyTermEnum::similarity(const TCHAR* target, const size_t m) { + const size_t n = textLen; // TODO: remove after replacing n with textLen + if (n == 0) { + //we don't have anything to compare. That means if we just add + //the letters for m we get the new word + return prefixLength == 0 ? 0.0f : 1.0f - ((float_t) m / prefixLength); + } + if (m == 0) { + return prefixLength == 0 ? 0.0f : 1.0f - ((float_t) n / prefixLength); + } + + const uint32_t maxDistance = getMaxDistance(m); + + if ( maxDistance < (uint32_t)(abs((int32_t)(m-n))) ) { + //just adding the characters of m to n or vice-versa results in + //too many edits + //for example "pre" length is 3 and "prefixes" length is 8. We can see that + //given this optimal circumstance, the edit distance cannot be less than 5. + //which is 8-3 or more precisesly Math.abs(3-8). + //if our maximum edit distance is 4, then we can discard this word + //without looking at it. + return 0.0f; + } + + //let's make sure we have enough room in our array to do the distance calculations. + //Check if the array must be reallocated because it is too small or does not exist + size_t dWidth = n+1; + size_t dHeight = m+1; + if (d == NULL){ + dLen = dWidth*dHeight; + d = (int32_t*)(malloc(sizeof(int32_t)*dLen)); + } else if (dLen < dWidth*dHeight) { + dLen = dWidth*dHeight; + d = (int32_t*)(realloc(d, sizeof(int32_t)*dLen)); + } + memset(d,0,dLen); + + size_t i; // iterates through the source string + size_t j; // iterates through the target string + + // init matrix d + for (i = 0; i <= n; i++){ + d[i + (0*dWidth)] = i; + } + for (j = 0; j <= m; j++){ + d[0 + (j*dWidth)] = j; + } + + int32_t __t; //temporary variable for min3 + + // start computing edit distance + TCHAR s_i; // ith character of s + for (i = 1; i <= n; i++) { + size_t bestPossibleEditDistance = m; + s_i = text[i - 1]; + for (j = 1; j <= m; j++) { + if (s_i != target[j-1]) { + min3(d[i-1 + (j*dWidth)], d[i + ((j-1)*dWidth)], d[i-1 + ((j-1)*dWidth)]); + d[i + (j*dWidth)] = __t+1; + } + else { + min3(d[i-1 + (j*dWidth)]+1, d[i + ((j-1)*dWidth)]+1, d[i-1 + ((j-1)*dWidth)]); + d[i + (j*dWidth)] = __t; + } + bestPossibleEditDistance = cl_min(bestPossibleEditDistance, d[i + (j*dWidth)]); + } + + //After calculating row i, the best possible edit distance + //can be found by finding the smallest value in a given column. + //If the bestPossibleEditDistance is greater than the max distance, abort. + + if (i > maxDistance && bestPossibleEditDistance > maxDistance) { //equal is okay, but not greater + //the closest the target can be to the text is just too far away. + //this target is leaving the party early. + return 0.0f; + } + } + + // this will return less than 0.0 when the edit distance is + // greater than the number of characters in the shorter word. + // but this was the formula that was previously used in FuzzyTermEnum, + // so it has not been changed (even though minimumSimilarity must be + // greater than 0.0) + return 1.0f - ((float_t)d[n + m*dWidth] / (float_t) (prefixLength + cl_min(n, m))); + } + + int32_t FuzzyTermEnum::getMaxDistance(const size_t m) { + return (m < LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX) ? maxDistances[m] : calculateMaxDistance(m); + } + + void FuzzyTermEnum::initializeMaxDistances() { + for (int32_t i = 0; i < LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX; i++) { + maxDistances[i] = calculateMaxDistance(i); + } + } + + int32_t FuzzyTermEnum::calculateMaxDistance(const size_t m) const { + return (int32_t) ((1-minimumSimilarity) * (cl_min(textLen, m) + prefixLength)); + } + + // TODO: Make ScoreTerm and ScoreTermQueue reside under FuzzyQuery + class ScoreTerm { + public: + Term* term; + float_t score; + + ScoreTerm(Term* _term, float_t _score):term(_term),score(_score){ + } + virtual ~ScoreTerm(){ + _CLLDECDELETE(term); + } + }; + + class ScoreTermQueue : public PriorityQueue > { + public: + ScoreTermQueue(int32_t size){ + initialize(size, true); + } + virtual ~ScoreTermQueue(){ + } + + protected: + bool lessThan(ScoreTerm* termA, ScoreTerm* termB) { + if (termA->score == termB->score) + return termA->term->compareTo(termB->term) > 0; + else + return termA->score < termB->score; + } + }; + + + FuzzyQuery::FuzzyQuery(Term* term, float_t _minimumSimilarity, size_t _prefixLength): + MultiTermQuery(term), + minimumSimilarity(_minimumSimilarity), + prefixLength(_prefixLength) + { + if ( minimumSimilarity < 0 ) + minimumSimilarity = defaultMinSimilarity; + + CND_PRECONDITION(term != NULL,"term is NULL"); + + if (minimumSimilarity >= 1.0f) + _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity >= 1"); + else if (minimumSimilarity < 0.0f) + _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity < 0"); + } + + float_t FuzzyQuery::defaultMinSimilarity = 0.5f; + int32_t FuzzyQuery::defaultPrefixLength = 0; + + FuzzyQuery::~FuzzyQuery(){ + } + + float_t FuzzyQuery::getMinSimilarity() const { + return minimumSimilarity; + } + + size_t FuzzyQuery::getPrefixLength() const { + return prefixLength; + } + + TCHAR* FuzzyQuery::toString(const TCHAR* field) const{ + StringBuffer buffer(100); // TODO: Have a better estimation for the initial buffer length + Term* term = getTerm(false); // no need to increase ref count + if ( field==NULL || _tcscmp(term->field(),field)!=0 ) { + buffer.append(term->field()); + buffer.appendChar( _T(':')); + } + buffer.append(term->text()); + buffer.appendChar( _T('~') ); + buffer.appendFloat(minimumSimilarity,1); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); + } + + const char* FuzzyQuery::getObjectName() const{ + //Func - Returns the name of the query + //Pre - true + //post - The string FuzzyQuery has been returned + + return getClassName(); + } + const char* FuzzyQuery::getClassName(){ + //Func - Returns the name of the query + //Pre - true + //post - The string FuzzyQuery has been returned + + return "FuzzyQuery"; + } + + FuzzyQuery::FuzzyQuery(const FuzzyQuery& clone): + MultiTermQuery(clone) + { + this->minimumSimilarity = clone.getMinSimilarity(); + this->prefixLength = clone.getPrefixLength(); + + //if(prefixLength < 0) + // _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength < 0"); + //else + if(prefixLength >= clone.getTerm()->textLength()) + _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength >= term.textLength()"); + + } + + Query* FuzzyQuery::clone() const{ + return _CLNEW FuzzyQuery(*this); + } + size_t FuzzyQuery::hashCode() const{ + //todo: we should give the query a seeding value... but + //need to do it for all hascode functions + // TODO: does not conform with JL + size_t val = Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode(); + val ^= Similarity::floatToByte(this->getMinSimilarity()); + val ^= this->getPrefixLength(); + return val; + } + bool FuzzyQuery::equals(Query* other) const{ + if (this == other) return true; + if (!(other->instanceOf(FuzzyQuery::getClassName()))) + return false; + + FuzzyQuery* fq = static_cast(other); + return (this->getBoost() == fq->getBoost()) + && this->minimumSimilarity == fq->getMinSimilarity() + && this->prefixLength == fq->getPrefixLength() + && getTerm()->equals(fq->getTerm()); + } + + FilteredTermEnum* FuzzyQuery::getEnum(IndexReader* reader){ + Term* term = getTerm(false); + FuzzyTermEnum* ret = _CLNEW FuzzyTermEnum(reader, term, minimumSimilarity, prefixLength); + return ret; + } + + Query* FuzzyQuery::rewrite(IndexReader* reader) { + FilteredTermEnum* enumerator = getEnum(reader); + const size_t maxClauseCount = BooleanQuery::getMaxClauseCount(); + ScoreTermQueue* stQueue = _CLNEW ScoreTermQueue(maxClauseCount); + ScoreTerm* reusableST = NULL; + + try { + do { + float_t score = 0.0f; + Term* t = enumerator->term(); + if (t != NULL) { + score = enumerator->difference(); + if (reusableST == NULL) { + reusableST = _CLNEW ScoreTerm(t, score); + } else if (score >= reusableST->score) { + // reusableST holds the last "rejected" entry, so, if + // this new score is not better than that, there's no + // need to try inserting it + reusableST->score = score; + reusableST->term = t; + } else { + continue; + } + + reusableST = stQueue->insertWithOverflow(reusableST); + } + } while (enumerator->next()); + } _CLFINALLY({ + enumerator->close(); + _CLLDELETE(enumerator); + //_CLLDELETE(reusableST); + }); + + BooleanQuery* query = _CLNEW BooleanQuery(true); + const size_t size = stQueue->size(); + for(size_t i = 0; i < size; i++){ + ScoreTerm* st = stQueue->pop(); + TermQuery* tq = _CLNEW TermQuery(st->term); // found a match + tq->setBoost(getBoost() * st->score); // set the boost + query->add(tq, true, BooleanClause::SHOULD); // add to query + _CLLDELETE(st); + } + _CLLDELETE(stQueue); + + return query; + } + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/FuzzyQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/FuzzyQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/FuzzyQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/FuzzyQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,204 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FuzzyQuery_ +#define _lucene_search_FuzzyQuery_ + +#include "MultiTermQuery.h" +#include "FilteredTermEnum.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +/** Implements the fuzzy search query. The similiarity measurement +* is based on the Levenshtein (edit distance) algorithm. +*/ +class CLUCENE_EXPORT FuzzyQuery : public MultiTermQuery { +private: + float_t minimumSimilarity; + size_t prefixLength; +protected: + FuzzyQuery(const FuzzyQuery& clone); +public: + static float_t defaultMinSimilarity; + static int32_t defaultPrefixLength; + + /** + * Create a new FuzzyQuery that will match terms with a similarity + * of at least minimumSimilarity to term. + * If a prefixLength > 0 is specified, a common prefix + * of that length is also required. + * + * @param term the term to search for + * @param minimumSimilarity a value between 0 and 1 to set the required similarity + * between the query term and the matching terms. For example, for a + * minimumSimilarity of 0.5 a term of the same length + * as the query term is considered similar to the query term if the edit distance + * between both terms is less than length(term)*0.5 + * @param prefixLength length of common (non-fuzzy) prefix + * @throws IllegalArgumentException if minimumSimilarity is > 1 or < 0 + * or if prefixLength < 0 or > term.text().length(). + */ + FuzzyQuery(CL_NS(index)::Term* term, float_t minimumSimilarity=-1, size_t prefixLength=0); + virtual ~FuzzyQuery(); + + /** + * Returns the minimum similarity that is required for this query to match. + * @return float value between 0.0 and 1.0 + */ + float_t getMinSimilarity() const; + + /** + * Returns the prefix length, i.e. the number of characters at the start + * of a term that must be identical (not fuzzy) to the query term if the query + * is to match that term. + */ + size_t getPrefixLength() const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + TCHAR* toString(const TCHAR* field) const; + + //Returns the name "FuzzyQuery" + static const char* getClassName(); + const char* getObjectName() const; + + Query* clone() const; + bool equals(Query * other) const; + size_t hashCode() const; + +protected: + FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); +}; + +/** Subclass of FilteredTermEnum for enumerating all terms that are similiar +* to the specified filter term. +* +*

Term enumerations are always ordered by Term.compareTo(). Each term in +* the enumeration is greater than all that precede it. +*/ +class CLUCENE_EXPORT FuzzyTermEnum: public FilteredTermEnum { +private: + /* Allows us save time required to create a new array + * everytime similarity is called. + */ + int32_t* d; + size_t dLen; + + //float_t distance; + float_t _similarity; + bool _endEnum; + + CL_NS(index)::Term* searchTerm; + //String field; + TCHAR* text; + size_t textLen; + TCHAR* prefix; + size_t prefixLength; + + float_t minimumSimilarity; + double scale_factor; + int32_t maxDistances[LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX]; + + /****************************** + * Compute Levenshtein distance + ******************************/ + + /** + *

Similarity returns a number that is 1.0f or less (including negative numbers) + * based on how similar the Term is compared to a target term. It returns + * exactly 0.0f when + *

+	*    editDistance < maximumEditDistance
+ * Otherwise it returns: + *
+	*    1 - (editDistance / length)
+ * where length is the length of the shortest term (text or target) including a + * prefix that are identical and editDistance is the Levenshtein distance for + * the two words.

+ * + *

Embedded within this algorithm is a fail-fast Levenshtein distance + * algorithm. The fail-fast algorithm differs from the standard Levenshtein + * distance algorithm in that it is aborted if it is discovered that the + * mimimum distance between the words is greater than some threshold. + * + *

To calculate the maximum distance threshold we use the following formula: + *

+	*     (1 - minimumSimilarity) * length
+ * where length is the shortest term including any prefix that is not part of the + * similarity comparision. This formula was derived by solving for what maximum value + * of distance returns false for the following statements: + *
+	*   similarity = 1 - ((float)distance / (float) (prefixLength + Math.min(textlen, targetlen)));
+	*   return (similarity > minimumSimilarity);
+ * where distance is the Levenshtein distance for the two words. + *

+ *

Levenshtein distance (also known as edit distance) is a measure of similiarity + * between two strings where the distance is measured as the number of character + * deletions, insertions or substitutions required to transform one string to + * the other string. + * @param target the target word or phrase + * @return the similarity, 0.0 or less indicates that it matches less than the required + * threshold and 1.0 indicates that the text and target are identical + */ + float_t similarity(const TCHAR* target, const size_t targetLen); + + /** + * The max Distance is the maximum Levenshtein distance for the text + * compared to some other value that results in score that is + * better than the minimum similarity. + * @param m the length of the "other value" + * @return the maximum levenshtein distance that we care about + */ + int32_t getMaxDistance(const size_t m); + + void initializeMaxDistances(); + + int32_t calculateMaxDistance(const size_t m) const; + +protected: + /** + * The termCompare method in FuzzyTermEnum uses Levenshtein distance to + * calculate the distance between the given term and the comparing term. + */ + bool termCompare(CL_NS(index)::Term* term) ; + + /** Returns the fact if the current term in the enumeration has reached the end */ + bool endEnum(); +public: + + /** + * Constructor for enumeration of all terms from specified reader which share a prefix of + * length prefixLength with term and which have a fuzzy similarity > + * minSimilarity. + *

+ * After calling the constructor the enumeration is already pointing to the first + * valid term if such a term exists. + * + * @param reader Delivers terms. + * @param term Pattern term. + * @param minSimilarity Minimum required similarity for terms from the reader. Default value is 0.5f. + * @param prefixLength Length of required common prefix. Default value is 0. + * @throws IOException + */ + FuzzyTermEnum(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term, float_t minSimilarity=FuzzyQuery::defaultMinSimilarity, size_t prefixLength=0); + virtual ~FuzzyTermEnum(); + + /** Close the enumeration */ + void close(); + + /** Returns the difference between the distance and the fuzzy threshold + * multiplied by the scale factor + */ + float_t difference(); + + const char* getObjectName() const; + static const char* getClassName(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/HitQueue.cpp clucene-core-2.3.3.4/src/core/CLucene/search/HitQueue.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/HitQueue.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/HitQueue.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,108 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SearchHeader.h" +#include "_HitQueue.h" + +CL_NS_DEF(search) + +void HitQueue::upHeap(){ + size_t i = _size; + ScoreDoc node = heap[i]; // save bottom node (WAS object) + int32_t j = ((uint32_t)i) >> 1; + while (j > 0 && lessThan(node,heap[j])) { + heap[i] = heap[j]; // shift parents down + i = j; + j = ((uint32_t)j) >> 1; + } + heap[i] = node; // install saved node +} +void HitQueue::downHeap(){ + size_t i = 1; + ScoreDoc node = heap[i]; // save top node + size_t j = i << 1; // find smaller child + size_t k = j + 1; + if (k <= _size && lessThan(heap[k], heap[j])) { + j = k; + } + while (j <= _size && lessThan(heap[j],node)) { + heap[i] = heap[j]; // shift up child + i = j; + j = i << 1; + k = j + 1; + if (k <= _size && lessThan(heap[k], heap[j])) { + j = k; + } + } + heap[i] = node; // install saved node +} + +void HitQueue::adjustTop(){ + downHeap(); +} +size_t HitQueue::size(){ + return _size; +} + +struct ScoreDoc& HitQueue::top(){ + if ( _size == 0 ) + _CLTHROWA(CL_ERR_IndexOutOfBounds, "Attempted to access empty hitqueue::top"); + return heap[1]; +} + +void HitQueue::put(struct ScoreDoc& element){ + if ( _size>=maxSize ) + _CLTHROWA(CL_ERR_IndexOutOfBounds,"add is out of bounds"); + + _size++; + heap[_size] = element; + upHeap(); +} + +ScoreDoc HitQueue::pop(){ + if (_size > 0) { + ScoreDoc result = heap[1]; // save first value + heap[1] = heap[_size]; // move last to first + + _size--; + downHeap(); // adjust heap + return result; + } else + _CLTHROWA(CL_ERR_IndexOutOfBounds, "Attempted to access empty hitqueue::top"); +} + +bool HitQueue::insert(struct ScoreDoc& element){ + if(_size < maxSize){ + put(element); + return true; + }else if(_size > 0 && !lessThan(element, heap[1])){ + heap[1] = element; + adjustTop(); + return true; + }else + return false; +} + +HitQueue::HitQueue(const int32_t maxSize){ + _size = 0; + this->maxSize = maxSize; + int32_t heapSize = maxSize + 1; + heap = new ScoreDoc[heapSize]; +} +HitQueue::~HitQueue(){ + delete [] heap; +} + +bool HitQueue::lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB){ + if (hitA.score == hitB.score) + return hitA.doc > hitB.doc; + else + return hitA.score < hitB.score; +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_HitQueue.h clucene-core-2.3.3.4/src/core/CLucene/search/_HitQueue.h --- clucene-core-0.9.21b/src/core/CLucene/search/_HitQueue.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_HitQueue.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,50 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_HitQueue_ +#define _lucene_search_HitQueue_ + +CL_NS_DEF(search) +struct ScoreDoc; + +/** +* An optimised PriorityQueue which takes ScoreDoc structs. Some by-ref passing +* and memory related optimisations have been done. +*/ +class HitQueue: LUCENE_BASE { +private: + ScoreDoc* heap; + size_t _size; + size_t maxSize; + + void upHeap(); + void downHeap(); + +protected: + bool lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB); + +public: + void adjustTop(); + struct ScoreDoc& top(); + void put(struct ScoreDoc& element); + ScoreDoc pop(); + /** + * Adds element to the PriorityQueue in log(size) time if either + * the PriorityQueue is not full, or not lessThan(element, top()). + * @param element + * @return true if element is added, false otherwise. + */ + bool insert(struct ScoreDoc& element); + /** + * Returns the number of elements currently stored in the PriorityQueue. + */ + size_t size(); + HitQueue(const int32_t maxSize); + ~HitQueue(); + +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Hits.cpp clucene-core-2.3.3.4/src/core/CLucene/search/Hits.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/Hits.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Hits.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,218 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Hits.h" +#include "SearchHeader.h" +#include "CLucene/document/Document.h" +#include "CLucene/index/IndexReader.h" +#include "Filter.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/IndexSearcher.h" + +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_USE(index) + +CL_NS_DEF(search) + + + + HitDoc::HitDoc(const float_t s, const int32_t i) + { + //Func - Constructor + //Pre - true + //Post - The instance has been created + + next = NULL; + prev = NULL; + doc = NULL; + score = s; + id = i; + } + + HitDoc::~HitDoc(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + _CLLDELETE(doc); + } + + + Hits::Hits(Searcher* s, Query* q, Filter* f, const Sort* _sort): + query(q), searcher(s), filter(f), sort(_sort) , _length(0), first(NULL), last(NULL), + numDocs(0), maxDocs(200), nDeletedHits(0), debugCheckedForDeletions(false) + { + //Func - Constructor + //Pre - s contains a valid reference to a searcher s + // q contains a valid reference to a Query + // f is NULL or contains a pointer to a filter + //Post - The instance has been created + + hitDocs = _CLNEW CL_NS(util)::CLVector >; + nDeletions = countDeletions(s); + + //retrieve 100 initially + getMoreDocs(50); + + _lengthAtStart = _length; + } + + Hits::~Hits(){ + _CLLDELETE(hitDocs); + } + + // count # deletions, return -1 if unknown. + int32_t Hits::countDeletions(CL_NS(search)::Searcher* s) { + int32_t cnt = -1; + if ( s->getObjectName() == IndexSearcher::getClassName() ) { + cnt = s->maxDoc() - static_cast(s)->getReader()->numDocs(); + } + return cnt; + } + + size_t Hits::length() const { + return _length; + } + + Document& Hits::doc(const int32_t n){ + HitDoc* hitDoc = getHitDoc(n); + + // Update LRU cache of documents + remove(hitDoc); // remove from list, if there + addToFront(hitDoc); // add to front of list + if (numDocs > maxDocs) { // if cache is full + HitDoc* oldLast = last; + remove(last); // flush last + + _CLLDELETE( oldLast->doc ); + oldLast->doc = NULL; + } + + if (hitDoc->doc == NULL){ + hitDoc->doc = _CLNEW Document; + searcher->doc(hitDoc->id, hitDoc->doc); // cache miss: read document + } + + return *hitDoc->doc; + } + + int32_t Hits::id (const int32_t n){ + return getHitDoc(n)->id; + } + + float_t Hits::score(const int32_t n){ + return getHitDoc(n)->score; + } + + void Hits::getMoreDocs(const size_t m){ + size_t _min = m; + if ( hitDocs->size() > _min) + _min = hitDocs->size(); + + size_t n = _min * 2; // double # retrieved + TopDocs* topDocs = NULL; + if ( sort==NULL ) + topDocs = (TopDocs*)((Searchable*)searcher)->_search(query, filter, n); + else + topDocs = (TopDocs*)((Searchable*)searcher)->_search(query, filter, n, sort); + + _length = topDocs->totalHits; + ScoreDoc* scoreDocs = topDocs->scoreDocs; + size_t scoreDocsLength = topDocs->scoreDocsLength; + + float_t scoreNorm = 1.0f; + + //Check that scoreDocs is a valid pointer before using it + if (scoreDocs != NULL){ + if (_length > 0 && scoreDocs[0].score > 1.0f){ + scoreNorm = 1.0f / scoreDocs[0].score; + } + + int32_t start = hitDocs->size() - nDeletedHits; + + // any new deletions? + int32_t nDels2 = countDeletions(searcher); + debugCheckedForDeletions = false; + if (nDeletions < 0 || nDels2 > nDeletions) { + // either we cannot count deletions, or some "previously valid hits" might have been deleted, so find exact start point + nDeletedHits = 0; + debugCheckedForDeletions = true; + size_t i2 = 0; + for (size_t i1=0; i1size() && i2 < scoreDocsLength; i1++) { + int32_t id1 = ((*hitDocs)[i1])->id; + int32_t id2 = scoreDocs[i2].doc; + if (id1 == id2) { + i2++; + } else { + nDeletedHits++; + } + } + start = i2; + } + + size_t end = scoreDocsLength < _length ? scoreDocsLength : _length; + _length += nDeletedHits; + for (size_t i = start; i < end; i++) { + hitDocs->push_back(_CLNEW HitDoc(scoreDocs[i].score * scoreNorm, scoreDocs[i].doc)); + } + + nDeletions = nDels2; + } + + _CLDELETE(topDocs); + } + + HitDoc* Hits::getHitDoc(const size_t n){ + if (n >= _lengthAtStart){ + TCHAR buf[100]; + _sntprintf(buf, 100,_T("Not a valid hit number: %d"), (int)n); + _CLTHROWT(CL_ERR_IndexOutOfBounds, buf ); + } + if (n >= hitDocs->size()) + getMoreDocs(n); + + if (n >= _length) { + TCHAR buf[100]; + _sntprintf(buf, 100,_T("Not a valid hit number: %d"), (int)n); + _CLTHROWT(CL_ERR_ConcurrentModification, buf ); + } + + return (*hitDocs)[n]; + } + + void Hits::addToFront(HitDoc* hitDoc) { // insert at front of cache + if (first == NULL) + last = hitDoc; + else + first->prev = hitDoc; + + hitDoc->next = first; + first = hitDoc; + hitDoc->prev = NULL; + + numDocs++; + } + + void Hits::remove(const HitDoc* hitDoc) { // remove from cache + if (hitDoc->doc == NULL) // it's not in the list + return; // abort + + if (hitDoc->next == NULL) + last = hitDoc->prev; + else + hitDoc->next->prev = hitDoc->prev; + + if (hitDoc->prev == NULL) + first = hitDoc->next; + else + hitDoc->prev->next = hitDoc->next; + + numDocs--; + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Hits.h clucene-core-2.3.3.4/src/core/CLucene/search/Hits.h --- clucene-core-0.9.21b/src/core/CLucene/search/Hits.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Hits.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,101 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Hits_h +#define _lucene_search_Hits_h + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(document,Document) + +CL_NS_DEF(search) + + class Query; + class Searcher; + class Filter; + class HitDoc; + class Sort; + + /** A ranked list of documents, used to hold search results. + *

+ * Caution: Iterate only over the hits needed. Iterating over all + * hits is generally not desirable and may be the source of + * performance issues. If you need to iterate over many or all hits, consider + * using the search method that takes a {@link HitCollector}. + *

+ *

Note: Deleting matching documents concurrently with traversing + * the hits, might, when deleting hits that were not yet retrieved, decrease + * {@link #length()}. In such case, + * {@link java.util.ConcurrentModificationException ConcurrentModificationException} + * is thrown when accessing hit n ≥ current_{@link #length()} + * (but n < {@link #length()}_at_start). + */ + class CLUCENE_EXPORT Hits { + private: + Query* query; + Searcher* searcher; + Filter* filter; + const Sort* sort; + + size_t _length; // the total number of hits + CL_NS(util)::CLVector >* hitDocs; // cache of hits retrieved + + HitDoc* first; // head of LRU cache + HitDoc* last; // tail of LRU cache + int32_t numDocs; // number cached + int32_t maxDocs; // max to cache + + int32_t nDeletions; // # deleted docs in the index. + size_t _lengthAtStart; // this is the number apps usually count on (although deletions can bring it down). + int32_t nDeletedHits; // # of already collected hits that were meanwhile deleted. + + bool debugCheckedForDeletions; // for test purposes. + + /** + * Tries to add new documents to hitDocs. + * Ensures that the hit numbered _min has been retrieved. + */ + void getMoreDocs(const size_t _min); + + /** Returns the score for the nth document in this set. */ + HitDoc* getHitDoc(const size_t n); + + void addToFront(HitDoc* hitDoc); + + void remove(const HitDoc* hitDoc); + + public: + Hits(Searcher* s, Query* q, Filter* f, const Sort* sort=NULL); + virtual ~Hits(); + + /** Returns the total number of hits available in this set. */ + size_t length() const; + + /** Returns the stored fields of the nth document in this set. + *

Documents are cached, so that repeated requests for the same element may + * return the same Document object. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * + * @memory Memory belongs to the hits object. Don't delete the return value. + */ + CL_NS(document)::Document& doc(const int32_t n); + + /** Returns the id for the nth document in this set. + * Note that ids may change when the index changes, so you cannot + * rely on the id to be stable. + */ + int32_t id (const int32_t n); + + /** Returns the score for the nth document in this set. */ + float_t score(const int32_t n); + + /** count # deletions, return -1 if unknown. */ + int32_t countDeletions(CL_NS(search)::Searcher* s); + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/IndexSearcher.cpp clucene-core-2.3.3.4/src/core/CLucene/search/IndexSearcher.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/IndexSearcher.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/IndexSearcher.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,385 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "IndexSearcher.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "_HitQueue.h" +#include "Query.h" +#include "Filter.h" +#include "_FieldDocSortedHitQueue.h" +#include "CLucene/store/Directory.h" +#include "CLucene/document/Document.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/BitSet.h" +#include "FieldSortedHitQueue.h" +#include "Explanation.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(document) + +CL_NS_DEF(search) + + class SimpleTopDocsCollector:public HitCollector{ + private: + float_t minScore; + const CL_NS(util)::BitSet* bits; + HitQueue* hq; + size_t nDocs; + int32_t* totalHits; + public: + SimpleTopDocsCollector(const CL_NS(util)::BitSet* bs, HitQueue* hitQueue, int32_t* totalhits, size_t ndocs, const float_t ms=-1.0f): + minScore(ms), + bits(bs), + hq(hitQueue), + nDocs(ndocs), + totalHits(totalhits) + { + } + ~SimpleTopDocsCollector(){} + void collect(const int32_t doc, const float_t score){ + if (score > 0.0f && // ignore zeroed buckets + (bits==NULL || bits->get(doc))) { // skip docs not in bits + ++totalHits[0]; + if (hq->size() < nDocs || (minScore==-1.0f || score >= minScore)) { + ScoreDoc sd = {doc, score}; + hq->insert(sd); // update hit queue + if ( minScore != -1.0f ) + minScore = hq->top().score; // maintain minScore + } + } + } + }; + + class SortedTopDocsCollector:public HitCollector{ + private: + const CL_NS(util)::BitSet* bits; + FieldSortedHitQueue* hq; + size_t nDocs; + int32_t* totalHits; + public: + SortedTopDocsCollector(const CL_NS(util)::BitSet* bs, FieldSortedHitQueue* hitQueue, int32_t* totalhits, size_t _nDocs): + bits(bs), + hq(hitQueue), + nDocs(_nDocs), + totalHits(totalhits) + { + } + ~SortedTopDocsCollector(){ + } + void collect(const int32_t doc, const float_t score){ + if (score > 0.0f && // ignore zeroed buckets + (bits==NULL || bits->get(doc))) { // skip docs not in bits + ++totalHits[0]; + FieldDoc* fd = _CLNEW FieldDoc(doc, score); //todo: see jlucene way... with fields def??? + if ( !hq->insert(fd) ) // update hit queue + _CLDELETE(fd); + } + } + }; + + class SimpleFilteredCollector: public HitCollector{ + private: + CL_NS(util)::BitSet* bits; + HitCollector* results; + public: + SimpleFilteredCollector(CL_NS(util)::BitSet* bs, HitCollector* collector): + bits(bs), + results(collector) + { + } + ~SimpleFilteredCollector(){ + } + protected: + void collect(const int32_t doc, const float_t score){ + if (bits->get(doc)) { // skip docs not in bits + results->collect(doc, score); + } + } + }; + + + IndexSearcher::IndexSearcher(const char* path){ + //Func - Constructor + // Creates a searcher searching the index in the named directory. */ + //Pre - path != NULL + //Post - The instance has been created + + CND_PRECONDITION(path != NULL, "path is NULL"); + + reader = IndexReader::open(path); + readerOwner = true; + } + + IndexSearcher::IndexSearcher(CL_NS(store)::Directory* directory){ + //Func - Constructor + // Creates a searcher searching the index in the specified directory. */ + //Pre - path != NULL + //Post - The instance has been created + + CND_PRECONDITION(directory != NULL, "directory is NULL"); + + reader = IndexReader::open(directory); + readerOwner = true; + } + + IndexSearcher::IndexSearcher(IndexReader* r){ + //Func - Constructor + // Creates a searcher searching the index with the provide IndexReader + //Pre - path != NULL + //Post - The instance has been created + + reader = r; + readerOwner = false; + } + + IndexSearcher::~IndexSearcher(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + close(); + } + + void IndexSearcher::close(){ + //Func - Frees resources associated with this Searcher. + //Pre - true + //Post - The resources associated have been freed + if (readerOwner && reader){ + reader->close(); + _CLDELETE(reader); + } + } + + // inherit javadoc + int32_t IndexSearcher::docFreq(const Term* term) const{ + //Func - + //Pre - reader != NULL + //Post - + + CND_PRECONDITION(reader != NULL, "reader is NULL"); + + return reader->docFreq(term); + } + + _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* IndexSearcher::doc(int32_t i){ + CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; + if (!doc(i,ret) ) + _CLDELETE(ret); + return ret; + } + + // inherit javadoc + bool IndexSearcher::doc(int32_t i, CL_NS(document)::Document& d) { + //Func - Retrieves i-th document found + // For use by HitCollector implementations. + //Pre - reader != NULL + //Post - The i-th document has been returned + + CND_PRECONDITION(reader != NULL, "reader is NULL"); + + return reader->document(i,d); + } + bool IndexSearcher::doc(int32_t i, CL_NS(document)::Document* d) { + //Func - Retrieves i-th document found + // For use by HitCollector implementations. + //Pre - reader != NULL + //Post - The i-th document has been returned + + CND_PRECONDITION(reader != NULL, "reader is NULL"); + + return reader->document(i,*d); + } + + // inherit javadoc + int32_t IndexSearcher::maxDoc() const { + //Func - Return total number of documents including the ones marked deleted + //Pre - reader != NULL + //Post - The total number of documents including the ones marked deleted + // has been returned + + CND_PRECONDITION(reader != NULL, "reader is NULL"); + + return reader->maxDoc(); + } + + //todo: find out why we are passing Query* and not Weight*, as Weight is being extracted anyway from Query* + TopDocs* IndexSearcher::_search(Query* query, Filter* filter, const int32_t nDocs){ + //Func - + //Pre - reader != NULL + //Post - + + CND_PRECONDITION(reader != NULL, "reader is NULL"); + CND_PRECONDITION(query != NULL, "query is NULL"); + + Weight* weight = query->weight(this); + Scorer* scorer = weight->scorer(reader); + if (scorer == NULL) { + Query* wq = weight->getQuery(); + if (wq != query) + _CLLDELETE(wq); + _CLLDELETE(weight); + return _CLNEW TopDocs(0, NULL, 0); + } + + BitSet* bits = filter != NULL ? filter->bits(reader) : NULL; + HitQueue* hq = _CLNEW HitQueue(nDocs); + + //Check hq has been allocated properly + CND_CONDITION(hq != NULL, "Could not allocate memory for HitQueue hq"); + + int32_t* totalHits = _CL_NEWARRAY(int32_t,1); + totalHits[0] = 0; + + SimpleTopDocsCollector hitCol(bits,hq,totalHits,nDocs,0.0f); + scorer->score( &hitCol ); + _CLDELETE(scorer); + + int32_t scoreDocsLength = hq->size(); + + ScoreDoc* scoreDocs = new ScoreDoc[scoreDocsLength]; + + for (int32_t i = scoreDocsLength-1; i >= 0; --i) // put docs in array + scoreDocs[i] = hq->pop(); + + int32_t totalHitsInt = totalHits[0]; + + _CLDELETE(hq); + if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) + _CLDELETE(bits); + _CLDELETE_ARRAY(totalHits); + Query* wq = weight->getQuery(); + if ( query != wq ) //query was re-written + _CLLDELETE(wq); + _CLDELETE(weight); + + return _CLNEW TopDocs(totalHitsInt, scoreDocs, scoreDocsLength); + } + + // inherit javadoc + TopFieldDocs* IndexSearcher::_search(Query* query, Filter* filter, const int32_t nDocs, + const Sort* sort) { + + CND_PRECONDITION(reader != NULL, "reader is NULL"); + CND_PRECONDITION(query != NULL, "query is NULL"); + + Weight* weight = query->weight(this); + Scorer* scorer = weight->scorer(reader); + if (scorer == NULL){ + return _CLNEW TopFieldDocs(0, NULL, 0, NULL ); + } + + BitSet* bits = filter != NULL ? filter->bits(reader) : NULL; + FieldSortedHitQueue hq(reader, sort->getSort(), nDocs); + int32_t* totalHits = _CL_NEWARRAY(int32_t,1); + totalHits[0]=0; + + SortedTopDocsCollector hitCol(bits,&hq,totalHits,nDocs); + scorer->score(&hitCol); + _CLLDELETE(scorer); + + int32_t hqLen = hq.size(); + FieldDoc** fieldDocs = _CL_NEWARRAY(FieldDoc*,hqLen); + for (int32_t i = hqLen-1; i >= 0; --i){ // put docs in array + fieldDocs[i] = hq.fillFields (hq.pop()); + } + + Query* wq = weight->getQuery(); + if ( query != wq ) //query was re-written + _CLLDELETE(wq); + _CLLDELETE(weight); + + SortField** hqFields = hq.getFields(); + hq.setFields(NULL); //move ownership of memory over to TopFieldDocs + int32_t totalHits0 = totalHits[0]; + if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) + _CLLDELETE(bits); + _CLDELETE_LARRAY(totalHits); + return _CLNEW TopFieldDocs(totalHits0, fieldDocs, hqLen, hqFields ); + } + + void IndexSearcher::_search(Query* query, Filter* filter, HitCollector* results){ + //Func - _search an index and fetch the results + // Applications should only use this if they need all of the + // matching documents. The high-level search API (search(Query)) is usually more efficient, + // as it skips non-high-scoring hits. + //Pre - query is a valid reference to a query + // filter may or may not be NULL + // results is a valid reference to a HitCollector and used to store the results + //Post - filter if non-NULL, a bitset used to eliminate some documents + + CND_PRECONDITION(reader != NULL, "reader is NULL"); + CND_PRECONDITION(query != NULL, "query is NULL"); + + BitSet* bits = NULL; + SimpleFilteredCollector* fc = NULL; + + if (filter != NULL){ + bits = filter->bits(reader); + fc = _CLNEW SimpleFilteredCollector(bits, results); + } + + Weight* weight = query->weight(this); + Scorer* scorer = weight->scorer(reader); + if (scorer != NULL) { + if (fc == NULL){ + scorer->score(results); + }else{ + scorer->score((HitCollector*)fc); + } + _CLDELETE(scorer); + } + + _CLLDELETE(fc); + Query* wq = weight->getQuery(); + if (wq != query) // query was rewritten + _CLLDELETE(wq); + _CLLDELETE(weight); + if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) + _CLLDELETE(bits); + } + + Query* IndexSearcher::rewrite(Query* original) { + Query* query = original; + Query* last = original; + for (Query* rewrittenQuery = query->rewrite(reader); + rewrittenQuery != query; + rewrittenQuery = query->rewrite(reader)) { + query = rewrittenQuery; + if ( query != last && last != original ){ + _CLLDELETE(last); + } + last = query; + } + return query; + } + + void IndexSearcher::explain(Query* query, int32_t doc, Explanation* ret){ + Weight* weight = query->weight(this); + ret->addDetail(weight->explain(reader, doc)); // TODO: A hack until this function will return Explanation* as well + + Query* wq = weight->getQuery(); + if ( query != wq ) //query was re-written + _CLLDELETE(wq); + _CLDELETE(weight); + } + + CL_NS(index)::IndexReader* IndexSearcher::getReader(){ + return reader; + } + + const char* IndexSearcher::getClassName(){ + return "IndexSearcher"; + } + const char* IndexSearcher::getObjectName() const{ + return IndexSearcher::getClassName(); + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/IndexSearcher.h clucene-core-2.3.3.4/src/core/CLucene/search/IndexSearcher.h --- clucene-core-0.9.21b/src/core/CLucene/search/IndexSearcher.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/IndexSearcher.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,86 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_IndexSearcher_ +#define _lucene_search_IndexSearcher_ + + +#include "Searchable.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,TopDocs) +CL_CLASS_DEF(search,TopFieldDocs) +CL_CLASS_DEF(search,Query) +CL_CLASS_DEF(search,Filter) +CL_CLASS_DEF(search,Sort) +CL_CLASS_DEF(search,HitCollector) +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(index,IndexReader) +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/BitSet.h" +//#include "HitQueue.h" +//#include "FieldSortedHitQueue.h" + +CL_NS_DEF(search) +/** Implements search over a single IndexReader. +* +*

Applications usually need only call the inherited {@link search(Query*)} +* or {@link search(Query*,Filter*)} methods. +*/ +class CLUCENE_EXPORT IndexSearcher:public Searcher{ + CL_NS(index)::IndexReader* reader; + bool readerOwner; + +public: + /** Creates a searcher searching the index in the named directory. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexSearcher(const char* path); + + /** Creates a searcher searching the index in the provided directory. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexSearcher(CL_NS(store)::Directory* directory); + + /** Creates a searcher searching the provided index. */ + IndexSearcher(CL_NS(index)::IndexReader* r); + + ~IndexSearcher(); + + /** + * Note that the underlying IndexReader is not closed, if + * IndexSearcher was constructed with IndexSearcher(IndexReader r). + * If the IndexReader was supplied implicitly by specifying a directory, then + * the IndexReader gets closed. + */ + void close(); + + int32_t docFreq(const CL_NS(index)::Term* term) const; + + bool doc(int32_t i, CL_NS(document)::Document& document); + bool doc(int32_t i, CL_NS(document)::Document* document); + _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* doc(int32_t i); + + int32_t maxDoc() const; + + TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs); + TopFieldDocs* _search(Query* query, Filter* filter, const int32_t nDocs, const Sort* sort); + + void _search(Query* query, Filter* filter, HitCollector* results); + + CL_NS(index)::IndexReader* getReader(); + + Query* rewrite(Query* original); + void explain(Query* query, int32_t doc, Explanation* ret); + + virtual const char* getObjectName() const; + static const char* getClassName(); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/MatchAllDocsQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/MatchAllDocsQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/MatchAllDocsQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/MatchAllDocsQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,201 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Query.h" +#include "MatchAllDocsQuery.h" +#include "Explanation.h" +#include "SearchHeader.h" +#include "Searchable.h" + +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF(search) + +class MatchAllDocsQuery::MatchAllDocsWeight : public Weight { +private: + Similarity* similarity; + float_t queryWeight; + float_t queryNorm; + MatchAllDocsQuery* parentQuery; + +public: + MatchAllDocsWeight(MatchAllDocsQuery* enclosingInstance, Searcher* searcher); + virtual ~MatchAllDocsWeight(){} + + virtual TCHAR* toString(); + + Query* getQuery(); + + float_t getValue(); + + float_t sumOfSquaredWeights(); + + void normalize(float_t _queryNorm); + + Scorer* scorer(CL_NS(index)::IndexReader* reader); + + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); +}; + +class MatchAllDocsQuery::MatchAllScorer : public Scorer { + CL_NS(index)::IndexReader* reader; + int32_t id; + int32_t maxId; + float_t _score; + +public: + MatchAllScorer(CL_NS(index)::IndexReader* _reader, Similarity* similarity, Weight* w); + virtual ~MatchAllScorer(){} + + Explanation* explain(int32_t doc); + + int32_t doc() const; + + bool next(); + + float_t score(); + + bool skipTo(int32_t target); + + virtual TCHAR* toString(); +}; + +MatchAllDocsQuery::MatchAllScorer::MatchAllScorer(CL_NS(index)::IndexReader* _reader, Similarity* similarity, Weight* w) + :Scorer(similarity),reader(_reader),id(-1) +{ + maxId = reader->maxDoc() - 1; + _score = w->getValue(); +} + +Explanation* MatchAllDocsQuery::MatchAllScorer::explain(int32_t doc) { + // not called... see MatchAllDocsWeight::explain() + return NULL; +} + +int32_t MatchAllDocsQuery::MatchAllScorer::doc() const { + return id; +} + +bool MatchAllDocsQuery::MatchAllScorer::next() { + while (id < maxId) { + id++; + if (!reader->isDeleted(id)) { + return true; + } + } + return false; +} + +float_t MatchAllDocsQuery::MatchAllScorer::score() { + return _score; +} + +bool MatchAllDocsQuery::MatchAllScorer::skipTo(int32_t target) { + id = target - 1; + return next(); +} + +TCHAR* MatchAllDocsQuery::MatchAllScorer::toString(){ + return stringDuplicate(_T("MatchAllScorer")); +} + +MatchAllDocsQuery::MatchAllDocsWeight::MatchAllDocsWeight(MatchAllDocsQuery* enclosingInstance, Searcher* searcher): + parentQuery(enclosingInstance){ + this->similarity = searcher->getSimilarity(); +} + +TCHAR* MatchAllDocsQuery::MatchAllDocsWeight::toString() { + CL_NS(util)::StringBuffer buf(50); + buf.append(_T("weight(")); + + TCHAR* t = parentQuery->toString(); + buf.append(t); + _CLDELETE_LCARRAY(t); + + buf.appendChar(_T(')')); + return buf.giveBuffer(); +} + +Query* MatchAllDocsQuery::MatchAllDocsWeight::getQuery() { + return parentQuery; +} + +float_t MatchAllDocsQuery::MatchAllDocsWeight::getValue() { + return queryWeight; +} + +float_t MatchAllDocsQuery::MatchAllDocsWeight::sumOfSquaredWeights() { + queryWeight = parentQuery->getBoost(); + return queryWeight * queryWeight; +} + +void MatchAllDocsQuery::MatchAllDocsWeight::normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= this->queryNorm; +} + +Scorer* MatchAllDocsQuery::MatchAllDocsWeight::scorer(CL_NS(index)::IndexReader* reader) { + return _CLNEW MatchAllScorer(reader, similarity, this); +} + +Explanation* MatchAllDocsQuery::MatchAllDocsWeight::explain(CL_NS(index)::IndexReader* reader, int32_t doc) { + // explain query weight + Explanation* queryExpl = _CLNEW ComplexExplanation(true, getValue(), _T("MatchAllDocsQuery, product of:")); + if (parentQuery->getBoost() != 1.0f) { + queryExpl->addDetail(_CLNEW Explanation(parentQuery->getBoost(),_T("boost"))); + } + queryExpl->addDetail(_CLNEW Explanation(queryNorm,_T("queryNorm"))); + return queryExpl; +} + +MatchAllDocsQuery::MatchAllDocsQuery(){} +MatchAllDocsQuery::~MatchAllDocsQuery(){} + +Weight* MatchAllDocsQuery::_createWeight(Searcher* searcher){ + return _CLNEW MatchAllDocsWeight(this, searcher); +} + +const char* MatchAllDocsQuery::getClassName() { + return "MatchAllDocsQuery"; +} +const char* MatchAllDocsQuery::getObjectName() const{ + return getClassName(); +} + +TCHAR* MatchAllDocsQuery::toString(const TCHAR* /*field*/) const{ + CL_NS(util)::StringBuffer buffer(25); + buffer.append(_T("MatchAllDocsQuery")); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); +} + +MatchAllDocsQuery::MatchAllDocsQuery(const MatchAllDocsQuery& clone): + Query(clone) +{ +} + +Query* MatchAllDocsQuery::clone() const{ + return _CLNEW MatchAllDocsQuery(*this); +} + +void MatchAllDocsQuery::extractTerms( TermSet * termset ) const +{ +} + +bool MatchAllDocsQuery::equals(Query* o) const{ + if (!(o->instanceOf(MatchAllDocsQuery::getClassName()))) + return false; + MatchAllDocsQuery* other = static_cast(o); + return this->getBoost() == other->getBoost(); +} + +size_t MatchAllDocsQuery::hashCode() const{ + return (static_cast(getBoost())) ^ 0x1AA71190; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/MatchAllDocsQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/MatchAllDocsQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/MatchAllDocsQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/MatchAllDocsQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,74 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_MatchAllDocsQuery_h +#define _lucene_search_MatchAllDocsQuery_h + +#include "Scorer.h" +#include "SearchHeader.h" +#include "Query.h" + +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + class Weight; + + /** + * A query that matches all documents. + * + */ + class CLUCENE_EXPORT MatchAllDocsQuery : public Query { + protected: + MatchAllDocsQuery(const MatchAllDocsQuery& clone); + public: + MatchAllDocsQuery(); + virtual ~MatchAllDocsQuery(); + + class MatchAllScorer; + class MatchAllDocsWeight; + + /** Prints a query to a string, with field assumed to be the + * default field and omitted. + *

The representation used is one that is supposed to be readable + * by {@link org.apache.lucene.queryParser.QueryParser QueryParser}. However, + * there are the following limitations: + *

    + *
  • If the query was created by the parser, the printed + * representation may not be exactly what was parsed. For example, + * characters that need to be escaped will be represented without + * the required backslash.
  • + *
  • Some of the more complicated queries (e.g. span queries) + * don't have a representation that can be parsed by QueryParser.
  • + *
+ */ + virtual TCHAR* toString(const TCHAR* field = NULL) const; + + protected: + /** Expert: Constructs an appropriate Weight implementation for this query. + * + *

Only implemented by primitive queries, which re-write to themselves. + * This is an Internal function + */ + virtual Weight* _createWeight(Searcher* searcher); + + public: + /** Returns a clone of this query. */ + virtual Query* clone() const; + + /** Expert: MatchAllDocsQuery provides no terms at all. */ + void extractTerms( TermSet * termset ) const; + + virtual bool equals(Query* o) const; + virtual size_t hashCode() const; + + static const char* getClassName(); + const char* getObjectName() const; + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/MultiPhraseQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/MultiPhraseQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/MultiPhraseQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/MultiPhraseQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,441 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MultiPhraseQuery.h" +#include "SearchHeader.h" + +#include "BooleanClause.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Explanation.h" +#include "Similarity.h" + +#include "CLucene/index/_Term.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/MultipleTermPositions.h" + +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/VoidList.h" +#include "CLucene/util/_Arrays.h" + +#include "_ExactPhraseScorer.h" +#include "_SloppyPhraseScorer.h" + +CL_NS_USE(index) +CL_NS_USE(util) + +CL_NS_DEF(search) + +class MultiPhraseWeight : public Weight { +private: + Similarity* similarity; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + MultiPhraseQuery* parentQuery; + +public: + MultiPhraseWeight(Searcher* searcher, MultiPhraseQuery* _parentQuery) : similarity(_parentQuery->getSimilarity(searcher)), + value(0), idf(0), queryNorm(0), queryWeight(0), parentQuery(_parentQuery) { + + // compute idf + for (size_t i = 0; i < parentQuery->termArrays->size(); i++){ + ArrayBase* terms = parentQuery->termArrays->at(i); + for ( size_t j=0;jlength;j++ ){ + idf += parentQuery->getSimilarity(searcher)->idf(terms->values[j], searcher); + } + } + } + virtual ~MultiPhraseWeight(){}; + + Query* getQuery() { return parentQuery; } + float_t getValue() { return value; } + + float_t sumOfSquaredWeights() { + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= _queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* scorer(IndexReader* reader) { + const size_t termArraysSize = parentQuery->termArrays->size(); + if (termArraysSize == 0) // optimize zero-term case + return NULL; + + TermPositions** tps = _CL_NEWARRAY(TermPositions*,termArraysSize+1); + for (size_t i=0; i* terms = parentQuery->termArrays->at(i); + + TermPositions* p; + if (terms->length > 1 ) + p = _CLNEW MultipleTermPositions(reader, terms); + else + p = reader->termPositions((*terms)[0]); + + if (p == NULL) + return NULL; + + tps[i] = p; + } + tps[termArraysSize] = NULL; + + Scorer* ret = NULL; + + ValueArray positions; + parentQuery->getPositions(positions); + const int32_t slop = parentQuery->getSlop(); + if (slop == 0) + ret = _CLNEW ExactPhraseScorer(this, tps, positions.values, similarity, + reader->norms(parentQuery->field)); + else + ret = _CLNEW SloppyPhraseScorer(this, tps, positions.values, similarity, + slop, reader->norms(parentQuery->field)); + + positions.deleteArray(); + + //tps can be deleted safely. SloppyPhraseScorer or ExactPhraseScorer will take care + //of its values + _CLDELETE_LARRAY(tps); + + return ret; + } + + Explanation* explain(IndexReader* reader, int32_t doc){ + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + StringBuffer buf(100); + buf.append(_T("weight(")); + TCHAR* queryString = getQuery()->toString(); + buf.append(queryString); + buf.append(_T(" in ")); + buf.appendInt(doc); + buf.append(_T("), product of:")); + result->setDescription(buf.getBuffer()); + buf.clear(); + + buf.append(_T("idf(")); + buf.append(queryString); + buf.appendChar(_T(')')); + Explanation* idfExpl = _CLNEW Explanation(idf, buf.getBuffer()); + buf.clear(); + + // explain query weight + Explanation* queryExpl = _CLNEW Explanation(); + buf.append(_T("queryWeight(")); + buf.append(queryString); + buf.append(_T("), product of:")); + queryExpl->setDescription(buf.getBuffer()); + buf.clear(); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + if (parentQuery->getBoost() != 1.0f) + queryExpl->addDetail(boostExpl); + + queryExpl->addDetail(idfExpl); + + Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); + queryExpl->addDetail(queryNormExpl); + + queryExpl->setValue(boostExpl->getValue() * + idfExpl->getValue() * + queryNormExpl->getValue()); + + result->addDetail(queryExpl); + + // explain field weight + ComplexExplanation* fieldExpl = _CLNEW ComplexExplanation(); + buf.append(_T("fieldWeight(")); + buf.append(queryString); + buf.append(_T(" in ")); + buf.appendInt(doc); + buf.append(_T("), product of:")); + fieldExpl->setDescription(buf.getBuffer()); + buf.clear(); + _CLDELETE_LCARRAY(queryString); + + Explanation* tfExpl = scorer(reader)->explain(doc); + fieldExpl->addDetail(tfExpl); + fieldExpl->addDetail(idfExpl); + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(parentQuery->field); + float_t fieldNorm = + fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; + fieldNormExpl->setValue(fieldNorm); + + buf.append(_T("fieldNorm(field=")); + buf.append(parentQuery->field); + buf.append(_T(", doc=")); + buf.appendInt(doc); + buf.appendChar(_T(')')); + fieldNormExpl->setDescription(buf.getBuffer()); + buf.clear(); + + fieldExpl->addDetail(fieldNormExpl); + + fieldExpl->setMatch(tfExpl->isMatch()); + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + result->addDetail(fieldExpl); + result->setMatch(fieldExpl->getMatch()); + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + return result; + } +}; + +Query* MultiPhraseQuery::rewrite(IndexReader* /*reader*/) { + if (termArrays->size() == 1) { // optimize one-term case + ArrayBase* terms = termArrays->at(0); + BooleanQuery* boq = _CLNEW BooleanQuery(true); + for ( size_t i=0;ilength;i++ ){ + boq->add(_CLNEW TermQuery((*terms)[i]), BooleanClause::SHOULD); + } + boq->setBoost(getBoost()); + return boq; + } else { + return this; + } +} + +void MultiPhraseQuery::extractTerms( TermSet * termset ) const +{ + for( size_t i = 0; i < termArrays->size(); i++ ) + { + ArrayBase * terms = termArrays->at( i ); + for( size_t j=0; j < terms->length; j++ ) + { + Term * pTerm = terms->values[ j ]; + if( pTerm && termset->end() == termset->find( pTerm )) + termset->insert( _CL_POINTER( pTerm )); + } + } +} + +MultiPhraseQuery::MultiPhraseQuery(): + field(NULL), + termArrays(_CLNEW CL_NS(util)::CLArrayList*>), + positions(_CLNEW CL_NS(util)::CLVector), + slop(0) +{ +} + +MultiPhraseQuery::MultiPhraseQuery( const MultiPhraseQuery& clone ): + Query(clone) +{ + this->field = clone.field ? STRDUP_TtoT( clone.field ) : NULL; + this->slop = clone.slop; + + this->termArrays = _CLNEW CL_NS(util)::CLArrayList*>(); + this->positions = _CLNEW CL_NS(util)::CLVector(); + + size_t size = clone.positions->size(); + for( size_t i = 0; i < size; i++ ) + { + int32_t n = (*clone.positions)[i]; + this->positions->push_back( n ); + } + + size = clone.termArrays->size(); + for( size_t j = 0; j < size; j++ ) + { + CL_NS(util)::ArrayBase* termsToClone = (*clone.termArrays)[ j ]; + CL_NS(util)::ArrayBase* terms = _CLNEW CL_NS(util)::ValueArray( termsToClone->length ); + for( size_t t = 0; t < termsToClone->length; t++ ) + terms->values[ t ] = _CL_POINTER( termsToClone->values[ t ] ); + + this->termArrays->push_back( terms ); + } +} + +MultiPhraseQuery::~MultiPhraseQuery(){ + for (size_t i = 0; i < termArrays->size(); i++){ + for ( size_t j=0;jat(i)->length;j++ ) { + _CLLDECDELETE(termArrays->at(i)->values[j]); + } + _CLLDELETE(termArrays->at(i)); + } + _CLLDELETE(termArrays); + _CLLDELETE(positions); + _CLDELETE_LCARRAY(field); +} + +Query * MultiPhraseQuery::clone() const +{ + return _CLNEW MultiPhraseQuery( *this ); +} + +void MultiPhraseQuery::setSlop(const int32_t s) { slop = s; } + +int32_t MultiPhraseQuery::getSlop() const { return slop; } + +void MultiPhraseQuery::add(CL_NS(index)::Term* term) { + ValueArray _terms(1); + _terms[0] = term; + add(&_terms); +} + +void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase* terms) { + int32_t position = 0; + if (positions->size() > 0) + position = (*positions)[positions->size()-1] + 1; + + add(terms, position); +} + +void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase* _terms, const int32_t position) { + if (termArrays->size() == 0) + field = STRDUP_TtoT((*_terms)[0]->field()); + + CL_NS(util)::ArrayBase* terms = _CLNEW CL_NS(util)::ValueArray(_terms->length); + for ( size_t i=0;i<_terms->length;i++ ){ + if ( _tcscmp(_terms->values[i]->field(), field) != 0) { + TCHAR buf[250]; + _sntprintf(buf,250,_T("All phrase terms must be in the same field (%s): %s"),field, (*terms)[i]->field()); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + } + terms->values[i] = _CL_POINTER(_terms->values[i]); + } + termArrays->push_back(terms); + positions->push_back(position); +} +const CL_NS(util)::CLArrayList*>* MultiPhraseQuery::getTermArrays() { + return termArrays; +} + +void MultiPhraseQuery::getPositions(ValueArray& result) const { + result.length = positions->size(); + result.values = _CL_NEWARRAY(int32_t,result.length); + for (size_t i = 0; i < result.length; i++) + result.values[i] = (*positions)[i]; +} + +Weight* MultiPhraseQuery::_createWeight(Searcher* searcher) { + return _CLNEW MultiPhraseWeight(searcher, this); +} + +TCHAR* MultiPhraseQuery::toString(const TCHAR* f) const { + StringBuffer buffer(100); + if (_tcscmp(f, field)!=0) { + buffer.append(field); + buffer.appendChar(_T(':')); + } + + buffer.appendChar(_T('"')); + + CL_NS(util)::CLArrayList*>::iterator i; + i = termArrays->begin(); + while (i != termArrays->end()){ + CL_NS(util)::ArrayBase& terms = *(*i); + if (terms.length > 1) { + buffer.appendChar(_T('(')); + for (size_t j = 0; j < terms.length; j++) { + buffer.append(terms[j]->text()); + if (j < terms.length-1) + buffer.appendChar(_T(' ')); + } + buffer.appendChar(_T(')')); + } else { + buffer.append(terms[0]->text()); + } + if (i+1 != termArrays->end() ) + buffer.appendChar(_T(' ')); + + i++; + } + buffer.appendChar(_T('"')); + + if (slop != 0) { + buffer.appendChar(_T('~')); + buffer.appendInt(slop); + } + + buffer.appendBoost(getBoost()); + + return buffer.giveBuffer(); +} + +class TermArray_Equals:public CL_NS_STD(binary_function) +{ +public: + bool operator()( CL_NS(util)::ArrayBase* val1, CL_NS(util)::ArrayBase* val2 ) const{ + if ( val1->length != val2->length ) + return false; + for ( size_t i=0;ilength;i++ ){ + if (!val1->values[i]->equals(val2->values[i])) return false; + } + return true; + } +}; + +bool MultiPhraseQuery::equals(Query* o) const { + if (!(o->instanceOf(MultiPhraseQuery::getObjectName()))) return false; + MultiPhraseQuery* other = static_cast(o); + bool ret = (this->getBoost() == other->getBoost()) && (this->slop == other->slop); + + if (ret){ + CLListEquals, + const CL_NS(util)::CLVector > comp; + ret = comp.equals(this->positions,other->positions); + } + + if (ret){ + if (this->termArrays->size() != other->termArrays->size()) + return false; + + for (size_t i=0; itermArrays->size();i++){ + CLListEquals*>, + const CL_NS(util)::CLVector*> > comp; + ret = comp.equals(this->termArrays,other->termArrays); + } + } + return ret; +} + +// TODO: Test hashed value if conforms with JL +size_t MultiPhraseQuery::hashCode() const { + size_t ret = Similarity::floatToByte(getBoost()) ^ slop; + + { //msvc6 scope fix + for( size_t i = 0; i < termArrays->size(); i++ ) + { + for( size_t j = 0; j < termArrays->at( i )->length; j++ ) + { + ret = 31 * ret + termArrays->at(i)->values[j]->hashCode(); + } + } + } + { //msvc6 scope fix + for ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*positions)[i]; + } + ret ^= 0x4AC65113; + + return ret; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/MultiPhraseQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/MultiPhraseQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/MultiPhraseQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/MultiPhraseQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,116 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_MultiPhraseQuery_ +#define _lucene_search_MultiPhraseQuery_ + +#include "Query.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +class MultiPhraseWeight; + +/** +* MultiPhraseQuery is a generalized version of PhraseQuery, with an added +* method {@link #add(Term[])}. +* To use this class, to search for the phrase "Microsoft app*" first use +* add(Term) on the term "Microsoft", then find all terms that have "app" as +* prefix using IndexReader.terms(Term), and use MultiPhraseQuery.add(Term[] +* terms) to add them to the query. +* +* @author Anders Nielsen +* @version 1.0 +*/ +class CLUCENE_EXPORT MultiPhraseQuery : public Query { +private: + TCHAR* field; + CL_NS(util)::CLArrayList*>* termArrays; + CL_NS(util)::CLVector* positions; + + int32_t slop; + +protected: + MultiPhraseQuery( const MultiPhraseQuery& clone ); + +public: + MultiPhraseQuery(); + virtual ~MultiPhraseQuery(); + friend class MultiPhraseWeight; + + /** Sets the phrase slop for this query. + * @see PhraseQuery#setSlop(int) + */ + void setSlop(const int32_t s); + + /** Sets the phrase slop for this query. + * @see PhraseQuery#getSlop() + */ + int32_t getSlop() const; + + /** Add a single term at the next position in the phrase. + * @see PhraseQuery#add(Term) + * @memory A pointer is taken to term + */ + void add(CL_NS(index)::Term* term); + + /** Add multiple terms at the next position in the phrase. Any of the terms + * may match. + * @memory A pointer is taken of each term, the array memory must be cleaned up by calle + * @see PhraseQuery#add(Term) + */ + void add(const CL_NS(util)::ArrayBase* terms); + + /** + * Allows to specify the relative position of terms within the phrase. + * + * @see PhraseQuery#add(Term, int) + * @param terms + * @param position + * @memory A pointer is taken of each term, the array memory must be cleaned up by calle + */ + void add(const CL_NS(util)::ArrayBase* terms, const int32_t position); + + /** + * Returns a ArrayBase of the terms in the multiphrase. + * Do not modify the List or its contents. + */ + const CL_NS(util)::CLArrayList*>* getTermArrays(); + + + /** + * Returns the relative positions of terms in this phrase. + */ + void getPositions(CL_NS(util)::ValueArray& result) const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Expert: adds all terms occurring in this query to the terms set. */ + void extractTerms( TermSet * termset ) const; + +protected: + Weight* _createWeight(Searcher* searcher); + +public: + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* f) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + Query* clone() const; + + const char* getObjectName() const { return getClassName(); } + static const char* getClassName(){ return "MultiPhraseQuery"; } +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/MultiSearcher.cpp clucene-core-2.3.3.4/src/core/CLucene/search/MultiSearcher.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/MultiSearcher.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/MultiSearcher.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,244 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "MultiSearcher.h" +#include "SearchHeader.h" +#include "Query.h" +#include "_HitQueue.h" +#include "CLucene/document/Document.h" +#include "CLucene/index/Term.h" +#include "_FieldDocSortedHitQueue.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(document) + +CL_NS_DEF(search) + + class MultiHitCollector: public HitCollector{ + private: + HitCollector* results; + int32_t start; + public: + MultiHitCollector(HitCollector* _results, int32_t _start); + void collect(const int32_t doc, const float_t score) ; + }; + + + /** Creates a searcher which searches searchers. */ + MultiSearcher::MultiSearcher(Searchable** _searchables): + _maxDoc(0) { + searchablesLen = 0; + while ( _searchables[searchablesLen] != NULL ) + ++searchablesLen; + + searchables=_CL_NEWARRAY(Searchable*,searchablesLen+1); + starts = _CL_NEWARRAY(int32_t,searchablesLen + 1); // build starts array + for (int32_t i = 0; i < searchablesLen; ++i) { + searchables[i]=_searchables[i]; + starts[i] = _maxDoc; + _maxDoc += searchables[i]->maxDoc(); // compute maxDocs + } + starts[searchablesLen] = _maxDoc; + } + + MultiSearcher::~MultiSearcher() { + _CLDELETE_ARRAY(searchables); + _CLDELETE_ARRAY(starts); + } + + int32_t* MultiSearcher::getStarts() { + return starts; + } + int32_t MultiSearcher::getLength() { + return searchablesLen; + } + + // inherit javadoc + void MultiSearcher::close() { + for (int32_t i = 0; i < searchablesLen; ++i){ + searchables[i]->close(); + searchables[i]=NULL; + } + } + + int32_t MultiSearcher::docFreq(const Term* term) const { + int32_t docFreq = 0; + for (int32_t i = 0; i < searchablesLen; ++i) + docFreq += searchables[i]->docFreq(term); + return docFreq; + } + + /** For use by {@link HitCollector} implementations. */ + bool MultiSearcher::doc(int32_t n, Document* d) { + int32_t i = subSearcher(n); // find searcher index + return searchables[i]->doc(n - starts[i], d); // dispatch to searcher + } + + int32_t MultiSearcher::searcherIndex(int32_t n) const{ + return subSearcher(n); + } + + /** Returns index of the searcher for document n in the array + * used to construct this searcher. */ + int32_t MultiSearcher::subSearcher(int32_t n) const{ + // replace w/ call to Arrays.binarySearch in Java 1.2 + int32_t lo = 0; // search starts array + int32_t hi = searchablesLen - 1; // for first element less + // than n, return its index + int32_t mid,midValue; + while (hi >= lo) { + mid = (lo + hi) >> 1; + midValue = starts[mid]; + if (n < midValue) + hi = mid - 1; + else if (n > midValue) + lo = mid + 1; + else{ // found a match + while (mid+1 < searchablesLen && starts[mid+1] == midValue) { + ++mid; // scan to last match + } + return mid; + } + } + return hi; + } + + /** Returns the document number of document n within its + * sub-index. */ + int32_t MultiSearcher::subDoc(int32_t n) const{ + return n - starts[subSearcher(n)]; + } + + int32_t MultiSearcher::maxDoc() const{ + return _maxDoc; + } + + TopDocs* MultiSearcher::_search(Query* query, Filter* filter, const int32_t nDocs) { + HitQueue* hq = _CLNEW HitQueue(nDocs); + int32_t totalHits = 0; + TopDocs* docs; + int32_t j; + ScoreDoc* scoreDocs; + for (int32_t i = 0; i < searchablesLen; i++) { // search each searcher + docs = searchables[i]->_search(query, filter, nDocs); + totalHits += docs->totalHits; // update totalHits + scoreDocs = docs->scoreDocs; + for ( j = 0; j scoreDocsLength; ++j) { // merge scoreDocs int_to hq + scoreDocs[j].doc += starts[i]; // convert doc + if ( !hq->insert(scoreDocs[j])) + break; // no more scores > minScore + } + + _CLDELETE(docs); + } + + int32_t scoreDocsLen = hq->size(); + scoreDocs = new ScoreDoc[scoreDocsLen]; + {//MSVC 6 scope fix + for (int32_t i = scoreDocsLen-1; i >= 0; --i) // put docs in array + scoreDocs[i] = hq->pop(); + } + + //cleanup + _CLDELETE(hq); + + return _CLNEW TopDocs(totalHits, scoreDocs, scoreDocsLen); + } + + /** Lower-level search API. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all of the + * matching documents. The high-level search API ({@link + * Searcher#search(Query)}) is usually more efficient, as it skips + * non-high-scoring hits. + * + * @param query to match documents + * @param filter if non-null, a bitset used to eliminate some documents + * @param results to receive hits + */ + void MultiSearcher::_search(Query* query, Filter* filter, HitCollector* results){ + for (int32_t i = 0; i < searchablesLen; ++i) { + /* DSR:CL_BUG: Old implementation leaked and was misconceived. We need + ** to have the original HitCollector ($results) collect *all* hits; + ** the MultiHitCollector instantiated below serves only to adjust + ** (forward by starts[i]) the docNo passed to $results. + ** Old implementation instead created a sort of linked list of + ** MultiHitCollectors that applied the adjustments in $starts + ** cumulatively (and was never deleted). */ + HitCollector *docNoAdjuster = _CLNEW MultiHitCollector(results, starts[i]); + searchables[i]->_search(query, filter, docNoAdjuster); + _CLDELETE(docNoAdjuster); + } + } + + TopFieldDocs* MultiSearcher::_search (Query* query, Filter* filter, const int32_t n, const Sort* sort){ + FieldDocSortedHitQueue* hq = NULL; + int32_t totalHits = 0; + TopFieldDocs* docs; + int32_t j; + FieldDoc** fieldDocs; + + for (int32_t i = 0; i < searchablesLen; ++i) { // search each searcher + docs = searchables[i]->_search (query, filter, n, sort); + if (hq == NULL){ + hq = _CLNEW FieldDocSortedHitQueue (docs->fields, n); + docs->fields = NULL; //hit queue takes fields memory + } + + totalHits += docs->totalHits; // update totalHits + fieldDocs = docs->fieldDocs; + for(j = 0;jscoreDocsLength;++j){ // merge scoreDocs into hq + fieldDocs[j]->scoreDoc.doc += starts[i]; // convert doc + if (!hq->insert (fieldDocs[j]) ) + break; // no more scores > minScore + } + for ( int32_t x=0;xsize(); + fieldDocs = _CL_NEWARRAY(FieldDoc*,hqlen); + for (j = hqlen - 1; j >= 0; j--) // put docs in array + fieldDocs[j] = hq->pop(); + + SortField** hqFields = hq->getFields(); + hq->setFields(NULL); //move ownership of memory over to TopFieldDocs + _CLDELETE(hq); + + return _CLNEW TopFieldDocs (totalHits, fieldDocs, hqlen, hqFields); + } + + Query* MultiSearcher::rewrite(Query* query) { + // this is a bit of a hack. We know that a query which + // creates a Weight based on this Dummy-Searcher is + // always already rewritten (see preparedWeight()). + // Therefore we just return the unmodified query here + return query; + } + + void MultiSearcher::explain(Query* query, int32_t doc, Explanation* ret) { + int32_t i = subSearcher(doc); // find searcher index + searchables[i]->explain(query,doc-starts[i], ret); // dispatch to searcher + } + + MultiHitCollector::MultiHitCollector(HitCollector* _results, int32_t _start): + results(_results), + start(_start) { + } + + void MultiHitCollector::collect(const int32_t doc, const float_t score) { + results->collect(doc + start, score); + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/MultiSearcher.h clucene-core-2.3.3.4/src/core/CLucene/search/MultiSearcher.h --- clucene-core-0.9.21b/src/core/CLucene/search/MultiSearcher.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/MultiSearcher.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,81 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_multisearcher +#define _lucene_search_multisearcher + + +//#include "SearchHeader.h" +#include "Searchable.h" +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + + /** Implements search over a set of Searchables. + * + *

Applications usually need only call the inherited {@link #search(Query)} + * or {@link #search(Query,Filter)} methods. + */ + class CLUCENE_EXPORT MultiSearcher: public Searcher { + private: + Searchable** searchables; + int32_t searchablesLen; + int32_t* starts; + int32_t _maxDoc; + protected: + int32_t* getStarts(); + int32_t getLength(); + public: + /** Creates a searcher which searches Searchables. */ + MultiSearcher(Searchable** searchables); + + ~MultiSearcher(); + + /** Frees resources associated with this Searcher. */ + void close() ; + + int32_t docFreq(const CL_NS(index)::Term* term) const ; + + /** For use by {@link HitCollector} implementations. */ + bool doc(int32_t n, CL_NS(document)::Document* document); + + /** For use by {@link HitCollector} implementations to identify the + * index of the sub-searcher that a particular hit came from. */ + int32_t searcherIndex(int32_t n) const; + + int32_t subSearcher(int32_t n) const; + + int32_t subDoc(int32_t n) const; + + int32_t maxDoc() const; + + TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs) ; + + TopFieldDocs* _search (Query* query, Filter* filter, const int32_t n, const Sort* sort); + + /** Lower-level search API. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all of the + * matching documents. The high-level search API ({@link + * Searcher#search(Query)}) is usually more efficient, as it skips + * non-high-scoring hits. + * + * @param query to match documents + * @param filter if non-null, a bitset used to eliminate some documents + * @param results to receive hits + */ + void _search(Query* query, Filter* filter, HitCollector* results); + + Query* rewrite(Query* original); + void explain(Query* query, int32_t doc, Explanation* ret); + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/MultiTermQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/MultiTermQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/MultiTermQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/MultiTermQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,104 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MultiTermQuery.h" +#include "BooleanQuery.h" +#include "FilteredTermEnum.h" +#include "TermQuery.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + +/** Constructs a query for terms matching term. */ + + MultiTermQuery::MultiTermQuery(Term* t){ + //Func - Constructor + //Pre - t != NULL + //Post - The instance has been created + + CND_PRECONDITION(t != NULL, "t is NULL"); + + term = _CL_POINTER(t); + + } + MultiTermQuery::MultiTermQuery(const MultiTermQuery& clone): + Query(clone) + { + term = _CLNEW Term(clone.getTerm(false),clone.getTerm(false)->text()); + } + + MultiTermQuery::~MultiTermQuery(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + _CLDECDELETE(term); + } + + Term* MultiTermQuery::getTerm(bool pointer) const{ + if ( pointer ) + return _CL_POINTER(term); + else + return term; + } + + Query* MultiTermQuery::rewrite(IndexReader* reader) { + FilteredTermEnum* enumerator = getEnum(reader); + BooleanQuery* query = _CLNEW BooleanQuery( true ); + try { + do { + Term* t = enumerator->term(false); + if (t != NULL) { + TermQuery* tq = _CLNEW TermQuery(t); // found a match + tq->setBoost(getBoost() * enumerator->difference()); // set the boost + query->add(tq,true, false, false); // add to q + } + } while (enumerator->next()); + } _CLFINALLY ( enumerator->close(); _CLDELETE(enumerator) ); + + //if we only added one clause and the clause is not prohibited then + //we can just return the query + if (query->getClauseCount() == 1) { // optimize 1-clause queries + BooleanClause* c=0; + query->getClauses(&c); + + if (!c->prohibited) { // just return clause + c->deleteQuery=false; + Query* ret = c->getQuery(); + + _CLDELETE(query); + return ret; + } + } + return query; + } + + Query* MultiTermQuery::combine(CL_NS(util)::ArrayBase* queries) { + return Query::mergeBooleanQueries(queries); + } + + /** Prints a user-readable version of this query. */ + TCHAR* MultiTermQuery::toString(const TCHAR* field) const{ + StringBuffer buffer; + + if ( field==NULL || _tcscmp(term->field(),field)!=0 ) { + buffer.append(term->field()); + buffer.append( _T(":")); + } + buffer.append(term->text()); + // todo: use ToStringUtils.boost() + if (getBoost() != 1.0f) { + buffer.appendChar ( '^' ); + buffer.appendFloat( getBoost(),1); + } + return buffer.toString(); + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/MultiTermQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/MultiTermQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/MultiTermQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/MultiTermQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,62 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_MultiTermQuery_ +#define _lucene_search_MultiTermQuery_ + + +CL_CLASS_DEF(util,StringBuffer) +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,FilteredTermEnum) +CL_CLASS_DEF(index,IndexReader) +//#include "CLucene/index/Terms.h" +//#include "FilteredTermEnum.h" +//#include "SearchHeader.h" +//#include "BooleanQuery.h" +//#include "TermQuery.h" +#include "Query.h" + +CL_NS_DEF(search) + /** + * A {@link lucene::search::Query} that matches documents containing a subset of terms provided + * by a {@link lucene::search::FilteredTermEnum} enumeration. + *

+ * MultiTermQuery is not designed to be used by itself. + *
+ * The reason being that it is not intialized with a {@link FilteredTermEnum} + * enumeration. A {@link FilteredTermEnum} enumeration needs to be provided. + *

+ * For example, {@link WildcardQuery} and {@link FuzzyQuery} extend + * MultiTermQuery to provide {@link WildcardTermEnum} and + * {@link FuzzyTermEnum}, respectively. + */ + class CLUCENE_EXPORT MultiTermQuery: public Query { + private: + CL_NS(index)::Term* term; + protected: + MultiTermQuery(const MultiTermQuery& clone); + + /** Construct the enumeration to be used, expanding the pattern term. */ + virtual FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader) = 0; + public: + /** Constructs a query for terms matching term. */ + MultiTermQuery(CL_NS(index)::Term* t); + + virtual ~MultiTermQuery(); + + /** Returns the pattern term. */ + CL_NS(index)::Term* getTerm(bool pointer=true) const; + + Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + virtual Query* rewrite(CL_NS(index)::IndexReader* reader); + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/PhrasePositions.cpp clucene-core-2.3.3.4/src/core/CLucene/search/PhrasePositions.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/PhrasePositions.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/PhrasePositions.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,114 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_PhrasePositions.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + +PhrasePositions::PhrasePositions(TermPositions* t, const int32_t OffSet) { + //Func - Constructor + //Pre - t != NULL + // OffSet != NULL + //Post - The instance has been created + + CND_PRECONDITION(t != NULL,"Tp is NULL"); + CND_PRECONDITION(OffSet >= 0 ,"OffSet is a negative number"); + + tp = t; + offset = OffSet; + position = 0; + count = 0; + doc = 0; + + _next = NULL; + } + + PhrasePositions::~PhrasePositions(){ + //Func - Destructor + //Pre - true + //Post - The instance has been deleted + + //delete next Phrase position and by doing that + //all PhrasePositions in the list + _CLDELETE(_next); + + //Check if tp is valid + if ( tp != NULL ){ + //Close TermPositions tp + tp->close(); + _CLDELETE(tp); + } + } + + bool PhrasePositions::next(){ + //Func - Increments to next doc + //Pre - tp != NULL + //Post - if there was no next then doc = INT_MAX otherwise + // doc contains the current document number + + CND_PRECONDITION(tp != NULL,"tp is NULL"); + + //Move to the next in TermPositions tp + if (!tp->next()) { + //There is no next so close the stream + tp->close(); + //delete tp and reset tp to NULL + _CLVDELETE(tp); //todo: not a clucene object... should be + //Assign Doc sentinel value + doc = LUCENE_INT32_MAX_SHOULDBE; + return false; + }else{ + doc = tp->doc(); + position = 0; + return true; + } + } + bool PhrasePositions::skipTo(int32_t target){ + if (!tp->skipTo(target)) { + tp->close(); // close stream + doc = LUCENE_INT32_MAX_SHOULDBE; // sentinel value + return false; + } + doc = tp->doc(); + position = 0; + return true; + } + void PhrasePositions::firstPosition(){ + //Func - Read the first TermPosition + //Pre - tp != NULL + //Post - + + CND_PRECONDITION(tp != NULL,"tp is NULL"); + + //read first pos + count = tp->freq(); + //Move to the next TermPosition + nextPosition(); + } + + bool PhrasePositions::nextPosition(){ + //Func - Move to the next position + //Pre - tp != NULL + //Post - + + CND_PRECONDITION(tp != NULL,"tp is NULL"); + + if (count-- > 0) { + //read subsequent pos's + position = tp->nextPosition() - offset; + + //Check position always bigger than or equal to 0 + //bvk: todo, bug??? position < 0 occurs, cant figure out why, + //old version does it too and will fail the "SearchTest" test + //CND_CONDITION(position >= 0, "position has become a negative number"); + return true; + }else{ + return false; + } + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_PhrasePositions.h clucene-core-2.3.3.4/src/core/CLucene/search/_PhrasePositions.h --- clucene-core-0.9.21b/src/core/CLucene/search/_PhrasePositions.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_PhrasePositions.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,44 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_PhrasePositions_ +#define _lucene_search_PhrasePositions_ + +#include "CLucene/index/Terms.h" + +CL_NS_DEF(search) + +/** + * Position of a term in a document that takes into account the term offset within the phrase. + */ +class PhrasePositions:LUCENE_BASE { +public: + int32_t doc; // current doc + int32_t position; // position in doc + int32_t count; // remaining pos in this doc + int32_t offset; // position in phrase + CL_NS(index)::TermPositions* tp; // stream of positions + PhrasePositions* _next; // used to make lists + bool repeats; // there's other pp for same term (e.g. query="1st word 2nd word"~1) + + PhrasePositions(CL_NS(index)::TermPositions* Tp, const int32_t o); + ~PhrasePositions(); + + bool next(); + bool skipTo(int32_t target); + + void firstPosition(); + + /** + * Go to next location of this term current document, and set + * position as location - offset, so that a + * matching exact phrase is easily identified when all PhrasePositions + * have exactly the same position. + */ + bool nextPosition(); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/PhraseQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/PhraseQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/PhraseQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/PhraseQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,485 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "PhraseQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Similarity.h" +#include "Searchable.h" +#include "Explanation.h" + +#include "CLucene/index/_Term.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" + +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/VoidList.h" +#include "CLucene/util/_Arrays.h" + +#include "_ExactPhraseScorer.h" +#include "_SloppyPhraseScorer.h" + +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + + + class PhraseWeight: public Weight { + private: + Searcher* searcher; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + PhraseQuery* parentQuery; + public: + PhraseWeight(Searcher* searcher, PhraseQuery* parentQuery); + virtual ~PhraseWeight(); + TCHAR* toString(); + + Query* getQuery(); + float_t getValue(); + + float_t sumOfSquaredWeights(); + void normalize(float_t queryNorm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + TCHAR* toString(TCHAR* f); + bool equals(PhraseWeight* o); + }; + + PhraseQuery::PhraseQuery(): + field(NULL), terms(_CLNEW CL_NS(util)::CLVector(false) ), + positions(_CLNEW CL_NS(util)::CLVector), slop(0) + { + } + + PhraseQuery::PhraseQuery(const PhraseQuery& clone): + Query(clone), + terms(_CLNEW CL_NS(util)::CLVector(false) ), + positions(_CLNEW CL_NS(util)::CLVector) + { + slop = clone.slop; + field = clone.field; + int32_t size=clone.positions->size(); + { //msvc6 scope fix + for ( int32_t i=0;ipositions->push_back( n ); + } + } + size=clone.terms->size(); + { //msvc6 scope fix + for ( int32_t i=0;iterms->push_back( _CL_POINTER((*clone.terms)[i])); + } + } + } + Query* PhraseQuery::clone() const{ + return _CLNEW PhraseQuery(*this); + } + + const TCHAR* PhraseQuery::getFieldName() const{ return field; } + + void PhraseQuery::setSlop(const int32_t s) { slop = s; } + int32_t PhraseQuery::getSlop() const { return slop; } + + bool PhraseQuery::equals(CL_NS(search)::Query *other) const{ + if (!(other->instanceOf(PhraseQuery::getClassName()))) + return false; + + PhraseQuery* pq = (PhraseQuery*)other; + bool ret = (this->getBoost() == pq->getBoost()) && (this->slop == pq->slop); + + if ( ret ){ + CLListEquals, + const CL_NS(util)::CLVector > comp; + ret = comp.equals(this->terms,pq->terms); + } + + if ( ret ){ + CLListEquals, + const CL_NS(util)::CLVector > comp; + ret = comp.equals(this->positions,pq->positions); + } + return ret; + } + + + PhraseQuery::~PhraseQuery(){ + //Func - Destructor + //Pre - true + //Post 0 The instance has been destroyed + + //Iterate through all the terms + for (size_t i = 0; i < terms->size(); i++){ + _CLLDECDELETE((*terms)[i]); + } + _CLLDELETE(terms); + _CLLDELETE(positions); + } + + size_t PhraseQuery::hashCode() const { + //todo: do cachedHashCode, and invalidate on add/remove clause + size_t ret = Similarity::floatToByte(getBoost()) ^ Similarity::floatToByte(slop); + + { //msvc6 scope fix + for ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*terms)[i]->hashCode(); + } + { //msvc6 scope fix + for ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*positions)[i]; + } + return ret; + } + + const char* PhraseQuery::getClassName(){ + return "PhraseQuery"; + } + const char* PhraseQuery::getObjectName() const{ + //Func - Returns the string "PhraseQuery" + //Pre - true + //Post - The string "PhraseQuery" has been returned + return getClassName(); + } + + void PhraseQuery::add(Term* term) { + CND_PRECONDITION(term != NULL,"term is NULL"); + + int32_t position = 0; + + if(positions->size() > 0) + position = ((*positions)[positions->size()-1]) + 1; + + add(term, position); + } + + void PhraseQuery::add(Term* term, int32_t position) { + + CND_PRECONDITION(term != NULL,"term is NULL"); + + if (terms->size() == 0) + field = term->field(); + else{ + //Check if the field of the _CLNEW term matches the field of the PhraseQuery + //can use != because fields are interned + if ( term->field() != field){ + TCHAR buf[200]; + _sntprintf(buf,200,_T("All phrase terms must be in the same field: %s"),term->field()); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + } + } + + //Store the _CLNEW term + terms->push_back(_CL_POINTER(term)); + positions->push_back(position); + } + + void PhraseQuery::getPositions(ValueArray& result) const{ + result.length = positions->size(); + result.values = _CL_NEWARRAY(int32_t,result.length); + for(size_t i = 0; i < result.length; i++){ + result.values[i] = (*positions)[i]; + } + } + + Weight* PhraseQuery::_createWeight(Searcher* searcher) { + if (terms->size() == 1) { // optimize one-term case + Term* term = (*terms)[0]; + Query* termQuery = _CLNEW TermQuery(term); + termQuery->setBoost(getBoost()); + Weight* ret = termQuery->_createWeight(searcher); + _CLLDELETE(termQuery); + return ret; + } + return _CLNEW PhraseWeight(searcher,this); + } + + + Term** PhraseQuery::getTerms() const{ + //Func - added by search highlighter + + //Let size contain the number of terms + int32_t size = terms->size(); + Term** ret = _CL_NEWARRAY(Term*,size+1); + + CND_CONDITION(ret != NULL,"Could not allocated memory for ret"); + + //Iterate through terms and copy each pointer to ret + for ( int32_t i=0;isize()== 0 ) + return NULL; + + StringBuffer buffer(32); + if ( f==NULL || _tcscmp(field,f)!=0) { + buffer.append(field); + buffer.appendChar(_T(':')); + } + + buffer.appendChar( _T('"') ); + + Term *T = NULL; + + //iterate through all terms + for (size_t i = 0; i < terms->size(); i++) { + //Get the i-th term + T = (*terms)[i]; + + buffer.append( T->text() ); + //Check if i is at the end of terms + if (i != terms->size()-1){ + buffer.appendChar(_T(' ')); + } + } + buffer.appendChar( _T('"') ); + + if (slop != 0) { + buffer.appendChar(_T('~')); + buffer.appendFloat(slop, 0); + } + + buffer.appendBoost(getBoost()); + + return buffer.giveBuffer(); + } + +void PhraseQuery::extractTerms( TermSet * termset ) const +{ + for( size_t i = 0; i < terms->size(); i++ ) + { + Term * pTerm = (*terms)[i]; + if( pTerm && termset->end() == termset->find( pTerm )) + termset->insert( _CL_POINTER( pTerm )); + } +} + + + PhraseWeight::PhraseWeight(Searcher* searcher, PhraseQuery* _parentQuery) { + this->parentQuery=_parentQuery; + this->value = 0; + this->idf = 0; + this->queryNorm = 0; + this->queryWeight = 0; + this->searcher = searcher; + } + + TCHAR* PhraseWeight::toString() { + return STRDUP_TtoT(_T("weight(PhraseQuery)")); + } + PhraseWeight::~PhraseWeight(){ + } + + + Query* PhraseWeight::getQuery() { return parentQuery; } + float_t PhraseWeight::getValue() { return value; } + + float_t PhraseWeight::sumOfSquaredWeights(){ + idf = parentQuery->getSimilarity(searcher)->idf(parentQuery->terms, searcher); + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void PhraseWeight::normalize(float_t queryNorm) { + this->queryNorm = queryNorm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* PhraseWeight::scorer(IndexReader* reader) { + //Func - + //Pre - + //Post - + + //Get the length of terms + const int32_t tpsLength = (const int32_t)parentQuery->terms->size(); + + //optimize zero-term case + if (tpsLength == 0) + return NULL; + + TermPositions** tps = _CL_NEWARRAY(TermPositions*,tpsLength+1); + + //Check if tps has been allocated properly + CND_CONDITION(tps != NULL,"Could not allocate memory for tps"); + + TermPositions* p = NULL; + + //Iterate through all terms + for (int32_t i = 0; i < tpsLength; i++) { + //Get the termPostitions for the i-th term + p = reader->termPositions((*parentQuery->terms)[i]); + + //Check if p is valid + if (p == NULL) { + //Delete previous retrieved termPositions + while (--i >= 0){ + _CLVDELETE(tps[i]); //todo: not a clucene object... should be + } + _CLDELETE_ARRAY(tps); + return NULL; + } + + //Store p at i in tps + tps[i] = p; + } + tps[tpsLength] = NULL; + + Scorer* ret = NULL; + + ValueArray positions; + parentQuery->getPositions(positions); + int32_t slop = parentQuery->getSlop(); + if ( slop != 0) + // optimize exact case + //todo: need to pass these: this, tps, + ret = _CLNEW SloppyPhraseScorer(this,tps,positions.values, + parentQuery->getSimilarity(searcher), + slop, reader->norms(parentQuery->field)); + else + ret = _CLNEW ExactPhraseScorer(this, tps, positions.values, + parentQuery->getSimilarity(searcher), + reader->norms(parentQuery->field)); + positions.deleteArray(); + + CND_CONDITION(ret != NULL,"Could not allocate memory for ret"); + + //tps can be deleted safely. SloppyPhraseScorer or ExactPhraseScorer will take care + //of its values + + _CLDELETE_LARRAY(tps); + return ret; + } + + Explanation* PhraseWeight::explain(IndexReader* reader, int32_t doc){ + Explanation* result = _CLNEW Explanation(); + TCHAR descbuf[LUCENE_SEARCH_EXPLANATION_DESC_LEN+1]; + TCHAR* tmp; + + tmp = getQuery()->toString(); + _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,_T("weight(%s in %d), product of:"), + tmp,doc); + _CLDELETE_LCARRAY(tmp); + result->setDescription(descbuf); + + StringBuffer docFreqs; + StringBuffer query; + query.appendChar('"'); + for (size_t i = 0; i < parentQuery->terms->size(); i++) { + if (i != 0) { + docFreqs.appendChar(' '); + query.appendChar(' '); + } + + Term* term = (*parentQuery->terms)[i]; + + docFreqs.append(term->text()); + docFreqs.appendChar('='); + docFreqs.appendInt(searcher->docFreq(term)); + + query.append(term->text()); + } + query.appendChar('\"'); + + _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("idf(%s: %s)"),parentQuery->field,docFreqs.getBuffer()); + Explanation* idfExpl = _CLNEW Explanation(idf, descbuf); + + // explain query weight + Explanation* queryExpl = _CLNEW Explanation(); + tmp = getQuery()->toString(); + _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("queryWeight(%s), product of:"),tmp); + _CLDELETE_LCARRAY(tmp); + queryExpl->setDescription(descbuf); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + bool deleteBoostExpl = false; + if (parentQuery->getBoost() != 1.0f) + queryExpl->addDetail(boostExpl); + else + deleteBoostExpl = true; + queryExpl->addDetail(idfExpl); + + Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); + queryExpl->addDetail(queryNormExpl); + + queryExpl->setValue(boostExpl->getValue() * + idfExpl->getValue() * + queryNormExpl->getValue()); + + if (deleteBoostExpl) + _CLLDELETE(boostExpl); + + result->addDetail(queryExpl); + + // explain field weight + Explanation* fieldExpl = _CLNEW Explanation(); + _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("fieldWeight(%s:%s in %d), product of:"), + parentQuery->field,query.getBuffer(),doc); + fieldExpl->setDescription(descbuf); + + + Scorer* sc = scorer(reader); + Explanation* tfExpl = sc->explain(doc); + _CLLDELETE(sc); + fieldExpl->addDetail(tfExpl); + fieldExpl->addDetail( _CLNEW Explanation(idfExpl->getValue(), idfExpl->getDescription()) ); + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(parentQuery->field); + float_t fieldNorm = + fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; + fieldNormExpl->setValue(fieldNorm); + + + _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("fieldNorm(field=%s, doc=%d)"),parentQuery->field,doc); + fieldNormExpl->setDescription(descbuf); + fieldExpl->addDetail(fieldNormExpl); + + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + result->addDetail(fieldExpl); + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + return result; + } + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/PhraseQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/PhraseQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/PhraseQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/PhraseQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,107 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_PhraseQuery_ +#define _lucene_search_PhraseQuery_ + +#include "Query.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,Scorer) +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + /** A Query that matches documents containing a particular sequence of terms. + * A PhraseQuery is built by QueryParser for input like "new york". + * + *

This query may be combined with other terms or queries with a {@link BooleanQuery}. + */ + class CLUCENE_EXPORT PhraseQuery: public Query { + private: + const TCHAR* field; + CL_NS(util)::CLVector* terms; + CL_NS(util)::CLVector* positions; + int32_t slop; + + friend class PhraseWeight; + protected: + Weight* _createWeight(Searcher* searcher); + PhraseQuery(const PhraseQuery& clone); + public: + /** Constructs an empty phrase query. */ + PhraseQuery(); + virtual ~PhraseQuery(); + + /** Sets the number of other words permitted between words in query phrase. + If zero, then this is an exact phrase search. For larger values this works + like a WITHIN or NEAR operator. + +

The slop is in fact an edit-distance, where the units correspond to + moves of terms in the query phrase out of position. For example, to switch + the order of two words requires two moves (the first move places the words + atop one another), so to permit re-orderings of phrases, the slop must be + at least two. + +

More exact matches are scored higher than sloppier matches, thus search + results are sorted by exactness. + +

The slop is zero by default, requiring exact matches.*/ + void setSlop(const int32_t s); + + /** Returns the slop. See setSlop(). */ + int32_t getSlop() const; + + /** + * Adds a term to the end of the query phrase. + * The relative position of the term is the one immediately after the last term added. + */ + void add(CL_NS(index)::Term* term); + + /** + * Adds a term to the end of the query phrase. + * The relative position of the term within the phrase is specified explicitly. + * This allows e.g. phrases with more than one term at the same position + * or phrases with gaps (e.g. in connection with stopwords). + * + * @param term + * @param position + */ + void add(CL_NS(index)::Term* term, int32_t position); + + /** Returns the set of terms in this phrase. */ + CL_NS(index)::Term** getTerms() const; + + /** + * Returns the relative positions of terms in this phrase. + */ + void getPositions(CL_NS(util)::ValueArray& result) const; + + //Returns the sum of squared weights + float_t sumOfSquaredWeights(Searcher* searcher); + + //Normalizes the Weight + void normalize(const float_t norm); + + Scorer* scorer(CL_NS(index)::IndexReader* reader); + + const TCHAR* getFieldName() const; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* f) const; + + Query* clone() const; + bool equals(Query *) const; + + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(); + + /** Expert: adds all terms occurring in this query to the terms set. */ + void extractTerms( TermSet * termset ) const; + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_PhraseQueue.h clucene-core-2.3.3.4/src/core/CLucene/search/_PhraseQueue.h --- clucene-core-0.9.21b/src/core/CLucene/search/_PhraseQueue.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_PhraseQueue.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,38 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_PhraseQueue_ +#define _lucene_search_PhraseQueue_ + + +#include "CLucene/util/PriorityQueue.h" +#include "_PhrasePositions.h" + +CL_NS_DEF(search) + class PhraseQueue: public CL_NS(util)::PriorityQueue > { + public: + PhraseQueue(const int32_t size) { + initialize(size,false); + } + virtual ~PhraseQueue(){ + } + + protected: + bool lessThan(PhrasePositions* pp1, PhrasePositions* pp2) { + if (pp1->doc == pp2->doc){ + if (pp1->position == pp2->position) + // same doc and pp.position, so decide by actual term positions. + // rely on: pp.position == tp.position - offset. + return pp1->offset < pp2->offset; + else + return pp1->position < pp2->position; + }else + return pp1->doc < pp2->doc; + } + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/PhraseScorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/PhraseScorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/PhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/PhraseScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,223 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Scorer.h" +#include "Explanation.h" +#include "Similarity.h" +#include "SearchHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/Terms.h" +#include "_PhraseQueue.h" +#include "_PhraseScorer.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + + PhraseScorer::PhraseScorer(Weight* _weight, TermPositions** tps, + int32_t* offsets, Similarity* similarity, uint8_t* _norms): + Scorer(similarity), weight(_weight), norms(_norms), value(_weight->getValue()), firstTime(true), more(true), freq(0.0f), + first(NULL), last(NULL) + { + //Func - Constructor + //Pre - tps != NULL and is an array of TermPositions + // tpsLength >= 0 + // n != NULL + //Post - The instance has been created + + CND_PRECONDITION(tps != NULL,"tps is NULL"); + + // convert tps to a list of phrase positions. + // note: phrase-position differs from term-position in that its position + // reflects the phrase offset: pp.pos = tp.pos - offset. + // this allows to easily identify a matching (exact) phrase + // when all PhrasePositions have exactly the same position. + int32_t i = 0; + while(tps[i] != NULL){ + PhrasePositions *pp = _CLNEW PhrasePositions(tps[i], offsets[i]); + CND_CONDITION(pp != NULL,"Could not allocate memory for pp"); + + //Store PhrasePos into the PhrasePos pq + if (last != NULL) { // add next to end of list + last->_next = pp; + } else + first = pp; + last = pp; + + i++; + } + + pq = _CLNEW PhraseQueue(i); //i==tps.length + CND_CONDITION(pq != NULL,"Could not allocate memory for pq"); + } + + PhraseScorer::~PhraseScorer() { + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + //The PhraseQueue pq (which is a PriorityQueue) pq is actually empty at present, the elements + //having been transferred by pqToList() to the linked list starting with + //first. The nodes of that linked list are deleted by the destructor of + //first, rather than the destructor of pq. + _CLLDELETE(first); + _CLLDELETE(pq); + } + + bool PhraseScorer::next(){ + if (firstTime) { + init(); + firstTime = false; + } else if (more) { + more = last->next(); // trigger further scanning + } + return doNext(); + } + + // next without initial increment + bool PhraseScorer::doNext() { + while (more) { + while (more && first->doc < last->doc) { // find doc w/ all the terms + more = first->skipTo(last->doc); // skip first upto last + firstToLast(); // and move it to the end + } + + if (more) { + // found a doc with all of the terms + freq = phraseFreq(); // check for phrase + if (freq == 0.0f) // no match + more = last->next(); // trigger further scanning + else + return true; // found a match + } + } + return false; // no more matches + } + + float_t PhraseScorer::score(){ + //System.out.println("scoring " + first.doc); + float_t raw = getSimilarity()->tf(freq) * value; // raw score + return raw * Similarity::decodeNorm(norms[first->doc]); // normalize + } + + bool PhraseScorer::skipTo(int32_t target) { + firstTime = false; + for (PhrasePositions* pp = first; more && pp != NULL; pp = pp->_next) { + more = pp->skipTo(target); + } + if (more) + sort(); // re-sort + return doNext(); + } + + void PhraseScorer::init() { + for (PhrasePositions* pp = first; more && pp != NULL; pp = pp->_next) + more = pp->next(); + if(more) + sort(); + } + + void PhraseScorer::sort() { + pq->clear(); + for (PhrasePositions* pp = first; pp != NULL; pp = pp->_next) + pq->put(pp); + pqToList(); + } + + void PhraseScorer::pqToList(){ + //Func - Transfers the PhrasePositions from the PhraseQueue pq to + // the PhrasePositions list with first as its first element + //Pre - pq != NULL + // first = NULL + // last = NULL + //Post - All PhrasePositions have been transfered to the list + // of PhrasePositions of which the first element is pointed to by first + // and the last element is pointed to by last + + CND_PRECONDITION(pq != NULL,"pq is NULL"); + + last = first = NULL; + + PhrasePositions* PhrasePos = NULL; + + //As long pq is not empty + while (pq->top() != NULL){ + //Pop a PhrasePositions instance + PhrasePos = pq->pop(); + + // add next to end of list + if (last != NULL) { + last->_next = PhrasePos; + } else { + first = PhrasePos; + } + + //Let last point to the new last PhrasePositions instance just added + last = PhrasePos; + //Reset the next of last to NULL + last->_next = NULL; + } + + //Check to see that pq is empty now + CND_CONDITION(pq->size()==0, "pq is not empty while it should be"); + } + + void PhraseScorer::firstToLast(){ + //Func - Moves first to the end of the list + //Pre - first is NULL or points to an PhrasePositions Instance + // last is NULL or points to an PhrasePositions Instance + // first and last both are NULL or both are not NULL + //Post - The first element has become the last element in the list + + CND_PRECONDITION(((first==NULL && last==NULL) ||(first !=NULL && last != NULL)), + "Either first or last is NULL but not both"); + + //Check if first and last are valid pointers + if(first && last){ + last->_next = first; + last = first; + first = first->_next; + last->_next = NULL; + } + } + + + Explanation* PhraseScorer::explain(int32_t _doc) { + Explanation* tfExplanation = _CLNEW Explanation(); + + while (next() && doc() < _doc){ + } + + float_t phraseFreq = (doc() == _doc) ? freq : 0.0f; + tfExplanation->setValue(getSimilarity()->tf(phraseFreq)); + + StringBuffer buf; + buf.append(_T("tf(phraseFreq=")); + buf.appendFloat(phraseFreq,2); + buf.append(_T(")")); + tfExplanation->setDescription(buf.getBuffer()); + + return tfExplanation; + } + + TCHAR* PhraseScorer::toString() { + StringBuffer buf; + buf.append(_T("scorer(")); + + TCHAR* tmp = weight->toString(); + buf.append(tmp); + _CLDELETE_CARRAY(tmp); + + buf.append(_T(")")); + + return buf.toString(); + } + + int32_t PhraseScorer::doc() const { return first->doc; } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_PhraseScorer.h clucene-core-2.3.3.4/src/core/CLucene/search/_PhraseScorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/_PhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_PhraseScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_PhraseScorer_ +#define _lucene_search_PhraseScorer_ + +#include "_PhraseQueue.h" +#include "Scorer.h" + +CL_NS_DEF(search) + +class Explanation; +/** Expert: Scoring functionality for phrase queries. +*
A document is considered matching if it contains the phrase-query terms +* at "valid" positons. What "valid positions" are +* depends on the type of the phrase query: for an exact phrase query terms are required +* to appear in adjacent locations, while for a sloppy phrase query some distance between +* the terms is allowed. The abstract method {@link #phraseFreq()} of extending classes +* is invoked for each document containing all the phrase query terms, in order to +* compute the frequency of the phrase query in that document. A non zero frequency +* means a match. +*/ +class PhraseScorer: public Scorer { +private: + Weight* weight; +protected: + uint8_t* norms; + float_t value; +private: + bool firstTime; + bool more; +protected: + float_t freq; //phrase frequency in current doc as computed by phraseFreq(). + + PhraseQueue* pq; //is used to order the list point to by first and last + PhrasePositions* first; //Points to the first in the list of PhrasePositions + PhrasePositions* last; //Points to the last in the list of PhrasePositions + +public: + //Constructor + PhraseScorer(Weight* _weight, CL_NS(index)::TermPositions** tps, + int32_t* offsets, Similarity* similarity, uint8_t* _norms); + virtual ~PhraseScorer(); + + int32_t doc() const; + bool next(); + float_t score(); + bool skipTo(int32_t target); + + + Explanation* explain(int32_t doc); + virtual TCHAR* toString(); +protected: + /** + * For a document containing all the phrase query terms, compute the + * frequency of the phrase in that document. + * A non zero frequency means a match. + *
Note, that containing all phrase terms does not guarantee a match - they have to be found in matching locations. + * @return frequency of the phrase in current doc, 0 if not found. + */ + virtual float_t phraseFreq() =0; + + //Transfers the PhrasePositions from the PhraseQueue pq to + //the PhrasePositions list with first as its first element + void pqToList(); + + //Moves first to the end of the list + void firstToLast(); +private: + bool doNext(); + void init(); + void sort(); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/PrefixQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/PrefixQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/PrefixQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/PrefixQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,311 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "Similarity.h" +#include "PrefixQuery.h" +#include "BooleanClause.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_DEF(search) + + PrefixQuery::PrefixQuery(Term* Prefix){ + //Func - Constructor. + // Constructs a query for terms starting with prefix + //Pre - Prefix != NULL + //Post - The instance has been created + + //Get a pointer to Prefix + prefix = _CL_POINTER(Prefix); + } + + PrefixQuery::PrefixQuery(const PrefixQuery& clone):Query(clone){ + prefix = _CL_POINTER(clone.prefix); + } + Query* PrefixQuery::clone() const{ + return _CLNEW PrefixQuery(*this); + } + + Term* PrefixQuery::getPrefix(bool pointer){ + if ( pointer ) + return _CL_POINTER(prefix); + else + return prefix; + } + + PrefixQuery::~PrefixQuery(){ + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed. + + //Delete prefix by finalizing it + _CLDECDELETE(prefix); + } + + + /** Returns a hash code value for this object.*/ + size_t PrefixQuery::hashCode() const { + return Similarity::floatToByte(getBoost()) ^ prefix->hashCode(); + } + + const char* PrefixQuery::getObjectName()const{ + //Func - Returns the name "PrefixQuery" + //Pre - true + //Post - The string "PrefixQuery" has been returned + + return getClassName(); + } + const char* PrefixQuery::getClassName(){ + //Func - Returns the name "PrefixQuery" + //Pre - true + //Post - The string "PrefixQuery" has been returned + + return "PrefixQuery"; + } + + bool PrefixQuery::equals(Query * other) const{ + if (!(other->instanceOf(PrefixQuery::getClassName()))) + return false; + + PrefixQuery* rq = (PrefixQuery*)other; + bool ret = (this->getBoost() == rq->getBoost()) + && (this->prefix->equals(rq->prefix)); + + return ret; + } + + Query* PrefixQuery::rewrite(IndexReader* reader){ + BooleanQuery* query = _CLNEW BooleanQuery( true ); + TermEnum* enumerator = reader->terms(prefix); + Term* lastTerm = NULL; + try { + const TCHAR* prefixText = prefix->text(); + const TCHAR* prefixField = prefix->field(); + const TCHAR* tmp; + size_t i; + size_t prefixLen = prefix->textLength(); + do { + lastTerm = enumerator->term(); + if (lastTerm != NULL && + lastTerm->field() == prefixField ) // interned comparison + { + + //now see if term->text() starts with prefixText + size_t termLen = lastTerm->textLength(); + if ( prefixLen>termLen ) + break; //the prefix is longer than the term, can't be matched + + tmp = lastTerm->text(); + + //check for prefix match in reverse, since most change will be at the end + for ( i=prefixLen-1;i!=-1;--i ){ + if ( tmp[i] != prefixText[i] ){ + tmp=NULL;//signals inequality + break; + } + } + if ( tmp == NULL ) + break; + + TermQuery* tq = _CLNEW TermQuery(lastTerm); // found a match + tq->setBoost(getBoost()); // set the boost + query->add(tq,true,false, false); // add to query + } else + break; + _CLDECDELETE(lastTerm); + } while (enumerator->next()); + }_CLFINALLY( + enumerator->close(); + _CLDELETE(enumerator); + _CLDECDELETE(lastTerm); + ); + _CLDECDELETE(lastTerm); + + + //if we only added one clause and the clause is not prohibited then + //we can just return the query + if (query->getClauseCount() == 1) { // optimize 1-clause queries + BooleanClause* c=0; + query->getClauses(&c); + + if (!c->prohibited) { // just return clause + c->deleteQuery=false; + Query* ret = c->getQuery(); + + _CLDELETE(query); + return ret; + } + } + + return query; + } + + Query* PrefixQuery::combine(CL_NS(util)::ArrayBase* queries) { + return Query::mergeBooleanQueries(queries); + } + + TCHAR* PrefixQuery::toString(const TCHAR* field) const{ + //Func - Creates a user-readable version of this query and returns it as as string + //Pre - field != NULL + //Post - a user-readable version of this query has been returned as as string + + //Instantiate a stringbuffer buffer to store the readable version temporarily + CL_NS(util)::StringBuffer buffer; + //check if field equal to the field of prefix + if( field==NULL || + _tcscmp(prefix->field(),field) != 0 ) { + //Append the field of prefix to the buffer + buffer.append(prefix->field()); + //Append a colon + buffer.append(_T(":") ); + } + //Append the text of the prefix + buffer.append(prefix->text()); + //Append a wildchar character + buffer.append(_T("*")); + //if the boost factor is not eaqual to 1 + if (getBoost() != 1.0f) { + //Append ^ + buffer.append(_T("^")); + //Append the boost factor + buffer.appendFloat( getBoost(),1); + } + //Convert StringBuffer buffer to TCHAR block and return it + return buffer.toString(); + } + + + + + +//todo: this needs to be exposed, but java is still a bit confused about how... +class PrefixFilter::PrefixGenerator{ + const Term* prefix; +public: + PrefixGenerator(const Term* prefix){ + this->prefix = prefix; + } + virtual ~PrefixGenerator(){ + } + + virtual void handleDoc(int doc) = 0; + + void generate(IndexReader* reader) { + TermEnum* enumerator = reader->terms(prefix); + TermDocs* termDocs = reader->termDocs(); + const TCHAR* prefixText = prefix->text(); + const TCHAR* prefixField = prefix->field(); + const TCHAR* tmp; + size_t i; + size_t prefixLen = prefix->textLength(); + Term* term = NULL; + + try{ + do{ + term = enumerator->term(false); + if (term != NULL && + term->field() == prefixField // interned comparison + ){ + //now see if term->text() starts with prefixText + size_t termLen = term->textLength(); + if ( prefixLen>termLen ) + break; //the prefix is longer than the term, can't be matched + + tmp = term->text(); + + //check for prefix match in reverse, since most change will be at the end + for ( i=prefixLen-1;i!=-1;--i ){ + if ( tmp[i] != prefixText[i] ){ + tmp=NULL;//signals inequality + break; + } + } + if ( tmp == NULL ) + break; + + termDocs->seek(enumerator); + while (termDocs->next()) { + handleDoc(termDocs->doc()); + } + } + }while(enumerator->next()); + } _CLFINALLY( + termDocs->close(); + _CLDELETE(termDocs); + enumerator->close(); + _CLDELETE(enumerator); + ) + } +}; + +class DefaultPrefixGenerator: public PrefixFilter::PrefixGenerator{ +public: + BitSet* bts; + DefaultPrefixGenerator(BitSet* bts, const Term* prefix): + PrefixGenerator(prefix) + { + this->bts = bts; + } + virtual ~DefaultPrefixGenerator(){ + } + void handleDoc(int doc) { + bts->set(doc); + } +}; + +PrefixFilter::PrefixFilter( Term* prefix ) +{ + this->prefix = _CL_POINTER(prefix); +} + +PrefixFilter::~PrefixFilter() +{ + _CLDECDELETE(prefix); +} + +PrefixFilter::PrefixFilter( const PrefixFilter& copy ) : + Filter(), + prefix( _CL_POINTER(copy.prefix) ) +{ +} + +Filter* PrefixFilter::clone() const { + return _CLNEW PrefixFilter(*this ); +} + +TCHAR* PrefixFilter::toString() +{ + //Instantiate a stringbuffer buffer to store the readable version temporarily + CL_NS(util)::StringBuffer buffer; + buffer.append(_T("PrefixFilter(")); + buffer.append(prefix->field()); + buffer.append(_T(")")); + + //Convert StringBuffer buffer to TCHAR block and return it + return buffer.toString(); +} + +/** Returns a BitSet with true for documents which should be permitted in +search results, and false for those that should not. */ +BitSet* PrefixFilter::bits( IndexReader* reader ) +{ + BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); + DefaultPrefixGenerator gen(bts, prefix); + gen.generate(reader); + return bts; +} + +CL_NS(index)::Term* PrefixFilter::getPrefix() const { return prefix; } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/PrefixQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/PrefixQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/PrefixQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/PrefixQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,80 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_PrefixQuery +#define _lucene_search_PrefixQuery + +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" +//#include "CLucene/index/IndexReader.h" +//#include "SearchHeader.h" +//#include "BooleanQuery.h" +//#include "TermQuery.h" +#include "Query.h" +#include "Filter.h" +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF(search) +/** A Query that matches documents containing terms with a specified prefix. A PrefixQuery +* is built by QueryParser for input like app*. */ + class CLUCENE_EXPORT PrefixQuery: public Query { + private: + CL_NS(index)::Term* prefix; + protected: + PrefixQuery(const PrefixQuery& clone); + public: + + //Constructor. Constructs a query for terms starting with prefix + PrefixQuery(CL_NS(index)::Term* Prefix); + + //Destructor + ~PrefixQuery(); + + //Returns the name "PrefixQuery" + const char* getObjectName() const; + static const char* getClassName(); + + /** Returns the prefix of this query. */ + CL_NS(index)::Term* getPrefix(bool pointer=true); + + Query* combine(CL_NS(util)::ArrayBase* queries); + Query* rewrite(CL_NS(index)::IndexReader* reader); + Query* clone() const; + bool equals(Query * other) const; + + //Creates a user-readable version of this query and returns it as as string + TCHAR* toString(const TCHAR* field) const; + + size_t hashCode() const; + }; + + + class CLUCENE_EXPORT PrefixFilter: public Filter + { + private: + CL_NS(index)::Term* prefix; + protected: + PrefixFilter( const PrefixFilter& copy ); + public: + class PrefixGenerator; + + PrefixFilter(CL_NS(index)::Term* prefix); + ~PrefixFilter(); + + /** Returns a BitSet with true for documents which should be permitted in + search results, and false for those that should not. */ + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); + + Filter* clone() const; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(); + + // Returns a reference of internal prefix + CL_NS(index)::Term* getPrefix() const; + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/QueryFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/search/QueryFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/QueryFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/QueryFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,88 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryFilter.h" +#include "IndexSearcher.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.h" +#include "SearchHeader.h" +#include "Query.h" + +CL_NS_DEF(search) +CL_NS_USE(util) +CL_NS_USE(index) + + +class QFHitCollector: public HitCollector{ + CL_NS(util)::BitSet* bits; +public: + QFHitCollector(CL_NS(util)::BitSet* bits){ + this->bits = bits; + } + void collect(const int32_t doc, const float_t /*score*/){ + bits->set(doc); // set bit for hit + } +}; + + +QueryFilter::QueryFilter( const Query* query ) +{ + this->query = query->clone(); + bDeleteQuery = true; +} + +QueryFilter::QueryFilter( Query* query, bool bDeleteQuery ) +{ + this->query = query; + this->bDeleteQuery = bDeleteQuery; +} + +QueryFilter::~QueryFilter() +{ + if( bDeleteQuery ) + _CLDELETE( query ); +} + + +QueryFilter::QueryFilter( const QueryFilter& copy ) +{ + this->query = copy.query->clone(); + bDeleteQuery = true; +} + + +Filter* QueryFilter::clone() const { + return _CLNEW QueryFilter(*this ); +} + + +TCHAR* QueryFilter::toString() +{ + TCHAR* qt = query->toString(); + size_t len = _tcslen(qt) + 14; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T("QueryFilter(%s)"), qt ); + _CLDELETE_CARRAY(qt); + return ret; +} + + +/** Returns a BitSet with true for documents which should be permitted in +search results, and false for those that should not. */ +BitSet* QueryFilter::bits( IndexReader* reader ) +{ + BitSet* bits = _CLNEW BitSet(reader->maxDoc()); + + IndexSearcher s(reader); + QFHitCollector hc(bits); + s._search(query, NULL, &hc); + return bits; +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/QueryFilter.h clucene-core-2.3.3.4/src/core/CLucene/search/QueryFilter.h --- clucene-core-0.9.21b/src/core/CLucene/search/QueryFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/QueryFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_QueryFilter_ +#define _lucene_search_QueryFilter_ + +//#include "CLucene/util/BitSet.h" +//#include "CLucene/index/IndexReader.h" +//#include "SearchHeader.h" +#include "Filter.h" +CL_CLASS_DEF(search,Query) +//#include "CachingWrapperFilter.h" + +CL_NS_DEF(search) + +class CLUCENE_EXPORT QueryFilter: public Filter +{ +private: + Query* query; + bool bDeleteQuery; +protected: + QueryFilter( const QueryFilter& copy ); +public: + QueryFilter( const Query* query ); + QueryFilter( Query* query, bool bDeleteQuery ); + + ~QueryFilter(); + + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); + + Filter *clone() const; + + TCHAR *toString(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Query.h clucene-core-2.3.3.4/src/core/CLucene/search/Query.h --- clucene-core-0.9.21b/src/core/CLucene/search/Query.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Query.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,154 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Query_h +#define _lucene_search_Query_h + + +#include "CLucene/util/Array.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/Equators.h" + +CL_CLASS_DEF(index,IndexReader) + + +CL_NS_DEF(search) + class Weight; + class Similarity; + class Searcher; + + typedef std::set TermSet; + + /** The abstract base class for queries. +

Instantiable subclasses are: +

    +
  • {@link TermQuery} +
  • {@link MultiTermQuery} +
  • {@link BooleanQuery} +
  • {@link WildcardQuery} +
  • {@link PhraseQuery} +
  • {@link PrefixQuery} +
  • {@link PhrasePrefixQuery} +
  • {@link FuzzyQuery} +
  • {@link RangeQuery} +
  • {@link spans.SpanQuery} +
+

A parser for queries is contained in: +

    +
  • {@link queryParser.QueryParser QueryParser} +
+ */ + class CLUCENE_EXPORT Query : public CL_NS(util)::NamedObject { + private: + // query boost factor + float_t boost; + protected: + Query(); + Query(const Query& clone); + public: + virtual ~Query(); + + /** Sets the boost for this query clause to b. Documents + * matching this clause will (in addition to the normal weightings) have + * their score multiplied by b. + */ + void setBoost(float_t b); + + /** Gets the boost for this clause. Documents matching + * this clause will (in addition to the normal weightings) have their score + * multiplied by b. The boost is 1.0 by default. + */ + float_t getBoost() const; + + /** Expert: Constructs an initializes a Weight for a top-level query. */ + Weight* weight(Searcher* searcher); + + /** Expert: called to re-write queries into primitive queries. + * + * @memory: + * The caller has to clean up. When rewrite() returns a pointer which + * differs from the pointer to the initial query, the pointer points + * to a newly allocated object and has also to be cleaned up. */ + virtual Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Expert: called when re-writing queries under MultiSearcher. + * + * Create a single query suitable for use by all subsearchers (in 1-1 + * correspondence with queries). This is an optimization of the OR of + * all queries. We handle the common optimization cases of equal + * queries and overlapping clauses of boolean OR queries (as generated + * by MultiTermQuery.rewrite() and RangeQuery.rewrite()). + * Be careful overriding this method as queries[0] determines which + * method will be called and is not necessarily of the same type as + * the other queries. + */ + virtual Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Expert: adds all terms occurring in this query to the terms set. Only + * works if this query is in its {@link #rewrite rewritten} form. + * + * @memory: + * CLucene specific - all terms in the list have their reference counter + * increased by one. + * + * @throws CLuceneError with CL_ERR_UnsupportedOperation + */ + virtual void extractTerms( TermSet * termset ) const; + + /** Expert: merges the clauses of a set of BooleanQuery's into a single + * BooleanQuery. + * + *

A utility for use by {@link #combine(Query[])} implementations. + */ + static Query* mergeBooleanQueries(CL_NS(util)::ArrayBase* queries); + + /** Expert: Returns the Similarity implementation to be used for this query. + * Subclasses may override this method to specify their own Similarity + * implementation, perhaps one that delegates through that of the Searcher. + * By default the Searcher's Similarity implementation is returned.*/ + Similarity* getSimilarity(Searcher* searcher); + + /** Returns a clone of this query. */ + virtual Query* clone() const = 0; + _CL_DEPRECATED(getObjectName) const char* getQueryName() const; + + /** Prints a query to a string, with field assumed to be the + * default field and omitted. + *

The representation used is one that is supposed to be readable + * by {@link org.apache.lucene.queryParser.QueryParser QueryParser}. However, + * there are the following limitations: + *

    + *
  • If the query was created by the parser, the printed + * representation may not be exactly what was parsed. For example, + * characters that need to be escaped will be represented without + * the required backslash.
  • + *
  • Some of the more complicated queries (e.g. span queries) + * don't have a representation that can be parsed by QueryParser.
  • + *
+ * + * @memory always returns a newly allocated string, which the caller is + * responsible for deleting + * + */ + virtual TCHAR* toString(const TCHAR* field) const = 0; + + virtual bool equals(Query* other) const = 0; + virtual size_t hashCode() const = 0; + + /** Prints a query to a string. */ + TCHAR* toString() const; + + + /** Expert: Constructs an appropriate Weight implementation for this query. + * + *

Only implemented by primitive queries, which re-write to themselves. + * This is an Internal function + */ + virtual Weight* _createWeight(Searcher* searcher); + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/RangeFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/search/RangeFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/RangeFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/RangeFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,148 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.h" +#include "RangeFilter.h" + +CL_NS_DEF(search) +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(document) + + +RangeFilter::RangeFilter( const TCHAR* _fieldName, const TCHAR* _lowerTerm, const TCHAR* _upperTerm, + bool _includeLower, bool _includeUpper ) + : fieldName(NULL), lowerTerm(NULL), upperTerm(NULL) + , includeLower(_includeLower), includeUpper(_includeUpper) +{ + if (NULL == _lowerTerm && NULL == _upperTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("At least one value must be non-null")); + } + if (_includeLower && NULL == _lowerTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("The lower bound must be non-null to be inclusive")); + } + if (_includeUpper && NULL == _upperTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("The upper bound must be non-null to be inclusive")); + } + + this->fieldName = STRDUP_TtoT(_fieldName); + if ( _lowerTerm != NULL ) + this->lowerTerm = STRDUP_TtoT(_lowerTerm); + if ( _upperTerm != NULL ) + this->upperTerm = STRDUP_TtoT(_upperTerm); +} + +RangeFilter::RangeFilter( const RangeFilter& copy ) : + fieldName( STRDUP_TtoT(copy.fieldName) ), + lowerTerm( STRDUP_TtoT(copy.lowerTerm) ), + upperTerm( STRDUP_TtoT(copy.upperTerm) ), + includeLower( copy.includeLower ), + includeUpper( copy.includeUpper ) +{ +} + +RangeFilter::~RangeFilter() +{ + _CLDELETE_LCARRAY( fieldName ); + _CLDELETE_LCARRAY( lowerTerm ); + _CLDELETE_LCARRAY( upperTerm ); +} + +RangeFilter* RangeFilter::Less( const TCHAR* _fieldName, const TCHAR* _upperTerm ) { + return _CLNEW RangeFilter( _fieldName, NULL, _upperTerm, false, true ); +} + +RangeFilter* RangeFilter::More( const TCHAR* _fieldName, const TCHAR* _lowerTerm ) { + return _CLNEW RangeFilter( _fieldName, _lowerTerm, NULL, true, false ); +} + +BitSet* RangeFilter::bits( IndexReader* reader ) +{ + BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); + Term* term = NULL; + + Term* t = _CLNEW Term( fieldName, (lowerTerm ? lowerTerm : _T("")), false ); + TermEnum* enumerator = reader->terms( t ); // get enumeration of all terms after lowerValue + _CLDECDELETE( t ); + + if( enumerator->term(false) == NULL ) { + _CLLDELETE( enumerator ); + return bts; + } + + bool checkLower = false; + if( !includeLower ) // make adjustments to set to exclusive + checkLower = true; + + TermDocs* termDocs = reader->termDocs(); + + #define CLEANUP \ + _CLLDECDELETE( term ); \ + termDocs->close(); \ + _CLLDELETE( termDocs ); \ + enumerator->close(); \ + _CLLDELETE( enumerator ) + + try + { + do + { + term = enumerator->term(); + + if( term == NULL || _tcscmp(term->field(), fieldName) ) + break; + + if( !checkLower || lowerTerm == NULL || _tcscmp(term->text(), lowerTerm) > 0 ) + { + checkLower = false; + if( upperTerm != NULL ) + { + int compare = _tcscmp( upperTerm, term->text() ); + + /* if beyond the upper term, or is exclusive and + * this is equal to the upper term, break out */ + if( (compare < 0) || (!includeUpper && compare == 0) ) + break; + } + + termDocs->seek( enumerator->term(false) ); + while( termDocs->next() ) { + bts->set( termDocs->doc() ); + } + } + + _CLDECDELETE( term ); + } + while( enumerator->next() ); + }catch(CLuceneError& err){ + _CLDELETE(bts); + CLEANUP; + throw err; + } + CLEANUP; + + return bts; +} + +TCHAR* RangeFilter::toString() +{ + size_t len = (fieldName ? _tcslen(fieldName) : 0) + (lowerTerm ? _tcslen(lowerTerm) : 0) + (upperTerm ? _tcslen(upperTerm) : 0) + 8; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T("%s: [%s-%s]"), fieldName, (lowerTerm?lowerTerm:_T("")), (upperTerm?upperTerm:_T("")) ); + + return ret; +} + +Filter* RangeFilter::clone() const { + return _CLNEW RangeFilter(*this ); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/RangeFilter.h clucene-core-2.3.3.4/src/core/CLucene/search/RangeFilter.h --- clucene-core-0.9.21b/src/core/CLucene/search/RangeFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/RangeFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,75 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#ifndef _lucene_search_RangeFilter_ +#define _lucene_search_RangeFilter_ + +#include "Filter.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +/** + * A Filter that restricts search results to a range of values in a given + * field. + * + *

+ * This code borrows heavily from {@link RangeQuery}, but is implemented as a Filter + * + *

+ */ +class CLUCENE_EXPORT RangeFilter: public Filter +{ +private: + TCHAR* fieldName; + TCHAR* lowerTerm; + TCHAR* upperTerm; + bool includeLower; + bool includeUpper; + +public: + /** + * @param fieldName The field this range applies to + * @param lowerTerm The lower bound on this range + * @param upperTerm The upper bound on this range + * @param includeLower Does this range include the lower bound? + * @param includeUpper Does this range include the upper bound? + */ + RangeFilter( const TCHAR* fieldName, const TCHAR* lowerTerm, const TCHAR* upperTerm, + bool includeLower, bool includeUpper ); + virtual ~RangeFilter(); + + /** + * Constructs a filter for field fieldName matching + * less than or equal to upperTerm. + */ + static RangeFilter* Less( const TCHAR* fieldName, const TCHAR* upperTerm ); + + /** + * Constructs a filter for field fieldName matching + * more than or equal to lowerTerm. + */ + static RangeFilter* More( const TCHAR* fieldName, const TCHAR* lowerTerm ); + + /** + * Returns a BitSet with true for documents which should be + * permitted in search results, and false for those that should + * not. + */ + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); + + Filter* clone() const; + + TCHAR* toString(); + +protected: + RangeFilter( const RangeFilter& copy ); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/RangeQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/RangeQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/RangeQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/RangeQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,194 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "RangeQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Similarity.h" + +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + RangeQuery::RangeQuery(Term* lowerTerm, Term* upperTerm, const bool Inclusive){ + //Func - Constructor + //Pre - (LowerTerm != NULL OR UpperTerm != NULL) AND + // if LowerTerm and UpperTerm are valid pointer then the fieldnames must be the same + //Post - The instance has been created + + if (lowerTerm == NULL && upperTerm == NULL) + { + _CLTHROWA(CL_ERR_IllegalArgument,"At least one term must be non-null"); + } + if (lowerTerm != NULL && upperTerm != NULL && lowerTerm->field() != upperTerm->field()) + { + _CLTHROWA(CL_ERR_IllegalArgument,"Both terms must be for the same field"); + } + + // if we have a lowerTerm, start there. otherwise, start at beginning + if (lowerTerm != NULL) { + this->lowerTerm = _CL_POINTER(lowerTerm); + } + else { + this->lowerTerm = _CLNEW Term(upperTerm, LUCENE_BLANK_STRING); + } + this->upperTerm = (upperTerm != NULL ? _CL_POINTER(upperTerm) : NULL); + this->inclusive = Inclusive; + } + RangeQuery::RangeQuery(const RangeQuery& clone): + Query(clone){ + this->inclusive = clone.inclusive; + this->upperTerm = (clone.upperTerm != NULL ? _CL_POINTER(clone.upperTerm) : NULL ); + this->lowerTerm = (clone.lowerTerm != NULL ? _CL_POINTER(clone.lowerTerm) : NULL ); + } + Query* RangeQuery::clone() const{ + return _CLNEW RangeQuery(*this); + } + + RangeQuery::~RangeQuery() { + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + + _CLDECDELETE(lowerTerm); + _CLDECDELETE(upperTerm); + } + + /** Returns a hash code value for this object.*/ + size_t RangeQuery::hashCode() const { + return Similarity::floatToByte(getBoost()) ^ + (lowerTerm != NULL ? lowerTerm->hashCode() : 0) ^ + (upperTerm != NULL ? upperTerm->hashCode() : 0) ^ + (this->inclusive ? 1 : 0); + } + + const char* RangeQuery::getObjectName() const{ + return getClassName(); + } + const char* RangeQuery::getClassName(){ + return "RangeQuery"; + } + + Query* RangeQuery::combine(CL_NS(util)::ArrayBase* queries) { + return Query::mergeBooleanQueries(queries); + } + + bool RangeQuery::equals(Query * other) const{ + if (!(other->instanceOf(RangeQuery::getClassName()))) + return false; + + RangeQuery* rq = (RangeQuery*)other; + bool ret = (this->getBoost() == rq->getBoost()) + && (this->isInclusive() == rq->isInclusive()) + && (this->getLowerTerm()->equals(rq->getLowerTerm())) + && (this->getUpperTerm()->equals(rq->getUpperTerm())); + + return ret; + } + + + Query* RangeQuery::rewrite(IndexReader* reader){ + + BooleanQuery* query = _CLNEW BooleanQuery( true ); + TermEnum* enumerator = reader->terms(lowerTerm); + Term* lastTerm = NULL; + try { + bool checkLower = false; + if (!inclusive) // make adjustments to set to exclusive + checkLower = true; + + const TCHAR* testField = getField(); + do { + lastTerm = enumerator->term(); + if (lastTerm != NULL && lastTerm->field() == testField ) { + if (!checkLower || _tcscmp(lastTerm->text(),lowerTerm->text()) > 0) { + checkLower = false; + if (upperTerm != NULL) { + int compare = _tcscmp(upperTerm->text(),lastTerm->text()); + /* if beyond the upper term, or is exclusive and + * this is equal to the upper term, break out */ + if ((compare < 0) || (!inclusive && compare == 0)) + break; + } + TermQuery* tq = _CLNEW TermQuery(lastTerm); // found a match + tq->setBoost(getBoost()); // set the boost + query->add(tq, true, false, false); // add to query + } + }else { + break; + } + _CLDECDELETE(lastTerm); + } + while (enumerator->next()); + }catch(...){ + _CLDECDELETE(lastTerm); //always need to delete this + _CLDELETE(query); //in case of error, delete the query + enumerator->close(); + _CLDELETE(enumerator); + throw; //rethrow + } + _CLDECDELETE(lastTerm); //always need to delete this + enumerator->close(); + _CLDELETE(enumerator); + + return query; + } + + TCHAR* RangeQuery::toString(const TCHAR* field) const + { + StringBuffer buffer; + if ( field==NULL || _tcscmp(getField(),field)!=0 ) + { + buffer.append( getField() ); + buffer.append( _T(":")); + } + buffer.append(inclusive ? _T("[") : _T("{")); + buffer.append(lowerTerm != NULL ? lowerTerm->text() : _T("NULL")); + buffer.append(_T(" TO ")); + buffer.append(upperTerm != NULL ? upperTerm->text() : _T("NULL")); + buffer.append(inclusive ? _T("]") : _T("}")); + if (getBoost() != 1.0f) + { + buffer.append( _T("^")); + buffer.appendFloat( getBoost(),1 ); + } + return buffer.toString(); + } + + + const TCHAR* RangeQuery::getField() const + { + return (lowerTerm != NULL ? lowerTerm->field() : upperTerm->field()); + } + + Term* RangeQuery::getLowerTerm(bool pointer) const { + if ( pointer ) + return _CL_POINTER(lowerTerm); + else + return lowerTerm; + } + + Term* RangeQuery::getUpperTerm(bool pointer) const { + if ( pointer ) + return _CL_POINTER(upperTerm); + else + return upperTerm; + } + + bool RangeQuery::isInclusive() const { return inclusive; } + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/RangeQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/RangeQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/RangeQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/RangeQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,92 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_RangeQuery_ +#define _lucene_search_RangeQuery_ + +//#include "SearchHeader.h" +//#include "Scorer.h" +//#include "TermQuery.h" +#include "Query.h" + +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" + +CL_CLASS_DEF(util,StringBuffer) + + +CL_NS_DEF(search) + +/** + * A Query that matches documents within an exclusive range. A RangeQuery + * is built by QueryParser for input like [010 TO 120] but only if the QueryParser has + * the useOldRangeQuery property set to true. The QueryParser default behaviour is to use + * the newer ConstantScoreRangeQuery class. This is generally preferable because: + *
    + *
  • It is faster than RangeQuery
  • + *
  • Unlike RangeQuery, it does not cause a BooleanQuery.TooManyClauses exception if the range of values is large
  • + *
  • Unlike RangeQuery it does not influence scoring based on the scarcity of individual terms that may match
  • + *
+ * + * + * @see ConstantScoreRangeQuery + * + * + * @version $Id: RangeQuery.java 520891 2007-03-21 13:58:47Z yonik $ + */ +class CLUCENE_EXPORT RangeQuery: public Query +{ +private: + CL_NS(index)::Term* lowerTerm; + CL_NS(index)::Term* upperTerm; + bool inclusive; +protected: + RangeQuery(const RangeQuery& clone); + +public: + /** Constructs a query selecting all terms greater than + * lowerTerm but less than upperTerm. + * There must be at least one term and either term may be null, + * in which case there is no bound on that side, but if there are + * two terms, both terms must be for the same field. + */ + RangeQuery(CL_NS(index)::Term* LowerTerm, CL_NS(index)::Term* UpperTerm, const bool Inclusive); + ~RangeQuery(); + + const char* getObjectName() const; + static const char* getClassName(); + + /** + * FIXME: Describe rewrite method here. + * + * @param reader an IndexReader value + * @return a Query value + * @exception IOException if an error occurs + */ + Query* rewrite(CL_NS(index)::IndexReader* reader); + + Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + Query* clone() const; + + bool equals(Query * other) const; + + /** Returns the lower term of this range query */ + CL_NS(index)::Term* getLowerTerm(bool pointer=true) const; + /** Returns the upper term of this range query */ + CL_NS(index)::Term* getUpperTerm(bool pointer=true) const; + bool isInclusive() const; + /** Returns true if the range query is inclusive */ + const TCHAR* getField() const; + + size_t hashCode() const; +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Scorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/Scorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/Scorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Scorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,41 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Scorer.h" +#include "SearchHeader.h" + +CL_NS_DEF(search) + +Scorer::Scorer(Similarity* _similarity) : similarity(_similarity){ +} + +Scorer::~Scorer(){ +} + +Similarity* Scorer::getSimilarity() const{ + return this->similarity; +} + +void Scorer::score(HitCollector* hc) { + while (next()) { + hc->collect(doc(), score()); + } +} + +bool Scorer::score( HitCollector* results, const int32_t maxDoc ) { + while( doc() < maxDoc ) { + results->collect( doc(), score() ); + if ( !next() ) + return false; + } + return true; +} +bool Scorer::sort(const Scorer* elem1, const Scorer* elem2){ + return elem1->doc() < elem2->doc(); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/ScorerDocQueue.cpp clucene-core-2.3.3.4/src/core/CLucene/search/ScorerDocQueue.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/ScorerDocQueue.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/ScorerDocQueue.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,191 @@ +#include "CLucene/_ApiHeader.h" +#include "ScorerDocQueue.h" +#include "Scorer.h" + +CL_NS_DEF(util) + +class ScorerDocQueue::HeapedScorerDoc:LUCENE_BASE { +public: + Scorer* _scorer; + int32_t _doc; + + HeapedScorerDoc( Scorer* s ); + HeapedScorerDoc( Scorer* s, int32_t doc ); + ~HeapedScorerDoc(); + + void adjust(); +}; + +ScorerDocQueue::HeapedScorerDoc::HeapedScorerDoc( Scorer* scorer ) : _scorer(scorer), _doc(scorer->doc()) +{ +} + +ScorerDocQueue::HeapedScorerDoc::HeapedScorerDoc( Scorer* scorer, int32_t doc ) : _scorer(scorer), _doc(doc) +{ +} + +ScorerDocQueue::HeapedScorerDoc::~HeapedScorerDoc() +{ +} + +void ScorerDocQueue::HeapedScorerDoc::adjust() +{ + this->_doc = _scorer->doc(); +} + +ScorerDocQueue::ScorerDocQueue( int32_t maxSize ) : maxSize(maxSize), _size(0) +{ + int heapSize = maxSize + 1; + heap = _CL_NEWARRAY( HeapedScorerDoc*, heapSize ); + for ( int32_t i = 0; i < heapSize; i++ ) { + heap[i] = NULL; + } + topHsd = heap[1]; +} + +ScorerDocQueue::~ScorerDocQueue() +{ + clear(); + _CLDELETE_ARRAY( heap ); +} + +void ScorerDocQueue::put( Scorer* scorer ) +{ + _size++; + heap[ _size ] = _CLNEW HeapedScorerDoc( scorer ); + upHeap(); +} + +bool ScorerDocQueue::insert( Scorer* scorer ) +{ + if ( _size < maxSize ) { + put( scorer ); + return true; + } else { + int32_t docNr = scorer->doc(); + if (( _size > 0 ) && ( !( docNr < topHsd->_doc ))) { + _CLDELETE( heap[1] ); + heap[1] = _CLNEW HeapedScorerDoc( scorer, docNr ); + downHeap(); + return true; + } else { + return false; + } + } +} + +Scorer* ScorerDocQueue::pop() +{ + Scorer* result = topHsd->_scorer; + popNoResult(); + return result; +} + +void ScorerDocQueue::adjustTop() +{ + topHsd->adjust(); + downHeap(); +} + +int32_t ScorerDocQueue::size() +{ + return _size; +} + +void ScorerDocQueue::clear() +{ + for ( int32_t i = 0; i <= _size; i++ ) { + _CLDELETE( heap[i] ); + } + _size = 0; +} + +Scorer* ScorerDocQueue::top() +{ + return topHsd->_scorer; +} + +int32_t ScorerDocQueue::topDoc() +{ + return topHsd->_doc; +} + +float_t ScorerDocQueue::topScore() +{ + return topHsd->_scorer->score(); +} + +bool ScorerDocQueue::topNextAndAdjustElsePop() +{ + return checkAdjustElsePop( topHsd->_scorer->next() ); +} + +bool ScorerDocQueue::topSkipToAndAdjustElsePop( int32_t target ) +{ + return checkAdjustElsePop( topHsd->_scorer->skipTo( target )); +} + +bool ScorerDocQueue::checkAdjustElsePop( bool cond ) +{ + if ( cond ) { + topHsd->_doc = topHsd->_scorer->doc(); + } else { + _CLLDELETE( heap[1] ); + heap[1] = heap[_size]; + heap[_size] = NULL; + _size--; + } + downHeap(); + return cond; +} + +void ScorerDocQueue::popNoResult() +{ + _CLLDELETE( heap[1] ); + heap[1] = heap[_size]; + heap[_size] = NULL; + _size--; + downHeap(); +} + +void ScorerDocQueue::upHeap() +{ + int32_t i = _size; + HeapedScorerDoc* node = heap[i]; + int32_t j = i >> 1; + while (( j > 0 ) && ( node->_doc < heap[j]->_doc )) { + heap[i] = heap[j]; + i = j; + j = j >> 1; + } + heap[i] = node; + topHsd = heap[1]; +} + +void ScorerDocQueue::downHeap() +{ + int32_t i = 1; + HeapedScorerDoc* node = heap[i]; + int32_t j = i << 1; + int32_t k = j + 1; + + if (( k <= _size ) && ( heap[k]->_doc < heap[j]->_doc )) { + j = k; + } + + while (( j <= _size ) && ( heap[j]->_doc < node->_doc )) { + heap[i] = heap[j]; + i = j; + j = i << 1; + k = j + 1; + if (( k <= _size ) && ( heap[k]->_doc < heap[j]->_doc )) { + j = k; + } + } + + heap[i] = node; + topHsd = heap[1]; +} + +CL_NS_END + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/ScorerDocQueue.h clucene-core-2.3.3.4/src/core/CLucene/search/ScorerDocQueue.h --- clucene-core-0.9.21b/src/core/CLucene/search/ScorerDocQueue.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/ScorerDocQueue.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_ScorerDocQueue_ +#define _lucene_util_ScorerDocQueue_ + + +CL_CLASS_DEF(search,Scorer) + +CL_NS_USE(search) +CL_NS_DEF(util) + +class CLUCENE_EXPORT ScorerDocQueue:LUCENE_BASE { +private: + class HeapedScorerDoc; + + HeapedScorerDoc** heap; + HeapedScorerDoc* topHsd; + + int32_t maxSize; + int32_t _size; + +public: + + ScorerDocQueue( int32_t maxSize ); + virtual ~ScorerDocQueue(); + + void put( Scorer* scorer ); + bool insert( Scorer* scorer ); + Scorer* pop(); + void adjustTop(); + int32_t size(); + void clear(); + + Scorer* top(); + int32_t topDoc(); + float_t topScore(); + bool topNextAndAdjustElsePop(); + bool topSkipToAndAdjustElsePop( int32_t target ); + +private: + + bool checkAdjustElsePop( bool cond ); + void popNoResult(); + void upHeap(); + void downHeap(); + +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Scorer.h clucene-core-2.3.3.4/src/core/CLucene/search/Scorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/Scorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Scorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,134 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Scorer_ +#define _lucene_search_Scorer_ + +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(search,HitCollector) +CL_CLASS_DEF(search,Explanation) + +CL_NS_DEF(search) + +/** +* Expert: Common scoring functionality for different types of queries. +* +*

+* A Scorer either iterates over documents matching a +* query in increasing order of doc Id, or provides an explanation of +* the score for a query for a given document. +*

+*

+* Document scores are computed using a given Similarity +* implementation. +*

+* @see BooleanQuery#setAllowDocsOutOfOrder +*/ +class CLUCENE_EXPORT Scorer { +private: + Similarity* similarity; +protected: + /** Constructs a Scorer. + * @param similarity The Similarity implementation used by this scorer. + */ + Scorer(Similarity* _similarity); + +public: + virtual ~Scorer(); + + /** Returns the Similarity implementation used by this scorer. */ + Similarity* getSimilarity() const; + + /** Scores and collects all matching documents. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + *
When this method is used the {@link #explain(int)} method should not be used. + */ + virtual void score(HitCollector* hc) ; + + /** Expert: Collects matching documents in a range. Hook for optimization. + * Note that {@link #next()} must be called once before this method is called + * for the first time. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + * @param max Do not score documents past this. + * @return true if more matching documents may remain. + */ + virtual bool score( HitCollector* results, const int32_t maxDoc ); + + /** + * Advances to the document matching this Scorer with the lowest doc Id + * greater than the current value of {@link #doc()} (or to the matching + * document with the lowest doc Id if next has never been called on + * this Scorer). + * + *

+ * When this method is used the {@link #explain(int)} method should not + * be used. + *

+ * + * @return true iff there is another document matching the query. + * @see BooleanQuery#setAllowDocsOutOfOrder + */ + virtual bool next() = 0; + + /** Returns the current document number matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + virtual int32_t doc() const = 0; + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} or {@link #skipTo(int)} + * is called the first time. + */ + virtual float_t score() = 0; + + /** + * Skips to the document matching this Scorer with the lowest doc Id + * greater than or equal to a given target. + * + *

+ * The behavior of this method is undefined if the target specified is + * less than or equal to the current value of {@link #doc()}. + *

+ * Behaves as if written: + *

+	*   boolean skipTo(int target) {
+	*     do {
+	*       if (!next())
+	* 	     return false;
+	*     } while (target > doc());
+	*     return true;
+	*   }
+	* 
+ * Most implementations are considerably more efficient than that. + *

+ * + *

+ * When this method is used the {@link #explain(int)} method should not + * be used. + *

+ * + * @param target The target document number. + * @return true iff there is such a match. + * @see BooleanQuery#setAllowDocsOutOfOrder + */ + virtual bool skipTo(int32_t target) = 0; + + /** Returns an explanation of the score for a document. + *
When this method is used, the {@link #next()}, {@link #skipTo(int)} and + * {@link #score(HitCollector)} methods should not be used. + * @param doc The document number for the explanation. + */ + virtual Explanation* explain(int32_t doc) = 0; + + /** Returns a string which explains the object */ + virtual TCHAR* toString() = 0; + + static bool sort(const Scorer* elem1, const Scorer* elem2); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Searchable.h clucene-core-2.3.3.4/src/core/CLucene/search/Searchable.h --- clucene-core-0.9.21b/src/core/CLucene/search/Searchable.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Searchable.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,182 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Searcher_ +#define _lucene_search_Searcher_ + + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +//#include "Filter.h" +CL_CLASS_DEF(document,Document) +//#include "Sort.h" +//#include "CLucene/util/VoidList.h" +//#include "Explanation.h" +//#include "Similarity.h" + +CL_NS_DEF(search) + + //predefine classes + class Query; + class Filter; + class HitCollector; + class TopDocs; + class Explanation; + class Hits; + class Similarity; + class TopFieldDocs; + class Sort; + + + /** The interface for search implementations. + * + *

Implementations provide search over a single index, over multiple + * indices, and over indices on remote servers. + */ + class CLUCENE_EXPORT Searchable: LUCENE_BASE { + public: + virtual ~Searchable(); + + /** Lower-level search API. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all of the + * matching documents. The high-level search API ({@link + * Searcher#search(Query*)}) is usually more efficient, as it skips + * non-high-scoring hits. + * + * @param query to match documents + * @param filter if non-null, a bitset used to eliminate some documents + * @param results to receive hits + */ + virtual void _search(Query* query, Filter* filter, HitCollector* results) = 0; + + /** Frees resources associated with this Searcher. + * Be careful not to call this method while you are still using objects + * like {@link Hits}. + */ + virtual void close() = 0; + + /** Expert: Returns the number of documents containing term. + * Called by search code to compute term weights. + * @see IndexReader#docFreq(Term). + */ + virtual int32_t docFreq(const CL_NS(index)::Term* term) const = 0; + + /** Expert: Returns one greater than the largest possible document number. + * Called by search code to compute term weights. + * @see IndexReader#maxDoc(). + */ + virtual int32_t maxDoc() const = 0; + + /** Expert: Low-level search implementation. Finds the top n + * hits for query, applying filter if non-null. + * + *

Called by {@link Hits}. + * + *

Applications should usually call {@link Searcher#search(Query*)} or + * {@link Searcher#search(Query*,Filter*)} instead. + */ + virtual TopDocs* _search(Query* query, Filter* filter, const int32_t n) = 0; + + /** Expert: Returns the stored fields of document i. + * Called by {@link HitCollector} implementations. + * @see IndexReader#document(int32_t). + */ + virtual bool doc(int32_t i, CL_NS(document)::Document* d) = 0; + _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* doc(const int32_t i); + + /** Expert: called to re-write queries into primitive queries. */ + virtual Query* rewrite(Query* query) = 0; + + /** Returns an Explanation that describes how doc scored against + * query. + * + *

This is intended to be used in developing Similarity implementations, + * and, for good performance, should not be displayed with every hit. + * Computing an explanation is as expensive as executing the query over the + * entire index. + */ + virtual void explain(Query* query, int32_t doc, Explanation* ret) = 0; + + /** Expert: Low-level search implementation with arbitrary sorting. Finds + * the top n hits for query, applying + * filter if non-null, and sorting the hits by the criteria in + * sort. + * + *

Applications should usually call {@link + * Searcher#search(Query,Filter,Sort)} instead. + */ + virtual TopFieldDocs* _search(Query* query, Filter* filter, const int32_t n, const Sort* sort) = 0; + }; + + + + /** An abstract base class for search implementations. + * Implements some common utility methods. + */ + class CLUCENE_EXPORT Searcher:public Searchable { + private: + /** The Similarity implementation used by this searcher. */ + Similarity* similarity; + public: + Searcher(); + virtual ~Searcher(); + + // Returns the documents matching query. + Hits* search(Query* query); + + // Returns the documents matching query and + // filter. + Hits* search(Query* query, Filter* filter); + + /** Returns documents matching query sorted by + * sort. + */ + Hits* search(Query* query, const Sort* sort); + + /** Returns documents matching query and filter, + * sorted by sort. + */ + Hits* search(Query* query, Filter* filter, const Sort* sort); + + /** Lower-level search API. + * + *

{@link HitCollector#collect(int32_t ,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all of the + * matching documents. The high-level search API ({@link + * Searcher#search(Query*)}) is usually more efficient, as it skips + * non-high-scoring hits. + *

Note: The score passed to this method is a raw score. + * In other words, the score will not necessarily be a float whose value is + * between 0 and 1. + */ + void _search(Query* query, HitCollector* results); + + /** Expert: Set the Similarity implementation used by this Searcher. + * + * @see Similarity#setDefault(Similarity) + */ + void setSimilarity(Similarity* similarity); + + /** Expert: Return the Similarity implementation used by this Searcher. + * + *

This defaults to the current value of {@link Similarity#getDefault()}. + */ + Similarity* getSimilarity(); + + virtual const char* getObjectName() const; + static const char* getClassName(); + + virtual void _search(Query* query, Filter* filter, HitCollector* results) = 0; + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/SearchHeader.cpp clucene-core-2.3.3.4/src/core/CLucene/search/SearchHeader.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/SearchHeader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/SearchHeader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,232 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SearchHeader.h" +#include "CLucene/document/Document.h" +#include "Similarity.h" +#include "BooleanQuery.h" +#include "Searchable.h" +#include "Hits.h" +#include "_FieldDocSortedHitQueue.h" +#include + +CL_NS_USE(index) +CL_NS_DEF(search) + +CL_NS(document)::Document* Searchable::doc(const int32_t i){ + CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; + if (!doc(i,ret) ) + _CLDELETE(ret); + return ret; +} + +//static +Query* Query::mergeBooleanQueries(CL_NS(util)::ArrayBase* queries) { + std::vector allClauses; + + CL_NS(util)::ValueArray clauses; + for (size_t i = 0; i < queries->length; i++) { + assert(BooleanQuery::getClassName() == queries->values[i]->getObjectName()); + BooleanQuery* booleanQuery = (BooleanQuery*)queries->values[i]; + clauses.resize((booleanQuery->getClauseCount())); + booleanQuery->getClauses(clauses.values); + for (size_t j = 0; j < clauses.length; j++) { + allClauses.push_back(clauses.values[j]->clone()); + } + } + + bool coordDisabled = ( queries->length == 0 ) ? false : ((BooleanQuery*)queries->values[0])->isCoordDisabled(); + BooleanQuery* result = _CLNEW BooleanQuery(coordDisabled); + std::vector::iterator i = allClauses.begin(); + while ( i != allClauses.end() ){ + result->add(*i); + i++; + } + return result; +} + +Query::Query(const Query& clone):boost(clone.boost){ +} +Weight* Query::_createWeight(Searcher* /*searcher*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::_createWeight"); +} + +Query::Query(): + boost(1.0f) +{ +} +Query::~Query(){ +} + +const char* Query::getQueryName() const{ return getObjectName(); } +/** Expert: called to re-write queries into primitive queries. */ +Query* Query::rewrite(CL_NS(index)::IndexReader* /*reader*/){ + return this; +} + +Query* Query::combine(CL_NS(util)::ArrayBase* queries){ + std::vector uniques; + for (size_t i = 0; i < queries->length; i++) { + Query* query = queries->values[i]; + CL_NS(util)::ValueArray clauses; + // check if we can split the query into clauses + bool splittable = query->instanceOf(BooleanQuery::getClassName()); + if(splittable){ + BooleanQuery* bq = (BooleanQuery*) query; + splittable = bq->isCoordDisabled(); + clauses.resize(bq->getClauseCount()); + bq->getClauses(clauses.values); + for (size_t j = 0; splittable && j < clauses.length; j++) { + splittable = (clauses[j]->getOccur() == BooleanClause::SHOULD); + } + } + if(splittable){ + for (size_t j = 0; j < clauses.length; j++) { + uniques.push_back(clauses[j]->getQuery()); + } + } else { + uniques.push_back(query); + } + } + // optimization: if we have just one query, just return it + if(uniques.size() == 1){ + return *uniques.begin(); + } + std::vector::iterator it = uniques.begin(); + BooleanQuery* result = _CLNEW BooleanQuery(true); + while (it != uniques.end() ){ + result->add(*it, BooleanClause::SHOULD); + + it++; + } + return result; +} +Similarity* Query::getSimilarity(Searcher* searcher) { + return searcher->getSimilarity(); +} +TCHAR* Query::toString() const{ + return toString(LUCENE_BLANK_STRING); +} + +void Query::setBoost(float_t b) { boost = b; } + +float_t Query::getBoost() const { return boost; } + +Weight* Query::weight(Searcher* searcher){ + Query* query = searcher->rewrite(this); + Weight* weight = query->_createWeight(searcher); + float_t sum = weight->sumOfSquaredWeights(); + float_t norm = getSimilarity(searcher)->queryNorm(sum); + weight->normalize(norm); + return weight; +} + +void Query::extractTerms( TermSet * termset ) const +{ + _CLTHROWA( CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::extractTerms" ); +} + +TopFieldDocs::TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields): + TopDocs (totalHits, NULL, scoreDocsLen) +{ + this->fields = fields; + this->fieldDocs = fieldDocs; + this->scoreDocs = new ScoreDoc[scoreDocsLen]; + for (int32_t i=0;iscoreDocs[i] = this->fieldDocs[i]->scoreDoc; +} +TopFieldDocs::~TopFieldDocs(){ + if ( fieldDocs ){ + for (int32_t i=0;i= 0 +//Post - The instance has been created + +} + +TopDocs::~TopDocs(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + delete[] scoreDocs; +} + + + +Searcher::Searcher(){ + similarity = Similarity::getDefault(); +} +Searcher::~Searcher(){ +} + +Hits* Searcher::search(Query* query) { + return search(query, (Filter*)NULL ); +} + +Hits* Searcher::search(Query* query, Filter* filter) { + return _CLNEW Hits(this, query, filter); +} + +Hits* Searcher::search(Query* query, const Sort* sort){ + return _CLNEW Hits(this, query, NULL, sort); +} + +Hits* Searcher::search(Query* query, Filter* filter, const Sort* sort){ + return _CLNEW Hits(this, query, filter, sort); +} + +void Searcher::_search(Query* query, HitCollector* results) { + _search(query, NULL, results); +} + +void Searcher::setSimilarity(Similarity* similarity) { + this->similarity = similarity; +} + +Similarity* Searcher::getSimilarity(){ + return this->similarity; +} + +const char* Searcher::getClassName(){ + return "Searcher"; +} + +const char* Searcher::getObjectName() const{ + return Searcher::getClassName(); +} + + +Weight::~Weight(){ +} + +TCHAR* Weight::toString(){ + return STRDUP_TtoT(_T("Weight")); +} + + +Searchable::~Searchable(){ +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/SearchHeader.h clucene-core-2.3.3.4/src/core/CLucene/search/SearchHeader.h --- clucene-core-0.9.21b/src/core/CLucene/search/SearchHeader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/SearchHeader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,152 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_SearchHeader_ +#define _lucene_search_SearchHeader_ + + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(index,IndexReader) +//#include "Filter.h" +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(util,Comparable) +//#include "Sort.h" +//#include "CLucene/util/VoidList.h" +//#include "Explanation.h" +//#include "Similarity.h" + +CL_NS_DEF(search) + + class Query; + class Scorer; + class Explanation; + class Hits; + class Sort; + class FieldDoc; + class TopFieldDocs; + + /** Expert: Returned by low-level search implementations. + * @see TopDocs */ + struct CLUCENE_EXPORT ScoreDoc { + /** Expert: A hit document's number. + * @see Searcher#doc(int32_t) + */ + int32_t doc; + + /** Expert: The score of this document for the query. */ + float_t score; + }; + + /** Expert: Returned by low-level search implementations. + * @see Searcher#search(Query,Filter,int32_t) */ + class CLUCENE_EXPORT TopDocs:LUCENE_BASE { + public: + /** Expert: The total number of hits for the query. + * @see Hits#length() + */ + int32_t totalHits; + + /** Expert: The top hits for the query. */ + ScoreDoc* scoreDocs; + int32_t scoreDocsLength; + + /** Expert: Constructs a TopDocs. TopDocs takes ownership of the ScoreDoc array*/ + TopDocs(const int32_t th, ScoreDoc* sds, int32_t scoreDocsLength); + virtual ~TopDocs(); + + private: + /** Expert: Stores the maximum score value encountered, needed for normalizing. */ + //float_t maxScore; + }; + + /** Lower-level search API. + *
HitCollectors are primarily meant to be used to implement queries, + * sorting and filtering. + * @see Searcher#search(Query,HitCollector) + */ + class CLUCENE_EXPORT HitCollector: LUCENE_BASE { + public: + /** Called once for every non-zero scoring document, with the document number + * and its score. + * + *

If, for example, an application wished to collect all of the hits for a + * query in a BitSet, then it might:

+      *   Searcher searcher = new IndexSearcher(indexReader);
+      *   final BitSet bits = new BitSet(indexReader.maxDoc());
+      *   searcher.search(query, new HitCollector() {
+      *       public void collect(int32_t doc, float score) {
+      *         bits.set(doc);
+      *       }
+      *     });
+      * 
+ * + *

Note: This is called in an inner search loop. For good search + * performance, implementations of this method should not call + * {@link Searcher#doc(int32_t)} or + * {@link IndexReader#document(int32_t)} on every + * document number encountered. Doing so can slow searches by an order + * of magnitude or more. + *

Note: The score passed to this method is a raw score. + * In other words, the score will not necessarily be a float whose value is + * between 0 and 1. + */ + virtual void collect(const int32_t doc, const float_t score) = 0; + virtual ~HitCollector(){} + }; + + /** Expert: Calculate query weights and build query scorers. + * + *

A Weight is constructed by a query, given a Searcher ({@link + * Query#_createWeight(Searcher)}). The {@link #sumOfSquaredWeights()} method + * is then called on the top-level query to compute the query normalization + * factor (@link Similarity#queryNorm(float_t)}). This factor is then passed to + * {@link #normalize(float_t)}. At this point the weighting is complete and a + * scorer may be constructed by calling {@link #scorer(IndexReader)}. + */ + class CLUCENE_EXPORT Weight + { + public: + virtual ~Weight(); + + /** The query that this concerns. */ + virtual Query* getQuery() = 0; + + /** The weight for this query. */ + virtual float_t getValue() = 0; + + /** The sum of squared weights of contained query clauses. */ + virtual float_t sumOfSquaredWeights() = 0; + + /** Assigns the query normalization factor to this. */ + virtual void normalize(float_t norm) = 0; + + /** Constructs a scorer for this. */ + virtual Scorer* scorer(CL_NS(index)::IndexReader* reader) = 0; + + /** An explanation of the score computation for the named document. */ + virtual Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc) = 0; + + virtual TCHAR* toString(); + }; + + class CLUCENE_EXPORT HitDoc + { + public: + float_t score; + int32_t id; + CL_NS(document)::Document* doc; + + HitDoc* next; // in doubly-linked cache + HitDoc* prev; // in doubly-linked cache + + HitDoc(const float_t s, const int32_t i); + virtual ~HitDoc(); + }; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Similarity.cpp clucene-core-2.3.3.4/src/core/CLucene/search/Similarity.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/Similarity.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Similarity.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,236 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Similarity.h" + +#include "CLucene/index/Term.h" +#include "SearchHeader.h" +#include "Searchable.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + +#ifdef _CL_HAVE_NO_FLOAT_BYTE + #if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Using fallback float<->byte encodings!!!==================") + #else + #warning "==================Using fallback float<->byte encodings!!!==================" + #endif + + //if the autoconf figured out that we can't do the conversions properly, then + //we fall back on the old, inaccurate way of doing things. + float_t NORM_TABLE[] = { + 0.0,5.820766E-10,6.9849193E-10,8.1490725E-10,9.313226E-10,1.1641532E-9,1.3969839E-9, + 1.6298145E-9,1.8626451E-9,2.3283064E-9,2.7939677E-9,3.259629E-9,3.7252903E-9, + 4.656613E-9,5.5879354E-9,6.519258E-9,7.4505806E-9,9.313226E-9,1.1175871E-8,1.3038516E-8, + 1.4901161E-8,1.8626451E-8,2.2351742E-8,2.6077032E-8,2.9802322E-8,3.7252903E-8,4.4703484E-8, + 5.2154064E-8,5.9604645E-8,7.4505806E-8,8.940697E-8,1.0430813E-7,1.1920929E-7,1.4901161E-7, + 1.7881393E-7,2.0861626E-7,2.3841858E-7,2.9802322E-7,3.5762787E-7,4.172325E-7,4.7683716E-7, + 5.9604645E-7,7.1525574E-7,8.34465E-7,9.536743E-7,1.1920929E-6,1.4305115E-6,1.66893E-6, + 1.9073486E-6,2.3841858E-6,2.861023E-6,3.33786E-6,3.8146973E-6,4.7683716E-6,5.722046E-6, + 6.67572E-6,7.6293945E-6,9.536743E-6,1.1444092E-5,1.335144E-5,1.5258789E-5,1.9073486E-5, + 2.2888184E-5,2.670288E-5,3.0517578E-5,3.8146973E-5,4.5776367E-5,5.340576E-5,6.1035156E-5, + 7.6293945E-5,9.1552734E-5,1.0681152E-4,1.2207031E-4,1.5258789E-4,1.8310547E-4,2.1362305E-4, + 2.4414062E-4,3.0517578E-4,3.6621094E-4,4.272461E-4,4.8828125E-4,6.1035156E-4,7.324219E-4, + 8.544922E-4,9.765625E-4,0.0012207031,0.0014648438,0.0017089844,0.001953125,0.0024414062, + 0.0029296875,0.0034179688,0.00390625,0.0048828125,0.005859375,0.0068359375, + 0.0078125,0.009765625,0.01171875,0.013671875,0.015625,0.01953125,0.0234375, + 0.02734375,0.03125,0.0390625,0.046875,0.0546875,0.0625,0.078125,0.09375,0.109375, + 0.125,0.15625,0.1875,0.21875,0.25,0.3125,0.375,0.4375,0.5,0.625,0.75, + 0.875,1.0,1.25,1.5,1.75,2,2.5,3,3.5,4.0,5.0,6.0,7.0,8.0,10.0,12.0,14.0,16.0,20.0,24.0,28.0,32.0,40.0,48.0,56.0, + 64.0,80.0,96.0,112.0,128.0,160.0,192.0,224.0,256.0,320.0,384.0,448.0,512.0,640.0,768.0,896.0,1024.0,1280.0,1536.0,1792.0, + 2048.0,2560.0,3072.0,3584.0,4096.0,5120.0,6144.0,7168.0,8192.0,10240.0,12288.0,14336.0,16384.0,20480.0,24576.0, + 28672.0,32768.0,40960.0,49152.0,57344.0,65536.0,81920.0,98304.0,114688.0,131072.0,163840.0,196608.0, + 229376.0,262144.0,327680.0,393216.0,458752.0,524288.0,655360.0,786432.0,917504.0,1048576.0,1310720.0, + 1572864.0,1835008.0,2097152.0,2621440.0,3145728.0,3670016.0,4194304.0,5242880.0,6291456.0,7340032.0, + 8388608.0,10485760.0,12582912.0,14680064.0,16777216.0,20971520.0,25165824.0,29360128.0,33554432.0, + 41943040.0,50331648.0,58720256.0,67108864.0,83886080.0,100663296.0,117440512.0,134217728.0, + 167772160.0,201326592.0,234881024.0,268435456.0,335544320.0,402653184.0,469762048.0,536870912.0, + 671088640.0,805306368.0,939524096.0,1073741824.0,1342177280.0,1610612736.0,1879048192.0, + 2147483648.0,2684354560.0,3221225472.0,3758096384.0,4294967296.0,5368709120.0,6442450944.0,7516192768.0 + }; + + float_t Similarity::byteToFloat(uint8_t b) { + return NORM_TABLE[b]; + } + + uint8_t Similarity::floatToByte(float_t f) { + return Similarity::encodeNorm(f); + } + +#else + + /** Cache of decoded bytes. */ + float_t NORM_TABLE[256]; + bool NORM_TABLE_initd=false; + + //float to bits conversion utilities... + union clvalue { + int32_t i; + float f; //must use a float type, else types dont match up + }; + + int32_t floatToIntBits(float_t value) + { + clvalue u; + int32_t e, f; + u.f = (float)value; + e = u.i & 0x7f800000; + f = u.i & 0x007fffff; + + if (e == 0x7f800000 && f != 0) + u.i = 0x7fc00000; + + return u.i; + } + + float_t intBitsToFloat(int32_t bits) + { + clvalue u; + u.i = bits; + return u.f; + } + + + float_t Similarity::byteToFloat(uint8_t b) { + if (b == 0) // zero is a special case + return 0.0f; + int32_t mantissa = b & 7; + int32_t exponent = (b >> 3) & 31; + int32_t bits = ((exponent+(63-15)) << 24) | (mantissa << 21); + return intBitsToFloat(bits); + } + + uint8_t Similarity::floatToByte(float_t f) { + if (f < 0.0f) // round negatives up to zero + f = 0.0f; + + if (f == 0.0f) // zero is a special case + return 0; + + int32_t bits = floatToIntBits(f); // parse float_t into parts + int32_t mantissa = (bits & 0xffffff) >> 21; + int32_t exponent = (((bits >> 24) & 0x7f) - 63) + 15; + + if (exponent > 31) { // overflow: use max value + exponent = 31; + mantissa = 7; + } + + if (exponent < 0) { // underflow: use min value + exponent = 0; + mantissa = 1; + } + + return (uint8_t)((exponent << 3) | mantissa); // pack into a uint8_t + } +#endif + + /** The Similarity implementation used by default. */ + Similarity* Similarity_defaultImpl=NULL; + + void Similarity::setDefault(Similarity* similarity) { + _CLDELETE(Similarity_defaultImpl); + Similarity_defaultImpl = similarity; + } + + Similarity* Similarity::getDefault() { + if ( Similarity_defaultImpl == NULL ){ + Similarity_defaultImpl = _CLNEW DefaultSimilarity(); + } + return Similarity_defaultImpl; + } + void Similarity::_shutdown(){ + _CLDELETE(Similarity_defaultImpl); + } + + float_t Similarity::decodeNorm(uint8_t b) { +#ifndef _CL_HAVE_NO_FLOAT_BYTE + if ( !NORM_TABLE_initd ){ + for (int i = 0; i < 256; i++) + NORM_TABLE[i] = byteToFloat(i); + NORM_TABLE_initd=true; + } +#endif + return NORM_TABLE[b]; + } + + uint8_t Similarity::encodeNorm(float_t f) { +#ifdef _CL_HAVE_NO_FLOAT_BYTE + int32_t i=0; + if ( f <= 0 ) + return 0; + + while ( i<256 && f > NORM_TABLE[i] ){ + i++; + } + if ( i == 0 ) + return 0; + else if ( i == 255 && f>NORM_TABLE[255] ) + return 255; + else + return i; +#else + return floatToByte(f); +#endif + } + + + float_t Similarity::idf(Term* term, Searcher* searcher) { + return idf(searcher->docFreq(term), searcher->maxDoc()); + } + + + float_t Similarity::idf(CL_NS(util)::CLVector* terms, Searcher* searcher) { + float_t _idf = 0.0f; + for (CL_NS(util)::CLVector::iterator i = terms->begin(); i != terms->end(); i++ ) { + _idf += idf((Term*)*i, searcher); + } + return _idf; + } + + Similarity::~Similarity(){ + } + + + + + DefaultSimilarity::DefaultSimilarity(){ + } + DefaultSimilarity::~DefaultSimilarity(){ + } + + float_t DefaultSimilarity::lengthNorm(const TCHAR* /*fieldName*/, int32_t numTerms) { + if ( numTerms == 0 ) //prevent div by zero + return 0; + return (1.0 / sqrt((float_t)numTerms)); + } + + float_t DefaultSimilarity::queryNorm(float_t sumOfSquaredWeights) { + if ( sumOfSquaredWeights == 0 ) //prevent div by zero + return 0.0f; + return (float_t)(1.0 / sqrt(sumOfSquaredWeights)); + } + + float_t DefaultSimilarity::tf(float_t freq) { + return sqrt(freq); + } + + float_t DefaultSimilarity::sloppyFreq(int32_t distance) { + return 1.0f / (distance + 1); + } + + float_t DefaultSimilarity::idf(int32_t docFreq, int32_t numDocs) { + return (float_t)(log(numDocs/(float_t)(docFreq+1)) + 1.0); + } + + float_t DefaultSimilarity::coord(int32_t overlap, int32_t maxOverlap) { + if ( maxOverlap == 0 ) + return 0.0f; + return overlap / (float_t)maxOverlap; + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Similarity.h clucene-core-2.3.3.4/src/core/CLucene/search/Similarity.h --- clucene-core-0.9.21b/src/core/CLucene/search/Similarity.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Similarity.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,279 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Similarity_ +#define _lucene_search_Similarity_ + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +class Searcher; +class DefaultSimilarity; + +/** Expert: Scoring API. +*

Subclasses implement search scoring. +* +*

The score of query q for document d is defined +* in terms of these methods as follows: +* +* +* +* +* +* +* +* +* +* +* +*
score(q,d) =
+* Σ +* {@link #tf(int32_t) tf}(t in d) * +* {@link #idf(Term,Searcher) idf}(t) * +* {@link Field#getBoost getBoost}(t.field in d) * +* {@link #lengthNorm(TCHAR*,int32_t) lengthNorm}(t.field in d) +*  * +* {@link #coord(int32_t,int32_t) coord}(q,d) * +* {@link #queryNorm(float_t) queryNorm}(q) +*
+* t in q +*
+* +* @see #setDefault(Similarity) +* @see IndexWriter#setSimilarity(Similarity) +* @see Searcher#setSimilarity(Similarity) +*/ +class CLUCENE_EXPORT Similarity:LUCENE_BASE { +public: + virtual ~Similarity(); + + /** Set the default Similarity implementation used by indexing and search + * code. + * + * @see Searcher#setSimilarity(Similarity) + * @see IndexWriter#setSimilarity(Similarity) + */ + static void setDefault(Similarity* similarity); + + /** Return the default Similarity implementation used by indexing and search + * code. + * + *

This is initially an instance of {@link DefaultSimilarity}. + * + * @see Searcher#setSimilarity(Similarity) + * @see IndexWriter#setSimilarity(Similarity) + */ + static Similarity* getDefault(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + /** Encodes a normalization factor for storage in an index. + * + *

The encoding uses a five-bit exponent and three-bit mantissa, thus + * representing values from around 7x10^9 to 2x10^-9 with about one + * significant decimal digit of accuracy. Zero is also represented. + * Negative numbers are rounded up to zero. Values too large to represent + * are rounded down to the largest representable value. Positive values too + * small to represent are rounded up to the smallest positive representable + * value. + * + * @see Field#setBoost(float_t) + */ + static uint8_t encodeNorm(float_t f); + + /** Decodes a normalization factor stored in an index. + * @see #encodeNorm(float_t) + */ + static float_t decodeNorm(uint8_t b); + + static uint8_t floatToByte(float_t f); + static float_t byteToFloat(uint8_t b); + + /** Computes a score factor for a phrase. + * + *

The default implementation sums the {@link #idf(Term,Searcher)} factor + * for each term in the phrase. + * + * @param terms the terms in the phrase + * @param searcher the document collection being searched + * @return a score factor for the phrase + */ + float_t idf(CL_NS(util)::CLVector* terms, Searcher* searcher); + + template + float_t idf( TermIterator first, TermIterator last, Searcher* searcher ) + { + float_t _idf = 0.0f; + for( ; first != last; first++ ) { + _idf += idf(*first, searcher); + } + return _idf; + } + + //float_t idf(Term** terms, Searcher* searcher); + + + /** Computes a score factor for a simple term. + * + *

The default implementation is:

+   *   return idf(searcher.docFreq(term), searcher.maxDoc());
+   * 
+ * + * Note that {@link Searcher#maxDoc()} is used instead of + * {@link IndexReader#numDocs()} because it is proportional to + * {@link Searcher#docFreq(Term)} , i.e., when one is inaccurate, + * so is the other, and in the same direction. + * + * @param term the term in question + * @param searcher the document collection being searched + * @return a score factor for the term + */ + float_t idf(CL_NS(index)::Term* term, Searcher* searcher); + + + /** Computes a score factor based on a term or phrase's frequency in a + * document. This value is multiplied by the {@link #idf(Term, Searcher)} + * factor for each term in the query and these products are then summed to + * form the initial score for a document. + * + *

Terms and phrases repeated in a document indicate the topic of the + * document, so implementations of this method usually return larger values + * when freq is large, and smaller values when freq + * is small. + * + *

The default implementation calls {@link #tf(float_t)}. + * + * @param freq the frequency of a term within a document + * @return a score factor based on a term's within-document frequency + */ + inline float_t tf(int32_t freq){ return tf((float_t)freq); } + + /** Computes the normalization value for a field given the total number of + * terms contained in a field. These values, together with field boosts, are + * stored in an index and multipled into scores for hits on each field by the + * search code. + * + *

Matches in longer fields are less precise, so implemenations of this + * method usually return smaller values when numTokens is large, + * and larger values when numTokens is small. + * + *

That these values are computed under {@link + * IndexWriter#addDocument(Document)} and stored then using + * {#encodeNorm(float_t)}. Thus they have limited precision, and documents + * must be re-indexed if this method is altered. + * + * @param fieldName the name of the field + * @param numTokens the total number of tokens contained in fields named + * fieldName of doc. + * @return a normalization factor for hits on this field of this document + * + * @see Field#setBoost(float_t) + */ + virtual float_t lengthNorm(const TCHAR* fieldName, int32_t numTokens) = 0; + + /** Computes the normalization value for a query given the sum of the squared + * weights of each of the query terms. This value is then multipled into the + * weight of each query term. + * + *

This does not affect ranking, but rather just attempts to make scores + * from different queries comparable. + * + * @param sumOfSquaredWeights the sum of the squares of query term weights + * @return a normalization factor for query weights + */ + virtual float_t queryNorm(float_t sumOfSquaredWeights) = 0; + + /** Computes the amount of a sloppy phrase match, based on an edit distance. + * This value is summed for each sloppy phrase match in a document to form + * the frequency that is passed to {@link #tf(float_t)}. + * + *

A phrase match with a small edit distance to a document passage more + * closely matches the document, so implementations of this method usually + * return larger values when the edit distance is small and smaller values + * when it is large. + * + * @see PhraseQuery#setSlop(int32_t) + * @param distance the edit distance of this sloppy phrase match + * @return the frequency increment for this match + */ + virtual float_t sloppyFreq(int32_t distance) = 0; + + /** Computes a score factor based on a term or phrase's frequency in a + * document. This value is multiplied by the {@link #idf(Term, Searcher)} + * factor for each term in the query and these products are then summed to + * form the initial score for a document. + * + *

Terms and phrases repeated in a document indicate the topic of the + * document, so implemenations of this method usually return larger values + * when freq is large, and smaller values when freq + * is small. + * + * @param freq the frequency of a term within a document + * @return a score factor based on a term's within-document frequency + */ + virtual float_t tf(float_t freq) = 0; + + /** Computes a score factor based on a term's document frequency (the number + * of documents which contain the term). This value is multiplied by the + * {@link #tf(int32_t)} factor for each term in the query and these products are + * then summed to form the initial score for a document. + * + *

Terms that occur in fewer documents are better indicators of topic, so + * implemenations of this method usually return larger values for rare terms, + * and smaller values for common terms. + * + * @param docFreq the number of documents which contain the term + * @param numDocs the total number of documents in the collection + * @return a score factor based on the term's document frequency + */ + virtual float_t idf(int32_t docFreq, int32_t numDocs) = 0; + + /** Computes a score factor based on the fraction of all query terms that a + * document contains. This value is multiplied into scores. + * + *

The presence of a large portion of the query terms indicates a better + * match with the query, so implemenations of this method usually return + * larger values when the ratio between these parameters is large and smaller + * values when the ratio between them is small. + * + * @param overlap the number of query terms matched in the document + * @param maxOverlap the total number of terms in the query + * @return a score factor based on term overlap with the query + */ + virtual float_t coord(int32_t overlap, int32_t maxOverlap) = 0; +}; + + +/** Expert: Default scoring implementation. */ +class CLUCENE_EXPORT DefaultSimilarity: public Similarity { +public: + DefaultSimilarity(); + ~DefaultSimilarity(); + + /** Implemented as 1/sqrt(numTerms). */ + float_t lengthNorm(const TCHAR* fieldName, int32_t numTerms); + + /** Implemented as 1/sqrt(sumOfSquaredWeights). */ + float_t queryNorm(float_t sumOfSquaredWeights); + + /** Implemented as sqrt(freq). */ + inline float_t tf(float_t freq); + + /** Implemented as 1 / (distance + 1). */ + float_t sloppyFreq(int32_t distance); + + /** Implemented as log(numDocs/(docFreq+1)) + 1. */ + float_t idf(int32_t docFreq, int32_t numDocs); + + /** Implemented as overlap / maxOverlap. */ + float_t coord(int32_t overlap, int32_t maxOverlap); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/SloppyPhraseScorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/SloppyPhraseScorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/SloppyPhraseScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/SloppyPhraseScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,175 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Scorer.h" +#include "CLucene/index/Terms.h" +#include "SearchHeader.h" +#include "_PhrasePositions.h" +#include "_SloppyPhraseScorer.h" +#include "Similarity.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + SloppyPhraseScorer::SloppyPhraseScorer(Weight* _weight, TermPositions** tps, int32_t* offsets, + Similarity* similarity, int32_t _slop, uint8_t* norms): + PhraseScorer(_weight,tps,offsets,similarity,norms),slop(_slop),repeats(NULL),repeatsLen(0){ + //Func - Constructor + //Pre - tps != NULL + // tpsLength >= 0 + // n != NULL + //Post - Instance has been created + + CND_PRECONDITION(tps != NULL, "tps is NULL"); + } + + SloppyPhraseScorer::~SloppyPhraseScorer(){ + _CLDELETE_LARRAY(repeats); + } + + float_t SloppyPhraseScorer::phraseFreq() { + + CND_PRECONDITION(first != NULL,"first is NULL"); + CND_PRECONDITION(last != NULL,"last is NULL"); + CND_PRECONDITION(pq != NULL,"pq is NULL"); + + int32_t end = initPhrasePositions(); + float_t freq = 0.0f; + bool done = (end<0); + + while (!done) { + PhrasePositions* pp = pq->pop(); + int32_t start = pp->position; + int32_t next = pq->top()->position; + + bool tpsDiffer = true; + for (int32_t pos = start; pos <= next || !tpsDiffer; pos = pp->position) { + if (pos<=next && tpsDiffer) + start = pos; // advance pp to min window + if (!pp->nextPosition()) { + done = true; // ran out of a term -- done + break; + } + tpsDiffer = !pp->repeats || termPositionsDiffer(pp); + } + + const int32_t matchLength = end - start; + if (matchLength <= slop) + freq += getSimilarity()->sloppyFreq(matchLength); // score match + + if (pp->position > end) + end = pp->position; + pq->put(pp); // restore pq + + } + return freq; + } + + int32_t SloppyPhraseScorer::initPhrasePositions() { + int32_t end = 0; + PhrasePositions* pp = NULL; // used in order to solve msvc6 scope issues + + // no repeats at all (most common case is also the simplest one) + if (checkedRepeats && repeats==NULL) { + // build queue from list + pq->clear(); + for (pp = first; pp != NULL; pp = pp->_next) { + pp->firstPosition(); + if (pp->position > end) + end = pp->position; + pq->put(pp); // build pq from list + } + return end; + } + + // position the pp's + for (pp = first; pp != NULL; pp = pp->_next) + pp->firstPosition(); + + // one time initializatin for this scorer + if (!checkedRepeats) { + checkedRepeats = true; + // check for repeats + // TODO: is this correct, filtering clones using CLHashMap??? + PhrasePositionsMap* m = NULL; + for (pp = first; pp != NULL; pp = pp->_next) { + int32_t tpPos = pp->position + pp->offset; + for (PhrasePositions* pp2 = pp->_next; pp2 != NULL; pp2 = pp2->_next) { + int32_t tpPos2 = pp2->position + pp2->offset; + if (tpPos2 == tpPos) { + if (m == NULL) + m = new PhrasePositionsMap(false,false); + pp->repeats = true; + pp2->repeats = true; + m->put(pp,NULL); + m->put(pp2,NULL); + } + } + } + if (m!=NULL) { + repeatsLen = m->size(); + repeats = _CL_NEWARRAY(PhrasePositions*, repeatsLen + 1); + PhrasePositionsMap::iterator itr = m->begin(); + size_t pos = 0; + while ( itr!=m->end() ){ + repeats[pos] = itr->first; + ++itr; + ++pos; + } + repeats[repeatsLen + 1] = NULL; // NULL terminate the array + } + delete m; + } + + // with repeats must advance some repeating pp's so they all start with differing tp's + if (repeats!=NULL) { + // must propagate higher offsets first (otherwise might miss matches). + qsort(repeats, repeatsLen, sizeof(PhrasePositions*), comparePhrasePositions); + // now advance them + for (size_t i = 0; i < repeatsLen; i++) { + PhrasePositions* pp = repeats[i]; + while (!termPositionsDiffer(pp)) { + if (!pp->nextPosition()) + return -1; // ran out of a term -- done + } + } + } + + // build queue from list + pq->clear(); + for (pp = first; pp != NULL; pp = pp->_next) { + if (pp->position > end) + end = pp->position; + pq->put(pp); // build pq from list + } + + return end; + } + + // disalow two pp's to have the same tp position, so that same word twice + // in query would go elswhere in the matched doc + bool SloppyPhraseScorer::termPositionsDiffer(PhrasePositions* pp) { + // efficiency note: a more efficient implemention could keep a map between repeating + // pp's, so that if pp1a, pp1b, pp1c are repeats term1, and pp2a, pp2b are repeats + // of term2, pp2a would only be checked against pp2b but not against pp1a, pp1b, pp1c. + // However this would complicate code, for a rather rare case, so choice is to compromise here. + const int32_t tpPos = pp->position + pp->offset; + for (size_t i = 0; i < repeatsLen; i++) { + PhrasePositions* pp2 = repeats[i]; + if (pp2 == pp) + continue; + const int32_t tpPos2 = pp2->position + pp2->offset; + if (tpPos2 == tpPos) + return false; + } + return true; + } + + TCHAR* SloppyPhraseScorer::toString(){ + return stringDuplicate(_T("SloppyPhraseScorer")); + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_SloppyPhraseScorer.h clucene-core-2.3.3.4/src/core/CLucene/search/_SloppyPhraseScorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/_SloppyPhraseScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_SloppyPhraseScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_SloppyPhraseScorer_ +#define _lucene_search_SloppyPhraseScorer_ + +#include "_PhraseScorer.h" + +CL_NS_DEF(search) + class SloppyPhraseScorer: public PhraseScorer { + private: + int32_t slop; + PhrasePositions** repeats; + size_t repeatsLen; + bool checkedRepeats; + public: + SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, + int32_t* offsets, Similarity* similarity, + int32_t _slop, uint8_t* norms); + virtual ~SloppyPhraseScorer(); + protected: + /** + * Score a candidate doc for all slop-valid position-combinations (matches) + * encountered while traversing/hopping the PhrasePositions. + *
The score contribution of a match depends on the distance: + *
- highest score for distance=0 (exact match). + *
- score gets lower as distance gets higher. + *
Example: for query "a b"~2, a document "x a b a y" can be scored twice: + * once for "a b" (distance=0), and once for "b a" (distance=2). + *
Pssibly not all valid combinations are encountered, because for efficiency + * we always propagate the least PhrasePosition. This allows to base on + * PriorityQueue and move forward faster. + * As result, for example, document "a b c b a" + * would score differently for queries "a b c"~4 and "c b a"~4, although + * they really are equivalent. + * Similarly, for doc "a b c b a f g", query "c b"~2 + * would get same score as "g f"~2, although "c b"~2 could be matched twice. + * We may want to fix this in the future (currently not, for performance reasons). + */ + float_t phraseFreq(); + private: + typedef CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void > + PhrasePositionsMap; + static int comparePhrasePositions(const void* x, const void* y){ + return static_cast(y)->offset - static_cast(x)->offset; + } + + /** + * Init PhrasePositions in place. + * There is a one time initializatin for this scorer: + *
- Put in repeats[] each pp that has another pp with same position in the doc. + *
- Also mark each such pp by pp.repeats = true. + *
Later can consult with repeats[] in termPositionsDiffer(pp), making that check efficient. + * In particular, this allows to score queries with no repetiotions with no overhead due to this computation. + *
- Example 1 - query with no repetitions: "ho my"~2 + *
- Example 2 - query with repetitions: "ho my my"~2 + *
- Example 3 - query with repetitions: "my ho my"~2 + *
Init per doc w/repeats in query, includes propagating some repeating pp's to avoid false phrase detection. + * @return end (max position), or -1 if any term ran out (i.e. done) + * @throws IOException + */ + int32_t initPhrasePositions(); + + // disalow two pp's to have the same tp position, so that same word twice + // in query would go elswhere in the matched doc + bool termPositionsDiffer(PhrasePositions* pp); + + public: + virtual TCHAR* toString(); + }; +CL_NS_END +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Sort.cpp clucene-core-2.3.3.4/src/core/CLucene/search/Sort.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/Sort.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Sort.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,340 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Sort.h" +#include "Compare.h" +#include "SearchHeader.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + + SortField* SortField_FIELD_SCORE = NULL; + SortField* SortField_FIELD_DOC = NULL; + SortField* SortField::FIELD_SCORE(){ + if ( SortField_FIELD_SCORE == NULL ) + SortField_FIELD_SCORE = _CLNEW SortField (NULL, DOCSCORE,false); + return SortField_FIELD_SCORE; + } + SortField* SortField::FIELD_DOC(){ + if ( SortField_FIELD_DOC == NULL ) + SortField_FIELD_DOC = _CLNEW SortField (NULL, DOC,false); + return SortField_FIELD_DOC; + } + void SortField::_shutdown(){ + _CLDELETE(SortField_FIELD_SCORE); + _CLDELETE(SortField_FIELD_DOC); + } + + Sort* Sort_RELEVANCE = NULL; + Sort* Sort_INDEXORDER = NULL; + Sort* Sort::RELEVANCE(){ + if ( Sort_RELEVANCE == NULL ) + Sort_RELEVANCE = _CLNEW Sort(); + return Sort_RELEVANCE; + } + Sort* Sort::INDEXORDER(){ + if ( Sort_INDEXORDER == NULL ) + Sort_INDEXORDER = _CLNEW Sort (SortField::FIELD_DOC()); + return Sort_INDEXORDER; + } + void Sort::_shutdown(){ + _CLDELETE(Sort_RELEVANCE); + _CLDELETE(Sort_INDEXORDER); + } + + ScoreDocComparator* ScoreDocComparator_INDEXORDER = NULL; + ScoreDocComparator* ScoreDocComparator_RELEVANCE = NULL; + ScoreDocComparator* ScoreDocComparator::INDEXORDER(){ + if ( ScoreDocComparator_INDEXORDER == NULL ) + ScoreDocComparator_INDEXORDER = _CLNEW ScoreDocComparators::IndexOrder; + return ScoreDocComparator_INDEXORDER; + } + ScoreDocComparator* ScoreDocComparator::RELEVANCE(){ + if ( ScoreDocComparator_RELEVANCE == NULL ) + ScoreDocComparator_RELEVANCE = _CLNEW ScoreDocComparators::Relevance; + return ScoreDocComparator_RELEVANCE; + } + void ScoreDocComparator::_shutdown(){ + _CLDELETE(ScoreDocComparator_INDEXORDER); + _CLDELETE(ScoreDocComparator_RELEVANCE); + } + + + + SortField::SortField (const TCHAR* field) { + this->type = AUTO; + this->reverse = false; + this->field = CLStringIntern::intern(field); + this->factory = NULL; + } + + SortField::SortField (const TCHAR* field, int32_t type, bool reverse) { + this->field = (field != NULL) ? CLStringIntern::intern(field) : field; + this->type = type; + this->reverse = reverse; + this->factory = NULL; + } + + SortField::SortField(const SortField& clone){ + this->field = (clone.field != NULL) ? CLStringIntern::intern(clone.field) : clone.field; + this->type = clone.type; + this->reverse = clone.reverse; + this->factory = clone.factory; + } + SortField* SortField::clone() const{ + return _CLNEW SortField(*this); + } + + const TCHAR* SortField::getField() const { + return field; + } + int32_t SortField::getType() const { + return type; + } + bool SortField::getReverse() const { + return reverse; + } + SortComparatorSource* SortField::getFactory() const { + return factory; + } + + /** Creates a sort by terms in the given field sorted + * according to the given locale. + * @param field Name of field to sort by, cannot be null. + * @param locale Locale of values in the field. + */ + /*SortField::SortField (TCHAR* field, Locale* locale) { + this->field = (field != NULL) ? CLStringIntern::intern(field): field; + this->type = STRING; + this->locale = locale; + }*/ + + /** Creates a sort, possibly in reverse, by terms in the given field sorted + * according to the given locale. + * @param field Name of field to sort by, cannot be null. + * @param locale Locale of values in the field. + */ + /*SortField::SortField (TCHAR* field, Locale* locale, bool reverse) { + this->field = (field != NULL) ? CLStringIntern::intern(field): field; + this->type = STRING; + this->locale = locale; + this->reverse = reverse; + }*/ + + + SortField::SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse) { + this->field = (field != NULL) ? CLStringIntern::intern(field): field; + this->type = CUSTOM; + this->reverse = reverse; + this->factory = comparator; + } + + SortField::~SortField(){ + CLStringIntern::unintern(field); + } + + TCHAR* SortField::toString() const { + CL_NS(util)::StringBuffer buffer; + switch (type) { + case DOCSCORE: + buffer.append(_T("")); + break; + + case DOC: + buffer.append(_T("")); + break; + + case CUSTOM: + buffer.append (_T("getName()); + buffer.append(_T(">")); + break; + + default: + buffer.append( _T("\"")); + buffer.append( field ); + buffer.append( _T("\"") ); + break; + } + + //if (locale != null) buffer.append ("("+locale+")"); todo: + if (reverse) buffer.appendChar('!'); + + return buffer.toString(); + } + + + + + + + + + + + + + Sort::Sort() { + fields=NULL; + SortField** fields=_CL_NEWARRAY(SortField*,3); + fields[0]=SortField::FIELD_SCORE(); + fields[1]=SortField::FIELD_DOC(); + fields[2]=NULL; + setSort (fields); + _CLDELETE_ARRAY(fields); + } + + Sort::~Sort(){ + clear(); + } + void Sort::clear(){ + if ( fields != NULL ){ + int32_t i=0; + while ( fields[i] != NULL ){ + if ( fields[i] != SortField::FIELD_SCORE() && + fields[i] != SortField::FIELD_DOC() ){ + _CLDELETE(fields[i]); + } + i++; + } + _CLDELETE_ARRAY(fields); + } + } + + Sort::Sort (const TCHAR* field, bool reverse) { + this->fields=NULL; + setSort (field, reverse); + } + + Sort::Sort (const TCHAR** fields) { + this->fields=NULL; + setSort (fields); + } + Sort::Sort (SortField* field) { + this->fields=NULL; + setSort (field); + } + + Sort::Sort (SortField** fields) { + this->fields=NULL; + setSort (fields); + } + + void Sort::setSort (const TCHAR* field, bool reverse) { + clear(); + fields = _CL_NEWARRAY(SortField*,3); + fields[0] = _CLNEW SortField (field, SortField::AUTO, reverse); + fields[1] = SortField::FIELD_DOC(); + fields[2] = NULL; + } + + void Sort::setSort (const TCHAR** fieldnames) { + clear(); + + int32_t n = 0; + while ( fieldnames[n] != NULL ) + n++; + + fields = _CL_NEWARRAY(SortField*,n+1); + for (int32_t i = 0; i < n; ++i) { + fields[i] = _CLNEW SortField (fieldnames[i], SortField::AUTO,false); + } + fields[n]=NULL; + } + + + void Sort::setSort (SortField* field) { + clear(); + + this->fields = _CL_NEWARRAY(SortField*,2); + this->fields[0] = field; + this->fields[1] = NULL; + } + + void Sort::setSort (SortField** fields) { + clear(); + + int n=0; + while ( fields[n] != NULL ) + n++; + this->fields = _CL_NEWARRAY(SortField*,n+1); + for (int i=0;ifields[i]=fields[i]; + } + + TCHAR* Sort::toString() const { + CL_NS(util)::StringBuffer buffer; + + int32_t i = 0; + while ( fields[i] != NULL ){ + if (i>0) + buffer.appendChar(','); + + TCHAR* p = fields[i]->toString(); + buffer.append(p); + _CLDELETE_CARRAY(p); + + i++; + } + + return buffer.toString(); + } + + + + + + + ScoreDocComparator::~ScoreDocComparator(){ + } + + +class ScoreDocComparatorImpl: public ScoreDocComparator{ + Comparable** cachedValues; + FieldCacheAuto* fca; + int32_t cachedValuesLen; +public: + ScoreDocComparatorImpl(FieldCacheAuto* fca){ + this->fca = fca; + if ( fca->contentType != FieldCacheAuto::COMPARABLE_ARRAY ) + _CLTHROWA(CL_ERR_InvalidCast,"Invalid field cache auto type"); + this->cachedValues = fca->comparableArray; + this->cachedValuesLen = fca->contentLen; + } + ~ScoreDocComparatorImpl(){ + } + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j){ + CND_PRECONDITION(i->doc >= 0 && i->doc < cachedValuesLen, "i->doc out of range") + CND_PRECONDITION(j->doc >= 0 && j->doc < cachedValuesLen, "j->doc out of range") + return cachedValues[i->doc]->compareTo (cachedValues[j->doc]); + } + + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i){ + CND_PRECONDITION(i->doc >= 0 && i->doc < cachedValuesLen, "i->doc out of range") + return cachedValues[i->doc]; + } + + int32_t sortType(){ + return SortField::CUSTOM; + } +}; + +ScoreDocComparator* SortComparator::newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname){ + return _CLNEW ScoreDocComparatorImpl(FieldCache::DEFAULT()->getCustom (reader, fieldname, this)); +} +SortComparator::SortComparator(){ +} +SortComparator::~SortComparator(){ +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/Sort.h clucene-core-2.3.3.4/src/core/CLucene/search/Sort.h --- clucene-core-0.9.21b/src/core/CLucene/search/Sort.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/Sort.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,426 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Sort_ +#define _lucene_search_Sort_ + + +//#include "CLucene/index/IndexReader.h" +//#include "SearchHeader.h" +//#include "CLucene/util/Equator.h" +CL_CLASS_DEF(index,IndexReader) +CL_CLASS_DEF(util,Comparable) + +CL_NS_DEF(search) + +//predefine + class SortField; + class Sort; + +/** + * Expert: Compares two ScoreDoc objects for sorting. + * + */ + class CLUCENE_EXPORT ScoreDocComparator { + protected: + ScoreDocComparator(){} + public: + virtual ~ScoreDocComparator(); + + /** + * Compares two ScoreDoc objects and returns a result indicating their + * sort order. + * @param i First ScoreDoc + * @param j Second ScoreDoc + * @return a negative integer if i should come before j
+ * a positive integer if i should come after j
+ * 0 if they are equal + * @see java.util.Comparator + */ + virtual int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) = 0; + + /** + * Returns the value used to sort the given document. The + * object returned must implement the java.io.Serializable + * interface. This is used by multisearchers to determine how + * to collate results from their searchers. + * @see FieldDoc + * @param i Document + * @return Serializable object + */ + virtual CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) = 0; + + + /** + * Returns the type of sort. Should return SortField.SCORE, + * SortField.DOC, SortField.STRING, + * SortField.INTEGER, SortField.FLOAT or + * SortField.CUSTOM. It is not valid to return + * SortField.AUTO. + * This is used by multisearchers to determine how to collate results + * from their searchers. + * @return One of the constants in SortField. + * @see SortField + */ + virtual int32_t sortType() = 0; + + /** Special comparator for sorting hits according to computed relevance (document score). */ + static ScoreDocComparator* RELEVANCE(); + + /** Special comparator for sorting hits according to index order (document number). */ + static ScoreDocComparator* INDEXORDER(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + }; + +/** + * Expert: returns a comparator for sorting ScoreDocs. + * + */ +class CLUCENE_EXPORT SortComparatorSource:LUCENE_BASE { +public: + virtual ~SortComparatorSource(){ + } + + /** + * return a reference to a string describing the name of the comparator + * this is used in the explanation + */ + virtual TCHAR* getName() = 0; + + virtual size_t hashCode() = 0; + + /** + * Creates a comparator for the field in the given index. + * @param reader Index to create comparator for. + * @param fieldname Name of the field to create comparator for. + * @return Comparator of ScoreDoc objects. + * @throws IOException If an error occurs reading the index. + */ + virtual ScoreDocComparator* newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname) = 0; +}; + + +/** + * Abstract base class for sorting hits returned by a Query. + * + *

This class should only be used if the other SortField + * types (SCORE, DOC, STRING, INT, FLOAT) do not provide an + * adequate sorting. It maintains an internal cache of values which + * could be quite large. The cache is an array of Comparable, + * one for each document in the index. There is a distinct + * Comparable for each unique term in the field - if + * some documents have the same term in the field, the cache + * array will have entries which reference the same Comparable. + * + */ +class CLUCENE_EXPORT SortComparator: public SortComparatorSource { +public: + virtual ScoreDocComparator* newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname); + + SortComparator(); + virtual ~SortComparator(); + + /** + * Returns an object which, when sorted according to natural order, + * will order the Term values in the correct order. + *

For example, if the Terms contained integer values, this method + * would return new Integer(termtext). Note that this + * might not always be the most efficient implementation - for this + * particular example, a better implementation might be to make a + * ScoreDocLookupComparator that uses an internal lookup table of int. + * @param termtext The textual value of the term. + * @return An object representing termtext that sorts + * according to the natural order of termtext. + * @see Comparable + * @see ScoreDocComparator + */ + virtual CL_NS(util)::Comparable* getComparable (const TCHAR* termtext) = 0; + +}; + + +/** + * Stores information about how to sort documents by terms in an individual + * field. Fields must be indexed in order to sort by them. + * + */ +class CLUCENE_EXPORT SortField:LUCENE_BASE { +private: + const TCHAR* field; + int32_t type; // defaults to determining type dynamically + //Locale* locale; // defaults to "natural order" (no Locale) + bool reverse; // defaults to natural order + SortComparatorSource* factory; + +protected: + SortField (const SortField& clone); +public: + virtual ~SortField(); + + /** Sort by document score (relevancy). Sort values are Float and higher + * values are at the front. + * PORTING: this is the same as SCORE in java, it had to be renamed because + * SCORE is a system macro on some platforms (AIX). + */ + LUCENE_STATIC_CONSTANT(int32_t, DOCSCORE=0); + + /** Sort by document number (index order). Sort values are Integer and lower + * values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, DOC=1); + + /** Guess type of sort based on field contents. A regular expression is used + * to look at the first term indexed for the field and determine if it + * represents an integer number, a floating point number, or just arbitrary + * string characters. */ + LUCENE_STATIC_CONSTANT(int32_t, AUTO=2); + + /** Sort using term values as Strings. Sort values are String and lower + * values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, STRING=3); + + /** Sort using term values as encoded Integers. Sort values are Integer and + * lower values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, INT=4); + + /** Sort using term values as encoded Floats. Sort values are Float and + * lower values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, FLOAT=5); + + /** Sort using term values as encoded Longs. Sort values are Long and + * lower values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, LONG=6); + + /** Sort using term values as encoded Doubles. Sort values are Double and + * lower values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, DOUBLE=7); + + + /** Sort using a custom Comparator. Sort values are any Comparable and + * sorting is done according to natural order. */ + LUCENE_STATIC_CONSTANT(int32_t, CUSTOM=9); + + // IMPLEMENTATION NOTE: the FieldCache.STRING_INDEX is in the same "namespace" + // as the above static int values. Any new values must not have the same value + // as FieldCache.STRING_INDEX. + + /** Represents sorting by document score (relevancy). */ + static SortField* FIELD_SCORE(); + + /** Represents sorting by document number (index order). */ + static SortField* FIELD_DOC(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + /** Creates a sort by terms in the given field where the type of term value + * is determined dynamically ({@link #AUTO AUTO}). + * @param field Name of field to sort by, cannot be null. + */ + SortField (const TCHAR* field); + //SortField (const TCHAR* field, bool reverse); + //todo: we cannot make reverse use default field of =false. + //because bool and int are the same type in c, overloading is not possible + + /** Creates a sort, possibly in reverse, by terms in the given field with the + * type of term values explicitly given. + * @param field Name of field to sort by. Can be null if + * type is SCORE or DOC. + * @param type Type of values in the terms. + * @param reverse True if natural order should be reversed (default=false). + */ + SortField (const TCHAR* field, int32_t type, bool reverse); + + /* + SortField (TCHAR* field, Locale* locale) { + SortField (TCHAR* field, Locale* locale, bool reverse);*/ + + /** Creates a sort, possibly in reverse, with a custom comparison function. + * @param field Name of field to sort by; cannot be null. + * @param comparator Returns a comparator for sorting hits. + * @param reverse True if natural order should be reversed (default=false). + */ + SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse=false); + + /** Returns the name of the field. Could return null + * if the sort is by SCORE or DOC. + * @return Name of field, possibly null. + */ + const TCHAR* getField() const; + + SortField* clone() const; + + /** Returns the type of contents in the field. + * @return One of the constants SCORE, DOC, AUTO, STRING, INT or FLOAT. + */ + int32_t getType() const; + + /** Returns the Locale by which term values are interpreted. + * May return null if no Locale was specified. + * @return Locale, or null. + */ + /*Locale getLocale() { + return locale; + }*/ + + /** Returns whether the sort should be reversed. + * @return True if natural order should be reversed. + */ + bool getReverse() const; + + SortComparatorSource* getFactory() const; + + TCHAR* toString() const; +}; + + + +/** + * Encapsulates sort criteria for returned hits. + * + *

The fields used to determine sort order must be carefully chosen. + * Documents must contain a single term in such a field, + * and the value of the term should indicate the document's relative position in + * a given sort order. The field must be indexed, but should not be tokenized, + * and does not need to be stored (unless you happen to want it back with the + * rest of your document data). In other words: + * + *

document.add (new Field ("byNumber", Integer.toString(x), false, true, false)); + *
+ * + *

Valid Types of Values

+ * + *

There are three possible kinds of term values which may be put into + * sorting fields: Integers, Floats, or Strings. Unless + * {@link SortField SortField} objects are specified, the type of value + * in the field is determined by parsing the first term in the field. + * + *

Integer term values should contain only digits and an optional + * preceeding negative sign. Values must be base 10 and in the range + * Integer.MIN_VALUE and Integer.MAX_VALUE inclusive. + * Documents which should appear first in the sort + * should have low value integers, later documents high values + * (i.e. the documents should be numbered 1..n where + * 1 is the first and n the last). + * + *

Float term values should conform to values accepted by + * {@link Float Float.valueOf(String)} (except that NaN + * and Infinity are not supported). + * Documents which should appear first in the sort + * should have low values, later documents high values. + * + *

String term values can contain any valid String, but should + * not be tokenized. The values are sorted according to their + * {@link Comparable natural order}. Note that using this type + * of term value has higher memory requirements than the other + * two types. + * + *

Object Reuse

+ * + *

One of these objects can be + * used multiple times and the sort order changed between usages. + * + *

This class is thread safe. + * + *

Memory Usage

+ * + *

Sorting uses of caches of term values maintained by the + * internal HitQueue(s). The cache is static and contains an integer + * or float array of length IndexReader.maxDoc() for each field + * name for which a sort is performed. In other words, the size of the + * cache in bytes is: + * + *

4 * IndexReader.maxDoc() * (# of different fields actually used to sort) + * + *

For String fields, the cache is larger: in addition to the + * above array, the value of every term in the field is kept in memory. + * If there are many unique terms in the field, this could + * be quite large. + * + *

Note that the size of the cache is not affected by how many + * fields are in the index and might be used to sort - only by + * the ones actually used to sort a result set. + * + *

The cache is cleared each time a new IndexReader is + * passed in, or if the value returned by maxDoc() + * changes for the current IndexReader. This class is not set up to + * be able to efficiently sort hits from more than one index + * simultaneously. + * + */ +class CLUCENE_EXPORT Sort:LUCENE_BASE { + // internal representation of the sort criteria + SortField** fields; + void clear(); +public: + ~Sort(); + + /** Represents sorting by computed relevance. Using this sort criteria + * returns the same results as calling {@link Searcher#search(Query) Searcher#search()} + * without a sort criteria, only with slightly more overhead. */ + static Sort* RELEVANCE(); + + /** Represents sorting by index order. */ + static Sort* INDEXORDER(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + + /** Sorts by computed relevance. This is the same sort criteria as + * calling {@link Searcher#search(Query) Searcher#search()} without a sort criteria, only with + * slightly more overhead. */ + Sort(); + + /** Sorts possibly in reverse by the terms in field then by + * index order (document number). The type of value in field is determined + * automatically. + * @see SortField#AUTO + */ + Sort (const TCHAR* field, bool reverse=false); + + /** Sorts in succession by the terms in each field. + * The type of value in field is determined + * automatically. + * @see SortField#AUTO + */ + Sort (const TCHAR** fields); + + /** Sorts by the criteria in the given SortField. */ + Sort (SortField* field); + + /** Sorts in succession by the criteria in each SortField. */ + Sort (SortField** fields); + + /** Sets the sort to the terms in field possibly in reverse, + * then by index order (document number). */ + void setSort (const TCHAR* field, bool reverse=false); + + /** Sets the sort to the terms in each field in succession. */ + void setSort (const TCHAR** fieldnames); + + /** Sets the sort to the given criteria. */ + void setSort (SortField* field); + + /** Sets the sort to the given criteria in succession. */ + void setSort (SortField** fields); + + TCHAR* toString() const; + + /** + * Representation of the sort criteria. + * @return a pointer to the of SortField array used in this sort criteria + */ + SortField** getSort() const{ return fields; } +}; + + + + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/SpanFilter.h clucene-core-2.3.3.4/src/core/CLucene/search/SpanFilter.h --- clucene-core-0.9.21b/src/core/CLucene/search/SpanFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/SpanFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_SpanFilter_ +#define _lucene_search_SpanFilter_ + +#include "Filter.h" +#include "SpanFilterResult.h" + +CL_NS_DEF(search) + +/** Abstract base class providing a mechanism to restrict searches to a subset + of an index and also maintains and returns position information. + + This is useful if you want to compare the positions from a SpanQuery with the positions of items in + a filter. For instance, if you had a SpanFilter that marked all the occurrences of the word "foo" in documents, + and then you entered a new SpanQuery containing bar, you could not only filter by the word foo, but you could + then compare position information for post processing. + */ +class CLUCENE_EXPORT SpanFilter : public Filter +{ +public: + virtual ~SpanFilter() {} + + /** Returns a SpanFilterResult with true for documents which should be permitted in + * search results, and false for those that should not and Spans for where the true docs match. + * @param reader The {@link org.apache.lucene.index.IndexReader} to load position and bitset information from + * @return A {@link SpanFilterResult} + * @throws CLuceneError if there was an issue accessing the necessary information + */ + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ) = 0; + +}; + +CL_NS_END +#endif // _lucene_search_SpanFilter_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/SpanFilterResult.h clucene-core-2.3.3.4/src/core/CLucene/search/SpanFilterResult.h --- clucene-core-0.9.21b/src/core/CLucene/search/SpanFilterResult.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/SpanFilterResult.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,130 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_SpanFilterResult_ +#define _lucene_search_SpanFilterResult_ + +#include "CLucene/util/BitSet.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + +/** + * The results of a SpanQueryFilter. + * Wraps the BitSet and the position information from the SpanQuery + * + * NOTE: This API is still experimental and subject to change. + **/ +class CLUCENE_EXPORT SpanFilterResult +{ +public: + class StartEnd + { + private: + int32_t start; + int32_t end; + + public: + StartEnd( int32_t _start, int32_t _end ) : start(_start), end(_end) + {} + + virtual ~StartEnd() + {} + + /** + * @return The end position of this match + */ + int32_t getEnd() + { + return end; + } + + /** + * The Start position + * @return The start position of this match + */ + int32_t getStart() + { + return start; + } + }; + + + class PositionInfo + { + private: + int32_t doc; + CL_NS(util)::CLList* positions; + + public: + PositionInfo( int32_t _doc ) : doc(_doc) + { + positions = _CLNEW CL_NS(util)::CLList(); + } + + virtual ~PositionInfo() + { + _CLLDELETE( positions ); + } + + void addPosition( int32_t start, int32_t end ) + { + positions->push_back( _CLNEW StartEnd( start, end )); + } + + int32_t getDoc() + { + return doc; + } + + /** + * @return A List of {@link org.apache.lucene.search.SpanFilterResult.StartEnd} objects + */ + CL_NS(util)::CLList* getPositions() + { + return positions; + } + }; + + +private: + CL_NS(util)::BitSet * bits; + CL_NS(util)::CLList * positions; //Spans spans; + +public: + /** + * Constructor + * @param bits The bits for the Filter + * @param positions A List of {@link org.apache.lucene.search.SpanFilterResult.PositionInfo} objects + */ + SpanFilterResult( CL_NS(util)::BitSet * _bits, CL_NS(util)::CLList * _positions ) : + bits( _bits ), positions( _positions ) + {} + + virtual ~SpanFilterResult() + {} + + /** + * The first entry in the array corresponds to the first "on" bit. + * Entries are increasing by document order + * @return A List of PositionInfo objects + */ + CL_NS(util)::CLList * getPositions() + { + return positions; + } + + CL_NS(util)::BitSet * getBits() + { + return bits; + } +}; + +CL_NS_END +#endif // _lucene_search_SpanFilterResult_ + + + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/SpanQueryFilter.cpp clucene-core-2.3.3.4/src/core/CLucene/search/SpanQueryFilter.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/SpanQueryFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/SpanQueryFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,89 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SpanQueryFilter.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/spans/Spans.h" + + +CL_NS_DEF(search) + +SpanQueryFilter::SpanQueryFilter() : query( NULL ) +{} + +SpanQueryFilter::SpanQueryFilter( const CL_NS2(search,spans)::SpanQuery * query ) +{ + this->query = (CL_NS2(search,spans)::SpanQuery *) query->clone(); + bDeleteQuery = true; +} + +SpanQueryFilter::SpanQueryFilter( CL_NS2(search,spans)::SpanQuery * query, bool bDeleteQuery ) +{ + this->query = query; + this->bDeleteQuery = bDeleteQuery; +} + +SpanQueryFilter::SpanQueryFilter( const SpanQueryFilter& copy ) +{ + this->query = (CL_NS2(search,spans)::SpanQuery *) copy.query->clone(); + bDeleteQuery = true; +} + +SpanQueryFilter::~SpanQueryFilter() +{ + if( bDeleteQuery ) + _CLDELETE( query ); +} + +Filter* SpanQueryFilter::clone() const +{ + return _CLNEW SpanQueryFilter( *this ); +} + +CL_NS(util)::BitSet * SpanQueryFilter::bits( CL_NS(index)::IndexReader * reader ) +{ + SpanFilterResult * result = bitSpans( reader ); + CL_NS(util)::BitSet * bits = result->getBits(); + _CLLDELETE( result ); + return bits; +} + +SpanFilterResult * SpanQueryFilter::bitSpans( CL_NS(index)::IndexReader * reader ) +{ + CL_NS(util)::BitSet * bits = _CLNEW CL_NS(util)::BitSet( reader->maxDoc() ); + CL_NS2(search,spans)::Spans * spans = query->getSpans( reader ); + CL_NS(util)::CLList * tmp = new CL_NS(util)::CLList(); + int32_t currentDoc = -1; + SpanFilterResult::PositionInfo * currentInfo = NULL; + + while( spans->next() ) + { + int32_t doc = spans->doc(); + bits->set( doc ); + if( currentDoc != doc ) + { + currentInfo = _CLNEW SpanFilterResult::PositionInfo( doc ); + tmp->push_back( currentInfo ); + currentDoc = doc; + } + currentInfo->addPosition( spans->start(), spans->end() ); + } + return _CLNEW SpanFilterResult( bits, tmp ); +} + +TCHAR* SpanQueryFilter::toString() +{ + TCHAR* qt = query->toString(); + size_t len = _tcslen( qt ) + 21; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T( "QueryWrapperFilter(%s)" ), qt ); + _CLDELETE_CARRAY( qt ); + return ret; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/SpanQueryFilter.h clucene-core-2.3.3.4/src/core/CLucene/search/SpanQueryFilter.h --- clucene-core-0.9.21b/src/core/CLucene/search/SpanQueryFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/SpanQueryFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,74 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_SpanQueryFilter_ +#define _lucene_search_SpanQueryFilter_ + +#include "SpanFilter.h" +#include "spans/SpanQuery.h" + +CL_NS_DEF(search) + +/** + * Constrains search results to only match those which also match a provided + * query. Also provides position information about where each document matches + * at the cost of extra space compared with the QueryWrapperFilter. + * There is an added cost to this above what is stored in a {@link QueryWrapperFilter}. Namely, + * the position information for each matching document is stored. + *

+ * This filter does not cache. See the {@link org.apache.lucene.search.CachingSpanFilter} for a wrapper that + * caches. + * + * @version $Id:$ + */ +class CLUCENE_EXPORT SpanQueryFilter : public SpanFilter +{ +protected: + CL_NS2(search,spans)::SpanQuery * query; + bool bDeleteQuery; + +protected: + SpanQueryFilter(); + SpanQueryFilter( const SpanQueryFilter& copy ); + +public: + /** Constructs a filter which only matches documents matching + * query. + * @param query The {@link org.apache.lucene.search.spans.SpanQuery} to use as the basis for the Filter. + */ + SpanQueryFilter( const CL_NS2(search,spans)::SpanQuery * query ); + + SpanQueryFilter( CL_NS2(search,spans)::SpanQuery * query, bool bDeleteQuery ); + + virtual ~SpanQueryFilter(); + + virtual Filter* clone() const; + + virtual CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader * reader ); + + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ); + + CL_NS2(search,spans)::SpanQuery * getQuery(); + + virtual TCHAR* toString(); + + +// public boolean equals( Object o ) { +// return o instanceof SpanQueryFilter && this.query.equals(((SpanQueryFilter) o).query); +// } +// +// public int hashCode() { +// return query.hashCode() ^ 0x923F64B9; +// } +}; + +inline CL_NS2(search,spans)::SpanQuery * SpanQueryFilter::getQuery() +{ + return query; +} + +CL_NS_END +#endif // _lucene_search_SpanQueryFilter_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/_EmptySpans.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/_EmptySpans.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/_EmptySpans.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/_EmptySpans.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,35 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_EmptySpans_ +#define _lucene_search_spans_EmptySpans_ + +#include "Spans.h" +#include + +CL_NS_DEF2( search, spans ) + +/** CLucene specific: Empty span enumeration, used for optimized cases + * when there are no clauses in SpanNearQuery or SpanOrQuery + */ +class EmptySpans : public Spans +{ +public: + EmptySpans() {} + virtual ~ EmptySpans() {} + + bool next() { return false; } + bool skipTo( int32_t target ) { return false; } + + int32_t doc() const { assert( false ); return -1; } + int32_t start() const { assert( false ); return 0; } + int32_t end() const { assert( false ); return 1; } + + TCHAR* toString() const { return STRDUP_TtoT( _T( "spans()" )); } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_EmptySpans_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/NearSpansOrdered.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/NearSpansOrdered.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/NearSpansOrdered.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/NearSpansOrdered.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,285 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +#include +#include + +#include "_NearSpansOrdered.h" +#include "SpanNearQuery.h" + + +CL_NS_DEF2( search, spans ) + +bool spanDocCompare( Spans * s1, Spans * s2 ) +{ + return s1->doc() < s2->doc(); +} + +NearSpansOrdered::NearSpansOrdered( SpanNearQuery * spanNearQuery, CL_NS(index)::IndexReader * reader ) +{ + firstTime = true; + more = false; + + inSameDoc = false; + + matchDoc = -1; + matchStart = -1; + matchEnd = -1; + + if( spanNearQuery->getClausesCount() < 2 ) + { + TCHAR * tszQry = spanNearQuery->toString(); + size_t bBufLen = _tcslen( tszQry ) + 25; + TCHAR * tszMsg = _CL_NEWARRAY( TCHAR, bBufLen ); + _sntprintf( tszMsg, bBufLen, _T( "Less than 2 clauses: %s" ), tszQry ); + _CLDELETE_LCARRAY( tszQry ); + _CLTHROWT_DEL( CL_ERR_IllegalArgument, tszMsg ); + } + + allowedSlop = spanNearQuery->getSlop(); + + subSpansCount = spanNearQuery->getClausesCount(); + subSpans = _CL_NEWARRAY( Spans *, subSpansCount ); + subSpansByDoc = _CL_NEWARRAY( Spans *, subSpansCount ); + + SpanQuery ** clauses = spanNearQuery->getClauses(); + for( size_t i = 0; i < subSpansCount; i++ ) + { + subSpans[ i ] = clauses[ i ]->getSpans( reader ); + subSpansByDoc[ i ] = subSpans[ i ]; // used in toSameDoc() + } + clauses = NULL; + + query = spanNearQuery; // kept for toString() only. +} + +NearSpansOrdered::~NearSpansOrdered() +{ + for( size_t i = 0; i < subSpansCount; i++ ) + _CLLDELETE( subSpans[ i ] ); + + _CLDELETE_LARRAY( subSpans ); + _CLDELETE_LARRAY( subSpansByDoc ); +} + +bool NearSpansOrdered::next() +{ + if( firstTime ) + { + firstTime = false; + for( size_t i = 0; i < subSpansCount; i++ ) + { + if( ! subSpans[ i ]->next() ) + { + more = false; + return false; + } + } + more = true; + } + return advanceAfterOrdered(); +} + +bool NearSpansOrdered::skipTo( int32_t target ) +{ + if( firstTime ) + { + firstTime = false; + for( size_t i = 0; i < subSpansCount; i++ ) + { + if( ! subSpans[ i ]->skipTo( target )) + { + more = false; + return false; + } + } + more = true; + } + else if( more && ( subSpans[ 0 ]->doc() < target )) + { + if( subSpans[ 0 ]->skipTo( target )) + { + inSameDoc = false; + } + else + { + more = false; + return false; + } + } + return advanceAfterOrdered(); +} + +bool NearSpansOrdered::advanceAfterOrdered() +{ + while( more && ( inSameDoc || toSameDoc() )) + { + if( stretchToOrder() && shrinkToAfterShortestMatch() ) + return true; + } + return false; // no more matches +} + +bool NearSpansOrdered::toSameDoc() +{ + sort( subSpansByDoc, subSpansByDoc + subSpansCount, spanDocCompare ); + size_t firstIndex = 0; + int32_t maxDoc = subSpansByDoc[ subSpansCount-1 ]->doc(); + while( subSpansByDoc[ firstIndex ]->doc() != maxDoc ) + { + if( ! subSpansByDoc[ firstIndex ]->skipTo( maxDoc )) + { + more = false; + inSameDoc = false; + return false; + } + maxDoc = subSpansByDoc[ firstIndex ]->doc(); + if( ++firstIndex == subSpansCount ) + firstIndex = 0; + } + +#ifdef _DEBUG + for( size_t i = 0; i < subSpansCount; i++ ) + { + assert( subSpansByDoc[ i ]->doc() == maxDoc ); +// : " NearSpansOrdered.toSameDoc() spans " + subSpansByDoc[0] +// + "\n at doc " + subSpansByDoc[i].doc() +// + ", but should be at " + maxDoc; + } +#endif //_DEBUG + + inSameDoc = true; + return true; +} + +bool NearSpansOrdered::docSpansOrdered( Spans * spans1, Spans * spans2 ) +{ + assert( spans1->doc() == spans2->doc() ); // "doc1 " + spans1.doc() + " != doc2 " + spans2.doc(); + int32_t start1 = spans1->start(); + int32_t start2 = spans2->start(); + + /* Do not call docSpansOrdered(int,int,int,int) to avoid invoking .end() : */ // CLucene - why? + return ( start1 == start2 ) ? ( spans1->end() < spans2->end() ) : ( start1 < start2 ); +} + +bool NearSpansOrdered::docSpansOrdered(int start1, int end1, int start2, int end2) +{ + return ( start1 == start2 ) ? ( end1 < end2 ) : ( start1 < start2 ); +} + +bool NearSpansOrdered::stretchToOrder() +{ + matchDoc = subSpans[ 0 ]->doc(); + for( size_t i = 1; inSameDoc && ( i < subSpansCount ); i++ ) + { + while( ! docSpansOrdered( subSpans[ i-1 ], subSpans[ i ] )) + { + if( ! subSpans[ i ]->next() ) + { + inSameDoc = false; + more = false; + break; + } + else if( matchDoc != subSpans[ i ]->doc() ) + { + inSameDoc = false; + break; + } + } + } + return inSameDoc; +} + +bool NearSpansOrdered::shrinkToAfterShortestMatch() +{ + matchStart = subSpans[ subSpansCount - 1 ]->start(); + matchEnd = subSpans[ subSpansCount - 1]->end(); + + int32_t matchSlop = 0; + int32_t lastStart = matchStart; + int32_t lastEnd = matchEnd; + + for( int32_t i = (int32_t)subSpansCount - 2; i >= 0; i-- ) + { + Spans * prevSpans = subSpans[ i ]; + int32_t prevStart = prevSpans->start(); + int32_t prevEnd = prevSpans->end(); + + while( true ) // Advance prevSpans until after (lastStart, lastEnd) + { + if( ! prevSpans->next() ) + { + inSameDoc = false; + more = false; + break; // Check remaining subSpans for final match. + } + else if( matchDoc != prevSpans->doc() ) + { + inSameDoc = false; // The last subSpans is not advanced here. + break; // Check remaining subSpans for last match in this document. + } + else + { + int32_t ppStart = prevSpans->start(); + int32_t ppEnd = prevSpans->end(); // Cannot avoid invoking .end() + if( ! docSpansOrdered( ppStart, ppEnd, lastStart, lastEnd )) + { + break; // Check remaining subSpans. + } + else + { // prevSpans still before (lastStart, lastEnd) + prevStart = ppStart; + prevEnd = ppEnd; + } + } + } + + assert( prevStart <= matchStart ); + if( matchStart > prevEnd ) // Only non overlapping spans add to slop. + matchSlop += ( matchStart - prevEnd ); + + /* Do not break on (matchSlop > allowedSlop) here to make sure + * that subSpans[0] is advanced after the match, if any. + */ + matchStart = prevStart; + lastStart = prevStart; + lastEnd = prevEnd; + } + + return matchSlop <= allowedSlop; // ordered and allowed slop +} + +TCHAR* NearSpansOrdered::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQuery = query->toString(); + + buffer.append( _T( "NearSpansOrdered(" )); + buffer.append( tszQuery ); + buffer.append( _T( ")@" )); + if( firstTime ) + buffer.append( _T( "START" )); + else if( more ) + { + buffer.appendInt( doc() ); + buffer.append( _T( ":" )); + buffer.appendInt( start() ); + buffer.append( _T( "-" )); + buffer.appendInt( end() ); + } + else + buffer.append( _T( "END" )); + + _CLDELETE_ARRAY( tszQuery ); + + return buffer.toString(); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/_NearSpansOrdered.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/_NearSpansOrdered.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/_NearSpansOrdered.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/_NearSpansOrdered.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,106 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_NearSpansOrdered_ +#define _lucene_search_spans_NearSpansOrdered_ + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF2(search, spans, SpanNearQuery) +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + +/** A Spans that is formed from the ordered subspans of a SpanNearQuery + * where the subspans do not overlap and have a maximum slop between them. + *

+ * The formed spans only contains minimum slop matches.
+ * The matching slop is computed from the distance(s) between + * the non overlapping matching Spans.
+ * Successive matches are always formed from the successive Spans + * of the SpanNearQuery. + *

+ * The formed spans may contain overlaps when the slop is at least 1. + * For example, when querying using + *

t1 t2 t3
+ * with slop at least 1, the fragment: + *
t1 t2 t1 t3 t2 t3
+ * matches twice: + *
t1 t2 .. t3      
+ *
      t1 .. t2 t3
+ */ +class NearSpansOrdered : public Spans +{ +private: + int32_t allowedSlop; + bool firstTime; + bool more; + + /** The spans in the same order as the SpanNearQuery */ + Spans ** subSpans; + size_t subSpansCount; + + /** Indicates that all subSpans have same doc() */ + bool inSameDoc; + + int32_t matchDoc; + int32_t matchStart; + int32_t matchEnd; + + Spans ** subSpansByDoc; + + SpanNearQuery * query; + +public: + NearSpansOrdered( SpanNearQuery * spanNearQuery, CL_NS(index)::IndexReader * reader ); + virtual ~NearSpansOrdered(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return matchDoc; } + int32_t start() const { return matchStart; } + int32_t end() const { return matchEnd; } + + TCHAR* toString() const; + + /** Check whether two Spans in the same document are ordered. + * @param spans1 + * @param spans2 + * @return true iff spans1 starts before spans2 + * or the spans start at the same position, + * and spans1 ends before spans2. + */ + static bool docSpansOrdered( Spans * spans1, Spans * spans2 ); + +private: + /** Advances the subSpans to just after an ordered match with a minimum slop + * that is smaller than the slop allowed by the SpanNearQuery. + * @return true iff there is such a match. + */ + bool advanceAfterOrdered(); + + /** Advance the subSpans to the same document */ + bool toSameDoc(); + + /** Like {@link #docSpansOrdered(Spans,Spans)}, but use the spans + * starts and ends as parameters. + */ + static bool docSpansOrdered( int32_t start1, int32_t end1, int32_t start2, int32_t end2 ); + + /** Order the subSpans within the same document by advancing all later spans + * after the previous one. + */ + bool stretchToOrder(); + + /** The subSpans are ordered in the same doc, so there is a possible match. + * Compute the slop while making the match as short as possible by advancing + * all subSpans except the last one in reverse order. + */ + bool shrinkToAfterShortestMatch(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_NearSpansOrdered_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/NearSpansUnordered.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/NearSpansUnordered.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/NearSpansUnordered.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/NearSpansUnordered.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,271 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +#include "_NearSpansUnordered.h" +#include "_NearSpansOrdered.h" +#include "SpanNearQuery.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +NearSpansUnordered::SpansCell::SpansCell( NearSpansUnordered * parentSpans, Spans * spans, int32_t index ) +{ + this->parentSpans = parentSpans; + this->spans = spans; + this->index = index; + this->length = -1; +} + +NearSpansUnordered::SpansCell::~SpansCell() +{ + _CLLDELETE( spans ); +} + +bool NearSpansUnordered::SpansCell::adjust( bool condition ) +{ + if( length != -1 ) + parentSpans->totalLength -= length; // subtract old length + + if( condition ) + { + length = end() - start(); + parentSpans->totalLength += length; // add new length + + if( ! parentSpans->max + || doc() > parentSpans->max->doc() + || ( doc() == parentSpans->max->doc() && end() > parentSpans->max->end())) + { + parentSpans->max = this; + } + } + parentSpans->more = condition; + return condition; +} + +TCHAR* NearSpansUnordered::SpansCell::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszSpans = spans->toString(); + + buffer.append( tszSpans ); + buffer.append( _T( "#" )); + buffer.appendInt( index ); + + _CLDELETE_LARRAY( tszSpans ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +bool NearSpansUnordered::CellQueue::lessThan(SpansCell * spans1, SpansCell* spans2 ) +{ + if( spans1->doc() == spans2->doc() ) + return NearSpansOrdered::docSpansOrdered( spans1, spans2 ); + else + return spans1->doc() < spans2->doc(); +} + + +///////////////////////////////////////////////////////////////////////////// +NearSpansUnordered::NearSpansUnordered( SpanNearQuery * query, CL_NS(index)::IndexReader * reader ) +{ + // this->ordered = new ArrayList(); + this->more = true; + this->firstTime = true; + + this->max = NULL; // CLucene specific, SpansCell::adjust tests this member to NULL + this->first = NULL; // CLucene specific + this->last = NULL; // CLucene specific, addToList test this member to NULL + this->totalLength = 0; // CLucene specific + + this->query = query; + this->slop = query->getSlop(); + + SpanQuery ** clauses = query->getClauses(); + this->queue = _CLNEW CellQueue( query->getClausesCount() ); + for( size_t i = 0; i < query->getClausesCount(); i++ ) + { + SpansCell * cell = _CLNEW SpansCell( this, clauses[ i ]->getSpans( reader ), i ); + ordered.push_back( cell ); + } + clauses = NULL; +} + +NearSpansUnordered::~NearSpansUnordered() +{ + for( list::iterator iCell = ordered.begin(); iCell != ordered.end(); iCell++ ) + _CLLDELETE( *iCell ); + + _CLLDELETE( queue ); +} + +bool NearSpansUnordered::next() +{ + if( firstTime ) + { + initList( true ); + listToQueue(); // initialize queue + firstTime = false; + } + else if( more ) + { + if( min()->next() ) // trigger further scanning + queue->adjustTop(); // maintain queue + else + more = false; + } + + while( more ) + { + bool queueStale = false; + if( min()->doc() != max->doc() ) // maintain list + { + queueToList(); + queueStale = true; + } + + // skip to doc w/ all clauses + while( more && first->doc() < last->doc() ) + { + more = first->skipTo( last->doc() );// skip first upto last + firstToLast(); // and move it to the end + queueStale = true; + } + + if( ! more ) + return false; + + // found doc w/ all clauses + if( queueStale ) // maintain the queue + { + listToQueue(); + queueStale = false; + } + + if( atMatch() ) + return true; + + more = min()->next(); + if( more ) + queue->adjustTop(); // maintain queue + } + + return false; // no more matches +} + +bool NearSpansUnordered::skipTo( int32_t target ) +{ + if( firstTime ) // initialize + { + initList( false ); + for( SpansCell * cell = first; more && cell; cell = cell->nextCell ) + { + more = cell->skipTo( target ); // skip all + } + + if( more ) + listToQueue(); + + firstTime = false; + } + else + { // normal case + while( more && min()->doc() < target ) // skip as needed + { + if( min()->skipTo( target )) + queue->adjustTop(); + else + more = false; + } + } + + return more && ( atMatch() || next() ); +} + +TCHAR* NearSpansUnordered::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQuery = query->toString(); + + buffer.append( _T( "NearSpansUnordered(" )); + buffer.append( tszQuery ); + buffer.append( _T( ")@" )); + if( firstTime ) + buffer.append( _T( "START" )); + else if( more ) + { + buffer.appendInt( doc() ); + buffer.append( _T( ":" )); + buffer.appendInt( start() ); + buffer.append( _T( "-" )); + buffer.appendInt( end() ); + } + else + buffer.append( _T( "END" )); + + _CLDELETE_ARRAY( tszQuery ); + + return buffer.toString(); +} + +void NearSpansUnordered::initList( bool next ) +{ + for( list::iterator iCell = ordered.begin(); more && iCell != ordered.end(); iCell++ ) + { + if( next ) + more = (*iCell)->next(); // move to first entry + + if( more ) + addToList( *iCell ); // add to list + } +} + +void NearSpansUnordered::addToList( SpansCell * cell ) +{ + if( last ) // add next to end of list + last->nextCell = cell; + else + first = cell; + + last = cell; + cell->nextCell = NULL; +} + +void NearSpansUnordered::firstToLast() +{ + last->nextCell = first; // move first to end of list + last = first; + first = first->nextCell; + last->nextCell = NULL; +} + +void NearSpansUnordered::queueToList() +{ + last = NULL; + first = NULL; + while( queue->top() ) + addToList( queue->pop() ); +} + +void NearSpansUnordered::listToQueue() +{ + queue->clear(); // rebuild queue + for( SpansCell * cell = first; cell; cell = cell->nextCell ) + queue->put( cell ); // add to queue from list +} + +bool NearSpansUnordered::atMatch() +{ + return ( min()->doc() == max->doc() ) + && (( max->end() - min()->start() - totalLength ) <= slop ); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/_NearSpansUnordered.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/_NearSpansUnordered.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/_NearSpansUnordered.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/_NearSpansUnordered.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,103 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_NearSpansUnordered_ +#define _lucene_search_spans_NearSpansUnordered_ + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF2(search, spans, SpanNearQuery) +#include "CLucene/util/PriorityQueue.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + +class NearSpansUnordered : public Spans +{ +private: + ///////////////////////////////////////////////////////////////////////////// + class SpansCell : public Spans + { + private: + NearSpansUnordered * parentSpans; + Spans * spans; + int32_t length; + int32_t index; + + public: + SpansCell * nextCell; + + public: + SpansCell( NearSpansUnordered * parentSpans, Spans * spans, int32_t index ); + virtual ~SpansCell(); + + bool next() { return adjust( spans->next() ); } + bool skipTo( int32_t target ) { return adjust( spans->skipTo( target )); } + + int32_t doc() const { return spans->doc(); } + int32_t start() const { return spans->start(); } + int32_t end() const { return spans->end(); } + + TCHAR* toString() const; + + private: + bool adjust( bool condition ); + + }; + + ///////////////////////////////////////////////////////////////////////////// + class CellQueue : public CL_NS(util)::PriorityQueue > + { + public: + CellQueue( int32_t size ) { initialize( size, false ); } // All the span cells will be freed in ~NearSpansUnordered() while frein ordered member + virtual ~CellQueue() {} + + protected: + bool lessThan( SpansCell * spans1, SpansCell* spans2 ); + }; + +private: + SpanNearQuery * query; + + list ordered; // spans in query order + int32_t slop; // from query + + SpansCell * first; // linked list of spans + SpansCell * last; // sorted by doc only + + int32_t totalLength; // sum of current lengths + + CellQueue * queue; // sorted queue of spans + SpansCell * max; // max element in queue + + bool more; // true iff not done + bool firstTime; // true before first next() + +public: + NearSpansUnordered( SpanNearQuery * query, CL_NS(index)::IndexReader * reader ); + virtual ~NearSpansUnordered(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return min()->doc(); } + int32_t start() const { return min()->start(); } + int32_t end() const { return max->end(); } + + TCHAR* toString() const; + +private: + SpansCell * min() const { return queue->top(); } + + void initList( bool next ); + void addToList( SpansCell * cell ); + void firstToLast(); + void queueToList(); + void listToQueue(); + bool atMatch(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_NearSpansUnordered_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanFirstQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanFirstQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanFirstQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanFirstQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,205 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanFirstQuery.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanFirstQuery::SpanFirstQuerySpans : public Spans +{ +private: + Spans * spans; + int32_t end_; + SpanFirstQuery * parentQuery; + +public: + SpanFirstQuerySpans( SpanFirstQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanFirstQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return spans->doc(); } + int32_t start() const { return spans->start(); } + int32_t end() const { return spans->end(); } + + TCHAR* toString() const; +}; + +SpanFirstQuery::SpanFirstQuerySpans::SpanFirstQuerySpans( SpanFirstQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + this->end_ = parentQuery->end; + this->spans = parentQuery->match->getSpans( reader ); +} + +SpanFirstQuery::SpanFirstQuerySpans::~SpanFirstQuerySpans() +{ + _CLLDELETE( spans ); +} + +bool SpanFirstQuery::SpanFirstQuerySpans::next() +{ + while( spans->next() ) // scan to next match + { + if( spans->end() <= end_ ) + return true; + } + return false; +} + +bool SpanFirstQuery::SpanFirstQuerySpans::skipTo( int32_t target ) +{ + if( ! spans->skipTo( target )) + return false; + + if( spans->end() <= end_ ) // there is a match + return true; + + return next(); // scan to next match +} + +TCHAR* SpanFirstQuery::SpanFirstQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanFirstQuery::SpanFirstQuery( SpanQuery * match, int32_t end, bool bDeleteQuery ) +{ + this->match = match; + this->end = end; + this->bDeleteQuery = bDeleteQuery; +} + +SpanFirstQuery::SpanFirstQuery( const SpanFirstQuery& clone ) : + SpanQuery( clone ) +{ + this->match = (SpanQuery *) clone.match->clone(); + this->end = clone.end; + this->bDeleteQuery = true; +} + +SpanFirstQuery::~SpanFirstQuery() +{ + if( bDeleteQuery ) + { + _CLLDELETE( match ); + } +} + +CL_NS(search)::Query * SpanFirstQuery::clone() const +{ + return _CLNEW SpanFirstQuery( *this ); +} + +const char * SpanFirstQuery::getClassName() +{ + return "SpanFirstQuery"; +} + +const char * SpanFirstQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery * SpanFirstQuery::getMatch() const +{ + return match; +} + +int32_t SpanFirstQuery::getEnd() const +{ + return end; +} + +const TCHAR * SpanFirstQuery::getField() const +{ + return match->getField(); +} + +void SpanFirstQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + match->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanFirstQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanFirstQuery * clone = NULL; + + SpanQuery * rewritten = (SpanQuery *) match->rewrite( reader ); + if( rewritten != match ) + { + clone = (SpanFirstQuery *) this->clone(); + _CLLDELETE( clone->match ); + clone->match = rewritten; + } + + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanFirstQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszMatch = match->toString( field ); + + buffer.append( _T( "spanFirst(" )); + buffer.append( tszMatch ); + buffer.append( _T( ", " )); + buffer.appendInt( end ); + buffer.append( _T( ")" )); + buffer.appendBoost( getBoost() ); + _CLDELETE_LARRAY( tszMatch ); + + return buffer.toString(); +} + +bool SpanFirstQuery::equals( Query * other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanFirstQuery::getClassName() ))) + return false; + + SpanFirstQuery * that = (SpanFirstQuery *) other; + return end == that->end + && getBoost() == that->getBoost() + && match->equals( that->match ); +} + +size_t SpanFirstQuery::hashCode() const +{ + size_t h = match->hashCode(); + h ^= (h << 8) | (h >> 25); // reversible + h ^= Similarity::floatToByte( getBoost() ) ^ end; + return h; +} + +Spans * SpanFirstQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW SpanFirstQuerySpans( this, reader ); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanFirstQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanFirstQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanFirstQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanFirstQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_FirstSpanQuery_ +#define _lucene_search_spans_FirstSpanQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans near the beginning of a field. */ +class CLUCENE_EXPORT SpanFirstQuery : public SpanQuery +{ +private: + class SpanFirstQuerySpans; + +private: + SpanQuery * match; + bool bDeleteQuery; + int32_t end; + +protected: + SpanFirstQuery( const SpanFirstQuery& clone ); + +public: + /** Construct a SpanFirstQuery matching spans in match whose end + * position is less than or equal to end. */ + SpanFirstQuery( SpanQuery * match, int32_t end, bool bDeleteQuery ); + virtual ~SpanFirstQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the SpanQuery whose matches are filtered. */ + SpanQuery * getMatch() const; + + /** Return the maximum end position permitted in a match. */ + int32_t getEnd() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() { return match.getTerms(); } + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_FirstSpanQuery_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanNearQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanNearQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanNearQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanNearQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,204 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanNearQuery.h" +#include "_EmptySpans.h" +#include "_NearSpansOrdered.h" +#include "_NearSpansUnordered.h" + +CL_NS_DEF2( search, spans ) + +SpanNearQuery::SpanNearQuery( const SpanNearQuery& clone ) : + SpanQuery( clone ) +{ + this->clauses = _CL_NEWARRAY( SpanQuery *, clone.clausesCount ); + for( size_t i = 0; i < clone.clausesCount; i++ ) + this->clauses[ i ] = (SpanQuery *) clone.clauses[ i ]->clone(); + + this->clausesCount = clone.clausesCount; + this->bDeleteClauses = true; + + this->slop = clone.slop; + this->inOrder = clone.inOrder; + + this->field = NULL; + setField( clone.field ); +} + +SpanNearQuery::~SpanNearQuery() +{ + if( bDeleteClauses ) + { + for( size_t i = 0; i < clausesCount; i++ ) + _CLLDELETE( clauses[ i ] ); + } + + clausesCount = 0; + _CLDELETE_LARRAY( clauses ); + _CLDELETE_LARRAY( field ); +} + +CL_NS(search)::Query * SpanNearQuery::clone() const +{ + return _CLNEW SpanNearQuery( *this ); +} + +const char * SpanNearQuery::getClassName() +{ + return "SpanNearQuery"; +} + +const char * SpanNearQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery ** SpanNearQuery::getClauses() const +{ + return clauses; +} + +size_t SpanNearQuery::getClausesCount() const +{ + return clausesCount; +} + +void SpanNearQuery::setField( const TCHAR * field ) +{ + _CLDELETE_LARRAY( this->field ); + this->field = STRDUP_TtoT( field ); +} + +const TCHAR * SpanNearQuery::getField() const +{ + return field; +} + +int32_t SpanNearQuery::getSlop() const +{ + return slop; +} + +bool SpanNearQuery::isInOrder() const +{ + return inOrder; +} + +void SpanNearQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + for( size_t i = 0; i < clausesCount; i++ ) + clauses[ i ]->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanNearQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanNearQuery * clone = NULL; + + for( size_t i = 0; i < clausesCount; i++ ) + { + SpanQuery * c = clauses[ i ]; + SpanQuery * query = (SpanQuery *) c->rewrite( reader ); + if( query != c ) + { // clause rewrote: must clone + if( clone == NULL ) + clone = (SpanNearQuery *) this->clone(); + + _CLLDELETE( clone->clauses[ i ] ); + clone->clauses[ i ] = query; + } + } + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanNearQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + buffer.append( _T( "spanNear([" )); + for( size_t i = 0; i < clausesCount; i++ ) + { + if( i != 0 ) + buffer.append( _T( ", " )); + + TCHAR * tszClause = clauses[ i ]->toString( field ); + buffer.append( tszClause ); + _CLDELETE_ARRAY( tszClause ); + } + + buffer.append( _T( "], " )); + buffer.appendInt( slop ); + buffer.append( _T( ", " )); + buffer.appendBool( inOrder ); + buffer.append( _T( ")" )); + buffer.appendBoost( getBoost() ); + + return buffer.toString(); +} + +bool SpanNearQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanNearQuery::getClassName() ))) + return false; + + SpanNearQuery * that = (SpanNearQuery *) other; + if( inOrder != that->inOrder + || slop != that->slop + || getBoost() != that->getBoost() + || 0 != _tcscmp( field, that->field ) ) // CLucene: java version does not compare field names + { + return false; + } + + if( clausesCount != that->clausesCount ) + return false; + for( size_t i = 0; i < clausesCount; i++ ) + { + if( ! clauses[ i ]->equals( that->clauses[ i ] )) + return false; + } + + return true; +} + +size_t SpanNearQuery::hashCode() const +{ + size_t result = 1; + for( size_t i = 0; i < clausesCount; i++ ) + result = 31*result + clauses[ i ]->hashCode(); + + // Mix bits before folding in things like boost, since it could cancel the + // last element of clauses. This particular mix also serves to + // differentiate SpanNearQuery hash codes from others. + result ^= (result << 14) | (result >> 19); // reversible + result += Similarity::floatToByte( getBoost() ); + result += slop; + result ^= ( inOrder ? 0x99AFD3BD : 0 ); + + return result; +} + +Spans * SpanNearQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + if( clausesCount == 0 ) + return _CLNEW EmptySpans(); // CLucene: 0-clause case - different to java version, because java creates SpanOrQuery to call its function to create empty spans + + if( clausesCount == 1 ) // optimize 1-clause case + return clauses[ 0 ]->getSpans( reader ); + + return inOrder + ? (Spans *) _CLNEW NearSpansOrdered( this, reader ) + : (Spans *) _CLNEW NearSpansUnordered( this, reader ); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanNearQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanNearQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanNearQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanNearQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanNearQuery_ +#define _lucene_search_spans_SpanNearQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans which are near one another. One can specify slop, the + * maximum number of intervening unmatched positions, as well as whether + * matches are required to be in-order. */ +class CLUCENE_EXPORT SpanNearQuery : public SpanQuery +{ +private: + SpanQuery ** clauses; + size_t clausesCount; + bool bDeleteClauses; + + int32_t slop; + bool inOrder; + + TCHAR * field; + +protected: + SpanNearQuery( const SpanNearQuery& clone ); + +public: + /** Construct a SpanNearQuery. Matches spans matching a span from each + * clause, with up to slop total unmatched positions between + * them. * When inOrder is true, the spans from each clause + * must be * ordered as in clauses. */ + template + SpanNearQuery( ClauseIterator first, ClauseIterator last, int32_t slop, bool inOrder, bool bDeleteClauses ) + { + // CLucene specific: at least one clause must be here + if( first == last ) + _CLTHROWA( CL_ERR_IllegalArgument, "Missing query clauses." ); + + this->bDeleteClauses = bDeleteClauses; + this->clausesCount = last - first; + this->clauses = _CL_NEWARRAY( SpanQuery *, clausesCount ); + this->field = NULL; + + // copy clauses array into an array and check fields + for( size_t i = 0; first != last; first++, i++ ) + { + SpanQuery * clause = *first; + if( i == 0 ) + { + setField( clause->getField() ); + } + else if( 0 != _tcscmp( clause->getField(), field )) + { + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); + } + this->clauses[ i ] = clause; + } + + this->slop = slop; + this->inOrder = inOrder; + } + + virtual ~SpanNearQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the clauses whose spans are matched. + * CLucene: pointer to the internal array + */ + SpanQuery ** getClauses() const; + size_t getClausesCount() const; + + /** Return the maximum number of intervening unmatched positions permitted.*/ + int32_t getSlop() const; + + /** Return true if matches are required to be in-order.*/ + bool isInOrder() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + +protected: + void setField( const TCHAR * field ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanNearQuery_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanNotQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanNotQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanNotQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanNotQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,274 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanNotQuery.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanNotQuery::SpanNotQuerySpans : public Spans +{ +private: + SpanNotQuery * parentQuery; + Spans * includeSpans; + bool moreInclude; + + Spans * excludeSpans; + bool moreExclude; + +public: + SpanNotQuerySpans( SpanNotQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanNotQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return includeSpans->doc(); } + int32_t start() const { return includeSpans->start(); } + int32_t end() const { return includeSpans->end(); } + + TCHAR* toString() const; +}; + +SpanNotQuery::SpanNotQuerySpans::SpanNotQuerySpans( SpanNotQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + + includeSpans = parentQuery->include->getSpans( reader ); + moreInclude = true; + + excludeSpans = parentQuery->exclude->getSpans( reader ); + moreExclude = excludeSpans->next(); +} + +SpanNotQuery::SpanNotQuerySpans::~SpanNotQuerySpans() +{ + _CLLDELETE( includeSpans ); + _CLLDELETE( excludeSpans ); +} + +bool SpanNotQuery::SpanNotQuerySpans::next() +{ + if( moreInclude ) // move to next include + moreInclude = includeSpans->next(); + + while( moreInclude && moreExclude ) + { + if( includeSpans->doc() > excludeSpans->doc() ) // skip exclude + moreExclude = excludeSpans->skipTo( includeSpans->doc() ); + + while( moreExclude // while exclude is before + && includeSpans->doc() == excludeSpans->doc() + && excludeSpans->end() <= includeSpans->start()) + { + moreExclude = excludeSpans->next(); // increment exclude + } + + if( ! moreExclude // if no intersection + || includeSpans->doc() != excludeSpans->doc() + || includeSpans->end() <= excludeSpans->start()) + break; // we found a match + + moreInclude = includeSpans->next(); // intersected: keep scanning + } + + return moreInclude; +} + + +bool SpanNotQuery::SpanNotQuerySpans::skipTo( int32_t target ) +{ + if( moreInclude ) // skip include + moreInclude = includeSpans->skipTo( target ); + + if( ! moreInclude ) + return false; + + if( moreExclude // skip exclude + && includeSpans->doc() > excludeSpans->doc()) + { + moreExclude = excludeSpans->skipTo( includeSpans->doc() ); + } + + while( moreExclude // while exclude is before + && includeSpans->doc() == excludeSpans->doc() + && excludeSpans->end() <= includeSpans->start()) + { + moreExclude = excludeSpans->next(); // increment exclude + } + + if( ! moreExclude // if no intersection + || includeSpans->doc() != excludeSpans->doc() + || includeSpans->end() <= excludeSpans->start()) + { + return true; // we found a match + } + + return next(); // scan to next match +} + +TCHAR* SpanNotQuery::SpanNotQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanNotQuery::SpanNotQuery( SpanQuery * include, SpanQuery * exclude, bool bDeleteQueries ) +{ + this->include = include; + this->exclude = exclude; + this->bDeleteQueries = bDeleteQueries; + + if( 0 != _tcscmp( include->getField(), exclude->getField())) + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); +} + +SpanNotQuery::SpanNotQuery( const SpanNotQuery& clone ) : + SpanQuery( clone ) +{ + include = (SpanQuery *) clone.include->clone(); + exclude = (SpanQuery *) clone.exclude->clone(); + bDeleteQueries = true; +} + +SpanNotQuery::~SpanNotQuery() +{ + if( bDeleteQueries ) + { + _CLLDELETE( include ); + _CLLDELETE( exclude ); + } +} + +CL_NS(search)::Query * SpanNotQuery::clone() const +{ + return _CLNEW SpanNotQuery( *this ); +} + +const char * SpanNotQuery::getClassName() +{ + return "SpanNotQuery"; +} + +const char * SpanNotQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery * SpanNotQuery::getInclude() const +{ + return include; +} + +SpanQuery * SpanNotQuery::getExclude() const +{ + return exclude; +} + +const TCHAR * SpanNotQuery::getField() const +{ + return include->getField(); +} + +void SpanNotQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + include->extractTerms( terms ); +} + +TCHAR* SpanNotQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + TCHAR * tmp; + + buffer.append( _T( "spanNot(" )); + tmp = include->toString( field ); + buffer.append( tmp ); + _CLDELETE_ARRAY( tmp ); + + buffer.append( _T( ", " )); + tmp = exclude->toString( field ); + buffer.append( tmp ); + _CLDELETE_ARRAY( tmp ); + + buffer.append( _T( ")" )); + buffer.appendFloat( getBoost(), 1 ); + + return buffer.toString(); +} + +CL_NS(search)::Query * SpanNotQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanNotQuery * clone = NULL; + + SpanQuery * rewrittenInclude = (SpanQuery *) include->rewrite( reader ); + if( rewrittenInclude != include ) + { + clone = (SpanNotQuery *) this->clone(); + _CLLDELETE( clone->include ); + clone->include = rewrittenInclude; + } + + SpanQuery * rewrittenExclude = (SpanQuery *) exclude->rewrite( reader ); + if( rewrittenExclude != exclude ) + { + if( ! clone ) + clone = (SpanNotQuery *) this->clone(); + _CLLDELETE( clone->exclude ); + clone->exclude = rewrittenExclude; + } + + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +bool SpanNotQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanNotQuery::getClassName() ))) + return false; + + SpanNotQuery * that = (SpanNotQuery *) other; + return include->equals( that->include ) + && exclude->equals( that->exclude ) + && getBoost() == that->getBoost(); +} + +size_t SpanNotQuery::hashCode() const +{ + size_t h = include->hashCode(); + h = (h << 1) | (h >> 31); // rotate left + h ^= exclude->hashCode(); + h = (h << 1) | (h >> 31); // rotate left + h ^= Similarity::floatToByte( getBoost() ); + + return h; +} + +Spans * SpanNotQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW SpanNotQuerySpans( this, reader ); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanNotQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanNotQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanNotQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanNotQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,67 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanNotQuery_ +#define _lucene_search_spans_SpanNotQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Removes matches which overlap with another SpanQuery. */ +class CLUCENE_EXPORT SpanNotQuery : public SpanQuery +{ +private: + class SpanNotQuerySpans; + +private: + SpanQuery * include; + SpanQuery * exclude; + bool bDeleteQueries; + +protected: + SpanNotQuery( const SpanNotQuery& clone ); + +public: + /** Construct a SpanNotQuery matching spans from include which + * have no overlap with spans from exclude.*/ + SpanNotQuery( SpanQuery * include, SpanQuery * exclude, bool bDeleteQueries ); + virtual ~SpanNotQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the SpanQuery whose matches are filtered. */ + SpanQuery * getInclude() const; + + /** Return the SpanQuery whose matches must not overlap those returned. */ + SpanQuery * getExclude() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() { return include.getTerms(); } + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanNotQuery_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanOrQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanOrQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanOrQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanOrQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,304 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/PriorityQueue.h" + +#include "SpanOrQuery.h" +#include "_EmptySpans.h" + + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanOrQuery::SpanQueue : public CL_NS(util)::PriorityQueue > +{ +public: + SpanQueue( int32_t size ) { initialize( size, true ); } + virtual ~SpanQueue() {} + +protected: + bool lessThan(Spans* spans1, Spans* spans2 ) + { + if( spans1->doc() == spans2->doc() ) + { + if( spans1->start() == spans2->start()) + return spans1->end() < spans2->end(); + else + return spans1->start() < spans2->start(); + } + else + return spans1->doc() < spans2->doc(); + } +}; + + +///////////////////////////////////////////////////////////////////////////// +class SpanOrQuery::SpanOrQuerySpans : public Spans +{ +private: + SpanQueue * queue; + SpanOrQuery * parentQuery; + CL_NS(index)::IndexReader * reader; + +public: + SpanOrQuerySpans( SpanOrQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanOrQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return top()->doc(); } + int32_t start() const { return top()->start(); } + int32_t end() const { return top()->end(); } + + TCHAR* toString() const; + +private: + Spans * top() const { return queue->top(); } + bool initSpanQueue( int32_t target ); +}; + + +SpanOrQuery::SpanOrQuerySpans::SpanOrQuerySpans( SpanOrQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + this->reader = reader; + this->queue = NULL; +} + +SpanOrQuery::SpanOrQuerySpans::~SpanOrQuerySpans() +{ + _CLLDELETE( queue ); +} + +bool SpanOrQuery::SpanOrQuerySpans::next() +{ + if( ! queue ) + return initSpanQueue( -1 ); + + if( queue->size() == 0 ) // all done + return false; + + if( top()->next() ) // move to next + { + queue->adjustTop(); + return true; + } + + _CLLDELETE( queue->pop() ); // exhausted a clause + return queue->size() != 0; +} + +bool SpanOrQuery::SpanOrQuerySpans::skipTo( int32_t target ) +{ + if( ! queue ) + return initSpanQueue( target ); + + while( queue->size() != 0 && top()->doc() < target ) + { + if( top()->skipTo( target )) + queue->adjustTop(); + else + _CLLDELETE( queue->pop() ); + } + + return queue->size() != 0; +} + +TCHAR* SpanOrQuery::SpanOrQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + +bool SpanOrQuery::SpanOrQuerySpans::initSpanQueue( int32_t target ) +{ + queue = _CLNEW SpanQueue( parentQuery->clausesCount ); + + for( size_t i = 0; i < parentQuery->clausesCount; i++ ) + { + Spans * spans = parentQuery->clauses[ i ]->getSpans( reader ); + if(( target == -1 && spans->next()) || ( target != -1 && spans->skipTo( target ))) + queue->put( spans ); + else + _CLLDELETE( spans ); + } + return ( queue->size() != 0 ); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanOrQuery::SpanOrQuery( const SpanOrQuery& clone ) : + SpanQuery( clone ) +{ + this->clauses = _CL_NEWARRAY( SpanQuery *, clone.clausesCount ); + for( size_t i = 0; i < clone.clausesCount; i++ ) + this->clauses[ i ] = (SpanQuery *) clone.clauses[ i ]->clone(); + + this->clausesCount = clone.clausesCount; + this->bDeleteClauses = true; + + this->field = NULL; + setField( clone.field ); +} + +SpanOrQuery::~SpanOrQuery() +{ + if( bDeleteClauses ) + { + for( size_t i = 0; i < clausesCount; i++ ) + _CLLDELETE( clauses[ i ] ); + } + + clausesCount = 0; + _CLDELETE_LARRAY( clauses ); + _CLDELETE_LARRAY( field ); +} + +CL_NS(search)::Query * SpanOrQuery::clone() const +{ + return _CLNEW SpanOrQuery( *this ); +} + +const char * SpanOrQuery::getClassName() +{ + return "SpanOrQuery"; +} + +const char * SpanOrQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery ** SpanOrQuery::getClauses() const +{ + return clauses; +} + +size_t SpanOrQuery::getClausesCount() const +{ + return clausesCount; +} + +void SpanOrQuery::setField( const TCHAR * field ) +{ + _CLDELETE_LARRAY( this->field ); + this->field = STRDUP_TtoT( field ); +} + +const TCHAR * SpanOrQuery::getField() const +{ + return field; +} + +void SpanOrQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + for( size_t i = 0; i < clausesCount; i++ ) + clauses[ i ]->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanOrQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanOrQuery * clone = NULL; + for( size_t i = 0; i < clausesCount; i++ ) + { + SpanQuery * c = clauses[ i ]; + SpanQuery * query = (SpanQuery *) c->rewrite( reader ); + if( query != c ) + { // clause rewrote: must clone + if( clone == NULL ) + clone = (SpanOrQuery *) this->clone(); + + _CLLDELETE( clone->clauses[ i ] ); + clone->clauses[ i ] = query; + } + } + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanOrQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + buffer.append( _T( "spanOr([" )); + for( size_t i = 0; i < clausesCount; i++ ) + { + if( i != 0 ) + buffer.append( _T( ", " )); + + TCHAR * tszClause = clauses[ i ]->toString( field ); + buffer.append( tszClause ); + _CLDELETE_ARRAY( tszClause ); + } + + buffer.append( _T( "])" )); + buffer.appendBoost( getBoost() ); + + return buffer.toString(); +} + +bool SpanOrQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanOrQuery::getClassName() ))) + return false; + + SpanOrQuery * that = (SpanOrQuery *) other; + if( 0 != _tcscmp( field, that->field ) + || getBoost() != that->getBoost()) + { + return false; + } + + if( clausesCount != that->clausesCount ) + return false; + for( size_t i = 0; i < clausesCount; i++ ) + { + if( ! clauses[ i ]->equals( that->clauses[ i ] )) + return false; + } + + return true; +} + +size_t SpanOrQuery::hashCode() const +{ + size_t h = 1; + for( size_t i = 0; i < clausesCount; i++ ) + h = 31*h + clauses[ i ]->hashCode(); + + h ^= (h << 10) | (h >> 23); + h ^= Similarity::floatToByte( getBoost() ); + + return h; +} + +Spans * SpanOrQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + if( clausesCount == 0 ) + return _CLNEW EmptySpans(); // CLucene: 0-clause case + + if( clausesCount == 1 ) // optimize 1-clause case + return clauses[ 0 ]->getSpans( reader ); + + return _CLNEW SpanOrQuerySpans( this, reader ); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanOrQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanOrQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanOrQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanOrQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,104 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanOrQuery_ +#define _lucene_search_spans_SpanOrQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** + * Matches the union of its clauses. + */ +class CLUCENE_EXPORT SpanOrQuery : public SpanQuery +{ +private: + class SpanQueue; + class SpanOrQuerySpans; + +private: + SpanQuery ** clauses; + size_t clausesCount; + bool bDeleteClauses; + + TCHAR * field; + +protected: + SpanOrQuery( const SpanOrQuery& clone ); + +public: + /** Construct a SpanOrQuery merging the provided clauses. */ + template + SpanOrQuery( ClauseIterator first, ClauseIterator last, bool bDeleteClauses ) + { + // CLucene specific: at least one clause must be here + if( first == last ) + _CLTHROWA( CL_ERR_IllegalArgument, "Missing query clauses." ); + + this->bDeleteClauses = bDeleteClauses; + this->clausesCount = last - first; + this->clauses = _CL_NEWARRAY( SpanQuery *, clausesCount ); + this->field = NULL; + + // copy clauses array into an array and check fields + for( size_t i = 0; first != last; first++, i++ ) + { + SpanQuery * clause = *first; + if( i == 0 ) + { + setField( clause->getField() ); + } + else if( 0 != _tcscmp( clause->getField(), field )) + { + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); + } + this->clauses[ i ] = clause; + } + } + + virtual ~SpanOrQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the clauses whose spans are matched. + * CLucene: pointer to the internal array + */ + SpanQuery ** getClauses() const; + size_t getClausesCount() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + /** This returns some kind of lazy spans. The set will be evaluated with the first call + * and this query and the given reader must exists at this time + */ + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + +protected: + void setField( const TCHAR * field ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanOrQuery_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanQuery_ +#define _lucene_search_spans_SpanQuery_ + +#include "CLucene/search/Query.h" +#include "CLucene/search/spans/SpanWeight.h" +CL_CLASS_DEF2( search, spans, Spans ) + +CL_NS_DEF2( search, spans ) + +/** Base class for span-based queries. */ +class CLUCENE_EXPORT SpanQuery : public CL_NS(search)::Query +{ +public: + /** Expert: Returns the matches for this query in an index. Used internally + * to search for spans. */ + virtual Spans * getSpans( CL_NS(index)::IndexReader * reader ) = 0; + + /** Returns the name of the field matched by this query.*/ + virtual const TCHAR* getField() const = 0; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see Query#extractTerms(Set) + */ +// public abstract Collection getTerms(); + + Weight * _createWeight( CL_NS(search)::Searcher * searcher ) + { + return _CLNEW SpanWeight( this, searcher ); + } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanQuery_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanScorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanScorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,122 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanScorer.h" +#include "Spans.h" + +CL_NS_DEF2(search, spans) + +SpanScorer::SpanScorer( Spans * spans, Weight * weight, Similarity * similarity, uint8_t* norms ) : +Scorer( similarity ), firstTime( true ), more( true ) +{ + this->spans = spans; + this->norms = norms; + this->weight = weight; + this->value = weight->getValue(); + doc_ = -1; +} + +SpanScorer::~SpanScorer() +{ + _CLLDELETE( spans ); +} + +bool SpanScorer::next() +{ + if( firstTime ) + { + more = spans->next(); + firstTime = false; + } + return setFreqCurrentDoc(); +} + +bool SpanScorer::skipTo( int32_t target ) +{ + if( firstTime ) + { + more = spans->skipTo( target ); + firstTime = false; + } + + if( ! more ) + return false; + + if( spans->doc() < target ) + { + // setFreqCurrentDoc() leaves spans.doc() ahead + more = spans->skipTo( target ); + } + + return setFreqCurrentDoc(); +} + +bool SpanScorer::setFreqCurrentDoc() +{ + if( ! more ) + return false; + + doc_ = spans->doc(); + freq = 0.0f; + while( more && doc_ == spans->doc() ) + { + int32_t matchLength = spans->end() - spans->start(); + freq += getSimilarity()->sloppyFreq( matchLength ); + more = spans->next(); + } + + return more || ( freq != 0 ); +} + +int32_t SpanScorer::doc() const +{ + return doc_; +} + +float_t SpanScorer::score() +{ + float_t raw = getSimilarity()->tf( freq ) * value; // raw score + return raw * Similarity::decodeNorm( norms[ doc_ ]); // normalize +} + +CL_NS(search)::Explanation * SpanScorer::explain( int32_t docIn ) +{ + Explanation * tfExplanation = _CLNEW Explanation(); + + skipTo( docIn ); + float_t phraseFreq = (doc() == docIn ) ? freq : 0.0f; + tfExplanation->setValue( getSimilarity()->tf( phraseFreq )); + + CL_NS(util)::StringBuffer strBuf( 50 ); + strBuf.append( _T( "tf(phraseFreq=" )); + strBuf.appendFloat( phraseFreq, 2 ); + strBuf.append( _T( ")" )); + tfExplanation->setDescription( strBuf.getBuffer() ); + + return tfExplanation; +} + +TCHAR* SpanScorer::toString() +{ + CL_NS(util)::StringBuffer buf; + buf.append( _T( "SpanScorer(" )); + + TCHAR* tmp = weight->toString(); + buf.append( tmp ); + _CLDELETE_CARRAY( tmp ); + + buf.append( _T( ")" )); + + return buf.toString(); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanScorer.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanScorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,51 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanScorer_ +#define _lucene_search_spans_SpanScorer_ + +#include "CLucene/search/Scorer.h" +CL_CLASS_DEF2(search,spans,Spans) +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(search,Weight) + +CL_NS_DEF2(search, spans) + +/** + * Public for extension only. + */ +class CLUCENE_EXPORT SpanScorer : public CL_NS(search)::Scorer +{ +protected: + Spans * spans; + CL_NS(search)::Weight * weight; + uint8_t* norms; + float_t value; + + bool firstTime; + bool more; + + int32_t doc_; + float_t freq; + + +public: + SpanScorer( Spans * spans, Weight * weight, Similarity * similarity, uint8_t* norms ); + virtual ~SpanScorer(); + + bool next(); + bool skipTo( int32_t target ); + int32_t doc() const; + float_t score(); + CL_NS(search)::Explanation* explain( int32_t docIn ); + TCHAR* toString(); + +protected: + bool setFreqCurrentDoc(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanScorer_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/Spans.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/Spans.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/Spans.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/Spans.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_Spans_ +#define _lucene_search_spans_Spans_ + +CL_NS_DEF2( search, spans ) + +/** Expert: an enumeration of span matches. Used to implement span searching. + * Each span represents a range of term positions within a document. Matches + * are enumerated in order, by increasing document number, within that by + * increasing start position and finally by increasing end position. */ +class CLUCENE_EXPORT Spans +{ +public: + /** Empty base destructor */ + virtual ~Spans() {}; + + /** Move to the next match, returning true iff any such exists. */ + virtual bool next() = 0; + + /** Skips to the first match beyond the current, whose document number is + * greater than or equal to target.

Returns true iff there is such + * a match.

Behaves as if written:

+     *   boolean skipTo(int target) {
+     *     do {
+     *       if (!next())
+     * 	     return false;
+     *     } while (target > doc());
+     *     return true;
+     *   }
+     * 
+ * Most implementations are considerably more efficient than that. + */ + virtual bool skipTo( int32_t target ) = 0; + + /** Returns the document number of the current match. Initially invalid. */ + virtual int32_t doc() const = 0; + + /** Returns the start position of the current match. Initially invalid. */ + virtual int32_t start() const = 0; + + /** Returns the end position of the current match. Initially invalid. */ + virtual int32_t end() const = 0; + + /** Returns the string representation of the spans */ + virtual TCHAR* toString() const = 0; +}; + +CL_NS_END2 +#endif // _lucene_search_spans_Spans_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanTermQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanTermQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanTermQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanTermQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,104 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanTermQuery.h" +#include "_TermSpans.h" + +CL_NS_DEF2( search, spans ) + +SpanTermQuery::SpanTermQuery( CL_NS(index)::Term * term ) +{ + this->term = _CL_POINTER( term ); +} + +SpanTermQuery::SpanTermQuery( const SpanTermQuery& clone ) : + SpanQuery( clone ) +{ + this->term = _CL_POINTER( clone.term ); +} + +SpanTermQuery::~SpanTermQuery() +{ + _CLLDECDELETE( term ); +} + +CL_NS(search)::Query * SpanTermQuery::clone() const +{ + return _CLNEW SpanTermQuery( *this ); +} + +const char* SpanTermQuery::getClassName() +{ + return "SpanTermQuery"; +} + +const char* SpanTermQuery::getObjectName() const +{ + return getClassName(); +} + +size_t SpanTermQuery::hashCode() const +{ + return Similarity::floatToByte(getBoost()) ^ term->hashCode() ^ 0xD23FE494; +} + +CL_NS(index)::Term * SpanTermQuery::getTerm( bool pointer ) const +{ + if ( pointer ) + return _CL_POINTER( term ); + else + return term; +} + +const TCHAR * SpanTermQuery::getField() const +{ + return term->field(); +} + +void SpanTermQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + if( term && terms->end() == terms->find( term )) + terms->insert( _CL_POINTER( term )); +} + +Spans * SpanTermQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW TermSpans( reader->termPositions( term ), term ); +} + +TCHAR* SpanTermQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + if( field && 0 == _tcscmp( term->field(), field )) + buffer.append( term->text() ); + else + { + TCHAR * tszTerm = term->toString(); + buffer.append( tszTerm ); + buffer.appendBoost( getBoost() ); + _CLDELETE_CARRAY( tszTerm ); + } + return buffer.toString(); +} + +bool SpanTermQuery::equals( Query* other ) const +{ + if( !( other->instanceOf( SpanTermQuery::getClassName() ))) + return false; + + SpanTermQuery * that = (SpanTermQuery *) other; + return ( this->getBoost() == that->getBoost() ) + && this->term->equals( that->term ); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanTermQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanTermQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanTermQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanTermQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,59 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanTermQuery_ +#define _lucene_search_spans_SpanTermQuery_ + +CL_CLASS_DEF(index, Term); +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans containing a term. */ +class CLUCENE_EXPORT SpanTermQuery : public SpanQuery +{ +protected: + CL_NS(index)::Term * term; + +protected: + SpanTermQuery( const SpanTermQuery& clone ); + +public: + /** Construct a SpanTermQuery matching the named term's spans. */ + SpanTermQuery( CL_NS(index)::Term * term ); + virtual ~SpanTermQuery(); + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the term whose spans are matched. */ + CL_NS(index)::Term * getTerm( bool pointer=true ) const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + + CL_NS(search)::Query * clone() const; + + /** Returns true iff o is equal to this. */ + bool equals( Query* other ) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + TCHAR* toString( const TCHAR* field ) const; +}; + +CL_NS_END2 +#endif //_lucene_search_spans_SpanTermQuery_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanWeight.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanWeight.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanWeight.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanWeight.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,180 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/search/Scorer.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanWeight.h" +#include "SpanQuery.h" +#include "SpanScorer.h" + +CL_NS_USE(util) +CL_NS_DEF2(search, spans) + +SpanWeight::SpanWeight( SpanQuery * query, CL_NS(search)::Searcher * searcher ) +{ + this->similarity = query->getSimilarity( searcher ); + this->query = query; + + terms = _CLNEW TermSet(); + query->extractTerms( terms ); + idf = similarity->idf( terms->begin(), terms->end(), searcher ); +} + +SpanWeight::~SpanWeight() +{ + for( TermSet::iterator iTerm = terms->begin(); iTerm != terms->end(); iTerm++ ) + _CLLDECDELETE( *iTerm ); + + _CLDELETE( terms ); +} + +CL_NS(search)::Query * SpanWeight::getQuery() +{ + return query; +} + +float_t SpanWeight::getValue() +{ + return value; +} + +float_t SpanWeight::sumOfSquaredWeights() +{ + queryWeight = idf * query->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it +} + +void SpanWeight::normalize( float_t norm ) +{ + queryNorm = norm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document +} + +CL_NS(search)::Scorer * SpanWeight::scorer( CL_NS(index)::IndexReader* reader ) +{ + return _CLNEW SpanScorer( query->getSpans( reader ), + this, + similarity, + reader->norms( query->getField() )); +} + +CL_NS(search)::Explanation * SpanWeight::explain( CL_NS(index)::IndexReader* reader, int32_t doc ) +{ + ComplexExplanation * result = _CLNEW ComplexExplanation(); + StringBuffer strBuf(100); + + const TCHAR * field = ((SpanQuery *)getQuery())->getField(); + TCHAR * tQry = getQuery()->toString(); + TCHAR * tQryF = getQuery()->toString( field ); + + strBuf.append( _T( "weight(" )); + strBuf.append( tQry ); + strBuf.append( _T( " in " )); + strBuf.appendInt( doc ); + strBuf.append( _T( "), product of:" )); + result->setDescription( strBuf.getBuffer() ); + + CL_NS(util)::StringBuffer docFreqs; + for( TermSet::iterator itTerms = terms->begin(); itTerms != terms->end(); itTerms++ ) + { + CL_NS(index)::Term * term = (*itTerms); + docFreqs.append( term->text()); + docFreqs.append( _T( "=" )); + docFreqs.appendInt( reader->docFreq( term )); + if( itTerms != terms->end() ) + docFreqs.append( _T( " " )); + } + + strBuf.clear(); + strBuf.append( _T( "idf(" )); + strBuf.append( field ); + strBuf.append( _T( ": " )); + strBuf.append( docFreqs.getBuffer()); + strBuf.append( _T( ")" )); + Explanation * idfExpl = _CLNEW Explanation( idf, strBuf.getBuffer() ); + + // explain query weight + Explanation * queryExpl = _CLNEW Explanation(); + strBuf.clear(); + strBuf.append( _T( "queryWeight(" )); + strBuf.append( tQry ); + strBuf.append( _T( "), product of:" )); + queryExpl->setDescription( strBuf.getBuffer() ); + + if( getQuery()->getBoost() != 1.0f ) + queryExpl->addDetail( _CLNEW Explanation( getQuery()->getBoost(), _T( "boost" ))); + + queryExpl->addDetail( idfExpl ); + + Explanation * queryNormExpl = _CLNEW Explanation( queryNorm, _T( "queryNorm" )); + queryExpl->addDetail( queryNormExpl ); + queryExpl->setValue( getQuery()->getBoost() * + idfExpl->getValue() * + queryNormExpl->getValue()); + result->addDetail( queryExpl ); + + // explain field weight + ComplexExplanation * fieldExpl = _CLNEW ComplexExplanation(); + strBuf.clear(); + strBuf.append( _T( "fieldWeight(" )); + strBuf.append( field ); + strBuf.append( _T( ":" )); + strBuf.append( tQryF ); + strBuf.append( _T( " in " )); + strBuf.appendInt( doc ); + strBuf.append( _T( "), product of:" )); + fieldExpl->setDescription( strBuf.getBuffer() ); + + Scorer * pScorer = scorer( reader ); + Explanation * tfExpl = pScorer->explain( doc ); + fieldExpl->addDetail( tfExpl ); + fieldExpl->addDetail( idfExpl->clone() ); + + Explanation * fieldNormExpl = _CLNEW Explanation(); + uint8_t * fieldNorms = reader->norms( field ); + float_t fieldNorm = fieldNorms != NULL ? Similarity::decodeNorm( fieldNorms[ doc ] ) : 0.0f; + fieldNormExpl->setValue( fieldNorm ); + strBuf.clear(); + strBuf.append( _T( "fieldNorm(field=" )); + strBuf.append( field ); + strBuf.append( _T( ", doc=" )); + strBuf.appendInt( doc ); + strBuf.append( _T( ")" )); + fieldNormExpl->setDescription( strBuf.getBuffer()); + fieldExpl->addDetail( fieldNormExpl ); + + fieldExpl->setMatch( tfExpl->isMatch() ); + fieldExpl->setValue( tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue() ); + + _CLLDELETE( pScorer ); + _CLDELETE_LCARRAY( tQry ); + _CLDELETE_LCARRAY( tQryF ); + + if( queryExpl->getValue() == 1.0f ) + { + _CLLDELETE( result ); + return fieldExpl; + } + else + { + result->addDetail( fieldExpl ); + result->setMatch( fieldExpl->getMatch() ); + + // combine them + result->setValue( queryExpl->getValue() * fieldExpl->getValue() ); + return result; + } +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanWeight.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanWeight.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/SpanWeight.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/SpanWeight.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,46 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanWeight_ +#define _lucene_search_spans_SpanWeight_ + +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Query.h" +CL_CLASS_DEF2(search,spans,SpanQuery) +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(search,Searcher) + +CL_NS_DEF2(search, spans) + +/** + * Expert-only. Public for use by other weight implementations + */ +class CLUCENE_EXPORT SpanWeight : public CL_NS(search)::Weight +{ +protected: + CL_NS(search)::Similarity * similarity; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + CL_NS(search)::TermSet * terms; + SpanQuery * query; + +public: + SpanWeight( SpanQuery * query, CL_NS(search)::Searcher * searcher ); + virtual ~SpanWeight(); + + CL_NS(search)::Scorer * scorer( CL_NS(index)::IndexReader* reader ); + CL_NS(search)::Explanation * explain( CL_NS(index)::IndexReader* reader, int32_t doc ); + CL_NS(search)::Query * getQuery(); + float_t getValue(); + float_t sumOfSquaredWeights(); + void normalize( float_t norm ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanWeight_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/TermSpans.cpp clucene-core-2.3.3.4/src/core/CLucene/search/spans/TermSpans.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/spans/TermSpans.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/TermSpans.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,99 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#include +#include "CLucene/_ApiHeader.h" + +#include + +#include "CLucene/index/Terms.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/StringBuffer.h" + +#include "_TermSpans.h" + +CL_NS_DEF2(search, spans) + +TermSpans::TermSpans( CL_NS(index)::TermPositions * positions, CL_NS(index)::Term * term ) +{ + this->positions = positions; + this->term = _CL_POINTER( term ); + doc_ = -1; + freq = 0; + count = 0; + position = 0; +} + +TermSpans::~TermSpans() +{ + _CLLDELETE( positions ); + _CLLDECDELETE( term ); +} + +bool TermSpans::next() +{ + if( count == freq ) + { + if( ! positions->next()) + { + doc_ = INT_MAX; + return false; + } + doc_ = positions->doc(); + freq = positions->freq(); + count = 0; + } + position = positions->nextPosition(); + count++; + return true; +} + +bool TermSpans::skipTo( int32_t target ) +{ + // are we already at the correct position? + if( doc_ >= target ) + return true; + + if( !positions->skipTo( target )) + { + doc_ = INT_MAX; + return false; + } + + doc_ = positions->doc(); + freq = positions->freq(); + count = 0; + + position = positions->nextPosition(); + count++; + + return true; +} + +TCHAR* TermSpans::toString() const +{ + CL_NS(util)::StringBuffer strBuf( 50 ); + + TCHAR * tszTerm = term->toString(); + strBuf.append( _T( "spans(" )); + strBuf.append( tszTerm ); + strBuf.append( _T( ")@" )); + if( doc_ == -1 ) + strBuf.append( _T( "START" )); + else if( doc_ == INT_MAX ) + strBuf.append( _T( "END" )); + else + { + strBuf.appendInt( doc_ ); + strBuf.append( _T( "-" )); + strBuf.appendInt( position ); + } + _CLDELETE_CARRAY( tszTerm ); + + return strBuf.toString(); +} + +CL_NS_END2 diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/spans/_TermSpans.h clucene-core-2.3.3.4/src/core/CLucene/search/spans/_TermSpans.h --- clucene-core-0.9.21b/src/core/CLucene/search/spans/_TermSpans.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/spans/_TermSpans.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,47 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_TermSpans_ +#define _lucene_search_spans_TermSpans_ + +#include "CLucene/search/spans/Spans.h" +CL_CLASS_DEF(index, TermPositions) +CL_CLASS_DEF(index, Term) + +CL_NS_DEF2(search, spans) + +/** + * Expert: + * Public for extension only + */ +class TermSpans : public Spans +{ +protected: + CL_NS(index)::TermPositions * positions; + CL_NS(index)::Term * term; + int32_t doc_; + int32_t freq; + int32_t count; + int32_t position; + +public: + TermSpans( CL_NS(index)::TermPositions * positions, CL_NS(index)::Term * term ); + virtual ~TermSpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return doc_; } + int32_t start() const { return position; } + int32_t end() const { return position + 1; } + + TCHAR* toString() const; + + CL_NS(index)::TermPositions * getPositions() { return positions; } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_TermSpans_ diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/TermQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/TermQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/TermQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/TermQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,251 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "TermQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "CLucene/index/Term.h" +#include "Explanation.h" +#include "Similarity.h" +#include "Searchable.h" +#include "_TermScorer.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/Terms.h" + +#include + +CL_NS_USE(index) +CL_NS_DEF(search) + + + + class TermWeight: public Weight { + private: + Similarity* similarity; // ISH: was Searcher*, for no apparent reason + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + TermQuery* parentQuery; // CLucene specific + CL_NS(index)::Term* _term; + + public: + TermWeight(Searcher* searcher, TermQuery* parentQuery, CL_NS(index)::Term* _term); + virtual ~TermWeight(); + + // return a *new* string describing this object + TCHAR* toString(); + Query* getQuery() { return (Query*)parentQuery; } + float_t getValue() { return value; } + + float_t sumOfSquaredWeights(); + void normalize(float_t queryNorm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + }; + + + /** Constructs a query for the term t. */ + TermQuery::TermQuery(Term* t): + term( _CL_POINTER(t) ) + { + } + TermQuery::TermQuery(const TermQuery& clone): + Query(clone){ + this->term=_CL_POINTER(clone.term); + } + TermQuery::~TermQuery(){ + _CLLDECDELETE(term); + } + + Query* TermQuery::clone() const{ + return _CLNEW TermQuery(*this); + } + + const char* TermQuery::getClassName(){ + return "TermQuery"; + } + const char* TermQuery::getObjectName() const{ + return getClassName(); + } + size_t TermQuery::hashCode() const { + return Similarity::floatToByte(getBoost()) ^ term->hashCode(); + } + + //added by search highlighter + Term* TermQuery::getTerm(bool pointer) const + { + if ( pointer ) + return _CL_POINTER(term); + else + return term; + } + + TCHAR* TermQuery::toString(const TCHAR* field) const{ + CL_NS(util)::StringBuffer buffer; + if ( field==NULL || _tcscmp(term->field(),field)!= 0 ) { + buffer.append(term->field()); + buffer.append(_T(":")); + } + buffer.append(term->text()); + if (getBoost() != 1.0f) { + buffer.append(_T("^")); + buffer.appendFloat( getBoost(),1 ); + } + return buffer.toString(); + } + + bool TermQuery::equals(Query* other) const { + if (!(other->instanceOf(TermQuery::getClassName()))) + return false; + + TermQuery* tq = (TermQuery*)other; + return (this->getBoost() == tq->getBoost()) + && this->term->equals(tq->term); + } + + TermWeight::TermWeight(Searcher* _searcher, TermQuery* _parentQuery, Term* term):similarity(_searcher->getSimilarity()), + value(0), queryNorm(0),queryWeight(0), parentQuery(_parentQuery),_term(term) + { + idf = similarity->idf(term, _searcher); // compute idf + } + + TermWeight::~TermWeight(){ + } + + // + TCHAR* TermWeight::toString() { + int32_t size=strlen(parentQuery->getObjectName()) + 10; + TCHAR* tmp = _CL_NEWARRAY(TCHAR, size); + _sntprintf(tmp,size,_T("weight(%S)"),parentQuery->getObjectName()); + return tmp; + } + + float_t TermWeight::sumOfSquaredWeights() { + // legacy // idf = parentQuery->getSimilarity(searcher)->idf(_term, searcher); // compute idf + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void TermWeight::normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* TermWeight::scorer(IndexReader* reader) { + TermDocs* termDocs = reader->termDocs(_term); + + if (termDocs == NULL) + return NULL; + + return _CLNEW TermScorer(this, termDocs, similarity, + reader->norms(_term->field())); + } + + Explanation* TermWeight::explain(IndexReader* reader, int32_t doc){ + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + TCHAR buf[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; + TCHAR* tmp; + + tmp = getQuery()->toString(); + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("weight(%s in %d), product of:"),tmp,doc); + _CLDELETE_LCARRAY(tmp); + result->setDescription(buf); + + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("idf(docFreq=%d, numDocs=%d)"), reader->docFreq(_term), reader->numDocs() ); + Explanation* idfExpl = _CLNEW Explanation(idf, buf); + + // explain query weight + Explanation* queryExpl = _CLNEW Explanation(); + tmp = getQuery()->toString(); + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("queryWeight(%s), product of:"), tmp); + _CLDELETE_LCARRAY(tmp); + queryExpl->setDescription(buf); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + if (parentQuery->getBoost() != 1.0f) + queryExpl->addDetail(boostExpl); + else + _CLDELETE(boostExpl); + + queryExpl->addDetail(idfExpl->clone()); + + Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); + queryExpl->addDetail(queryNormExpl); + + queryExpl->setValue(parentQuery->getBoost()* // always 1.0 | TODO: original Java code is boostExpl.getValue() + idfExpl->getValue() * + queryNormExpl->getValue()); + result->addDetail(queryExpl); + + // explain field weight + const TCHAR* field = _term->field(); + ComplexExplanation* fieldExpl = _CLNEW ComplexExplanation(); + + tmp = _term->toString(); + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("fieldWeight(%s in %d), product of:"),tmp,doc); + _CLDELETE_LCARRAY(tmp); + fieldExpl->setDescription(buf); + + Scorer* sc = scorer(reader); + Explanation* tfExpl = sc->explain(doc); + _CLLDELETE(sc); + fieldExpl->addDetail(tfExpl); + fieldExpl->addDetail(idfExpl); + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(field); + float_t fieldNorm = + fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; + fieldNormExpl->setValue(fieldNorm); + + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("fieldNorm(field=%s, doc=%d)"),field,doc); + fieldNormExpl->setDescription(buf); + fieldExpl->addDetail(fieldNormExpl); + + fieldExpl->setMatch(tfExpl->isMatch()); + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + result->addDetail(fieldExpl); + result->setMatch(fieldExpl->getMatch()); + + return result; + } + + Weight* TermQuery::_createWeight(Searcher* _searcher) { + return _CLNEW TermWeight(_searcher,this,term); + } + + void TermQuery::extractTerms( TermSet * termset ) const + { + if( term && termset->end() == termset->find( term )) + termset->insert( _CL_POINTER( term )); + } + + +CL_NS_END + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/TermQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/TermQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/TermQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/TermQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_TermQuery_ +#define _lucene_search_TermQuery_ + +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(util,StringBuffer) + +#include "Query.h" + +CL_NS_DEF(search) + /** A Query that matches documents containing a term. + This may be combined with other terms with a {@link BooleanQuery}. + */ + class CLUCENE_EXPORT TermQuery: public Query { + private: + CL_NS(index)::Term* term; + protected: + Weight* _createWeight(Searcher* searcher); + TermQuery(const TermQuery& clone); + public: + // Constructs a query for the term t. + TermQuery(CL_NS(index)::Term* t); + virtual ~TermQuery(); + + static const char* getClassName(); + const char* getObjectName() const; + + /** Returns the term of this query. */ + CL_NS(index)::Term* getTerm(bool pointer=true) const; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* other) const; + Query* clone() const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + /** Expert: adds all terms occurring in this query to the termset set. */ + void extractTerms( TermSet * termset ) const; + + }; +CL_NS_END +#endif + diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/TermScorer.cpp clucene-core-2.3.3.4/src/core/CLucene/search/TermScorer.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/TermScorer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/TermScorer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,127 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_TermScorer.h" +#include "SearchHeader.h" +#include "Explanation.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "TermQuery.h" +#include "Similarity.h" +#include "Explanation.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + TermScorer::TermScorer(Weight* w, CL_NS(index)::TermDocs* td, + Similarity* similarity,uint8_t* _norms): + Scorer(similarity), + termDocs(td), + norms(_norms), + weight(w), + weightValue(w->getValue()), + _doc(0), + pointer(0), + pointerMax(0) + { + memset(docs,0,32*sizeof(int32_t)); + memset(freqs,0,32*sizeof(int32_t)); + + for (int32_t i = 0; i < LUCENE_SCORE_CACHE_SIZE; i++) + scoreCache[i] = getSimilarity()->tf(i) * weightValue; + } + + TermScorer::~TermScorer(){ + _CLLDELETE(termDocs); + } + bool TermScorer::next(){ + pointer++; + if (pointer >= pointerMax) { + pointerMax = termDocs->read(docs, freqs, 32); // refill buffer + if (pointerMax != 0) { + pointer = 0; + } else { + termDocs->close(); // close stream + _doc = LUCENE_INT32_MAX_SHOULDBE; // set to sentinel value + return false; + } + } + _doc = docs[pointer]; + return true; + } + + bool TermScorer::skipTo(int32_t target) { + // first scan in cache + for (pointer++; pointer < pointerMax; pointer++) { + if (docs[pointer] >= target) { + _doc = docs[pointer]; + return true; + } + } + + // not found in cache, seek underlying stream + bool result = termDocs->skipTo(target); + if (result) { + pointerMax = 1; + pointer = 0; + docs[pointer] = _doc = termDocs->doc(); + freqs[pointer] = termDocs->freq(); + } else { + _doc = LUCENE_INT32_MAX_SHOULDBE; + } + return result; + } + + Explanation* TermScorer::explain(int32_t doc) { + TermQuery* query = (TermQuery*)weight->getQuery(); + Explanation* tfExplanation = _CLNEW Explanation(); + int32_t tf = 0; + while (pointer < pointerMax) { + if (docs[pointer] == doc) + tf = freqs[pointer]; + pointer++; + } + if (tf == 0) { + if (termDocs->skipTo(doc)) { + if (termDocs->doc() == doc) { + tf = termDocs->freq(); + } + } + } + termDocs->close(); + tfExplanation->setValue(getSimilarity()->tf(tf)); + + TCHAR buf[LUCENE_SEARCH_EXPLANATION_DESC_LEN+1]; + TCHAR* termToString = query->getTerm(false)->toString(); + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,_T("tf(termFreq(%s)=%d)"), termToString, tf); + _CLDELETE_LCARRAY(termToString); + tfExplanation->setDescription(buf); + return tfExplanation; + } + + TCHAR* TermScorer::toString() { + TCHAR* wb = weight->toString(); + int32_t rl = _tcslen(wb) + 9; //9=_tcslen("scorer(" ")") + 1 + TCHAR* ret = _CL_NEWARRAY(TCHAR,rl); + _sntprintf(ret,rl,_T("scorer(%s)"), wb); + _CLDELETE_LCARRAY(wb); + return ret; + } + + float_t TermScorer::score(){ + int32_t f = freqs[pointer]; + float_t raw = // compute tf(f)*weight + f < LUCENE_SCORE_CACHE_SIZE // check cache + ? scoreCache[f] // cache hit + : getSimilarity()->tf(f) * weightValue; // cache miss + + return raw * Similarity::decodeNorm(norms[_doc]); // normalize for field + } + + int32_t TermScorer::doc() const { return _doc; } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/_TermScorer.h clucene-core-2.3.3.4/src/core/CLucene/search/_TermScorer.h --- clucene-core-0.9.21b/src/core/CLucene/search/_TermScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/_TermScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,82 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_TermScorer_ +#define _lucene_search_TermScorer_ + + +#include "Scorer.h" +#include "CLucene/index/Terms.h" +CL_CLASS_DEF(search,Similarity) +#include "SearchHeader.h" + +CL_NS_DEF(search) + +/** Expert: A Scorer for documents matching a Term. +*/ +class TermScorer: public Scorer { +private: + CL_NS(index)::TermDocs* termDocs; + uint8_t* norms; + Weight* weight; + const float_t weightValue; + int32_t _doc; + + int32_t docs[32]; // buffered doc numbers + int32_t freqs[32]; // buffered term freqs + int32_t pointer; + int32_t pointerMax; + + float_t scoreCache[LUCENE_SCORE_CACHE_SIZE]; +public: + + /** Construct a TermScorer. + * @param weight The weight of the Term in the query. + * @param td An iterator over the documents matching the Term. + * @param similarity The Similarity implementation to be used for score computations. + * @param norms The field norms of the document fields for the Term. + * + * @memory TermScorer takes TermDocs and deletes it when TermScorer is cleaned up */ + TermScorer(Weight* weight, CL_NS(index)::TermDocs* td, + Similarity* similarity, uint8_t* _norms); + + virtual ~TermScorer(); + + /** Returns the current document number matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + int32_t doc() const; + + + /** Advances to the next document matching the query. + *
The iterator over the matching documents is buffered using + * {@link TermDocs#read(int[],int[])}. + * @return true iff there is another document matching the query. + */ + bool next(); + + float_t score(); + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
The implementation uses {@link TermDocs#skipTo(int)}. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo(int32_t target); + + /** Returns an explanation of the score for a document. + *
When this method is used, the {@link #next()} method + * and the {@link #score(HitCollector)} method should not be used. + * @param doc The document number for the explanation. + */ + Explanation* explain(int32_t doc); + + /** Returns a string representation of this TermScorer. */ + virtual TCHAR* toString(); +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/WildcardQuery.cpp clucene-core-2.3.3.4/src/core/CLucene/search/WildcardQuery.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/WildcardQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/WildcardQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,151 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "WildcardQuery.h" +#include "TermQuery.h" +#include "WildcardTermEnum.h" +#include "Similarity.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + +WildcardQuery::WildcardQuery(Term* term): +MultiTermQuery( term ){ + //Func - Constructor + //Pre - term != NULL + //Post - Instance has been created + termContainsWildcard = (_tcschr(term->text(), _T('*')) != NULL || _tcschr(term->text(), _T('?')) != NULL); +} + +WildcardQuery::~WildcardQuery(){ + //Func - Destructor + //Pre - true + //Post - true + +} + +const char* WildcardQuery::getObjectName() const{ + //Func - Returns the string "WildcardQuery" + //Pre - true + //Post - The string "WildcardQuery" has been returned + return getClassName(); +} + +const char* WildcardQuery::getClassName(){ + return "WildcardQuery"; +} + + +FilteredTermEnum* WildcardQuery::getEnum(IndexReader* reader) { + return _CLNEW WildcardTermEnum(reader, getTerm(false)); +} + +WildcardQuery::WildcardQuery(const WildcardQuery& clone): +MultiTermQuery(clone) +{ +} + +Query* WildcardQuery::clone() const{ + return _CLNEW WildcardQuery(*this); +} +size_t WildcardQuery::hashCode() const{ + //todo: we should give the query a seeding value... but + //need to do it for all hascode functions + return Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode(); +} +bool WildcardQuery::equals(Query* other) const{ + if (!(other->instanceOf(WildcardQuery::getClassName()))) + return false; + + WildcardQuery* tq = (WildcardQuery*)other; + return (this->getBoost() == tq->getBoost()) + && getTerm()->equals(tq->getTerm()); +} + + +Query* WildcardQuery::rewrite(CL_NS(index)::IndexReader* reader) { + if (termContainsWildcard) + return MultiTermQuery::rewrite(reader); + + return _CLNEW TermQuery( getTerm(false) ); +} + + +WildcardFilter::WildcardFilter( Term* term ) +{ + this->term = _CL_POINTER(term); +} + +WildcardFilter::~WildcardFilter() +{ + _CLDECDELETE(term); +} + +WildcardFilter::WildcardFilter( const WildcardFilter& copy ) : +term( _CL_POINTER(copy.term) ) +{ +} + +Filter* WildcardFilter::clone() const { + return _CLNEW WildcardFilter(*this ); +} + + +TCHAR* WildcardFilter::toString() +{ + //Instantiate a stringbuffer buffer to store the readable version temporarily + CL_NS(util)::StringBuffer buffer; + //check if field equal to the field of prefix + if( term->field() != NULL ) { + //Append the field of prefix to the buffer + buffer.append(term->field()); + //Append a colon + buffer.append(_T(":") ); + } + //Append the text of the prefix + buffer.append(term->text()); + + //Convert StringBuffer buffer to TCHAR block and return it + return buffer.toString(); +} + + +/** Returns a BitSet with true for documents which should be permitted in +search results, and false for those that should not. */ +BitSet* WildcardFilter::bits( IndexReader* reader ) +{ + BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); + + WildcardTermEnum termEnum (reader, term); + if (termEnum.term(false) == NULL) + return bts; + + TermDocs* termDocs = reader->termDocs(); + try{ + do{ + termDocs->seek(&termEnum); + + while (termDocs->next()) { + bts->set(termDocs->doc()); + } + }while(termEnum.next()); + } _CLFINALLY( + termDocs->close(); + _CLDELETE(termDocs); + termEnum.close(); + ) + + return bts; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/WildcardQuery.h clucene-core-2.3.3.4/src/core/CLucene/search/WildcardQuery.h --- clucene-core-0.9.21b/src/core/CLucene/search/WildcardQuery.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/WildcardQuery.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,70 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_WildcardQuery_ +#define _lucene_search_WildcardQuery_ + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +#include "MultiTermQuery.h" +#include "Filter.h" +//#include "WildcardTermEnum.h" + +CL_NS_DEF(search) + +/** Implements the wildcard search query. Supported wildcards are *, which + * matches any character sequence (including the empty one), and ?, + * which matches any single character. Note this query can be slow, as it + * needs to iterate over all terms. In order to prevent extremely slow WildcardQueries, + * a Wildcard term must not start with one of the wildcards * or + * ?. + * + * @see WildcardTermEnum + */ +class CLUCENE_EXPORT WildcardQuery: public MultiTermQuery { +protected: + FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); + WildcardQuery(const WildcardQuery& clone); +public: + WildcardQuery(CL_NS(index)::Term* term); + ~WildcardQuery(); + + const char* getObjectName() const; + static const char* getClassName(); + + size_t hashCode() const; + bool equals(Query* other) const; + Query* clone() const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); +private: + bool termContainsWildcard; +}; + + + +class CLUCENE_EXPORT WildcardFilter: public Filter +{ +private: + CL_NS(index)::Term* term; +protected: + WildcardFilter( const WildcardFilter& copy ); + +public: + WildcardFilter(CL_NS(index)::Term* term); + ~WildcardFilter(); + + /** Returns a BitSet with true for documents which should be permitted in + search results, and false for those that should not. */ + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); + + Filter* clone() const; + TCHAR* toString(); +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/WildcardTermEnum.cpp clucene-core-2.3.3.4/src/core/CLucene/search/WildcardTermEnum.cpp --- clucene-core-0.9.21b/src/core/CLucene/search/WildcardTermEnum.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/WildcardTermEnum.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "WildcardTermEnum.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + bool WildcardTermEnum::termCompare(Term* term) { + if ( term!=NULL && __term->field() == term->field() ) { + const TCHAR* searchText = term->text(); + const TCHAR* patternText = __term->text(); + if ( _tcsncmp( searchText, pre, preLen ) == 0 ){ + return wildcardEquals(patternText+preLen, __term->textLength()-preLen, 0, searchText, term->textLength(), preLen); + } + } + _endEnum = true; + return false; + } + + /** Creates new WildcardTermEnum */ + WildcardTermEnum::WildcardTermEnum(IndexReader* reader, Term* term): + FilteredTermEnum(), + __term(_CL_POINTER(term)), + fieldMatch(false), + _endEnum(false) + { + + pre = stringDuplicate(term->text()); + + const TCHAR* sidx = _tcschr( pre, LUCENE_WILDCARDTERMENUM_WILDCARD_STRING ); + const TCHAR* cidx = _tcschr( pre, LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR ); + const TCHAR* tidx = sidx; + if (tidx == NULL) + tidx = cidx; + else if ( cidx && cidx > pre) + tidx = cl_min(sidx, cidx); + CND_PRECONDITION(tidx != NULL, "tidx==NULL"); + int32_t idx = (int32_t)(tidx - pre); + preLen = idx; + CND_PRECONDITION(preLentextLength(), "preLen >= term->textLength()"); + pre[preLen]=0; //trim end + + Term* t = _CLNEW Term(__term, pre); + setEnum( reader->terms(t) ); + _CLDECDELETE(t); + } + + void WildcardTermEnum::close() + { + if ( __term != NULL ){ + FilteredTermEnum::close(); + + _CLDECDELETE(__term); + __term = NULL; + + _CLDELETE_CARRAY( pre ); + } + } + WildcardTermEnum::~WildcardTermEnum() { + close(); + } + + float_t WildcardTermEnum::difference() { + return 1.0f; + } + + bool WildcardTermEnum::endEnum() { + return _endEnum; + } + const char* WildcardTermEnum::getObjectName() const{ return getClassName(); } + const char* WildcardTermEnum::getClassName(){ return "WildcardTermEnum"; } + + bool WildcardTermEnum::wildcardEquals(const TCHAR* pattern, int32_t patternLen, int32_t patternIdx, const TCHAR* str, int32_t strLen, int32_t stringIdx) + { + for (int32_t p = patternIdx; ; ++p) + { + for (int32_t s = stringIdx; ; ++p, ++s) + { + // End of str yet? + bool sEnd = (s >= strLen); + // End of pattern yet? + bool pEnd = (p >= patternLen); + + // If we're looking at the end of the str... + if (sEnd) + { + // Assume the only thing left on the pattern is/are wildcards + bool justWildcardsLeft = true; + + // Current wildcard position + int32_t wildcardSearchPos = p; + // While we haven't found the end of the pattern, + // and haven't encountered any non-wildcard characters + while (wildcardSearchPos < patternLen && justWildcardsLeft) + { + // Check the character at the current position + TCHAR wildchar = pattern[wildcardSearchPos]; + // If it's not a wildcard character, then there is more + // pattern information after this/these wildcards. + + if (wildchar != LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR && + wildchar != LUCENE_WILDCARDTERMENUM_WILDCARD_STRING){ + justWildcardsLeft = false; + }else{ + // to prevent "cat" matches "ca??" + if (wildchar == LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR) + return false; + + wildcardSearchPos++; // Look at the next character + } + } + + // This was a prefix wildcard search, and we've matched, so + // return true. + if (justWildcardsLeft) + return true; + } + + // If we've gone past the end of the str, or the pattern, + // return false. + if (sEnd || pEnd) + break; + + // Match a single character, so continue. + if (pattern[p] == LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR) + continue; + + if (pattern[p] == LUCENE_WILDCARDTERMENUM_WILDCARD_STRING) + { + // Look at the character beyond the '*'. + ++p; + // Examine the str, starting at the last character. + for (int32_t i = strLen; i >= s; --i) + { + if (wildcardEquals(pattern, patternLen, p, str, strLen, i)) + return true; + } + break; + } + if (pattern[p] != str[s]) + break; + } + return false; + } + } + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/search/WildcardTermEnum.h clucene-core-2.3.3.4/src/core/CLucene/search/WildcardTermEnum.h --- clucene-core-0.9.21b/src/core/CLucene/search/WildcardTermEnum.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/search/WildcardTermEnum.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,65 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_WildcardTermEnum_ +#define _lucene_search_WildcardTermEnum_ + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(index,IndexReader) +//#include "CLucene/index/Terms.h" +#include "FilteredTermEnum.h" + +CL_NS_DEF(search) + /** + * Subclass of FilteredTermEnum for enumerating all terms that match the + * specified wildcard filter term-> + *

+ * Term enumerations are always ordered by term->compareTo(). Each term in + * the enumeration is greater than all that precede it. + */ + class CLUCENE_EXPORT WildcardTermEnum: public FilteredTermEnum { + private: + CL_NS(index)::Term* __term; + TCHAR* pre; + int32_t preLen; + bool fieldMatch; + bool _endEnum; + + /******************************************** + * const TCHAR* equality with support for wildcards + ********************************************/ + + protected: + bool termCompare(CL_NS(index)::Term* term) ; + + public: + + /** + * Creates a new WildcardTermEnum. Passing in a + * {@link Term Term} that does not contain a + * LUCENE_WILDCARDTERMENUM_WILDCARD_STRING or + * LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR will cause an exception to be thrown. + */ + WildcardTermEnum(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term); + ~WildcardTermEnum(); + + float_t difference() ; + + bool endEnum() ; + + /** + * Determines if a word matches a wildcard pattern. + */ + static bool wildcardEquals(const TCHAR* pattern, int32_t patternLen, int32_t patternIdx, const TCHAR* str, int32_t strLen, int32_t stringIdx); + + void close(); + + const char* getObjectName() const; + static const char* getClassName(); + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/StdHeader.cpp clucene-core-2.3.3.4/src/core/CLucene/StdHeader.cpp --- clucene-core-0.9.21b/src/core/CLucene/StdHeader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/StdHeader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,44 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/Misc.h" + +#include "CLucene/search/Sort.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/FieldCache.h" +#include "CLucene/index/TermVector.h" +#include "CLucene/index/_IndexFileNameFilter.h" +#include "CLucene/search/FieldSortedHitQueue.h" +#include "CLucene/store/LockFactory.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/_ThreadLocal.h" + +#if defined(_MSC_VER) && defined(_DEBUG) + #define CRTDBG_MAP_ALLOC + #include +#endif + +CL_NS_USE(util) +CL_NS_USE(search) +CL_NS_USE(index) +CL_NS_USE(store) + +//clears all static memory. do not attempt to do anything else +//in clucene after calling this function +void _lucene_shutdown(){ + FieldSortedHitQueue::_shutdown(); + Sort::_shutdown(); + ScoreDocComparator::_shutdown(); + SortField::_shutdown(); + FieldCache::_shutdown(); + Similarity::_shutdown(); + CLStringIntern::_shutdown(); + NoLockFactory::_shutdown(); + _ThreadLocal::_shutdown(); + IndexFileNameFilter::_shutdown(); + _CLDELETE (TermVectorOffsetInfo_EMPTY_OFFSET_INFO); +} diff -Nru clucene-core-0.9.21b/src/core/CLucene/StdHeader.h clucene-core-2.3.3.4/src/core/CLucene/StdHeader.h --- clucene-core-0.9.21b/src/core/CLucene/StdHeader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/StdHeader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef lucene_stdheader_h +#define lucene_stdheader_h + +/** +* This header contains public distributed code that needs to be included *before* +* any clucene-core code is included. It also uses the clucene-shared header +* which contains platform specific code configured by cmake. +*/ + +//configurations for library +#include "CLucene/CLConfig.h" + +//shared header +#include "CLucene/SharedHeader.h" + +//error handling macros/functions +#include "CLucene/debug/error.h" + +//todo: would be good to deprecate this... it's ugly +#define StringArrayWithDeletor CL_NS(util)::CLVector +#define StringArray std::vector +#define StringArrayWithDeletor CL_NS(util)::CLVector +#define StringArrayConst std::vector +//#define StringArrayConstWithDeletor CL_NS(util)::CLVector + +#define AStringArray std::vector +#define AStringArrayWithDeletor CL_NS(util)::CLVector +#define AStringArrayConst std::vector +//#define AStringArrayConstWithDeletor CL_NS(util)::CLVector + +//call this at the end of running to clean up memory. +extern CLUCENE_EXPORT void _lucene_shutdown(); + +#endif // lucene_apiheader_h diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/Directory.cpp clucene-core-2.3.3.4/src/core/CLucene/store/Directory.cpp --- clucene-core-0.9.21b/src/core/CLucene/store/Directory.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/Directory.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "Directory.h" +#include "LockFactory.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(store) + + +Directory::Directory(){ + this->lockFactory = NULL; +} +Directory::~Directory(){ + if (lockFactory != NULL) + _CLDELETE(lockFactory); +} + +LuceneLock* Directory::makeLock(const char* name) { + return lockFactory->makeLock( name ); +} + +void Directory::setLockFactory( LockFactory* lockFactory ) { + this->lockFactory = lockFactory; + lockFactory->setLockPrefix( getLockID().c_str() ); +} + +LockFactory* Directory::getLockFactory() { + return lockFactory; +} + +string Directory::getLockID() { + return toString(); +} + +void Directory::clearLock(const char* name) { + if ( lockFactory != NULL ) { + lockFactory->clearLock( name ); + } +} + +bool Directory::deleteFile(const char* name, const bool throwError){ + bool ret = doDeleteFile(name); + if ( !ret && throwError ){ + char buffer[200]; + _snprintf(buffer,200,"couldn't delete %s",name); + _CLTHROWA(CL_ERR_IO, buffer ); + } + return ret; +} +IndexInput* Directory::openInput(const char* name, int32_t bufferSize){ + IndexInput* ret; + CLuceneError err; + if ( ! openInput(name, ret, err, bufferSize) ) + throw err; + return ret; +} +char** Directory::list() const{ + vector names; + + list(&names); + + size_t size = names.size(); + char** ret = _CL_NEWARRAY(char*,size+1); + for ( size_t i=0;i& names) const{ + return list(&names); +} +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/Directory.h clucene-core-2.3.3.4/src/core/CLucene/store/Directory.h --- clucene-core-0.9.21b/src/core/CLucene/store/Directory.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/Directory.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_Directory +#define _lucene_store_Directory + +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" +#include +#include + +CL_CLASS_DEF(store,Lock) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(store,LockFactory) +CL_CLASS_DEF(store,LuceneLock) + +CL_NS_DEF(store) + + /** A Directory is a flat list of files. Files may be written once, when they + * are created. Once a file is created it may only be opened for read, or + * deleted. Random access is permitted both when reading and writing. + * + *

Direct i/o is not used directly, but rather all i/o is + * through this API. This permits things such as:

    + *
  • implementation of RAM-based indices; + *
  • implementation indices stored in a database, via a database; + *
  • implementation of an index as a single file; + *
+ * + */ +class CLUCENE_EXPORT Directory: LUCENE_REFBASE, public CL_NS(util)::NamedObject { + protected: + LockFactory* lockFactory; + + Directory(); + // Removes an existing file in the directory. + virtual bool doDeleteFile(const char* name) = 0; + public: + DEFINE_MUTEX(THIS_LOCK) + + virtual ~Directory(); + + // Returns an null terminated array of strings, one for each file in the directory. + char** list() const; + virtual bool list(std::vector* names) const = 0; //todo: deprecate this... + bool list(std::vector& names) const; + + // Returns true iff a file with the given name exists. + virtual bool fileExists(const char* name) const = 0; + + // Returns the time the named file was last modified. + virtual int64_t fileModified(const char* name) const = 0; + + // Returns the length of a file in the directory. + virtual int64_t fileLength(const char* name) const = 0; + + // An advanced overload to avoid throwing an error. if result is false, error is filled with the reason + virtual bool openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t bufferSize = -1) = 0; + + // Returns a stream reading an existing file. + IndexInput* openInput(const char* name, int32_t bufferSize=-1); + + /// Set the modified time of an existing file to now. */ + virtual void touchFile(const char* name) = 0; + + // Removes an existing file in the directory. + virtual bool deleteFile(const char* name, const bool throwError=true); + + // Renames an existing file in the directory. + // If a file already exists with the new name, then it is replaced. + // This replacement should be atomic. + virtual void renameFile(const char* from, const char* to) = 0; + + // Creates a new, empty file in the directory with the given name. + // Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* name) = 0; + + // Construct a {@link Lock}. + // @param name the name of the lock file + virtual LuceneLock* makeLock(const char* name); + + virtual void clearLock(const char* name); + + // Closes the store. + virtual void close() = 0; + + virtual std::string toString() const = 0; + + void setLockFactory( LockFactory* lockFactory ); + + LockFactory* getLockFactory(); + + virtual std::string getLockID(); + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/FSDirectory.cpp clucene-core-2.3.3.4/src/core/CLucene/store/FSDirectory.cpp --- clucene-core-0.9.21b/src/core/CLucene/store/FSDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/FSDirectory.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,693 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + +#include + +#include "FSDirectory.h" +#include "LockFactory.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/IndexWriter.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/_MD5Digester.h" + +#ifdef LUCENE_FS_MMAP + #include "_MMapIndexInput.h" +#endif + +CL_NS_DEF(store) +CL_NS_USE(util) + + /** This cache of directories ensures that there is a unique Directory + * instance per path, so that synchronization on the Directory can be used to + * synchronize access between readers and writers. + */ + static CL_NS(util)::CLHashMap DIRECTORIES(false,false); + STATIC_DEFINE_MUTEX(DIRECTORIES_LOCK) + + bool FSDirectory::disableLocks=false; + + class FSDirectory::FSIndexInput:public BufferedIndexInput { + /** + * We used a shared handle between all the fsindexinput clones. + * This reduces number of file handles we need, and it means + * we dont have to use file tell (which is slow) before doing + * a read. + * TODO: get rid of this and dup/fctnl or something like that... + */ + class SharedHandle: LUCENE_REFBASE{ + public: + int32_t fhandle; + int64_t _length; + int64_t _fpos; + DEFINE_MUTEX(*SHARED_LOCK) + char path[CL_MAX_DIR]; //todo: this is only used for cloning, better to get information from the fhandle + SharedHandle(const char* path); + ~SharedHandle(); + }; + SharedHandle* handle; + int64_t _pos; + FSIndexInput(SharedHandle* handle, int32_t __bufferSize): + BufferedIndexInput(__bufferSize) + { + this->_pos = 0; + this->handle = handle; + }; + protected: + FSIndexInput(const FSIndexInput& clone); + public: + static bool open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t bufferSize=-1); + ~FSIndexInput(); + + IndexInput* clone() const; + void close(); + int64_t length() const { return handle->_length; } + + const char* getDirectoryType() const{ return FSDirectory::getClassName(); } + const char* getObjectName() const{ return getClassName(); } + static const char* getClassName() { return "FSIndexInput"; } + protected: + // Random-access methods + void seekInternal(const int64_t position); + // IndexInput methods + void readInternal(uint8_t* b, const int32_t len); + }; + + class FSDirectory::FSIndexOutput: public BufferedIndexOutput { + private: + int32_t fhandle; + protected: + // output methods: + void flushBuffer(const uint8_t* b, const int32_t size); + public: + FSIndexOutput(const char* path, int filemode); + ~FSIndexOutput(); + + // output methods: + void close(); + + // Random-access methods + void seek(const int64_t pos); + int64_t length() const; + }; + + bool FSDirectory::FSIndexInput::open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize ) { + //Func - Constructor. + // Opens the file named path + //Pre - path != NULL + //Post - if the file could not be opened an exception is thrown. + + CND_PRECONDITION(path != NULL, "path is NULL"); + + if ( __bufferSize == -1 ) + __bufferSize = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; + SharedHandle* handle = _CLNEW SharedHandle(path); + + //Open the file + handle->fhandle = ::_cl_open(path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD ); + + //Check if a valid handle was retrieved + if (handle->fhandle >= 0){ + //Store the file length + handle->_length = fileSize(handle->fhandle); + if ( handle->_length == -1 ) + error.set( CL_ERR_IO,"fileStat error" ); + else{ + handle->_fpos = 0; + ret = _CLNEW FSIndexInput(handle, __bufferSize); + return true; + } + }else{ + int err = errno; + if ( err == ENOENT ) + error.set(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + error.set(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + error.set(CL_ERR_IO, "Too many open files"); + else + error.set(CL_ERR_IO, "Could not open file"); + } +#ifndef _CL_DISABLE_MULTITHREADING + delete handle->SHARED_LOCK; +#endif + _CLDECDELETE(handle); + return false; + } + + FSDirectory::FSIndexInput::FSIndexInput(const FSIndexInput& other): BufferedIndexInput(other){ + //Func - Constructor + // Uses clone for its initialization + //Pre - clone is a valide instance of FSIndexInput + //Post - The instance has been created and initialized by clone + if ( other.handle == NULL ) + _CLTHROWA(CL_ERR_NullPointer, "other handle is null"); + + SCOPED_LOCK_MUTEX(*other.handle->SHARED_LOCK) + handle = _CL_POINTER(other.handle); + _pos = other.handle->_fpos; //note where we are currently... + } + + FSDirectory::FSIndexInput::SharedHandle::SharedHandle(const char* path){ + fhandle = 0; + _length = 0; + _fpos = 0; + strcpy(this->path,path); + +#ifndef _CL_DISABLE_MULTITHREADING + SHARED_LOCK = new _LUCENE_THREADMUTEX; +#endif + } + FSDirectory::FSIndexInput::SharedHandle::~SharedHandle() { + if ( fhandle >= 0 ){ + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + else + fhandle = -1; + } + } + + FSDirectory::FSIndexInput::~FSIndexInput(){ + //Func - Destructor + //Pre - True + //Post - The file for which this instance is responsible has been closed. + // The instance has been destroyed + + FSIndexInput::close(); + } + + IndexInput* FSDirectory::FSIndexInput::clone() const + { + return _CLNEW FSDirectory::FSIndexInput(*this); + } + void FSDirectory::FSIndexInput::close() { + BufferedIndexInput::close(); +#ifndef _CL_DISABLE_MULTITHREADING + if ( handle != NULL ){ + //here we have a bit of a problem... we need to lock the handle to ensure that we can + //safely delete the handle... but if we delete the handle, then the scoped unlock, + //won't be able to unlock the mutex... + + //take a reference of the lock object... + _LUCENE_THREADMUTEX* mutex = handle->SHARED_LOCK; + //lock the mutex + mutex->lock(); + + //determine if we are about to delete the handle... + bool dounlock = ( _LUCENE_ATOMIC_INT_GET(handle->__cl_refcount) > 1 ); + + //decdelete (deletes if refcount is down to 0 + _CLDECDELETE(handle); + + //printf("handle=%d\n", handle->__cl_refcount); + if ( dounlock ){ + mutex->unlock(); + }else{ + delete mutex; + } + } +#else + _CLDECDELETE(handle); +#endif + } + + void FSDirectory::FSIndexInput::seekInternal(const int64_t position) { + CND_PRECONDITION(position>=0 &&position_length,"Seeking out of range") + _pos = position; + } + +/** IndexInput methods */ +void FSDirectory::FSIndexInput::readInternal(uint8_t* b, const int32_t len) { + CND_PRECONDITION(handle!=NULL,"shared file handle has closed"); + CND_PRECONDITION(handle->fhandle>=0,"file is not open"); + SCOPED_LOCK_MUTEX(*handle->SHARED_LOCK) + + if ( handle->_fpos != _pos ){ + if ( fileSeek(handle->fhandle,_pos,SEEK_SET) != _pos ){ + _CLTHROWA( CL_ERR_IO, "File IO Seek error"); + } + handle->_fpos = _pos; + } + + bufferLength = _read(handle->fhandle,b,len); // 2004.10.31:SF 1037836 + if (bufferLength == 0){ + _CLTHROWA(CL_ERR_IO, "read past EOF"); + } + if (bufferLength == -1){ + //if (EINTR == errno) we could do something else... but we have + //to guarantee some return, or throw EOF + + _CLTHROWA(CL_ERR_IO, "read error"); + } + _pos+=bufferLength; + handle->_fpos=_pos; +} + + FSDirectory::FSIndexOutput::FSIndexOutput(const char* path, int filemode){ + //O_BINARY - Opens file in binary (untranslated) mode + //O_CREAT - Creates and opens new file for writing. Has no effect if file specified by filename exists + //O_RANDOM - Specifies that caching is optimized for, but not restricted to, random access from disk. + //O_WRONLY - Opens file for writing only; + if ( filemode <= 0 ){ + filemode = 0644; + } + if ( Misc::dir_Exists(path) ) + fhandle = _cl_open( path, _O_BINARY | O_RDWR | _O_RANDOM | O_TRUNC, filemode); + else // added by JBP + fhandle = _cl_open( path, _O_BINARY | O_RDWR | _O_RANDOM | O_CREAT, filemode); + + if ( fhandle < 0 ){ + int err = errno; + if ( err == ENOENT ) + _CLTHROWA(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + _CLTHROWA(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + _CLTHROWA(CL_ERR_IO, "Too many open files"); + } + } + FSDirectory::FSIndexOutput::~FSIndexOutput(){ + if ( fhandle >= 0 ){ + try { + FSIndexOutput::close(); + }catch(CLuceneError& err){ + //ignore IO errors... + if ( err.number() != CL_ERR_IO ) + throw; + } + } + } + + /** output methods: */ + void FSDirectory::FSIndexOutput::flushBuffer(const uint8_t* b, const int32_t size) { + CND_PRECONDITION(fhandle>=0,"file is not open"); + if ( size > 0 && _write(fhandle,b,size) != size ) + _CLTHROWA(CL_ERR_IO, "File IO Write error"); + } + void FSDirectory::FSIndexOutput::close() { + try{ + BufferedIndexOutput::close(); + }catch(CLuceneError& err){ + //ignore IO errors... + if ( err.number() != CL_ERR_IO ) + throw; + } + + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + else + fhandle = -1; //-1 now indicates closed + } + + void FSDirectory::FSIndexOutput::seek(const int64_t pos) { + CND_PRECONDITION(fhandle>=0,"file is not open"); + BufferedIndexOutput::seek(pos); + int64_t ret = fileSeek(fhandle,pos,SEEK_SET); + if ( ret != pos ){ + _CLTHROWA(CL_ERR_IO, "File IO Seek error"); + } + } + int64_t FSDirectory::FSIndexOutput::length() const { + CND_PRECONDITION(fhandle>=0,"file is not open"); + return fileSize(fhandle); + } + + + const char* FSDirectory::LOCK_DIR=NULL; + const char* FSDirectory::getLockDir(){ + #ifdef LUCENE_LOCK_DIR + LOCK_DIR = LUCENE_LOCK_DIR; + #else + #ifdef LUCENE_LOCK_DIR_ENV_1 + if ( LOCK_DIR == NULL ) + LOCK_DIR = getenv(LUCENE_LOCK_DIR_ENV_1); + #endif + #ifdef LUCENE_LOCK_DIR_ENV_2 + if ( LOCK_DIR == NULL ) + LOCK_DIR = getenv(LUCENE_LOCK_DIR_ENV_2); + #endif + #ifdef LUCENE_LOCK_DIR_ENV_FALLBACK + if ( LOCK_DIR == NULL ) + LOCK_DIR=LUCENE_LOCK_DIR_ENV_FALLBACK; + #endif + if ( LOCK_DIR == NULL ) + _CLTHROWA(CL_ERR_IO, "Couldn't get determine lock dir"); + #endif + + return LOCK_DIR; + } + + FSDirectory::FSDirectory(): + Directory(), + refCount(0), + useMMap(LUCENE_USE_MMAP) + { + filemode = 0644; + this->lockFactory = NULL; + } + + void FSDirectory::init(const char* _path, LockFactory* lockFactory) + { + directory = _path; + bool doClearLockID = false; + + if ( lockFactory == NULL ) { + if ( disableLocks ) { + lockFactory = NoLockFactory::getNoLockFactory(); + } else { + lockFactory = _CLNEW FSLockFactory( directory.c_str(), this->filemode ); + doClearLockID = true; + } + } + + setLockFactory( lockFactory ); + + if ( doClearLockID ) { + lockFactory->setLockPrefix(NULL); + } + + if (!Misc::dir_Exists(directory.c_str())){ + char* err = _CL_NEWARRAY(char,19+directory.length()+1); //19: len of " is not a directory" + strcpy(err,directory.c_str()); + strcat(err," is not a directory"); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + + + void FSDirectory::create(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + + //clear old files + vector files; + Misc::listFiles(directory.c_str(), files, false); + vector::iterator itr = files.begin(); + while ( itr != files.end() ){ + if ( CL_NS(index)::IndexReader::isLuceneFile(itr->c_str()) ){ + if ( _unlink( (directory + PATH_DELIMITERA + *itr).c_str() ) == -1 ) { + _CLTHROWA(CL_ERR_IO, "Couldn't delete file "); //todo: make richer error + } + } + itr++; + } + lockFactory->clearLock( CL_NS(index)::IndexWriter::WRITE_LOCK_NAME ); + + } + + void FSDirectory::priv_getFN(char* buffer, const char* name) const{ + buffer[0] = 0; + strcpy(buffer,directory.c_str()); + strcat(buffer, PATH_DELIMITERA ); + strcat(buffer,name); + } + + FSDirectory::~FSDirectory(){ + } + + void FSDirectory::setFileMode(int mode){ + this->filemode = mode; + } + int FSDirectory::getFileMode(){ + return this->filemode; + } + void FSDirectory::setUseMMap(bool value){ useMMap = value; } + bool FSDirectory::getUseMMap() const{ return useMMap; } + const char* FSDirectory::getClassName(){ + return "FSDirectory"; + } + const char* FSDirectory::getObjectName() const{ + return getClassName(); + } + + void FSDirectory::setDisableLocks(bool doDisableLocks) { disableLocks = doDisableLocks; } + bool FSDirectory::getDisableLocks() { return disableLocks; } + + + bool FSDirectory::list(vector* names) const{ //todo: fix this, ugly!!! + CND_PRECONDITION(!directory.empty(),"directory is not open"); + return Misc::listFiles(directory.c_str(), *names, false); + } + + bool FSDirectory::fileExists(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + return Misc::dir_Exists( fl ); + } + + const char* FSDirectory::getDirName() const{ + return directory.c_str(); + } + + FSDirectory* FSDirectory::getDirectory(const char* file, bool create, LockFactory* lockFactory){ + FSDirectory* dir = getDirectory(file, (LockFactory*)NULL); + + // This is now deprecated (creation should only be done + // by IndexWriter): + if (create) { + dir->create(); + } + + return dir; + } + //static + FSDirectory* FSDirectory::getDirectory(const char* _file, LockFactory* lockFactory){ + FSDirectory* dir = NULL; + { + if ( !_file || !*_file ) + _CLTHROWA(CL_ERR_IO,"Invalid directory"); + + char buf[CL_MAX_PATH]; + char* file = _realpath(_file,buf);//set a realpath so that if we change directory, we can still function + if ( !file || !*file ){ + strncpy(buf, _file, CL_MAX_PATH); + file = buf; + } + + struct cl_stat_t fstat; + if ( fileStat(file,&fstat) == 0 && !(fstat.st_mode & S_IFDIR) ){ + char tmp[1024]; + _snprintf(tmp,1024,"%s not a directory", file); + _CLTHROWA(CL_ERR_IO,tmp); + } + + if ( fileStat(file,&fstat) != 0 ) { + //todo: should construct directory using _mkdirs... have to write replacement + if ( _mkdir(file) == -1 ){ + string err = "Couldn't create directory: "; + err += string(file); + _CLTHROWA(CL_ERR_IO, err.c_str() ); + } + } + + + SCOPED_LOCK_MUTEX(DIRECTORIES_LOCK) + dir = DIRECTORIES.get(file); + if ( dir == NULL ){ + dir = _CLNEW FSDirectory(); + dir->init(_file,lockFactory); + DIRECTORIES.put( dir->directory.c_str(), dir); + } else { + if ( lockFactory != NULL && lockFactory != dir->getLockFactory() ) { + _CLTHROWA(CL_ERR_IO,"Directory was previously created with a different LockFactory instance, please pass NULL as the lockFactory instance and use setLockFactory to change it"); + } + } + + { + SCOPED_LOCK_MUTEX(dir->THIS_LOCK) + dir->refCount++; + } + } + + return _CL_POINTER(dir); // TODO: Isn't this a double ref increment? + } + + int64_t FSDirectory::fileModified(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + priv_getFN(buffer,name); + if (fileStat( buffer, &buf ) == -1 ) + return 0; + else + return buf.st_mtime; + } + + //static + int64_t FSDirectory::fileModified(const char* dir, const char* name){ + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + _snprintf(buffer,CL_MAX_DIR,"%s%s%s",dir,PATH_DELIMITERA,name); + fileStat( buffer, &buf ); + return buf.st_mtime; + } + + void FSDirectory::touchFile(const char* name){ + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char buffer[CL_MAX_DIR]; + _snprintf(buffer,CL_MAX_DIR,"%s%s%s",directory.c_str(),PATH_DELIMITERA,name); + + int32_t r = _cl_open(buffer, O_RDWR, this->filemode); + if ( r < 0 ) + _CLTHROWA(CL_ERR_IO,"IO Error while touching file"); + ::_close(r); + } + + int64_t FSDirectory::fileLength(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + priv_getFN(buffer,name); + if ( fileStat( buffer, &buf ) == -1 ) + return 0; + else + return buf.st_size; + } + + bool FSDirectory::openInput(const char * name, IndexInput *& ret, CLuceneError& error, int32_t bufferSize) + { + CND_PRECONDITION(directory[0]!=0,"directory is not open") + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); +#ifdef LUCENE_FS_MMAP + //todo: do some tests here... like if the file + //is >2gb, then some system cannot mmap the file + //also some file systems mmap will fail?? could detect here too + if ( useMMap && Misc::file_Size(fl) < LUCENE_INT32_MAX_SHOULDBE ) //todo: would this be bigger on 64bit systems?. i suppose it would be...test first + return MMapIndexInput::open( fl, ret, error, bufferSize ); + else +#endif + return FSIndexInput::open( fl, ret, error, bufferSize ); + } + + void FSDirectory::close(){ + SCOPED_LOCK_MUTEX(DIRECTORIES_LOCK) + { + THIS_LOCK.lock(); + + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + + if (--refCount <= 0 ) {//refcount starts at 1 + Directory* dir = DIRECTORIES.get(getDirName()); + if(dir){ + DIRECTORIES.remove( getDirName() ); //this will be removed in ~FSDirectory + _CLDECDELETE(dir); + //NOTE: Don't unlock the mutex, since it has been destroyed now... + return; + } + } + THIS_LOCK.unlock(); + } + } + + /** + * So we can do some byte-to-hexchar conversion below + */ + char HEX_DIGITS[] = + {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; + + char* FSDirectory::getLockPrefix() const{ + char dirName[CL_MAX_PATH]; // name to be hashed + if ( _realpath(directory.c_str(),dirName) == NULL ){ + _CLTHROWA(CL_ERR_Runtime,"Invalid directory path"); + } + + //to make a compatible name with jlucene, we need to make some changes... + if ( dirName[1] == ':' ) + dirName[0] = (char)_totupper((char)dirName[0]); + + char* smd5 = MD5String(dirName); + + char* ret=_CL_NEWARRAY(char,32+7+1); //32=2*16, 7=strlen("lucene-") + strcpy(ret,"lucene-"); + strcat(ret,smd5); + + _CLDELETE_CaARRAY(smd5); + + return ret; + } + + bool FSDirectory::doDeleteFile(const char* name) { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + return _unlink(fl) != -1; + } + + void FSDirectory::renameFile(const char* from, const char* to){ + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + SCOPED_LOCK_MUTEX(THIS_LOCK) + char old[CL_MAX_DIR]; + priv_getFN(old, from); + + char nu[CL_MAX_DIR]; + priv_getFN(nu, to); + + /* This is not atomic. If the program crashes between the call to + delete() and the call to renameTo() then we're screwed, but I've + been unable to figure out how else to do this... */ + + if ( Misc::dir_Exists(nu) ){ + //we run this sequence of unlinking an arbitary 100 times + //on some platforms (namely windows), there can be a + //delay between unlink and dir_exists==false + if( Misc::file_Unlink( nu ) == -1 ) { + char* err = _CL_NEWARRAY(char,16+strlen(to)+1); //16: len of "couldn't delete " + strcpy(err,"couldn't delete "); + strcat(err,to); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + if ( _rename(old,nu) != 0 ){ + //todo: jlucene has some extra rename code - if the rename fails, it copies + //the whole file to the new file... might want to implement that if renaming + //fails on some platforms + char buffer[20+CL_MAX_PATH+CL_MAX_PATH]; + strcpy(buffer,"couldn't rename "); + strcat(buffer,from); + strcat(buffer," to "); + strcat(buffer,nu); + _CLTHROWA(CL_ERR_IO, buffer ); + } + } + + IndexOutput* FSDirectory::createOutput(const char* name) { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + if ( Misc::dir_Exists(fl) ){ + if ( Misc::file_Unlink( fl, 1 ) == -1 ) { + char tmp[1024]; + strcpy(tmp, "Cannot overwrite: "); + strcat(tmp, name); + _CLTHROWA(CL_ERR_IO, tmp); + } + assert( ! Misc::dir_Exists(fl) ); + } + return _CLNEW FSIndexOutput( fl, this->filemode ); + } + + string FSDirectory::toString() const{ + return string("FSDirectory@") + this->directory; + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/FSDirectory.h clucene-core-2.3.3.4/src/core/CLucene/store/FSDirectory.h --- clucene-core-0.9.21b/src/core/CLucene/store/FSDirectory.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/FSDirectory.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,168 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_FSDirectory_ +#define _lucene_store_FSDirectory_ + +#include "Directory.h" +#include "IndexInput.h" +#include "IndexOutput.h" +#include +#include + +CL_CLASS_DEF(util,StringBuffer) + + CL_NS_DEF(store) + + /** + * Straightforward implementation of {@link lucene::store::Directory} as a directory of files. + *

If the system property 'disableLuceneLocks' has the String value of + * "true", lock creation will be disabled. + * + * @see Directory + */ + class CLUCENE_EXPORT FSDirectory:public Directory{ + private: + class FSIndexOutput; + class FSIndexInput; + friend class FSDirectory::FSIndexOutput; + friend class FSDirectory::FSIndexInput; + + int filemode; + protected: + FSDirectory(); + virtual void init(const char* path, LockFactory* lockFactory = NULL); + void priv_getFN(char* buffer, const char* name) const; + private: + std::string directory; + int refCount; + void create(); + + static const char* LOCK_DIR; + static const char* getLockDir(); + char* getLockPrefix() const; + static bool disableLocks; + + bool useMMap; + + protected: + /// Removes an existing file in the directory. + bool doDeleteFile(const char* name); + + public: + ///Destructor - only call this if you are sure the directory + ///is not being used anymore. Otherwise use the ref-counting + ///facilities of _CLDECDELETE + virtual ~FSDirectory(); + + /// Get a list of strings, one for each file in the directory. + bool list(std::vector* names) const; + + /// Returns true iff a file with the given name exists. + bool fileExists(const char* name) const; + + /// Returns the text name of the directory + const char* getDirName() const; ///Directories are cached, so that, for a given canonical path, the same + FSDirectory instance will always be returned. This permits + synchronization on directories. + + @param file the path to the directory. + @param create if true, create, or erase any existing contents. + @return the FSDirectory for the named file. + */ + static FSDirectory* getDirectory(const char* file, LockFactory* lockFactory=NULL); + + /// Returns the time the named file was last modified. + int64_t fileModified(const char* name) const; + + //static + /// Returns the time the named file was last modified. + static int64_t fileModified(const char* dir, const char* name); + + //static + /// Returns the length in bytes of a file in the directory. + int64_t fileLength(const char* name) const; + + /// Returns a stream reading an existing file. + virtual bool openInput(const char* name, IndexInput*& ret, CLuceneError& err, int32_t bufferSize = -1); + + /// Renames an existing file in the directory. + void renameFile(const char* from, const char* to); + + /** Set the modified time of an existing file to now. */ + void touchFile(const char* name); + + /// Creates a new, empty file in the directory with the given name. + /// Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* name); + + ///Decrease the ref-count to the directory by one. If + ///the object is no longer needed, then the object is + ///removed from the directory pool. + void close(); + + /** + * If MMap is available, this can disable use of + * mmap reading. + */ + void setUseMMap(bool value); + /** + * Gets whether the directory is using MMap for inputstreams. + */ + bool getUseMMap() const; + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; + + /** + * Set whether Lucene's use of lock files is disabled. By default, + * lock files are enabled. They should only be disabled if the index + * is on a read-only medium like a CD-ROM. + */ + static void setDisableLocks(bool doDisableLocks); + + /** + * Returns whether Lucene's use of lock files is disabled. + * @return true if locks are disabled, false if locks are enabled. + */ + static bool getDisableLocks(); + + /** + * Sets the file mode for new files. This is passed to new output streams + * and to the lock factory. The mode should be a valid octal file mode for + * the 3rd parameter of the file open function (such as 0644) + * + * Tip: _tcstoi64(_T("644"), NULL, 8) is also a valid way of + * creating a file mode + */ + void setFileMode(int mode); + + /** + * Gets the file mode for new files + */ + int getFileMode(); + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/IndexInput.cpp clucene-core-2.3.3.4/src/core/CLucene/store/IndexInput.cpp --- clucene-core-0.9.21b/src/core/CLucene/store/IndexInput.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/IndexInput.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,306 @@ + /*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "IndexInput.h" +#include "IndexOutput.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(store) +CL_NS_USE(util) + + IndexInput::IndexInput(): + NamedObject() + { + } + IndexInput::~IndexInput() + { + } + IndexInput::IndexInput(const IndexInput& /*other*/) + { + } + + int32_t IndexInput::readInt() { + int32_t b = (readByte() << 24); + b |= (readByte() << 16); + b |= (readByte() << 8); + return (b | readByte()); + } + + int32_t IndexInput::readVInt() { + uint8_t b = readByte(); + int32_t i = b & 0x7F; + for (int32_t shift = 7; (b & 0x80) != 0; shift += 7) { + b = readByte(); + i |= (b & 0x7F) << shift; + } + return i; + } + + int64_t IndexInput::readLong() { + int64_t i = ((int64_t)readInt() << 32); + return (i | ((int64_t)readInt() & 0xFFFFFFFFL)); + } + + int64_t IndexInput::readVLong() { + uint8_t b = readByte(); + int64_t i = b & 0x7F; + for (int32_t shift = 7; (b & 0x80) != 0; shift += 7) { + b = readByte(); + i |= (((int64_t)b) & 0x7FL) << shift; + } + return i; + } + + void IndexInput::skipChars( const int32_t count) { + for (int32_t i = 0; i < count; i++) { + TCHAR b = readByte(); + if ((b & 0x80) == 0) { + // Do Nothing. + } else if ((b & 0xE0) != 0xE0) { + readByte(); + } else { + readByte(); + readByte(); + } + } +} + + #ifdef _UCS2 + int32_t IndexInput::readString(char* buffer, const int32_t maxLength){ + TCHAR* buf = _CL_NEWARRAY(TCHAR,maxLength); + int32_t ret = -1; + try{ + ret = readString(buf,maxLength); + STRCPY_TtoA(buffer,buf,ret+1); + }_CLFINALLY ( _CLDELETE_CARRAY(buf); ) + return ret; + } + #endif + + int32_t IndexInput::readString(TCHAR* buffer, const int32_t maxLength){ + int32_t len = readVInt(); + int32_t ml=maxLength-1; + if ( len >= ml ){ + readChars(buffer, 0, ml); + buffer[ml] = 0; + //we have to finish reading all the data for this string! + if ( len-ml > 0 ){ + //seek(getFilePointer()+(len-ml)); <- that was the wrong way to "finish reading" + skipChars(len-ml); + } + return ml; + }else{ + readChars(buffer, 0, len); + buffer[len] = 0; + return len; + } + } + + TCHAR* IndexInput::readString(){ + int32_t len = readVInt(); + + if ( len == 0){ + return stringDuplicate(LUCENE_BLANK_STRING); + } + + TCHAR* ret = _CL_NEWARRAY(TCHAR,len+1); + readChars(ret, 0, len); + ret[len] = 0; + + return ret; + } + + void IndexInput::readBytes( uint8_t* b, const int32_t len, bool /*useBuffer*/) { + // Default to ignoring useBuffer entirely + readBytes(b, len); + } + + void IndexInput::readChars( TCHAR* buffer, const int32_t start, const int32_t len) { + const int32_t end = start + len; + TCHAR b; + for (int32_t i = start; i < end; ++i) { + b = readByte(); + if ((b & 0x80) == 0) { + b = (b & 0x7F); + } else if ((b & 0xE0) != 0xE0) { + b = (((b & 0x1F) << 6) + | (readByte() & 0x3F)); + } else { + b = ((b & 0x0F) << 12) | ((readByte() & 0x3F) << 6); + b |= (readByte() & 0x3F); + } + buffer[i] = b; + } + } + + + + + + +BufferedIndexInput::BufferedIndexInput(int32_t _bufferSize): + buffer(NULL), + bufferSize(_bufferSize>=0?_bufferSize:CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE), + bufferStart(0), + bufferLength(0), + bufferPosition(0) + { + } + + BufferedIndexInput::BufferedIndexInput(const BufferedIndexInput& other): + IndexInput(other), + buffer(NULL), + bufferSize(other.bufferSize), + bufferStart(other.bufferStart), + bufferLength(other.bufferLength), + bufferPosition(other.bufferPosition) + { + /* DSR: Does the fact that sometime clone.buffer is not NULL even when + ** clone.bufferLength is zero indicate memory corruption/leakage? + ** if ( clone.buffer != NULL) { */ + if (other.bufferLength != 0 && other.buffer != NULL) { + buffer = _CL_NEWARRAY(uint8_t,bufferLength); + memcpy(buffer,other.buffer,bufferLength * sizeof(uint8_t)); + } + } + + const char* BufferedIndexInput::getObjectName(){ return getClassName(); } + const char* BufferedIndexInput::getClassName(){ return "BufferedIndexInput"; } + + void BufferedIndexInput::readBytes(uint8_t* b, const int32_t len){ + readBytes(b, len, true); + } + void BufferedIndexInput::readBytes(uint8_t* _b, const int32_t _len, bool useBuffer){ + int32_t len = _len; + uint8_t* b = _b; + + if(len <= (bufferLength-bufferPosition)){ + // the buffer contains enough data to satisfy this request + if(len>0) // to allow b to be null if len is 0... + memcpy(b, buffer + bufferPosition, len); + bufferPosition+=len; + } else { + // the buffer does not have enough data. First serve all we've got. + int32_t available = bufferLength - bufferPosition; + if(available > 0){ + memcpy(b, buffer + bufferPosition, available); + b += available; + len -= available; + bufferPosition += available; + } + // and now, read the remaining 'len' bytes: + if (useBuffer && len length()) + _CLTHROWA(CL_ERR_IO, "read past EOF"); + readInternal(b, len); + bufferStart = after; + bufferPosition = 0; + bufferLength = 0; // trigger refill() on read + } + } + } + + int64_t BufferedIndexInput::getFilePointer() const{ + return bufferStart + bufferPosition; + } + + void BufferedIndexInput::seek(const int64_t pos) { + if ( pos < 0 ) + _CLTHROWA(CL_ERR_IO, "IO Argument Error. Value must be a positive value."); + if (pos >= bufferStart && pos < (bufferStart + bufferLength)) + bufferPosition = (int32_t)(pos - bufferStart); // seek within buffer + else { + bufferStart = pos; + bufferPosition = 0; + bufferLength = 0; // trigger refill() on read() + seekInternal(pos); + } + } + void BufferedIndexInput::close(){ + _CLDELETE_ARRAY(buffer); + bufferLength = 0; + bufferPosition = 0; + bufferStart = 0; + } + + + BufferedIndexInput::~BufferedIndexInput(){ + BufferedIndexInput::close(); + } + + void BufferedIndexInput::refill() { + int64_t start = bufferStart + bufferPosition; + int64_t end = start + bufferSize; + if (end > length()) // don't read past EOF + end = length(); + bufferLength = (int32_t)(end - start); + if (bufferLength <= 0) + _CLTHROWA(CL_ERR_IO, "IndexInput read past EOF"); + + if (buffer == NULL){ + buffer = _CL_NEWARRAY(uint8_t,bufferSize); // allocate buffer lazily + } + readInternal(buffer, bufferLength); + + + bufferStart = start; + bufferPosition = 0; + } + + void BufferedIndexInput::setBufferSize( int32_t newSize ) { + + if ( newSize != bufferSize ) { + bufferSize = newSize; + if ( buffer != NULL ) { + + uint8_t* newBuffer = _CL_NEWARRAY( uint8_t, newSize ); + int32_t leftInBuffer = bufferLength - bufferPosition; + int32_t numToCopy; + + if ( leftInBuffer > newSize ) { + numToCopy = newSize; + } else { + numToCopy = leftInBuffer; + } + + memcpy( (void*)newBuffer, (void*)(buffer + bufferPosition), numToCopy ); + + bufferStart += bufferPosition; + bufferPosition = 0; + bufferLength = numToCopy; + + _CLDELETE_ARRAY( buffer ); + buffer = newBuffer; + + } + } + + } + +CL_NS_END + diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/IndexInput.h clucene-core-2.3.3.4/src/core/CLucene/store/IndexInput.h --- clucene-core-0.9.21b/src/core/CLucene/store/IndexInput.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/IndexInput.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,196 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_IndexInput_ +#define _lucene_store_IndexInput_ + +#include "CLucene/LuceneThreads.h" +#include "CLucene/util/Equators.h" + +CL_NS_DEF(store) + + /** Abstract base class for input from a file in a {@link lucene::store::Directory}. A + * random-access input stream. Used for all Lucene index input operations. + * @see Directory + * @see IndexOutput + */ + class CLUCENE_EXPORT IndexInput: LUCENE_BASE, public CL_NS(util)::NamedObject { + protected: + IndexInput(); + IndexInput(const IndexInput& clone); + public: + virtual ~IndexInput(); + virtual IndexInput* clone() const =0; + + DEFINE_MUTEX(THIS_LOCK) + + /** Reads and returns a single byte. + * @see IndexOutput#writeByte(byte) + */ + virtual uint8_t readByte() =0; + + + /** Reads a specified number of bytes into an array at the specified offset. + * @param b the array to read bytes into + * @param offset the offset in the array to start storing bytes + * @param len the number of bytes to read + * @see IndexOutput#writeBytes(byte[],int) + */ + virtual void readBytes(uint8_t* b, const int32_t len) = 0; + + /** Reads a specified number of bytes into an array at the + * specified offset with control over whether the read + * should be buffered (callers who have their own buffer + * should pass in "false" for useBuffer). Currently only + * {@link BufferedIndexInput} respects this parameter. + * @param b the array to read bytes into + * @param offset the offset in the array to start storing bytes + * @param len the number of bytes to read + * @param useBuffer set to false if the caller will handle + * buffering. + * @see IndexOutput#writeBytes(byte[],int32_t) + */ + virtual void readBytes(uint8_t* b, const int32_t len, bool useBuffer); + + /** Reads four bytes and returns an int. + * @see IndexOutput#writeInt(int32_t) + */ + int32_t readInt(); + + /** Reads an int stored in variable-length format. Reads between one and + * five bytes. Smaller values take fewer bytes. Negative numbers are not + * supported. + * @see IndexOutput#writeVInt(int32_t) + */ + virtual int32_t readVInt(); + + /** Reads eight bytes and returns a long. + * @see IndexOutput#writeLong(long) + */ + int64_t readLong(); + + /** Reads a long stored in variable-length format. Reads between one and + * nine bytes. Smaller values take fewer bytes. Negative numbers are not + * supported. */ + int64_t readVLong(); + + /** Reads a string + * @see IndexOutput#writeString(String) + * maxLength is the amount read into the buffer, the whole string is still read from the stream + * returns the amount read + */ + int32_t readString(TCHAR* buffer, const int32_t maxlength); + + #ifdef _UCS2 + /** Reads a string and converts to ascii. + * @see IndexOutput#writeString(String) + * maxLength is the amount read into the buffer, the whole string is still read from the stream + * returns the amount read + */ + int32_t readString(char* buffer, const int32_t maxlength); + #endif + + /** Reads a string. + * @see IndexOutput#writeString(String) + */ + TCHAR* readString(); + + /** Reads UTF-8 encoded characters into an array. + * @param buffer the array to read characters into + * @param start the offset in the array to start storing characters + * @param length the number of characters to read + * @see IndexOutput#writeChars(String,int32_t,int32_t) + */ + void readChars( TCHAR* buffer, const int32_t start, const int32_t len); + + void skipChars( const int32_t count); + + /** Closes the stream to futher operations. */ + virtual void close() =0; + + /** Returns the current position in this file, where the next read will + * occur. + * @see #seek(int64_t) + */ + virtual int64_t getFilePointer() const =0; + + /** Sets current position in this file, where the next read will occur. + * @see #getFilePointer() + */ + virtual void seek(const int64_t pos) =0; + + /** The number of bytes in the file. */ + virtual int64_t length() const = 0; + + virtual const char* getDirectoryType() const = 0; + virtual const char* getObjectName() const = 0; + }; + + /** Abstract base class for input from a file in a {@link Directory}. A + * random-access input stream. Used for all Lucene index input operations. + * @see Directory + * @see IndexOutput + */ + class CLUCENE_EXPORT BufferedIndexInput: public IndexInput{ + private: + uint8_t* buffer; //array of bytes + void refill(); + protected: + int32_t bufferSize; //size of the buffer + int64_t bufferStart; // position in file of buffer + int32_t bufferLength; // end of valid l_byte_ts + int32_t bufferPosition; // next uint8_t to read + + /** Returns a clone of this stream. + * + *

Clones of a stream access the same data, and are positioned at the same + * point as the stream they were cloned from. + * + *

Expert: Subclasses must ensure that clones may be positioned at + * different points in the input from each other and from the stream they + * were cloned from. + */ + BufferedIndexInput(const BufferedIndexInput& clone); + BufferedIndexInput(int32_t bufferSize = -1); + public: + LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=LUCENE_STREAM_BUFFER_SIZE); + + virtual ~BufferedIndexInput(); + virtual IndexInput* clone() const = 0; + void close(); + inline uint8_t readByte(){ + if (bufferPosition >= bufferLength) + refill(); + + return buffer[bufferPosition++]; + } + void readBytes(uint8_t* b, const int32_t len); + void readBytes(uint8_t* b, const int32_t len, bool useBuffer); + int64_t getFilePointer() const; + void seek(const int64_t pos); + + void setBufferSize( int32_t newSize ); + + const char* getObjectName(); + static const char* getClassName(); + + protected: + /** Expert: implements buffer refill. Reads bytes from the current position + * in the input. + * @param b the array to read bytes into + * @param offset the offset in the array to start storing bytes + * @param length the number of bytes to read + */ + virtual void readInternal(uint8_t* b, const int32_t len) = 0; + + /** Expert: implements seek. Sets current position in this file, where the + * next {@link #readInternal(byte[],int32_t,int32_t)} will occur. + * @see #readInternal(byte[],int32_t,int32_t) + */ + virtual void seekInternal(const int64_t pos) = 0; + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/IndexOutput.cpp clucene-core-2.3.3.4/src/core/CLucene/store/IndexOutput.cpp --- clucene-core-0.9.21b/src/core/CLucene/store/IndexOutput.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/IndexOutput.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,197 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "IndexOutput.h" +#include "IndexInput.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(store) + + + IndexOutput::IndexOutput() + { + copyBuffer = NULL; + } + + IndexOutput::~IndexOutput(){ + _CLDELETE_LARRAY(copyBuffer); + } + + BufferedIndexOutput::BufferedIndexOutput() + { + buffer = _CL_NEWARRAY(uint8_t, BUFFER_SIZE ); + bufferStart = 0; + bufferPosition = 0; + } + + BufferedIndexOutput::~BufferedIndexOutput(){ + if ( buffer != NULL ) + close(); + } + + void BufferedIndexOutput::close(){ + flush(); + _CLDELETE_ARRAY( buffer ); + + bufferStart = 0; + bufferPosition = 0; + } + + void BufferedIndexOutput::writeByte(const uint8_t b) { + CND_PRECONDITION(buffer!=NULL,"IndexOutput is closed") + if (bufferPosition >= BUFFER_SIZE) + flush(); + buffer[bufferPosition++] = b; + } + + void BufferedIndexOutput::writeBytes(const uint8_t* b, const int32_t length) { + if ( length < 0 ) + _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value."); + int32_t bytesLeft = BUFFER_SIZE - bufferPosition; + // is there enough space in the buffer? + if (bytesLeft >= length) { + // we add the data to the end of the buffer + memcpy(buffer + bufferPosition, b, length); + bufferPosition += length; + // if the buffer is full, flush it + if (BUFFER_SIZE - bufferPosition == 0) + flush(); + } else { + // is data larger then buffer? + if (length > BUFFER_SIZE) { + // we flush the buffer + if (bufferPosition > 0) + flush(); + // and write data at once + flushBuffer(b, length); + bufferStart += length; + } else { + // we fill/flush the buffer (until the input is written) + int64_t pos = 0; // position in the input data + int32_t pieceLength; + while (pos < length) { + if ( length - pos < bytesLeft ) + pieceLength = (int32_t)(length - pos); + else + pieceLength = bytesLeft; + memcpy(buffer + bufferPosition, b + pos, pieceLength); + pos += pieceLength; + bufferPosition += pieceLength; + // if the buffer is full, flush it + bytesLeft = BUFFER_SIZE - bufferPosition; + if (bytesLeft == 0) { + flush(); + bytesLeft = BUFFER_SIZE; + } + } + } + } + } + + void IndexOutput::writeInt(const int32_t i) { + writeByte((uint8_t)(i >> 24)); + writeByte((uint8_t)(i >> 16)); + writeByte((uint8_t)(i >> 8)); + writeByte((uint8_t) i); + } + + void IndexOutput::writeVInt(const int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //doing unsigned shift + } + writeByte( (uint8_t)i ); + } + + void IndexOutput::writeLong(const int64_t i) { + writeInt((int32_t) (i >> 32)); + writeInt((int32_t) i); + } + + void IndexOutput::writeVLong(const int64_t vi) { + uint64_t i = vi; + while ((i & ~0x7F) != 0) { + writeByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //doing unsigned shift + } + writeByte((uint8_t)i); + } + + void IndexOutput::writeString(const string& s ) { + writeString(s.c_str(),s.length()); + } + +#ifdef _UCS2 + void IndexOutput::writeString(const char* s, const int32_t length ) { + TCHAR* buf = _CL_NEWARRAY(TCHAR,length+1); + STRCPY_AtoT(buf,s,length); + try{ + writeString(buf,length); + }_CLFINALLY ( _CLDELETE_CARRAY(buf); ) + } +#endif + + void IndexOutput::writeString(const TCHAR* s, const int32_t length ) { + writeVInt(length); + writeChars(s, length); + } + + void IndexOutput::writeChars(const TCHAR* s, const int32_t length){ + if ( length < 0 ) + _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value."); + + const int32_t end = length; + for (int32_t i = 0; i < end; ++i) { + const int32_t code = (int32_t)s[i]; + if (code >= 0x01 && code <= 0x7F) + writeByte((uint8_t)code); + else if (((code >= 0x80) && (code <= 0x7FF)) || code == 0) { + writeByte((uint8_t)(0xC0 | (code >> 6))); + writeByte((uint8_t)(0x80 | (code & 0x3F))); + } else { + writeByte((uint8_t)(0xE0 | (((uint32_t)code) >> 12))); //unsigned shift + writeByte((uint8_t)(0x80 | ((code >> 6) & 0x3F))); + writeByte((uint8_t)(0x80 | (code & 0x3F))); + } + } + } + + + int64_t BufferedIndexOutput::getFilePointer() const{ + return bufferStart + bufferPosition; + } + void IndexOutput::copyBytes(CL_NS(store)::IndexInput* input, int64_t numBytes) + { + int64_t left = numBytes; + if (copyBuffer == NULL) + copyBuffer = _CL_NEWARRAY(uint8_t, COPY_BUFFER_SIZE); + while(left > 0) { + int32_t toCopy; + if (left > COPY_BUFFER_SIZE) + toCopy = COPY_BUFFER_SIZE; + else + toCopy = (int32_t) left; + input->readBytes(copyBuffer, toCopy); + writeBytes(copyBuffer, toCopy); + left -= toCopy; + } + } + + void BufferedIndexOutput::seek(const int64_t pos) { + flush(); + bufferStart = pos; + } + + void BufferedIndexOutput::flush() { + flushBuffer(buffer, bufferPosition); + bufferStart += bufferPosition; + bufferPosition = 0; + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/IndexOutput.h clucene-core-2.3.3.4/src/core/CLucene/store/IndexOutput.h --- clucene-core-0.9.21b/src/core/CLucene/store/IndexOutput.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/IndexOutput.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,166 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_IndexOutput_ +#define _lucene_store_IndexOutput_ + +CL_NS_DEF(store) + +class IndexInput; + +/** Abstract class for output to a file in a Directory. A random-access output +* stream. Used for all Lucene index output operations. +* @see Directory +* @see IndexInput +*/ +class CLUCENE_EXPORT IndexOutput:LUCENE_BASE{ + bool isclosed; +public: + IndexOutput(); + virtual ~IndexOutput(); + + /** Writes a single byte. + * @see IndexInput#readByte() + */ + virtual void writeByte(const uint8_t b) = 0; + + /** Writes an array of bytes. + * @param b the bytes to write + * @param length the number of bytes to write + * @see IndexInput#readBytes(uint8_t*,int32_t) + */ + virtual void writeBytes(const uint8_t* b, const int32_t length) = 0; + + /** Writes an int as four bytes. + * @see IndexInput#readInt() + */ + void writeInt(const int32_t i); + + /** Writes an int in a variable-length format. Writes between one and + * five bytes. Smaller values take fewer bytes. Negative numbers are not + * supported. + * @see IndexInput#readVInt() + */ + void writeVInt(const int32_t vi); + + /** Writes a long as eight bytes. + * @see IndexInput#readLong() + */ + void writeLong(const int64_t i); + + /** Writes an long in a variable-length format. Writes between one and five + * bytes. Smaller values take fewer bytes. Negative numbers are not + * supported. + * @see IndexInput#readVLong() + */ + void writeVLong(const int64_t vi); + + /** Writes a string. + * @see IndexInput#readString() + */ + void writeString(const TCHAR* s, const int32_t length); + void writeString(const std::string& s); + + #ifdef _UCS2 + /** Writes an ascii string. converts to TCHAR* before writing + * @see IndexInput#readString() + */ + void writeString(const char* s, const int32_t length); + #endif + + /** Writes a sequence of UTF-8 encoded characters from a string. + * @param s the source of the characters + * @param start the first character in the sequence + * @param length the number of characters in the sequence + * @see IndexInput#readChars(char[],int32_t,int32_t) + */ + void writeChars(const TCHAR* s, const int32_t length); + + /** Closes this stream to further operations. */ + virtual void close() = 0; + + /** Returns the current position in this file, where the next write will + * occur. + * @see #seek(long) + */ + virtual int64_t getFilePointer() const = 0; + + /** Sets current position in this file, where the next write will occur. + * @see #getFilePointer() + */ + virtual void seek(const int64_t pos) = 0; + + /** The number of bytes in the file. */ + virtual int64_t length() const = 0; + + /** Forces any buffered output to be written. */ + virtual void flush() = 0; + +private: + LUCENE_STATIC_CONSTANT(int32_t, COPY_BUFFER_SIZE = 16384); + uint8_t* copyBuffer; + +public: + /** Copy numBytes bytes from input to ourself. */ + void copyBytes(CL_NS(store)::IndexInput* input, int64_t numBytes); +}; + +/** Base implementation class for buffered {@link IndexOutput}. */ +class CLUCENE_EXPORT BufferedIndexOutput : public IndexOutput{ +public: + LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=16384); +private: + uint8_t* buffer; + int64_t bufferStart; // position in file of buffer + int32_t bufferPosition; // position in buffer + +public: + BufferedIndexOutput(); + virtual ~BufferedIndexOutput(); + + /** Writes a single byte. + * @see IndexInput#readByte() + */ + virtual void writeByte(const uint8_t b); + + /** Writes an array of bytes. + * @param b the bytes to write + * @param length the number of bytes to write + * @see IndexInput#readBytes(byte[],int32_t,int32_t) + */ + virtual void writeBytes(const uint8_t* b, const int32_t length); + + /** Closes this stream to further operations. */ + virtual void close(); + + /** Returns the current position in this file, where the next write will + * occur. + * @see #seek(long) + */ + int64_t getFilePointer() const; + + /** Sets current position in this file, where the next write will occur. + * @see #getFilePointer() + */ + virtual void seek(const int64_t pos); + + /** The number of bytes in the file. */ + virtual int64_t length() const = 0; + + /** Forces any buffered output to be written. */ + void flush(); + +protected: + /** Expert: implements buffer write. Writes bytes at the current position in + * the output. + * @param b the bytes to write + * @param len the number of bytes to write + */ + virtual void flushBuffer(const uint8_t* b, const int32_t len) = 0; +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/Lock.cpp clucene-core-2.3.3.4/src/core/CLucene/store/Lock.cpp --- clucene-core-0.9.21b/src/core/CLucene/store/Lock.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/Lock.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,174 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Lock.h" +#include "_Lock.h" +#include "CLucene/util/Misc.h" + +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + + +CL_NS_USE(util) +CL_NS_DEF(store) + + LuceneLock::~LuceneLock() + { + } + bool LuceneLock::obtain(int64_t lockWaitTimeout) { + bool locked = obtain(); + if ( lockWaitTimeout < 0 && lockWaitTimeout != LOCK_OBTAIN_WAIT_FOREVER ) { + _CLTHROWA(CL_ERR_IllegalArgument,"lockWaitTimeout should be LOCK_OBTAIN_WAIT_FOREVER or a non-negative number"); + } + + int64_t maxSleepCount = lockWaitTimeout / LOCK_POLL_INTERVAL; + int64_t sleepCount = 0; + + while (!locked) { + if ( lockWaitTimeout != LOCK_OBTAIN_WAIT_FOREVER && sleepCount++ == maxSleepCount ) { + _CLTHROWA(CL_ERR_IO,"Lock obtain timed out"); + } + _LUCENE_SLEEP(LOCK_POLL_INTERVAL); + locked = obtain(); + } + + return locked; + } + std::string NoLock::toString() + { + return "NoLock"; + } + bool NoLock::obtain() { return true; } + void NoLock::release() {} + bool NoLock::isLocked() { return false; } + + const char* NoLock::getClassName(){ + return "NoLock"; + } + const char* NoLock::getObjectName() const{ + return getClassName(); + } + + + + SingleInstanceLock::SingleInstanceLock( LocksType* locks, _LUCENE_THREADMUTEX* locks_LOCK, const char* lockName ) + { + this->locks = locks; +#ifndef _CL_DISABLE_MULTITHREADING + this->locks_LOCK = locks_LOCK; +#endif + this->lockName = lockName; + } + SingleInstanceLock::~SingleInstanceLock(){ + } + const char* SingleInstanceLock::getClassName(){ + return "SingleInstanceLock"; + } + const char* SingleInstanceLock::getObjectName() const{ + return getClassName(); + } + + bool SingleInstanceLock::obtain() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + return locks->insert( lockName ).second; + } + + void SingleInstanceLock::release() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + LocksType::iterator itr = locks->find( lockName ); + if ( itr != locks->end() ) { + locks->remove(itr, true); + } + } + + bool SingleInstanceLock::isLocked() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + return locks->find( lockName ) == locks->end(); + } + + string SingleInstanceLock::toString() + { + return string("SingleInstanceLock:") + lockName; + } + + + FSLock::FSLock( const char* _lockDir, const char* name, int filemode ) + { + if ( filemode <= 0 ) + this->filemode = 0644; //must do this or file will be created Read only + else + this->filemode = filemode; + + this->lockFile = _CL_NEWARRAY(char,CL_MAX_PATH); + this->lockDir = STRDUP_AtoA(_lockDir); + strcpy(lockFile,_lockDir); + strcat(lockFile,PATH_DELIMITERA); + strcat(lockFile,name); + } + + FSLock::~FSLock() + { + _CLDELETE_ARRAY( lockFile ); + _CLDELETE_LCaARRAY( lockDir ); + } + + const char* FSLock::getClassName(){ + return "FSLock"; + } + const char* FSLock::getObjectName() const{ + return getClassName(); + } + + bool FSLock::obtain() + { + if ( !Misc::dir_Exists(lockDir) ){ + if ( _mkdir(lockDir) == -1 ){ + char* err = _CL_NEWARRAY(char,34+strlen(lockDir)+1); //34: len of "Couldn't create lock directory: " + strcpy(err,"Couldn't create lock directory: "); + strcat(err,lockDir); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + int32_t r = _cl_open(lockFile, O_RDWR | O_CREAT | _O_RANDOM | O_EXCL, this->filemode); + if ( r < 0 ) { + return false; + } else { + _close(r); + return true; + } + } + + void FSLock::release() + { + _unlink( lockFile ); + } + + bool FSLock::isLocked() + { + return Misc::dir_Exists(lockFile); + } + + string FSLock::toString() + { + return string("SimpleFSLock@") + lockFile; + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/LockFactory.cpp clucene-core-2.3.3.4/src/core/CLucene/store/LockFactory.cpp --- clucene-core-0.9.21b/src/core/CLucene/store/LockFactory.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/LockFactory.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,159 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "LockFactory.h" +#include "_Lock.h" +#include "CLucene/util/Misc.h" + +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif + +CL_NS_USE(util) +CL_NS_DEF(store) + + +LockFactory::LockFactory() +{ +} + +LockFactory::~LockFactory() +{ +} + +void LockFactory::setLockPrefix( const char* lockPrefix ) +{ + if ( lockPrefix != NULL ) + this->lockPrefix = lockPrefix; + else + this->lockPrefix.clear(); +} + +const char* LockFactory::getLockPrefix() +{ + return lockPrefix.c_str(); +} + +SingleInstanceLockFactory::SingleInstanceLockFactory() +{ + locks = _CLNEW LocksType(); +} + +SingleInstanceLockFactory::~SingleInstanceLockFactory() +{ + _CLDELETE( locks ); +} + +LuceneLock* SingleInstanceLockFactory::makeLock( const char* lockName ) +{ +#ifdef _CL_DISABLE_MULTITHREADING + return _CLNEW SingleInstanceLock( locks, NULL, lockName ); +#else + return _CLNEW SingleInstanceLock( locks, &locks_LOCK, lockName ); +#endif +} + +void SingleInstanceLockFactory::clearLock( const char* lockName ) +{ + SCOPED_LOCK_MUTEX(locks_LOCK); + LocksType::iterator itr = locks->find( lockName ); + if ( itr != locks->end() ) { + locks->remove( itr ); + } +} + + +NoLockFactory* NoLockFactory::singleton = NULL; +NoLock* NoLockFactory::singletonLock = NULL; + +void NoLockFactory::_shutdown(){ + _CLDELETE(NoLockFactory::singleton); + _CLDELETE(NoLockFactory::singletonLock); +} + +NoLockFactory* NoLockFactory::getNoLockFactory() +{ + if ( singleton == NULL ) { + singleton = _CLNEW NoLockFactory(); + } + return singleton; +} + +LuceneLock* NoLockFactory::makeLock( const char* /*lockName*/ ) +{ + if ( singletonLock == NULL ) { + singletonLock = _CLNEW NoLock(); + } + return singletonLock; +} + +void NoLockFactory::clearLock( const char* /*lockName*/ ) +{ +} + + +FSLockFactory::FSLockFactory( const char* lockDir, int filemode ) +{ + setLockDir( lockDir ); + if ( filemode > 0 ) + this->filemode = filemode; + else + this->filemode = 0644; +} + +FSLockFactory::~FSLockFactory() +{ +} + +void FSLockFactory::setLockDir( const char* lockDir ) +{ + this->lockDir = lockDir; +} + +LuceneLock* FSLockFactory::makeLock( const char* lockName ) +{ + char name[CL_MAX_DIR]; + + if ( !lockPrefix.empty() ) { + cl_sprintf(name, CL_MAX_DIR, "%s-%s", lockPrefix.c_str(), lockName); + } else { + cl_strcpy(name,lockName,CL_MAX_DIR); + } + + return _CLNEW FSLock( lockDir.c_str(), name, this->filemode ); +} + +void FSLockFactory::clearLock( const char* lockName ) +{ + if ( Misc::dir_Exists( lockDir.c_str() )) { + char name[CL_MAX_DIR]; + char path[CL_MAX_DIR]; + struct cl_stat_t buf; + + if ( !lockPrefix.empty() ) { + STRCPY_AtoA(name,lockPrefix.c_str(),lockPrefix.length()+1); + strcat(name,"-"); + strcat(name,lockName); + } else { + strcpy(name,lockName); + } + + _snprintf(path,CL_MAX_DIR,"%s/%s",lockDir.c_str(),name); + + int32_t ret = fileStat(path,&buf); + if ( ret==0 && !(buf.st_mode & S_IFDIR) && _unlink( path ) == -1 ) { + _CLTHROWA(CL_ERR_IO, "Couldn't delete file" ); // TODO: make richer error + } + } +} + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/LockFactory.h clucene-core-2.3.3.4/src/core/CLucene/store/LockFactory.h --- clucene-core-0.9.21b/src/core/CLucene/store/LockFactory.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/LockFactory.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,77 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_LockFactory_ +#define _lucene_store_LockFactory_ + +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(store,NoLock) + +CL_NS_DEF(store) +class LocksType; + +class CLUCENE_EXPORT LockFactory: LUCENE_BASE { +protected: + std::string lockPrefix; +public: + + LockFactory(); + virtual ~LockFactory(); + + void setLockPrefix( const char* lockPrefix ); + const char* getLockPrefix(); + + virtual LuceneLock* makeLock( const char* lockName )=0; + virtual void clearLock( const char* lockName )=0; +}; + +class CLUCENE_EXPORT SingleInstanceLockFactory: public LockFactory { +private: + LocksType* locks; + DEFINE_MUTEX(locks_LOCK) +public: + SingleInstanceLockFactory(); + ~SingleInstanceLockFactory(); + + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); +}; + +class CLUCENE_EXPORT NoLockFactory: public LockFactory { +public: + static NoLockFactory* singleton; + static NoLock* singletonLock; + + static NoLockFactory* getNoLockFactory(); + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); + + /** called when lucene_shutdown is called */ + static CLUCENE_LOCAL void _shutdown(); +}; + +class CLUCENE_EXPORT FSLockFactory: public LockFactory { +private: + std::string lockDir; + int filemode; +public: + /** Constructs a FS Lock factory. The default file mode is user writable */ + FSLockFactory( const char* lockDir=NULL, int filemode=-1 ); + ~FSLockFactory(); + + void setLockDir( const char* lockDir ); + + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); + + static const char* getClassName(); + const char* getObjectName(); +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/_Lock.h clucene-core-2.3.3.4/src/core/CLucene/store/_Lock.h --- clucene-core-0.9.21b/src/core/CLucene/store/_Lock.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/_Lock.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,134 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_intlLock_ +#define _lucene_store_intlLock_ + +#include "Lock.h" +#include + +CL_NS_DEF(store) + + +class LocksType: public CL_NS(util)::CLHashSet +{ +public: + LocksType() + { + setDoDelete(false); + } + virtual ~LocksType(){ + } +}; + + class SingleInstanceLock: public LuceneLock { + private: + const char* lockName; + LocksType* locks; + DEFINE_MUTEX(*locks_LOCK) + + public: + SingleInstanceLock( LocksType* locks, _LUCENE_THREADMUTEX* locks_LOCK, const char* lockName ); + virtual ~SingleInstanceLock(); + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + + + class NoLock: public LuceneLock { + public: + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + class FSLock: public LuceneLock { + private: + char* lockFile; + char* lockDir; + int filemode; + public: + FSLock( const char* _lockDir, const char* name, int filemode = -1 ); + ~FSLock(); + + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + // Utility class for executing code with exclusive access. + template + class LuceneLockWith { + private: + LuceneLock* lock; + int64_t lockWaitTimeout; + + protected: + // Code to execute with exclusive access. + virtual T doBody() = 0; + + // Constructs an executor that will grab the named lock. + public: + /** Constructs an executor that will grab the named lock. + * Defaults lockWaitTimeout to LUCENE_COMMIT_LOCK_TIMEOUT. + * @deprecated Kept only to avoid breaking existing code. + */ + LuceneLockWith(LuceneLock* lock, int64_t lockWaitTimeout) { + this->lock = lock; + this->lockWaitTimeout = lockWaitTimeout; + } + virtual ~LuceneLockWith(){ + } + + /** Calls {@link #doBody} while lock is obtained. Blocks if lock + * cannot be obtained immediately. Retries to obtain lock once per second + * until it is obtained, or until it has tried ten times. Lock is released when + * {@link #doBody} exits. */ + T runAndReturn() { + bool locked = false; + T ret = NULL; + try { + locked = lock->obtain(lockWaitTimeout); + ret = doBody(); + }_CLFINALLY( + if (locked) + lock->release(); + ); + return ret; + } + + /** @see runAndReturn + * Same as runAndReturn, except doesn't return any value. + * The only difference is that no void values are used + */ + void run() { + bool locked = false; + try { + locked = lock->obtain(lockWaitTimeout); + doBody(); + }_CLFINALLY( + if (locked) + lock->release(); + ); + } + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/Lock.h clucene-core-2.3.3.4/src/core/CLucene/store/Lock.h --- clucene-core-0.9.21b/src/core/CLucene/store/Lock.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/Lock.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,50 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_Lock_ +#define _lucene_store_Lock_ + +#include +#include "CLucene/util/Equators.h" + +CL_NS_DEF(store) + class LocksType; + + class CLUCENE_EXPORT LuceneLock: public CL_NS(util)::NamedObject{ + public: + LUCENE_STATIC_CONSTANT(int64_t, LOCK_POLL_INTERVAL = 1000); + LUCENE_STATIC_CONSTANT(int64_t, LOCK_OBTAIN_WAIT_FOREVER = -1); + + /** Attempts to obtain exclusive access and immediately return + * upon success or failure. + * @return true iff exclusive access is obtained + */ + virtual bool obtain() = 0; + + /** Attempts to obtain an exclusive lock within amount + * of time given. Currently polls once per second until + * lockWaitTimeout is passed. + * @param lockWaitTimeout length of time to wait in ms + * @return true if lock was obtained + * @throws IOException if lock wait times out or obtain() throws an IOException + */ + bool obtain(int64_t lockWaitTimeout); + + // Release exclusive access. + virtual void release() = 0; + + /** Returns true if the resource is currently locked. Note that one must + * still call {@link #obtain()} before using the resource. */ + virtual bool isLocked() = 0; + + virtual ~LuceneLock(); + + virtual std::string toString() = 0; + }; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/_MMapIndexInput.h clucene-core-2.3.3.4/src/core/CLucene/store/_MMapIndexInput.h --- clucene-core-0.9.21b/src/core/CLucene/store/_MMapIndexInput.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/_MMapIndexInput.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_MMap_ +#define _lucene_store_MMap_ + +#include "IndexInput.h" + +CL_NS_DEF(store) + +class MMapIndexInput : public IndexInput { + class Internal; + Internal* _internal; + + MMapIndexInput(const MMapIndexInput& clone); + MMapIndexInput(Internal* _internal); +public: + static bool open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize); + + ~MMapIndexInput(); + IndexInput* clone() const; + + inline uint8_t readByte(); + int32_t readVInt(); + void readBytes(uint8_t* b, const int32_t len); + void close(); + int64_t getFilePointer() const; + void seek(const int64_t pos); + int64_t length() const; + + const char* getObjectName() const{ return MMapIndexInput::getClassName(); } + static const char* getClassName(){ return "MMapIndexInput"; } + const char* getDirectoryType() const{ return "MMapDirectory"; } +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/MMapInput.cpp clucene-core-2.3.3.4/src/core/CLucene/store/MMapInput.cpp --- clucene-core-0.9.21b/src/core/CLucene/store/MMapInput.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/MMapInput.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,298 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "FSDirectory.h" +#include "_MMapIndexInput.h" +#include "CLucene/util/Misc.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#ifdef _CL_HAVE_SYS_MMAN_H + #include +#endif +#ifdef _CL_HAVE_WINERROR_H + #include +#endif +#include + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + typedef int HANDLE; + + #define GENERIC_READ (0x80000000L) + #define FILE_SHARE_READ 0x00000001 + #define OPEN_EXISTING 3 + #define PAGE_READONLY 0x02 + #define SECTION_MAP_READ 0x0004 + #define FILE_MAP_READ SECTION_MAP_READ + + typedef struct _SECURITY_ATTRIBUTES + { + _cl_dword_t nLength; + void* lpSecurityDescriptor; + bool bInheritHandle; + } SECURITY_ATTRIBUTES; + + extern "C" __declspec(dllimport) _cl_dword_t __stdcall GetFileSize( HANDLE hFile, _cl_dword_t* lpFileSizeHigh ); + + extern "C" __declspec(dllimport) bool __stdcall UnmapViewOfFile( void* lpBaseAddress ); + + extern "C" __declspec(dllimport) bool __stdcall CloseHandle( HANDLE hObject ); + extern "C" __declspec(dllimport) HANDLE __stdcall CreateFileA( + const char* lpFileName, + _cl_dword_t dwDesiredAccess, + _cl_dword_t dwShareMode, + SECURITY_ATTRIBUTES* lpSecurityAttributes, + _cl_dword_t dwCreationDisposition, + _cl_dword_t dwFlagsAndAttributes, + HANDLE hTemplateFile + ); + extern "C" __declspec(dllimport) HANDLE __stdcall CreateFileMappingA( + HANDLE hFile, + SECURITY_ATTRIBUTES* lpFileMappingAttributes, + _cl_dword_t flProtect, + _cl_dword_t dwMaximumSizeHigh, + _cl_dword_t dwMaximumSizeLow, + const char* lpName + ); + extern "C" __declspec(dllimport) void* __stdcall MapViewOfFile( + HANDLE hFileMappingObject, + _cl_dword_t dwDesiredAccess, + _cl_dword_t dwFileOffsetHigh, + _cl_dword_t dwFileOffsetLow, + _cl_dword_t dwNumberOfBytesToMap + ); + extern "C" __declspec(dllimport) _cl_dword_t __stdcall GetLastError(); +#endif + + +CL_NS_DEF(store) +CL_NS_USE(util) + + class MMapIndexInput::Internal: LUCENE_BASE{ + public: + uint8_t* data; + int64_t pos; +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + HANDLE mmaphandle; + HANDLE fhandle; +#elif defined(_CL_HAVE_FUNCTION_MMAP) + int fhandle; +#else + #error no mmap implementation set +#endif + bool isClone; + int64_t _length; + + Internal(): + data(NULL), + pos(0), + isClone(false), + _length(0) + { + } + ~Internal(){ + } + }; + + MMapIndexInput::MMapIndexInput(Internal* __internal): + _internal(__internal) + { + } + + bool MMapIndexInput::open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize ) { + + //Func - Constructor. + // Opens the file named path + //Pre - path != NULL + //Post - if the file could not be opened an exception is thrown. + + CND_PRECONDITION(path != NULL, "path is NULL"); + + Internal* _internal = _CLNEW Internal; + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + _internal->mmaphandle = NULL; + _internal->fhandle = CreateFileA(path,GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0); + + //Check if a valid fhandle was retrieved + if (_internal->fhandle < 0){ + _cl_dword_t err = GetLastError(); + if ( err == ERROR_FILE_NOT_FOUND ) + error.set(CL_ERR_IO, "File does not exist"); + else if ( err == ERROR_ACCESS_DENIED ) + error.set(CL_ERR_IO, "File Access denied"); + else if ( err == ERROR_TOO_MANY_OPEN_FILES ) + error.set(CL_ERR_IO, "Too many open files"); + else + error.set(CL_ERR_IO, "Could not open file"); + } + + _cl_dword_t dummy=0; + _internal->_length = GetFileSize(_internal->fhandle, &dummy); + + if ( _internal->_length > 0 ){ + _internal->mmaphandle = CreateFileMappingA(_internal->fhandle,NULL,PAGE_READONLY,0,0,NULL); + if ( _internal->mmaphandle != NULL ){ + void* address = MapViewOfFile(_internal->mmaphandle,FILE_MAP_READ,0,0,0); + if ( address != NULL ){ + _internal->data = (uint8_t*)address; + ret = _CLNEW MMapIndexInput(_internal); + return true; + } + } + + //failure: + int errnum = GetLastError(); + + CloseHandle(_internal->mmaphandle); + + char* lpMsgBuf=strerror(errnum); + size_t len = strlen(lpMsgBuf)+80; + char* errstr = _CL_NEWARRAY(char, len); + cl_sprintf(errstr, len, "MMapIndexInput::MMapIndexInput failed with error %d: %s", errnum, lpMsgBuf); + + error.set(CL_ERR_IO, errstr); + _CLDELETE_CaARRAY(errstr); + } + +#else //_CL_HAVE_FUNCTION_MAPVIEWOFFILE + _internal->fhandle = ::_cl_open (path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD); + if (_internal->fhandle < 0){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + // stat it + struct stat sb; + if (::fstat (_internal->fhandle, &sb)){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + // get length from stat + _internal->_length = sb.st_size; + + // mmap the file + void* address = ::mmap(0, _internal->_length, PROT_READ, MAP_SHARED, _internal->fhandle, 0); + if (address == MAP_FAILED){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + _internal->data = (uint8_t*)address; + ret = _CLNEW MMapIndexInput(_internal); + return true; + } + } + } +#endif + + _CLDELETE(_internal); + return false; + } + + MMapIndexInput::MMapIndexInput(const MMapIndexInput& clone): IndexInput(clone){ + //Func - Constructor + // Uses clone for its initialization + //Pre - clone is a valide instance of FSIndexInput + //Post - The instance has been created and initialized by clone + _internal = _CLNEW Internal; + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + _internal->mmaphandle = NULL; + _internal->fhandle = NULL; +#endif + + _internal->data = clone._internal->data; + _internal->pos = clone._internal->pos; + + //clone the file length + _internal->_length = clone._internal->_length; + //Keep in mind that this instance is a clone + _internal->isClone = true; + } + + uint8_t MMapIndexInput::readByte(){ + return *(_internal->data+(_internal->pos++)); + } + + void MMapIndexInput::readBytes(uint8_t* b, const int32_t len){ + memcpy(b, _internal->data+_internal->pos, len); + _internal->pos+=len; + } + int32_t MMapIndexInput::readVInt(){ + uint8_t b = *(_internal->data+(_internal->pos++)); + int32_t i = b & 0x7F; + for (int shift = 7; (b & 0x80) != 0; shift += 7) { + b = *(_internal->data+(_internal->pos++)); + i |= (b & 0x7F) << shift; + } + return i; + } + int64_t MMapIndexInput::getFilePointer() const{ + return _internal->pos; + } + void MMapIndexInput::seek(const int64_t pos){ + this->_internal->pos=pos; + } + int64_t MMapIndexInput::length() const{ return _internal->_length; } + + MMapIndexInput::~MMapIndexInput(){ + //Func - Destructor + //Pre - True + //Post - The file for which this instance is responsible has been closed. + // The instance has been destroyed + + close(); + _CLDELETE(_internal); + } + + IndexInput* MMapIndexInput::clone() const + { + return _CLNEW MMapIndexInput(*this); + } + void MMapIndexInput::close() { + if ( !_internal->isClone ){ +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + if ( _internal->data != NULL ){ + if ( ! UnmapViewOfFile(_internal->data) ){ + CND_PRECONDITION( false, "UnmapViewOfFile(data) failed"); //todo: change to rich error + } + } + + if ( _internal->mmaphandle != NULL ){ + if ( ! CloseHandle(_internal->mmaphandle) ){ + CND_PRECONDITION( false, "CloseHandle(mmaphandle) failed"); + } + } + if ( _internal->fhandle != NULL ){ + if ( !CloseHandle(_internal->fhandle) ){ + CND_PRECONDITION( false, "CloseHandle(fhandle) failed"); + } + } + _internal->mmaphandle = NULL; + _internal->fhandle = NULL; +#else + if ( _internal->data != NULL ) + ::munmap(_internal->data, _internal->_length); + if ( _internal->fhandle > 0 ) + ::close(_internal->fhandle); + _internal->fhandle = 0; +#endif + } + _internal->data = NULL; + _internal->pos = 0; + } + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/RAMDirectory.cpp clucene-core-2.3.3.4/src/core/CLucene/store/RAMDirectory.cpp --- clucene-core-0.9.21b/src/core/CLucene/store/RAMDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/RAMDirectory.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,570 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "RAMDirectory.h" +#include "_RAMDirectory.h" +#include "Lock.h" +#include "LockFactory.h" +#include "Directory.h" +#include "FSDirectory.h" +#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/VoidMap.h" +#include "CLucene/util/Misc.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(store) + + + // ***** + // Lock acquisition sequence: RAMDirectory, then RAMFile + // ***** + + class RAMLock: public LuceneLock{ + private: + RAMDirectory* directory; + char* fname; + public: + RAMLock(const char* name, RAMDirectory* dir); + virtual ~RAMLock(); + bool obtain(); + void release(); + bool isLocked(); + virtual std::string toString(); + }; + + + + RAMFile::RAMFile( RAMDirectory* _directory ) + { + length = 0; + lastModified = Misc::currentTimeMillis(); + this->directory = _directory; + sizeInBytes = 0; + } + + RAMFile::~RAMFile(){ + } + + int64_t RAMFile::getLength() + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return length; + } + + void RAMFile::setLength( int64_t length ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + this->length = length; + } + + uint64_t RAMFile::getLastModified() + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return lastModified; + } + + void RAMFile::setLastModified( const uint64_t lastModified ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + this->lastModified = lastModified; + } + + uint8_t* RAMFile::addBuffer( const int32_t size ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + uint8_t* buffer = newBuffer(size); + RAMFileBuffer* rfb = _CLNEW RAMFileBuffer(buffer, size); + if ( directory != NULL ) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK); + buffers.push_back( rfb ); + directory->sizeInBytes += size; + sizeInBytes += size; + } else { + buffers.push_back(rfb); + } + return buffer; + } + + uint8_t* RAMFile::getBuffer( const int32_t index ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return buffers[index]->_buffer; + } + + int32_t RAMFile::numBuffers() const + { + return buffers.size(); + } + + uint8_t* RAMFile::newBuffer( const int32_t size ) + { + return _CL_NEWARRAY( uint8_t, size ); + } + + int64_t RAMFile::getSizeInBytes() const + { + if ( directory != NULL ) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK); + return sizeInBytes; + } + return 0; + } + + + RAMOutputStream::~RAMOutputStream(){ + if ( deleteFile ){ + _CLDELETE(file); + }else{ + file = NULL; + } + } + RAMOutputStream::RAMOutputStream(RAMFile* f): + file(f), + deleteFile(false), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + } + + RAMOutputStream::RAMOutputStream(): + file(_CLNEW RAMFile), + deleteFile(true), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + } + + void RAMOutputStream::writeTo(IndexOutput* out){ + flush(); + const int64_t end = file->getLength(); + int64_t pos = 0; + int32_t p = 0; + while (pos < end) { + int32_t length = BUFFER_SIZE; + int64_t nextPos = pos + length; + if (nextPos > end) { // at the last buffer + length = (int32_t)(end - pos); + } + out->writeBytes(file->getBuffer(p++), length); + pos = nextPos; + } + } + + void RAMOutputStream::reset(){ + seek((int64_t)0); + file->setLength((int64_t)0); + } + + void RAMOutputStream::close() { + flush(); + } + + /** Random-at methods */ + void RAMOutputStream::seek( const int64_t pos ) { + // set the file length in case we seek back + // and flush() has not been called yet + setFileLength(); + if ( pos < bufferStart || pos >= bufferStart + bufferLength ) { + currentBufferIndex = (int32_t)(pos / BUFFER_SIZE); + switchCurrentBuffer(); + } + + bufferPosition = (int32_t)( pos % BUFFER_SIZE ); + } + + int64_t RAMOutputStream::length() const { + return file->getLength(); + } + + void RAMOutputStream::writeByte( const uint8_t b ) { + if ( bufferPosition == bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + currentBuffer[bufferPosition++] = b; + } + + void RAMOutputStream::writeBytes( const uint8_t* b, const int32_t len ) { + int32_t srcOffset = 0; + + while ( srcOffset != len ) { + if ( bufferPosition == bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + + int32_t remainInSrcBuffer = len - srcOffset; + int32_t bytesInBuffer = bufferLength - bufferPosition; + int32_t bytesToCopy = bytesInBuffer >= remainInSrcBuffer ? remainInSrcBuffer : bytesInBuffer; + + memcpy( currentBuffer+bufferPosition, b+srcOffset, bytesToCopy * sizeof(uint8_t) ); + + srcOffset += bytesToCopy; + bufferPosition += bytesToCopy; + } + } + + void RAMOutputStream::switchCurrentBuffer() { + + if ( currentBufferIndex == file->numBuffers() ) { + currentBuffer = file->addBuffer( BUFFER_SIZE ); + bufferLength = BUFFER_SIZE; + } else { + currentBuffer = file->getBuffer( currentBufferIndex ); + bufferLength = file->getBufferLen(currentBufferIndex); + } + assert(bufferLength >=0);// + + bufferPosition = 0; + bufferStart = (int64_t)BUFFER_SIZE * (int64_t)currentBufferIndex; + } + + + + void RAMOutputStream::setFileLength() { + int64_t pointer = bufferStart + bufferPosition; + if ( pointer > file->getLength() ) { + file->setLength( pointer ); + } + } + + void RAMOutputStream::flush() { + file->setLastModified( Misc::currentTimeMillis() ); + setFileLength(); + } + + int64_t RAMOutputStream::getFilePointer() const { + return currentBufferIndex < 0 ? 0 : bufferStart + bufferPosition; + } + + + RAMInputStream::RAMInputStream(RAMFile* f): + file(f), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + _length = f->getLength(); + + if ( _length/BUFFER_SIZE >= 0x7FFFFFFFL ) { + // TODO: throw exception + } + } + + RAMInputStream::RAMInputStream(const RAMInputStream& other): + IndexInput(other) + { + file = other.file; + _length = other._length; + currentBufferIndex = other.currentBufferIndex; + currentBuffer = other.currentBuffer; + bufferPosition = other.bufferPosition; + bufferStart = other.bufferStart; + bufferLength = other.bufferLength; + } + + RAMInputStream::~RAMInputStream(){ + RAMInputStream::close(); + } + + IndexInput* RAMInputStream::clone() const + { + return _CLNEW RAMInputStream(*this); + } + + int64_t RAMInputStream::length() const { + return _length; + } + + const char* RAMInputStream::getDirectoryType() const{ + return RAMDirectory::getClassName(); + } + const char* RAMIndexInput::getObjectName() const{ return getClassName(); } + const char* RAMIndexInput::getClassName(){ return "RAMIndexInput"; } + + uint8_t RAMInputStream::readByte() + { + if ( bufferPosition >= bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + return currentBuffer[bufferPosition++]; + } + + void RAMInputStream::readBytes( uint8_t* _dest, const int32_t _len ) { + + uint8_t* dest = _dest; + int32_t len = _len; + + while ( len > 0 ) { + if ( bufferPosition >= bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + + int32_t remainInBuffer = bufferLength - bufferPosition; + int32_t bytesToCopy = len < remainInBuffer ? len : remainInBuffer; + memcpy( dest, currentBuffer+bufferPosition, bytesToCopy * sizeof(uint8_t) ); + + dest += bytesToCopy; + len -= bytesToCopy; + bufferPosition += bytesToCopy; + } + + } + + int64_t RAMInputStream::getFilePointer() const { + return currentBufferIndex < 0 ? 0 : bufferStart + bufferPosition; + } + + void RAMInputStream::seek( const int64_t pos ) { + if ( currentBuffer == NULL || pos < bufferStart || pos >= bufferStart + BUFFER_SIZE ) { + currentBufferIndex = (int32_t)( pos / BUFFER_SIZE ); + switchCurrentBuffer(); + } + bufferPosition = (int32_t)(pos % BUFFER_SIZE); + } + + void RAMInputStream::close() { + } + + void RAMInputStream::switchCurrentBuffer() { + if ( currentBufferIndex >= file->numBuffers() ) { + // end of file reached, no more buffers left + _CLTHROWA(CL_ERR_IO, "Read past EOF"); + } else { + currentBuffer = file->getBuffer( currentBufferIndex ); + bufferPosition = 0; + bufferStart = (int64_t)BUFFER_SIZE * (int64_t)currentBufferIndex; + int64_t bufLen = _length - bufferStart; + bufferLength = bufLen > BUFFER_SIZE ? BUFFER_SIZE : static_cast(bufLen); + } + assert (bufferLength >=0); + } + + + + + bool RAMDirectory::list(vector* names) const{ + SCOPED_LOCK_MUTEX(files_mutex); + + FileMap::const_iterator itr = files->begin(); + while (itr != files->end()){ + names->push_back( string(itr->first) ); + ++itr; + } + return true; + } + + RAMDirectory::RAMDirectory(): + Directory(),files(_CLNEW FileMap(true,true)) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + } + + RAMDirectory::~RAMDirectory(){ + //todo: should call close directory? + _CLDELETE( lockFactory ); + _CLDELETE( files ); + } + + void RAMDirectory::_copyFromDir(Directory* dir, bool closeDir) + { + vector names; + dir->list(&names); + uint8_t buf[CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE]; + + for (size_t i=0;iopenInput(names[i].c_str()); + // and copy to ram disk + //todo: this could be a problem when copying from big indexes... + int64_t len = is->length(); + int64_t readCount = 0; + while (readCount < len) { + int32_t toRead = (int32_t)(readCount + CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE > len ? len - readCount : CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); + is->readBytes(buf, toRead); + os->writeBytes(buf, toRead); + readCount += toRead; + } + + // graceful cleanup + is->close(); + _CLDELETE(is); + os->close(); + _CLDELETE(os); + } + if (closeDir) + dir->close(); + } + RAMDirectory::RAMDirectory(Directory* dir): + Directory(),files( _CLNEW FileMap(true,true) ) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + _copyFromDir(dir,false); + } + + RAMDirectory::RAMDirectory(const char* dir): + Directory(),files( _CLNEW FileMap(true,true) ) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + Directory* fsdir = FSDirectory::getDirectory(dir); + try{ + _copyFromDir(fsdir,false); + }_CLFINALLY( + fsdir->close(); + _CLDECDELETE(fsdir); + ); + } + + bool RAMDirectory::fileExists(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + return files->exists((char*)name); + } + + int64_t RAMDirectory::fileModified(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* f = files->get((char*)name); + return f->getLastModified(); + } + + int64_t RAMDirectory::fileLength(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* f = files->get((char*)name); + return f->getLength(); + } + + + bool RAMDirectory::openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t /*bufferSize*/) { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* file = files->get((char*)name); + if (file == NULL) { + error.set(CL_ERR_IO, "[RAMDirectory::open] The requested file does not exist."); + return false; + } + ret = _CLNEW RAMInputStream( file ); + return true; + } + + void RAMDirectory::close(){ + SCOPED_LOCK_MUTEX(files_mutex); + files->clear(); + _CLDELETE(files); + } + + bool RAMDirectory::doDeleteFile(const char* name) { + SCOPED_LOCK_MUTEX(files_mutex); + FileMap::iterator itr = files->find((char*)name); + if (itr != files->end()) { + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= itr->second->sizeInBytes; + files->removeitr(itr); + return true; + } else { + return false; + } + } + + void RAMDirectory::renameFile(const char* from, const char* to) { + SCOPED_LOCK_MUTEX(files_mutex); + FileMap::iterator itr = files->find((char*)from); + + /* DSR:CL_BUG_LEAK: + ** If a file named $to already existed, its old value was leaked. + ** My inclination would be to prevent this implicit deletion with an + ** exception, but it happens routinely in CLucene's internals (e.g., during + ** IndexWriter.addIndexes with the file named 'segments'). */ + if (files->exists((char*)to)) { + FileMap::iterator itr1 = files->find((char*)to); + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= itr1->second->sizeInBytes; + files->removeitr( itr1 ); + } + if ( itr == files->end() ){ + char tmp[1024]; + _snprintf(tmp,1024,"cannot rename %s, file does not exist",from); + _CLTHROWT(CL_ERR_IO,tmp); + } + CND_PRECONDITION(itr != files->end(), "itr==files->end()") + RAMFile* file = itr->second; + files->removeitr(itr,false,true); + files->put(STRDUP_AtoA(to), file); + } + + + void RAMDirectory::touchFile(const char* name) { + RAMFile* file = NULL; + { + SCOPED_LOCK_MUTEX(files_mutex); + file = files->get((char*)name); + } + const uint64_t ts1 = file->getLastModified(); + uint64_t ts2 = Misc::currentTimeMillis(); + + //make sure that the time has actually changed + while ( ts1==ts2 ) { + _LUCENE_SLEEP(1); + ts2 = Misc::currentTimeMillis(); + }; + + file->setLastModified(ts2); + } + + IndexOutput* RAMDirectory::createOutput(const char* name) { + /* Check the $files VoidMap to see if there was a previous file named + ** $name. If so, delete the old RAMFile object, but reuse the existing + ** char buffer ($n) that holds the filename. If not, duplicate the + ** supplied filename buffer ($name) and pass ownership of that memory ($n) + ** to $files. */ + + SCOPED_LOCK_MUTEX(files_mutex); + + // get the actual pointer to the output name + char* n = NULL; + FileMap::const_iterator itr = files->find(const_cast(name)); + if ( itr!=files->end() ) { + n = itr->first; + RAMFile* rf = itr->second; + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= rf->sizeInBytes; + _CLDELETE(rf); + } else { + n = STRDUP_AtoA(name); + } + + RAMFile* file = _CLNEW RAMFile(); + (*files)[n] = file; + + return _CLNEW RAMOutputStream(file); + } + + std::string RAMDirectory::toString() const{ + return "RAMDirectory"; + } + + const char* RAMDirectory::getClassName(){ + return "RAMDirectory"; + } + const char* RAMDirectory::getObjectName() const{ + return getClassName(); + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/_RAMDirectory.h clucene-core-2.3.3.4/src/core/CLucene/store/_RAMDirectory.h --- clucene-core-0.9.21b/src/core/CLucene/store/_RAMDirectory.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/_RAMDirectory.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_intl_RAMDirectory_ +#define _lucene_store_intl_RAMDirectory_ + + +#include "IndexInput.h" +#include "IndexOutput.h" +#include "RAMDirectory.h" +//#include "Lock.h" +//#include "Directory.h" +//#include "CLucene/util/VoidMap.h" +//#include "CLucene/util/Arrays.h" + +CL_NS_DEF(store) + + class CLUCENE_EXPORT RAMFile:LUCENE_BASE { + private: + struct RAMFileBuffer:LUCENE_BASE { + uint8_t* _buffer; size_t _len; + RAMFileBuffer(uint8_t* buf = NULL, size_t len=0) : _buffer(buf), _len(len) {}; + virtual ~RAMFileBuffer() { _CLDELETE_LARRAY(_buffer); }; + }; + + + CL_NS(util)::CLVector > buffers; + + + int64_t length; + int64_t sizeInBytes; // Only maintained if in a directory; updates synchronized on directory + + // This is publicly modifiable via Directory::touchFile(), so direct access not supported + uint64_t lastModified; + + protected: + RAMDirectory* directory; + + public: + DEFINE_MUTEX(THIS_LOCK) + + // File used as buffer, in no RAMDirectory + RAMFile( RAMDirectory* directory=NULL ); + virtual ~RAMFile(); + + // For non-stream access from thread that might be concurrent with writing + int64_t getLength(); + void setLength( const int64_t _length ); + + // For non-stream access from thread that might be concurrent with writing + uint64_t getLastModified(); + void setLastModified( const uint64_t lastModified ); + + uint8_t* addBuffer( const int32_t size ); + uint8_t* getBuffer( const int32_t index ); + size_t getBufferLen(const int32_t index) const { return buffers[index]->_len; } + int32_t numBuffers() const; + uint8_t* newBuffer( const int32_t size ); + + int64_t getSizeInBytes() const; + + friend class RAMDirectory; + }; + + class CLUCENE_EXPORT RAMOutputStream: public IndexOutput { + protected: + RAMFile* file; + bool deleteFile; + + uint8_t* currentBuffer; + int32_t currentBufferIndex; + + int32_t bufferPosition; + int64_t bufferStart; + int32_t bufferLength; + + void switchCurrentBuffer(); + void setFileLength(); + + public: + LUCENE_STATIC_CONSTANT(int32_t,BUFFER_SIZE=1024); + + RAMOutputStream(RAMFile* f); + RAMOutputStream(); + /** Construct an empty output buffer. */ + virtual ~RAMOutputStream(); + + virtual void close(); + + int64_t length() const; + /** Resets this to an empty buffer. */ + void reset(); + /** Copy the current contents of this buffer to the named output. */ + void writeTo(IndexOutput* output); + + void writeByte(const uint8_t b); + void writeBytes(const uint8_t* b, const int32_t len); + + void seek(const int64_t pos); + + void flush(); + + int64_t getFilePointer() const; + + const char* getObjectName(); + static const char* getClassName(); + + }; + typedef RAMOutputStream RAMIndexOutput; //deprecated + + class CLUCENE_EXPORT RAMInputStream:public IndexInput { + private: + RAMFile* file; + int64_t _length; + + uint8_t* currentBuffer; + int32_t currentBufferIndex; + + int32_t bufferPosition; + int64_t bufferStart; + int32_t bufferLength; + + void switchCurrentBuffer(); + + protected: + /** IndexInput methods */ + RAMInputStream(const RAMInputStream& clone); + + public: + LUCENE_STATIC_CONSTANT(int32_t,BUFFER_SIZE=RAMOutputStream::BUFFER_SIZE); + + RAMInputStream(RAMFile* f); + virtual ~RAMInputStream(); + IndexInput* clone() const; + + void close(); + int64_t length() const; + + uint8_t readByte(); + void readBytes( uint8_t* dest, const int32_t len ); + + int64_t getFilePointer() const; + + void seek(const int64_t pos); + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + }; + typedef RAMInputStream RAMIndexInput; //deprecated + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/store/RAMDirectory.h clucene-core-2.3.3.4/src/core/CLucene/store/RAMDirectory.h --- clucene-core-0.9.21b/src/core/CLucene/store/RAMDirectory.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/store/RAMDirectory.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_RAMDirectory_ +#define _lucene_store_RAMDirectory_ + + +#include "CLucene/util/VoidMap.h" +#include "Directory.h" +CL_CLASS_DEF(store,RAMFile) + +CL_NS_DEF(store) + + /** + * A memory-resident {@link Directory} implementation. Locking + * implementation is by default the {@link SingleInstanceLockFactory} + * but can be changed with {@link #setLockFactory}. + * + */ + class CLUCENE_EXPORT RAMDirectory:public Directory{ + protected: + typedef CL_NS(util)::CLHashMap > FileMap; + /// Removes an existing file in the directory. + virtual bool doDeleteFile(const char* name); + + /** + * Creates a new RAMDirectory instance from a different + * Directory implementation. This can be used to load + * a disk-based index into memory. + *

+ * This should be used only with indices that can fit into memory. + * + * @param dir a Directory value + * @exception IOException if an error occurs + */ + void _copyFromDir(Directory* dir, bool closeDir); + FileMap* files; // unlike the java Hashtable, FileMap is not synchronized, and all access must be protected by a lock + public: + int64_t sizeInBytes; //todo + + DEFINE_MUTABLE_MUTEX(files_mutex) // mutable: const methods must also be able to synchronize properly + + /// Returns a null terminated array of strings, one for each file in the directory. + bool list(std::vector* names) const; + + /** Constructs an empty {@link Directory}. */ + RAMDirectory(); + + ///Destructor - only call this if you are sure the directory + ///is not being used anymore. Otherwise use the ref-counting + ///facilities of dir->close + virtual ~RAMDirectory(); + + RAMDirectory(Directory* dir); + + /** + * Creates a new RAMDirectory instance from the {@link FSDirectory}. + * + * @param dir a String specifying the full index directory path + */ + RAMDirectory(const char* dir); + + /// Returns true iff the named file exists in this directory. + bool fileExists(const char* name) const; + + /// Returns the time the named file was last modified. + int64_t fileModified(const char* name) const; + + /// Returns the length in bytes of a file in the directory. + int64_t fileLength(const char* name) const; + + /// Removes an existing file in the directory. + virtual void renameFile(const char* from, const char* to); + + /** Set the modified time of an existing file to now. */ + void touchFile(const char* name); + + /// Creates a new, empty file in the directory with the given name. + /// Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* name); + + /// Returns a stream reading an existing file. + bool openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t bufferSize = -1); + + virtual void close(); + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/Array.h clucene-core-2.3.3.4/src/core/CLucene/util/Array.h --- clucene-core-0.9.21b/src/core/CLucene/util/Array.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/Array.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,338 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_Array_ +#define _lucene_util_Array_ + +#include +#include + +CL_NS_DEF(util) + +template +class CLUCENE_INLINE_EXPORT ArrayBase: LUCENE_BASE{ +public: + T* values; + size_t length; + + /** + * Delete's the values in the array. + * This won't do anything if deleteArray or takeArray is called first. + * This is overridden in various implementations to provide the appropriate deletor function. + */ + virtual void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++){ + deleteValue(this->values[i]); + } + } + /** + * Delete's a single value. Used when resizing... + */ + virtual void deleteValue(T) = 0; + + /** + * Delete's the values in the array and then calls deleteArray(). + * This won't do anything if deleteArray or takeArray is called first. + * This is overridden in various implementations to provide the appropriate deletor function. + */ + void deleteAll(){ + this->deleteValues(); + this->deleteArray(); + } + + /** + * Deletes the array holding the values. Do this if you want to take + * ownership of the array's values, but not the array containing the values. + */ + void deleteArray(){ + free(this->values); + this->values = NULL; + } + /** + * Empties the array. Do this if you want to take ownership of the array + * and the array's values. + */ + T* takeArray(){ + T* ret = values; + values = NULL; + return ret; + } + + ArrayBase(const size_t initialLength = 0) + : values(NULL), length(initialLength) + { + if (initialLength > 0) + { + this->values = (T*)malloc(sizeof(T)*length); + memset(this->values,0,sizeof(T)*length); + } + } + ArrayBase(T* _values, const size_t _length) + : values(_values), length(_length) + { + } + virtual ~ArrayBase(){ + } + + const T& operator[](const size_t _Pos) const + { + if (length <= _Pos){ + _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); + } + return (*(values + _Pos)); + } + T& operator[](const size_t _Pos) + { + if (length <= _Pos){ + _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); + } + return (*(values + _Pos)); + } + + /** + * Resize the array + * @param deleteValues if shrinking, delete the values that are lost. + */ + void resize(const size_t newSize, const bool deleteValues=false){ + if ( length == newSize ) return; + + if ( values == NULL ) + { + values = (T*)malloc(sizeof(T)*newSize); + memset(values,0,sizeof(T) * newSize); + length = newSize; + return; + } + + if (length < newSize) + { + values = (T*)realloc(values, sizeof(T) * newSize); + memset(values + length,0,sizeof(T) * (newSize-length)); + } + else // length > newSize, including newSize == 0 + { + if ( deleteValues ){ + for ( size_t i=newSize;i +class CLUCENE_INLINE_EXPORT ObjectArray: public ArrayBase{ +public: + ObjectArray():ArrayBase(){} + ObjectArray(T** values, size_t length):ArrayBase(values,length){} + ObjectArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;++i){ + _CLLDELETE(this->values[i]); + } + this->deleteArray(); + } + void deleteUntilNULL(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength && this->values[i] != NULL;++i){ + _CLLDELETE(this->values[i]); + } + this->deleteArray(); + } + void deleteValue(T* v){ + _CLLDELETE(v); + } + virtual ~ObjectArray(){ + deleteValues(); + } + + /* Initializes all cells in the array with a NULL value */ + void initArray(){ + for (size_t i=0;ilength;i++){ + this->values[i]=NULL; + } + } +}; + +/** +* Legacy code... don't use, remove all instances of this! +*/ +template +class CLUCENE_INLINE_EXPORT Array: public ArrayBase{ +public: + _CL_DEPRECATED(ObjectArray or ValueArray) Array():ArrayBase(){} + _CL_DEPRECATED(ObjectArray or ValueArray) Array(T* values, size_t length):ArrayBase(values,length){} + _CL_DEPRECATED(ObjectArray or ValueArray) Array(size_t length):ArrayBase(length){} + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + void deleteValue(T v){} //nothing to do... + virtual ~Array(){ + } +}; + +/** +* An array where the values do not need to be deleted +*/ +template +class CLUCENE_INLINE_EXPORT ValueArray: public ArrayBase{ +public: + ValueArray():ArrayBase(){} + ValueArray(T* values, size_t length):ArrayBase(values,length){} + ValueArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + void deleteValue(T /*v*/){} //nothing to do... + virtual ~ValueArray(){ + deleteValues(); + } +}; + +/** A value array for const values (never deleted) */ +template +class CLUCENE_INLINE_EXPORT ConstValueArray: public ArrayBase{ +public: + ConstValueArray():ArrayBase(){} + ConstValueArray(T* values, size_t length):ArrayBase(values,length){} + ConstValueArray(size_t length):ArrayBase(length){} + + void deleteValues(){} + void deleteValue(T /*v*/){} //nothing to do... + virtual ~ConstValueArray(){} +}; + + +/** +* An array of TCHAR strings +*/ +class CLUCENE_INLINE_EXPORT TCharArray: public ArrayBase{ +public: + TCharArray():ArrayBase(){} + TCharArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++) + _CLDELETE_CARRAY(this->values[i]); + this->deleteArray(); + } + void deleteValue(TCHAR* v){ + _CLDELETE_LCARRAY(v); + } + virtual ~TCharArray(){ + deleteValues(); + } +}; + +/** +* An array of char strings +*/ +class CLUCENE_INLINE_EXPORT CharArray: public ArrayBase{ +public: + CharArray():ArrayBase(){} + CharArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++) + _CLDELETE_CaARRAY(this->values[i]); + this->deleteArray(); + } + virtual ~CharArray(){ + deleteValues(); + } +}; + +/** +* An array of const TCHAR strings +*/ +class CLUCENE_INLINE_EXPORT TCharConstArray: public ArrayBase{ +public: + TCharConstArray():ArrayBase(){} + TCharConstArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + virtual ~TCharConstArray(){ + deleteValues(); + } +}; + +/** +* An array of const char strings +*/ +class CLUCENE_INLINE_EXPORT CharConstArray: public ArrayBase{ +public: + CharConstArray():ArrayBase(){} + CharConstArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + virtual ~CharConstArray(){ + deleteValues(); + } +}; + +/** An array that uses _CLDECDELETE for deletion */ +template +class CLUCENE_INLINE_EXPORT RefCountArray: public ArrayBase{ +public: + RefCountArray():ArrayBase(){} + RefCountArray(T* values, size_t length):ArrayBase(values,length){} + RefCountArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + ArrayBase::deleteValues(); + this->deleteArray(); + } + void deleteValue(T v){ + _CLDECDELETE(v); + } //nothing to do... + virtual ~RefCountArray(){ + deleteValues(); + } +}; + + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_Arrays.h clucene-core-2.3.3.4/src/core/CLucene/util/_Arrays.h --- clucene-core-0.9.21b/src/core/CLucene/util/_Arrays.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_Arrays.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_Arrays_ +#define _lucene_util_Arrays_ + + +CL_NS_DEF(util) + template + class Arrays{ + Arrays(){} + public: + static void fill( _type* a, int32_t alen, _type value ) { + for ( int32_t i = 0; i < alen; i++ ) { + a[i] = value; + } + } + static void sort(_type* a, int32_t alen, int32_t fromIndex, int32_t toIndex){ + CND_PRECONDITION(fromIndex < toIndex,"fromIndex >= toIndex"); + CND_PRECONDITION(fromIndex >= 0,"fromIndex < 0"); + + // First presort the array in chunks of length 6 with insertion + // sort. A mergesort would give too much overhead for this length. + for (int32_t chunk = fromIndex; chunk < toIndex; chunk += 6) + { + int32_t end = cl_min(chunk + 6, toIndex); + for (int32_t i = chunk + 1; i < end; i++) + { + if (compare(a[i - 1], a[i]) > 0) + { + // not already sorted + int32_t j = i; + _type elem = a[j]; + do + { + a[j] = a[j - 1]; + j--; + } + while (j > chunk && compare(a[j - 1], elem) > 0); + a[j] = elem; + } + } + } + + int32_t len = toIndex - fromIndex; + // If length is smaller or equal 6 we are done. + if (len <= 6) + return; + + _type* src = a; + _type* dest = _CL_NEWARRAY(_type,alen); + _type* t = NULL; // t is used for swapping src and dest + + // The difference of the fromIndex of the src and dest array. + int32_t srcDestDiff = -fromIndex; + + // The merges are done in this loop + for (int32_t size = 6; size < len; size <<= 1) + { + for (int32_t start = fromIndex; start < toIndex; start += size << 1) + { + // mid is the start of the second sublist; + // end the start of the next sublist (or end of array). + int32_t mid = start + size; + int32_t end = cl_min(toIndex, mid + size); + + // The second list is empty or the elements are already in + // order - no need to merge + if (mid >= end || compare(src[mid - 1], src[mid]) <= 0) + { + memcpy(dest + start + srcDestDiff, src+start, (end-start)*sizeof(_type)); + }// The two halves just need swapping - no need to merge + else if (compare(src[start], src[end - 1]) > 0) + { + memcpy(dest+end-size+srcDestDiff, src+start, size * sizeof(_type)); + memcpy(dest+start+srcDestDiff, src+mid, (end-mid) * sizeof(_type)); + + }else{ + // Declare a lot of variables to save repeating + // calculations. Hopefully a decent JIT will put these + // in registers and make this fast + int32_t p1 = start; + int32_t p2 = mid; + int32_t i = start + srcDestDiff; + + // The main merge loop; terminates as soon as either + // half is ended + while (p1 < mid && p2 < end) + { + dest[i++] = src[(compare(src[p1], src[p2]) <= 0 + ? p1++ : p2++)]; + } + + // Finish up by copying the remainder of whichever half + // wasn't finished. + if (p1 < mid) + memcpy(dest+i,src+p1, (mid-p1) * sizeof(_type)); + else + memcpy(dest+i,src+p2, (end-p2) * sizeof(_type)); + } + } + // swap src and dest ready for the next merge + t = src; + src = dest; + dest = t; + fromIndex += srcDestDiff; + toIndex += srcDestDiff; + srcDestDiff = -srcDestDiff; + } + + // make sure the result ends up back in the right place. Note + // that src and dest may have been swapped above, so src + // contains the sorted array. + if (src != a) + { + // Note that fromIndex == 0. + memcpy(a+srcDestDiff,src,toIndex * sizeof(_type)); + } + } + }; + + template + class CLListEquals: + public CL_NS_STD(binary_function) + { + typedef typename class1::const_iterator _itr1; + typedef typename class2::const_iterator _itr2; + public: + CLListEquals(){ + } + bool equals( class1* val1, class2* val2 ) const{ + static _comparator comp; + if ( val1 == val2 ) + return true; + int32_t size = (int32_t)val1->size(); + if ( size != (int32_t)val2->size() ) + return false; + + _itr1 itr1 = val1->begin(); + _itr2 itr2 = val2->begin(); + while ( --size >= 0 ){ + if ( !comp(*itr1,*itr2) ) + return false; + itr1++; + itr2++; + } + return true; + } + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/BitSet.cpp clucene-core-2.3.3.4/src/core/CLucene/util/BitSet.cpp --- clucene-core-0.9.21b/src/core/CLucene/util/BitSet.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/BitSet.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,198 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "BitSet.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_DEF(util) + + +const uint8_t BitSet::BYTE_COUNTS[256] = { + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8}; + +BitSet::BitSet( const BitSet& copy ) : + _size( copy._size ), + _count(-1) +{ + int32_t len = (_size >> 3) + 1; + bits = _CL_NEWARRAY(uint8_t, len); + memcpy( bits, copy.bits, len ); +} + +BitSet::BitSet ( int32_t size ): + _size(size), + _count(-1) +{ + int32_t len = (_size >> 3) + 1; + bits = _CL_NEWARRAY(uint8_t, len); + memset(bits,0,len); +} + +BitSet::BitSet(CL_NS(store)::Directory* d, const char* name) +{ + _count=-1; + CL_NS(store)::IndexInput* input = d->openInput( name ); + try { + _size = input->readInt(); // read size + if (_size == -1) { + readDgaps(input); + } else { + readBits(input); + } + } _CLFINALLY ( + input->close(); + _CLDELETE(input ); + ); +} + +void BitSet::write(CL_NS(store)::Directory* d, const char* name) { + CL_NS(store)::IndexOutput* output = d->createOutput(name); + try { + if (isSparse()) { + writeDgaps(output); // sparse bit-set more efficiently saved as d-gaps. + } else { + writeBits(output); + } + } _CLFINALLY ( + output->close(); + _CLDELETE(output); + ); +} +BitSet::~BitSet(){ + _CLDELETE_ARRAY(bits); +} + + +void BitSet::set(const int32_t bit, bool val){ + if (bit >= _size) { + _CLTHROWA(CL_ERR_IndexOutOfBounds, "bit out of range"); + } + + _count = -1; + + if (val) + bits[bit >> 3] |= 1 << (bit & 7); + else + bits[bit >> 3] &= ~(1 << (bit & 7)); +} + +int32_t BitSet::size() const { + return _size; +} +int32_t BitSet::count(){ + // if the BitSet has been modified + if (_count == -1) { + + int32_t c = 0; + int32_t end = (_size >> 3) + 1; + for (int32_t i = 0; i < end; i++) + c += BYTE_COUNTS[bits[i]]; // sum bits per uint8_t + _count = c; + } + return _count; +} +BitSet* BitSet::clone() const { + return _CLNEW BitSet( *this ); +} + + /** Read as a bit set */ + void BitSet::readBits(IndexInput* input) { + _count = input->readInt(); // read count + bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits + input->readBytes(bits, (_size >> 3) + 1); // read bits + } + + /** read as a d-gaps list */ + void BitSet::readDgaps(IndexInput* input) { + _size = input->readInt(); // (re)read size + _count = input->readInt(); // read count + bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits + int32_t last=0; + int32_t n = count(); + while (n>0) { + last += input->readVInt(); + bits[last] = input->readByte(); + n -= BYTE_COUNTS[bits[last] & 0xFF]; + } + } + + /** Write as a bit set */ + void BitSet::writeBits(IndexOutput* output) { + output->writeInt(size()); // write size + output->writeInt(count()); // write count + output->writeBytes(bits, (_size >> 3) + 1); // write bits + } + + /** Write as a d-gaps list */ + void BitSet::writeDgaps(IndexOutput* output) { + output->writeInt(-1); // mark using d-gaps + output->writeInt(size()); // write size + output->writeInt(count()); // write count + int32_t last=0; + int32_t n = count(); + int32_t m = (_size >> 3) + 1; + for (int32_t i=0; i0; i++) { + if (bits[i]!=0) { + output->writeVInt(i-last); + output->writeByte(bits[i]); + last = i; + n -= BYTE_COUNTS[bits[i] & 0xFF]; + } + } + } + + /** Indicates if the bit vector is sparse and should be saved as a d-gaps list, or dense, and should be saved as a bit set. */ + bool BitSet::isSparse() { + // note: order of comparisons below set to favor smaller values (no binary range search.) + // note: adding 4 because we start with ((int) -1) to indicate d-gaps format. + // note: we write the d-gap for the byte number, and the byte (bits[i]) itself, therefore + // multiplying count by (8+8) or (8+16) or (8+24) etc.: + // - first 8 for writing bits[i] (1 byte vs. 1 bit), and + // - second part for writing the byte-number d-gap as vint. + // note: factor is for read/write of byte-arrays being faster than vints. + int32_t factor = 10; + if ((_size >> 3) < (1<< 7)) return factor * (4 + (8+ 8)*count()) < size(); + if ((_size >> 3) < (1<<14)) return factor * (4 + (8+16)*count()) < size(); + if ((_size >> 3) < (1<<21)) return factor * (4 + (8+24)*count()) < size(); + if ((_size >> 3) < (1<<28)) return factor * (4 + (8+32)*count()) < size(); + return factor * (4 + (8+40)*count()) < size(); + } + + int32_t BitSet::nextSetBit(int32_t fromIndex) const { + if (fromIndex < 0) + _CLTHROWT(CL_ERR_IndexOutOfBounds, _T("fromIndex < 0")); + + if (fromIndex >= _size) + return -1; + + while (true) { + if ((bits[fromIndex >> 3] & (1 << (fromIndex & 7))) != 0) + return fromIndex; + if (++fromIndex == _size) + return -1; + } + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/BitSet.h clucene-core-2.3.3.4/src/core/CLucene/util/BitSet.h --- clucene-core-0.9.21b/src/core/CLucene/util/BitSet.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/BitSet.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,99 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_BitSet_ +#define _lucene_util_BitSet_ + + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) + +CL_NS_DEF(util) + + +/** Optimized implementation of a vector of bits. This is more-or-less like + java.util.BitSet, but also includes the following: +

    +
  • a count() method, which efficiently computes the number of one bits;
  • +
  • optimized read from and write to disk;
  • +
  • inlinable get() method;
  • +
  • store and load, as bit set or d-gaps, depending on sparseness;
  • +
+ */ +class CLUCENE_EXPORT BitSet:LUCENE_BASE { + int32_t _size; + int32_t _count; + uint8_t *bits; + + void readBits(CL_NS(store)::IndexInput* input); + /** read as a d-gaps list */ + void readDgaps(CL_NS(store)::IndexInput* input); + /** Write as a bit set */ + void writeBits(CL_NS(store)::IndexOutput* output); + /** Write as a d-gaps list */ + void writeDgaps(CL_NS(store)::IndexOutput* output); + /** Indicates if the bit vector is sparse and should be saved as a d-gaps list, or dense, and should be saved as a bit set. */ + bool isSparse(); + static const uint8_t BYTE_COUNTS[256]; +protected: + BitSet( const BitSet& copy ); + +public: + ///Create a bitset with the specified size + BitSet ( int32_t size ); + BitSet(CL_NS(store)::Directory* d, const char* name); + void write(CL_NS(store)::Directory* d, const char* name); + + ///Destructor for the bit set + ~BitSet(); + + ///get the value of the specified bit + ///get the value of the specified bit + inline bool get(const int32_t bit) const{ + if (bit >= _size) { + _CLTHROWA(CL_ERR_IndexOutOfBounds, "bit out of range"); + } + return (bits[bit >> 3] & (1 << (bit & 7))) != 0; + } + + /** + * Returns the index of the first bit that is set to {@code true} + * that occurs on or after the specified starting index. If no such + * bit exists then {@code -1} is returned. + * + *

To iterate over the {@code true} bits in a {@code BitSet}, + * use the following loop: + * + *

 {@code
+    * for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
+    *     // operate on index i here
+    * }}
+ * + * @param fromIndex the index to start checking from (inclusive) + * @return the index of the next set bit, or {@code -1} if there + * is no such bit + * @throws IndexOutOfBounds if the specified index is negative + * + */ + int32_t nextSetBit(int32_t fromIndex) const; + + ///set the value of the specified bit + void set(const int32_t bit, bool val=true); + + ///returns the size of the bitset + int32_t size() const; + + /// Returns the total number of one bits in this BitSet. This is efficiently + /// computed and cached, so that, if the BitSet is not changed, no + /// recomputation is done for repeated calls. + int32_t count(); + BitSet *clone() const; +}; +typedef BitSet BitVector; //Lucene now calls the BitSet a BitVector... + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_bufferedstream.h clucene-core-2.3.3.4/src/core/CLucene/util/_bufferedstream.h --- clucene-core-0.9.21b/src/core/CLucene/util/_bufferedstream.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_bufferedstream.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,185 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Jos van den Oever +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef JSTREAMS_BUFFEREDSTREAM_H +#define JSTREAMS_BUFFEREDSTREAM_H + +#include "_streambase.h" +#include "_streambuffer.h" +#include + +CL_NS_DEF(util) + +/** + * @brief Abstract implementation class providing a buffered input stream. + * + * You can inherit this class to provide buffered access to a + * resource. You just need to implement fillBuffer, and + * BufferedStream will do the rest. + */ +template +class BufferedStreamImpl : public StreamBase { +private: + StreamBuffer buffer; + bool finishedWritingToBuffer; + + void writeToBuffer(int32_t minsize, int32_t maxsize); +protected: + /** + * @brief Fill the buffer with the provided data + * + * This function should be implemented by subclasses. + * It should write up to @p space characters from the + * stream to the buffer position pointed to by @p start. + * + * If the end of the stream is encountered, -1 should be + * returned. + * + * If an error occurs, the status should be set to Error, + * an error message should be set and -1 should be returned. + * + * You should @em not call this function yourself. + * + * @param start where the data should be written to + * @param space the maximum amount of data to write + * @return Number of characters written, or -1 on error + **/ + virtual int32_t fillBuffer(T* start, int32_t space) = 0; + /** + * @brief Resets the buffer, allowing it to be used again + * + * This function resets the buffer, allowing it to be re-used. + */ + void resetBuffer() { + StreamBase::m_size = -1; + StreamBase::m_position = 0; + StreamBase::m_error.assign(""); + StreamBase::m_status = Ok; + buffer.readPos = buffer.start; + buffer.avail = 0; + finishedWritingToBuffer = false; + } + /** + * @brief Sets the minimum size of the buffer + */ + void setMinBufSize(int32_t s) { + buffer.makeSpace(s); + } + BufferedStreamImpl(); +public: + int32_t read(const T*& start, int32_t min, int32_t max); + int64_t reset(int64_t pos); + virtual int64_t skip(int64_t ntoskip); +}; + + +/** Abstract class for a buffered stream of bytes */ +typedef BufferedStreamImpl BufferedInputStreamImpl; + +/** Abstract class for a buffered stream of Unicode characters */ +typedef BufferedStreamImpl BufferedReaderImpl; + + +template +BufferedStreamImpl::BufferedStreamImpl() { + finishedWritingToBuffer = false; +} + +template +void +BufferedStreamImpl::writeToBuffer(int32_t ntoread, int32_t maxread) { + int32_t missing = ntoread - buffer.avail; + int32_t nwritten = 0; + while (missing > 0 && nwritten >= 0) { + int32_t space; + space = buffer.makeSpace(missing); + if (maxread >= ntoread && space > maxread) { + space = maxread; + } + T* start = buffer.readPos + buffer.avail; + nwritten = fillBuffer(start, space); + assert(StreamBase::m_status != Eof); + if (nwritten > 0) { + buffer.avail += nwritten; + missing = ntoread - buffer.avail; + } + } + if (nwritten < 0) { + finishedWritingToBuffer = true; + } +} +template +int32_t +BufferedStreamImpl::read(const T*& start, int32_t min, int32_t max) { + if (StreamBase::m_status == Error) return -2; + if (StreamBase::m_status == Eof) return -1; + + // do we need to read data into the buffer? + if (min > max) max = 0; + if (!finishedWritingToBuffer && min > buffer.avail) { + // do we have enough space in the buffer? + writeToBuffer(min, max); + if (StreamBase::m_status == Error) return -2; + } + + int32_t nread = buffer.read(start, max); + + StreamBase::m_position += nread; + if (StreamBase::m_position > StreamBase::m_size + && StreamBase::m_size > 0) { + // error: we read more than was specified in size + // this is an error because all dependent code might have been labouring + // under a misapprehension + StreamBase::m_status = Error; + StreamBase::m_error = "Stream is longer than specified."; + nread = -2; + } else if (StreamBase::m_status == Ok && buffer.avail == 0 + && finishedWritingToBuffer) { + StreamBase::m_status = Eof; + if (StreamBase::m_size == -1) { + StreamBase::m_size = StreamBase::m_position; + } + // save one call to read() by already returning -1 if no data is there + if (nread == 0) nread = -1; + } + return nread; +} +template +int64_t +BufferedStreamImpl::reset(int64_t newpos) { + assert(newpos >= 0); + if (StreamBase::m_status == Error) return -2; + // check to see if we have this position + int64_t d = StreamBase::m_position - newpos; + if (buffer.readPos - d >= buffer.start && -d < buffer.avail) { + StreamBase::m_position -= d; + buffer.avail += (int32_t)d; + buffer.readPos -= d; + StreamBase::m_status = Ok; + } + return StreamBase::m_position; +} +template +int64_t +BufferedStreamImpl::skip(int64_t ntoskip) { + const T *begin; + int32_t nread; + int64_t skipped = 0; + while (ntoskip) { + int32_t step = (int32_t)((ntoskip > buffer.size) ?buffer.size :ntoskip); + nread = read(begin, 1, step); + if (nread <= 0) { + return skipped; + } + ntoskip -= nread; + skipped += nread; + } + return skipped; +} + +CL_NS_END + +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/CLStreams.h clucene-core-2.3.3.4/src/core/CLucene/util/CLStreams.h --- clucene-core-0.9.21b/src/core/CLucene/util/CLStreams.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/CLStreams.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,295 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_CLStreams_ +#define _lucene_util_CLStreams_ + +CL_NS_DEF(util) + +template +class CLUCENE_EXPORT CLStream{ +public: + virtual ~CLStream(){} + + inline int read(){ + const T* buffer; + const int32_t nread = read(buffer,1, 1); + if ( nread < 0 ) + return -1; + else + return buffer[0]; + } + + /** Read one line, return the length of the line read. + * If the string is longer than len, only len of that line will be copied + */ + inline int32_t readLine(T* buffer, size_t len){ + size_t i = 0; + while (true && i 0) + break; + else + continue; + } + buffer[i++] = b; + } + buffer[i] = 0; + return i; + } + + /** + * @brief Reads items from the stream and sets @p start to point to + * the first item that was read. + * + * Note: unless stated otherwise in the documentation for that method, + * this pointer will no longer be valid after calling another method of + * this class. The pointer will also no longer be valid after the class + * is destroyed. + * + * At least @p min items will be read from the stream, unless an error occurs + * or the end of the stream is reached. Under no circumstances will more than + * @p max items be read. + * + * If the end of the stream is reached before @p min items are read, the + * read is still considered successful and the number of items read will + * be returned. + * + * @param start pointer passed by reference that will be set to point to + * the retrieved array of items. If the end of the stream + * is encountered or an error occurs, the value of @p start + * is undefined + * @param min the minimal number of items to read from the stream. This + * value should be larger than 0. If it is 0 or smaller, the + * result is undefined + * @param max the maximal number of items to read from the stream. + * If this value is smaller than @p min, there is no limit on + * the number of items that can be read + * @return the number of items that were read. @c -1 is returned if + * end of the stream has already been reached. An error is thrown + * if an error occurs. + **/ + virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0; + /** + * @brief Skip @p ntoskip items. + * + * If an error occurs, or the end of the stream is encountered, fewer + * than @p ntoskip items may be skipped. This can be checked by comparing + * the return value to @p ntoskip. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read. + * + * @param ntoskip the number of items that should be skipped + * @return the number of items skipped + **/ + virtual int64_t skip(int64_t ntoskip) = 0; + /** + * @brief Get the current position in the stream. + * The value obtained from this function can be used to reset the stream. + **/ + virtual int64_t position() = 0; + int64_t getPosition(){ return this->position(); } + + virtual size_t size() = 0; +}; + +template +class CLUCENE_EXPORT BufferedStream{ +public: + virtual ~BufferedStream(){} + /** + * @brief Repositions this stream to a given position. + * + * A call to reset is only guaranteed to be successful when + * the requested position lies within the segment of a stream + * corresponding to a valid pointer obtained from read. + * In this case, the pointer will not be invalidated. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read unless the conditions outlined above apply. + * + * To read n items, leaving the stream at the same position as before, you + * can do the following: + * @code + * int64_t start = stream.position(); + * if ( stream.read(data, min, max) > 0 ) { + * stream.reset(start); + * // The data pointer is still valid here + * } + * @endcode + * + * @param pos the position in the stream you want to go to, relative to + * the start of the stream + * @return the new position in the stream + **/ + virtual int64_t reset(int64_t) = 0; + /** + * @brief Sets the minimum size of the buffer + */ + virtual void setMinBufSize(int32_t s) = 0; +}; + +class BufferedReader; +class CLUCENE_EXPORT Reader: public CLStream{ +public: + ~Reader(){} + virtual BufferedReader* __asBufferedReader(){ return NULL; } +}; +class CLUCENE_EXPORT BufferedReader: public Reader, public BufferedStream{ +public: + _CL_DEPRECATED( setMinBufSize ) int64_t mark(int32_t readAheadlimit){ + this->setMinBufSize(readAheadlimit); + return this->position(); + } + ~BufferedReader(){} + BufferedReader* __asBufferedReader(){ return this; } +}; +typedef CLStream InputStream; +class CLUCENE_EXPORT BufferedInputStream: public InputStream, public BufferedStream{ +public: + virtual ~BufferedInputStream(){} +}; + + +class CLUCENE_EXPORT FilteredBufferedReader: public BufferedReader{ + class Internal; + Internal* _internal; +public: + FilteredBufferedReader(Reader* reader, bool deleteReader); + virtual ~FilteredBufferedReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +class CLUCENE_EXPORT FilteredBufferedInputStream: public BufferedInputStream{ + class Internal; + Internal* _internal; +public: + FilteredBufferedInputStream(InputStream* input, bool deleteInput); + virtual ~FilteredBufferedInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + + +class CLUCENE_EXPORT StringReader: public BufferedReader{ +protected: + const TCHAR* value; + bool ownValue; + int64_t pos; + size_t m_size; + size_t buffer_size; +public: + StringReader ( const TCHAR* value, const int32_t length = -1, bool copyData = true ); + void init ( const TCHAR* value, const int32_t length, bool copyData = true ); + virtual ~StringReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; +class CLUCENE_EXPORT AStringReader: public BufferedInputStream{ + signed char* value; + bool ownValue; + int64_t pos; +protected: + size_t m_size; +public: + AStringReader ( const char* value, const int32_t length = -1 ); + AStringReader ( char* value, const int32_t length, bool copyData = true ); + virtual ~AStringReader(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int32_t read(const unsigned char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; + +/** +* A helper class which constructs a FileReader with a specified +* simple encodings, or a given inputstreamreader +*/ +class CLUCENE_EXPORT FileInputStream: public BufferedInputStream { + class Internal; + Internal* _internal; +protected: + void init(InputStream *i, int encoding); +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_BUFFER_SIZE=4096); + FileInputStream ( const char* path, int32_t buflen = -1 ); + virtual ~FileInputStream (); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +class CLUCENE_EXPORT SimpleInputStreamReader: public BufferedReader{ + class Internal; + Internal* _internal; +protected: + void init(InputStream *i, int encoding); +public: + enum{ + ASCII=1, + UTF8=2, + UCS2_LE=3 + }; + + SimpleInputStreamReader(); + SimpleInputStreamReader(InputStream *i, int encoding); + virtual ~SimpleInputStreamReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; + +/** +* A helper class which constructs a FileReader with a specified +* simple encodings, or a given inputstreamreader. +* It is recommended that you use the contribs package for proper +* decoding using iconv. This class is provided only as a dependency-less +* replacement. +*/ +class CLUCENE_EXPORT FileReader: public SimpleInputStreamReader{ +public: + FileReader(const char* path, int encoding, int32_t buflen = -1); + FileReader(const char* path, const char* encoding, int32_t buflen = -1); + virtual ~FileReader(); +}; + +CL_NS_END + +#define jstreams CL_NS(util) + +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/Equators.cpp clucene-core-2.3.3.4/src/core/CLucene/util/Equators.cpp --- clucene-core-0.9.21b/src/core/CLucene/util/Equators.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/Equators.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,172 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Equators.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(util) + +bool Equals::Int32::operator()( const int32_t val1, const int32_t val2 ) const{ + return (val1)==(val2); +} + +bool Equals::Char::operator()( const char* val1, const char* val2 ) const{ + if ( val1 == val2 ) + return true; + return (strcmp( val1,val2 ) == 0); +} + +#ifdef _UCS2 +bool Equals::WChar::operator()( const wchar_t* val1, const wchar_t* val2 ) const{ + if ( val1 == val2 ) + return true; + return (_tcscmp( val1,val2 ) == 0); +} +#endif + +AbstractDeletor::~AbstractDeletor(){ +} + +//////////////////////////////////////////////////////////////////////////////// +// Comparors +//////////////////////////////////////////////////////////////////////////////// +int32_t compare(Comparable* o1, Comparable* o2){ + if ( o1 == NULL && o2 == NULL ) + return 0; + else if ( o1 == NULL ) + return 1; + else if ( o2 == NULL ) + return -1; + else + return o1->compareTo(o2); +} +NamedObject::~NamedObject(){ +} +bool NamedObject::instanceOf(const char* other) const{ + const char* t = this->getObjectName(); + if ( t==other || strcmp( t, other )==0 ) + return true; + else + return false; +} + +int32_t Compare::Int32::getValue() const{ return value; } +Compare::Int32::Int32(int32_t val){ + value = val; +} +Compare::Int32::Int32(){ + value = 0; +} +const char* Compare::Int32::getClassName(){ + return "Compare::Int32::getClassName"; +} +const char* Compare::Int32::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Int32::compareTo(NamedObject* o){ + if ( o->getObjectName() != Int32::getClassName() ) return -1; + + Int32* other = (Int32*)o; + if (value == other->value) + return 0; + // Returns just -1 or 1 on inequality; doing math might overflow. + return value > other->value ? 1 : -1; +} + +bool Compare::Int32::operator()( int32_t t1, int32_t t2 ) const{ + return t1 > t2 ? true : false; +} +size_t Compare::Int32::operator()( int32_t t ) const{ + return t; +} + + +float_t Compare::Float::getValue() const{ + return value; +} +Compare::Float::Float(float_t val){ + value = val; +} +const char* Compare::Float::getClassName(){ + return "Compare::Float::getClassName"; +} +const char* Compare::Float::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Float::compareTo(NamedObject* o){ + if ( o->getObjectName() != Float::getClassName() ) return -1; + Float* other = (Float*)o; + if (value == other->value) + return 0; + // Returns just -1 or 1 on inequality; doing math might overflow. + return value > other->value ? 1 : -1; +} + + +bool Compare::Char::operator()( const char* val1, const char* val2 ) const{ + if ( val1==val2) + return false; + return (strcmp( val1,val2 ) < 0); +} +size_t Compare::Char::operator()( const char* val1) const{ + return CL_NS(util)::Misc::ahashCode(val1); +} +const char* Compare::Char::getValue() const{ return s; } + +Compare::Char::Char(){ + s=NULL; +} + Compare::Char::Char(const char* str){ + this->s = str; +} +const char* Compare::Char::getClassName(){ + return "Compare::Char::getClassName"; +} +const char* Compare::Char::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Char::compareTo(NamedObject* o){ + if ( o->getObjectName() != Char::getClassName() ) return -1; + Char* os = (Char*)o; + return strcmp(s,os->s); +} + +#ifdef _UCS2 +bool Compare::WChar::operator()( const wchar_t* val1, const wchar_t* val2 ) const{ + if ( val1==val2) + return false; + bool ret = (_tcscmp( val1,val2 ) < 0); + return ret; +} +size_t Compare::WChar::operator()( const wchar_t* val1) const{ + return CL_NS(util)::Misc::whashCode(val1); +} + +const wchar_t* Compare::WChar::getValue() const{ return s; } + +Compare::WChar::WChar(){ + s=NULL; +} + Compare::WChar::WChar(const wchar_t* str){ + this->s = str; +} +const char* Compare::WChar::getClassName(){ + return "Compare::WChar::getClassName"; +} +const char* Compare::WChar::getObjectName() const{ + return getClassName(); +} +int32_t Compare::WChar::compareTo(NamedObject* o){ + if ( o->getObjectName() != WChar::getClassName() ) return -1; + TChar* os = (TChar*)o; + return _tcscmp(s,os->s); +} + +#endif + + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/Equators.h clucene-core-2.3.3.4/src/core/CLucene/util/Equators.h --- clucene-core-0.9.21b/src/core/CLucene/util/Equators.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/Equators.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,283 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_Equators_ +#define _lucene_util_Equators_ + +#include +#include +#include +#include +#include +//#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(util) + +//////////////////////////////////////////////////////////////////////////////// +// Equators +//////////////////////////////////////////////////////////////////////////////// +/** @internal */ +class CLUCENE_INLINE_EXPORT Equals{ +public: + class CLUCENE_INLINE_EXPORT Int32:public CL_NS_STD(binary_function) + { + public: + bool operator()( const int32_t val1, const int32_t val2 ) const; + }; + + class CLUCENE_INLINE_EXPORT Char:public CL_NS_STD(binary_function) + { + public: + bool operator()( const char* val1, const char* val2 ) const; + }; +#ifdef _UCS2 + class CLUCENE_INLINE_EXPORT WChar: public CL_NS_STD(binary_function) + { + public: + bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; + }; + class CLUCENE_INLINE_EXPORT TChar: public WChar{ + }; +#else + class CLUCENE_INLINE_EXPORT TChar: public Char{ + }; +#endif + + + template + class CLUCENE_INLINE_EXPORT Void:public CL_NS_STD(binary_function) + { + public: + bool operator()( _cl* val1, _cl* val2 ) const{ + return val1==val2; + } + }; +}; + + +//////////////////////////////////////////////////////////////////////////////// +// Comparors +//////////////////////////////////////////////////////////////////////////////// +class CLUCENE_EXPORT NamedObject{ +public: + virtual ~NamedObject(); + virtual const char* getObjectName() const = 0; + virtual bool instanceOf(const char* otherobject) const; +}; +class CLUCENE_EXPORT Comparable:public NamedObject{ +public: + virtual ~Comparable(){ + } + + virtual int32_t compareTo(NamedObject* o) = 0; +}; + +/** @internal */ +class CLUCENE_INLINE_EXPORT Compare{ +public: + class CLUCENE_EXPORT _base + { // traits class for hash containers + public: + enum + { // parameters for hash table + bucket_size = 4, // 0 < bucket_size + min_buckets = 8 + }; // min_buckets = 2 ^^ N, 0 < N + + _base() + { + } + }; + + class CLUCENE_INLINE_EXPORT Int32:public _base, public Comparable{ + int32_t value; + public: + int32_t getValue() const; + Int32(int32_t val); + Int32(); + int32_t compareTo(NamedObject* o); + bool operator()( int32_t t1, int32_t t2 ) const; + size_t operator()( int32_t t ) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + + + class CLUCENE_INLINE_EXPORT Float:public Comparable{ + float_t value; + public: + float_t getValue() const; + Float(float_t val); + int32_t compareTo(NamedObject* o); + static const char* getClassName(); + const char* getObjectName() const; + }; + + + class CLUCENE_EXPORT Char: public _base, public Comparable // + { + const char* s; + public: + const char* getValue() const; + Char(); + Char(const char* str); + int32_t compareTo(NamedObject* o); + + bool operator()( const char* val1, const char* val2 ) const; + size_t operator()( const char* val1) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + +#ifdef _UCS2 + class CLUCENE_EXPORT WChar: public _base, public Comparable // + { + const wchar_t* s; + public: + const wchar_t* getValue() const; + WChar(); + WChar(const wchar_t* str); + int32_t compareTo(NamedObject* o); + + bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; + size_t operator()( const wchar_t* val1) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + typedef WChar TChar; +#else + typedef Char TChar; +#endif + + template + class CLUCENE_INLINE_EXPORT Void:public _base // + { + public: + int32_t compareTo(_cl* o){ + if ( this == o ) + return o; + else + return this > o ? 1 : -1; + } + bool operator()( _cl* t1, _cl* t2 ) const{ + return t1 > t2 ? true : false; + } + size_t operator()( _cl* t ) const{ + return (size_t)t; + } + }; +}; + + + + +int32_t compare(Comparable* o1, Comparable* o2); + +//////////////////////////////////////////////////////////////////////////////// +// allocators +//////////////////////////////////////////////////////////////////////////////// +/** @internal */ +class CLUCENE_INLINE_EXPORT AbstractDeletor{ +public: + virtual void Delete(void*) = 0; + virtual ~AbstractDeletor(); +}; +class CLUCENE_INLINE_EXPORT Deletor{ +public: + class CLUCENE_INLINE_EXPORT tcArray: public AbstractDeletor{ + public: + void Delete(void* _arr){ + doDelete((TCHAR*)_arr); + } + static void doDelete(TCHAR* arr){ + _CLDELETE_CARRAY(arr); + } + }; + + template + class CLUCENE_INLINE_EXPORT vArray: public AbstractDeletor{ + public: + void Delete(void* arr){ + doDelete((_kt*)arr); + } + static void doDelete(_kt* arr){ + _CLDELETE_LARRAY(arr); + } + }; + class CLUCENE_INLINE_EXPORT acArray: public AbstractDeletor{ + public: + void Delete(void* arr){ + doDelete((char*)arr); + } + static void doDelete(char* arr){ + _CLDELETE_CaARRAY(arr); + } + }; + + template + class CLUCENE_INLINE_EXPORT Object: public AbstractDeletor{ + public: + void Delete(void* obj){ + doDelete((_kt*)obj); + } + static void doDelete(_kt* obj){ + _CLDELETE(obj); + } + }; + template + class CLUCENE_INLINE_EXPORT Void: public AbstractDeletor{ + public: + void Delete(void* obj){ + doDelete((_kt*)obj); + } + static void doDelete(_kt* obj){ + _CLVDELETE(obj); + } + }; + class CLUCENE_INLINE_EXPORT Dummy: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const void*){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; + class CLUCENE_INLINE_EXPORT DummyInt32: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const int32_t){ + } + }; + class CLUCENE_INLINE_EXPORT DummyFloat: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const float_t){ + } + }; + template + class CLUCENE_INLINE_EXPORT ConstNullVal: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const _type){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; + + template + class CLUCENE_INLINE_EXPORT NullVal: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(_type){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; +}; +//////////////////////////////////////////////////////////////////////////////// + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/FastCharStream.cpp clucene-core-2.3.3.4/src/core/CLucene/util/FastCharStream.cpp --- clucene-core-0.9.21b/src/core/CLucene/util/FastCharStream.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/FastCharStream.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,109 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_FastCharStream.h" + +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF(util) + +const int32_t FastCharStream::maxRewindSize = LUCENE_MAX_WORD_LEN*2; + + FastCharStream::FastCharStream(BufferedReader* reader): + pos(0), + rewindPos(0), + resetPos(0), + col(1), + line(1), + input(reader) + { + input->setMinBufSize(maxRewindSize); + } + FastCharStream::~FastCharStream(){ + } + + void FastCharStream::reset() + { + pos = 0; + rewindPos = 0; + resetPos = 0; + col = 1; + line = 1; + input->setMinBufSize(maxRewindSize); + } + + void FastCharStream::readChar(TCHAR &c) { + try{ + int32_t r = input->read(); + if ( r == -1 ) + input = NULL; + c = r; + }catch(CLuceneError& err){ + if ( err.number() == CL_ERR_IO ) + input = 0; + throw err; + } + } + int FastCharStream::GetNext() + { + if (input == 0 ) // end of file + { + _CLTHROWA(CL_ERR_IO,"warning : FileReader.GetNext : Read TCHAR over EOS."); + } + // this is rather inefficient + // implementing the functions from the java version of + // charstream will be much more efficient. + ++pos; + TCHAR ch; + readChar(ch); + + if (input == NULL) { // eof + return -1; + } + if (rewindPos == 0) { + col += 1; + if(ch == '\n') { + line++; + col = 1; + } + } else { + rewindPos--; + } + return ch; + } + + void FastCharStream::UnGet(){ +// printf("UnGet \n"); + if (input == 0) + return; + if ( pos == 0 ) { + _CLTHROWA(CL_ERR_IO,"error : No character can be UnGet"); + } + rewindPos++; + + input->reset(pos-1); + pos--; + } + + int FastCharStream::Peek() { + int c = GetNext(); + UnGet(); + return c; + } + + bool FastCharStream::Eos() const { + return input==NULL; + } + + int32_t FastCharStream::Column() const { + return col; + } + + int32_t FastCharStream::Line() const { + return line; + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_FastCharStream.h clucene-core-2.3.3.4/src/core/CLucene/util/_FastCharStream.h --- clucene-core-0.9.21b/src/core/CLucene/util/_FastCharStream.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_FastCharStream.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_FastCharStream_ +#define _lucene_util_FastCharStream_ + + +CL_CLASS_DEF(util,BufferedReader) + +CL_NS_DEF(util) + + /** Ported implementation of the FastCharStream class. */ + class FastCharStream + { + static const int32_t maxRewindSize; + int32_t pos; + int32_t rewindPos; + int64_t resetPos; + int32_t col; + int32_t line; + // read character from stream throws an exception on error + void readChar(TCHAR &); + public: + BufferedReader* input; + + /// Initializes a new instance of the FastCharStream class LUCENE_EXPORT. + FastCharStream(BufferedReader* reader); + virtual ~FastCharStream(); + + void reset(); + + /// Returns the next TCHAR from the stream. + int GetNext(); + + void UnGet(); + + /// Returns the current top TCHAR from the input stream without removing it. + int Peek(); + + + /// Returns True if the end of stream was reached. + bool Eos() const; + + /// Gets the current column. + int32_t Column() const; + + /// Gets the current line. + int32_t Line() const; + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/MD5Digester.cpp clucene-core-2.3.3.4/src/core/CLucene/util/MD5Digester.cpp --- clucene-core-0.9.21b/src/core/CLucene/util/MD5Digester.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/MD5Digester.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,337 @@ +///////////////////////////////////////////////////////////////////////// +// MD5.cpp +// Implementation file for MD5 class +// +// This C++ Class implementation of the original RSA Data Security, Inc. +// MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle. +// All rights reserved. This software is a derivative of the "RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" +// +// You may use this software free of any charge, but without any +// warranty or implied warranty, provided that you follow the terms +// of the original RSA copyright, listed below. +// +// Original RSA Data Security, Inc. Copyright notice +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +// rights reserved. +// +// License to copy and use this software is granted provided that it +// is identified as the "RSA Data Security, Inc. MD5 Message-Digest +// Algorithm" in all material mentioning or referencing this software +// or this function. +// License is also granted to make and use derivative works provided +// that such works are identified as "derived from the RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" in all material +// mentioning or referencing the derived work. +// RSA Data Security, Inc. makes no representations concerning either +// the merchantability of this software or the suitability of this +// software for any particular purpose. It is provided "as is" +// without express or implied warranty of any kind. +// These notices must be retained in any copies of any part of this +// documentation and/or software. +///////////////////////////////////////////////////////////////////////// + +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "_MD5Digester.h" +CL_NS_DEF(util) + +static unsigned char PADDING[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + + +// PrintMD5: Converts a completed md5 digest into a char* string. +char* PrintMD5(uint8_t md5Digest[16]) +{ + char chBuffer[256]; + char chEach[10]; + int nCount; + + memset(chBuffer,0,256); + memset(chEach, 0, 10); + + for (nCount = 0; nCount < 16; nCount++) + { + cl_sprintf(chEach, 10, "%02x", md5Digest[nCount]); + strncat(chBuffer, chEach, sizeof(chEach)); + } + + return STRDUP_AtoA(chBuffer); +} + +// MD5String: Performs the MD5 algorithm on a char* string, returning +// the results as a char*. +char* MD5String(char* szString) +{ + int nLen = strlen(szString); + md5 alg; + + alg.Update((unsigned char*)szString, (unsigned int)nLen); + alg.Finalize(); + + return PrintMD5(alg.Digest()); + +} + +// MD5File: Performs the MD5 algorithm on a file (binar or text), +// returning the results as a char*. Returns NULL if it fails. +char* MD5File(char* szFilename) +{ + FILE* file; + md5 alg; + int nLen; + unsigned char chBuffer[1024]; + + try + { + memset(chBuffer, 0, 1024); + + if ((file = fopen (szFilename, "rb")) != NULL) + { + while ((nLen = fread (chBuffer, 1, 1024, file))) + alg.Update(chBuffer, nLen); + + alg.Finalize(); + + fclose (file); + + return PrintMD5(alg.Digest()); + } + } + catch(...) //todo: only catch IO Err??? + { + + } + + return NULL; // failed +} + + +// md5::Init +// Initializes a new context. +void md5::Init() +{ + memset(m_Count, 0, 2 * sizeof(uint32_t)); + + m_State[0] = 0x67452301; + m_State[1] = 0xefcdab89; + m_State[2] = 0x98badcfe; + m_State[3] = 0x10325476; +} + +// md5::Update +// MD5 block update operation. Continues an MD5 message-digest +// operation, processing another message block, and updating the +// context. +void md5::Update(uint8_t* chInput, uint32_t nInputLen) +{ + uint32_t i, index, partLen; + + // Compute number of bytes mod 64 + index = (unsigned int)((m_Count[0] >> 3) & 0x3F); + + // Update number of bits + if ((m_Count[0] += (nInputLen << 3)) < (nInputLen << 3)) + m_Count[1]++; + + m_Count[1] += (nInputLen >> 29); + + partLen = 64 - index; + + // Transform as many times as possible. + if (nInputLen >= partLen) + { + memcpy( &m_Buffer[index], chInput, partLen ); + Transform(m_Buffer); + + for (i = partLen; i + 63 < nInputLen; i += 64) + Transform(&chInput[i]); + + index = 0; + } + else + i = 0; + + // Buffer remaining input + memcpy( &m_Buffer[index], &chInput[i], nInputLen-i ); +} + +// md5::Finalize +// MD5 finalization. Ends an MD5 message-digest operation, writing +// the message digest and zeroizing the context. +void md5::Finalize() +{ + uint8_t bits[8]; + uint32_t index, padLen; + + // Save number of bits + Encode (bits, m_Count, 8); + + // Pad out to 56 mod 64 + index = (unsigned int)((m_Count[0] >> 3) & 0x3f); + padLen = (index < 56) ? (56 - index) : (120 - index); + Update(PADDING, padLen); + + // Append length (before padding) + Update (bits, 8); + + // Store state in digest + Encode (m_Digest, m_State, 16); + + memset(m_Count, 0, 2 * sizeof(uint32_t)); + memset(m_State, 0, 4 * sizeof(uint32_t)); + memset(m_Buffer,0, 64 * sizeof(uint8_t)); +} + +// md5::Transform +// MD5 basic transformation. Transforms state based on block. +void md5::Transform (uint8_t* block) +{ + uint32_t a = m_State[0], b = m_State[1], c = m_State[2], d = m_State[3], x[16]; + + Decode (x, block, 64); + + // Round 1 + FF (a, b, c, d, x[ 0], S11, 0xd76aa478); + FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); + FF (c, d, a, b, x[ 2], S13, 0x242070db); + FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); + FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); + FF (d, a, b, c, x[ 5], S12, 0x4787c62a); + FF (c, d, a, b, x[ 6], S13, 0xa8304613); + FF (b, c, d, a, x[ 7], S14, 0xfd469501); + FF (a, b, c, d, x[ 8], S11, 0x698098d8); + FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); + FF (c, d, a, b, x[10], S13, 0xffff5bb1); + FF (b, c, d, a, x[11], S14, 0x895cd7be); + FF (a, b, c, d, x[12], S11, 0x6b901122); + FF (d, a, b, c, x[13], S12, 0xfd987193); + FF (c, d, a, b, x[14], S13, 0xa679438e); + FF (b, c, d, a, x[15], S14, 0x49b40821); + + // Round 2 + GG (a, b, c, d, x[ 1], S21, 0xf61e2562); + GG (d, a, b, c, x[ 6], S22, 0xc040b340); + GG (c, d, a, b, x[11], S23, 0x265e5a51); + GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); + GG (a, b, c, d, x[ 5], S21, 0xd62f105d); + GG (d, a, b, c, x[10], S22, 0x2441453); + GG (c, d, a, b, x[15], S23, 0xd8a1e681); + GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); + GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); + GG (d, a, b, c, x[14], S22, 0xc33707d6); + GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); + GG (b, c, d, a, x[ 8], S24, 0x455a14ed); + GG (a, b, c, d, x[13], S21, 0xa9e3e905); + GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); + GG (c, d, a, b, x[ 7], S23, 0x676f02d9); + GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); + + // Round 3 + HH (a, b, c, d, x[ 5], S31, 0xfffa3942); + HH (d, a, b, c, x[ 8], S32, 0x8771f681); + HH (c, d, a, b, x[11], S33, 0x6d9d6122); + HH (b, c, d, a, x[14], S34, 0xfde5380c); + HH (a, b, c, d, x[ 1], S31, 0xa4beea44); + HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); + HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); + HH (b, c, d, a, x[10], S34, 0xbebfbc70); + HH (a, b, c, d, x[13], S31, 0x289b7ec6); + HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); + HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); + HH (b, c, d, a, x[ 6], S34, 0x4881d05); + HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); + HH (d, a, b, c, x[12], S32, 0xe6db99e5); + HH (c, d, a, b, x[15], S33, 0x1fa27cf8); + HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); + + // Round 4 + II (a, b, c, d, x[ 0], S41, 0xf4292244); + II (d, a, b, c, x[ 7], S42, 0x432aff97); + II (c, d, a, b, x[14], S43, 0xab9423a7); + II (b, c, d, a, x[ 5], S44, 0xfc93a039); + II (a, b, c, d, x[12], S41, 0x655b59c3); + II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); + II (c, d, a, b, x[10], S43, 0xffeff47d); + II (b, c, d, a, x[ 1], S44, 0x85845dd1); + II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); + II (d, a, b, c, x[15], S42, 0xfe2ce6e0); + II (c, d, a, b, x[ 6], S43, 0xa3014314); + II (b, c, d, a, x[13], S44, 0x4e0811a1); + II (a, b, c, d, x[ 4], S41, 0xf7537e82); + II (d, a, b, c, x[11], S42, 0xbd3af235); + II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); + II (b, c, d, a, x[ 9], S44, 0xeb86d391); + + m_State[0] += a; + m_State[1] += b; + m_State[2] += c; + m_State[3] += d; + + memset(x, 0, sizeof(x)); +} + +// md5::Encode +// Encodes input (uint32_t) into output (uint8_t). Assumes nLength is +// a multiple of 4. +void md5::Encode(uint8_t* dest, uint32_t* src, uint32_t nLength) +{ + uint32_t i, j; + + CND_PRECONDITION(nLength % 4 == 0,"nLength % 4 != 0") + + for (i = 0, j = 0; j < nLength; i++, j += 4) + { + dest[j] = (uint8_t)(src[i] & 0xff); + dest[j+1] = (uint8_t)((src[i] >> 8) & 0xff); + dest[j+2] = (uint8_t)((src[i] >> 16) & 0xff); + dest[j+3] = (uint8_t)((src[i] >> 24) & 0xff); + } +} + +// md5::Decode +// Decodes input (uint8_t) into output (uint32_t). Assumes nLength is +// a multiple of 4. +void md5::Decode(uint32_t* dest, uint8_t* src, uint32_t nLength) +{ + uint32_t i, j; + + CND_PRECONDITION(nLength % 4 == 0, "nLength % 4 != 0"); + + for (i = 0, j = 0; j < nLength; i++, j += 4) + { + dest[i] = ((uint32_t)src[j]) | (((uint32_t)src[j+1])<<8) | + (((uint32_t)src[j+2])<<16) | (((uint32_t)src[j+3])<<24); + } +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_MD5Digester.h clucene-core-2.3.3.4/src/core/CLucene/util/_MD5Digester.h --- clucene-core-0.9.21b/src/core/CLucene/util/_MD5Digester.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_MD5Digester.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,110 @@ +///////////////////////////////////////////////////////////////////////// +// MD5.cpp +// Implementation file for MD5 class +// +// This C++ Class implementation of the original RSA Data Security, Inc. +// MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle. +// All rights reserved. This software is a derivative of the "RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" +// +// You may use this software free of any charge, but without any +// warranty or implied warranty, provided that you follow the terms +// of the original RSA copyright, listed below. +// +// Original RSA Data Security, Inc. Copyright notice +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +// rights reserved. +// +// License to copy and use this software is granted provided that it +// is identified as the "RSA Data Security, Inc. MD5 Message-Digest +// Algorithm" in all material mentioning or referencing this software +// or this function. +// License is also granted to make and use derivative works provided +// that such works are identified as "derived from the RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" in all material +// mentioning or referencing the derived work. +// RSA Data Security, Inc. makes no representations concerning either +// the merchantability of this software or the suitability of this +// software for any particular purpose. It is provided "as is" +// without express or implied warranty of any kind. +// These notices must be retained in any copies of any part of this +// documentation and/or software. +///////////////////////////////////////////////////////////////////////// + +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#ifndef _lucene_util_MD5Digester_H +#define _lucene_util_MD5Digester_H + + +CL_NS_DEF(util) + +typedef unsigned short int uint2; + +char* PrintMD5(uint8_t md5Digest[16]); +char* MD5String(char* szString); +char* MD5File(char* szFilename); + +class md5 +{ +// Methods +public: + md5() { Init(); } + void Init(); + void Update(uint8_t* chInput, uint32_t nInputLen); + void Finalize(); + uint8_t* Digest() { return m_Digest; } + +private: + + void Transform(uint8_t* block); + void Encode(uint8_t* dest, uint32_t* src, uint32_t nLength); + void Decode(uint32_t* dest, uint8_t* src, uint32_t nLength); + + + inline uint32_t rotate_left(uint32_t x, uint32_t n) + { return ((x << n) | (x >> (32-n))); } + + inline uint32_t F(uint32_t x, uint32_t y, uint32_t z) + { return ((x & y) | (~x & z)); } + + inline uint32_t G(uint32_t x, uint32_t y, uint32_t z) + { return ((x & z) | (y & ~z)); } + + inline uint32_t H(uint32_t x, uint32_t y, uint32_t z) + { return (x ^ y ^ z); } + + inline uint32_t I(uint32_t x, uint32_t y, uint32_t z) + { return (y ^ (x | ~z)); } + + inline void FF(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += F(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void GG(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += G(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void HH(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += H(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void II(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += I(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + +// Data +private: + uint32_t m_State[4]; + uint32_t m_Count[2]; + uint8_t m_Buffer[64]; + uint8_t m_Digest[16]; + uint8_t m_Finalized; + +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/PriorityQueue.h clucene-core-2.3.3.4/src/core/CLucene/util/PriorityQueue.h --- clucene-core-0.9.21b/src/core/CLucene/util/PriorityQueue.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/PriorityQueue.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,199 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_PriorityQueue_ +#define _lucene_util_PriorityQueue_ + +#include + +CL_NS_DEF(util) + +/** A PriorityQueue maintains a partial ordering of its elements such that the + least element can always be found in constant time. Put()'s and pop()'s + require log(size) time. */ +template +class CLUCENE_INLINE_EXPORT PriorityQueue { + private: + size_t _size; + bool dk; + size_t maxSize; + protected: + _type* heap; //(was object[]) + + private: + void upHeap(){ + size_t i = _size; + _type node = heap[i]; // save bottom node (WAS object) + int32_t j = ((uint32_t)i) >> 1; + while (j > 0 && lessThan(node,heap[j])) { + heap[i] = heap[j]; // shift parents down + i = j; + j = ((uint32_t)j) >> 1; + } + heap[i] = node; // install saved node + } + void downHeap(){ + size_t i = 1; + _type node = heap[i]; // save top node + size_t j = i << 1; // find smaller child + size_t k = j + 1; + if (k <= _size && lessThan(heap[k], heap[j])) { + j = k; + } + while (j <= _size && lessThan(heap[j],node)) { + heap[i] = heap[j]; // shift up child + i = j; + j = i << 1; + k = j + 1; + if (k <= _size && lessThan(heap[k], heap[j])) { + j = k; + } + } + heap[i] = node; // install saved node + } + + protected: + PriorityQueue():_size(0),dk(false),maxSize(0),heap(NULL){ + } + + // Determines the ordering of objects in this priority queue. Subclasses + // must define this one method. + virtual bool lessThan(_type a, _type b)=0; + + // Subclass constructors must call this. + void initialize(const int32_t maxSize, bool deleteOnClear){ + _size = 0; + dk = deleteOnClear; + int32_t heapSize; + if (0 == maxSize) + // We allocate 1 extra to avoid if statement in top() + heapSize = 2; + else + heapSize = maxSize + 1; + heap = _CL_NEWARRAY(_type,heapSize); + this->maxSize = maxSize; + } + + public: + virtual ~PriorityQueue(){ + clear(); + _CLDELETE_LARRAY(heap); + } + + /** + * Adds an Object to a PriorityQueue in log(size) time. + * If one tries to add more objects than maxSize from initialize + * a RuntimeException (ArrayIndexOutOfBound) is thrown. + */ + void put(_type element){ + if ( _size>=maxSize ) + _CLTHROWA(CL_ERR_IndexOutOfBounds,"add is out of bounds"); + + ++_size; + heap[_size] = element; + upHeap(); + } + + /** + * Adds element to the PriorityQueue in log(size) time if either + * the PriorityQueue is not full, or not lessThan(element, top()). + * @param element + * @return true if element is added, false otherwise. + */ + bool insert(_type element){ + _type t = insertWithOverflow(element); + if (t != element) { + if (t) _valueDeletor::doDelete(t); + return true; + } + return false; + } + + /** + * insertWithOverflow() is the same as insert() except its + * return value: it returns the object (if any) that was + * dropped off the heap because it was full. This can be + * the given parameter (in case it is smaller than the + * full heap's minimum, and couldn't be added), or another + * object that was previously the smallest value in the + * heap and now has been replaced by a larger one, or null + * if the queue wasn't yet full with maxSize elements. + * NOTE: value is not being deleted - its the user responsibilty + * to dispose the returned _type (only if != NULL && != element). + */ + _type insertWithOverflow(_type element) { + if(_size < maxSize){ + put(element); + return NULL; + }else if(_size > 0 && !lessThan(element, heap[1])){ + _type ret = heap[1]; + heap[1] = element; + adjustTop(); + return ret; + }else + return element; + } + + /** + * Returns the least element of the PriorityQueue in constant time. + */ + _type top(){ + // We don't need to check size here: if maxSize is 0, + // then heap is length 2 array with both entries null. + // If size is 0 then heap[1] is already null. + return heap[1]; + } + + /** Removes and returns the least element of the PriorityQueue in log(size) + * time. + */ + _type pop(){ + if (_size > 0) { + _type result = heap[1]; // save first value + heap[1] = heap[_size]; // move last to first + + heap[_size] = (_type)0; // permit GC of objects + --_size; + downHeap(); // adjust heap + return result; + } else + return (_type)NULL; + } + + /**Should be called when the object at top changes values. Still log(n) + worst case, but it's at least twice as fast to
+		    { pq.top().change(); pq.adjustTop(); }
+		   
instead of
+		    { o = pq.pop(); o.change(); pq.push(o); }
+		   
+ */ + void adjustTop(){ + downHeap(); + } + + + /** + * Returns the number of elements currently stored in the PriorityQueue. + */ + size_t size(){ + return _size; + } + + /** + * Removes all entries from the PriorityQueue. + */ + void clear(){ + for (size_t i = 1; i <= _size; ++i){ + if ( dk ){ + _valueDeletor::doDelete(heap[i]); + } + } + _size = 0; + } + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/Reader.cpp clucene-core-2.3.3.4/src/core/CLucene/util/Reader.cpp --- clucene-core-0.9.21b/src/core/CLucene/util/Reader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/Reader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,550 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLStreams.h" +#include "CLucene/util/Misc.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + +#include "_bufferedstream.h" + +CL_NS_DEF(util) + +StringReader::StringReader ( const TCHAR* _value, const int32_t _length, bool copyData ) +{ + this->m_size = 0; + this->value = NULL; + this->ownValue = true; + this->buffer_size = 0; + this->init(_value,_length,copyData); +} + +void StringReader::init ( const TCHAR* _value, const int32_t _length, bool copyData ){ + const size_t length = ( _length < 0 ? _tcslen(_value) : _length ); + this->pos = 0; + if ( copyData ){ + TCHAR* tmp = (TCHAR*)this->value; + if ( tmp == NULL || !this->ownValue ){ + tmp = _CL_NEWARRAY(TCHAR, length+1); + this->buffer_size = length; + }else if ( length > this->buffer_size || length < (this->buffer_size/2) ){ //expand, or shrink + tmp = (TCHAR*)realloc(tmp, sizeof(TCHAR) * (length+1)); + this->buffer_size = length; + } + _tcsncpy(tmp, _value, length+1); + this->value = tmp; + }else{ + if ( ownValue && this->value != NULL) + _CLDELETE_LARRAY( (TCHAR*)this->value); + this->value = _value; + this->buffer_size = 0; + } + this->m_size = length; + this->ownValue = copyData; +} + +StringReader::~StringReader(){ + if ( ownValue && this->value != NULL){ + TCHAR* value = (TCHAR*) this->value; + _CLDELETE_LARRAY(value); + this->value = NULL; + } +} + +size_t StringReader::size(){ + return m_size; +} +int32_t StringReader::read(const TCHAR*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = this->value + pos; + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int64_t StringReader::position(){ + return pos; +} +void StringReader::setMinBufSize(int32_t /*s*/){ +} +int64_t StringReader::reset(int64_t pos){ + if ( pos >= 0 && pos < this->m_size ) + this->pos = pos; + return this->pos; +} +int64_t StringReader::skip(int64_t ntoskip){ + int64_t s = cl_min(ntoskip, m_size-pos); + this->pos += s; + return s; +} + + + + +AStringReader::AStringReader ( char* value, const int32_t length, bool copyData ) +{ + this->m_size = length; + this->pos = 0; + if ( copyData ){ + this->value = _CL_NEWARRAY(signed char, this->m_size); + strncpy((char*)this->value, value, this->m_size); + }else{ + this->value = (signed char*)value; + } + this->ownValue = copyData; +} + +AStringReader::AStringReader ( const char* value, const int32_t length ){ + if ( length >= 0 ) + this->m_size = length; + else + this->m_size = strlen(value); + this->pos = 0; + this->value = _CL_NEWARRAY(signed char, this->m_size); + strncpy((char*)this->value, value, this->m_size); + this->ownValue = true; +} +AStringReader::~AStringReader(){ + if ( ownValue ) + _CLDELETE_ARRAY(this->value); +} + +size_t AStringReader::size(){ + return m_size; +} +int32_t AStringReader::read(const signed char*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = this->value + pos; + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int32_t AStringReader::read(const unsigned char*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = (unsigned char*)(this->value + pos); + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int64_t AStringReader::position(){ + return pos; +} +void AStringReader::setMinBufSize(int32_t /*s*/){ +} +int64_t AStringReader::reset(int64_t pos){ + if ( pos >= 0 && pos < this->m_size ) + this->pos = pos; + return this->pos; +} +int64_t AStringReader::skip(int64_t ntoskip){ + int64_t s = cl_min(ntoskip, m_size-pos); + this->pos += s; + return s; +} + +class FileInputStream::Internal{ +public: + class JStreamsBuffer: public BufferedInputStreamImpl{ + int32_t fhandle; + protected: + int32_t fillBuffer(signed char* start, int32_t space){ + if (fhandle == 0) return -1; + // read into the buffer + int32_t nwritten = ::_read(fhandle, start, space); + + // check the file stream status + if (nwritten == -1 ) { + m_error = "Could not read from file"; + m_status = CL_NS(util)::Error; + if ( fhandle > 0 ){ + ::_close(fhandle); + fhandle = 0; + } + return -1; + }else if ( nwritten == 0 ) { + ::_close(fhandle); + fhandle = 0; + } + return nwritten; + } + public: + int encoding; + + JStreamsBuffer(int32_t fhandle, int32_t buffersize){ + this->fhandle = fhandle; + + m_size = fileSize(fhandle); // no need to know the file length... + + // allocate memory in the buffer + int32_t bufsize = (int32_t)((m_size <= buffersize) ?m_size+1 :buffersize); + setMinBufSize(bufsize); + } + void _setMinBufSize(int32_t bufsize){ + this->setMinBufSize(bufsize); + } + + ~JStreamsBuffer(){ + if ( fhandle > 0 ){ + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + } + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(const char* path, int32_t buffersize){ + int32_t fhandle = _cl_open(path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD ); + + //Check if a valid handle was retrieved + if (fhandle < 0){ + int err = errno; + if ( err == ENOENT ) + _CLTHROWA(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + _CLTHROWA(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + _CLTHROWA(CL_ERR_IO, "Too many open files"); + else + _CLTHROWA(CL_ERR_IO, "Could not open file"); + } + jsbuffer = new JStreamsBuffer(fhandle, buffersize); + + } + ~Internal(){ + delete jsbuffer; + } +}; + + +FileInputStream::FileInputStream ( const char* path, int32_t buflen ) +{ + if ( buflen == -1 ) + buflen = DEFAULT_BUFFER_SIZE; + _internal = new Internal(path, buflen); +} + +size_t FileInputStream::size(){ + return (size_t)_internal->jsbuffer->size(); +} + +FileInputStream::~FileInputStream () +{ + delete _internal; +} + +int32_t FileInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FileInputStream::position(){ + return _internal->jsbuffer->position(); +} +int64_t FileInputStream::reset(int64_t to){ + return _internal->jsbuffer->reset(to); +} +int64_t FileInputStream::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +void FileInputStream::setMinBufSize(int32_t minbufsize){ + _internal->jsbuffer->_setMinBufSize(minbufsize); +} + + +FileReader::FileReader(const char *path, const char *enc, int32_t buflen) +{ + int encoding; + if ( strcmp(enc,"ASCII")==0 ) + encoding = ASCII; +#ifdef _UCS2 + else if ( strcmp(enc,"UTF-8")==0 ) + encoding = UTF8; + else if ( strcmp(enc,"UCS-2LE")==0 ) + encoding = UCS2_LE; +#endif + else + _CLTHROWA(CL_ERR_IllegalArgument,"Unsupported encoding, use jstreams iconv based instead"); + init( _CLNEW FileInputStream(path, buflen), encoding); +} +FileReader::FileReader(const char *path, int encoding, int32_t buflen) +{ + init(_CLNEW FileInputStream(path, buflen), encoding); +} +FileReader::~FileReader(){ +} + +class SimpleInputStreamReader::Internal{ +public: + + class JStreamsBuffer: public BufferedReaderImpl{ + InputStream* input; + char utf8buf[6]; //< buffer used for converting utf8 characters + protected: + int readChar(){ + const signed char* buf; + if ( encoding == ASCII ){ + int32_t ret = this->input->read(buf, 1, 1) ; + if ( ret == 1 ){ + return buf[0]; + }else + return -1; + + }else if ( encoding == UCS2_LE ){ + int32_t ret = this->input->read(buf, 2, 2); + if ( ret < 0 ) + return -1; + else if ( ret == 1 ){ + return buf[0]; + }else{ + uint8_t c1 = *buf; + uint8_t c2 = *(buf+1); + return c1 | (c2<<8); + } + }else if ( encoding == UTF8 ){ + int32_t ret = this->input->read(buf, 1, 1); + + if ( ret == 1 ){ + int len = lucene_utf8charlen(buf[0]); + if ( len > 1 ){ + *utf8buf = buf[0]; + ret = this->input->read(buf, len-1, len-1); + }else + return buf[0]; + + if ( ret >= 0 ){ + if ( ret == len-1 ){ + memcpy(utf8buf+1,buf,ret); + wchar_t wcbuf=0; + lucene_utf8towc(wcbuf, utf8buf); + return wcbuf; + } + } + }else if ( ret == -1 ) + return -1; + this->m_error = "Invalid multibyte sequence."; + this->m_status = CL_NS(util)::Error; + }else{ + this->m_error = "Unexpected encoding"; + this->m_status = CL_NS(util)::Error; + } + return -1; + } + int32_t fillBuffer(TCHAR* start, int32_t space){ + if ( input == NULL ) return -1; + + int c; + int32_t i; + for(i=0;im_status == CL_NS(util)::Ok ){ + if ( i == 0 ) + return -1; + break; + } + return -1; + } + start[i] = c; + } + return i; + } + public: + int encoding; + + JStreamsBuffer(InputStream* input, int encoding){ + this->input = input; + this->encoding = encoding; + setMinBufSize(1024); + } + virtual ~JStreamsBuffer(){ + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(InputStream* input, int encoding){ + jsbuffer = new JStreamsBuffer(input, encoding); + } + ~Internal(){ + delete jsbuffer; + } +}; + +SimpleInputStreamReader::SimpleInputStreamReader(){ + _internal = NULL; +} +SimpleInputStreamReader::SimpleInputStreamReader(InputStream *i, int encoding){ + _internal = new Internal(i, encoding); +} +void SimpleInputStreamReader::init(InputStream *i, int encoding){ + _internal = new Internal(i, encoding); +} +SimpleInputStreamReader::~SimpleInputStreamReader(){ + delete _internal; +} + +int32_t SimpleInputStreamReader::read(const TCHAR*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start, min, max); +} +int64_t SimpleInputStreamReader::position(){ + return _internal->jsbuffer->position(); +} +int64_t SimpleInputStreamReader::reset(int64_t to){ + return _internal->jsbuffer->reset(to); +} +int64_t SimpleInputStreamReader::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t SimpleInputStreamReader::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void SimpleInputStreamReader::setMinBufSize(int32_t minbufsize){ + _internal->jsbuffer->_setMinBufSize(minbufsize); +} + +class FilteredBufferedReader::Internal{ +public: + class JStreamsFilteredBuffer: public BufferedReaderImpl{ + Reader* input; + bool deleteInput; + protected: + int32_t fillBuffer(TCHAR* start, int32_t space){ + const TCHAR* buffer; + int32_t r = input->read(buffer, 1, space); + if ( r > 0 ) + _tcsncpy(start, buffer, r); + return r; + } + public: + JStreamsFilteredBuffer(Reader* input, bool deleteInput){ + this->input = input; + this->deleteInput = deleteInput; + } + ~JStreamsFilteredBuffer(){ + if ( deleteInput ) + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + JStreamsFilteredBuffer* jsbuffer; + + Internal(Reader* reader, bool deleteReader){ + this->jsbuffer = new JStreamsFilteredBuffer(reader, deleteReader); + } + ~Internal(){ + delete jsbuffer; + } +}; +FilteredBufferedReader::FilteredBufferedReader(Reader* reader, bool deleteReader){ + _internal = new Internal(reader, deleteReader); +} +FilteredBufferedReader::~FilteredBufferedReader(){ + delete _internal; +} +int32_t FilteredBufferedReader::read(const TCHAR*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FilteredBufferedReader::position(){ + return _internal->jsbuffer->position(); +} +int64_t FilteredBufferedReader::reset(int64_t p){ + return _internal->jsbuffer->reset(p); +} +int64_t FilteredBufferedReader::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t FilteredBufferedReader::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void FilteredBufferedReader::setMinBufSize(int32_t minbufsize){ + return _internal->jsbuffer->_setMinBufSize(minbufsize); +} + + + + +class FilteredBufferedInputStream::Internal{ +public: + class JStreamsFilteredBuffer: public BufferedInputStreamImpl{ + InputStream* input; + bool deleteInput; + protected: + int32_t fillBuffer(signed char* start, int32_t space){ + const signed char* buffer; + int32_t r = input->read(buffer, 1, space); + if ( r > 0 ) + memcpy(start, buffer, r); + return r; + } + public: + JStreamsFilteredBuffer(InputStream* input, bool deleteInput){ + this->input = input; + this->deleteInput = deleteInput; + } + ~JStreamsFilteredBuffer(){ + if ( deleteInput ) + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + JStreamsFilteredBuffer* jsbuffer; + + Internal(InputStream* input, bool deleteInput){ + this->jsbuffer = new JStreamsFilteredBuffer(input, deleteInput); + } + ~Internal(){ + delete jsbuffer; + } +}; +FilteredBufferedInputStream::FilteredBufferedInputStream(InputStream* input, bool deleteInput){ + _internal = new Internal(input, deleteInput); +} +FilteredBufferedInputStream::~FilteredBufferedInputStream(){ + delete _internal; +} +int32_t FilteredBufferedInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FilteredBufferedInputStream::position(){ + return _internal->jsbuffer->position(); +} +int64_t FilteredBufferedInputStream::reset(int64_t p){ + return _internal->jsbuffer->reset(p); +} +int64_t FilteredBufferedInputStream::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t FilteredBufferedInputStream::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void FilteredBufferedInputStream::setMinBufSize(int32_t minbufsize){ + return _internal->jsbuffer->_setMinBufSize(minbufsize); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/Reader.h clucene-core-2.3.3.4/src/core/CLucene/util/Reader.h --- clucene-core-0.9.21b/src/core/CLucene/util/Reader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/Reader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,19 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_Reader_ +#define _lucene_util_Reader_ + +#include "CLucene/util/CLStreams.h" +CL_NS_DEF(util) + +#error Reader has been refactored. It is recommended that you use strigi streams +#error for all input into CLucene. If, however, you dont want to use that dependency, +#error then you'll have to refactor your current code. The jstreams namespace +#error was completely removed + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_streambase.h clucene-core-2.3.3.4/src/core/CLucene/util/_streambase.h --- clucene-core-0.9.21b/src/core/CLucene/util/_streambase.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_streambase.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,210 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Jos van den Oever +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef JSTREAMS_STREAMBASE_H +#define JSTREAMS_STREAMBASE_H + +#include +#include + +#define INT32MAX 0x7FFFFFFFL + +CL_NS_DEF(util) + +/** Used to indicate the current status of a Stream */ +enum StreamStatus { + Ok /**< Stream is capable of being read from */, + Eof /**< The end of the Stream has been reached */, + Error /**< An error occurred. Use error() to find out more information */ +}; + +// java mapping: long=int64, int=int32, byte=uint8_t +/** + * The base of all Streams. Do not inherit directly from this class, + * but from (an instance of) StreamBase + * + * This class contains all the non-virtual StreamBase methods + * that don't depend on a specific Stream type + * + * Developer comment: This is needed because of win32 compilation. + * When we want to access a function outside a lib, we have to export them, + * but we can't export the template class because this would be somewhat + * stupid / does not work by design :) + * Because of this I've introduced this StreamBaseBase class + */ +class StreamBaseBase { //krazy:exclude=dpointer +protected: + /** The size of the stream (-1 if unknown) */ + int64_t m_size; + /** The position of the stream */ + int64_t m_position; + /** + * @brief String representation of the last error, or + * an empty string otherwise + */ + std::string m_error; + /** The status of the stream - see StreamStatus */ + StreamStatus m_status; +public: + /** + * @brief Constructor: initialises everything to sane defaults + **/ + StreamBaseBase() :m_size(-1), m_position(0), m_status(Ok) {} + /** + * @brief Destructor + **/ + virtual ~StreamBaseBase() {} + /** + * @brief Return a string representation of the last error. + * If no error has occurred, an empty string is returned. + **/ + const char* error() const { return m_error.c_str(); } + /** + * @brief Return the status of the stream. + **/ + StreamStatus status() const { return m_status; } + /** + * @brief Get the current position in the stream. + * The value obtained from this function can be used to reset the stream. + **/ + int64_t position() const { return m_position; } + /** + * @brief Return the size of the stream. + * + * The size of the stream is always known if the end of the stream + * has been reached. In all other cases, this may return -1 to + * indicate the size of the stream is unknown. + * + * @return the size of the stream, if it is known, or -1 if the size + * of the stream is unknown + **/ + int64_t size() const { return m_size; } +}; + +/** + * @brief Base class for stream read access to a data source. + * + * This class is based on the interface java.io.InputStream. It provides + * a uniform interface for accessing streamed resources. + * + * The main difference with the Java equivalent is a performance improvement. + * When reading data, data is not copied into a buffer provided by the caller, + * but a pointer to the read data is provided. This makes this interface + * especially useful for deriving from it and implementing filters or + * transformers. + */ +template +class StreamBase : public StreamBaseBase { +public: + StreamBase() { } + virtual ~StreamBase(){} + /** + * @brief Reads items from the stream and sets @p start to point to + * the first item that was read. + * + * Note: unless stated otherwise in the documentation for that method, + * this pointer will no longer be valid after calling another method of + * this class. The pointer will also no longer be valid after the class + * is destroyed. + * + * The functions inherited from StreamBaseBase do not invalidate the pointer. + * + * At least @p min items will be read from the stream, unless an error occurs + * or the end of the stream is reached. Under no circumstances will more than + * @p max items be read. + * + * If the end of the stream is reached before @p min items are read, the + * read is still considered successful and the number of items read will + * be returned. + * + * @param start pointer passed by reference that will be set to point to + * the retrieved array of items. If the end of the stream + * is encountered or an error occurs, the value of @p start + * is undefined + * @param min the minimal number of items to read from the stream. This + * value should be larger than 0. If it is 0 or smaller, the + * result is undefined + * @param max the maximal number of items to read from the stream. + * If this value is smaller than @p min, there is no limit on + * the number of items that can be read + * @return the number of items that were read. @c -1 is returned if + * end of the stream has already been reached. @c -2 is returned + * if an error has occurred + **/ + virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0; + /** + * @brief Skip @p ntoskip items. + * + * If an error occurs, or the end of the stream is encountered, fewer + * than @p ntoskip items may be skipped. This can be checked by comparing + * the return value to @p ntoskip. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read. + * + * @param ntoskip the number of items that should be skipped + * @return the number of items skipped + **/ + virtual int64_t skip(int64_t ntoskip); + /** + * @brief Repositions this stream to a given position. + * + * A call to StreamBase::reset is only guaranteed to be successful when + * the requested position lies within the segment of a stream + * corresponding to a valid pointer obtained from StreamBase::read. + * In this case, the pointer will not be invalidated. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read unless the conditions outlined above apply. + * + * To read n items, leaving the stream at the same position as before, you + * can do the following: + * @code + * int64_t start = stream.position(); + * if ( stream.read(data, min, max) > 0 ) { + * stream.reset(start); + * // The data pointer is still valid here + * } + * @endcode + * + * @param pos the position in the stream you want to go to, relative to + * the start of the stream + * @return the new position in the stream + **/ + virtual int64_t reset(int64_t pos) = 0; +}; + + +template +int64_t +StreamBase::skip(int64_t ntoskip) { + const T* begin; + int32_t nread; + int64_t skipped = 0; + while (ntoskip > 0) { + // make sure we do not overflow uint32_t + int32_t maxstep = (int32_t)((ntoskip > 10000000) + ?10000000 :ntoskip); + // the default implementation is to simply read the data that we want + // to skip + nread = read(begin, 1, maxstep); + if (nread < -1 ) { + // an error occurred + return nread; + } else if (nread < 1) { + // the end of the stream was encountered + ntoskip = 0; + } else { + skipped += nread; + ntoskip -= nread; + } + } + return skipped; +} + +CL_NS_END + +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_streambuffer.h clucene-core-2.3.3.4/src/core/CLucene/util/_streambuffer.h --- clucene-core-0.9.21b/src/core/CLucene/util/_streambuffer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_streambuffer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,167 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Jos van den Oever +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef JSTREAM_STREAMBUFFER_H +#define JSTREAM_STREAMBUFFER_H + +#include +#include + +CL_NS_DEF(util) + +/** + * @internal + * @brief Provides a buffer for the use of BufferedStream + */ +template +class StreamBuffer { +private: +public: + /** + * @internal + * @brief Pointer to the start of the buffer. + */ + T* start; + /** + * @internal + * @brief Size of the buffer. + * + * Size of the memory pointed to by @p start, + * in multiples of sizeof(T) + */ + int32_t size; + /** + * @internal + * @brief Pointer to the current position the buffer. + */ + T* readPos; + /** + * @internal + * @brief The amount of data available in the buffer. + * + * The size of the used memory in the buffer, starting + * from @p readPos. @p readPos + @p avail must be + * greater than @p start + @p size. + */ + int32_t avail; + + /** + * @internal + * @brief Constructor: initialises members to sane defaults. + */ + StreamBuffer(); + /** + * @internal + * @brief Destructor: frees the memory used by the buffer. + */ + ~StreamBuffer(); + /** + * @internal + * @brief Sets the size of the buffer, allocating the necessary memory + * + * @param size the size that the buffer should be, in multiples + * of sizeof(T) + */ + void setSize(int32_t size); + /** + * @internal + * @brief Read data from the buffer + * + * Sets @p start to point to the data, starting + * at the item of data following the last item + * of data read. + * + * @param start pointer passed by reference. It will + * be set to point to the data read from the buffer + * @param max the maximum amount of data to read from + * the buffer + * @return the size of the data pointed to by @p start + * (always less than or equal to @p max) + */ + int32_t read(const T*& start, int32_t max=0); + + /** + * @internal + * @brief Prepares the buffer for a new write. + * + * This function invalidates any pointers + * previously obtained from read. + * + * @return the number of available places + **/ + int32_t makeSpace(int32_t needed); +}; + +template +StreamBuffer::StreamBuffer() { + readPos = start = 0; + size = avail = 0; +} +template +StreamBuffer::~StreamBuffer() { + std::free(start); +} +template +void +StreamBuffer::setSize(int32_t size) { + // store pointer information + int32_t offset = readPos - start; + + // allocate memory in the buffer + start = (T*)std::realloc(start, size*sizeof(T)); + this->size = size; + + // restore pointer information + readPos = start + offset; +} +template +int32_t +StreamBuffer::makeSpace(int32_t needed) { + // determine how much space is available for writing + int32_t space = size - (readPos - start) - avail; + if (space >= needed) { + // there's enough space + return space; + } + + if (avail) { + if (readPos != start) { +// printf("moving\n"); + // move data to the start of the buffer + std::memmove(start, readPos, avail*sizeof(T)); + space += readPos - start; + readPos = start; + } + } else { + // we may start writing at the start of the buffer + readPos = start; + space = size; + } + if (space >= needed) { + // there's enough space now + return space; + } + + // still not enough space, we have to allocate more +// printf("resize %i %i %i %i %i\n", avail, needed, space, size + needed - space, size); + setSize(size + needed - space); + return needed; +} +template +int32_t +StreamBuffer::read(const T*& start, int32_t max) { + start = readPos; + if (max <= 0 || max > avail) { + max = avail; + } + readPos += max; + avail -= max; + return max; +} + +CL_NS_END + +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/StringIntern.cpp clucene-core-2.3.3.4/src/core/CLucene/util/StringIntern.cpp --- clucene-core-0.9.21b/src/core/CLucene/util/StringIntern.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/StringIntern.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,122 @@ + /*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_StringIntern.h" +CL_NS_DEF(util) + +typedef CL_NS(util)::CLHashMap __wcsintrntype; +typedef CL_NS(util)::CLHashMap __strintrntype; +__wcsintrntype StringIntern_stringPool(true); +__strintrntype StringIntern_stringaPool(true); + +bool StringIntern_blanksinitd=false; +__wcsintrntype::iterator StringIntern_wblank; + +//STATIC_DEFINE_MUTEX(StringIntern_THIS_LOCK); +DEFINE_MUTEX(StringIntern_THIS_LOCK) + + + void CLStringIntern::_shutdown(){ + #ifdef _DEBUG + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + if ( StringIntern_stringaPool.size() > 0 ){ + printf("WARNING: stringaPool still contains intern'd strings (refcounts):\n"); + __strintrntype::iterator itr = StringIntern_stringaPool.begin(); + while ( itr != StringIntern_stringaPool.end() ){ + printf(" %s (%d)\n",(itr->first), (itr->second)); + ++itr; + } + } + + if ( StringIntern_stringPool.size() > 0 ){ + printf("WARNING: stringPool still contains intern'd strings (refcounts):\n"); + __wcsintrntype::iterator itr = StringIntern_stringPool.begin(); + while ( itr != StringIntern_stringPool.end() ){ + _tprintf(_T(" %s (%d)\n"),(itr->first), (itr->second)); + ++itr; + } + } + #endif + } + + const TCHAR* CLStringIntern::intern(const TCHAR* str){ + if ( str == NULL ) + return NULL; + if ( str[0] == 0 ) + return LUCENE_BLANK_STRING; + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __wcsintrntype::iterator itr = StringIntern_stringPool.find((TCHAR*)str); + if ( itr==StringIntern_stringPool.end() ){ + TCHAR* ret = STRDUP_TtoT(str); + StringIntern_stringPool[ret]= 1; + return ret; + }else{ + (itr->second)++; + return itr->first; + } + } + + bool CLStringIntern::unintern(const TCHAR* str){ + if ( str == NULL ) + return false; + if ( str[0] == 0 ) + return false; // warning: a possible memory leak, since str may be never freed! + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __wcsintrntype::iterator itr = StringIntern_stringPool.find((TCHAR*)str); + if ( itr != StringIntern_stringPool.end() ){ + if ( (itr->second) == 1 ){ + StringIntern_stringPool.removeitr(itr); + return true; + }else + (itr->second)--; + } + return false; + } + + const char* CLStringIntern::internA(const char* str, const int8_t count, const bool use_provided){ + if ( str == NULL ) + return NULL; + if ( str[0] == 0 ) + return _LUCENE_BLANK_ASTRING; + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __strintrntype::iterator itr = StringIntern_stringaPool.find((char*)str); + if ( itr==StringIntern_stringaPool.end() ){ + char* ret = (use_provided) ? const_cast(str) : STRDUP_AtoA(str); + StringIntern_stringaPool[ret] = count; + return ret; + }else{ + if (use_provided) _CLDELETE_LCaARRAY((char*)str); // delete the provided string if already exists + (itr->second) = (itr->second) + count; + return itr->first; + } + } + + bool CLStringIntern::uninternA(const char* str, const int8_t count){ + if ( str == NULL ) + return false; + if ( str[0] == 0 ) + return false; // warning: a possible memory leak, since str may be never freed! + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __strintrntype::iterator itr = StringIntern_stringaPool.find((char*)str); + if ( itr!=StringIntern_stringaPool.end() ){ + if ( (itr->second) == count ){ + StringIntern_stringaPool.removeitr(itr); + return true; + }else + (itr->second) = (itr->second) - count; + } + return false; + } +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_StringIntern.h clucene-core-2.3.3.4/src/core/CLucene/util/_StringIntern.h --- clucene-core-0.9.21b/src/core/CLucene/util/_StringIntern.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_StringIntern.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_StringIntern_H +#define _lucene_util_StringIntern_H + +//#include "Equators.h" +//#include "_VoidMap.h" + +CL_NS_DEF(util) + /** Functions for intern'ing strings. This + * is a process of pooling strings thus using less memory, + * and furthermore allows intern'd strings to be directly + * compared: + * string1==string2, rather than _tcscmp(string1,string2) + */ + class CLStringIntern{ + public: + + /** + * Internalise the specified string. + * \return Returns a pointer to the internalised string + */ + static const char* internA(const char* str, const int8_t count=1, const bool use_provided=false); + + /** + * Uninternalise the specified string. Decreases + * the reference count and frees the string if + * reference count is zero + * \returns true if string was destroyed, otherwise false + */ + static bool uninternA(const char* str, const int8_t count=1); + + /** + * Internalise the specified string. + * \return Returns a pointer to the internalised string + */ + static const TCHAR* intern(const TCHAR* str); + + /** + * Uninternalise the specified string. Decreases + * the reference count and frees the string if + * reference count is zero + * \returns true if string was destroyed, otherwise false + */ + static bool unintern(const TCHAR* str); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/ThreadLocal.cpp clucene-core-2.3.3.4/src/core/CLucene/util/ThreadLocal.cpp --- clucene-core-0.9.21b/src/core/CLucene/util/ThreadLocal.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/ThreadLocal.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,266 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include + +#include "CLucene/_ApiHeader.h" +#include "CLucene/LuceneThreads.h" +#include "_ThreadLocal.h" +#include "CLucene/config/_threads.h" +#include + +CL_NS_DEF ( util ) + +/* +* The concept of ThreadLocal is that a ThreadLocal class stores specific values for each unique thread. +* Several thread-end detection techniques are used to delete the thread data if the thread dies before the ThreadLocal class is shut. +* +* The class->thread data mapping is stored in the _ThreadLocal class. +* The thread->datas mapping is in ThreadData. +*/ + + +//predefine for the shared code... +#if defined(_CL_HAVE_WIN32_THREADS) + #define INIT_THREAD(ret) ret=true + extern "C"{ + + //todo: move this to StdHeader and make it usable by other functions... + bool __stdcall DllMain( unsigned short hinstDLL, // DLL module handle + _cl_dword_t fdwReason, // reason called + void*) // reserved + { + if ( fdwReason == 3 ) + _ThreadLocal::UnregisterCurrentThread(); + + return true; + } + } +#elif defined(_CL_HAVE_PTHREAD) + pthread_key_t pthread_threadlocal_key; + pthread_once_t pthread_threadlocal_key_once = PTHREAD_ONCE_INIT; + #define INIT_THREAD(ret) \ + pthread_once(&pthread_threadlocal_key_once, pthread_threadlocal_make_key); \ + if (pthread_getspecific(pthread_threadlocal_key) == NULL) { pthread_setspecific(pthread_threadlocal_key, (void*)1); } \ + ret = true; + + //the function that is called when the thread shutsdown + void pthread_threadlocal_destructor(void* /*_holder*/){ + _ThreadLocal::UnregisterCurrentThread(); + } + //the key initialiser function + void pthread_threadlocal_make_key() + { + (void) pthread_key_create(&pthread_threadlocal_key, &pthread_threadlocal_destructor); + } +#endif + +class _ThreadLocal; + +/** +* List that holds the list of ThreadLocals that this thread has data in. +*/ +class ThreadLocals : private std::set<_ThreadLocal*> +{ +public: + void UnregisterThread(); + void add(_ThreadLocal* thread); + void remove(_ThreadLocal* thread); +}; + +//map of thread<>ThreadLocals +typedef CL_NS ( util ) ::CLMultiMap<_LUCENE_THREADID_TYPE, ThreadLocals*, + CL_NS ( util ) ::CLuceneThreadIdCompare, + CL_NS ( util ) ::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS ( util ) ::Deletor::Object > ThreadDataType; +static ThreadDataType* threadData = NULL; + +#ifndef _CL_DISABLE_MULTITHREADING + //the lock for locking ThreadData + //we don't use STATIC_DEFINE_MUTEX, because then the initialization order will be undefined. + static _LUCENE_THREADMUTEX *threadData_LOCK = NULL; +#endif + + +class _ThreadLocal::Internal +{ + public: + typedef CL_NS ( util ) ::CLSet<_LUCENE_THREADID_TYPE, void*, + CL_NS ( util ) ::CLuceneThreadIdCompare, + CL_NS ( util ) ::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS ( util ) ::Deletor::ConstNullVal > LocalsType; + LocalsType locals; + DEFINE_MUTEX ( locals_LOCK ) + AbstractDeletor* _deletor; + + Internal ( AbstractDeletor* _deletor ) : + locals ( false,false ) + { + this->_deletor = _deletor; + } + ~Internal() + { + //remove all the thread local data for this object + LocalsType::iterator itr = locals.begin(); + while ( itr != locals.end() ) + { + void* val = itr->second; + locals.removeitr ( itr ); + _deletor->Delete ( val ); + itr = locals.begin(); + } + + delete _deletor; + } +}; + +_ThreadLocal::_ThreadLocal ( CL_NS ( util ) ::AbstractDeletor* _deletor ) : + _internal ( _CLNEW Internal ( _deletor ) ) +{ + +} + +_ThreadLocal::~_ThreadLocal() +{ + setNull(); + UnregisterCurrentThread(); + RemoveThreadLocal( this ); + delete _internal; +} + + +void* _ThreadLocal::get() +{ + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + return _internal->locals.get ( _LUCENE_CURRTHREADID ); +} + +void _ThreadLocal::setNull() +{ + //just delete this thread from the locals list + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + Internal::LocalsType::iterator itr = _internal->locals.find ( id ); + if ( itr != _internal->locals.end() ) + { + void* val = itr->second; + _internal->locals.removeitr ( itr ); + _internal->_deletor->Delete ( val ); + } +} + +void _ThreadLocal::set ( void* t ) +{ + if ( t == NULL ){ + setNull(); + return; + } + //make sure we have a threadlocal context (for cleanup) + bool ret; + INIT_THREAD(ret); + assert(ret); + + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + + //drop a reference to this ThreadLocal in ThreadData + { +#ifndef _CL_DISABLE_MULTITHREADING + //slightly un-usual way of initialising mutex, + //because otherwise our initialisation order would be undefined + if ( threadData_LOCK == NULL ) + threadData_LOCK = _CLNEW _LUCENE_THREADMUTEX; + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); +#endif + + if ( threadData == NULL ) + threadData = _CLNEW ThreadDataType ( false, true ); + + ThreadLocals* threadLocals = threadData->get(id); + if ( threadLocals == NULL ){ + threadLocals = _CLNEW ThreadLocals; + threadData->insert( std::pair(id,threadLocals)); + } + threadLocals->add(this); + } + + { + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + Internal::LocalsType::iterator itr = _internal->locals.find ( id ); + if ( itr != _internal->locals.end() ) + { + void* val = itr->second; + _internal->locals.removeitr ( itr ); + _internal->_deletor->Delete ( val ); + } + + if ( t != NULL ) + _internal->locals.put ( id, t ); + } + +} + +void _ThreadLocal::UnregisterCurrentThread() +{ + if ( threadData == NULL ) + return; + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); + + ThreadDataType::iterator itr = threadData->find(id); + if ( itr != threadData->end() ){ + ThreadLocals* threadLocals = itr->second; + threadLocals->UnregisterThread(); + threadData->removeitr(itr); + } +} + +void _ThreadLocal::RemoveThreadLocal( _ThreadLocal * tl ) +{ + if ( threadData == NULL ) + return; + + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); + + ThreadDataType::iterator itr = threadData->begin(); + for( ThreadDataType::iterator itr = threadData->begin(); itr != threadData->end(); itr++ ) + { + ThreadLocals* threadLocals = itr->second; + threadLocals->remove( tl ); + // Remove empty threadLocals + } +} + +void _ThreadLocal::_shutdown() +{ +#ifndef _CL_DISABLE_MULTITHREADING + _CLDELETE(threadData_LOCK); +#endif + _CLDELETE(threadData); +} + + + +void ThreadLocals::UnregisterThread() +{ + //this should only be accessed from its own thread... if this changes, then this access has to be locked. + for( ThreadLocals::iterator iTLocal = begin(); iTLocal != end(); iTLocal++ ) + (*iTLocal)->setNull(); + clear(); +} +void ThreadLocals::add(_ThreadLocal* thread) +{ + //this should only be accessed from its own thread... if this changes, then this access has to be locked. + if( end() == find( thread ) ) + insert( thread ); +} +void ThreadLocals::remove(_ThreadLocal* thread) +{ + ThreadLocals::iterator iTLocal = find( thread ); + if( iTLocal != end() ) + erase( iTLocal ); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_ThreadLocal.h clucene-core-2.3.3.4/src/core/CLucene/util/_ThreadLocal.h --- clucene-core-0.9.21b/src/core/CLucene/util/_ThreadLocal.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_ThreadLocal.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,89 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_ThreadLocal_H +#define _lucene_util_ThreadLocal_H + +CL_NS_DEF ( util ) + + +/** +* A class which holds thread specific data. Calls to get() or set() or to the data kept in the _ThreadLocal +* is invalid after _ThreadLocal has been destroyed. +*/ +class _ThreadLocal +{ + private: + class Internal; + Internal* _internal; + public: + _ThreadLocal ( CL_NS ( util ) ::AbstractDeletor* _deletor ); + void* get(); + + /** + * Call this function to clear the local thread data for this + * ThreadLocal. Calling set(NULL) does the same thing, except + * this function is virtual and can be called without knowing + * the template. + */ + void setNull(); + void set ( void* t ); + virtual ~_ThreadLocal(); + + /** + * For early cleanup of thread data, call this function. It will clear out any + * thread specific data. Useful if you have a long running thread that doesn't + * need to access clucene anymore. + * The thread local code tries to call this automatically when a thread ends. + * Some implementations may be impossible (or not implemented) to detect thread + * endings... then you would have to run this function yourself. + */ + static void UnregisterCurrentThread(); + + static void RemoveThreadLocal( _ThreadLocal * tl ); + + + /** + * Call this function to shutdown CLucene + */ + static CLUCENE_LOCAL void _shutdown(); + + /** + * A hook called when CLucene is starting or shutting down, + * this can be used for setting up and tearing down static + * variables + */ + typedef void ShutdownHook ( bool startup ); +}; + + +/** +* A templated class of _ThreadLocal +* @see _ThreadLocal +*/ +template +class ThreadLocal: public _ThreadLocal +{ + public: + ThreadLocal() : + _ThreadLocal ( _CLNEW _deletor ) + { + + } + virtual ~ThreadLocal() + { + } + T get() + { + return ( T ) _ThreadLocal::get(); + } + void set ( T t ) + { + _ThreadLocal::set ( ( T ) t ); + } +}; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_VoidList.h clucene-core-2.3.3.4/src/core/CLucene/util/_VoidList.h --- clucene-core-0.9.21b/src/core/CLucene/util/_VoidList.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_VoidList.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,19 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidsList_ +#define _lucene_util_VoidsList_ + + /*#if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Deprecated!!!==================") + #else + //#warning "==================Deprecated!!!==================" + #endif + + #include "VoidMapSetDefinitions.h"*/ + + #include "VoidList.h" +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/VoidList.h clucene-core-2.3.3.4/src/core/CLucene/util/VoidList.h --- clucene-core-0.9.21b/src/core/CLucene/util/VoidList.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/VoidList.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,186 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidList_ +#define _lucene_util_VoidList_ + +#include "Equators.h" +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(util) + +/** +* A template to encapsulate various list type classes +* @internal +*/ +template +class CLUCENE_INLINE_EXPORT __CLList:public _base,LUCENE_BASE { +private: + bool dv; +protected: + typedef _base base; +public: + typedef typename _base::const_iterator const_iterator; + typedef typename _base::iterator iterator; + + virtual ~__CLList(){ + clear(); + } + + __CLList ( const bool deleteValue ): + dv(deleteValue) + { + } + + void setDoDelete(bool val){ dv=val; } + + //sets array to the contents of this array. + //array must be size + void toArray(_kt* into) const{ + int i=0; + for ( const_iterator itr=base::begin();itr!=base::end();itr++ ){ + into[i] = *itr; + i++; + } + } + + //sets array to the contents of this array, terminating with a NULL pointer + //array must be size+1 + void toArray_nullTerminated(_kt* into) const{ + int i=0; + for ( const_iterator itr=base::begin();itr!=base::end();itr++ ){ + into[i] = *itr; + i++; + } + into[i] = NULL; + } + + void set(size_t i, _kt val) { + if ( dv && i < base::size() ) + _valueDeletor::doDelete((*this)[i]); + if ( i+1 > base::size() ) base::resize(i+1); + (*this)[i] = val; + } + + //todo: check this + void delete_back(){ + if ( base::size() > 0 ){ + iterator itr = base::end(); + if ( itr != base::begin()) + itr --; + _kt key = *itr; + base::erase(itr); + if ( dv ) + _valueDeletor::doDelete(key); + } + } + + void delete_front(){ + if ( base::size() > 0 ){ + iterator itr = base::begin(); + _kt key = *itr; + base::erase(itr); + if ( dv ) + _valueDeletor::doDelete(key); + } + } + + void clear(){ + if ( dv ){ + iterator itr = base::begin(); + while ( itr != base::end() ){ + _valueDeletor::doDelete(*itr); + ++itr; + } + } + base::clear(); + } + + void remove(size_t i, bool dontDelete=false){ + if ( i < base::size() ){ + iterator itr=base::begin(); + itr+=i; + _kt key = *itr; + base::erase( itr ); + if ( dv && !dontDelete ) + _valueDeletor::doDelete(key); + } + } + void remove(iterator itr, bool dontDelete=false){ + _kt key = *itr; + base::erase( itr ); + if ( dv && !dontDelete ) + _valueDeletor::doDelete(key); + } +}; + + + +//growable arrays of Objects (like a collection or list) +//a list, so can contain duplicates +//it grows in chunks... todo: check jlucene for initial size of array, and growfactors +template +class CLUCENE_INLINE_EXPORT CLVector:public __CLList<_kt, CL_NS_STD(vector)<_kt> , _valueDeletor> +{ +public: + CLVector ( const bool deleteValue=true ): + __CLList<_kt, CL_NS_STD(vector)<_kt> , _valueDeletor>(deleteValue) + { + } +}; + +//An array-backed implementation of the List interface +//a list, so can contain duplicates +//*** a very simple list - use +//(This class is roughly equivalent to Vector, except that it is unsynchronized.) +#define CLArrayList CLVector +#define CLHashSet CLHashList +#define CLList CLVector + +//implementation of the List interface, provides access to the first and last list elements in O(1) +//no comparator is required... and so can contain duplicates +//a simple list with no comparator +//*** a very simple list - use +#ifdef LUCENE_DISABLE_HASHING + #define CLHashList CLSetList +#else + +template +class CLUCENE_INLINE_EXPORT CLHashList:public __CLList<_kt, CL_NS_HASHING(_CL_HASH_SET)<_kt,_Comparator> , _valueDeletor> +{ +public: + CLHashList ( const bool deleteValue=true ): + __CLList<_kt, CL_NS_HASHING(_CL_HASH_SET)<_kt,_Comparator> , _valueDeletor>(deleteValue) + { + } +}; +#endif + +template +class CLUCENE_INLINE_EXPORT CLLinkedList:public __CLList<_kt, CL_NS_STD(list)<_kt> , _valueDeletor> +{ +public: + CLLinkedList ( const bool deleteValue=true ): + __CLList<_kt, CL_NS_STD(list)<_kt> , _valueDeletor>(deleteValue) + { + } +}; +template +class CLUCENE_INLINE_EXPORT CLSetList:public __CLList<_kt, CL_NS_STD(set)<_kt,_Comparator> , _valueDeletor> +{ +public: + CLSetList ( const bool deleteValue=true ): + __CLList<_kt, CL_NS_STD(set)<_kt,_Comparator> , _valueDeletor>(deleteValue) + { + } +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/_VoidMap.h clucene-core-2.3.3.4/src/core/CLucene/util/_VoidMap.h --- clucene-core-0.9.21b/src/core/CLucene/util/_VoidMap.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/_VoidMap.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,19 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidsMap_ +#define _lucene_util_VoidsMap_ + + /*#if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Deprecated!!!==================") + #else + //#warning "==================Deprecated!!!==================" + #endif + + #include "VoidMapSetDefinitions.h"*/ + + #include "VoidMap.h" +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene/util/VoidMap.h clucene-core-2.3.3.4/src/core/CLucene/util/VoidMap.h --- clucene-core-0.9.21b/src/core/CLucene/util/VoidMap.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene/util/VoidMap.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,327 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidMap_ +#define _lucene_util_VoidMap_ + +#include "Equators.h" +#include "CLucene/LuceneThreads.h" + +#if defined(_CL_HAVE_TR1_UNORDERED_MAP) && defined(_CL_HAVE_TR1_UNORDERED_SET) + #include + #include +#elif defined(_CL_HAVE_HASH_MAP) && defined(_CL_HAVE_HASH_SET) + //hashing is all or nothing! + #include + #include +#elif defined(_CL_HAVE_EXT_HASH_MAP) && defined(_CL_HAVE_EXT_HASH_SET) + #include + #include +#elif !defined(LUCENE_DISABLE_HASHING) + #define LUCENE_DISABLE_HASHING +#endif + +CL_NS_DEF(util) + +/** +* A template to encapsulate various map type classes +* @internal +*/ +template +class CLUCENE_INLINE_EXPORT __CLMap:public _base,LUCENE_BASE { +protected: + bool dk; + bool dv; + typedef _base base; +public: + typedef typename _base::iterator iterator; + typedef typename _base::const_iterator const_iterator; + typedef CL_NS_STD(pair)<_kt, _vt> _pair; + + ///Default constructor for the __CLMap + __CLMap (): + dk(true), + dv(true) + { + } + + ///Deconstructor for the __CLMap + ~__CLMap (){ + clear(); + } + + void setDeleteKey(bool val){ dk = val; } + void setDeleteValue(bool val){ dv = val; } + + ///Construct the VoidMap and set the deleteTypes to the specified values + ///\param deleteKey if true then the key variable is deleted when an object is deleted + ///\param keyDelType delete the key variable using the specified type + ///\param deleteValue if true then the value variable is deleted when an object is deleted + ///\param valueDelType delete the value variable using the specified type + /*__CLMap ( const bool deleteKey, const bool deleteValue ): + dk(deleteKey), + dv(deleteValue) + { + }*/ + + ///checks to see if the specified key exists + ///\param k the key to check for + ///\returns true if the key exists + bool exists(_kt k)const{ + const_iterator itr = base::find(k); + bool ret = itr!=base::end(); + return ret; + } + + ///using a non-const key, get a non-const value + _vt get( _kt k) const { + const_iterator itr = base::find(k); + if ( itr==base::end() ) + return (_vt)NULL; + else + return itr->second; + } + /* + ///using a non-const key, get the actual key + _kt getKey( _kt k) const { + const_iterator itr = base::find(k); + if ( itr==base::end() ) + return NULL; + else + return itr->first; + }*/ + + void removeitr (iterator itr, const bool dontDeleteKey = false, const bool dontDeleteValue = false){ + if ( itr == base::end() ) return; + + //delete key&val first. This prevents potential loops (deleting object removes itself) + _kt key = itr->first; + _vt val = itr->second; + base::erase(itr); + + //keys & vals need to be deleted after erase, because the hashvalue is still needed + if ( dk && !dontDeleteKey ) + _KeyDeletor::doDelete(key); + if ( dv && !dontDeleteValue ) + _ValueDeletor::doDelete(val); + } + ///delete and optionally delete the specified key and associated value + void remove(_kt key, const bool dontDeleteKey = false, const bool dontDeleteValue = false){ + iterator itr = base::find(key); + if ( itr!=base::end() ) + removeitr(itr,dontDeleteKey,dontDeleteValue); + } + + ///clear all keys and values in the map + void clear(){ + if ( dk || dv ){ + iterator itr = base::begin(); + while ( itr!=base::end() ){ + #ifdef _CL_HAVE_EXT_HASH_MAP + removeitr(itr); + itr = base::begin(); + + #else + if ( dk ) + _KeyDeletor::doDelete(itr->first); + if ( dv ) + _ValueDeletor::doDelete(itr->second); + ++itr; + + #endif + } + } + base::clear(); + } +}; + +// makes no guarantees as to the order of the map +// cannot contain duplicate keys; each key can map to at most one value +#define CLHashtable CLHashMap + +#if defined(LUCENE_DISABLE_HASHING) + + //a CLSet with CLHashMap traits +template +class CLUCENE_INLINE_EXPORT CLHashMap:public __CLMap<_kt,_vt, + CL_NS_STD(map)<_kt,_vt, _Compare>, + _KeyDeletor,_ValueDeletor> +{ + typedef typename CL_NS_STD(map)<_kt,_vt,_Compare> _base; + typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, _Compare>, + _KeyDeletor,_ValueDeletor> _this; +public: + CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) + { + _this::setDeleteKey(deleteKey); + _this::setDeleteValue(deleteValue); + } + + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual void put(_kt k,_vt v){ + //todo: check if this is always right! + //must should look through code, for + //cases where map is not unique!!! + if ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; +#elif defined(_CL_HAVE_EXT_HASH_MAP) + //ext/hash_map syntax +//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized +template +class CLUCENE_INLINE_EXPORT CLHashMap:public __CLMap<_kt,_vt, + CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher,_Equals>, + _KeyDeletor,_ValueDeletor> +{ + typedef __CLMap<_kt,_vt, CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher,_Equals>, + _KeyDeletor,_ValueDeletor> _this; +public: + CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) + { + _this::setDeleteKey(deleteKey); + _this::setDeleteValue(deleteValue); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual void put(_kt k,_vt v){ + //todo: check if this is always right! + //must should look through code, for + //cases where map is not unique!!! + if ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; + +#elif defined(_CL_HAVE_HASH_MAP) + +//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized +template +class CLUCENE_INLINE_EXPORT CLHashMap:public __CLMap<_kt,_vt, + CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher>, + _KeyDeletor,_ValueDeletor> +{ + typedef __CLMap<_kt,_vt, CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher>, + _KeyDeletor,_ValueDeletor> _this; +public: + CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) + { + _this::setDeleteKey(deleteKey); + _this::setDeleteValue(deleteValue); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual void put(_kt k,_vt v){ + //todo: check if this is always right! + //must should look through code, for + //cases where map is not unique!!! + if ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; +#endif + +//A collection that contains no duplicates +//does not guarantee that the order will remain constant over time +template +class CLUCENE_INLINE_EXPORT CLSet:public __CLMap<_kt,_vt, + CL_NS_STD(map)<_kt,_vt, _Compare>, + _KeyDeletor,_ValueDeletor> +{ + typedef typename CL_NS_STD(map)<_kt,_vt,_Compare> _base; + typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, _Compare>, + _KeyDeletor,_ValueDeletor> _this; +public: + CLSet ( const bool deleteKey=false, const bool deleteValue=false ) + { + _this::setDeleteKey(deleteKey); + _this::setDeleteValue(deleteValue); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual void put(_kt k,_vt v){ + //todo: check if this is always right! + //must should look through code, for + //cases where map is not unique!!! + if ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; + + +//A collection that can contains duplicates +template +class CLUCENE_INLINE_EXPORT CLMultiMap:public __CLMap<_kt,_vt, + CL_NS_STD(multimap)<_kt,_vt>, + _KeyDeletor,_ValueDeletor> +{ + typedef typename CL_NS_STD(multimap)<_kt,_vt> _base; + typedef __CLMap<_kt, _vt, CL_NS_STD(multimap)<_kt,_vt>, + _KeyDeletor,_ValueDeletor> _this; +public: + CLMultiMap ( const bool deleteKey=false, const bool deleteValue=false ) + { + _this::setDeleteKey(deleteKey); + _this::setDeleteValue(deleteValue); + } + + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + void put(_kt k,_vt v){ + //todo: check if this is always right! + //must should look through code, for + //cases where map is not unique!!! + if ( _this::dk || _this::dv ) + _this::remove(k); + + } +}; + + +//*** need to create a class that allows duplicates - use +//#define CLSet __CLMap +CL_NS_END + +#endif diff -Nru clucene-core-0.9.21b/src/core/CLucene.h clucene-core-2.3.3.4/src/core/CLucene.h --- clucene-core-0.9.21b/src/core/CLucene.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CLucene.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,46 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +//Includes some standard headers for searching and indexing. +#ifndef _lucene_CLucene_ +#define _lucene_CLucene_ + +#include "CLucene/StdHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/IndexWriter.h" +#include "CLucene/index/MultiReader.h" +#include "CLucene/index/Term.h" +#include "CLucene/search/IndexSearcher.h" +#include "CLucene/search/MultiSearcher.h" +#include "CLucene/search/DateFilter.h" +#include "CLucene/search/WildcardQuery.h" +#include "CLucene/search/FuzzyQuery.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/PrefixQuery.h" +#include "CLucene/search/RangeQuery.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/TermQuery.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Sort.h" +#include "CLucene/search/Hits.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +#include "CLucene/document/DateField.h" +#include "CLucene/document/DateTools.h" +#include "CLucene/document/NumberTools.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/store/RAMDirectory.h" +#include "CLucene/queryParser/QueryParser.h" +#include "CLucene/analysis/standard/StandardAnalyzer.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/PriorityQueue.h" + +#endif diff -Nru clucene-core-0.9.21b/src/core/CMakeLists.txt clucene-core-2.3.3.4/src/core/CMakeLists.txt --- clucene-core-0.9.21b/src/core/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,286 @@ +PROJECT(clucene-core) +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${clucene-shared_SOURCE_DIR}/cmake") + +#define command line options +INCLUDE (DefineOptions) +DEFINE_OPTIONS(EXTRA_OPTIONS EXTRA_LIBS) +ADD_DEFINITIONS(${EXTRA_OPTIONS} -DMAKE_CLUCENE_CORE_LIB) + +#see if we can hide all symbols by default... +MACRO_CHECK_GCC_VISIBILITY(_CL_HAVE_GCCVISIBILITYPATCH) + +#add the files to our groups and core +SOURCE_GROUP("analysis" ./CLucene/analysis/*) +#seems to be a bug in cmake, can't put these in analysis\\standard folder :( +SOURCE_GROUP("analysis-standard" ./CLucene/analysis/standard/*) +SOURCE_GROUP("document" ./CLucene/document/*) +SOURCE_GROUP("debug" ./CLucene/debug/*) +SOURCE_GROUP("index" ./CLucene/index/*) +SOURCE_GROUP("queryParser" ./CLucene/queryParser/*) +SOURCE_GROUP("queryParser-legacy" ./CLucene/queryParser/legacy/*) +SOURCE_GROUP("search" ./CLucene/search/*) +SOURCE_GROUP("search-spans" ./CLucene/search/spans/*) +SOURCE_GROUP("store" ./CLucene/store/*) +SOURCE_GROUP("util" ./CLucene/util/*) + +SET(clucene_core_Files + ./CLucene/StdHeader.cpp + ./CLucene/debug/error.cpp + ./CLucene/util/ThreadLocal.cpp + ./CLucene/util/Reader.cpp + ./CLucene/util/Equators.cpp + ./CLucene/util/FastCharStream.cpp + ./CLucene/util/MD5Digester.cpp + ./CLucene/util/StringIntern.cpp + ./CLucene/util/BitSet.cpp + ./CLucene/queryParser/FastCharStream.cpp + ./CLucene/queryParser/MultiFieldQueryParser.cpp + ./CLucene/queryParser/QueryParser.cpp + ./CLucene/queryParser/QueryParserTokenManager.cpp + ./CLucene/queryParser/QueryToken.cpp + ./CLucene/queryParser/legacy/Lexer.cpp + ./CLucene/queryParser/legacy/MultiFieldQueryParser.cpp + ./CLucene/queryParser/legacy/QueryParser.cpp + ./CLucene/queryParser/legacy/QueryParserBase.cpp + ./CLucene/queryParser/legacy/QueryToken.cpp + ./CLucene/queryParser/legacy/TokenList.cpp + ./CLucene/analysis/standard/StandardAnalyzer.cpp + ./CLucene/analysis/standard/StandardFilter.cpp + ./CLucene/analysis/standard/StandardTokenizer.cpp + ./CLucene/analysis/Analyzers.cpp + ./CLucene/analysis/AnalysisHeader.cpp + ./CLucene/store/MMapInput.cpp + ./CLucene/store/IndexInput.cpp + ./CLucene/store/Lock.cpp + ./CLucene/store/LockFactory.cpp + ./CLucene/store/IndexOutput.cpp + ./CLucene/store/Directory.cpp + ./CLucene/store/FSDirectory.cpp + ./CLucene/store/RAMDirectory.cpp + ./CLucene/document/Document.cpp + ./CLucene/document/DateField.cpp + ./CLucene/document/DateTools.cpp + ./CLucene/document/Field.cpp + ./CLucene/document/FieldSelector.cpp + ./CLucene/document/NumberTools.cpp + ./CLucene/index/IndexFileNames.cpp + ./CLucene/index/IndexFileNameFilter.cpp + ./CLucene/index/IndexDeletionPolicy.cpp + ./CLucene/index/SegmentMergeInfo.cpp + ./CLucene/index/SegmentInfos.cpp + ./CLucene/index/MergeScheduler.cpp + ./CLucene/index/SegmentTermDocs.cpp + ./CLucene/index/FieldsWriter.cpp + ./CLucene/index/TermInfosWriter.cpp + ./CLucene/index/Term.cpp + ./CLucene/index/Terms.cpp + ./CLucene/index/MergePolicy.cpp + ./CLucene/index/DocumentsWriter.cpp + ./CLucene/index/DocumentsWriterThreadState.cpp + ./CLucene/index/SegmentTermVector.cpp + ./CLucene/index/TermVectorReader.cpp + ./CLucene/index/FieldInfos.cpp + ./CLucene/index/CompoundFile.cpp + ./CLucene/index/SkipListReader.cpp + ./CLucene/index/SkipListWriter.cpp + ./CLucene/index/IndexFileDeleter.cpp + ./CLucene/index/SegmentReader.cpp + ./CLucene/index/DirectoryIndexReader.cpp + ./CLucene/index/TermVectorWriter.cpp + ./CLucene/index/IndexReader.cpp + ./CLucene/index/SegmentTermPositions.cpp + ./CLucene/index/SegmentMerger.cpp + ./CLucene/index/IndexWriter.cpp + ./CLucene/index/MultiReader.cpp + ./CLucene/index/MultiSegmentReader.cpp + ./CLucene/index/Payload.cpp + ./CLucene/index/SegmentTermEnum.cpp + ./CLucene/index/TermInfo.cpp + ./CLucene/index/IndexModifier.cpp + ./CLucene/index/SegmentMergeQueue.cpp + ./CLucene/index/FieldsReader.cpp + ./CLucene/index/TermInfosReader.cpp + ./CLucene/index/MultipleTermPositions.cpp + ./CLucene/search/Compare.cpp + ./CLucene/search/Scorer.cpp + ./CLucene/search/ScorerDocQueue.cpp + ./CLucene/search/PhraseScorer.cpp + ./CLucene/search/SloppyPhraseScorer.cpp + ./CLucene/search/DisjunctionSumScorer.cpp + ./CLucene/search/ConjunctionScorer.cpp + ./CLucene/search/PhraseQuery.cpp + ./CLucene/search/PrefixQuery.cpp + ./CLucene/search/ExactPhraseScorer.cpp + ./CLucene/search/TermScorer.cpp + ./CLucene/search/Similarity.cpp + ./CLucene/search/BooleanScorer.cpp + ./CLucene/search/BooleanScorer2.cpp + ./CLucene/search/HitQueue.cpp + ./CLucene/search/FieldCacheImpl.cpp + ./CLucene/search/ChainedFilter.cpp + ./CLucene/search/RangeFilter.cpp + ./CLucene/search/CachingWrapperFilter.cpp + ./CLucene/search/QueryFilter.cpp + ./CLucene/search/TermQuery.cpp + ./CLucene/search/FuzzyQuery.cpp + ./CLucene/search/SearchHeader.cpp + ./CLucene/search/RangeQuery.cpp + ./CLucene/search/IndexSearcher.cpp + ./CLucene/search/Sort.cpp + ./CLucene/search/PhrasePositions.cpp + ./CLucene/search/FieldDocSortedHitQueue.cpp + ./CLucene/search/WildcardTermEnum.cpp + ./CLucene/search/MultiSearcher.cpp + ./CLucene/search/Hits.cpp + ./CLucene/search/MultiTermQuery.cpp + ./CLucene/search/FilteredTermEnum.cpp + ./CLucene/search/FieldSortedHitQueue.cpp + ./CLucene/search/WildcardQuery.cpp + ./CLucene/search/Explanation.cpp + ./CLucene/search/BooleanQuery.cpp + ./CLucene/search/FieldCache.cpp + ./CLucene/search/DateFilter.cpp + ./CLucene/search/MatchAllDocsQuery.cpp + ./CLucene/search/MultiPhraseQuery.cpp + ./CLucene/search/ConstantScoreQuery.cpp + ./CLucene/search/CachingSpanFilter.cpp + ./CLucene/search/CachingSpanFilter.h + ./CLucene/search/SpanFilter.h + ./CLucene/search/SpanFilterResult.h + ./CLucene/search/SpanQueryFilter.cpp + ./CLucene/search/SpanQueryFilter.h + ./CLucene/search/spans/_EmptySpans.h + ./CLucene/search/spans/_NearSpansOrdered.h + ./CLucene/search/spans/_NearSpansUnordered.h + ./CLucene/search/spans/_TermSpans.h + ./CLucene/search/spans/NearSpansOrdered.cpp + ./CLucene/search/spans/NearSpansUnordered.cpp + ./CLucene/search/spans/SpanFirstQuery.cpp + ./CLucene/search/spans/SpanFirstQuery.h + ./CLucene/search/spans/SpanNearQuery.cpp + ./CLucene/search/spans/SpanNearQuery.h + ./CLucene/search/spans/SpanNotQuery.cpp + ./CLucene/search/spans/SpanNotQuery.h + ./CLucene/search/spans/SpanOrQuery.cpp + ./CLucene/search/spans/SpanOrQuery.h + ./CLucene/search/spans/SpanQuery.h + ./CLucene/search/spans/Spans.h + ./CLucene/search/spans/SpanScorer.cpp + ./CLucene/search/spans/SpanScorer.h + ./CLucene/search/spans/SpanTermQuery.cpp + ./CLucene/search/spans/SpanTermQuery.h + ./CLucene/search/spans/SpanWeight.cpp + ./CLucene/search/spans/SpanWeight.h + ./CLucene/search/spans/TermSpans.cpp +) + +#if USE_SHARED_OBJECT_FILES then we link directly to the object files (means rebuilding them for the core) +IF ( USE_SHARED_OBJECT_FILES ) + GET_SHARED_FILES(clucene_shared_Files) +ENDIF ( USE_SHARED_OBJECT_FILES ) + +#find our headers +file(GLOB_RECURSE HEADERS ${clucene-core_SOURCE_DIR}/*.h) + + +#create the libraries +INCLUDE_DIRECTORIES( ${clucene_SOURCE_DIR}/src/core ) + +add_library(clucene-core SHARED + ${clucene_core_Files} ${clucene_shared_Files} ${HEADERS} +) + +#set properties on the libraries +SET_TARGET_PROPERTIES(clucene-core PROPERTIES + VERSION ${CLUCENE_VERSION} + SOVERSION ${CLUCENE_SOVERSION} + COMPILE_DEFINITIONS_DEBUG _DEBUG +) + +#link the clucene-core library against the releavent clucene-shared library (if we aren't using the object files) +IF ( NOT USE_SHARED_OBJECT_FILES ) + TARGET_LINK_LIBRARIES(clucene-core clucene-shared ${EXTRA_LIBS}) +ENDIF ( NOT USE_SHARED_OBJECT_FILES ) + + +IF ( BUILD_STATIC_LIBRARIES ) + add_library(clucene-core-static STATIC + ${clucene_core_Files} ${clucene_shared_Files} ${HEADERS} + ) + + SET_TARGET_PROPERTIES(clucene-core-static PROPERTIES + VERSION ${CLUCENE_VERSION} + SOVERSION ${CLUCENE_SOVERSION} + COMPILE_DEFINITIONS_DEBUG _DEBUG + ) + + #and install library + install(TARGETS clucene-core-static + DESTINATION ${LIB_DESTINATION} + COMPONENT runtime ) +ENDIF ( BUILD_STATIC_LIBRARIES ) + +#install public headers. +FOREACH(file ${HEADERS}) + get_filename_component(apath ${file} PATH) + get_filename_component(aname ${file} NAME) + file(RELATIVE_PATH relpath ${CMAKE_SOURCE_DIR}/src/core ${apath}) + IF ( NOT aname MATCHES "^_.*" ) + install(FILES ${file} + DESTINATION include/${relpath} + COMPONENT development) + ENDIF ( NOT aname MATCHES "^_.*" ) +ENDFOREACH(file) + +#install clucene-shared headers. +install(FILES ${clucene-shared_SOURCE_DIR}/CLucene/SharedHeader.h + DESTINATION include/CLucene + COMPONENT development) +install(FILES ${clucene-shared_SOURCE_DIR}/CLucene/LuceneThreads.h + DESTINATION include/CLucene + COMPONENT development ) + +# code for installing an script to help cmake applications determine +# the CLucene version number +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CLuceneConfig.cmake" " + set(CLUCENE_VERSION_MAJOR ${CLUCENE_VERSION_MAJOR}) + set(CLUCENE_VERSION_MINOR ${CLUCENE_VERSION_MINOR}) + set(CLUCENE_VERSION_REVISION ${CLUCENE_VERSION_REVISION}) + set(CLUCENE_VERSION_PATCH ${CLUCENE_VERSION_PATCH}) + + set(CLUCENE_VERSION ${CLUCENE_VERSION}) + set(CLUCENE_SOVERSION ${CLUCENE_SOVERSION}) +") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/CLuceneConfig.cmake" + DESTINATION ${LIB_DESTINATION}/CLuceneConfig.cmake) + +# install pkg-config file +IF(NOT WIN32) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libclucene-core.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libclucene-core.pc @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libclucene-core.pc + DESTINATION ${LIB_DESTINATION}/pkgconfig ) +ENDIF(NOT WIN32) + + +#install non system-independent +IF ( LUCENE_SYS_INCLUDES ) + install(FILES ${clucene-shared_BINARY_DIR}/CLucene/clucene-config.h + DESTINATION ${LUCENE_SYS_INCLUDES}/CLucene + COMPONENT development) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CLuceneConfig.cmake + DESTINATION ${LUCENE_SYS_INCLUDES}/CLucene + COMPONENT development) +ELSE ( LUCENE_SYS_INCLUDES ) + install(FILES ${clucene-shared_BINARY_DIR}/CLucene/clucene-config.h + DESTINATION include/CLucene + COMPONENT development) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CLuceneConfig.cmake + DESTINATION include/CLucene + COMPONENT development) +ENDIF ( LUCENE_SYS_INCLUDES ) + + +#and install library +install(TARGETS clucene-core + DESTINATION ${LIB_DESTINATION} + COMPONENT runtime ) diff -Nru clucene-core-0.9.21b/src/core/files_list.txt clucene-core-2.3.3.4/src/core/files_list.txt --- clucene-core-0.9.21b/src/core/files_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/files_list.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,314 @@ +Lucene 2.3.2 Files: +--------------- + +DONE ISH analysis\Analyzer.java - Needs testing of mem-leaks caused by the reusableTokenStream interface. See http://permalink.gmane.org/gmane.comp.jakarta.lucene.clucene.devel/3359. Currently all class-specific data is being released on its destructor, and the Tokenizer is never being released by the Analyzer. +? analysis\CachingTokenFilter.java +? analysis\CharArraySet.java +? analysis\CharTokenizer.java +? analysis\ISOLatin1AccentFilter.java +? analysis\KeywordTokenizer.java +? analysis\LetterTokenizer.java +? analysis\LowerCaseFilter.java +? analysis\LowerCaseTokenizer.java +? analysis\SinkTokenizer.java +? analysis\standard\StandardAnalyzer.java +? analysis\standard\StandardFilter.java +? analysis\standard\StandardTokenizer.java +? analysis\standard\StandardTokenizerImpl.java +? analysis\standard\StandardTokenizerImpl.jflex +DONE ISH analysis\StopAnalyzer.java - reusableTokenStream and StopAnalyzer(Set stopWords) were not implemented. May need to revisit reusableTokenStream() +? analysis\TeeTokenFilter.java +? analysis\Token.java +? analysis\TokenFilter.java +DONE ISH analysis\TokenStream.java - Should we keep next() deprecated for performance reasons, or comply with JL? Also, check to see if reset() is required here at all, or can be defined for Tokenizer only (one level above) +DONE ISH analysis\WhitespaceTokenizer.java +DONE ISH analysis\WordlistLoader.java - Missing getStemDict +DONE ISH document\DateTools.java - TODO: Create a test suite for this based on values tested with Java Lucene + + + +DONE ISH queryParser\MultiFieldQueryParser.java - Some tests are missing +DONE ISH queryParser\QueryParser.java - Missing Locale and Calendar support (for RangeQuery) and some tests. _tcstod. +IRRELEVANT queryParser\QueryParser.jj +DONE ISH queryParser\QueryParserConstants.java +DONE ISH queryParser\QueryParserTokenManager.java - PrintStream implementation is missing (if at all necessary) +DONE ISH queryParser\Token.java - If LUCENE_TOKEN_WORD_LENGTH is still necessary, it needs to be implemented in the new code, and have tests written to make sure it works flawlessly with the new QP. Currently it's half implemented. +DONE ISH queryParser\TokenMgrError.java - Integrated within QueryParserTokenManager as functions + +? search\BooleanScorer.java +? search\DisjunctionMaxQuery.java - new file, not ported yet +? search\ExtendedFieldCache.java +? search\ExtendedFieldCacheImpl.java +? search\FieldCache.java +? search\FieldCacheImpl.java +? search\FieldDoc.java +? search\FieldDocSortedHitQueue.java +? search\FieldSortedHitQueue.java +? search\FilteredQuery.java +DONE ISH search\FilteredTermEnum.java - Can we mend term(void) and term(bool) ? +? search\FilterManager.java +DONE ISH search\FuzzyQuery.java - See TODOs. +DONE ISH search\FuzzyTermEnum.java - See TODOs. Also, Old similarity code is commented out and marked as "legacy". It looks like some optimizations were made there, but since Fuzzy queries weren't working as they should we had to revert to Java's implementation. Perhaps after tests are complete we could try and get the optimized version to work again. +? search\Hit.java +? search\HitIterator.java +DONE ISH search\Hits.java - Needs rethinking of why Query* is used instead of Weight* +PARTIAL search\IndexSearcher.java - Almost no difference. See todo and complete comparison between JL and CL. +? search\MultiSearcher.java +? search\PhrasePositions.java +? search\QueryFilter.java +? search\QueryTermVector.java +? search\QueryWrapperFilter.java +? search\RemoteSearchable.java +? search\Searchable.java - Any idea why the explain() function in Searchable and derived differs from Java (accepts Query* instead of Weight*)? can we safely confrom with Java now? +? search\Similarity.java +? search\SimilarityDelegator.java +DONE ISH search\TermQuery.java - Missing implementation for extractTerms(Set) +? search\TopDocCollector.java +? search\TopFieldDocCollector.java + +PARTIAL JW store\NativeFSLockFactory.java - 1 class implemented as FSLockFactory +PARTIAL JW store\SimpleFSLockFactory.java - 1 class implemented as FSLockFactory +? store\VerifyingLockFactory.java + +? util\ScorerDocQueue.java + +Pending: waiting on other things... +DONE ISH search\Filter.java - Remove virtual toString once CachingWrapperFilter and ChainedFilter (does not exist in JL?) conform to JL. Missing equals() and hashCode() virtual functions, hence all derived miss this as well. +PARTIAL ISH search\RangeFilter.java - Missing hashCode() and equals() -- see comment on Filter. Needs testing for bits() and toString(). + +Finished except a few functions: +DONE ISH search\PhraseQuery.java - extractTerms(Set) was never ported (probably not needed). Inconsitency in return value of getPositions getTerms. +DONE ISH search\Query.java - Missing implementation for extractTerms(Set terms) +DONE ISH search\MultiTermQuery.java - hashcode and equals were never ported +DONE ISH search\MatchAllDocsQuery.java - MatchAllDocsWeight::explain needs to support ComplexExplanation in order to set "match", plus we might want to reconsider returning void instead of Explanation* in Weight::explain an derived +DONE ISH search\MultiPhraseQuery.java - Complete TODOs (2 unported functions, test hashCode(), clone(), and decide on memory contract for rewrite) +DONE ISH index\SegmentTermPositions.java - getPayload is still incomplete +DONE ISH search\ConstantScoreQuery.java - See TODOs +DONE ISH search\ConstantScoreRangeQuery.java - See TODOs + +CMake: +Check todos in (_)clucene-config.h.cmake. Some checks arent being done yet. +for example: _CL_HAVE_PTHREAD_MUTEX_RECURSIVE +get rid of Misc.h, repl_* +check up on sub-folders bug (analysis/standard) +MapViewOfFile issues (cmake not picking up functions in kernel32) +Use safe CRT where possible. For example, make _tcsdup / stringDuplicate require n and call the _s version if cmake realizes it exists + +Misc TODOs: + + + + + + + +Post v1 Final: +DONE ISH analysis\StopFilter.java - Should we implement a CharArraySet or similar? Radix/PATRICIA maybe? +DONE ISH analysis\TokenStream.java - Should we keep next() deprecated for performance reasons, or comply with JL? (ben: for me, it's fine as it is now) Also, check to see if reset() is required here at all, or can be defined for Tokenizer only (one level above) +DONE ISH analysis\WordlistLoader.java - Missing getStemDict +DONE ISH document\DateTools.java - TODO: Create a test suite for this based on values tested with Java Lucene +PARTIAL ISH/BEN index\SegmentInfos.java - Still requires some testing of the sub-classes under SegmentInfos used for the retry mechanism, the write function (only after reading totally conforms with JL) + +? search\CachingSpanFilter.java +? search\CachingWrapperFilter.java +? index\SortedTermVectorMapper.java -alt +? index\TermVectorEntryFreqSortedComparator.java -alt +? index\PositionBasedTermVectorMapper.java -alt +? index\CheckIndex.java +DONE BEN search\BooleanScorer2.java +? search\SpanFilter.java +? search\SpanFilterResult.java +? search\SpanQueryFilter.java +? search\spans\NearSpansOrdered.java +? search\spans\NearSpansUnordered.java +? search\spans\SpanFirstQuery.java +? search\spans\SpanNearQuery.java +? search\spans\SpanNotQuery.java +? search\spans\SpanOrQuery.java +? search\spans\SpanQuery.java +? search\spans\Spans.java +? search\spans\SpanScorer.java +? search\spans\SpanTermQuery.java +? search\spans\SpanWeight.java +? search\spans\TermSpans.java +? search\function\ByteFieldSource.java +? search\function\CustomScoreQuery.java +? search\function\DocValues.java +? search\function\FieldCacheSource.java +? search\function\FieldScoreQuery.java +? search\function\FloatFieldSource.java +? search\function\IntFieldSource.java +? search\function\OrdFieldSource.java +? search\function\ReverseOrdFieldSource.java +? search\function\ShortFieldSource.java +? search\function\ValueSource.java +? search\function\ValueSourceQuery.java +? index\ConcurrentMergeScheduler.java +? index\SnapshotDeletionPolicy.java +? index\ParallelReader.java +? store\LockStressTest.java +? store\LockVerifyServer.java +? search\ParallelMultiSearcher.java +? search\payloads\BoostingTermQuery.java +? search\RemoteCachingWrapperFilter.java + + + + + + + +"Archived" +DONE ISH document\Fieldable.java - Merged into Field +DONE ISH document\FieldSelector.java +DONE ISH document\FieldSelectorResult.java +DONE ISH document\LoadFirstFieldSelector.java +DONE ISH document\NumberTools.java +DONE BEN document\MapFieldSelector.java +DONE BEN document\SetBasedFieldSelector.java (Irrelevent, actually, we achive both in MapFieldSelector) +DONE ISH document\Document.java - All Fieldable mentiones were kept Field*. +DONE ISH document\Field.java - Still need to complete all TODOs in file + +DONE ISH queryParser\ParseException.java - Done, integrated within QueryParser as functions (no special Exception class required) + +DONE ISH/BEN index\TermInfosReader.java +DONE ISH index\FieldsReader.java +DONE BEN index\FieldsWriter.java +DONE ISH index\TermVectorMapper.java +DONE ISH index\TermVectorOffsetInfo.java +DONE ISH index\TermVectorsReader.java +DONE ISH/BEN index\SegmentInfo.java +DONE BEN index\StaleReaderException.java +DONE BEN index\TermBuffer.java (actually, not nessary, Term has the same functionality) +DONE BEN index\TermInfosWriter.java +DONE ISH index\FieldInfo.java +DONE ISH index\SegmentMergeInfo.java +DONE ISH index\SegmentMergeQueue.java +DONE ISH index\SegmentTermVector.java +DONE ISH index\Term.java +DONE ISH index\TermDocs.java +DONE ISH index\TermEnum.java +DONE ISH index\TermFreqVector.java +DONE ISH index\TermInfo.java +DONE ISH index\TermPositions.java +DONE ISH index\TermPositionVector.java +IRRELEVANT LucenePackage.java +DONE ISH queryParser\CharStream.java +DONE ISH queryParser\FastCharStream.java +DONE ISH index\CompoundFileReader.java +DONE BEN index\CompoundFileWriter.java +DONE BEN index\CorruptIndexException.java +DONE ISH index\DefaultSkipListReader.java +DONE BEN index\DefaultSkipListWriter.java +DONE BEN index\DirectoryIndexReader.java +DONE BEN index\DocumentsWriter.java +DONE ISH index\FieldInfos.java +DONE BEN index\FieldReaderException.java +DONE ISH index\FieldSortedTermVectorMapper.java +DONE ISH index\FilterIndexReader.java +DONE BEN index\IndexCommitPoint.java +DONE BEN index\IndexDeletionPolicy.java +DONE BEN index\IndexFileDeleter.java +DONE BEN index\IndexFileNameFilter.java +DONE JW index\IndexFileNames.java +DONE BEN index\IndexModifier.java +DONE BEN index\IndexReader.java +DONE BEN index\IndexWriter.java +DONE BEN index\KeepOnlyLastCommitDeletionPolicy.java +DONE BEN index\LogByteSizeMergePolicy.java +DONE BEN index\LogDocMergePolicy.java +DONE BEN index\LogMergePolicy.java +DONE BEN index\MergePolicy.java +DONE BEN index\MergeScheduler.java +DONE ISH index\MultiLevelSkipListReader.java +DONE BEN index\MultiLevelSkipListWriter.java +DONE BEN index\MultiReader.java +DONE BEN index\MultiSegmentReader.java +DONE ISH index\Payload.java +DONE BEN index\SegmentMerger.java +DONE BEN index\SegmentReader.java +DONE BEN index\SegmentTermDocs.java +DONE BEN index\SegmentTermEnum.java +DONE ISH index\SegmentTermPositionVector.java +DONE BEN index\SerialMergeScheduler.java +DONE BEN index\TermVectorEntry.java +DONE BEN index\TermVectorsWriter.java + + +DONE ISH/BEN index\MultipleTermPositions.java +DONE BEN search\BooleanQuery.java +DONE BEN search\DefaultSimilarity.java +DONE BEN search\ConjunctionScorer.java +DONE ISH search\SloppyPhraseScorer.java +DONE ISH search\ExactPhraseScorer.java +DONE BEN search\NonMatchingScorer.java - This class is under BooleanScorer2 - should this ever be used anywhere else in the namespace it's going to be a problem. Perhaps we should move it now already outside to the namespace scope? +DONE BEN search\ReqExclScorer.java - This class is under BooleanScorer2 - should this ever be used anywhere else in the namespace it's going to be a problem. Perhaps we should move it now already outside to the namespace scope? +DONE BEN search\ReqOptSumScorer.java - This class is under BooleanScorer2 - should this ever be used anywhere else in the namespace it's going to be a problem. Perhaps we should move it now already outside to the namespace scope? +DONE BEN search\PhraseQueue.java +DONE ISH search\PhraseScorer.java +DONE ISH search\DisjunctionSumScorer.java +DONE ISH search\ComplexExplanation.java +DONE BEN search\HitQueue.java - no changes +DONE BEN search\Weight.java +DONE BEN search\TopDocs.java +DONE ISH search\PrefixQuery.java +DONE BEN search\RangeQuery.java +DONE ISH search\ScoreDocComparator.java +DONE ISH search\Scorer.java +DONE BEN search\Searcher.java - no changes +DONE BEN search\SortComparator.java +DONE BEN search\SortComparatorSource.java +DONE BEN search\TopFieldDocs.java - no changes +DONE BEN search\WildcardQuery.java +DONE BEN search\WildcardTermEnum.java - no changes +DONE ISH search\BooleanClause.java - Should we change the flags in Occur to be named with an OCCUR_ prefix, since they're being used as BooleanClause::SHOULD all throughout the code? +BEN DONE search\PrefixFilter.java - all done +BEN DONE search\SortField.java +BEN DONE search\Sort.java +BEN DONE search\TermScorer.java +DONE ISH search\Explanation.java - Why can't we use TCHAR* for description? +DONE ISH search\ScoreDoc.java - Implemented. Java Lucene has a constructor for it, we don't. +DONE ISH search\HitCollector.java - No changes, abstract class + + +IRRELEVANT analysis\PorterStemFilter.java - deprecated +IRRELEVANT analysis\PorterStemmer.java - deprecated +DONE ISH analysis\WhitespaceAnalyzer.java +DONE ISH analysis\PerFieldAnalyzerWrapper.java - toString() not yet implemented +DONE ISH analysis\LengthFilter.java +DONE ISH analysis\KeywordAnalyzer.java +DONE ISH analysis\SimpleAnalyzer.java +DONE ISH analysis\Tokenizer.java -- Should we delete input on destructor and close? perhaps allow this through an optional parameter? + +DONE ISH store\IndexInput.java - Clone method implemented as constructor only +IRRELEVANT store\AlreadyClosedException.java - Using CL_ERR_IllegalState for this +DONE JW store\Directory.java +DONE JW store\FSDirectory.java +DONE JW store\NoLockFactory.java +DONE JW store\RAMDirectory.java +DONE JW store\RAMFile.java +DONE JW store\RAMInputStream.java +DONE JW store\RAMOutputStream.java +DONE ISH store\IndexOutput.java +DONE JW store\Lock.java +DONE JW store\LockFactory.java +IRRELEVANT store\LockObtainFailedException.java +IRRELEVANT store\LockReleaseFailedException.java +IRRELEVANT store\MMapDirectory.java +DONE JW store\SingleInstanceLockFactory.java +DONE ISH store\BufferedIndexInput.java +DONE ISH store\BufferedIndexOutput.java +DONE ISH document\AbstractField.java - Merged into Field +DEPRECATED document\DateField.java + +DONE BEN util\BitVector.java +DONE BEN util\Constants.java +DONE BEN util\Parameter.java +DONE BEN util\SmallFloat.java +DONE BEN util\StringHelper.java +DONE ISH util\ToStringUtils.java +DONE JW util\PriorityQueue.java + +Update jstreams from latest code of Strigi: strigi isn't really used anymore... we can link to it as necessary... +Create an auxiliary namespace with all the platform-dependant code, to enable static linking to it by contrib, tests and other apps which might need this: that's what the clucene-shared lib is +update Internal* internal to be named otherwise (internal is a preserved word in VS; perhaps ChesireCat* chesCat?)? renamed to _internal diff -Nru clucene-core-0.9.21b/src/core/libclucene-core.pc.cmake clucene-core-2.3.3.4/src/core/libclucene-core.pc.cmake --- clucene-core-0.9.21b/src/core/libclucene-core.pc.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/core/libclucene-core.pc.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix}/bin +libdir=${prefix}/@LIB_DESTINATION@ +includedir=${prefix}/include:${prefix}/include/CLucene/ext + +Name: libclucene +Description: CLucene - a C++ search engine, ported from the popular Apache Lucene +Version: @CLUCENE_VERSION_MAJOR@.@CLUCENE_VERSION_MINOR@.@CLUCENE_VERSION_REVISION@.@CLUCENE_VERSION_PATCH@ +Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core +Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext +~ diff -Nru clucene-core-0.9.21b/src/demo/CMakeLists.txt clucene-core-2.3.3.4/src/demo/CMakeLists.txt --- clucene-core-0.9.21b/src/demo/CMakeLists.txt 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -1,13 +1,23 @@ PROJECT(cl_demo) +INCLUDE (DefineOptions) +DEFINE_OPTIONS(EXTRA_OPTIONS EXTRA_LIBS) +ADD_DEFINITIONS(${EXTRA_OPTIONS}) + INCLUDE_DIRECTORIES( ${clucene-demo_SOURCE_DIR} ) +INCLUDE_DIRECTORIES( ${clucene_SOURCE_DIR}/src/core ) + +file(GLOB_RECURSE demo_HEADERS ${CMAKE_SOURCE_DIR}/test/*.h) -ADD_EXECUTABLE(cl_demo -./DeleteFiles.cpp +ADD_EXECUTABLE(cl_demo EXCLUDE_FROM_ALL +#./DeleteFiles.cpp ./IndexFiles.cpp ./Main.cpp ./SearchFiles.cpp ./Statistics.cpp -./stdafx.cpp +#${clucene-shared_SOURCE_DIR}/CLucene/util/Misc.cpp +#${clucene-shared_SOURCE_DIR}/CLucene/util/dirent.cpp +${demo_HEADERS} ) -TARGET_LINK_LIBRARIES(cl_demo clucene-core) + +TARGET_LINK_LIBRARIES(cl_demo clucene-core clucene-shared ${EXTRA_LIBS}) diff -Nru clucene-core-0.9.21b/src/demo/IndexFiles.cpp clucene-core-2.3.3.4/src/demo/IndexFiles.cpp --- clucene-core-0.9.21b/src/demo/IndexFiles.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/IndexFiles.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -4,14 +4,24 @@ * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ -#include "stdafx.h" -#include "CLucene.h" -#include "CLucene/util/Reader.h" -#include "CLucene/util/Misc.h" -#include "CLucene/util/dirent.h" +#include #include #include +#include +#include +#include +#include + +#include "CLucene/StdHeader.h" +#include "CLucene/_clucene-config.h" + +#include "CLucene.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/dirent.h" +#include "CLucene/config/repl_tchar.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/StringBuffer.h" using namespace std; using namespace lucene::index; @@ -20,35 +30,26 @@ using namespace lucene::store; using namespace lucene::document; -Document* FileDocument(const char* f){ - // make a new, empty document - Document* doc = _CLNEW Document(); - - // Add the path of the file as a field named "path". Use a Tex t field, so - // that the index stores the path, and so that the path is searchable - TCHAR tf[CL_MAX_DIR]; - STRCPY_AtoT(tf,f,CL_MAX_DIR); - doc->add( *_CLNEW Field(_T("path"), tf, Field::STORE_YES | Field::INDEX_UNTOKENIZED ) ); - - // Add the last modified date of the file a field named "modified". Use a - // Keyword field, so that it's searchable, but so that no attempt is made - // to tokenize the field into words. - //doc->add( *Field.Keyword("modified", DateField.timeToString(f->lastModified()))); +void FileDocument(const char* f, Document* doc){ - // Add the contents of the file a field named "contents". Use a Text - // field, specifying a Reader, so that the text of the file is tokenized. + // Add the path of the file as a field named "path". Use an indexed and stored field, so + // that the index stores the path, and so that the path is searchable. + TCHAR tf[CL_MAX_DIR]; + STRCPY_AtoT(tf,f,CL_MAX_DIR); + doc->add( *_CLNEW Field(_T("path"), tf, Field::STORE_YES | Field::INDEX_UNTOKENIZED ) ); + + // Add the last modified date of the file a field named "modified". Again, we make it + // searchable, but no attempt is made to tokenize the field into words. + //doc->add( *_CLNEW Field(_T("modified"), DateTools::timeToString(f->lastModified()), Field::STORE_YES | Field::INDEX_NO)); - //read the data without any encoding. if you want to use special encoding - //see the contrib/jstreams - they contain various types of stream readers + // Add the contents of the file a field named "contents". This time we use a tokenized + // field so that the text can be searched for words in it. + + // Here we read the data without any encoding. If you want to use special encoding + // see the contrib/jstreams - they contain various types of stream readers FILE* fh = fopen(f,"r"); if ( fh != NULL ){ StringBuffer str; - // use fstat for portability - int fn = fileno(fh); - struct stat filestat; - fstat(fn, &filestat); - str.reserve(filestat.st_size); - //str.reserve(fileSize(fh->_file)); char abuf[1024]; TCHAR tbuf[1024]; size_t r; @@ -61,58 +62,32 @@ }while(r>0); fclose(fh); - doc->add( *_CLNEW Field(_T("contents"),str.getBuffer(), Field::STORE_YES | Field::INDEX_TOKENIZED) ); + doc->add( *_CLNEW Field(_T("contents"), str.getBuffer(), Field::STORE_YES | Field::INDEX_TOKENIZED) ); } - - //_tprintf(_T("%s\n"),doc->toString()); - // return the document - return doc; } -void indexDocs(IndexWriter* writer, char* directory) { - DIR* dir = opendir(directory); - if ( dir != NULL ){ - struct dirent* fl; - - struct fileStat buf; - - char path[CL_MAX_DIR]; - strcpy(path,directory); - strcat(path,PATH_DELIMITERA); - char* pathP = path + strlen(path); - - fl = readdir(dir); - while ( fl != NULL ){ - if ( (strcmp(fl->d_name, ".")) && (strcmp(fl->d_name, "..")) ) { - pathP[0]=0; - strcat(pathP,fl->d_name); - int32_t ret = fileStat(path,&buf); - if ( buf.st_mode & S_IFDIR ) { - indexDocs(writer, path ); - }else{ - printf( "adding: %s\n", fl->d_name ); - - Document* doc = FileDocument( path ); - writer->addDocument( doc ); - _CLDELETE(doc); - } - } - fl = readdir(dir); - - } - closedir(dir); - }else{ - printf( "adding: %s\n", directory); - - Document* doc = FileDocument( directory ); - writer->addDocument( doc ); - _CLDELETE(doc); - } +void indexDocs(IndexWriter* writer, const char* directory) { + vector files; + std::sort(files.begin(),files.end()); + Misc::listFiles(directory,files,true); + vector::iterator itr = files.begin(); + + // Re-use the document object + Document doc; + int i=0; + while ( itr != files.end() ){ + const char* path = itr->c_str(); + printf( "adding file %d: %s\n", ++i, path ); + + doc.clear(); + FileDocument( path, &doc ); + writer->addDocument( &doc ); + ++itr; + } } -void IndexFiles(char* path, char* target, const bool clearIndex){ +void IndexFiles(const char* path, const char* target, const bool clearIndex){ IndexWriter* writer = NULL; - //lucene::analysis::SimpleAnalyzer* an = *_CLNEW lucene::analysis::SimpleAnalyzer(); - lucene::analysis::standard::StandardAnalyzer an; + lucene::analysis::WhitespaceAnalyzer an; if ( !clearIndex && IndexReader::indexExists(target) ){ if ( IndexReader::isLocked(target) ){ @@ -124,21 +99,30 @@ }else{ writer = _CLNEW IndexWriter( target ,&an, true); } - writer->setMaxFieldLength(IndexWriter::DEFAULT_MAX_FIELD_LENGTH); - /*printf("Set MaxFieldLength: "); - char mfl[250]; - fgets(mfl,250,stdin); - mfl[strlen(mfl)-1] = 0; - if ( mfl[0] != 0 ) - writer->setMaxFieldLength(atoi(mfl));*/ - //writer->infoStream = cout; //TODO: infoStream - unicode - uint64_t str = lucene::util::Misc::currentTimeMillis(); + //writer->setInfoStream(&std::cout); + + // We can tell the writer to flush at certain occasions + //writer->setRAMBufferSizeMB(0.5); + //writer->setMaxBufferedDocs(3); + + // To bypass a possible exception (we have no idea what we will be indexing...) + writer->setMaxFieldLength(0x7FFFFFFFL); // LUCENE_INT32_MAX_SHOULDBE + + // Turn this off to make indexing faster; we'll turn it on later before optimizing + writer->setUseCompoundFile(false); + + uint64_t str = Misc::currentTimeMillis(); indexDocs(writer, path); - writer->optimize(); - writer->close(); - _CLDELETE(writer); + + // Make the index use as little files as possible, and optimize it + writer->setUseCompoundFile(true); + writer->optimize(); + + // Close and clean up + writer->close(); + _CLLDELETE(writer); - printf("Indexing took: %d ms.\n\n", lucene::util::Misc::currentTimeMillis() - str); + printf("Indexing took: %d ms.\n\n", (int32_t)(Misc::currentTimeMillis() - str)); } diff -Nru clucene-core-0.9.21b/src/demo/Jamfile.v2 clucene-core-2.3.3.4/src/demo/Jamfile.v2 --- clucene-core-0.9.21b/src/demo/Jamfile.v2 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/Jamfile.v2 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -project demo ; - -DEMO_SOURCES = - Main.cpp - DeleteFiles.cpp - IndexFiles.cpp - SearchFiles.cpp - Statistics.cpp - stdafx.cpp - ; - -exe cl_demo : $(DEMO_SOURCES) ../../build/boost//libclucene - : _UCS2 ; diff -Nru clucene-core-0.9.21b/src/demo/Main.cpp clucene-core-2.3.3.4/src/demo/Main.cpp --- clucene-core-0.9.21b/src/demo/Main.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/Main.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -4,78 +4,76 @@ * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ -#include "stdafx.h" +#include "CLucene/StdHeader.h" +#include "CLucene/_clucene-config.h" + #include "CLucene.h" +#include "CLucene/util/Misc.h" -#ifdef _CLCOMPILER_MSVC +//test for memory leaks: +#ifdef _MSC_VER #ifdef _DEBUG - #define CRTDBG_MAP_ALLOC + #define _CRTDBG_MAP_ALLOC #include #include #endif #endif +#include #include +#include using namespace std; +using namespace lucene::util; -void DeleteFiles(const char* dir); -void IndexFiles(char* path, char* target, const bool clearIndex); +//void DeleteFiles(const char* dir); +void IndexFiles(const char* path, const char* target, const bool clearIndex); void SearchFiles(const char* index); void getStats(const char* directory); int main( int32_t argc, char** argv ){ //Dumper Debug - #ifdef TR_LEAKS - #ifdef _CLCOMPILER_MSVC + #ifdef _MSC_VER #ifdef _DEBUG - _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );//| _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF ); - #endif + _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF ); + _crtBreakAlloc=-1; #endif #endif - uint64_t str = lucene::util::Misc::currentTimeMillis(); + uint64_t str = Misc::currentTimeMillis(); try{ - printf("Location of text files to be indexed: "); - char files[250]; - fgets(files,250,stdin); + printf("Location of text files to be indexed: "); + char files[250]; + char* tmp = fgets(files,250,stdin); + if ( tmp == NULL ) return 1; files[strlen(files)-1] = 0; printf("Location to store the clucene index: "); char ndx[250]; - fgets(ndx,250,stdin); + tmp = fgets(ndx,250,stdin); + if ( tmp == NULL ) return 1; ndx[strlen(ndx)-1] = 0; IndexFiles(files,ndx,true); - getStats(ndx); - SearchFiles(ndx); - DeleteFiles(ndx); + getStats(ndx); + SearchFiles(ndx); + //DeleteFiles(ndx); - }catch(CLuceneError& err){ - printf(err.what()); + }catch(CLuceneError& err){ + printf("Error: %s\n", err.what()); }catch(...){ - printf("Unknown error"); - } + printf("Unknown error\n"); + } _lucene_shutdown(); //clears all static memory //print lucenebase debug -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING - lucene::debug::LuceneBase::__cl_PrintUnclosedObjects(); - //clear memtracking memory (not the unclosed objects) - lucene::debug::LuceneBase::__cl_ClearMemory(); -#endif - //Debuggin techniques: + //Debugging techniques: //For msvc, use this for breaking on memory leaks: // _crtBreakAlloc - //to break at this clucene item: - // _lucene_counter_break - //run a memory check before deleting objects: - // _lucene_run_objectcheck - //if LUCENE_ENABLE_CONSTRUCTOR_LOG is on, dont do log if this is true: - // _lucene_disable_debuglogging + //for linux, use valgrind - printf ("\n\nTime taken: %d\n\n",lucene::util::Misc::currentTimeMillis() - str); + printf ("\n\nTime taken: %d\n\n", (int32_t)(Misc::currentTimeMillis() - str)); return 0; } diff -Nru clucene-core-0.9.21b/src/demo/Makefile.am clucene-core-2.3.3.4/src/demo/Makefile.am --- clucene-core-0.9.21b/src/demo/Makefile.am 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/src -demosrcdir = $(top_srcdir)/src/demo - -bin_PROGRAMS = cl_demo - -cl_demo_SOURCES = $(demosrcdir)/DeleteFiles.cpp \ - $(demosrcdir)/IndexFiles.cpp \ - $(demosrcdir)/SearchFiles.cpp \ - $(demosrcdir)/Statistics.cpp \ - $(demosrcdir)/Main.cpp \ - $(demosrcdir)/stdafx.cpp - -cl_demo_LDADD = $(top_builddir)/src/libclucene.la - -EXTRA_DIST = $(demosrcdir)/Jamfile.v2 \ - $(demosrcdir)/stdafx.h \ - $(demosrcdir)/CMakeLists.txt -MAINTAINERCLEANFILES = Makefile.in diff -Nru clucene-core-0.9.21b/src/demo/Makefile.in clucene-core-2.3.3.4/src/demo/Makefile.in --- clucene-core-0.9.21b/src/demo/Makefile.in 2008-10-23 18:18:26.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,580 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -bin_PROGRAMS = cl_demo$(EXEEXT) -subdir = src/demo -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_cxx_have_std.m4 \ - $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ - $(top_srcdir)/m4/ac_cxx_have_wctype_h.m4 \ - $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ - $(top_srcdir)/m4/ac_define_integer_bits.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/ax_config_feature.m4 \ - $(top_srcdir)/m4/ax_prefix_config_h.m4 \ - $(top_srcdir)/m4/dps_float_byte.m4 \ - $(top_srcdir)/m4/dps_snprintf_oflow.m4 \ - $(top_srcdir)/m4/dps_static_const_type.m4 \ - $(top_srcdir)/m4/dps_swprintf_works.m4 \ - $(top_srcdir)/m4/mdl_cxx_function_try_blocks.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h.tmp -CONFIG_CLEAN_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) -PROGRAMS = $(bin_PROGRAMS) -am_cl_demo_OBJECTS = DeleteFiles.$(OBJEXT) IndexFiles.$(OBJEXT) \ - SearchFiles.$(OBJEXT) Statistics.$(OBJEXT) Main.$(OBJEXT) \ - stdafx.$(OBJEXT) -cl_demo_OBJECTS = $(am_cl_demo_OBJECTS) -cl_demo_DEPENDENCIES = $(top_builddir)/src/libclucene.la -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(cl_demo_SOURCES) -DIST_SOURCES = $(cl_demo_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLLIB_VERSION = @CLLIB_VERSION@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GREP = @GREP@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -acx_pthread_config = @acx_pthread_config@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_doxygen = @enable_doxygen@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/src -demosrcdir = $(top_srcdir)/src/demo -cl_demo_SOURCES = $(demosrcdir)/DeleteFiles.cpp \ - $(demosrcdir)/IndexFiles.cpp \ - $(demosrcdir)/SearchFiles.cpp \ - $(demosrcdir)/Statistics.cpp \ - $(demosrcdir)/Main.cpp \ - $(demosrcdir)/stdafx.cpp - -cl_demo_LDADD = $(top_builddir)/src/libclucene.la -EXTRA_DIST = $(demosrcdir)/Jamfile.v2 \ - $(demosrcdir)/stdafx.h \ - $(demosrcdir)/CMakeLists.txt - -MAINTAINERCLEANFILES = Makefile.in -all: all-am - -.SUFFIXES: -.SUFFIXES: .cpp .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/demo/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/demo/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done -cl_demo$(EXEEXT): $(cl_demo_OBJECTS) $(cl_demo_DEPENDENCIES) - @rm -f cl_demo$(EXEEXT) - $(CXXLINK) $(cl_demo_LDFLAGS) $(cl_demo_OBJECTS) $(cl_demo_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DeleteFiles.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexFiles.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SearchFiles.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Statistics.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdafx.Po@am__quote@ - -.cpp.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cpp.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cpp.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -DeleteFiles.o: $(demosrcdir)/DeleteFiles.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DeleteFiles.o -MD -MP -MF "$(DEPDIR)/DeleteFiles.Tpo" -c -o DeleteFiles.o `test -f '$(demosrcdir)/DeleteFiles.cpp' || echo '$(srcdir)/'`$(demosrcdir)/DeleteFiles.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/DeleteFiles.Tpo" "$(DEPDIR)/DeleteFiles.Po"; else rm -f "$(DEPDIR)/DeleteFiles.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/DeleteFiles.cpp' object='DeleteFiles.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DeleteFiles.o `test -f '$(demosrcdir)/DeleteFiles.cpp' || echo '$(srcdir)/'`$(demosrcdir)/DeleteFiles.cpp - -DeleteFiles.obj: $(demosrcdir)/DeleteFiles.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DeleteFiles.obj -MD -MP -MF "$(DEPDIR)/DeleteFiles.Tpo" -c -o DeleteFiles.obj `if test -f '$(demosrcdir)/DeleteFiles.cpp'; then $(CYGPATH_W) '$(demosrcdir)/DeleteFiles.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/DeleteFiles.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/DeleteFiles.Tpo" "$(DEPDIR)/DeleteFiles.Po"; else rm -f "$(DEPDIR)/DeleteFiles.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/DeleteFiles.cpp' object='DeleteFiles.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DeleteFiles.obj `if test -f '$(demosrcdir)/DeleteFiles.cpp'; then $(CYGPATH_W) '$(demosrcdir)/DeleteFiles.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/DeleteFiles.cpp'; fi` - -IndexFiles.o: $(demosrcdir)/IndexFiles.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IndexFiles.o -MD -MP -MF "$(DEPDIR)/IndexFiles.Tpo" -c -o IndexFiles.o `test -f '$(demosrcdir)/IndexFiles.cpp' || echo '$(srcdir)/'`$(demosrcdir)/IndexFiles.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/IndexFiles.Tpo" "$(DEPDIR)/IndexFiles.Po"; else rm -f "$(DEPDIR)/IndexFiles.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/IndexFiles.cpp' object='IndexFiles.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IndexFiles.o `test -f '$(demosrcdir)/IndexFiles.cpp' || echo '$(srcdir)/'`$(demosrcdir)/IndexFiles.cpp - -IndexFiles.obj: $(demosrcdir)/IndexFiles.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IndexFiles.obj -MD -MP -MF "$(DEPDIR)/IndexFiles.Tpo" -c -o IndexFiles.obj `if test -f '$(demosrcdir)/IndexFiles.cpp'; then $(CYGPATH_W) '$(demosrcdir)/IndexFiles.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/IndexFiles.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/IndexFiles.Tpo" "$(DEPDIR)/IndexFiles.Po"; else rm -f "$(DEPDIR)/IndexFiles.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/IndexFiles.cpp' object='IndexFiles.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IndexFiles.obj `if test -f '$(demosrcdir)/IndexFiles.cpp'; then $(CYGPATH_W) '$(demosrcdir)/IndexFiles.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/IndexFiles.cpp'; fi` - -SearchFiles.o: $(demosrcdir)/SearchFiles.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SearchFiles.o -MD -MP -MF "$(DEPDIR)/SearchFiles.Tpo" -c -o SearchFiles.o `test -f '$(demosrcdir)/SearchFiles.cpp' || echo '$(srcdir)/'`$(demosrcdir)/SearchFiles.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SearchFiles.Tpo" "$(DEPDIR)/SearchFiles.Po"; else rm -f "$(DEPDIR)/SearchFiles.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/SearchFiles.cpp' object='SearchFiles.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SearchFiles.o `test -f '$(demosrcdir)/SearchFiles.cpp' || echo '$(srcdir)/'`$(demosrcdir)/SearchFiles.cpp - -SearchFiles.obj: $(demosrcdir)/SearchFiles.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SearchFiles.obj -MD -MP -MF "$(DEPDIR)/SearchFiles.Tpo" -c -o SearchFiles.obj `if test -f '$(demosrcdir)/SearchFiles.cpp'; then $(CYGPATH_W) '$(demosrcdir)/SearchFiles.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/SearchFiles.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SearchFiles.Tpo" "$(DEPDIR)/SearchFiles.Po"; else rm -f "$(DEPDIR)/SearchFiles.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/SearchFiles.cpp' object='SearchFiles.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SearchFiles.obj `if test -f '$(demosrcdir)/SearchFiles.cpp'; then $(CYGPATH_W) '$(demosrcdir)/SearchFiles.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/SearchFiles.cpp'; fi` - -Statistics.o: $(demosrcdir)/Statistics.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Statistics.o -MD -MP -MF "$(DEPDIR)/Statistics.Tpo" -c -o Statistics.o `test -f '$(demosrcdir)/Statistics.cpp' || echo '$(srcdir)/'`$(demosrcdir)/Statistics.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Statistics.Tpo" "$(DEPDIR)/Statistics.Po"; else rm -f "$(DEPDIR)/Statistics.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/Statistics.cpp' object='Statistics.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Statistics.o `test -f '$(demosrcdir)/Statistics.cpp' || echo '$(srcdir)/'`$(demosrcdir)/Statistics.cpp - -Statistics.obj: $(demosrcdir)/Statistics.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Statistics.obj -MD -MP -MF "$(DEPDIR)/Statistics.Tpo" -c -o Statistics.obj `if test -f '$(demosrcdir)/Statistics.cpp'; then $(CYGPATH_W) '$(demosrcdir)/Statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/Statistics.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Statistics.Tpo" "$(DEPDIR)/Statistics.Po"; else rm -f "$(DEPDIR)/Statistics.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/Statistics.cpp' object='Statistics.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Statistics.obj `if test -f '$(demosrcdir)/Statistics.cpp'; then $(CYGPATH_W) '$(demosrcdir)/Statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/Statistics.cpp'; fi` - -Main.o: $(demosrcdir)/Main.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Main.o -MD -MP -MF "$(DEPDIR)/Main.Tpo" -c -o Main.o `test -f '$(demosrcdir)/Main.cpp' || echo '$(srcdir)/'`$(demosrcdir)/Main.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Main.Tpo" "$(DEPDIR)/Main.Po"; else rm -f "$(DEPDIR)/Main.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/Main.cpp' object='Main.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Main.o `test -f '$(demosrcdir)/Main.cpp' || echo '$(srcdir)/'`$(demosrcdir)/Main.cpp - -Main.obj: $(demosrcdir)/Main.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Main.obj -MD -MP -MF "$(DEPDIR)/Main.Tpo" -c -o Main.obj `if test -f '$(demosrcdir)/Main.cpp'; then $(CYGPATH_W) '$(demosrcdir)/Main.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/Main.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Main.Tpo" "$(DEPDIR)/Main.Po"; else rm -f "$(DEPDIR)/Main.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/Main.cpp' object='Main.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Main.obj `if test -f '$(demosrcdir)/Main.cpp'; then $(CYGPATH_W) '$(demosrcdir)/Main.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/Main.cpp'; fi` - -stdafx.o: $(demosrcdir)/stdafx.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT stdafx.o -MD -MP -MF "$(DEPDIR)/stdafx.Tpo" -c -o stdafx.o `test -f '$(demosrcdir)/stdafx.cpp' || echo '$(srcdir)/'`$(demosrcdir)/stdafx.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/stdafx.Tpo" "$(DEPDIR)/stdafx.Po"; else rm -f "$(DEPDIR)/stdafx.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/stdafx.cpp' object='stdafx.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o stdafx.o `test -f '$(demosrcdir)/stdafx.cpp' || echo '$(srcdir)/'`$(demosrcdir)/stdafx.cpp - -stdafx.obj: $(demosrcdir)/stdafx.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT stdafx.obj -MD -MP -MF "$(DEPDIR)/stdafx.Tpo" -c -o stdafx.obj `if test -f '$(demosrcdir)/stdafx.cpp'; then $(CYGPATH_W) '$(demosrcdir)/stdafx.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/stdafx.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/stdafx.Tpo" "$(DEPDIR)/stdafx.Po"; else rm -f "$(DEPDIR)/stdafx.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(demosrcdir)/stdafx.cpp' object='stdafx.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o stdafx.obj `if test -f '$(demosrcdir)/stdafx.cpp'; then $(CYGPATH_W) '$(demosrcdir)/stdafx.cpp'; else $(CYGPATH_W) '$(srcdir)/$(demosrcdir)/stdafx.cpp'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/$(demosrcdir) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: - for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: install-binPROGRAMS - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic clean-libtool ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru clucene-core-0.9.21b/src/demo/SearchFiles.cpp clucene-core-2.3.3.4/src/demo/SearchFiles.cpp --- clucene-core-0.9.21b/src/demo/SearchFiles.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/SearchFiles.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -1,13 +1,19 @@ /*------------------------------------------------------------------------------ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or +* +* Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ -#include "stdafx.h" +#include +#include + +#include "CLucene/StdHeader.h" +#include "CLucene/_clucene-config.h" #include "CLucene.h" -#include +#include "CLucene/config/repl_tchar.h" +#include "CLucene/config/repl_wchar.h" +#include "CLucene/util/Misc.h" using namespace std; using namespace lucene::analysis; @@ -19,47 +25,54 @@ void SearchFiles(const char* index){ - //Searcher searcher(index); - standard::StandardAnalyzer analyzer; - char line[80]; - TCHAR tline[80]; - const TCHAR* buf; + standard::StandardAnalyzer analyzer; + char line[80]; + TCHAR tline[80]; + TCHAR* buf; - IndexSearcher s(index); + IndexReader* reader = IndexReader::open(index); while (true) { - printf("Enter query string: "); - fgets(line,80,stdin); - line[strlen(line)-1]=0; - - if ( strlen(line) == 0 ) - break; - STRCPY_AtoT(tline,line,80); - Query* q = QueryParser::parse(tline,_T("contents"),&analyzer); - - buf = q->toString(_T("contents")); - _tprintf(_T("Searching for: %s\n\n"), buf); - _CLDELETE_CARRAY(buf); - - uint64_t str = lucene::util::Misc::currentTimeMillis(); - Hits* h = s.search(q); - uint64_t srch = lucene::util::Misc::currentTimeMillis() - str; - str = lucene::util::Misc::currentTimeMillis(); - - for ( int32_t i=0;ilength();i++ ){ - Document* doc = &h->doc(i); - //const TCHAR* buf = doc.get(_T("contents")); - _tprintf(_T("%d. %s - %f\n"), i, doc->get(_T("path")), h->score(i)); - //delete doc; - } - - printf("\n\nSearch took: %d ms.\n", srch); - printf("Screen dump took: %d ms.\n\n", lucene::util::Misc::currentTimeMillis() - str); - - _CLDELETE(h); - _CLDELETE(q); - - } - s.close(); - //delete line; -} + printf("Enter query string: "); + char* tmp = fgets(line,80,stdin); + if ( tmp == NULL ) continue; + line[strlen(line)-1]=0; + + IndexReader* newreader = reader->reopen(); + if ( newreader != reader ){ + _CLLDELETE(reader); + reader = newreader; + } + IndexSearcher s(reader); + + if ( strlen(line) == 0 ) + break; + STRCPY_AtoT(tline,line,80); + Query* q = QueryParser::parse(tline,_T("contents"),&analyzer); + + buf = q->toString(_T("contents")); + _tprintf(_T("Searching for: %s\n\n"), buf); + _CLDELETE_LCARRAY(buf); + + uint64_t str = Misc::currentTimeMillis(); + Hits* h = s.search(q); + uint32_t srch = (int32_t)(Misc::currentTimeMillis() - str); + str = Misc::currentTimeMillis(); + + for ( size_t i=0;ilength();i++ ){ + Document* doc = &h->doc(i); + //const TCHAR* buf = doc.get(_T("contents")); + _tprintf(_T("%d. %s - %f\n"), i, doc->get(_T("path")), h->score(i)); + } + + printf("\n\nSearch took: %d ms.\n", srch); + printf("Screen dump took: %d ms.\n\n", (int32_t)(Misc::currentTimeMillis() - str)); + + _CLLDELETE(h); + _CLLDELETE(q); + + s.close(); + } + reader->close(); + _CLLDELETE(reader); +} diff -Nru clucene-core-0.9.21b/src/demo/Statistics.cpp clucene-core-2.3.3.4/src/demo/Statistics.cpp --- clucene-core-0.9.21b/src/demo/Statistics.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/Statistics.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -4,12 +4,16 @@ * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ -#include "stdafx.h" +#include +#include + +#include "CLucene/StdHeader.h" +#include "CLucene/_clucene-config.h" #include "CLucene.h" -#include "CLucene/index/Term.h" -#include "CLucene/index/SegmentTermEnum.h" -#include +#include "CLucene/config/repl_tchar.h" +#include "CLucene/config/repl_wchar.h" +#include "CLucene/util/Misc.h" using namespace std; using namespace lucene::analysis; @@ -20,16 +24,14 @@ void getStats(const char* directory){ IndexReader* r = IndexReader::open(directory); - _tprintf(_T("Statistics for %s\n"), directory); + printf("Statistics for %s\n", directory); printf("==================================\n"); printf("Max Docs: %d\n", r->maxDoc() ); printf("Num Docs: %d\n", r->numDocs() ); - int64_t ver = r->getCurrentVersion(directory); - TCHAR str[16]; - _i64tot(ver, str, 10); - _tprintf(_T("Current Version: %s\n"), str ); + int64_t ver = r->getCurrentVersion(directory); + _tprintf(_T("Current Version: %f\n"), (float_t)ver ); TermEnum* te = r->terms(); int32_t nterms; @@ -37,8 +39,8 @@ /* empty */ } printf("Term count: %d\n\n", nterms ); - _CLDELETE(te); + _CLLDELETE(te); r->close(); - _CLDELETE(r); + _CLLDELETE(r); } diff -Nru clucene-core-0.9.21b/src/demo/stdafx.cpp clucene-core-2.3.3.4/src/demo/stdafx.cpp --- clucene-core-0.9.21b/src/demo/stdafx.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/stdafx.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -// stdafx.cpp : source file that includes just the standard includes -// demo.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" diff -Nru clucene-core-0.9.21b/src/demo/stdafx.h clucene-core-2.3.3.4/src/demo/stdafx.h --- clucene-core-0.9.21b/src/demo/stdafx.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/src/demo/stdafx.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// -#ifndef _lucene_examples_demo_stdafx_ -#define _lucene_examples_demo_stdafx_ - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers -#include -//#include - -#include "CLucene/StdHeader.h" -#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/assert.hpp clucene-core-2.3.3.4/src/ext/boost/assert.hpp --- clucene-core-0.9.21b/src/ext/boost/assert.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/assert.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,50 @@ +// +// boost/assert.hpp - BOOST_ASSERT(expr) +// +// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2007 Peter Dimov +// +// 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) +// +// Note: There are no include guards. This is intentional. +// +// See http://www.boost.org/libs/utility/assert.html for documentation. +// + +#undef BOOST_ASSERT + +#if defined(BOOST_DISABLE_ASSERTS) + +# define BOOST_ASSERT(expr) ((void)0) + +#elif defined(BOOST_ENABLE_ASSERT_HANDLER) + +#include + +namespace boost +{ + +void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined + +} // namespace boost + +#define BOOST_ASSERT(expr) ((expr)? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__)) + +#else +# include // .h to support old libraries w/o - effect is the same +# define BOOST_ASSERT(expr) assert(expr) +#endif + +#undef BOOST_VERIFY + +#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) ) + +# define BOOST_VERIFY(expr) ((void)(expr)) + +#else + +# define BOOST_VERIFY(expr) BOOST_ASSERT(expr) + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/checked_delete.hpp clucene-core-2.3.3.4/src/ext/boost/checked_delete.hpp --- clucene-core-0.9.21b/src/ext/boost/checked_delete.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/checked_delete.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,69 @@ +#ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED +#define BOOST_CHECKED_DELETE_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/checked_delete.hpp +// +// Copyright (c) 2002, 2003 Peter Dimov +// Copyright (c) 2003 Daniel Frey +// Copyright (c) 2003 Howard Hinnant +// +// 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) +// +// See http://www.boost.org/libs/utility/checked_delete.html for documentation. +// + +namespace boost +{ + +// verify that types are complete for increased safety + +template inline void checked_delete(T * x) +{ + // intentionally complex - simplification causes regressions + typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; + (void) sizeof(type_must_be_complete); + delete x; +} + +template inline void checked_array_delete(T * x) +{ + typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; + (void) sizeof(type_must_be_complete); + delete [] x; +} + +template struct checked_deleter +{ + typedef void result_type; + typedef T * argument_type; + + void operator()(T * x) const + { + // boost:: disables ADL + boost::checked_delete(x); + } +}; + +template struct checked_array_deleter +{ + typedef void result_type; + typedef T * argument_type; + + void operator()(T * x) const + { + boost::checked_array_delete(x); + } +}; + +} // namespace boost + +#endif // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/config/abi/borland_prefix.hpp clucene-core-2.3.3.4/src/ext/boost/config/abi/borland_prefix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/abi/borland_prefix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/abi/borland_prefix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,27 @@ +// (C) Copyright John Maddock 2003. +// 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) + +// for C++ Builder the following options effect the ABI: +// +// -b (on or off - effect emum sizes) +// -Vx (on or off - empty members) +// -Ve (on or off - empty base classes) +// -aX (alignment - 5 options). +// -pX (Calling convention - 4 options) +// -VmX (member pointer size and layout - 5 options) +// -VC (on or off, changes name mangling) +// -Vl (on or off, changes struct layout). + +// In addition the following warnings are sufficiently annoying (and +// unfixable) to have them turned off by default: +// +// 8027 - functions containing [for|while] loops are not expanded inline +// 8026 - functions taking class by value arguments are not expanded inline + +#pragma nopushoptwarn +# pragma option push -Vx -Ve -a8 -b -pc -Vmv -VC- -Vl- -w-8027 -w-8026 + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/abi/borland_suffix.hpp clucene-core-2.3.3.4/src/ext/boost/config/abi/borland_suffix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/abi/borland_suffix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/abi/borland_suffix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,12 @@ +// (C) Copyright John Maddock 2003. +// 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) + +# pragma option pop +#pragma nopushoptwarn + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/abi/msvc_prefix.hpp clucene-core-2.3.3.4/src/ext/boost/config/abi/msvc_prefix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/abi/msvc_prefix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/abi/msvc_prefix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,22 @@ +// (C) Copyright John Maddock 2003. +// 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) + +// +// Boost binaries are built with the compiler's default ABI settings, +// if the user changes their default alignment in the VS IDE then their +// code will no longer be binary compatible with the bjam built binaries +// unless this header is included to force Boost code into a consistent ABI. +// +// Note that inclusion of this header is only necessary for libraries with +// separate source, header only libraries DO NOT need this as long as all +// translation units are built with the same options. +// +#if defined(_M_X64) +# pragma pack(push,16) +#else +# pragma pack(push,8) +#endif + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/abi/msvc_suffix.hpp clucene-core-2.3.3.4/src/ext/boost/config/abi/msvc_suffix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/abi/msvc_suffix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/abi/msvc_suffix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,8 @@ +// (C) Copyright John Maddock 2003. +// 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) + +#pragma pack(pop) + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/abi_prefix.hpp clucene-core-2.3.3.4/src/ext/boost/config/abi_prefix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/abi_prefix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/abi_prefix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,25 @@ +// abi_prefix header -------------------------------------------------------// + +// (c) Copyright John Maddock 2003 + +// 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_CONFIG_ABI_PREFIX_HPP +# define BOOST_CONFIG_ABI_PREFIX_HPP +#else +# error double inclusion of header boost/config/abi_prefix.hpp is an error +#endif + +#include + +// this must occur after all other includes and before any code appears: +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +#if defined( __BORLANDC__ ) +#pragma nopushoptwarn +#endif + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/abi_suffix.hpp clucene-core-2.3.3.4/src/ext/boost/config/abi_suffix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/abi_suffix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/abi_suffix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,27 @@ +// abi_sufffix header -------------------------------------------------------// + +// (c) Copyright John Maddock 2003 + +// 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 header should be #included AFTER code that was preceded by a #include +// . + +#ifndef BOOST_CONFIG_ABI_PREFIX_HPP +# error Header boost/config/abi_suffix.hpp must only be used after boost/config/abi_prefix.hpp +#else +# undef BOOST_CONFIG_ABI_PREFIX_HPP +#endif + +// the suffix header occurs after all of our code: +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#if defined( __BORLANDC__ ) +#pragma nopushoptwarn +#endif + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/auto_link.hpp clucene-core-2.3.3.4/src/ext/boost/config/auto_link.hpp --- clucene-core-0.9.21b/src/ext/boost/config/auto_link.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/auto_link.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,373 @@ +// (C) Copyright John Maddock 2003. +// 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 auto_link.hpp + * VERSION see + * DESCRIPTION: Automatic library inclusion for Borland/Microsoft compilers. + */ + +/************************************************************************* + +USAGE: +~~~~~~ + +Before including this header you must define one or more of define the following macros: + +BOOST_LIB_NAME: Required: A string containing the basename of the library, + for example boost_regex. +BOOST_LIB_TOOLSET: Optional: the base name of the toolset. +BOOST_DYN_LINK: Optional: when set link to dll rather than static library. +BOOST_LIB_DIAGNOSTIC: Optional: when set the header will print out the name + of the library selected (useful for debugging). +BOOST_AUTO_LINK_NOMANGLE: Specifies that we should link to BOOST_LIB_NAME.lib, + rather than a mangled-name version. + +These macros will be undef'ed at the end of the header, further this header +has no include guards - so be sure to include it only once from your library! + +Algorithm: +~~~~~~~~~~ + +Libraries for Borland and Microsoft compilers are automatically +selected here, the name of the lib is selected according to the following +formula: + +BOOST_LIB_PREFIX + + BOOST_LIB_NAME + + "_" + + BOOST_LIB_TOOLSET + + BOOST_LIB_THREAD_OPT + + BOOST_LIB_RT_OPT + "-" + + BOOST_LIB_VERSION + +These are defined as: + +BOOST_LIB_PREFIX: "lib" for static libraries otherwise "". + +BOOST_LIB_NAME: The base name of the lib ( for example boost_regex). + +BOOST_LIB_TOOLSET: The compiler toolset name (vc6, vc7, bcb5 etc). + +BOOST_LIB_THREAD_OPT: "-mt" for multithread builds, otherwise nothing. + +BOOST_LIB_RT_OPT: A suffix that indicates the runtime library used, + contains one or more of the following letters after + a hiphen: + + s static runtime (dynamic if not present). + d debug build (release if not present). + g debug/diagnostic runtime (release if not present). + p STLPort Build. + +BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. + + +***************************************************************************/ + +#ifdef __cplusplus +# ifndef BOOST_CONFIG_HPP +# include +# endif +#elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__) +// +// C language compatability (no, honestly) +// +# define BOOST_MSVC _MSC_VER +# define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) +# define BOOST_DO_STRINGIZE(X) #X +#endif +// +// Only include what follows for known and supported compilers: +// +#if defined(BOOST_MSVC) \ + || defined(__BORLANDC__) \ + || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \ + || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) + +#ifndef BOOST_VERSION_HPP +# include +#endif + +#ifndef BOOST_LIB_NAME +# error "Macro BOOST_LIB_NAME not set (internal error)" +#endif + +// +// error check: +// +#if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG) +# pragma message("Using the /RTC option without specifying a debug runtime will lead to linker errors") +# pragma message("Hint: go to the code generation options and switch to one of the debugging runtimes") +# error "Incompatible build options" +#endif +// +// select toolset if not defined already: +// +#ifndef BOOST_LIB_TOOLSET +// Note: no compilers before 1200 are supported +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) + +# ifdef UNDER_CE + // vc6: +# define BOOST_LIB_TOOLSET "evc4" +# else + // vc6: +# define BOOST_LIB_TOOLSET "vc6" +# endif + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300) + + // vc7: +# define BOOST_LIB_TOOLSET "vc7" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1310) + + // vc71: +# define BOOST_LIB_TOOLSET "vc71" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1400) + + // vc80: +# define BOOST_LIB_TOOLSET "vc80" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1500) + + // vc90: +# define BOOST_LIB_TOOLSET "vc90" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1600) + + // vc10: +# define BOOST_LIB_TOOLSET "vc100" + +#elif defined(__BORLANDC__) + + // CBuilder 6: +# define BOOST_LIB_TOOLSET "bcb" + +#elif defined(__ICL) + + // Intel C++, no version number: +# define BOOST_LIB_TOOLSET "iw" + +#elif defined(__MWERKS__) && (__MWERKS__ <= 0x31FF ) + + // Metrowerks CodeWarrior 8.x +# define BOOST_LIB_TOOLSET "cw8" + +#elif defined(__MWERKS__) && (__MWERKS__ <= 0x32FF ) + + // Metrowerks CodeWarrior 9.x +# define BOOST_LIB_TOOLSET "cw9" + +#endif +#endif // BOOST_LIB_TOOLSET + +// +// select thread opt: +// +#if defined(_MT) || defined(__MT__) +# define BOOST_LIB_THREAD_OPT "-mt" +#else +# define BOOST_LIB_THREAD_OPT +#endif + +#if defined(_MSC_VER) || defined(__MWERKS__) + +# ifdef _DLL + +# if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS)) + +# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-gdp" +# elif defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-gdp" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# else +# define BOOST_LIB_RT_OPT "-p" +# endif + +# elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) + +# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-gdpn" +# elif defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-gdpn" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# else +# define BOOST_LIB_RT_OPT "-pn" +# endif + +# else + +# if defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-gd" +# else +# define BOOST_LIB_RT_OPT +# endif + +# endif + +# else + +# if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS)) + +# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-sgdp" +# elif defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-sgdp" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# else +# define BOOST_LIB_RT_OPT "-sp" +# endif + +# elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) + +# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) +# define BOOST_LIB_RT_OPT "-sgdpn" +# elif defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-sgdpn" +# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1") +# error "Build options aren't compatible with pre-built libraries" +# else +# define BOOST_LIB_RT_OPT "-spn" +# endif + +# else + +# if defined(_DEBUG) +# define BOOST_LIB_RT_OPT "-sgd" +# else +# define BOOST_LIB_RT_OPT "-s" +# endif + +# endif + +# endif + +#elif defined(__BORLANDC__) + +// +// figure out whether we want the debug builds or not: +// +#if __BORLANDC__ > 0x561 +#pragma defineonoption BOOST_BORLAND_DEBUG -v +#endif +// +// sanity check: +// +#if defined(__STL_DEBUG) || defined(_STLP_DEBUG) +#error "Pre-built versions of the Boost libraries are not provided in STLPort-debug form" +#endif + +# ifdef _RTLDLL + +# ifdef BOOST_BORLAND_DEBUG +# define BOOST_LIB_RT_OPT "-d" +# else +# define BOOST_LIB_RT_OPT +# endif + +# else + +# ifdef BOOST_BORLAND_DEBUG +# define BOOST_LIB_RT_OPT "-sd" +# else +# define BOOST_LIB_RT_OPT "-s" +# endif + +# endif + +#endif + +// +// select linkage opt: +// +#if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK) +# define BOOST_LIB_PREFIX +#elif defined(BOOST_DYN_LINK) +# error "Mixing a dll boost library with a static runtime is a really bad idea..." +#else +# define BOOST_LIB_PREFIX "lib" +#endif + +// +// now include the lib: +// +#if defined(BOOST_LIB_NAME) \ + && defined(BOOST_LIB_PREFIX) \ + && defined(BOOST_LIB_TOOLSET) \ + && defined(BOOST_LIB_THREAD_OPT) \ + && defined(BOOST_LIB_RT_OPT) \ + && defined(BOOST_LIB_VERSION) + +#ifndef BOOST_AUTO_LINK_NOMANGLE +# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib") +# ifdef BOOST_LIB_DIAGNOSTIC +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib") +# endif +#else +# pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") +# ifdef BOOST_LIB_DIAGNOSTIC +# pragma message ("Linking to lib file: " BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") +# endif +#endif + +#else +# error "some required macros where not defined (internal logic error)." +#endif + + +#endif // _MSC_VER || __BORLANDC__ + +// +// finally undef any macros we may have set: +// +#ifdef BOOST_LIB_PREFIX +# undef BOOST_LIB_PREFIX +#endif +#if defined(BOOST_LIB_NAME) +# undef BOOST_LIB_NAME +#endif +// Don't undef this one: it can be set by the user and should be the +// same for all libraries: +//#if defined(BOOST_LIB_TOOLSET) +//# undef BOOST_LIB_TOOLSET +//#endif +#if defined(BOOST_LIB_THREAD_OPT) +# undef BOOST_LIB_THREAD_OPT +#endif +#if defined(BOOST_LIB_RT_OPT) +# undef BOOST_LIB_RT_OPT +#endif +#if defined(BOOST_LIB_LINK_OPT) +# undef BOOST_LIB_LINK_OPT +#endif +#if defined(BOOST_LIB_DEBUG_OPT) +# undef BOOST_LIB_DEBUG_OPT +#endif +#if defined(BOOST_DYN_LINK) +# undef BOOST_DYN_LINK +#endif +#if defined(BOOST_AUTO_LINK_NOMANGLE) +# undef BOOST_AUTO_LINK_NOMANGLE +#endif + + + + + + + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/borland.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/borland.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/borland.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/borland.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,267 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// Borland C++ compiler setup: + +// +// versions check: +// we don't support Borland prior to version 5.4: +#if __BORLANDC__ < 0x540 +# error "Compiler not supported or configured - please reconfigure" +#endif + +// last known compiler version: +#if (__BORLANDC__ > 0x613) +//# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +//# else +//# pragma message( "Unknown compiler version - please run the configure tests and report the results") +//# endif +#elif (__BORLANDC__ == 0x600) +# error "CBuilderX preview compiler is no longer supported" +#endif + +// +// Support macros to help with standard library detection +#if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL) +# define BOOST_BCB_WITH_ROGUE_WAVE +#elif __BORLANDC__ < 0x570 +# define BOOST_BCB_WITH_STLPORT +#else +# define BOOST_BCB_WITH_DINKUMWARE +#endif + +// +// Version 5.0 and below: +# if __BORLANDC__ <= 0x0550 +// Borland C++Builder 4 and 5: +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# if __BORLANDC__ == 0x0550 +// Borland C++Builder 5, command-line compiler 5.5: +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# endif +# endif + +// Version 5.51 and below: +#if (__BORLANDC__ <= 0x551) +# define BOOST_NO_CV_SPECIALIZATIONS +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# define BOOST_NO_DEDUCED_TYPENAME +// workaround for missing WCHAR_MAX/WCHAR_MIN: +#include +#include +#ifndef WCHAR_MAX +# define WCHAR_MAX 0xffff +#endif +#ifndef WCHAR_MIN +# define WCHAR_MIN 0 +#endif +#endif + +// Borland C++ Builder 6 and below: +#if (__BORLANDC__ <= 0x564) + +# ifdef NDEBUG + // fix broken so that Boost.test works: +# include +# undef strcmp +# endif + // fix broken errno declaration: +# include +# ifndef errno +# define errno errno +# endif + +#endif + +// +// new bug in 5.61: +#if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580) + // this seems to be needed by the command line compiler, but not the IDE: +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +#endif + +// Borland C++ Builder 2006 Update 2 and below: +#if (__BORLANDC__ <= 0x582) +# define BOOST_NO_SFINAE +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +# define BOOST_NO_TEMPLATE_TEMPLATES + +# define BOOST_NO_PRIVATE_IN_AGGREGATE + +# ifdef _WIN32 +# define BOOST_NO_SWPRINTF +# elif defined(linux) || defined(__linux__) || defined(__linux) + // we should really be able to do without this + // but the wcs* functions aren't imported into std:: +# define BOOST_NO_STDC_NAMESPACE + // _CPPUNWIND doesn't get automatically set for some reason: +# pragma defineonoption BOOST_CPPUNWIND -x +# endif +#endif + +#if (__BORLANDC__ <= 0x613) // Beman has asked Alisdair for more info + // we shouldn't really need this - but too many things choke + // without it, this needs more investigation: +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS +# define BOOST_NO_USING_TEMPLATE +# define BOOST_SP_NO_SP_CONVERTIBLE + +// Temporary workaround +#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif + +// Borland C++ Builder 2008 and below: +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_NO_NESTED_FRIENDSHIP +# define BOOST_NO_TYPENAME_WITH_CTOR +#if (__BORLANDC__ < 0x600) +# define BOOST_ILLEGAL_CV_REFERENCES +#endif + +// +// Positive Feature detection +// +// Borland C++ Builder 2008 and below: +#if (__BORLANDC__ >= 0x599) +# pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax +#endif +// +// C++0x Macros: +// +#if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610) +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +# define BOOST_NO_DECLTYPE +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_EXTERN_TEMPLATE +# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_STATIC_ASSERT +#else +# define BOOST_HAS_ALIGNOF +# define BOOST_HAS_CHAR16_T +# define BOOST_HAS_CHAR32_T +# define BOOST_HAS_DECLTYPE +# define BOOST_HAS_EXPLICIT_CONVERSION_OPS +# define BOOST_HAS_REF_QUALIFIER +# define BOOST_HAS_RVALUE_REFS +# define BOOST_HAS_STATIC_ASSERT +#endif + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS // UTF-8 still not supported +#define BOOST_NO_VARIADIC_TEMPLATES + +#if __BORLANDC__ >= 0x590 +# define BOOST_HAS_TR1_HASH + +# define BOOST_HAS_MACRO_USE_FACET +#endif + +// +// Post 0x561 we have long long and stdint.h: +#if __BORLANDC__ >= 0x561 +# ifndef __NO_LONG_LONG +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_LONG_LONG +# endif + // On non-Win32 platforms let the platform config figure this out: +# ifdef _WIN32 +# define BOOST_HAS_STDINT_H +# endif +#endif + +// Borland C++Builder 6 defaults to using STLPort. If _USE_OLD_RW_STL is +// defined, then we have 0x560 or greater with the Rogue Wave implementation +// which presumably has the std::DBL_MAX bug. +#if defined( BOOST_BCB_WITH_ROGUE_WAVE ) +// is partly broken, some macros define symbols that are really in +// namespace std, so you end up having to use illegal constructs like +// std::DBL_MAX, as a fix we'll just include float.h and have done with: +#include +#endif +// +// __int64: +// +#if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__) +# define BOOST_HAS_MS_INT64 +#endif +// +// check for exception handling support: +// +#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif +// +// all versions have a : +// +#ifndef __STRICT_ANSI__ +# define BOOST_HAS_DIRENT_H +#endif +// +// all versions support __declspec: +// +#ifndef __STRICT_ANSI__ +# define BOOST_HAS_DECLSPEC +#endif +// +// ABI fixing headers: +// +#if __BORLANDC__ != 0x600 // not implemented for version 6 compiler yet +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp" +#endif +#endif +// +// Disable Win32 support in ANSI mode: +// +#if __BORLANDC__ < 0x600 +# pragma defineonoption BOOST_DISABLE_WIN32 -A +#elif defined(__STRICT_ANSI__) +# define BOOST_DISABLE_WIN32 +#endif +// +// MSVC compatibility mode does some nasty things: +// TODO: look up if this doesn't apply to the whole 12xx range +// +#if defined(_MSC_VER) && (_MSC_VER <= 1200) +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# define BOOST_NO_VOID_RETURNS +#endif + +#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__) + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/codegear.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/codegear.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/codegear.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/codegear.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,163 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// CodeGear C++ compiler setup: + +#if !defined( BOOST_WITH_CODEGEAR_WARNINGS ) +// these warnings occur frequently in optimized template code +# pragma warn -8004 // var assigned value, but never used +# pragma warn -8008 // condition always true/false +# pragma warn -8066 // dead code can never execute +# pragma warn -8104 // static members with ctors not threadsafe +# pragma warn -8105 // reference member in class without ctors +#endif +// +// versions check: +// last known and checked version is 0x620 +#if (__CODEGEARC__ > 0x620) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +# pragma message( "Unknown compiler version - please run the configure tests and report the results") +# endif +#endif + +// CodeGear C++ Builder 2009 +#if (__CODEGEARC__ <= 0x613) +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_PRIVATE_IN_AGGREGATE +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE + // we shouldn't really need this - but too many things choke + // without it, this needs more investigation: +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_SP_NO_SP_CONVERTIBLE +#endif + +// CodeGear C++ Builder 2010 +#if (__CODEGEARC__ <= 0x620) +# define BOOST_NO_TYPENAME_WITH_CTOR // Cannot use typename keyword when making temporaries of a dependant type +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_NESTED_FRIENDSHIP // TC1 gives nested classes access rights as any other member +# define BOOST_NO_USING_TEMPLATE +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +// Temporary hack, until specific MPL preprocessed headers are generated +# define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +# ifdef NDEBUG + // fix broken so that Boost.test works: +# include +# undef strcmp +# endif + // fix broken errno declaration: +# include +# ifndef errno +# define errno errno +# endif + +#endif +// +// C++0x macros: +// +#define BOOST_HAS_CHAR16_T +#define BOOST_HAS_CHAR32_T +#define BOOST_HAS_LONG_LONG +// #define BOOST_HAS_ALIGNOF +#define BOOST_HAS_DECLTYPE +#define BOOST_HAS_EXPLICIT_CONVERSION_OPS +// #define BOOST_HAS_RVALUE_REFS +#define BOOST_HAS_SCOPED_ENUM +// #define BOOST_HAS_STATIC_ASSERT +#define BOOST_HAS_STD_TYPE_TRAITS + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// TR1 macros: +// +#define BOOST_HAS_TR1_HASH +#define BOOST_HAS_TR1_TYPE_TRAITS +#define BOOST_HAS_TR1_UNORDERED_MAP +#define BOOST_HAS_TR1_UNORDERED_SET + +#define BOOST_HAS_MACRO_USE_FACET + +#define BOOST_NO_INITIALIZER_LISTS + +// On non-Win32 platforms let the platform config figure this out: +#ifdef _WIN32 +# define BOOST_HAS_STDINT_H +#endif + +// +// __int64: +// +#if !defined(__STRICT_ANSI__) +# define BOOST_HAS_MS_INT64 +#endif +// +// check for exception handling support: +// +#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +#endif +// +// all versions have a : +// +#if !defined(__STRICT_ANSI__) +# define BOOST_HAS_DIRENT_H +#endif +// +// all versions support __declspec: +// +#if !defined(__STRICT_ANSI__) +# define BOOST_HAS_DECLSPEC +#endif +// +// ABI fixing headers: +// +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp" +#endif +// +// Disable Win32 support in ANSI mode: +// +# pragma defineonoption BOOST_DISABLE_WIN32 -A +// +// MSVC compatibility mode does some nasty things: +// TODO: look up if this doesn't apply to the whole 12xx range +// +#if defined(_MSC_VER) && (_MSC_VER <= 1200) +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# define BOOST_NO_VOID_RETURNS +#endif + +#define BOOST_COMPILER "CodeGear C++ version " BOOST_STRINGIZE(__CODEGEARC__) + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/comeau.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/comeau.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/comeau.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/comeau.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,59 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Douglas Gregor 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Aleksey Gurtovoy 2003. +// (C) Copyright Beman Dawes 2003. +// (C) Copyright Jens Maurer 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// Comeau C++ compiler setup: + +#include "boost/config/compiler/common_edg.hpp" + +#if (__COMO_VERSION__ <= 4245) + +# if defined(_MSC_VER) && _MSC_VER <= 1300 +# if _MSC_VER > 100 + // only set this in non-strict mode: +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# endif +# endif + +// Void returns don't work when emulating VC 6 (Peter Dimov) +// TODO: look up if this doesn't apply to the whole 12xx range +# if defined(_MSC_VER) && (_MSC_VER < 1300) +# define BOOST_NO_VOID_RETURNS +# endif + +#endif // version 4245 + +// +// enable __int64 support in VC emulation mode +// +# if defined(_MSC_VER) && (_MSC_VER >= 1200) +# define BOOST_HAS_MS_INT64 +# endif + +#define BOOST_COMPILER "Comeau compiler version " BOOST_STRINGIZE(__COMO_VERSION__) + +// +// versions check: +// we don't know Comeau prior to version 4245: +#if __COMO_VERSION__ < 4245 +# error "Compiler not configured - please reconfigure" +#endif +// +// last known and checked version is 4245: +#if (__COMO_VERSION__ > 4245) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/common_edg.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/common_edg.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/common_edg.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/common_edg.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,97 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright Markus Schoepflin 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) + +// See http://www.boost.org for most recent version. + +// +// Options common to all edg based compilers. +// +// This is included from within the individual compiler mini-configs. + +#ifndef __EDG_VERSION__ +# error This file requires that __EDG_VERSION__ be defined. +#endif + +#if (__EDG_VERSION__ <= 238) +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_SFINAE +#endif + +#if (__EDG_VERSION__ <= 240) +# define BOOST_NO_VOID_RETURNS +#endif + +#if (__EDG_VERSION__ <= 241) && !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +#endif + +#if (__EDG_VERSION__ <= 244) && !defined(BOOST_NO_TEMPLATE_TEMPLATES) +# define BOOST_NO_TEMPLATE_TEMPLATES +#endif + +#if (__EDG_VERSION__ < 300) && !defined(BOOST_NO_IS_ABSTRACT) +# define BOOST_NO_IS_ABSTRACT +#endif + +#if (__EDG_VERSION__ <= 303) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// See also kai.hpp which checks a Kai-specific symbol for EH +# if !defined(__KCC) && !defined(__EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +# endif + +# if !defined(__NO_LONG_LONG) +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_LONG_LONG +# endif + +// +// C++0x features +// +// See above for BOOST_NO_LONG_LONG +// +#if (__EDG_VERSION__ <= 310) || !defined(BOOST_STRICT_CONFIG) +// No support for initializer lists +# define BOOST_NO_INITIALIZER_LISTS +#endif + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +#ifdef c_plusplus +// EDG has "long long" in non-strict mode +// However, some libraries have insufficient "long long" support +// #define BOOST_HAS_LONG_LONG +#endif + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/compaq_cxx.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/compaq_cxx.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/compaq_cxx.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/compaq_cxx.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,19 @@ +// (C) Copyright John Maddock 2001 - 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// Tru64 C++ compiler setup (now HP): + +#define BOOST_COMPILER "HP Tru64 C++ " BOOST_STRINGIZE(__DECCXX_VER) + +#include "boost/config/compiler/common_edg.hpp" + +// +// versions check: +// Nothing to do here? + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/digitalmars.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/digitalmars.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/digitalmars.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/digitalmars.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,93 @@ +// Copyright (C) Christof Meerwald 2003 +// Copyright (C) Dan Watkins 2003 +// +// 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) + +// Digital Mars C++ compiler setup: +#define BOOST_COMPILER __DMC_VERSION_STRING__ + +#define BOOST_HAS_LONG_LONG +#define BOOST_HAS_PRAGMA_ONCE + +#if (__DMC__ <= 0x833) +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TEMPLATE_TEMPLATES +#define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING +#define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +#endif +#if (__DMC__ <= 0x840) || !defined(BOOST_STRICT_CONFIG) +#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +#define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#define BOOST_NO_OPERATORS_IN_NAMESPACE +#define BOOST_NO_UNREACHABLE_RETURN_DETECTION +#define BOOST_NO_SFINAE +#define BOOST_NO_USING_TEMPLATE +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// +// has macros: +#if (__DMC__ >= 0x840) +#define BOOST_HAS_DIRENT_H +#define BOOST_HAS_STDINT_H +#define BOOST_HAS_WINTHREADS +#endif + +#if (__DMC__ >= 0x847) +#define BOOST_HAS_EXPM1 +#define BOOST_HAS_LOG1P +#endif + +// +// Is this really the best way to detect whether the std lib is in namespace std? +// +#include +#if !defined(__STL_IMPORT_VENDOR_CSTD) && !defined(_STLP_IMPORT_VENDOR_CSTD) +# define BOOST_NO_STDC_NAMESPACE +#endif + + +// check for exception handling support: +#ifndef _CPPUNWIND +# define BOOST_NO_EXCEPTIONS +#endif + +// +// C++0x features +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +#if __DMC__ < 0x800 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is ...: +#if (__DMC__ > 0x848) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/gcc.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/gcc.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/gcc.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/gcc.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,204 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Jens Maurer 2001 - 2002. +// (C) Copyright Beman Dawes 2001 - 2003. +// (C) Copyright Douglas Gregor 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Synge Todo 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// GNU C++ compiler setup: + +#if __GNUC__ < 3 +# if __GNUC_MINOR__ == 91 + // egcs 1.1 won't parse shared_ptr.hpp without this: +# define BOOST_NO_AUTO_PTR +# endif +# if __GNUC_MINOR__ < 95 + // + // Prior to gcc 2.95 member templates only partly + // work - define BOOST_MSVC6_MEMBER_TEMPLATES + // instead since inline member templates mostly work. + // +# define BOOST_NO_MEMBER_TEMPLATES +# if __GNUC_MINOR__ >= 9 +# define BOOST_MSVC6_MEMBER_TEMPLATES +# endif +# endif + +# if __GNUC_MINOR__ < 96 +# define BOOST_NO_SFINAE +# endif + +# if __GNUC_MINOR__ <= 97 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# endif + +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_IS_ABSTRACT +#elif __GNUC__ == 3 +# if defined (__PATHSCALE__) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_IS_ABSTRACT +# endif + // + // gcc-3.x problems: + // + // Bug specific to gcc 3.1 and 3.2: + // +# if ((__GNUC_MINOR__ == 1) || (__GNUC_MINOR__ == 2)) +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# endif +# if __GNUC_MINOR__ < 4 +# define BOOST_NO_IS_ABSTRACT +# endif +#endif +#if __GNUC__ < 4 +// +// All problems to gcc-3.x and earlier here: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# ifdef __OPEN64__ +# define BOOST_NO_IS_ABSTRACT +# endif +#endif + +#ifndef __EXCEPTIONS +# define BOOST_NO_EXCEPTIONS +#endif + + +// +// Threading support: Turn this on unconditionally here (except for +// those platforms where we can know for sure). It will get turned off again +// later if no threading API is detected. +// +#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__) +# define BOOST_HAS_THREADS +#endif + +// +// gcc has "long long" +// +#define BOOST_HAS_LONG_LONG + +// +// gcc implements the named return value optimization since version 3.1 +// +#if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 ) +#define BOOST_HAS_NRVO +#endif +// +// RTTI and typeinfo detection is possible post gcc-4.3: +// +#if __GNUC__ * 100 + __GNUC_MINOR__ >= 403 +# ifndef __GXX_RTTI +# define BOOST_NO_TYPEID +# define BOOST_NO_RTTI +# endif +#endif + +// C++0x features not implemented in any GCC version +// +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS + +// C++0x features in 4.3.n and later +// +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) && defined(__GXX_EXPERIMENTAL_CXX0X__) +// C++0x features are only enabled when -std=c++0x or -std=gnu++0x are +// passed on the command line, which in turn defines +// __GXX_EXPERIMENTAL_CXX0X__. +# define BOOST_HAS_DECLTYPE +# define BOOST_HAS_RVALUE_REFS +# define BOOST_HAS_STATIC_ASSERT +# define BOOST_HAS_VARIADIC_TMPL +#else +# define BOOST_NO_DECLTYPE +# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_STATIC_ASSERT + +// Variadic templates compiler: +// http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html +# ifdef __VARIADIC_TEMPLATES +# define BOOST_HAS_VARIADIC_TMPL +# else +# define BOOST_NO_VARIADIC_TEMPLATES +# endif +#endif + +// C++0x features in 4.4.n and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_AUTO_DECLARATIONS +# define BOOST_NO_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CHAR16_T +# define BOOST_NO_CHAR32_T +# define BOOST_NO_DEFAULTED_FUNCTIONS +# define BOOST_NO_DELETED_FUNCTIONS +# define BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_SCOPED_ENUMS +#endif + +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) +# define BOOST_NO_SFINAE_EXPR +#endif + +// C++0x features in 4.4.1 and later +// +#if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40401) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +// scoped enums have a serious bug in 4.4.0, so define BOOST_NO_SCOPED_ENUMS before 4.4.1 +// See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064 +# define BOOST_NO_SCOPED_ENUMS +#endif + +// C++0x features in 4.5.n and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#endif + +// ConceptGCC compiler: +// http://www.generic-programming.org/software/ConceptGCC/ +#ifdef __GXX_CONCEPTS__ +# define BOOST_HAS_CONCEPTS +# define BOOST_COMPILER "ConceptGCC version " __VERSION__ +#else +# define BOOST_NO_CONCEPTS +#endif + +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "GNU C++ version " __VERSION__ +#endif + +// +// versions check: +// we don't know gcc prior to version 2.90: +#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 90) +# error "Compiler not configured - please reconfigure" +#endif +// +// last known and checked version is 4.4 (Pre-release): +#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 4)) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +// we don't emit warnings here anymore since there are no defect macros defined for +// gcc post 3.4, so any failures are gcc regressions... +//# warning "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/gcc_xml.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/gcc_xml.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/gcc_xml.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/gcc_xml.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,30 @@ +// (C) Copyright John Maddock 2006. +// 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) + +// See http://www.boost.org for most recent version. + +// GCC-XML C++ compiler setup: + +# if !defined(__GCCXML_GNUC__) || ((__GCCXML_GNUC__ <= 3) && (__GCCXML_GNUC_MINOR__ <= 3)) +# define BOOST_NO_IS_ABSTRACT +# endif + +// +// Threading support: Turn this on unconditionally here (except for +// those platforms where we can know for sure). It will get turned off again +// later if no threading API is detected. +// +#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(linux) && !defined(__linux) && !defined(__linux__) +# define BOOST_HAS_THREADS +#endif + +// +// gcc has "long long" +// +#define BOOST_HAS_LONG_LONG + +#define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__ + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/greenhills.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/greenhills.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/greenhills.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/greenhills.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2001. +// 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) + +// See http://www.boost.org for most recent version. + +// Greenhills C++ compiler setup: + +#define BOOST_COMPILER "Greenhills C++ version " BOOST_STRINGIZE(__ghs) + +#include "boost/config/compiler/common_edg.hpp" + +// +// versions check: +// we don't support Greenhills prior to version 0: +#if __ghs < 0 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0: +#if (__ghs > 0) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/hp_acc.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/hp_acc.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/hp_acc.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/hp_acc.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,127 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Toon Knapen 2003. +// (C) Copyright Boris Gubenko 2006 - 2007. +// 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) + +// See http://www.boost.org for most recent version. + +// HP aCC C++ compiler setup: + +#if defined(__EDG__) +#include "boost/config/compiler/common_edg.hpp" +#endif + +#if (__HP_aCC <= 33100) +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# if !defined(_NAMESPACE_STD) +# define BOOST_NO_STD_LOCALE +# define BOOST_NO_STRINGSTREAM +# endif +#endif + +#if (__HP_aCC <= 33300) +// member templates are sufficiently broken that we disable them for now +# define BOOST_NO_MEMBER_TEMPLATES +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +#endif + +#if (__HP_aCC <= 38000) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#if (__HP_aCC > 50000) && (__HP_aCC < 60000) +# define BOOST_NO_UNREACHABLE_RETURN_DETECTION +# define BOOST_NO_TEMPLATE_TEMPLATES +# define BOOST_NO_SWPRINTF +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#endif + +// optional features rather than defects: +#if (__HP_aCC >= 33900) +# define BOOST_HAS_LONG_LONG +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +#endif + +#if (__HP_aCC >= 50000 ) && (__HP_aCC <= 53800 ) || (__HP_aCC < 31300 ) +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +#endif + +// This macro should not be defined when compiling in strict ansi +// mode, but, currently, we don't have the ability to determine +// what standard mode we are compiling with. Some future version +// of aCC6 compiler will provide predefined macros reflecting the +// compilation options, including the standard mode. +#if (__HP_aCC >= 60000) || ((__HP_aCC > 38000) && defined(__hpxstd98)) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#define BOOST_COMPILER "HP aCC version " BOOST_STRINGIZE(__HP_aCC) + +// +// versions check: +// we don't support HP aCC prior to version 33000: +#if __HP_aCC < 33000 +# error "Compiler not supported or configured - please reconfigure" +#endif + +// +// Extended checks for supporting aCC on PA-RISC +#if __HP_aCC > 30000 && __HP_aCC < 50000 +# if __HP_aCC < 38000 + // versions prior to version A.03.80 not supported +# error "Compiler version not supported - version A.03.80 or higher is required" +# elif !defined(__hpxstd98) + // must compile using the option +hpxstd98 with version A.03.80 and above +# error "Compiler option '+hpxstd98' is required for proper support" +# endif //PA-RISC +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#if !defined(__EDG__) + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES +#endif + +// +// last known and checked version for HP-UX/ia64 is 61300 +// last known and checked version for PA-RISC is 38000 +#if ((__HP_aCC > 61300) || ((__HP_aCC > 38000) && defined(__hpxstd98))) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/intel.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/intel.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/intel.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/intel.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,173 @@ +// (C) Copyright John Maddock 2001-8. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Aleksey Gurtovoy 2002 - 2003. +// (C) Copyright Guillaume Melquiond 2002 - 2003. +// (C) Copyright Beman Dawes 2003. +// (C) Copyright Martin Wille 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// Intel compiler setup: + +#include "boost/config/compiler/common_edg.hpp" + +#if defined(__INTEL_COMPILER) +# define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER +#elif defined(__ICL) +# define BOOST_INTEL_CXX_VERSION __ICL +#elif defined(__ICC) +# define BOOST_INTEL_CXX_VERSION __ICC +#elif defined(__ECC) +# define BOOST_INTEL_CXX_VERSION __ECC +#endif + +#define BOOST_COMPILER "Intel C++ version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION) +#define BOOST_INTEL BOOST_INTEL_CXX_VERSION + +#if defined(_WIN32) || defined(_WIN64) +# define BOOST_INTEL_WIN BOOST_INTEL +#else +# define BOOST_INTEL_LINUX BOOST_INTEL +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 500) && defined(_MSC_VER) +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# define BOOST_NO_TEMPLATE_TEMPLATES +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 600) + +# if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov) + +// Boost libraries assume strong standard conformance unless otherwise +// indicated by a config macro. As configured by Intel, the EDG front-end +// requires certain compiler options be set to achieve that strong conformance. +// Particularly /Qoption,c,--arg_dep_lookup (reported by Kirk Klobe & Thomas Witt) +// and /Zc:wchar_t,forScope. See boost-root/tools/build/intel-win32-tools.jam for +// details as they apply to particular versions of the compiler. When the +// compiler does not predefine a macro indicating if an option has been set, +// this config file simply assumes the option has been set. +// Thus BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP will not be defined, even if +// the compiler option is not enabled. + +# define BOOST_NO_SWPRINTF +# endif + +// Void returns, 64 bit integrals don't work when emulating VC 6 (Peter Dimov) + +# if defined(_MSC_VER) && (_MSC_VER <= 1200) +# define BOOST_NO_VOID_RETURNS +# define BOOST_NO_INTEGRAL_INT64_T +# endif + +#endif + +#if (BOOST_INTEL_CXX_VERSION <= 710) && defined(_WIN32) +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +#endif + +// See http://aspn.activestate.com/ASPN/Mail/Message/boost/1614864 +#if BOOST_INTEL_CXX_VERSION < 600 +# define BOOST_NO_INTRINSIC_WCHAR_T +#else +// We should test the macro _WCHAR_T_DEFINED to check if the compiler +// supports wchar_t natively. *BUT* there is a problem here: the standard +// headers define this macro if they typedef wchar_t. Anyway, we're lucky +// because they define it without a value, while Intel C++ defines it +// to 1. So we can check its value to see if the macro was defined natively +// or not. +// Under UNIX, the situation is exactly the same, but the macro _WCHAR_T +// is used instead. +# if ((_WCHAR_T_DEFINED + 0) == 0) && ((_WCHAR_T + 0) == 0) +# define BOOST_NO_INTRINSIC_WCHAR_T +# endif +#endif + +#if defined(__GNUC__) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +// +// Figure out when Intel is emulating this gcc bug +// (All Intel versions prior to 9.0.26, and versions +// later than that if they are set up to emulate gcc 3.2 +// or earlier): +// +# if ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) || (BOOST_INTEL < 900) || (__INTEL_COMPILER_BUILD_DATE < 20050912) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# endif +#endif +#if (defined(__GNUC__) && (__GNUC__ < 4)) || defined(_WIN32) || (BOOST_INTEL_CXX_VERSION <= 1110) +// GCC or VC emulation: +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif +// +// Verify that we have actually got BOOST_NO_INTRINSIC_WCHAR_T +// set correctly, if we don't do this now, we will get errors later +// in type_traits code among other things, getting this correct +// for the Intel compiler is actually remarkably fragile and tricky: +// +#if defined(BOOST_NO_INTRINSIC_WCHAR_T) +#include +template< typename T > struct assert_no_intrinsic_wchar_t; +template<> struct assert_no_intrinsic_wchar_t { typedef void type; }; +// if you see an error here then you need to unset BOOST_NO_INTRINSIC_WCHAR_T +// where it is defined above: +typedef assert_no_intrinsic_wchar_t::type assert_no_intrinsic_wchar_t_; +#else +template< typename T > struct assert_intrinsic_wchar_t; +template<> struct assert_intrinsic_wchar_t {}; +// if you see an error here then define BOOST_NO_INTRINSIC_WCHAR_T on the command line: +template<> struct assert_intrinsic_wchar_t {}; +#endif + +#if _MSC_VER+0 >= 1000 +# if _MSC_VER >= 1200 +# define BOOST_HAS_MS_INT64 +# endif +# define BOOST_NO_SWPRINTF +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#elif defined(_WIN32) +# define BOOST_DISABLE_WIN32 +#endif + +// I checked version 6.0 build 020312Z, it implements the NRVO. +// Correct this as you find out which version of the compiler +// implemented the NRVO first. (Daniel Frey) +#if (BOOST_INTEL_CXX_VERSION >= 600) +# define BOOST_HAS_NRVO +#endif + +// +// versions check: +// we don't support Intel prior to version 5.0: +#if BOOST_INTEL_CXX_VERSION < 500 +# error "Compiler not supported or configured - please reconfigure" +#endif + +// Intel on MacOS requires +#if defined(__APPLE__) && defined(__INTEL_COMPILER) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +// Intel on Altix Itanium +#if defined(__itanium__) && defined(__INTEL_COMPILER) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +// +// last known and checked version: +#if (BOOST_INTEL_CXX_VERSION > 1110) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# elif defined(_MSC_VER) +// +// We don't emit this warning any more, since we have so few +// defect macros set anyway (just the one). +// +//# pragma message("Unknown compiler version - please run the configure tests and report the results") +# endif +#endif + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/kai.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/kai.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/kai.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/kai.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,33 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// Kai C++ compiler setup: + +#include "boost/config/compiler/common_edg.hpp" + +# if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG) + // at least on Sun, the contents of is not in namespace std +# define BOOST_NO_STDC_NAMESPACE +# endif + +// see also common_edg.hpp which needs a special check for __KCC +# if !defined(_EXCEPTIONS) +# define BOOST_NO_EXCEPTIONS +# endif + +// +// last known and checked version is 4001: +#if (__KCC_VERSION > 4001) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/metrowerks.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/metrowerks.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/metrowerks.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/metrowerks.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,139 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright David Abrahams 2001 - 2002. +// (C) Copyright Beman Dawes 2001 - 2003. +// (C) Copyright Stefan Slapeta 2004. +// 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) + +// See http://www.boost.org for most recent version. + +// Metrowerks C++ compiler setup: + +// locale support is disabled when linking with the dynamic runtime +# ifdef _MSL_NO_LOCALE +# define BOOST_NO_STD_LOCALE +# endif + +# if __MWERKS__ <= 0x2301 // 5.3 +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# define BOOST_NO_POINTER_TO_MEMBER_CONST +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +# endif + +# if __MWERKS__ <= 0x2401 // 6.2 +//# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# endif + +# if(__MWERKS__ <= 0x2407) // 7.x +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +# define BOOST_NO_UNREACHABLE_RETURN_DETECTION +# endif + +# if(__MWERKS__ <= 0x3003) // 8.x +# define BOOST_NO_SFINAE +# endif + +// the "|| !defined(BOOST_STRICT_CONFIG)" part should apply to the last +// tested version *only*: +# if(__MWERKS__ <= 0x3207) || !defined(BOOST_STRICT_CONFIG) // 9.6 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_IS_ABSTRACT +# endif + +#if !__option(wchar_type) +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +#if !__option(exceptions) +# define BOOST_NO_EXCEPTIONS +#endif + +#if (__INTEL__ && _WIN32) || (__POWERPC__ && macintosh) +# if __MWERKS__ == 0x3000 +# define BOOST_COMPILER_VERSION 8.0 +# elif __MWERKS__ == 0x3001 +# define BOOST_COMPILER_VERSION 8.1 +# elif __MWERKS__ == 0x3002 +# define BOOST_COMPILER_VERSION 8.2 +# elif __MWERKS__ == 0x3003 +# define BOOST_COMPILER_VERSION 8.3 +# elif __MWERKS__ == 0x3200 +# define BOOST_COMPILER_VERSION 9.0 +# elif __MWERKS__ == 0x3201 +# define BOOST_COMPILER_VERSION 9.1 +# elif __MWERKS__ == 0x3202 +# define BOOST_COMPILER_VERSION 9.2 +# elif __MWERKS__ == 0x3204 +# define BOOST_COMPILER_VERSION 9.3 +# elif __MWERKS__ == 0x3205 +# define BOOST_COMPILER_VERSION 9.4 +# elif __MWERKS__ == 0x3206 +# define BOOST_COMPILER_VERSION 9.5 +# elif __MWERKS__ == 0x3207 +# define BOOST_COMPILER_VERSION 9.6 +# else +# define BOOST_COMPILER_VERSION __MWERKS__ +# endif +#else +# define BOOST_COMPILER_VERSION __MWERKS__ +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#if __MWERKS__ > 0x3206 && __option(rvalue_refs) +# define BOOST_HAS_RVALUE_REFS +#else +# define BOOST_NO_RVALUE_REFERENCES +#endif +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +#define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) + +// +// versions check: +// we don't support Metrowerks prior to version 5.3: +#if __MWERKS__ < 0x2301 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version: +#if (__MWERKS__ > 0x3205) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/mpw.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/mpw.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/mpw.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/mpw.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,81 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Aleksey Gurtovoy 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// MPW C++ compilers setup: + +# if defined(__SC__) +# define BOOST_COMPILER "MPW SCpp version " BOOST_STRINGIZE(__SC__) +# elif defined(__MRC__) +# define BOOST_COMPILER "MPW MrCpp version " BOOST_STRINGIZE(__MRC__) +# else +# error "Using MPW compiler configuration by mistake. Please update." +# endif + +// +// MPW 8.90: +// +#if (MPW_CPLUS <= 0x890) || !defined(BOOST_STRICT_CONFIG) +# define BOOST_NO_CV_SPECIALIZATIONS +# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_INTRINSIC_WCHAR_T +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# define BOOST_NO_USING_TEMPLATE + +# define BOOST_NO_CWCHAR +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + +# define BOOST_NO_STD_ALLOCATOR /* actually a bug with const reference overloading */ + +#endif + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// versions check: +// we don't support MPW prior to version 8.9: +#if MPW_CPLUS < 0x890 +# error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0x890: +#if (MPW_CPLUS > 0x890) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/pgi.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/pgi.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/pgi.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/pgi.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,62 @@ +// (C) Copyright Noel Belcourt 2007. +// 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) + +// See http://www.boost.org for most recent version. + +// PGI C++ compiler setup: + +#define BOOST_COMPILER_VERSION __PGIC__##__PGIC_MINOR__ +#define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) + +// +// Threading support: +// Turn this on unconditionally here, it will get turned off again later +// if no threading API is detected. +// + +#if (__PGIC__ >= 7) + +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_SWPRINTF + +#else + +# error "Pgi compiler not configured - please reconfigure" + +#endif +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// version check: +// probably nothing to do here? + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/sgi_mipspro.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/sgi_mipspro.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/sgi_mipspro.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/sgi_mipspro.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,29 @@ +// (C) Copyright John Maddock 2001 - 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// SGI C++ compiler setup: + +#define BOOST_COMPILER "SGI Irix compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) + +#include "boost/config/compiler/common_edg.hpp" + +// +// Threading support: +// Turn this on unconditionally here, it will get turned off again later +// if no threading API is detected. +// +#define BOOST_HAS_THREADS +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP + +#undef BOOST_NO_SWPRINTF +#undef BOOST_DEDUCED_TYPENAME + +// +// version check: +// probably nothing to do here? + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/sunpro_cc.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/sunpro_cc.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/sunpro_cc.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/sunpro_cc.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,130 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright Peter Dimov 2002. +// (C) Copyright Aleksey Gurtovoy 2002 - 2003. +// (C) Copyright David Abrahams 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// Sun C++ compiler setup: + +# if __SUNPRO_CC <= 0x500 +# define BOOST_NO_MEMBER_TEMPLATES +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# endif + +# if (__SUNPRO_CC <= 0x520) + // + // Sunpro 5.2 and earler: + // + // although sunpro 5.2 supports the syntax for + // inline initialization it often gets the value + // wrong, especially where the value is computed + // from other constants (J Maddock 6th May 2001) +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION + + // Although sunpro 5.2 supports the syntax for + // partial specialization, it often seems to + // bind to the wrong specialization. Better + // to disable it until suppport becomes more stable + // (J Maddock 6th May 2001). +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# endif + +# if (__SUNPRO_CC <= 0x530) + // Requesting debug info (-g) with Boost.Python results + // in an internal compiler error for "static const" + // initialized in-class. + // >> Assertion: (../links/dbg_cstabs.cc, line 611) + // while processing ../test.cpp at line 0. + // (Jens Maurer according to Gottfried Ganssauge 04 Mar 2002) +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION + + // SunPro 5.3 has better support for partial specialization, + // but breaks when compiling std::less > + // (Jens Maurer 4 Nov 2001). + + // std::less specialization fixed as reported by George + // Heintzelman; partial specialization re-enabled + // (Peter Dimov 17 Jan 2002) + +//# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + + // integral constant expressions with 64 bit numbers fail +# define BOOST_NO_INTEGRAL_INT64_T +# endif + +# if (__SUNPRO_CC < 0x570) +# define BOOST_NO_TEMPLATE_TEMPLATES + // see http://lists.boost.org/MailArchives/boost/msg47184.php + // and http://lists.boost.org/MailArchives/boost/msg47220.php +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_SFINAE +# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +# endif +# if (__SUNPRO_CC <= 0x580) +# define BOOST_NO_IS_ABSTRACT +# endif + +// +// Issues that effect all known versions: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_ADL_BARRIER + +// +// C++0x features +// + +#if(__SUNPRO_CC >= 0x590) +# define BOOST_HAS_LONG_LONG +#else +# define BOOST_NO_LONG_LONG +#endif + +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// Version +// + +#define BOOST_COMPILER "Sun compiler version " BOOST_STRINGIZE(__SUNPRO_CC) + +// +// versions check: +// we don't support sunpro prior to version 4: +#if __SUNPRO_CC < 0x400 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 0x590: +#if (__SUNPRO_CC > 0x590) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/vacpp.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/vacpp.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/vacpp.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/vacpp.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,88 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Toon Knapen 2001 - 2003. +// (C) Copyright Lie-Quan Lee 2001. +// (C) Copyright Markus Schoepflin 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// Visual Age (IBM) C++ compiler setup: + +#if __IBMCPP__ <= 501 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +#endif + +#if (__IBMCPP__ <= 502) +// Actually the compiler supports inclass member initialization but it +// requires a definition for the class member and it doesn't recognize +// it as an integral constant expression when used as a template argument. +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD +#endif + +#if (__IBMCPP__ <= 600) || !defined(BOOST_STRICT_CONFIG) +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +# define BOOST_NO_INITIALIZER_LISTS +#endif + +// +// On AIX thread support seems to be indicated by _THREAD_SAFE: +// +#ifdef _THREAD_SAFE +# define BOOST_HAS_THREADS +#endif + +#define BOOST_COMPILER "IBM Visual Age version " BOOST_STRINGIZE(__IBMCPP__) + +// +// versions check: +// we don't support Visual age prior to version 5: +#if __IBMCPP__ < 500 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 600: +#if (__IBMCPP__ > 1010) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + +// Some versions of the compiler have issues with default arguments on partial specializations +#define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS + +// +// C++0x features +// +// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG +// +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DECLTYPE +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_LAMBDAS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/compiler/visualc.hpp clucene-core-2.3.3.4/src/ext/boost/config/compiler/visualc.hpp --- clucene-core-0.9.21b/src/ext/boost/config/compiler/visualc.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/compiler/visualc.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,258 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Aleksey Gurtovoy 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// Microsoft Visual C++ compiler setup: + +#define BOOST_MSVC _MSC_VER + +#if _MSC_FULL_VER > 100000000 +# define BOOST_MSVC_FULL_VER _MSC_FULL_VER +#else +# define BOOST_MSVC_FULL_VER (_MSC_FULL_VER * 10) +#endif + +// turn off the warnings before we #include anything +#pragma warning( disable : 4503 ) // warning: decorated name length exceeded + +#if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4 +# pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# define BOOST_NO_VOID_RETURNS +# define BOOST_NO_EXCEPTION_STD_NAMESPACE + +# if BOOST_MSVC == 1202 +# define BOOST_NO_STD_TYPEINFO +# endif + + // disable min/max macro defines on vc6: + // +#endif + +#if (_MSC_VER <= 1300) // 1300 == VC++ 7.0 + +# if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za +# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS +# endif + +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_NO_PRIVATE_IN_AGGREGATE +# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP +# define BOOST_NO_INTEGRAL_INT64_T +# define BOOST_NO_DEDUCED_TYPENAME +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE + +// VC++ 6/7 has member templates but they have numerous problems including +// cases of silent failure, so for safety we define: +# define BOOST_NO_MEMBER_TEMPLATES +// For VC++ experts wishing to attempt workarounds, we define: +# define BOOST_MSVC6_MEMBER_TEMPLATES + +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING +# define BOOST_NO_USING_TEMPLATE +# define BOOST_NO_SWPRINTF +# define BOOST_NO_TEMPLATE_TEMPLATES +# define BOOST_NO_SFINAE +# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS +# define BOOST_NO_IS_ABSTRACT +# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS +// TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)? +# if (_MSC_VER > 1200) +# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS +# endif + +#endif + +#if _MSC_VER < 1400 +// although a conforming signature for swprint exists in VC7.1 +// it appears not to actually work: +# define BOOST_NO_SWPRINTF +#endif + +#if defined(UNDER_CE) +// Windows CE does not have a conforming signature for swprintf +# define BOOST_NO_SWPRINTF +#endif + +#if _MSC_VER <= 1400 // 1400 == VC++ 8.0 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +#endif + +#if _MSC_VER <= 1600 // 1600 == VC++ 10.0 +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#if _MSC_VER == 1500 // 1500 == VC++ 9.0 + // A bug in VC9: +# define BOOST_NO_ADL_BARRIER +#endif + +#if _MSC_VER <= 1500 || !defined(BOOST_STRICT_CONFIG) // 1500 == VC++ 9.0 +# define BOOST_NO_INITIALIZER_LISTS +#endif + +#ifndef _NATIVE_WCHAR_T_DEFINED +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +#if defined(_WIN32_WCE) || defined(UNDER_CE) +# define BOOST_NO_THREADEX +# define BOOST_NO_GETSYSTEMTIMEASFILETIME +# define BOOST_NO_SWPRINTF +#endif + +// +// check for exception handling support: +#ifndef _CPPUNWIND +# define BOOST_NO_EXCEPTIONS +#endif + +// +// __int64 support: +// +#if (_MSC_VER >= 1200) +# define BOOST_HAS_MS_INT64 +#endif +#if (_MSC_VER >= 1310) && (defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1500)) +# define BOOST_HAS_LONG_LONG +#else +# define BOOST_NO_LONG_LONG +#endif +#if (_MSC_VER >= 1400) && !defined(_DEBUG) +# define BOOST_HAS_NRVO +#endif +// +// disable Win32 API's if compiler extentions are +// turned off: +// +#if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32) +# define BOOST_DISABLE_WIN32 +#endif +#if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI) +# define BOOST_NO_RTTI +#endif + +// +// all versions support __declspec: +// +#define BOOST_HAS_DECLSPEC + +// +// C++0x features +// +// See above for BOOST_NO_LONG_LONG + +// C++ features supported by VC++ 10 (aka 2010) +// +#if _MSC_VER < 1600 +#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_AUTO_MULTIDECLARATIONS +#define BOOST_NO_DECLTYPE +#define BOOST_NO_LAMBDAS +#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_STATIC_ASSERT +#endif // _MSC_VER < 1600 + +// C++0x features not supported by any versions +#define BOOST_NO_CHAR16_T +#define BOOST_NO_CHAR32_T +#define BOOST_NO_CONCEPTS +#define BOOST_NO_CONSTEXPR +#define BOOST_NO_DEFAULTED_FUNCTIONS +#define BOOST_NO_DELETED_FUNCTIONS +#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_EXTERN_TEMPLATE +#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_NULLPTR +#define BOOST_NO_RAW_LITERALS +#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_TEMPLATE_ALIASES +#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_VARIADIC_TEMPLATES + +// +// prefix and suffix headers: +// +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp" +#endif + +// TODO: +// these things are mostly bogus. 1200 means version 12.0 of the compiler. The +// artificial versions assigned to them only refer to the versions of some IDE +// these compilers have been shipped with, and even that is not all of it. Some +// were shipped with freely downloadable SDKs, others as crosscompilers in eVC. +// IOW, you can't use these 'versions' in any sensible way. Sorry. +# if defined(UNDER_CE) +# if _MSC_VER < 1200 + // Note: these are so far off, they are not really supported +# elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202 +# define BOOST_COMPILER_VERSION evc4.0 +# elif _MSC_VER == 1400 +# define BOOST_COMPILER_VERSION evc8 +# elif _MSC_VER == 1500 +# define BOOST_COMPILER_VERSION evc9 +# elif _MSC_VER == 1600 +# define BOOST_COMPILER_VERSION evc10 +# else +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown EVC++ compiler version - please run the configure tests and report the results" +# else +# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") +# endif +# endif +# else +# if _MSC_VER < 1200 + // Note: these are so far off, they are not really supported +# define BOOST_COMPILER_VERSION 5.0 +# elif _MSC_VER < 1300 +# define BOOST_COMPILER_VERSION 6.0 +# elif _MSC_VER == 1300 +# define BOOST_COMPILER_VERSION 7.0 +# elif _MSC_VER == 1310 +# define BOOST_COMPILER_VERSION 7.1 +# elif _MSC_VER == 1400 +# define BOOST_COMPILER_VERSION 8.0 +# elif _MSC_VER == 1500 +# define BOOST_COMPILER_VERSION 9.0 +# elif _MSC_VER == 1600 +# define BOOST_COMPILER_VERSION 10.0 +# else +# define BOOST_COMPILER_VERSION _MSC_VER +# endif +# endif + +#define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) + +// +// versions check: +// we don't support Visual C++ prior to version 6: +#if _MSC_VER < 1200 +#error "Compiler not supported or configured - please reconfigure" +#endif +// +// last known and checked version is 1600 (VC10, aka 2010): +#if (_MSC_VER > 1600) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +# pragma message("Unknown compiler version - please run the configure tests and report the results") +# endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/no_tr1/cmath.hpp clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/cmath.hpp --- clucene-core-0.9.21b/src/ext/boost/config/no_tr1/cmath.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/cmath.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2008. +// 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) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/cmath is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_CMATH +# define BOOST_CONFIG_CMATH + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_CMATH_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_CMATH_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_CMATH_RECURSION +# endif + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/no_tr1/complex.hpp clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/complex.hpp --- clucene-core-0.9.21b/src/ext/boost/config/no_tr1/complex.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/complex.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +// (C) 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) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/complex is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_COMPLEX +# define BOOST_CONFIG_COMPLEX + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_COMPLEX_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_COMPLEX_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_COMPLEX_RECURSION +# endif + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/no_tr1/functional.hpp clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/functional.hpp --- clucene-core-0.9.21b/src/ext/boost/config/no_tr1/functional.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/functional.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +// (C) 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) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/functional is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_FUNCTIONAL +# define BOOST_CONFIG_FUNCTIONAL + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_FUNCTIONAL_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION +# endif + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/no_tr1/memory.hpp clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/memory.hpp --- clucene-core-0.9.21b/src/ext/boost/config/no_tr1/memory.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/memory.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +// (C) 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) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/memory is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_MEMORY +# define BOOST_CONFIG_MEMORY + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_MEMORY_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_MEMORY_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_MEMORY_RECURSION +# endif + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/no_tr1/utility.hpp clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/utility.hpp --- clucene-core-0.9.21b/src/ext/boost/config/no_tr1/utility.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/no_tr1/utility.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +// (C) 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) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/utility is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_UTILITY +# define BOOST_CONFIG_UTILITY + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_UTILITY_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/aix.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/aix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/aix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/aix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,33 @@ +// (C) Copyright John Maddock 2001 - 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// IBM/Aix specific config options: + +#define BOOST_PLATFORM "IBM Aix" + +#define BOOST_HAS_UNISTD_H +#define BOOST_HAS_NL_TYPES_H +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_CLOCK_GETTIME + +// This needs support in "boost/cstdint.hpp" exactly like FreeBSD. +// This platform has header named which includes all +// the things needed. +#define BOOST_HAS_STDINT_H + +// Threading API's: +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_PTHREAD_DELAY_NP +#define BOOST_HAS_SCHED_YIELD +//#define BOOST_HAS_PTHREAD_YIELD + +// boilerplate code: +#include + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/amigaos.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/amigaos.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/amigaos.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/amigaos.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,15 @@ +// (C) Copyright John Maddock 2002. +// 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) + +// See http://www.boost.org for most recent version. + +#define BOOST_PLATFORM "AmigaOS" + +#define BOOST_DISABLE_THREADS +#define BOOST_NO_CWCHAR +#define BOOST_NO_STD_WSTRING +#define BOOST_NO_INTRINSIC_WCHAR_T + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/beos.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/beos.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/beos.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/beos.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,26 @@ +// (C) Copyright John Maddock 2001. +// 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) + +// See http://www.boost.org for most recent version. + +// BeOS specific config options: + +#define BOOST_PLATFORM "BeOS" + +#define BOOST_NO_CWCHAR +#define BOOST_NO_CWCTYPE +#define BOOST_HAS_UNISTD_H + +#define BOOST_HAS_BETHREADS + +#ifndef BOOST_DISABLE_THREADS +# define BOOST_HAS_THREADS +#endif + +// boilerplate code: +#include + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/bsd.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/bsd.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/bsd.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/bsd.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,86 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Douglas Gregor 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// generic BSD config options: + +#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) +#error "This platform is not BSD" +#endif + +#ifdef __FreeBSD__ +#define BOOST_PLATFORM "FreeBSD " BOOST_STRINGIZE(__FreeBSD__) +#elif defined(__NetBSD__) +#define BOOST_PLATFORM "NetBSD " BOOST_STRINGIZE(__NetBSD__) +#elif defined(__OpenBSD__) +#define BOOST_PLATFORM "OpenBSD " BOOST_STRINGIZE(__OpenBSD__) +#elif defined(__DragonFly__) +#define BOOST_PLATFORM "DragonFly " BOOST_STRINGIZE(__DragonFly__) +#endif + +// +// is this the correct version check? +// FreeBSD has but does not +// advertise the fact in : +// +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__) +# define BOOST_HAS_NL_TYPES_H +#endif + +// +// FreeBSD 3.x has pthreads support, but defines _POSIX_THREADS in +// and not in +// +#if (defined(__FreeBSD__) && (__FreeBSD__ <= 3))\ + || defined(__OpenBSD__) || defined(__DragonFly__) +# define BOOST_HAS_PTHREADS +#endif + +// +// No wide character support in the BSD header files: +// +#if defined(__NetBSD__) +#define __NetBSD_GCC__ (__GNUC__ * 1000000 \ + + __GNUC_MINOR__ * 1000 \ + + __GNUC_PATCHLEVEL__) +// XXX - the following is required until c++config.h +// defines _GLIBCXX_HAVE_SWPRINTF and friends +// or the preprocessor conditionals are removed +// from the cwchar header. +#define _GLIBCXX_HAVE_SWPRINTF 1 +#endif + +#if !((defined(__FreeBSD__) && (__FreeBSD__ >= 5)) \ + || (__NetBSD_GCC__ >= 2095003) || defined(__DragonFly__)) +# define BOOST_NO_CWCHAR +#endif +// +// The BSD has macros only, no functions: +// +#if !defined(__OpenBSD__) || defined(__DragonFly__) +# define BOOST_NO_CTYPE_FUNCTIONS +#endif + +// +// thread API's not auto detected: +// +#define BOOST_HAS_SCHED_YIELD +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#define BOOST_HAS_SIGACTION + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/cygwin.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/cygwin.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/cygwin.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/cygwin.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,51 @@ +// (C) Copyright John Maddock 2001 - 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// cygwin specific config options: + +#define BOOST_PLATFORM "Cygwin" +#define BOOST_NO_CWCTYPE +#define BOOST_NO_CWCHAR +#define BOOST_NO_SWPRINTF +#define BOOST_HAS_DIRENT_H +#define BOOST_HAS_LOG1P +#define BOOST_HAS_EXPM1 + +// +// Threading API: +// See if we have POSIX threads, if we do use them, otherwise +// revert to native Win threads. +#define BOOST_HAS_UNISTD_H +#include +#if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) +# define BOOST_HAS_PTHREADS +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_SIGACTION +#else +# if !defined(BOOST_HAS_WINTHREADS) +# define BOOST_HAS_WINTHREADS +# endif +# define BOOST_HAS_FTIME +#endif + +// +// find out if we have a stdint.h, there should be a better way to do this: +// +#include +#ifdef _STDINT_H +#define BOOST_HAS_STDINT_H +#endif + +// boilerplate code: +#include + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/hpux.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/hpux.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/hpux.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/hpux.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,87 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Toon Knapen 2003. +// (C) Copyright Boris Gubenko 2006 - 2007. +// 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) + +// See http://www.boost.org for most recent version. + +// hpux specific config options: + +#define BOOST_PLATFORM "HP-UX" + +// In principle, HP-UX has a nice under the name +// However, it has the following problem: +// Use of UINT32_C(0) results in "0u l" for the preprocessed source +// (verifyable with gcc 2.95.3) +#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__HP_aCC) +# define BOOST_HAS_STDINT_H +#endif + +#if !(defined(__HP_aCC) || !defined(_INCLUDE__STDC_A1_SOURCE)) +# define BOOST_NO_SWPRINTF +#endif +#if defined(__HP_aCC) && !defined(_INCLUDE__STDC_A1_SOURCE) +# define BOOST_NO_CWCTYPE +#endif + +#if defined(__GNUC__) +# if (__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 3)) + // GNU C on HP-UX does not support threads (checked up to gcc 3.3) +# define BOOST_DISABLE_THREADS +# elif !defined(BOOST_DISABLE_THREADS) + // threads supported from gcc-3.3 onwards: +# define BOOST_HAS_THREADS +# define BOOST_HAS_PTHREADS +# endif +#elif defined(__HP_aCC) && !defined(BOOST_DISABLE_THREADS) +# define BOOST_HAS_PTHREADS +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +// the following are always available: +#ifndef BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_GETTIMEOFDAY +#endif +#ifndef BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_SCHED_YIELD +#endif +#ifndef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#endif +#ifndef BOOST_HAS_NL_TYPES_H +# define BOOST_HAS_NL_TYPES_H +#endif +#ifndef BOOST_HAS_NANOSLEEP +# define BOOST_HAS_NANOSLEEP +#endif +#ifndef BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_GETTIMEOFDAY +#endif +#ifndef BOOST_HAS_DIRENT_H +# define BOOST_HAS_DIRENT_H +#endif +#ifndef BOOST_HAS_CLOCK_GETTIME +# define BOOST_HAS_CLOCK_GETTIME +#endif +#ifndef BOOST_HAS_SIGACTION +# define BOOST_HAS_SIGACTION +#endif +#ifndef BOOST_HAS_NRVO +# ifndef __parisc +# define BOOST_HAS_NRVO +# endif +#endif +#ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +#endif +#ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +#endif + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/irix.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/irix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/irix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/irix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,31 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2003. +// 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) + + +// See http://www.boost.org for most recent version. + +// SGI Irix specific config options: + +#define BOOST_PLATFORM "SGI Irix" + +#define BOOST_NO_SWPRINTF +// +// these are not auto detected by POSIX feature tests: +// +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE + +#ifdef __GNUC__ + // GNU C on IRIX does not support threads (checked up to gcc 3.3) +# define BOOST_DISABLE_THREADS +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/linux.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/linux.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/linux.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/linux.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,98 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// linux specific config options: + +#define BOOST_PLATFORM "linux" + +// make sure we have __GLIBC_PREREQ if available at all +#include + +// +// added to glibc 2.1.1 +// We can only test for 2.1 though: +// +#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))) + // defines int64_t unconditionally, but defines + // int64_t only if __GNUC__. Thus, assume a fully usable + // only when using GCC. +# if defined __GNUC__ +# define BOOST_HAS_STDINT_H +# endif +#endif + +#if defined(__LIBCOMO__) + // + // como on linux doesn't have std:: c functions: + // NOTE: versions of libcomo prior to beta28 have octal version numbering, + // e.g. version 25 is 21 (dec) + // +# if __LIBCOMO_VERSION__ <= 20 +# define BOOST_NO_STDC_NAMESPACE +# endif + +# if __LIBCOMO_VERSION__ <= 21 +# define BOOST_NO_SWPRINTF +# endif + +#endif + +// +// If glibc is past version 2 then we definitely have +// gettimeofday, earlier versions may or may not have it: +// +#if defined(__GLIBC__) && (__GLIBC__ >= 2) +# define BOOST_HAS_GETTIMEOFDAY +#endif + +#ifdef __USE_POSIX199309 +# define BOOST_HAS_NANOSLEEP +#endif + +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) +// __GLIBC_PREREQ is available since 2.1.2 + + // swprintf is available since glibc 2.2.0 +# if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98)) +# define BOOST_NO_SWPRINTF +# endif +#else +# define BOOST_NO_SWPRINTF +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +#ifndef __GNUC__ +// +// if the compiler is not gcc we still need to be able to parse +// the GNU system headers, some of which (mainly ) +// use GNU specific extensions: +// +# ifndef __extension__ +# define __extension__ +# endif +# ifndef __const__ +# define __const__ const +# endif +# ifndef __volatile__ +# define __volatile__ volatile +# endif +# ifndef __signed__ +# define __signed__ signed +# endif +# ifndef __typeof__ +# define __typeof__ typeof +# endif +# ifndef __inline__ +# define __inline__ inline +# endif +#endif + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/macos.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/macos.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/macos.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/macos.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,86 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Bill Kempf 2002. +// 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) + +// See http://www.boost.org for most recent version. + +// Mac OS specific config options: + +#define BOOST_PLATFORM "Mac OS" + +#if __MACH__ && !defined(_MSL_USING_MSL_C) + +// Using the Mac OS X system BSD-style C library. + +# ifndef BOOST_HAS_UNISTD_H +# define BOOST_HAS_UNISTD_H +# endif +// +// Begin by including our boilerplate code for POSIX +// feature detection, this is safe even when using +// the MSL as Metrowerks supply their own +// to replace the platform-native BSD one. G++ users +// should also always be able to do this on MaxOS X. +// +# include +# ifndef BOOST_HAS_STDINT_H +# define BOOST_HAS_STDINT_H +# endif + +// +// BSD runtime has pthreads, sigaction, sched_yield and gettimeofday, +// of these only pthreads are advertised in , so set the +// other options explicitly: +// +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_SIGACTION + +# if (__GNUC__ < 3) && !defined( __APPLE_CC__) + +// GCC strange "ignore std" mode works better if you pretend everything +// is in the std namespace, for the most part. + +# define BOOST_NO_STDC_NAMESPACE +# endif + +# if (__GNUC__ == 4) + +// Both gcc and intel require these. +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_NANOSLEEP + +# endif + +#else + +// Using the MSL C library. + +// We will eventually support threads in non-Carbon builds, but we do +// not support this yet. +# if ( defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON ) || ( defined(TARGET_CARBON) && TARGET_CARBON ) + +# if !defined(BOOST_HAS_PTHREADS) +# define BOOST_HAS_MPTASKS +# elif ( __dest_os == __mac_os_x ) +// We are doing a Carbon/Mach-O/MSL build which has pthreads, but only the +// gettimeofday and no posix. +# define BOOST_HAS_GETTIMEOFDAY +# endif + +// The MP task implementation of Boost Threads aims to replace MP-unsafe +// parts of the MSL, so we turn on threads unconditionally. +# define BOOST_HAS_THREADS + +// The remote call manager depends on this. +# define BOOST_BIND_ENABLE_PASCAL + +# endif + +#endif + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/qnxnto.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/qnxnto.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/qnxnto.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/qnxnto.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,31 @@ +// (C) Copyright Jim Douglas 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) + +// See http://www.boost.org for most recent version. + +// QNX specific config options: + +#define BOOST_PLATFORM "QNX" + +#define BOOST_HAS_UNISTD_H +#include + +// QNX claims XOpen version 5 compatibility, but doesn't have an nl_types.h +// or log1p and expm1: +#undef BOOST_HAS_NL_TYPES_H +#undef BOOST_HAS_LOG1P +#undef BOOST_HAS_EXPM1 + +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE + +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_CLOCK_GETTIME +#define BOOST_HAS_NANOSLEEP + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/solaris.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/solaris.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/solaris.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/solaris.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// sun specific config options: + +#define BOOST_PLATFORM "Sun Solaris" + +#define BOOST_HAS_GETTIMEOFDAY + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +// +// pthreads don't actually work with gcc unless _PTHREADS is defined: +// +#if defined(__GNUC__) && defined(_POSIX_THREADS) && !defined(_PTHREADS) +# undef BOOST_HAS_PTHREADS +#endif + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/vxworks.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/vxworks.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/vxworks.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/vxworks.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,31 @@ +// (C) Copyright Dustin Spicuzza 2009. +// 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) + +// See http://www.boost.org for most recent version. + +// vxWorks specific config options: + +#define BOOST_PLATFORM "vxWorks" + +#define BOOST_NO_CWCHAR +#define BOOST_NO_INTRINSIC_WCHAR_T + +#if defined(__GNUC__) && defined(__STRICT_ANSI__) +#define BOOST_NO_INT64_T +#endif + +#define BOOST_HAS_UNISTD_H + +// these allow posix_features to work, since vxWorks doesn't +// define them itself +#define _POSIX_TIMERS 1 +#define _POSIX_THREADS 1 + +// vxworks doesn't work with asio serial ports +#define BOOST_ASIO_DISABLE_SERIAL_PORT + +// boilerplate code: +#include + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/platform/win32.hpp clucene-core-2.3.3.4/src/ext/boost/config/platform/win32.hpp --- clucene-core-0.9.21b/src/ext/boost/config/platform/win32.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/platform/win32.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,58 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Bill Kempf 2001. +// (C) Copyright Aleksey Gurtovoy 2003. +// (C) Copyright Rene Rivera 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) + +// See http://www.boost.org for most recent version. + +// Win32 specific config options: + +#define BOOST_PLATFORM "Win32" + +// Get the information about the MinGW runtime, i.e. __MINGW32_*VERSION. +#if defined(__MINGW32__) +# include <_mingw.h> +#endif + +#if defined(__GNUC__) && !defined(BOOST_NO_SWPRINTF) +# define BOOST_NO_SWPRINTF +#endif + +#if !defined(__GNUC__) && !defined(BOOST_HAS_DECLSPEC) +# define BOOST_HAS_DECLSPEC +#endif + +#if defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 2) || ((__MINGW32_MAJOR_VERSION == 2) && (__MINGW32_MINOR_VERSION >= 0))) +# define BOOST_HAS_STDINT_H +# define __STDC_LIMIT_MACROS +# define BOOST_HAS_DIRENT_H +# define BOOST_HAS_UNISTD_H +#endif + +// +// Win32 will normally be using native Win32 threads, +// but there is a pthread library avaliable as an option, +// we used to disable this when BOOST_DISABLE_WIN32 was +// defined but no longer - this should allow some +// files to be compiled in strict mode - while maintaining +// a consistent setting of BOOST_HAS_THREADS across +// all translation units (needed for shared_ptr etc). +// + +#ifdef _WIN32_WCE +# define BOOST_NO_ANSI_APIS +#endif + +#ifndef BOOST_HAS_PTHREADS +# define BOOST_HAS_WINTHREADS +#endif + +#ifndef BOOST_DISABLE_WIN32 +// WEK: Added +#define BOOST_HAS_FTIME +#define BOOST_WINDOWS 1 + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/posix_features.hpp clucene-core-2.3.3.4/src/ext/boost/config/posix_features.hpp --- clucene-core-0.9.21b/src/ext/boost/config/posix_features.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/posix_features.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,95 @@ +// (C) Copyright John Maddock 2001 - 2003. +// 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) + + +// See http://www.boost.org for most recent version. + +// All POSIX feature tests go in this file, +// Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well +// _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's +// may be present but none-functional unless _POSIX_C_SOURCE and +// _XOPEN_SOURCE have been defined to the right value (it's up +// to the user to do this *before* including any header, although +// in most cases the compiler will do this for you). + +# if defined(BOOST_HAS_UNISTD_H) +# include + + // XOpen has , but is this the correct version check? +# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3) +# define BOOST_HAS_NL_TYPES_H +# endif + + // POSIX version 6 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100) +# define BOOST_HAS_STDINT_H +# endif + + // POSIX version 2 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L) +# define BOOST_HAS_DIRENT_H +# endif + + // POSIX version 3 requires to have sigaction: +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L) +# define BOOST_HAS_SIGACTION +# endif + // POSIX defines _POSIX_THREADS > 0 for pthread support, + // however some platforms define _POSIX_THREADS without + // a value, hence the (_POSIX_THREADS+0 >= 0) check. + // Strictly speaking this may catch platforms with a + // non-functioning stub , but such occurrences should + // occur very rarely if at all. +# if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_MPTASKS) +# define BOOST_HAS_PTHREADS +# endif + + // BOOST_HAS_NANOSLEEP: + // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME: +# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \ + || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) +# define BOOST_HAS_NANOSLEEP +# endif + + // BOOST_HAS_CLOCK_GETTIME: + // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME + // but at least one platform - linux - defines that flag without + // defining clock_gettime): +# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) +# define BOOST_HAS_CLOCK_GETTIME +# endif + + // BOOST_HAS_SCHED_YIELD: + // This is predicated on _POSIX_PRIORITY_SCHEDULING or + // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME. +# if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\ + || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\ + || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) +# define BOOST_HAS_SCHED_YIELD +# endif + + // BOOST_HAS_GETTIMEOFDAY: + // BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE: + // These are predicated on _XOPEN_VERSION, and appears to be first released + // in issue 4, version 2 (_XOPEN_VERSION > 500). + // Likewise for the functions log1p and expm1. +# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500) +# define BOOST_HAS_GETTIMEOFDAY +# if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500) +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# endif +# ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# endif + +# endif + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/requires_threads.hpp clucene-core-2.3.3.4/src/ext/boost/config/requires_threads.hpp --- clucene-core-0.9.21b/src/ext/boost/config/requires_threads.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/requires_threads.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,92 @@ +// (C) Copyright John Maddock 2003. +// 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_CONFIG_REQUIRES_THREADS_HPP +#define BOOST_CONFIG_REQUIRES_THREADS_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif + +#if defined(BOOST_DISABLE_THREADS) + +// +// special case to handle versions of gcc which don't currently support threads: +// +#if defined(__GNUC__) && ((__GNUC__ < 3) || (__GNUC_MINOR__ <= 3) || !defined(BOOST_STRICT_CONFIG)) +// +// this is checked up to gcc 3.3: +// +#if defined(__sgi) || defined(__hpux) +# error "Multi-threaded programs are not supported by gcc on HPUX or Irix (last checked with gcc 3.3)" +#endif + +#endif + +# error "Threading support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS" + +#elif !defined(BOOST_HAS_THREADS) + +# if defined __COMO__ +// Comeau C++ +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -D_MT (Windows) or -D_REENTRANT (Unix)" + +#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) +// Intel +#ifdef _WIN32 +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd" +#else +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -openmp" +#endif + +# elif defined __GNUC__ +// GNU C++: +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)" + +#elif defined __sgi +// SGI MIPSpro C++ +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -D_SGI_MP_SOURCE" + +#elif defined __DECCXX +// Compaq Tru64 Unix cxx +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread" + +#elif defined __BORLANDC__ +// Borland +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -tWM" + +#elif defined __MWERKS__ +// Metrowerks CodeWarrior +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either -runtime sm, -runtime smd, -runtime dm, or -runtime dmd" + +#elif defined __SUNPRO_CC +// Sun Workshop Compiler C++ +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt" + +#elif defined __HP_aCC +// HP aCC +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt" + +#elif defined(__IBMCPP__) +// IBM Visual Age +# error "Compiler threading support is not turned on. Please compile the code with the xlC_r compiler" + +#elif defined _MSC_VER +// Microsoft Visual C++ +// +// Must remain the last #elif since some other vendors (Metrowerks, for +// example) also #define _MSC_VER +# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd" + +#else + +# error "Compiler threading support is not turned on. Please consult your compiler's documentation for the appropriate options to use" + +#endif // compilers + +#endif // BOOST_HAS_THREADS + +#endif // BOOST_CONFIG_REQUIRES_THREADS_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/config/select_compiler_config.hpp clucene-core-2.3.3.4/src/ext/boost/config/select_compiler_config.hpp --- clucene-core-0.9.21b/src/ext/boost/config/select_compiler_config.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/select_compiler_config.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,119 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Martin Wille 2003. +// (C) Copyright Guillaume Melquiond 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) + +// See http://www.boost.org/ for most recent version. + + +// one identification macro for each of the +// compilers we support: + +# define BOOST_CXX_GCCXML 0 +# define BOOST_CXX_COMO 0 +# define BOOST_CXX_DMC 0 +# define BOOST_CXX_INTEL 0 +# define BOOST_CXX_GNUC 0 +# define BOOST_CXX_KCC 0 +# define BOOST_CXX_SGI 0 +# define BOOST_CXX_TRU64 0 +# define BOOST_CXX_GHS 0 +# define BOOST_CXX_BORLAND 0 +# define BOOST_CXX_CW 0 +# define BOOST_CXX_SUNPRO 0 +# define BOOST_CXX_HPACC 0 +# define BOOST_CXX_MPW 0 +# define BOOST_CXX_IBMCPP 0 +# define BOOST_CXX_MSVC 0 +# define BOOST_CXX_PGI 0 + + +// locate which compiler we are using and define +// BOOST_COMPILER_CONFIG as needed: + +#if defined(__GCCXML__) +// GCC-XML emulates other compilers, it has to appear first here! +# define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc_xml.hpp" + +#elif defined __COMO__ +// Comeau C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/comeau.hpp" + +#elif defined __DMC__ +// Digital Mars C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/digitalmars.hpp" + +#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) +// Intel +# define BOOST_COMPILER_CONFIG "boost/config/compiler/intel.hpp" + +# elif defined __GNUC__ +// GNU C++: +# define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc.hpp" + +#elif defined __KCC +// Kai C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/kai.hpp" + +#elif defined __sgi +// SGI MIPSpro C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/sgi_mipspro.hpp" + +#elif defined __DECCXX +// Compaq Tru64 Unix cxx +# define BOOST_COMPILER_CONFIG "boost/config/compiler/compaq_cxx.hpp" + +#elif defined __ghs +// Greenhills C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/greenhills.hpp" + +#elif defined __CODEGEARC__ +// CodeGear - must be checked for before Borland +# define BOOST_COMPILER_CONFIG "boost/config/compiler/codegear.hpp" + +#elif defined __BORLANDC__ +// Borland +# define BOOST_COMPILER_CONFIG "boost/config/compiler/borland.hpp" + +#elif defined __MWERKS__ +// Metrowerks CodeWarrior +# define BOOST_COMPILER_CONFIG "boost/config/compiler/metrowerks.hpp" + +#elif defined __SUNPRO_CC +// Sun Workshop Compiler C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/sunpro_cc.hpp" + +#elif defined __HP_aCC +// HP aCC +# define BOOST_COMPILER_CONFIG "boost/config/compiler/hp_acc.hpp" + +#elif defined(__MRC__) || defined(__SC__) +// MPW MrCpp or SCpp +# define BOOST_COMPILER_CONFIG "boost/config/compiler/mpw.hpp" + +#elif defined(__IBMCPP__) +// IBM Visual Age +# define BOOST_COMPILER_CONFIG "boost/config/compiler/vacpp.hpp" + +#elif defined(__PGI) +// Portland Group Inc. +# define BOOST_COMPILER_CONFIG "boost/config/compiler/pgi.hpp" + +#elif defined _MSC_VER +// Microsoft Visual C++ +// +// Must remain the last #elif since some other vendors (Metrowerks, for +// example) also #define _MSC_VER +# define BOOST_COMPILER_CONFIG "boost/config/compiler/visualc.hpp" + +#elif defined (BOOST_ASSERT_CONFIG) +// this must come last - generate an error if we don't +// recognise the compiler: +# error "Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)" + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/config/select_platform_config.hpp clucene-core-2.3.3.4/src/ext/boost/config/select_platform_config.hpp --- clucene-core-0.9.21b/src/ext/boost/config/select_platform_config.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/select_platform_config.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,94 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Jens Maurer 2001. +// 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) + +// See http://www.boost.org for most recent version. + +// locate which platform we are on and define BOOST_PLATFORM_CONFIG as needed. +// Note that we define the headers to include using "header_name" not +// in order to prevent macro expansion within the header +// name (for example "linux" is a macro on linux systems). + +#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) +// linux, also other platforms (Hurd etc) that use GLIBC, should these really have their own config headers though? +# define BOOST_PLATFORM_CONFIG "boost/config/platform/linux.hpp" + +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) +// BSD: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/bsd.hpp" + +#elif defined(sun) || defined(__sun) +// solaris: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/solaris.hpp" + +#elif defined(__sgi) +// SGI Irix: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/irix.hpp" + +#elif defined(__hpux) +// hp unix: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/hpux.hpp" + +#elif defined(__CYGWIN__) +// cygwin is not win32: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/cygwin.hpp" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +// win32: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/win32.hpp" + +#elif defined(__BEOS__) +// BeOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/beos.hpp" + +#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) +// MacOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/macos.hpp" + +#elif defined(__IBMCPP__) || defined(_AIX) +// IBM +# define BOOST_PLATFORM_CONFIG "boost/config/platform/aix.hpp" + +#elif defined(__amigaos__) +// AmigaOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/amigaos.hpp" + +#elif defined(__QNXNTO__) +// QNX: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/qnxnto.hpp" + +#elif defined(__VXWORKS__) +// vxWorks: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/vxworks.hpp" + +#else + +# if defined(unix) \ + || defined(__unix) \ + || defined(_XOPEN_SOURCE) \ + || defined(_POSIX_SOURCE) + + // generic unix platform: + +# ifndef BOOST_HAS_UNISTD_H +# define BOOST_HAS_UNISTD_H +# endif + +# include + +# endif + +# if defined (BOOST_ASSERT_CONFIG) + // this must come last - generate an error if we don't + // recognise the platform: +# error "Unknown platform - please configure and report the results to boost.org" +# endif + +#endif + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/select_stdlib_config.hpp clucene-core-2.3.3.4/src/ext/boost/config/select_stdlib_config.hpp --- clucene-core-0.9.21b/src/ext/boost/config/select_stdlib_config.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/select_stdlib_config.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,77 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2002. +// 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) + + +// See http://www.boost.org for most recent version. + +// locate which std lib we are using and define BOOST_STDLIB_CONFIG as needed: + +// First include to determine if some version of STLport is in use as the std lib +// (do not rely on this header being included since users can short-circuit this header +// if they know whose std lib they are using.) +#include + +#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +// STLPort library; this _must_ come first, otherwise since +// STLport typically sits on top of some other library, we +// can end up detecting that first rather than STLport: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/stlport.hpp" + +#else + +// If our std lib was not some version of STLport, then include as it is about +// the smallest of the std lib headers that includes real C++ stuff. (Some std libs do not +// include their C++-related macros in so this additional include makes sure +// we get those definitions) +// (again do not rely on this header being included since users can short-circuit this +// header if they know whose std lib they are using.) +#include + +#if defined(__LIBCOMO__) +// Comeau STL: +#define BOOST_STDLIB_CONFIG "boost/config/stdlib/libcomo.hpp" + +#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) +// Rogue Wave library: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/roguewave.hpp" + +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +// GNU libstdc++ 3 +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/libstdcpp3.hpp" + +#elif defined(__STL_CONFIG_H) +// generic SGI STL +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/sgi.hpp" + +#elif defined(__MSL_CPP__) +// MSL standard lib: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/msl.hpp" + +#elif defined(__IBMCPP__) +// take the default VACPP std lib +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/vacpp.hpp" + +#elif defined(MSIPL_COMPILE_H) +// Modena C++ standard library +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/modena.hpp" + +#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) +// Dinkumware Library (this has to appear after any possible replacement libraries): +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/dinkumware.hpp" + +#elif defined (BOOST_ASSERT_CONFIG) +// this must come last - generate an error if we don't +// recognise the library: +# error "Unknown standard library - please configure and report the results to boost.org" + +#endif + +#endif + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/dinkumware.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/dinkumware.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/dinkumware.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/dinkumware.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,138 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright David Abrahams 2002. +// (C) Copyright Guillaume Melquiond 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// Dinkumware standard library config: + +#if !defined(_YVALS) && !defined(_CPPLIB_VER) +#include +#if !defined(_YVALS) && !defined(_CPPLIB_VER) +#error This is not the Dinkumware lib! +#endif +#endif + + +#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306) + // full dinkumware 3.06 and above + // fully conforming provided the compiler supports it: +# if !(defined(_GLOBAL_USING) && (_GLOBAL_USING+0 > 0)) && !defined(__BORLANDC__) && !defined(_STD) && !(defined(__ICC) && (__ICC >= 700)) // can be defined in yvals.h +# define BOOST_NO_STDC_NAMESPACE +# endif +# if !(defined(_HAS_MEMBER_TEMPLATES_REBIND) && (_HAS_MEMBER_TEMPLATES_REBIND+0 > 0)) && !(defined(_MSC_VER) && (_MSC_VER > 1300)) && defined(BOOST_MSVC) +# define BOOST_NO_STD_ALLOCATOR +# endif +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +# if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) + // if this lib version is set up for vc6 then there is no std::use_facet: +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET + // C lib functions aren't in namespace std either: +# define BOOST_NO_STDC_NAMESPACE + // and nor is +# define BOOST_NO_EXCEPTION_STD_NAMESPACE +# endif +// There's no numeric_limits support unless _LONGLONG is defined: +# if !defined(_LONGLONG) && (_CPPLIB_VER <= 310) +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# endif +// 3.06 appears to have (non-sgi versions of) & , +// and no at all +#else +# define BOOST_MSVC_STD_ITERATOR 1 +# define BOOST_NO_STD_ITERATOR +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +# define BOOST_NO_STDC_NAMESPACE +# define BOOST_NO_STD_USE_FACET +# define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN +# define BOOST_HAS_MACRO_USE_FACET +# ifndef _CPPLIB_VER + // Updated Dinkum library defines this, and provides + // its own min and max definitions, as does MTA version. +# ifndef __MTA__ +# define BOOST_NO_STD_MIN_MAX +# endif +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# endif +#endif + +// +// std extension namespace is stdext for vc7.1 and later, +// the same applies to other compilers that sit on top +// of vc7.1 (Intel and Comeau): +// +#if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(__BORLANDC__) +# define BOOST_STD_EXTENSION_NAMESPACE stdext +#endif + + +#if (defined(_MSC_VER) && (_MSC_VER <= 1300) && !defined(__BORLANDC__)) || !defined(_CPPLIB_VER) || (_CPPLIB_VER < 306) + // if we're using a dinkum lib that's + // been configured for VC6/7 then there is + // no iterator traits (true even for icl) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +#if defined(__ICL) && (__ICL < 800) && defined(_CPPLIB_VER) && (_CPPLIB_VER <= 310) +// Intel C++ chokes over any non-trivial use of +// this may be an overly restrictive define, but regex fails without it: +# define BOOST_NO_STD_LOCALE +#endif + +// C++0x headers implemented in 520 (as shipped by Microsoft) +// +#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 520 +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE + +#ifdef _CPPLIB_VER +# define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER +#else +# define BOOST_DINKUMWARE_STDLIB 1 +#endif + +#ifdef _CPPLIB_VER +# define BOOST_STDLIB "Dinkumware standard library version " BOOST_STRINGIZE(_CPPLIB_VER) +#else +# define BOOST_STDLIB "Dinkumware standard library version 1.x" +#endif + + + + + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/libcomo.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/libcomo.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/libcomo.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/libcomo.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,71 @@ +// (C) Copyright John Maddock 2002 - 2003. +// (C) Copyright Jens Maurer 2002 - 2003. +// (C) Copyright Beman Dawes 2002 - 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// Comeau STL: + +#if !defined(__LIBCOMO__) +# include +# if !defined(__LIBCOMO__) +# error "This is not the Comeau STL!" +# endif +#endif + +// +// std::streambuf is non-standard +// NOTE: versions of libcomo prior to beta28 have octal version numbering, +// e.g. version 25 is 21 (dec) +#if __LIBCOMO_VERSION__ <= 22 +# define BOOST_NO_STD_WSTREAMBUF +#endif + +#if (__LIBCOMO_VERSION__ <= 31) && defined(_WIN32) +#define BOOST_NO_SWPRINTF +#endif + +#if __LIBCOMO_VERSION__ >= 31 +# define BOOST_HAS_HASH +# define BOOST_HAS_SLIST +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +// +// Intrinsic type_traits support. +// The SGI STL has it's own __type_traits class, which +// has intrinsic compiler support with SGI's compilers. +// Whatever map SGI style type traits to boost equivalents: +// +#define BOOST_HAS_SGI_TYPE_TRAITS + +#define BOOST_STDLIB "Comeau standard library " BOOST_STRINGIZE(__LIBCOMO_VERSION__) + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/libstdcpp3.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/libstdcpp3.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/libstdcpp3.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/libstdcpp3.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,127 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Jens Maurer 2001. +// 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) + +// See http://www.boost.org for most recent version. + +// config for libstdc++ v3 +// not much to go in here: + +#ifdef __GLIBCXX__ +#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCXX__) +#else +#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCPP__) +#endif + +#if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T) +# define BOOST_NO_CWCHAR +# define BOOST_NO_CWCTYPE +# define BOOST_NO_STD_WSTRING +# define BOOST_NO_STD_WSTREAMBUF +#endif + +#if defined(__osf__) && !defined(_REENTRANT) \ + && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) ) +// GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header +// file is included, therefore for consistency we define it here as well. +# define _REENTRANT +#endif + +#ifdef __GLIBCXX__ // gcc 3.4 and greater: +# if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ + || defined(_GLIBCXX__PTHREADS) + // + // If the std lib has thread support turned on, then turn it on in Boost + // as well. We do this because some gcc-3.4 std lib headers define _REENTANT + // while others do not... + // +# define BOOST_HAS_THREADS +# else +# define BOOST_DISABLE_THREADS +# endif +#elif defined(__GLIBCPP__) \ + && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \ + && !defined(_GLIBCPP__PTHREADS) + // disable thread support if the std lib was built single threaded: +# define BOOST_DISABLE_THREADS +#endif + +#if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT) +// linux on arm apparently doesn't define _REENTRANT +// so just turn on threading support whenever the std lib is thread safe: +# define BOOST_HAS_THREADS +#endif + + +#if !defined(_GLIBCPP_USE_LONG_LONG) \ + && !defined(_GLIBCXX_USE_LONG_LONG)\ + && defined(BOOST_HAS_LONG_LONG) +// May have been set by compiler/*.hpp, but "long long" without library +// support is useless. +# undef BOOST_HAS_LONG_LONG +#endif + +#if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0 +# define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx +# define BOOST_HAS_SLIST +# define BOOST_HAS_HASH +# define BOOST_SLIST_HEADER +# if !defined(__GNUC__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) +# define BOOST_HASH_SET_HEADER +# define BOOST_HASH_MAP_HEADER +# else +# define BOOST_HASH_SET_HEADER +# define BOOST_HASH_MAP_HEADER +# endif +#endif + +// stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly +// __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the stdlibc++ +// developers. He also commented: +// +// "I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in +// GCC 4.2.4 it is set to 20080519 but in GCC 4.3.0 it is set to 20080305. +// Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support +// than any release in the 4.2 series." +// +// Another resource for understanding stdlibc++ features is: +// http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x + +// C++0x headers in GCC 4.3.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET +#endif + +// C++0x headers in GCC 4.4.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS + +// --- end --- diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/modena.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/modena.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/modena.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/modena.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,55 @@ +// (C) Copyright Jens Maurer 2001. +// 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) + +// See http://www.boost.org for most recent version. + +// Modena C++ standard library (comes with KAI C++) + +#if !defined(MSIPL_COMPILE_H) +# include +# if !defined(__MSIPL_COMPILE_H) +# error "This is not the Modena C++ library!" +# endif +#endif + +#ifndef MSIPL_NL_TYPES +#define BOOST_NO_STD_MESSAGES +#endif + +#ifndef MSIPL_WCHART +#define BOOST_NO_STD_WSTRING +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "Modena C++ standard library" + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/msl.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/msl.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/msl.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/msl.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,83 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Darin Adler 2001. +// 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) + +// See http://www.boost.org for most recent version. + +// Metrowerks standard library: + +#ifndef __MSL_CPP__ +# include +# ifndef __MSL_CPP__ +# error This is not the MSL standard library! +# endif +#endif + +#if __MSL_CPP__ >= 0x6000 // Pro 6 +# define BOOST_HAS_HASH +# define BOOST_STD_EXTENSION_NAMESPACE Metrowerks +#endif +#define BOOST_HAS_SLIST + +#if __MSL_CPP__ < 0x6209 +# define BOOST_NO_STD_MESSAGES +#endif + +// check C lib version for +#include + +#if defined(__MSL__) && (__MSL__ >= 0x5000) +# define BOOST_HAS_STDINT_H +# if !defined(__PALMOS_TRAPS__) +# define BOOST_HAS_UNISTD_H +# endif + // boilerplate code: +# include +#endif + +#if defined(_MWMT) || _MSL_THREADSAFE +# define BOOST_HAS_THREADS +#endif + +#ifdef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__) + + + + + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/roguewave.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/roguewave.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/roguewave.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/roguewave.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,179 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001. +// (C) Copyright David Abrahams 2003. +// (C) Copyright Boris Gubenko 2007. +// 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) + +// See http://www.boost.org for most recent version. + +// Rogue Wave std lib: + +#if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) +# include +# if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER) +# error This is not the Rogue Wave standard library +# endif +#endif +// +// figure out a consistent version number: +// +#ifndef _RWSTD_VER +# define BOOST_RWSTD_VER 0x010000 +#elif _RWSTD_VER < 0x010000 +# define BOOST_RWSTD_VER (_RWSTD_VER << 8) +#else +# define BOOST_RWSTD_VER _RWSTD_VER +#endif + +#ifndef _RWSTD_VER +# define BOOST_STDLIB "Rogue Wave standard library version (Unknown version)" +#elif _RWSTD_VER < 0x04010200 + # define BOOST_STDLIB "Rogue Wave standard library version " BOOST_STRINGIZE(_RWSTD_VER) +#else +# ifdef _RWSTD_VER_STR +# define BOOST_STDLIB "Apache STDCXX standard library version " _RWSTD_VER_STR +# else +# define BOOST_STDLIB "Apache STDCXX standard library version " BOOST_STRINGIZE(_RWSTD_VER) +# endif +#endif + +// +// Prior to version 2.2.0 the primary template for std::numeric_limits +// does not have compile time constants, even though specializations of that +// template do: +// +#if BOOST_RWSTD_VER < 0x020200 +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#endif + +// Sun CC 5.5 patch 113817-07 adds long long specialization, but does not change the +// library version number (http://sunsolve6.sun.com/search/document.do?assetkey=1-21-113817): +#if BOOST_RWSTD_VER <= 0x020101 && (!defined(__SUNPRO_CC) || (__SUNPRO_CC < 0x550)) +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +# endif + +// +// Borland version of numeric_limits lacks __int64 specialisation: +// +#ifdef __BORLANDC__ +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +#endif + +// +// No std::iterator if it can't figure out default template args: +// +#if defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || defined(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || (BOOST_RWSTD_VER < 0x020000) +# define BOOST_NO_STD_ITERATOR +#endif + +// +// No iterator traits without partial specialization: +// +#if defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) || defined(RWSTD_NO_CLASS_PARTIAL_SPEC) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// Prior to version 2.0, std::auto_ptr was buggy, and there were no +// new-style iostreams, and no conformant std::allocator: +// +#if (BOOST_RWSTD_VER < 0x020000) +# define BOOST_NO_AUTO_PTR +# define BOOST_NO_STRINGSTREAM +# define BOOST_NO_STD_ALLOCATOR +# define BOOST_NO_STD_LOCALE +#endif + +// +// No template iterator constructors without member template support: +// +#if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(_RWSTD_NO_MEMBER_TEMPLATES) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +#endif + +// +// RW defines _RWSTD_ALLOCATOR if the allocator is conformant and in use +// (the or _HPACC_ part is a hack - the library seems to define _RWSTD_ALLOCATOR +// on HP aCC systems even though the allocator is in fact broken): +// +#if !defined(_RWSTD_ALLOCATOR) || (defined(__HP_aCC) && __HP_aCC <= 33100) +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// If we have a std::locale, we still may not have std::use_facet: +// +#if defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE) && !defined(BOOST_NO_STD_LOCALE) +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_TWO_ARG_USE_FACET +#endif + +// +// There's no std::distance prior to version 2, or without +// partial specialization support: +// +#if (BOOST_RWSTD_VER < 0x020000) || defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) + #define BOOST_NO_STD_DISTANCE +#endif + +// +// Some versions of the rogue wave library don't have assignable +// OutputIterators: +// +#if BOOST_RWSTD_VER < 0x020100 +# define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN +#endif + +// +// Disable BOOST_HAS_LONG_LONG when the library has no support for it. +// +#if !defined(_RWSTD_LONG_LONG) && defined(BOOST_HAS_LONG_LONG) +# undef BOOST_HAS_LONG_LONG +#endif + +// +// check that on HP-UX, the proper RW library is used +// +#if defined(__HP_aCC) && !defined(_HP_NAMESPACE_STD) +# error "Boost requires Standard RW library. Please compile and link with -AA" +#endif + +// +// Define macros specific to RW V2.2 on HP-UX +// +#if defined(__HP_aCC) && (BOOST_RWSTD_VER == 0x02020100) +# ifndef __HP_TC1_MAKE_PAIR +# define __HP_TC1_MAKE_PAIR +# endif +# ifndef _HP_INSTANTIATE_STD2_VL +# define _HP_INSTANTIATE_STD2_VL +# endif +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/sgi.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/sgi.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/sgi.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/sgi.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,136 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Jens Maurer 2001 - 2003. +// 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) + +// See http://www.boost.org for most recent version. + +// generic SGI STL: + +#if !defined(__STL_CONFIG_H) +# include +# if !defined(__STL_CONFIG_H) +# error "This is not the SGI STL!" +# endif +#endif + +// +// No std::iterator traits without partial specialisation: +// +#if !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// No std::stringstream with gcc < 3 +// +#if defined(__GNUC__) && (__GNUC__ < 3) && \ + ((__GNUC_MINOR__ < 95) || (__GNUC_MINOR__ == 96)) && \ + !defined(__STL_USE_NEW_IOSTREAMS) || \ + defined(__APPLE_CC__) + // Note that we only set this for GNU C++ prior to 2.95 since the + // latest patches for that release do contain a minimal + // If you are running a 2.95 release prior to 2.95.3 then this will need + // setting, but there is no way to detect that automatically (other + // than by running the configure script). + // Also, the unofficial GNU C++ 2.96 included in RedHat 7.1 doesn't + // have . +# define BOOST_NO_STRINGSTREAM +#endif + +// +// Assume no std::locale without own iostreams (this may be an +// incorrect assumption in some cases): +// +#if !defined(__SGI_STL_OWN_IOSTREAMS) && !defined(__STL_USE_NEW_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +#endif + +// +// Original native SGI streams have non-standard std::messages facet: +// +#if defined(__sgi) && (_COMPILER_VERSION <= 650) && !defined(__SGI_STL_OWN_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +#endif + +// +// SGI's new iostreams have missing "const" in messages<>::open +// +#if defined(__sgi) && (_COMPILER_VERSION <= 740) && defined(__STL_USE_NEW_IOSTREAMS) +# define BOOST_NO_STD_MESSAGES +#endif + +// +// No template iterator constructors, or std::allocator +// without member templates: +// +#if !defined(__STL_MEMBER_TEMPLATES) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// We always have SGI style hash_set, hash_map, and slist: +// +#define BOOST_HAS_HASH +#define BOOST_HAS_SLIST + +// +// If this is GNU libstdc++2, then no and no std::wstring: +// +#if (defined(__GNUC__) && (__GNUC__ < 3)) +# include +# if defined(__BASTRING__) +# define BOOST_NO_LIMITS +// Note: will provide compile-time constants +# undef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_STD_WSTRING +# endif +#endif + +// +// There is no standard iterator unless we have namespace support: +// +#if !defined(__STL_USE_NAMESPACES) +# define BOOST_NO_STD_ITERATOR +#endif + +// +// Intrinsic type_traits support. +// The SGI STL has it's own __type_traits class, which +// has intrinsic compiler support with SGI's compilers. +// Whatever map SGI style type traits to boost equivalents: +// +#define BOOST_HAS_SGI_TYPE_TRAITS + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "SGI standard library" + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/stlport.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/stlport.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/stlport.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/stlport.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,236 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Jens Maurer 2001. +// 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) + +// See http://www.boost.org for most recent version. + +// STLPort standard library config: + +#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# include +# if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# error "This is not STLPort!" +# endif +#endif + +// +// __STL_STATIC_CONST_INIT_BUG implies BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +// for versions prior to 4.1(beta) +// +#if (defined(__STL_STATIC_CONST_INIT_BUG) || defined(_STLP_STATIC_CONST_INIT_BUG)) && (__SGI_STL_PORT <= 0x400) +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#endif + +// +// If STLport thinks that there is no partial specialisation, then there is no +// std::iterator traits: +// +#if !(defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || defined(__STL_CLASS_PARTIAL_SPECIALIZATION)) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// No new style iostreams on GCC without STLport's iostreams enabled: +// +#if (defined(__GNUC__) && (__GNUC__ < 3)) && !(defined(__SGI_STL_OWN_IOSTREAMS) || defined(_STLP_OWN_IOSTREAMS)) +# define BOOST_NO_STRINGSTREAM +#endif + +// +// No new iostreams implies no std::locale, and no std::stringstream: +// +#if defined(__STL_NO_IOSTREAMS) || defined(__STL_NO_NEW_IOSTREAMS) || defined(_STLP_NO_IOSTREAMS) || defined(_STLP_NO_NEW_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +# define BOOST_NO_STRINGSTREAM +#endif + +// +// If the streams are not native, and we have a "using ::x" compiler bug +// then the io stream facets are not available in namespace std:: +// +#ifdef _STLPORT_VERSION +# if !(_STLPORT_VERSION >= 0x500) && !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) +# define BOOST_NO_STD_LOCALE +# endif +#else +# if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) +# define BOOST_NO_STD_LOCALE +# endif +#endif + +#if defined(_STLPORT_VERSION) && ((_STLPORT_VERSION < 0x500) || (_STLPORT_VERSION >= 0x520)) +# define BOOST_NO_STD_UNORDERED +#endif + +#if defined(_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x520) +# define BOOST_HAS_TR1_UNORDERED_SET +# define BOOST_HAS_TR1_UNORDERED_MAP +#endif +// +// Without member template support enabled, their are no template +// iterate constructors, and no std::allocator: +// +#if !(defined(__STL_MEMBER_TEMPLATES) || defined(_STLP_MEMBER_TEMPLATES)) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +#endif +// +// however we always have at least a partial allocator: +// +#define BOOST_HAS_PARTIAL_STD_ALLOCATOR + +#if !defined(_STLP_MEMBER_TEMPLATE_CLASSES) || defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE) +# define BOOST_NO_STD_ALLOCATOR +#endif + +#if defined(_STLP_NO_MEMBER_TEMPLATE_KEYWORD) && defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// If STLport thinks there is no wchar_t at all, then we have to disable +// the support for the relevant specilazations of std:: templates. +// +#if !defined(_STLP_HAS_WCHAR_T) && !defined(_STLP_WCHAR_T_IS_USHORT) +# ifndef BOOST_NO_STD_WSTRING +# define BOOST_NO_STD_WSTRING +# endif +# ifndef BOOST_NO_STD_WSTREAMBUF +# define BOOST_NO_STD_WSTREAMBUF +# endif +#endif + +// +// We always have SGI style hash_set, hash_map, and slist: +// +#ifndef _STLP_NO_EXTENSIONS +#define BOOST_HAS_HASH +#define BOOST_HAS_SLIST +#endif + +// +// STLport does a good job of importing names into namespace std::, +// but doesn't always get them all, define BOOST_NO_STDC_NAMESPACE, since our +// workaround does not conflict with STLports: +// +// +// Harold Howe says: +// Borland switched to STLport in BCB6. Defining BOOST_NO_STDC_NAMESPACE with +// BCB6 does cause problems. If we detect C++ Builder, then don't define +// BOOST_NO_STDC_NAMESPACE +// +#if !defined(__BORLANDC__) && !defined(__DMC__) +// +// If STLport is using it's own namespace, and the real names are in +// the global namespace, then we duplicate STLport's using declarations +// (by defining BOOST_NO_STDC_NAMESPACE), we do this because STLport doesn't +// necessarily import all the names we need into namespace std:: +// +# if (defined(__STL_IMPORT_VENDOR_CSTD) \ + || defined(__STL_USE_OWN_NAMESPACE) \ + || defined(_STLP_IMPORT_VENDOR_CSTD) \ + || defined(_STLP_USE_OWN_NAMESPACE)) \ + && (defined(__STL_VENDOR_GLOBAL_CSTD) || defined (_STLP_VENDOR_GLOBAL_CSTD)) +# define BOOST_NO_STDC_NAMESPACE +# define BOOST_NO_EXCEPTION_STD_NAMESPACE +# endif +#elif defined(__BORLANDC__) && __BORLANDC__ < 0x560 +// STLport doesn't import std::abs correctly: +#include +namespace std { using ::abs; } +// and strcmp/strcpy don't get imported either ('cos they are macros) +#include +#ifdef strcpy +# undef strcpy +#endif +#ifdef strcmp +# undef strcmp +#endif +#ifdef _STLP_VENDOR_CSTD +namespace std{ using _STLP_VENDOR_CSTD::strcmp; using _STLP_VENDOR_CSTD::strcpy; } +#endif +#endif + +// +// std::use_facet may be non-standard, uses a class instead: +// +#if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) || defined(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS) +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_STLP_USE_FACET +#endif + +// +// If STLport thinks there are no wide functions, etc. is not working; but +// only if BOOST_NO_STDC_NAMESPACE is not defined (if it is then we do the import +// into std:: ourselves). +// +#if defined(_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined(BOOST_NO_STDC_NAMESPACE) +# define BOOST_NO_CWCHAR +# define BOOST_NO_CWCTYPE +#endif + +// +// If STLport for some reason was configured so that it thinks that wchar_t +// is not an intrinsic type, then we have to disable the support for it as +// well (we would be missing required specializations otherwise). +// +#if !defined( _STLP_HAS_WCHAR_T) || defined(_STLP_WCHAR_T_IS_USHORT) +# undef BOOST_NO_INTRINSIC_WCHAR_T +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +// +// Borland ships a version of STLport with C++ Builder 6 that lacks +// hashtables and the like: +// +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x560) +# undef BOOST_HAS_HASH +#endif + +// +// gcc-2.95.3/STLPort does not like the using declarations we use to get ADL with std::min/max +// +#if defined(__GNUC__) && (__GNUC__ < 3) +# include // for std::min and std::max +# define BOOST_USING_STD_MIN() ((void)0) +# define BOOST_USING_STD_MAX() ((void)0) +namespace boost { using std::min; using std::max; } +#endif + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) + + + + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/stdlib/vacpp.hpp clucene-core-2.3.3.4/src/ext/boost/config/stdlib/vacpp.hpp --- clucene-core-0.9.21b/src/ext/boost/config/stdlib/vacpp.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/stdlib/vacpp.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,43 @@ +// (C) Copyright John Maddock 2001 - 2002. +// 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) + +// See http://www.boost.org for most recent version. + +#if __IBMCPP__ <= 501 +# define BOOST_NO_STD_ALLOCATOR +#endif + +#define BOOST_HAS_MACRO_USE_FACET +#define BOOST_NO_STD_MESSAGES + +// C++0x headers not yet implemented +// +# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_0X_HDR_CONCEPTS +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +# define BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +# define BOOST_NO_0X_HDR_FORWARD_LIST +# define BOOST_NO_0X_HDR_FUTURE +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +# define BOOST_NO_0X_HDR_MEMORY_CONCEPTS +# define BOOST_NO_0X_HDR_MUTEX +# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_0X_HDR_RATIO +# define BOOST_NO_0X_HDR_REGEX +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_STD_UNORDERED // deprecated; see following +# define BOOST_NO_0X_HDR_UNORDERED_MAP +# define BOOST_NO_0X_HDR_UNORDERED_SET + +#define BOOST_STDLIB "Visual Age default standard library" + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/suffix.hpp clucene-core-2.3.3.4/src/ext/boost/config/suffix.hpp --- clucene-core-0.9.21b/src/ext/boost/config/suffix.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/suffix.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,601 @@ +// Boost config.hpp configuration header file ------------------------------// + +// Copyright (c) 2001-2003 John Maddock +// Copyright (c) 2001 Darin Adler +// Copyright (c) 2001 Peter Dimov +// Copyright (c) 2002 Bill Kempf +// Copyright (c) 2002 Jens Maurer +// Copyright (c) 2002-2003 David Abrahams +// Copyright (c) 2003 Gennaro Prota +// Copyright (c) 2003 Eric Friedman +// +// 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) + +// See http://www.boost.org/ for most recent version. + +// Boost config.hpp policy and rationale documentation has been moved to +// http://www.boost.org/libs/config/ +// +// This file is intended to be stable, and relatively unchanging. +// It should contain boilerplate code only - no compiler specific +// code unless it is unavoidable - no changes unless unavoidable. + +#ifndef BOOST_CONFIG_SUFFIX_HPP +#define BOOST_CONFIG_SUFFIX_HPP + +// +// look for long long by looking for the appropriate macros in . +// Note that we use limits.h rather than climits for maximal portability, +// remember that since these just declare a bunch of macros, there should be +// no namespace issues from this. +// +#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG) \ + && !defined(BOOST_MSVC) && !defined(__BORLANDC__) +# include +# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) +# define BOOST_HAS_LONG_LONG +# else +# define BOOST_NO_LONG_LONG +# endif +#endif + +// GCC 3.x will clean up all of those nasty macro definitions that +// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine +// it under GCC 3.x. +#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS) +# undef BOOST_NO_CTYPE_FUNCTIONS +#endif + +// +// Assume any extensions are in namespace std:: unless stated otherwise: +// +# ifndef BOOST_STD_EXTENSION_NAMESPACE +# define BOOST_STD_EXTENSION_NAMESPACE std +# endif + +// +// If cv-qualified specializations are not allowed, then neither are cv-void ones: +// +# if defined(BOOST_NO_CV_SPECIALIZATIONS) \ + && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS) +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# endif + +// +// If there is no numeric_limits template, then it can't have any compile time +// constants either! +// +# if defined(BOOST_NO_LIMITS) \ + && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +# endif + +// +// if there is no long long then there is no specialisation +// for numeric_limits either: +// +#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS) +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +#endif + +// +// if there is no __int64 then there is no specialisation +// for numeric_limits<__int64> either: +// +#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS) +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +#endif + +// +// if member templates are supported then so is the +// VC6 subset of member templates: +// +# if !defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) +# define BOOST_MSVC6_MEMBER_TEMPLATES +# endif + +// +// Without partial specialization, can't test for partial specialisation bugs: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +# endif + +// +// Without partial specialization, we can't have array-type partial specialisations: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +# endif + +// +// Without partial specialization, std::iterator_traits can't work: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_STD_ITERATOR_TRAITS) +# define BOOST_NO_STD_ITERATOR_TRAITS +# endif + +// +// Without partial specialization, partial +// specialization with default args won't work either: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS) +# define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS +# endif + +// +// Without member template support, we can't have template constructors +// in the standard library either: +// +# if defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ + && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# endif + +// +// Without member template support, we can't have a conforming +// std::allocator template either: +// +# if defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ + && !defined(BOOST_NO_STD_ALLOCATOR) +# define BOOST_NO_STD_ALLOCATOR +# endif + +// +// without ADL support then using declarations will break ADL as well: +// +#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// +// Without typeid support we have no dynamic RTTI either: +// +#if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI) +# define BOOST_NO_RTTI +#endif + +// +// If we have a standard allocator, then we have a partial one as well: +// +#if !defined(BOOST_NO_STD_ALLOCATOR) +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +#endif + +// +// We can't have a working std::use_facet if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET) +# define BOOST_NO_STD_USE_FACET +# endif + +// +// We can't have a std::messages facet if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES) +# define BOOST_NO_STD_MESSAGES +# endif + +// +// We can't have a working std::wstreambuf if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF) +# define BOOST_NO_STD_WSTREAMBUF +# endif + +// +// We can't have a if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE) +# define BOOST_NO_CWCTYPE +# endif + +// +// We can't have a swprintf if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF) +# define BOOST_NO_SWPRINTF +# endif + +// +// If Win32 support is turned off, then we must turn off +// threading support also, unless there is some other +// thread API enabled: +// +#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \ + && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS) +# define BOOST_DISABLE_THREADS +#endif + +// +// Turn on threading support if the compiler thinks that it's in +// multithreaded mode. We put this here because there are only a +// limited number of macros that identify this (if there's any missing +// from here then add to the appropriate compiler section): +// +#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \ + || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \ + && !defined(BOOST_HAS_THREADS) +# define BOOST_HAS_THREADS +#endif + +// +// Turn threading support off if BOOST_DISABLE_THREADS is defined: +// +#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS) +# undef BOOST_HAS_THREADS +#endif + +// +// Turn threading support off if we don't recognise the threading API: +// +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\ + && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\ + && !defined(BOOST_HAS_MPTASKS) +# undef BOOST_HAS_THREADS +#endif + +// +// Turn threading detail macros off if we don't (want to) use threading +// +#ifndef BOOST_HAS_THREADS +# undef BOOST_HAS_PTHREADS +# undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# undef BOOST_HAS_PTHREAD_YIELD +# undef BOOST_HAS_PTHREAD_DELAY_NP +# undef BOOST_HAS_WINTHREADS +# undef BOOST_HAS_BETHREADS +# undef BOOST_HAS_MPTASKS +#endif + +// +// If the compiler claims to be C99 conformant, then it had better +// have a : +// +# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) +# define BOOST_HAS_STDINT_H +# ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# endif + +// +// Define BOOST_NO_SLIST and BOOST_NO_HASH if required. +// Note that this is for backwards compatibility only. +// +# if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST) +# define BOOST_NO_SLIST +# endif + +# if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH) +# define BOOST_NO_HASH +# endif + +// +// Set BOOST_SLIST_HEADER if not set already: +// +#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER) +# define BOOST_SLIST_HEADER +#endif + +// +// Set BOOST_HASH_SET_HEADER if not set already: +// +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER) +# define BOOST_HASH_SET_HEADER +#endif + +// +// Set BOOST_HASH_MAP_HEADER if not set already: +// +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER) +# define BOOST_HASH_MAP_HEADER +#endif + +// +// Set BOOST_NO_INITIALIZER_LISTS if there is no library support. +// + +#if defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS) +# define BOOST_NO_INITIALIZER_LISTS +#endif + +// BOOST_HAS_ABI_HEADERS +// This macro gets set if we have headers that fix the ABI, +// and prevent ODR violations when linking to external libraries: +#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS) +# define BOOST_HAS_ABI_HEADERS +#endif + +#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS) +# undef BOOST_HAS_ABI_HEADERS +#endif + +// BOOST_NO_STDC_NAMESPACE workaround --------------------------------------// +// Because std::size_t usage is so common, even in boost headers which do not +// otherwise use the C library, the workaround is included here so +// that ugly workaround code need not appear in many other boost headers. +// NOTE WELL: This is a workaround for non-conforming compilers; +// must still be #included in the usual places so that inclusion +// works as expected with standard conforming compilers. The resulting +// double inclusion of is harmless. + +# ifdef BOOST_NO_STDC_NAMESPACE +# include + namespace std { using ::ptrdiff_t; using ::size_t; } +# endif + +// Workaround for the unfortunate min/max macros defined by some platform headers + +#define BOOST_PREVENT_MACRO_SUBSTITUTION + +#ifndef BOOST_USING_STD_MIN +# define BOOST_USING_STD_MIN() using std::min +#endif + +#ifndef BOOST_USING_STD_MAX +# define BOOST_USING_STD_MAX() using std::max +#endif + +// BOOST_NO_STD_MIN_MAX workaround -----------------------------------------// + +# ifdef BOOST_NO_STD_MIN_MAX + +namespace std { + template + inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __b < __a ? __b : __a; + } + template + inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __a < __b ? __b : __a; + } +} + +# endif + +// BOOST_STATIC_CONSTANT workaround --------------------------------------- // +// On compilers which don't allow in-class initialization of static integral +// constant members, we must use enums as a workaround if we want the constants +// to be available at compile-time. This macro gives us a convenient way to +// declare such constants. + +# ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment } +# else +# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment +# endif + +// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------// +// When the standard library does not have a conforming std::use_facet there +// are various workarounds available, but they differ from library to library. +// The same problem occurs with has_facet. +// These macros provide a consistent way to access a locale's facets. +// Usage: +// replace +// std::use_facet(loc); +// with +// BOOST_USE_FACET(Type, loc); +// Note do not add a std:: prefix to the front of BOOST_USE_FACET! +// Use for BOOST_HAS_FACET is analogous. + +#if defined(BOOST_NO_STD_USE_FACET) +# ifdef BOOST_HAS_TWO_ARG_USE_FACET +# define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast(0)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast(0)) +# elif defined(BOOST_HAS_MACRO_USE_FACET) +# define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type) +# define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type) +# elif defined(BOOST_HAS_STLP_USE_FACET) +# define BOOST_USE_FACET(Type, loc) (*std::_Use_facet(loc)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) +# endif +#else +# define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc) +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) +#endif + +// BOOST_NESTED_TEMPLATE workaround ------------------------------------------// +// Member templates are supported by some compilers even though they can't use +// the A::template member syntax, as a workaround replace: +// +// typedef typename A::template rebind binder; +// +// with: +// +// typedef typename A::BOOST_NESTED_TEMPLATE rebind binder; + +#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD +# define BOOST_NESTED_TEMPLATE template +#else +# define BOOST_NESTED_TEMPLATE +#endif + +// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------// +// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION +// is defined, in which case it evaluates to return x; Use when you have a return +// statement that can never be reached. + +#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION +# define BOOST_UNREACHABLE_RETURN(x) return x; +#else +# define BOOST_UNREACHABLE_RETURN(x) +#endif + +// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------// +// +// Some compilers don't support the use of `typename' for dependent +// types in deduced contexts, e.g. +// +// template void f(T, typename T::type); +// ^^^^^^^^ +// Replace these declarations with: +// +// template void f(T, BOOST_DEDUCED_TYPENAME T::type); + +#ifndef BOOST_NO_DEDUCED_TYPENAME +# define BOOST_DEDUCED_TYPENAME typename +#else +# define BOOST_DEDUCED_TYPENAME +#endif + +#ifndef BOOST_NO_TYPENAME_WITH_CTOR +# define BOOST_CTOR_TYPENAME typename +#else +# define BOOST_CTOR_TYPENAME +#endif + +// long long workaround ------------------------------------------// +// On gcc (and maybe other compilers?) long long is alway supported +// but it's use may generate either warnings (with -ansi), or errors +// (with -pedantic -ansi) unless it's use is prefixed by __extension__ +// +#if defined(BOOST_HAS_LONG_LONG) +namespace boost{ +# ifdef __GNUC__ + __extension__ typedef long long long_long_type; + __extension__ typedef unsigned long long ulong_long_type; +# else + typedef long long long_long_type; + typedef unsigned long long ulong_long_type; +# endif +} +#endif + +// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------// +// +// Some compilers have problems with function templates whose template +// parameters don't appear in the function parameter list (basically +// they just link one instantiation of the template in the final +// executable). These macros provide a uniform way to cope with the +// problem with no effects on the calling syntax. + +// Example: +// +// #include +// #include +// #include +// +// template +// void f() { std::cout << n << ' '; } +// +// template +// void g() { std::cout << typeid(T).name() << ' '; } +// +// int main() { +// f<1>(); +// f<2>(); +// +// g(); +// g(); +// } +// +// With VC++ 6.0 the output is: +// +// 2 2 double double +// +// To fix it, write +// +// template +// void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... } +// +// template +// void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... } +// + + +#if defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + +# include "boost/type.hpp" +# include "boost/non_type.hpp" + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) boost::type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type* +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type* + +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \ + , BOOST_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \ + , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \ + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \ + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +#else + +// no workaround needed: expand to nothing + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + + +#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + + +// ---------------------------------------------------------------------------// + +// +// Helper macro BOOST_STRINGIZE: +// Converts the parameter X to a string after macro replacement +// on X has been performed. +// +#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) +#define BOOST_DO_STRINGIZE(X) #X + +// +// Helper macro BOOST_JOIN: +// The following piece of macro magic joins the two +// arguments together, even when one of the arguments is +// itself a macro (see 16.3.1 in C++ standard). The key +// is that macro expansion of macro arguments does not +// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN. +// +#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y ) +#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y) +#define BOOST_DO_JOIN2( X, Y ) X##Y + +// +// Set some default values for compiler/library/platform names. +// These are for debugging config setup only: +// +# ifndef BOOST_COMPILER +# define BOOST_COMPILER "Unknown ISO C++ Compiler" +# endif +# ifndef BOOST_STDLIB +# define BOOST_STDLIB "Unknown ISO standard library" +# endif +# ifndef BOOST_PLATFORM +# if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \ + || defined(_POSIX_SOURCE) +# define BOOST_PLATFORM "Generic Unix" +# else +# define BOOST_PLATFORM "Unknown" +# endif +# endif + +#endif + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/user.hpp clucene-core-2.3.3.4/src/ext/boost/config/user.hpp --- clucene-core-0.9.21b/src/ext/boost/config/user.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/user.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,124 @@ +// boost/config/user.hpp ---------------------------------------------------// + +// (C) Copyright John Maddock 2001. +// 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) + +// Do not check in modified versions of this file, +// This file may be customized by the end user, but not by boost. + +// +// Use this file to define a site and compiler specific +// configuration policy: +// + +// define this to locate a compiler config file: +// #define BOOST_COMPILER_CONFIG + +// define this to locate a stdlib config file: +// #define BOOST_STDLIB_CONFIG + +// define this to locate a platform config file: +// #define BOOST_PLATFORM_CONFIG + +// define this to disable compiler config, +// use if your compiler config has nothing to set: +// #define BOOST_NO_COMPILER_CONFIG + +// define this to disable stdlib config, +// use if your stdlib config has nothing to set: +// #define BOOST_NO_STDLIB_CONFIG + +// define this to disable platform config, +// use if your platform config has nothing to set: +// #define BOOST_NO_PLATFORM_CONFIG + +// define this to disable all config options, +// excluding the user config. Use if your +// setup is fully ISO compliant, and has no +// useful extensions, or for autoconf generated +// setups: +// #define BOOST_NO_CONFIG + +// define this to make the config "optimistic" +// about unknown compiler versions. Normally +// unknown compiler versions are assumed to have +// all the defects of the last known version, however +// setting this flag, causes the config to assume +// that unknown compiler versions are fully conformant +// with the standard: +// #define BOOST_STRICT_CONFIG + +// define this to cause the config to halt compilation +// with an #error if it encounters anything unknown -- +// either an unknown compiler version or an unknown +// compiler/platform/library: +// #define BOOST_ASSERT_CONFIG + + +// define if you want to disable threading support, even +// when available: +// #define BOOST_DISABLE_THREADS + +// define when you want to disable Win32 specific features +// even when available: +// #define BOOST_DISABLE_WIN32 + +// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any +// prefix/suffix headers that normally control things like struct +// packing and alignment. +// #define BOOST_DISABLE_ABI_HEADERS + +// BOOST_ABI_PREFIX: A prefix header to include in place of whatever +// boost.config would normally select, any replacement should set up +// struct packing and alignment options as required. +// #define BOOST_ABI_PREFIX my-header-name + +// BOOST_ABI_SUFFIX: A suffix header to include in place of whatever +// boost.config would normally select, any replacement should undo +// the effects of the prefix header. +// #define BOOST_ABI_SUFFIX my-header-name + +// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, +// to be linked as dll's rather than static libraries on Microsoft Windows +// (this macro is used to turn on __declspec(dllimport) modifiers, so that +// the compiler knows which symbols to look for in a dll rather than in a +// static library). Note that there may be some libraries that can only +// be statically linked (Boost.Test for example) and others which may only +// be dynamically linked (Boost.Threads for example), in these cases this +// macro has no effect. +// #define BOOST_ALL_DYN_LINK + +// BOOST_WHATEVER_DYN_LINK: Forces library "whatever" to be linked as a dll +// rather than a static library on Microsoft Windows: replace the WHATEVER +// part of the macro name with the name of the library that you want to +// dynamically link to, for example use BOOST_DATE_TIME_DYN_LINK or +// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport) +// modifiers, so that the compiler knows which symbols to look for in a dll +// rather than in a static library). +// Note that there may be some libraries that can only be statically linked +// (Boost.Test for example) and others which may only be dynamically linked +// (Boost.Threads for example), in these cases this macro is unsupported. +// #define BOOST_WHATEVER_DYN_LINK + +// BOOST_ALL_NO_LIB: Tells the config system not to automatically select +// which libraries to link against. +// Normally if a compiler supports #pragma lib, then the correct library +// build variant will be automatically selected and linked against, +// simply by the act of including one of that library's headers. +// This macro turns that feature off. +// #define BOOST_ALL_NO_LIB + +// BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically +// select which library to link against for library "whatever", +// replace WHATEVER in the macro name with the name of the library; +// for example BOOST_DATE_TIME_NO_LIB or BOOST_REGEX_NO_LIB. +// Normally if a compiler supports #pragma lib, then the correct library +// build variant will be automatically selected and linked against, simply +// by the act of including one of that library's headers. This macro turns +// that feature off. +// #define BOOST_WHATEVER_NO_LIB + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/config/warning_disable.hpp clucene-core-2.3.3.4/src/ext/boost/config/warning_disable.hpp --- clucene-core-0.9.21b/src/ext/boost/config/warning_disable.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config/warning_disable.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,47 @@ +// Copyright John Maddock 2008 +// Use, modification, and distribution is 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 file exists to turn off some overly-pedantic warning emitted +// by certain compilers. You should include this header only in: +// +// * A test case, before any other headers, or, +// * A library source file before any other headers. +// +// IT SHOULD NOT BE INCLUDED BY ANY BOOST HEADER. +// +// YOU SHOULD NOT INCLUDE IT IF YOU CAN REASONABLY FIX THE WARNING. +// +// The only warnings disabled here are those that are: +// +// * Quite unreasonably pedantic. +// * Generally only emitted by a single compiler. +// * Can't easily be fixed: for example if the vendors own std lib +// code emits these warnings! +// +// Note that THIS HEADER MUST NOT INCLUDE ANY OTHER HEADERS: +// not even std library ones! Doing so may turn the warning +// off too late to be of any use. For example the VC++ C4996 +// warning can be omitted from if that header is included +// before or by this one :-( +// + +#ifndef BOOST_CONFIG_WARNING_DISABLE_HPP +#define BOOST_CONFIG_WARNING_DISABLE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) + // Error 'function': was declared deprecated + // http://msdn2.microsoft.com/en-us/library/ttcz0bys(VS.80).aspx + // This error is emitted when you use some perfectly conforming + // std lib functions in a perfectly correct way, and also by + // some of Microsoft's own std lib code ! +# pragma warning(disable:4996) +#endif +#if defined(__INTEL_COMPILER) || defined(__ICL) + // As above: gives warning when a "deprecated" + // std library function is encountered. +# pragma warning(disable:1786) +#endif + +#endif // BOOST_CONFIG_WARNING_DISABLE_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/config.hpp clucene-core-2.3.3.4/src/ext/boost/config.hpp --- clucene-core-0.9.21b/src/ext/boost/config.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/config.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,70 @@ +// Boost config.hpp configuration header file ------------------------------// + +// (C) Copyright John Maddock 2002. +// 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) + +// See http://www.boost.org/libs/config for most recent version. + +// Boost config.hpp policy and rationale documentation has been moved to +// http://www.boost.org/libs/config +// +// CAUTION: This file is intended to be completely stable - +// DO NOT MODIFY THIS FILE! +// + +#ifndef BOOST_CONFIG_HPP +#define BOOST_CONFIG_HPP + +// if we don't have a user config, then use the default location: +#if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG) +# define BOOST_USER_CONFIG +#endif +// include it first: +#ifdef BOOST_USER_CONFIG +# include BOOST_USER_CONFIG +#endif + +// if we don't have a compiler config set, try and find one: +#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a compiler config, include it now: +#ifdef BOOST_COMPILER_CONFIG +# include BOOST_COMPILER_CONFIG +#endif + +// if we don't have a std library config set, try and find one: +#if !defined(BOOST_STDLIB_CONFIG) && !defined(BOOST_NO_STDLIB_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a std library config, include it now: +#ifdef BOOST_STDLIB_CONFIG +# include BOOST_STDLIB_CONFIG +#endif + +// if we don't have a platform config set, try and find one: +#if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a platform config, include it now: +#ifdef BOOST_PLATFORM_CONFIG +# include BOOST_PLATFORM_CONFIG +#endif + +// get config suffix code: +#include + +#endif // BOOST_CONFIG_HPP + + + + + + + + + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/current_function.hpp clucene-core-2.3.3.4/src/ext/boost/current_function.hpp --- clucene-core-0.9.21b/src/ext/boost/current_function.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/current_function.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,67 @@ +#ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED +#define BOOST_CURRENT_FUNCTION_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/current_function.hpp - BOOST_CURRENT_FUNCTION +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// +// 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) +// +// http://www.boost.org/libs/utility/current_function.html +// + +namespace boost +{ + +namespace detail +{ + +inline void current_function_helper() +{ + +#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) + +# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__ + +#elif defined(__DMC__) && (__DMC__ >= 0x810) + +# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__ + +#elif defined(__FUNCSIG__) + +# define BOOST_CURRENT_FUNCTION __FUNCSIG__ + +#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500)) + +# define BOOST_CURRENT_FUNCTION __FUNCTION__ + +#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550) + +# define BOOST_CURRENT_FUNCTION __FUNC__ + +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) + +# define BOOST_CURRENT_FUNCTION __func__ + +#else + +# define BOOST_CURRENT_FUNCTION "(unknown)" + +#endif + +} + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/algorithm.hpp clucene-core-2.3.3.4/src/ext/boost/detail/algorithm.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/algorithm.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/algorithm.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,222 @@ +// (C) Copyright Jeremy Siek 2001. +// Distributed under the Boost Software License, Version 1.0. (See accompany- +// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/* + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +#ifndef BOOST_ALGORITHM_HPP +# define BOOST_ALGORITHM_HPP +# include +// Algorithms on sequences +// +// The functions in this file have not yet gone through formal +// review, and are subject to change. This is a work in progress. +// They have been checked into the detail directory because +// there are some graph algorithms that use these functions. + +#include +#include + +namespace boost { + + template + Iter1 begin(const std::pair& p) { return p.first; } + + template + Iter2 end(const std::pair& p) { return p.second; } + + template + typename boost::detail::iterator_traits::difference_type + size(const std::pair& p) { + return std::distance(p.first, p.second); + } + +#if 0 + // These seem to interfere with the std::pair overloads :( + template + typename Container::iterator + begin(Container& c) { return c.begin(); } + + template + typename Container::const_iterator + begin(const Container& c) { return c.begin(); } + + template + typename Container::iterator + end(Container& c) { return c.end(); } + + template + typename Container::const_iterator + end(const Container& c) { return c.end(); } + + template + typename Container::size_type + size(const Container& c) { return c.size(); } +#else + template + typename std::vector::iterator + begin(std::vector& c) { return c.begin(); } + + template + typename std::vector::const_iterator + begin(const std::vector& c) { return c.begin(); } + + template + typename std::vector::iterator + end(std::vector& c) { return c.end(); } + + template + typename std::vector::const_iterator + end(const std::vector& c) { return c.end(); } + + template + typename std::vector::size_type + size(const std::vector& c) { return c.size(); } +#endif + + template + void iota(ForwardIterator first, ForwardIterator last, T value) + { + for (; first != last; ++first, ++value) + *first = value; + } + template + void iota(Container& c, const T& value) + { + iota(begin(c), end(c), value); + } + + // Also do version with 2nd container? + template + OutIter copy(const Container& c, OutIter result) { + return std::copy(begin(c), end(c), result); + } + + template + bool equal(const Container1& c1, const Container2& c2) + { + if (size(c1) != size(c2)) + return false; + return std::equal(begin(c1), end(c1), begin(c2)); + } + + template + void sort(Container& c) { std::sort(begin(c), end(c)); } + + template + void sort(Container& c, const Predicate& p) { + std::sort(begin(c), end(c), p); + } + + template + void stable_sort(Container& c) { std::stable_sort(begin(c), end(c)); } + + template + void stable_sort(Container& c, const Predicate& p) { + std::stable_sort(begin(c), end(c), p); + } + + template + bool any_if(InputIterator first, InputIterator last, Predicate p) + { + return std::find_if(first, last, p) != last; + } + template + bool any_if(const Container& c, Predicate p) + { + return any_if(begin(c), end(c), p); + } + + template + bool container_contains(InputIterator first, InputIterator last, T value) + { + return std::find(first, last, value) != last; + } + template + bool container_contains(const Container& c, const T& value) + { + return container_contains(begin(c), end(c), value); + } + + template + std::size_t count(const Container& c, const T& value) + { + return std::count(begin(c), end(c), value); + } + + template + std::size_t count_if(const Container& c, Predicate p) + { + return std::count_if(begin(c), end(c), p); + } + + template + bool is_sorted(ForwardIterator first, ForwardIterator last) + { + if (first == last) + return true; + + ForwardIterator next = first; + for (++next; next != last; first = next, ++next) { + if (*next < *first) + return false; + } + + return true; + } + + template + bool is_sorted(ForwardIterator first, ForwardIterator last, + StrictWeakOrdering comp) + { + if (first == last) + return true; + + ForwardIterator next = first; + for (++next; next != last; first = next, ++next) { + if (comp(*next, *first)) + return false; + } + + return true; + } + + template + bool is_sorted(const Container& c) + { + return is_sorted(begin(c), end(c)); + } + + template + bool is_sorted(const Container& c, StrictWeakOrdering comp) + { + return is_sorted(begin(c), end(c), comp); + } + +} // namespace boost + +#endif // BOOST_ALGORITHM_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/allocator_utilities.hpp clucene-core-2.3.3.4/src/ext/boost/detail/allocator_utilities.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/allocator_utilities.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/allocator_utilities.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,212 @@ +/* Copyright 2003-2009 Joaquin M Lopez Munoz. + * 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) + * + * See Boost website at http://www.boost.org/ + */ + +#ifndef BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP +#define BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP + +#include /* keep it first to prevent nasty warns in MSVC */ +#include +#include +#include +#include +#include +#include +#include + +namespace boost{ + +namespace detail{ + +/* Allocator adaption layer. Some stdlibs provide allocators without rebind + * and template ctors. These facilities are simulated with the external + * template class rebind_to and the aid of partial_std_allocator_wrapper. + */ + +namespace allocator{ + +/* partial_std_allocator_wrapper inherits the functionality of a std + * allocator while providing a templatized ctor and other bits missing + * in some stdlib implementation or another. + */ + +template +class partial_std_allocator_wrapper:public std::allocator +{ +public: + /* Oddly enough, STLport does not define std::allocator::value_type + * when configured to work without partial template specialization. + * No harm in supplying the definition here unconditionally. + */ + + typedef Type value_type; + + partial_std_allocator_wrapper(){}; + + template + partial_std_allocator_wrapper(const partial_std_allocator_wrapper&){} + + partial_std_allocator_wrapper(const std::allocator& x): + std::allocator(x) + { + }; + +#if defined(BOOST_DINKUMWARE_STDLIB) + /* Dinkumware guys didn't provide a means to call allocate() without + * supplying a hint, in disagreement with the standard. + */ + + Type* allocate(std::size_t n,const void* hint=0) + { + std::allocator& a=*this; + return a.allocate(n,hint); + } +#endif + +}; + +/* Detects whether a given allocator belongs to a defective stdlib not + * having the required member templates. + * Note that it does not suffice to check the Boost.Config stdlib + * macros, as the user might have passed a custom, compliant allocator. + * The checks also considers partial_std_allocator_wrapper to be + * a standard defective allocator. + */ + +#if defined(BOOST_NO_STD_ALLOCATOR)&&\ + (defined(BOOST_HAS_PARTIAL_STD_ALLOCATOR)||defined(BOOST_DINKUMWARE_STDLIB)) + +template +struct is_partial_std_allocator +{ + BOOST_STATIC_CONSTANT(bool, + value= + (is_same< + std::allocator, + Allocator + >::value)|| + (is_same< + partial_std_allocator_wrapper< + BOOST_DEDUCED_TYPENAME Allocator::value_type>, + Allocator + >::value)); +}; + +#else + +template +struct is_partial_std_allocator +{ + BOOST_STATIC_CONSTANT(bool,value=false); +}; + +#endif + +/* rebind operations for defective std allocators */ + +template +struct partial_std_allocator_rebind_to +{ + typedef partial_std_allocator_wrapper type; +}; + +/* rebind operation in all other cases */ + +#if BOOST_WORKAROUND(BOOST_MSVC,<1300) +/* Workaround for a problem in MSVC with dependent template typedefs + * when doing rebinding of allocators. + * Modeled after (thanks, Aleksey!) + */ + +template +struct rebinder +{ + template struct fake_allocator:Allocator{}; + template<> struct fake_allocator + { + template struct rebind{}; + }; + + template + struct result: + fake_allocator::value>:: + template rebind + { + }; +}; +#else +template +struct rebinder +{ + template + struct result + { + typedef typename Allocator::BOOST_NESTED_TEMPLATE + rebind::other other; + }; +}; +#endif + +template +struct compliant_allocator_rebind_to +{ + typedef typename rebinder:: + BOOST_NESTED_TEMPLATE result::other type; +}; + +/* rebind front-end */ + +template +struct rebind_to: + mpl::eval_if_c< + is_partial_std_allocator::value, + partial_std_allocator_rebind_to, + compliant_allocator_rebind_to + > +{ +}; + +/* allocator-independent versions of construct and destroy */ + +template +void construct(void* p,const Type& t) +{ + new (p) Type(t); +} + +#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500)) +/* MSVC++ issues spurious warnings about unreferencend formal parameters + * in destroy when Type is a class with trivial dtor. + */ + +#pragma warning(push) +#pragma warning(disable:4100) +#endif + +template +void destroy(const Type* p) +{ + +#if BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x590)) + const_cast(p)->~Type(); +#else + p->~Type(); +#endif + +} + +#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500)) +#pragma warning(pop) +#endif + +} /* namespace boost::detail::allocator */ + +} /* namespace boost::detail */ + +} /* namespace boost */ + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/atomic_count.hpp clucene-core-2.3.3.4/src/ext/boost/detail/atomic_count.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/atomic_count.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/atomic_count.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,21 @@ +#ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED +#define BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/atomic_count.hpp - thread/SMP safe reference counter +// +// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. +// +// 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 + +#include + +#endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/binary_search.hpp clucene-core-2.3.3.4/src/ext/boost/detail/binary_search.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/binary_search.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/binary_search.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,216 @@ +// Copyright (c) 2000 David Abrahams. +// 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) +// +// Copyright (c) 1994 +// Hewlett-Packard Company +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appear in all copies and +// that both that copyright notice and this permission notice appear +// in supporting documentation. Hewlett-Packard Company makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied warranty. +// +// Copyright (c) 1996 +// Silicon Graphics Computer Systems, Inc. +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appear in all copies and +// that both that copyright notice and this permission notice appear +// in supporting documentation. Silicon Graphics makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied warranty. +// +#ifndef BINARY_SEARCH_DWA_122600_H_ +# define BINARY_SEARCH_DWA_122600_H_ + +# include +# include + +namespace boost { namespace detail { + +template +ForwardIter lower_bound(ForwardIter first, ForwardIter last, + const Tp& val) +{ + typedef detail::iterator_traits traits; + + typename traits::difference_type len = boost::detail::distance(first, last); + typename traits::difference_type half; + ForwardIter middle; + + while (len > 0) { + half = len >> 1; + middle = first; + std::advance(middle, half); + if (*middle < val) { + first = middle; + ++first; + len = len - half - 1; + } + else + len = half; + } + return first; +} + +template +ForwardIter lower_bound(ForwardIter first, ForwardIter last, + const Tp& val, Compare comp) +{ + typedef detail::iterator_traits traits; + + typename traits::difference_type len = boost::detail::distance(first, last); + typename traits::difference_type half; + ForwardIter middle; + + while (len > 0) { + half = len >> 1; + middle = first; + std::advance(middle, half); + if (comp(*middle, val)) { + first = middle; + ++first; + len = len - half - 1; + } + else + len = half; + } + return first; +} + +template +ForwardIter upper_bound(ForwardIter first, ForwardIter last, + const Tp& val) +{ + typedef detail::iterator_traits traits; + + typename traits::difference_type len = boost::detail::distance(first, last); + typename traits::difference_type half; + ForwardIter middle; + + while (len > 0) { + half = len >> 1; + middle = first; + std::advance(middle, half); + if (val < *middle) + len = half; + else { + first = middle; + ++first; + len = len - half - 1; + } + } + return first; +} + +template +ForwardIter upper_bound(ForwardIter first, ForwardIter last, + const Tp& val, Compare comp) +{ + typedef detail::iterator_traits traits; + + typename traits::difference_type len = boost::detail::distance(first, last); + typename traits::difference_type half; + ForwardIter middle; + + while (len > 0) { + half = len >> 1; + middle = first; + std::advance(middle, half); + if (comp(val, *middle)) + len = half; + else { + first = middle; + ++first; + len = len - half - 1; + } + } + return first; +} + +template +std::pair +equal_range(ForwardIter first, ForwardIter last, const Tp& val) +{ + typedef detail::iterator_traits traits; + + typename traits::difference_type len = boost::detail::distance(first, last); + typename traits::difference_type half; + ForwardIter middle, left, right; + + while (len > 0) { + half = len >> 1; + middle = first; + std::advance(middle, half); + if (*middle < val) { + first = middle; + ++first; + len = len - half - 1; + } + else if (val < *middle) + len = half; + else { + left = boost::detail::lower_bound(first, middle, val); + std::advance(first, len); + right = boost::detail::upper_bound(++middle, first, val); + return std::pair(left, right); + } + } + return std::pair(first, first); +} + +template +std::pair +equal_range(ForwardIter first, ForwardIter last, const Tp& val, + Compare comp) +{ + typedef detail::iterator_traits traits; + + typename traits::difference_type len = boost::detail::distance(first, last); + typename traits::difference_type half; + ForwardIter middle, left, right; + + while (len > 0) { + half = len >> 1; + middle = first; + std::advance(middle, half); + if (comp(*middle, val)) { + first = middle; + ++first; + len = len - half - 1; + } + else if (comp(val, *middle)) + len = half; + else { + left = boost::detail::lower_bound(first, middle, val, comp); + std::advance(first, len); + right = boost::detail::upper_bound(++middle, first, val, comp); + return std::pair(left, right); + } + } + return std::pair(first, first); +} + +template +bool binary_search(ForwardIter first, ForwardIter last, + const Tp& val) { + ForwardIter i = boost::detail::lower_bound(first, last, val); + return i != last && !(val < *i); +} + +template +bool binary_search(ForwardIter first, ForwardIter last, + const Tp& val, + Compare comp) { + ForwardIter i = boost::detail::lower_bound(first, last, val, comp); + return i != last && !comp(val, *i); +} + +}} // namespace boost::detail + +#endif // BINARY_SEARCH_DWA_122600_H_ diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/call_traits.hpp clucene-core-2.3.3.4/src/ext/boost/detail/call_traits.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/call_traits.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/call_traits.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,164 @@ +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// 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). +// +// See http://www.boost.org/libs/utility for most recent version including documentation. + +// call_traits: defines typedefs for function usage +// (see libs/utility/call_traits.htm) + +/* Release notes: + 23rd July 2000: + Fixed array specialization. (JM) + Added Borland specific fixes for reference types + (issue raised by Steve Cleary). +*/ + +#ifndef BOOST_DETAIL_CALL_TRAITS_HPP +#define BOOST_DETAIL_CALL_TRAITS_HPP + +#ifndef BOOST_CONFIG_HPP +#include +#endif +#include + +#include +#include +#include + +namespace boost{ + +namespace detail{ + +template +struct ct_imp2 +{ + typedef const T& param_type; +}; + +template +struct ct_imp2 +{ + typedef const T param_type; +}; + +template +struct ct_imp +{ + typedef const T& param_type; +}; + +template +struct ct_imp +{ + typedef typename ct_imp2::param_type param_type; +}; + +template +struct ct_imp +{ + typedef const T param_type; +}; + +} + +template +struct call_traits +{ +public: + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + // + // C++ Builder workaround: we should be able to define a compile time + // constant and pass that as a single template parameter to ct_imp, + // however compiler bugs prevent this - instead pass three bool's to + // ct_imp and add an extra partial specialisation + // of ct_imp to handle the logic. (JM) + typedef typename boost::detail::ct_imp< + T, + ::boost::is_pointer::value, + ::boost::is_arithmetic::value + >::param_type param_type; +}; + +template +struct call_traits +{ + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& param_type; // hh removed const +}; + +#if BOOST_WORKAROUND( __BORLANDC__, < 0x5A0 ) +// these are illegal specialisations; cv-qualifies applied to +// references have no effect according to [8.3.2p1], +// C++ Builder requires them though as it treats cv-qualified +// references as distinct types... +template +struct call_traits +{ + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& param_type; // hh removed const +}; +template +struct call_traits +{ + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& param_type; // hh removed const +}; +template +struct call_traits +{ + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& param_type; // hh removed const +}; + +template +struct call_traits< T * > +{ + typedef T * value_type; + typedef T * & reference; + typedef T * const & const_reference; + typedef T * const param_type; // hh removed const +}; +#endif +#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +template +struct call_traits +{ +private: + typedef T array_type[N]; +public: + // degrades array to pointer: + typedef const T* value_type; + typedef array_type& reference; + typedef const array_type& const_reference; + typedef const T* const param_type; +}; + +template +struct call_traits +{ +private: + typedef const T array_type[N]; +public: + // degrades array to pointer: + typedef const T* value_type; + typedef array_type& reference; + typedef const array_type& const_reference; + typedef const T* const param_type; +}; +#endif + +} + +#endif // BOOST_DETAIL_CALL_TRAITS_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/catch_exceptions.hpp clucene-core-2.3.3.4/src/ext/boost/detail/catch_exceptions.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/catch_exceptions.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/catch_exceptions.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,146 @@ +// boost/catch_exceptions.hpp -----------------------------------------------// + +// Copyright Beman Dawes 1995-2001. 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) + +// See http://www.boost.org/libs/test for documentation. + +// Revision History +// 13 Jun 01 report_exception() made inline. (John Maddock, Jesse Jones) +// 26 Feb 01 Numerous changes suggested during formal review. (Beman) +// 25 Jan 01 catch_exceptions.hpp code factored out of cpp_main.cpp. +// 22 Jan 01 Remove test_tools dependencies to reduce coupling. +// 5 Nov 00 Initial boost version (Beman Dawes) + +#ifndef BOOST_CATCH_EXCEPTIONS_HPP +#define BOOST_CATCH_EXCEPTIONS_HPP + +// header dependencies are deliberately restricted to the standard library +// to reduce coupling to other boost libraries. +#include // for string +#include // for bad_alloc +#include // for bad_cast, bad_typeid +#include // for exception, bad_exception +#include // for std exception hierarchy +#include // for exit codes +# if __GNUC__ != 2 || __GNUC_MINOR__ > 96 +# include // for ostream +# else +# include // workaround GNU missing ostream header +# endif + +# if defined(__BORLANDC__) && (__BORLANDC__ <= 0x0551) +# define BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT +# endif + +#if defined(MPW_CPLUS) && (MPW_CPLUS <= 0x890) +# define BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT + namespace std { class bad_typeid { }; } +# endif + +namespace boost +{ + + namespace detail + { + // A separate reporting function was requested during formal review. + inline void report_exception( std::ostream & os, + const char * name, const char * info ) + { os << "\n** uncaught exception: " << name << " " << info << std::endl; } + } + + // catch_exceptions ------------------------------------------------------// + + template< class Generator > // Generator is function object returning int + int catch_exceptions( Generator function_object, + std::ostream & out, std::ostream & err ) + { + int result = 0; // quiet compiler warnings + bool exception_thrown = true; // avoid setting result for each excptn type + +#ifndef BOOST_NO_EXCEPTIONS + try + { +#endif + result = function_object(); + exception_thrown = false; +#ifndef BOOST_NO_EXCEPTIONS + } + + // As a result of hard experience with strangely interleaved output + // under some compilers, there is a lot of use of endl in the code below + // where a simple '\n' might appear to do. + + // The rules for catch & arguments are a bit different from function + // arguments (ISO 15.3 paragraphs 18 & 19). Apparently const isn't + // required, but it doesn't hurt and some programmers ask for it. + + catch ( const char * ex ) + { detail::report_exception( out, "", ex ); } + catch ( const std::string & ex ) + { detail::report_exception( out, "", ex.c_str() ); } + + // std:: exceptions + catch ( const std::bad_alloc & ex ) + { detail::report_exception( out, "std::bad_alloc:", ex.what() ); } + +# ifndef BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT + catch ( const std::bad_cast & ex ) + { detail::report_exception( out, "std::bad_cast:", ex.what() ); } + catch ( const std::bad_typeid & ex ) + { detail::report_exception( out, "std::bad_typeid:", ex.what() ); } +# else + catch ( const std::bad_cast & ) + { detail::report_exception( out, "std::bad_cast", "" ); } + catch ( const std::bad_typeid & ) + { detail::report_exception( out, "std::bad_typeid", "" ); } +# endif + + catch ( const std::bad_exception & ex ) + { detail::report_exception( out, "std::bad_exception:", ex.what() ); } + catch ( const std::domain_error & ex ) + { detail::report_exception( out, "std::domain_error:", ex.what() ); } + catch ( const std::invalid_argument & ex ) + { detail::report_exception( out, "std::invalid_argument:", ex.what() ); } + catch ( const std::length_error & ex ) + { detail::report_exception( out, "std::length_error:", ex.what() ); } + catch ( const std::out_of_range & ex ) + { detail::report_exception( out, "std::out_of_range:", ex.what() ); } + catch ( const std::range_error & ex ) + { detail::report_exception( out, "std::range_error:", ex.what() ); } + catch ( const std::overflow_error & ex ) + { detail::report_exception( out, "std::overflow_error:", ex.what() ); } + catch ( const std::underflow_error & ex ) + { detail::report_exception( out, "std::underflow_error:", ex.what() ); } + catch ( const std::logic_error & ex ) + { detail::report_exception( out, "std::logic_error:", ex.what() ); } + catch ( const std::runtime_error & ex ) + { detail::report_exception( out, "std::runtime_error:", ex.what() ); } + catch ( const std::exception & ex ) + { detail::report_exception( out, "std::exception:", ex.what() ); } + + catch ( ... ) + { detail::report_exception( out, "unknown exception", "" ); } +#endif // BOOST_NO_EXCEPTIONS + + if ( exception_thrown ) result = boost::exit_exception_failure; + + if ( result != 0 && result != exit_success ) + { + out << std::endl << "**** returning with error code " + << result << std::endl; + err + << "********** errors detected; see stdout for details ***********" + << std::endl; + } +#if !defined(BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE) + else { out << std::flush << "no errors detected" << std::endl; } +#endif + return result; + } // catch_exceptions + +} // boost + +#endif // BOOST_CATCH_EXCEPTIONS_HPP + diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/compressed_pair.hpp clucene-core-2.3.3.4/src/ext/boost/detail/compressed_pair.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/compressed_pair.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/compressed_pair.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,443 @@ +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// 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). +// +// See http://www.boost.org/libs/utility for most recent version including documentation. + +// compressed_pair: pair that "compresses" empty members +// (see libs/utility/compressed_pair.htm) +// +// JM changes 25 Jan 2004: +// For the case where T1 == T2 and both are empty, then first() and second() +// should return different objects. +// JM changes 25 Jan 2000: +// Removed default arguments from compressed_pair_switch to get +// C++ Builder 4 to accept them +// rewriten swap to get gcc and C++ builder to compile. +// added partial specialisations for case T1 == T2 to avoid duplicate constructor defs. + +#ifndef BOOST_DETAIL_COMPRESSED_PAIR_HPP +#define BOOST_DETAIL_COMPRESSED_PAIR_HPP + +#include + +#include +#include +#include +#include + +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable:4512) +#endif +namespace boost +{ + +template +class compressed_pair; + + +// compressed_pair + +namespace details +{ + // JM altered 26 Jan 2000: + template + struct compressed_pair_switch; + + template + struct compressed_pair_switch + {static const int value = 0;}; + + template + struct compressed_pair_switch + {static const int value = 3;}; + + template + struct compressed_pair_switch + {static const int value = 1;}; + + template + struct compressed_pair_switch + {static const int value = 2;}; + + template + struct compressed_pair_switch + {static const int value = 4;}; + + template + struct compressed_pair_switch + {static const int value = 5;}; + + template class compressed_pair_imp; + +#ifdef __GNUC__ + // workaround for GCC (JM): + using std::swap; +#endif + // + // can't call unqualified swap from within classname::swap + // as Koenig lookup rules will find only the classname::swap + // member function not the global declaration, so use cp_swap + // as a forwarding function (JM): + template + inline void cp_swap(T& t1, T& t2) + { +#ifndef __GNUC__ + using std::swap; +#endif + swap(t1, t2); + } + + // 0 derive from neither + + template + class compressed_pair_imp + { + public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_imp() {} + + compressed_pair_imp(first_param_type x, second_param_type y) + : first_(x), second_(y) {} + + compressed_pair_imp(first_param_type x) + : first_(x) {} + + compressed_pair_imp(second_param_type y) + : second_(y) {} + + first_reference first() {return first_;} + first_const_reference first() const {return first_;} + + second_reference second() {return second_;} + second_const_reference second() const {return second_;} + + void swap(::boost::compressed_pair& y) + { + cp_swap(first_, y.first()); + cp_swap(second_, y.second()); + } + private: + first_type first_; + second_type second_; + }; + + // 1 derive from T1 + + template + class compressed_pair_imp + : protected ::boost::remove_cv::type + { + public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_imp() {} + + compressed_pair_imp(first_param_type x, second_param_type y) + : first_type(x), second_(y) {} + + compressed_pair_imp(first_param_type x) + : first_type(x) {} + + compressed_pair_imp(second_param_type y) + : second_(y) {} + + first_reference first() {return *this;} + first_const_reference first() const {return *this;} + + second_reference second() {return second_;} + second_const_reference second() const {return second_;} + + void swap(::boost::compressed_pair& y) + { + // no need to swap empty base class: + cp_swap(second_, y.second()); + } + private: + second_type second_; + }; + + // 2 derive from T2 + + template + class compressed_pair_imp + : protected ::boost::remove_cv::type + { + public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_imp() {} + + compressed_pair_imp(first_param_type x, second_param_type y) + : second_type(y), first_(x) {} + + compressed_pair_imp(first_param_type x) + : first_(x) {} + + compressed_pair_imp(second_param_type y) + : second_type(y) {} + + first_reference first() {return first_;} + first_const_reference first() const {return first_;} + + second_reference second() {return *this;} + second_const_reference second() const {return *this;} + + void swap(::boost::compressed_pair& y) + { + // no need to swap empty base class: + cp_swap(first_, y.first()); + } + + private: + first_type first_; + }; + + // 3 derive from T1 and T2 + + template + class compressed_pair_imp + : protected ::boost::remove_cv::type, + protected ::boost::remove_cv::type + { + public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_imp() {} + + compressed_pair_imp(first_param_type x, second_param_type y) + : first_type(x), second_type(y) {} + + compressed_pair_imp(first_param_type x) + : first_type(x) {} + + compressed_pair_imp(second_param_type y) + : second_type(y) {} + + first_reference first() {return *this;} + first_const_reference first() const {return *this;} + + second_reference second() {return *this;} + second_const_reference second() const {return *this;} + // + // no need to swap empty bases: + void swap(::boost::compressed_pair&) {} + }; + + // JM + // 4 T1 == T2, T1 and T2 both empty + // Originally this did not store an instance of T2 at all + // but that led to problems beause it meant &x.first() == &x.second() + // which is not true for any other kind of pair, so now we store an instance + // of T2 just in case the user is relying on first() and second() returning + // different objects (albeit both empty). + template + class compressed_pair_imp + : protected ::boost::remove_cv::type + { + public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_imp() {} + + compressed_pair_imp(first_param_type x, second_param_type y) + : first_type(x), m_second(y) {} + + compressed_pair_imp(first_param_type x) + : first_type(x), m_second(x) {} + + first_reference first() {return *this;} + first_const_reference first() const {return *this;} + + second_reference second() {return m_second;} + second_const_reference second() const {return m_second;} + + void swap(::boost::compressed_pair&) {} + private: + T2 m_second; + }; + + // 5 T1 == T2 and are not empty: //JM + + template + class compressed_pair_imp + { + public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_imp() {} + + compressed_pair_imp(first_param_type x, second_param_type y) + : first_(x), second_(y) {} + + compressed_pair_imp(first_param_type x) + : first_(x), second_(x) {} + + first_reference first() {return first_;} + first_const_reference first() const {return first_;} + + second_reference second() {return second_;} + second_const_reference second() const {return second_;} + + void swap(::boost::compressed_pair& y) + { + cp_swap(first_, y.first()); + cp_swap(second_, y.second()); + } + private: + first_type first_; + second_type second_; + }; + +} // details + +template +class compressed_pair + : private ::boost::details::compressed_pair_imp::type, typename remove_cv::type>::value, + ::boost::is_empty::value, + ::boost::is_empty::value>::value> +{ +private: + typedef details::compressed_pair_imp::type, typename remove_cv::type>::value, + ::boost::is_empty::value, + ::boost::is_empty::value>::value> base; +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair() : base() {} + compressed_pair(first_param_type x, second_param_type y) : base(x, y) {} + explicit compressed_pair(first_param_type x) : base(x) {} + explicit compressed_pair(second_param_type y) : base(y) {} + + first_reference first() {return base::first();} + first_const_reference first() const {return base::first();} + + second_reference second() {return base::second();} + second_const_reference second() const {return base::second();} + + void swap(compressed_pair& y) { base::swap(y); } +}; + +// JM +// Partial specialisation for case where T1 == T2: +// +template +class compressed_pair + : private details::compressed_pair_imp::type, typename remove_cv::type>::value, + ::boost::is_empty::value, + ::boost::is_empty::value>::value> +{ +private: + typedef details::compressed_pair_imp::type, typename remove_cv::type>::value, + ::boost::is_empty::value, + ::boost::is_empty::value>::value> base; +public: + typedef T first_type; + typedef T second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair() : base() {} + compressed_pair(first_param_type x, second_param_type y) : base(x, y) {} +#if !(defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) + explicit +#endif + compressed_pair(first_param_type x) : base(x) {} + + first_reference first() {return base::first();} + first_const_reference first() const {return base::first();} + + second_reference second() {return base::second();} + second_const_reference second() const {return base::second();} + + void swap(::boost::compressed_pair& y) { base::swap(y); } +}; + +template +inline +void +swap(compressed_pair& x, compressed_pair& y) +{ + x.swap(y); +} + +} // boost + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#endif // BOOST_DETAIL_COMPRESSED_PAIR_HPP + diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/container_fwd.hpp clucene-core-2.3.3.4/src/ext/boost/detail/container_fwd.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/container_fwd.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/container_fwd.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,99 @@ + +// Copyright 2005-2008 Daniel James. +// 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) + +#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP) +#define BOOST_DETAIL_CONTAINER_FWD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include + +#if ((defined(__GLIBCPP__) || defined(__GLIBCXX__)) && defined(_GLIBCXX_DEBUG)) \ + || BOOST_WORKAROUND(__BORLANDC__, > 0x551) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x842)) \ + || (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) + +#include +#include +#include +#include +#include +#include +#include +#include + +#else + +#include + +#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && \ + defined(__STL_CONFIG_H) + +#define BOOST_CONTAINER_FWD_BAD_BITSET + +#if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) +#define BOOST_CONTAINER_FWD_BAD_DEQUE +#endif + +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE) +#include +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_BITSET) +#include +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4099) // struct/class mismatch in fwd declarations +#endif + +namespace std +{ + template class allocator; + template class basic_string; + +#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) + template struct string_char_traits; +#else + template struct char_traits; +#endif + + template class complex; +} + +// gcc 3.4 and greater +namespace std +{ +#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE) + template class deque; +#endif + + template class list; + template class vector; + template class map; + template + class multimap; + template class set; + template class multiset; + +#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET) + template class bitset; +#endif + template struct pair; +} + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/dynamic_bitset.hpp clucene-core-2.3.3.4/src/ext/boost/detail/dynamic_bitset.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/dynamic_bitset.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/dynamic_bitset.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,229 @@ +// ----------------------------------------------------------- +// +// Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek +// Copyright (c) 2003-2006, 2008 Gennaro Prota +// +// 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) +// +// ----------------------------------------------------------- + +#ifndef BOOST_DETAIL_DYNAMIC_BITSET_HPP +#define BOOST_DETAIL_DYNAMIC_BITSET_HPP + +#include +#include "boost/config.hpp" +#include "boost/detail/workaround.hpp" + + +namespace boost { + + namespace detail { + namespace dynamic_bitset_impl { + + // Gives (read-)access to the object representation + // of an object of type T (3.9p4). CANNOT be used + // on a base sub-object + // + template + inline const unsigned char * object_representation (T* p) + { + return static_cast(static_cast(p)); + } + + template + struct shifter + { + static void left_shift(T & v) { + amount >= width ? (v = 0) + : (v >>= BOOST_DYNAMIC_BITSET_WRAP_CONSTANT(amount)); + } + }; + + // ------- count function implementation -------------- + + typedef unsigned char byte_type; + + // These two entities + // + // enum mode { access_by_bytes, access_by_blocks }; + // template struct mode_to_type {}; + // + // were removed, since the regression logs (as of 24 Aug 2008) + // showed that several compilers had troubles with recognizing + // + // const mode m = access_by_bytes + // + // as a constant expression + // + // * So, we'll use bool, instead of enum *. + // + template + struct value_to_type + { + value_to_type() {} + }; + const bool access_by_bytes = true; + const bool access_by_blocks = false; + + + // the table: wrapped in a class template, so + // that it is only instantiated if/when needed + // + template + struct count_table { static const byte_type table[]; }; + + template <> + struct count_table { /* no table */ }; + + + const unsigned int table_width = 8; + template + const byte_type count_table::table[] = + { + // Automatically generated by GPTableGen.exe v.1.0 + // + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 + }; + + + // overload for access by bytes + // + + template + inline std::size_t do_count(Iterator first, std::size_t length, + int /*dummy param*/, + value_to_type* ) + { + std::size_t num = 0; + if (length) + { + const byte_type * p = object_representation(&*first); + length *= sizeof(*first); + + do { + num += count_table<>::table[*p]; + ++p; + --length; + + } while (length); + } + + return num; + } + + + // overload for access by blocks + // + template + inline std::size_t do_count(Iterator first, std::size_t length, ValueType, + value_to_type*) + { + std::size_t num = 0; + while (length){ + + ValueType value = *first; + while (value) { + num += count_table<>::table[value & ((1u<>= table_width; + } + + ++first; + --length; + } + + return num; + } + + // ------------------------------------------------------- + + + // Some library implementations simply return a dummy + // value such as + // + // size_type(-1) / sizeof(T) + // + // from vector<>::max_size. This tries to get more + // meaningful info. + // + template + typename T::size_type vector_max_size_workaround(const T & v) { + + typedef typename T::allocator_type allocator_type; + + const typename allocator_type::size_type alloc_max = + v.get_allocator().max_size(); + const typename T::size_type container_max = v.max_size(); + + return alloc_max < container_max? + alloc_max : + container_max; + } + + // for static_asserts + template + struct allowed_block_type { + enum { value = T(-1) > 0 }; // ensure T has no sign + }; + + template <> + struct allowed_block_type { + enum { value = false }; + }; + + + template + struct is_numeric { + enum { value = false }; + }; + +# define BOOST_dynamic_bitset_is_numeric(x) \ + template<> \ + struct is_numeric< x > { \ + enum { value = true }; \ + } /**/ + + BOOST_dynamic_bitset_is_numeric(bool); + BOOST_dynamic_bitset_is_numeric(char); + +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) + BOOST_dynamic_bitset_is_numeric(wchar_t); +#endif + + BOOST_dynamic_bitset_is_numeric(signed char); + BOOST_dynamic_bitset_is_numeric(short int); + BOOST_dynamic_bitset_is_numeric(int); + BOOST_dynamic_bitset_is_numeric(long int); + + BOOST_dynamic_bitset_is_numeric(unsigned char); + BOOST_dynamic_bitset_is_numeric(unsigned short); + BOOST_dynamic_bitset_is_numeric(unsigned int); + BOOST_dynamic_bitset_is_numeric(unsigned long); + +#if defined(BOOST_HAS_LONG_LONG) + BOOST_dynamic_bitset_is_numeric(::boost::long_long_type); + BOOST_dynamic_bitset_is_numeric(::boost::ulong_long_type); +#endif + + // intentionally omitted + //BOOST_dynamic_bitset_is_numeric(float); + //BOOST_dynamic_bitset_is_numeric(double); + //BOOST_dynamic_bitset_is_numeric(long double); + +#undef BOOST_dynamic_bitset_is_numeric + + } // dynamic_bitset_impl + } // namespace detail + +} // namespace boost + +#endif // include guard + diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/endian.hpp clucene-core-2.3.3.4/src/ext/boost/detail/endian.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/endian.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/endian.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,73 @@ +// Copyright 2005 Caleb Epstein +// Copyright 2006 John Maddock +// Distributed under the Boost Software License, Version 1.0. (See accompany- +// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/* + * Copyright (c) 1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/* + * Copyright notice reproduced from , from + * which this code was originally taken. + * + * Modified by Caleb Epstein to use with GNU libc and to + * defined the BOOST_ENDIAN macro. + */ + +#ifndef BOOST_DETAIL_ENDIAN_HPP +#define BOOST_DETAIL_ENDIAN_HPP + +// GNU libc offers the helpful header which defines +// __BYTE_ORDER + +#if defined (__GLIBC__) +# include +# if (__BYTE_ORDER == __LITTLE_ENDIAN) +# define BOOST_LITTLE_ENDIAN +# elif (__BYTE_ORDER == __BIG_ENDIAN) +# define BOOST_BIG_ENDIAN +# elif (__BYTE_ORDER == __PDP_ENDIAN) +# define BOOST_PDP_ENDIAN +# else +# error Unknown machine endianness detected. +# endif +# define BOOST_BYTE_ORDER __BYTE_ORDER +#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) +# define BOOST_BIG_ENDIAN +# define BOOST_BYTE_ORDER 4321 +#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) +# define BOOST_LITTLE_ENDIAN +# define BOOST_BYTE_ORDER 1234 +#elif defined(__sparc) || defined(__sparc__) \ + || defined(_POWER) || defined(__powerpc__) \ + || defined(__ppc__) || defined(__hpux) || defined(__hppa) \ + || defined(_MIPSEB) || defined(_POWER) \ + || defined(__s390__) +# define BOOST_BIG_ENDIAN +# define BOOST_BYTE_ORDER 4321 +#elif defined(__i386__) || defined(__alpha__) \ + || defined(__ia64) || defined(__ia64__) \ + || defined(_M_IX86) || defined(_M_IA64) \ + || defined(_M_ALPHA) || defined(__amd64) \ + || defined(__amd64__) || defined(_M_AMD64) \ + || defined(__x86_64) || defined(__x86_64__) \ + || defined(_M_X64) || defined(__bfin__) + +# define BOOST_LITTLE_ENDIAN +# define BOOST_BYTE_ORDER 1234 +#else +# error The file boost/detail/endian.hpp needs to be set up for your CPU type. +#endif + + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/has_default_constructor.hpp clucene-core-2.3.3.4/src/ext/boost/detail/has_default_constructor.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/has_default_constructor.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/has_default_constructor.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,29 @@ + +// (C) Copyright Matthias Troyerk 2006. +// 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). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_DETAIL_HAS_DEFAULT_CONSTRUCTOR_HPP_INCLUDED +#define BOOST_DETAIL_HAS_DEFAULT_CONSTRUCTOR_HPP_INCLUDED + +#include + +namespace boost { namespace detail { + +/// type trait to check for a default constructor +/// +/// The default implementation just checks for a trivial constructor. +/// Using some compiler magic it might be possible to provide a better default + +template +struct has_default_constructor + : public has_trivial_constructor +{}; + +} } // namespace boost::detail + + +#endif // BOOST_DETAIL_HAS_DEFAULT_CONSTRUCTOR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/identifier.hpp clucene-core-2.3.3.4/src/ext/boost/detail/identifier.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/identifier.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/identifier.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,89 @@ +// boost/identifier.hpp ----------------------------------------------------// + +// Copyright Beman Dawes 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) + +// See documentation at http://www.boost.org/libs/utility + +#ifndef BOOST_IDENTIFIER_HPP +#define BOOST_IDENTIFIER_HPP + +#include +#include +#include + +namespace boost +{ + namespace detail + { + // class template identifier ---------------------------------------------// + + // Always used as a base class so that different instantiations result in + // different class types even if instantiated with the same value type T. + + // Expected usage is that T is often an integer type, best passed by + // value. There is no reason why T can't be a possibly larger class such as + // std::string, best passed by const reference. + + // This implementation uses pass by value, based on expected common uses. + + template + class identifier + { + public: + typedef T value_type; + + const value_type value() const { return m_value; } + void assign( value_type v ) { m_value = v; } + + bool operator==( const D & rhs ) const { return m_value == rhs.m_value; } + bool operator!=( const D & rhs ) const { return m_value != rhs.m_value; } + bool operator< ( const D & rhs ) const { return m_value < rhs.m_value; } + bool operator<=( const D & rhs ) const { return m_value <= rhs.m_value; } + bool operator> ( const D & rhs ) const { return m_value > rhs.m_value; } + bool operator>=( const D & rhs ) const { return m_value >= rhs.m_value; } + + typedef void (*unspecified_bool_type)(D); // without the D, unspecified_bool_type + static void unspecified_bool_true(D){} // conversion allows relational operators + // between different identifier types + + operator unspecified_bool_type() const { return m_value == value_type() ? 0 : unspecified_bool_true; } + bool operator!() const { return m_value == value_type(); } + + // constructors are protected so that class can only be used as a base class + protected: + identifier() {} + explicit identifier( value_type v ) : m_value(v) {} + + #if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // 1300 == VC++ 7.0 bug workaround + private: + #endif + T m_value; + }; + + //#ifndef BOOST_NO_SFINAE + + // template + // typename enable_if< is_base_of< identifier< typename Id::value_type, Id >, Id >, + // Ostream & >::type operator<<( Ostream & os, const Id & id ) + // { + // return os << id.value(); + // } + + // template + // typename enable_if< is_base_of< identifier< typename Id::value_type, Id >, Id >, + // Istream & >::type operator>>( Istream & is, Id & id ) + // { + // typename Id::value_type v; + // is >> v; + // id.value( v ); + // return is; + // } + //#endif + + } // namespace detail +} // namespace boost + +#endif // BOOST_IDENTIFIER_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/indirect_traits.hpp clucene-core-2.3.3.4/src/ext/boost/detail/indirect_traits.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/indirect_traits.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/indirect_traits.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,487 @@ +// Copyright David Abrahams 2002. +// 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) +#ifndef INDIRECT_TRAITS_DWA2002131_HPP +# define INDIRECT_TRAITS_DWA2002131_HPP +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include +# include + +# include +# include +# include +# include +# include +# include + +# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# endif + +namespace boost { namespace detail { + +namespace indirect_traits { + +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct is_reference_to_const : mpl::false_ +{ +}; + +template +struct is_reference_to_const : mpl::true_ +{ +}; + +# if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround +template +struct is_reference_to_const : mpl::true_ +{ +}; +# endif + +template +struct is_reference_to_function : mpl::false_ +{ +}; + +template +struct is_reference_to_function : is_function +{ +}; + +template +struct is_pointer_to_function : mpl::false_ +{ +}; + +// There's no such thing as a pointer-to-cv-function, so we don't need +// specializations for those +template +struct is_pointer_to_function : is_function +{ +}; + +template +struct is_reference_to_member_function_pointer_impl : mpl::false_ +{ +}; + +template +struct is_reference_to_member_function_pointer_impl + : is_member_function_pointer::type> +{ +}; + + +template +struct is_reference_to_member_function_pointer + : is_reference_to_member_function_pointer_impl +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T)) +}; + +template +struct is_reference_to_function_pointer_aux + : mpl::and_< + is_reference + , is_pointer_to_function< + typename remove_cv< + typename remove_reference::type + >::type + > + > +{ + // There's no such thing as a pointer-to-cv-function, so we don't need specializations for those +}; + +template +struct is_reference_to_function_pointer + : mpl::if_< + is_reference_to_function + , mpl::false_ + , is_reference_to_function_pointer_aux + >::type +{ +}; + +template +struct is_reference_to_non_const + : mpl::and_< + is_reference + , mpl::not_< + is_reference_to_const + > + > +{ +}; + +template +struct is_reference_to_volatile : mpl::false_ +{ +}; + +template +struct is_reference_to_volatile : mpl::true_ +{ +}; + +# if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround +template +struct is_reference_to_volatile : mpl::true_ +{ +}; +# endif + + +template +struct is_reference_to_pointer : mpl::false_ +{ +}; + +template +struct is_reference_to_pointer : mpl::true_ +{ +}; + +template +struct is_reference_to_pointer : mpl::true_ +{ +}; + +template +struct is_reference_to_pointer : mpl::true_ +{ +}; + +template +struct is_reference_to_pointer : mpl::true_ +{ +}; + +template +struct is_reference_to_class + : mpl::and_< + is_reference + , is_class< + typename remove_cv< + typename remove_reference::type + >::type + > + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T)) +}; + +template +struct is_pointer_to_class + : mpl::and_< + is_pointer + , is_class< + typename remove_cv< + typename remove_pointer::type + >::type + > + > +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T)) +}; + +# else + +using namespace boost::detail::is_function_ref_tester_; + +typedef char (&inner_yes_type)[3]; +typedef char (&inner_no_type)[2]; +typedef char (&outer_no_type)[1]; + +template +struct is_const_help +{ + typedef typename mpl::if_< + is_const + , inner_yes_type + , inner_no_type + >::type type; +}; + +template +struct is_volatile_help +{ + typedef typename mpl::if_< + is_volatile + , inner_yes_type + , inner_no_type + >::type type; +}; + +template +struct is_pointer_help +{ + typedef typename mpl::if_< + is_pointer + , inner_yes_type + , inner_no_type + >::type type; +}; + +template +struct is_class_help +{ + typedef typename mpl::if_< + is_class + , inner_yes_type + , inner_no_type + >::type type; +}; + +template +struct is_reference_to_function_aux +{ + static T t; + BOOST_STATIC_CONSTANT( + bool, value = sizeof(detail::is_function_ref_tester(t,0)) == sizeof(::boost::type_traits::yes_type)); + typedef mpl::bool_ type; + }; + +template +struct is_reference_to_function + : mpl::if_, is_reference_to_function_aux, mpl::bool_ >::type +{ +}; + +template +struct is_pointer_to_function_aux +{ + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = sizeof(::boost::type_traits::is_function_ptr_tester(t)) == sizeof(::boost::type_traits::yes_type)); + typedef mpl::bool_ type; +}; + +template +struct is_pointer_to_function + : mpl::if_, is_pointer_to_function_aux, mpl::bool_ >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_function,(T)) +}; + +struct false_helper1 +{ + template + struct apply : mpl::false_ + { + }; +}; + +template +typename is_const_help::type reference_to_const_helper(V&); +outer_no_type +reference_to_const_helper(...); + +struct true_helper1 +{ + template + struct apply + { + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = sizeof(reference_to_const_helper(t)) == sizeof(inner_yes_type)); + typedef mpl::bool_ type; + }; +}; + +template +struct is_reference_to_const_helper1 : true_helper1 +{ +}; + +template <> +struct is_reference_to_const_helper1 : false_helper1 +{ +}; + + +template +struct is_reference_to_const + : is_reference_to_const_helper1::value>::template apply +{ +}; + + +template +struct is_reference_to_non_const_helper1 +{ + template + struct apply + { + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = sizeof(reference_to_const_helper(t)) == sizeof(inner_no_type)); + + typedef mpl::bool_ type; + }; +}; + +template <> +struct is_reference_to_non_const_helper1 : false_helper1 +{ +}; + + +template +struct is_reference_to_non_const + : is_reference_to_non_const_helper1::value>::template apply +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_non_const,(T)) +}; + + +template +typename is_volatile_help::type reference_to_volatile_helper(V&); +outer_no_type +reference_to_volatile_helper(...); + +template +struct is_reference_to_volatile_helper1 +{ + template + struct apply + { + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = sizeof(reference_to_volatile_helper(t)) == sizeof(inner_yes_type)); + typedef mpl::bool_ type; + }; +}; + +template <> +struct is_reference_to_volatile_helper1 : false_helper1 +{ +}; + + +template +struct is_reference_to_volatile + : is_reference_to_volatile_helper1::value>::template apply +{ +}; + +template +typename is_pointer_help::type reference_to_pointer_helper(V&); +outer_no_type reference_to_pointer_helper(...); + +template +struct reference_to_pointer_impl +{ + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = (sizeof((reference_to_pointer_helper)(t)) == sizeof(inner_yes_type)) + ); + + typedef mpl::bool_ type; +}; + +template +struct is_reference_to_pointer + : mpl::eval_if, reference_to_pointer_impl, mpl::false_>::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_pointer,(T)) +}; + +template +struct is_reference_to_function_pointer + : mpl::eval_if, is_pointer_to_function_aux, mpl::false_>::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_function_pointer,(T)) +}; + + +template +struct is_member_function_pointer_help + : mpl::if_, inner_yes_type, inner_no_type> +{}; + +template +typename is_member_function_pointer_help::type member_function_pointer_helper(V&); +outer_no_type member_function_pointer_helper(...); + +template +struct is_pointer_to_member_function_aux +{ + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = sizeof((member_function_pointer_helper)(t)) == sizeof(inner_yes_type)); + typedef mpl::bool_ type; +}; + +template +struct is_reference_to_member_function_pointer + : mpl::if_< + is_reference + , is_pointer_to_member_function_aux + , mpl::bool_ + >::type +{ + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T)) +}; + +template +typename is_class_help::type reference_to_class_helper(V const volatile&); +outer_no_type reference_to_class_helper(...); + +template +struct is_reference_to_class +{ + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = (is_reference::value + & (sizeof(reference_to_class_helper(t)) == sizeof(inner_yes_type))) + ); + typedef mpl::bool_ type; + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T)) +}; + +template +typename is_class_help::type pointer_to_class_helper(V const volatile*); +outer_no_type pointer_to_class_helper(...); + +template +struct is_pointer_to_class +{ + static T t; + BOOST_STATIC_CONSTANT( + bool, value + = (is_pointer::value + && sizeof(pointer_to_class_helper(t)) == sizeof(inner_yes_type)) + ); + typedef mpl::bool_ type; +}; +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} + +using namespace indirect_traits; + +}} // namespace boost::python::detail + +#endif // INDIRECT_TRAITS_DWA2002131_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/interlocked.hpp clucene-core-2.3.3.4/src/ext/boost/detail/interlocked.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/interlocked.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/interlocked.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,142 @@ +#ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED +#define BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/interlocked.hpp +// +// Copyright 2005 Peter Dimov +// +// 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) +// + +#include + +#if defined( BOOST_USE_WINDOWS_H ) + +# include + +# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement +# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange +# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange +# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER InterlockedCompareExchangePointer +# define BOOST_INTERLOCKED_EXCHANGE_POINTER InterlockedExchangePointer + +#elif defined(_WIN32_WCE) + +// under Windows CE we still have old-style Interlocked* functions + +extern "C" long __cdecl InterlockedIncrement( long* ); +extern "C" long __cdecl InterlockedDecrement( long* ); +extern "C" long __cdecl InterlockedCompareExchange( long*, long, long ); +extern "C" long __cdecl InterlockedExchange( long*, long ); +extern "C" long __cdecl InterlockedExchangeAdd( long*, long ); + +# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement +# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange +# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange +# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd + +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \ + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long*)(dest),(long)(exchange),(long)(compare))) +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \ + ((void*)BOOST_INTERLOCKED_EXCHANGE((long*)(dest),(long)(exchange))) + +#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN ) + +#if defined( __CLRCALL_PURE_OR_CDECL ) + +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedIncrement( long volatile * ); +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedDecrement( long volatile * ); +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedCompareExchange( long volatile *, long, long ); +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedExchange( long volatile *, long ); +extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedExchangeAdd( long volatile *, long ); + +#else + +extern "C" long __cdecl _InterlockedIncrement( long volatile * ); +extern "C" long __cdecl _InterlockedDecrement( long volatile * ); +extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long ); +extern "C" long __cdecl _InterlockedExchange( long volatile *, long ); +extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long ); + +#endif + +# pragma intrinsic( _InterlockedIncrement ) +# pragma intrinsic( _InterlockedDecrement ) +# pragma intrinsic( _InterlockedCompareExchange ) +# pragma intrinsic( _InterlockedExchange ) +# pragma intrinsic( _InterlockedExchangeAdd ) + +# if defined(_M_IA64) || defined(_M_AMD64) + +extern "C" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* ); +extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* ); + +# pragma intrinsic( _InterlockedCompareExchangePointer ) +# pragma intrinsic( _InterlockedExchangePointer ) + +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer +# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer + +# else + +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \ + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare))) +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \ + ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange))) + +# endif + +# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement +# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange +# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange +# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd + +#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ ) + +namespace boost +{ + +namespace detail +{ + +extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement( long volatile * ); +extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * ); +extern "C" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long ); +extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long ); +extern "C" __declspec(dllimport) long __stdcall InterlockedExchangeAdd( long volatile *, long ); + +} // namespace detail + +} // namespace boost + +# define BOOST_INTERLOCKED_INCREMENT ::boost::detail::InterlockedIncrement +# define BOOST_INTERLOCKED_DECREMENT ::boost::detail::InterlockedDecrement +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::boost::detail::InterlockedCompareExchange +# define BOOST_INTERLOCKED_EXCHANGE ::boost::detail::InterlockedExchange +# define BOOST_INTERLOCKED_EXCHANGE_ADD ::boost::detail::InterlockedExchangeAdd + +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \ + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare))) +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \ + ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange))) + +#else + +# error "Interlocked intrinsics not available" + +#endif + +#endif // #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/is_function_ref_tester.hpp clucene-core-2.3.3.4/src/ext/boost/detail/is_function_ref_tester.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/is_function_ref_tester.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/is_function_ref_tester.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,135 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000. +// 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) + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +#ifndef BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED +#define BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED + +#include "boost/type_traits/detail/yes_no_type.hpp" +#include "boost/type_traits/config.hpp" + +#if defined(BOOST_TT_PREPROCESSING_MODE) +# include "boost/preprocessor/iterate.hpp" +# include "boost/preprocessor/enum_params.hpp" +# include "boost/preprocessor/comma_if.hpp" +#endif + +namespace boost { +namespace detail { +namespace is_function_ref_tester_ { + +template +boost::type_traits::no_type BOOST_TT_DECL is_function_ref_tester(T& ...); + +#if !defined(BOOST_TT_PREPROCESSING_MODE) +// preprocessor-generated part, don't edit by hand! + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23), int); + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24), int); + +#else + +#define BOOST_PP_ITERATION_PARAMS_1 \ + (3, (0, 25, "boost/type_traits/detail/is_function_ref_tester.hpp")) +#include BOOST_PP_ITERATE() + +#endif // BOOST_TT_PREPROCESSING_MODE + +} // namespace detail +} // namespace python +} // namespace boost + +#endif // BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED + +///// iteration + +#else +#define i BOOST_PP_FRAME_ITERATION(1) + +template +boost::type_traits::yes_type is_function_ref_tester(R (&)(BOOST_PP_ENUM_PARAMS(i,T)), int); + +#undef i +#endif // BOOST_PP_IS_ITERATING diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/is_incrementable.hpp clucene-core-2.3.3.4/src/ext/boost/detail/is_incrementable.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/is_incrementable.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/is_incrementable.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,134 @@ +// Copyright David Abrahams 2004. Use, modification and distribution is +// 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 IS_INCREMENTABLE_DWA200415_HPP +# define IS_INCREMENTABLE_DWA200415_HPP + +# include +# include +# include +# include +# include + +// Must be the last include +# include + +namespace boost { namespace detail { + +// is_incrementable metafunction +// +// Requires: Given x of type T&, if the expression ++x is well-formed +// it must have complete type; otherwise, it must neither be ambiguous +// nor violate access. + +// This namespace ensures that ADL doesn't mess things up. +namespace is_incrementable_ +{ + // a type returned from operator++ when no increment is found in the + // type's own namespace + struct tag {}; + + // any soaks up implicit conversions and makes the following + // operator++ less-preferred than any other such operator that + // might be found via ADL. + struct any { template any(T const&); }; + + // This is a last-resort operator++ for when none other is found +# if BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2 + +} + +namespace is_incrementable_2 +{ + is_incrementable_::tag operator++(is_incrementable_::any const&); + is_incrementable_::tag operator++(is_incrementable_::any const&,int); +} +using namespace is_incrementable_2; + +namespace is_incrementable_ +{ + +# else + + tag operator++(any const&); + tag operator++(any const&,int); + +# endif + +# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \ + || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +# define BOOST_comma(a,b) (a) +# else + // In case an operator++ is found that returns void, we'll use ++x,0 + tag operator,(tag,int); +# define BOOST_comma(a,b) (a,b) +# endif + +# if defined(BOOST_MSVC) +# pragma warning(push) +# pragma warning(disable:4913) // Warning about operator, +# endif + + // two check overloads help us identify which operator++ was picked + char (& check(tag) )[2]; + + template + char check(T const&); + + + template + struct impl + { + static typename boost::remove_cv::type& x; + + BOOST_STATIC_CONSTANT( + bool + , value = sizeof(is_incrementable_::check(BOOST_comma(++x,0))) == 1 + ); + }; + + template + struct postfix_impl + { + static typename boost::remove_cv::type& x; + + BOOST_STATIC_CONSTANT( + bool + , value = sizeof(is_incrementable_::check(BOOST_comma(x++,0))) == 1 + ); + }; + +# if defined(BOOST_MSVC) +# pragma warning(pop) +# endif + +} + +# undef BOOST_comma + +template +struct is_incrementable +BOOST_TT_AUX_BOOL_C_BASE(::boost::detail::is_incrementable_::impl::value) +{ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(::boost::detail::is_incrementable_::impl::value) + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_incrementable,(T)) +}; + +template +struct is_postfix_incrementable +BOOST_TT_AUX_BOOL_C_BASE(::boost::detail::is_incrementable_::impl::value) +{ + BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(::boost::detail::is_incrementable_::postfix_impl::value) + BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_postfix_incrementable,(T)) +}; + +} // namespace detail + +BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1, ::boost::detail::is_incrementable) +BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1, ::boost::detail::is_postfix_incrementable) + +} // namespace boost + +# include + +#endif // IS_INCREMENTABLE_DWA200415_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/is_xxx.hpp clucene-core-2.3.3.4/src/ext/boost/detail/is_xxx.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/is_xxx.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/is_xxx.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,61 @@ +// Copyright David Abrahams 2005. 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) +#ifndef BOOST_DETAIL_IS_XXX_DWA20051011_HPP +# define BOOST_DETAIL_IS_XXX_DWA20051011_HPP + +# include +# include +# include + +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +# include +# include + +# define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \ +template \ +struct is_##name \ +{ \ + typedef char yes; \ + typedef char (&no)[2]; \ + \ + static typename add_reference::type dummy; \ + \ + struct helpers \ + { \ + template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \ + static yes test( \ + qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \ + ); \ + \ + template \ + static no test(U&, ...); \ + }; \ + \ + BOOST_STATIC_CONSTANT( \ + bool, value \ + = !is_reference::value \ + & (sizeof(helpers::test(dummy, 0)) == sizeof(yes))); \ + \ + typedef mpl::bool_ type; \ +}; + +# else + +# define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \ +template \ +struct is_##name : mpl::false_ \ +{ \ +}; \ + \ +template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class T) > \ +struct is_##name< \ + qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, T) > \ +> \ + : mpl::true_ \ +{ \ +}; + +# endif + +#endif // BOOST_DETAIL_IS_XXX_DWA20051011_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/iterator.hpp clucene-core-2.3.3.4/src/ext/boost/detail/iterator.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/iterator.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/iterator.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,494 @@ +// (C) Copyright David Abrahams 2002. +// 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) + +// Boost versions of +// +// std::iterator_traits<>::iterator_category +// std::iterator_traits<>::difference_type +// std::distance() +// +// ...for all compilers and iterators +// +// Additionally, if X is a pointer +// std::iterator_traits::pointer + +// Otherwise, if partial specialization is supported or X is not a pointer +// std::iterator_traits::value_type +// std::iterator_traits::pointer +// std::iterator_traits::reference +// +// See http://www.boost.org for most recent version including documentation. + +// Revision History +// 04 Mar 2001 - More attempted fixes for Intel C++ (David Abrahams) +// 03 Mar 2001 - Put all implementation into namespace +// boost::detail::iterator_traits_. Some progress made on fixes +// for Intel compiler. (David Abrahams) +// 02 Mar 2001 - Changed BOOST_MSVC to BOOST_MSVC_STD_ITERATOR in a few +// places. (Jeremy Siek) +// 19 Feb 2001 - Improved workarounds for stock MSVC6; use yes_type and +// no_type from type_traits.hpp; stopped trying to remove_cv +// before detecting is_pointer, in honor of the new type_traits +// semantics. (David Abrahams) +// 13 Feb 2001 - Make it work with nearly all standard-conforming iterators +// under raw VC6. The one category remaining which will fail is +// that of iterators derived from std::iterator but not +// boost::iterator and which redefine difference_type. +// 11 Feb 2001 - Clean away code which can never be used (David Abrahams) +// 09 Feb 2001 - Always have a definition for each traits member, even if it +// can't be properly deduced. These will be incomplete types in +// some cases (undefined), but it helps suppress MSVC errors +// elsewhere (David Abrahams) +// 07 Feb 2001 - Support for more of the traits members where possible, making +// this useful as a replacement for std::iterator_traits when +// used as a default template parameter. +// 06 Feb 2001 - Removed useless #includes of standard library headers +// (David Abrahams) + +#ifndef ITERATOR_DWA122600_HPP_ +# define ITERATOR_DWA122600_HPP_ + +# include +# include + +// STLPort 4.0 and betas have a bug when debugging is enabled and there is no +// partial specialization: instead of an iterator_category typedef, the standard +// container iterators have _Iterator_category. +// +// Also, whether debugging is enabled or not, there is a broken specialization +// of std::iterator which has no +// typedefs but iterator_category. +# if defined(__SGI_STL_PORT) + +# if (__SGI_STL_PORT <= 0x410) && !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && defined(__STL_DEBUG) +# define BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF +# endif + +# define BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION + +# endif // STLPort <= 4.1b4 && no partial specialization + +# if !defined(BOOST_NO_STD_ITERATOR_TRAITS) \ + && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_MSVC_STD_ITERATOR) + +namespace boost { namespace detail { + +// Define a new template so it can be specialized +template +struct iterator_traits + : std::iterator_traits +{}; +using std::distance; + +}} // namespace boost::detail + +# else + +# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_MSVC_STD_ITERATOR) + +// This is the case where everything conforms except BOOST_NO_STD_ITERATOR_TRAITS + +namespace boost { namespace detail { + +// Rogue Wave Standard Library fools itself into thinking partial +// specialization is missing on some platforms (e.g. Sun), so fails to +// supply iterator_traits! +template +struct iterator_traits +{ + typedef typename Iterator::value_type value_type; + typedef typename Iterator::reference reference; + typedef typename Iterator::pointer pointer; + typedef typename Iterator::difference_type difference_type; + typedef typename Iterator::iterator_category iterator_category; +}; + +template +struct iterator_traits +{ + typedef T value_type; + typedef T& reference; + typedef T* pointer; + typedef std::ptrdiff_t difference_type; + typedef std::random_access_iterator_tag iterator_category; +}; + +template +struct iterator_traits +{ + typedef T value_type; + typedef T const& reference; + typedef T const* pointer; + typedef std::ptrdiff_t difference_type; + typedef std::random_access_iterator_tag iterator_category; +}; + +}} // namespace boost::detail + +# else + +# include +# include +# include + +# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# include +# endif +# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION +# include +# endif + +# include +# include +# include + +// should be the last #include +# include "boost/type_traits/detail/bool_trait_def.hpp" + +namespace boost { namespace detail { + +BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type) +BOOST_MPL_HAS_XXX_TRAIT_DEF(reference) +BOOST_MPL_HAS_XXX_TRAIT_DEF(pointer) +BOOST_MPL_HAS_XXX_TRAIT_DEF(difference_type) +BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category) + +// is_mutable_iterator -- +// +// A metafunction returning true iff T is a mutable iterator type +// with a nested value_type. Will only work portably with iterators +// whose operator* returns a reference, but that seems to be OK for +// the iterators supplied by Dinkumware. Some input iterators may +// compile-time if they arrive here, and if the compiler is strict +// about not taking the address of an rvalue. + +// This one detects ordinary mutable iterators - the result of +// operator* is convertible to the value_type. +template +type_traits::yes_type is_mutable_iterator_helper(T const*, BOOST_DEDUCED_TYPENAME T::value_type*); + +// Since you can't take the address of an rvalue, the guts of +// is_mutable_iterator_impl will fail if we use &*t directly. This +// makes sure we can still work with non-lvalue iterators. +template T* mutable_iterator_lvalue_helper(T& x); +int mutable_iterator_lvalue_helper(...); + + +// This one detects output iterators such as ostream_iterator which +// return references to themselves. +template +type_traits::yes_type is_mutable_iterator_helper(T const*, T const*); + +type_traits::no_type is_mutable_iterator_helper(...); + +template +struct is_mutable_iterator_impl +{ + static T t; + + BOOST_STATIC_CONSTANT( + bool, value = sizeof( + detail::is_mutable_iterator_helper( + (T*)0 + , mutable_iterator_lvalue_helper(*t) // like &*t + )) + == sizeof(type_traits::yes_type) + ); +}; + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_mutable_iterator,T,::boost::detail::is_mutable_iterator_impl::value) + + +// is_full_iterator_traits -- +// +// A metafunction returning true iff T has all the requisite nested +// types to satisfy the requirements for a fully-conforming +// iterator_traits implementation. +template +struct is_full_iterator_traits_impl +{ + enum { value = + has_value_type::value + & has_reference::value + & has_pointer::value + & has_difference_type::value + & has_iterator_category::value + }; +}; + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_full_iterator_traits,T,::boost::detail::is_full_iterator_traits_impl::value) + + +# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF +BOOST_MPL_HAS_XXX_TRAIT_DEF(_Iterator_category) + +// is_stlport_40_debug_iterator -- +// +// A metafunction returning true iff T has all the requisite nested +// types to satisfy the requirements of an STLPort 4.0 debug iterator +// iterator_traits implementation. +template +struct is_stlport_40_debug_iterator_impl +{ + enum { value = + has_value_type::value + & has_reference::value + & has_pointer::value + & has_difference_type::value + & has__Iterator_category::value + }; +}; + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_stlport_40_debug_iterator,T,::boost::detail::is_stlport_40_debug_iterator_impl::value) + +template +struct stlport_40_debug_iterator_traits +{ + typedef typename T::value_type value_type; + typedef typename T::reference reference; + typedef typename T::pointer pointer; + typedef typename T::difference_type difference_type; + typedef typename T::_Iterator_category iterator_category; +}; +# endif // BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF + +template struct pointer_iterator_traits; + +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct pointer_iterator_traits +{ + typedef typename remove_const::type value_type; + typedef T* pointer; + typedef T& reference; + typedef std::random_access_iterator_tag iterator_category; + typedef std::ptrdiff_t difference_type; +}; +# else + +// In case of no template partial specialization, and if T is a +// pointer, iterator_traits::value_type can still be computed. For +// some basic types, remove_pointer is manually defined in +// type_traits/broken_compiler_spec.hpp. For others, do it yourself. + +template class please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee; + +template +struct pointer_value_type + : mpl::if_< + is_same::type> + , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee

+ , typename remove_const< + typename remove_pointer

::type + >::type + > +{ +}; + + +template +struct pointer_reference + : mpl::if_< + is_same::type> + , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee

+ , typename remove_pointer

::type& + > +{ +}; + +template +struct pointer_iterator_traits +{ + typedef T pointer; + typedef std::random_access_iterator_tag iterator_category; + typedef std::ptrdiff_t difference_type; + + typedef typename pointer_value_type::type value_type; + typedef typename pointer_reference::type reference; +}; + +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +// We'll sort iterator types into one of these classifications, from which we +// can determine the difference_type, pointer, reference, and value_type +template +struct standard_iterator_traits +{ + typedef typename Iterator::difference_type difference_type; + typedef typename Iterator::value_type value_type; + typedef typename Iterator::pointer pointer; + typedef typename Iterator::reference reference; + typedef typename Iterator::iterator_category iterator_category; +}; + +template +struct msvc_stdlib_mutable_traits + : std::iterator_traits +{ + typedef typename std::iterator_traits::distance_type difference_type; + typedef typename std::iterator_traits::value_type* pointer; + typedef typename std::iterator_traits::value_type& reference; +}; + +template +struct msvc_stdlib_const_traits + : std::iterator_traits +{ + typedef typename std::iterator_traits::distance_type difference_type; + typedef const typename std::iterator_traits::value_type* pointer; + typedef const typename std::iterator_traits::value_type& reference; +}; + +# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION +template +struct is_bad_output_iterator + : is_base_and_derived< + std::iterator + , Iterator> +{ +}; + +struct bad_output_iterator_traits +{ + typedef void value_type; + typedef void difference_type; + typedef std::output_iterator_tag iterator_category; + typedef void pointer; + typedef void reference; +}; +# endif + +// If we're looking at an MSVC6 (old Dinkumware) ``standard'' +// iterator, this will generate an appropriate traits class. +template +struct msvc_stdlib_iterator_traits + : mpl::if_< + is_mutable_iterator + , msvc_stdlib_mutable_traits + , msvc_stdlib_const_traits + >::type +{}; + +template +struct non_pointer_iterator_traits + : mpl::if_< + // if the iterator contains all the right nested types... + is_full_iterator_traits + // Use a standard iterator_traits implementation + , standard_iterator_traits +# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF + // Check for STLPort 4.0 broken _Iterator_category type + , mpl::if_< + is_stlport_40_debug_iterator + , stlport_40_debug_iterator_traits +# endif + // Otherwise, assume it's a Dinkum iterator + , msvc_stdlib_iterator_traits +# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF + >::type +# endif + >::type +{ +}; + +template +struct iterator_traits_aux + : mpl::if_< + is_pointer + , pointer_iterator_traits + , non_pointer_iterator_traits + >::type +{ +}; + +template +struct iterator_traits +{ + // Explicit forwarding from base class needed to keep MSVC6 happy + // under some circumstances. + private: +# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION + typedef + typename mpl::if_< + is_bad_output_iterator + , bad_output_iterator_traits + , iterator_traits_aux + >::type base; +# else + typedef iterator_traits_aux base; +# endif + public: + typedef typename base::value_type value_type; + typedef typename base::pointer pointer; + typedef typename base::reference reference; + typedef typename base::difference_type difference_type; + typedef typename base::iterator_category iterator_category; +}; + +// This specialization cuts off ETI (Early Template Instantiation) for MSVC. +template <> struct iterator_traits +{ + typedef int value_type; + typedef int pointer; + typedef int reference; + typedef int difference_type; + typedef int iterator_category; +}; + +}} // namespace boost::detail + +# endif // workarounds + +namespace boost { namespace detail { + +namespace iterator_traits_ +{ + template + struct distance_select + { + static Difference execute(Iterator i1, const Iterator i2, ...) + { + Difference result = 0; + while (i1 != i2) + { + ++i1; + ++result; + } + return result; + } + + static Difference execute(Iterator i1, const Iterator i2, std::random_access_iterator_tag*) + { + return i2 - i1; + } + }; +} // namespace boost::detail::iterator_traits_ + +template +inline typename iterator_traits::difference_type +distance(Iterator first, Iterator last) +{ + typedef typename iterator_traits::difference_type diff_t; + typedef typename ::boost::detail::iterator_traits::iterator_category iterator_category; + + return iterator_traits_::distance_select::execute( + first, last, (iterator_category*)0); +} + +}} + +# endif + + +# undef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF +# undef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION + +#endif // ITERATOR_DWA122600_HPP_ diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/lcast_precision.hpp clucene-core-2.3.3.4/src/ext/boost/detail/lcast_precision.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/lcast_precision.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/lcast_precision.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,184 @@ +// Copyright Alexander Nasonov & Paul A. Bristow 2006. + +// 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_DETAIL_LCAST_PRECISION_HPP_INCLUDED +#define BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED + +#include +#include +#include + +#include +#include + +#ifndef BOOST_NO_IS_ABSTRACT +// Fix for SF:1358600 - lexical_cast & pure virtual functions & VC 8 STL +#include +#include +#endif + +#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || \ + (defined(BOOST_MSVC) && (BOOST_MSVC<1310)) + +#define BOOST_LCAST_NO_COMPILE_TIME_PRECISION +#endif + +#ifdef BOOST_LCAST_NO_COMPILE_TIME_PRECISION +#include +#else +#include +#endif + +namespace boost { namespace detail { + +class lcast_abstract_stub {}; + +#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION +// Calculate an argument to pass to std::ios_base::precision from +// lexical_cast. See alternative implementation for broken standard +// libraries in lcast_get_precision below. Keep them in sync, please. +template +struct lcast_precision +{ +#ifdef BOOST_NO_IS_ABSTRACT + typedef std::numeric_limits limits; // No fix for SF:1358600. +#else + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::is_abstract + , std::numeric_limits + , std::numeric_limits + >::type limits; +#endif + + BOOST_STATIC_CONSTANT(bool, use_default_precision = + !limits::is_specialized || limits::is_exact + ); + + BOOST_STATIC_CONSTANT(bool, is_specialized_bin = + !use_default_precision && + limits::radix == 2 && limits::digits > 0 + ); + + BOOST_STATIC_CONSTANT(bool, is_specialized_dec = + !use_default_precision && + limits::radix == 10 && limits::digits10 > 0 + ); + + BOOST_STATIC_CONSTANT(std::streamsize, streamsize_max = + boost::integer_traits::const_max + ); + + BOOST_STATIC_CONSTANT(unsigned int, precision_dec = limits::digits10 + 1U); + + BOOST_STATIC_ASSERT(!is_specialized_dec || + precision_dec <= streamsize_max + 0UL + ); + + BOOST_STATIC_CONSTANT(unsigned long, precision_bin = + 2UL + limits::digits * 30103UL / 100000UL + ); + + BOOST_STATIC_ASSERT(!is_specialized_bin || + (limits::digits + 0UL < ULONG_MAX / 30103UL && + precision_bin > limits::digits10 + 0UL && + precision_bin <= streamsize_max + 0UL) + ); + + BOOST_STATIC_CONSTANT(std::streamsize, value = + is_specialized_bin ? precision_bin + : is_specialized_dec ? precision_dec : 6 + ); +}; +#endif + +template +inline std::streamsize lcast_get_precision(T* = 0) +{ +#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION + return lcast_precision::value; +#else // Follow lcast_precision algorithm at run-time: + +#ifdef BOOST_NO_IS_ABSTRACT + typedef std::numeric_limits limits; // No fix for SF:1358600. +#else + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::is_abstract + , std::numeric_limits + , std::numeric_limits + >::type limits; +#endif + + bool const use_default_precision = + !limits::is_specialized || limits::is_exact; + + if(!use_default_precision) + { // Includes all built-in floating-point types, float, double ... + // and UDT types for which digits (significand bits) is defined (not zero) + + bool const is_specialized_bin = + limits::radix == 2 && limits::digits > 0; + bool const is_specialized_dec = + limits::radix == 10 && limits::digits10 > 0; + std::streamsize const streamsize_max = + (boost::integer_traits::max)(); + + if(is_specialized_bin) + { // Floating-point types with + // limits::digits defined by the specialization. + + unsigned long const digits = limits::digits; + unsigned long const precision = 2UL + digits * 30103UL / 100000UL; + // unsigned long is selected because it is at least 32-bits + // and thus ULONG_MAX / 30103UL is big enough for all types. + BOOST_ASSERT( + digits < ULONG_MAX / 30103UL && + precision > limits::digits10 + 0UL && + precision <= streamsize_max + 0UL + ); + return precision; + } + else if(is_specialized_dec) + { // Decimal Floating-point type, most likely a User Defined Type + // rather than a real floating-point hardware type. + unsigned int const precision = limits::digits10 + 1U; + BOOST_ASSERT(precision <= streamsize_max + 0UL); + return precision; + } + } + + // Integral type (for which precision has no effect) + // or type T for which limits is NOT specialized, + // so assume stream precision remains the default 6 decimal digits. + // Warning: if your User-defined Floating-point type T is NOT specialized, + // then you may lose accuracy by only using 6 decimal digits. + // To avoid this, you need to specialize T with either + // radix == 2 and digits == the number of significand bits, + // OR + // radix = 10 and digits10 == the number of decimal digits. + + return 6; +#endif +} + +template +inline void lcast_set_precision(std::ios_base& stream, T*) +{ + stream.precision(lcast_get_precision()); +} + +template +inline void lcast_set_precision(std::ios_base& stream, Source*, Target*) +{ + std::streamsize const s = lcast_get_precision((Source*)0); + std::streamsize const t = lcast_get_precision((Target*)0); + stream.precision(s > t ? s : t); +} + +}} + +#endif // BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED + diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/lightweight_mutex.hpp clucene-core-2.3.3.4/src/ext/boost/detail/lightweight_mutex.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/lightweight_mutex.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/lightweight_mutex.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,22 @@ +#ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED +#define BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/lightweight_mutex.hpp - lightweight mutex +// +// Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd. +// +// 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 +// + +#include + +#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/lightweight_test.hpp clucene-core-2.3.3.4/src/ext/boost/detail/lightweight_test.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/lightweight_test.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/lightweight_test.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,91 @@ +#ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED +#define BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/lightweight_test.hpp - lightweight test library +// +// Copyright (c) 2002, 2009 Peter Dimov +// +// 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 +// +// BOOST_TEST(expression) +// BOOST_ERROR(message) +// BOOST_TEST_EQ(expr1, expr2) +// +// int boost::report_errors() +// + +#include +#include + +namespace boost +{ + +namespace detail +{ + +inline int & test_errors() +{ + static int x = 0; + return x; +} + +inline void test_failed_impl(char const * expr, char const * file, int line, char const * function) +{ + std::cerr << file << "(" << line << "): test '" << expr << "' failed in function '" << function << "'" << std::endl; + ++test_errors(); +} + +inline void error_impl(char const * msg, char const * file, int line, char const * function) +{ + std::cerr << file << "(" << line << "): " << msg << " in function '" << function << "'" << std::endl; + ++test_errors(); +} + +template inline void test_eq_impl( char const * expr1, char const * expr2, char const * file, int line, char const * function, T const & t, U const & u ) +{ + if( t == u ) + { + } + else + { + std::cerr << file << "(" << line << "): test '" << expr1 << " == " << expr2 + << "' failed in function '" << function << "': " + << "'" << t << "' != '" << u << "'" << std::endl; + ++test_errors(); + } +} + +} // namespace detail + +inline int report_errors() +{ + int errors = detail::test_errors(); + + if( errors == 0 ) + { + std::cerr << "No errors detected." << std::endl; + return 0; + } + else + { + std::cerr << errors << " error" << (errors == 1? "": "s") << " detected." << std::endl; + return 1; + } +} + +} // namespace boost + +#define BOOST_TEST(expr) ((expr)? (void)0: ::boost::detail::test_failed_impl(#expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION)) +#define BOOST_ERROR(msg) ::boost::detail::error_impl(msg, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) +#define BOOST_TEST_EQ(expr1,expr2) ( ::boost::detail::test_eq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) ) + +#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/lightweight_thread.hpp clucene-core-2.3.3.4/src/ext/boost/detail/lightweight_thread.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/lightweight_thread.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/lightweight_thread.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,135 @@ +#ifndef BOOST_DETAIL_LIGHTWEIGHT_THREAD_HPP_INCLUDED +#define BOOST_DETAIL_LIGHTWEIGHT_THREAD_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// boost/detail/lightweight_thread.hpp +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2008 Peter Dimov +// +// 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 + +#include +#include +#include + +// pthread_create, pthread_join + +#if defined( BOOST_HAS_PTHREADS ) + +#include + +#else + +#include +#include + +typedef HANDLE pthread_t; + +int pthread_create( pthread_t * thread, void const *, unsigned (__stdcall * start_routine) (void*), void* arg ) +{ + HANDLE h = (HANDLE)_beginthreadex( 0, 0, start_routine, arg, 0, 0 ); + + if( h != 0 ) + { + *thread = h; + return 0; + } + else + { + return EAGAIN; + } +} + +int pthread_join( pthread_t thread, void ** /*value_ptr*/ ) +{ + ::WaitForSingleObject( thread, INFINITE ); + ::CloseHandle( thread ); + return 0; +} + +#endif + +// template int lw_thread_create( pthread_t & pt, F f ); + +namespace boost +{ + +namespace detail +{ + +class lw_abstract_thread +{ +public: + + virtual ~lw_abstract_thread() {} + virtual void run() = 0; +}; + +#if defined( BOOST_HAS_PTHREADS ) + +extern "C" void * lw_thread_routine( void * pv ) +{ + std::auto_ptr pt( static_cast( pv ) ); + + pt->run(); + + return 0; +} + +#else + +unsigned __stdcall lw_thread_routine( void * pv ) +{ + std::auto_ptr pt( static_cast( pv ) ); + + pt->run(); + + return 0; +} + +#endif + +template class lw_thread_impl: public lw_abstract_thread +{ +public: + + explicit lw_thread_impl( F f ): f_( f ) + { + } + + void run() + { + f_(); + } + +private: + + F f_; +}; + +template int lw_thread_create( pthread_t & pt, F f ) +{ + std::auto_ptr p( new lw_thread_impl( f ) ); + + int r = pthread_create( &pt, 0, lw_thread_routine, p.get() ); + + if( r == 0 ) + { + p.release(); + } + + return r; +} + +} // namespace detail +} // namespace boost + +#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_THREAD_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/limits.hpp clucene-core-2.3.3.4/src/ext/boost/detail/limits.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/limits.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/limits.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,449 @@ +// Copyright 2001 John Maddock +// Distributed under the Boost Software License, Version 1.0. (See accompany- +// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/* + * Copyright (c) 1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + */ + +/* NOTE: This is not portable code. Parts of numeric_limits<> are + * inherently machine-dependent, and this file is written for the MIPS + * architecture and the SGI MIPSpro C++ compiler. Parts of it (in + * particular, some of the characteristics of floating-point types) + * are almost certainly incorrect for any other platform. + */ + +/* The above comment is almost certainly out of date. This file works + * on systems other than SGI MIPSpro C++ now. + */ + +/* + * Revision history: + * 21 Sep 2001: + * Only include if BOOST_NO_CWCHAR is defined. (Darin Adler) + * 10 Aug 2001: + * Added MIPS (big endian) to the big endian family. (Jens Maurer) + * 13 Apr 2001: + * Added powerpc to the big endian family. (Jeremy Siek) + * 5 Apr 2001: + * Added sparc (big endian) processor support (John Maddock). + * Initial sub: + * Modified by Jens Maurer for gcc 2.95 on x86. + */ + +#ifndef BOOST_SGI_CPP_LIMITS +#define BOOST_SGI_CPP_LIMITS + +#include +#include +#include +#include + +#ifndef BOOST_NO_CWCHAR +#include // for WCHAR_MIN and WCHAR_MAX +#endif + +namespace std { + +enum float_round_style { + round_indeterminate = -1, + round_toward_zero = 0, + round_to_nearest = 1, + round_toward_infinity = 2, + round_toward_neg_infinity = 3 +}; + +enum float_denorm_style { + denorm_indeterminate = -1, + denorm_absent = 0, + denorm_present = 1 +}; + +// The C++ standard (section 18.2.1) requires that some of the members of +// numeric_limits be static const data members that are given constant- +// initializers within the class declaration. On compilers where the +// BOOST_NO_INCLASS_MEMBER_INITIALIZATION macro is defined, it is impossible to write +// a standard-conforming numeric_limits class. +// +// There are two possible workarounds: either initialize the data +// members outside the class, or change them from data members to +// enums. Neither workaround is satisfactory: the former makes it +// impossible to use the data members in constant-expressions, and the +// latter means they have the wrong type and that it is impossible to +// take their addresses. We choose the former workaround. + +#ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_STL_DECLARE_LIMITS_MEMBER(__mem_type, __mem_name, __mem_value) \ + enum { __mem_name = __mem_value } +#else /* BOOST_NO_INCLASS_MEMBER_INITIALIZATION */ +# define BOOST_STL_DECLARE_LIMITS_MEMBER(__mem_type, __mem_name, __mem_value) \ + static const __mem_type __mem_name = __mem_value +#endif /* BOOST_NO_INCLASS_MEMBER_INITIALIZATION */ + +// Base class for all specializations of numeric_limits. +template +class _Numeric_limits_base { +public: + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, false); + + static __number min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __number(); } + static __number max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __number(); } + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits, 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, 0); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_integer, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_exact, false); + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 0); + + static __number epsilon() throw() { return __number(); } + static __number round_error() throw() { return __number(); } + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent, 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent10, 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent, 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent10, 0); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_infinity, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_quiet_NaN, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_signaling_NaN, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(float_denorm_style, + has_denorm, + denorm_absent); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_denorm_loss, false); + + static __number infinity() throw() { return __number(); } + static __number quiet_NaN() throw() { return __number(); } + static __number signaling_NaN() throw() { return __number(); } + static __number denorm_min() throw() { return __number(); } + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_iec559, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_modulo, false); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, traps, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, tinyness_before, false); + BOOST_STL_DECLARE_LIMITS_MEMBER(float_round_style, + round_style, + round_toward_zero); +}; + +// Base class for integers. + +template +class _Integer_limits : public _Numeric_limits_base<_Int> +{ +public: + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, true); + + static _Int min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __imin; } + static _Int max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __imax; } + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, + digits, + (__idigits < 0) ? (int)(sizeof(_Int) * CHAR_BIT) + - (__imin == 0 ? 0 : 1) + : __idigits); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, (digits * 301) / 1000); + // log 2 = 0.301029995664... + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, __imin != 0); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_integer, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_exact, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 2); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_modulo, true); +}; + +#if defined(BOOST_BIG_ENDIAN) + + template + struct float_helper{ + static Number get_word() throw() { + // sizeof(long double) == 16 + const unsigned int _S_word[4] = { Word, 0, 0, 0 }; + return *reinterpret_cast(&_S_word); + } +}; + +#else + + template + struct float_helper{ + static Number get_word() throw() { + // sizeof(long double) == 12, but only 10 bytes significant + const unsigned int _S_word[4] = { 0, 0, 0, Word }; + return *reinterpret_cast( + reinterpret_cast(&_S_word)+16- + (sizeof(Number) == 12 ? 10 : sizeof(Number))); + } +}; + +#endif + +// Base class for floating-point numbers. +template +class _Floating_limits : public _Numeric_limits_base<__number> +{ +public: + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, true); + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits, __Digits); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, __Digits10); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, true); + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 2); + + BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent, __MinExp); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent, __MaxExp); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent10, __MinExp10); + BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent10, __MaxExp10); + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_infinity, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_quiet_NaN, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_signaling_NaN, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(float_denorm_style, + has_denorm, + denorm_indeterminate); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_denorm_loss, false); + + + static __number infinity() throw() { + return float_helper<__number, __InfinityWord>::get_word(); + } + static __number quiet_NaN() throw() { + return float_helper<__number,__QNaNWord>::get_word(); + } + static __number signaling_NaN() throw() { + return float_helper<__number,__SNaNWord>::get_word(); + } + + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_iec559, __IsIEC559); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, true); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, traps, false /* was: true */ ); + BOOST_STL_DECLARE_LIMITS_MEMBER(bool, tinyness_before, false); + + BOOST_STL_DECLARE_LIMITS_MEMBER(float_round_style, round_style, __RoundStyle); +}; + +// Class numeric_limits + +// The unspecialized class. + +template +class numeric_limits : public _Numeric_limits_base {}; + +// Specializations for all built-in integral types. + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +#ifndef BOOST_NO_INTRINSIC_WCHAR_T +template<> +class numeric_limits +#if !defined(WCHAR_MAX) || !defined(WCHAR_MIN) +#if defined(_WIN32) || defined(__CYGWIN__) + : public _Integer_limits +#elif defined(__hppa) +// wchar_t has "unsigned int" as the underlying type + : public _Integer_limits +#else +// assume that wchar_t has "int" as the underlying type + : public _Integer_limits +#endif +#else +// we have WCHAR_MIN and WCHAR_MAX defined, so use it + : public _Integer_limits +#endif +{}; +#endif + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +template<> +class numeric_limits + : public _Integer_limits +{}; + +#ifdef __GNUC__ + +// Some compilers have long long, but don't define the +// LONGLONG_MIN and LONGLONG_MAX macros in limits.h. This +// assumes that long long is 64 bits. +#if !defined(LONGLONG_MAX) && !defined(ULONGLONG_MAX) + +# define ULONGLONG_MAX 0xffffffffffffffffLLU +# define LONGLONG_MAX 0x7fffffffffffffffLL + +#endif + +#if !defined(LONGLONG_MIN) +# define LONGLONG_MIN (-LONGLONG_MAX - 1) +#endif + + +#if !defined(ULONGLONG_MIN) +# define ULONGLONG_MIN 0 +#endif + +#endif /* __GNUC__ */ + +// Specializations for all built-in floating-point type. + +template<> class numeric_limits + : public _Floating_limits +{ +public: + static float min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return FLT_MIN; } + static float denorm_min() throw() { return FLT_MIN; } + static float max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return FLT_MAX; } + static float epsilon() throw() { return FLT_EPSILON; } + static float round_error() throw() { return 0.5f; } // Units: ulps. +}; + +template<> class numeric_limits + : public _Floating_limits +{ +public: + static double min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return DBL_MIN; } + static double denorm_min() throw() { return DBL_MIN; } + static double max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return DBL_MAX; } + static double epsilon() throw() { return DBL_EPSILON; } + static double round_error() throw() { return 0.5; } // Units: ulps. +}; + +template<> class numeric_limits + : public _Floating_limits +{ +public: + static long double min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return LDBL_MIN; } + static long double denorm_min() throw() { return LDBL_MIN; } + static long double max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return LDBL_MAX; } + static long double epsilon() throw() { return LDBL_EPSILON; } + static long double round_error() throw() { return 4; } // Units: ulps. +}; + +} // namespace std + +#endif /* BOOST_SGI_CPP_LIMITS */ + +// Local Variables: +// mode:C++ +// End: + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/named_template_params.hpp clucene-core-2.3.3.4/src/ext/boost/detail/named_template_params.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/named_template_params.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/named_template_params.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,177 @@ +// (C) Copyright Jeremy Siek 2001. +// 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) + +// Revision History: + +// 04 Oct 2001 David Abrahams +// Changed name of "bind" to "select" to avoid problems with MSVC. + +#ifndef BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP +#define BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP + +#include +#include // for is_reference +#if defined(__BORLANDC__) +#include +#endif + +namespace boost { + namespace detail { + + struct default_argument { }; + + struct dummy_default_gen { + template + struct select { + typedef default_argument type; + }; + }; + + // This class template is a workaround for MSVC. + template struct default_generator { + typedef detail::dummy_default_gen type; + }; + + template struct is_default { + enum { value = false }; + typedef type_traits::no_type type; + }; + template <> struct is_default { + enum { value = true }; + typedef type_traits::yes_type type; + }; + + struct choose_default { + template + struct select { + typedef typename default_generator::type Gen; + typedef typename Gen::template select::type type; + }; + }; + struct choose_arg { + template + struct select { + typedef Arg type; + }; + }; + +#if defined(__BORLANDC__) + template + struct choose_arg_or_default { typedef choose_arg type; }; + template <> + struct choose_arg_or_default { + typedef choose_default type; + }; +#else + template + struct choose_arg_or_default { typedef choose_arg type; }; + template <> + struct choose_arg_or_default { + typedef choose_default type; + }; +#endif + + template + class resolve_default { +#if defined(__BORLANDC__) + typedef typename choose_arg_or_default::type>::type Selector; +#else + // This usually works for Borland, but I'm seeing weird errors in + // iterator_adaptor_test.cpp when using this method. + enum { is_def = is_default::value }; + typedef typename choose_arg_or_default::type Selector; +#endif + public: + typedef typename Selector + ::template select::type type; + }; + + // To differentiate an unnamed parameter from a traits generator + // we use is_convertible. + struct named_template_param_base { }; + + template + struct is_named_param_list { + enum { value = is_convertible::value }; + }; + + struct choose_named_params { + template struct select { typedef Prev type; }; + }; + struct choose_default_arg { + template struct select { + typedef detail::default_argument type; + }; + }; + + template struct choose_default_dispatch_; + template <> struct choose_default_dispatch_ { + typedef choose_named_params type; + }; + template <> struct choose_default_dispatch_ { + typedef choose_default_arg type; + }; + // The use of inheritance here is a Solaris Forte 6 workaround. + template struct choose_default_dispatch + : public choose_default_dispatch_ { }; + + template + struct choose_default_argument { + enum { is_named = is_named_param_list::value }; + typedef typename choose_default_dispatch::type Selector; + typedef typename Selector::template select::type type; + }; + + // This macro assumes that there is a class named default_##TYPE + // defined before the application of the macro. This class should + // have a single member class template named "select" with two + // template parameters: the type of the class being created (e.g., + // the iterator_adaptor type when creating iterator adaptors) and + // a traits class. The select class should have a single typedef + // named "type" that produces the default for TYPE. See + // boost/iterator_adaptors.hpp for an example usage. Also, + // applications of this macro must be placed in namespace + // boost::detail. + +#define BOOST_NAMED_TEMPLATE_PARAM(TYPE) \ + struct get_##TYPE##_from_named { \ + template \ + struct select { \ + typedef typename NamedParams::traits NamedTraits; \ + typedef typename NamedTraits::TYPE TYPE; \ + typedef typename resolve_default::type type; \ + }; \ + }; \ + struct pass_thru_##TYPE { \ + template struct select { \ + typedef typename resolve_default::type type; \ + };\ + }; \ + template \ + struct get_##TYPE##_dispatch { }; \ + template <> struct get_##TYPE##_dispatch<1> { \ + typedef get_##TYPE##_from_named type; \ + }; \ + template <> struct get_##TYPE##_dispatch<0> { \ + typedef pass_thru_##TYPE type; \ + }; \ + template \ + class get_##TYPE { \ + enum { is_named = is_named_param_list::value }; \ + typedef typename get_##TYPE##_dispatch::type Selector; \ + public: \ + typedef typename Selector::template select::type type; \ + }; \ + template <> struct default_generator { \ + typedef default_##TYPE type; \ + } + + + } // namespace detail +} // namespace boost + +#endif // BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/no_exceptions_support.hpp clucene-core-2.3.3.4/src/ext/boost/detail/no_exceptions_support.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/no_exceptions_support.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/no_exceptions_support.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,87 @@ +#ifndef BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP_ +#define BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP_ + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +//---------------------------------------------------------------------- +// (C) Copyright 2004 Pavel Vozenilek. +// Use, modification and distribution is 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 file contains helper macros used when exception support may be +// disabled (as indicated by macro BOOST_NO_EXCEPTIONS). +// +// Before picking up these macros you may consider using RAII techniques +// to deal with exceptions - their syntax can be always the same with +// or without exception support enabled. +// + +/* Example of use: + +void foo() { + BOOST_TRY { + ... + } BOOST_CATCH(const std::bad_alloc&) { + ... + BOOST_RETHROW + } BOOST_CATCH(const std::exception& e) { + ... + } + BOOST_CATCH_END +} + +With exception support enabled it will expand into: + +void foo() { + { try { + ... + } catch (const std::bad_alloc&) { + ... + throw; + } catch (const std::exception& e) { + ... + } + } +} + +With exception support disabled it will expand into: + +void foo() { + { if(true) { + ... + } else if (false) { + ... + } else if (false) { + ... + } + } +} +*/ +//---------------------------------------------------------------------- + +#include +#include + +#if !(defined BOOST_NO_EXCEPTIONS) +# define BOOST_TRY { try +# define BOOST_CATCH(x) catch(x) +# define BOOST_RETHROW throw; +# define BOOST_CATCH_END } +#else +# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) +# define BOOST_TRY { if ("") +# define BOOST_CATCH(x) else if (!"") +# else +# define BOOST_TRY { if (true) +# define BOOST_CATCH(x) else if (false) +# endif +# define BOOST_RETHROW +# define BOOST_CATCH_END } +#endif + + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/none_t.hpp clucene-core-2.3.3.4/src/ext/boost/detail/none_t.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/none_t.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/none_t.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +// Copyright (C) 2003, Fernando Luis Cacciola Carballal. +// +// Use, modification, and distribution is 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) +// +// See http://www.boost.org/lib/optional for documentation. +// +// You are welcome to contact the author at: +// fernando_cacciola@hotmail.com +// +#ifndef BOOST_DETAIL_NONE_T_17SEP2003_HPP +#define BOOST_DETAIL_NONE_T_17SEP2003_HPP + +namespace boost { + +namespace detail { + +struct none_helper{}; + +typedef int none_helper::*none_t ; + +} // namespace detail + +} // namespace boost + +#endif + diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/numeric_traits.hpp clucene-core-2.3.3.4/src/ext/boost/detail/numeric_traits.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/numeric_traits.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/numeric_traits.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,191 @@ +// (C) Copyright David Abrahams 2001, Howard Hinnant 2001. +// +// 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) +// +// Template class numeric_traits -- +// +// Supplies: +// +// typedef difference_type -- a type used to represent the difference +// between any two values of Number. +// +// Support: +// 1. Not all specializations are supplied +// +// 2. Use of specializations that are not supplied will cause a +// compile-time error +// +// 3. Users are free to specialize numeric_traits for any type. +// +// 4. Right now, specializations are only supplied for integer types. +// +// 5. On implementations which do not supply compile-time constants in +// std::numeric_limits<>, only specializations for built-in integer types +// are supplied. +// +// 6. Handling of numbers whose range of representation is at least as +// great as boost::intmax_t can cause some differences to be +// unrepresentable in difference_type: +// +// Number difference_type +// ------ --------------- +// signed Number +// unsigned intmax_t +// +// template typename numeric_traits::difference_type +// numeric_distance(Number x, Number y) +// computes (y - x), attempting to avoid overflows. +// + +// See http://www.boost.org for most recent version including documentation. + +// Revision History +// 11 Feb 2001 - Use BOOST_STATIC_CONSTANT (David Abrahams) +// 11 Feb 2001 - Rolled back ineffective Borland-specific code +// (David Abrahams) +// 10 Feb 2001 - Rolled in supposed Borland fixes from John Maddock, but +// not seeing any improvement yet (David Abrahams) +// 06 Feb 2001 - Factored if_true out into boost/detail/select_type.hpp +// (David Abrahams) +// 23 Jan 2001 - Fixed logic of difference_type selection, which was +// completely wack. In the process, added digit_traits<> +// to compute the number of digits in intmax_t even when +// not supplied by numeric_limits<>. (David Abrahams) +// 21 Jan 2001 - Created (David Abrahams) + +#ifndef BOOST_NUMERIC_TRAITS_HPP_DWA20001901 +# define BOOST_NUMERIC_TRAITS_HPP_DWA20001901 + +# include +# include +# include +# include +# include +# include + +namespace boost { namespace detail { + + // Template class is_signed -- determine whether a numeric type is signed + // Requires that T is constructable from the literals -1 and 0. Compile-time + // error results if that requirement is not met (and thus signedness is not + // likely to have meaning for that type). + template + struct is_signed + { +#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || defined(BOOST_MSVC) && BOOST_MSVC <= 1300 + BOOST_STATIC_CONSTANT(bool, value = (Number(-1) < Number(0))); +#else + BOOST_STATIC_CONSTANT(bool, value = std::numeric_limits::is_signed); +#endif + }; + +# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + // digit_traits - compute the number of digits in a built-in integer + // type. Needed for implementations on which numeric_limits is not specialized + // for intmax_t (e.g. VC6). + template struct digit_traits_select; + + // numeric_limits is specialized; just select that version of digits + template <> struct digit_traits_select + { + template struct traits + { + BOOST_STATIC_CONSTANT(int, digits = std::numeric_limits::digits); + }; + }; + + // numeric_limits is not specialized; compute digits from sizeof(T) + template <> struct digit_traits_select + { + template struct traits + { + BOOST_STATIC_CONSTANT(int, digits = ( + sizeof(T) * std::numeric_limits::digits + - (is_signed::value ? 1 : 0)) + ); + }; + }; + + // here's the "usable" template + template struct digit_traits + { + typedef digit_traits_select< + ::std::numeric_limits::is_specialized> selector; + typedef typename selector::template traits traits; + BOOST_STATIC_CONSTANT(int, digits = traits::digits); + }; +#endif + + // Template class integer_traits -- traits of various integer types + // This should probably be rolled into boost::integer_traits one day, but I + // need it to work without + template + struct integer_traits + { +# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + private: + typedef Integer integer_type; + typedef std::numeric_limits x; +# if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 + // for some reason, MSVC asserts when it shouldn't unless we make these + // local definitions + BOOST_STATIC_CONSTANT(bool, is_integer = x::is_integer); + BOOST_STATIC_CONSTANT(bool, is_specialized = x::is_specialized); + + BOOST_STATIC_ASSERT(is_integer); + BOOST_STATIC_ASSERT(is_specialized); +# endif + public: + typedef typename + if_true<(int(x::is_signed) + && (!int(x::is_bounded) + // digits is the number of no-sign bits + || (int(x::digits) + 1 >= digit_traits::digits)))>::template then< + Integer, + + typename if_true<(int(x::digits) + 1 < digit_traits::digits)>::template then< + signed int, + + typename if_true<(int(x::digits) + 1 < digit_traits::digits)>::template then< + signed long, + + // else + intmax_t + >::type>::type>::type difference_type; +#else + BOOST_STATIC_ASSERT(boost::is_integral::value); + + typedef typename + if_true<(sizeof(Integer) >= sizeof(intmax_t))>::template then< + + typename if_true<(is_signed::value)>::template then< + Integer, + intmax_t + >::type, + + typename if_true<(sizeof(Integer) < sizeof(std::ptrdiff_t))>::template then< + std::ptrdiff_t, + intmax_t + >::type + >::type difference_type; +# endif + }; + + // Right now, only supports integers, but should be expanded. + template + struct numeric_traits + { + typedef typename integer_traits::difference_type difference_type; + }; + + template + typename numeric_traits::difference_type numeric_distance(Number x, Number y) + { + typedef typename numeric_traits::difference_type difference_type; + return difference_type(y) - difference_type(x); + } +}} + +#endif // BOOST_NUMERIC_TRAITS_HPP_DWA20001901 diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/ob_call_traits.hpp clucene-core-2.3.3.4/src/ext/boost/detail/ob_call_traits.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/ob_call_traits.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/ob_call_traits.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,168 @@ +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// 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). +// +// See http://www.boost.org/libs/utility for most recent version including documentation. +// +// Crippled version for crippled compilers: +// see libs/utility/call_traits.htm +// + +/* Release notes: + 01st October 2000: + Fixed call_traits on VC6, using "poor man's partial specialisation", + using ideas taken from "Generative programming" by Krzysztof Czarnecki + & Ulrich Eisenecker. +*/ + +#ifndef BOOST_OB_CALL_TRAITS_HPP +#define BOOST_OB_CALL_TRAITS_HPP + +#ifndef BOOST_CONFIG_HPP +#include +#endif + +#ifndef BOOST_ARITHMETIC_TYPE_TRAITS_HPP +#include +#endif +#ifndef BOOST_COMPOSITE_TYPE_TRAITS_HPP +#include +#endif + +namespace boost{ + +#ifdef BOOST_MSVC6_MEMBER_TEMPLATES +// +// use member templates to emulate +// partial specialisation: +// +namespace detail{ + +template +struct standard_call_traits +{ + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T& param_type; +}; +template +struct simple_call_traits +{ + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T param_type; +}; +template +struct reference_call_traits +{ + typedef T value_type; + typedef T reference; + typedef T const_reference; + typedef T param_type; +}; + +template +struct call_traits_chooser +{ + template + struct rebind + { + typedef standard_call_traits type; + }; +}; + +template <> +struct call_traits_chooser +{ + template + struct rebind + { + typedef simple_call_traits type; + }; +}; + +template <> +struct call_traits_chooser +{ + template + struct rebind + { + typedef reference_call_traits type; + }; +}; + +template +struct call_traits_sizeof_chooser2 +{ + template + struct small_rebind + { + typedef simple_call_traits small_type; + }; +}; + +template<> +struct call_traits_sizeof_chooser2 +{ + template + struct small_rebind + { + typedef standard_call_traits small_type; + }; +}; + +template <> +struct call_traits_chooser +{ + template + struct rebind + { + enum { sizeof_choice = (sizeof(T) <= sizeof(void*)) }; + typedef call_traits_sizeof_chooser2<(sizeof(T) <= sizeof(void*))> chooser; + typedef typename chooser::template small_rebind bound_type; + typedef typename bound_type::small_type type; + }; +}; + +} // namespace detail +template +struct call_traits +{ +private: + typedef detail::call_traits_chooser< + ::boost::is_pointer::value, + ::boost::is_arithmetic::value, + ::boost::is_reference::value + > chooser; + typedef typename chooser::template rebind bound_type; + typedef typename bound_type::type call_traits_type; +public: + typedef typename call_traits_type::value_type value_type; + typedef typename call_traits_type::reference reference; + typedef typename call_traits_type::const_reference const_reference; + typedef typename call_traits_type::param_type param_type; +}; + +#else +// +// sorry call_traits is completely non-functional +// blame your broken compiler: +// + +template +struct call_traits +{ + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T& param_type; +}; + +#endif // member templates + +} + +#endif // BOOST_OB_CALL_TRAITS_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/ob_compressed_pair.hpp clucene-core-2.3.3.4/src/ext/boost/detail/ob_compressed_pair.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/ob_compressed_pair.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/ob_compressed_pair.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,510 @@ +// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000. +// 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). +// +// See http://www.boost.org/libs/utility for most recent version including documentation. +// see libs/utility/compressed_pair.hpp +// +/* Release notes: + 20 Jan 2001: + Fixed obvious bugs (David Abrahams) + 07 Oct 2000: + Added better single argument constructor support. + 03 Oct 2000: + Added VC6 support (JM). + 23rd July 2000: + Additional comments added. (JM) + Jan 2000: + Original version: this version crippled for use with crippled compilers + - John Maddock Jan 2000. +*/ + + +#ifndef BOOST_OB_COMPRESSED_PAIR_HPP +#define BOOST_OB_COMPRESSED_PAIR_HPP + +#include +#ifndef BOOST_OBJECT_TYPE_TRAITS_HPP +#include +#endif +#ifndef BOOST_SAME_TRAITS_HPP +#include +#endif +#ifndef BOOST_CALL_TRAITS_HPP +#include +#endif + +namespace boost +{ +#ifdef BOOST_MSVC6_MEMBER_TEMPLATES +// +// use member templates to emulate +// partial specialisation. Note that due to +// problems with overload resolution with VC6 +// each of the compressed_pair versions that follow +// have one template single-argument constructor +// in place of two specific constructors: +// + +template +class compressed_pair; + +namespace detail{ + +template +struct best_conversion_traits +{ + typedef char one; + typedef char (&two)[2]; + static A a; + static one test(T1); + static two test(T2); + + enum { value = sizeof(test(a)) }; +}; + +template +struct init_one; + +template <> +struct init_one<1> +{ + template + static void init(const A& a, T1* p1, T2*) + { + *p1 = a; + } +}; + +template <> +struct init_one<2> +{ + template + static void init(const A& a, T1*, T2* p2) + { + *p2 = a; + } +}; + + +// T1 != T2, both non-empty +template +class compressed_pair_0 +{ +private: + T1 _first; + T2 _second; +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_0() : _first(), _second() {} + compressed_pair_0(first_param_type x, second_param_type y) : _first(x), _second(y) {} + template + explicit compressed_pair_0(const A& val) + { + init_one::value>::init(val, &_first, &_second); + } + compressed_pair_0(const ::boost::compressed_pair& x) + : _first(x.first()), _second(x.second()) {} + +#if 0 + compressed_pair_0& operator=(const compressed_pair_0& x) { + cout << "assigning compressed pair 0" << endl; + _first = x._first; + _second = x._second; + cout << "finished assigning compressed pair 0" << endl; + return *this; + } +#endif + + first_reference first() { return _first; } + first_const_reference first() const { return _first; } + + second_reference second() { return _second; } + second_const_reference second() const { return _second; } + + void swap(compressed_pair_0& y) + { + using std::swap; + swap(_first, y._first); + swap(_second, y._second); + } +}; + +// T1 != T2, T2 empty +template +class compressed_pair_1 : T2 +{ +private: + T1 _first; +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_1() : T2(), _first() {} + compressed_pair_1(first_param_type x, second_param_type y) : T2(y), _first(x) {} + + template + explicit compressed_pair_1(const A& val) + { + init_one::value>::init(val, &_first, static_cast(this)); + } + + compressed_pair_1(const ::boost::compressed_pair& x) + : T2(x.second()), _first(x.first()) {} + +#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 + // Total weirdness. If the assignment to _first is moved after + // the call to the inherited operator=, then this breaks graph/test/graph.cpp + // by way of iterator_adaptor. + compressed_pair_1& operator=(const compressed_pair_1& x) { + _first = x._first; + T2::operator=(x); + return *this; + } +#endif + + first_reference first() { return _first; } + first_const_reference first() const { return _first; } + + second_reference second() { return *this; } + second_const_reference second() const { return *this; } + + void swap(compressed_pair_1& y) + { + // no need to swap empty base class: + using std::swap; + swap(_first, y._first); + } +}; + +// T1 != T2, T1 empty +template +class compressed_pair_2 : T1 +{ +private: + T2 _second; +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_2() : T1(), _second() {} + compressed_pair_2(first_param_type x, second_param_type y) : T1(x), _second(y) {} + template + explicit compressed_pair_2(const A& val) + { + init_one::value>::init(val, static_cast(this), &_second); + } + compressed_pair_2(const ::boost::compressed_pair& x) + : T1(x.first()), _second(x.second()) {} + +#if 0 + compressed_pair_2& operator=(const compressed_pair_2& x) { + cout << "assigning compressed pair 2" << endl; + T1::operator=(x); + _second = x._second; + cout << "finished assigning compressed pair 2" << endl; + return *this; + } +#endif + first_reference first() { return *this; } + first_const_reference first() const { return *this; } + + second_reference second() { return _second; } + second_const_reference second() const { return _second; } + + void swap(compressed_pair_2& y) + { + // no need to swap empty base class: + using std::swap; + swap(_second, y._second); + } +}; + +// T1 != T2, both empty +template +class compressed_pair_3 : T1, T2 +{ +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_3() : T1(), T2() {} + compressed_pair_3(first_param_type x, second_param_type y) : T1(x), T2(y) {} + template + explicit compressed_pair_3(const A& val) + { + init_one::value>::init(val, static_cast(this), static_cast(this)); + } + compressed_pair_3(const ::boost::compressed_pair& x) + : T1(x.first()), T2(x.second()) {} + + first_reference first() { return *this; } + first_const_reference first() const { return *this; } + + second_reference second() { return *this; } + second_const_reference second() const { return *this; } + + void swap(compressed_pair_3& y) + { + // no need to swap empty base classes: + } +}; + +// T1 == T2, and empty +template +class compressed_pair_4 : T1 +{ +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_4() : T1() {} + compressed_pair_4(first_param_type x, second_param_type y) : T1(x), m_second(y) {} + // only one single argument constructor since T1 == T2 + explicit compressed_pair_4(first_param_type x) : T1(x), m_second(x) {} + compressed_pair_4(const ::boost::compressed_pair& x) + : T1(x.first()), m_second(x.second()) {} + + first_reference first() { return *this; } + first_const_reference first() const { return *this; } + + second_reference second() { return m_second; } + second_const_reference second() const { return m_second; } + + void swap(compressed_pair_4& y) + { + // no need to swap empty base classes: + } +private: + T2 m_second; +}; + +// T1 == T2, not empty +template +class compressed_pair_5 +{ +private: + T1 _first; + T2 _second; +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair_5() : _first(), _second() {} + compressed_pair_5(first_param_type x, second_param_type y) : _first(x), _second(y) {} + // only one single argument constructor since T1 == T2 + explicit compressed_pair_5(first_param_type x) : _first(x), _second(x) {} + compressed_pair_5(const ::boost::compressed_pair& c) + : _first(c.first()), _second(c.second()) {} + + first_reference first() { return _first; } + first_const_reference first() const { return _first; } + + second_reference second() { return _second; } + second_const_reference second() const { return _second; } + + void swap(compressed_pair_5& y) + { + using std::swap; + swap(_first, y._first); + swap(_second, y._second); + } +}; + +template +struct compressed_pair_chooser +{ + template + struct rebind + { + typedef compressed_pair_0 type; + }; +}; + +template <> +struct compressed_pair_chooser +{ + template + struct rebind + { + typedef compressed_pair_1 type; + }; +}; + +template <> +struct compressed_pair_chooser +{ + template + struct rebind + { + typedef compressed_pair_2 type; + }; +}; + +template <> +struct compressed_pair_chooser +{ + template + struct rebind + { + typedef compressed_pair_3 type; + }; +}; + +template <> +struct compressed_pair_chooser +{ + template + struct rebind + { + typedef compressed_pair_4 type; + }; +}; + +template <> +struct compressed_pair_chooser +{ + template + struct rebind + { + typedef compressed_pair_5 type; + }; +}; + +template +struct compressed_pair_traits +{ +private: + typedef compressed_pair_chooser::value, is_empty::value, is_same::value> chooser; + typedef typename chooser::template rebind bound_type; +public: + typedef typename bound_type::type type; +}; + +} // namespace detail + +template +class compressed_pair : public detail::compressed_pair_traits::type +{ +private: + typedef typename detail::compressed_pair_traits::type base_type; +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair() : base_type() {} + compressed_pair(first_param_type x, second_param_type y) : base_type(x, y) {} + template + explicit compressed_pair(const A& x) : base_type(x){} + + first_reference first() { return base_type::first(); } + first_const_reference first() const { return base_type::first(); } + + second_reference second() { return base_type::second(); } + second_const_reference second() const { return base_type::second(); } +}; + +template +inline void swap(compressed_pair& x, compressed_pair& y) +{ + x.swap(y); +} + +#else +// no partial specialisation, no member templates: + +template +class compressed_pair +{ +private: + T1 _first; + T2 _second; +public: + typedef T1 first_type; + typedef T2 second_type; + typedef typename call_traits::param_type first_param_type; + typedef typename call_traits::param_type second_param_type; + typedef typename call_traits::reference first_reference; + typedef typename call_traits::reference second_reference; + typedef typename call_traits::const_reference first_const_reference; + typedef typename call_traits::const_reference second_const_reference; + + compressed_pair() : _first(), _second() {} + compressed_pair(first_param_type x, second_param_type y) : _first(x), _second(y) {} + explicit compressed_pair(first_param_type x) : _first(x), _second() {} + // can't define this in case T1 == T2: + // explicit compressed_pair(second_param_type y) : _first(), _second(y) {} + + first_reference first() { return _first; } + first_const_reference first() const { return _first; } + + second_reference second() { return _second; } + second_const_reference second() const { return _second; } + + void swap(compressed_pair& y) + { + using std::swap; + swap(_first, y._first); + swap(_second, y._second); + } +}; + +template +inline void swap(compressed_pair& x, compressed_pair& y) +{ + x.swap(y); +} + +#endif + +} // boost + +#endif // BOOST_OB_COMPRESSED_PAIR_HPP + + + diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/quick_allocator.hpp clucene-core-2.3.3.4/src/ext/boost/detail/quick_allocator.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/quick_allocator.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/quick_allocator.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,23 @@ +#ifndef BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED +#define BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/quick_allocator.hpp +// +// Copyright (c) 2003 David Abrahams +// Copyright (c) 2003 Peter Dimov +// +// 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 +// + +#include + +#endif // #ifndef BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/reference_content.hpp clucene-core-2.3.3.4/src/ext/boost/detail/reference_content.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/reference_content.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/reference_content.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,141 @@ +//----------------------------------------------------------------------------- +// boost detail/reference_content.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_DETAIL_REFERENCE_CONTENT_HPP +#define BOOST_DETAIL_REFERENCE_CONTENT_HPP + +#include "boost/config.hpp" + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +# include "boost/mpl/bool.hpp" +# include "boost/type_traits/has_nothrow_copy.hpp" +#else +# include "boost/mpl/if.hpp" +# include "boost/type_traits/is_reference.hpp" +#endif + +#include "boost/mpl/void.hpp" + +namespace boost { + +namespace detail { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class template reference_content +// +// Non-Assignable wrapper for references. +// +template +class reference_content +{ +private: // representation + + RefT content_; + +public: // structors + + ~reference_content() + { + } + + reference_content(RefT r) + : content_( r ) + { + } + + reference_content(const reference_content& operand) + : content_( operand.content_ ) + { + } + +private: // non-Assignable + + reference_content& operator=(const reference_content&); + +public: // queries + + RefT get() const + { + return content_; + } + +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction make_reference_content +// +// Wraps with reference_content if specified type is reference. +// + +template struct make_reference_content; + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template +struct make_reference_content +{ + typedef T type; +}; + +template +struct make_reference_content< T& > +{ + typedef reference_content type; +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template +struct make_reference_content + : mpl::if_< + is_reference + , reference_content + , T + > +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +template <> +struct make_reference_content< mpl::void_ > +{ + template + struct apply + : make_reference_content + { + }; + + typedef mpl::void_ type; +}; + +} // namespace detail + +/////////////////////////////////////////////////////////////////////////////// +// reference_content type traits specializations +// + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template +struct has_nothrow_copy< + ::boost::detail::reference_content< T& > + > + : mpl::true_ +{ +}; + +#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +} // namespace boost + +#endif // BOOST_DETAIL_REFERENCE_CONTENT_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/scoped_enum_emulation.hpp clucene-core-2.3.3.4/src/ext/boost/detail/scoped_enum_emulation.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/scoped_enum_emulation.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/scoped_enum_emulation.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,56 @@ +// scoped_enum_emulation.hpp ---------------------------------------------------------// + +// Copyright Beman Dawes, 2009 + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +// Generates C++0x scoped enums if the feature is present, otherwise emulates C++0x +// scoped enums with C++03 namespaces and enums. The Boost.Config BOOST_NO_SCOPED_ENUMS +// macro is used to detect feature support. +// +// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf for a +// description of the scoped enum feature. Note that the committee changed the name +// from strongly typed enum to scoped enum. +// +// Caution: only the syntax is emulated; the semantics are not emulated and +// the syntax emulation doesn't include being able to specify the underlying +// representation type. +// +// The emulation is via struct rather than namespace to allow use within classes. +// Thanks to Andrey Semashev for pointing that out. +// +// Helpful comments and suggestions were also made by Kjell Elster, Phil Endecott, +// Joel Falcou, Mathias Gaunard, Felipe Magno de Almeida, Matt Calabrese, Vincente +// Botet, and Daniel James. +// +// Sample usage: +// +// BOOST_SCOPED_ENUM_START(algae) { green, red, cyan }; BOOST_SCOPED_ENUM_END +// ... +// BOOST_SCOPED_ENUM(algae) sample( algae::red ); +// void foo( BOOST_SCOPED_ENUM(algae) color ); +// ... +// sample = algae::green; +// foo( algae::cyan ); + +#ifndef BOOST_SCOPED_ENUM_EMULATION_HPP +#define BOOST_SCOPED_ENUM_EMULATION_HPP + +#include + +#ifdef BOOST_NO_SCOPED_ENUMS + +# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_t +# define BOOST_SCOPED_ENUM_END }; +# define BOOST_SCOPED_ENUM(name) name::enum_t + +#else + +# define BOOST_SCOPED_ENUM_START(name) enum class name +# define BOOST_SCOPED_ENUM_END +# define BOOST_SCOPED_ENUM(name) name + +#endif + +#endif // BOOST_SCOPED_ENUM_EMULATION_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/select_type.hpp clucene-core-2.3.3.4/src/ext/boost/detail/select_type.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/select_type.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/select_type.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,36 @@ +// (C) Copyright David Abrahams 2001. +// 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) +// +// See http://www.boost.org for most recent version including documentation. + +// Revision History +// 09 Feb 01 Applied John Maddock's Borland patch Moving +// specialization to unspecialized template (David Abrahams) +// 06 Feb 01 Created (David Abrahams) + +#ifndef SELECT_TYPE_DWA20010206_HPP +# define SELECT_TYPE_DWA20010206_HPP + +namespace boost { namespace detail { + + // Template class if_true -- select among 2 types based on a bool constant expression + // Usage: + // typename if_true<(bool_const_expression)>::template then::type + + // HP aCC cannot deal with missing names for template value parameters + template struct if_true + { + template + struct then { typedef T type; }; + }; + + template <> + struct if_true + { + template + struct then { typedef F type; }; + }; +}} +#endif // SELECT_TYPE_DWA20010206_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/sp_typeinfo.hpp clucene-core-2.3.3.4/src/ext/boost/detail/sp_typeinfo.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/sp_typeinfo.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/sp_typeinfo.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,129 @@ +#ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED +#define BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// detail/sp_typeinfo.hpp +// +// Copyright 2007 Peter Dimov +// +// 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) + +#include + +#if defined( BOOST_NO_TYPEID ) + +#include +#include + +namespace boost +{ + +namespace detail +{ + +class sp_typeinfo +{ +private: + + sp_typeinfo( sp_typeinfo const& ); + sp_typeinfo& operator=( sp_typeinfo const& ); + + char const * name_; + +public: + + explicit sp_typeinfo( char const * name ): name_( name ) + { + } + + bool operator==( sp_typeinfo const& rhs ) const + { + return this == &rhs; + } + + bool operator!=( sp_typeinfo const& rhs ) const + { + return this != &rhs; + } + + bool before( sp_typeinfo const& rhs ) const + { + return std::less< sp_typeinfo const* >()( this, &rhs ); + } + + char const* name() const + { + return name_; + } +}; + +template struct sp_typeid_ +{ + static sp_typeinfo ti_; + + static char const * name() + { + return BOOST_CURRENT_FUNCTION; + } +}; + +template sp_typeinfo sp_typeid_< T >::ti_( sp_typeid_< T >::name() ); + +template struct sp_typeid_< T & >: sp_typeid_< T > +{ +}; + +template struct sp_typeid_< T const >: sp_typeid_< T > +{ +}; + +template struct sp_typeid_< T volatile >: sp_typeid_< T > +{ +}; + +template struct sp_typeid_< T const volatile >: sp_typeid_< T > +{ +}; + +} // namespace detail + +} // namespace boost + +#define BOOST_SP_TYPEID(T) (boost::detail::sp_typeid_::ti_) + +#else + +#include + +namespace boost +{ + +namespace detail +{ + +#if defined( BOOST_NO_STD_TYPEINFO ) + +typedef ::type_info sp_typeinfo; + +#else + +typedef std::type_info sp_typeinfo; + +#endif + +} // namespace detail + +} // namespace boost + +#define BOOST_SP_TYPEID(T) typeid(T) + +#endif + +#endif // #ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/templated_streams.hpp clucene-core-2.3.3.4/src/ext/boost/detail/templated_streams.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/templated_streams.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/templated_streams.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// boost detail/templated_streams.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_DETAIL_TEMPLATED_STREAMS_HPP +#define BOOST_DETAIL_TEMPLATED_STREAMS_HPP + +#include "boost/config.hpp" + +/////////////////////////////////////////////////////////////////////////////// +// (detail) BOOST_TEMPLATED_STREAM_* macros +// +// Provides workaround platforms without stream class templates. +// + +#if !defined(BOOST_NO_STD_LOCALE) + +#define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) \ + template < typename E , typename T > + +#define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) \ + template < typename E , typename T , typename A > + +#define BOOST_TEMPLATED_STREAM_ARGS(E,T) \ + typename E , typename T + +#define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) \ + typename E , typename T , typename A + +#define BOOST_TEMPLATED_STREAM_COMMA , + +#define BOOST_TEMPLATED_STREAM_ELEM(E) E +#define BOOST_TEMPLATED_STREAM_TRAITS(T) T +#define BOOST_TEMPLATED_STREAM_ALLOC(A) A + +#define BOOST_TEMPLATED_STREAM(X,E,T) \ + BOOST_JOIN(std::basic_,X)< E , T > + +#define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \ + BOOST_JOIN(std::basic_,X)< E , T , A > + +#else // defined(BOOST_NO_STD_LOCALE) + +#define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) /**/ + +#define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) /**/ + +#define BOOST_TEMPLATED_STREAM_ARGS(E,T) /**/ + +#define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) /**/ + +#define BOOST_TEMPLATED_STREAM_COMMA /**/ + +#define BOOST_TEMPLATED_STREAM_ELEM(E) char +#define BOOST_TEMPLATED_STREAM_TRAITS(T) std::char_traits +#define BOOST_TEMPLATED_STREAM_ALLOC(A) std::allocator + +#define BOOST_TEMPLATED_STREAM(X,E,T) \ + std::X + +#define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \ + std::X + +#endif // BOOST_NO_STD_LOCALE + +#endif // BOOST_DETAIL_TEMPLATED_STREAMS_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/utf8_codecvt_facet.hpp clucene-core-2.3.3.4/src/ext/boost/detail/utf8_codecvt_facet.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/utf8_codecvt_facet.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/utf8_codecvt_facet.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,190 @@ +// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu) +// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). +// Distributed under the Boost Software License, Version 1.0. (See accompany- +// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_UTF8_CODECVT_FACET_HPP +#define BOOST_UTF8_CODECVT_FACET_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// utf8_codecvt_facet.hpp + +// This header defines class utf8_codecvt_facet, derived fro +// std::codecvt, which can be used to convert utf8 data in +// files into wchar_t strings in the application. +// +// The header is NOT STANDALONE, and is not to be included by the USER. +// There are at least two libraries which want to use this functionality, and +// we want to avoid code duplication. It would be possible to create utf8 +// library, but: +// - this requires review process first +// - in the case, when linking the a library which uses utf8 +// (say 'program_options'), user should also link to the utf8 library. +// This seems inconvenient, and asking a user to link to an unrevieved +// library is strange. +// Until the above points are fixed, a library which wants to use utf8 must: +// - include this header from one of it's headers or sources +// - include the corresponding .cpp file from one of the sources +// - before including either file, the library must define +// - BOOST_UTF8_BEGIN_NAMESPACE to the namespace declaration that must be used +// - BOOST_UTF8_END_NAMESPACE to the code to close the previous namespace +// - declaration. +// - BOOST_UTF8_DECL -- to the code which must be used for all 'exportable' +// symbols. +// +// For example, program_options library might contain: +// #define BOOST_UTF8_BEGIN_NAMESPACE +// namespace boost { namespace program_options { +// #define BOOST_UTF8_END_NAMESPACE }} +// #define BOOST_UTF8_DECL BOOST_PROGRAM_OPTIONS_DECL +// #include "../../detail/utf8/utf8_codecvt.cpp" +// +// Essentially, each library will have its own copy of utf8 code, in +// different namespaces. + +// Note:(Robert Ramey). I have made the following alterations in the original +// code. +// a) Rendered utf8_codecvt with using templates +// b) Move longer functions outside class definition to prevent inlining +// and make code smaller +// c) added on a derived class to permit translation to/from current +// locale to utf8 + +// See http://www.boost.org for updates, documentation, and revision history. + +// archives stored as text - note these ar templated on the basic +// stream templates to accommodate wide (and other?) kind of characters +// +// note the fact that on libraries without wide characters, ostream is +// is not a specialization of basic_ostream which in fact is not defined +// in such cases. So we can't use basic_ostream but rather +// use two template parameters +// +// utf8_codecvt_facet +// This is an implementation of a std::codecvt facet for translating +// from UTF-8 externally to UCS-4. Note that this is not tied to +// any specific types in order to allow customization on platforms +// where wchar_t is not big enough. +// +// NOTES: The current implementation jumps through some unpleasant hoops in +// order to deal with signed character types. As a std::codecvt_base::result, +// it is necessary for the ExternType to be convertible to unsigned char. +// I chose not to tie the extern_type explicitly to char. But if any combination +// of types other than is used, then std::codecvt must be +// specialized on those types for this to work. + +#include +#include // for mbstate_t +#include // for std::size_t + +#include +#include + +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std { + using ::mbstate_t; + using ::size_t; +} +#endif + +#if !defined(__MSL_CPP__) && !defined(__LIBCOMO__) + #define BOOST_CODECVT_DO_LENGTH_CONST const +#else + #define BOOST_CODECVT_DO_LENGTH_CONST +#endif + +// maximum lenght of a multibyte string +#define MB_LENGTH_MAX 8 + +BOOST_UTF8_BEGIN_NAMESPACE + +struct BOOST_UTF8_DECL utf8_codecvt_facet : + public std::codecvt +{ +public: + explicit utf8_codecvt_facet(std::size_t no_locale_manage=0) + : std::codecvt(no_locale_manage) + {} +protected: + virtual std::codecvt_base::result do_in( + std::mbstate_t& state, + const char * from, + const char * from_end, + const char * & from_next, + wchar_t * to, + wchar_t * to_end, + wchar_t*& to_next + ) const; + + virtual std::codecvt_base::result do_out( + std::mbstate_t & state, const wchar_t * from, + const wchar_t * from_end, const wchar_t* & from_next, + char * to, char * to_end, char * & to_next + ) const; + + bool invalid_continuing_octet(unsigned char octet_1) const { + return (octet_1 < 0x80|| 0xbf< octet_1); + } + + bool invalid_leading_octet(unsigned char octet_1) const { + return (0x7f < octet_1 && octet_1 < 0xc0) || + (octet_1 > 0xfd); + } + + // continuing octets = octets except for the leading octet + static unsigned int get_cont_octet_count(unsigned char lead_octet) { + return get_octet_count(lead_octet) - 1; + } + + static unsigned int get_octet_count(unsigned char lead_octet); + + // How many "continuing octets" will be needed for this word + // == total octets - 1. + int get_cont_octet_out_count(wchar_t word) const ; + + virtual bool do_always_noconv() const throw() { return false; } + + // UTF-8 isn't really stateful since we rewind on partial conversions + virtual std::codecvt_base::result do_unshift( + std::mbstate_t&, + char * from, + char * /*to*/, + char * & next + ) const + { + next = from; + return ok; + } + + virtual int do_encoding() const throw() { + const int variable_byte_external_encoding=0; + return variable_byte_external_encoding; + } + + // How many char objects can I process to get <= max_limit + // wchar_t objects? + virtual int do_length( + BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &, + const char * from, + const char * from_end, + std::size_t max_limit +#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) + ) const throw(); +#else + ) const; +#endif + + // Largest possible value do_length(state,from,from_end,1) could return. + virtual int do_max_length() const throw () { + return 6; // largest UTF-8 encoding of a UCS-4 character + } +}; + +BOOST_UTF8_END_NAMESPACE + +#endif // BOOST_UTF8_CODECVT_FACET_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/detail/workaround.hpp clucene-core-2.3.3.4/src/ext/boost/detail/workaround.hpp --- clucene-core-0.9.21b/src/ext/boost/detail/workaround.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/detail/workaround.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,262 @@ +// Copyright David Abrahams 2002. +// 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) +#ifndef WORKAROUND_DWA2002126_HPP +# define WORKAROUND_DWA2002126_HPP + +// Compiler/library version workaround macro +// +// Usage: +// +// #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +// // workaround for eVC4 and VC6 +// ... // workaround code here +// #endif +// +// When BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the +// first argument must be undefined or expand to a numeric +// value. The above expands to: +// +// (BOOST_MSVC) != 0 && (BOOST_MSVC) < 1300 +// +// When used for workarounds that apply to the latest known version +// and all earlier versions of a compiler, the following convention +// should be observed: +// +// #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1301)) +// +// The version number in this case corresponds to the last version in +// which the workaround was known to have been required. When +// BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro +// BOOST_TESTED_AT(x) expands to "!= 0", which effectively activates +// the workaround for any version of the compiler. When +// BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or +// error will be issued if the compiler version exceeds the argument +// to BOOST_TESTED_AT(). This can be used to locate workarounds which +// may be obsoleted by newer versions. + +# ifndef BOOST_STRICT_CONFIG + +#include + +#ifndef __BORLANDC__ +#define __BORLANDC___WORKAROUND_GUARD 1 +#else +#define __BORLANDC___WORKAROUND_GUARD 0 +#endif +#ifndef __CODEGEARC__ +#define __CODEGEARC___WORKAROUND_GUARD 1 +#else +#define __CODEGEARC___WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_VER +#define _MSC_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_VER_WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_FULL_VER +#define _MSC_FULL_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_FULL_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_MSVC +#define BOOST_MSVC_WORKAROUND_GUARD 1 +#else +#define BOOST_MSVC_WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC__ +#define __GNUC___WORKAROUND_GUARD 1 +#else +#define __GNUC___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_MINOR__ +#define __GNUC_MINOR___WORKAROUND_GUARD 1 +#else +#define __GNUC_MINOR___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_PATCHLEVEL__ +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 1 +#else +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0 +#endif +#ifndef __IBMCPP__ +#define __IBMCPP___WORKAROUND_GUARD 1 +#else +#define __IBMCPP___WORKAROUND_GUARD 0 +#endif +#ifndef __SUNPRO_CC +#define __SUNPRO_CC_WORKAROUND_GUARD 1 +#else +#define __SUNPRO_CC_WORKAROUND_GUARD 0 +#endif +#ifndef __DECCXX_VER +#define __DECCXX_VER_WORKAROUND_GUARD 1 +#else +#define __DECCXX_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __MWERKS__ +#define __MWERKS___WORKAROUND_GUARD 1 +#else +#define __MWERKS___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG__ +#define __EDG___WORKAROUND_GUARD 1 +#else +#define __EDG___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG_VERSION__ +#define __EDG_VERSION___WORKAROUND_GUARD 1 +#else +#define __EDG_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __HP_aCC +#define __HP_aCC_WORKAROUND_GUARD 1 +#else +#define __HP_aCC_WORKAROUND_GUARD 0 +#endif +#ifndef __hpxstd98 +#define __hpxstd98_WORKAROUND_GUARD 1 +#else +#define __hpxstd98_WORKAROUND_GUARD 0 +#endif +#ifndef _CRAYC +#define _CRAYC_WORKAROUND_GUARD 1 +#else +#define _CRAYC_WORKAROUND_GUARD 0 +#endif +#ifndef __DMC__ +#define __DMC___WORKAROUND_GUARD 1 +#else +#define __DMC___WORKAROUND_GUARD 0 +#endif +#ifndef MPW_CPLUS +#define MPW_CPLUS_WORKAROUND_GUARD 1 +#else +#define MPW_CPLUS_WORKAROUND_GUARD 0 +#endif +#ifndef __COMO__ +#define __COMO___WORKAROUND_GUARD 1 +#else +#define __COMO___WORKAROUND_GUARD 0 +#endif +#ifndef __COMO_VERSION__ +#define __COMO_VERSION___WORKAROUND_GUARD 1 +#else +#define __COMO_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __INTEL_COMPILER +#define __INTEL_COMPILER_WORKAROUND_GUARD 1 +#else +#define __INTEL_COMPILER_WORKAROUND_GUARD 0 +#endif +#ifndef __ICL +#define __ICL_WORKAROUND_GUARD 1 +#else +#define __ICL_WORKAROUND_GUARD 0 +#endif +#ifndef _COMPILER_VERSION +#define _COMPILER_VERSION_WORKAROUND_GUARD 1 +#else +#define _COMPILER_VERSION_WORKAROUND_GUARD 0 +#endif + +#ifndef _RWSTD_VER +#define _RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define _RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_RWSTD_VER +#define BOOST_RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define BOOST_RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __GLIBCPP__ +#define __GLIBCPP___WORKAROUND_GUARD 1 +#else +#define __GLIBCPP___WORKAROUND_GUARD 0 +#endif +#ifndef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 1 +#else +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 0 +#endif +#ifndef __SGI_STL_PORT +#define __SGI_STL_PORT_WORKAROUND_GUARD 1 +#else +#define __SGI_STL_PORT_WORKAROUND_GUARD 0 +#endif +#ifndef _STLPORT_VERSION +#define _STLPORT_VERSION_WORKAROUND_GUARD 1 +#else +#define _STLPORT_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef __LIBCOMO_VERSION__ +#define __LIBCOMO_VERSION___WORKAROUND_GUARD 1 +#else +#define __LIBCOMO_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef _CPPLIB_VER +#define _CPPLIB_VER_WORKAROUND_GUARD 1 +#else +#define _CPPLIB_VER_WORKAROUND_GUARD 0 +#endif + +#ifndef BOOST_INTEL_CXX_VERSION +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL_WIN +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_DINKUMWARE_STDLIB +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 1 +#else +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL +#define BOOST_INTEL_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WORKAROUND_GUARD 0 +#endif +// Always define to zero, if it's used it'll be defined my MPL: +#define BOOST_MPL_CFG_GCC_WORKAROUND_GUARD 0 + +# define BOOST_WORKAROUND(symbol, test) \ + ((symbol ## _WORKAROUND_GUARD + 0 == 0) && \ + (symbol != 0) && (1 % (( (symbol test) ) + 1))) +// ^ ^ ^ ^ +// The extra level of parenthesis nesting above, along with the +// BOOST_OPEN_PAREN indirection below, is required to satisfy the +// broken preprocessor in MWCW 8.3 and earlier. +// +// The basic mechanism works as follows: +// (symbol test) + 1 => if (symbol test) then 2 else 1 +// 1 % ((symbol test) + 1) => if (symbol test) then 1 else 0 +// +// The complication with % is for cooperation with BOOST_TESTED_AT(). +// When "test" is BOOST_TESTED_AT(x) and +// BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined, +// +// symbol test => if (symbol <= x) then 1 else -1 +// (symbol test) + 1 => if (symbol <= x) then 2 else 0 +// 1 % ((symbol test) + 1) => if (symbol <= x) then 1 else divide-by-zero +// + +# ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS +# define BOOST_OPEN_PAREN ( +# define BOOST_TESTED_AT(value) > value) ?(-1): BOOST_OPEN_PAREN 1 +# else +# define BOOST_TESTED_AT(value) != ((value)-(value)) +# endif + +# else + +# define BOOST_WORKAROUND(symbol, test) 0 + +# endif + +#endif // WORKAROUND_DWA2002126_HPP diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/all.hpp clucene-core-2.3.3.4/src/ext/boost/exception/all.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/all.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/all.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,36 @@ +//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_316FDA946C0D11DEA9CBAE5255D89593 +#define UUID_316FDA946C0D11DEA9CBAE5255D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef BOOST_NO_EXCEPTIONS +#include +#include +#endif + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/current_exception_cast.hpp clucene-core-2.3.3.4/src/ext/boost/exception/current_exception_cast.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/current_exception_cast.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/current_exception_cast.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,43 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_7E83C166200811DE885E826156D89593 +#define UUID_7E83C166200811DE885E826156D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +namespace +boost + { + template + inline + E * + current_exception_cast() + { + try + { + throw; + } + catch( + E & e ) + { + return &e; + } + catch( + ...) + { + return 0; + } + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/detail/attribute_noreturn.hpp clucene-core-2.3.3.4/src/ext/boost/exception/detail/attribute_noreturn.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/detail/attribute_noreturn.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/detail/attribute_noreturn.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,17 @@ +//Copyright (c) 2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_61531AB0680611DEADD5846855D89593 +#define UUID_61531AB0680611DEADD5846855D89593 + +#if defined(_MSC_VER) +#define BOOST_ATTRIBUTE_NORETURN __declspec(noreturn) +#elif defined(__GNUC__) +#define BOOST_ATTRIBUTE_NORETURN __attribute__((noreturn)) +#else +#define BOOST_ATTRIBUTE_NORETURN +#endif + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/detail/error_info_impl.hpp clucene-core-2.3.3.4/src/ext/boost/exception/detail/error_info_impl.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/detail/error_info_impl.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/detail/error_info_impl.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,75 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_CE6983AC753411DDA764247956D89593 +#define UUID_CE6983AC753411DDA764247956D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include + +namespace +boost + { + namespace + exception_detail + { + class + error_info_base + { + public: + + virtual char const * tag_typeid_name() const = 0; + virtual std::string value_as_string() const = 0; + + protected: + + ~error_info_base() throw() + { + } + }; + } + + template + class + error_info: + public exception_detail::error_info_base + { + public: + + typedef T value_type; + + error_info( value_type const & value ); + ~error_info() throw(); + + value_type const & + value() const + { + return value_; + } + + value_type & + value() + { + return value_; + } + + private: + + char const * tag_typeid_name() const; + std::string value_as_string() const; + + value_type value_; + }; + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/detail/exception_ptr.hpp clucene-core-2.3.3.4/src/ext/boost/exception/detail/exception_ptr.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/detail/exception_ptr.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/detail/exception_ptr.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,490 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_618474C2DE1511DEB74A388C56D89593 +#define UUID_618474C2DE1511DEB74A388C56D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#ifdef BOOST_NO_EXCEPTIONS +#error This header requires exception handling to be enabled. +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +namespace +boost + { +#ifndef BOOST_NO_RTTI + typedef error_info original_exception_type; + + inline + std::string + to_string( original_exception_type const & x ) + { + return x.value()->name(); + } +#endif + + class exception_ptr; + exception_ptr current_exception(); + void rethrow_exception( exception_ptr const & ); + + class + exception_ptr + { + typedef bool exception_ptr::*unspecified_bool_type; + friend exception_ptr current_exception(); + friend void rethrow_exception( exception_ptr const & ); + + shared_ptr c_; + bool bad_alloc_; + + struct + bad_alloc_tag + { + }; + + explicit + exception_ptr( bad_alloc_tag ): + bad_alloc_(true) + { + } + + explicit + exception_ptr( shared_ptr const & c ): + c_(c), + bad_alloc_(false) + { + BOOST_ASSERT(c); + } + + void + rethrow() const + { + BOOST_ASSERT(*this); + if( bad_alloc_ ) + throw enable_current_exception(std::bad_alloc()); + else + c_->rethrow(); + } + + bool + empty() const + { + return !bad_alloc_ && !c_; + } + + public: + + exception_ptr(): + bad_alloc_(false) + { + } + + ~exception_ptr() throw() + { + } + + operator unspecified_bool_type() const + { + return empty() ? 0 : &exception_ptr::bad_alloc_; + } + + friend + bool + operator==( exception_ptr const & a, exception_ptr const & b ) + { + return a.c_==b.c_ && a.bad_alloc_==b.bad_alloc_; + } + + friend + bool + operator!=( exception_ptr const & a, exception_ptr const & b ) + { + return !(a==b); + } + }; + + class + unknown_exception: + public exception, + public std::exception, + public exception_detail::clone_base + { + public: + + unknown_exception() + { + } + + explicit + unknown_exception( std::exception const & e ) + { + add_original_type(e); + } + + explicit + unknown_exception( boost::exception const & e ): + boost::exception(e) + { + add_original_type(e); + } + + ~unknown_exception() throw() + { + } + + private: + + exception_detail::clone_base const * + clone() const + { + return new unknown_exception(*this); + } + + void + rethrow() const + { + throw*this; + } + + template + void + add_original_type( E const & e ) + { +#ifndef BOOST_NO_RTTI + (*this) << original_exception_type(&typeid(e)); +#endif + } + }; + + namespace + exception_detail + { + template + class + current_exception_std_exception_wrapper: + public T, + public boost::exception, + public clone_base + { + public: + + explicit + current_exception_std_exception_wrapper( T const & e1 ): + T(e1) + { + add_original_type(e1); + } + + current_exception_std_exception_wrapper( T const & e1, boost::exception const & e2 ): + T(e1), + boost::exception(e2) + { + add_original_type(e1); + } + + ~current_exception_std_exception_wrapper() throw() + { + } + + private: + + clone_base const * + clone() const + { + return new current_exception_std_exception_wrapper(*this); + } + + void + rethrow() const + { + throw *this; + } + + template + void + add_original_type( E const & e ) + { +#ifndef BOOST_NO_RTTI + (*this) << original_exception_type(&typeid(e)); +#endif + } + }; + +#ifdef BOOST_NO_RTTI + template + exception const * + get_boost_exception( T const * ) + { + try + { + throw; + } + catch( + exception & x ) + { + return &x; + } + catch(...) + { + return 0; + } + } +#else + template + exception const * + get_boost_exception( T const * x ) + { + return dynamic_cast(x); + } +#endif + + template + inline + shared_ptr + current_exception_std_exception( T const & e1 ) + { + if( boost::exception const * e2 = get_boost_exception(&e1) ) + return shared_ptr const>(new current_exception_std_exception_wrapper(e1,*e2)); + else + return shared_ptr const>(new current_exception_std_exception_wrapper(e1)); + } + + inline + shared_ptr + current_exception_unknown_exception() + { + return shared_ptr(new unknown_exception()); + } + + inline + shared_ptr + current_exception_unknown_boost_exception( boost::exception const & e ) + { + return shared_ptr(new unknown_exception(e)); + } + + inline + shared_ptr + current_exception_unknown_std_exception( std::exception const & e ) + { + if( boost::exception const * be = get_boost_exception(&e) ) + return current_exception_unknown_boost_exception(*be); + else + return shared_ptr(new unknown_exception(e)); + } + + inline + shared_ptr + current_exception_impl() + { + try + { + throw; + } + catch( + exception_detail::clone_base & e ) + { + return shared_ptr(e.clone()); + } + catch( + std::domain_error & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::invalid_argument & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::length_error & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::out_of_range & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::logic_error & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::range_error & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::overflow_error & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::underflow_error & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::ios_base::failure & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::runtime_error & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::bad_alloc & e ) + { + return exception_detail::current_exception_std_exception(e); + } +#ifndef BOOST_NO_TYPEID + catch( + std::bad_cast & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::bad_typeid & e ) + { + return exception_detail::current_exception_std_exception(e); + } +#endif + catch( + std::bad_exception & e ) + { + return exception_detail::current_exception_std_exception(e); + } + catch( + std::exception & e ) + { + return exception_detail::current_exception_unknown_std_exception(e); + } + catch( + boost::exception & e ) + { + return exception_detail::current_exception_unknown_boost_exception(e); + } + catch( + ... ) + { + return exception_detail::current_exception_unknown_exception(); + } + } + } + + inline + exception_ptr + current_exception() + { + try + { + return exception_ptr(exception_detail::current_exception_impl()); + } + catch( + std::bad_alloc & ) + { + } + catch( + ... ) + { + try + { + return exception_ptr(exception_detail::current_exception_std_exception(std::bad_exception())); + } + catch( + std::bad_alloc & ) + { + } + catch( + ... ) + { + BOOST_ASSERT(0); + } + } + return exception_ptr(exception_ptr::bad_alloc_tag()); + } + + template + inline + exception_ptr + copy_exception( T const & e ) + { + try + { + throw enable_current_exception(e); + } + catch( + ... ) + { + return current_exception(); + } + } + + inline + void + rethrow_exception( exception_ptr const & p ) + { + p.rethrow(); + } + + inline + std::string + diagnostic_information( exception_ptr const & p ) + { + if( p ) + try + { + rethrow_exception(p); + } + catch( + ... ) + { + return current_exception_diagnostic_information(); + } + return ""; + } + + inline + std::string + to_string( exception_ptr const & p ) + { + std::string s='\n'+diagnostic_information(p); + std::string padding(" "); + std::string r; + bool f=false; + for( std::string::const_iterator i=s.begin(),e=s.end(); i!=e; ++i ) + { + if( f ) + r+=padding; + char c=*i; + r+=c; + f=(c=='\n'); + } + return r; + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/detail/is_output_streamable.hpp clucene-core-2.3.3.4/src/ext/boost/exception/detail/is_output_streamable.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/detail/is_output_streamable.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/detail/is_output_streamable.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,47 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_898984B4076411DD973EDFA055D89593 +#define UUID_898984B4076411DD973EDFA055D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include + +namespace +boost + { + namespace + to_string_detail + { + template + char operator<<( std::basic_ostream &, T const & ); + + template + struct + is_output_streamable_impl + { + static std::basic_ostream & f(); + static T const & g(); + enum e { value=1!=(sizeof(f()< > + struct + is_output_streamable + { + enum e { value=to_string_detail::is_output_streamable_impl::value }; + }; + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/detail/object_hex_dump.hpp clucene-core-2.3.3.4/src/ext/boost/exception/detail/object_hex_dump.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/detail/object_hex_dump.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/detail/object_hex_dump.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,50 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_6F463AC838DF11DDA3E6909F56D89593 +#define UUID_6F463AC838DF11DDA3E6909F56D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include +#include +#include +#include + +namespace +boost + { + namespace + exception_detail + { + template + inline + std::string + object_hex_dump( T const & x, std::size_t max_size=16 ) + { + std::ostringstream s; + s << "type: " << type_name() << ", size: " << sizeof(T) << ", dump: "; + std::size_t n=sizeof(T)>max_size?max_size:sizeof(T); + s.fill('0'); + s.width(2); + unsigned char const * b=reinterpret_cast(&x); + s << std::setw(2) << std::hex << (unsigned int)*b; + for( unsigned char const * e=b+n; ++b!=e; ) + s << " " << std::setw(2) << std::hex << (unsigned int)*b; + return s.str(); + } + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/detail/type_info.hpp clucene-core-2.3.3.4/src/ext/boost/exception/detail/type_info.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/detail/type_info.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/detail/type_info.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,79 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_C3E1741C754311DDB2834CCA55D89593 +#define UUID_C3E1741C754311DDB2834CCA55D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include + +namespace +boost + { + template + inline + char const * + tag_type_name() + { +#ifdef BOOST_NO_TYPEID + return BOOST_CURRENT_FUNCTION; +#else + return typeid(T*).name(); +#endif + } + + template + inline + char const * + type_name() + { +#ifdef BOOST_NO_TYPEID + return BOOST_CURRENT_FUNCTION; +#else + return typeid(T).name(); +#endif + } + + namespace + exception_detail + { + struct + type_info_ + { + detail::sp_typeinfo const & type_; + + explicit + type_info_( detail::sp_typeinfo const & type ): + type_(type) + { + } + + friend + bool + operator<( type_info_ const & a, type_info_ const & b ) + { + return 0!=(a.type_.before(b.type_)); + } + }; + } + } + +#define BOOST_EXCEPTION_STATIC_TYPEID(T) ::boost::exception_detail::type_info_(BOOST_SP_TYPEID(T)) + +#ifndef BOOST_NO_RTTI +#define BOOST_EXCEPTION_DYNAMIC_TYPEID(x) ::boost::exception_detail::type_info_(typeid(x)) +#endif + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/diagnostic_information.hpp clucene-core-2.3.3.4/src/ext/boost/exception/diagnostic_information.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/diagnostic_information.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/diagnostic_information.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,182 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_0552D49838DD11DD90146B8956D89593 +#define UUID_0552D49838DD11DD90146B8956D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include +#include +#include +#include +#include + +#ifndef BOOST_NO_EXCEPTIONS +#include +namespace +boost + { + namespace + exception_detail + { + std::string diagnostic_information_impl( boost::exception const *, std::exception const *, bool ); + } + + inline + std::string + current_exception_diagnostic_information() + { + boost::exception const * be=current_exception_cast(); + std::exception const * se=current_exception_cast(); + if( be || se ) + return exception_detail::diagnostic_information_impl(be,se,true); + else + return "No diagnostic information available."; + } + } +#endif + +namespace +boost + { + namespace + exception_detail + { + inline + exception const * + get_boost_exception( exception const * e ) + { + return e; + } + + inline + exception const * + get_boost_exception( ... ) + { + return 0; + } + + inline + std::exception const * + get_std_exception( std::exception const * e ) + { + return e; + } + + inline + std::exception const * + get_std_exception( ... ) + { + return 0; + } + + inline + char const * + get_diagnostic_information( exception const & x, char const * header ) + { + if( error_info_container * c=x.data_.get() ) +#ifndef BOOST_NO_EXCEPTIONS + try + { +#endif + return c->diagnostic_information(header); +#ifndef BOOST_NO_EXCEPTIONS + } + catch(...) + { + } +#endif + return 0; + } + + inline + std::string + diagnostic_information_impl( boost::exception const * be, std::exception const * se, bool with_what ) + { + if( !be && !se ) + return "Unknown exception."; +#ifndef BOOST_NO_RTTI + if( !be ) + be=dynamic_cast(se); + if( !se ) + se=dynamic_cast(be); +#endif + char const * wh=0; + if( with_what && se ) + { + wh=se->what(); + if( be && exception_detail::get_diagnostic_information(*be,0)==wh ) + return wh; + } + std::ostringstream tmp; + if( be ) + { + if( char const * const * f=get_error_info(*be) ) + { + tmp << *f; + if( int const * l=get_error_info(*be) ) + tmp << '(' << *l << "): "; + } + tmp << "Throw in function "; + if( char const * const * fn=get_error_info(*be) ) + tmp << *fn; + else + tmp << "(unknown)"; + tmp << '\n'; + } +#ifndef BOOST_NO_RTTI + tmp << std::string("Dynamic exception type: ") << + (be?BOOST_EXCEPTION_DYNAMIC_TYPEID(*be):BOOST_EXCEPTION_DYNAMIC_TYPEID(*se)).type_.name() << '\n'; +#endif + if( with_what && se ) + tmp << "std::exception::what: " << wh << '\n'; + if( be ) + if( char const * s=exception_detail::get_diagnostic_information(*be,tmp.str().c_str()) ) + if( *s ) + return s; + return tmp.str(); + } + } + + template + std::string + diagnostic_information( T const & e ) + { + return exception_detail::diagnostic_information_impl(exception_detail::get_boost_exception(&e),exception_detail::get_std_exception(&e),true); + } + + inline + char const * + diagnostic_information_what( exception const & e ) throw() + { + char const * w=0; +#ifndef BOOST_NO_EXCEPTIONS + try + { +#endif + (void) exception_detail::diagnostic_information_impl(&e,0,false); + return exception_detail::get_diagnostic_information(e,0); +#ifndef BOOST_NO_EXCEPTIONS + } + catch( + ... ) + { + } +#endif + return w; + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/enable_current_exception.hpp clucene-core-2.3.3.4/src/ext/boost/exception/enable_current_exception.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/enable_current_exception.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/enable_current_exception.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,6 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#include diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/enable_error_info.hpp clucene-core-2.3.3.4/src/ext/boost/exception/enable_error_info.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/enable_error_info.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/enable_error_info.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,6 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#include diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/errinfo_api_function.hpp clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_api_function.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/errinfo_api_function.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_api_function.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,22 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_DDFBB4546C1211DEA4659E9055D89593 +#define UUID_DDFBB4546C1211DEA4659E9055D89593 + +#include "boost/exception/error_info.hpp" + +namespace +boost + { + //Usage hint: + //if( api_function(....)!=0 ) + // BOOST_THROW_EXCEPTION( + // failure() << + // errinfo_api_function("api_function") ); + typedef error_info errinfo_api_function; + } + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/errinfo_at_line.hpp clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_at_line.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/errinfo_at_line.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_at_line.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,18 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_E7255CE26C1211DE85800C9155D89593 +#define UUID_E7255CE26C1211DE85800C9155D89593 + +namespace +boost + { + template class error_info; + + //Use with parsing errors exceptions, for example in a XML file parser. + typedef error_info errinfo_at_line; + } + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/errinfo_errno.hpp clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_errno.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/errinfo_errno.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_errno.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,44 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_F0EE17BE6C1211DE87FF459155D89593 +#define UUID_F0EE17BE6C1211DE87FF459155D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include "boost/exception/info.hpp" +#include +#include + +namespace +boost + { + typedef error_info errinfo_errno; + + //Usage hint: + //if( c_function(....)!=0 ) + // BOOST_THROW_EXCEPTION( + // failure() << + // errinfo_errno(errno) << + // errinfo_api_function("c_function") ); + inline + std::string + to_string( errinfo_errno const & e ) + { + std::ostringstream tmp; + int v=e.value(); + tmp << v << ", \"" << strerror(v) << "\""; + return tmp.str(); + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/errinfo_file_handle.hpp clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_file_handle.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/errinfo_file_handle.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_file_handle.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,20 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_F79E6EE26C1211DEB26E929155D89593 +#define UUID_F79E6EE26C1211DEB26E929155D89593 + +#include + +namespace +boost + { + template class weak_ptr; + template class error_info; + + typedef error_info > errinfo_file_handle; + } + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/errinfo_file_name.hpp clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_file_name.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/errinfo_file_name.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_file_name.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,26 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_FEE5120A6C1211DE94E8BC9155D89593 +#define UUID_FEE5120A6C1211DE94E8BC9155D89593 + +#include + +namespace +boost + { + template class error_info; + + //Usage hint: + //FILE * f=fopen(name,mode); + //if( !f ) + // BOOST_THROW_EXCEPTION( + // file_open_error() << + // errinfo_file_name(name) << + // errinfo_file_open_mode(mode) ); + typedef error_info errinfo_file_name; + } + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/errinfo_file_open_mode.hpp clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_file_open_mode.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/errinfo_file_open_mode.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_file_open_mode.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,26 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_056F1F266C1311DE8E74299255D89593 +#define UUID_056F1F266C1311DE8E74299255D89593 + +#include + +namespace +boost + { + template class error_info; + + //Usage hint: + //FILE * f=fopen(name,mode); + //if( !f ) + // BOOST_THROW_EXCEPTION( + // file_open_error() << + // errinfo_file_name(name) << + // errinfo_file_open_mode(mode) ); + typedef error_info errinfo_file_open_mode; + } + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/errinfo_nested_exception.hpp clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_nested_exception.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/errinfo_nested_exception.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_nested_exception.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,17 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_45CC9A82B77511DEB330FC4956D89593 +#define UUID_45CC9A82B77511DEB330FC4956D89593 + +namespace +boost + { + template class error_info; + class exception_ptr; + typedef error_info errinfo_nested_exception; + } + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/errinfo_type_info_name.hpp clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_type_info_name.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/errinfo_type_info_name.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/errinfo_type_info_name.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,23 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_0E11109E6C1311DEB7EA649255D89593 +#define UUID_0E11109E6C1311DEB7EA649255D89593 + +#include + +namespace +boost + { + template class error_info; + + //Usage hint: + //BOOST_THROW_EXCEPTION( + // bad_type() << + // errinfo_type_info_name(typeid(x).name()) ); + typedef error_info errinfo_type_info_name; + } + +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/error_info.hpp clucene-core-2.3.3.4/src/ext/boost/exception/error_info.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/error_info.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/error_info.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,6 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +namespace boost { template class error_info; } diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/exception.hpp clucene-core-2.3.3.4/src/ext/boost/exception/exception.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/exception.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/exception.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,422 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_274DA366004E11DCB1DDFE2E56D89593 +#define UUID_274DA366004E11DCB1DDFE2E56D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +namespace +boost + { + namespace + exception_detail + { + template + class + refcount_ptr + { + public: + + refcount_ptr(): + px_(0) + { + } + + ~refcount_ptr() + { + release(); + } + + refcount_ptr( refcount_ptr const & x ): + px_(x.px_) + { + add_ref(); + } + + refcount_ptr & + operator=( refcount_ptr const & x ) + { + adopt(x.px_); + return *this; + } + + void + adopt( T * px ) + { + release(); + px_=px; + add_ref(); + } + + T * + get() const + { + return px_; + } + + private: + + T * px_; + + void + add_ref() + { + if( px_ ) + px_->add_ref(); + } + + void + release() + { + if( px_ ) + px_->release(); + } + }; + } + + //////////////////////////////////////////////////////////////////////// + + template + class error_info; + + typedef error_info throw_function; + typedef error_info throw_file; + typedef error_info throw_line; + + template <> + class + error_info + { + public: + typedef char const * value_type; + value_type v_; + explicit + error_info( value_type v ): + v_(v) + { + } + }; + + template <> + class + error_info + { + public: + typedef char const * value_type; + value_type v_; + explicit + error_info( value_type v ): + v_(v) + { + } + }; + + template <> + class + error_info + { + public: + typedef int value_type; + value_type v_; + explicit + error_info( value_type v ): + v_(v) + { + } + }; + + template + E const & operator<<( E const &, error_info const & ); + + template + E const & operator<<( E const &, throw_function const & ); + + template + E const & operator<<( E const &, throw_file const & ); + + template + E const & operator<<( E const &, throw_line const & ); + + class exception; + + template + class shared_ptr; + + namespace + exception_detail + { + class error_info_base; + struct type_info_; + + struct + error_info_container + { + virtual char const * diagnostic_information( char const * ) const = 0; + virtual shared_ptr get( type_info_ const & ) const = 0; + virtual void set( shared_ptr const &, type_info_ const & ) = 0; + virtual void add_ref() const = 0; + virtual void release() const = 0; + + protected: + + ~error_info_container() throw() + { + } + }; + + template + struct get_info; + + template <> + struct get_info; + + template <> + struct get_info; + + template <> + struct get_info; + + char const * get_diagnostic_information( exception const &, char const * ); + } + + class + exception + { + protected: + + exception(): + throw_function_(0), + throw_file_(0), + throw_line_(-1) + { + } + +#ifdef __HP_aCC + //On HP aCC, this protected copy constructor prevents throwing boost::exception. + //On all other platforms, the same effect is achieved by the pure virtual destructor. + exception( exception const & x ) throw(): + data_(x.data_), + throw_function_(x.throw_function_), + throw_file_(x.throw_file_), + throw_line_(x.throw_line_) + { + } +#endif + + virtual ~exception() throw() +#ifndef __HP_aCC + = 0 //Workaround for HP aCC, =0 incorrectly leads to link errors. +#endif + ; + +#if defined(__MWERKS__) && __MWERKS__<=0x3207 + public: +#else + private: + + template + friend E const & operator<<( E const &, throw_function const & ); + + template + friend E const & operator<<( E const &, throw_file const & ); + + template + friend E const & operator<<( E const &, throw_line const & ); + + friend char const * exception_detail::get_diagnostic_information( exception const &, char const * ); + + template + friend E const & operator<<( E const &, error_info const & ); + + template + friend struct exception_detail::get_info; + friend struct exception_detail::get_info; + friend struct exception_detail::get_info; + friend struct exception_detail::get_info; +#endif + mutable exception_detail::refcount_ptr data_; + mutable char const * throw_function_; + mutable char const * throw_file_; + mutable int throw_line_; + }; + + inline + exception:: + ~exception() throw() + { + } + + template + E const & + operator<<( E const & x, throw_function const & y ) + { + x.throw_function_=y.v_; + return x; + } + + template + E const & + operator<<( E const & x, throw_file const & y ) + { + x.throw_file_=y.v_; + return x; + } + + template + E const & + operator<<( E const & x, throw_line const & y ) + { + x.throw_line_=y.v_; + return x; + } + + //////////////////////////////////////////////////////////////////////// + + namespace + exception_detail + { + template + struct + error_info_injector: + public T, + public exception + { + explicit + error_info_injector( T const & x ): + T(x) + { + } + + ~error_info_injector() throw() + { + } + }; + + struct large_size { char c[256]; }; + large_size dispatch( exception * ); + + struct small_size { }; + small_size dispatch( void * ); + + template + struct enable_error_info_helper; + + template + struct + enable_error_info_helper + { + typedef T type; + }; + + template + struct + enable_error_info_helper + { + typedef error_info_injector type; + }; + + template + struct + enable_error_info_return_type + { + typedef typename enable_error_info_helper::type type; + }; + } + + template + inline + typename + exception_detail::enable_error_info_return_type::type + enable_error_info( T const & x ) + { + typedef typename exception_detail::enable_error_info_return_type::type rt; + return rt(x); + } + + //////////////////////////////////////////////////////////////////////// + + namespace + exception_detail + { + class + clone_base + { + public: + + virtual clone_base const * clone() const = 0; + virtual void rethrow() const = 0; + + virtual + ~clone_base() throw() + { + } + }; + + inline + void + copy_boost_exception( exception * a, exception const * b ) + { + *a = *b; + } + + inline + void + copy_boost_exception( void *, void const * ) + { + } + + template + class + clone_impl: + public T, + public clone_base + { + public: + + explicit + clone_impl( T const & x ): + T(x) + { + copy_boost_exception(this,&x); + } + + ~clone_impl() throw() + { + } + + private: + + clone_base const * + clone() const + { + return new clone_impl(*this); + } + + void + rethrow() const + { + throw*this; + } + }; + } + + template + inline + exception_detail::clone_impl + enable_current_exception( T const & x ) + { + return exception_detail::clone_impl(x); + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/get_error_info.hpp clucene-core-2.3.3.4/src/ext/boost/exception/get_error_info.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/get_error_info.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/get_error_info.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,130 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_1A590226753311DD9E4CCF6156D89593 +#define UUID_1A590226753311DD9E4CCF6156D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include +#include + +namespace +boost + { + namespace + exception_detail + { + template + struct + get_info + { + static + typename ErrorInfo::value_type * + get( exception const & x ) + { + if( exception_detail::error_info_container * c=x.data_.get() ) + if( shared_ptr eib = c->get(BOOST_EXCEPTION_STATIC_TYPEID(ErrorInfo)) ) + { +#ifndef BOOST_NO_RTTI + BOOST_ASSERT( 0!=dynamic_cast(eib.get()) ); +#endif + ErrorInfo * w = static_cast(eib.get()); + return &w->value(); + } + return 0; + } + }; + + template <> + struct + get_info + { + static + char const * * + get( exception const & x ) + { + return x.throw_function_ ? &x.throw_function_ : 0; + } + }; + + template <> + struct + get_info + { + static + char const * * + get( exception const & x ) + { + return x.throw_file_ ? &x.throw_file_ : 0; + } + }; + + template <> + struct + get_info + { + static + int * + get( exception const & x ) + { + return x.throw_line_!=-1 ? &x.throw_line_ : 0; + } + }; + + template + struct + get_error_info_return_type + { + typedef R * type; + }; + + template + struct + get_error_info_return_type + { + typedef R const * type; + }; + } + +#ifdef BOOST_NO_RTTI + template + inline + typename ErrorInfo::value_type const * + get_error_info( boost::exception const & x ) + { + return exception_detail::get_info::get(x); + } + template + inline + typename ErrorInfo::value_type * + get_error_info( boost::exception & x ) + { + return exception_detail::get_info::get(x); + } +#else + template + inline + typename exception_detail::get_error_info_return_type::type + get_error_info( E & some_exception ) + { + if( exception const * x = dynamic_cast(&some_exception) ) + return exception_detail::get_info::get(*x); + else + return 0; + } +#endif + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/info.hpp clucene-core-2.3.3.4/src/ext/boost/exception/info.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/info.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/info.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,167 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_8D22C4CA9CC811DCAA9133D256D89593 +#define UUID_8D22C4CA9CC811DCAA9133D256D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include +#include +#include +#include + +namespace +boost + { + template + inline + typename enable_if,std::string>::type + to_string( error_info const & x ) + { + return to_string(x.value()); + } + + template + inline + error_info:: + error_info( value_type const & value ): + value_(value) + { + } + + template + inline + error_info:: + ~error_info() throw() + { + } + + template + inline + char const * + error_info:: + tag_typeid_name() const + { + return tag_type_name(); + } + + template + inline + std::string + error_info:: + value_as_string() const + { + return to_string_stub(*this); + } + + namespace + exception_detail + { + class + error_info_container_impl: + public error_info_container + { + public: + + error_info_container_impl(): + count_(0) + { + } + + ~error_info_container_impl() throw() + { + } + + void + set( shared_ptr const & x, type_info_ const & typeid_ ) + { + BOOST_ASSERT(x); + info_[typeid_] = x; + diagnostic_info_str_.clear(); + } + + shared_ptr + get( type_info_ const & ti ) const + { + error_info_map::const_iterator i=info_.find(ti); + if( info_.end()!=i ) + { + shared_ptr const & p = i->second; +#ifndef BOOST_NO_RTTI + BOOST_ASSERT( BOOST_EXCEPTION_DYNAMIC_TYPEID(*p).type_==ti.type_ ); +#endif + return p; + } + return shared_ptr(); + } + + char const * + diagnostic_information( char const * header ) const + { + if( header ) + { + BOOST_ASSERT(*header!=0); + std::ostringstream tmp; + tmp << header; + for( error_info_map::const_iterator i=info_.begin(),end=info_.end(); i!=end; ++i ) + { + shared_ptr const & x = i->second; + tmp << '[' << x->tag_typeid_name() << "] = " << x->value_as_string() << '\n'; + } + tmp.str().swap(diagnostic_info_str_); + } + return diagnostic_info_str_.c_str(); + } + + private: + + friend class boost::exception; + + typedef std::map< type_info_, shared_ptr > error_info_map; + error_info_map info_; + mutable std::string diagnostic_info_str_; + mutable int count_; + + void + add_ref() const + { + ++count_; + } + + void + release() const + { + if( !--count_ ) + delete this; + } + }; + } + + template + inline + E const & + operator<<( E const & x, error_info const & v ) + { + typedef error_info error_info_tag_t; + shared_ptr p( new error_info_tag_t(v) ); + exception_detail::error_info_container * c=x.data_.get(); + if( !c ) + x.data_.adopt(c=new exception_detail::error_info_container_impl); + c->set(p,BOOST_EXCEPTION_STATIC_TYPEID(error_info_tag_t)); + return x; + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/info_tuple.hpp clucene-core-2.3.3.4/src/ext/boost/exception/info_tuple.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/info_tuple.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/info_tuple.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,76 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_63EE924290FB11DC87BB856555D89593 +#define UUID_63EE924290FB11DC87BB856555D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include + +namespace +boost + { + template < + class E, + class Tag1,class T1, + class Tag2,class T2 > + inline + E const & + operator<<( + E const & x, + tuple< + error_info, + error_info > const & v ) + { + return x << v.template get<0>() << v.template get<1>(); + } + + template < + class E, + class Tag1,class T1, + class Tag2,class T2, + class Tag3,class T3 > + inline + E const & + operator<<( + E const & x, + tuple< + error_info, + error_info, + error_info > const & v ) + { + return x << v.template get<0>() << v.template get<1>() << v.template get<2>(); + } + + template < + class E, + class Tag1,class T1, + class Tag2,class T2, + class Tag3,class T3, + class Tag4,class T4 > + inline + E const & + operator<<( + E const & x, + tuple< + error_info, + error_info, + error_info, + error_info > const & v ) + { + return x << v.template get<0>() << v.template get<1>() << v.template get<2>() << v.template get<3>(); + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/to_string.hpp clucene-core-2.3.3.4/src/ext/boost/exception/to_string.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/to_string.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/to_string.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,83 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_7E48761AD92811DC9011477D56D89593 +#define UUID_7E48761AD92811DC9011477D56D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include + +namespace +boost + { + namespace + to_string_detail + { + template + typename disable_if,char>::type to_string( T const & ); + + template + struct has_to_string_impl; + + template + struct + has_to_string_impl + { + enum e { value=1 }; + }; + + template + struct + has_to_string_impl + { + static T const & f(); + enum e { value=1!=sizeof(to_string(f())) }; + }; + } + + template + inline + typename enable_if,std::string>::type + to_string( T const & x ) + { + std::ostringstream out; + out << x; + return out.str(); + } + + template + struct + has_to_string + { + enum e { value=to_string_detail::has_to_string_impl::value>::value }; + }; + + template + inline + std::string + to_string( std::pair const & x ) + { + return std::string("(") + to_string(x.first) + ',' + to_string(x.second) + ')'; + } + + inline + std::string + to_string( std::exception const & x ) + { + return x.what(); + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/exception/to_string_stub.hpp clucene-core-2.3.3.4/src/ext/boost/exception/to_string_stub.hpp --- clucene-core-0.9.21b/src/ext/boost/exception/to_string_stub.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/exception/to_string_stub.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,109 @@ +//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_E788439ED9F011DCB181F25B55D89593 +#define UUID_E788439ED9F011DCB181F25B55D89593 +#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma GCC system_header +#endif +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(push,1) +#endif + +#include +#include +#include + +namespace +boost + { + namespace + exception_detail + { + template + struct + to_string_dispatcher + { + template + static + std::string + convert( T const & x, Stub ) + { + return to_string(x); + } + }; + + template <> + struct + to_string_dispatcher + { + template + static + std::string + convert( T const & x, Stub s ) + { + return s(x); + } + + template + static + std::string + convert( T const & x, std::string s ) + { + return s; + } + + template + static + std::string + convert( T const & x, char const * s ) + { + BOOST_ASSERT(s!=0); + return s; + } + }; + + namespace + to_string_dispatch + { + template + inline + std::string + dispatch( T const & x, Stub s ) + { + return to_string_dispatcher::value>::convert(x,s); + } + } + + template + inline + std::string + string_stub_dump( T const & x ) + { + return "[ " + exception_detail::object_hex_dump(x) + " ]"; + } + } + + template + inline + std::string + to_string_stub( T const & x ) + { + return exception_detail::to_string_dispatch::dispatch(x,&exception_detail::string_stub_dump); + } + + template + inline + std::string + to_string_stub( T const & x, Stub s ) + { + return exception_detail::to_string_dispatch::dispatch(x,s); + } + } + +#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) +#pragma warning(pop) +#endif +#endif diff -Nru clucene-core-0.9.21b/src/ext/boost/memory_order.hpp clucene-core-2.3.3.4/src/ext/boost/memory_order.hpp --- clucene-core-0.9.21b/src/ext/boost/memory_order.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/memory_order.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,53 @@ +#ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED +#define BOOST_MEMORY_ORDER_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// boost/memory_order.hpp +// +// Defines enum boost::memory_order per the C++0x working draft +// +// Copyright (c) 2008, 2009 Peter Dimov +// +// 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) + + +namespace boost +{ + +// +// Enum values are chosen so that code that needs to insert +// a trailing fence for acquire semantics can use a single +// test such as: +// +// if( mo & memory_order_acquire ) { ...fence... } +// +// For leading fences one can use: +// +// if( mo & memory_order_release ) { ...fence... } +// +// Architectures such as Alpha that need a fence on consume +// can use: +// +// if( mo & ( memory_order_acquire | memory_order_consume ) ) { ...fence... } +// + +enum memory_order +{ + memory_order_relaxed = 0, + memory_order_acquire = 1, + memory_order_release = 2, + memory_order_acq_rel = 3, // acquire | release + memory_order_seq_cst = 7, // acq_rel | 4 + memory_order_consume = 8 +}; + +} // namespace boost + +#endif // #ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/shared_ptr.hpp clucene-core-2.3.3.4/src/ext/boost/shared_ptr.hpp --- clucene-core-0.9.21b/src/ext/boost/shared_ptr.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/shared_ptr.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,19 @@ +#ifndef BOOST_SHARED_PTR_HPP_INCLUDED +#define BOOST_SHARED_PTR_HPP_INCLUDED + +// +// shared_ptr.hpp +// +// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. +// Copyright (c) 2001-2008 Peter Dimov +// +// 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) +// +// See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation. +// + +#include + +#endif // #ifndef BOOST_SHARED_PTR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/bad_weak_ptr.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/bad_weak_ptr.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/bad_weak_ptr.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/bad_weak_ptr.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,59 @@ +#ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/smart_ptr/bad_weak_ptr.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// +// 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) +// + +#include + +#ifdef __BORLANDC__ +# pragma warn -8026 // Functions with excep. spec. are not expanded inline +#endif + +namespace boost +{ + +// The standard library that comes with Borland C++ 5.5.1, 5.6.4 +// defines std::exception and its members as having C calling +// convention (-pc). When the definition of bad_weak_ptr +// is compiled with -ps, the compiler issues an error. +// Hence, the temporary #pragma option -pc below. + +#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564 +# pragma option push -pc +#endif + +class bad_weak_ptr: public std::exception +{ +public: + + virtual char const * what() const throw() + { + return "tr1::bad_weak_ptr"; + } +}; + +#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564 +# pragma option pop +#endif + +} // namespace boost + +#ifdef __BORLANDC__ +# pragma warn .8026 // Functions with excep. spec. are not expanded inline +#endif + +#endif // #ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_gcc.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_gcc.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_gcc.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_gcc.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,72 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED + +// +// boost/detail/atomic_count_gcc.hpp +// +// atomic_count for GNU libstdc++ v3 +// +// http://gcc.gnu.org/onlinedocs/porting/Thread-safety.html +// +// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2002 Lars Gullik Bjønnes +// Copyright 2003-2005 Peter Dimov +// +// 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) +// + +#if __GNUC__ * 100 + __GNUC_MINOR__ >= 402 +# include +#else +# include +#endif + +namespace boost +{ + +namespace detail +{ + +#if defined(__GLIBCXX__) // g++ 3.4+ + +using __gnu_cxx::__atomic_add; +using __gnu_cxx::__exchange_and_add; + +#endif + +class atomic_count +{ +public: + + explicit atomic_count( long v ) : value_( v ) {} + + long operator++() + { + return __exchange_and_add( &value_, +1 ) + 1; + } + + long operator--() + { + return __exchange_and_add( &value_, -1 ) - 1; + } + + operator long() const + { + return __exchange_and_add( &value_, 0 ); + } + +private: + + atomic_count(atomic_count const &); + atomic_count & operator=(atomic_count const &); + + mutable _Atomic_word value_; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,77 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED + +// +// boost/detail/atomic_count_gcc_x86.hpp +// +// atomic_count for g++ on 486+/AMD64 +// +// Copyright 2007 Peter Dimov +// +// 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) +// + +namespace boost +{ + +namespace detail +{ + +class atomic_count +{ +public: + + explicit atomic_count( long v ) : value_( static_cast< int >( v ) ) {} + + long operator++() + { + return atomic_exchange_and_add( &value_, +1 ) + 1; + } + + long operator--() + { + return atomic_exchange_and_add( &value_, -1 ) - 1; + } + + operator long() const + { + return atomic_exchange_and_add( &value_, 0 ); + } + +private: + + atomic_count(atomic_count const &); + atomic_count & operator=(atomic_count const &); + + mutable int value_; + +private: + + static int atomic_exchange_and_add( int * pw, int dv ) + { + // int r = *pw; + // *pw += dv; + // return r; + + int r; + + __asm__ __volatile__ + ( + "lock\n\t" + "xadd %1, %0": + "+m"( *pw ), "=r"( r ): // outputs (%0, %1) + "1"( dv ): // inputs (%2 == %1) + "memory", "cc" // clobbers + ); + + return r; + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_GCC_X86_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,119 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/atomic_count.hpp - thread/SMP safe reference counter +// +// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. +// +// 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) +// +// typedef boost::detail::atomic_count; +// +// atomic_count a(n); +// +// (n is convertible to long) +// +// Effects: Constructs an atomic_count with an initial value of n +// +// a; +// +// Returns: (long) the current value of a +// +// ++a; +// +// Effects: Atomically increments the value of a +// Returns: (long) the new value of a +// +// --a; +// +// Effects: Atomically decrements the value of a +// Returns: (long) the new value of a +// +// Important note: when --a returns zero, it must act as a +// read memory barrier (RMB); i.e. the calling thread must +// have a synchronized view of the memory +// +// On Intel IA-32 (x86) memory is always synchronized, so this +// is not a problem. +// +// On many architectures the atomic instructions already act as +// a memory barrier. +// +// This property is necessary for proper reference counting, since +// a thread can update the contents of a shared object, then +// release its reference, and another thread may immediately +// release the last reference causing object destruction. +// +// The destructor needs to have a synchronized view of the +// object to perform proper cleanup. +// +// Original example by Alexander Terekhov: +// +// Given: +// +// - a mutable shared object OBJ; +// - two threads THREAD1 and THREAD2 each holding +// a private smart_ptr object pointing to that OBJ. +// +// t1: THREAD1 updates OBJ (thread-safe via some synchronization) +// and a few cycles later (after "unlock") destroys smart_ptr; +// +// t2: THREAD2 destroys smart_ptr WITHOUT doing any synchronization +// with respect to shared mutable object OBJ; OBJ destructors +// are called driven by smart_ptr interface... +// + +#include +#include + +#ifndef BOOST_HAS_THREADS + +namespace boost +{ + +namespace detail +{ + +typedef long atomic_count; + +} + +} + +#elif defined(BOOST_AC_USE_PTHREADS) +# include + +#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) +# include + +#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# include + +#elif defined( BOOST_SP_HAS_SYNC ) +# include + +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +# include + +#elif defined(BOOST_HAS_PTHREADS) + +# define BOOST_AC_USE_PTHREADS +# include + +#else + +// Use #define BOOST_DISABLE_THREADS to avoid the error +#error Unrecognized threading platform + +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_pthreads.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_pthreads.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_pthreads.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_pthreads.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,96 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED + +// +// boost/detail/atomic_count_pthreads.hpp +// +// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. +// +// 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) +// + +#include + +// +// The generic pthread_mutex-based implementation sometimes leads to +// inefficiencies. Example: a class with two atomic_count members +// can get away with a single mutex. +// +// Users can detect this situation by checking BOOST_AC_USE_PTHREADS. +// + +namespace boost +{ + +namespace detail +{ + +class atomic_count +{ +private: + + class scoped_lock + { + public: + + scoped_lock(pthread_mutex_t & m): m_(m) + { + pthread_mutex_lock(&m_); + } + + ~scoped_lock() + { + pthread_mutex_unlock(&m_); + } + + private: + + pthread_mutex_t & m_; + }; + +public: + + explicit atomic_count(long v): value_(v) + { + pthread_mutex_init(&mutex_, 0); + } + + ~atomic_count() + { + pthread_mutex_destroy(&mutex_); + } + + long operator++() + { + scoped_lock lock(mutex_); + return ++value_; + } + + long operator--() + { + scoped_lock lock(mutex_); + return --value_; + } + + operator long() const + { + scoped_lock lock(mutex_); + return value_; + } + +private: + + atomic_count(atomic_count const &); + atomic_count & operator=(atomic_count const &); + + mutable pthread_mutex_t mutex_; + long value_; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_solaris.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_solaris.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_solaris.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_solaris.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,59 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED + +// +// boost/detail/atomic_count_solaris.hpp +// based on: boost/detail/atomic_count_win32.hpp +// +// Copyright (c) 2001-2005 Peter Dimov +// Copyright (c) 2006 Michael van der Westhuizen +// +// 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) +// + +#include + +namespace boost +{ + +namespace detail +{ + +class atomic_count +{ +public: + + explicit atomic_count( uint32_t v ): value_( v ) + { + } + + long operator++() + { + return atomic_inc_32_nv( &value_ ); + } + + long operator--() + { + return atomic_dec_32_nv( &value_ ); + } + + operator uint32_t() const + { + return static_cast( value_ ); + } + +private: + + atomic_count( atomic_count const & ); + atomic_count & operator=( atomic_count const & ); + + uint32_t value_; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SOLARIS_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_sync.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_sync.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_sync.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_sync.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,61 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED + +// +// boost/detail/atomic_count_sync.hpp +// +// atomic_count for g++ 4.1+ +// +// http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html +// +// Copyright 2007 Peter Dimov +// +// 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) +// + +#if defined( __ia64__ ) && defined( __INTEL_COMPILER ) +# include +#endif + +namespace boost +{ + +namespace detail +{ + +class atomic_count +{ +public: + + explicit atomic_count( long v ) : value_( v ) {} + + long operator++() + { + return __sync_add_and_fetch( &value_, 1 ); + } + + long operator--() + { + return __sync_add_and_fetch( &value_, -1 ); + } + + operator long() const + { + return __sync_fetch_and_add( &value_, 0 ); + } + +private: + + atomic_count(atomic_count const &); + atomic_count & operator=(atomic_count const &); + + mutable long value_; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_SYNC_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_win32.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_win32.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/atomic_count_win32.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/atomic_count_win32.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,63 @@ +#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/atomic_count_win32.hpp +// +// Copyright (c) 2001-2005 Peter Dimov +// +// 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) +// + +#include + +namespace boost +{ + +namespace detail +{ + +class atomic_count +{ +public: + + explicit atomic_count( long v ): value_( v ) + { + } + + long operator++() + { + return BOOST_INTERLOCKED_INCREMENT( &value_ ); + } + + long operator--() + { + return BOOST_INTERLOCKED_DECREMENT( &value_ ); + } + + operator long() const + { + return static_cast( value_ ); + } + +private: + + atomic_count( atomic_count const & ); + atomic_count & operator=( atomic_count const & ); + + long value_; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/lightweight_mutex.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/lightweight_mutex.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/lightweight_mutex.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/lightweight_mutex.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,42 @@ +#ifndef BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/lightweight_mutex.hpp - lightweight mutex +// +// Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd. +// +// 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) +// +// typedef boost::detail::lightweight_mutex; +// +// boost::detail::lightweight_mutex is a header-only implementation of +// a subset of the Mutex concept requirements: +// +// http://www.boost.org/doc/html/threads/concepts.html#threads.concepts.Mutex +// +// It maps to a CRITICAL_SECTION on Windows or a pthread_mutex on POSIX. +// + +#include + +#if !defined(BOOST_HAS_THREADS) +# include +#elif defined(BOOST_HAS_PTHREADS) +# include +#elif defined(BOOST_HAS_WINTHREADS) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# include +#else +// Use #define BOOST_DISABLE_THREADS to avoid the error +# error Unrecognized threading platform +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/lwm_nop.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/lwm_nop.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/lwm_nop.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/lwm_nop.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,37 @@ +#ifndef BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/lwm_nop.hpp +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// +// 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) +// + +namespace boost +{ + +namespace detail +{ + +class lightweight_mutex +{ +public: + + typedef lightweight_mutex scoped_lock; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/lwm_pthreads.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/lwm_pthreads.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/lwm_pthreads.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/lwm_pthreads.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,87 @@ +#ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/lwm_pthreads.hpp +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// +// 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) +// + +#include +#include + +namespace boost +{ + +namespace detail +{ + +class lightweight_mutex +{ +private: + + pthread_mutex_t m_; + + lightweight_mutex(lightweight_mutex const &); + lightweight_mutex & operator=(lightweight_mutex const &); + +public: + + lightweight_mutex() + { + +// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init + +#if defined(__hpux) && defined(_DECTHREADS_) + BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 ); +#else + BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 ); +#endif + } + + ~lightweight_mutex() + { + BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 ); + } + + class scoped_lock; + friend class scoped_lock; + + class scoped_lock + { + private: + + pthread_mutex_t & m_; + + scoped_lock(scoped_lock const &); + scoped_lock & operator=(scoped_lock const &); + + public: + + scoped_lock(lightweight_mutex & m): m_(m.m_) + { + BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 ); + } + + ~scoped_lock() + { + BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 ); + } + }; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/lwm_win32_cs.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/lwm_win32_cs.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/lwm_win32_cs.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/lwm_win32_cs.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,108 @@ +#ifndef BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/lwm_win32_cs.hpp +// +// Copyright (c) 2002, 2003 Peter Dimov +// +// 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) +// + +#ifdef BOOST_USE_WINDOWS_H +# include +#endif + +namespace boost +{ + +namespace detail +{ + +#ifndef BOOST_USE_WINDOWS_H + +struct critical_section +{ + struct critical_section_debug * DebugInfo; + long LockCount; + long RecursionCount; + void * OwningThread; + void * LockSemaphore; +#if defined(_WIN64) + unsigned __int64 SpinCount; +#else + unsigned long SpinCount; +#endif +}; + +extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *); +extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *); +extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *); +extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *); + +#else + +typedef ::CRITICAL_SECTION critical_section; + +#endif // #ifndef BOOST_USE_WINDOWS_H + +class lightweight_mutex +{ +private: + + critical_section cs_; + + lightweight_mutex(lightweight_mutex const &); + lightweight_mutex & operator=(lightweight_mutex const &); + +public: + + lightweight_mutex() + { + InitializeCriticalSection(&cs_); + } + + ~lightweight_mutex() + { + DeleteCriticalSection(&cs_); + } + + class scoped_lock; + friend class scoped_lock; + + class scoped_lock + { + private: + + lightweight_mutex & m_; + + scoped_lock(scoped_lock const &); + scoped_lock & operator=(scoped_lock const &); + + public: + + explicit scoped_lock(lightweight_mutex & m): m_(m) + { + EnterCriticalSection(&m_.cs_); + } + + ~scoped_lock() + { + LeaveCriticalSection(&m_.cs_); + } + }; +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/operator_bool.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/operator_bool.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/operator_bool.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/operator_bool.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,56 @@ +// This header intentionally has no include guards. +// +// Copyright (c) 2001-2009 Peter Dimov +// +// 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 + +#if ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570) ) || defined(__CINT__) + + operator bool () const + { + return px != 0; + } + +#elif defined( _MANAGED ) + + static void unspecified_bool( this_type*** ) + { + } + + typedef void (*unspecified_bool_type)( this_type*** ); + + operator unspecified_bool_type() const // never throws + { + return px == 0? 0: unspecified_bool; + } + +#elif \ + ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \ + ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \ + ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) ) + + typedef T * (this_type::*unspecified_bool_type)() const; + + operator unspecified_bool_type() const // never throws + { + return px == 0? 0: &this_type::get; + } + +#else + + typedef T * this_type::*unspecified_bool_type; + + operator unspecified_bool_type() const // never throws + { + return px == 0? 0: &this_type::px; + } + +#endif + + // operator! is redundant, but some compilers need it + bool operator! () const // never throws + { + return px == 0; + } diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/quick_allocator.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/quick_allocator.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/quick_allocator.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/quick_allocator.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,199 @@ +#ifndef BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/quick_allocator.hpp +// +// Copyright (c) 2003 David Abrahams +// Copyright (c) 2003 Peter Dimov +// +// 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) +// + +#include + +#include +#include +#include + +#include // ::operator new, ::operator delete +#include // std::size_t + +namespace boost +{ + +namespace detail +{ + +template union freeblock +{ + typedef typename boost::type_with_alignment::type aligner_type; + aligner_type aligner; + char bytes[size]; + freeblock * next; +}; + +template struct allocator_impl +{ + typedef freeblock block; + + // It may seem odd to use such small pages. + // + // However, on a typical Windows implementation that uses + // the OS allocator, "normal size" pages interact with the + // "ordinary" operator new, slowing it down dramatically. + // + // 512 byte pages are handled by the small object allocator, + // and don't interfere with ::new. + // + // The other alternative is to use much bigger pages (1M.) + // + // It is surprisingly easy to hit pathological behavior by + // varying the page size. g++ 2.96 on Red Hat Linux 7.2, + // for example, passionately dislikes 496. 512 seems OK. + +#if defined(BOOST_QA_PAGE_SIZE) + + enum { items_per_page = BOOST_QA_PAGE_SIZE / size }; + +#else + + enum { items_per_page = 512 / size }; // 1048560 / size + +#endif + +#ifdef BOOST_HAS_THREADS + + static lightweight_mutex & mutex() + { + static freeblock< sizeof( lightweight_mutex ), boost::alignment_of< lightweight_mutex >::value > fbm; + static lightweight_mutex * pm = new( &fbm ) lightweight_mutex; + return *pm; + } + + static lightweight_mutex * mutex_init; + +#endif + + static block * free; + static block * page; + static unsigned last; + + static inline void * alloc() + { +#ifdef BOOST_HAS_THREADS + lightweight_mutex::scoped_lock lock( mutex() ); +#endif + if(block * x = free) + { + free = x->next; + return x; + } + else + { + if(last == items_per_page) + { + // "Listen to me carefully: there is no memory leak" + // -- Scott Meyers, Eff C++ 2nd Ed Item 10 + page = ::new block[items_per_page]; + last = 0; + } + + return &page[last++]; + } + } + + static inline void * alloc(std::size_t n) + { + if(n != size) // class-specific new called for a derived object + { + return ::operator new(n); + } + else + { +#ifdef BOOST_HAS_THREADS + lightweight_mutex::scoped_lock lock( mutex() ); +#endif + if(block * x = free) + { + free = x->next; + return x; + } + else + { + if(last == items_per_page) + { + page = ::new block[items_per_page]; + last = 0; + } + + return &page[last++]; + } + } + } + + static inline void dealloc(void * pv) + { + if(pv != 0) // 18.4.1.1/13 + { +#ifdef BOOST_HAS_THREADS + lightweight_mutex::scoped_lock lock( mutex() ); +#endif + block * pb = static_cast(pv); + pb->next = free; + free = pb; + } + } + + static inline void dealloc(void * pv, std::size_t n) + { + if(n != size) // class-specific delete called for a derived object + { + ::operator delete(pv); + } + else if(pv != 0) // 18.4.1.1/13 + { +#ifdef BOOST_HAS_THREADS + lightweight_mutex::scoped_lock lock( mutex() ); +#endif + block * pb = static_cast(pv); + pb->next = free; + free = pb; + } + } +}; + +#ifdef BOOST_HAS_THREADS + +template + lightweight_mutex * allocator_impl::mutex_init = &allocator_impl::mutex(); + +#endif + +template + freeblock * allocator_impl::free = 0; + +template + freeblock * allocator_impl::page = 0; + +template + unsigned allocator_impl::last = allocator_impl::items_per_page; + +template +struct quick_allocator: public allocator_impl< sizeof(T), boost::alignment_of::value > +{ +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/shared_array_nmt.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/shared_array_nmt.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/shared_array_nmt.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/shared_array_nmt.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,151 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED + +// +// detail/shared_array_nmt.hpp - shared_array.hpp without member templates +// +// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. +// Copyright (c) 2001, 2002 Peter Dimov +// +// 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) +// +// See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation. +// + +#include +#include +#include +#include + +#include // for std::ptrdiff_t +#include // for std::swap +#include // for std::less +#include // for std::bad_alloc + +namespace boost +{ + +template class shared_array +{ +private: + + typedef detail::atomic_count count_type; + +public: + + typedef T element_type; + + explicit shared_array(T * p = 0): px(p) + { +#ifndef BOOST_NO_EXCEPTIONS + + try // prevent leak if new throws + { + pn = new count_type(1); + } + catch(...) + { + boost::checked_array_delete(p); + throw; + } + +#else + + pn = new count_type(1); + + if(pn == 0) + { + boost::checked_array_delete(p); + boost::throw_exception(std::bad_alloc()); + } + +#endif + } + + ~shared_array() + { + if(--*pn == 0) + { + boost::checked_array_delete(px); + delete pn; + } + } + + shared_array(shared_array const & r) : px(r.px) // never throws + { + pn = r.pn; + ++*pn; + } + + shared_array & operator=(shared_array const & r) + { + shared_array(r).swap(*this); + return *this; + } + + void reset(T * p = 0) + { + BOOST_ASSERT(p == 0 || p != px); + shared_array(p).swap(*this); + } + + T * get() const // never throws + { + return px; + } + + T & operator[](std::ptrdiff_t i) const // never throws + { + BOOST_ASSERT(px != 0); + BOOST_ASSERT(i >= 0); + return px[i]; + } + + long use_count() const // never throws + { + return *pn; + } + + bool unique() const // never throws + { + return *pn == 1; + } + + void swap(shared_array & other) // never throws + { + std::swap(px, other.px); + std::swap(pn, other.pn); + } + +private: + + T * px; // contained pointer + count_type * pn; // ptr to reference counter + +}; // shared_array + +template inline bool operator==(shared_array const & a, shared_array const & b) +{ + return a.get() == b.get(); +} + +template inline bool operator!=(shared_array const & a, shared_array const & b) +{ + return a.get() != b.get(); +} + +template inline bool operator<(shared_array const & a, shared_array const & b) +{ + return std::less()(a.get(), b.get()); +} + +template void swap(shared_array & a, shared_array & b) +{ + a.swap(b); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/shared_count.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/shared_count.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/shared_count.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/shared_count.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,444 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/shared_count.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// +// 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) +// + +#ifdef __BORLANDC__ +# pragma warn -8027 // Functions containing try are not expanded inline +#endif + +#include +#include +#include +#include +#include +#include +#include +// In order to avoid circular dependencies with Boost.TR1 +// we make sure that our include of doesn't try to +// pull in the TR1 headers: that's why we use this header +// rather than including directly: +#include // std::auto_ptr +#include // std::less +#include // std::bad_alloc + +namespace boost +{ + +namespace detail +{ + +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + +int const shared_count_id = 0x2C35F101; +int const weak_count_id = 0x298C38A4; + +#endif + +struct sp_nothrow_tag {}; + +class weak_count; + +class shared_count +{ +private: + + sp_counted_base * pi_; + +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + int id_; +#endif + + friend class weak_count; + +public: + + shared_count(): pi_(0) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { + } + + template explicit shared_count( Y * p ): pi_( 0 ) +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { +#ifndef BOOST_NO_EXCEPTIONS + + try + { + pi_ = new sp_counted_impl_p( p ); + } + catch(...) + { + boost::checked_delete( p ); + throw; + } + +#else + + pi_ = new sp_counted_impl_p( p ); + + if( pi_ == 0 ) + { + boost::checked_delete( p ); + boost::throw_exception( std::bad_alloc() ); + } + +#endif + } + +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) + template shared_count( Y * p, D d ): pi_(0) +#else + template shared_count( P p, D d ): pi_(0) +#endif +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) + typedef Y* P; +#endif +#ifndef BOOST_NO_EXCEPTIONS + + try + { + pi_ = new sp_counted_impl_pd(p, d); + } + catch(...) + { + d(p); // delete p + throw; + } + +#else + + pi_ = new sp_counted_impl_pd(p, d); + + if(pi_ == 0) + { + d(p); // delete p + boost::throw_exception(std::bad_alloc()); + } + +#endif + } + + template shared_count( P p, D d, A a ): pi_( 0 ) +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { + typedef sp_counted_impl_pda impl_type; + typedef typename A::template rebind< impl_type >::other A2; + + A2 a2( a ); + +#ifndef BOOST_NO_EXCEPTIONS + + try + { + pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) ); + new( static_cast< void* >( pi_ ) ) impl_type( p, d, a ); + } + catch(...) + { + d( p ); + + if( pi_ != 0 ) + { + a2.deallocate( static_cast< impl_type* >( pi_ ), 1 ); + } + + throw; + } + +#else + + pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) ); + + if( pi_ != 0 ) + { + new( static_cast< void* >( pi_ ) ) impl_type( p, d, a ); + } + else + { + d( p ); + boost::throw_exception( std::bad_alloc() ); + } + +#endif + } + +#ifndef BOOST_NO_AUTO_PTR + + // auto_ptr is special cased to provide the strong guarantee + + template + explicit shared_count( std::auto_ptr & r ): pi_( new sp_counted_impl_p( r.get() ) ) +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { +#ifdef BOOST_NO_EXCEPTIONS + + if( pi_ == 0 ) + { + boost::throw_exception(std::bad_alloc()); + } + +#endif + + r.release(); + } + +#endif + + ~shared_count() // nothrow + { + if( pi_ != 0 ) pi_->release(); +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + id_ = 0; +#endif + } + + shared_count(shared_count const & r): pi_(r.pi_) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { + if( pi_ != 0 ) pi_->add_ref_copy(); + } + +#if defined( BOOST_HAS_RVALUE_REFS ) + + shared_count(shared_count && r): pi_(r.pi_) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif + { + r.pi_ = 0; + } + +#endif + + explicit shared_count(weak_count const & r); // throws bad_weak_ptr when r.use_count() == 0 + shared_count( weak_count const & r, sp_nothrow_tag ); // constructs an empty *this when r.use_count() == 0 + + shared_count & operator= (shared_count const & r) // nothrow + { + sp_counted_base * tmp = r.pi_; + + if( tmp != pi_ ) + { + if( tmp != 0 ) tmp->add_ref_copy(); + if( pi_ != 0 ) pi_->release(); + pi_ = tmp; + } + + return *this; + } + + void swap(shared_count & r) // nothrow + { + sp_counted_base * tmp = r.pi_; + r.pi_ = pi_; + pi_ = tmp; + } + + long use_count() const // nothrow + { + return pi_ != 0? pi_->use_count(): 0; + } + + bool unique() const // nothrow + { + return use_count() == 1; + } + + bool empty() const // nothrow + { + return pi_ == 0; + } + + friend inline bool operator==(shared_count const & a, shared_count const & b) + { + return a.pi_ == b.pi_; + } + + friend inline bool operator<(shared_count const & a, shared_count const & b) + { + return std::less()( a.pi_, b.pi_ ); + } + + void * get_deleter( sp_typeinfo const & ti ) const + { + return pi_? pi_->get_deleter( ti ): 0; + } +}; + + +class weak_count +{ +private: + + sp_counted_base * pi_; + +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + int id_; +#endif + + friend class shared_count; + +public: + + weak_count(): pi_(0) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(weak_count_id) +#endif + { + } + + weak_count(shared_count const & r): pi_(r.pi_) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(weak_count_id) +#endif + { + if(pi_ != 0) pi_->weak_add_ref(); + } + + weak_count(weak_count const & r): pi_(r.pi_) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(weak_count_id) +#endif + { + if(pi_ != 0) pi_->weak_add_ref(); + } + +// Move support + +#if defined( BOOST_HAS_RVALUE_REFS ) + + weak_count(weak_count && r): pi_(r.pi_) // nothrow +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(weak_count_id) +#endif + { + r.pi_ = 0; + } + +#endif + + ~weak_count() // nothrow + { + if(pi_ != 0) pi_->weak_release(); +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + id_ = 0; +#endif + } + + weak_count & operator= (shared_count const & r) // nothrow + { + sp_counted_base * tmp = r.pi_; + + if( tmp != pi_ ) + { + if(tmp != 0) tmp->weak_add_ref(); + if(pi_ != 0) pi_->weak_release(); + pi_ = tmp; + } + + return *this; + } + + weak_count & operator= (weak_count const & r) // nothrow + { + sp_counted_base * tmp = r.pi_; + + if( tmp != pi_ ) + { + if(tmp != 0) tmp->weak_add_ref(); + if(pi_ != 0) pi_->weak_release(); + pi_ = tmp; + } + + return *this; + } + + void swap(weak_count & r) // nothrow + { + sp_counted_base * tmp = r.pi_; + r.pi_ = pi_; + pi_ = tmp; + } + + long use_count() const // nothrow + { + return pi_ != 0? pi_->use_count(): 0; + } + + bool empty() const // nothrow + { + return pi_ == 0; + } + + friend inline bool operator==(weak_count const & a, weak_count const & b) + { + return a.pi_ == b.pi_; + } + + friend inline bool operator<(weak_count const & a, weak_count const & b) + { + return std::less()(a.pi_, b.pi_); + } +}; + +inline shared_count::shared_count( weak_count const & r ): pi_( r.pi_ ) +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif +{ + if( pi_ == 0 || !pi_->add_ref_lock() ) + { + boost::throw_exception( boost::bad_weak_ptr() ); + } +} + +inline shared_count::shared_count( weak_count const & r, sp_nothrow_tag ): pi_( r.pi_ ) +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + , id_(shared_count_id) +#endif +{ + if( pi_ != 0 && !pi_->add_ref_lock() ) + { + pi_ = 0; + } +} + +} // namespace detail + +} // namespace boost + +#ifdef __BORLANDC__ +# pragma warn .8027 // Functions containing try are not expanded inline +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/shared_ptr_nmt.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/shared_ptr_nmt.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/shared_ptr_nmt.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/shared_ptr_nmt.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,182 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED + +// +// detail/shared_ptr_nmt.hpp - shared_ptr.hpp without member templates +// +// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. +// Copyright (c) 2001, 2002 Peter Dimov +// +// 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) +// +// See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation. +// + +#include +#include +#include +#include + +#ifndef BOOST_NO_AUTO_PTR +# include // for std::auto_ptr +#endif + +#include // for std::swap +#include // for std::less +#include // for std::bad_alloc + +namespace boost +{ + +template class shared_ptr +{ +private: + + typedef detail::atomic_count count_type; + +public: + + typedef T element_type; + typedef T value_type; + + explicit shared_ptr(T * p = 0): px(p) + { +#ifndef BOOST_NO_EXCEPTIONS + + try // prevent leak if new throws + { + pn = new count_type(1); + } + catch(...) + { + boost::checked_delete(p); + throw; + } + +#else + + pn = new count_type(1); + + if(pn == 0) + { + boost::checked_delete(p); + boost::throw_exception(std::bad_alloc()); + } + +#endif + } + + ~shared_ptr() + { + if(--*pn == 0) + { + boost::checked_delete(px); + delete pn; + } + } + + shared_ptr(shared_ptr const & r): px(r.px) // never throws + { + pn = r.pn; + ++*pn; + } + + shared_ptr & operator=(shared_ptr const & r) + { + shared_ptr(r).swap(*this); + return *this; + } + +#ifndef BOOST_NO_AUTO_PTR + + explicit shared_ptr(std::auto_ptr & r) + { + pn = new count_type(1); // may throw + px = r.release(); // fix: moved here to stop leak if new throws + } + + shared_ptr & operator=(std::auto_ptr & r) + { + shared_ptr(r).swap(*this); + return *this; + } + +#endif + + void reset(T * p = 0) + { + BOOST_ASSERT(p == 0 || p != px); + shared_ptr(p).swap(*this); + } + + T & operator*() const // never throws + { + BOOST_ASSERT(px != 0); + return *px; + } + + T * operator->() const // never throws + { + BOOST_ASSERT(px != 0); + return px; + } + + T * get() const // never throws + { + return px; + } + + long use_count() const // never throws + { + return *pn; + } + + bool unique() const // never throws + { + return *pn == 1; + } + + void swap(shared_ptr & other) // never throws + { + std::swap(px, other.px); + std::swap(pn, other.pn); + } + +private: + + T * px; // contained pointer + count_type * pn; // ptr to reference counter +}; + +template inline bool operator==(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() == b.get(); +} + +template inline bool operator!=(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() != b.get(); +} + +template inline bool operator<(shared_ptr const & a, shared_ptr const & b) +{ + return std::less()(a.get(), b.get()); +} + +template void swap(shared_ptr & a, shared_ptr & b) +{ + a.swap(b); +} + +// get_pointer() enables boost::mem_fn to recognize shared_ptr + +template inline T * get_pointer(shared_ptr const & p) +{ + return p.get(); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_convertible.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_convertible.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_convertible.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_convertible.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,76 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// detail/sp_convertible.hpp +// +// Copyright 2008 Peter Dimov +// +// 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 + +#include + +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( BOOST_NO_SFINAE ) +# define BOOST_SP_NO_SP_CONVERTIBLE +#endif + +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ < 303 ) +# define BOOST_SP_NO_SP_CONVERTIBLE +#endif + +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __BORLANDC__ ) && ( __BORLANDC__ <= 0x620 ) +# define BOOST_SP_NO_SP_CONVERTIBLE +#endif + +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + +namespace boost +{ + +namespace detail +{ + +template< class Y, class T > struct sp_convertible +{ + typedef char (&yes) [1]; + typedef char (&no) [2]; + + static yes f( T* ); + static no f( ... ); + + enum _vt { value = sizeof( f( static_cast(0) ) ) == sizeof(yes) }; +}; + +struct sp_empty +{ +}; + +template< bool > struct sp_enable_if_convertible_impl; + +template<> struct sp_enable_if_convertible_impl +{ + typedef sp_empty type; +}; + +template<> struct sp_enable_if_convertible_impl +{ +}; + +template< class Y, class T > struct sp_enable_if_convertible: public sp_enable_if_convertible_impl< sp_convertible< Y, T >::value > +{ +}; + +} // namespace detail + +} // namespace boost + +#endif // !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,150 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED + +// +// detail/sp_counted_base_acc_ia64.hpp - aC++ on HP-UX IA64 +// +// Copyright 2007 Baruch Zilber +// Copyright 2007 Boris Gubenko +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// + +#include +#include + +namespace boost +{ + +namespace detail +{ + +inline void atomic_increment( int * pw ) +{ + // ++*pw; + + _Asm_fetchadd(_FASZ_W, _SEM_REL, pw, +1, _LDHINT_NONE); +} + +inline int atomic_decrement( int * pw ) +{ + // return --*pw; + + int r = static_cast(_Asm_fetchadd(_FASZ_W, _SEM_REL, pw, -1, _LDHINT_NONE)); + if (1 == r) + { + _Asm_mf(); + } + + return r - 1; +} + +inline int atomic_conditional_increment( int * pw ) +{ + // if( *pw != 0 ) ++*pw; + // return *pw; + + int v = *pw; + + for (;;) + { + if (0 == v) + { + return 0; + } + + _Asm_mov_to_ar(_AREG_CCV, + v, + (_UP_CALL_FENCE | _UP_SYS_FENCE | _DOWN_CALL_FENCE | _DOWN_SYS_FENCE)); + int r = static_cast(_Asm_cmpxchg(_SZ_W, _SEM_ACQ, pw, v + 1, _LDHINT_NONE)); + if (r == v) + { + return r + 1; + } + + v = r; + } +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int use_count_; // #shared + int weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_decrement( &use_count_ ) == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); // TODO use ld.acq here + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,170 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_cw_ppc.hpp - CodeWarrior on PowerPC +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// +// Thanks to Ben Hitchings for the #weak + (#shared != 0) +// formulation +// + +#include + +namespace boost +{ + +namespace detail +{ + +inline void atomic_increment( register long * pw ) +{ + register int a; + + asm + { +loop: + + lwarx a, 0, pw + addi a, a, 1 + stwcx. a, 0, pw + bne- loop + } +} + +inline long atomic_decrement( register long * pw ) +{ + register int a; + + asm + { + sync + +loop: + + lwarx a, 0, pw + addi a, a, -1 + stwcx. a, 0, pw + bne- loop + + isync + } + + return a; +} + +inline long atomic_conditional_increment( register long * pw ) +{ + register int a; + + asm + { +loop: + + lwarx a, 0, pw + cmpwi a, 0 + beq store + + addi a, a, 1 + +store: + + stwcx. a, 0, pw + bne- loop + } + + return a; +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + long use_count_; // #shared + long weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_decrement( &use_count_ ) == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,158 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_X86_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_X86_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_cw_x86.hpp - CodeWarrion on 486+ +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// Copyright 2005 Rene Rivera +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// +// Thanks to Ben Hitchings for the #weak + (#shared != 0) +// formulation +// + +#include + +namespace boost +{ + +namespace detail +{ + +inline int atomic_exchange_and_add( int * pw, int dv ) +{ + // int r = *pw; + // *pw += dv; + // return r; + + asm + { + mov esi, [pw] + mov eax, dv + lock xadd dword ptr [esi], eax + } +} + +inline void atomic_increment( int * pw ) +{ + //atomic_exchange_and_add( pw, 1 ); + + asm + { + mov esi, [pw] + lock inc dword ptr [esi] + } +} + +inline int atomic_conditional_increment( int * pw ) +{ + // int rv = *pw; + // if( rv != 0 ) ++*pw; + // return rv; + + asm + { + mov esi, [pw] + mov eax, dword ptr [esi] + L0: + test eax, eax + je L1 + mov ebx, eax + inc ebx + lock cmpxchg dword ptr [esi], ebx + jne L0 + L1: + } +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int use_count_; // #shared + int weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_exchange_and_add( &use_count_, -1 ) == 1 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_X86_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,157 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED + +// +// detail/sp_counted_base_gcc_ia64.hpp - g++ on IA64 +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2006 Peter Dimov +// Copyright 2005 Ben Hutchings +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// + +#include + +namespace boost +{ + +namespace detail +{ + +inline void atomic_increment( int * pw ) +{ + // ++*pw; + + int tmp; + + // No barrier is required here but fetchadd always has an acquire or + // release barrier associated with it. We choose release as it should be + // cheaper. + __asm__ ("fetchadd4.rel %0=%1,1" : + "=r"(tmp), "=m"(*pw) : + "m"( *pw )); +} + +inline int atomic_decrement( int * pw ) +{ + // return --*pw; + + int rv; + + __asm__ (" fetchadd4.rel %0=%1,-1 ;; \n" + " cmp.eq p7,p0=1,%0 ;; \n" + "(p7) ld4.acq %0=%1 " : + "=&r"(rv), "=m"(*pw) : + "m"( *pw ) : + "p7"); + + return rv; +} + +inline int atomic_conditional_increment( int * pw ) +{ + // if( *pw != 0 ) ++*pw; + // return *pw; + + int rv, tmp, tmp2; + + __asm__ ("0: ld4 %0=%3 ;; \n" + " cmp.eq p7,p0=0,%0 ;; \n" + "(p7) br.cond.spnt 1f \n" + " mov ar.ccv=%0 \n" + " add %1=1,%0 ;; \n" + " cmpxchg4.acq %2=%3,%1,ar.ccv ;; \n" + " cmp.ne p7,p0=%0,%2 ;; \n" + "(p7) br.cond.spnt 0b \n" + " mov %0=%1 ;; \n" + "1:" : + "=&r"(rv), "=&r"(tmp), "=&r"(tmp2), "=m"(*pw) : + "m"( *pw ) : + "ar.ccv", "p7"); + + return rv; +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int use_count_; // #shared + int weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_decrement( &use_count_ ) == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); // TODO use ld.acq here + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,172 @@ +#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED +#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_gcc_mips.hpp - g++ on MIPS +// +// Copyright (c) 2009, Spirent Communications, Inc. +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// + +#include + +namespace boost +{ + +namespace detail +{ + +inline void atomic_increment( int * pw ) +{ + // ++*pw; + + int tmp; + + __asm__ __volatile__ + ( + "0:\n\t" + "ll %0, %1\n\t" + "addiu %0, 1\n\t" + "sc %0, %1\n\t" + "beqz %0, 0b": + "=&r"( tmp ), "=m"( *pw ): + "m"( *pw ) + ); +} + +inline int atomic_decrement( int * pw ) +{ + // return --*pw; + + int rv, tmp; + + __asm__ __volatile__ + ( + "0:\n\t" + "ll %1, %2\n\t" + "addiu %0, %1, -1\n\t" + "sc %0, %2\n\t" + "beqz %0, 0b\n\t" + "addiu %0, %1, -1": + "=&r"( rv ), "=&r"( tmp ), "=m"( *pw ): + "m"( *pw ): + "memory" + ); + + return rv; +} + +inline int atomic_conditional_increment( int * pw ) +{ + // if( *pw != 0 ) ++*pw; + // return *pw; + + int rv, tmp; + + __asm__ __volatile__ + ( + "0:\n\t" + "ll %0, %2\n\t" + "beqz %0, 1f\n\t" + "addiu %1, %0, 1\n\t" + "sc %1, %2\n\t" + "beqz %1, 0b\n\t" + "addiu %0, %0, 1\n\t" + "1:": + "=&r"( rv ), "=&r"( tmp ), "=m"( *pw ): + "m"( *pw ): + "memory" + ); + + return rv; +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int use_count_; // #shared + int weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_decrement( &use_count_ ) == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,181 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_gcc_ppc.hpp - g++ on PowerPC +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// +// Thanks to Ben Hitchings for the #weak + (#shared != 0) +// formulation +// + +#include + +namespace boost +{ + +namespace detail +{ + +inline void atomic_increment( int * pw ) +{ + // ++*pw; + + int tmp; + + __asm__ + ( + "0:\n\t" + "lwarx %1, 0, %2\n\t" + "addi %1, %1, 1\n\t" + "stwcx. %1, 0, %2\n\t" + "bne- 0b": + + "=m"( *pw ), "=&b"( tmp ): + "r"( pw ), "m"( *pw ): + "cc" + ); +} + +inline int atomic_decrement( int * pw ) +{ + // return --*pw; + + int rv; + + __asm__ __volatile__ + ( + "sync\n\t" + "0:\n\t" + "lwarx %1, 0, %2\n\t" + "addi %1, %1, -1\n\t" + "stwcx. %1, 0, %2\n\t" + "bne- 0b\n\t" + "isync": + + "=m"( *pw ), "=&b"( rv ): + "r"( pw ), "m"( *pw ): + "memory", "cc" + ); + + return rv; +} + +inline int atomic_conditional_increment( int * pw ) +{ + // if( *pw != 0 ) ++*pw; + // return *pw; + + int rv; + + __asm__ + ( + "0:\n\t" + "lwarx %1, 0, %2\n\t" + "cmpwi %1, 0\n\t" + "beq 1f\n\t" + "addi %1, %1, 1\n\t" + "1:\n\t" + "stwcx. %1, 0, %2\n\t" + "bne- 0b": + + "=m"( *pw ), "=&b"( rv ): + "r"( pw ), "m"( *pw ): + "cc" + ); + + return rv; +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int use_count_; // #shared + int weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_decrement( &use_count_ ) == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,166 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// detail/sp_counted_base_gcc_sparc.hpp - g++ on Sparc V8+ +// +// Copyright (c) 2006 Piotr Wyderski +// Copyright (c) 2006 Tomas Puverle +// Copyright (c) 2006 Peter Dimov +// +// 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 +// +// Thanks to Michael van der Westhuizen + +#include +#include // int32_t + +namespace boost +{ + +namespace detail +{ + +inline int32_t compare_and_swap( int32_t * dest_, int32_t compare_, int32_t swap_ ) +{ + __asm__ __volatile__( "cas [%1], %2, %0" + : "+r" (swap_) + : "r" (dest_), "r" (compare_) + : "memory" ); + + return swap_; +} + +inline int32_t atomic_fetch_and_add( int32_t * pw, int32_t dv ) +{ + // long r = *pw; + // *pw += dv; + // return r; + + for( ;; ) + { + int32_t r = *pw; + + if( __builtin_expect((compare_and_swap(pw, r, r + dv) == r), 1) ) + { + return r; + } + } +} + +inline void atomic_increment( int32_t * pw ) +{ + atomic_fetch_and_add( pw, 1 ); +} + +inline int32_t atomic_decrement( int32_t * pw ) +{ + return atomic_fetch_and_add( pw, -1 ); +} + +inline int32_t atomic_conditional_increment( int32_t * pw ) +{ + // long r = *pw; + // if( r != 0 ) ++*pw; + // return r; + + for( ;; ) + { + int32_t r = *pw; + + if( r == 0 ) + { + return r; + } + + if( __builtin_expect( ( compare_and_swap( pw, r, r + 1 ) == r ), 1 ) ) + { + return r; + } + } +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int32_t use_count_; // #shared + int32_t weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_decrement( &use_count_ ) == 1 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 1 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return const_cast< int32_t const volatile & >( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,173 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_gcc_x86.hpp - g++ on 486+ or AMD64 +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// +// Thanks to Ben Hitchings for the #weak + (#shared != 0) +// formulation +// + +#include + +namespace boost +{ + +namespace detail +{ + +inline int atomic_exchange_and_add( int * pw, int dv ) +{ + // int r = *pw; + // *pw += dv; + // return r; + + int r; + + __asm__ __volatile__ + ( + "lock\n\t" + "xadd %1, %0": + "=m"( *pw ), "=r"( r ): // outputs (%0, %1) + "m"( *pw ), "1"( dv ): // inputs (%2, %3 == %1) + "memory", "cc" // clobbers + ); + + return r; +} + +inline void atomic_increment( int * pw ) +{ + //atomic_exchange_and_add( pw, 1 ); + + __asm__ + ( + "lock\n\t" + "incl %0": + "=m"( *pw ): // output (%0) + "m"( *pw ): // input (%1) + "cc" // clobbers + ); +} + +inline int atomic_conditional_increment( int * pw ) +{ + // int rv = *pw; + // if( rv != 0 ) ++*pw; + // return rv; + + int rv, tmp; + + __asm__ + ( + "movl %0, %%eax\n\t" + "0:\n\t" + "test %%eax, %%eax\n\t" + "je 1f\n\t" + "movl %%eax, %2\n\t" + "incl %2\n\t" + "lock\n\t" + "cmpxchgl %2, %0\n\t" + "jne 0b\n\t" + "1:": + "=m"( *pw ), "=&a"( rv ), "=&r"( tmp ): // outputs (%0, %1, %2) + "m"( *pw ): // input (%3) + "cc" // clobbers + ); + + return rv; +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int use_count_; // #shared + int weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_exchange_and_add( &use_count_, -1 ) == 1 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,70 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base.hpp +// +// Copyright 2005, 2006 Peter Dimov +// +// 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) +// + +#include +#include + +#if defined( BOOST_SP_DISABLE_THREADS ) +# include + +#elif defined( BOOST_SP_USE_SPINLOCK ) +# include + +#elif defined( BOOST_SP_USE_PTHREADS ) +# include + +#elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 ) +# include + +#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) +# include + +#elif defined( __GNUC__ ) && defined( __ia64__ ) && !defined( __INTEL_COMPILER ) +# include + +#elif defined(__HP_aCC) && defined(__ia64) +# include + +#elif defined( __MWERKS__ ) && defined( __POWERPC__ ) +# include + +#elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc ) ) +# include + +#elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) ) +# include + +#elif defined( BOOST_SP_HAS_SYNC ) +# include + +#elif defined(__GNUC__) && ( defined( __sparcv9 ) || ( defined( __sparcv8 ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 402 ) ) ) +# include + +#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__) +# include + +#elif !defined( BOOST_HAS_THREADS ) +# include + +#else +# include + +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,107 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_nt.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// +// 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) +// + +#include + +namespace boost +{ + +namespace detail +{ + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + long use_count_; // #shared + long weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + ++use_count_; + } + + bool add_ref_lock() // true on success + { + if( use_count_ == 0 ) return false; + ++use_count_; + return true; + } + + void release() // nothrow + { + if( --use_count_ == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + ++weak_count_; + } + + void weak_release() // nothrow + { + if( --weak_count_ == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return use_count_; + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,135 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_pt.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// +// 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) +// + +#include +#include + +namespace boost +{ + +namespace detail +{ + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + long use_count_; // #shared + long weak_count_; // #weak + (#shared != 0) + + mutable pthread_mutex_t m_; + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { +// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init + +#if defined(__hpux) && defined(_DECTHREADS_) + pthread_mutex_init( &m_, pthread_mutexattr_default ); +#else + pthread_mutex_init( &m_, 0 ); +#endif + } + + virtual ~sp_counted_base() // nothrow + { + pthread_mutex_destroy( &m_ ); + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + pthread_mutex_lock( &m_ ); + ++use_count_; + pthread_mutex_unlock( &m_ ); + } + + bool add_ref_lock() // true on success + { + pthread_mutex_lock( &m_ ); + bool r = use_count_ == 0? false: ( ++use_count_, true ); + pthread_mutex_unlock( &m_ ); + return r; + } + + void release() // nothrow + { + pthread_mutex_lock( &m_ ); + long new_use_count = --use_count_; + pthread_mutex_unlock( &m_ ); + + if( new_use_count == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + pthread_mutex_lock( &m_ ); + ++weak_count_; + pthread_mutex_unlock( &m_ ); + } + + void weak_release() // nothrow + { + pthread_mutex_lock( &m_ ); + long new_weak_count = --weak_count_; + pthread_mutex_unlock( &m_ ); + + if( new_weak_count == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + pthread_mutex_lock( &m_ ); + long r = use_count_; + pthread_mutex_unlock( &m_ ); + + return r; + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,113 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SOLARIS_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SOLARIS_HPP_INCLUDED + +// +// detail/sp_counted_base_solaris.hpp +// based on: detail/sp_counted_base_w32.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// Copyright 2006 Michael van der Westhuizen +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// +// Thanks to Ben Hitchings for the #weak + (#shared != 0) +// formulation +// + +#include +#include + +namespace boost +{ + +namespace detail +{ + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + uint32_t use_count_; // #shared + uint32_t weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_inc_32( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + for( ;; ) + { + uint32_t tmp = static_cast< uint32_t const volatile& >( use_count_ ); + if( tmp == 0 ) return false; + if( atomic_cas_32( &use_count_, tmp, tmp + 1 ) == tmp ) return true; + } + } + + void release() // nothrow + { + if( atomic_dec_32_nv( &use_count_ ) == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_inc_32( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_dec_32_nv( &weak_count_ ) == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SOLARIS_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,131 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_spin.hpp - spinlock pool atomic emulation +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2008 Peter Dimov +// +// 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) +// + +#include +#include + +namespace boost +{ + +namespace detail +{ + +inline int atomic_exchange_and_add( int * pw, int dv ) +{ + spinlock_pool<1>::scoped_lock lock( pw ); + + int r = *pw; + *pw += dv; + return r; +} + +inline void atomic_increment( int * pw ) +{ + spinlock_pool<1>::scoped_lock lock( pw ); + ++*pw; +} + +inline int atomic_conditional_increment( int * pw ) +{ + spinlock_pool<1>::scoped_lock lock( pw ); + + int rv = *pw; + if( rv != 0 ) ++*pw; + return rv; +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + int use_count_; // #shared + int weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_exchange_and_add( &use_count_, -1 ) == 1 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + spinlock_pool<1>::scoped_lock lock( &use_count_ ); + return use_count_; + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,155 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// detail/sp_counted_base_sync.hpp - g++ 4.1+ __sync intrinsics +// +// Copyright (c) 2007 Peter Dimov +// +// 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 + +#include +#include + +#if defined( __ia64__ ) && defined( __INTEL_COMPILER ) +# include +#endif + +namespace boost +{ + +namespace detail +{ + +#if INT_MAX >= 2147483647 + +typedef int sp_int32_t; + +#else + +typedef long sp_int32_t; + +#endif + +inline void atomic_increment( sp_int32_t * pw ) +{ + __sync_fetch_and_add( pw, 1 ); +} + +inline sp_int32_t atomic_decrement( sp_int32_t * pw ) +{ + return __sync_fetch_and_add( pw, -1 ); +} + +inline sp_int32_t atomic_conditional_increment( sp_int32_t * pw ) +{ + // long r = *pw; + // if( r != 0 ) ++*pw; + // return r; + + sp_int32_t r = *pw; + + for( ;; ) + { + if( r == 0 ) + { + return r; + } + + sp_int32_t r2 = __sync_val_compare_and_swap( pw, r, r + 1 ); + + if( r2 == r ) + { + return r; + } + else + { + r = r2; + } + } +} + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + sp_int32_t use_count_; // #shared + sp_int32_t weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + atomic_increment( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + return atomic_conditional_increment( &use_count_ ) != 0; + } + + void release() // nothrow + { + if( atomic_decrement( &use_count_ ) == 1 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + atomic_increment( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( atomic_decrement( &weak_count_ ) == 1 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return const_cast< sp_int32_t const volatile & >( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_w32.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_w32.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_base_w32.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_base_w32.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,130 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_base_w32.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// +// 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) +// +// +// Lock-free algorithm by Alexander Terekhov +// +// Thanks to Ben Hitchings for the #weak + (#shared != 0) +// formulation +// + +#include +#include +#include + +namespace boost +{ + +namespace detail +{ + +class sp_counted_base +{ +private: + + sp_counted_base( sp_counted_base const & ); + sp_counted_base & operator= ( sp_counted_base const & ); + + long use_count_; // #shared + long weak_count_; // #weak + (#shared != 0) + +public: + + sp_counted_base(): use_count_( 1 ), weak_count_( 1 ) + { + } + + virtual ~sp_counted_base() // nothrow + { + } + + // dispose() is called when use_count_ drops to zero, to release + // the resources managed by *this. + + virtual void dispose() = 0; // nothrow + + // destroy() is called when weak_count_ drops to zero. + + virtual void destroy() // nothrow + { + delete this; + } + + virtual void * get_deleter( sp_typeinfo const & ti ) = 0; + + void add_ref_copy() + { + BOOST_INTERLOCKED_INCREMENT( &use_count_ ); + } + + bool add_ref_lock() // true on success + { + for( ;; ) + { + long tmp = static_cast< long const volatile& >( use_count_ ); + if( tmp == 0 ) return false; + +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1200 ) + + // work around a code generation bug + + long tmp2 = tmp + 1; + if( BOOST_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp2, tmp ) == tmp2 - 1 ) return true; + +#else + + if( BOOST_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp + 1, tmp ) == tmp ) return true; + +#endif + } + } + + void release() // nothrow + { + if( BOOST_INTERLOCKED_DECREMENT( &use_count_ ) == 0 ) + { + dispose(); + weak_release(); + } + } + + void weak_add_ref() // nothrow + { + BOOST_INTERLOCKED_INCREMENT( &weak_count_ ); + } + + void weak_release() // nothrow + { + if( BOOST_INTERLOCKED_DECREMENT( &weak_count_ ) == 0 ) + { + destroy(); + } + } + + long use_count() const // nothrow + { + return static_cast( use_count_ ); + } +}; + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_impl.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_impl.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_counted_impl.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_counted_impl.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,231 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// detail/sp_counted_impl.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. +// Copyright 2004-2005 Peter Dimov +// +// 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) +// + +#include + +#if defined(BOOST_SP_USE_STD_ALLOCATOR) && defined(BOOST_SP_USE_QUICK_ALLOCATOR) +# error BOOST_SP_USE_STD_ALLOCATOR and BOOST_SP_USE_QUICK_ALLOCATOR are incompatible. +#endif + +#include +#include + +#if defined(BOOST_SP_USE_QUICK_ALLOCATOR) +#include +#endif + +#if defined(BOOST_SP_USE_STD_ALLOCATOR) +#include // std::allocator +#endif + +#include // std::size_t + +namespace boost +{ + +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + +void sp_scalar_constructor_hook( void * px, std::size_t size, void * pn ); +void sp_scalar_destructor_hook( void * px, std::size_t size, void * pn ); + +#endif + +namespace detail +{ + +template class sp_counted_impl_p: public sp_counted_base +{ +private: + + X * px_; + + sp_counted_impl_p( sp_counted_impl_p const & ); + sp_counted_impl_p & operator= ( sp_counted_impl_p const & ); + + typedef sp_counted_impl_p this_type; + +public: + + explicit sp_counted_impl_p( X * px ): px_( px ) + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_scalar_constructor_hook( px, sizeof(X), this ); +#endif + } + + virtual void dispose() // nothrow + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_scalar_destructor_hook( px_, sizeof(X), this ); +#endif + boost::checked_delete( px_ ); + } + + virtual void * get_deleter( detail::sp_typeinfo const & ) + { + return 0; + } + +#if defined(BOOST_SP_USE_STD_ALLOCATOR) + + void * operator new( std::size_t ) + { + return std::allocator().allocate( 1, static_cast(0) ); + } + + void operator delete( void * p ) + { + std::allocator().deallocate( static_cast(p), 1 ); + } + +#endif + +#if defined(BOOST_SP_USE_QUICK_ALLOCATOR) + + void * operator new( std::size_t ) + { + return quick_allocator::alloc(); + } + + void operator delete( void * p ) + { + quick_allocator::dealloc( p ); + } + +#endif +}; + +// +// Borland's Codeguard trips up over the -Vx- option here: +// +#ifdef __CODEGUARD__ +# pragma option push -Vx- +#endif + +template class sp_counted_impl_pd: public sp_counted_base +{ +private: + + P ptr; // copy constructor must not throw + D del; // copy constructor must not throw + + sp_counted_impl_pd( sp_counted_impl_pd const & ); + sp_counted_impl_pd & operator= ( sp_counted_impl_pd const & ); + + typedef sp_counted_impl_pd this_type; + +public: + + // pre: d(p) must not throw + + sp_counted_impl_pd( P p, D d ): ptr(p), del(d) + { + } + + virtual void dispose() // nothrow + { + del( ptr ); + } + + virtual void * get_deleter( detail::sp_typeinfo const & ti ) + { + return ti == BOOST_SP_TYPEID(D)? &reinterpret_cast( del ): 0; + } + +#if defined(BOOST_SP_USE_STD_ALLOCATOR) + + void * operator new( std::size_t ) + { + return std::allocator().allocate( 1, static_cast(0) ); + } + + void operator delete( void * p ) + { + std::allocator().deallocate( static_cast(p), 1 ); + } + +#endif + +#if defined(BOOST_SP_USE_QUICK_ALLOCATOR) + + void * operator new( std::size_t ) + { + return quick_allocator::alloc(); + } + + void operator delete( void * p ) + { + quick_allocator::dealloc( p ); + } + +#endif +}; + +template class sp_counted_impl_pda: public sp_counted_base +{ +private: + + P p_; // copy constructor must not throw + D d_; // copy constructor must not throw + A a_; // copy constructor must not throw + + sp_counted_impl_pda( sp_counted_impl_pda const & ); + sp_counted_impl_pda & operator= ( sp_counted_impl_pda const & ); + + typedef sp_counted_impl_pda this_type; + +public: + + // pre: d( p ) must not throw + + sp_counted_impl_pda( P p, D d, A a ): p_( p ), d_( d ), a_( a ) + { + } + + virtual void dispose() // nothrow + { + d_( p_ ); + } + + virtual void destroy() // nothrow + { + typedef typename A::template rebind< this_type >::other A2; + + A2 a2( a_ ); + + this->~this_type(); + a2.deallocate( this, 1 ); + } + + virtual void * get_deleter( detail::sp_typeinfo const & ti ) + { + return ti == BOOST_SP_TYPEID( D )? &reinterpret_cast( d_ ): 0; + } +}; + +#ifdef __CODEGUARD__ +# pragma option pop +#endif + +} // namespace detail + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_has_sync.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_has_sync.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/sp_has_sync.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/sp_has_sync.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,49 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/smart_ptr/detail/sp_has_sync.hpp +// +// Copyright (c) 2008, 2009 Peter Dimov +// +// 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) +// +// Defines the BOOST_SP_HAS_SYNC macro if the __sync_* intrinsics +// are available. +// + +#if defined(__GNUC__) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 ) + +#define BOOST_SP_HAS_SYNC + +#if defined( __arm__ ) || defined( __armel__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __hppa ) || defined( __hppa__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __m68k__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __sparc__ ) +#undef BOOST_SP_HAS_SYNC +#endif + +#if defined( __INTEL_COMPILER ) && !defined( __ia64__ ) && ( __INTEL_COMPILER < 1100 ) +#undef BOOST_SP_HAS_SYNC +#endif + +#endif // __GNUC__ * 100 + __GNUC_MINOR__ >= 401 + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,85 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED + +// +// Copyright (c) 2008 Peter Dimov +// +// 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) +// + +#include + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + int v_; + +public: + + bool try_lock() + { + int r; + + __asm__ __volatile__( + "swp %0, %1, [%2]": + "=&r"( r ): // outputs + "r"( 1 ), "r"( &v_ ): // inputs + "memory", "cc" ); + + return r == 0; + } + + void lock() + { + for( unsigned k = 0; !try_lock(); ++k ) + { + boost::detail::yield( k ); + } + } + + void unlock() + { + __asm__ __volatile__( "" ::: "memory" ); + *const_cast< int volatile* >( &v_ ) = 0; + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT {0} + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,53 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/spinlock.hpp +// +// Copyright (c) 2008 Peter Dimov +// +// 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) +// +// struct spinlock +// { +// void lock(); +// bool try_lock(); +// void unlock(); +// +// class scoped_lock; +// }; +// +// #define BOOST_DETAIL_SPINLOCK_INIT +// + +#include +#include + +#if defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ ) +# include + +#elif defined( BOOST_SP_HAS_SYNC ) +# include + +#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# include + +#elif defined(BOOST_HAS_PTHREADS) +# include + +#elif !defined(BOOST_HAS_THREADS) +# include + +#else +# error Unrecognized threading platform +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_nt.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_nt.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_nt.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_nt.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,89 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 Peter Dimov +// +// 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) +// + +#include + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + bool locked_; + +public: + + inline bool try_lock() + { + if( locked_ ) + { + return false; + } + else + { + locked_ = true; + return true; + } + } + + inline void lock() + { + BOOST_ASSERT( !locked_ ); + locked_ = true; + } + + inline void unlock() + { + BOOST_ASSERT( locked_ ); + locked_ = false; + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT { false } + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_pool.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_pool.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_pool.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_pool.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,87 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/detail/spinlock_pool.hpp +// +// Copyright (c) 2008 Peter Dimov +// +// 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) +// +// spinlock_pool<0> is reserved for atomic<>, when/if it arrives +// spinlock_pool<1> is reserved for shared_ptr reference counts +// spinlock_pool<2> is reserved for shared_ptr atomic access +// + +#include +#include +#include + +namespace boost +{ + +namespace detail +{ + +template< int I > class spinlock_pool +{ +private: + + static spinlock pool_[ 41 ]; + +public: + + static spinlock & spinlock_for( void const * pv ) + { + std::size_t i = reinterpret_cast< std::size_t >( pv ) % 41; + return pool_[ i ]; + } + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( void const * pv ): sp_( spinlock_for( pv ) ) + { + sp_.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +template< int I > spinlock spinlock_pool< I >::pool_[ 41 ] = +{ + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, + BOOST_DETAIL_SPINLOCK_INIT +}; + +} // namespace detail +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_pt.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_pt.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_pt.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_pt.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,79 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 Peter Dimov +// +// 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) +// + +#include + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + pthread_mutex_t v_; + +public: + + bool try_lock() + { + return pthread_mutex_trylock( &v_ ) == 0; + } + + void lock() + { + pthread_mutex_lock( &v_ ); + } + + void unlock() + { + pthread_mutex_unlock( &v_ ); + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT { PTHREAD_MUTEX_INITIALIZER } + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_sync.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_sync.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_sync.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_sync.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,87 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 Peter Dimov +// +// 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) +// + +#include + +#if defined( __ia64__ ) && defined( __INTEL_COMPILER ) +# include +#endif + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + int v_; + +public: + + bool try_lock() + { + int r = __sync_lock_test_and_set( &v_, 1 ); + return r == 0; + } + + void lock() + { + for( unsigned k = 0; !try_lock(); ++k ) + { + boost::detail::yield( k ); + } + } + + void unlock() + { + __sync_lock_release( &v_ ); + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT {0} + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_w32.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_w32.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/spinlock_w32.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/spinlock_w32.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,113 @@ +#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// Copyright (c) 2008 Peter Dimov +// +// 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) +// + +#include +#include + +// BOOST_COMPILER_FENCE + +#if defined(__INTEL_COMPILER) + +#define BOOST_COMPILER_FENCE __memory_barrier(); + +#elif defined( _MSC_VER ) && _MSC_VER >= 1310 + +extern "C" void _ReadWriteBarrier(); +#pragma intrinsic( _ReadWriteBarrier ) + +#define BOOST_COMPILER_FENCE _ReadWriteBarrier(); + +#elif defined(__GNUC__) + +#define BOOST_COMPILER_FENCE __asm__ __volatile__( "" : : : "memory" ); + +#else + +#define BOOST_COMPILER_FENCE + +#endif + +// + +namespace boost +{ + +namespace detail +{ + +class spinlock +{ +public: + + long v_; + +public: + + bool try_lock() + { + long r = BOOST_INTERLOCKED_EXCHANGE( &v_, 1 ); + + BOOST_COMPILER_FENCE + + return r == 0; + } + + void lock() + { + for( unsigned k = 0; !try_lock(); ++k ) + { + boost::detail::yield( k ); + } + } + + void unlock() + { + BOOST_COMPILER_FENCE + *const_cast< long volatile* >( &v_ ) = 0; + } + +public: + + class scoped_lock + { + private: + + spinlock & sp_; + + scoped_lock( scoped_lock const & ); + scoped_lock & operator=( scoped_lock const & ); + + public: + + explicit scoped_lock( spinlock & sp ): sp_( sp ) + { + sp.lock(); + } + + ~scoped_lock() + { + sp_.unlock(); + } + }; +}; + +} // namespace detail +} // namespace boost + +#define BOOST_DETAIL_SPINLOCK_INIT {0} + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/yield_k.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/yield_k.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/detail/yield_k.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/detail/yield_k.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,149 @@ +#ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED +#define BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// yield_k.hpp +// +// Copyright (c) 2008 Peter Dimov +// +// void yield( unsigned k ); +// +// Typical use: +// +// for( unsigned k = 0; !try_lock(); ++k ) yield( k ); +// +// 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 +// + +#include + +// BOOST_SMT_PAUSE + +#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) ) + +extern "C" void _mm_pause(); +#pragma intrinsic( _mm_pause ) + +#define BOOST_SMT_PAUSE _mm_pause(); + +#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) ) + +#define BOOST_SMT_PAUSE __asm__ __volatile__( "rep; nop" : : : "memory" ); + +#endif + +// + +#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ ) + +#if defined( BOOST_USE_WINDOWS_H ) +# include +#endif + +namespace boost +{ + +namespace detail +{ + +#if !defined( BOOST_USE_WINDOWS_H ) + extern "C" void __stdcall Sleep( unsigned ms ); +#endif + +inline void yield( unsigned k ) +{ + if( k < 4 ) + { + } +#if defined( BOOST_SMT_PAUSE ) + else if( k < 16 ) + { + BOOST_SMT_PAUSE + } +#endif + else if( k < 32 ) + { + Sleep( 0 ); + } + else + { + Sleep( 1 ); + } +} + +} // namespace detail + +} // namespace boost + +#elif defined( BOOST_HAS_PTHREADS ) + +#include +#include + +namespace boost +{ + +namespace detail +{ + +inline void yield( unsigned k ) +{ + if( k < 4 ) + { + } +#if defined( BOOST_SMT_PAUSE ) + else if( k < 16 ) + { + BOOST_SMT_PAUSE + } +#endif + else if( k < 32 || k & 1 ) + { + sched_yield(); + } + else + { + // g++ -Wextra warns on {} or {0} + struct timespec rqtp = { 0, 0 }; + + // POSIX says that timespec has tv_sec and tv_nsec + // But it doesn't guarantee order or placement + + rqtp.tv_sec = 0; + rqtp.tv_nsec = 1000; + + nanosleep( &rqtp, 0 ); + } +} + +} // namespace detail + +} // namespace boost + +#else + +namespace boost +{ + +namespace detail +{ + +inline void yield( unsigned ) +{ +} + +} // namespace detail + +} // namespace boost + +#endif + +#endif // #ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/enable_shared_from_this2.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/enable_shared_from_this2.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/enable_shared_from_this2.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/enable_shared_from_this2.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,132 @@ +#ifndef BOOST_ENABLE_SHARED_FROM_THIS2_HPP_INCLUDED +#define BOOST_ENABLE_SHARED_FROM_THIS2_HPP_INCLUDED + +// +// enable_shared_from_this2.hpp +// +// Copyright 2002, 2009 Peter Dimov +// Copyright 2008 Frank Mori Hess +// +// 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 +// + +#include +#include +#include +#include + +namespace boost +{ + +namespace detail +{ + +class esft2_deleter_wrapper +{ +private: + + shared_ptr deleter_; + +public: + + esft2_deleter_wrapper() + { + } + + template< class T > void set_deleter( shared_ptr const & deleter ) + { + deleter_ = deleter; + } + + template< class T> void operator()( T* ) + { + BOOST_ASSERT( deleter_.use_count() <= 1 ); + deleter_.reset(); + } +}; + +} // namespace detail + +template< class T > class enable_shared_from_this2 +{ +protected: + + enable_shared_from_this2() + { + } + + enable_shared_from_this2( enable_shared_from_this2 const & ) + { + } + + enable_shared_from_this2 & operator=( enable_shared_from_this2 const & ) + { + return *this; + } + + ~enable_shared_from_this2() + { + BOOST_ASSERT( shared_this_.use_count() <= 1 ); // make sure no dangling shared_ptr objects exist + } + +private: + + mutable weak_ptr weak_this_; + mutable shared_ptr shared_this_; + +public: + + shared_ptr shared_from_this() + { + init_weak_once(); + return shared_ptr( weak_this_ ); + } + + shared_ptr shared_from_this() const + { + init_weak_once(); + return shared_ptr( weak_this_ ); + } + +private: + + void init_weak_once() const + { + if( weak_this_._empty() ) + { + shared_this_.reset( static_cast< T* >( 0 ), detail::esft2_deleter_wrapper() ); + weak_this_ = shared_this_; + } + } + +public: // actually private, but avoids compiler template friendship issues + + // Note: invoked automatically by shared_ptr; do not call + template void _internal_accept_owner( shared_ptr * ppx, Y * py ) const + { + BOOST_ASSERT( ppx != 0 ); + + if( weak_this_.use_count() == 0 ) + { + weak_this_ = shared_ptr( *ppx, py ); + } + else if( shared_this_.use_count() != 0 ) + { + BOOST_ASSERT( ppx->unique() ); // no weak_ptrs should exist either, but there's no way to check that + + detail::esft2_deleter_wrapper * pd = boost::get_deleter( shared_this_ ); + BOOST_ASSERT( pd != 0 ); + + pd->set_deleter( *ppx ); + + ppx->reset( shared_this_, ppx->get() ); + shared_this_.reset(); + } + } +}; + +} // namespace boost + +#endif // #ifndef BOOST_ENABLE_SHARED_FROM_THIS2_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/enable_shared_from_this.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/enable_shared_from_this.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/enable_shared_from_this.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/enable_shared_from_this.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,79 @@ +#ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED +#define BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED + +// +// enable_shared_from_this.hpp +// +// Copyright 2002, 2009 Peter Dimov +// +// 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 +// +// http://www.boost.org/libs/smart_ptr/enable_shared_from_this.html +// + +#include +#include +#include +#include + +namespace boost +{ + +template class enable_shared_from_this +{ +protected: + + enable_shared_from_this() + { + } + + enable_shared_from_this(enable_shared_from_this const &) + { + } + + enable_shared_from_this & operator=(enable_shared_from_this const &) + { + return *this; + } + + ~enable_shared_from_this() + { + } + +public: + + shared_ptr shared_from_this() + { + shared_ptr p( weak_this_ ); + BOOST_ASSERT( p.get() == this ); + return p; + } + + shared_ptr shared_from_this() const + { + shared_ptr p( weak_this_ ); + BOOST_ASSERT( p.get() == this ); + return p; + } + +public: // actually private, but avoids compiler template friendship issues + + // Note: invoked automatically by shared_ptr; do not call + template void _internal_accept_owner( shared_ptr const * ppx, Y * py ) const + { + if( weak_this_.expired() ) + { + weak_this_ = shared_ptr( *ppx, py ); + } + } + +private: + + mutable weak_ptr weak_this_; +}; + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/intrusive_ptr.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/intrusive_ptr.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/intrusive_ptr.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/intrusive_ptr.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,299 @@ +#ifndef BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED + +// +// intrusive_ptr.hpp +// +// Copyright (c) 2001, 2002 Peter Dimov +// +// 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) +// +// See http://www.boost.org/libs/smart_ptr/intrusive_ptr.html for documentation. +// + +#include + +#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash +# pragma warning(push) +# pragma warning(disable:4284) // odd return type for operator-> +#endif + +#include +#include +#include + +#include // for std::less + +#if !defined(BOOST_NO_IOSTREAM) +#if !defined(BOOST_NO_IOSFWD) +#include // for std::basic_ostream +#else +#include +#endif +#endif + + +namespace boost +{ + +// +// intrusive_ptr +// +// A smart pointer that uses intrusive reference counting. +// +// Relies on unqualified calls to +// +// void intrusive_ptr_add_ref(T * p); +// void intrusive_ptr_release(T * p); +// +// (p != 0) +// +// The object is responsible for destroying itself. +// + +template class intrusive_ptr +{ +private: + + typedef intrusive_ptr this_type; + +public: + + typedef T element_type; + + intrusive_ptr(): px( 0 ) + { + } + + intrusive_ptr( T * p, bool add_ref = true ): px( p ) + { + if( px != 0 && add_ref ) intrusive_ptr_add_ref( px ); + } + +#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES) + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + intrusive_ptr( intrusive_ptr const & rhs, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + intrusive_ptr( intrusive_ptr const & rhs ) + +#endif + : px( rhs.get() ) + { + if( px != 0 ) intrusive_ptr_add_ref( px ); + } + +#endif + + intrusive_ptr(intrusive_ptr const & rhs): px( rhs.px ) + { + if( px != 0 ) intrusive_ptr_add_ref( px ); + } + + ~intrusive_ptr() + { + if( px != 0 ) intrusive_ptr_release( px ); + } + +#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES) + + template intrusive_ptr & operator=(intrusive_ptr const & rhs) + { + this_type(rhs).swap(*this); + return *this; + } + +#endif + +// Move support + +#if defined( BOOST_HAS_RVALUE_REFS ) + + intrusive_ptr(intrusive_ptr && rhs): px( rhs.px ) + { + rhs.px = 0; + } + + intrusive_ptr & operator=(intrusive_ptr && rhs) + { + this_type( static_cast< intrusive_ptr && >( rhs ) ).swap(*this); + return *this; + } + +#endif + + intrusive_ptr & operator=(intrusive_ptr const & rhs) + { + this_type(rhs).swap(*this); + return *this; + } + + intrusive_ptr & operator=(T * rhs) + { + this_type(rhs).swap(*this); + return *this; + } + + void reset() + { + this_type().swap( *this ); + } + + void reset( T * rhs ) + { + this_type( rhs ).swap( *this ); + } + + T * get() const + { + return px; + } + + T & operator*() const + { + BOOST_ASSERT( px != 0 ); + return *px; + } + + T * operator->() const + { + BOOST_ASSERT( px != 0 ); + return px; + } + +// implicit conversion to "bool" +#include + + void swap(intrusive_ptr & rhs) + { + T * tmp = px; + px = rhs.px; + rhs.px = tmp; + } + +private: + + T * px; +}; + +template inline bool operator==(intrusive_ptr const & a, intrusive_ptr const & b) +{ + return a.get() == b.get(); +} + +template inline bool operator!=(intrusive_ptr const & a, intrusive_ptr const & b) +{ + return a.get() != b.get(); +} + +template inline bool operator==(intrusive_ptr const & a, U * b) +{ + return a.get() == b; +} + +template inline bool operator!=(intrusive_ptr const & a, U * b) +{ + return a.get() != b; +} + +template inline bool operator==(T * a, intrusive_ptr const & b) +{ + return a == b.get(); +} + +template inline bool operator!=(T * a, intrusive_ptr const & b) +{ + return a != b.get(); +} + +#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96 + +// Resolve the ambiguity between our op!= and the one in rel_ops + +template inline bool operator!=(intrusive_ptr const & a, intrusive_ptr const & b) +{ + return a.get() != b.get(); +} + +#endif + +template inline bool operator<(intrusive_ptr const & a, intrusive_ptr const & b) +{ + return std::less()(a.get(), b.get()); +} + +template void swap(intrusive_ptr & lhs, intrusive_ptr & rhs) +{ + lhs.swap(rhs); +} + +// mem_fn support + +template T * get_pointer(intrusive_ptr const & p) +{ + return p.get(); +} + +template intrusive_ptr static_pointer_cast(intrusive_ptr const & p) +{ + return static_cast(p.get()); +} + +template intrusive_ptr const_pointer_cast(intrusive_ptr const & p) +{ + return const_cast(p.get()); +} + +template intrusive_ptr dynamic_pointer_cast(intrusive_ptr const & p) +{ + return dynamic_cast(p.get()); +} + +// operator<< + +#if !defined(BOOST_NO_IOSTREAM) + +#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) && (__GNUC__ < 3) ) + +template std::ostream & operator<< (std::ostream & os, intrusive_ptr const & p) +{ + os << p.get(); + return os; +} + +#else + +// in STLport's no-iostreams mode no iostream symbols can be used +#ifndef _STLP_NO_IOSTREAMS + +# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT) +// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL +using std::basic_ostream; +template basic_ostream & operator<< (basic_ostream & os, intrusive_ptr const & p) +# else +template std::basic_ostream & operator<< (std::basic_ostream & os, intrusive_ptr const & p) +# endif +{ + os << p.get(); + return os; +} + +#endif // _STLP_NO_IOSTREAMS + +#endif // __GNUC__ < 3 + +#endif // !defined(BOOST_NO_IOSTREAM) + +} // namespace boost + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#endif // #ifndef BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/make_shared.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/make_shared.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/make_shared.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/make_shared.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,506 @@ +#ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED +#define BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED + +// make_shared.hpp +// +// Copyright (c) 2007, 2008 Peter Dimov +// +// 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 +// +// See http://www.boost.org/libs/smart_ptr/make_shared.html +// for documentation. + +#include +#include +#include +#include +#include +#include + +namespace boost +{ + +namespace detail +{ + +template< std::size_t N, std::size_t A > struct sp_aligned_storage +{ + union type + { + char data_[ N ]; + typename boost::type_with_alignment< A >::type align_; + }; +}; + +template< class T > class sp_ms_deleter +{ +private: + + typedef typename sp_aligned_storage< sizeof( T ), ::boost::alignment_of< T >::value >::type storage_type; + + bool initialized_; + storage_type storage_; + +private: + + void destroy() + { + if( initialized_ ) + { + reinterpret_cast< T* >( storage_.data_ )->~T(); + initialized_ = false; + } + } + +public: + + sp_ms_deleter(): initialized_( false ) + { + } + + // optimization: do not copy storage_ + sp_ms_deleter( sp_ms_deleter const & ): initialized_( false ) + { + } + + ~sp_ms_deleter() + { + destroy(); + } + + void operator()( T * ) + { + destroy(); + } + + void * address() + { + return storage_.data_; + } + + void set_initialized() + { + initialized_ = true; + } +}; + +#if defined( BOOST_HAS_RVALUE_REFS ) +template< class T > T&& forward( T &&t ) +{ + return t; +} +#endif + +} // namespace detail + +// Zero-argument versions +// +// Used even when variadic templates are available because of the new T() vs new T issue + +template< class T > boost::shared_ptr< T > make_shared() +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T(); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A > boost::shared_ptr< T > allocate_shared( A const & a ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T(); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +#if defined( BOOST_HAS_VARIADIC_TMPL ) && defined( BOOST_HAS_RVALUE_REFS ) + +// Variadic templates, rvalue reference + +template< class T, class... Args > boost::shared_ptr< T > make_shared( Args && ... args ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( detail::forward( args )... ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class... Args > boost::shared_ptr< T > allocate_shared( A const & a, Args && ... args ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( detail::forward( args )... ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +#else + +// C++03 version + +template< class T, class A1 > +boost::shared_ptr< T > make_shared( A1 const & a1 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > +boost::shared_ptr< T > make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >() ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > +boost::shared_ptr< T > allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 ) +{ + boost::shared_ptr< T > pt( static_cast< T* >( 0 ), detail::sp_ms_deleter< T >(), a ); + + detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); + + void * pv = pd->address(); + + ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); + pd->set_initialized(); + + T * pt2 = static_cast< T* >( pv ); + + boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); + return boost::shared_ptr< T >( pt, pt2 ); +} + +#endif + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/scoped_array.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/scoped_array.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/scoped_array.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/scoped_array.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,107 @@ +#ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED +#define BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED + +// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. +// Copyright (c) 2001, 2002 Peter Dimov +// +// 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) +// +// http://www.boost.org/libs/smart_ptr/scoped_array.htm +// + +#include +#include +#include // in case ptrdiff_t not in std + +#include + +#include // for std::ptrdiff_t + +namespace boost +{ + +// Debug hooks + +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + +void sp_array_constructor_hook(void * p); +void sp_array_destructor_hook(void * p); + +#endif + +// scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to +// is guaranteed, either on destruction of the scoped_array or via an explicit +// reset(). Use shared_array or std::vector if your needs are more complex. + +template class scoped_array // noncopyable +{ +private: + + T * px; + + scoped_array(scoped_array const &); + scoped_array & operator=(scoped_array const &); + + typedef scoped_array this_type; + + void operator==( scoped_array const& ) const; + void operator!=( scoped_array const& ) const; + +public: + + typedef T element_type; + + explicit scoped_array( T * p = 0 ) : px( p ) // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_array_constructor_hook( px ); +#endif + } + + ~scoped_array() // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_array_destructor_hook( px ); +#endif + boost::checked_array_delete( px ); + } + + void reset(T * p = 0) // never throws + { + BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors + this_type(p).swap(*this); + } + + T & operator[](std::ptrdiff_t i) const // never throws + { + BOOST_ASSERT( px != 0 ); + BOOST_ASSERT( i >= 0 ); + return px[i]; + } + + T * get() const // never throws + { + return px; + } + +// implicit conversion to "bool" +#include + + void swap(scoped_array & b) // never throws + { + T * tmp = b.px; + b.px = px; + px = tmp; + } +}; + +template inline void swap(scoped_array & a, scoped_array & b) // never throws +{ + a.swap(b); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/scoped_ptr.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/scoped_ptr.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/scoped_ptr.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/scoped_ptr.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,131 @@ +#ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED + +// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. +// Copyright (c) 2001, 2002 Peter Dimov +// +// 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) +// +// http://www.boost.org/libs/smart_ptr/scoped_ptr.htm +// + +#include +#include +#include + +#ifndef BOOST_NO_AUTO_PTR +# include // for std::auto_ptr +#endif + +namespace boost +{ + +// Debug hooks + +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + +void sp_scalar_constructor_hook(void * p); +void sp_scalar_destructor_hook(void * p); + +#endif + +// scoped_ptr mimics a built-in pointer except that it guarantees deletion +// of the object pointed to, either on destruction of the scoped_ptr or via +// an explicit reset(). scoped_ptr is a simple solution for simple needs; +// use shared_ptr or std::auto_ptr if your needs are more complex. + +template class scoped_ptr // noncopyable +{ +private: + + T * px; + + scoped_ptr(scoped_ptr const &); + scoped_ptr & operator=(scoped_ptr const &); + + typedef scoped_ptr this_type; + + void operator==( scoped_ptr const& ) const; + void operator!=( scoped_ptr const& ) const; + +public: + + typedef T element_type; + + explicit scoped_ptr( T * p = 0 ): px( p ) // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_scalar_constructor_hook( px ); +#endif + } + +#ifndef BOOST_NO_AUTO_PTR + + explicit scoped_ptr( std::auto_ptr p ): px( p.release() ) // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_scalar_constructor_hook( px ); +#endif + } + +#endif + + ~scoped_ptr() // never throws + { +#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) + boost::sp_scalar_destructor_hook( px ); +#endif + boost::checked_delete( px ); + } + + void reset(T * p = 0) // never throws + { + BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors + this_type(p).swap(*this); + } + + T & operator*() const // never throws + { + BOOST_ASSERT( px != 0 ); + return *px; + } + + T * operator->() const // never throws + { + BOOST_ASSERT( px != 0 ); + return px; + } + + T * get() const // never throws + { + return px; + } + +// implicit conversion to "bool" +#include + + void swap(scoped_ptr & b) // never throws + { + T * tmp = b.px; + b.px = px; + px = tmp; + } +}; + +template inline void swap(scoped_ptr & a, scoped_ptr & b) // never throws +{ + a.swap(b); +} + +// get_pointer(p) is a generic way to say p.get() + +template inline T * get_pointer(scoped_ptr const & p) +{ + return p.get(); +} + +} // namespace boost + +#endif // #ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/shared_array.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/shared_array.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/shared_array.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/shared_array.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,147 @@ +#ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED +#define BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED + +// +// shared_array.hpp +// +// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. +// Copyright (c) 2001, 2002 Peter Dimov +// +// 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) +// +// See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation. +// + +#include // for broken compiler workarounds + +#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) +#include +#else + +#include // TR1 cyclic inclusion fix + +#include +#include + +#include +#include + +#include // for std::ptrdiff_t +#include // for std::swap +#include // for std::less + +namespace boost +{ + +// +// shared_array +// +// shared_array extends shared_ptr to arrays. +// The array pointed to is deleted when the last shared_array pointing to it +// is destroyed or reset. +// + +template class shared_array +{ +private: + + // Borland 5.5.1 specific workarounds + typedef checked_array_deleter deleter; + typedef shared_array this_type; + +public: + + typedef T element_type; + + explicit shared_array(T * p = 0): px(p), pn(p, deleter()) + { + } + + // + // Requirements: D's copy constructor must not throw + // + // shared_array will release p by calling d(p) + // + + template shared_array(T * p, D d): px(p), pn(p, d) + { + } + +// generated copy constructor, assignment, destructor are fine + + void reset(T * p = 0) + { + BOOST_ASSERT(p == 0 || p != px); + this_type(p).swap(*this); + } + + template void reset(T * p, D d) + { + this_type(p, d).swap(*this); + } + + T & operator[] (std::ptrdiff_t i) const // never throws + { + BOOST_ASSERT(px != 0); + BOOST_ASSERT(i >= 0); + return px[i]; + } + + T * get() const // never throws + { + return px; + } + +// implicit conversion to "bool" +#include + + bool unique() const // never throws + { + return pn.unique(); + } + + long use_count() const // never throws + { + return pn.use_count(); + } + + void swap(shared_array & other) // never throws + { + std::swap(px, other.px); + pn.swap(other.pn); + } + +private: + + T * px; // contained pointer + detail::shared_count pn; // reference counter + +}; // shared_array + +template inline bool operator==(shared_array const & a, shared_array const & b) // never throws +{ + return a.get() == b.get(); +} + +template inline bool operator!=(shared_array const & a, shared_array const & b) // never throws +{ + return a.get() != b.get(); +} + +template inline bool operator<(shared_array const & a, shared_array const & b) // never throws +{ + return std::less()(a.get(), b.get()); +} + +template void swap(shared_array & a, shared_array & b) // never throws +{ + a.swap(b); +} + +} // namespace boost + +#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) + +#endif // #ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/shared_ptr.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/shared_ptr.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/shared_ptr.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/shared_ptr.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,701 @@ +#ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED + +// +// shared_ptr.hpp +// +// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. +// Copyright (c) 2001-2008 Peter Dimov +// +// 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) +// +// See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation. +// + +#include // for broken compiler workarounds + +#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) +#include +#else + +// In order to avoid circular dependencies with Boost.TR1 +// we make sure that our include of doesn't try to +// pull in the TR1 headers: that's why we use this header +// rather than including directly: +#include // std::auto_ptr + +#include +#include +#include +#include +#include +#include + +#if !defined(BOOST_SP_NO_ATOMIC_ACCESS) +#include +#include +#endif + +#include // for std::swap +#include // for std::less +#include // for std::bad_cast + +#if !defined(BOOST_NO_IOSTREAM) +#if !defined(BOOST_NO_IOSFWD) +#include // for std::basic_ostream +#else +#include +#endif +#endif + +#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash +# pragma warning(push) +# pragma warning(disable:4284) // odd return type for operator-> +#endif + +namespace boost +{ + +template class shared_ptr; +template class weak_ptr; +template class enable_shared_from_this; +template class enable_shared_from_this2; + +namespace detail +{ + +struct static_cast_tag {}; +struct const_cast_tag {}; +struct dynamic_cast_tag {}; +struct polymorphic_cast_tag {}; + +template struct shared_ptr_traits +{ + typedef T & reference; +}; + +template<> struct shared_ptr_traits +{ + typedef void reference; +}; + +#if !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS) + +template<> struct shared_ptr_traits +{ + typedef void reference; +}; + +template<> struct shared_ptr_traits +{ + typedef void reference; +}; + +template<> struct shared_ptr_traits +{ + typedef void reference; +}; + +#endif + +// enable_shared_from_this support + +template< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr const * ppx, Y const * py, boost::enable_shared_from_this< T > const * pe ) +{ + if( pe != 0 ) + { + pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) ); + } +} + +template< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr * ppx, Y const * py, boost::enable_shared_from_this2< T > const * pe ) +{ + if( pe != 0 ) + { + pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) ); + } +} + +#ifdef _MANAGED + +// Avoid C4793, ... causes native code generation + +struct sp_any_pointer +{ + template sp_any_pointer( T* ) {} +}; + +inline void sp_enable_shared_from_this( sp_any_pointer, sp_any_pointer, sp_any_pointer ) +{ +} + +#else // _MANAGED + +inline void sp_enable_shared_from_this( ... ) +{ +} + +#endif // _MANAGED + +#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_AUTO_PTR ) + +// rvalue auto_ptr support based on a technique by Dave Abrahams + +template< class T, class R > struct sp_enable_if_auto_ptr +{ +}; + +template< class T, class R > struct sp_enable_if_auto_ptr< std::auto_ptr< T >, R > +{ + typedef R type; +}; + +#endif + +} // namespace detail + + +// +// shared_ptr +// +// An enhanced relative of scoped_ptr with reference counted copy semantics. +// The object pointed to is deleted when the last shared_ptr pointing to it +// is destroyed or reset. +// + +template class shared_ptr +{ +private: + + // Borland 5.5.1 specific workaround + typedef shared_ptr this_type; + +public: + + typedef T element_type; + typedef T value_type; + typedef T * pointer; + typedef typename boost::detail::shared_ptr_traits::reference reference; + + shared_ptr(): px(0), pn() // never throws in 1.30+ + { + } + + template + explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete + { + boost::detail::sp_enable_shared_from_this( this, p, p ); + } + + // + // Requirements: D's copy constructor must not throw + // + // shared_ptr will release p by calling d(p) + // + + template shared_ptr(Y * p, D d): px(p), pn(p, d) + { + boost::detail::sp_enable_shared_from_this( this, p, p ); + } + + // As above, but with allocator. A's copy constructor shall not throw. + + template shared_ptr( Y * p, D d, A a ): px( p ), pn( p, d, a ) + { + boost::detail::sp_enable_shared_from_this( this, p, p ); + } + +// generated copy constructor, destructor are fine + + template + explicit shared_ptr(weak_ptr const & r): pn(r.pn) // may throw + { + // it is now safe to copy r.px, as pn(r.pn) did not throw + px = r.px; + } + + template + shared_ptr( weak_ptr const & r, boost::detail::sp_nothrow_tag ): px( 0 ), pn( r.pn, boost::detail::sp_nothrow_tag() ) // never throws + { + if( !pn.empty() ) + { + px = r.px; + } + } + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + shared_ptr( shared_ptr const & r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + shared_ptr( shared_ptr const & r ) + +#endif + : px( r.px ), pn( r.pn ) // never throws + { + } + + // aliasing + template< class Y > + shared_ptr( shared_ptr const & r, T * p ): px( p ), pn( r.pn ) // never throws + { + } + + template + shared_ptr(shared_ptr const & r, boost::detail::static_cast_tag): px(static_cast(r.px)), pn(r.pn) + { + } + + template + shared_ptr(shared_ptr const & r, boost::detail::const_cast_tag): px(const_cast(r.px)), pn(r.pn) + { + } + + template + shared_ptr(shared_ptr const & r, boost::detail::dynamic_cast_tag): px(dynamic_cast(r.px)), pn(r.pn) + { + if(px == 0) // need to allocate new counter -- the cast failed + { + pn = boost::detail::shared_count(); + } + } + + template + shared_ptr(shared_ptr const & r, boost::detail::polymorphic_cast_tag): px(dynamic_cast(r.px)), pn(r.pn) + { + if(px == 0) + { + boost::throw_exception(std::bad_cast()); + } + } + +#ifndef BOOST_NO_AUTO_PTR + + template + explicit shared_ptr(std::auto_ptr & r): px(r.get()), pn() + { + Y * tmp = r.get(); + pn = boost::detail::shared_count(r); + boost::detail::sp_enable_shared_from_this( this, tmp, tmp ); + } + +#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) + + template + explicit shared_ptr( Ap r, typename boost::detail::sp_enable_if_auto_ptr::type = 0 ): px( r.get() ), pn() + { + typename Ap::element_type * tmp = r.get(); + pn = boost::detail::shared_count( r ); + boost::detail::sp_enable_shared_from_this( this, tmp, tmp ); + } + + +#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif // BOOST_NO_AUTO_PTR + + // assignment + + shared_ptr & operator=( shared_ptr const & r ) // never throws + { + this_type(r).swap(*this); + return *this; + } + +#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1400) + + template + shared_ptr & operator=(shared_ptr const & r) // never throws + { + this_type(r).swap(*this); + return *this; + } + +#endif + +#ifndef BOOST_NO_AUTO_PTR + + template + shared_ptr & operator=( std::auto_ptr & r ) + { + this_type(r).swap(*this); + return *this; + } + +#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) + + template + typename boost::detail::sp_enable_if_auto_ptr< Ap, shared_ptr & >::type operator=( Ap r ) + { + this_type( r ).swap( *this ); + return *this; + } + + +#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif // BOOST_NO_AUTO_PTR + +// Move support + +#if defined( BOOST_HAS_RVALUE_REFS ) + + shared_ptr( shared_ptr && r ): px( r.px ), pn() // never throws + { + pn.swap( r.pn ); + r.px = 0; + } + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + shared_ptr( shared_ptr && r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + shared_ptr( shared_ptr && r ) + +#endif + : px( r.px ), pn() // never throws + { + pn.swap( r.pn ); + r.px = 0; + } + + shared_ptr & operator=( shared_ptr && r ) // never throws + { + this_type( static_cast< shared_ptr && >( r ) ).swap( *this ); + return *this; + } + + template + shared_ptr & operator=( shared_ptr && r ) // never throws + { + this_type( static_cast< shared_ptr && >( r ) ).swap( *this ); + return *this; + } + +#endif + + void reset() // never throws in 1.30+ + { + this_type().swap(*this); + } + + template void reset(Y * p) // Y must be complete + { + BOOST_ASSERT(p == 0 || p != px); // catch self-reset errors + this_type(p).swap(*this); + } + + template void reset( Y * p, D d ) + { + this_type( p, d ).swap( *this ); + } + + template void reset( Y * p, D d, A a ) + { + this_type( p, d, a ).swap( *this ); + } + + template void reset( shared_ptr const & r, T * p ) + { + this_type( r, p ).swap( *this ); + } + + reference operator* () const // never throws + { + BOOST_ASSERT(px != 0); + return *px; + } + + T * operator-> () const // never throws + { + BOOST_ASSERT(px != 0); + return px; + } + + T * get() const // never throws + { + return px; + } + +// implicit conversion to "bool" +#include + + bool unique() const // never throws + { + return pn.unique(); + } + + long use_count() const // never throws + { + return pn.use_count(); + } + + void swap(shared_ptr & other) // never throws + { + std::swap(px, other.px); + pn.swap(other.pn); + } + + template bool _internal_less(shared_ptr const & rhs) const + { + return pn < rhs.pn; + } + + void * _internal_get_deleter( boost::detail::sp_typeinfo const & ti ) const + { + return pn.get_deleter( ti ); + } + + bool _internal_equiv( shared_ptr const & r ) const + { + return px == r.px && pn == r.pn; + } + +// Tasteless as this may seem, making all members public allows member templates +// to work in the absence of member template friends. (Matthew Langston) + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + +private: + + template friend class shared_ptr; + template friend class weak_ptr; + + +#endif + + T * px; // contained pointer + boost::detail::shared_count pn; // reference counter + +}; // shared_ptr + +template inline bool operator==(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() == b.get(); +} + +template inline bool operator!=(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() != b.get(); +} + +#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96 + +// Resolve the ambiguity between our op!= and the one in rel_ops + +template inline bool operator!=(shared_ptr const & a, shared_ptr const & b) +{ + return a.get() != b.get(); +} + +#endif + +template inline bool operator<(shared_ptr const & a, shared_ptr const & b) +{ + return a._internal_less(b); +} + +template inline void swap(shared_ptr & a, shared_ptr & b) +{ + a.swap(b); +} + +template shared_ptr static_pointer_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::static_cast_tag()); +} + +template shared_ptr const_pointer_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::const_cast_tag()); +} + +template shared_ptr dynamic_pointer_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::dynamic_cast_tag()); +} + +// shared_*_cast names are deprecated. Use *_pointer_cast instead. + +template shared_ptr shared_static_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::static_cast_tag()); +} + +template shared_ptr shared_dynamic_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::dynamic_cast_tag()); +} + +template shared_ptr shared_polymorphic_cast(shared_ptr const & r) +{ + return shared_ptr(r, boost::detail::polymorphic_cast_tag()); +} + +template shared_ptr shared_polymorphic_downcast(shared_ptr const & r) +{ + BOOST_ASSERT(dynamic_cast(r.get()) == r.get()); + return shared_static_cast(r); +} + +// get_pointer() enables boost::mem_fn to recognize shared_ptr + +template inline T * get_pointer(shared_ptr const & p) +{ + return p.get(); +} + +// operator<< + +#if !defined(BOOST_NO_IOSTREAM) + +#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) && (__GNUC__ < 3) ) + +template std::ostream & operator<< (std::ostream & os, shared_ptr const & p) +{ + os << p.get(); + return os; +} + +#else + +// in STLport's no-iostreams mode no iostream symbols can be used +#ifndef _STLP_NO_IOSTREAMS + +# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT) +// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL +using std::basic_ostream; +template basic_ostream & operator<< (basic_ostream & os, shared_ptr const & p) +# else +template std::basic_ostream & operator<< (std::basic_ostream & os, shared_ptr const & p) +# endif +{ + os << p.get(); + return os; +} + +#endif // _STLP_NO_IOSTREAMS + +#endif // __GNUC__ < 3 + +#endif // !defined(BOOST_NO_IOSTREAM) + +// get_deleter + +#if ( defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3) ) || \ + ( defined(__EDG_VERSION__) && BOOST_WORKAROUND(__EDG_VERSION__, <= 238) ) || \ + ( defined(__HP_aCC) && BOOST_WORKAROUND(__HP_aCC, <= 33500) ) + +// g++ 2.9x doesn't allow static_cast(void *) +// apparently EDG 2.38 and HP aCC A.03.35 also don't accept it + +template D * get_deleter(shared_ptr const & p) +{ + void const * q = p._internal_get_deleter(BOOST_SP_TYPEID(D)); + return const_cast(static_cast(q)); +} + +#else + +template D * get_deleter(shared_ptr const & p) +{ + return static_cast(p._internal_get_deleter(BOOST_SP_TYPEID(D))); +} + +#endif + +// atomic access + +#if !defined(BOOST_SP_NO_ATOMIC_ACCESS) + +template inline bool atomic_is_lock_free( shared_ptr const * /*p*/ ) +{ + return false; +} + +template shared_ptr atomic_load( shared_ptr const * p ) +{ + boost::detail::spinlock_pool<2>::scoped_lock lock( p ); + return *p; +} + +template inline shared_ptr atomic_load_explicit( shared_ptr const * p, memory_order /*mo*/ ) +{ + return atomic_load( p ); +} + +template void atomic_store( shared_ptr * p, shared_ptr r ) +{ + boost::detail::spinlock_pool<2>::scoped_lock lock( p ); + p->swap( r ); +} + +template inline void atomic_store_explicit( shared_ptr * p, shared_ptr r, memory_order /*mo*/ ) +{ + atomic_store( p, r ); // std::move( r ) +} + +template shared_ptr atomic_exchange( shared_ptr * p, shared_ptr r ) +{ + boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( p ); + + sp.lock(); + p->swap( r ); + sp.unlock(); + + return r; // return std::move( r ) +} + +template shared_ptr atomic_exchange_explicit( shared_ptr * p, shared_ptr r, memory_order /*mo*/ ) +{ + return atomic_exchange( p, r ); // std::move( r ) +} + +template bool atomic_compare_exchange( shared_ptr * p, shared_ptr * v, shared_ptr w ) +{ + boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( p ); + + sp.lock(); + + if( p->_internal_equiv( *v ) ) + { + p->swap( w ); + + sp.unlock(); + + return true; + } + else + { + shared_ptr tmp( *p ); + + sp.unlock(); + + tmp.swap( *v ); + return false; + } +} + +template inline bool atomic_compare_exchange_explicit( shared_ptr * p, shared_ptr * v, shared_ptr w, memory_order /*success*/, memory_order /*failure*/ ) +{ + return atomic_compare_exchange( p, v, w ); // std::move( w ) +} + +#endif + +} // namespace boost + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) + +#endif // #ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/smart_ptr/weak_ptr.hpp clucene-core-2.3.3.4/src/ext/boost/smart_ptr/weak_ptr.hpp --- clucene-core-0.9.21b/src/ext/boost/smart_ptr/weak_ptr.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/smart_ptr/weak_ptr.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,230 @@ +#ifndef BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED +#define BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED + +// +// weak_ptr.hpp +// +// Copyright (c) 2001, 2002, 2003 Peter Dimov +// +// 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) +// +// See http://www.boost.org/libs/smart_ptr/weak_ptr.htm for documentation. +// + +#include // boost.TR1 include order fix +#include +#include + +#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash +# pragma warning(push) +# pragma warning(disable:4284) // odd return type for operator-> +#endif + +namespace boost +{ + +template class weak_ptr +{ +private: + + // Borland 5.5.1 specific workarounds + typedef weak_ptr this_type; + +public: + + typedef T element_type; + + weak_ptr(): px(0), pn() // never throws in 1.30+ + { + } + +// generated copy constructor, assignment, destructor are fine + + +// +// The "obvious" converting constructor implementation: +// +// template +// weak_ptr(weak_ptr const & r): px(r.px), pn(r.pn) // never throws +// { +// } +// +// has a serious problem. +// +// r.px may already have been invalidated. The px(r.px) +// conversion may require access to *r.px (virtual inheritance). +// +// It is not possible to avoid spurious access violations since +// in multithreaded programs r.px may be invalidated at any point. +// + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + weak_ptr( weak_ptr const & r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + weak_ptr( weak_ptr const & r ) + +#endif + : px(r.lock().get()), pn(r.pn) // never throws + { + } + +#if defined( BOOST_HAS_RVALUE_REFS ) + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + weak_ptr( weak_ptr && r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + weak_ptr( weak_ptr && r ) + +#endif + : px( r.lock().get() ), pn( static_cast< boost::detail::weak_count && >( r.pn ) ) // never throws + { + r.px = 0; + } + + // for better efficiency in the T == Y case + weak_ptr( weak_ptr && r ): px( r.px ), pn( static_cast< boost::detail::weak_count && >( r.pn ) ) // never throws + { + r.px = 0; + } + + // for better efficiency in the T == Y case + weak_ptr & operator=( weak_ptr && r ) // never throws + { + this_type( static_cast< weak_ptr && >( r ) ).swap( *this ); + return *this; + } + + +#endif + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + weak_ptr( shared_ptr const & r, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty() ) + +#else + + weak_ptr( shared_ptr const & r ) + +#endif + : px( r.px ), pn( r.pn ) // never throws + { + } + +#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300) + + template + weak_ptr & operator=(weak_ptr const & r) // never throws + { + px = r.lock().get(); + pn = r.pn; + return *this; + } + +#if defined( BOOST_HAS_RVALUE_REFS ) + + template + weak_ptr & operator=( weak_ptr && r ) + { + this_type( static_cast< weak_ptr && >( r ) ).swap( *this ); + return *this; + } + +#endif + + template + weak_ptr & operator=(shared_ptr const & r) // never throws + { + px = r.px; + pn = r.pn; + return *this; + } + +#endif + + shared_ptr lock() const // never throws + { + return shared_ptr( *this, boost::detail::sp_nothrow_tag() ); + } + + long use_count() const // never throws + { + return pn.use_count(); + } + + bool expired() const // never throws + { + return pn.use_count() == 0; + } + + bool _empty() const // extension, not in std::weak_ptr + { + return pn.empty(); + } + + void reset() // never throws in 1.30+ + { + this_type().swap(*this); + } + + void swap(this_type & other) // never throws + { + std::swap(px, other.px); + pn.swap(other.pn); + } + + void _internal_assign(T * px2, boost::detail::shared_count const & pn2) + { + px = px2; + pn = pn2; + } + + template bool _internal_less(weak_ptr const & rhs) const + { + return pn < rhs.pn; + } + +// Tasteless as this may seem, making all members public allows member templates +// to work in the absence of member template friends. (Matthew Langston) + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + +private: + + template friend class weak_ptr; + template friend class shared_ptr; + +#endif + + T * px; // contained pointer + boost::detail::weak_count pn; // reference counter + +}; // weak_ptr + +template inline bool operator<(weak_ptr const & a, weak_ptr const & b) +{ + return a._internal_less(b); +} + +template void swap(weak_ptr & a, weak_ptr & b) +{ + a.swap(b); +} + +} // namespace boost + +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif + +#endif // #ifndef BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/throw_exception.hpp clucene-core-2.3.3.4/src/ext/boost/throw_exception.hpp --- clucene-core-0.9.21b/src/ext/boost/throw_exception.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/throw_exception.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,75 @@ +#ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED +#define BOOST_THROW_EXCEPTION_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// boost/throw_exception.hpp +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc. +// +// 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) +// +// http://www.boost.org/libs/utility/throw_exception.html +// + +#include +#include +#include +#include + +#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x593) ) +# define BOOST_EXCEPTION_DISABLE +#endif + +#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1310 ) +# define BOOST_EXCEPTION_DISABLE +#endif + +#if !defined( BOOST_EXCEPTION_DISABLE ) +# include +# include +# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(::boost::enable_error_info(x) <<\ + ::boost::throw_function(BOOST_CURRENT_FUNCTION) <<\ + ::boost::throw_file(__FILE__) <<\ + ::boost::throw_line(__LINE__)) +#else +# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x) +#endif + +namespace boost +{ + +#ifdef BOOST_NO_EXCEPTIONS + +void throw_exception( std::exception const & e ); // user defined + +#else + +inline void throw_exception_assert_compatibility( std::exception const & ) { } + +template BOOST_ATTRIBUTE_NORETURN inline void throw_exception( E const & e ) +{ + //All boost exceptions are required to derive from std::exception, + //to ensure compatibility with BOOST_NO_EXCEPTIONS. + throw_exception_assert_compatibility(e); + +#ifndef BOOST_EXCEPTION_DISABLE + throw enable_current_exception(enable_error_info(e)); +#else + throw e; +#endif +} + +#endif + +} // namespace boost + +#endif // #ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED diff -Nru clucene-core-0.9.21b/src/ext/boost/version.hpp clucene-core-2.3.3.4/src/ext/boost/version.hpp --- clucene-core-0.9.21b/src/ext/boost/version.hpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/boost/version.hpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,35 @@ +// Boost version.hpp configuration header file ------------------------------// + +// (C) Copyright John maddock 1999. 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) + +// See http://www.boost.org/libs/config for documentation + +#ifndef BOOST_VERSION_HPP +#define BOOST_VERSION_HPP + +// +// Caution, this is the only boost header that is guarenteed +// to change with every boost release, including this header +// will cause a recompile every time a new boost version is +// released. +// +// BOOST_VERSION % 100 is the patch level +// BOOST_VERSION / 100 % 1000 is the minor version +// BOOST_VERSION / 100000 is the major version + +#define BOOST_VERSION 104200 + +// +// BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION +// but as a *string* in the form "x_y[_z]" where x is the major version +// number, y is the minor version number, and z is the patch level if not 0. +// This is used by to select which library version to link to. + +#define BOOST_LIB_VERSION "1_42" + +#endif + + + diff -Nru clucene-core-0.9.21b/src/ext/CMakeLists.txt clucene-core-2.3.3.4/src/ext/CMakeLists.txt --- clucene-core-0.9.21b/src/ext/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,15 @@ +PROJECT(clucene-ext) + +file(GLOB_RECURSE EXTHEADERS ${clucene-ext_SOURCE_DIR}/boost/*.hpp) + +#install public headers. +FOREACH(file ${EXTHEADERS}) + get_filename_component(apath ${file} PATH) + get_filename_component(aname ${file} NAME) + file(RELATIVE_PATH relpath ${CMAKE_SOURCE_DIR}/src/ext/boost ${apath}) + + install(FILES ${file} + DESTINATION "include/CLucene/ext/boost/${relpath}" + COMPONENT development) +ENDFOREACH(file) + diff -Nru clucene-core-0.9.21b/src/ext/zlib/adler32.c clucene-core-2.3.3.4/src/ext/zlib/adler32.c --- clucene-core-0.9.21b/src/ext/zlib/adler32.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/adler32.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,149 @@ +/* adler32.c -- compute the Adler-32 checksum of a data stream + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +#define BASE 65521UL /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +/* use NO_DIVIDE if your processor does not do division in hardware */ +#ifdef NO_DIVIDE +# define MOD(a) \ + do { \ + if (a >= (BASE << 16)) a -= (BASE << 16); \ + if (a >= (BASE << 15)) a -= (BASE << 15); \ + if (a >= (BASE << 14)) a -= (BASE << 14); \ + if (a >= (BASE << 13)) a -= (BASE << 13); \ + if (a >= (BASE << 12)) a -= (BASE << 12); \ + if (a >= (BASE << 11)) a -= (BASE << 11); \ + if (a >= (BASE << 10)) a -= (BASE << 10); \ + if (a >= (BASE << 9)) a -= (BASE << 9); \ + if (a >= (BASE << 8)) a -= (BASE << 8); \ + if (a >= (BASE << 7)) a -= (BASE << 7); \ + if (a >= (BASE << 6)) a -= (BASE << 6); \ + if (a >= (BASE << 5)) a -= (BASE << 5); \ + if (a >= (BASE << 4)) a -= (BASE << 4); \ + if (a >= (BASE << 3)) a -= (BASE << 3); \ + if (a >= (BASE << 2)) a -= (BASE << 2); \ + if (a >= (BASE << 1)) a -= (BASE << 1); \ + if (a >= BASE) a -= BASE; \ + } while (0) +# define MOD4(a) \ + do { \ + if (a >= (BASE << 4)) a -= (BASE << 4); \ + if (a >= (BASE << 3)) a -= (BASE << 3); \ + if (a >= (BASE << 2)) a -= (BASE << 2); \ + if (a >= (BASE << 1)) a -= (BASE << 1); \ + if (a >= BASE) a -= BASE; \ + } while (0) +#else +# define MOD(a) a %= BASE +# define MOD4(a) a %= BASE +#endif + +/* ========================================================================= */ +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD4(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +/* ========================================================================= */ +uLong ZEXPORT adler32_combine(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off_t len2; +{ + unsigned long sum1; + unsigned long sum2; + unsigned rem; + + /* the derivation of this formula is left as an exercise for the reader */ + rem = (unsigned)(len2 % BASE); + sum1 = adler1 & 0xffff; + sum2 = rem * sum1; + MOD(sum2); + sum1 += (adler2 & 0xffff) + BASE - 1; + sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; + if (sum1 > BASE) sum1 -= BASE; + if (sum1 > BASE) sum1 -= BASE; + if (sum2 > (BASE << 1)) sum2 -= (BASE << 1); + if (sum2 > BASE) sum2 -= BASE; + return sum1 | (sum2 << 16); +} diff -Nru clucene-core-0.9.21b/src/ext/zlib/algorithm.txt clucene-core-2.3.3.4/src/ext/zlib/algorithm.txt --- clucene-core-0.9.21b/src/ext/zlib/algorithm.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/algorithm.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,209 @@ +1. Compression algorithm (deflate) + +The deflation algorithm used by gzip (also zip and zlib) is a variation of +LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in +the input data. The second occurrence of a string is replaced by a +pointer to the previous string, in the form of a pair (distance, +length). Distances are limited to 32K bytes, and lengths are limited +to 258 bytes. When a string does not occur anywhere in the previous +32K bytes, it is emitted as a sequence of literal bytes. (In this +description, `string' must be taken as an arbitrary sequence of bytes, +and is not restricted to printable characters.) + +Literals or match lengths are compressed with one Huffman tree, and +match distances are compressed with another tree. The trees are stored +in a compact form at the start of each block. The blocks can have any +size (except that the compressed data for one block must fit in +available memory). A block is terminated when deflate() determines that +it would be useful to start another block with fresh trees. (This is +somewhat similar to the behavior of LZW-based _compress_.) + +Duplicated strings are found using a hash table. All input strings of +length 3 are inserted in the hash table. A hash index is computed for +the next 3 bytes. If the hash chain for this index is not empty, all +strings in the chain are compared with the current input string, and +the longest match is selected. + +The hash chains are searched starting with the most recent strings, to +favor small distances and thus take advantage of the Huffman encoding. +The hash chains are singly linked. There are no deletions from the +hash chains, the algorithm simply discards matches that are too old. + +To avoid a worst-case situation, very long hash chains are arbitrarily +truncated at a certain length, determined by a runtime option (level +parameter of deflateInit). So deflate() does not always find the longest +possible match but generally finds a match which is long enough. + +deflate() also defers the selection of matches with a lazy evaluation +mechanism. After a match of length N has been found, deflate() searches for +a longer match at the next input byte. If a longer match is found, the +previous match is truncated to a length of one (thus producing a single +literal byte) and the process of lazy evaluation begins again. Otherwise, +the original match is kept, and the next match search is attempted only N +steps later. + +The lazy match evaluation is also subject to a runtime parameter. If +the current match is long enough, deflate() reduces the search for a longer +match, thus speeding up the whole process. If compression ratio is more +important than speed, deflate() attempts a complete second search even if +the first match is already long enough. + +The lazy match evaluation is not performed for the fastest compression +modes (level parameter 1 to 3). For these fast modes, new strings +are inserted in the hash table only when no match was found, or +when the match is not too long. This degrades the compression ratio +but saves time since there are both fewer insertions and fewer searches. + + +2. Decompression algorithm (inflate) + +2.1 Introduction + +The key question is how to represent a Huffman code (or any prefix code) so +that you can decode fast. The most important characteristic is that shorter +codes are much more common than longer codes, so pay attention to decoding the +short codes fast, and let the long codes take longer to decode. + +inflate() sets up a first level table that covers some number of bits of +input less than the length of longest code. It gets that many bits from the +stream, and looks it up in the table. The table will tell if the next +code is that many bits or less and how many, and if it is, it will tell +the value, else it will point to the next level table for which inflate() +grabs more bits and tries to decode a longer code. + +How many bits to make the first lookup is a tradeoff between the time it +takes to decode and the time it takes to build the table. If building the +table took no time (and if you had infinite memory), then there would only +be a first level table to cover all the way to the longest code. However, +building the table ends up taking a lot longer for more bits since short +codes are replicated many times in such a table. What inflate() does is +simply to make the number of bits in the first table a variable, and then +to set that variable for the maximum speed. + +For inflate, which has 286 possible codes for the literal/length tree, the size +of the first table is nine bits. Also the distance trees have 30 possible +values, and the size of the first table is six bits. Note that for each of +those cases, the table ended up one bit longer than the ``average'' code +length, i.e. the code length of an approximately flat code which would be a +little more than eight bits for 286 symbols and a little less than five bits +for 30 symbols. + + +2.2 More details on the inflate table lookup + +Ok, you want to know what this cleverly obfuscated inflate tree actually +looks like. You are correct that it's not a Huffman tree. It is simply a +lookup table for the first, let's say, nine bits of a Huffman symbol. The +symbol could be as short as one bit or as long as 15 bits. If a particular +symbol is shorter than nine bits, then that symbol's translation is duplicated +in all those entries that start with that symbol's bits. For example, if the +symbol is four bits, then it's duplicated 32 times in a nine-bit table. If a +symbol is nine bits long, it appears in the table once. + +If the symbol is longer than nine bits, then that entry in the table points +to another similar table for the remaining bits. Again, there are duplicated +entries as needed. The idea is that most of the time the symbol will be short +and there will only be one table look up. (That's whole idea behind data +compression in the first place.) For the less frequent long symbols, there +will be two lookups. If you had a compression method with really long +symbols, you could have as many levels of lookups as is efficient. For +inflate, two is enough. + +So a table entry either points to another table (in which case nine bits in +the above example are gobbled), or it contains the translation for the symbol +and the number of bits to gobble. Then you start again with the next +ungobbled bit. + +You may wonder: why not just have one lookup table for how ever many bits the +longest symbol is? The reason is that if you do that, you end up spending +more time filling in duplicate symbol entries than you do actually decoding. +At least for deflate's output that generates new trees every several 10's of +kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code +would take too long if you're only decoding several thousand symbols. At the +other extreme, you could make a new table for every bit in the code. In fact, +that's essentially a Huffman tree. But then you spend two much time +traversing the tree while decoding, even for short symbols. + +So the number of bits for the first lookup table is a trade of the time to +fill out the table vs. the time spent looking at the second level and above of +the table. + +Here is an example, scaled down: + +The code being decoded, with 10 symbols, from 1 to 6 bits long: + +A: 0 +B: 10 +C: 1100 +D: 11010 +E: 11011 +F: 11100 +G: 11101 +H: 11110 +I: 111110 +J: 111111 + +Let's make the first table three bits long (eight entries): + +000: A,1 +001: A,1 +010: A,1 +011: A,1 +100: B,2 +101: B,2 +110: -> table X (gobble 3 bits) +111: -> table Y (gobble 3 bits) + +Each entry is what the bits decode as and how many bits that is, i.e. how +many bits to gobble. Or the entry points to another table, with the number of +bits to gobble implicit in the size of the table. + +Table X is two bits long since the longest code starting with 110 is five bits +long: + +00: C,1 +01: C,1 +10: D,2 +11: E,2 + +Table Y is three bits long since the longest code starting with 111 is six +bits long: + +000: F,2 +001: F,2 +010: G,2 +011: G,2 +100: H,2 +101: H,2 +110: I,3 +111: J,3 + +So what we have here are three tables with a total of 20 entries that had to +be constructed. That's compared to 64 entries for a single table. Or +compared to 16 entries for a Huffman tree (six two entry tables and one four +entry table). Assuming that the code ideally represents the probability of +the symbols, it takes on the average 1.25 lookups per symbol. That's compared +to one lookup for the single table, or 1.66 lookups per symbol for the +Huffman tree. + +There, I think that gives you a picture of what's going on. For inflate, the +meaning of a particular symbol is often more than just a letter. It can be a +byte (a "literal"), or it can be either a length or a distance which +indicates a base value and a number of bits to fetch after the code that is +added to the base value. Or it might be the special end-of-block code. The +data structures created in inftrees.c try to encode all that information +compactly in the tables. + + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu + + +References: + +[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data +Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, +pp. 337-343. + +``DEFLATE Compressed Data Format Specification'' available in +http://www.ietf.org/rfc/rfc1951.txt diff -Nru clucene-core-0.9.21b/src/ext/zlib/ChangeLog clucene-core-2.3.3.4/src/ext/zlib/ChangeLog --- clucene-core-0.9.21b/src/ext/zlib/ChangeLog 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/ChangeLog 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,855 @@ + + ChangeLog file for zlib + +Changes in 1.2.3 (18 July 2005) +- Apply security vulnerability fixes to contrib/infback9 as well +- Clean up some text files (carriage returns, trailing space) +- Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant] + +Changes in 1.2.2.4 (11 July 2005) +- Add inflatePrime() function for starting inflation at bit boundary +- Avoid some Visual C warnings in deflate.c +- Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit + compile +- Fix some spelling errors in comments [Betts] +- Correct inflateInit2() error return documentation in zlib.h +- Added zran.c example of compressed data random access to examples + directory, shows use of inflatePrime() +- Fix cast for assignments to strm->state in inflate.c and infback.c +- Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer] +- Move declarations of gf2 functions to right place in crc32.c [Oberhumer] +- Add cast in trees.c t avoid a warning [Oberhumer] +- Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer] +- Update make_vms.com [Zinser] +- Initialize state->write in inflateReset() since copied in inflate_fast() +- Be more strict on incomplete code sets in inflate_table() and increase + ENOUGH and MAXD -- this repairs a possible security vulnerability for + invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for + discovering the vulnerability and providing test cases. +- Add ia64 support to configure for HP-UX [Smith] +- Add error return to gzread() for format or i/o error [Levin] +- Use malloc.h for OS/2 [Necasek] + +Changes in 1.2.2.3 (27 May 2005) +- Replace 1U constants in inflate.c and inftrees.c for 64-bit compile +- Typecast fread() return values in gzio.c [Vollant] +- Remove trailing space in minigzip.c outmode (VC++ can't deal with it) +- Fix crc check bug in gzread() after gzungetc() [Heiner] +- Add the deflateTune() function to adjust internal compression parameters +- Add a fast gzip decompressor, gun.c, to examples (use of inflateBack) +- Remove an incorrect assertion in examples/zpipe.c +- Add C++ wrapper in infback9.h [Donais] +- Fix bug in inflateCopy() when decoding fixed codes +- Note in zlib.h how much deflateSetDictionary() actually uses +- Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used) +- Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer] +- Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer] +- Add gzdirect() function to indicate transparent reads +- Update contrib/minizip [Vollant] +- Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer] +- Add casts in crc32.c to avoid warnings [Oberhumer] +- Add contrib/masmx64 [Vollant] +- Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant] + +Changes in 1.2.2.2 (30 December 2004) +- Replace structure assignments in deflate.c and inflate.c with zmemcpy to + avoid implicit memcpy calls (portability for no-library compilation) +- Increase sprintf() buffer size in gzdopen() to allow for large numbers +- Add INFLATE_STRICT to check distances against zlib header +- Improve WinCE errno handling and comments [Chang] +- Remove comment about no gzip header processing in FAQ +- Add Z_FIXED strategy option to deflateInit2() to force fixed trees +- Add updated make_vms.com [Coghlan], update README +- Create a new "examples" directory, move gzappend.c there, add zpipe.c, + fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html. +- Add FAQ entry and comments in deflate.c on uninitialized memory access +- Add Solaris 9 make options in configure [Gilbert] +- Allow strerror() usage in gzio.c for STDC +- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer] +- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant] +- Use z_off_t for adler32_combine() and crc32_combine() lengths +- Make adler32() much faster for small len +- Use OS_CODE in deflate() default gzip header + +Changes in 1.2.2.1 (31 October 2004) +- Allow inflateSetDictionary() call for raw inflate +- Fix inflate header crc check bug for file names and comments +- Add deflateSetHeader() and gz_header structure for custom gzip headers +- Add inflateGetheader() to retrieve gzip headers +- Add crc32_combine() and adler32_combine() functions +- Add alloc_func, free_func, in_func, out_func to Z_PREFIX list +- Use zstreamp consistently in zlib.h (inflate_back functions) +- Remove GUNZIP condition from definition of inflate_mode in inflate.h + and in contrib/inflate86/inffast.S [Truta, Anderson] +- Add support for AMD64 in contrib/inflate86/inffas86.c [Anderson] +- Update projects/README.projects and projects/visualc6 [Truta] +- Update win32/DLL_FAQ.txt [Truta] +- Avoid warning under NO_GZCOMPRESS in gzio.c; fix typo [Truta] +- Deprecate Z_ASCII; use Z_TEXT instead [Truta] +- Use a new algorithm for setting strm->data_type in trees.c [Truta] +- Do not define an exit() prototype in zutil.c unless DEBUG defined +- Remove prototype of exit() from zutil.c, example.c, minigzip.c [Truta] +- Add comment in zlib.h for Z_NO_FLUSH parameter to deflate() +- Fix Darwin build version identification [Peterson] + +Changes in 1.2.2 (3 October 2004) +- Update zlib.h comments on gzip in-memory processing +- Set adler to 1 in inflateReset() to support Java test suite [Walles] +- Add contrib/dotzlib [Ravn] +- Update win32/DLL_FAQ.txt [Truta] +- Update contrib/minizip [Vollant] +- Move contrib/visual-basic.txt to old/ [Truta] +- Fix assembler builds in projects/visualc6/ [Truta] + +Changes in 1.2.1.2 (9 September 2004) +- Update INDEX file +- Fix trees.c to update strm->data_type (no one ever noticed!) +- Fix bug in error case in inflate.c, infback.c, and infback9.c [Brown] +- Add "volatile" to crc table flag declaration (for DYNAMIC_CRC_TABLE) +- Add limited multitasking protection to DYNAMIC_CRC_TABLE +- Add NO_vsnprintf for VMS in zutil.h [Mozilla] +- Don't declare strerror() under VMS [Mozilla] +- Add comment to DYNAMIC_CRC_TABLE to use get_crc_table() to initialize +- Update contrib/ada [Anisimkov] +- Update contrib/minizip [Vollant] +- Fix configure to not hardcode directories for Darwin [Peterson] +- Fix gzio.c to not return error on empty files [Brown] +- Fix indentation; update version in contrib/delphi/ZLib.pas and + contrib/pascal/zlibpas.pas [Truta] +- Update mkasm.bat in contrib/masmx86 [Truta] +- Update contrib/untgz [Truta] +- Add projects/README.projects [Truta] +- Add project for MS Visual C++ 6.0 in projects/visualc6 [Cadieux, Truta] +- Update win32/DLL_FAQ.txt [Truta] +- Update list of Z_PREFIX symbols in zconf.h [Randers-Pehrson, Truta] +- Remove an unnecessary assignment to curr in inftrees.c [Truta] +- Add OS/2 to exe builds in configure [Poltorak] +- Remove err dummy parameter in zlib.h [Kientzle] + +Changes in 1.2.1.1 (9 January 2004) +- Update email address in README +- Several FAQ updates +- Fix a big fat bug in inftrees.c that prevented decoding valid + dynamic blocks with only literals and no distance codes -- + Thanks to "Hot Emu" for the bug report and sample file +- Add a note to puff.c on no distance codes case. + +Changes in 1.2.1 (17 November 2003) +- Remove a tab in contrib/gzappend/gzappend.c +- Update some interfaces in contrib for new zlib functions +- Update zlib version number in some contrib entries +- Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta] +- Support shared libraries on Hurd and KFreeBSD [Brown] +- Fix error in NO_DIVIDE option of adler32.c + +Changes in 1.2.0.8 (4 November 2003) +- Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas +- Add experimental NO_DIVIDE #define in adler32.c + - Possibly faster on some processors (let me know if it is) +- Correct Z_BLOCK to not return on first inflate call if no wrap +- Fix strm->data_type on inflate() return to correctly indicate EOB +- Add deflatePrime() function for appending in the middle of a byte +- Add contrib/gzappend for an example of appending to a stream +- Update win32/DLL_FAQ.txt [Truta] +- Delete Turbo C comment in README [Truta] +- Improve some indentation in zconf.h [Truta] +- Fix infinite loop on bad input in configure script [Church] +- Fix gzeof() for concatenated gzip files [Johnson] +- Add example to contrib/visual-basic.txt [Michael B.] +- Add -p to mkdir's in Makefile.in [vda] +- Fix configure to properly detect presence or lack of printf functions +- Add AS400 support [Monnerat] +- Add a little Cygwin support [Wilson] + +Changes in 1.2.0.7 (21 September 2003) +- Correct some debug formats in contrib/infback9 +- Cast a type in a debug statement in trees.c +- Change search and replace delimiter in configure from % to # [Beebe] +- Update contrib/untgz to 0.2 with various fixes [Truta] +- Add build support for Amiga [Nikl] +- Remove some directories in old that have been updated to 1.2 +- Add dylib building for Mac OS X in configure and Makefile.in +- Remove old distribution stuff from Makefile +- Update README to point to DLL_FAQ.txt, and add comment on Mac OS X +- Update links in README + +Changes in 1.2.0.6 (13 September 2003) +- Minor FAQ updates +- Update contrib/minizip to 1.00 [Vollant] +- Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta] +- Update POSTINC comment for 68060 [Nikl] +- Add contrib/infback9 with deflate64 decoding (unsupported) +- For MVS define NO_vsnprintf and undefine FAR [van Burik] +- Add pragma for fdopen on MVS [van Burik] + +Changes in 1.2.0.5 (8 September 2003) +- Add OF to inflateBackEnd() declaration in zlib.h +- Remember start when using gzdopen in the middle of a file +- Use internal off_t counters in gz* functions to properly handle seeks +- Perform more rigorous check for distance-too-far in inffast.c +- Add Z_BLOCK flush option to return from inflate at block boundary +- Set strm->data_type on return from inflate + - Indicate bits unused, if at block boundary, and if in last block +- Replace size_t with ptrdiff_t in crc32.c, and check for correct size +- Add condition so old NO_DEFLATE define still works for compatibility +- FAQ update regarding the Windows DLL [Truta] +- INDEX update: add qnx entry, remove aix entry [Truta] +- Install zlib.3 into mandir [Wilson] +- Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta] +- Adapt the zlib interface to the new DLL convention guidelines [Truta] +- Introduce ZLIB_WINAPI macro to allow the export of functions using + the WINAPI calling convention, for Visual Basic [Vollant, Truta] +- Update msdos and win32 scripts and makefiles [Truta] +- Export symbols by name, not by ordinal, in win32/zlib.def [Truta] +- Add contrib/ada [Anisimkov] +- Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta] +- Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant] +- Add contrib/masm686 [Truta] +- Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm + [Truta, Vollant] +- Update contrib/delphi; rename to contrib/pascal; add example [Truta] +- Remove contrib/delphi2; add a new contrib/delphi [Truta] +- Avoid inclusion of the nonstandard in contrib/iostream, + and fix some method prototypes [Truta] +- Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip + [Truta] +- Avoid the use of backslash (\) in contrib/minizip [Vollant] +- Fix file time handling in contrib/untgz; update makefiles [Truta] +- Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines + [Vollant] +- Remove contrib/vstudio/vc15_16 [Vollant] +- Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta] +- Update README.contrib [Truta] +- Invert the assignment order of match_head and s->prev[...] in + INSERT_STRING [Truta] +- Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings + [Truta] +- Compare function pointers with 0, not with NULL or Z_NULL [Truta] +- Fix prototype of syncsearch in inflate.c [Truta] +- Introduce ASMINF macro to be enabled when using an ASM implementation + of inflate_fast [Truta] +- Change NO_DEFLATE to NO_GZCOMPRESS [Truta] +- Modify test_gzio in example.c to take a single file name as a + parameter [Truta] +- Exit the example.c program if gzopen fails [Truta] +- Add type casts around strlen in example.c [Truta] +- Remove casting to sizeof in minigzip.c; give a proper type + to the variable compared with SUFFIX_LEN [Truta] +- Update definitions of STDC and STDC99 in zconf.h [Truta] +- Synchronize zconf.h with the new Windows DLL interface [Truta] +- Use SYS16BIT instead of __32BIT__ to distinguish between + 16- and 32-bit platforms [Truta] +- Use far memory allocators in small 16-bit memory models for + Turbo C [Truta] +- Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in + zlibCompileFlags [Truta] +- Cygwin has vsnprintf [Wilson] +- In Windows16, OS_CODE is 0, as in MSDOS [Truta] +- In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson] + +Changes in 1.2.0.4 (10 August 2003) +- Minor FAQ updates +- Be more strict when checking inflateInit2's windowBits parameter +- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well +- Add gzip wrapper option to deflateInit2 using windowBits +- Add updated QNX rule in configure and qnx directory [Bonnefoy] +- Make inflate distance-too-far checks more rigorous +- Clean up FAR usage in inflate +- Add casting to sizeof() in gzio.c and minigzip.c + +Changes in 1.2.0.3 (19 July 2003) +- Fix silly error in gzungetc() implementation [Vollant] +- Update contrib/minizip and contrib/vstudio [Vollant] +- Fix printf format in example.c +- Correct cdecl support in zconf.in.h [Anisimkov] +- Minor FAQ updates + +Changes in 1.2.0.2 (13 July 2003) +- Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons +- Attempt to avoid warnings in crc32.c for pointer-int conversion +- Add AIX to configure, remove aix directory [Bakker] +- Add some casts to minigzip.c +- Improve checking after insecure sprintf() or vsprintf() calls +- Remove #elif's from crc32.c +- Change leave label to inf_leave in inflate.c and infback.c to avoid + library conflicts +- Remove inflate gzip decoding by default--only enable gzip decoding by + special request for stricter backward compatibility +- Add zlibCompileFlags() function to return compilation information +- More typecasting in deflate.c to avoid warnings +- Remove leading underscore from _Capital #defines [Truta] +- Fix configure to link shared library when testing +- Add some Windows CE target adjustments [Mai] +- Remove #define ZLIB_DLL in zconf.h [Vollant] +- Add zlib.3 [Rodgers] +- Update RFC URL in deflate.c and algorithm.txt [Mai] +- Add zlib_dll_FAQ.txt to contrib [Truta] +- Add UL to some constants [Truta] +- Update minizip and vstudio [Vollant] +- Remove vestigial NEED_DUMMY_RETURN from zconf.in.h +- Expand use of NO_DUMMY_DECL to avoid all dummy structures +- Added iostream3 to contrib [Schwardt] +- Replace rewind() with fseek() for WinCE [Truta] +- Improve setting of zlib format compression level flags + - Report 0 for huffman and rle strategies and for level == 0 or 1 + - Report 2 only for level == 6 +- Only deal with 64K limit when necessary at compile time [Truta] +- Allow TOO_FAR check to be turned off at compile time [Truta] +- Add gzclearerr() function [Souza] +- Add gzungetc() function + +Changes in 1.2.0.1 (17 March 2003) +- Add Z_RLE strategy for run-length encoding [Truta] + - When Z_RLE requested, restrict matches to distance one + - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE +- Correct FASTEST compilation to allow level == 0 +- Clean up what gets compiled for FASTEST +- Incorporate changes to zconf.in.h [Vollant] + - Refine detection of Turbo C need for dummy returns + - Refine ZLIB_DLL compilation + - Include additional header file on VMS for off_t typedef +- Try to use _vsnprintf where it supplants vsprintf [Vollant] +- Add some casts in inffast.c +- Enchance comments in zlib.h on what happens if gzprintf() tries to + write more than 4095 bytes before compression +- Remove unused state from inflateBackEnd() +- Remove exit(0) from minigzip.c, example.c +- Get rid of all those darn tabs +- Add "check" target to Makefile.in that does the same thing as "test" +- Add "mostlyclean" and "maintainer-clean" targets to Makefile.in +- Update contrib/inflate86 [Anderson] +- Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant] +- Add msdos and win32 directories with makefiles [Truta] +- More additions and improvements to the FAQ + +Changes in 1.2.0 (9 March 2003) +- New and improved inflate code + - About 20% faster + - Does not allocate 32K window unless and until needed + - Automatically detects and decompresses gzip streams + - Raw inflate no longer needs an extra dummy byte at end + - Added inflateBack functions using a callback interface--even faster + than inflate, useful for file utilities (gzip, zip) + - Added inflateCopy() function to record state for random access on + externally generated deflate streams (e.g. in gzip files) + - More readable code (I hope) +- New and improved crc32() + - About 50% faster, thanks to suggestions from Rodney Brown +- Add deflateBound() and compressBound() functions +- Fix memory leak in deflateInit2() +- Permit setting dictionary for raw deflate (for parallel deflate) +- Fix const declaration for gzwrite() +- Check for some malloc() failures in gzio.c +- Fix bug in gzopen() on single-byte file 0x1f +- Fix bug in gzread() on concatenated file with 0x1f at end of buffer + and next buffer doesn't start with 0x8b +- Fix uncompress() to return Z_DATA_ERROR on truncated input +- Free memory at end of example.c +- Remove MAX #define in trees.c (conflicted with some libraries) +- Fix static const's in deflate.c, gzio.c, and zutil.[ch] +- Declare malloc() and free() in gzio.c if STDC not defined +- Use malloc() instead of calloc() in zutil.c if int big enough +- Define STDC for AIX +- Add aix/ with approach for compiling shared library on AIX +- Add HP-UX support for shared libraries in configure +- Add OpenUNIX support for shared libraries in configure +- Use $cc instead of gcc to build shared library +- Make prefix directory if needed when installing +- Correct Macintosh avoidance of typedef Byte in zconf.h +- Correct Turbo C memory allocation when under Linux +- Use libz.a instead of -lz in Makefile (assure use of compiled library) +- Update configure to check for snprintf or vsnprintf functions and their + return value, warn during make if using an insecure function +- Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that + is lost when library is used--resolution is to build new zconf.h +- Documentation improvements (in zlib.h): + - Document raw deflate and inflate + - Update RFCs URL + - Point out that zlib and gzip formats are different + - Note that Z_BUF_ERROR is not fatal + - Document string limit for gzprintf() and possible buffer overflow + - Note requirement on avail_out when flushing + - Note permitted values of flush parameter of inflate() +- Add some FAQs (and even answers) to the FAQ +- Add contrib/inflate86/ for x86 faster inflate +- Add contrib/blast/ for PKWare Data Compression Library decompression +- Add contrib/puff/ simple inflate for deflate format description + +Changes in 1.1.4 (11 March 2002) +- ZFREE was repeated on same allocation on some error conditions. + This creates a security problem described in + http://www.zlib.org/advisory-2002-03-11.txt +- Returned incorrect error (Z_MEM_ERROR) on some invalid data +- Avoid accesses before window for invalid distances with inflate window + less than 32K. +- force windowBits > 8 to avoid a bug in the encoder for a window size + of 256 bytes. (A complete fix will be available in 1.1.5). + +Changes in 1.1.3 (9 July 1998) +- fix "an inflate input buffer bug that shows up on rare but persistent + occasions" (Mark) +- fix gzread and gztell for concatenated .gz files (Didier Le Botlan) +- fix gzseek(..., SEEK_SET) in write mode +- fix crc check after a gzeek (Frank Faubert) +- fix miniunzip when the last entry in a zip file is itself a zip file + (J Lillge) +- add contrib/asm586 and contrib/asm686 (Brian Raiter) + See http://www.muppetlabs.com/~breadbox/software/assembly.html +- add support for Delphi 3 in contrib/delphi (Bob Dellaca) +- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) +- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) +- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) +- added a FAQ file + +- Support gzdopen on Mac with Metrowerks (Jason Linhart) +- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart) +- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young) +- avoid some warnings with Borland C (Tom Tanner) +- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant) +- emulate utime() for WIN32 in contrib/untgz (Gilles Vollant) +- allow several arguments to configure (Tim Mooney, Frodo Looijaard) +- use libdir and includedir in Makefile.in (Tim Mooney) +- support shared libraries on OSF1 V4 (Tim Mooney) +- remove so_locations in "make clean" (Tim Mooney) +- fix maketree.c compilation error (Glenn, Mark) +- Python interface to zlib now in Python 1.5 (Jeremy Hylton) +- new Makefile.riscos (Rich Walker) +- initialize static descriptors in trees.c for embedded targets (Nick Smith) +- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith) +- add the OS/2 files in Makefile.in too (Andrew Zabolotny) +- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane) +- fix maketree.c to allow clean compilation of inffixed.h (Mark) +- fix parameter check in deflateCopy (Gunther Nikl) +- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler) +- Many portability patches by Christian Spieler: + . zutil.c, zutil.h: added "const" for zmem* + . Make_vms.com: fixed some typos + . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists + . msdos/Makefile.msc: remove "default rtl link library" info from obj files + . msdos/Makefile.*: use model-dependent name for the built zlib library + . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc: + new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT) +- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane) +- replace __far with _far for better portability (Christian Spieler, Tom Lane) +- fix test for errno.h in configure (Tim Newsham) + +Changes in 1.1.2 (19 March 98) +- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) + See http://www.winimage.com/zLibDll/unzip.html +- preinitialize the inflate tables for fixed codes, to make the code + completely thread safe (Mark) +- some simplifications and slight speed-up to the inflate code (Mark) +- fix gzeof on non-compressed files (Allan Schrum) +- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs) +- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn) +- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny) +- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori) +- do not wrap extern "C" around system includes (Tom Lane) +- mention zlib binding for TCL in README (Andreas Kupries) +- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert) +- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson) +- allow "configure --prefix $HOME" (Tim Mooney) +- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson) +- move Makefile.sas to amiga/Makefile.sas + +Changes in 1.1.1 (27 Feb 98) +- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) +- remove block truncation heuristic which had very marginal effect for zlib + (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the + compression ratio on some files. This also allows inlining _tr_tally for + matches in deflate_slow. +- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) + +Changes in 1.1.0 (24 Feb 98) +- do not return STREAM_END prematurely in inflate (John Bowler) +- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) +- compile with -DFASTEST to get compression code optimized for speed only +- in minigzip, try mmap'ing the input file first (Miguel Albrecht) +- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain + on Sun but significant on HP) + +- add a pointer to experimental unzip library in README (Gilles Vollant) +- initialize variable gcc in configure (Chris Herborth) + +Changes in 1.0.9 (17 Feb 1998) +- added gzputs and gzgets functions +- do not clear eof flag in gzseek (Mark Diekhans) +- fix gzseek for files in transparent mode (Mark Diekhans) +- do not assume that vsprintf returns the number of bytes written (Jens Krinke) +- replace EXPORT with ZEXPORT to avoid conflict with other programs +- added compress2 in zconf.h, zlib.def, zlib.dnt +- new asm code from Gilles Vollant in contrib/asm386 +- simplify the inflate code (Mark): + . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new() + . ZALLOC the length list in inflate_trees_fixed() instead of using stack + . ZALLOC the value area for huft_build() instead of using stack + . Simplify Z_FINISH check in inflate() + +- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8 +- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi) +- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with + the declaration of FAR (Gilles VOllant) +- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann) +- read_buf buf parameter of type Bytef* instead of charf* +- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout) +- do not redeclare unlink in minigzip.c for WIN32 (John Bowler) +- fix check for presence of directories in "make install" (Ian Willis) + +Changes in 1.0.8 (27 Jan 1998) +- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant) +- fix gzgetc and gzputc for big endian systems (Markus Oberhumer) +- added compress2() to allow setting the compression level +- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) +- use constant arrays for the static trees in trees.c instead of computing + them at run time (thanks to Ken Raeburn for this suggestion). To create + trees.h, compile with GEN_TREES_H and run "make test". +- check return code of example in "make test" and display result +- pass minigzip command line options to file_compress +- simplifying code of inflateSync to avoid gcc 2.8 bug + +- support CC="gcc -Wall" in configure -s (QingLong) +- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn) +- fix test for shared library support to avoid compiler warnings +- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant) +- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit) +- do not use fdopen for Metrowerks on Mac (Brad Pettit)) +- add checks for gzputc and gzputc in example.c +- avoid warnings in gzio.c and deflate.c (Andreas Kleinert) +- use const for the CRC table (Ken Raeburn) +- fixed "make uninstall" for shared libraries +- use Tracev instead of Trace in infblock.c +- in example.c use correct compressed length for test_sync +- suppress +vnocompatwarnings in configure for HPUX (not always supported) + +Changes in 1.0.7 (20 Jan 1998) +- fix gzseek which was broken in write mode +- return error for gzseek to negative absolute position +- fix configure for Linux (Chun-Chung Chen) +- increase stack space for MSC (Tim Wegner) +- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant) +- define EXPORTVA for gzprintf (Gilles Vollant) +- added man page zlib.3 (Rick Rodgers) +- for contrib/untgz, fix makedir() and improve Makefile + +- check gzseek in write mode in example.c +- allocate extra buffer for seeks only if gzseek is actually called +- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant) +- add inflateSyncPoint in zconf.h +- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def + +Changes in 1.0.6 (19 Jan 1998) +- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and + gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) +- Fix a deflate bug occurring only with compression level 0 (thanks to + Andy Buckler for finding this one). +- In minigzip, pass transparently also the first byte for .Z files. +- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() +- check Z_FINISH in inflate (thanks to Marc Schluper) +- Implement deflateCopy (thanks to Adam Costello) +- make static libraries by default in configure, add --shared option. +- move MSDOS or Windows specific files to directory msdos +- suppress the notion of partial flush to simplify the interface + (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) +- suppress history buffer provided by application to simplify the interface + (this feature was not implemented anyway in 1.0.4) +- next_in and avail_in must be initialized before calling inflateInit or + inflateInit2 +- add EXPORT in all exported functions (for Windows DLL) +- added Makefile.nt (thanks to Stephen Williams) +- added the unsupported "contrib" directory: + contrib/asm386/ by Gilles Vollant + 386 asm code replacing longest_match(). + contrib/iostream/ by Kevin Ruland + A C++ I/O streams interface to the zlib gz* functions + contrib/iostream2/ by Tyge Løvset + Another C++ I/O streams interface + contrib/untgz/ by "Pedro A. Aranda Guti\irrez" + A very simple tar.gz file extractor using zlib + contrib/visual-basic.txt by Carlos Rios + How to use compress(), uncompress() and the gz* functions from VB. +- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression + level) in minigzip (thanks to Tom Lane) + +- use const for rommable constants in deflate +- added test for gzseek and gztell in example.c +- add undocumented function inflateSyncPoint() (hack for Paul Mackerras) +- add undocumented function zError to convert error code to string + (for Tim Smithers) +- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. +- Use default memcpy for Symantec MSDOS compiler. +- Add EXPORT keyword for check_func (needed for Windows DLL) +- add current directory to LD_LIBRARY_PATH for "make test" +- create also a link for libz.so.1 +- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) +- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) +- added -soname for Linux in configure (Chun-Chung Chen, +- assign numbers to the exported functions in zlib.def (for Windows DLL) +- add advice in zlib.h for best usage of deflateSetDictionary +- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) +- allow compilation with ANSI keywords only enabled for TurboC in large model +- avoid "versionString"[0] (Borland bug) +- add NEED_DUMMY_RETURN for Borland +- use variable z_verbose for tracing in debug mode (L. Peter Deutsch). +- allow compilation with CC +- defined STDC for OS/2 (David Charlap) +- limit external names to 8 chars for MVS (Thomas Lund) +- in minigzip.c, use static buffers only for 16-bit systems +- fix suffix check for "minigzip -d foo.gz" +- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) +- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) +- added makelcc.bat for lcc-win32 (Tom St Denis) +- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) +- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. +- check for unistd.h in configure (for off_t) +- remove useless check parameter in inflate_blocks_free +- avoid useless assignment of s->check to itself in inflate_blocks_new +- do not flush twice in gzclose (thanks to Ken Raeburn) +- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h +- use NO_ERRNO_H instead of enumeration of operating systems with errno.h +- work around buggy fclose on pipes for HP/UX +- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson) +- fix configure if CC is already equal to gcc + +Changes in 1.0.5 (3 Jan 98) +- Fix inflate to terminate gracefully when fed corrupted or invalid data +- Use const for rommable constants in inflate +- Eliminate memory leaks on error conditions in inflate +- Removed some vestigial code in inflate +- Update web address in README + +Changes in 1.0.4 (24 Jul 96) +- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF + bit, so the decompressor could decompress all the correct data but went + on to attempt decompressing extra garbage data. This affected minigzip too. +- zlibVersion and gzerror return const char* (needed for DLL) +- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) +- use z_error only for DEBUG (avoid problem with DLLs) + +Changes in 1.0.3 (2 Jul 96) +- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS + small and medium models; this makes the library incompatible with previous + versions for these models. (No effect in large model or on other systems.) +- return OK instead of BUF_ERROR if previous deflate call returned with + avail_out as zero but there is nothing to do +- added memcmp for non STDC compilers +- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly) +- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO) +- better check for 16-bit mode MSC (avoids problem with Symantec) + +Changes in 1.0.2 (23 May 96) +- added Windows DLL support +- added a function zlibVersion (for the DLL support) +- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model) +- Bytef is define's instead of typedef'd only for Borland C +- avoid reading uninitialized memory in example.c +- mention in README that the zlib format is now RFC1950 +- updated Makefile.dj2 +- added algorithm.doc + +Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] +- fix array overlay in deflate.c which sometimes caused bad compressed data +- fix inflate bug with empty stored block +- fix MSDOS medium model which was broken in 0.99 +- fix deflateParams() which could generated bad compressed data. +- Bytef is define'd instead of typedef'ed (work around Borland bug) +- added an INDEX file +- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), + Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) +- speed up adler32 for modern machines without auto-increment +- added -ansi for IRIX in configure +- static_init_done in trees.c is an int +- define unlink as delete for VMS +- fix configure for QNX +- add configure branch for SCO and HPUX +- avoid many warnings (unused variables, dead assignments, etc...) +- no fdopen for BeOS +- fix the Watcom fix for 32 bit mode (define FAR as empty) +- removed redefinition of Byte for MKWERKS +- work around an MWKERKS bug (incorrect merge of all .h files) + +Changes in 0.99 (27 Jan 96) +- allow preset dictionary shared between compressor and decompressor +- allow compression level 0 (no compression) +- add deflateParams in zlib.h: allow dynamic change of compression level + and compression strategy. +- test large buffers and deflateParams in example.c +- add optional "configure" to build zlib as a shared library +- suppress Makefile.qnx, use configure instead +- fixed deflate for 64-bit systems (detected on Cray) +- fixed inflate_blocks for 64-bit systems (detected on Alpha) +- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2) +- always return Z_BUF_ERROR when deflate() has nothing to do +- deflateInit and inflateInit are now macros to allow version checking +- prefix all global functions and types with z_ with -DZ_PREFIX +- make falloc completely reentrant (inftrees.c) +- fixed very unlikely race condition in ct_static_init +- free in reverse order of allocation to help memory manager +- use zlib-1.0/* instead of zlib/* inside the tar.gz +- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith + -Wconversion -Wstrict-prototypes -Wmissing-prototypes" +- allow gzread on concatenated .gz files +- deflateEnd now returns Z_DATA_ERROR if it was premature +- deflate is finally (?) fully deterministic (no matches beyond end of input) +- Document Z_SYNC_FLUSH +- add uninstall in Makefile +- Check for __cpluplus in zlib.h +- Better test in ct_align for partial flush +- avoid harmless warnings for Borland C++ +- initialize hash_head in deflate.c +- avoid warning on fdopen (gzio.c) for HP cc -Aa +- include stdlib.h for STDC compilers +- include errno.h for Cray +- ignore error if ranlib doesn't exist +- call ranlib twice for NeXTSTEP +- use exec_prefix instead of prefix for libz.a +- renamed ct_* as _tr_* to avoid conflict with applications +- clear z->msg in inflateInit2 before any error return +- initialize opaque in example.c, gzio.c, deflate.c and inflate.c +- fixed typo in zconf.h (_GNUC__ => __GNUC__) +- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode) +- fix typo in Make_vms.com (f$trnlnm -> f$getsyi) +- in fcalloc, normalize pointer if size > 65520 bytes +- don't use special fcalloc for 32 bit Borland C++ +- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... +- use Z_BINARY instead of BINARY +- document that gzclose after gzdopen will close the file +- allow "a" as mode in gzopen. +- fix error checking in gzread +- allow skipping .gz extra-field on pipes +- added reference to Perl interface in README +- put the crc table in FAR data (I dislike more and more the medium model :) +- added get_crc_table +- added a dimension to all arrays (Borland C can't count). +- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast +- guard against multiple inclusion of *.h (for precompiled header on Mac) +- Watcom C pretends to be Microsoft C small model even in 32 bit mode. +- don't use unsized arrays to avoid silly warnings by Visual C++: + warning C4746: 'inflate_mask' : unsized array treated as '__far' + (what's wrong with far data in far model?). +- define enum out of inflate_blocks_state to allow compilation with C++ + +Changes in 0.95 (16 Aug 95) +- fix MSDOS small and medium model (now easier to adapt to any compiler) +- inlined send_bits +- fix the final (:-) bug for deflate with flush (output was correct but + not completely flushed in rare occasions). +- default window size is same for compression and decompression + (it's now sufficient to set MAX_WBITS in zconf.h). +- voidp -> voidpf and voidnp -> voidp (for consistency with other + typedefs and because voidnp was not near in large model). + +Changes in 0.94 (13 Aug 95) +- support MSDOS medium model +- fix deflate with flush (could sometimes generate bad output) +- fix deflateReset (zlib header was incorrectly suppressed) +- added support for VMS +- allow a compression level in gzopen() +- gzflush now calls fflush +- For deflate with flush, flush even if no more input is provided. +- rename libgz.a as libz.a +- avoid complex expression in infcodes.c triggering Turbo C bug +- work around a problem with gcc on Alpha (in INSERT_STRING) +- don't use inline functions (problem with some gcc versions) +- allow renaming of Byte, uInt, etc... with #define. +- avoid warning about (unused) pointer before start of array in deflate.c +- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c +- avoid reserved word 'new' in trees.c + +Changes in 0.93 (25 June 95) +- temporarily disable inline functions +- make deflate deterministic +- give enough lookahead for PARTIAL_FLUSH +- Set binary mode for stdin/stdout in minigzip.c for OS/2 +- don't even use signed char in inflate (not portable enough) +- fix inflate memory leak for segmented architectures + +Changes in 0.92 (3 May 95) +- don't assume that char is signed (problem on SGI) +- Clear bit buffer when starting a stored block +- no memcpy on Pyramid +- suppressed inftest.c +- optimized fill_window, put longest_match inline for gcc +- optimized inflate on stored blocks. +- untabify all sources to simplify patches + +Changes in 0.91 (2 May 95) +- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h +- Document the memory requirements in zconf.h +- added "make install" +- fix sync search logic in inflateSync +- deflate(Z_FULL_FLUSH) now works even if output buffer too short +- after inflateSync, don't scare people with just "lo world" +- added support for DJGPP + +Changes in 0.9 (1 May 95) +- don't assume that zalloc clears the allocated memory (the TurboC bug + was Mark's bug after all :) +- let again gzread copy uncompressed data unchanged (was working in 0.71) +- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented +- added a test of inflateSync in example.c +- moved MAX_WBITS to zconf.h because users might want to change that. +- document explicitly that zalloc(64K) on MSDOS must return a normalized + pointer (zero offset) +- added Makefiles for Microsoft C, Turbo C, Borland C++ +- faster crc32() + +Changes in 0.8 (29 April 95) +- added fast inflate (inffast.c) +- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this + is incompatible with previous versions of zlib which returned Z_OK. +- work around a TurboC compiler bug (bad code for b << 0, see infutil.h) + (actually that was not a compiler bug, see 0.81 above) +- gzread no longer reads one extra byte in certain cases +- In gzio destroy(), don't reference a freed structure +- avoid many warnings for MSDOS +- avoid the ERROR symbol which is used by MS Windows + +Changes in 0.71 (14 April 95) +- Fixed more MSDOS compilation problems :( There is still a bug with + TurboC large model. + +Changes in 0.7 (14 April 95) +- Added full inflate support. +- Simplified the crc32() interface. The pre- and post-conditioning + (one's complement) is now done inside crc32(). WARNING: this is + incompatible with previous versions; see zlib.h for the new usage. + +Changes in 0.61 (12 April 95) +- workaround for a bug in TurboC. example and minigzip now work on MSDOS. + +Changes in 0.6 (11 April 95) +- added minigzip.c +- added gzdopen to reopen a file descriptor as gzFile +- added transparent reading of non-gziped files in gzread. +- fixed bug in gzread (don't read crc as data) +- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). +- don't allocate big arrays in the stack (for MSDOS) +- fix some MSDOS compilation problems + +Changes in 0.5: +- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but + not yet Z_FULL_FLUSH. +- support decompression but only in a single step (forced Z_FINISH) +- added opaque object for zalloc and zfree. +- added deflateReset and inflateReset +- added a variable zlib_version for consistency checking. +- renamed the 'filter' parameter of deflateInit2 as 'strategy'. + Added Z_FILTERED and Z_HUFFMAN_ONLY constants. + +Changes in 0.4: +- avoid "zip" everywhere, use zlib instead of ziplib. +- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush + if compression method == 8. +- added adler32 and crc32 +- renamed deflateOptions as deflateInit2, call one or the other but not both +- added the method parameter for deflateInit2. +- added inflateInit2 +- simplied considerably deflateInit and inflateInit by not supporting + user-provided history buffer. This is supported only in deflateInit2 + and inflateInit2. + +Changes in 0.3: +- prefix all macro names with Z_ +- use Z_FINISH instead of deflateEnd to finish compression. +- added Z_HUFFMAN_ONLY +- added gzerror() diff -Nru clucene-core-0.9.21b/src/ext/zlib/compress.c clucene-core-2.3.3.4/src/ext/zlib/compress.c --- clucene-core-0.9.21b/src/ext/zlib/compress.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/compress.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,79 @@ +/* compress.c -- compress a memory buffer + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ +int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; + int level; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; +#ifdef MAXSEG_64K + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; +#endif + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + + err = deflateInit(&stream, level); + if (err != Z_OK) return err; + + err = deflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + deflateEnd(&stream); + return err == Z_OK ? Z_BUF_ERROR : err; + } + *destLen = stream.total_out; + + err = deflateEnd(&stream); + return err; +} + +/* =========================================================================== + */ +int ZEXPORT compress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); +} + +/* =========================================================================== + If the default memLevel or windowBits for deflateInit() is changed, then + this function needs to be updated. + */ +uLong ZEXPORT compressBound (sourceLen) + uLong sourceLen; +{ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; +} diff -Nru clucene-core-0.9.21b/src/ext/zlib/crc32.c clucene-core-2.3.3.4/src/ext/zlib/crc32.c --- clucene-core-0.9.21b/src/ext/zlib/crc32.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/crc32.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,423 @@ +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Thanks to Rodney Brown for his contribution of faster + * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing + * tables for updating the shift register in one step with three exclusive-ors + * instead of four steps with four exclusive-ors. This results in about a + * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. + */ + +/* @(#) $Id$ */ + +/* + Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore + protection on the static variables used to control the first-use generation + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should + first call get_crc_table() to initialize the tables before allowing more than + one thread to use crc32(). + */ + +#ifdef MAKECRCH +# include +# ifndef DYNAMIC_CRC_TABLE +# define DYNAMIC_CRC_TABLE +# endif /* !DYNAMIC_CRC_TABLE */ +#endif /* MAKECRCH */ + +#include "zutil.h" /* for STDC and FAR definitions */ + +#define local static + +/* Find a four-byte integer type for crc32_little() and crc32_big(). */ +#ifndef NOBYFOUR +# ifdef STDC /* need ANSI C limits.h to determine sizes */ +# include +# define BYFOUR +# if (UINT_MAX == 0xffffffffUL) + typedef unsigned int u4; +# else +# if (ULONG_MAX == 0xffffffffUL) + typedef unsigned long u4; +# else +# if (USHRT_MAX == 0xffffffffUL) + typedef unsigned short u4; +# else +# undef BYFOUR /* can't find a four-byte integer type! */ +# endif +# endif +# endif +# endif /* STDC */ +#endif /* !NOBYFOUR */ + +/* Definitions for doing the crc four data bytes at a time. */ +#ifdef BYFOUR +# define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ + (((w)&0xff00)<<8)+(((w)&0xff)<<24)) + local unsigned long crc32_little OF((unsigned long, + const unsigned char FAR *, unsigned)); + local unsigned long crc32_big OF((unsigned long, + const unsigned char FAR *, unsigned)); +# define TBLS 8 +#else +# define TBLS 1 +#endif /* BYFOUR */ + +/* Local functions for crc concatenation */ +local unsigned long gf2_matrix_times OF((unsigned long *mat, + unsigned long vec)); +local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); + +#ifdef DYNAMIC_CRC_TABLE + +local volatile int crc_table_empty = 1; +local unsigned long FAR crc_table[TBLS][256]; +local void make_crc_table OF((void)); +#ifdef MAKECRCH + local void write_table OF((FILE *, const unsigned long FAR *)); +#endif /* MAKECRCH */ +/* + Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The first table is simply the CRC of all possible eight bit values. This is + all the information needed to generate CRCs on data a byte at a time for all + combinations of CRC register values and incoming bytes. The remaining tables + allow for word-at-a-time CRC calculation for both big-endian and little- + endian machines, where a word is four bytes. +*/ +local void make_crc_table() +{ + unsigned long c; + int n, k; + unsigned long poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static volatile int first = 1; /* flag to limit concurrent making */ + static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* See if another task is already doing this (not thread-safe, but better + than nothing -- significantly reduces duration of vulnerability in + case the advice about DYNAMIC_CRC_TABLE is ignored) */ + if (first) { + first = 0; + + /* make exclusive-or pattern from polynomial (0xedb88320UL) */ + poly = 0UL; + for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++) + poly |= 1UL << (31 - p[n]); + + /* generate a crc for every 8-bit value */ + for (n = 0; n < 256; n++) { + c = (unsigned long)n; + for (k = 0; k < 8; k++) + c = c & 1 ? poly ^ (c >> 1) : c >> 1; + crc_table[0][n] = c; + } + +#ifdef BYFOUR + /* generate crc for each value followed by one, two, and three zeros, + and then the byte reversal of those as well as the first table */ + for (n = 0; n < 256; n++) { + c = crc_table[0][n]; + crc_table[4][n] = REV(c); + for (k = 1; k < 4; k++) { + c = crc_table[0][c & 0xff] ^ (c >> 8); + crc_table[k][n] = c; + crc_table[k + 4][n] = REV(c); + } + } +#endif /* BYFOUR */ + + crc_table_empty = 0; + } + else { /* not first */ + /* wait for the other guy to finish (not efficient, but rare) */ + while (crc_table_empty) + ; + } + +#ifdef MAKECRCH + /* write out CRC tables to crc32.h */ + { + FILE *out; + + out = fopen("crc32.h", "w"); + if (out == NULL) return; + fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); + fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); + fprintf(out, "local const unsigned long FAR "); + fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); + write_table(out, crc_table[0]); +# ifdef BYFOUR + fprintf(out, "#ifdef BYFOUR\n"); + for (k = 1; k < 8; k++) { + fprintf(out, " },\n {\n"); + write_table(out, crc_table[k]); + } + fprintf(out, "#endif\n"); +# endif /* BYFOUR */ + fprintf(out, " }\n};\n"); + fclose(out); + } +#endif /* MAKECRCH */ +} + +#ifdef MAKECRCH +local void write_table(out, table) + FILE *out; + const unsigned long FAR *table; +{ + int n; + + for (n = 0; n < 256; n++) + fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", table[n], + n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); +} +#endif /* MAKECRCH */ + +#else /* !DYNAMIC_CRC_TABLE */ +/* ======================================================================== + * Tables of CRC-32s of all single-byte values, made by make_crc_table(). + */ +#include "crc32.h" +#endif /* DYNAMIC_CRC_TABLE */ + +/* ========================================================================= + * This function can be used by asm versions of crc32() + */ +const unsigned long FAR * ZEXPORT get_crc_table() +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + return (const unsigned long FAR *)crc_table; +} + +/* ========================================================================= */ +#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) +#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 + +/* ========================================================================= */ +unsigned long ZEXPORT crc32(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + if (buf == Z_NULL) return 0UL; + +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + +#ifdef BYFOUR + if (sizeof(void *) == sizeof(ptrdiff_t)) { + u4 endian; + + endian = 1; + if (*((unsigned char *)(&endian))) + return crc32_little(crc, buf, len); + else + return crc32_big(crc, buf, len); + } +#endif /* BYFOUR */ + crc = crc ^ 0xffffffffUL; + while (len >= 8) { + DO8; + len -= 8; + } + if (len) do { + DO1; + } while (--len); + return crc ^ 0xffffffffUL; +} + +#ifdef BYFOUR + +/* ========================================================================= */ +#define DOLIT4 c ^= *buf4++; \ + c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ + crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] +#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 + +/* ========================================================================= */ +local unsigned long crc32_little(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = (u4)crc; + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + len--; + } + + buf4 = (const u4 FAR *)(const void FAR *)buf; + while (len >= 32) { + DOLIT32; + len -= 32; + } + while (len >= 4) { + DOLIT4; + len -= 4; + } + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + } while (--len); + c = ~c; + return (unsigned long)c; +} + +/* ========================================================================= */ +#define DOBIG4 c ^= *++buf4; \ + c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ + crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] +#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 + +/* ========================================================================= */ +local unsigned long crc32_big(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = REV((u4)crc); + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + len--; + } + + buf4 = (const u4 FAR *)(const void FAR *)buf; + buf4--; + while (len >= 32) { + DOBIG32; + len -= 32; + } + while (len >= 4) { + DOBIG4; + len -= 4; + } + buf4++; + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + } while (--len); + c = ~c; + return (unsigned long)(REV(c)); +} + +#endif /* BYFOUR */ + +#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ + +/* ========================================================================= */ +local unsigned long gf2_matrix_times(mat, vec) + unsigned long *mat; + unsigned long vec; +{ + unsigned long sum; + + sum = 0; + while (vec) { + if (vec & 1) + sum ^= *mat; + vec >>= 1; + mat++; + } + return sum; +} + +/* ========================================================================= */ +local void gf2_matrix_square(square, mat) + unsigned long *square; + unsigned long *mat; +{ + int n; + + for (n = 0; n < GF2_DIM; n++) + square[n] = gf2_matrix_times(mat, mat[n]); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off_t len2; +{ + int n; + unsigned long row; + unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ + unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ + + /* degenerate case */ + if (len2 == 0) + return crc1; + + /* put operator for one zero bit in odd */ + odd[0] = 0xedb88320L; /* CRC-32 polynomial */ + row = 1; + for (n = 1; n < GF2_DIM; n++) { + odd[n] = row; + row <<= 1; + } + + /* put operator for two zero bits in even */ + gf2_matrix_square(even, odd); + + /* put operator for four zero bits in odd */ + gf2_matrix_square(odd, even); + + /* apply len2 zeros to crc1 (first square will put the operator for one + zero byte, eight zero bits, in even) */ + do { + /* apply zeros operator for this bit of len2 */ + gf2_matrix_square(even, odd); + if (len2 & 1) + crc1 = gf2_matrix_times(even, crc1); + len2 >>= 1; + + /* if no more bits set, then done */ + if (len2 == 0) + break; + + /* another iteration of the loop with odd and even swapped */ + gf2_matrix_square(odd, even); + if (len2 & 1) + crc1 = gf2_matrix_times(odd, crc1); + len2 >>= 1; + + /* if no more bits set, then done */ + } while (len2 != 0); + + /* return combined crc */ + crc1 ^= crc2; + return crc1; +} diff -Nru clucene-core-0.9.21b/src/ext/zlib/crc32.h clucene-core-2.3.3.4/src/ext/zlib/crc32.h --- clucene-core-0.9.21b/src/ext/zlib/crc32.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/crc32.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,441 @@ +/* crc32.h -- tables for rapid CRC calculation + * Generated automatically by crc32.c + */ + +local const unsigned long FAR crc_table[TBLS][256] = +{ + { + 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, + 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, + 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, + 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, + 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, + 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, + 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, + 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, + 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, + 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, + 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, + 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, + 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, + 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, + 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, + 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, + 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, + 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, + 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, + 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, + 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, + 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, + 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, + 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, + 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, + 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, + 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, + 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, + 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, + 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, + 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, + 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, + 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, + 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, + 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, + 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, + 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, + 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, + 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, + 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, + 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, + 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, + 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, + 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, + 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, + 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, + 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, + 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, + 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, + 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, + 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, + 0x2d02ef8dUL +#ifdef BYFOUR + }, + { + 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, + 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, + 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, + 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, + 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, + 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, + 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, + 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, + 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, + 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, + 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, + 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, + 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, + 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, + 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, + 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, + 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, + 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, + 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, + 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, + 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, + 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, + 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, + 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, + 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, + 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, + 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, + 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, + 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, + 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, + 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, + 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, + 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, + 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, + 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, + 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, + 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, + 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, + 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, + 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, + 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, + 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, + 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, + 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, + 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, + 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, + 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, + 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, + 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, + 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, + 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, + 0x9324fd72UL + }, + { + 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, + 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, + 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, + 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, + 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, + 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, + 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, + 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, + 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, + 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, + 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, + 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, + 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, + 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, + 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, + 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, + 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, + 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, + 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, + 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, + 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, + 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, + 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, + 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, + 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, + 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, + 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, + 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, + 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, + 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, + 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, + 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, + 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, + 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, + 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, + 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, + 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, + 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, + 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, + 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, + 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, + 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, + 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, + 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, + 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, + 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, + 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, + 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, + 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, + 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, + 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, + 0xbe9834edUL + }, + { + 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, + 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, + 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, + 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, + 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, + 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, + 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, + 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, + 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, + 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, + 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, + 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, + 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, + 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, + 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, + 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, + 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, + 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, + 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, + 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, + 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, + 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, + 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, + 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, + 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, + 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, + 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, + 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, + 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, + 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, + 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, + 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, + 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, + 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, + 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, + 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, + 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, + 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, + 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, + 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, + 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, + 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, + 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, + 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, + 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, + 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, + 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, + 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, + 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, + 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, + 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, + 0xde0506f1UL + }, + { + 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, + 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, + 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, + 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, + 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, + 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, + 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, + 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, + 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, + 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, + 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, + 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, + 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, + 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, + 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, + 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, + 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, + 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, + 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, + 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, + 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, + 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, + 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, + 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, + 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, + 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, + 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, + 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, + 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, + 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, + 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, + 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, + 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, + 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, + 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, + 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, + 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, + 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, + 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, + 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, + 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, + 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, + 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, + 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, + 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, + 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, + 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, + 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, + 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, + 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, + 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, + 0x8def022dUL + }, + { + 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, + 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, + 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, + 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, + 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, + 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, + 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, + 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, + 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, + 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, + 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, + 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, + 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, + 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, + 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, + 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, + 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, + 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, + 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, + 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, + 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, + 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, + 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, + 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, + 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, + 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, + 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, + 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, + 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, + 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, + 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, + 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, + 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, + 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, + 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, + 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, + 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, + 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, + 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, + 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, + 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, + 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, + 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, + 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, + 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, + 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, + 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, + 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, + 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, + 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, + 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, + 0x72fd2493UL + }, + { + 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, + 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, + 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, + 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, + 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, + 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, + 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, + 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, + 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, + 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, + 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, + 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, + 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, + 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, + 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, + 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, + 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, + 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, + 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, + 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, + 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, + 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, + 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, + 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, + 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, + 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, + 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, + 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, + 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, + 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, + 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, + 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, + 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, + 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, + 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, + 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, + 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, + 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, + 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, + 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, + 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, + 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, + 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, + 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, + 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, + 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, + 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, + 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, + 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, + 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, + 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, + 0xed3498beUL + }, + { + 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, + 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, + 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, + 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, + 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, + 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, + 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, + 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, + 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, + 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, + 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, + 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, + 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, + 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, + 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, + 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, + 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, + 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, + 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, + 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, + 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, + 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, + 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, + 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, + 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, + 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, + 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, + 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, + 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, + 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, + 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, + 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, + 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, + 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, + 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, + 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, + 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, + 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, + 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, + 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, + 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, + 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, + 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, + 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, + 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, + 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, + 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, + 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, + 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, + 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, + 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, + 0xf10605deUL +#endif + } +}; diff -Nru clucene-core-0.9.21b/src/ext/zlib/deflate.c clucene-core-2.3.3.4/src/ext/zlib/deflate.c --- clucene-core-0.9.21b/src/ext/zlib/deflate.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/deflate.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1736 @@ +/* deflate.c -- compress data using the deflation algorithm + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process depends on being able to identify portions + * of the input text which are identical to earlier input (within a + * sliding window trailing behind the input currently being processed). + * + * The most straightforward technique turns out to be the fastest for + * most input files: try all possible matches and select the longest. + * The key feature of this algorithm is that insertions into the string + * dictionary are very simple and thus fast, and deletions are avoided + * completely. Insertions are performed at each input character, whereas + * string matches are performed only when the previous match ends. So it + * is preferable to spend more time in matches to allow very fast string + * insertions and avoid deletions. The matching algorithm for small + * strings is inspired from that of Rabin & Karp. A brute force approach + * is used to find longer strings when a small match has been found. + * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze + * (by Leonid Broukhis). + * A previous version of this file used a more sophisticated algorithm + * (by Fiala and Greene) which is guaranteed to run in linear amortized + * time, but has a larger average cost, uses more memory and is patented. + * However the F&G algorithm may be faster for some highly redundant + * files if the parameter max_chain_length (described below) is too large. + * + * ACKNOWLEDGEMENTS + * + * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and + * I found it in 'freeze' written by Leonid Broukhis. + * Thanks to many people for bug reports and testing. + * + * REFERENCES + * + * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". + * Available in http://www.ietf.org/rfc/rfc1951.txt + * + * A description of the Rabin and Karp algorithm is given in the book + * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. + * + * Fiala,E.R., and Greene,D.H. + * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 + * + */ + +/* @(#) $Id$ */ + +#include "deflate.h" + +const char deflate_copyright[] = + " deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +/* Compression function. Returns the block state after the call. */ + +local void fill_window OF((deflate_state *s)); +local block_state deflate_stored OF((deflate_state *s, int flush)); +local block_state deflate_fast OF((deflate_state *s, int flush)); +#ifndef FASTEST +local block_state deflate_slow OF((deflate_state *s, int flush)); +#endif +local void lm_init OF((deflate_state *s)); +local void putShortMSB OF((deflate_state *s, uInt b)); +local void flush_pending OF((z_streamp strm)); +local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +#ifndef FASTEST +#ifdef ASMV + void match_init OF((void)); /* asm code initialization */ + uInt longest_match OF((deflate_state *s, IPos cur_match)); +#else +local uInt longest_match OF((deflate_state *s, IPos cur_match)); +#endif +#endif +local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); + +#ifdef DEBUG +local void check_match OF((deflate_state *s, IPos start, IPos match, + int length)); +#endif + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +#ifdef FASTEST +local const config configuration_table[2] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ +#else +local const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ +#endif + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +#define EQUAL 0 +/* result of memcmp for equal strings */ + +#ifndef NO_DUMMY_DECL +struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ +#endif + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to to UPDATE_HASH are made with consecutive + * input characters, so that a running hash key can be computed from the + * previous key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of str are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* ========================================================================= */ +int ZEXPORT deflateInit_(strm, level, version, stream_size) + z_streamp strm; + int level; + const char *version; + int stream_size; +{ + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + version, stream_size) + z_streamp strm; + int level; + int method; + int windowBits; + int memLevel; + int strategy; + const char *version; + int stream_size; +{ + deflate_state *s; + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; + } + if (strm == Z_NULL) return Z_STREAM_ERROR; + + strm->msg = Z_NULL; + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + + s->wrap = wrap; + s->gzhead = Z_NULL; + s->w_bits = windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= */ +int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) + z_streamp strm; + const Bytef *dictionary; + uInt dictLength; +{ + deflate_state *s; + uInt length = dictLength; + uInt n; + IPos hash_head = 0; + + if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || + strm->state->wrap == 2 || + (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) + return Z_STREAM_ERROR; + + s = strm->state; + if (s->wrap) + strm->adler = adler32(strm->adler, dictionary, dictLength); + + if (length < MIN_MATCH) return Z_OK; + if (length > MAX_DIST(s)) { + length = MAX_DIST(s); + dictionary += dictLength - length; /* use the tail of the dictionary */ + } + zmemcpy(s->window, dictionary, length); + s->strstart = length; + s->block_start = (long)length; + + /* Insert all strings in the hash table (except for the last two bytes). + * s->lookahead stays null, so s->ins_h will be recomputed at the next + * call of fill_window. + */ + s->ins_h = s->window[0]; + UPDATE_HASH(s, s->ins_h, s->window[1]); + for (n = 0; n <= length - MIN_MATCH; n++) { + INSERT_STRING(s, n, hash_head); + } + if (hash_head) hash_head = 0; /* to make compiler happy */ + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateReset (strm) + z_streamp strm; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + lm_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateSetHeader (strm, head) + z_streamp strm; + gz_headerp head; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (strm->state->wrap != 2) return Z_STREAM_ERROR; + strm->state->gzhead = head; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePrime (strm, bits, value) + z_streamp strm; + int bits; + int value; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + strm->state->bi_valid = bits; + strm->state->bi_buf = (ush)(value & ((1 << bits) - 1)); + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateParams(strm, level, strategy) + z_streamp strm; + int level; + int strategy; +{ + deflate_state *s; + compress_func func; + int err = Z_OK; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + func = configuration_table[s->level].func; + + if (func != configuration_table[level].func && strm->total_in != 0) { + /* Flush the last buffer: */ + err = deflate(strm, Z_PARTIAL_FLUSH); + } + if (s->level != level) { + s->level = level; + s->max_lazy_match = configuration_table[level].max_lazy; + s->good_match = configuration_table[level].good_length; + s->nice_match = configuration_table[level].nice_length; + s->max_chain_length = configuration_table[level].max_chain; + } + s->strategy = strategy; + return err; +} + +/* ========================================================================= */ +int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) + z_streamp strm; + int good_length; + int max_lazy; + int nice_length; + int max_chain; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + s->good_match = good_length; + s->max_lazy_match = max_lazy; + s->nice_match = nice_length; + s->max_chain_length = max_chain; + return Z_OK; +} + +/* ========================================================================= + * For the default windowBits of 15 and memLevel of 8, this function returns + * a close to exact, as well as small, upper bound on the compressed size. + * They are coded as constants here for a reason--if the #define's are + * changed, then this function needs to be changed as well. The return + * value for 15 and 8 only works for those exact settings. + * + * For any setting other than those defaults for windowBits and memLevel, + * the value returned is a conservative worst case for the maximum expansion + * resulting from using fixed blocks instead of stored blocks, which deflate + * can emit on compressed data for some combinations of the parameters. + * + * This function could be more sophisticated to provide closer upper bounds + * for every combination of windowBits and memLevel, as well as wrap. + * But even the conservative upper bound of about 14% expansion does not + * seem onerous for output buffer allocation. + */ +uLong ZEXPORT deflateBound(strm, sourceLen) + z_streamp strm; + uLong sourceLen; +{ + deflate_state *s; + uLong destLen; + + /* conservative upper bound */ + destLen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; + + /* if can't get parameters, return conservative bound */ + if (strm == Z_NULL || strm->state == Z_NULL) + return destLen; + + /* if not default parameters, return conservative bound */ + s = strm->state; + if (s->w_bits != 15 || s->hash_bits != 8 + 7) + return destLen; + + /* default settings: return tight bound for that case */ + return compressBound(sourceLen); +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +local void putShortMSB (s, b) + deflate_state *s; + uInt b; +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->next_out buffer and copying into it. + * (See also read_buf()). + */ +local void flush_pending(strm) + z_streamp strm; +{ + unsigned len = strm->state->pending; + + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, strm->state->pending_out, len); + strm->next_out += len; + strm->state->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + strm->state->pending -= len; + if (strm->state->pending == 0) { + strm->state->pending_out = strm->state->pending_buf; + } +} + +/* ========================================================================= */ +int ZEXPORT deflate (strm, flush) + z_streamp strm; + int flush; +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + flush > Z_FINISH || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + s->strm = strm; /* just in case */ + old_flush = s->last_flush; + s->last_flush = flush; + + /* Write the header */ + if (s->status == INIT_STATE) { +#ifdef GZIP + if (s->wrap == 2) { + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s->status = BUSY_STATE; + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; + } + } + else +#endif + { + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + s->status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + } + } +#ifdef GZIP + if (s->status == EXTRA_STATE) { + if (s->gzhead->extra != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + + while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) + break; + } + put_byte(s, s->gzhead->extra[s->gzindex]); + s->gzindex++; + } + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (s->gzindex == s->gzhead->extra_len) { + s->gzindex = 0; + s->status = NAME_STATE; + } + } + else + s->status = NAME_STATE; + } + if (s->status == NAME_STATE) { + if (s->gzhead->name != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->name[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) { + s->gzindex = 0; + s->status = COMMENT_STATE; + } + } + else + s->status = COMMENT_STATE; + } + if (s->status == COMMENT_STATE) { + if (s->gzhead->comment != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->comment[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) + s->status = HCRC_STATE; + } + else + s->status = HCRC_STATE; + } + if (s->status == HCRC_STATE) { + if (s->gzhead->hcrc) { + if (s->pending + 2 > s->pending_buf_size) + flush_pending(strm); + if (s->pending + 2 <= s->pending_buf_size) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + } + } + else + s->status = BUSY_STATE; + } +#endif + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && flush <= old_flush && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + Assert(strm->avail_out > 0, "bug2"); + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int ZEXPORT deflateEnd (strm) + z_streamp strm; +{ + int status; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + status = strm->state->status; + if (status != INIT_STATE && + status != EXTRA_STATE && + status != NAME_STATE && + status != COMMENT_STATE && + status != HCRC_STATE && + status != BUSY_STATE && + status != FINISH_STATE) { + return Z_STREAM_ERROR; + } + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* ========================================================================= + * Copy the source state to the destination state. + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +int ZEXPORT deflateCopy (dest, source) + z_streamp dest; + z_streamp source; +{ +#ifdef MAXSEG_64K + return Z_STREAM_ERROR; +#else + deflate_state *ds; + deflate_state *ss; + ushf *overlay; + + + if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + return Z_STREAM_ERROR; + } + + ss = source->state; + + zmemcpy(dest, source, sizeof(z_stream)); + + ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; + zmemcpy(ds, ss, sizeof(deflate_state)); + ds->strm = dest; + + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); + ds->pending_buf = (uchf *) overlay; + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { + deflateEnd (dest); + return Z_MEM_ERROR; + } + /* following zmemcpy do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); + ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; + ds->bl_desc.dyn_tree = ds->bl_tree; + + return Z_OK; +#endif /* MAXSEG_64K */ +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local int read_buf(strm, buf, size) + z_streamp strm; + Bytef *buf; + unsigned size; +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, strm->next_in, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, strm->next_in, len); + } +#endif + zmemcpy(buf, strm->next_in, len); + strm->next_in += len; + strm->total_in += len; + + return (int)len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init (s) + deflate_state *s; +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +#ifndef FASTEST +#ifdef ASMV + match_init(); /* initialize the asm code */ +#endif +#endif +} + +#ifndef FASTEST +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +#ifndef ASMV +/* For 80x86 and 680x0, an optimized version will be provided in match.asm or + * match.S. The code will be functionally equivalent. + */ +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} +#endif /* ASMV */ +#endif /* FASTEST */ + +/* --------------------------------------------------------------------------- + * Optimized version for level == 1 or strategy == Z_RLE only + */ +local uInt longest_match_fast(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + + match = s->window + cur_match; + + /* Return failure if the match length is less than 2: + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match += 2; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + + if (len < MIN_MATCH) return MIN_MATCH - 1; + + s->match_start = cur_match; + return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; +} + +#ifdef DEBUG +/* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +local void check_match(s, start, match, length) + deflate_state *s; + IPos start, match; + int length; +{ + /* check that the match is indeed a match */ + if (zmemcmp(s->window + match, + s->window + start, length) != EQUAL) { + fprintf(stderr, " start %u, match %u, length %d\n", + start, match, length); + do { + fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); + } while (--length != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { + fprintf(stderr,"\\[%d,%d]", start-match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } +} +#else +# define check_match(s, start, match, length) +#endif /* DEBUG */ + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(s) + deflate_state *s; +{ + register unsigned n, m; + register Posf *p; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + /* %%% avoid this when Z_RLE */ + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + } while (--n); + + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif + more += wsize; + } + if (s->strm->avail_in == 0) return; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead >= MIN_MATCH) { + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, eof) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (eof)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, eof) { \ + FLUSH_BLOCK_ONLY(s, eof); \ + if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +local block_state deflate_stored(s, flush) + deflate_state *s; + int flush; +{ + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + ulg max_block_size = 0xffff; + ulg max_start; + + if (max_block_size > s->pending_buf_size - 5) { + max_block_size = s->pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s->lookahead <= 1) { + + Assert(s->strstart < s->w_size+MAX_DIST(s) || + s->block_start >= (long)s->w_size, "slide too late"); + + fill_window(s); + if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + if (s->lookahead == 0) break; /* flush the current block */ + } + Assert(s->block_start >= 0L, "block gone"); + + s->strstart += s->lookahead; + s->lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + max_start = s->block_start + max_block_size; + if (s->strstart == 0 || (ulg)s->strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s->lookahead = (uInt)(s->strstart - max_start); + s->strstart = (uInt)max_start; + FLUSH_BLOCK(s, 0); + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { + FLUSH_BLOCK(s, 0); + } + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +local block_state deflate_fast(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ +#ifdef FASTEST + if ((s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) || + (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { + s->match_length = longest_match_fast (s, hash_head); + } +#else + if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } +#endif + /* longest_match() or longest_match_fast() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +#ifndef FASTEST +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +local block_state deflate_slow(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } + /* longest_match() or longest_match_fast() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif /* FASTEST */ + +#if 0 +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +local block_state deflate_rle(s, flush) + deflate_state *s; + int flush; +{ + int bflush; /* set if current block must be flushed */ + uInt run; /* length of run */ + uInt max; /* maximum length of run */ + uInt prev; /* byte at distance one to match */ + Bytef *scan; /* scan for end of run */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest encodable run. + */ + if (s->lookahead < MAX_MATCH) { + fill_window(s); + if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + run = 0; + if (s->strstart > 0) { /* if there is a previous byte, that is */ + max = s->lookahead < MAX_MATCH ? s->lookahead : MAX_MATCH; + scan = s->window + s->strstart - 1; + prev = *scan++; + do { + if (*scan++ != prev) + break; + } while (++run < max); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (run >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, run); + _tr_tally_dist(s, 1, run - MIN_MATCH, bflush); + s->lookahead -= run; + s->strstart += run; + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif diff -Nru clucene-core-0.9.21b/src/ext/zlib/deflate.h clucene-core-2.3.3.4/src/ext/zlib/deflate.h --- clucene-core-0.9.21b/src/ext/zlib/deflate.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/deflate.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,331 @@ +/* deflate.h -- internal compression state + * Copyright (C) 1995-2004 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef DEFLATE_H +#define DEFLATE_H + +#include "zutil.h" + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer creation by deflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip encoding + should be left enabled. */ +#ifndef NO_GZIP +# define GZIP +#endif + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define INIT_STATE 42 +#define EXTRA_STATE 69 +#define NAME_STATE 73 +#define COMMENT_STATE 91 +#define HCRC_STATE 103 +#define BUSY_STATE 113 +#define FINISH_STATE 666 +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + uInt pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + uInt gzindex; /* where in extra, name, or comment */ + Byte method; /* STORED (for zip only) or DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to supress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + int last_eob_len; /* bit length of EOB code for last block */ + +#ifdef DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + + /* in trees.c */ +void _tr_init OF((deflate_state *s)); +int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); +void _tr_align OF((deflate_state *s)); +void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch _length_code[]; + extern uch _dist_code[]; +#else + extern const uch _length_code[]; + extern const uch _dist_code[]; +#endif + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (length); \ + ush dist = (distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +#else +# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +# define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) +#endif + +#endif /* DEFLATE_H */ diff -Nru clucene-core-0.9.21b/src/ext/zlib/FAQ clucene-core-2.3.3.4/src/ext/zlib/FAQ --- clucene-core-0.9.21b/src/ext/zlib/FAQ 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/FAQ 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,339 @@ + + Frequently Asked Questions about zlib + + +If your question is not there, please check the zlib home page +http://www.zlib.org which may have more recent information. +The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html + + + 1. Is zlib Y2K-compliant? + + Yes. zlib doesn't handle dates. + + 2. Where can I get a Windows DLL version? + + The zlib sources can be compiled without change to produce a DLL. + See the file win32/DLL_FAQ.txt in the zlib distribution. + Pointers to the precompiled DLL are found in the zlib web site at + http://www.zlib.org. + + 3. Where can I get a Visual Basic interface to zlib? + + See + * http://www.dogma.net/markn/articles/zlibtool/zlibtool.htm + * contrib/visual-basic.txt in the zlib distribution + * win32/DLL_FAQ.txt in the zlib distribution + + 4. compress() returns Z_BUF_ERROR. + + Make sure that before the call of compress, the length of the compressed + buffer is equal to the total size of the compressed buffer and not + zero. For Visual Basic, check that this parameter is passed by reference + ("as any"), not by value ("as long"). + + 5. deflate() or inflate() returns Z_BUF_ERROR. + + Before making the call, make sure that avail_in and avail_out are not + zero. When setting the parameter flush equal to Z_FINISH, also make sure + that avail_out is big enough to allow processing all pending input. + Note that a Z_BUF_ERROR is not fatal--another call to deflate() or + inflate() can be made with more input or output space. A Z_BUF_ERROR + may in fact be unavoidable depending on how the functions are used, since + it is not possible to tell whether or not there is more output pending + when strm.avail_out returns with zero. + + 6. Where's the zlib documentation (man pages, etc.)? + + It's in zlib.h for the moment, and Francis S. Lin has converted it to a + web page zlib.html. Volunteers to transform this to Unix-style man pages, + please contact us (zlib@gzip.org). Examples of zlib usage are in the files + example.c and minigzip.c. + + 7. Why don't you use GNU autoconf or libtool or ...? + + Because we would like to keep zlib as a very small and simple + package. zlib is rather portable and doesn't need much configuration. + + 8. I found a bug in zlib. + + Most of the time, such problems are due to an incorrect usage of + zlib. Please try to reproduce the problem with a small program and send + the corresponding source to us at zlib@gzip.org . Do not send + multi-megabyte data files without prior agreement. + + 9. Why do I get "undefined reference to gzputc"? + + If "make test" produces something like + + example.o(.text+0x154): undefined reference to `gzputc' + + check that you don't have old files libz.* in /usr/lib, /usr/local/lib or + /usr/X11R6/lib. Remove any old versions, then do "make install". + +10. I need a Delphi interface to zlib. + + See the contrib/delphi directory in the zlib distribution. + +11. Can zlib handle .zip archives? + + Not by itself, no. See the directory contrib/minizip in the zlib + distribution. + +12. Can zlib handle .Z files? + + No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt + the code of uncompress on your own. + +13. How can I make a Unix shared library? + + make clean + ./configure -s + make + +14. How do I install a shared zlib library on Unix? + + After the above, then: + + make install + + However, many flavors of Unix come with a shared zlib already installed. + Before going to the trouble of compiling a shared version of zlib and + trying to install it, you may want to check if it's already there! If you + can #include , it's there. The -lz option will probably link to it. + +15. I have a question about OttoPDF. + + We are not the authors of OttoPDF. The real author is on the OttoPDF web + site: Joel Hainley, jhainley@myndkryme.com. + +16. Can zlib decode Flate data in an Adobe PDF file? + + Yes. See http://www.fastio.com/ (ClibPDF), or http://www.pdflib.com/ . + To modify PDF forms, see http://sourceforge.net/projects/acroformtool/ . + +17. Why am I getting this "register_frame_info not found" error on Solaris? + + After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib + generates an error such as: + + ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so: + symbol __register_frame_info: referenced symbol not found + + The symbol __register_frame_info is not part of zlib, it is generated by + the C compiler (cc or gcc). You must recompile applications using zlib + which have this problem. This problem is specific to Solaris. See + http://www.sunfreeware.com for Solaris versions of zlib and applications + using zlib. + +18. Why does gzip give an error on a file I make with compress/deflate? + + The compress and deflate functions produce data in the zlib format, which + is different and incompatible with the gzip format. The gz* functions in + zlib on the other hand use the gzip format. Both the zlib and gzip + formats use the same compressed data format internally, but have different + headers and trailers around the compressed data. + +19. Ok, so why are there two different formats? + + The gzip format was designed to retain the directory information about + a single file, such as the name and last modification date. The zlib + format on the other hand was designed for in-memory and communication + channel applications, and has a much more compact header and trailer and + uses a faster integrity check than gzip. + +20. Well that's nice, but how do I make a gzip file in memory? + + You can request that deflate write the gzip format instead of the zlib + format using deflateInit2(). You can also request that inflate decode + the gzip format using inflateInit2(). Read zlib.h for more details. + +21. Is zlib thread-safe? + + Yes. However any library routines that zlib uses and any application- + provided memory allocation routines must also be thread-safe. zlib's gz* + functions use stdio library routines, and most of zlib's functions use the + library memory allocation routines by default. zlib's Init functions allow + for the application to provide custom memory allocation routines. + + Of course, you should only operate on any given zlib or gzip stream from a + single thread at a time. + +22. Can I use zlib in my commercial application? + + Yes. Please read the license in zlib.h. + +23. Is zlib under the GNU license? + + No. Please read the license in zlib.h. + +24. The license says that altered source versions must be "plainly marked". So + what exactly do I need to do to meet that requirement? + + You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In + particular, the final version number needs to be changed to "f", and an + identification string should be appended to ZLIB_VERSION. Version numbers + x.x.x.f are reserved for modifications to zlib by others than the zlib + maintainers. For example, if the version of the base zlib you are altering + is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and + ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also + update the version strings in deflate.c and inftrees.c. + + For altered source distributions, you should also note the origin and + nature of the changes in zlib.h, as well as in ChangeLog and README, along + with the dates of the alterations. The origin should include at least your + name (or your company's name), and an email address to contact for help or + issues with the library. + + Note that distributing a compiled zlib library along with zlib.h and + zconf.h is also a source distribution, and so you should change + ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes + in zlib.h as you would for a full source distribution. + +25. Will zlib work on a big-endian or little-endian architecture, and can I + exchange compressed data between them? + + Yes and yes. + +26. Will zlib work on a 64-bit machine? + + It should. It has been tested on 64-bit machines, and has no dependence + on any data types being limited to 32-bits in length. If you have any + difficulties, please provide a complete problem report to zlib@gzip.org + +27. Will zlib decompress data from the PKWare Data Compression Library? + + No. The PKWare DCL uses a completely different compressed data format + than does PKZIP and zlib. However, you can look in zlib's contrib/blast + directory for a possible solution to your problem. + +28. Can I access data randomly in a compressed stream? + + No, not without some preparation. If when compressing you periodically + use Z_FULL_FLUSH, carefully write all the pending data at those points, + and keep an index of those locations, then you can start decompression + at those points. You have to be careful to not use Z_FULL_FLUSH too + often, since it can significantly degrade compression. + +29. Does zlib work on MVS, OS/390, CICS, etc.? + + We don't know for sure. We have heard occasional reports of success on + these systems. If you do use it on one of these, please provide us with + a report, instructions, and patches that we can reference when we get + these questions. Thanks. + +30. Is there some simpler, easier to read version of inflate I can look at + to understand the deflate format? + + First off, you should read RFC 1951. Second, yes. Look in zlib's + contrib/puff directory. + +31. Does zlib infringe on any patents? + + As far as we know, no. In fact, that was originally the whole point behind + zlib. Look here for some more information: + + http://www.gzip.org/#faq11 + +32. Can zlib work with greater than 4 GB of data? + + Yes. inflate() and deflate() will process any amount of data correctly. + Each call of inflate() or deflate() is limited to input and output chunks + of the maximum value that can be stored in the compiler's "unsigned int" + type, but there is no limit to the number of chunks. Note however that the + strm.total_in and strm_total_out counters may be limited to 4 GB. These + counters are provided as a convenience and are not used internally by + inflate() or deflate(). The application can easily set up its own counters + updated after each call of inflate() or deflate() to count beyond 4 GB. + compress() and uncompress() may be limited to 4 GB, since they operate in a + single call. gzseek() and gztell() may be limited to 4 GB depending on how + zlib is compiled. See the zlibCompileFlags() function in zlib.h. + + The word "may" appears several times above since there is a 4 GB limit + only if the compiler's "long" type is 32 bits. If the compiler's "long" + type is 64 bits, then the limit is 16 exabytes. + +33. Does zlib have any security vulnerabilities? + + The only one that we are aware of is potentially in gzprintf(). If zlib + is compiled to use sprintf() or vsprintf(), then there is no protection + against a buffer overflow of a 4K string space, other than the caller of + gzprintf() assuring that the output will not exceed 4K. On the other + hand, if zlib is compiled to use snprintf() or vsnprintf(), which should + normally be the case, then there is no vulnerability. The ./configure + script will display warnings if an insecure variation of sprintf() will + be used by gzprintf(). Also the zlibCompileFlags() function will return + information on what variant of sprintf() is used by gzprintf(). + + If you don't have snprintf() or vsnprintf() and would like one, you can + find a portable implementation here: + + http://www.ijs.si/software/snprintf/ + + Note that you should be using the most recent version of zlib. Versions + 1.1.3 and before were subject to a double-free vulnerability. + +34. Is there a Java version of zlib? + + Probably what you want is to use zlib in Java. zlib is already included + as part of the Java SDK in the java.util.zip package. If you really want + a version of zlib written in the Java language, look on the zlib home + page for links: http://www.zlib.org/ + +35. I get this or that compiler or source-code scanner warning when I crank it + up to maximally-pedantic. Can't you guys write proper code? + + Many years ago, we gave up attempting to avoid warnings on every compiler + in the universe. It just got to be a waste of time, and some compilers + were downright silly. So now, we simply make sure that the code always + works. + +36. Valgrind (or some similar memory access checker) says that deflate is + performing a conditional jump that depends on an uninitialized value. + Isn't that a bug? + + No. That is intentional for performance reasons, and the output of + deflate is not affected. This only started showing up recently since + zlib 1.2.x uses malloc() by default for allocations, whereas earlier + versions used calloc(), which zeros out the allocated memory. + +37. Will zlib read the (insert any ancient or arcane format here) compressed + data format? + + Probably not. Look in the comp.compression FAQ for pointers to various + formats and associated software. + +38. How can I encrypt/decrypt zip files with zlib? + + zlib doesn't support encryption. The original PKZIP encryption is very weak + and can be broken with freely available programs. To get strong encryption, + use GnuPG, http://www.gnupg.org/ , which already includes zlib compression. + For PKZIP compatible "encryption", look at http://www.info-zip.org/ + +39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings? + + "gzip" is the gzip format, and "deflate" is the zlib format. They should + probably have called the second one "zlib" instead to avoid confusion + with the raw deflate compressed data format. While the HTTP 1.1 RFC 2616 + correctly points to the zlib specification in RFC 1950 for the "deflate" + transfer encoding, there have been reports of servers and browsers that + incorrectly produce or expect raw deflate data per the deflate + specficiation in RFC 1951, most notably Microsoft. So even though the + "deflate" transfer encoding using the zlib format would be the more + efficient approach (and in fact exactly what the zlib format was designed + for), using the "gzip" transfer encoding is probably more reliable due to + an unfortunate choice of name on the part of the HTTP 1.1 authors. + + Bottom line: use the gzip format for HTTP 1.1 encoding. + +40. Does zlib support the new "Deflate64" format introduced by PKWare? + + No. PKWare has apparently decided to keep that format proprietary, since + they have not documented it as they have previous compression formats. + In any case, the compression improvements are so modest compared to other + more modern approaches, that it's not worth the effort to implement. + +41. Can you please sign these lengthy legal documents and fax them back to us + so that we can use your software in our product? + + No. Go away. Shoo. diff -Nru clucene-core-0.9.21b/src/ext/zlib/gzio.c clucene-core-2.3.3.4/src/ext/zlib/gzio.c --- clucene-core-0.9.21b/src/ext/zlib/gzio.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/gzio.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1026 @@ +/* gzio.c -- IO on .gz files + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Compile this file with -DNO_GZCOMPRESS to avoid the compression code. + */ + +/* @(#) $Id$ */ + +#include + +#include "zutil.h" + +#ifdef NO_DEFLATE /* for compatibility with old definition */ +# define NO_GZCOMPRESS +#endif + +#ifndef NO_DUMMY_DECL +struct internal_state {int dummy;}; /* for buggy compilers */ +#endif + +#ifndef Z_BUFSIZE +# ifdef MAXSEG_64K +# define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */ +# else +# define Z_BUFSIZE 16384 +# endif +#endif +#ifndef Z_PRINTF_BUFSIZE +# define Z_PRINTF_BUFSIZE 4096 +#endif + +#ifdef __MVS__ +# pragma map (fdopen , "\174\174FDOPEN") + FILE *fdopen(int, const char *); +#endif + +#ifndef STDC +extern voidp malloc OF((uInt size)); +extern void free OF((voidpf ptr)); +#endif + +#define ALLOC(size) malloc(size) +#define TRYFREE(p) {if (p) free(p);} + +static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ + +/* gzip flag byte */ +#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ +#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ +#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ +#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ +#define COMMENT 0x10 /* bit 4 set: file comment present */ +#define RESERVED 0xE0 /* bits 5..7: reserved */ + +typedef struct gz_stream { + z_stream stream; + int z_err; /* error code for last stream operation */ + int z_eof; /* set if end of input file */ + FILE *file; /* .gz file */ + Byte *inbuf; /* input buffer */ + Byte *outbuf; /* output buffer */ + uLong crc; /* crc32 of uncompressed data */ + char *msg; /* error message */ + char *path; /* path name for debugging only */ + int transparent; /* 1 if input file is not a .gz file */ + char mode; /* 'w' or 'r' */ + z_off_t start; /* start of compressed data in file (header skipped) */ + z_off_t in; /* bytes into deflate or inflate */ + z_off_t out; /* bytes out of deflate or inflate */ + int back; /* one character push-back */ + int last; /* true if push-back is last character */ +} gz_stream; + + +local gzFile gz_open OF((const char *path, const char *mode, int fd)); +local int do_flush OF((gzFile file, int flush)); +local int get_byte OF((gz_stream *s)); +local void check_header OF((gz_stream *s)); +local int destroy OF((gz_stream *s)); +local void putLong OF((FILE *file, uLong x)); +local uLong getLong OF((gz_stream *s)); + +/* =========================================================================== + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb"). The file is given either by file descriptor + or path name (if fd == -1). + gz_open returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). +*/ +local gzFile gz_open (path, mode, fd) + const char *path; + const char *mode; + int fd; +{ + int err; + int level = Z_DEFAULT_COMPRESSION; /* compression level */ + int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */ + char *p = (char*)mode; + gz_stream *s; + char fmode[80]; /* copy of mode, without the compression level */ + char *m = fmode; + + if (!path || !mode) return Z_NULL; + + s = (gz_stream *)ALLOC(sizeof(gz_stream)); + if (!s) return Z_NULL; + + s->stream.zalloc = (alloc_func)0; + s->stream.zfree = (free_func)0; + s->stream.opaque = (voidpf)0; + s->stream.next_in = s->inbuf = Z_NULL; + s->stream.next_out = s->outbuf = Z_NULL; + s->stream.avail_in = s->stream.avail_out = 0; + s->file = NULL; + s->z_err = Z_OK; + s->z_eof = 0; + s->in = 0; + s->out = 0; + s->back = EOF; + s->crc = crc32(0L, Z_NULL, 0); + s->msg = NULL; + s->transparent = 0; + + s->path = (char*)ALLOC(strlen(path)+1); + if (s->path == NULL) { + return destroy(s), (gzFile)Z_NULL; + } + strcpy(s->path, path); /* do this early for debugging */ + + s->mode = '\0'; + do { + if (*p == 'r') s->mode = 'r'; + if (*p == 'w' || *p == 'a') s->mode = 'w'; + if (*p >= '0' && *p <= '9') { + level = *p - '0'; + } else if (*p == 'f') { + strategy = Z_FILTERED; + } else if (*p == 'h') { + strategy = Z_HUFFMAN_ONLY; + } else if (*p == 'R') { + strategy = Z_RLE; + } else { + *m++ = *p; /* copy the mode */ + } + } while (*p++ && m != fmode + sizeof(fmode)); + if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL; + + if (s->mode == 'w') { +#ifdef NO_GZCOMPRESS + err = Z_STREAM_ERROR; +#else + err = deflateInit2(&(s->stream), level, + Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy); + /* windowBits is passed < 0 to suppress zlib header */ + + s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); +#endif + if (err != Z_OK || s->outbuf == Z_NULL) { + return destroy(s), (gzFile)Z_NULL; + } + } else { + s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); + + err = inflateInit2(&(s->stream), -MAX_WBITS); + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are + * present after the compressed stream. + */ + if (err != Z_OK || s->inbuf == Z_NULL) { + return destroy(s), (gzFile)Z_NULL; + } + } + s->stream.avail_out = Z_BUFSIZE; + + errno = 0; + s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode); + + if (s->file == NULL) { + return destroy(s), (gzFile)Z_NULL; + } + if (s->mode == 'w') { + /* Write a very simple .gz header: + */ + fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1], + Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); + s->start = 10L; + /* We use 10L instead of ftell(s->file) to because ftell causes an + * fflush on some systems. This version of the library doesn't use + * start anyway in write mode, so this initialization is not + * necessary. + */ + } else { + check_header(s); /* skip the .gz header */ + s->start = ftell(s->file) - s->stream.avail_in; + } + + return (gzFile)s; +} + +/* =========================================================================== + Opens a gzip (.gz) file for reading or writing. +*/ +gzFile ZEXPORT gzopen (path, mode) + const char *path; + const char *mode; +{ + return gz_open (path, mode, -1); +} + +/* =========================================================================== + Associate a gzFile with the file descriptor fd. fd is not dup'ed here + to mimic the behavio(u)r of fdopen. +*/ +gzFile ZEXPORT gzdopen (fd, mode) + int fd; + const char *mode; +{ + char name[46]; /* allow for up to 128-bit integers */ + + if (fd < 0) return (gzFile)Z_NULL; + sprintf(name, "", fd); /* for debugging */ + + return gz_open (name, mode, fd); +} + +/* =========================================================================== + * Update the compression level and strategy + */ +int ZEXPORT gzsetparams (file, level, strategy) + gzFile file; + int level; + int strategy; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + /* Make room to allow flushing */ + if (s->stream.avail_out == 0) { + + s->stream.next_out = s->outbuf; + if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { + s->z_err = Z_ERRNO; + } + s->stream.avail_out = Z_BUFSIZE; + } + + return deflateParams (&(s->stream), level, strategy); +} + +/* =========================================================================== + Read a byte from a gz_stream; update next_in and avail_in. Return EOF + for end of file. + IN assertion: the stream s has been sucessfully opened for reading. +*/ +local int get_byte(s) + gz_stream *s; +{ + if (s->z_eof) return EOF; + if (s->stream.avail_in == 0) { + errno = 0; + s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file); + if (s->stream.avail_in == 0) { + s->z_eof = 1; + if (ferror(s->file)) s->z_err = Z_ERRNO; + return EOF; + } + s->stream.next_in = s->inbuf; + } + s->stream.avail_in--; + return *(s->stream.next_in)++; +} + +/* =========================================================================== + Check the gzip header of a gz_stream opened for reading. Set the stream + mode to transparent if the gzip magic header is not present; set s->err + to Z_DATA_ERROR if the magic header is present but the rest of the header + is incorrect. + IN assertion: the stream s has already been created sucessfully; + s->stream.avail_in is zero for the first time, but may be non-zero + for concatenated .gz files. +*/ +local void check_header(s) + gz_stream *s; +{ + int method; /* method byte */ + int flags; /* flags byte */ + uInt len; + int c; + + /* Assure two bytes in the buffer so we can peek ahead -- handle case + where first byte of header is at the end of the buffer after the last + gzip segment */ + len = s->stream.avail_in; + if (len < 2) { + if (len) s->inbuf[0] = s->stream.next_in[0]; + errno = 0; + len = (uInt)fread(s->inbuf + len, 1, Z_BUFSIZE >> len, s->file); + if (len == 0 && ferror(s->file)) s->z_err = Z_ERRNO; + s->stream.avail_in += len; + s->stream.next_in = s->inbuf; + if (s->stream.avail_in < 2) { + s->transparent = s->stream.avail_in; + return; + } + } + + /* Peek ahead to check the gzip magic header */ + if (s->stream.next_in[0] != gz_magic[0] || + s->stream.next_in[1] != gz_magic[1]) { + s->transparent = 1; + return; + } + s->stream.avail_in -= 2; + s->stream.next_in += 2; + + /* Check the rest of the gzip header */ + method = get_byte(s); + flags = get_byte(s); + if (method != Z_DEFLATED || (flags & RESERVED) != 0) { + s->z_err = Z_DATA_ERROR; + return; + } + + /* Discard time, xflags and OS code: */ + for (len = 0; len < 6; len++) (void)get_byte(s); + + if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ + len = (uInt)get_byte(s); + len += ((uInt)get_byte(s))<<8; + /* len is garbage if EOF but the loop below will quit anyway */ + while (len-- != 0 && get_byte(s) != EOF) ; + } + if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ + while ((c = get_byte(s)) != 0 && c != EOF) ; + } + if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ + while ((c = get_byte(s)) != 0 && c != EOF) ; + } + if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ + for (len = 0; len < 2; len++) (void)get_byte(s); + } + s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK; +} + + /* =========================================================================== + * Cleanup then free the given gz_stream. Return a zlib error code. + Try freeing in the reverse order of allocations. + */ +local int destroy (s) + gz_stream *s; +{ + int err = Z_OK; + + if (!s) return Z_STREAM_ERROR; + + TRYFREE(s->msg); + + if (s->stream.state != NULL) { + if (s->mode == 'w') { +#ifdef NO_GZCOMPRESS + err = Z_STREAM_ERROR; +#else + err = deflateEnd(&(s->stream)); +#endif + } else if (s->mode == 'r') { + err = inflateEnd(&(s->stream)); + } + } + if (s->file != NULL && fclose(s->file)) { +#ifdef ESPIPE + if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */ +#endif + err = Z_ERRNO; + } + if (s->z_err < 0) err = s->z_err; + + TRYFREE(s->inbuf); + TRYFREE(s->outbuf); + TRYFREE(s->path); + TRYFREE(s); + return err; +} + +/* =========================================================================== + Reads the given number of uncompressed bytes from the compressed file. + gzread returns the number of bytes actually read (0 for end of file). +*/ +int ZEXPORT gzread (file, buf, len) + gzFile file; + voidp buf; + unsigned len; +{ + gz_stream *s = (gz_stream*)file; + Bytef *start = (Bytef*)buf; /* starting point for crc computation */ + Byte *next_out; /* == stream.next_out but not forced far (for MSDOS) */ + + if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR; + + if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1; + if (s->z_err == Z_STREAM_END) return 0; /* EOF */ + + next_out = (Byte*)buf; + s->stream.next_out = (Bytef*)buf; + s->stream.avail_out = len; + + if (s->stream.avail_out && s->back != EOF) { + *next_out++ = s->back; + s->stream.next_out++; + s->stream.avail_out--; + s->back = EOF; + s->out++; + start++; + if (s->last) { + s->z_err = Z_STREAM_END; + return 1; + } + } + + while (s->stream.avail_out != 0) { + + if (s->transparent) { + /* Copy first the lookahead bytes: */ + uInt n = s->stream.avail_in; + if (n > s->stream.avail_out) n = s->stream.avail_out; + if (n > 0) { + zmemcpy(s->stream.next_out, s->stream.next_in, n); + next_out += n; + s->stream.next_out = next_out; + s->stream.next_in += n; + s->stream.avail_out -= n; + s->stream.avail_in -= n; + } + if (s->stream.avail_out > 0) { + s->stream.avail_out -= + (uInt)fread(next_out, 1, s->stream.avail_out, s->file); + } + len -= s->stream.avail_out; + s->in += len; + s->out += len; + if (len == 0) s->z_eof = 1; + return (int)len; + } + if (s->stream.avail_in == 0 && !s->z_eof) { + + errno = 0; + s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file); + if (s->stream.avail_in == 0) { + s->z_eof = 1; + if (ferror(s->file)) { + s->z_err = Z_ERRNO; + break; + } + } + s->stream.next_in = s->inbuf; + } + s->in += s->stream.avail_in; + s->out += s->stream.avail_out; + s->z_err = inflate(&(s->stream), Z_NO_FLUSH); + s->in -= s->stream.avail_in; + s->out -= s->stream.avail_out; + + if (s->z_err == Z_STREAM_END) { + /* Check CRC and original size */ + s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); + start = s->stream.next_out; + + if (getLong(s) != s->crc) { + s->z_err = Z_DATA_ERROR; + } else { + (void)getLong(s); + /* The uncompressed length returned by above getlong() may be + * different from s->out in case of concatenated .gz files. + * Check for such files: + */ + check_header(s); + if (s->z_err == Z_OK) { + inflateReset(&(s->stream)); + s->crc = crc32(0L, Z_NULL, 0); + } + } + } + if (s->z_err != Z_OK || s->z_eof) break; + } + s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); + + if (len == s->stream.avail_out && + (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO)) + return -1; + return (int)(len - s->stream.avail_out); +} + + +/* =========================================================================== + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ +int ZEXPORT gzgetc(file) + gzFile file; +{ + unsigned char c; + + return gzread(file, &c, 1) == 1 ? c : -1; +} + + +/* =========================================================================== + Push one byte back onto the stream. +*/ +int ZEXPORT gzungetc(c, file) + int c; + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF; + s->back = c; + s->out--; + s->last = (s->z_err == Z_STREAM_END); + if (s->last) s->z_err = Z_OK; + s->z_eof = 0; + return c; +} + + +/* =========================================================================== + Reads bytes from the compressed file until len-1 characters are + read, or a newline character is read and transferred to buf, or an + end-of-file condition is encountered. The string is then terminated + with a null character. + gzgets returns buf, or Z_NULL in case of error. + + The current implementation is not optimized at all. +*/ +char * ZEXPORT gzgets(file, buf, len) + gzFile file; + char *buf; + int len; +{ + char *b = buf; + if (buf == Z_NULL || len <= 0) return Z_NULL; + + while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ; + *buf = '\0'; + return b == buf && len > 0 ? Z_NULL : b; +} + + +#ifndef NO_GZCOMPRESS +/* =========================================================================== + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of bytes actually written (0 in case of error). +*/ +int ZEXPORT gzwrite (file, buf, len) + gzFile file; + voidpc buf; + unsigned len; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + s->stream.next_in = (Bytef*)buf; + s->stream.avail_in = len; + + while (s->stream.avail_in != 0) { + + if (s->stream.avail_out == 0) { + + s->stream.next_out = s->outbuf; + if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { + s->z_err = Z_ERRNO; + break; + } + s->stream.avail_out = Z_BUFSIZE; + } + s->in += s->stream.avail_in; + s->out += s->stream.avail_out; + s->z_err = deflate(&(s->stream), Z_NO_FLUSH); + s->in -= s->stream.avail_in; + s->out -= s->stream.avail_out; + if (s->z_err != Z_OK) break; + } + s->crc = crc32(s->crc, (const Bytef *)buf, len); + + return (int)(len - s->stream.avail_in); +} + + +/* =========================================================================== + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). +*/ +#ifdef STDC +#include + +int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) +{ + char buf[Z_PRINTF_BUFSIZE]; + va_list va; + int len; + + buf[sizeof(buf) - 1] = 0; + va_start(va, format); +#ifdef NO_vsnprintf +# ifdef HAS_vsprintf_void + (void)vsprintf(buf, format, va); + va_end(va); + for (len = 0; len < sizeof(buf); len++) + if (buf[len] == 0) break; +# else + len = vsprintf(buf, format, va); + va_end(va); +# endif +#else +# ifdef HAS_vsnprintf_void + (void)vsnprintf(buf, sizeof(buf), format, va); + va_end(va); + len = strlen(buf); +# else + len = vsnprintf(buf, sizeof(buf), format, va); + va_end(va); +# endif +#endif + if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0) + return 0; + return gzwrite(file, buf, (unsigned)len); +} +#else /* not ANSI C */ + +int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) + gzFile file; + const char *format; + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; +{ + char buf[Z_PRINTF_BUFSIZE]; + int len; + + buf[sizeof(buf) - 1] = 0; +#ifdef NO_snprintf +# ifdef HAS_sprintf_void + sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + for (len = 0; len < sizeof(buf); len++) + if (buf[len] == 0) break; +# else + len = sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#else +# ifdef HAS_snprintf_void + snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + len = strlen(buf); +# else + len = snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#endif + if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0) + return 0; + return gzwrite(file, buf, len); +} +#endif + +/* =========================================================================== + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ +int ZEXPORT gzputc(file, c) + gzFile file; + int c; +{ + unsigned char cc = (unsigned char) c; /* required for big endian systems */ + + return gzwrite(file, &cc, 1) == 1 ? (int)cc : -1; +} + + +/* =========================================================================== + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ +int ZEXPORT gzputs(file, s) + gzFile file; + const char *s; +{ + return gzwrite(file, (char*)s, (unsigned)strlen(s)); +} + + +/* =========================================================================== + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. +*/ +local int do_flush (file, flush) + gzFile file; + int flush; +{ + uInt len; + int done = 0; + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; + + s->stream.avail_in = 0; /* should be zero already anyway */ + + for (;;) { + len = Z_BUFSIZE - s->stream.avail_out; + + if (len != 0) { + if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) { + s->z_err = Z_ERRNO; + return Z_ERRNO; + } + s->stream.next_out = s->outbuf; + s->stream.avail_out = Z_BUFSIZE; + } + if (done) break; + s->out += s->stream.avail_out; + s->z_err = deflate(&(s->stream), flush); + s->out -= s->stream.avail_out; + + /* Ignore the second of two consecutive flushes: */ + if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK; + + /* deflate has finished flushing only when it hasn't used up + * all the available space in the output buffer: + */ + done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END); + + if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; + } + return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; +} + +int ZEXPORT gzflush (file, flush) + gzFile file; + int flush; +{ + gz_stream *s = (gz_stream*)file; + int err = do_flush (file, flush); + + if (err) return err; + fflush(s->file); + return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; +} +#endif /* NO_GZCOMPRESS */ + +/* =========================================================================== + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error. + SEEK_END is not implemented, returns error. + In this version of the library, gzseek can be extremely slow. +*/ +z_off_t ZEXPORT gzseek (file, offset, whence) + gzFile file; + z_off_t offset; + int whence; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || whence == SEEK_END || + s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) { + return -1L; + } + + if (s->mode == 'w') { +#ifdef NO_GZCOMPRESS + return -1L; +#else + if (whence == SEEK_SET) { + offset -= s->in; + } + if (offset < 0) return -1L; + + /* At this point, offset is the number of zero bytes to write. */ + if (s->inbuf == Z_NULL) { + s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */ + if (s->inbuf == Z_NULL) return -1L; + zmemzero(s->inbuf, Z_BUFSIZE); + } + while (offset > 0) { + uInt size = Z_BUFSIZE; + if (offset < Z_BUFSIZE) size = (uInt)offset; + + size = gzwrite(file, s->inbuf, size); + if (size == 0) return -1L; + + offset -= size; + } + return s->in; +#endif + } + /* Rest of function is for reading only */ + + /* compute absolute position */ + if (whence == SEEK_CUR) { + offset += s->out; + } + if (offset < 0) return -1L; + + if (s->transparent) { + /* map to fseek */ + s->back = EOF; + s->stream.avail_in = 0; + s->stream.next_in = s->inbuf; + if (fseek(s->file, offset, SEEK_SET) < 0) return -1L; + + s->in = s->out = offset; + return offset; + } + + /* For a negative seek, rewind and use positive seek */ + if (offset >= s->out) { + offset -= s->out; + } else if (gzrewind(file) < 0) { + return -1L; + } + /* offset is now the number of bytes to skip. */ + + if (offset != 0 && s->outbuf == Z_NULL) { + s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); + if (s->outbuf == Z_NULL) return -1L; + } + if (offset && s->back != EOF) { + s->back = EOF; + s->out++; + offset--; + if (s->last) s->z_err = Z_STREAM_END; + } + while (offset > 0) { + int size = Z_BUFSIZE; + if (offset < Z_BUFSIZE) size = (int)offset; + + size = gzread(file, s->outbuf, (uInt)size); + if (size <= 0) return -1L; + offset -= size; + } + return s->out; +} + +/* =========================================================================== + Rewinds input file. +*/ +int ZEXPORT gzrewind (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'r') return -1; + + s->z_err = Z_OK; + s->z_eof = 0; + s->back = EOF; + s->stream.avail_in = 0; + s->stream.next_in = s->inbuf; + s->crc = crc32(0L, Z_NULL, 0); + if (!s->transparent) (void)inflateReset(&s->stream); + s->in = 0; + s->out = 0; + return fseek(s->file, s->start, SEEK_SET); +} + +/* =========================================================================== + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. +*/ +z_off_t ZEXPORT gztell (file) + gzFile file; +{ + return gzseek(file, 0L, SEEK_CUR); +} + +/* =========================================================================== + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ +int ZEXPORT gzeof (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + /* With concatenated compressed files that can have embedded + * crc trailers, z_eof is no longer the only/best indicator of EOF + * on a gz_stream. Handle end-of-stream error explicitly here. + */ + if (s == NULL || s->mode != 'r') return 0; + if (s->z_eof) return 1; + return s->z_err == Z_STREAM_END; +} + +/* =========================================================================== + Returns 1 if reading and doing so transparently, otherwise zero. +*/ +int ZEXPORT gzdirect (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL || s->mode != 'r') return 0; + return s->transparent; +} + +/* =========================================================================== + Outputs a long in LSB order to the given file +*/ +local void putLong (file, x) + FILE *file; + uLong x; +{ + int n; + for (n = 0; n < 4; n++) { + fputc((int)(x & 0xff), file); + x >>= 8; + } +} + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets z_err in case + of error. +*/ +local uLong getLong (s) + gz_stream *s; +{ + uLong x = (uLong)get_byte(s); + int c; + + x += ((uLong)get_byte(s))<<8; + x += ((uLong)get_byte(s))<<16; + c = get_byte(s); + if (c == EOF) s->z_err = Z_DATA_ERROR; + x += ((uLong)c)<<24; + return x; +} + +/* =========================================================================== + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. +*/ +int ZEXPORT gzclose (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL) return Z_STREAM_ERROR; + + if (s->mode == 'w') { +#ifdef NO_GZCOMPRESS + return Z_STREAM_ERROR; +#else + if (do_flush (file, Z_FINISH) != Z_OK) + return destroy((gz_stream*)file); + + putLong (s->file, s->crc); + putLong (s->file, (uLong)(s->in & 0xffffffff)); +#endif + } + return destroy((gz_stream*)file); +} + +#ifdef STDC +# define zstrerror(errnum) strerror(errnum) +#else +# define zstrerror(errnum) "" +#endif + +/* =========================================================================== + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ +const char * ZEXPORT gzerror (file, errnum) + gzFile file; + int *errnum; +{ + char *m; + gz_stream *s = (gz_stream*)file; + + if (s == NULL) { + *errnum = Z_STREAM_ERROR; + return (const char*)ERR_MSG(Z_STREAM_ERROR); + } + *errnum = s->z_err; + if (*errnum == Z_OK) return (const char*)""; + + m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg); + + if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err); + + TRYFREE(s->msg); + s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3); + if (s->msg == Z_NULL) return (const char*)ERR_MSG(Z_MEM_ERROR); + strcpy(s->msg, s->path); + strcat(s->msg, ": "); + strcat(s->msg, m); + return (const char*)s->msg; +} + +/* =========================================================================== + Clear the error and end-of-file flags, and do the same for the real file. +*/ +void ZEXPORT gzclearerr (file) + gzFile file; +{ + gz_stream *s = (gz_stream*)file; + + if (s == NULL) return; + if (s->z_err != Z_STREAM_END) s->z_err = Z_OK; + s->z_eof = 0; + clearerr(s->file); +} diff -Nru clucene-core-0.9.21b/src/ext/zlib/INDEX clucene-core-2.3.3.4/src/ext/zlib/INDEX --- clucene-core-0.9.21b/src/ext/zlib/INDEX 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/INDEX 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,51 @@ +ChangeLog history of changes +FAQ Frequently Asked Questions about zlib +INDEX this file +Makefile makefile for Unix (generated by configure) +Makefile.in makefile for Unix (template for configure) +README guess what +algorithm.txt description of the (de)compression algorithm +configure configure script for Unix +zconf.in.h template for zconf.h (used by configure) + +amiga/ makefiles for Amiga SAS C +as400/ makefiles for IBM AS/400 +msdos/ makefiles for MSDOS +old/ makefiles for various architectures and zlib documentation + files that have not yet been updated for zlib 1.2.x +projects/ projects for various Integrated Development Environments +qnx/ makefiles for QNX +win32/ makefiles for Windows + + zlib public header files (must be kept): +zconf.h +zlib.h + + private source files used to build the zlib library: +adler32.c +compress.c +crc32.c +crc32.h +deflate.c +deflate.h +gzio.c +infback.c +inffast.c +inffast.h +inffixed.h +inflate.c +inflate.h +inftrees.c +inftrees.h +trees.c +trees.h +uncompr.c +zutil.c +zutil.h + + source files for sample programs: +example.c +minigzip.c + + unsupported contribution by third parties +See contrib/README.contrib diff -Nru clucene-core-0.9.21b/src/ext/zlib/inffast.c clucene-core-2.3.3.4/src/ext/zlib/inffast.c --- clucene-core-0.9.21b/src/ext/zlib/inffast.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/inffast.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,318 @@ +/* inffast.c -- fast decoding + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifndef ASMINF + +/* Allow machine dependent optimization for post-increment or pre-increment. + Based on testing to date, + Pre-increment preferred for: + - PowerPC G3 (Adler) + - MIPS R5000 (Randers-Pehrson) + Post-increment preferred for: + - none + No measurable difference: + - Pentium III (Anderson) + - M68060 (Nikl) + */ +#ifdef POSTINC +# define OFF 0 +# define PUP(a) *(a)++ +#else +# define OFF 1 +# define PUP(a) *++(a) +#endif + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +void inflate_fast(strm, start) +z_streamp strm; +unsigned start; /* inflate()'s starting value for strm->avail_out */ +{ + struct inflate_state FAR *state; + unsigned char FAR *in; /* local strm->next_in */ + unsigned char FAR *last; /* while in < last, enough input available */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ +#ifdef INFLATE_STRICT + unsigned dmax; /* maximum distance from zlib header */ +#endif + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ + unsigned long hold; /* local strm->hold */ + unsigned bits; /* local strm->bits */ + code const FAR *lcode; /* local strm->lencode */ + code const FAR *dcode; /* local strm->distcode */ + unsigned lmask; /* mask for first level of length codes */ + unsigned dmask; /* mask for first level of distance codes */ + code this; /* retrieved table entry */ + unsigned op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + unsigned len; /* match length, unused bytes */ + unsigned dist; /* match distance */ + unsigned char FAR *from; /* where to copy match from */ + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + in = strm->next_in - OFF; + last = in + (strm->avail_in - 5); + out = strm->next_out - OFF; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); +#ifdef INFLATE_STRICT + dmax = state->dmax; +#endif + wsize = state->wsize; + whave = state->whave; + write = state->write; + window = state->window; + hold = state->hold; + bits = state->bits; + lcode = state->lencode; + dcode = state->distcode; + lmask = (1U << state->lenbits) - 1; + dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + do { + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + this = lcode[hold & lmask]; + dolen: + op = (unsigned)(this.bits); + hold >>= op; + bits -= op; + op = (unsigned)(this.op); + if (op == 0) { /* literal */ + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + PUP(out) = (unsigned char)(this.val); + } + else if (op & 16) { /* length base */ + len = (unsigned)(this.val); + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + len += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + } + Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + this = dcode[hold & dmask]; + dodist: + op = (unsigned)(this.bits); + hold >>= op; + bits -= op; + op = (unsigned)(this.op); + if (op & 16) { /* distance base */ + dist = (unsigned)(this.val); + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + } + dist += (unsigned)hold & ((1U << op) - 1); +#ifdef INFLATE_STRICT + if (dist > dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + hold >>= op; + bits -= op; + Tracevv((stderr, "inflate: distance %u\n", dist)); + op = (unsigned)(out - beg); /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + from = window - OFF; + if (write == 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + else if (write < op) { /* wrap around window */ + from += wsize + write - op; + op -= write; + if (op < len) { /* some from end of window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = window - OFF; + if (write < len) { /* some from start of window */ + op = write; + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + } + else { /* contiguous in window */ + from += write - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + while (len > 2) { + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + else { + from = out - dist; /* copy direct from output */ + do { /* minimum length is three */ + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } while (len > 2); + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ + this = dcode[this.val + (hold & ((1U << op) - 1))]; + goto dodist; + } + else { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + } + else if ((op & 64) == 0) { /* 2nd level length code */ + this = lcode[this.val + (hold & ((1U << op) - 1))]; + goto dolen; + } + else if (op & 32) { /* end-of-block */ + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + else { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + } while (in < last && out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + in -= len; + bits -= len << 3; + hold &= (1U << bits) - 1; + + /* update state and return */ + strm->next_in = in + OFF; + strm->next_out = out + OFF; + strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); + strm->avail_out = (unsigned)(out < end ? + 257 + (end - out) : 257 - (out - end)); + state->hold = hold; + state->bits = bits; + return; +} + +/* + inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): + - Using bit fields for code structure + - Different op definition to avoid & for extra bits (do & for table bits) + - Three separate decoding do-loops for direct, window, and write == 0 + - Special case for distance > 1 copies to do overlapped load and store copy + - Explicit branch predictions (based on measured branch probabilities) + - Deferring match copy and interspersed it with decoding subsequent codes + - Swapping literal/length else + - Swapping window/direct else + - Larger unrolled copy loops (three is about right) + - Moving len -= 3 statement into middle of loop + */ + +#endif /* !ASMINF */ diff -Nru clucene-core-0.9.21b/src/ext/zlib/inffast.h clucene-core-2.3.3.4/src/ext/zlib/inffast.h --- clucene-core-0.9.21b/src/ext/zlib/inffast.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/inffast.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,11 @@ +/* inffast.h -- header to use inffast.c + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +void inflate_fast OF((z_streamp strm, unsigned start)); diff -Nru clucene-core-0.9.21b/src/ext/zlib/inffixed.h clucene-core-2.3.3.4/src/ext/zlib/inffixed.h --- clucene-core-0.9.21b/src/ext/zlib/inffixed.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/inffixed.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,94 @@ + /* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ + + /* WARNING: this file should *not* be used by applications. It + is part of the implementation of the compression library and + is subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; diff -Nru clucene-core-0.9.21b/src/ext/zlib/inflate.c clucene-core-2.3.3.4/src/ext/zlib/inflate.c --- clucene-core-0.9.21b/src/ext/zlib/inflate.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/inflate.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1368 @@ +/* inflate.c -- zlib decompression + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * Change history: + * + * 1.2.beta0 24 Nov 2002 + * - First version -- complete rewrite of inflate to simplify code, avoid + * creation of window when not needed, minimize use of window when it is + * needed, make inffast.c even faster, implement gzip decoding, and to + * improve code readability and style over the previous zlib inflate code + * + * 1.2.beta1 25 Nov 2002 + * - Use pointers for available input and output checking in inffast.c + * - Remove input and output counters in inffast.c + * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 + * - Remove unnecessary second byte pull from length extra in inffast.c + * - Unroll direct copy to three copies per loop in inffast.c + * + * 1.2.beta2 4 Dec 2002 + * - Change external routine names to reduce potential conflicts + * - Correct filename to inffixed.h for fixed tables in inflate.c + * - Make hbuf[] unsigned char to match parameter type in inflate.c + * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) + * to avoid negation problem on Alphas (64 bit) in inflate.c + * + * 1.2.beta3 22 Dec 2002 + * - Add comments on state->bits assertion in inffast.c + * - Add comments on op field in inftrees.h + * - Fix bug in reuse of allocated window after inflateReset() + * - Remove bit fields--back to byte structure for speed + * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths + * - Change post-increments to pre-increments in inflate_fast(), PPC biased? + * - Add compile time option, POSTINC, to use post-increments instead (Intel?) + * - Make MATCH copy in inflate() much faster for when inflate_fast() not used + * - Use local copies of stream next and avail values, as well as local bit + * buffer and bit count in inflate()--for speed when inflate_fast() not used + * + * 1.2.beta4 1 Jan 2003 + * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings + * - Move a comment on output buffer sizes from inffast.c to inflate.c + * - Add comments in inffast.c to introduce the inflate_fast() routine + * - Rearrange window copies in inflate_fast() for speed and simplification + * - Unroll last copy for window match in inflate_fast() + * - Use local copies of window variables in inflate_fast() for speed + * - Pull out common write == 0 case for speed in inflate_fast() + * - Make op and len in inflate_fast() unsigned for consistency + * - Add FAR to lcode and dcode declarations in inflate_fast() + * - Simplified bad distance check in inflate_fast() + * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new + * source file infback.c to provide a call-back interface to inflate for + * programs like gzip and unzip -- uses window as output buffer to avoid + * window copying + * + * 1.2.beta5 1 Jan 2003 + * - Improved inflateBack() interface to allow the caller to provide initial + * input in strm. + * - Fixed stored blocks bug in inflateBack() + * + * 1.2.beta6 4 Jan 2003 + * - Added comments in inffast.c on effectiveness of POSTINC + * - Typecasting all around to reduce compiler warnings + * - Changed loops from while (1) or do {} while (1) to for (;;), again to + * make compilers happy + * - Changed type of window in inflateBackInit() to unsigned char * + * + * 1.2.beta7 27 Jan 2003 + * - Changed many types to unsigned or unsigned short to avoid warnings + * - Added inflateCopy() function + * + * 1.2.0 9 Mar 2003 + * - Changed inflateBack() interface to provide separate opaque descriptors + * for the in() and out() functions + * - Changed inflateBack() argument and in_func typedef to swap the length + * and buffer address return values for the input function + * - Check next_in and next_out for Z_NULL on entry to inflate() + * + * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifdef MAKEFIXED +# ifndef BUILDFIXED +# define BUILDFIXED +# endif +#endif + +/* function prototypes */ +local void fixedtables OF((struct inflate_state FAR *state)); +local int updatewindow OF((z_streamp strm, unsigned out)); +#ifdef BUILDFIXED + void makefixed OF((void)); +#endif +local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf, + unsigned len)); + +int ZEXPORT inflateReset(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + strm->total_in = strm->total_out = state->total = 0; + strm->msg = Z_NULL; + strm->adler = 1; /* to support ill-conceived Java test suite */ + state->mode = HEAD; + state->last = 0; + state->havedict = 0; + state->dmax = 32768U; + state->head = Z_NULL; + state->wsize = 0; + state->whave = 0; + state->write = 0; + state->hold = 0; + state->bits = 0; + state->lencode = state->distcode = state->next = state->codes; + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +int ZEXPORT inflatePrime(strm, bits, value) +z_streamp strm; +int bits; +int value; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; + value &= (1L << bits) - 1; + state->hold += value << state->bits; + state->bits += bits; + return Z_OK; +} + +int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) +z_streamp strm; +int windowBits; +const char *version; +int stream_size; +{ + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL) return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + state = (struct inflate_state FAR *) + ZALLOC(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + if (windowBits < 0) { + state->wrap = 0; + windowBits = -windowBits; + } + else { + state->wrap = (windowBits >> 4) + 1; +#ifdef GUNZIP + if (windowBits < 48) windowBits &= 15; +#endif + } + if (windowBits < 8 || windowBits > 15) { + ZFREE(strm, state); + strm->state = Z_NULL; + return Z_STREAM_ERROR; + } + state->wbits = (unsigned)windowBits; + state->window = Z_NULL; + return inflateReset(strm); +} + +int ZEXPORT inflateInit_(strm, version, stream_size) +z_streamp strm; +const char *version; +int stream_size; +{ + return inflateInit2_(strm, DEF_WBITS, version, stream_size); +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(state) +struct inflate_state FAR *state; +{ +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +#ifdef MAKEFIXED +#include + +/* + Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also + defines BUILDFIXED, so the tables are built on the fly. makefixed() writes + those tables to stdout, which would be piped to inffixed.h. A small program + can simply call makefixed to do this: + + void makefixed(void); + + int main(void) + { + makefixed(); + return 0; + } + + Then that can be linked with zlib built with MAKEFIXED defined and run: + + a.out > inffixed.h + */ +void makefixed() +{ + unsigned low, size; + struct inflate_state state; + + fixedtables(&state); + puts(" /* inffixed.h -- table for decoding fixed codes"); + puts(" * Generated automatically by makefixed()."); + puts(" */"); + puts(""); + puts(" /* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf(" static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 7) == 0) printf("\n "); + printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits, + state.lencode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); + size = 1U << 5; + printf("\n static const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, + state.distcode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); +} +#endif /* MAKEFIXED */ + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +local int updatewindow(strm, out) +z_streamp strm; +unsigned out; +{ + struct inflate_state FAR *state; + unsigned copy, dist; + + state = (struct inflate_state FAR *)strm->state; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { + state->window = (unsigned char FAR *) + ZALLOC(strm, 1U << state->wbits, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; + } + + /* if window not in use yet, initialize */ + if (state->wsize == 0) { + state->wsize = 1U << state->wbits; + state->write = 0; + state->whave = 0; + } + + /* copy state->wsize or less output bytes into the circular window */ + copy = out - strm->avail_out; + if (copy >= state->wsize) { + zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); + state->write = 0; + state->whave = state->wsize; + } + else { + dist = state->wsize - state->write; + if (dist > copy) dist = copy; + zmemcpy(state->window + state->write, strm->next_out - copy, dist); + copy -= dist; + if (copy) { + zmemcpy(state->window, strm->next_out - copy, copy); + state->write = copy; + state->whave = state->wsize; + } + else { + state->write += dist; + if (state->write == state->wsize) state->write = 0; + if (state->whave < state->wsize) state->whave += dist; + } + } + return 0; +} + +/* Macros for inflate(): */ + +/* check function to use adler32() for zlib or crc32() for gzip */ +#ifdef GUNZIP +# define UPDATE(check, buf, len) \ + (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) +#else +# define UPDATE(check, buf, len) adler32(check, buf, len) +#endif + +/* check macros for header crc */ +#ifdef GUNZIP +# define CRC2(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + check = crc32(check, hbuf, 2); \ + } while (0) + +# define CRC4(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + hbuf[2] = (unsigned char)((word) >> 16); \ + hbuf[3] = (unsigned char)((word) >> 24); \ + check = crc32(check, hbuf, 4); \ + } while (0) +#endif + +/* Load registers with state in inflate() for speed */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Restore state from registers in inflate() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflate() + if there is no input available. */ +#define PULLBYTE() \ + do { \ + if (have == 0) goto inf_leave; \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflate(). */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Reverse the bytes in a 32-bit value */ +#define REVERSE(q) \ + ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +/* + inflate() uses a state machine to process as much input data and generate as + much output data as possible before returning. The state machine is + structured roughly as follows: + + for (;;) switch (state) { + ... + case STATEn: + if (not enough input data or output space to make progress) + return; + ... make progress ... + state = STATEm; + break; + ... + } + + so when inflate() is called again, the same case is attempted again, and + if the appropriate resources are provided, the machine proceeds to the + next state. The NEEDBITS() macro is usually the way the state evaluates + whether it can proceed or should return. NEEDBITS() does the return if + the requested bits are not available. The typical use of the BITS macros + is: + + NEEDBITS(n); + ... do something with BITS(n) ... + DROPBITS(n); + + where NEEDBITS(n) either returns from inflate() if there isn't enough + input left to load n bits into the accumulator, or it continues. BITS(n) + gives the low n bits in the accumulator. When done, DROPBITS(n) drops + the low n bits off the accumulator. INITBITS() clears the accumulator + and sets the number of available bits to zero. BYTEBITS() discards just + enough bits to put the accumulator on a byte boundary. After BYTEBITS() + and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. + + NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return + if there is no input available. The decoding of variable length codes uses + PULLBYTE() directly in order to pull just enough bytes to decode the next + code, and no more. + + Some states loop until they get enough input, making sure that enough + state information is maintained to continue the loop where it left off + if NEEDBITS() returns in the loop. For example, want, need, and keep + would all have to actually be part of the saved state in case NEEDBITS() + returns: + + case STATEw: + while (want < need) { + NEEDBITS(n); + keep[want++] = BITS(n); + DROPBITS(n); + } + state = STATEx; + case STATEx: + + As shown above, if the next state is also the next case, then the break + is omitted. + + A state may also return if there is not enough output space available to + complete that state. Those states are copying stored data, writing a + literal byte, and copying a matching string. + + When returning, a "goto inf_leave" is used to update the total counters, + update the check value, and determine whether any progress has been made + during that inflate() call in order to return the proper return code. + Progress is defined as a change in either strm->avail_in or strm->avail_out. + When there is a window, goto inf_leave will update the window with the last + output written. If a goto inf_leave occurs in the middle of decompression + and there is no window currently, goto inf_leave will create one and copy + output to the window for the next call of inflate(). + + In this implementation, the flush parameter of inflate() only affects the + return code (per zlib.h). inflate() always writes as much as possible to + strm->next_out, given the space available and the provided input--the effect + documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers + the allocation of and copying into a sliding window until necessary, which + provides the effect documented in zlib.h for Z_FINISH when the entire input + stream available. So the only thing the flush parameter actually does is: + when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +int ZEXPORT inflate(strm, flush) +z_streamp strm; +int flush; +{ + struct inflate_state FAR *state; + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned in, out; /* save starting available input and output */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code this; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ +#ifdef GUNZIP + unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +#endif + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0)) + return Z_STREAM_ERROR; + + state = (struct inflate_state FAR *)strm->state; + if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + LOAD(); + in = have; + out = left; + ret = Z_OK; + for (;;) + switch (state->mode) { + case HEAD: + if (state->wrap == 0) { + state->mode = TYPEDO; + break; + } + NEEDBITS(16); +#ifdef GUNZIP + if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + state->check = crc32(0L, Z_NULL, 0); + CRC2(state->check, hold); + INITBITS(); + state->mode = FLAGS; + break; + } + state->flags = 0; /* expect zlib header */ + if (state->head != Z_NULL) + state->head->done = -1; + if (!(state->wrap & 1) || /* check if zlib header allowed */ +#else + if ( +#endif + ((BITS(8) << 8) + (hold >> 8)) % 31) { + strm->msg = (char *)"incorrect header check"; + state->mode = BAD; + break; + } + if (BITS(4) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + DROPBITS(4); + len = BITS(4) + 8; + if (len > state->wbits) { + strm->msg = (char *)"invalid window size"; + state->mode = BAD; + break; + } + state->dmax = 1U << len; + Tracev((stderr, "inflate: zlib header ok\n")); + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = hold & 0x200 ? DICTID : TYPE; + INITBITS(); + break; +#ifdef GUNZIP + case FLAGS: + NEEDBITS(16); + state->flags = (int)(hold); + if ((state->flags & 0xff) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + if (state->flags & 0xe000) { + strm->msg = (char *)"unknown header flags set"; + state->mode = BAD; + break; + } + if (state->head != Z_NULL) + state->head->text = (int)((hold >> 8) & 1); + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = TIME; + case TIME: + NEEDBITS(32); + if (state->head != Z_NULL) + state->head->time = hold; + if (state->flags & 0x0200) CRC4(state->check, hold); + INITBITS(); + state->mode = OS; + case OS: + NEEDBITS(16); + if (state->head != Z_NULL) { + state->head->xflags = (int)(hold & 0xff); + state->head->os = (int)(hold >> 8); + } + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = EXLEN; + case EXLEN: + if (state->flags & 0x0400) { + NEEDBITS(16); + state->length = (unsigned)(hold); + if (state->head != Z_NULL) + state->head->extra_len = (unsigned)hold; + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + } + else if (state->head != Z_NULL) + state->head->extra = Z_NULL; + state->mode = EXTRA; + case EXTRA: + if (state->flags & 0x0400) { + copy = state->length; + if (copy > have) copy = have; + if (copy) { + if (state->head != Z_NULL && + state->head->extra != Z_NULL) { + len = state->head->extra_len - state->length; + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); + } + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + state->length -= copy; + } + if (state->length) goto inf_leave; + } + state->length = 0; + state->mode = NAME; + case NAME: + if (state->flags & 0x0800) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->name != Z_NULL && + state->length < state->head->name_max) + state->head->name[state->length++] = len; + } while (len && copy < have); + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->name = Z_NULL; + state->length = 0; + state->mode = COMMENT; + case COMMENT: + if (state->flags & 0x1000) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->comment != Z_NULL && + state->length < state->head->comm_max) + state->head->comment[state->length++] = len; + } while (len && copy < have); + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->comment = Z_NULL; + state->mode = HCRC; + case HCRC: + if (state->flags & 0x0200) { + NEEDBITS(16); + if (hold != (state->check & 0xffff)) { + strm->msg = (char *)"header crc mismatch"; + state->mode = BAD; + break; + } + INITBITS(); + } + if (state->head != Z_NULL) { + state->head->hcrc = (int)((state->flags >> 9) & 1); + state->head->done = 1; + } + strm->adler = state->check = crc32(0L, Z_NULL, 0); + state->mode = TYPE; + break; +#endif + case DICTID: + NEEDBITS(32); + strm->adler = state->check = REVERSE(hold); + INITBITS(); + state->mode = DICT; + case DICT: + if (state->havedict == 0) { + RESTORE(); + return Z_NEED_DICT; + } + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = TYPE; + case TYPE: + if (flush == Z_BLOCK) goto inf_leave; + case TYPEDO: + if (state->last) { + BYTEBITS(); + state->mode = CHECK; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + case STORED: + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + state->mode = COPY; + case COPY: + copy = state->length; + if (copy) { + if (copy > have) copy = have; + if (copy > left) copy = left; + if (copy == 0) goto inf_leave; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + break; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + case TABLE: + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + state->have = 0; + state->mode = LENLENS; + case LENLENS: + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + state->have = 0; + state->mode = CODELENS; + case CODELENS: + while (state->have < state->nlen + state->ndist) { + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.val < 16) { + NEEDBITS(this.bits); + DROPBITS(this.bits); + state->lens[state->have++] = this.val; + } + else { + if (this.val == 16) { + NEEDBITS(this.bits + 2); + DROPBITS(this.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = state->lens[state->have - 1]; + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (this.val == 17) { + NEEDBITS(this.bits + 3); + DROPBITS(this.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(this.bits + 7); + DROPBITS(this.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* build code tables */ + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (code const FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + RESTORE(); + inflate_fast(strm, out); + LOAD(); + break; + } + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.op && (this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + state->length = (unsigned)this.val; + if ((int)(this.op) == 0) { + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + state->mode = LIT; + break; + } + if (this.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + if (this.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + state->extra = (unsigned)(this.op) & 15; + state->mode = LENEXT; + case LENEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + state->mode = DIST; + case DIST: + for (;;) { + this = state->distcode[BITS(state->distbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if ((this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + if (this.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)this.val; + state->extra = (unsigned)(this.op) & 15; + state->mode = DISTEXT; + case DISTEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + } +#ifdef INFLATE_STRICT + if (state->offset > state->dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + if (state->offset > state->whave + out - left) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + state->mode = MATCH; + case MATCH: + if (left == 0) goto inf_leave; + copy = out - left; + if (state->offset > copy) { /* copy from window */ + copy = state->offset - copy; + if (copy > state->write) { + copy -= state->write; + from = state->window + (state->wsize - copy); + } + else + from = state->window + (state->write - copy); + if (copy > state->length) copy = state->length; + } + else { /* copy from output */ + from = put - state->offset; + copy = state->length; + } + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = *from++; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: + if (left == 0) goto inf_leave; + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + case CHECK: + if (state->wrap) { + NEEDBITS(32); + out -= left; + strm->total_out += out; + state->total += out; + if (out) + strm->adler = state->check = + UPDATE(state->check, put - out, out); + out = left; + if (( +#ifdef GUNZIP + state->flags ? hold : +#endif + REVERSE(hold)) != state->check) { + strm->msg = (char *)"incorrect data check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: check matches trailer\n")); + } +#ifdef GUNZIP + state->mode = LENGTH; + case LENGTH: + if (state->wrap && state->flags) { + NEEDBITS(32); + if (hold != (state->total & 0xffffffffUL)) { + strm->msg = (char *)"incorrect length check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: length matches trailer\n")); + } +#endif + state->mode = DONE; + case DONE: + ret = Z_STREAM_END; + goto inf_leave; + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + inf_leave: + RESTORE(); + if (state->wsize || (state->mode < CHECK && out != strm->avail_out)) + if (updatewindow(strm, out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + in -= strm->avail_in; + out -= strm->avail_out; + strm->total_in += in; + strm->total_out += out; + state->total += out; + if (state->wrap && out) + strm->adler = state->check = + UPDATE(state->check, strm->next_out - out, out); + strm->data_type = state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0); + if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + ret = Z_BUF_ERROR; + return ret; +} + +int ZEXPORT inflateEnd(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->window != Z_NULL) ZFREE(strm, state->window); + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} + +int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) +z_streamp strm; +const Bytef *dictionary; +uInt dictLength; +{ + struct inflate_state FAR *state; + unsigned long id; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->wrap != 0 && state->mode != DICT) + return Z_STREAM_ERROR; + + /* check for correct dictionary id */ + if (state->mode == DICT) { + id = adler32(0L, Z_NULL, 0); + id = adler32(id, dictionary, dictLength); + if (id != state->check) + return Z_DATA_ERROR; + } + + /* copy dictionary to window */ + if (updatewindow(strm, strm->avail_out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + if (dictLength > state->wsize) { + zmemcpy(state->window, dictionary + dictLength - state->wsize, + state->wsize); + state->whave = state->wsize; + } + else { + zmemcpy(state->window + state->wsize - dictLength, dictionary, + dictLength); + state->whave = dictLength; + } + state->havedict = 1; + Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +int ZEXPORT inflateGetHeader(strm, head) +z_streamp strm; +gz_headerp head; +{ + struct inflate_state FAR *state; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; + + /* save header structure */ + state->head = head; + head->done = 0; + return Z_OK; +} + +/* + Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found + or when out of input. When called, *have is the number of pattern bytes + found in order so far, in 0..3. On return *have is updated to the new + state. If on return *have equals four, then the pattern was found and the + return value is how many bytes were read including the last byte of the + pattern. If *have is less than four, then the pattern has not been found + yet and the return value is len. In the latter case, syncsearch() can be + called again with more data and the *have state. *have is initialized to + zero for the first call. + */ +local unsigned syncsearch(have, buf, len) +unsigned FAR *have; +unsigned char FAR *buf; +unsigned len; +{ + unsigned got; + unsigned next; + + got = *have; + next = 0; + while (next < len && got < 4) { + if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) + got++; + else if (buf[next]) + got = 0; + else + got = 4 - got; + next++; + } + *have = got; + return next; +} + +int ZEXPORT inflateSync(strm) +z_streamp strm; +{ + unsigned len; /* number of bytes to look at or looked at */ + unsigned long in, out; /* temporary to save total_in and total_out */ + unsigned char buf[4]; /* to restore bit buffer to byte string */ + struct inflate_state FAR *state; + + /* check parameters */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; + + /* if first time, start search in bit buffer */ + if (state->mode != SYNC) { + state->mode = SYNC; + state->hold <<= state->bits & 7; + state->bits -= state->bits & 7; + len = 0; + while (state->bits >= 8) { + buf[len++] = (unsigned char)(state->hold); + state->hold >>= 8; + state->bits -= 8; + } + state->have = 0; + syncsearch(&(state->have), buf, len); + } + + /* search available input */ + len = syncsearch(&(state->have), strm->next_in, strm->avail_in); + strm->avail_in -= len; + strm->next_in += len; + strm->total_in += len; + + /* return no joy or set up to restart inflate() on a new block */ + if (state->have != 4) return Z_DATA_ERROR; + in = strm->total_in; out = strm->total_out; + inflateReset(strm); + strm->total_in = in; strm->total_out = out; + state->mode = TYPE; + return Z_OK; +} + +/* + Returns true if inflate is currently at the end of a block generated by + Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + implementation to provide an additional safety check. PPP uses + Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored + block. When decompressing, PPP checks that at the end of input packet, + inflate is waiting for these length bytes. + */ +int ZEXPORT inflateSyncPoint(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + return state->mode == STORED && state->bits == 0; +} + +int ZEXPORT inflateCopy(dest, source) +z_streamp dest; +z_streamp source; +{ + struct inflate_state FAR *state; + struct inflate_state FAR *copy; + unsigned char FAR *window; + unsigned wsize; + + /* check input */ + if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || + source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)source->state; + + /* allocate space */ + copy = (struct inflate_state FAR *) + ZALLOC(source, 1, sizeof(struct inflate_state)); + if (copy == Z_NULL) return Z_MEM_ERROR; + window = Z_NULL; + if (state->window != Z_NULL) { + window = (unsigned char FAR *) + ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); + if (window == Z_NULL) { + ZFREE(source, copy); + return Z_MEM_ERROR; + } + } + + /* copy state */ + zmemcpy(dest, source, sizeof(z_stream)); + zmemcpy(copy, state, sizeof(struct inflate_state)); + if (state->lencode >= state->codes && + state->lencode <= state->codes + ENOUGH - 1) { + copy->lencode = copy->codes + (state->lencode - state->codes); + copy->distcode = copy->codes + (state->distcode - state->codes); + } + copy->next = copy->codes + (state->next - state->codes); + if (window != Z_NULL) { + wsize = 1U << state->wbits; + zmemcpy(window, state->window, wsize); + } + copy->window = window; + dest->state = (struct internal_state FAR *)copy; + return Z_OK; +} diff -Nru clucene-core-0.9.21b/src/ext/zlib/inflate.h clucene-core-2.3.3.4/src/ext/zlib/inflate.h --- clucene-core-0.9.21b/src/ext/zlib/inflate.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/inflate.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,115 @@ +/* inflate.h -- internal inflate state definition + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip decoding + should be left enabled. */ +#ifndef NO_GZIP +# define GUNZIP +#endif + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN, /* i: waiting for length/lit code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to the BAD or MEM mode -- not shown for clarity) + + Process header: + HEAD -> (gzip) or (zlib) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME + NAME -> COMMENT -> HCRC -> TYPE + (zlib) -> DICTID or TYPE + DICTID -> DICT -> TYPE + Read deflate blocks: + TYPE -> STORED or TABLE or LEN or CHECK + STORED -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN + Read deflate codes: + LEN -> LENEXT or LIT or TYPE + LENEXT -> DIST -> DISTEXT -> MATCH -> LEN + LIT -> LEN + Process trailer: + CHECK -> LENGTH -> DONE + */ + +/* state maintained between inflate() calls. Approximately 7K bytes. */ +struct inflate_state { + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ +}; diff -Nru clucene-core-0.9.21b/src/ext/zlib/inftrees.c clucene-core-2.3.3.4/src/ext/zlib/inftrees.c --- clucene-core-0.9.21b/src/ext/zlib/inftrees.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/inftrees.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,329 @@ +/* inftrees.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" + +#define MAXBITS 15 + +const char inflate_copyright[] = + " inflate 1.2.3 Copyright 1995-2005 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* + Build a set of tables to decode the provided canonical Huffman code. + The code lengths are lens[0..codes-1]. The result starts at *table, + whose indices are 0..2^bits-1. work is a writable array of at least + lens shorts, which is used as a work area. type is the type of code + to be generated, CODES, LENS, or DISTS. On return, zero is success, + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table + on return points to the next available entry's address. bits is the + requested root table index bits, and on return it is the actual root + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +int inflate_table(type, lens, codes, table, bits, work) +codetype type; +unsigned short FAR *lens; +unsigned codes; +code FAR * FAR *table; +unsigned FAR *bits; +unsigned short FAR *work; +{ + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code this; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + int end; /* use base and extra for symbol > end */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0}; + static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) { /* no symbols to code at all */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)1; + this.val = (unsigned short)0; + *(*table)++ = this; /* make a table to force an error */ + *(*table)++ = this; + *bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min <= MAXBITS; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked when a LENS table is being made + against the space in *table, ENOUGH, minus the maximum space needed by + the worst case distance code, MAXD. This should never happen, but the + sufficiency of ENOUGH has not been proven exhaustively, hence the check. + This assumes that when type == LENS, bits == 9. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + end = 19; + break; + case LENS: + base = lbase; + base -= 257; + extra = lext; + extra -= 257; + end = 256; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if (type == LENS && used >= ENOUGH - MAXD) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + this.bits = (unsigned char)(len - drop); + if ((int)(work[sym]) < end) { + this.op = (unsigned char)0; + this.val = work[sym]; + } + else if ((int)(work[sym]) > end) { + this.op = (unsigned char)(extra[work[sym]]); + this.val = base[work[sym]]; + } + else { + this.op = (unsigned char)(32 + 64); /* end of block */ + this.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + next[(huff >> drop) + fill] = this; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if (type == LENS && used >= ENOUGH - MAXD) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* + Fill in rest of table for incomplete codes. This loop is similar to the + loop above in incrementing huff for table indices. It is assumed that + len is equal to curr + drop, so there is no loop needed to increment + through high index bits. When the current sub-table is filled, the loop + drops back to the root table to fill in any remaining entries there. + */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)(len - drop); + this.val = (unsigned short)0; + while (huff != 0) { + /* when done with sub-table, drop back to root table */ + if (drop != 0 && (huff & mask) != low) { + drop = 0; + len = root; + next = *table; + this.bits = (unsigned char)len; + } + + /* put invalid code marker in table */ + next[huff >> drop] = this; + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} diff -Nru clucene-core-0.9.21b/src/ext/zlib/inftrees.h clucene-core-2.3.3.4/src/ext/zlib/inftrees.h --- clucene-core-0.9.21b/src/ext/zlib/inftrees.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/inftrees.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,55 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 0001eeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of dynamic tree. The maximum found in a long but non- + exhaustive search was 1444 code structures (852 for length/literals + and 592 for distances, the latter actually the result of an + exhaustive search). The true maximum is not known, but the value + below is more than safe. */ +#define ENOUGH 2048 +#define MAXD 592 + +/* Type of code to build for inftable() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +extern int inflate_table OF((codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff -Nru clucene-core-0.9.21b/src/ext/zlib/README clucene-core-2.3.3.4/src/ext/zlib/README --- clucene-core-0.9.21b/src/ext/zlib/README 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/README 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,125 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.3 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). These documents are also available in other +formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file example.c which also tests that the library +is working correctly. Another example is given in the file minigzip.c. The +compression library itself is composed of all source files except example.c and +minigzip.c. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile. In short "make test; make install" should work for most +machines. For Unix: "./configure; make test; make install". For MSDOS, use one +of the special makefiles such as Makefile.msc. For VMS, use make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem, +please check this site to verify that you have the latest version of zlib; +otherwise get the latest version and check whether the problem still exists or +not. + +PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking +for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available in +http://dogma.net/markn/articles/zlibtool/zlibtool.htm + +The changes made in version 1.2.3 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory "contrib". + +A Java implementation of zlib is available in the Java Development Kit +http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html +See the zlib home page http://www.zlib.org for details. + +A Perl interface to zlib written by Paul Marquess is in the +CPAN (Comprehensive Perl Archive Network) sites +http://www.cpan.org/modules/by-module/Compress/ + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://www.python.org/doc/lib/module-zlib.html + +A zlib binding for TCL written by Andreas Kupries is +availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + +- When building a shared, i.e. dynamic library on Mac OS X, the library must be + installed before testing (do "make install" before "make test"), since the + library location is specified in the library. + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate + and zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; + they are too numerous to cite here. + +Copyright notice: + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* +receiving lengthy legal documents to sign. The sources are provided +for free but without warranty of any kind. The library has been +entirely written by Jean-loup Gailly and Mark Adler; it does not +include third-party code. + +If you redistribute modified sources, we would appreciate that you include +in the file ChangeLog history information documenting your changes. Please +read the FAQ for more information on the distribution of modified source +versions. diff -Nru clucene-core-0.9.21b/src/ext/zlib/trees.c clucene-core-2.3.3.4/src/ext/zlib/trees.c --- clucene-core-0.9.21b/src/ext/zlib/trees.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/trees.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1219 @@ +/* trees.c -- output deflated data using Huffman coding + * Copyright (C) 1995-2005 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process uses several Huffman trees. The more + * common source values are represented by shorter bit sequences. + * + * Each code tree is stored in a compressed form which is itself + * a Huffman encoding of the lengths of all the code strings (in + * ascending order by source values). The actual code strings are + * reconstructed from the lengths in the inflate process, as described + * in the deflate specification. + * + * REFERENCES + * + * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". + * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc + * + * Storer, James A. + * Data Compression: Methods and Theory, pp. 49-50. + * Computer Science Press, 1988. ISBN 0-7167-8156-5. + * + * Sedgewick, R. + * Algorithms, p290. + * Addison-Wesley, 1983. ISBN 0-201-06672-6. + */ + +/* @(#) $Id$ */ + +/* #define GEN_TREES_H */ + +#include "deflate.h" + +#ifdef DEBUG +# include +#endif + +/* =========================================================================== + * Constants + */ + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; + +local const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +local const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +#define Buf_size (8 * 2*sizeof(char)) +/* Number of bits used within bi_buf. (bi_buf might be implemented on + * more than 16 bits on some systems.) + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +#if defined(GEN_TREES_H) || !defined(STDC) +/* non ANSI compilers may not accept trees.h */ + +local ct_data static_ltree[L_CODES+2]; +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +local ct_data static_dtree[D_CODES]; +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +uch _dist_code[DIST_CODE_LEN]; +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +uch _length_code[MAX_MATCH-MIN_MATCH+1]; +/* length code for each normalized match length (0 == MIN_MATCH) */ + +local int base_length[LENGTH_CODES]; +/* First normalized length for each code (0 = MIN_MATCH) */ + +local int base_dist[D_CODES]; +/* First normalized distance for each code (0 = distance of 1) */ + +#else +# include "trees.h" +#endif /* GEN_TREES_H */ + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +local static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +local static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +local static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +/* =========================================================================== + * Local (static) routines in this file. + */ + +local void tr_static_init OF((void)); +local void init_block OF((deflate_state *s)); +local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); +local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); +local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); +local void build_tree OF((deflate_state *s, tree_desc *desc)); +local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local int build_bl_tree OF((deflate_state *s)); +local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, + int blcodes)); +local void compress_block OF((deflate_state *s, ct_data *ltree, + ct_data *dtree)); +local void set_data_type OF((deflate_state *s)); +local unsigned bi_reverse OF((unsigned value, int length)); +local void bi_windup OF((deflate_state *s)); +local void bi_flush OF((deflate_state *s)); +local void copy_block OF((deflate_state *s, charf *buf, unsigned len, + int header)); + +#ifdef GEN_TREES_H +local void gen_trees_header OF((void)); +#endif + +#ifndef DEBUG +# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#else /* DEBUG */ +# define send_code(s, c, tree) \ + { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ + send_bits(s, tree[c].Code, tree[c].Len); } +#endif + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +#ifdef DEBUG +local void send_bits OF((deflate_state *s, int value, int length)); + +local void send_bits(s, value, length) + deflate_state *s; + int value; /* value to send */ + int length; /* number of bits */ +{ + Tracevv((stderr," l %2d v %4x ", length, value)); + Assert(length > 0 && length <= 15, "invalid length"); + s->bits_sent += (ulg)length; + + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (s->bi_valid > (int)Buf_size - length) { + s->bi_buf |= (value << s->bi_valid); + put_short(s, s->bi_buf); + s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); + s->bi_valid += length - Buf_size; + } else { + s->bi_buf |= value << s->bi_valid; + s->bi_valid += length; + } +} +#else /* !DEBUG */ + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = value;\ + s->bi_buf |= (val << s->bi_valid);\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} +#endif /* DEBUG */ + + +/* the arguments must not have side effects */ + +/* =========================================================================== + * Initialize the various 'constant' tables. + */ +local void tr_static_init() +{ +#if defined(GEN_TREES_H) || !defined(STDC) + static int static_init_done = 0; + int n; /* iterates over tree elements */ + int bits; /* bit counter */ + int length; /* length value */ + int code; /* code value */ + int dist; /* distance index */ + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + if (static_init_done) return; + + /* For some embedded targets, global variables are not initialized: */ + static_l_desc.static_tree = static_ltree; + static_l_desc.extra_bits = extra_lbits; + static_d_desc.static_tree = static_dtree; + static_d_desc.extra_bits = extra_dbits; + static_bl_desc.extra_bits = extra_blbits; + + /* Initialize the mapping length (0..255) -> length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES-1; code++) { + base_length[code] = length; + for (n = 0; n < (1< dist code (0..29) */ + dist = 0; + for (code = 0 ; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ + for ( ; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + _dist_code[256 + dist++] = (uch)code; + } + } + Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; + n = 0; + while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; + while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; + while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; + while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n].Len = 5; + static_dtree[n].Code = bi_reverse((unsigned)n, 5); + } + static_init_done = 1; + +# ifdef GEN_TREES_H + gen_trees_header(); +# endif +#endif /* defined(GEN_TREES_H) || !defined(STDC) */ +} + +/* =========================================================================== + * Genererate the file trees.h describing the static trees. + */ +#ifdef GEN_TREES_H +# ifndef DEBUG +# include +# endif + +# define SEPARATOR(i, last, width) \ + ((i) == (last)? "\n};\n\n" : \ + ((i) % (width) == (width)-1 ? ",\n" : ", ")) + +void gen_trees_header() +{ + FILE *header = fopen("trees.h", "w"); + int i; + + Assert (header != NULL, "Can't open trees.h"); + fprintf(header, + "/* header created automatically with -DGEN_TREES_H */\n\n"); + + fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); + for (i = 0; i < L_CODES+2; i++) { + fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, + static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); + } + + fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, + static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); + } + + fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); + for (i = 0; i < DIST_CODE_LEN; i++) { + fprintf(header, "%2u%s", _dist_code[i], + SEPARATOR(i, DIST_CODE_LEN-1, 20)); + } + + fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { + fprintf(header, "%2u%s", _length_code[i], + SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); + } + + fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); + for (i = 0; i < LENGTH_CODES; i++) { + fprintf(header, "%1u%s", base_length[i], + SEPARATOR(i, LENGTH_CODES-1, 20)); + } + + fprintf(header, "local const int base_dist[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "%5u%s", base_dist[i], + SEPARATOR(i, D_CODES-1, 10)); + } + + fclose(header); +} +#endif /* GEN_TREES_H */ + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +void _tr_init(s) + deflate_state *s; +{ + tr_static_init(); + + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; + s->last_eob_len = 8; /* enough lookahead for inflate */ +#ifdef DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(s) + deflate_state *s; +{ + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->last_lit = s->matches = 0; +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +local void pqdownheap(s, tree, k) + deflate_state *s; + ct_data *tree; /* the tree to restore */ + int k; /* node to move down */ +{ + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +local void gen_bitlen(s, desc) + deflate_state *s; + tree_desc *desc; /* the tree descriptor */ +{ + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n-base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (bits + xbits); + if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + } + if (overflow == 0) return; + + Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length-1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if ((unsigned) tree[m].Len != (unsigned) bits) { + Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((long)bits - (long)tree[m].Len) + *(long)tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes (tree, max_code, bl_count) + ct_data *tree; /* the tree to decorate */ + int max_code; /* largest code with non zero frequency */ + ushf *bl_count; /* number of codes at each bit length */ +{ + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + ush code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits-1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? + s->depth[n] : s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +local void scan_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code+1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +local void send_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +local int build_bl_tree(s) + deflate_state *s; +{ + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*(max_blindex+1) + 5+5+4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +local void send_all_trees(s, lcodes, dcodes, blcodes) + deflate_state *s; + int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes-1, 5); + send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +void _tr_stored_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ +#ifdef DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; +#endif + copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + * The current inflate code requires 9 bits of lookahead. If the + * last two codes for the previous block (real code plus EOB) were coded + * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + * the last real code. In this case we send two empty static blocks instead + * of one. (There are no problems if the previous block is stored or fixed.) + * To simplify the code, we assume the worst case of last real code encoded + * on one bit only. + */ +void _tr_align(s) + deflate_state *s; +{ + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); + /* Of the 10 bits for the empty block, we have already sent + * (10 - bi_valid) bits. The lookahead for the last real code (before + * the EOB of the previous block) was thus at least one plus the length + * of the EOB plus what we have just sent of the empty static block. + */ + if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; +#endif + bi_flush(s); + } + s->last_eob_len = 7; +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +void _tr_flush_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block, or NULL if too old */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is binary or text */ + if (stored_len > 0 && s->strm->data_type == Z_UNKNOWN) + set_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s->opt_len+3+7)>>3; + static_lenb = (s->static_len+3+7)>>3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->last_lit)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len+4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, eof); + +#ifdef FORCE_STATIC + } else if (static_lenb >= 0) { /* force static trees */ +#else + } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { +#endif + send_bits(s, (STATIC_TREES<<1)+eof, 3); + compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1)+eof, 3); + send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, + max_blindex+1); + compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (eof) { + bi_windup(s); +#ifdef DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + s->compressed_len-7*eof)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +int _tr_tally (s, dist, lc) + deflate_state *s; + unsigned dist; /* distance of matched string */ + unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + s->d_buf[s->last_lit] = (ush)dist; + s->l_buf[s->last_lit++] = (uch)lc; + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; + } else { + s->matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + Assert((ush)dist < (ush)MAX_DIST(s) && + (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } + +#ifdef TRUNCATE_BLOCK + /* Try to guess if it is profitable to stop the current block here */ + if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { + /* Compute an upper bound for the compressed length */ + ulg out_length = (ulg)s->last_lit*8L; + ulg in_length = (ulg)((long)s->strstart - s->block_start); + int dcode; + for (dcode = 0; dcode < D_CODES; dcode++) { + out_length += (ulg)s->dyn_dtree[dcode].Freq * + (5L+extra_dbits[dcode]); + } + out_length >>= 3; + Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", + s->last_lit, in_length, out_length, + 100L - out_length*100L/in_length)); + if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; + } +#endif + return (s->last_lit == s->lit_bufsize-1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(s, ltree, dtree) + deflate_state *s; + ct_data *ltree; /* literal tree */ + ct_data *dtree; /* distance tree */ +{ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->last_lit != 0) do { + dist = s->d_buf[lx]; + lc = s->l_buf[lx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code+LITERALS+1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + "pendingBuf overflow"); + + } while (lx < s->last_lit); + + send_code(s, END_BLOCK, ltree); + s->last_eob_len = ltree[END_BLOCK].Len; +} + +/* =========================================================================== + * Set the data type to BINARY or TEXT, using a crude approximation: + * set it to Z_TEXT if all symbols are either printable characters (33 to 255) + * or white spaces (9 to 13, or 32); or set it to Z_BINARY otherwise. + * IN assertion: the fields Freq of dyn_ltree are set. + */ +local void set_data_type(s) + deflate_state *s; +{ + int n; + + for (n = 0; n < 9; n++) + if (s->dyn_ltree[n].Freq != 0) + break; + if (n == 9) + for (n = 14; n < 32; n++) + if (s->dyn_ltree[n].Freq != 0) + break; + s->strm->data_type = (n == 32) ? Z_TEXT : Z_BINARY; +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(code, len) + unsigned code; /* the value to invert */ + int len; /* its bit length */ +{ + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(s) + deflate_state *s; +{ + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(s) + deflate_state *s; +{ + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef DEBUG + s->bits_sent = (s->bits_sent+7) & ~7; +#endif +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +local void copy_block(s, buf, len, header) + deflate_state *s; + charf *buf; /* the input data */ + unsigned len; /* its length */ + int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + s->last_eob_len = 8; /* enough lookahead for inflate */ + + if (header) { + put_short(s, (ush)len); + put_short(s, (ush)~len); +#ifdef DEBUG + s->bits_sent += 2*16; +#endif + } +#ifdef DEBUG + s->bits_sent += (ulg)len<<3; +#endif + while (len--) { + put_byte(s, *buf++); + } +} diff -Nru clucene-core-0.9.21b/src/ext/zlib/trees.h clucene-core-2.3.3.4/src/ext/zlib/trees.h --- clucene-core-0.9.21b/src/ext/zlib/trees.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/trees.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff -Nru clucene-core-0.9.21b/src/ext/zlib/zconf.h clucene-core-2.3.3.4/src/ext/zlib/zconf.h --- clucene-core-0.9.21b/src/ext/zlib/zconf.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/zconf.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,332 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define alloc_func z_alloc_func +# define free_func z_free_func +# define in_func z_in_func +# define out_func z_out_func +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff -Nru clucene-core-0.9.21b/src/ext/zlib/zlib.h clucene-core-2.3.3.4/src/ext/zlib/zlib.h --- clucene-core-0.9.21b/src/ext/zlib/zlib.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/zlib.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1357 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.3" +#define ZLIB_VERNUM 0x1230 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumualte before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it gets to the next deflate block boundary. When decoding the + zlib or gzip format, this will cause inflate() to return immediately after + the header and before the first block. When doing a raw inflate, inflate() + will go ahead and process the first block, and will return when it gets to + the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. Z_FIXED prevents the + use of dynamic Huffman codes, allowing for a simpler decoder for special + applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. In addition, the + current implementation of deflate will use at most the window size minus + 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg + is set to null if there is no error message. inflateInit2 does not perform + any decompression apart from reading the zlib header if present: this will + be done by inflate(). (So next_in and avail_in may be modified, but next_out + and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK can be used to + force inflate() to return immediately after header processing is complete + and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When + any of extra, name, or comment are not Z_NULL and the respective field is + not present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns 1 if file is being read directly without decompression, otherwise + zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); +/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is NULL, this function returns the required initial + value for the for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + +/* + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff -Nru clucene-core-0.9.21b/src/ext/zlib/zutil.c clucene-core-2.3.3.4/src/ext/zlib/zutil.c --- clucene-core-0.9.21b/src/ext/zlib/zutil.c 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/zutil.c 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,318 @@ +/* zutil.c -- target dependent utility functions for the compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zutil.h" + +#ifndef NO_DUMMY_DECL +struct internal_state {int dummy;}; /* for buggy compilers */ +#endif + +const char * const z_errmsg[10] = { +"need dictionary", /* Z_NEED_DICT 2 */ +"stream end", /* Z_STREAM_END 1 */ +"", /* Z_OK 0 */ +"file error", /* Z_ERRNO (-1) */ +"stream error", /* Z_STREAM_ERROR (-2) */ +"data error", /* Z_DATA_ERROR (-3) */ +"insufficient memory", /* Z_MEM_ERROR (-4) */ +"buffer error", /* Z_BUF_ERROR (-5) */ +"incompatible version",/* Z_VERSION_ERROR (-6) */ +""}; + + +const char * ZEXPORT zlibVersion() +{ + return ZLIB_VERSION; +} + +uLong ZEXPORT zlibCompileFlags() +{ + uLong flags; + + flags = 0; + switch (sizeof(uInt)) { + case 2: break; + case 4: flags += 1; break; + case 8: flags += 2; break; + default: flags += 3; + } + switch (sizeof(uLong)) { + case 2: break; + case 4: flags += 1 << 2; break; + case 8: flags += 2 << 2; break; + default: flags += 3 << 2; + } + switch (sizeof(voidpf)) { + case 2: break; + case 4: flags += 1 << 4; break; + case 8: flags += 2 << 4; break; + default: flags += 3 << 4; + } + switch (sizeof(z_off_t)) { + case 2: break; + case 4: flags += 1 << 6; break; + case 8: flags += 2 << 6; break; + default: flags += 3 << 6; + } +#ifdef DEBUG + flags += 1 << 8; +#endif +#if defined(ASMV) || defined(ASMINF) + flags += 1 << 9; +#endif +#ifdef ZLIB_WINAPI + flags += 1 << 10; +#endif +#ifdef BUILDFIXED + flags += 1 << 12; +#endif +#ifdef DYNAMIC_CRC_TABLE + flags += 1 << 13; +#endif +#ifdef NO_GZCOMPRESS + flags += 1L << 16; +#endif +#ifdef NO_GZIP + flags += 1L << 17; +#endif +#ifdef PKZIP_BUG_WORKAROUND + flags += 1L << 20; +#endif +#ifdef FASTEST + flags += 1L << 21; +#endif +#ifdef STDC +# ifdef NO_vsnprintf + flags += 1L << 25; +# ifdef HAS_vsprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_vsnprintf_void + flags += 1L << 26; +# endif +# endif +#else + flags += 1L << 24; +# ifdef NO_snprintf + flags += 1L << 25; +# ifdef HAS_sprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_snprintf_void + flags += 1L << 26; +# endif +# endif +#endif + return flags; +} + +#ifdef DEBUG + +# ifndef verbose +# define verbose 0 +# endif +int z_verbose = verbose; + +void z_error (m) + char *m; +{ + fprintf(stderr, "%s\n", m); + exit(1); +} +#endif + +/* exported to allow conversion of error code to string for compress() and + * uncompress() + */ +const char * ZEXPORT zError(err) + int err; +{ + return ERR_MSG(err); +} + +#if defined(_WIN32_WCE) + /* The Microsoft C Run-Time Library for Windows CE doesn't have + * errno. We define it as a global variable to simplify porting. + * Its value is always 0 and should not be used. + */ + int errno = 0; +#endif + +#ifndef HAVE_MEMCPY + +void zmemcpy(dest, source, len) + Bytef* dest; + const Bytef* source; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = *source++; /* ??? to be unrolled */ + } while (--len != 0); +} + +int zmemcmp(s1, s2, len) + const Bytef* s1; + const Bytef* s2; + uInt len; +{ + uInt j; + + for (j = 0; j < len; j++) { + if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; + } + return 0; +} + +void zmemzero(dest, len) + Bytef* dest; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = 0; /* ??? to be unrolled */ + } while (--len != 0); +} +#endif + + +#ifdef SYS16BIT + +#ifdef __TURBOC__ +/* Turbo C in 16-bit mode */ + +# define MY_ZCALLOC + +/* Turbo C malloc() does not allow dynamic allocation of 64K bytes + * and farmalloc(64K) returns a pointer with an offset of 8, so we + * must fix the pointer. Warning: the pointer must be put back to its + * original form in order to free it, use zcfree(). + */ + +#define MAX_PTR 10 +/* 10*64K = 640K */ + +local int next_ptr = 0; + +typedef struct ptr_table_s { + voidpf org_ptr; + voidpf new_ptr; +} ptr_table; + +local ptr_table table[MAX_PTR]; +/* This table is used to remember the original form of pointers + * to large buffers (64K). Such pointers are normalized with a zero offset. + * Since MSDOS is not a preemptive multitasking OS, this table is not + * protected from concurrent access. This hack doesn't work anyway on + * a protected system like OS/2. Use Microsoft C instead. + */ + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + voidpf buf = opaque; /* just to make some compilers happy */ + ulg bsize = (ulg)items*size; + + /* If we allocate less than 65520 bytes, we assume that farmalloc + * will return a usable pointer which doesn't have to be normalized. + */ + if (bsize < 65520L) { + buf = farmalloc(bsize); + if (*(ush*)&buf != 0) return buf; + } else { + buf = farmalloc(bsize + 16L); + } + if (buf == NULL || next_ptr >= MAX_PTR) return NULL; + table[next_ptr].org_ptr = buf; + + /* Normalize the pointer to seg:0 */ + *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; + *(ush*)&buf = 0; + table[next_ptr++].new_ptr = buf; + return buf; +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + int n; + if (*(ush*)&ptr != 0) { /* object < 64K */ + farfree(ptr); + return; + } + /* Find the original pointer */ + for (n = 0; n < next_ptr; n++) { + if (ptr != table[n].new_ptr) continue; + + farfree(table[n].org_ptr); + while (++n < next_ptr) { + table[n-1] = table[n]; + } + next_ptr--; + return; + } + ptr = opaque; /* just to make some compilers happy */ + Assert(0, "zcfree: ptr not found"); +} + +#endif /* __TURBOC__ */ + + +#ifdef M_I86 +/* Microsoft C in 16-bit mode */ + +# define MY_ZCALLOC + +#if (!defined(_MSC_VER) || (_MSC_VER <= 600)) +# define _halloc halloc +# define _hfree hfree +#endif + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + return _halloc((long)items, size); +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + _hfree(ptr); +} + +#endif /* M_I86 */ + +#endif /* SYS16BIT */ + + +#ifndef MY_ZCALLOC /* Any system without a special alloc function */ + +#ifndef STDC +extern voidp malloc OF((uInt size)); +extern voidp calloc OF((uInt items, uInt size)); +extern void free OF((voidpf ptr)); +#endif + +voidpf zcalloc (opaque, items, size) + voidpf opaque; + unsigned items; + unsigned size; +{ + if (opaque) items += size - size; /* make compiler happy */ + return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : + (voidpf)calloc(items, size); +} + +void zcfree (opaque, ptr) + voidpf opaque; + voidpf ptr; +{ + free(ptr); + if (opaque) return; /* make compiler happy */ +} + +#endif /* MY_ZCALLOC */ diff -Nru clucene-core-0.9.21b/src/ext/zlib/zutil.h clucene-core-2.3.3.4/src/ext/zlib/zutil.h --- clucene-core-0.9.21b/src/ext/zlib/zutil.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/ext/zlib/zutil.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,269 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef ZUTIL_H +#define ZUTIL_H + +#define ZLIB_INTERNAL +#include "zlib.h" + +#ifdef STDC +# ifndef _WIN32_WCE +# include +# endif +# include +# include +#endif +#ifdef NO_ERRNO_H +# ifdef _WIN32_WCE + /* The Microsoft C Run-Time Library for Windows CE doesn't have + * errno. We define it as a global variable to simplify porting. + * Its value is always 0 and should not be used. We rename it to + * avoid conflict with other libraries that use the same workaround. + */ +# define errno z_errno +# endif + extern int errno; +#else +# ifndef _WIN32_WCE +# include +# endif +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = (char*)ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) +# define OS_CODE 0x00 +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +#endif + +#ifdef AMIGA +# define OS_CODE 0x01 +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 0x02 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 0x05 +#endif + +#ifdef OS2 +# define OS_CODE 0x06 +# ifdef M_I86 + #include +# endif +#endif + +#if defined(MACOS) || defined(TARGET_OS_MAC) +# define OS_CODE 0x07 +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif +# endif +#endif + +#ifdef TOPS20 +# define OS_CODE 0x0a +#endif + +#ifdef WIN32 +# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ +# define OS_CODE 0x0b +# endif +#endif + +#ifdef __50SERIES /* Prime/PRIMOS */ +# define OS_CODE 0x0f +#endif + +#if defined(_BEOS_) || defined(RISCOS) +# define fdopen(fd,mode) NULL /* No fdopen() */ +#endif + +#if (defined(_MSC_VER) && (_MSC_VER > 600)) +# if defined(_WIN32_WCE) +# define fdopen(fd,mode) NULL /* No fdopen() */ +# ifndef _PTRDIFF_T_DEFINED + typedef int ptrdiff_t; +# define _PTRDIFF_T_DEFINED +# endif +# else +# define fdopen(fd,type) _fdopen(fd,type) +# endif +#endif + + /* common defaults */ + +#ifndef OS_CODE +# define OS_CODE 0x03 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif +#if defined(__CYGWIN__) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif +#ifndef HAVE_VSNPRINTF +# ifdef MSDOS + /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), + but for now we just assume it doesn't. */ +# define NO_vsnprintf +# endif +# ifdef __TURBOC__ +# define NO_vsnprintf +# endif +# ifdef WIN32 + /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ +# if !defined(vsnprintf) && !defined(NO_vsnprintf) +# define vsnprintf _vsnprintf +# endif +# endif +# ifdef __SASC +# define NO_vsnprintf +# endif +#endif +#ifdef VMS +# define NO_vsnprintf +#endif + +#if defined(pyr) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + extern void zmemzero OF((Bytef* dest, uInt len)); +#endif + +/* Diagnostic functions */ +#ifdef DEBUG +# include + extern int z_verbose; + extern void z_error OF((char *m)); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + + +voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); +void zcfree OF((voidpf opaque, voidpf ptr)); + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +#endif /* ZUTIL_H */ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/clucene.jpg and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/clucene.jpg differ diff -Nru clucene-core-0.9.21b/src/htdocs/contribute.shtml clucene-core-2.3.3.4/src/htdocs/contribute.shtml --- clucene-core-0.9.21b/src/htdocs/contribute.shtml 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/htdocs/contribute.shtml 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,36 @@ + +

+

How to contribute?

+
+

We at CLucene would welcome any help from any capable person. Wether you are a developer, just a user, platform owner, or a webmaster, here is how you could help evolve and become the strongest and fastest indexing library out there:

+ +

C++ developers

+

Well, CLucene is written in C++ after all...

+

We need several tasks to be performed by experienced C++ developers. Examples for such include: porting of new code (Java Lucene always has new code to port), writing or porting miscellenous contribs, writing useful utilities (benchmarker for example), finding new ways to improve the speed of CLucene (memory pooling or special ways to handle strings for example), move lagacy code out and replace it with code from Boost libs, and much more...

+

There is really a lot to do, and if you like programming this is where you can get the best out of yourself.

+

Even if you can't actively participate in the project, we would really like to hear what you think of it, and if you find anything you think should be improved, don't hasitate dropping us a line!

+ +

Other developers

+

Write wrappers, use and file bug reports or feature requests

+

Being written in cross-platform C++, CLucene can be used from virtually any language and on any platform. If you can write or maintain (or both...) a decent wrapper for .NET, Perl, PHP, or any other language or platform, please do so. We will give you any help you need, and will host your project if necessary. Please contact us before starting any work on this, we might have exta info or pointers you would find useful (for example, there is a SWIG project in our SVN repository you can jump start from).

+

Alternatively, just use CLucene on your projects and report back any bugs or drawbacks you find. If you find it useful, please don't be shy to spread the word :)

+ + +

Testers

+

Make CLucene crash!

+

Yes, thats correct. We are looking for ways to crash CLucene, or at least stress-test any part of it. If you can provide us with creative ways to do so, please do!

+ + +

Platform owners

+

Help us test CLucene on more platforms

+

If you have access, or own, a non-standard platform, or one that CLucene has not been tested on yet, please take 5 minutes to test it and let us know how it went. If broken it is, fix it we would.

+ + +

Webmasters

+

Help make this pretty website even prettier

+

We need this website to contain loads of useful content, and someone to keep it up to date. That shouldn't be a tremendous task, but it requires a certain level of expertise.

+

Oh, and the pages you're seeing now are static HTML pages. We can install any LAMP CMS.

+ +
+
+ \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/htdocs/download.shtml clucene-core-2.3.3.4/src/htdocs/download.shtml --- clucene-core-0.9.21b/src/htdocs/download.shtml 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/htdocs/download.shtml 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,168 @@ + +
+

What version to get?

+
+

For most new projects we recommend using the code in our git master HEAD. This version conforms with Java Lucene 2.3.2, and is considerably faster than any previous version of CLucene. It also uses cmake as it's build system, and continuesly evolves to be stronger and faster.

+

There is also the 0.9.21b version we release quite a while ago. It is proven to be stable, but we provide almost no support for it nowadays. Use it only if you have a compelling reason not to use the one in the git master HEAD.

+

For more info on this, please read this thread. You are welcome to ask any follow-up questions in our mailing list. Also, don't forget to check on how you can contribute.

+
+
+ + +
+
+
+

The 2_3_2 branch from the git master HEAD

+

Being continuesly updated

+
+

The recommended branch to use. Easier to build and maintain.

+

Use a git client to keep in sync with our working copy:

git clone git://clucene.git.sourceforge.net/gitroot/clucene/clucene
+

Alternatively, you can download a tarball through our WebGUI (click "snapshot").

+

Build instructions (more info in the INSTALLATION and README files):

+
+Building from source:
+--------------------
+
+Dependencies:
+* CMake version 2.4.2 or later (2.6 or later recommended due to an improved FindBoost module)
+* Boost libs (http://www.boost.org/), latest version recommended
+* A functioning and fairly new C++ compiler. We test mostly on GCC and Visual Studio 6+.
+Anything other than that may not work.
+* Something to unzip/untar the source code.
+
+Build instructions:
+1.) Download the latest sourcecode of the HEAD of the master branch in our git repository
+2.) Unpack the tarball/zip/bzip/whatever if downloaded as such
+3.) Open a command prompt, terminal window, or cygwin session.
+4.) Change directory into the root of the sourcecode (from now on referred to as )
+# cd 
+5.) Create and change directory into an 'out-of-source' directory for your build. 
+    [This is by far the easiest way to build,  it has the benefit of being able to 
+    create different types of builds in the same source-tree.]
+# mkdir /build-name
+# cd /build-name
+5*.) Windows users: make sure Boost environment variables are defined at least for the current
+   command prompt session. You can check this by typing "set" (no quotes). If you have any doubts,
+   just type the following 3 commands to set those variables, as follows (boost_1_40_0 being the
+   current Boost version):
+	set BOOST_BUILD_PATH=C:\{parent directory for boost}\boost_1_40_0\tools\build\v2
+	set BOOST_PATH=C:\{parent directory for boost}
+	set BOOST_ROOT=C:\{parent directory for boost}\boost_1_40_0
+6.) Configure using cmake. This can be done many different ways, but the basic syntax is
+# cmake [-G "Script name"] ..
+    [Where "Script name" is the name of the scripts to build (e.g. Visual Studio 8 2005).
+    A list of supported build scripts can be found by]
+# cmake --help
+7.) You can configure several options such as the build type, debugging information, 
+    mmap support, etc, by using the CMake GUI or by calling 
+# ccmake ..
+    Make sure you call configure again if you make any changes.
+8.) Start the build. This depends on which build script you specified, but it would be something like
+# make
+or
+# nmake
+    Or open the solution files with your IDE.
+
+    [You can also specify to just build a certain target (such as cl_test, cl_demo, 
+    clucene-core (shared library), clucene-core-static (static library).]
+9.) The binary files will be available in build-name/bin
+10.)Test the code. (After building the tests - this is done by default, or by calling make cl_test)
+# ctest -V
+11.)At this point you can install the library:
+# make install
+    [There are options to do this from the IDE, but I find it easier to create a 
+    distribution (see instructions below) and install that instead.]
+or
+# make cl_demo
+    [This creates the demo application, which demonstrates a simple text indexing and searching].
+or
+	Adjust build values using ccmake or the Cmake GUI and rebuild.
+	
+12.)Now you can develop your own code. This is beyond the scope of this document.
+    Read the README for information about documentation or to get help on the mailinglist.
+
+
+
+
+
+
+ + +
+
+
+

Release 0.9.21b

+

October 23rd, 2008

+
+

This is the latest stable official release.

+

Installation notes

+
+Rebuilding the autobuild scripts
+--------------------------------
+If you made changes to the configure.ac or any of the Makefile.am 
+files you will also need to run through this process.
+
+Requirements:
+GNU autotools is required. I have the following versions installed:
+Autoconf 2.57
+Automake 1.72
+Libtool 1.5a
+
+If you use significantly older versions, I can almost guarantee
+issues.  This is because each of the autotools is constantly changing
+with little regard to backward compatability or even compatiability
+with the other autotools.
+
+Run the autogen.sh file in the root directory of clucene to run the necessary commands.
+
+
+Building
+--------
+The following will get you building assuming that you have suffciently
+recent buld tools installed.  
+1.) unpack tarball 
+2.) cd into clucene
+3.) if you downloaded a tar version skip to 5
+4.) run ./autogen.sh
+5.) run ./configure
+6.) run make
+7.) things will churn for a very long time, the clucene library will
+be built as well as the examples.
+8.) check the src/demo, test and src directory
+
+In src/demo you should see:
+cl_demo
+
+In test you should see
+cl_test
+
+In src you should see:
+libclucene.so.0.0.0 libclucene.la libclucene.a 
+and symbolic links to these files.
+
+9.) If you want to run make install to copy the clucene files into the system 
+    include and lib directories
+10.) You may have to run
+export LD_LIBRARY_PATH=/path/to/clucene/lib 
+
+11.) run ./cl_test in the test directory and check that the tests all run
+
+Alternative (faster) way of building:
+-------------------------------------
+This method does not create library files, so depending on your needs you may not
+find this method useful.
+
+* Do steps 1-5 of the previous build process.
+* Change directory into src/
+* run make monolithic
+* Change directory into test/ (cd ../test/)
+* run make monolithic
+* You should see cl_test_monolithic in this directory
+* run ./cl_test_monolithic and check that the tests all run
+
+ +
+
+
+
+ \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/htdocs/_footer.html clucene-core-2.3.3.4/src/htdocs/_footer.html --- clucene-core-0.9.21b/src/htdocs/_footer.html 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/htdocs/_footer.html 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,55 @@ +
 
+ + + + +
 
+ + + + + + + + + \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/htdocs/_header.html clucene-core-2.3.3.4/src/htdocs/_header.html --- clucene-core-0.9.21b/src/htdocs/_header.html 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/htdocs/_header.html 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,37 @@ + + + + + + + +CLucene - lightning fast C++ search engine + + + +
+ + + + +
+
+
+
\ No newline at end of file Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/disk.png and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/disk.png differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img01.gif and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img01.gif differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img02.gif and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img02.gif differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img03.gif and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img03.gif differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img04.jpg and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img04.jpg differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img05.jpg and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img05.jpg differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img06.jpg and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img06.jpg differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img07.gif and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img07.gif differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img08.jpg and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img08.jpg differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img09.jpg and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img09.jpg differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img10.jpg and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img10.jpg differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/img11.gif and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/img11.gif differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/htdocs/images/spacer.gif and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/htdocs/images/spacer.gif differ diff -Nru clucene-core-0.9.21b/src/htdocs/_index.php clucene-core-2.3.3.4/src/htdocs/_index.php --- clucene-core-0.9.21b/src/htdocs/_index.php 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/htdocs/_index.php 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,9 @@ + diff -Nru clucene-core-0.9.21b/src/htdocs/index.shtml clucene-core-2.3.3.4/src/htdocs/index.shtml --- clucene-core-0.9.21b/src/htdocs/index.shtml 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/htdocs/index.shtml 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,19 @@ + +
+

What is CLucene?

+
+

CLucene is a high-performance, scalable, cross platform, full-featured, open-source indexing and searching API. Specifically, CLucene is the guts of a search engine, the hard stuff. You write the easy stuff: the UI and the process of selecting and parsing your data files to pump them into the search engine yourself, and any specialized queries to pull it back for display or further processing.

+

CLucene is a port of the very popular Java Lucene text search engine API. CLucene aims to be a good alternative to Java Lucene when performance really matters or if you want to stick to good old C++. CLucene is faster than Lucene as it is written in C++, meaning it is being compiled into machine code, has no background GC operations, and requires no any extra setup procedures.

+

Being written in pure cross-platform C++ code, and utilizing the flexible cmake build system, CLucene can virtually be used for any purpose, on any machine. From PCs running Windows or Linux to Mobile devices. The sky is the limit.

+
+
+ +
+

Current status

+
+

Currently you can get CLucene in two flavors - one is the 0.9.21 release, which has been proven to be stable over time, but is only compatiable with Java Lucene 1.9.1. Another option is our current working copy on git, which conforms with Java Lucene 2.3.2. A detailed status and info on how to decide which one to use was posted on our Mailing List not long ago.

+

Since we all are very busy people, unfortunately we cannot dedicate all the time we would have wanted to in this project. We do believe in what we do, but the work on this is never ending. Please, if you believe in open-source software, like we do, see if you can contribute to the project.

+

More info and download instructions on our downloads page.

+
+
+ \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/htdocs/README clucene-core-2.3.3.4/src/htdocs/README --- clucene-core-0.9.21b/src/htdocs/README 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/htdocs/README 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,9 @@ +How to upload: + +#create your shell space: +ssh ustramooner,clucene@shell.sf.net create + +#upload (make sure you upload with group write permissions otherwise other people can't overwrite) +rsync --chmod=ug=rwX -Pav htdocs/ ustramooner,clucene@shell.sf.net:/home/groups/c/cl/clucene/htdocs/ + + diff -Nru clucene-core-0.9.21b/src/htdocs/style.css clucene-core-2.3.3.4/src/htdocs/style.css --- clucene-core-0.9.21b/src/htdocs/style.css 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/htdocs/style.css 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,344 @@ +/* +Design by Free CSS Templates +http://www.freecsstemplates.org +Released for free under a Creative Commons Attribution 2.5 License +*/ + +body { + margin: 0; + padding: 0; + background: #E3E7ED url(images/img01.gif) repeat-x left top; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: #787878; +} + +h1, h2, h3 { + margin: 0; + padding: 0; + font-family: Georgia, "Times New Roman", Times, serif; + font-weight: normal; + color: #000; +} + +h1 { + font-size: 2em; +} + +h2 { + font-size: 1.6em; +} + +h3 { + font-size: 1.6em; +} + +p, ul, ol { + margin-top: 0; + line-height: 180%; +} + +ul, ol { +} + +a { + text-decoration: none; + border-bottom: 1px dotted #999999; + color: #417FDA; +} + +a:hover { +} + +#wrapper { + width: 968px; + margin: 0 auto; + padding: 0; +} + +/* Header */ + +#header { + width: 968px; + height: 150px; + margin: 0 auto; + background: url(images/img02.gif) no-repeat left top; +} + +/* Logo */ + +#logo { + float: left; + width: 968px; + height: 60px; + color: #616161; +} + +#logo h1, #logo p { + margin: 0; + padding: 0; +} + +#logo h1 { + float: left; + padding: 80px 0 0 80px; + letter-spacing: -1px; + text-transform: lowercase; + font-size: 2.6em; +} + +#logo p { + float: left; + margin: 0; + padding: 90px 10px; + font: normal 14px Georgia, "Times New Roman", Times, serif; + font-style: italic; +} + +#logo a { + border: none; + background: none; + text-decoration: none; + color: #616161; +} + +/* Search */ + +#search { + float: right; + width: 230px; + padding: 0; +} + +#search form { + height: 41px; + margin: 0; + padding: 70px 0 0 0px; +} + +#search fieldset { + margin: 0; + padding: 0; + border: none; +} + +#search-text { + width: 210px; + border: none; + text-transform: lowercase; + font: bold 1.2em Arial, Helvetica, sans-serif; + color: #FFFFFF; +} + +#search-submit { + display: none; +} + +/* Menu */ + +#menu { + width: 968px; + height: 50px; + margin: 0 auto; + padding: 0; +} + +#menu ul { + margin: 0; + padding: 0; + padding-left: 10px; + list-style: none; + line-height: normal; +} + +#menu li { + float: left; + height: 50px; + background: url(images/img03.gif) no-repeat right top; +} + +#menu a { + display: block; + margin-top: 10px; + margin-right: 3px; + padding: 7px 20px 7px 20px; + text-decoration: none; + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + color: #FFFFFF; + border: none; +} + +#menu a:hover, #menu .current_page_item a { +} + +#menu a:hover { + text-decoration: underline; +} + +/* Page */ + +#page { + width: 968px; + margin: 0 auto; + background: url(images/img05.jpg) repeat-y left top; +} + +#page-bgtop { + background: url(images/img04.jpg) no-repeat left top; +} + +#page-bgbtm { + background: url(images/img06.jpg) no-repeat left bottom; +} + +/* Content */ + +#content { + float: right; + width: 700px; + padding: 60px 20px 0 0; +} + +.post { + margin-bottom: 8px; + background: url(images/img09.jpg) repeat-y left top; +} + +.post-bgtop { + background: url(images/img08.jpg) no-repeat left top; +} + +.post-bgbtm { + background: url(images/img10.jpg) no-repeat left bottom; +} +.whitepost {padding-left: 20px;} +.whitepost .title {color:#000000;padding-bottom:15px;} +.post .title { + padding-top: 15px; + padding-left: 20px; + color: #000000; +} + +.post .title a { + color: #000000; + border: none; +} + +.post .meta { + border-bottom: 1px dashed #B5DEF4; + padding-left: 20px; + padding-bottom: 5px; + text-align: left; + font-family: Arial, Helvetica, sans-serif; + font-size: 11px; + font-style: italic; +} + +.post .entry { + padding: 10px 20px 15px 20px; + text-align: justify; +} + +/* Sidebar */ + +#sidebar { + float: left; + width: 220px; + padding: 60px 0 0 20px; + color: #787878; +} + +#sidebar ul { + margin: 0; + padding: 0; + list-style: none; +} + +#sidebar li { + margin: 0; + padding: 0; +} + +#sidebar li ul { + padding-bottom: 30px; +} + +#sidebar li li { + line-height: 35px; + border-bottom: 1px dashed #D2D4C9; +} + +#sidebar li li span { + display: block; + margin-top: -20px; + padding: 0; + font-size: 11px; + font-style: italic; +} + +#sidebar h2 { + height: 32px; + padding: 8px 0 0 30px; + background: url(images/img11.gif) no-repeat left top; + letter-spacing: -.5px; + color: #FFFFFF; +} + +#sidebar p { + padding-bottom: 20px; + text-align: justify; +} + +#sidebar a { + color: #417FDA; + border: none; +} + +#sidebar a:hover { + text-decoration: underline; + color: #787878; +} + +/* Calendar */ + +#calendar { +} + +#calendar_wrap { + padding: 20px; +} + +#calendar table { + width: 100%; +} + +#calendar tbody td { + text-align: center; +} + +#calendar #next { + text-align: right; +} + +/* Footer */ + +#footer { + height: 50px; + margin: 0 auto; + padding: 0px 0 15px 0; + font-family: Arial, Helvetica, sans-serif; + color: #B2B2B2; +} + +#footer p { + margin: 0; + line-height: normal; + font-size: 9px; + text-transform: uppercase; + text-align: center; +} + +#footer a { + color: #3D444F; +} \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/Makefile.am clucene-core-2.3.3.4/src/Makefile.am --- clucene-core-0.9.21b/src/Makefile.am 2008-10-23 17:44:37.000000000 +0000 +++ clucene-core-2.3.3.4/src/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in -AUTOMAKE_OPTIONS = 1.6 - -include_HEADERS = CLucene.h -lib_LTLIBRARIES = libclucene.la -libclucene_la_LDFLAGS = --version-info $(CLLIB_VERSION) --release $(PACKAGE_VERSION) - -lsrcdir = $(top_srcdir)/src/CLucene -EXTRA_DIST = $(lsrcdir)/CLMonolithic.cpp \ - $(lsrcdir)/CMakeLists.txt \ - $(lsrcdir)/clucene-config.h.cmake - -libclucene_la_SOURCES = -include CLucene/Makefile.am -include CLucene/config/Makefile.am -include CLucene/util/Makefile.am -include CLucene/store/Makefile.am -include CLucene/debug/Makefile.am -include CLucene/analysis/Makefile.am -include CLucene/analysis/standard/Makefile.am -include CLucene/document/Makefile.am -include CLucene/index/Makefile.am -include CLucene/queryParser/Makefile.am -include CLucene/search/Makefile.am - -SUBDIRS = . -DIST_SUBDIRS = . demo - -monolithic: - @rm -f CLMonolithic.$(OBJEXT) - $(MAKE) $(AM_MAKEFLAGS) CLMonolithic.o - -CLMonolithic.o: - $(CXXCOMPILE) -c $(lsrcdir)/CLMonolithic.cpp - -MAINTAINERCLEANFILES = Makefile.in diff -Nru clucene-core-0.9.21b/src/Makefile.in clucene-core-2.3.3.4/src/Makefile.in --- clucene-core-0.9.21b/src/Makefile.in 2008-10-23 18:18:25.000000000 +0000 +++ clucene-core-2.3.3.4/src/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,1847 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -DIST_COMMON = $(analyzersh_HEADERS) $(configh_HEADERS) \ - $(debugh_HEADERS) $(documenth_HEADERS) $(include_HEADERS) \ - $(indexh_HEADERS) $(qph_HEADERS) $(searchh_HEADERS) \ - $(srcdir)/CLucene/Makefile.am \ - $(srcdir)/CLucene/analysis/Makefile.am \ - $(srcdir)/CLucene/analysis/standard/Makefile.am \ - $(srcdir)/CLucene/config/Makefile.am \ - $(srcdir)/CLucene/debug/Makefile.am \ - $(srcdir)/CLucene/document/Makefile.am \ - $(srcdir)/CLucene/index/Makefile.am \ - $(srcdir)/CLucene/queryParser/Makefile.am \ - $(srcdir)/CLucene/search/Makefile.am \ - $(srcdir)/CLucene/store/Makefile.am \ - $(srcdir)/CLucene/util/Makefile.am $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(stdanh_HEADERS) $(stdh_HEADERS) \ - $(storeh_HEADERS) $(utilh_HEADERS) -subdir = src -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_cxx_have_std.m4 \ - $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ - $(top_srcdir)/m4/ac_cxx_have_wctype_h.m4 \ - $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ - $(top_srcdir)/m4/ac_define_integer_bits.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/ax_config_feature.m4 \ - $(top_srcdir)/m4/ax_prefix_config_h.m4 \ - $(top_srcdir)/m4/dps_float_byte.m4 \ - $(top_srcdir)/m4/dps_snprintf_oflow.m4 \ - $(top_srcdir)/m4/dps_static_const_type.m4 \ - $(top_srcdir)/m4/dps_swprintf_works.m4 \ - $(top_srcdir)/m4/mdl_cxx_function_try_blocks.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h.tmp -CONFIG_CLEAN_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(libdir)" \ - "$(DESTDIR)$(clucene_configdir)" "$(DESTDIR)$(analyzershdir)" \ - "$(DESTDIR)$(confighdir)" "$(DESTDIR)$(debughdir)" \ - "$(DESTDIR)$(documenthdir)" "$(DESTDIR)$(includedir)" \ - "$(DESTDIR)$(indexhdir)" "$(DESTDIR)$(qphdir)" \ - "$(DESTDIR)$(searchhdir)" "$(DESTDIR)$(stdanhdir)" \ - "$(DESTDIR)$(stdhdir)" "$(DESTDIR)$(storehdir)" \ - "$(DESTDIR)$(utilhdir)" -libLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(lib_LTLIBRARIES) -libclucene_la_LIBADD = -am_libclucene_la_OBJECTS = StdHeader.lo gunichartables.lo \ - repl_lltot.lo repl_tcscasecmp.lo repl_tcslwr.lo repl_tcstod.lo \ - repl_tcstoll.lo repl_tprintf.lo threads.lo utf8.lo BitSet.lo \ - dirent.lo Equators.lo FastCharStream.lo fileinputstream.lo \ - MD5Digester.lo Misc.lo Reader.lo StringBuffer.lo \ - StringIntern.lo ThreadLocal.lo FSDirectory.lo IndexInput.lo \ - Lock.lo IndexOutput.lo MMapInput.lo RAMDirectory.lo \ - TransactionalRAMDirectory.lo condition.lo error.lo \ - memtracking.lo Analyzers.lo AnalysisHeader.lo \ - StandardAnalyzer.lo StandardFilter.lo StandardTokenizer.lo \ - DateField.lo Document.lo Field.lo CompoundFile.lo \ - DocumentWriter.lo FieldInfos.lo FieldsReader.lo \ - FieldsWriter.lo IndexModifier.lo IndexReader.lo IndexWriter.lo \ - MultiReader.lo SegmentInfos.lo SegmentMergeInfo.lo \ - SegmentMerger.lo SegmentMergeQueue.lo SegmentReader.lo \ - SegmentTermDocs.lo SegmentTermEnum.lo SegmentTermPositions.lo \ - SegmentTermVector.lo Term.lo TermInfo.lo TermInfosReader.lo \ - TermInfosWriter.lo TermVectorReader.lo TermVectorWriter.lo \ - Lexer.lo QueryParser.lo QueryParserBase.lo QueryToken.lo \ - TokenList.lo MultiFieldQueryParser.lo BooleanQuery.lo \ - BooleanScorer.lo DateFilter.lo CachingWrapperFilter.lo \ - ChainedFilter.lo ConjunctionScorer.lo ExactPhraseScorer.lo \ - Explanation.lo FieldCache.lo FieldCacheImpl.lo \ - FieldSortedHitQueue.lo FieldDocSortedHitQueue.lo \ - FilteredTermEnum.lo FuzzyQuery.lo Hits.lo HitQueue.lo \ - IndexSearcher.lo MultiSearcher.lo MultiTermQuery.lo \ - PhrasePositions.lo PhraseQuery.lo PhraseScorer.lo \ - PrefixQuery.lo QueryFilter.lo RangeFilter.lo RangeQuery.lo \ - SearchHeader.lo Similarity.lo SloppyPhraseScorer.lo Sort.lo \ - TermQuery.lo TermScorer.lo WildcardQuery.lo \ - WildcardTermEnum.lo -libclucene_la_OBJECTS = $(am_libclucene_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libclucene_la_SOURCES) -DIST_SOURCES = $(libclucene_la_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -clucene_configDATA_INSTALL = $(INSTALL_DATA) -DATA = $(clucene_config_DATA) -analyzershHEADERS_INSTALL = $(INSTALL_HEADER) -confighHEADERS_INSTALL = $(INSTALL_HEADER) -debughHEADERS_INSTALL = $(INSTALL_HEADER) -documenthHEADERS_INSTALL = $(INSTALL_HEADER) -includeHEADERS_INSTALL = $(INSTALL_HEADER) -indexhHEADERS_INSTALL = $(INSTALL_HEADER) -qphHEADERS_INSTALL = $(INSTALL_HEADER) -searchhHEADERS_INSTALL = $(INSTALL_HEADER) -stdanhHEADERS_INSTALL = $(INSTALL_HEADER) -stdhHEADERS_INSTALL = $(INSTALL_HEADER) -storehHEADERS_INSTALL = $(INSTALL_HEADER) -utilhHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(analyzersh_HEADERS) $(configh_HEADERS) $(debugh_HEADERS) \ - $(documenth_HEADERS) $(include_HEADERS) $(indexh_HEADERS) \ - $(qph_HEADERS) $(searchh_HEADERS) $(stdanh_HEADERS) \ - $(stdh_HEADERS) $(storeh_HEADERS) $(utilh_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLLIB_VERSION = @CLLIB_VERSION@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GREP = @GREP@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -acx_pthread_config = @acx_pthread_config@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_doxygen = @enable_doxygen@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -AUTOMAKE_OPTIONS = 1.6 -include_HEADERS = CLucene.h -lib_LTLIBRARIES = libclucene.la -libclucene_la_LDFLAGS = --version-info $(CLLIB_VERSION) --release $(PACKAGE_VERSION) -lsrcdir = $(top_srcdir)/src/CLucene -EXTRA_DIST = $(lsrcdir)/CLMonolithic.cpp \ - $(lsrcdir)/CMakeLists.txt \ - $(lsrcdir)/clucene-config.h.cmake - -libclucene_la_SOURCES = $(lsrcdir)/StdHeader.cpp \ - $(configdir)/gunichartables.cpp $(configdir)/repl_lltot.cpp \ - $(configdir)/repl_tcscasecmp.cpp $(configdir)/repl_tcslwr.cpp \ - $(configdir)/repl_tcstod.cpp $(configdir)/repl_tcstoll.cpp \ - $(configdir)/repl_tprintf.cpp $(configdir)/threads.cpp \ - $(configdir)/utf8.cpp $(utildir)/BitSet.cpp \ - $(utildir)/dirent.cpp $(utildir)/Equators.cpp \ - $(utildir)/FastCharStream.cpp $(utildir)/fileinputstream.cpp \ - $(utildir)/MD5Digester.cpp $(utildir)/Misc.cpp \ - $(utildir)/Reader.cpp $(utildir)/StringBuffer.cpp \ - $(utildir)/StringIntern.cpp $(utildir)/ThreadLocal.cpp \ - $(storedir)/FSDirectory.cpp $(storedir)/IndexInput.cpp \ - $(storedir)/Lock.cpp $(storedir)/IndexOutput.cpp \ - $(storedir)/MMapInput.cpp $(storedir)/RAMDirectory.cpp \ - $(storedir)/TransactionalRAMDirectory.cpp \ - $(debugdir)/condition.cpp $(debugdir)/error.cpp \ - $(debugdir)/memtracking.cpp $(analyzersdir)/Analyzers.cpp \ - $(analyzersdir)/AnalysisHeader.cpp \ - $(stdandir)/StandardAnalyzer.cpp \ - $(stdandir)/StandardFilter.cpp \ - $(stdandir)/StandardTokenizer.cpp $(documentdir)/DateField.cpp \ - $(documentdir)/Document.cpp $(documentdir)/Field.cpp \ - $(indexdir)/CompoundFile.cpp $(indexdir)/DocumentWriter.cpp \ - $(indexdir)/FieldInfos.cpp $(indexdir)/FieldsReader.cpp \ - $(indexdir)/FieldsWriter.cpp $(indexdir)/IndexModifier.cpp \ - $(indexdir)/IndexReader.cpp $(indexdir)/IndexWriter.cpp \ - $(indexdir)/MultiReader.cpp $(indexdir)/SegmentInfos.cpp \ - $(indexdir)/SegmentMergeInfo.cpp $(indexdir)/SegmentMerger.cpp \ - $(indexdir)/SegmentMergeQueue.cpp \ - $(indexdir)/SegmentReader.cpp $(indexdir)/SegmentTermDocs.cpp \ - $(indexdir)/SegmentTermEnum.cpp \ - $(indexdir)/SegmentTermPositions.cpp \ - $(indexdir)/SegmentTermVector.cpp $(indexdir)/Term.cpp \ - $(indexdir)/TermInfo.cpp $(indexdir)/TermInfosReader.cpp \ - $(indexdir)/TermInfosWriter.cpp \ - $(indexdir)/TermVectorReader.cpp \ - $(indexdir)/TermVectorWriter.cpp $(qpdir)/Lexer.cpp \ - $(qpdir)/QueryParser.cpp $(qpdir)/QueryParserBase.cpp \ - $(qpdir)/QueryToken.cpp $(qpdir)/TokenList.cpp \ - $(qpdir)/MultiFieldQueryParser.cpp \ - $(searchdir)/BooleanQuery.cpp $(searchdir)/BooleanScorer.cpp \ - $(searchdir)/DateFilter.cpp \ - $(searchdir)/CachingWrapperFilter.cpp \ - $(searchdir)/ChainedFilter.cpp \ - $(searchdir)/ConjunctionScorer.cpp \ - $(searchdir)/ExactPhraseScorer.cpp \ - $(searchdir)/Explanation.cpp $(searchdir)/FieldCache.cpp \ - $(searchdir)/FieldCacheImpl.cpp \ - $(searchdir)/FieldSortedHitQueue.cpp \ - $(searchdir)/FieldDocSortedHitQueue.cpp \ - $(searchdir)/FilteredTermEnum.cpp $(searchdir)/FuzzyQuery.cpp \ - $(searchdir)/Hits.cpp $(searchdir)/HitQueue.cpp \ - $(searchdir)/IndexSearcher.cpp $(searchdir)/MultiSearcher.cpp \ - $(searchdir)/MultiTermQuery.cpp \ - $(searchdir)/PhrasePositions.cpp $(searchdir)/PhraseQuery.cpp \ - $(searchdir)/PhraseScorer.cpp $(searchdir)/PrefixQuery.cpp \ - $(searchdir)/QueryFilter.cpp $(searchdir)/RangeFilter.cpp \ - $(searchdir)/RangeQuery.cpp $(searchdir)/SearchHeader.cpp \ - $(searchdir)/Similarity.cpp \ - $(searchdir)/SloppyPhraseScorer.cpp $(searchdir)/Sort.cpp \ - $(searchdir)/TermQuery.cpp $(searchdir)/TermScorer.cpp \ - $(searchdir)/WildcardQuery.cpp \ - $(searchdir)/WildcardTermEnum.cpp -stdhdir = $(includedir)/CLucene -stdh_HEADERS = $(lsrcdir)/CLBackwards.h $(lsrcdir)/CLConfig.h \ - $(lsrcdir)/LuceneThreads.h $(lsrcdir)/StdHeader.h -clucene_configdir = $(libdir)/CLucene -clucene_config_DATA = $(top_builddir)/src/CLucene/clucene-config.h -configdir = $(lsrcdir)/config -confighdir = $(includedir)/CLucene/config -configh_HEADERS = $(configdir)/*.h -utildir = $(lsrcdir)/util -utilhdir = $(includedir)/CLucene/util -utilh_HEADERS = $(utildir)/*.h -storedir = $(lsrcdir)/store -storehdir = $(includedir)/CLucene/store -storeh_HEADERS = $(storedir)/*.h -debugdir = $(lsrcdir)/debug -debughdir = $(includedir)/CLucene/debug -debugh_HEADERS = $(debugdir)/*.h -analyzersdir = $(lsrcdir)/analysis -analyzershdir = $(includedir)/CLucene/analysis -analyzersh_HEADERS = $(analyzersdir)/*.h -stdandir = $(lsrcdir)/analysis/standard -stdanhdir = $(includedir)/CLucene/analysis/standard -stdanh_HEADERS = $(stdandir)/*.h -documentdir = $(lsrcdir)/document -documenthdir = $(includedir)/CLucene/document -documenth_HEADERS = $(documentdir)/*.h -indexdir = $(lsrcdir)/index -indexhdir = $(includedir)/CLucene/index -indexh_HEADERS = $(indexdir)/*.h -qpdir = $(lsrcdir)/queryParser -qphdir = $(includedir)/CLucene/queryParser -qph_HEADERS = $(qpdir)/*.h -searchdir = $(lsrcdir)/search -searchhdir = $(includedir)/CLucene/search -searchh_HEADERS = $(searchdir)/*.h -SUBDIRS = . -DIST_SUBDIRS = . demo -MAINTAINERCLEANFILES = Makefile.in -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .cpp .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/CLucene/Makefile.am $(srcdir)/CLucene/config/Makefile.am $(srcdir)/CLucene/util/Makefile.am $(srcdir)/CLucene/store/Makefile.am $(srcdir)/CLucene/debug/Makefile.am $(srcdir)/CLucene/analysis/Makefile.am $(srcdir)/CLucene/analysis/standard/Makefile.am $(srcdir)/CLucene/document/Makefile.am $(srcdir)/CLucene/index/Makefile.am $(srcdir)/CLucene/queryParser/Makefile.am $(srcdir)/CLucene/search/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libclucene.la: $(libclucene_la_OBJECTS) $(libclucene_la_DEPENDENCIES) - $(CXXLINK) -rpath $(libdir) $(libclucene_la_LDFLAGS) $(libclucene_la_OBJECTS) $(libclucene_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AnalysisHeader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Analyzers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BitSet.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BooleanQuery.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BooleanScorer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CachingWrapperFilter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChainedFilter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CompoundFile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConjunctionScorer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DateField.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DateFilter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Document.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DocumentWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Equators.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExactPhraseScorer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Explanation.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FSDirectory.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FastCharStream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FieldCache.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FieldCacheImpl.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FieldDocSortedHitQueue.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FieldInfos.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FieldSortedHitQueue.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FieldsReader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FieldsWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FilteredTermEnum.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FuzzyQuery.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HitQueue.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Hits.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexInput.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexModifier.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexOutput.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexReader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexSearcher.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Lexer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Lock.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MD5Digester.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MMapInput.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Misc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiFieldQueryParser.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiReader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiSearcher.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiTermQuery.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PhrasePositions.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PhraseQuery.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PhraseScorer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PrefixQuery.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QueryFilter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QueryParser.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QueryParserBase.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QueryToken.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RAMDirectory.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RangeFilter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RangeQuery.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Reader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SearchHeader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentInfos.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentMergeInfo.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentMergeQueue.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentMerger.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentReader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentTermDocs.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentTermEnum.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentTermPositions.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentTermVector.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Similarity.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SloppyPhraseScorer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sort.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StandardAnalyzer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StandardFilter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StandardTokenizer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StdHeader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringBuffer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringIntern.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Term.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TermInfo.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TermInfosReader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TermInfosWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TermQuery.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TermScorer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TermVectorReader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TermVectorWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ThreadLocal.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TokenList.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TransactionalRAMDirectory.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WildcardQuery.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WildcardTermEnum.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/condition.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirent.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileinputstream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gunichartables.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memtracking.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repl_lltot.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repl_tcscasecmp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repl_tcslwr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repl_tcstod.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repl_tcstoll.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repl_tprintf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threads.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8.Plo@am__quote@ - -.cpp.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cpp.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cpp.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -StdHeader.lo: $(lsrcdir)/StdHeader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StdHeader.lo -MD -MP -MF "$(DEPDIR)/StdHeader.Tpo" -c -o StdHeader.lo `test -f '$(lsrcdir)/StdHeader.cpp' || echo '$(srcdir)/'`$(lsrcdir)/StdHeader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/StdHeader.Tpo" "$(DEPDIR)/StdHeader.Plo"; else rm -f "$(DEPDIR)/StdHeader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(lsrcdir)/StdHeader.cpp' object='StdHeader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StdHeader.lo `test -f '$(lsrcdir)/StdHeader.cpp' || echo '$(srcdir)/'`$(lsrcdir)/StdHeader.cpp - -gunichartables.lo: $(configdir)/gunichartables.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gunichartables.lo -MD -MP -MF "$(DEPDIR)/gunichartables.Tpo" -c -o gunichartables.lo `test -f '$(configdir)/gunichartables.cpp' || echo '$(srcdir)/'`$(configdir)/gunichartables.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/gunichartables.Tpo" "$(DEPDIR)/gunichartables.Plo"; else rm -f "$(DEPDIR)/gunichartables.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/gunichartables.cpp' object='gunichartables.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gunichartables.lo `test -f '$(configdir)/gunichartables.cpp' || echo '$(srcdir)/'`$(configdir)/gunichartables.cpp - -repl_lltot.lo: $(configdir)/repl_lltot.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT repl_lltot.lo -MD -MP -MF "$(DEPDIR)/repl_lltot.Tpo" -c -o repl_lltot.lo `test -f '$(configdir)/repl_lltot.cpp' || echo '$(srcdir)/'`$(configdir)/repl_lltot.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/repl_lltot.Tpo" "$(DEPDIR)/repl_lltot.Plo"; else rm -f "$(DEPDIR)/repl_lltot.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/repl_lltot.cpp' object='repl_lltot.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o repl_lltot.lo `test -f '$(configdir)/repl_lltot.cpp' || echo '$(srcdir)/'`$(configdir)/repl_lltot.cpp - -repl_tcscasecmp.lo: $(configdir)/repl_tcscasecmp.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT repl_tcscasecmp.lo -MD -MP -MF "$(DEPDIR)/repl_tcscasecmp.Tpo" -c -o repl_tcscasecmp.lo `test -f '$(configdir)/repl_tcscasecmp.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tcscasecmp.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/repl_tcscasecmp.Tpo" "$(DEPDIR)/repl_tcscasecmp.Plo"; else rm -f "$(DEPDIR)/repl_tcscasecmp.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/repl_tcscasecmp.cpp' object='repl_tcscasecmp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o repl_tcscasecmp.lo `test -f '$(configdir)/repl_tcscasecmp.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tcscasecmp.cpp - -repl_tcslwr.lo: $(configdir)/repl_tcslwr.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT repl_tcslwr.lo -MD -MP -MF "$(DEPDIR)/repl_tcslwr.Tpo" -c -o repl_tcslwr.lo `test -f '$(configdir)/repl_tcslwr.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tcslwr.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/repl_tcslwr.Tpo" "$(DEPDIR)/repl_tcslwr.Plo"; else rm -f "$(DEPDIR)/repl_tcslwr.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/repl_tcslwr.cpp' object='repl_tcslwr.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o repl_tcslwr.lo `test -f '$(configdir)/repl_tcslwr.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tcslwr.cpp - -repl_tcstod.lo: $(configdir)/repl_tcstod.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT repl_tcstod.lo -MD -MP -MF "$(DEPDIR)/repl_tcstod.Tpo" -c -o repl_tcstod.lo `test -f '$(configdir)/repl_tcstod.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tcstod.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/repl_tcstod.Tpo" "$(DEPDIR)/repl_tcstod.Plo"; else rm -f "$(DEPDIR)/repl_tcstod.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/repl_tcstod.cpp' object='repl_tcstod.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o repl_tcstod.lo `test -f '$(configdir)/repl_tcstod.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tcstod.cpp - -repl_tcstoll.lo: $(configdir)/repl_tcstoll.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT repl_tcstoll.lo -MD -MP -MF "$(DEPDIR)/repl_tcstoll.Tpo" -c -o repl_tcstoll.lo `test -f '$(configdir)/repl_tcstoll.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tcstoll.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/repl_tcstoll.Tpo" "$(DEPDIR)/repl_tcstoll.Plo"; else rm -f "$(DEPDIR)/repl_tcstoll.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/repl_tcstoll.cpp' object='repl_tcstoll.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o repl_tcstoll.lo `test -f '$(configdir)/repl_tcstoll.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tcstoll.cpp - -repl_tprintf.lo: $(configdir)/repl_tprintf.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT repl_tprintf.lo -MD -MP -MF "$(DEPDIR)/repl_tprintf.Tpo" -c -o repl_tprintf.lo `test -f '$(configdir)/repl_tprintf.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tprintf.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/repl_tprintf.Tpo" "$(DEPDIR)/repl_tprintf.Plo"; else rm -f "$(DEPDIR)/repl_tprintf.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/repl_tprintf.cpp' object='repl_tprintf.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o repl_tprintf.lo `test -f '$(configdir)/repl_tprintf.cpp' || echo '$(srcdir)/'`$(configdir)/repl_tprintf.cpp - -threads.lo: $(configdir)/threads.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT threads.lo -MD -MP -MF "$(DEPDIR)/threads.Tpo" -c -o threads.lo `test -f '$(configdir)/threads.cpp' || echo '$(srcdir)/'`$(configdir)/threads.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/threads.Tpo" "$(DEPDIR)/threads.Plo"; else rm -f "$(DEPDIR)/threads.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/threads.cpp' object='threads.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o threads.lo `test -f '$(configdir)/threads.cpp' || echo '$(srcdir)/'`$(configdir)/threads.cpp - -utf8.lo: $(configdir)/utf8.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT utf8.lo -MD -MP -MF "$(DEPDIR)/utf8.Tpo" -c -o utf8.lo `test -f '$(configdir)/utf8.cpp' || echo '$(srcdir)/'`$(configdir)/utf8.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/utf8.Tpo" "$(DEPDIR)/utf8.Plo"; else rm -f "$(DEPDIR)/utf8.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(configdir)/utf8.cpp' object='utf8.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o utf8.lo `test -f '$(configdir)/utf8.cpp' || echo '$(srcdir)/'`$(configdir)/utf8.cpp - -BitSet.lo: $(utildir)/BitSet.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BitSet.lo -MD -MP -MF "$(DEPDIR)/BitSet.Tpo" -c -o BitSet.lo `test -f '$(utildir)/BitSet.cpp' || echo '$(srcdir)/'`$(utildir)/BitSet.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/BitSet.Tpo" "$(DEPDIR)/BitSet.Plo"; else rm -f "$(DEPDIR)/BitSet.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/BitSet.cpp' object='BitSet.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BitSet.lo `test -f '$(utildir)/BitSet.cpp' || echo '$(srcdir)/'`$(utildir)/BitSet.cpp - -dirent.lo: $(utildir)/dirent.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT dirent.lo -MD -MP -MF "$(DEPDIR)/dirent.Tpo" -c -o dirent.lo `test -f '$(utildir)/dirent.cpp' || echo '$(srcdir)/'`$(utildir)/dirent.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/dirent.Tpo" "$(DEPDIR)/dirent.Plo"; else rm -f "$(DEPDIR)/dirent.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/dirent.cpp' object='dirent.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dirent.lo `test -f '$(utildir)/dirent.cpp' || echo '$(srcdir)/'`$(utildir)/dirent.cpp - -Equators.lo: $(utildir)/Equators.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Equators.lo -MD -MP -MF "$(DEPDIR)/Equators.Tpo" -c -o Equators.lo `test -f '$(utildir)/Equators.cpp' || echo '$(srcdir)/'`$(utildir)/Equators.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Equators.Tpo" "$(DEPDIR)/Equators.Plo"; else rm -f "$(DEPDIR)/Equators.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/Equators.cpp' object='Equators.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Equators.lo `test -f '$(utildir)/Equators.cpp' || echo '$(srcdir)/'`$(utildir)/Equators.cpp - -FastCharStream.lo: $(utildir)/FastCharStream.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FastCharStream.lo -MD -MP -MF "$(DEPDIR)/FastCharStream.Tpo" -c -o FastCharStream.lo `test -f '$(utildir)/FastCharStream.cpp' || echo '$(srcdir)/'`$(utildir)/FastCharStream.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FastCharStream.Tpo" "$(DEPDIR)/FastCharStream.Plo"; else rm -f "$(DEPDIR)/FastCharStream.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/FastCharStream.cpp' object='FastCharStream.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FastCharStream.lo `test -f '$(utildir)/FastCharStream.cpp' || echo '$(srcdir)/'`$(utildir)/FastCharStream.cpp - -fileinputstream.lo: $(utildir)/fileinputstream.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT fileinputstream.lo -MD -MP -MF "$(DEPDIR)/fileinputstream.Tpo" -c -o fileinputstream.lo `test -f '$(utildir)/fileinputstream.cpp' || echo '$(srcdir)/'`$(utildir)/fileinputstream.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/fileinputstream.Tpo" "$(DEPDIR)/fileinputstream.Plo"; else rm -f "$(DEPDIR)/fileinputstream.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/fileinputstream.cpp' object='fileinputstream.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o fileinputstream.lo `test -f '$(utildir)/fileinputstream.cpp' || echo '$(srcdir)/'`$(utildir)/fileinputstream.cpp - -MD5Digester.lo: $(utildir)/MD5Digester.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MD5Digester.lo -MD -MP -MF "$(DEPDIR)/MD5Digester.Tpo" -c -o MD5Digester.lo `test -f '$(utildir)/MD5Digester.cpp' || echo '$(srcdir)/'`$(utildir)/MD5Digester.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/MD5Digester.Tpo" "$(DEPDIR)/MD5Digester.Plo"; else rm -f "$(DEPDIR)/MD5Digester.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/MD5Digester.cpp' object='MD5Digester.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MD5Digester.lo `test -f '$(utildir)/MD5Digester.cpp' || echo '$(srcdir)/'`$(utildir)/MD5Digester.cpp - -Misc.lo: $(utildir)/Misc.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Misc.lo -MD -MP -MF "$(DEPDIR)/Misc.Tpo" -c -o Misc.lo `test -f '$(utildir)/Misc.cpp' || echo '$(srcdir)/'`$(utildir)/Misc.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Misc.Tpo" "$(DEPDIR)/Misc.Plo"; else rm -f "$(DEPDIR)/Misc.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/Misc.cpp' object='Misc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Misc.lo `test -f '$(utildir)/Misc.cpp' || echo '$(srcdir)/'`$(utildir)/Misc.cpp - -Reader.lo: $(utildir)/Reader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Reader.lo -MD -MP -MF "$(DEPDIR)/Reader.Tpo" -c -o Reader.lo `test -f '$(utildir)/Reader.cpp' || echo '$(srcdir)/'`$(utildir)/Reader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Reader.Tpo" "$(DEPDIR)/Reader.Plo"; else rm -f "$(DEPDIR)/Reader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/Reader.cpp' object='Reader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Reader.lo `test -f '$(utildir)/Reader.cpp' || echo '$(srcdir)/'`$(utildir)/Reader.cpp - -StringBuffer.lo: $(utildir)/StringBuffer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StringBuffer.lo -MD -MP -MF "$(DEPDIR)/StringBuffer.Tpo" -c -o StringBuffer.lo `test -f '$(utildir)/StringBuffer.cpp' || echo '$(srcdir)/'`$(utildir)/StringBuffer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/StringBuffer.Tpo" "$(DEPDIR)/StringBuffer.Plo"; else rm -f "$(DEPDIR)/StringBuffer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/StringBuffer.cpp' object='StringBuffer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StringBuffer.lo `test -f '$(utildir)/StringBuffer.cpp' || echo '$(srcdir)/'`$(utildir)/StringBuffer.cpp - -StringIntern.lo: $(utildir)/StringIntern.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StringIntern.lo -MD -MP -MF "$(DEPDIR)/StringIntern.Tpo" -c -o StringIntern.lo `test -f '$(utildir)/StringIntern.cpp' || echo '$(srcdir)/'`$(utildir)/StringIntern.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/StringIntern.Tpo" "$(DEPDIR)/StringIntern.Plo"; else rm -f "$(DEPDIR)/StringIntern.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/StringIntern.cpp' object='StringIntern.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StringIntern.lo `test -f '$(utildir)/StringIntern.cpp' || echo '$(srcdir)/'`$(utildir)/StringIntern.cpp - -ThreadLocal.lo: $(utildir)/ThreadLocal.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ThreadLocal.lo -MD -MP -MF "$(DEPDIR)/ThreadLocal.Tpo" -c -o ThreadLocal.lo `test -f '$(utildir)/ThreadLocal.cpp' || echo '$(srcdir)/'`$(utildir)/ThreadLocal.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ThreadLocal.Tpo" "$(DEPDIR)/ThreadLocal.Plo"; else rm -f "$(DEPDIR)/ThreadLocal.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(utildir)/ThreadLocal.cpp' object='ThreadLocal.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ThreadLocal.lo `test -f '$(utildir)/ThreadLocal.cpp' || echo '$(srcdir)/'`$(utildir)/ThreadLocal.cpp - -FSDirectory.lo: $(storedir)/FSDirectory.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FSDirectory.lo -MD -MP -MF "$(DEPDIR)/FSDirectory.Tpo" -c -o FSDirectory.lo `test -f '$(storedir)/FSDirectory.cpp' || echo '$(srcdir)/'`$(storedir)/FSDirectory.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FSDirectory.Tpo" "$(DEPDIR)/FSDirectory.Plo"; else rm -f "$(DEPDIR)/FSDirectory.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(storedir)/FSDirectory.cpp' object='FSDirectory.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FSDirectory.lo `test -f '$(storedir)/FSDirectory.cpp' || echo '$(srcdir)/'`$(storedir)/FSDirectory.cpp - -IndexInput.lo: $(storedir)/IndexInput.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IndexInput.lo -MD -MP -MF "$(DEPDIR)/IndexInput.Tpo" -c -o IndexInput.lo `test -f '$(storedir)/IndexInput.cpp' || echo '$(srcdir)/'`$(storedir)/IndexInput.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/IndexInput.Tpo" "$(DEPDIR)/IndexInput.Plo"; else rm -f "$(DEPDIR)/IndexInput.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(storedir)/IndexInput.cpp' object='IndexInput.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IndexInput.lo `test -f '$(storedir)/IndexInput.cpp' || echo '$(srcdir)/'`$(storedir)/IndexInput.cpp - -Lock.lo: $(storedir)/Lock.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Lock.lo -MD -MP -MF "$(DEPDIR)/Lock.Tpo" -c -o Lock.lo `test -f '$(storedir)/Lock.cpp' || echo '$(srcdir)/'`$(storedir)/Lock.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Lock.Tpo" "$(DEPDIR)/Lock.Plo"; else rm -f "$(DEPDIR)/Lock.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(storedir)/Lock.cpp' object='Lock.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Lock.lo `test -f '$(storedir)/Lock.cpp' || echo '$(srcdir)/'`$(storedir)/Lock.cpp - -IndexOutput.lo: $(storedir)/IndexOutput.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IndexOutput.lo -MD -MP -MF "$(DEPDIR)/IndexOutput.Tpo" -c -o IndexOutput.lo `test -f '$(storedir)/IndexOutput.cpp' || echo '$(srcdir)/'`$(storedir)/IndexOutput.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/IndexOutput.Tpo" "$(DEPDIR)/IndexOutput.Plo"; else rm -f "$(DEPDIR)/IndexOutput.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(storedir)/IndexOutput.cpp' object='IndexOutput.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IndexOutput.lo `test -f '$(storedir)/IndexOutput.cpp' || echo '$(srcdir)/'`$(storedir)/IndexOutput.cpp - -MMapInput.lo: $(storedir)/MMapInput.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MMapInput.lo -MD -MP -MF "$(DEPDIR)/MMapInput.Tpo" -c -o MMapInput.lo `test -f '$(storedir)/MMapInput.cpp' || echo '$(srcdir)/'`$(storedir)/MMapInput.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/MMapInput.Tpo" "$(DEPDIR)/MMapInput.Plo"; else rm -f "$(DEPDIR)/MMapInput.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(storedir)/MMapInput.cpp' object='MMapInput.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MMapInput.lo `test -f '$(storedir)/MMapInput.cpp' || echo '$(srcdir)/'`$(storedir)/MMapInput.cpp - -RAMDirectory.lo: $(storedir)/RAMDirectory.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT RAMDirectory.lo -MD -MP -MF "$(DEPDIR)/RAMDirectory.Tpo" -c -o RAMDirectory.lo `test -f '$(storedir)/RAMDirectory.cpp' || echo '$(srcdir)/'`$(storedir)/RAMDirectory.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/RAMDirectory.Tpo" "$(DEPDIR)/RAMDirectory.Plo"; else rm -f "$(DEPDIR)/RAMDirectory.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(storedir)/RAMDirectory.cpp' object='RAMDirectory.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o RAMDirectory.lo `test -f '$(storedir)/RAMDirectory.cpp' || echo '$(srcdir)/'`$(storedir)/RAMDirectory.cpp - -TransactionalRAMDirectory.lo: $(storedir)/TransactionalRAMDirectory.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TransactionalRAMDirectory.lo -MD -MP -MF "$(DEPDIR)/TransactionalRAMDirectory.Tpo" -c -o TransactionalRAMDirectory.lo `test -f '$(storedir)/TransactionalRAMDirectory.cpp' || echo '$(srcdir)/'`$(storedir)/TransactionalRAMDirectory.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TransactionalRAMDirectory.Tpo" "$(DEPDIR)/TransactionalRAMDirectory.Plo"; else rm -f "$(DEPDIR)/TransactionalRAMDirectory.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(storedir)/TransactionalRAMDirectory.cpp' object='TransactionalRAMDirectory.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TransactionalRAMDirectory.lo `test -f '$(storedir)/TransactionalRAMDirectory.cpp' || echo '$(srcdir)/'`$(storedir)/TransactionalRAMDirectory.cpp - -condition.lo: $(debugdir)/condition.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT condition.lo -MD -MP -MF "$(DEPDIR)/condition.Tpo" -c -o condition.lo `test -f '$(debugdir)/condition.cpp' || echo '$(srcdir)/'`$(debugdir)/condition.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/condition.Tpo" "$(DEPDIR)/condition.Plo"; else rm -f "$(DEPDIR)/condition.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(debugdir)/condition.cpp' object='condition.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o condition.lo `test -f '$(debugdir)/condition.cpp' || echo '$(srcdir)/'`$(debugdir)/condition.cpp - -error.lo: $(debugdir)/error.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT error.lo -MD -MP -MF "$(DEPDIR)/error.Tpo" -c -o error.lo `test -f '$(debugdir)/error.cpp' || echo '$(srcdir)/'`$(debugdir)/error.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/error.Tpo" "$(DEPDIR)/error.Plo"; else rm -f "$(DEPDIR)/error.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(debugdir)/error.cpp' object='error.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o error.lo `test -f '$(debugdir)/error.cpp' || echo '$(srcdir)/'`$(debugdir)/error.cpp - -memtracking.lo: $(debugdir)/memtracking.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT memtracking.lo -MD -MP -MF "$(DEPDIR)/memtracking.Tpo" -c -o memtracking.lo `test -f '$(debugdir)/memtracking.cpp' || echo '$(srcdir)/'`$(debugdir)/memtracking.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/memtracking.Tpo" "$(DEPDIR)/memtracking.Plo"; else rm -f "$(DEPDIR)/memtracking.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(debugdir)/memtracking.cpp' object='memtracking.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o memtracking.lo `test -f '$(debugdir)/memtracking.cpp' || echo '$(srcdir)/'`$(debugdir)/memtracking.cpp - -Analyzers.lo: $(analyzersdir)/Analyzers.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Analyzers.lo -MD -MP -MF "$(DEPDIR)/Analyzers.Tpo" -c -o Analyzers.lo `test -f '$(analyzersdir)/Analyzers.cpp' || echo '$(srcdir)/'`$(analyzersdir)/Analyzers.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Analyzers.Tpo" "$(DEPDIR)/Analyzers.Plo"; else rm -f "$(DEPDIR)/Analyzers.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(analyzersdir)/Analyzers.cpp' object='Analyzers.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Analyzers.lo `test -f '$(analyzersdir)/Analyzers.cpp' || echo '$(srcdir)/'`$(analyzersdir)/Analyzers.cpp - -AnalysisHeader.lo: $(analyzersdir)/AnalysisHeader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT AnalysisHeader.lo -MD -MP -MF "$(DEPDIR)/AnalysisHeader.Tpo" -c -o AnalysisHeader.lo `test -f '$(analyzersdir)/AnalysisHeader.cpp' || echo '$(srcdir)/'`$(analyzersdir)/AnalysisHeader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/AnalysisHeader.Tpo" "$(DEPDIR)/AnalysisHeader.Plo"; else rm -f "$(DEPDIR)/AnalysisHeader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(analyzersdir)/AnalysisHeader.cpp' object='AnalysisHeader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o AnalysisHeader.lo `test -f '$(analyzersdir)/AnalysisHeader.cpp' || echo '$(srcdir)/'`$(analyzersdir)/AnalysisHeader.cpp - -StandardAnalyzer.lo: $(stdandir)/StandardAnalyzer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StandardAnalyzer.lo -MD -MP -MF "$(DEPDIR)/StandardAnalyzer.Tpo" -c -o StandardAnalyzer.lo `test -f '$(stdandir)/StandardAnalyzer.cpp' || echo '$(srcdir)/'`$(stdandir)/StandardAnalyzer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/StandardAnalyzer.Tpo" "$(DEPDIR)/StandardAnalyzer.Plo"; else rm -f "$(DEPDIR)/StandardAnalyzer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(stdandir)/StandardAnalyzer.cpp' object='StandardAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StandardAnalyzer.lo `test -f '$(stdandir)/StandardAnalyzer.cpp' || echo '$(srcdir)/'`$(stdandir)/StandardAnalyzer.cpp - -StandardFilter.lo: $(stdandir)/StandardFilter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StandardFilter.lo -MD -MP -MF "$(DEPDIR)/StandardFilter.Tpo" -c -o StandardFilter.lo `test -f '$(stdandir)/StandardFilter.cpp' || echo '$(srcdir)/'`$(stdandir)/StandardFilter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/StandardFilter.Tpo" "$(DEPDIR)/StandardFilter.Plo"; else rm -f "$(DEPDIR)/StandardFilter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(stdandir)/StandardFilter.cpp' object='StandardFilter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StandardFilter.lo `test -f '$(stdandir)/StandardFilter.cpp' || echo '$(srcdir)/'`$(stdandir)/StandardFilter.cpp - -StandardTokenizer.lo: $(stdandir)/StandardTokenizer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StandardTokenizer.lo -MD -MP -MF "$(DEPDIR)/StandardTokenizer.Tpo" -c -o StandardTokenizer.lo `test -f '$(stdandir)/StandardTokenizer.cpp' || echo '$(srcdir)/'`$(stdandir)/StandardTokenizer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/StandardTokenizer.Tpo" "$(DEPDIR)/StandardTokenizer.Plo"; else rm -f "$(DEPDIR)/StandardTokenizer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(stdandir)/StandardTokenizer.cpp' object='StandardTokenizer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StandardTokenizer.lo `test -f '$(stdandir)/StandardTokenizer.cpp' || echo '$(srcdir)/'`$(stdandir)/StandardTokenizer.cpp - -DateField.lo: $(documentdir)/DateField.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DateField.lo -MD -MP -MF "$(DEPDIR)/DateField.Tpo" -c -o DateField.lo `test -f '$(documentdir)/DateField.cpp' || echo '$(srcdir)/'`$(documentdir)/DateField.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/DateField.Tpo" "$(DEPDIR)/DateField.Plo"; else rm -f "$(DEPDIR)/DateField.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(documentdir)/DateField.cpp' object='DateField.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DateField.lo `test -f '$(documentdir)/DateField.cpp' || echo '$(srcdir)/'`$(documentdir)/DateField.cpp - -Document.lo: $(documentdir)/Document.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Document.lo -MD -MP -MF "$(DEPDIR)/Document.Tpo" -c -o Document.lo `test -f '$(documentdir)/Document.cpp' || echo '$(srcdir)/'`$(documentdir)/Document.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Document.Tpo" "$(DEPDIR)/Document.Plo"; else rm -f "$(DEPDIR)/Document.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(documentdir)/Document.cpp' object='Document.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Document.lo `test -f '$(documentdir)/Document.cpp' || echo '$(srcdir)/'`$(documentdir)/Document.cpp - -Field.lo: $(documentdir)/Field.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Field.lo -MD -MP -MF "$(DEPDIR)/Field.Tpo" -c -o Field.lo `test -f '$(documentdir)/Field.cpp' || echo '$(srcdir)/'`$(documentdir)/Field.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Field.Tpo" "$(DEPDIR)/Field.Plo"; else rm -f "$(DEPDIR)/Field.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(documentdir)/Field.cpp' object='Field.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Field.lo `test -f '$(documentdir)/Field.cpp' || echo '$(srcdir)/'`$(documentdir)/Field.cpp - -CompoundFile.lo: $(indexdir)/CompoundFile.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CompoundFile.lo -MD -MP -MF "$(DEPDIR)/CompoundFile.Tpo" -c -o CompoundFile.lo `test -f '$(indexdir)/CompoundFile.cpp' || echo '$(srcdir)/'`$(indexdir)/CompoundFile.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/CompoundFile.Tpo" "$(DEPDIR)/CompoundFile.Plo"; else rm -f "$(DEPDIR)/CompoundFile.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/CompoundFile.cpp' object='CompoundFile.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CompoundFile.lo `test -f '$(indexdir)/CompoundFile.cpp' || echo '$(srcdir)/'`$(indexdir)/CompoundFile.cpp - -DocumentWriter.lo: $(indexdir)/DocumentWriter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DocumentWriter.lo -MD -MP -MF "$(DEPDIR)/DocumentWriter.Tpo" -c -o DocumentWriter.lo `test -f '$(indexdir)/DocumentWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/DocumentWriter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/DocumentWriter.Tpo" "$(DEPDIR)/DocumentWriter.Plo"; else rm -f "$(DEPDIR)/DocumentWriter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/DocumentWriter.cpp' object='DocumentWriter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DocumentWriter.lo `test -f '$(indexdir)/DocumentWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/DocumentWriter.cpp - -FieldInfos.lo: $(indexdir)/FieldInfos.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FieldInfos.lo -MD -MP -MF "$(DEPDIR)/FieldInfos.Tpo" -c -o FieldInfos.lo `test -f '$(indexdir)/FieldInfos.cpp' || echo '$(srcdir)/'`$(indexdir)/FieldInfos.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FieldInfos.Tpo" "$(DEPDIR)/FieldInfos.Plo"; else rm -f "$(DEPDIR)/FieldInfos.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/FieldInfos.cpp' object='FieldInfos.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FieldInfos.lo `test -f '$(indexdir)/FieldInfos.cpp' || echo '$(srcdir)/'`$(indexdir)/FieldInfos.cpp - -FieldsReader.lo: $(indexdir)/FieldsReader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FieldsReader.lo -MD -MP -MF "$(DEPDIR)/FieldsReader.Tpo" -c -o FieldsReader.lo `test -f '$(indexdir)/FieldsReader.cpp' || echo '$(srcdir)/'`$(indexdir)/FieldsReader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FieldsReader.Tpo" "$(DEPDIR)/FieldsReader.Plo"; else rm -f "$(DEPDIR)/FieldsReader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/FieldsReader.cpp' object='FieldsReader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FieldsReader.lo `test -f '$(indexdir)/FieldsReader.cpp' || echo '$(srcdir)/'`$(indexdir)/FieldsReader.cpp - -FieldsWriter.lo: $(indexdir)/FieldsWriter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FieldsWriter.lo -MD -MP -MF "$(DEPDIR)/FieldsWriter.Tpo" -c -o FieldsWriter.lo `test -f '$(indexdir)/FieldsWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/FieldsWriter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FieldsWriter.Tpo" "$(DEPDIR)/FieldsWriter.Plo"; else rm -f "$(DEPDIR)/FieldsWriter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/FieldsWriter.cpp' object='FieldsWriter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FieldsWriter.lo `test -f '$(indexdir)/FieldsWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/FieldsWriter.cpp - -IndexModifier.lo: $(indexdir)/IndexModifier.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IndexModifier.lo -MD -MP -MF "$(DEPDIR)/IndexModifier.Tpo" -c -o IndexModifier.lo `test -f '$(indexdir)/IndexModifier.cpp' || echo '$(srcdir)/'`$(indexdir)/IndexModifier.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/IndexModifier.Tpo" "$(DEPDIR)/IndexModifier.Plo"; else rm -f "$(DEPDIR)/IndexModifier.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/IndexModifier.cpp' object='IndexModifier.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IndexModifier.lo `test -f '$(indexdir)/IndexModifier.cpp' || echo '$(srcdir)/'`$(indexdir)/IndexModifier.cpp - -IndexReader.lo: $(indexdir)/IndexReader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IndexReader.lo -MD -MP -MF "$(DEPDIR)/IndexReader.Tpo" -c -o IndexReader.lo `test -f '$(indexdir)/IndexReader.cpp' || echo '$(srcdir)/'`$(indexdir)/IndexReader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/IndexReader.Tpo" "$(DEPDIR)/IndexReader.Plo"; else rm -f "$(DEPDIR)/IndexReader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/IndexReader.cpp' object='IndexReader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IndexReader.lo `test -f '$(indexdir)/IndexReader.cpp' || echo '$(srcdir)/'`$(indexdir)/IndexReader.cpp - -IndexWriter.lo: $(indexdir)/IndexWriter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IndexWriter.lo -MD -MP -MF "$(DEPDIR)/IndexWriter.Tpo" -c -o IndexWriter.lo `test -f '$(indexdir)/IndexWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/IndexWriter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/IndexWriter.Tpo" "$(DEPDIR)/IndexWriter.Plo"; else rm -f "$(DEPDIR)/IndexWriter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/IndexWriter.cpp' object='IndexWriter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IndexWriter.lo `test -f '$(indexdir)/IndexWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/IndexWriter.cpp - -MultiReader.lo: $(indexdir)/MultiReader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiReader.lo -MD -MP -MF "$(DEPDIR)/MultiReader.Tpo" -c -o MultiReader.lo `test -f '$(indexdir)/MultiReader.cpp' || echo '$(srcdir)/'`$(indexdir)/MultiReader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/MultiReader.Tpo" "$(DEPDIR)/MultiReader.Plo"; else rm -f "$(DEPDIR)/MultiReader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/MultiReader.cpp' object='MultiReader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiReader.lo `test -f '$(indexdir)/MultiReader.cpp' || echo '$(srcdir)/'`$(indexdir)/MultiReader.cpp - -SegmentInfos.lo: $(indexdir)/SegmentInfos.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentInfos.lo -MD -MP -MF "$(DEPDIR)/SegmentInfos.Tpo" -c -o SegmentInfos.lo `test -f '$(indexdir)/SegmentInfos.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentInfos.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentInfos.Tpo" "$(DEPDIR)/SegmentInfos.Plo"; else rm -f "$(DEPDIR)/SegmentInfos.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentInfos.cpp' object='SegmentInfos.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentInfos.lo `test -f '$(indexdir)/SegmentInfos.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentInfos.cpp - -SegmentMergeInfo.lo: $(indexdir)/SegmentMergeInfo.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentMergeInfo.lo -MD -MP -MF "$(DEPDIR)/SegmentMergeInfo.Tpo" -c -o SegmentMergeInfo.lo `test -f '$(indexdir)/SegmentMergeInfo.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentMergeInfo.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentMergeInfo.Tpo" "$(DEPDIR)/SegmentMergeInfo.Plo"; else rm -f "$(DEPDIR)/SegmentMergeInfo.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentMergeInfo.cpp' object='SegmentMergeInfo.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentMergeInfo.lo `test -f '$(indexdir)/SegmentMergeInfo.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentMergeInfo.cpp - -SegmentMerger.lo: $(indexdir)/SegmentMerger.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentMerger.lo -MD -MP -MF "$(DEPDIR)/SegmentMerger.Tpo" -c -o SegmentMerger.lo `test -f '$(indexdir)/SegmentMerger.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentMerger.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentMerger.Tpo" "$(DEPDIR)/SegmentMerger.Plo"; else rm -f "$(DEPDIR)/SegmentMerger.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentMerger.cpp' object='SegmentMerger.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentMerger.lo `test -f '$(indexdir)/SegmentMerger.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentMerger.cpp - -SegmentMergeQueue.lo: $(indexdir)/SegmentMergeQueue.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentMergeQueue.lo -MD -MP -MF "$(DEPDIR)/SegmentMergeQueue.Tpo" -c -o SegmentMergeQueue.lo `test -f '$(indexdir)/SegmentMergeQueue.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentMergeQueue.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentMergeQueue.Tpo" "$(DEPDIR)/SegmentMergeQueue.Plo"; else rm -f "$(DEPDIR)/SegmentMergeQueue.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentMergeQueue.cpp' object='SegmentMergeQueue.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentMergeQueue.lo `test -f '$(indexdir)/SegmentMergeQueue.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentMergeQueue.cpp - -SegmentReader.lo: $(indexdir)/SegmentReader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentReader.lo -MD -MP -MF "$(DEPDIR)/SegmentReader.Tpo" -c -o SegmentReader.lo `test -f '$(indexdir)/SegmentReader.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentReader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentReader.Tpo" "$(DEPDIR)/SegmentReader.Plo"; else rm -f "$(DEPDIR)/SegmentReader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentReader.cpp' object='SegmentReader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentReader.lo `test -f '$(indexdir)/SegmentReader.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentReader.cpp - -SegmentTermDocs.lo: $(indexdir)/SegmentTermDocs.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentTermDocs.lo -MD -MP -MF "$(DEPDIR)/SegmentTermDocs.Tpo" -c -o SegmentTermDocs.lo `test -f '$(indexdir)/SegmentTermDocs.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentTermDocs.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentTermDocs.Tpo" "$(DEPDIR)/SegmentTermDocs.Plo"; else rm -f "$(DEPDIR)/SegmentTermDocs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentTermDocs.cpp' object='SegmentTermDocs.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentTermDocs.lo `test -f '$(indexdir)/SegmentTermDocs.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentTermDocs.cpp - -SegmentTermEnum.lo: $(indexdir)/SegmentTermEnum.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentTermEnum.lo -MD -MP -MF "$(DEPDIR)/SegmentTermEnum.Tpo" -c -o SegmentTermEnum.lo `test -f '$(indexdir)/SegmentTermEnum.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentTermEnum.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentTermEnum.Tpo" "$(DEPDIR)/SegmentTermEnum.Plo"; else rm -f "$(DEPDIR)/SegmentTermEnum.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentTermEnum.cpp' object='SegmentTermEnum.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentTermEnum.lo `test -f '$(indexdir)/SegmentTermEnum.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentTermEnum.cpp - -SegmentTermPositions.lo: $(indexdir)/SegmentTermPositions.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentTermPositions.lo -MD -MP -MF "$(DEPDIR)/SegmentTermPositions.Tpo" -c -o SegmentTermPositions.lo `test -f '$(indexdir)/SegmentTermPositions.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentTermPositions.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentTermPositions.Tpo" "$(DEPDIR)/SegmentTermPositions.Plo"; else rm -f "$(DEPDIR)/SegmentTermPositions.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentTermPositions.cpp' object='SegmentTermPositions.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentTermPositions.lo `test -f '$(indexdir)/SegmentTermPositions.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentTermPositions.cpp - -SegmentTermVector.lo: $(indexdir)/SegmentTermVector.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentTermVector.lo -MD -MP -MF "$(DEPDIR)/SegmentTermVector.Tpo" -c -o SegmentTermVector.lo `test -f '$(indexdir)/SegmentTermVector.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentTermVector.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SegmentTermVector.Tpo" "$(DEPDIR)/SegmentTermVector.Plo"; else rm -f "$(DEPDIR)/SegmentTermVector.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/SegmentTermVector.cpp' object='SegmentTermVector.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentTermVector.lo `test -f '$(indexdir)/SegmentTermVector.cpp' || echo '$(srcdir)/'`$(indexdir)/SegmentTermVector.cpp - -Term.lo: $(indexdir)/Term.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Term.lo -MD -MP -MF "$(DEPDIR)/Term.Tpo" -c -o Term.lo `test -f '$(indexdir)/Term.cpp' || echo '$(srcdir)/'`$(indexdir)/Term.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Term.Tpo" "$(DEPDIR)/Term.Plo"; else rm -f "$(DEPDIR)/Term.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/Term.cpp' object='Term.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Term.lo `test -f '$(indexdir)/Term.cpp' || echo '$(srcdir)/'`$(indexdir)/Term.cpp - -TermInfo.lo: $(indexdir)/TermInfo.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TermInfo.lo -MD -MP -MF "$(DEPDIR)/TermInfo.Tpo" -c -o TermInfo.lo `test -f '$(indexdir)/TermInfo.cpp' || echo '$(srcdir)/'`$(indexdir)/TermInfo.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TermInfo.Tpo" "$(DEPDIR)/TermInfo.Plo"; else rm -f "$(DEPDIR)/TermInfo.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/TermInfo.cpp' object='TermInfo.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TermInfo.lo `test -f '$(indexdir)/TermInfo.cpp' || echo '$(srcdir)/'`$(indexdir)/TermInfo.cpp - -TermInfosReader.lo: $(indexdir)/TermInfosReader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TermInfosReader.lo -MD -MP -MF "$(DEPDIR)/TermInfosReader.Tpo" -c -o TermInfosReader.lo `test -f '$(indexdir)/TermInfosReader.cpp' || echo '$(srcdir)/'`$(indexdir)/TermInfosReader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TermInfosReader.Tpo" "$(DEPDIR)/TermInfosReader.Plo"; else rm -f "$(DEPDIR)/TermInfosReader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/TermInfosReader.cpp' object='TermInfosReader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TermInfosReader.lo `test -f '$(indexdir)/TermInfosReader.cpp' || echo '$(srcdir)/'`$(indexdir)/TermInfosReader.cpp - -TermInfosWriter.lo: $(indexdir)/TermInfosWriter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TermInfosWriter.lo -MD -MP -MF "$(DEPDIR)/TermInfosWriter.Tpo" -c -o TermInfosWriter.lo `test -f '$(indexdir)/TermInfosWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/TermInfosWriter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TermInfosWriter.Tpo" "$(DEPDIR)/TermInfosWriter.Plo"; else rm -f "$(DEPDIR)/TermInfosWriter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/TermInfosWriter.cpp' object='TermInfosWriter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TermInfosWriter.lo `test -f '$(indexdir)/TermInfosWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/TermInfosWriter.cpp - -TermVectorReader.lo: $(indexdir)/TermVectorReader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TermVectorReader.lo -MD -MP -MF "$(DEPDIR)/TermVectorReader.Tpo" -c -o TermVectorReader.lo `test -f '$(indexdir)/TermVectorReader.cpp' || echo '$(srcdir)/'`$(indexdir)/TermVectorReader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TermVectorReader.Tpo" "$(DEPDIR)/TermVectorReader.Plo"; else rm -f "$(DEPDIR)/TermVectorReader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/TermVectorReader.cpp' object='TermVectorReader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TermVectorReader.lo `test -f '$(indexdir)/TermVectorReader.cpp' || echo '$(srcdir)/'`$(indexdir)/TermVectorReader.cpp - -TermVectorWriter.lo: $(indexdir)/TermVectorWriter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TermVectorWriter.lo -MD -MP -MF "$(DEPDIR)/TermVectorWriter.Tpo" -c -o TermVectorWriter.lo `test -f '$(indexdir)/TermVectorWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/TermVectorWriter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TermVectorWriter.Tpo" "$(DEPDIR)/TermVectorWriter.Plo"; else rm -f "$(DEPDIR)/TermVectorWriter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(indexdir)/TermVectorWriter.cpp' object='TermVectorWriter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TermVectorWriter.lo `test -f '$(indexdir)/TermVectorWriter.cpp' || echo '$(srcdir)/'`$(indexdir)/TermVectorWriter.cpp - -Lexer.lo: $(qpdir)/Lexer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Lexer.lo -MD -MP -MF "$(DEPDIR)/Lexer.Tpo" -c -o Lexer.lo `test -f '$(qpdir)/Lexer.cpp' || echo '$(srcdir)/'`$(qpdir)/Lexer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Lexer.Tpo" "$(DEPDIR)/Lexer.Plo"; else rm -f "$(DEPDIR)/Lexer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(qpdir)/Lexer.cpp' object='Lexer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Lexer.lo `test -f '$(qpdir)/Lexer.cpp' || echo '$(srcdir)/'`$(qpdir)/Lexer.cpp - -QueryParser.lo: $(qpdir)/QueryParser.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT QueryParser.lo -MD -MP -MF "$(DEPDIR)/QueryParser.Tpo" -c -o QueryParser.lo `test -f '$(qpdir)/QueryParser.cpp' || echo '$(srcdir)/'`$(qpdir)/QueryParser.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/QueryParser.Tpo" "$(DEPDIR)/QueryParser.Plo"; else rm -f "$(DEPDIR)/QueryParser.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(qpdir)/QueryParser.cpp' object='QueryParser.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o QueryParser.lo `test -f '$(qpdir)/QueryParser.cpp' || echo '$(srcdir)/'`$(qpdir)/QueryParser.cpp - -QueryParserBase.lo: $(qpdir)/QueryParserBase.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT QueryParserBase.lo -MD -MP -MF "$(DEPDIR)/QueryParserBase.Tpo" -c -o QueryParserBase.lo `test -f '$(qpdir)/QueryParserBase.cpp' || echo '$(srcdir)/'`$(qpdir)/QueryParserBase.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/QueryParserBase.Tpo" "$(DEPDIR)/QueryParserBase.Plo"; else rm -f "$(DEPDIR)/QueryParserBase.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(qpdir)/QueryParserBase.cpp' object='QueryParserBase.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o QueryParserBase.lo `test -f '$(qpdir)/QueryParserBase.cpp' || echo '$(srcdir)/'`$(qpdir)/QueryParserBase.cpp - -QueryToken.lo: $(qpdir)/QueryToken.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT QueryToken.lo -MD -MP -MF "$(DEPDIR)/QueryToken.Tpo" -c -o QueryToken.lo `test -f '$(qpdir)/QueryToken.cpp' || echo '$(srcdir)/'`$(qpdir)/QueryToken.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/QueryToken.Tpo" "$(DEPDIR)/QueryToken.Plo"; else rm -f "$(DEPDIR)/QueryToken.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(qpdir)/QueryToken.cpp' object='QueryToken.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o QueryToken.lo `test -f '$(qpdir)/QueryToken.cpp' || echo '$(srcdir)/'`$(qpdir)/QueryToken.cpp - -TokenList.lo: $(qpdir)/TokenList.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TokenList.lo -MD -MP -MF "$(DEPDIR)/TokenList.Tpo" -c -o TokenList.lo `test -f '$(qpdir)/TokenList.cpp' || echo '$(srcdir)/'`$(qpdir)/TokenList.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TokenList.Tpo" "$(DEPDIR)/TokenList.Plo"; else rm -f "$(DEPDIR)/TokenList.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(qpdir)/TokenList.cpp' object='TokenList.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TokenList.lo `test -f '$(qpdir)/TokenList.cpp' || echo '$(srcdir)/'`$(qpdir)/TokenList.cpp - -MultiFieldQueryParser.lo: $(qpdir)/MultiFieldQueryParser.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiFieldQueryParser.lo -MD -MP -MF "$(DEPDIR)/MultiFieldQueryParser.Tpo" -c -o MultiFieldQueryParser.lo `test -f '$(qpdir)/MultiFieldQueryParser.cpp' || echo '$(srcdir)/'`$(qpdir)/MultiFieldQueryParser.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/MultiFieldQueryParser.Tpo" "$(DEPDIR)/MultiFieldQueryParser.Plo"; else rm -f "$(DEPDIR)/MultiFieldQueryParser.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(qpdir)/MultiFieldQueryParser.cpp' object='MultiFieldQueryParser.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiFieldQueryParser.lo `test -f '$(qpdir)/MultiFieldQueryParser.cpp' || echo '$(srcdir)/'`$(qpdir)/MultiFieldQueryParser.cpp - -BooleanQuery.lo: $(searchdir)/BooleanQuery.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BooleanQuery.lo -MD -MP -MF "$(DEPDIR)/BooleanQuery.Tpo" -c -o BooleanQuery.lo `test -f '$(searchdir)/BooleanQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/BooleanQuery.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/BooleanQuery.Tpo" "$(DEPDIR)/BooleanQuery.Plo"; else rm -f "$(DEPDIR)/BooleanQuery.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/BooleanQuery.cpp' object='BooleanQuery.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BooleanQuery.lo `test -f '$(searchdir)/BooleanQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/BooleanQuery.cpp - -BooleanScorer.lo: $(searchdir)/BooleanScorer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BooleanScorer.lo -MD -MP -MF "$(DEPDIR)/BooleanScorer.Tpo" -c -o BooleanScorer.lo `test -f '$(searchdir)/BooleanScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/BooleanScorer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/BooleanScorer.Tpo" "$(DEPDIR)/BooleanScorer.Plo"; else rm -f "$(DEPDIR)/BooleanScorer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/BooleanScorer.cpp' object='BooleanScorer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BooleanScorer.lo `test -f '$(searchdir)/BooleanScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/BooleanScorer.cpp - -DateFilter.lo: $(searchdir)/DateFilter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DateFilter.lo -MD -MP -MF "$(DEPDIR)/DateFilter.Tpo" -c -o DateFilter.lo `test -f '$(searchdir)/DateFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/DateFilter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/DateFilter.Tpo" "$(DEPDIR)/DateFilter.Plo"; else rm -f "$(DEPDIR)/DateFilter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/DateFilter.cpp' object='DateFilter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DateFilter.lo `test -f '$(searchdir)/DateFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/DateFilter.cpp - -CachingWrapperFilter.lo: $(searchdir)/CachingWrapperFilter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CachingWrapperFilter.lo -MD -MP -MF "$(DEPDIR)/CachingWrapperFilter.Tpo" -c -o CachingWrapperFilter.lo `test -f '$(searchdir)/CachingWrapperFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/CachingWrapperFilter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/CachingWrapperFilter.Tpo" "$(DEPDIR)/CachingWrapperFilter.Plo"; else rm -f "$(DEPDIR)/CachingWrapperFilter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/CachingWrapperFilter.cpp' object='CachingWrapperFilter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CachingWrapperFilter.lo `test -f '$(searchdir)/CachingWrapperFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/CachingWrapperFilter.cpp - -ChainedFilter.lo: $(searchdir)/ChainedFilter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ChainedFilter.lo -MD -MP -MF "$(DEPDIR)/ChainedFilter.Tpo" -c -o ChainedFilter.lo `test -f '$(searchdir)/ChainedFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/ChainedFilter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ChainedFilter.Tpo" "$(DEPDIR)/ChainedFilter.Plo"; else rm -f "$(DEPDIR)/ChainedFilter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/ChainedFilter.cpp' object='ChainedFilter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ChainedFilter.lo `test -f '$(searchdir)/ChainedFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/ChainedFilter.cpp - -ConjunctionScorer.lo: $(searchdir)/ConjunctionScorer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ConjunctionScorer.lo -MD -MP -MF "$(DEPDIR)/ConjunctionScorer.Tpo" -c -o ConjunctionScorer.lo `test -f '$(searchdir)/ConjunctionScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/ConjunctionScorer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ConjunctionScorer.Tpo" "$(DEPDIR)/ConjunctionScorer.Plo"; else rm -f "$(DEPDIR)/ConjunctionScorer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/ConjunctionScorer.cpp' object='ConjunctionScorer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ConjunctionScorer.lo `test -f '$(searchdir)/ConjunctionScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/ConjunctionScorer.cpp - -ExactPhraseScorer.lo: $(searchdir)/ExactPhraseScorer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ExactPhraseScorer.lo -MD -MP -MF "$(DEPDIR)/ExactPhraseScorer.Tpo" -c -o ExactPhraseScorer.lo `test -f '$(searchdir)/ExactPhraseScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/ExactPhraseScorer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ExactPhraseScorer.Tpo" "$(DEPDIR)/ExactPhraseScorer.Plo"; else rm -f "$(DEPDIR)/ExactPhraseScorer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/ExactPhraseScorer.cpp' object='ExactPhraseScorer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ExactPhraseScorer.lo `test -f '$(searchdir)/ExactPhraseScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/ExactPhraseScorer.cpp - -Explanation.lo: $(searchdir)/Explanation.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Explanation.lo -MD -MP -MF "$(DEPDIR)/Explanation.Tpo" -c -o Explanation.lo `test -f '$(searchdir)/Explanation.cpp' || echo '$(srcdir)/'`$(searchdir)/Explanation.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Explanation.Tpo" "$(DEPDIR)/Explanation.Plo"; else rm -f "$(DEPDIR)/Explanation.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/Explanation.cpp' object='Explanation.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Explanation.lo `test -f '$(searchdir)/Explanation.cpp' || echo '$(srcdir)/'`$(searchdir)/Explanation.cpp - -FieldCache.lo: $(searchdir)/FieldCache.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FieldCache.lo -MD -MP -MF "$(DEPDIR)/FieldCache.Tpo" -c -o FieldCache.lo `test -f '$(searchdir)/FieldCache.cpp' || echo '$(srcdir)/'`$(searchdir)/FieldCache.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FieldCache.Tpo" "$(DEPDIR)/FieldCache.Plo"; else rm -f "$(DEPDIR)/FieldCache.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/FieldCache.cpp' object='FieldCache.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FieldCache.lo `test -f '$(searchdir)/FieldCache.cpp' || echo '$(srcdir)/'`$(searchdir)/FieldCache.cpp - -FieldCacheImpl.lo: $(searchdir)/FieldCacheImpl.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FieldCacheImpl.lo -MD -MP -MF "$(DEPDIR)/FieldCacheImpl.Tpo" -c -o FieldCacheImpl.lo `test -f '$(searchdir)/FieldCacheImpl.cpp' || echo '$(srcdir)/'`$(searchdir)/FieldCacheImpl.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FieldCacheImpl.Tpo" "$(DEPDIR)/FieldCacheImpl.Plo"; else rm -f "$(DEPDIR)/FieldCacheImpl.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/FieldCacheImpl.cpp' object='FieldCacheImpl.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FieldCacheImpl.lo `test -f '$(searchdir)/FieldCacheImpl.cpp' || echo '$(srcdir)/'`$(searchdir)/FieldCacheImpl.cpp - -FieldSortedHitQueue.lo: $(searchdir)/FieldSortedHitQueue.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FieldSortedHitQueue.lo -MD -MP -MF "$(DEPDIR)/FieldSortedHitQueue.Tpo" -c -o FieldSortedHitQueue.lo `test -f '$(searchdir)/FieldSortedHitQueue.cpp' || echo '$(srcdir)/'`$(searchdir)/FieldSortedHitQueue.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FieldSortedHitQueue.Tpo" "$(DEPDIR)/FieldSortedHitQueue.Plo"; else rm -f "$(DEPDIR)/FieldSortedHitQueue.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/FieldSortedHitQueue.cpp' object='FieldSortedHitQueue.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FieldSortedHitQueue.lo `test -f '$(searchdir)/FieldSortedHitQueue.cpp' || echo '$(srcdir)/'`$(searchdir)/FieldSortedHitQueue.cpp - -FieldDocSortedHitQueue.lo: $(searchdir)/FieldDocSortedHitQueue.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FieldDocSortedHitQueue.lo -MD -MP -MF "$(DEPDIR)/FieldDocSortedHitQueue.Tpo" -c -o FieldDocSortedHitQueue.lo `test -f '$(searchdir)/FieldDocSortedHitQueue.cpp' || echo '$(srcdir)/'`$(searchdir)/FieldDocSortedHitQueue.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FieldDocSortedHitQueue.Tpo" "$(DEPDIR)/FieldDocSortedHitQueue.Plo"; else rm -f "$(DEPDIR)/FieldDocSortedHitQueue.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/FieldDocSortedHitQueue.cpp' object='FieldDocSortedHitQueue.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FieldDocSortedHitQueue.lo `test -f '$(searchdir)/FieldDocSortedHitQueue.cpp' || echo '$(srcdir)/'`$(searchdir)/FieldDocSortedHitQueue.cpp - -FilteredTermEnum.lo: $(searchdir)/FilteredTermEnum.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FilteredTermEnum.lo -MD -MP -MF "$(DEPDIR)/FilteredTermEnum.Tpo" -c -o FilteredTermEnum.lo `test -f '$(searchdir)/FilteredTermEnum.cpp' || echo '$(srcdir)/'`$(searchdir)/FilteredTermEnum.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FilteredTermEnum.Tpo" "$(DEPDIR)/FilteredTermEnum.Plo"; else rm -f "$(DEPDIR)/FilteredTermEnum.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/FilteredTermEnum.cpp' object='FilteredTermEnum.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FilteredTermEnum.lo `test -f '$(searchdir)/FilteredTermEnum.cpp' || echo '$(srcdir)/'`$(searchdir)/FilteredTermEnum.cpp - -FuzzyQuery.lo: $(searchdir)/FuzzyQuery.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FuzzyQuery.lo -MD -MP -MF "$(DEPDIR)/FuzzyQuery.Tpo" -c -o FuzzyQuery.lo `test -f '$(searchdir)/FuzzyQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/FuzzyQuery.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/FuzzyQuery.Tpo" "$(DEPDIR)/FuzzyQuery.Plo"; else rm -f "$(DEPDIR)/FuzzyQuery.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/FuzzyQuery.cpp' object='FuzzyQuery.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FuzzyQuery.lo `test -f '$(searchdir)/FuzzyQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/FuzzyQuery.cpp - -Hits.lo: $(searchdir)/Hits.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Hits.lo -MD -MP -MF "$(DEPDIR)/Hits.Tpo" -c -o Hits.lo `test -f '$(searchdir)/Hits.cpp' || echo '$(srcdir)/'`$(searchdir)/Hits.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Hits.Tpo" "$(DEPDIR)/Hits.Plo"; else rm -f "$(DEPDIR)/Hits.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/Hits.cpp' object='Hits.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Hits.lo `test -f '$(searchdir)/Hits.cpp' || echo '$(srcdir)/'`$(searchdir)/Hits.cpp - -HitQueue.lo: $(searchdir)/HitQueue.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HitQueue.lo -MD -MP -MF "$(DEPDIR)/HitQueue.Tpo" -c -o HitQueue.lo `test -f '$(searchdir)/HitQueue.cpp' || echo '$(srcdir)/'`$(searchdir)/HitQueue.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/HitQueue.Tpo" "$(DEPDIR)/HitQueue.Plo"; else rm -f "$(DEPDIR)/HitQueue.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/HitQueue.cpp' object='HitQueue.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HitQueue.lo `test -f '$(searchdir)/HitQueue.cpp' || echo '$(srcdir)/'`$(searchdir)/HitQueue.cpp - -IndexSearcher.lo: $(searchdir)/IndexSearcher.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IndexSearcher.lo -MD -MP -MF "$(DEPDIR)/IndexSearcher.Tpo" -c -o IndexSearcher.lo `test -f '$(searchdir)/IndexSearcher.cpp' || echo '$(srcdir)/'`$(searchdir)/IndexSearcher.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/IndexSearcher.Tpo" "$(DEPDIR)/IndexSearcher.Plo"; else rm -f "$(DEPDIR)/IndexSearcher.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/IndexSearcher.cpp' object='IndexSearcher.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IndexSearcher.lo `test -f '$(searchdir)/IndexSearcher.cpp' || echo '$(srcdir)/'`$(searchdir)/IndexSearcher.cpp - -MultiSearcher.lo: $(searchdir)/MultiSearcher.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiSearcher.lo -MD -MP -MF "$(DEPDIR)/MultiSearcher.Tpo" -c -o MultiSearcher.lo `test -f '$(searchdir)/MultiSearcher.cpp' || echo '$(srcdir)/'`$(searchdir)/MultiSearcher.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/MultiSearcher.Tpo" "$(DEPDIR)/MultiSearcher.Plo"; else rm -f "$(DEPDIR)/MultiSearcher.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/MultiSearcher.cpp' object='MultiSearcher.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiSearcher.lo `test -f '$(searchdir)/MultiSearcher.cpp' || echo '$(srcdir)/'`$(searchdir)/MultiSearcher.cpp - -MultiTermQuery.lo: $(searchdir)/MultiTermQuery.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiTermQuery.lo -MD -MP -MF "$(DEPDIR)/MultiTermQuery.Tpo" -c -o MultiTermQuery.lo `test -f '$(searchdir)/MultiTermQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/MultiTermQuery.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/MultiTermQuery.Tpo" "$(DEPDIR)/MultiTermQuery.Plo"; else rm -f "$(DEPDIR)/MultiTermQuery.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/MultiTermQuery.cpp' object='MultiTermQuery.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiTermQuery.lo `test -f '$(searchdir)/MultiTermQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/MultiTermQuery.cpp - -PhrasePositions.lo: $(searchdir)/PhrasePositions.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PhrasePositions.lo -MD -MP -MF "$(DEPDIR)/PhrasePositions.Tpo" -c -o PhrasePositions.lo `test -f '$(searchdir)/PhrasePositions.cpp' || echo '$(srcdir)/'`$(searchdir)/PhrasePositions.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/PhrasePositions.Tpo" "$(DEPDIR)/PhrasePositions.Plo"; else rm -f "$(DEPDIR)/PhrasePositions.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/PhrasePositions.cpp' object='PhrasePositions.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PhrasePositions.lo `test -f '$(searchdir)/PhrasePositions.cpp' || echo '$(srcdir)/'`$(searchdir)/PhrasePositions.cpp - -PhraseQuery.lo: $(searchdir)/PhraseQuery.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PhraseQuery.lo -MD -MP -MF "$(DEPDIR)/PhraseQuery.Tpo" -c -o PhraseQuery.lo `test -f '$(searchdir)/PhraseQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/PhraseQuery.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/PhraseQuery.Tpo" "$(DEPDIR)/PhraseQuery.Plo"; else rm -f "$(DEPDIR)/PhraseQuery.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/PhraseQuery.cpp' object='PhraseQuery.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PhraseQuery.lo `test -f '$(searchdir)/PhraseQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/PhraseQuery.cpp - -PhraseScorer.lo: $(searchdir)/PhraseScorer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PhraseScorer.lo -MD -MP -MF "$(DEPDIR)/PhraseScorer.Tpo" -c -o PhraseScorer.lo `test -f '$(searchdir)/PhraseScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/PhraseScorer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/PhraseScorer.Tpo" "$(DEPDIR)/PhraseScorer.Plo"; else rm -f "$(DEPDIR)/PhraseScorer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/PhraseScorer.cpp' object='PhraseScorer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PhraseScorer.lo `test -f '$(searchdir)/PhraseScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/PhraseScorer.cpp - -PrefixQuery.lo: $(searchdir)/PrefixQuery.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PrefixQuery.lo -MD -MP -MF "$(DEPDIR)/PrefixQuery.Tpo" -c -o PrefixQuery.lo `test -f '$(searchdir)/PrefixQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/PrefixQuery.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/PrefixQuery.Tpo" "$(DEPDIR)/PrefixQuery.Plo"; else rm -f "$(DEPDIR)/PrefixQuery.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/PrefixQuery.cpp' object='PrefixQuery.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PrefixQuery.lo `test -f '$(searchdir)/PrefixQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/PrefixQuery.cpp - -QueryFilter.lo: $(searchdir)/QueryFilter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT QueryFilter.lo -MD -MP -MF "$(DEPDIR)/QueryFilter.Tpo" -c -o QueryFilter.lo `test -f '$(searchdir)/QueryFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/QueryFilter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/QueryFilter.Tpo" "$(DEPDIR)/QueryFilter.Plo"; else rm -f "$(DEPDIR)/QueryFilter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/QueryFilter.cpp' object='QueryFilter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o QueryFilter.lo `test -f '$(searchdir)/QueryFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/QueryFilter.cpp - -RangeFilter.lo: $(searchdir)/RangeFilter.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT RangeFilter.lo -MD -MP -MF "$(DEPDIR)/RangeFilter.Tpo" -c -o RangeFilter.lo `test -f '$(searchdir)/RangeFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/RangeFilter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/RangeFilter.Tpo" "$(DEPDIR)/RangeFilter.Plo"; else rm -f "$(DEPDIR)/RangeFilter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/RangeFilter.cpp' object='RangeFilter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o RangeFilter.lo `test -f '$(searchdir)/RangeFilter.cpp' || echo '$(srcdir)/'`$(searchdir)/RangeFilter.cpp - -RangeQuery.lo: $(searchdir)/RangeQuery.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT RangeQuery.lo -MD -MP -MF "$(DEPDIR)/RangeQuery.Tpo" -c -o RangeQuery.lo `test -f '$(searchdir)/RangeQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/RangeQuery.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/RangeQuery.Tpo" "$(DEPDIR)/RangeQuery.Plo"; else rm -f "$(DEPDIR)/RangeQuery.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/RangeQuery.cpp' object='RangeQuery.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o RangeQuery.lo `test -f '$(searchdir)/RangeQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/RangeQuery.cpp - -SearchHeader.lo: $(searchdir)/SearchHeader.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SearchHeader.lo -MD -MP -MF "$(DEPDIR)/SearchHeader.Tpo" -c -o SearchHeader.lo `test -f '$(searchdir)/SearchHeader.cpp' || echo '$(srcdir)/'`$(searchdir)/SearchHeader.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SearchHeader.Tpo" "$(DEPDIR)/SearchHeader.Plo"; else rm -f "$(DEPDIR)/SearchHeader.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/SearchHeader.cpp' object='SearchHeader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SearchHeader.lo `test -f '$(searchdir)/SearchHeader.cpp' || echo '$(srcdir)/'`$(searchdir)/SearchHeader.cpp - -Similarity.lo: $(searchdir)/Similarity.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Similarity.lo -MD -MP -MF "$(DEPDIR)/Similarity.Tpo" -c -o Similarity.lo `test -f '$(searchdir)/Similarity.cpp' || echo '$(srcdir)/'`$(searchdir)/Similarity.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Similarity.Tpo" "$(DEPDIR)/Similarity.Plo"; else rm -f "$(DEPDIR)/Similarity.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/Similarity.cpp' object='Similarity.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Similarity.lo `test -f '$(searchdir)/Similarity.cpp' || echo '$(srcdir)/'`$(searchdir)/Similarity.cpp - -SloppyPhraseScorer.lo: $(searchdir)/SloppyPhraseScorer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SloppyPhraseScorer.lo -MD -MP -MF "$(DEPDIR)/SloppyPhraseScorer.Tpo" -c -o SloppyPhraseScorer.lo `test -f '$(searchdir)/SloppyPhraseScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/SloppyPhraseScorer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/SloppyPhraseScorer.Tpo" "$(DEPDIR)/SloppyPhraseScorer.Plo"; else rm -f "$(DEPDIR)/SloppyPhraseScorer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/SloppyPhraseScorer.cpp' object='SloppyPhraseScorer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SloppyPhraseScorer.lo `test -f '$(searchdir)/SloppyPhraseScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/SloppyPhraseScorer.cpp - -Sort.lo: $(searchdir)/Sort.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Sort.lo -MD -MP -MF "$(DEPDIR)/Sort.Tpo" -c -o Sort.lo `test -f '$(searchdir)/Sort.cpp' || echo '$(srcdir)/'`$(searchdir)/Sort.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/Sort.Tpo" "$(DEPDIR)/Sort.Plo"; else rm -f "$(DEPDIR)/Sort.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/Sort.cpp' object='Sort.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Sort.lo `test -f '$(searchdir)/Sort.cpp' || echo '$(srcdir)/'`$(searchdir)/Sort.cpp - -TermQuery.lo: $(searchdir)/TermQuery.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TermQuery.lo -MD -MP -MF "$(DEPDIR)/TermQuery.Tpo" -c -o TermQuery.lo `test -f '$(searchdir)/TermQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/TermQuery.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TermQuery.Tpo" "$(DEPDIR)/TermQuery.Plo"; else rm -f "$(DEPDIR)/TermQuery.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/TermQuery.cpp' object='TermQuery.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TermQuery.lo `test -f '$(searchdir)/TermQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/TermQuery.cpp - -TermScorer.lo: $(searchdir)/TermScorer.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TermScorer.lo -MD -MP -MF "$(DEPDIR)/TermScorer.Tpo" -c -o TermScorer.lo `test -f '$(searchdir)/TermScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/TermScorer.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TermScorer.Tpo" "$(DEPDIR)/TermScorer.Plo"; else rm -f "$(DEPDIR)/TermScorer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/TermScorer.cpp' object='TermScorer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TermScorer.lo `test -f '$(searchdir)/TermScorer.cpp' || echo '$(srcdir)/'`$(searchdir)/TermScorer.cpp - -WildcardQuery.lo: $(searchdir)/WildcardQuery.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WildcardQuery.lo -MD -MP -MF "$(DEPDIR)/WildcardQuery.Tpo" -c -o WildcardQuery.lo `test -f '$(searchdir)/WildcardQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/WildcardQuery.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/WildcardQuery.Tpo" "$(DEPDIR)/WildcardQuery.Plo"; else rm -f "$(DEPDIR)/WildcardQuery.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/WildcardQuery.cpp' object='WildcardQuery.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WildcardQuery.lo `test -f '$(searchdir)/WildcardQuery.cpp' || echo '$(srcdir)/'`$(searchdir)/WildcardQuery.cpp - -WildcardTermEnum.lo: $(searchdir)/WildcardTermEnum.cpp -@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WildcardTermEnum.lo -MD -MP -MF "$(DEPDIR)/WildcardTermEnum.Tpo" -c -o WildcardTermEnum.lo `test -f '$(searchdir)/WildcardTermEnum.cpp' || echo '$(srcdir)/'`$(searchdir)/WildcardTermEnum.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/WildcardTermEnum.Tpo" "$(DEPDIR)/WildcardTermEnum.Plo"; else rm -f "$(DEPDIR)/WildcardTermEnum.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(searchdir)/WildcardTermEnum.cpp' object='WildcardTermEnum.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WildcardTermEnum.lo `test -f '$(searchdir)/WildcardTermEnum.cpp' || echo '$(srcdir)/'`$(searchdir)/WildcardTermEnum.cpp - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-clucene_configDATA: $(clucene_config_DATA) - @$(NORMAL_INSTALL) - test -z "$(clucene_configdir)" || $(mkdir_p) "$(DESTDIR)$(clucene_configdir)" - @list='$(clucene_config_DATA)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(clucene_configDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(clucene_configdir)/$$f'"; \ - $(clucene_configDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(clucene_configdir)/$$f"; \ - done - -uninstall-clucene_configDATA: - @$(NORMAL_UNINSTALL) - @list='$(clucene_config_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(clucene_configdir)/$$f'"; \ - rm -f "$(DESTDIR)$(clucene_configdir)/$$f"; \ - done -install-analyzershHEADERS: $(analyzersh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(analyzershdir)" || $(mkdir_p) "$(DESTDIR)$(analyzershdir)" - @list='$(analyzersh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(analyzershHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(analyzershdir)/$$f'"; \ - $(analyzershHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(analyzershdir)/$$f"; \ - done - -uninstall-analyzershHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(analyzersh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(analyzershdir)/$$f'"; \ - rm -f "$(DESTDIR)$(analyzershdir)/$$f"; \ - done -install-confighHEADERS: $(configh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(confighdir)" || $(mkdir_p) "$(DESTDIR)$(confighdir)" - @list='$(configh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(confighHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(confighdir)/$$f'"; \ - $(confighHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(confighdir)/$$f"; \ - done - -uninstall-confighHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(configh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(confighdir)/$$f'"; \ - rm -f "$(DESTDIR)$(confighdir)/$$f"; \ - done -install-debughHEADERS: $(debugh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(debughdir)" || $(mkdir_p) "$(DESTDIR)$(debughdir)" - @list='$(debugh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(debughHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(debughdir)/$$f'"; \ - $(debughHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(debughdir)/$$f"; \ - done - -uninstall-debughHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(debugh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(debughdir)/$$f'"; \ - rm -f "$(DESTDIR)$(debughdir)/$$f"; \ - done -install-documenthHEADERS: $(documenth_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(documenthdir)" || $(mkdir_p) "$(DESTDIR)$(documenthdir)" - @list='$(documenth_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(documenthHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(documenthdir)/$$f'"; \ - $(documenthHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(documenthdir)/$$f"; \ - done - -uninstall-documenthHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(documenth_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(documenthdir)/$$f'"; \ - rm -f "$(DESTDIR)$(documenthdir)/$$f"; \ - done -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" - @list='$(include_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ - $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ - done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ - rm -f "$(DESTDIR)$(includedir)/$$f"; \ - done -install-indexhHEADERS: $(indexh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(indexhdir)" || $(mkdir_p) "$(DESTDIR)$(indexhdir)" - @list='$(indexh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(indexhHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(indexhdir)/$$f'"; \ - $(indexhHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(indexhdir)/$$f"; \ - done - -uninstall-indexhHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(indexh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(indexhdir)/$$f'"; \ - rm -f "$(DESTDIR)$(indexhdir)/$$f"; \ - done -install-qphHEADERS: $(qph_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(qphdir)" || $(mkdir_p) "$(DESTDIR)$(qphdir)" - @list='$(qph_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(qphHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(qphdir)/$$f'"; \ - $(qphHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(qphdir)/$$f"; \ - done - -uninstall-qphHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(qph_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(qphdir)/$$f'"; \ - rm -f "$(DESTDIR)$(qphdir)/$$f"; \ - done -install-searchhHEADERS: $(searchh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(searchhdir)" || $(mkdir_p) "$(DESTDIR)$(searchhdir)" - @list='$(searchh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(searchhHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(searchhdir)/$$f'"; \ - $(searchhHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(searchhdir)/$$f"; \ - done - -uninstall-searchhHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(searchh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(searchhdir)/$$f'"; \ - rm -f "$(DESTDIR)$(searchhdir)/$$f"; \ - done -install-stdanhHEADERS: $(stdanh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(stdanhdir)" || $(mkdir_p) "$(DESTDIR)$(stdanhdir)" - @list='$(stdanh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(stdanhHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(stdanhdir)/$$f'"; \ - $(stdanhHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(stdanhdir)/$$f"; \ - done - -uninstall-stdanhHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(stdanh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(stdanhdir)/$$f'"; \ - rm -f "$(DESTDIR)$(stdanhdir)/$$f"; \ - done -install-stdhHEADERS: $(stdh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(stdhdir)" || $(mkdir_p) "$(DESTDIR)$(stdhdir)" - @list='$(stdh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(stdhHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(stdhdir)/$$f'"; \ - $(stdhHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(stdhdir)/$$f"; \ - done - -uninstall-stdhHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(stdh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(stdhdir)/$$f'"; \ - rm -f "$(DESTDIR)$(stdhdir)/$$f"; \ - done -install-storehHEADERS: $(storeh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(storehdir)" || $(mkdir_p) "$(DESTDIR)$(storehdir)" - @list='$(storeh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(storehHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(storehdir)/$$f'"; \ - $(storehHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(storehdir)/$$f"; \ - done - -uninstall-storehHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(storeh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(storehdir)/$$f'"; \ - rm -f "$(DESTDIR)$(storehdir)/$$f"; \ - done -install-utilhHEADERS: $(utilh_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(utilhdir)" || $(mkdir_p) "$(DESTDIR)$(utilhdir)" - @list='$(utilh_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(utilhHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(utilhdir)/$$f'"; \ - $(utilhHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(utilhdir)/$$f"; \ - done - -uninstall-utilhHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(utilh_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(utilhdir)/$$f'"; \ - rm -f "$(DESTDIR)$(utilhdir)/$$f"; \ - done - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/$(analyzersdir) $(distdir)/$(configdir) $(distdir)/$(debugdir) $(distdir)/$(documentdir) $(distdir)/$(indexdir) $(distdir)/$(lsrcdir) $(distdir)/$(qpdir) $(distdir)/$(searchdir) $(distdir)/$(stdandir) $(distdir)/$(storedir) $(distdir)/$(utildir) $(distdir)/CLucene $(distdir)/CLucene/analysis $(distdir)/CLucene/analysis/standard $(distdir)/CLucene/config $(distdir)/CLucene/debug $(distdir)/CLucene/document $(distdir)/CLucene/index $(distdir)/CLucene/queryParser $(distdir)/CLucene/search $(distdir)/CLucene/store $(distdir)/CLucene/util - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(clucene_configdir)" "$(DESTDIR)$(analyzershdir)" "$(DESTDIR)$(confighdir)" "$(DESTDIR)$(debughdir)" "$(DESTDIR)$(documenthdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(indexhdir)" "$(DESTDIR)$(qphdir)" "$(DESTDIR)$(searchhdir)" "$(DESTDIR)$(stdanhdir)" "$(DESTDIR)$(stdhdir)" "$(DESTDIR)$(storehdir)" "$(DESTDIR)$(utilhdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: install-analyzershHEADERS install-clucene_configDATA \ - install-confighHEADERS install-debughHEADERS \ - install-documenthHEADERS install-includeHEADERS \ - install-indexhHEADERS install-qphHEADERS \ - install-searchhHEADERS install-stdanhHEADERS \ - install-stdhHEADERS install-storehHEADERS install-utilhHEADERS - -install-exec-am: install-libLTLIBRARIES - -install-info: install-info-recursive - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-analyzershHEADERS uninstall-clucene_configDATA \ - uninstall-confighHEADERS uninstall-debughHEADERS \ - uninstall-documenthHEADERS uninstall-includeHEADERS \ - uninstall-indexhHEADERS uninstall-info-am \ - uninstall-libLTLIBRARIES uninstall-qphHEADERS \ - uninstall-searchhHEADERS uninstall-stdanhHEADERS \ - uninstall-stdhHEADERS uninstall-storehHEADERS \ - uninstall-utilhHEADERS - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-recursive ctags ctags-recursive distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am \ - install-analyzershHEADERS install-clucene_configDATA \ - install-confighHEADERS install-data install-data-am \ - install-debughHEADERS install-documenthHEADERS install-exec \ - install-exec-am install-includeHEADERS install-indexhHEADERS \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-qphHEADERS install-searchhHEADERS \ - install-stdanhHEADERS install-stdhHEADERS \ - install-storehHEADERS install-strip install-utilhHEADERS \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ - pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-analyzershHEADERS uninstall-clucene_configDATA \ - uninstall-confighHEADERS uninstall-debughHEADERS \ - uninstall-documenthHEADERS uninstall-includeHEADERS \ - uninstall-indexhHEADERS uninstall-info-am \ - uninstall-libLTLIBRARIES uninstall-qphHEADERS \ - uninstall-searchhHEADERS uninstall-stdanhHEADERS \ - uninstall-stdhHEADERS uninstall-storehHEADERS \ - uninstall-utilhHEADERS - - -monolithic: - @rm -f CLMonolithic.$(OBJEXT) - $(MAKE) $(AM_MAKEFLAGS) CLMonolithic.o - -CLMonolithic.o: - $(CXXCOMPILE) -c $(lsrcdir)/CLMonolithic.cpp -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru clucene-core-0.9.21b/src/shared/CLucene/CLSharedMonolithic.cpp clucene-core-2.3.3.4/src/shared/CLucene/CLSharedMonolithic.cpp --- clucene-core-0.9.21b/src/shared/CLucene/CLSharedMonolithic.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/CLSharedMonolithic.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,26 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +/* +* this is a monolithic file that can be used to compile clucene using one source file. +* it simplifies some build processes by avoiding static & dynamic compalation pitfalls. +* +* note: when creating a project add either this file, or all the other .cpp files, not both! +*/ +#include "CLucene/SharedHeader.cpp" +#include "CLucene/config/gunichartables.cpp" +#include "CLucene/config/repl_tcscasecmp.cpp" +#include "CLucene/config/repl_tcslwr.cpp" +#include "CLucene/config/repl_tcstod.cpp" +#include "CLucene/config/repl_lltot.cpp" +#include "CLucene/config/repl_tcstoll.cpp" +#include "CLucene/config/repl_tprintf.cpp" +#include "CLucene/config/threads.cpp" +#include "CLucene/config/utf8.cpp" +#include "CLucene/debug/condition.cpp" +#include "CLucene/util/Misc.cpp" +#include "CLucene/util/dirent.cpp" +#include "CLucene/util/StringBuffer.cpp" diff -Nru clucene-core-0.9.21b/src/shared/CLucene/_clucene-config.h.cmake clucene-core-2.3.3.4/src/shared/CLucene/_clucene-config.h.cmake --- clucene-core-0.9.21b/src/shared/CLucene/_clucene-config.h.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/_clucene-config.h.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,112 @@ +#ifndef _SRC_CLUCENE_INTERNAL_CLUCENE_CONFIG_H +#define _SRC_CLUCENE_INTERNAL_CLUCENE_CONFIG_H 1 + +/* src/shared/CLucene/_clucene-config.h. +* Generated automatically at end of cmake. +* These are internal definitions, and this file does not need to be distributed +*/ + +/* CMake will look for these functions: */ +#cmakedefine _CL_HAVE_FUNCTION__VSNWPRINTF +#cmakedefine _CL_HAVE_FUNCTION__SNWPRINTF +#cmakedefine _CL_HAVE_FUNCTION_WCSCASECMP +#cmakedefine _CL_HAVE_FUNCTION_WCSCAT 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSCHR 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSCMP 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSCPY 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSCSPN 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSICMP +#cmakedefine _CL_HAVE_FUNCTION_WCSLEN 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSNCMP 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSNCPY 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSSTR 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSTOD 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSDUP 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSTOLL 1 +#cmakedefine _CL_HAVE_FUNCTION_WCSUPR 1 +#cmakedefine _CL_HAVE_FUNCTION_GETTIMEOFDAY 1 +#cmakedefine _CL_HAVE_FUNCTION_MAPVIEWOFFILE 1 + +#cmakedefine _CL_HAVE_FUNCTION_LLTOA 1 +#cmakedefine _CL_HAVE_FUNCTION_LLTOW 1 +#cmakedefine _CL_HAVE_FUNCTION_PRINTF 1 +#cmakedefine _CL_HAVE_FUNCTION_SNPRINTF 1 +#cmakedefine _CL_HAVE_FUNCTION_MMAP 1 +#cmakedefine _CL_HAVE_FUNCTION_STRLWR 1 +#cmakedefine _CL_HAVE_FUNCTION_STRTOLL 1 +#cmakedefine _CL_HAVE_FUNCTION_STRUPR 1 +#cmakedefine _CL_HAVE_FUNCTION_GETPAGESIZE 1 +#cmakedefine _CL_HAVE_FUNCTION_USLEEP 1 +#cmakedefine _CL_HAVE_FUNCTION_SLEEP 1 + +${SYMBOL_CL_MAX_PATH} +//this is the max filename... for now its just the same, +//but this could change, so we use a different name +#define CL_MAX_NAME CL_MAX_PATH +//this used to be CL_MAX_NAME * 32, but as Alex Hudson points out, this could come to be 128kb. +//the above logic for CL_MAX_NAME should be correct enough to handle all file names +#define CL_MAX_DIR CL_MAX_PATH + +${SYMBOL__O_RANDOM} +${SYMBOL__O_BINARY} +${SYMBOL__S_IREAD} +${SYMBOL__S_IWRITE} +${TYPE__TIMEB} + +#define _ILONG(x) x ## L +#define _ILONGLONG(x) ${_CL_ILONGLONG_VALUE} + +${FUNCTION_FILESTAT} +${TYPE_CL_STAT_T} +${FUNCTION_FILESIZE} +${FUNCTION_FILESEEK} +${FUNCTION_FILETELL} +${FUNCTION_FILEHANDLESTAT} +${FUNCTION__REALPATH} +${FUNCTION__RENAME} +${FUNCTION__CLOSE} +${FUNCTION__READ} +${FUNCTION__CL_OPEN} +${FUNCTION__WRITE} +${FUNCTION__SNPRINTF} +${FUNCTION__MKDIR} +${FUNCTION__UNLINK} +${FUNCTION__FTIME} +${FUNCTION_SLEEPFUNCTION} + +/* CMake will determine these specifics. Things like bugs, etc */ + +/* Does not support new float byte<->float conversions */ +#cmakedefine _CL_HAVE_NO_FLOAT_BYTE 1 + +/* Define if recursive pthread mutexes are available */ +#cmakedefine _CL_HAVE_PTHREAD_MUTEX_RECURSIVE 1 + +/** define if you would like to force clucene to use the internal +* character functions. +* Tests may display unpredictable behaviour if this is not defined. +*/ +#ifndef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS + #cmakedefine LUCENE_USE_INTERNAL_CHAR_FUNCTIONS 1 +#endif + +/** fix ansi for loop scope */ +#if @CMAKE_ANSI_FOR_SCOPE@==0 + #define for if (0); else for +#endif + + +/* Compiler oddities */ + +//not sure why, but cygwin reports _S_IREAD, but doesn't actually work... +//TODO: make this work properly (this bit shouldn't be necessary) +#ifdef __CYGWIN__ + #define _S_IREAD 0333 + #define _S_IWRITE 0333 +#endif + +#ifdef __BORLANDC__ //borland compiler + #define O_RANDOM 0 +#endif + +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/clucene-config.h.cmake clucene-core-2.3.3.4/src/shared/CLucene/clucene-config.h.cmake --- clucene-core-0.9.21b/src/shared/CLucene/clucene-config.h.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/clucene-config.h.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,148 @@ +#ifndef _SRC_CLUCENE_CLUCENE_CONFIG_H +#define _SRC_CLUCENE_CLUCENE_CONFIG_H 1 + +/* src/shared/CLucene/clucene-config.h. +* Generated automatically at end of cmake. +*/ + +/* CMake will look for these headers: */ +#cmakedefine _CL_HAVE_STRING_H 1 +#cmakedefine _CL_HAVE_MEMORY_H 1 +#cmakedefine _CL_HAVE_UNISTD_H 1 +#cmakedefine _CL_HAVE_IO_H 1 +#cmakedefine _CL_HAVE_DIRECT_H 1 +#cmakedefine _CL_HAVE_DIRENT_H 1 +#cmakedefine _CL_HAVE_SYS_DIR_H +#cmakedefine _CL_HAVE_SYS_NDIR_H +#cmakedefine _CL_HAVE_ERRNO_H 1 +#cmakedefine _CL_HAVE_WCHAR_H 1 +#cmakedefine _CL_HAVE_WCTYPE_H +#cmakedefine _CL_HAVE_CTYPE_H 1 +#cmakedefine _CL_HAVE_WINDOWS_H 1 +#cmakedefine _CL_HAVE_WINDEF_H 1 +#cmakedefine _CL_HAVE_SYS_TYPES_H 1 +#cmakedefine _CL_HAVE_DLFCN_H 1 +#cmakedefine _CL_HAVE_EXT_HASH_MAP 1 +#cmakedefine _CL_HAVE_EXT_HASH_SET 1 +#cmakedefine _CL_HAVE_TR1_UNORDERED_MAP 1 +#cmakedefine _CL_HAVE_TR1_UNORDERED_SET 1 +#cmakedefine _CL_HAVE_HASH_MAP +#cmakedefine _CL_HAVE_HASH_SET +#cmakedefine _CL_HAVE_NDIR_H +#cmakedefine _CL_HAVE_SYS_STAT_H 1 +#cmakedefine _CL_HAVE_SYS_TIMEB_H 1 +#cmakedefine _CL_HAVE_SYS_TIME_H 1 +#cmakedefine _CL_HAVE_TCHAR_H 1 +#cmakedefine _CL_HAVE_SYS_MMAN_H 1 +#cmakedefine _CL_HAVE_WINERROR_H 1 +#cmakedefine _CL_HAVE_STDINT_H 1 + +// our needed types +${TYPE_INT8_T} +${TYPE_UINT8_T} +${TYPE_INT16_T} +${TYPE_UINT16_T} +${TYPE_INT32_T} +${TYPE_UINT32_T} +${TYPE_INT64_T} +${TYPE_UINT64_T} + +${TYPE_FLOAT_T} +${TYPE__CL_DWORD_T} +${TYPE_SIZE_T} + +/* tchar & _T definitions... */ +${TYPE_TCHAR} +${SYMBOL__T} + +/* CMake will determine these specifics. Things like bugs, etc */ + +/* if we can't support the map/set hashing */ +#cmakedefine LUCENE_DISABLE_HASHING 1 + +/* Define if you have POSIX threads libraries and header files. */ +#cmakedefine _CL_HAVE_PTHREAD 1 + +/* Define if you have Win32 threads libraries and header files. */ +#cmakedefine _CL_HAVE_WIN32_THREADS 1 + +/* Define if we have gcc atomic functions */ +#cmakedefine _CL_HAVE_GCC_ATOMIC_FUNCTIONS 1 + +/* Define what eval method is required for float_t to be defined (for GCC). */ +#cmakedefine _FLT_EVAL_METHOD ${_FLT_EVAL_METHOD} + +/* If we use hashmaps, which namespace do we use: */ +#define CL_NS_HASHING(func) ${CL_NS_HASHING_VALUE} +/* If we use hashmaps, which classes do we use: */ +#define _CL_HASH_MAP ${_CL_HASH_MAP} +#define _CL_HASH_SET ${_CL_HASH_SET} + +/* define if the compiler implements namespaces */ +#cmakedefine _CL_HAVE_NAMESPACES + +/* Defined if the snprintf overflow test fails */ +#cmakedefine _CL_HAVE_SNPRINTF_BUG + +/* Defined if the swprintf test fails */ +#cmakedefine _CL_HAVE_SNWPRINTF_BUG + +/* How to define a static const in a class */ +#define LUCENE_STATIC_CONSTANT(type, assignment) ${LUCENE_STATIC_CONSTANT_SYNTAX} + +/* Define to the necessary symbol if this constant uses a non-standard name on + your system. */ +//todo: not checked +#cmakedefine _CL_PTHREAD_CREATE_JOINABLE + +/* Define to 1 if the `S_IS*' macros in do not work properly. */ +//todo: not being checked for... +//#cmakedefine _CL_STAT_MACROS_BROKEN + +/* Define to 1 if you can safely include both and . */ +//not actually used for anything... +//#cmakedefine _CL_TIME_WITH_SYS_TIME 1 + +/* Define that we will be using -fvisibility=hidden, and + * make public classes visible using __attribute__ ((visibility("default"))) + */ +#cmakedefine _CL_HAVE_GCCVISIBILITYPATCH 1 + + +/* Versions, etc */ + +/* Name of package */ +#define _CL_PACKAGE "clucene-core" + +/* Version number of package */ +#define _CL_VERSION "@CLUCENE_VERSION@" + +/* So-Version number of package */ +#define _CL_SOVERSION "@CLUCENE_SOVERSION@" + +/* A comparable version number */ +#define _CL_INT_VERSION @CLUCENE_INT_VERSION@ + +/* Configured options (from command line) */ + +/* Forces into Ascii mode */ +#cmakedefine _ASCII + +/* Conditional Debugging */ +#cmakedefine _CL__CND_DEBUG + +/* debuging option */ +#cmakedefine _DEBUG + +/* Disable multithreading */ +#cmakedefine _CL_DISABLE_MULTITHREADING + + +#ifdef __BORLANDC__ //borland compiler + //todo: bcc incorrectly detects this... fix this in cmake + #undef LUCENE_STATIC_CONSTANT + #define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment } +#endif + + +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/gunichartables.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/gunichartables.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/gunichartables.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/gunichartables.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,377 @@ +/* + * Copyright (C) 1999 Tom Tromey + * Copyright (C) 2000 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * + ************************************************ + * Also licensed with permission from Tom Tromey + * and Owen Taylor under the Apache license. + * Original location: + * http://cvs.gnome.org/viewcvs/glib/glib/guniprop.c?view=log + ************************************************ + * + * Copyright 2003-2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #include "CLucene/_SharedHeader.h" + +typedef unsigned long gunichar; +typedef unsigned short guint16; +typedef short gint16; +typedef char gchar; +typedef unsigned char guchar; + +/* These are the possible character classifications. + * See http://www.unicode.org/Public/UNIDATA/UnicodeData.txt + or http://www.unicode.org/Public/UNIDATA/UCD.html. + + todo: i think there is a new version of the unicode, which we should use. + data is licensed like this: http://www.unicode.org/copyright.html... not sure but looks apache compatible + */ +typedef enum +{ + G_UNICODE_CONTROL, + G_UNICODE_FORMAT, + G_UNICODE_UNASSIGNED, + G_UNICODE_PRIVATE_USE, + G_UNICODE_SURROGATE, + G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_LETTER, + G_UNICODE_TITLECASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_COMBINING_MARK, + G_UNICODE_ENCLOSING_MARK, + G_UNICODE_NON_SPACING_MARK, + G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_LETTER_NUMBER, + G_UNICODE_OTHER_NUMBER, + G_UNICODE_CONNECT_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_FINAL_PUNCTUATION, + G_UNICODE_INITIAL_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_SYMBOL, + G_UNICODE_LINE_SEPARATOR, + G_UNICODE_PARAGRAPH_SEPARATOR, + G_UNICODE_SPACE_SEPARATOR +} GUnicodeType; + + +#include "_gunichartables.h" + +#define ATTR_TABLE(Page) (((Page) <= G_UNICODE_LAST_PAGE_PART1) \ + ? attr_table_part1[Page] \ + : attr_table_part2[(Page) - 0xe00]) + +#define ATTTABLE(Page, Char) \ + ((ATTR_TABLE(Page) == G_UNICODE_MAX_TABLE_INDEX) ? 0 : (attr_data[ATTR_TABLE(Page)][Char])) + + +#define TTYPE_PART1(Page, Char) \ + ((type_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ + ? (type_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \ + : (type_data[type_table_part1[Page]][Char])) + +#define TTYPE_PART2(Page, Char) \ + ((type_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ + ? (type_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \ + : (type_data[type_table_part2[Page]][Char])) + +#define TYPE(Char) \ + (((Char) <= G_UNICODE_LAST_CHAR_PART1) \ + ? TTYPE_PART1 ((Char) >> 8, (Char) & 0xff) \ + : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \ + ? TTYPE_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \ + : G_UNICODE_UNASSIGNED)) + +/* Count the number of elements in an array. The array must be defined + * as such; using this with a dynamically allocated array will give + * incorrect results. + */ +#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0])) + + + + +#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) +#ifdef _LUCENE_PRAGMA_WARNINGS + #pragma message ("===== Note: using internal character function for compatibility =====") +#else + #warning "===== Note: using internal character function for compatibility =====" +#endif + +bool cl_isletter(gunichar c) +{ + int t = TYPE (c); + switch(t) + { + case G_UNICODE_LOWERCASE_LETTER: return true; + case G_UNICODE_TITLECASE_LETTER: return true; + case G_UNICODE_UPPERCASE_LETTER: return true; + case G_UNICODE_MODIFIER_LETTER: return true; + case G_UNICODE_OTHER_LETTER: return true; + default: return false; + } +} + +bool cl_isalnum(gunichar c) +{ + int t = TYPE (c); + switch(t) + { + case G_UNICODE_LOWERCASE_LETTER: return true; + case G_UNICODE_TITLECASE_LETTER: return true; + case G_UNICODE_UPPERCASE_LETTER: return true; + case G_UNICODE_MODIFIER_LETTER: return true; + case G_UNICODE_OTHER_LETTER: return true; + case G_UNICODE_DECIMAL_NUMBER: return true; + case G_UNICODE_LETTER_NUMBER: return true; + case G_UNICODE_OTHER_NUMBER: return true; + default: return false; + } +} + +bool cl_isdigit(gunichar c) +{ + int t = TYPE (c); + switch(t) + { + case G_UNICODE_DECIMAL_NUMBER: return true; + case G_UNICODE_LETTER_NUMBER: return true; + case G_UNICODE_OTHER_NUMBER: return true; + default: return false; + } +} + +/** + * cl_isspace: + * @c: a Unicode character + * + * Determines whether a character is a space, tab, or line separator + * (newline, carriage return, etc.). Given some UTF-8 text, obtain a + * character value with lucene_utf8towc(). + * + * (Note: don't use this to do word breaking; you have to use + * Pango or equivalent to get word breaking right, the algorithm + * is fairly complex.) + * + * Return value: %TRUE if @c is a punctuation character + **/ +bool cl_isspace (gunichar c) +{ + switch (c) + { + /* special-case these since Unicode thinks they are not spaces */ + case '\t': + case '\n': + case '\r': + case '\f': + return true; + + default: + { + int t = TYPE ((gunichar)c); + return (t == G_UNICODE_SPACE_SEPARATOR || t == G_UNICODE_LINE_SEPARATOR + || t == G_UNICODE_PARAGRAPH_SEPARATOR); + } + } +} + + + +/** + * cl_tolower: + * @c: a Unicode character. + * + * Converts a character to lower case. + * + * Return value: the result of converting @c to lower case. + * If @c is not an upperlower or titlecase character, + * or has no lowercase equivalent @c is returned unchanged. + **/ +TCHAR cl_tolower (TCHAR ch) +{ + gunichar c=ch; + int t = TYPE ((gunichar)c); + if (t == G_UNICODE_UPPERCASE_LETTER) + { + gunichar val = ATTTABLE (c >> 8, c & 0xff); + if (val >= 0x1000000) + { + const gchar *p = special_case_table + val - 0x1000000; + wchar_t ret=0; + lucene_utf8towc(ret,p); +#ifdef _UCS2 + return ret; +#else + return LUCENE_OOR_CHAR(ret); +#endif + }else + return val ? val : c; + }else if (t == G_UNICODE_TITLECASE_LETTER){ + unsigned int i; + for (i = 0; i < G_N_ELEMENTS (title_table); ++i) + { + if (title_table[i][0] == c) + return title_table[i][2]; + } + } + return c; +} + +/** + * cl_toupper: + * @c: a Unicode character + * + * Converts a character to uppercase. + * + * Return value: the result of converting @c to uppercase. + * If @c is not an lowercase or titlecase character, + * or has no upper case equivalent @c is returned unchanged. + **/ +TCHAR cl_toupper (TCHAR ch) +{ + gunichar c=ch; + int t = TYPE (c); + if (t == G_UNICODE_LOWERCASE_LETTER) + { + gunichar val = ATTTABLE (c >> 8, c & 0xff); + if (val >= 0x1000000) + { + const gchar *p = special_case_table + val - 0x1000000; + + wchar_t ret=0; + lucene_utf8towc(ret,p); +#ifdef _UCS2 + return ret; +#else + return LUCENE_OOR_CHAR(ret); +#endif + //return lucene_utf8towc (p); + } + else + return val ? val : c; + } + else if (t == G_UNICODE_TITLECASE_LETTER) + { + unsigned int i; + for (i = 0; i < G_N_ELEMENTS (title_table); ++i) + { + if (title_table[i][0] == c) + return title_table[i][1]; + } + } + return c; +} + + + +/** + * cl_tcasefold: + * @str: a unicode string + * + * Converts a string into a form that is independent of case. The + * result will not correspond to any particular case, but can be + * compared for equality or ordered with the results of calling + * cl_tcasefold() on other strings. + * + * Note that calling cl_tcasefold() followed by g_utf8_collate() is + * only an approximation to the correct linguistic case insensitive + * ordering, though it is a fairly good one. Getting this exactly + * right would require a more sophisticated collation function that + * takes case sensitivity into account. GLib does not currently + * provide such a function. + * + * Return value: a newly allocated string, that is a + * case independent form of @str. + **/ +TCHAR cl_tcasefold(const TCHAR ch){ + int start = 0; + int end = G_N_ELEMENTS (casefold_table); + + if (ch >= casefold_table[start].ch && + ch <= casefold_table[end - 1].ch) + { + while (1) + { + int half = (start + end) / 2; + if (ch == casefold_table[half].ch) + { + wchar_t ret=0; + lucene_utf8towc(ret,casefold_table[half].data); + + #ifdef _UCS2 + return ret; + #else + return LUCENE_OOR_CHAR(ret); + #endif + }else if (half == start){ + break; + }else if (ch > casefold_table[half].ch){ + start = half; + }else{ + end = half; + } + } + } + return cl_tolower(ch); + +} + + +//this function was not taken from gnome +TCHAR* cl_tcscasefold( TCHAR * str, int len ) //len default is -1 +{ + TCHAR *p = str; + while ((len < 0 || p < str + len) && *p) + { + *p = cl_tcasefold(*p); + p++; + } + return str; +} +//this function was not taken from gnome +int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src){ + TCHAR f,l; + + do{ + f = cl_tcasefold( (*(dst++)) ); + l = cl_tcasefold( (*(src++)) ); + } while ( (f) && (f == l) ); + + return (int)(f - l); +} + +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/_gunichartables.h clucene-core-2.3.3.4/src/shared/CLucene/config/_gunichartables.h --- clucene-core-0.9.21b/src/shared/CLucene/config/_gunichartables.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/_gunichartables.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,11264 @@ +/* This file is automatically generated. DO NOT EDIT! + Instead, edit gen-unicode-tables.pl and re-run. */ + +#ifndef CHARTABLES_H +#define CHARTABLES_H + +#define G_UNICODE_DATA_VERSION "4.0" + +#define G_UNICODE_LAST_CHAR 0x10ffff + +#define G_UNICODE_MAX_TABLE_INDEX 10000 + +#define G_UNICODE_LAST_CHAR_PART1 0x2FAFF + +#define G_UNICODE_LAST_PAGE_PART1 762 + +static const char type_data[][256] = { + { /* page 0, index 0 */ + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, + G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_FORMAT, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_OTHER_NUMBER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_FINAL_PUNCTUATION, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER + }, + { /* page 1, index 1 */ + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER + }, + { /* page 2, index 2 */ + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL + }, + { /* page 3, index 3 */ + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 4, index 4 */ + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 5, index 5 */ + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 6, index 6 */ + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_FORMAT, G_UNICODE_ENCLOSING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_LETTER + }, + { /* page 7, index 7 */ + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 9, index 8 */ + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 10, index 9 */ + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 11, index 10 */ + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 12, index 11 */ + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 13, index 12 */ + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 14, index 13 */ + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 15, index 14 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 16, index 15 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 17, index 16 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 18, index 17 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER + }, + { /* page 19, index 18 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 20, index 19 */ + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER + }, + { /* page 22, index 20 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 23, index 21 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 24, index 22 */ + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_SPACE_SEPARATOR, G_UNICODE_UNASSIGNED, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 25, index 23 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL + }, + { /* page 29, index 24 */ + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 30, index 25 */ + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 31, index 26 */ + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED + }, + { /* page 32, index 27 */ + G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, + G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, + G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, + G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, + G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, + G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, + G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_LINE_SEPARATOR, G_UNICODE_PARAGRAPH_SEPARATOR, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_OTHER_NUMBER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, + G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_ENCLOSING_MARK, + G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 33, index 28 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL + }, + { /* page 35, index 29 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 36, index 30 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER + }, + { /* page 37, index 31 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL + }, + { /* page 38, index 32 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 39, index 33 */ + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL + }, + { /* page 41, index 34 */ + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL + }, + { /* page 43, index 35 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 46, index 36 */ + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 47, index 37 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 48, index 38 */ + G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_LETTER_NUMBER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_LETTER + }, + { /* page 49, index 39 */ + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER + }, + { /* page 50, index 40 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED + }, + { /* page 77, index 41 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL + }, + { /* page 159, index 42 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 164, index 43 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 215, index 44 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 250, index 45 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 251, index 46 */ + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER + }, + { /* page 253, index 47 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 254, index 48 */ + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, + G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_DASH_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT + }, + { /* page 255, index 49 */ + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, + G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 256, index 50 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 257, index 51 */ + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 259, index 52 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, + G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 260, index 53 */ + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 264, index 54 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 464, index 55 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 465, index 56 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, + G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 467, index 57 */ + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 468, index 58 */ + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER + }, + { /* page 469, index 59 */ + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER + }, + { /* page 470, index 60 */ + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER + }, + { /* page 471, index 61 */ + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, + G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, + G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER + }, + { /* page 678, index 62 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 762, index 63 */ + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 3584, index 64 */ + G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED + }, + { /* page 3585, index 65 */ + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 4095, index 66 */ + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + }, + { /* page 4351, index 67 */ + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, + G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED, + G_UNICODE_UNASSIGNED + } +}; + +/* U+0000 through U+2FAFF */ +static const gint16 type_table_part1[763] = { + 0 /* page 0 */, + 1 /* page 1 */, + 2 /* page 2 */, + 3 /* page 3 */, + 4 /* page 4 */, + 5 /* page 5 */, + 6 /* page 6 */, + 7 /* page 7 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + 8 /* page 9 */, + 9 /* page 10 */, + 10 /* page 11 */, + 11 /* page 12 */, + 12 /* page 13 */, + 13 /* page 14 */, + 14 /* page 15 */, + 15 /* page 16 */, + 16 /* page 17 */, + 17 /* page 18 */, + 18 /* page 19 */, + 19 /* page 20 */, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 20 /* page 22 */, + 21 /* page 23 */, + 22 /* page 24 */, + 23 /* page 25 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + 24 /* page 29 */, + 25 /* page 30 */, + 26 /* page 31 */, + 27 /* page 32 */, + 28 /* page 33 */, + G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, + 29 /* page 35 */, + 30 /* page 36 */, + 31 /* page 37 */, + 32 /* page 38 */, + 33 /* page 39 */, + G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, + 34 /* page 41 */, + G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, + 35 /* page 43 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + 36 /* page 46 */, + 37 /* page 47 */, + 38 /* page 48 */, + 39 /* page 49 */, + 40 /* page 50 */, + G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 41 /* page 77 */, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 42 /* page 159 */, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 43 /* page 164 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 44 /* page 215 */, + G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 45 /* page 250 */, + 46 /* page 251 */, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 47 /* page 253 */, + 48 /* page 254 */, + 49 /* page 255 */, + 50 /* page 256 */, + 51 /* page 257 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + 52 /* page 259 */, + 53 /* page 260 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + 54 /* page 264 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + 55 /* page 464 */, + 56 /* page 465 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + 57 /* page 467 */, + 58 /* page 468 */, + 59 /* page 469 */, + 60 /* page 470 */, + 61 /* page 471 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 62 /* page 678 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX, + 63 /* page 762 */ +}; + +/* U+E0000 through U+10FFFF */ +static const gint16 type_table_part2[768] = { + 64 /* page 3584 */, + 65 /* page 3585 */, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + 66 /* page 4095 */, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX, + 67 /* page 4351 */ +}; + +static const gunichar attr_data[][256] = { + { /* page 0, index 0 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, + 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, + 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, + 0x007a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0042, + 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, + 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x039c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, + 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, + 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0000, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x1000000, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, + 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, + 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0000, 0x00d8, 0x00d9, 0x00da, + 0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178 + }, + { /* page 1, index 1 */ + 0x0101, 0x0100, 0x0103, 0x0102, 0x0105, 0x0104, 0x0107, 0x0106, 0x0109, + 0x0108, 0x010b, 0x010a, 0x010d, 0x010c, 0x010f, 0x010e, 0x0111, 0x0110, + 0x0113, 0x0112, 0x0115, 0x0114, 0x0117, 0x0116, 0x0119, 0x0118, 0x011b, + 0x011a, 0x011d, 0x011c, 0x011f, 0x011e, 0x0121, 0x0120, 0x0123, 0x0122, + 0x0125, 0x0124, 0x0127, 0x0126, 0x0129, 0x0128, 0x012b, 0x012a, 0x012d, + 0x012c, 0x012f, 0x012e, 0x1000007, 0x0049, 0x0133, 0x0132, 0x0135, + 0x0134, 0x0137, 0x0136, 0x0000, 0x013a, 0x0139, 0x013c, 0x013b, 0x013e, + 0x013d, 0x0140, 0x013f, 0x0142, 0x0141, 0x0144, 0x0143, 0x0146, 0x0145, + 0x0148, 0x0147, 0x1000086, 0x014b, 0x014a, 0x014d, 0x014c, 0x014f, + 0x014e, 0x0151, 0x0150, 0x0153, 0x0152, 0x0155, 0x0154, 0x0157, 0x0156, + 0x0159, 0x0158, 0x015b, 0x015a, 0x015d, 0x015c, 0x015f, 0x015e, 0x0161, + 0x0160, 0x0163, 0x0162, 0x0165, 0x0164, 0x0167, 0x0166, 0x0169, 0x0168, + 0x016b, 0x016a, 0x016d, 0x016c, 0x016f, 0x016e, 0x0171, 0x0170, 0x0173, + 0x0172, 0x0175, 0x0174, 0x0177, 0x0176, 0x00ff, 0x017a, 0x0179, 0x017c, + 0x017b, 0x017e, 0x017d, 0x0053, 0x0000, 0x0253, 0x0183, 0x0182, 0x0185, + 0x0184, 0x0254, 0x0188, 0x0187, 0x0256, 0x0257, 0x018c, 0x018b, 0x0000, + 0x01dd, 0x0259, 0x025b, 0x0192, 0x0191, 0x0260, 0x0263, 0x01f6, 0x0269, + 0x0268, 0x0199, 0x0198, 0x0000, 0x0000, 0x026f, 0x0272, 0x0220, 0x0275, + 0x01a1, 0x01a0, 0x01a3, 0x01a2, 0x01a5, 0x01a4, 0x0280, 0x01a8, 0x01a7, + 0x0283, 0x0000, 0x0000, 0x01ad, 0x01ac, 0x0288, 0x01b0, 0x01af, 0x028a, + 0x028b, 0x01b4, 0x01b3, 0x01b6, 0x01b5, 0x0292, 0x01b9, 0x01b8, 0x0000, + 0x0000, 0x01bd, 0x01bc, 0x0000, 0x01f7, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01c6, 0x0000, 0x01c4, 0x01c9, 0x0000, 0x01c7, 0x01cc, 0x0000, 0x01ca, + 0x01ce, 0x01cd, 0x01d0, 0x01cf, 0x01d2, 0x01d1, 0x01d4, 0x01d3, 0x01d6, + 0x01d5, 0x01d8, 0x01d7, 0x01da, 0x01d9, 0x01dc, 0x01db, 0x018e, 0x01df, + 0x01de, 0x01e1, 0x01e0, 0x01e3, 0x01e2, 0x01e5, 0x01e4, 0x01e7, 0x01e6, + 0x01e9, 0x01e8, 0x01eb, 0x01ea, 0x01ed, 0x01ec, 0x01ef, 0x01ee, + 0x10000ad, 0x01f3, 0x0000, 0x01f1, 0x01f5, 0x01f4, 0x0195, 0x01bf, + 0x01f9, 0x01f8, 0x01fb, 0x01fa, 0x01fd, 0x01fc, 0x01ff, 0x01fe + }, + { /* page 2, index 2 */ + 0x0201, 0x0200, 0x0203, 0x0202, 0x0205, 0x0204, 0x0207, 0x0206, 0x0209, + 0x0208, 0x020b, 0x020a, 0x020d, 0x020c, 0x020f, 0x020e, 0x0211, 0x0210, + 0x0213, 0x0212, 0x0215, 0x0214, 0x0217, 0x0216, 0x0219, 0x0218, 0x021b, + 0x021a, 0x021d, 0x021c, 0x021f, 0x021e, 0x019e, 0x0000, 0x0223, 0x0222, + 0x0225, 0x0224, 0x0227, 0x0226, 0x0229, 0x0228, 0x022b, 0x022a, 0x022d, + 0x022c, 0x022f, 0x022e, 0x0231, 0x0230, 0x0233, 0x0232, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0181, 0x0186, 0x0000, 0x0189, 0x018a, 0x0000, 0x018f, + 0x0000, 0x0190, 0x0000, 0x0000, 0x0000, 0x0000, 0x0193, 0x0000, 0x0000, + 0x0194, 0x0000, 0x0000, 0x0000, 0x0000, 0x0197, 0x0196, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x019c, 0x0000, 0x0000, 0x019d, 0x0000, 0x0000, + 0x019f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01a6, 0x0000, 0x0000, 0x01a9, 0x0000, 0x0000, 0x0000, + 0x0000, 0x01ae, 0x0000, 0x01b1, 0x01b2, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01b7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 3, index 3 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ac, + 0x0000, 0x03ad, 0x03ae, 0x03af, 0x0000, 0x03cc, 0x0000, 0x03cd, 0x03ce, + 0x100008f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, + 0x03c1, 0x0000, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, + 0x03ca, 0x03cb, 0x0386, 0x0388, 0x0389, 0x038a, 0x100009e, 0x0391, + 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, + 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a3, + 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x038c, + 0x038e, 0x038f, 0x0000, 0x0392, 0x0398, 0x0000, 0x0000, 0x0000, 0x03a6, + 0x03a0, 0x0000, 0x03d9, 0x03d8, 0x03db, 0x03da, 0x03dd, 0x03dc, 0x03df, + 0x03de, 0x03e1, 0x03e0, 0x03e3, 0x03e2, 0x03e5, 0x03e4, 0x03e7, 0x03e6, + 0x03e9, 0x03e8, 0x03eb, 0x03ea, 0x03ed, 0x03ec, 0x03ef, 0x03ee, 0x039a, + 0x03a1, 0x03f9, 0x0000, 0x03b8, 0x0395, 0x0000, 0x03f8, 0x03f7, 0x03f2, + 0x03fb, 0x03fa, 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 4, index 4 */ + 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, + 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0430, 0x0431, + 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, + 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, + 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, + 0x044d, 0x044e, 0x044f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, + 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0400, + 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, + 0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, 0x0461, 0x0460, 0x0463, + 0x0462, 0x0465, 0x0464, 0x0467, 0x0466, 0x0469, 0x0468, 0x046b, 0x046a, + 0x046d, 0x046c, 0x046f, 0x046e, 0x0471, 0x0470, 0x0473, 0x0472, 0x0475, + 0x0474, 0x0477, 0x0476, 0x0479, 0x0478, 0x047b, 0x047a, 0x047d, 0x047c, + 0x047f, 0x047e, 0x0481, 0x0480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x048b, 0x048a, 0x048d, 0x048c, 0x048f, 0x048e, + 0x0491, 0x0490, 0x0493, 0x0492, 0x0495, 0x0494, 0x0497, 0x0496, 0x0499, + 0x0498, 0x049b, 0x049a, 0x049d, 0x049c, 0x049f, 0x049e, 0x04a1, 0x04a0, + 0x04a3, 0x04a2, 0x04a5, 0x04a4, 0x04a7, 0x04a6, 0x04a9, 0x04a8, 0x04ab, + 0x04aa, 0x04ad, 0x04ac, 0x04af, 0x04ae, 0x04b1, 0x04b0, 0x04b3, 0x04b2, + 0x04b5, 0x04b4, 0x04b7, 0x04b6, 0x04b9, 0x04b8, 0x04bb, 0x04ba, 0x04bd, + 0x04bc, 0x04bf, 0x04be, 0x0000, 0x04c2, 0x04c1, 0x04c4, 0x04c3, 0x04c6, + 0x04c5, 0x04c8, 0x04c7, 0x04ca, 0x04c9, 0x04cc, 0x04cb, 0x04ce, 0x04cd, + 0x0000, 0x04d1, 0x04d0, 0x04d3, 0x04d2, 0x04d5, 0x04d4, 0x04d7, 0x04d6, + 0x04d9, 0x04d8, 0x04db, 0x04da, 0x04dd, 0x04dc, 0x04df, 0x04de, 0x04e1, + 0x04e0, 0x04e3, 0x04e2, 0x04e5, 0x04e4, 0x04e7, 0x04e6, 0x04e9, 0x04e8, + 0x04eb, 0x04ea, 0x04ed, 0x04ec, 0x04ef, 0x04ee, 0x04f1, 0x04f0, 0x04f3, + 0x04f2, 0x04f5, 0x04f4, 0x0000, 0x0000, 0x04f9, 0x04f8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 5, index 5 */ + 0x0501, 0x0500, 0x0503, 0x0502, 0x0505, 0x0504, 0x0507, 0x0506, 0x0509, + 0x0508, 0x050b, 0x050a, 0x050d, 0x050c, 0x050f, 0x050e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, + 0x0566, 0x0567, 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, + 0x056f, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, + 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580, + 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0531, 0x0532, + 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053a, 0x053b, + 0x053c, 0x053d, 0x053e, 0x053f, 0x0540, 0x0541, 0x0542, 0x0543, 0x0544, + 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d, + 0x054e, 0x054f, 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, + 0x1000044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 6, index 6 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, + 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, + 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 9, index 7 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, + 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 10, index 8 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, + 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 11, index 9 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, + 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 12, index 10 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, + 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 13, index 11 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, + 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 14, index 12 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 15, index 13 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 16, index 14 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 19, index 15 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 23, index 16 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 24, index 17 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 25, index 18 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 30, index 19 */ + 0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06, 0x1e09, + 0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e, 0x1e11, 0x1e10, + 0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16, 0x1e19, 0x1e18, 0x1e1b, + 0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e, 0x1e21, 0x1e20, 0x1e23, 0x1e22, + 0x1e25, 0x1e24, 0x1e27, 0x1e26, 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d, + 0x1e2c, 0x1e2f, 0x1e2e, 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34, + 0x1e37, 0x1e36, 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f, + 0x1e3e, 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46, + 0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e, 0x1e51, + 0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56, 0x1e59, 0x1e58, + 0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e, 0x1e61, 0x1e60, 0x1e63, + 0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66, 0x1e69, 0x1e68, 0x1e6b, 0x1e6a, + 0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e, 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75, + 0x1e74, 0x1e77, 0x1e76, 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c, + 0x1e7f, 0x1e7e, 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87, + 0x1e86, 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e, + 0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x10000b6, 0x10000bf, + 0x10000c8, 0x10000d1, 0x10000da, 0x1e60, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6, 0x1ea9, + 0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae, 0x1eb1, 0x1eb0, + 0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6, 0x1eb9, 0x1eb8, 0x1ebb, + 0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe, 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2, + 0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6, 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd, + 0x1ecc, 0x1ecf, 0x1ece, 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4, + 0x1ed7, 0x1ed6, 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf, + 0x1ede, 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6, + 0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee, 0x1ef1, + 0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6, 0x1ef9, 0x1ef8, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 31, index 20 */ + 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f00, + 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f18, 0x1f19, + 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x0000, 0x0000, 0x1f10, 0x1f11, 0x1f12, + 0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, + 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, + 0x1f25, 0x1f26, 0x1f27, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, + 0x1f3e, 0x1f3f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, + 0x1f37, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x0000, 0x0000, + 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000, + 0x10000e3, 0x1f59, 0x10000ee, 0x1f5b, 0x10000fd, 0x1f5d, 0x100010c, + 0x1f5f, 0x0000, 0x1f51, 0x0000, 0x1f53, 0x0000, 0x1f55, 0x0000, 0x1f57, + 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f60, + 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1fba, 0x1fbb, + 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, + 0x1feb, 0x1ffa, 0x1ffb, 0x0000, 0x0000, 0x10001b7, 0x10001c4, 0x10001d1, + 0x10001de, 0x10001eb, 0x10001f8, 0x1000205, 0x1000212, 0x100021f, + 0x1000229, 0x1000233, 0x100023d, 0x1000247, 0x1000251, 0x100025b, + 0x1000265, 0x100026f, 0x100027c, 0x1000289, 0x1000296, 0x10002a3, + 0x10002b0, 0x10002bd, 0x10002ca, 0x10002d7, 0x10002e1, 0x10002eb, + 0x10002f5, 0x10002ff, 0x1000309, 0x1000313, 0x100031d, 0x1000327, + 0x1000334, 0x1000341, 0x100034e, 0x100035b, 0x1000368, 0x1000375, + 0x1000382, 0x100038f, 0x1000399, 0x10003a3, 0x10003ad, 0x10003b7, + 0x10003c1, 0x10003cb, 0x10003d5, 0x1fb8, 0x1fb9, 0x100041e, 0x10003df, + 0x100042b, 0x0000, 0x100011b, 0x1000466, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, + 0x10003eb, 0x0000, 0x0399, 0x0000, 0x0000, 0x0000, 0x1000436, 0x10003f4, + 0x1000443, 0x0000, 0x1000126, 0x1000475, 0x1f72, 0x1f73, 0x1f74, 0x1f75, + 0x1000400, 0x0000, 0x0000, 0x0000, 0x1fd8, 0x1fd9, 0x1000131, 0x1000140, + 0x0000, 0x0000, 0x100014f, 0x100015a, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1fe8, 0x1fe9, 0x1000169, 0x1000178, + 0x1000187, 0x1fec, 0x1000192, 0x100019d, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, + 0x1fe5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100044e, 0x1000409, + 0x100045b, 0x0000, 0x10001ac, 0x1000484, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, + 0x1000415, 0x0000, 0x0000, 0x0000 + }, + { /* page 33, index 21 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03c9, 0x0000, 0x0000, 0x0000, 0x006b, 0x00e5, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 251, index 22 */ + 0x100000f, 0x1000016, 0x100001d, 0x1000024, 0x100002d, 0x1000036, + 0x100003d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100004f, 0x100005a, 0x1000065, + 0x1000070, 0x100007b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000 + }, + { /* page 255, index 23 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff41, 0xff42, 0xff43, + 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, + 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, + 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, + 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, + 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, + 0xff3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 260, index 24 */ + 0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f, + 0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437, + 0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f, + 0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447, + 0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f, + 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, + 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, + 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, + 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, + 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 + }, + { /* page 471, index 25 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, + 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, + 0x0007, 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, + 0x0006, 0x0007, 0x0008, 0x0009 + } +}; + +/* U+0000 through U+2FAFF */ +static const gint16 attr_table_part1[763] = { + 0 /* page 0 */, + 1 /* page 1 */, + 2 /* page 2 */, + 3 /* page 3 */, + 4 /* page 4 */, + 5 /* page 5 */, + 6 /* page 6 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 7 /* page 9 */, + 8 /* page 10 */, + 9 /* page 11 */, + 10 /* page 12 */, + 11 /* page 13 */, + 12 /* page 14 */, + 13 /* page 15 */, + 14 /* page 16 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 15 /* page 19 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 16 /* page 23 */, + 17 /* page 24 */, + 18 /* page 25 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 19 /* page 30 */, + 20 /* page 31 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 21 /* page 33 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 22 /* page 251 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 23 /* page 255 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 24 /* page 260 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 25 /* page 471 */, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX +}; + +/* U+E0000 through U+10FFFF */ +static const gint16 attr_table_part2[768] = { + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX, + 0x0000 + G_UNICODE_MAX_TABLE_INDEX +}; + +static const gunichar title_table[][3] = { + { 0x01c5, 0x01c4, 0x01c6 }, + { 0x01c8, 0x01c7, 0x01c9 }, + { 0x01cb, 0x01ca, 0x01cc }, + { 0x01f2, 0x01f1, 0x01f3 }, + { 0x1f88, 0x0000, 0x1f80 }, + { 0x1f89, 0x0000, 0x1f81 }, + { 0x1f8a, 0x0000, 0x1f82 }, + { 0x1f8b, 0x0000, 0x1f83 }, + { 0x1f8c, 0x0000, 0x1f84 }, + { 0x1f8d, 0x0000, 0x1f85 }, + { 0x1f8e, 0x0000, 0x1f86 }, + { 0x1f8f, 0x0000, 0x1f87 }, + { 0x1f98, 0x0000, 0x1f90 }, + { 0x1f99, 0x0000, 0x1f91 }, + { 0x1f9a, 0x0000, 0x1f92 }, + { 0x1f9b, 0x0000, 0x1f93 }, + { 0x1f9c, 0x0000, 0x1f94 }, + { 0x1f9d, 0x0000, 0x1f95 }, + { 0x1f9e, 0x0000, 0x1f96 }, + { 0x1f9f, 0x0000, 0x1f97 }, + { 0x1fa8, 0x0000, 0x1fa0 }, + { 0x1fa9, 0x0000, 0x1fa1 }, + { 0x1faa, 0x0000, 0x1fa2 }, + { 0x1fab, 0x0000, 0x1fa3 }, + { 0x1fac, 0x0000, 0x1fa4 }, + { 0x1fad, 0x0000, 0x1fa5 }, + { 0x1fae, 0x0000, 0x1fa6 }, + { 0x1faf, 0x0000, 0x1fa7 }, + { 0x1fbc, 0x0000, 0x1fb3 }, + { 0x1fcc, 0x0000, 0x1fc3 }, + { 0x1ffc, 0x0000, 0x1ff3 } +}; + + +/* Table of special cases for case conversion; each record contains + * First, the best single character mapping to lowercase if Lu, + * and to uppercase if Ll, followed by the output mapping for the two cases + * other than the case of the codepoint, in the order [Ll],[Lu],[Lt], + * encoded in UTF-8, separated and terminated by a null character. + */ +static const gchar special_case_table[] = { + "\x00\x53\x53\x00\x53\x73\0" /* offset 0 */ + "\x69\x69\xcc\x87\x00\xc4\xb0\0" /* offset 7 */ + "\x00\x46\x46\x00\x46\x66\0" /* offset 15 */ + "\x00\x46\x49\x00\x46\x69\0" /* offset 22 */ + "\x00\x46\x4c\x00\x46\x6c\0" /* offset 29 */ + "\x00\x46\x46\x49\x00\x46\x66\x69\0" /* offset 36 */ + "\x00\x46\x46\x4c\x00\x46\x66\x6c\0" /* offset 45 */ + "\x00\x53\x54\x00\x53\x74\0" /* offset 54 */ + "\x00\x53\x54\x00\x53\x74\0" /* offset 61 */ + "\x00\xd4\xb5\xd5\x92\x00\xd4\xb5\xd6\x82\0" /* offset 68 */ + "\x00\xd5\x84\xd5\x86\x00\xd5\x84\xd5\xb6\0" /* offset 79 */ + "\x00\xd5\x84\xd4\xb5\x00\xd5\x84\xd5\xa5\0" /* offset 90 */ + "\x00\xd5\x84\xd4\xbb\x00\xd5\x84\xd5\xab\0" /* offset 101 */ + "\x00\xd5\x8e\xd5\x86\x00\xd5\x8e\xd5\xb6\0" /* offset 112 */ + "\x00\xd5\x84\xd4\xbd\x00\xd5\x84\xd5\xad\0" /* offset 123 */ + "\x00\xca\xbc\x4e\x00\xca\xbc\x4e\0" /* offset 134 */ + "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 143 */ + "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 158 */ + "\x00\x4a\xcc\x8c\x00\x4a\xcc\x8c\0" /* offset 173 */ + "\x00\x48\xcc\xb1\x00\x48\xcc\xb1\0" /* offset 182 */ + "\x00\x54\xcc\x88\x00\x54\xcc\x88\0" /* offset 191 */ + "\x00\x57\xcc\x8a\x00\x57\xcc\x8a\0" /* offset 200 */ + "\x00\x59\xcc\x8a\x00\x59\xcc\x8a\0" /* offset 209 */ + "\x00\x41\xca\xbe\x00\x41\xca\xbe\0" /* offset 218 */ + "\x00\xce\xa5\xcc\x93\x00\xce\xa5\xcc\x93\0" /* offset 227 */ + "\x00\xce\xa5\xcc\x93\xcc\x80\x00\xce\xa5\xcc\x93\xcc\x80\0" /* offset 238 */ + "\x00\xce\xa5\xcc\x93\xcc\x81\x00\xce\xa5\xcc\x93\xcc\x81\0" /* offset 253 */ + "\x00\xce\xa5\xcc\x93\xcd\x82\x00\xce\xa5\xcc\x93\xcd\x82\0" /* offset 268 */ + "\x00\xce\x91\xcd\x82\x00\xce\x91\xcd\x82\0" /* offset 283 */ + "\x00\xce\x97\xcd\x82\x00\xce\x97\xcd\x82\0" /* offset 294 */ + "\x00\xce\x99\xcc\x88\xcc\x80\x00\xce\x99\xcc\x88\xcc\x80\0" /* offset 305 */ + "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 320 */ + "\x00\xce\x99\xcd\x82\x00\xce\x99\xcd\x82\0" /* offset 335 */ + "\x00\xce\x99\xcc\x88\xcd\x82\x00\xce\x99\xcc\x88\xcd\x82\0" /* offset 346 */ + "\x00\xce\xa5\xcc\x88\xcc\x80\x00\xce\xa5\xcc\x88\xcc\x80\0" /* offset 361 */ + "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 376 */ + "\x00\xce\xa1\xcc\x93\x00\xce\xa1\xcc\x93\0" /* offset 391 */ + "\x00\xce\xa5\xcd\x82\x00\xce\xa5\xcd\x82\0" /* offset 402 */ + "\x00\xce\xa5\xcc\x88\xcd\x82\x00\xce\xa5\xcc\x88\xcd\x82\0" /* offset 413 */ + "\x00\xce\xa9\xcd\x82\x00\xce\xa9\xcd\x82\0" /* offset 428 */ + "\xe1\xbe\x88\xe1\xbc\x88\xce\x99\x00\xe1\xbe\x88\0" /* offset 439 */ + "\xe1\xbe\x89\xe1\xbc\x89\xce\x99\x00\xe1\xbe\x89\0" /* offset 452 */ + "\xe1\xbe\x8a\xe1\xbc\x8a\xce\x99\x00\xe1\xbe\x8a\0" /* offset 465 */ + "\xe1\xbe\x8b\xe1\xbc\x8b\xce\x99\x00\xe1\xbe\x8b\0" /* offset 478 */ + "\xe1\xbe\x8c\xe1\xbc\x8c\xce\x99\x00\xe1\xbe\x8c\0" /* offset 491 */ + "\xe1\xbe\x8d\xe1\xbc\x8d\xce\x99\x00\xe1\xbe\x8d\0" /* offset 504 */ + "\xe1\xbe\x8e\xe1\xbc\x8e\xce\x99\x00\xe1\xbe\x8e\0" /* offset 517 */ + "\xe1\xbe\x8f\xe1\xbc\x8f\xce\x99\x00\xe1\xbe\x8f\0" /* offset 530 */ + "\xe1\xbe\x80\x00\xe1\xbc\x88\xce\x99\0" /* offset 543 */ + "\xe1\xbe\x81\x00\xe1\xbc\x89\xce\x99\0" /* offset 553 */ + "\xe1\xbe\x82\x00\xe1\xbc\x8a\xce\x99\0" /* offset 563 */ + "\xe1\xbe\x83\x00\xe1\xbc\x8b\xce\x99\0" /* offset 573 */ + "\xe1\xbe\x84\x00\xe1\xbc\x8c\xce\x99\0" /* offset 583 */ + "\xe1\xbe\x85\x00\xe1\xbc\x8d\xce\x99\0" /* offset 593 */ + "\xe1\xbe\x86\x00\xe1\xbc\x8e\xce\x99\0" /* offset 603 */ + "\xe1\xbe\x87\x00\xe1\xbc\x8f\xce\x99\0" /* offset 613 */ + "\xe1\xbe\x98\xe1\xbc\xa8\xce\x99\x00\xe1\xbe\x98\0" /* offset 623 */ + "\xe1\xbe\x99\xe1\xbc\xa9\xce\x99\x00\xe1\xbe\x99\0" /* offset 636 */ + "\xe1\xbe\x9a\xe1\xbc\xaa\xce\x99\x00\xe1\xbe\x9a\0" /* offset 649 */ + "\xe1\xbe\x9b\xe1\xbc\xab\xce\x99\x00\xe1\xbe\x9b\0" /* offset 662 */ + "\xe1\xbe\x9c\xe1\xbc\xac\xce\x99\x00\xe1\xbe\x9c\0" /* offset 675 */ + "\xe1\xbe\x9d\xe1\xbc\xad\xce\x99\x00\xe1\xbe\x9d\0" /* offset 688 */ + "\xe1\xbe\x9e\xe1\xbc\xae\xce\x99\x00\xe1\xbe\x9e\0" /* offset 701 */ + "\xe1\xbe\x9f\xe1\xbc\xaf\xce\x99\x00\xe1\xbe\x9f\0" /* offset 714 */ + "\xe1\xbe\x90\x00\xe1\xbc\xa8\xce\x99\0" /* offset 727 */ + "\xe1\xbe\x91\x00\xe1\xbc\xa9\xce\x99\0" /* offset 737 */ + "\xe1\xbe\x92\x00\xe1\xbc\xaa\xce\x99\0" /* offset 747 */ + "\xe1\xbe\x93\x00\xe1\xbc\xab\xce\x99\0" /* offset 757 */ + "\xe1\xbe\x94\x00\xe1\xbc\xac\xce\x99\0" /* offset 767 */ + "\xe1\xbe\x95\x00\xe1\xbc\xad\xce\x99\0" /* offset 777 */ + "\xe1\xbe\x96\x00\xe1\xbc\xae\xce\x99\0" /* offset 787 */ + "\xe1\xbe\x97\x00\xe1\xbc\xaf\xce\x99\0" /* offset 797 */ + "\xe1\xbe\xa8\xe1\xbd\xa8\xce\x99\x00\xe1\xbe\xa8\0" /* offset 807 */ + "\xe1\xbe\xa9\xe1\xbd\xa9\xce\x99\x00\xe1\xbe\xa9\0" /* offset 820 */ + "\xe1\xbe\xaa\xe1\xbd\xaa\xce\x99\x00\xe1\xbe\xaa\0" /* offset 833 */ + "\xe1\xbe\xab\xe1\xbd\xab\xce\x99\x00\xe1\xbe\xab\0" /* offset 846 */ + "\xe1\xbe\xac\xe1\xbd\xac\xce\x99\x00\xe1\xbe\xac\0" /* offset 859 */ + "\xe1\xbe\xad\xe1\xbd\xad\xce\x99\x00\xe1\xbe\xad\0" /* offset 872 */ + "\xe1\xbe\xae\xe1\xbd\xae\xce\x99\x00\xe1\xbe\xae\0" /* offset 885 */ + "\xe1\xbe\xaf\xe1\xbd\xaf\xce\x99\x00\xe1\xbe\xaf\0" /* offset 898 */ + "\xe1\xbe\xa0\x00\xe1\xbd\xa8\xce\x99\0" /* offset 911 */ + "\xe1\xbe\xa1\x00\xe1\xbd\xa9\xce\x99\0" /* offset 921 */ + "\xe1\xbe\xa2\x00\xe1\xbd\xaa\xce\x99\0" /* offset 931 */ + "\xe1\xbe\xa3\x00\xe1\xbd\xab\xce\x99\0" /* offset 941 */ + "\xe1\xbe\xa4\x00\xe1\xbd\xac\xce\x99\0" /* offset 951 */ + "\xe1\xbe\xa5\x00\xe1\xbd\xad\xce\x99\0" /* offset 961 */ + "\xe1\xbe\xa6\x00\xe1\xbd\xae\xce\x99\0" /* offset 971 */ + "\xe1\xbe\xa7\x00\xe1\xbd\xaf\xce\x99\0" /* offset 981 */ + "\xe1\xbe\xbc\xce\x91\xce\x99\x00\xe1\xbe\xbc\0" /* offset 991 */ + "\xe1\xbe\xb3\x00\xce\x91\xce\x99\0" /* offset 1003 */ + "\xe1\xbf\x8c\xce\x97\xce\x99\x00\xe1\xbf\x8c\0" /* offset 1012 */ + "\xe1\xbf\x83\x00\xce\x97\xce\x99\0" /* offset 1024 */ + "\xe1\xbf\xbc\xce\xa9\xce\x99\x00\xe1\xbf\xbc\0" /* offset 1033 */ + "\xe1\xbf\xb3\x00\xce\xa9\xce\x99\0" /* offset 1045 */ + "\x00\xe1\xbe\xba\xce\x99\x00\xe1\xbe\xba\xcd\x85\0" /* offset 1054 */ + "\x00\xce\x86\xce\x99\x00\xce\x86\xcd\x85\0" /* offset 1067 */ + "\x00\xe1\xbf\x8a\xce\x99\x00\xe1\xbf\x8a\xcd\x85\0" /* offset 1078 */ + "\x00\xce\x89\xce\x99\x00\xce\x89\xcd\x85\0" /* offset 1091 */ + "\x00\xe1\xbf\xba\xce\x99\x00\xe1\xbf\xba\xcd\x85\0" /* offset 1102 */ + "\x00\xce\x8f\xce\x99\x00\xce\x8f\xcd\x85\0" /* offset 1115 */ + "\x00\xce\x91\xcd\x82\xce\x99\x00\xce\x91\xcd\x82\xcd\x85\0" /* offset 1126 */ + "\x00\xce\x97\xcd\x82\xce\x99\x00\xce\x97\xcd\x82\xcd\x85\0" /* offset 1141 */ + "\x00\xce\xa9\xcd\x82\xce\x99\x00\xce\xa9\xcd\x82\xcd\x85\0" /* offset 1156 */ +}; + + +/* Table of casefolding cases that can't be derived by lowercasing + */ +static const struct { + guint16 ch; + gchar data[7]; +} casefold_table[] = { + { 0x00b5, "\xce\xbc" }, + { 0x00df, "\x73\x73" }, + { 0x0130, "\x69\xcc\x87" }, + { 0x0149, "\xca\xbc\x6e" }, + { 0x017f, "\x73" }, + { 0x01f0, "\x6a\xcc\x8c" }, + { 0x0345, "\xce\xb9" }, + { 0x0390, "\xce\xb9\xcc\x88\xcc\x81" }, + { 0x03b0, "\xcf\x85\xcc\x88\xcc\x81" }, + { 0x03c2, "\xcf\x83" }, + { 0x03d0, "\xce\xb2" }, + { 0x03d1, "\xce\xb8" }, + { 0x03d5, "\xcf\x86" }, + { 0x03d6, "\xcf\x80" }, + { 0x03f0, "\xce\xba" }, + { 0x03f1, "\xcf\x81" }, + { 0x03f5, "\xce\xb5" }, + { 0x0587, "\xd5\xa5\xd6\x82" }, + { 0x1e96, "\x68\xcc\xb1" }, + { 0x1e97, "\x74\xcc\x88" }, + { 0x1e98, "\x77\xcc\x8a" }, + { 0x1e99, "\x79\xcc\x8a" }, + { 0x1e9a, "\x61\xca\xbe" }, + { 0x1e9b, "\xe1\xb9\xa1" }, + { 0x1f50, "\xcf\x85\xcc\x93" }, + { 0x1f52, "\xcf\x85\xcc\x93\xcc\x80" }, + { 0x1f54, "\xcf\x85\xcc\x93\xcc\x81" }, + { 0x1f56, "\xcf\x85\xcc\x93\xcd\x82" }, + { 0x1f80, "\xe1\xbc\x80\xce\xb9" }, + { 0x1f81, "\xe1\xbc\x81\xce\xb9" }, + { 0x1f82, "\xe1\xbc\x82\xce\xb9" }, + { 0x1f83, "\xe1\xbc\x83\xce\xb9" }, + { 0x1f84, "\xe1\xbc\x84\xce\xb9" }, + { 0x1f85, "\xe1\xbc\x85\xce\xb9" }, + { 0x1f86, "\xe1\xbc\x86\xce\xb9" }, + { 0x1f87, "\xe1\xbc\x87\xce\xb9" }, + { 0x1f88, "\xe1\xbc\x80\xce\xb9" }, + { 0x1f89, "\xe1\xbc\x81\xce\xb9" }, + { 0x1f8a, "\xe1\xbc\x82\xce\xb9" }, + { 0x1f8b, "\xe1\xbc\x83\xce\xb9" }, + { 0x1f8c, "\xe1\xbc\x84\xce\xb9" }, + { 0x1f8d, "\xe1\xbc\x85\xce\xb9" }, + { 0x1f8e, "\xe1\xbc\x86\xce\xb9" }, + { 0x1f8f, "\xe1\xbc\x87\xce\xb9" }, + { 0x1f90, "\xe1\xbc\xa0\xce\xb9" }, + { 0x1f91, "\xe1\xbc\xa1\xce\xb9" }, + { 0x1f92, "\xe1\xbc\xa2\xce\xb9" }, + { 0x1f93, "\xe1\xbc\xa3\xce\xb9" }, + { 0x1f94, "\xe1\xbc\xa4\xce\xb9" }, + { 0x1f95, "\xe1\xbc\xa5\xce\xb9" }, + { 0x1f96, "\xe1\xbc\xa6\xce\xb9" }, + { 0x1f97, "\xe1\xbc\xa7\xce\xb9" }, + { 0x1f98, "\xe1\xbc\xa0\xce\xb9" }, + { 0x1f99, "\xe1\xbc\xa1\xce\xb9" }, + { 0x1f9a, "\xe1\xbc\xa2\xce\xb9" }, + { 0x1f9b, "\xe1\xbc\xa3\xce\xb9" }, + { 0x1f9c, "\xe1\xbc\xa4\xce\xb9" }, + { 0x1f9d, "\xe1\xbc\xa5\xce\xb9" }, + { 0x1f9e, "\xe1\xbc\xa6\xce\xb9" }, + { 0x1f9f, "\xe1\xbc\xa7\xce\xb9" }, + { 0x1fa0, "\xe1\xbd\xa0\xce\xb9" }, + { 0x1fa1, "\xe1\xbd\xa1\xce\xb9" }, + { 0x1fa2, "\xe1\xbd\xa2\xce\xb9" }, + { 0x1fa3, "\xe1\xbd\xa3\xce\xb9" }, + { 0x1fa4, "\xe1\xbd\xa4\xce\xb9" }, + { 0x1fa5, "\xe1\xbd\xa5\xce\xb9" }, + { 0x1fa6, "\xe1\xbd\xa6\xce\xb9" }, + { 0x1fa7, "\xe1\xbd\xa7\xce\xb9" }, + { 0x1fa8, "\xe1\xbd\xa0\xce\xb9" }, + { 0x1fa9, "\xe1\xbd\xa1\xce\xb9" }, + { 0x1faa, "\xe1\xbd\xa2\xce\xb9" }, + { 0x1fab, "\xe1\xbd\xa3\xce\xb9" }, + { 0x1fac, "\xe1\xbd\xa4\xce\xb9" }, + { 0x1fad, "\xe1\xbd\xa5\xce\xb9" }, + { 0x1fae, "\xe1\xbd\xa6\xce\xb9" }, + { 0x1faf, "\xe1\xbd\xa7\xce\xb9" }, + { 0x1fb2, "\xe1\xbd\xb0\xce\xb9" }, + { 0x1fb3, "\xce\xb1\xce\xb9" }, + { 0x1fb4, "\xce\xac\xce\xb9" }, + { 0x1fb6, "\xce\xb1\xcd\x82" }, + { 0x1fb7, "\xce\xb1\xcd\x82\xce\xb9" }, + { 0x1fbc, "\xce\xb1\xce\xb9" }, + { 0x1fbe, "\xce\xb9" }, + { 0x1fc2, "\xe1\xbd\xb4\xce\xb9" }, + { 0x1fc3, "\xce\xb7\xce\xb9" }, + { 0x1fc4, "\xce\xae\xce\xb9" }, + { 0x1fc6, "\xce\xb7\xcd\x82" }, + { 0x1fc7, "\xce\xb7\xcd\x82\xce\xb9" }, + { 0x1fcc, "\xce\xb7\xce\xb9" }, + { 0x1fd2, "\xce\xb9\xcc\x88\xcc\x80" }, + { 0x1fd3, "\xce\xb9\xcc\x88\xcc\x81" }, + { 0x1fd6, "\xce\xb9\xcd\x82" }, + { 0x1fd7, "\xce\xb9\xcc\x88\xcd\x82" }, + { 0x1fe2, "\xcf\x85\xcc\x88\xcc\x80" }, + { 0x1fe3, "\xcf\x85\xcc\x88\xcc\x81" }, + { 0x1fe4, "\xcf\x81\xcc\x93" }, + { 0x1fe6, "\xcf\x85\xcd\x82" }, + { 0x1fe7, "\xcf\x85\xcc\x88\xcd\x82" }, + { 0x1ff2, "\xe1\xbd\xbc\xce\xb9" }, + { 0x1ff3, "\xcf\x89\xce\xb9" }, + { 0x1ff4, "\xcf\x8e\xce\xb9" }, + { 0x1ff6, "\xcf\x89\xcd\x82" }, + { 0x1ff7, "\xcf\x89\xcd\x82\xce\xb9" }, + { 0x1ffc, "\xcf\x89\xce\xb9" }, + { 0x2160, "\xe2\x85\xb0" }, + { 0x2161, "\xe2\x85\xb1" }, + { 0x2162, "\xe2\x85\xb2" }, + { 0x2163, "\xe2\x85\xb3" }, + { 0x2164, "\xe2\x85\xb4" }, + { 0x2165, "\xe2\x85\xb5" }, + { 0x2166, "\xe2\x85\xb6" }, + { 0x2167, "\xe2\x85\xb7" }, + { 0x2168, "\xe2\x85\xb8" }, + { 0x2169, "\xe2\x85\xb9" }, + { 0x216a, "\xe2\x85\xba" }, + { 0x216b, "\xe2\x85\xbb" }, + { 0x216c, "\xe2\x85\xbc" }, + { 0x216d, "\xe2\x85\xbd" }, + { 0x216e, "\xe2\x85\xbe" }, + { 0x216f, "\xe2\x85\xbf" }, + { 0x24b6, "\xe2\x93\x90" }, + { 0x24b7, "\xe2\x93\x91" }, + { 0x24b8, "\xe2\x93\x92" }, + { 0x24b9, "\xe2\x93\x93" }, + { 0x24ba, "\xe2\x93\x94" }, + { 0x24bb, "\xe2\x93\x95" }, + { 0x24bc, "\xe2\x93\x96" }, + { 0x24bd, "\xe2\x93\x97" }, + { 0x24be, "\xe2\x93\x98" }, + { 0x24bf, "\xe2\x93\x99" }, + { 0x24c0, "\xe2\x93\x9a" }, + { 0x24c1, "\xe2\x93\x9b" }, + { 0x24c2, "\xe2\x93\x9c" }, + { 0x24c3, "\xe2\x93\x9d" }, + { 0x24c4, "\xe2\x93\x9e" }, + { 0x24c5, "\xe2\x93\x9f" }, + { 0x24c6, "\xe2\x93\xa0" }, + { 0x24c7, "\xe2\x93\xa1" }, + { 0x24c8, "\xe2\x93\xa2" }, + { 0x24c9, "\xe2\x93\xa3" }, + { 0x24ca, "\xe2\x93\xa4" }, + { 0x24cb, "\xe2\x93\xa5" }, + { 0x24cc, "\xe2\x93\xa6" }, + { 0x24cd, "\xe2\x93\xa7" }, + { 0x24ce, "\xe2\x93\xa8" }, + { 0x24cf, "\xe2\x93\xa9" }, + { 0xfb00, "\x66\x66" }, + { 0xfb01, "\x66\x69" }, + { 0xfb02, "\x66\x6c" }, + { 0xfb03, "\x66\x66\x69" }, + { 0xfb04, "\x66\x66\x6c" }, + { 0xfb05, "\x73\x74" }, + { 0xfb06, "\x73\x74" }, + { 0xfb13, "\xd5\xb4\xd5\xb6" }, + { 0xfb14, "\xd5\xb4\xd5\xa5" }, + { 0xfb15, "\xd5\xb4\xd5\xab" }, + { 0xfb16, "\xd5\xbe\xd5\xb6" }, + { 0xfb17, "\xd5\xb4\xd5\xad" }, +}; + +static const struct { + gunichar ch; + gunichar mirrored_ch; +} bidi_mirroring_table[] = +{ + { 0x0028, 0x0029 }, + { 0x0029, 0x0028 }, + { 0x003c, 0x003e }, + { 0x003e, 0x003c }, + { 0x005b, 0x005d }, + { 0x005d, 0x005b }, + { 0x007b, 0x007d }, + { 0x007d, 0x007b }, + { 0x00ab, 0x00bb }, + { 0x00bb, 0x00ab }, + { 0x2039, 0x203a }, + { 0x203a, 0x2039 }, + { 0x2045, 0x2046 }, + { 0x2046, 0x2045 }, + { 0x207d, 0x207e }, + { 0x207e, 0x207d }, + { 0x208d, 0x208e }, + { 0x208e, 0x208d }, + { 0x2208, 0x220b }, + { 0x2209, 0x220c }, + { 0x220a, 0x220d }, + { 0x220b, 0x2208 }, + { 0x220c, 0x2209 }, + { 0x220d, 0x220a }, + { 0x2215, 0x29f5 }, + { 0x223c, 0x223d }, + { 0x223d, 0x223c }, + { 0x2243, 0x22cd }, + { 0x2252, 0x2253 }, + { 0x2253, 0x2252 }, + { 0x2254, 0x2255 }, + { 0x2255, 0x2254 }, + { 0x2264, 0x2265 }, + { 0x2265, 0x2264 }, + { 0x2266, 0x2267 }, + { 0x2267, 0x2266 }, + { 0x2268, 0x2269 }, + { 0x2269, 0x2268 }, + { 0x226a, 0x226b }, + { 0x226b, 0x226a }, + { 0x226e, 0x226f }, + { 0x226f, 0x226e }, + { 0x2270, 0x2271 }, + { 0x2271, 0x2270 }, + { 0x2272, 0x2273 }, + { 0x2273, 0x2272 }, + { 0x2274, 0x2275 }, + { 0x2275, 0x2274 }, + { 0x2276, 0x2277 }, + { 0x2277, 0x2276 }, + { 0x2278, 0x2279 }, + { 0x2279, 0x2278 }, + { 0x227a, 0x227b }, + { 0x227b, 0x227a }, + { 0x227c, 0x227d }, + { 0x227d, 0x227c }, + { 0x227e, 0x227f }, + { 0x227f, 0x227e }, + { 0x2280, 0x2281 }, + { 0x2281, 0x2280 }, + { 0x2282, 0x2283 }, + { 0x2283, 0x2282 }, + { 0x2284, 0x2285 }, + { 0x2285, 0x2284 }, + { 0x2286, 0x2287 }, + { 0x2287, 0x2286 }, + { 0x2288, 0x2289 }, + { 0x2289, 0x2288 }, + { 0x228a, 0x228b }, + { 0x228b, 0x228a }, + { 0x228f, 0x2290 }, + { 0x2290, 0x228f }, + { 0x2291, 0x2292 }, + { 0x2292, 0x2291 }, + { 0x2298, 0x29b8 }, + { 0x22a2, 0x22a3 }, + { 0x22a3, 0x22a2 }, + { 0x22a6, 0x2ade }, + { 0x22a8, 0x2ae4 }, + { 0x22a9, 0x2ae3 }, + { 0x22ab, 0x2ae5 }, + { 0x22b0, 0x22b1 }, + { 0x22b1, 0x22b0 }, + { 0x22b2, 0x22b3 }, + { 0x22b3, 0x22b2 }, + { 0x22b4, 0x22b5 }, + { 0x22b5, 0x22b4 }, + { 0x22b6, 0x22b7 }, + { 0x22b7, 0x22b6 }, + { 0x22c9, 0x22ca }, + { 0x22ca, 0x22c9 }, + { 0x22cb, 0x22cc }, + { 0x22cc, 0x22cb }, + { 0x22cd, 0x2243 }, + { 0x22d0, 0x22d1 }, + { 0x22d1, 0x22d0 }, + { 0x22d6, 0x22d7 }, + { 0x22d7, 0x22d6 }, + { 0x22d8, 0x22d9 }, + { 0x22d9, 0x22d8 }, + { 0x22da, 0x22db }, + { 0x22db, 0x22da }, + { 0x22dc, 0x22dd }, + { 0x22dd, 0x22dc }, + { 0x22de, 0x22df }, + { 0x22df, 0x22de }, + { 0x22e0, 0x22e1 }, + { 0x22e1, 0x22e0 }, + { 0x22e2, 0x22e3 }, + { 0x22e3, 0x22e2 }, + { 0x22e4, 0x22e5 }, + { 0x22e5, 0x22e4 }, + { 0x22e6, 0x22e7 }, + { 0x22e7, 0x22e6 }, + { 0x22e8, 0x22e9 }, + { 0x22e9, 0x22e8 }, + { 0x22ea, 0x22eb }, + { 0x22eb, 0x22ea }, + { 0x22ec, 0x22ed }, + { 0x22ed, 0x22ec }, + { 0x22f0, 0x22f1 }, + { 0x22f1, 0x22f0 }, + { 0x22f2, 0x22fa }, + { 0x22f3, 0x22fb }, + { 0x22f4, 0x22fc }, + { 0x22f6, 0x22fd }, + { 0x22f7, 0x22fe }, + { 0x22fa, 0x22f2 }, + { 0x22fb, 0x22f3 }, + { 0x22fc, 0x22f4 }, + { 0x22fd, 0x22f6 }, + { 0x22fe, 0x22f7 }, + { 0x2308, 0x2309 }, + { 0x2309, 0x2308 }, + { 0x230a, 0x230b }, + { 0x230b, 0x230a }, + { 0x2329, 0x232a }, + { 0x232a, 0x2329 }, + { 0x2768, 0x2769 }, + { 0x2769, 0x2768 }, + { 0x276a, 0x276b }, + { 0x276b, 0x276a }, + { 0x276c, 0x276d }, + { 0x276d, 0x276c }, + { 0x276e, 0x276f }, + { 0x276f, 0x276e }, + { 0x2770, 0x2771 }, + { 0x2771, 0x2770 }, + { 0x2772, 0x2773 }, + { 0x2773, 0x2772 }, + { 0x2774, 0x2775 }, + { 0x2775, 0x2774 }, + { 0x27d5, 0x27d6 }, + { 0x27d6, 0x27d5 }, + { 0x27dd, 0x27de }, + { 0x27de, 0x27dd }, + { 0x27e2, 0x27e3 }, + { 0x27e3, 0x27e2 }, + { 0x27e4, 0x27e5 }, + { 0x27e5, 0x27e4 }, + { 0x27e6, 0x27e7 }, + { 0x27e7, 0x27e6 }, + { 0x27e8, 0x27e9 }, + { 0x27e9, 0x27e8 }, + { 0x27ea, 0x27eb }, + { 0x27eb, 0x27ea }, + { 0x2983, 0x2984 }, + { 0x2984, 0x2983 }, + { 0x2985, 0x2986 }, + { 0x2986, 0x2985 }, + { 0x2987, 0x2988 }, + { 0x2988, 0x2987 }, + { 0x2989, 0x298a }, + { 0x298a, 0x2989 }, + { 0x298b, 0x298c }, + { 0x298c, 0x298b }, + { 0x298d, 0x2990 }, + { 0x298e, 0x298f }, + { 0x298f, 0x298e }, + { 0x2990, 0x298d }, + { 0x2991, 0x2992 }, + { 0x2992, 0x2991 }, + { 0x2993, 0x2994 }, + { 0x2994, 0x2993 }, + { 0x2995, 0x2996 }, + { 0x2996, 0x2995 }, + { 0x2997, 0x2998 }, + { 0x2998, 0x2997 }, + { 0x29b8, 0x2298 }, + { 0x29c0, 0x29c1 }, + { 0x29c1, 0x29c0 }, + { 0x29c4, 0x29c5 }, + { 0x29c5, 0x29c4 }, + { 0x29cf, 0x29d0 }, + { 0x29d0, 0x29cf }, + { 0x29d1, 0x29d2 }, + { 0x29d2, 0x29d1 }, + { 0x29d4, 0x29d5 }, + { 0x29d5, 0x29d4 }, + { 0x29d8, 0x29d9 }, + { 0x29d9, 0x29d8 }, + { 0x29da, 0x29db }, + { 0x29db, 0x29da }, + { 0x29f5, 0x2215 }, + { 0x29f8, 0x29f9 }, + { 0x29f9, 0x29f8 }, + { 0x29fc, 0x29fd }, + { 0x29fd, 0x29fc }, + { 0x2a2b, 0x2a2c }, + { 0x2a2c, 0x2a2b }, + { 0x2a2d, 0x2a2c }, + { 0x2a2e, 0x2a2d }, + { 0x2a34, 0x2a35 }, + { 0x2a35, 0x2a34 }, + { 0x2a3c, 0x2a3d }, + { 0x2a3d, 0x2a3c }, + { 0x2a64, 0x2a65 }, + { 0x2a65, 0x2a64 }, + { 0x2a79, 0x2a7a }, + { 0x2a7a, 0x2a79 }, + { 0x2a7d, 0x2a7e }, + { 0x2a7e, 0x2a7d }, + { 0x2a7f, 0x2a80 }, + { 0x2a80, 0x2a7f }, + { 0x2a81, 0x2a82 }, + { 0x2a82, 0x2a81 }, + { 0x2a83, 0x2a84 }, + { 0x2a84, 0x2a83 }, + { 0x2a8b, 0x2a8c }, + { 0x2a8c, 0x2a8b }, + { 0x2a91, 0x2a92 }, + { 0x2a92, 0x2a91 }, + { 0x2a93, 0x2a94 }, + { 0x2a94, 0x2a93 }, + { 0x2a95, 0x2a96 }, + { 0x2a96, 0x2a95 }, + { 0x2a97, 0x2a98 }, + { 0x2a98, 0x2a97 }, + { 0x2a99, 0x2a9a }, + { 0x2a9a, 0x2a99 }, + { 0x2a9b, 0x2a9c }, + { 0x2a9c, 0x2a9b }, + { 0x2aa1, 0x2aa2 }, + { 0x2aa2, 0x2aa1 }, + { 0x2aa6, 0x2aa7 }, + { 0x2aa7, 0x2aa6 }, + { 0x2aa8, 0x2aa9 }, + { 0x2aa9, 0x2aa8 }, + { 0x2aaa, 0x2aab }, + { 0x2aab, 0x2aaa }, + { 0x2aac, 0x2aad }, + { 0x2aad, 0x2aac }, + { 0x2aaf, 0x2ab0 }, + { 0x2ab0, 0x2aaf }, + { 0x2ab3, 0x2ab4 }, + { 0x2ab4, 0x2ab3 }, + { 0x2abb, 0x2abc }, + { 0x2abc, 0x2abb }, + { 0x2abd, 0x2abe }, + { 0x2abe, 0x2abd }, + { 0x2abf, 0x2ac0 }, + { 0x2ac0, 0x2abf }, + { 0x2ac1, 0x2ac2 }, + { 0x2ac2, 0x2ac1 }, + { 0x2ac3, 0x2ac4 }, + { 0x2ac4, 0x2ac3 }, + { 0x2ac5, 0x2ac6 }, + { 0x2ac6, 0x2ac5 }, + { 0x2acd, 0x2ace }, + { 0x2ace, 0x2acd }, + { 0x2acf, 0x2ad0 }, + { 0x2ad0, 0x2acf }, + { 0x2ad1, 0x2ad2 }, + { 0x2ad2, 0x2ad1 }, + { 0x2ad3, 0x2ad4 }, + { 0x2ad4, 0x2ad3 }, + { 0x2ad5, 0x2ad6 }, + { 0x2ad6, 0x2ad5 }, + { 0x2ade, 0x22a6 }, + { 0x2ae3, 0x22a9 }, + { 0x2ae4, 0x22a8 }, + { 0x2ae5, 0x22ab }, + { 0x2aec, 0x2aed }, + { 0x2aed, 0x2aec }, + { 0x2af7, 0x2af8 }, + { 0x2af8, 0x2af7 }, + { 0x2af9, 0x2afa }, + { 0x2afa, 0x2af9 }, + { 0x3008, 0x3009 }, + { 0x3009, 0x3008 }, + { 0x300a, 0x300b }, + { 0x300b, 0x300a }, + { 0x300c, 0x300d }, + { 0x300d, 0x300c }, + { 0x300e, 0x300f }, + { 0x300f, 0x300e }, + { 0x3010, 0x3011 }, + { 0x3011, 0x3010 }, + { 0x3014, 0x3015 }, + { 0x3015, 0x3014 }, + { 0x3016, 0x3017 }, + { 0x3017, 0x3016 }, + { 0x3018, 0x3019 }, + { 0x3019, 0x3018 }, + { 0x301a, 0x301b }, + { 0x301b, 0x301a }, + { 0xff08, 0xff09 }, + { 0xff09, 0xff08 }, + { 0xff1c, 0xff1e }, + { 0xff1e, 0xff1c }, + { 0xff3b, 0xff3d }, + { 0xff3d, 0xff3b }, + { 0xff5b, 0xff5d }, + { 0xff5d, 0xff5b }, + { 0xff5f, 0xff60 }, + { 0xff60, 0xff5f }, + { 0xff62, 0xff63 }, + { 0xff63, 0xff62 } +}; + +#endif /* CHARTABLES_H */ diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_lltot.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/repl_lltot.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_lltot.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_lltot.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,47 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_SharedHeader.h" + +TCHAR* lucene_i64tot( + int64_t value, /* [I] Value to be converted */ + TCHAR* str, /* [O] Destination for the converted value */ + int radix) /* [I] Number base for conversion */ +{ + uint64_t val; + int negative; + TCHAR buffer[65]; + TCHAR* pos; + int digit; + + if (value < 0 && radix == 10) { + negative = 1; + val = -value; + } else { + negative = 0; + val = value; + } /* if */ + + pos = &buffer[64]; + *pos = '\0'; + + do { + digit = (int)(val % radix); + val = val / radix; + if (digit < 10) { + *--pos = '0' + digit; + } else { + *--pos = 'a' + digit - 10; + } /* if */ + } while (val != 0L); + + if (negative) { + *--pos = '-'; + } /* if */ + + _tcsncpy(str,pos,&buffer[64] - pos + 1); //needed for unicode to work + return str; +} diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_tchar.h clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tchar.h --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_tchar.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tchar.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _REPL_TCHAR_H +#define _REPL_TCHAR_H + +#ifndef _CL_HAVE_TCHAR_H + #if defined(_UCS2) + + //note: descriptions with * in front have replacement functions + + //formatting functions + #define _sntprintf swprintf //* make a formatted a string + #define _tprintf wprintf //* print a formatted string + + //this one has no replacement functions yet, but it is only used in the tests + #define _vsntprintf vsnwprintf //* print a formatted string using variable arguments + + //we are using the internal functions of the compiler here + //if LUCENE_USE_INTERNAL_CHAR_FUNCTIONS is defined, thesse + //will be replaced by internal functions + #define _istalnum iswalnum //* alpha/numeric char check + #define _istalpha iswalpha //* alpha char check + #define _istspace iswspace //* space char check + #define _istdigit iswdigit //* digit char check + #define _totlower towlower //* convert char to lower case + #define _totupper towupper //* convert char to lower case + #define _tcslwr wcslwr //* convert string to lower case + + //these are the string handling functions + //we may need to create wide-character/multi-byte replacements for these + #define _tcscpy wcscpy //copy a string to another string + #define _tcsncpy wcsncpy //copy a specified amount of one string to another string. + #define _tcscat wcscat //copy a string onto the end of the other string + #define _tcsncat wcsncat + #define _tcschr wcschr //find location of one character + #define _tcsstr wcsstr //find location of a string + #define _tcslen wcslen //get length of a string + #define _tcscmp wcscmp //case sensitive compare two strings + #define _tcsncmp wcsncmp //case sensitive compare two strings + #define _tcscspn wcscspn //location of any of a set of character in a string + + //string compare + #ifdef _CL_HAVE_FUNCTION_WCSICMP + #define _tcsicmp wcsicmp //* case insensitive compare two string + #else + #define _tcsicmp wcscasecmp //* case insensitive compare two string + #endif + #if defined(_CL_HAVE_FUNCTION_WCSDUP) + #define _tcsdup wcsdup + #else + #define _tcsdup lucene_wcsdup + #endif + + //conversion functions + #define _tcstod wcstod //convert a string to a double + #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer + #define _itot _i64tot + #define _i64tot lltow //* converts a 64 bit integer to a string (with base) + #else //if defined(_ASCII) + + //formatting functions + #define _sntprintf snprintf + #define _tprintf printf + #define _vsntprintf vsnprintf + + //we are using the internal functions of the compiler here + //if LUCENE_USE_INTERNAL_CHAR_FUNCTIONS is defined, thesse + //will be replaced by internal functions + #define _istalnum isalnum + #define _istalpha isalpha + #define _istspace isspace + #define _istdigit isdigit + #define _totlower tolower + #define _totupper toupper + #define _tcslwr strlwr + + //these are the string handling functions + #define _tcscpy strcpy + #define _tcsncpy strncpy + #define _tcscat strcat + #define _tcsncat strncat + #define _tcschr strchr + #define _tcsstr strstr + #define _tcslen strlen + #define _tcscmp strcmp + #define _tcsncmp strncmp + #define _tcsicmp strcasecmp + #define _tcscspn strcspn + #define _tcsdup strdup //string duplicate + //converstion methods + #define _tcstod strtod + #define _tcstoi64 strtoll + #define _itot _i64tot + #define _i64tot lltoa + + #endif + +#else //HAVE_TCHAR_H + #include + + //some tchar headers miss these... + #ifndef _tcstoi64 + #if defined(_UCS2) + #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer + #else + #define _tcstoi64 strtoll + #endif + #endif + +#endif //HAVE_TCHAR_H + +#ifndef _ttoi + #define _ttoi(x) (int)_tcstoi64(x,NULL,10) +#endif + +#ifndef _itot + #define _itot(i, buf, radix) lucene_i64tot(i, buf, radix) +#endif + +namespace std +{ +#ifndef tstring + #ifdef _UNICODE + typedef wstring tstring; + #else + typedef string tstring; + #endif +#endif +}; + +#define STRCPY_AtoA(target,src,len) strncpy(target,src,len) +#define STRDUP_AtoA(x) strdup(x) + +#if defined(_UCS2) + #define stringDuplicate(x) _tcsdup(x) + + #if defined(_CL_HAVE_FUNCTION_WCSDUP) + #define STRDUP_WtoW wcsdup + #else + #define STRDUP_WtoW lucene_wcsdup + #endif + #define STRDUP_TtoT STRDUP_WtoW + #define STRDUP_WtoT STRDUP_WtoW + #define STRDUP_TtoW STRDUP_WtoW + + #define STRDUP_AtoW(x) CL_NS(util)::Misc::_charToWide(x) + #define STRDUP_AtoT STRDUP_AtoW + + #define STRDUP_WtoA(x) CL_NS(util)::Misc::_wideToChar(x) + #define STRDUP_TtoA STRDUP_WtoA + + #define STRCPY_WtoW(target,src,len) _tcsncpy(target,src,len) + #define STRCPY_TtoW STRCPY_WtoW + #define STRCPY_WtoT STRCPY_WtoW + //#define _tcscpy STRCPY_WtoW + + #define STRCPY_AtoW(target,src,len) CL_NS(util)::Misc::_cpycharToWide(src,target,len) + #define STRCPY_AtoT STRCPY_AtoW + + #define STRCPY_WtoA(target,src,len) CL_NS(util)::Misc::_cpywideToChar(src,target,len) + #define STRCPY_TtoA STRCPY_WtoA +#else + #define stringDuplicate(x) strdup(x) + #define STRDUP_AtoT STRDUP_AtoA + #define STRDUP_TtoA STRDUP_AtoA + #define STRDUP_TtoT STRDUP_AtoA + + #define STRDUP_WtoT(x) xxxxxxxxxxxxxxx //not possible + #define STRCPY_WtoT(target,src,len) xxxxxxxxxxxxxxx //not possible + + #define STRCPY_AtoT STRCPY_AtoA + #define STRCPY_TtoA STRCPY_AtoA + //#define _tcscpy STRCPY_AtoA +#endif + + +#endif //_REPL_TCHAR_H diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_tcscasecmp.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tcscasecmp.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_tcscasecmp.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tcscasecmp.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,21 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_SharedHeader.h" + +int lucene_tcscasecmp(const TCHAR * sa, const TCHAR * sb){ + TCHAR ca,cb; + if (sa == sb) + return 0; + + do{ + ca = _totlower( (*(sa++)) ); + cb = _totlower( (*(sb++)) ); + } while ( ca != L'\0' && (ca == cb) ); + + return (int)(ca - cb); +} diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_tcslwr.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tcslwr.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_tcslwr.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tcslwr.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,15 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_SharedHeader.h" + +TCHAR* lucene_tcslwr( TCHAR* str ) +{ + TCHAR* ret = str; + for ( ; *str; str++) *str = _totlower(*str); + return ret; +} diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_tcstod.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tcstod.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_tcstod.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tcstod.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,24 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_SharedHeader.h" +#include "CLucene/util/Misc.h" + +#ifndef _ASCII +double lucene_tcstod(const TCHAR *value, TCHAR **end){ + int32_t len = _tcslen(value)+1; + char* avalue=_CL_NEWARRAY(char,len); + char* aend=NULL; + STRCPY_TtoA(avalue,value,len); + + double ret = strtod(avalue,&aend); + *end=(TCHAR*)value+(aend-avalue); + _CLDELETE_CaARRAY(avalue); + + return ret; +} +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_tcstoll.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tcstoll.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_tcstoll.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tcstoll.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,46 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_SharedHeader.h" + +int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix){ + #define LUCENE_TCSTOI64_RADIX(x,r) ((x>=_T('0') && x<=_T('9'))?x-_T('0'):((x>=_T('a') && x<=_T('z'))?x-_T('a')+10:((x>=_T('A') && x<=_T('Z'))?x-_T('A')+10:1000))) + + if (radix < 2 || radix > 36) + return 0; + + /* Skip white space. */ + while (_istspace (*str)) + ++str; + + int sign=1; + if ( str[0] == _T('+') ) + str++; + else if ( str[0] == _T('-') ){ + sign = -1; + str++; + } + + *end=(TCHAR*)str; + long r = -1; + while ( (r=LUCENE_TCSTOI64_RADIX(*end[0],radix)) >=0 && r=str;p-- ){ + int i=LUCENE_TCSTOI64_RADIX(p[0],radix); + if ( pos == 0 ) + ret=i; + else + ret += (int64_t)pow((float_t)radix,(float_t)pos) * i; //todo: might be quicker with a different pow overload + + pos++; + } + return sign*ret; +} diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_tprintf.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tprintf.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_tprintf.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_tprintf.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,149 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_SharedHeader.h" +#include "CLucene/util/StringBuffer.h" + +#include //MB_LEN_MAX + +CL_NS_USE(util) + +//print a variable argument to a stream +//currently special number formatting is not supported. it is very minimalistic +void lucene_vfnwprintf(StringBuffer* buffer, size_t /*count*/, const wchar_t * format, va_list& valist){ + const wchar_t *iter = format; + StringBuffer* tmp = NULL; + if ( buffer == NULL ) + tmp = _CLNEW StringBuffer; + else + tmp = buffer; + + while (*iter) + { + while (*iter && *iter != '%') + { + tmp->appendChar(*iter++); + } + if (*iter == '%') + { + if (iter[1] == '%') + { + //just print a % + tmp->appendChar('%'); + iter += 2; + continue; + } + + iter++; + switch (*iter) + { + case 's': + { + //todo: this is faulty. it doesn't heed count + + //print a string or null + const TCHAR *wstr = va_arg(valist, TCHAR *); + if ( !wstr ) + wstr = _T("(null)"); + + tmp->append(wstr); + iter++; + break; + } + + case 'c': + tmp->appendChar((TCHAR)va_arg(valist, int)); + iter++; + break; + + default: + { + //todo: this is faulty. it doesn't heed count + + if (*iter == 'p') + tmp->appendInt((int32_t)va_arg(valist, long)); + else + { + if (*iter == 'a' || *iter == 'A' || + *iter == 'e' || *iter == 'E' || + *iter == 'f' || *iter == 'F' || + *iter == 'g' || *iter == 'G') + tmp->appendFloat((float_t)va_arg(valist, double),8); + else if (*iter == 'd' || *iter == 'i' ){ + tmp->appendInt((int32_t)va_arg(valist, int)); + }else if (*iter == 'l' ){ + TCHAR b[100]; + _i64tot((int64_t)va_arg(valist, int64_t),b,10); + tmp->append(b); + }/*else{ + TCHAR b[100]; + _i64tot((int64_t)va_arg(valist, void*),b,10); + tmp->append(b); + }*/ + } + iter++; + break; + } + } + } + } + + + if ( buffer == NULL ){ + //we are supposed to be writing to the console +#ifdef _UCS2 + TCHAR* pointer = tmp->getBuffer(); + char ob[MB_LEN_MAX]; + size_t v; + size_t len = tmp->length(); + for (size_t i=0;i 0 ){ + ob[v]='\0'; + fputs(ob,stdout); + } + pointer++; + } + + +#else + fputs(tmp->getBuffer(),stdout); +#endif + _CLDELETE(tmp); + } +} + +#ifdef _UCS2 +//print a list of arguments to a string +int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...){ + va_list ap; + va_start(ap, format); + StringBuffer buffer; + lucene_vfnwprintf(&buffer,count,format,ap); + va_end(ap); + + size_t ret = cl_min(count,(size_t)(buffer.length()+1)); + wcsncpy(strbuf,buffer.getBuffer(),ret); + return ret; +} + +//print a list of arguments to the stdout +void lucene_wprintf(const wchar_t * format, ...){ + va_list ap; + va_start(ap, format); + lucene_vfnwprintf(NULL,LUCENE_INT32_MAX_SHOULDBE,format,ap); + va_end(ap); +} + +//print a variable argument to a string +int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap){ + StringBuffer buffer; + lucene_vfnwprintf(&buffer,count,format,ap); + int ret = cl_min((size_t)count,buffer.length()+1); + wcsncpy(strbuf,buffer.getBuffer(),ret); + return ret; +} +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_wchar.h clucene-core-2.3.3.4/src/shared/CLucene/config/repl_wchar.h --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_wchar.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_wchar.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,89 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_repl_wchar_h +#define _lucene_repl_wchar_h + +#include +#include "repl_tchar.h" +#ifdef _CL_HAVE_STRING_H + #include +#endif +#ifdef _CL_HAVE_WCHAR_H + #include +#endif + + +CLUCENE_SHARED_EXPORT int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src); +CLUCENE_SHARED_EXPORT TCHAR* cl_tcscasefold( TCHAR * str, int len=-1 ); + +//we provide utf8 conversion functions +CLUCENE_SHARED_EXPORT size_t lucene_utf8towc (wchar_t& ret, const char *s); +CLUCENE_SHARED_EXPORT size_t lucene_utf8towcs(wchar_t *, const char *, size_t maxslen); +CLUCENE_SHARED_EXPORT size_t lucene_wctoutf8 (char * ret, const wchar_t str); +CLUCENE_SHARED_EXPORT size_t lucene_wcstoutf8 (char *, const wchar_t *, size_t maxslen); +#ifdef _ASCII +#define lucene_wcstoutf8string(str,strlen) str +#else +CLUCENE_SHARED_EXPORT std::string lucene_wcstoutf8string(const wchar_t* str, size_t strlen); +#endif +CLUCENE_SHARED_EXPORT size_t lucene_utf8charlen(const unsigned char p); //< the number of characters that this first utf8 character will expect + +//string function replacements +#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSCASECMP)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRCASECMP)) + CLUCENE_SHARED_EXPORT int lucene_tcscasecmp(const TCHAR *, const TCHAR *); + #undef _tcsicmp + #define _tcsicmp lucene_tcscasecmp +#endif +#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSLWR)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRLWR)) + CLUCENE_SHARED_EXPORT TCHAR* lucene_tcslwr( TCHAR* str ); + #undef _tcslwr + #define _tcslwr lucene_tcslwr +#endif + +//conversion functions +#if (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_LLTOA)) || (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_LLTOW)) + CLUCENE_SHARED_EXPORT TCHAR* lucene_i64tot( int64_t value, TCHAR* str, int radix); + #undef _i64tot + #define _i64tot lucene_i64tot +#endif +#if !defined(_CL_HAVE_FUNCTION_WCSDUP) + CLUCENE_SHARED_EXPORT wchar_t* lucene_wcsdup( const wchar_t* str); +#endif +#if (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSTOLL)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRTOLL)) + CLUCENE_SHARED_EXPORT int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix); + #undef _tcstoi64 + #define _tcstoi64 lucene_tcstoi64 +#endif +#if defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSTOD) + CLUCENE_SHARED_EXPORT double lucene_tcstod(const TCHAR *value, TCHAR **end); + #undef _tcstod + #define _tcstod lucene_tcstod +#endif + +//printf functions +#if (defined(_UCS2) && (!defined(_CL_HAVE_FUNCTION__SNWPRINTF)) || defined(_CL_HAVE_SNWPRINTF_BUG) ) + #undef _sntprintf + #define _sntprintf lucene_snwprintf + CLUCENE_SHARED_EXPORT int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...); +#endif +#if defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WPRINTF) + #undef _tprintf + #define _tprintf lucene_wprintf + CLUCENE_SHARED_EXPORT void lucene_wprintf(const wchar_t * format, ...); +#endif +#if defined(_UCS2) && (!defined(_CL_HAVE_FUNCTION__VSNWPRINTF) || defined(_CL_HAVE_SNWPRINTF_BUG) ) + #undef _vsntprintf + #define _vsntprintf lucene_vsnwprintf + CLUCENE_SHARED_EXPORT int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap); +#endif + + + +//todo: if _CL_HAVE_SNPRINTF_BUG fails(snprintf overflow),we should use our own +//function. but we don't have it currently, and our functions are dubious anyway... + +#endif //end of _lucene_repl_wchar_h diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/repl_wctype.h clucene-core-2.3.3.4/src/shared/CLucene/config/repl_wctype.h --- clucene-core-0.9.21b/src/shared/CLucene/config/repl_wctype.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/repl_wctype.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,76 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_repl_wctype_h +#define _lucene_repl_wctype_h + + +//////////////////////////////////////////////////////// +// Character functions. +// Here we decide whose character functions to use +//////////////////////////////////////////////////////// +#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) + #define stringCaseFold cl_tcscasefold + #define stringCaseFoldCmp cl_tcscasefoldcmp + + #undef _istspace + #undef _istdigit + #undef _istalnum + #undef _istalpha + #undef _totlower + #undef _totupper + #define _istalnum cl_isalnum + #define _istalpha cl_isletter + #define _istspace cl_isspace + #define _istdigit cl_isdigit + #define _totlower cl_tolower + #define _totupper cl_toupper + + //here are some functions to help deal with utf8/ucs2 conversions + //lets let the user decide what mb functions to use... we provide pure utf8 ones no matter what. + /*#undef _mbtowc + #undef _mbstowcs + #undef _wctomb + #undef _wcstombs + #define _mbtowc lucene_mbstowc + #define _mbsstowcs lucene_mbstowcs + #define _wctomb lucene_wcto_mb + #define _wcstombs lucene_wcstombs*/ +#else + //we are using native functions + //here are some functions to help deal with utf8/ucs2 conversions + /*#define _mbtowc mbtowc + #define _wctomb wctomb + #define _mbstowcs mbstowcs + #define _wcstombs wcstombs*/ + + //we are using native character functions + #if defined(_ASCII) + #undef _istspace + #undef _istdigit + #undef _istalnum + #undef _istalpha + #undef _totlower + #undef _totupper + #define _istspace(x) isspace((unsigned char)x) + #define _istdigit(x) isdigit((unsigned char)x) + #define _istalnum(x) isalnum((unsigned char)x) + #define _istalpha(x) isalpha((unsigned char)x) + #define _totlower(x) tolower((unsigned char)x) + #define _totupper(x) toupper((unsigned char)x) + #endif +#endif + +//the methods contained in gunichartables.h +typedef unsigned long clunichar; +CLUCENE_SHARED_EXPORT bool cl_isletter(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isalnum(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isdigit(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isspace (clunichar c); +CLUCENE_SHARED_EXPORT TCHAR cl_tolower (TCHAR c); +CLUCENE_SHARED_EXPORT TCHAR cl_toupper (TCHAR c); + +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/threads.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/threads.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/threads.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/threads.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,292 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_SharedHeader.h" +#include "CLucene/LuceneThreads.h" +#include "_threads.h" +#include + +CL_NS_DEF(util) + +#ifndef _CL_DISABLE_MULTITHREADING + +#if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + //do nothing + #if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Not implementing any thread mutex==================") + #else + #warning "==================Not implementing any thread mutex==================" + #endif + + + +#elif defined(_CL_HAVE_WIN32_THREADS) + struct mutex_thread::Internal{ + CRITICAL_SECTION mtx; + }; + + mutex_thread::mutex_thread(const mutex_thread& clone): + _internal(new Internal) + { + InitializeCriticalSection(&_internal->mtx); + } + mutex_thread::mutex_thread(): + _internal(new Internal) + { + InitializeCriticalSection(&_internal->mtx); + } + + mutex_thread::~mutex_thread() + { + DeleteCriticalSection(&_internal->mtx); + delete _internal; + } + + void mutex_thread::lock() + { + EnterCriticalSection(&_internal->mtx); + } + + void mutex_thread::unlock() + { + LeaveCriticalSection(&_internal->mtx); + } + + _LUCENE_THREADID_TYPE mutex_thread::_GetCurrentThreadId(){ + return GetCurrentThreadId(); + } + void mutex_thread::_exitThread(int val){ + ExitThread(val); + } + + int32_t mutex_thread::atomic_increment(_LUCENE_ATOMIC_INT *theInteger){ +#ifdef _M_X64 + return _InterlockedIncrement64(theInteger); +#else + return InterlockedIncrement(theInteger); +#endif + } + int32_t mutex_thread::atomic_decrement(_LUCENE_ATOMIC_INT *theInteger){ +#ifdef _M_X64 + return _InterlockedDecrement64(theInteger); +#else + return InterlockedDecrement(theInteger); +#endif + } + + + + class shared_condition::Internal{ + public: + void* _event; + Internal(){ + _event = CreateEventA( NULL, false, false, NULL ); + } + ~Internal(){ + CloseHandle( _event ); + } + }; + shared_condition::shared_condition(){ + _internal = new Internal; + } + shared_condition::~shared_condition(){ + delete _internal; + } + void shared_condition::Wait(mutex_thread* shared_lock){ + shared_lock->unlock(); + _cl_dword_t dwRes = WaitForSingleObject( _internal->_event, 0xFFFFFFFF ); + assert ( 0x0 == dwRes ); + shared_lock->lock(); + } + void shared_condition::NotifyAll(){ + bool bRes = SetEvent(_internal->_event); + assert( bRes ); + } + + _LUCENE_THREADID_TYPE mutex_thread::CreateThread(luceneThreadStartRoutine* func, void* arg){ + return (_LUCENE_THREADID_TYPE) ::_beginthread (func, 0, arg); + } + void mutex_thread::JoinThread(_LUCENE_THREADID_TYPE id){ + WaitForSingleObject((void*)id, 0xFFFFFFFF); + } + + +#elif defined(_CL_HAVE_PTHREAD) + #ifndef _REENTRANT + #error ACK! You need to compile with _REENTRANT defined since this uses threads + #endif + + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + bool mutex_pthread_attr_initd=false; + pthread_mutexattr_t mutex_thread_attr; + #endif + + #ifdef _CL__CND_DEBUG + #define _CLPTHREAD_CHECK(c,m) CND_PRECONDITION(c==0,m) + #else + #define _CLPTHREAD_CHECK(c,m) c; + #endif + + struct mutex_thread::Internal{ + pthread_mutex_t mtx; + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + pthread_t lockOwner; + unsigned int lockCount; + #endif + }; + + mutex_thread::mutex_thread(const mutex_thread& /*clone*/): + _internal(new Internal) + { + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, &mutex_thread_attr), "mutex_thread(clone) constructor failed") + #else + #if defined(__hpux) && defined(_DECTHREADS_) + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, pthread_mutexattr_default), "mutex_thread(clone) constructor failed") + #else + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, 0), "mutex_thread(clone) constructor failed") + #endif + _internal->lockCount=0; + _internal->lockOwner=0; + #endif + } + mutex_thread::mutex_thread(): + _internal(new Internal) + { + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + if ( mutex_pthread_attr_initd == false ){ + pthread_mutexattr_init(&mutex_thread_attr); + pthread_mutexattr_settype(&mutex_thread_attr, PTHREAD_MUTEX_RECURSIVE); + mutex_pthread_attr_initd = true; + } + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, &mutex_thread_attr), "mutex_thread(clone) constructor failed") + #else + #if defined(__hpux) && defined(_DECTHREADS_) + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, pthread_mutexattr_default), "mutex_thread(clone) constructor failed") + #else + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, 0), "mutex_thread(clone) constructor failed") + #endif + _internal->lockCount=0; + _internal->lockOwner=0; + #endif + } + + mutex_thread::~mutex_thread() + { + _CLPTHREAD_CHECK(pthread_mutex_destroy(&_internal->mtx), "~mutex_thread destructor failed") + delete _internal; + } + + _LUCENE_THREADID_TYPE mutex_thread::_GetCurrentThreadId(){ + return pthread_self(); + } + + int32_t atomic_threads::atomic_increment(_LUCENE_ATOMIC_INT *theInteger){ + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + return __sync_add_and_fetch(theInteger, 1); + #else + SCOPED_LOCK_MUTEX(theInteger->THIS_LOCK) + return ++theInteger->value; + #endif + } + int32_t atomic_threads::atomic_decrement(_LUCENE_ATOMIC_INT *theInteger){ + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + return __sync_sub_and_fetch(theInteger, 1); + #else + SCOPED_LOCK_MUTEX(theInteger->THIS_LOCK) + return --theInteger->value; + #endif + } + + + _LUCENE_THREADID_TYPE mutex_thread::CreateThread(luceneThreadStartRoutine* func, void* arg){ + _LUCENE_THREADID_TYPE ret; + int nRes = pthread_create(&ret, NULL, func, arg); + assert( nRes == 0 ); + return ret; + } + void mutex_thread::JoinThread(_LUCENE_THREADID_TYPE id){ + pthread_join(id, NULL); + } + + void mutex_thread::lock() + { + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + pthread_t currentThread = pthread_self(); + if( pthread_equal( _internal->lockOwner, currentThread ) ) { + ++_internal->lockCount; + } else { + _CLPTHREAD_CHECK(pthread_mutex_lock(&_internal->mtx), "mutex_thread::lock") + _internal->lockOwner = currentThread; + _internal->lockCount = 1; + } + #else + _CLPTHREAD_CHECK(pthread_mutex_lock(&_internal->mtx), "mutex_thread::lock") + #endif + } + + void mutex_thread::unlock() + { + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + --_internal->lockCount; + if( _internal->lockCount == 0 ) + { + _internal->lockOwner = 0; + _CLPTHREAD_CHECK(pthread_mutex_unlock(&_internal->mtx), "mutex_thread::unlock") + } + #else + _CLPTHREAD_CHECK(pthread_mutex_unlock(&_internal->mtx), "mutex_thread::unlock") + #endif + } + + + struct shared_condition::Internal{ + pthread_cond_t condition; + Internal(){ + pthread_cond_init (&condition, NULL); + } + ~Internal(){ + pthread_cond_destroy(&condition); + } + }; + shared_condition::shared_condition(){ + _internal = new Internal; + } + shared_condition::~shared_condition(){ + delete _internal; + } + void shared_condition::Wait(mutex_thread* shared_lock){ + int res = 0; + res = pthread_cond_wait(&_internal->condition, &shared_lock->_internal->mtx); + assert(res == 0); + } + void shared_condition::NotifyAll(){ + int res = 0; + res = pthread_cond_broadcast(&_internal->condition); + assert(res == 0); + } + + +#endif //thread impl choice + + +mutexGuard::mutexGuard(const mutexGuard& /*clone*/){ + //no autoclone + mrMutex = NULL; +} +mutexGuard::mutexGuard( _LUCENE_THREADMUTEX& rMutex ) : + mrMutex(&rMutex) +{ + mrMutex->lock(); +} +mutexGuard::~mutexGuard() +{ + mrMutex->unlock(); +} + +#endif //!_CL_DISABLE_MULTITHREADING + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/_threads.h clucene-core-2.3.3.4/src/shared/CLucene/config/_threads.h --- clucene-core-0.9.21b/src/shared/CLucene/config/_threads.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/_threads.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _config_threads_h +#define _config_threads_h + +#ifndef _CL_DISABLE_MULTITHREADING + #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + //do nothing + #elif defined(_CL_HAVE_WIN32_THREADS) + //we have not explicity included windows.h and windows.h has + //not been included (check _WINBASE_), then we must define + //our own definitions to the thread locking functions: + #ifndef _WINBASE_ + extern "C"{ + struct CRITICAL_SECTION + { + struct critical_section_debug * DebugInfo; + long LockCount; + long RecursionCount; + void * OwningThread; + void * LockSemaphore; + _cl_dword_t SpinCount; + }; + + __declspec(dllimport) void __stdcall InitializeCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall EnterCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall LeaveCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall DeleteCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall ExitThread(_cl_dword_t); + + __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(); + +#ifdef _M_X64 + __declspec(dllimport) long long __stdcall _InterlockedIncrement64(__inout long long volatile*); + __declspec(dllimport) long long __stdcall _InterlockedDecrement64(__inout long long volatile*); +#else + __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile*); + __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile*); +#endif + typedef struct _SECURITY_ATTRIBUTES + { + _cl_dword_t nLength; + void* lpSecurityDescriptor; + bool bInheritHandle; + } SECURITY_ATTRIBUTES; + __declspec(dllimport) _cl_dword_t __stdcall WaitForSingleObject( void* hHandle, _cl_dword_t dwMilliseconds ); + __declspec(dllimport) void* __stdcall CreateEventA( SECURITY_ATTRIBUTES* lpEventAttributes, + bool bManualReset, bool bInitialState, char* lpName ); + __declspec(dllimport) bool __stdcall SetEvent(void* hEvent); + __declspec(dllimport) bool __stdcall CloseHandle(void* hObject); + void* _beginthread( void( __stdcall *start_address )( void * ), unsigned stack_size, void *arglist ); + } + #endif //_WINBASE_ + #elif defined(_CL_HAVE_PTHREAD) + #include + #endif +#endif + +CL_NS_DEF(util) + +#ifndef _CL_DISABLE_MULTITHREADING + +#if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + +#elif defined(_CL_HAVE_WIN32_THREADS) + class CLuceneThreadIdCompare + { + public: + + enum + { // parameters for hash table + bucket_size = 4, // 0 < bucket_size + min_buckets = 8 + }; // min_buckets = 2 ^^ N, 0 < N + + bool operator()( uint64_t t1, uint64_t t2 ) const{ + return t1 < t2; + } + }; + + +#elif defined(_CL_HAVE_PTHREAD) + + class CLuceneThreadIdCompare + { + public: + enum + { // parameters for hash table + bucket_size = 4, // 0 < bucket_size + min_buckets = 8 + }; // min_buckets = 2 ^^ N, 0 < N + + bool operator()( pthread_t t1, pthread_t t2 ) const{ + //pthread_equal should be used, but it returns only non-zero if equal, so we can't use it for order compare + return t1 < t2; + } + }; + +#endif //thread impl choice + + +#else //!_CL_DISABLE_MULTITHREADING + class CLuceneThreadIdCompare + { + public: + enum + { // parameters for hash table + bucket_size = 4, // 0 < bucket_size + min_buckets = 8 + }; // min_buckets = 2 ^^ N, 0 < N + + bool operator()( char t1, char t2 ) const{ + return t1 < t2; + } + }; +#endif //!_CL_DISABLE_MULTITHREADING + +CL_NS_END + + +#endif //_config_threads_h diff -Nru clucene-core-0.9.21b/src/shared/CLucene/config/utf8.cpp clucene-core-2.3.3.4/src/shared/CLucene/config/utf8.cpp --- clucene-core-0.9.21b/src/shared/CLucene/config/utf8.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/config/utf8.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,249 @@ +/* + * Copyright (C) 1999 Tom Tromey + * Copyright (C) 2000 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * + ************************************************ + * Also licensed with permission from Tom Tromey + * and Owen Taylor under the Apache license. + * Original location: + * http://cvs.gnome.org/viewcvs/glib/glib/gutf8.c?rev=1.50&view=log + ************************************************ + * + * Copyright 2003-2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #include "CLucene/_SharedHeader.h" + +typedef unsigned long gunichar; +typedef unsigned char guchar; + +#define UTF8_COMPUTE(Char, Mask, Len) \ + if (Char < 128) \ + { \ + Len = 1; \ + Mask = 0x7f; \ + } \ + else if ((Char & 0xe0) == 0xc0) \ + { \ + Len = 2; \ + Mask = 0x1f; \ + } \ + else if ((Char & 0xf0) == 0xe0) \ + { \ + Len = 3; \ + Mask = 0x0f; \ + } \ + else if ((Char & 0xf8) == 0xf0) \ + { \ + Len = 4; \ + Mask = 0x07; \ + } \ + else if ((Char & 0xfc) == 0xf8) \ + { \ + Len = 5; \ + Mask = 0x03; \ + } \ + else if ((Char & 0xfe) == 0xfc) \ + { \ + Len = 6; \ + Mask = 0x01; \ + } \ + else \ + Len = -1; + +/*#define UTF8_LENGTH(Char) \ + ((Char) < 0x80 ? 1 : \ + ((Char) < 0x800 ? 2 : \ + ((Char) < 0x10000 ? 3 : \ + ((Char) < 0x200000 ? 4 : \ + ((Char) < 0x4000000 ? 5 : 6)))))*/ + + +#define UTF8_GET(Result, Chars, Count, Mask, Len) \ + (Result) = (Chars)[0] & (Mask); \ + for ((Count) = 1; (Count) < (Len); ++(Count)) \ + { \ + if (((Chars)[(Count)] & 0xc0) != 0x80) \ + { \ + (Result) = -1; \ + break; \ + } \ + (Result) <<= 6; \ + (Result) |= ((Chars)[(Count)] & 0x3f); \ + } + + +/** + * lucene_wctoutf8: + * @c: a ISO10646 character code + * @outbuf: output buffer, must have at least 6 bytes of space. + * If %NULL, the length will be computed and returned + * and nothing will be written to @outbuf. + * + * Converts a single character to UTF-8. + * + * Return value: number of bytes written + **/ +size_t lucene_wctoutf8(char * outbuf, const wchar_t ch) +{ + gunichar c = ch; + guchar len = 0; + int first; + int i; + + if (c < 0x80) + { + first = 0; + len = 1; + } + else if (c < 0x800) + { + first = 0xc0; + len = 2; + } + else if (c < 0x10000) + { + first = 0xe0; + len = 3; + } + else if (c < 0x200000) + { + first = 0xf0; + len = 4; + } + else if (c < 0x4000000) + { + first = 0xf8; + len = 5; + } + else + { + first = 0xfc; + len = 6; + } + + if (outbuf) + { + for (i = len - 1; i > 0; --i) + { + outbuf[i] = (char)((c & 0x3f) | 0x80); + c >>= 6; + } + outbuf[0] = (char)(c | first); + } + + return len; +} + + +/** + * lucene_utf8towc: + * @p: a pointer to Unicode character encoded as UTF-8 + * + * Converts a sequence of bytes encoded as UTF-8 to a Unicode character. + * If @p does not point to a valid UTF-8 encoded character, results are + * undefined. If you are not sure that the bytes are complete + * valid Unicode characters, you should use lucene_utf8towc_validated() + * instead. + * + * Return value: the number of p consumed for the character, or 0 on error + **/ +size_t lucene_utf8towc(wchar_t& pwc, const char *p) +{ + int i, mask = 0; + int result; + unsigned char c = (unsigned char) *p; + int len=0; + + UTF8_COMPUTE (c, mask, len); + if (len == -1) + return 0; + UTF8_GET (result, p, i, mask, len); + + pwc = result; + return len; +} + + +//this function was not taken from gnome +size_t lucene_wcstoutf8(char * result, const wchar_t * str, size_t result_length){ + char *p=result; + int i = 0; + + while (p < result + result_length-1 && str[i] != 0) + p += lucene_wctoutf8(p,str[i++]); + + *p = '\0'; + + return p-result; +} +//this function was not taken from gnome +size_t lucene_utf8towcs(wchar_t * result, const char * str, size_t result_length){ + char *sp = const_cast(str); + wchar_t *rp = result; + + while (rp < result + result_length && *sp!=0){ + size_t r = lucene_utf8towc(*rp,sp); + if ( r == 0 ) + return 0; + sp += r; + rp++; + } + + size_t ret = sp-str; + if ( ret < result_length ) + *rp = '\0'; + + return ret; +} +//get the number of bytes that make up the utf8 character. +//this function was not taken from gnome +size_t lucene_utf8charlen(const unsigned char c) +{ + int mask = 0; + int len=0; + + UTF8_COMPUTE (c, mask, len); + return len; +} +#ifndef _ASCII +//convert unicode string to a utf8 string +std::string lucene_wcstoutf8string(const wchar_t* str, size_t strlen){ + size_t i = 0; + std::string result; + char p[6]; + + while (i < strlen && str[i] != 0){ + result.append(p, lucene_wctoutf8(p,str[i++])); + } + + return result; +} +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/debug/condition.cpp clucene-core-2.3.3.4/src/shared/CLucene/debug/condition.cpp --- clucene-core-0.9.21b/src/shared/CLucene/debug/condition.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/debug/condition.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#define _CL__CND_DEBUG +#include "CLucene/_SharedHeader.h" +#include "_condition.h" +#include "CLucene/util/Misc.h" + +#define __CND_STR_PRECONDITION "PRECONDITION" +#define __CND_STR_CONDITION "CONDITION" +#define __CND_STR_WARNING "WARNING" +#define __CND_STR_MESSAGE "MESSAGE" +#define __CND_STR_DEBUGMESSAGE "DEBUG MESSAGE" +#define __CND_STR_EXIT "EXIT" + +#ifndef _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG +void _Cnd_OutDebug( const char* FormattedMsg, const char* StrTitle, const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ){ + #ifdef __WINDOWS_H + /*Display a standard messagebox*/ + MessageBox(NULL, FormattedMsg, StrTitle, (fatal==1 ? MB_ICONSTOP:MB_ICONEXCLAMATION) | MB_OK | MB_TASKMODAL); + #else + printf("%s\n",FormattedMsg); + #endif + + #if defined(_CND_DEBUG_WARN_DEBUGGER) /*attempt to signal windows debugger*/ + OutputDebugString(FormattedMsg); + DebugBreak(); /*Position debugger just before exit program*/ + #endif + + if ( fatal ) + debugFatalExit(1); +} +#endif + +void __cnd_FormatDebug( const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ) { + char M[512]; + const char* StrTitle = NULL; + + if( Mes2 ) + _snprintf(M,512,"file:%s line:%d\n%s",File,Line,Mes2); + else + _snprintf(M,512,"file:%s line:%d",File,Line); + + /*Determine which title to use*/ + switch( Title ) { + case CND_STR_PRECONDITION: { + StrTitle = __CND_STR_PRECONDITION; + break; + } + case CND_STR_CONDITION: { + StrTitle = __CND_STR_CONDITION; + break; + } + case CND_STR_WARNING: { + StrTitle = __CND_STR_WARNING; + break; + } + case CND_STR_MESSAGE: { + StrTitle = __CND_STR_MESSAGE; + break; + } + case CND_STR_DEBUGMESSAGE: { + StrTitle = __CND_STR_DEBUGMESSAGE; + break; + } + case CND_STR_EXIT: { + StrTitle = __CND_STR_EXIT; + break; + } + default: + break; + }/*switch*/ + + _Cnd_OutDebug(M, StrTitle, File, Line, Title, Mes2, fatal); +} diff -Nru clucene-core-0.9.21b/src/shared/CLucene/debug/_condition.h clucene-core-2.3.3.4/src/shared/CLucene/debug/_condition.h --- clucene-core-0.9.21b/src/shared/CLucene/debug/_condition.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/debug/_condition.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,69 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef __CONDITION_H +#define __CONDITION_H + +//todo: this is a hack +#undef CND_PRECONDITION + +/* +To enable condition debugging uncomment _CND_DEBUG in CLConfig.h +*/ + +#ifdef _CL__CND_DEBUG /* Don't include the debug code */ + /* _CL__CND_DEBUG defined, include debug code */ + + #ifdef _CND_NODEBUGTEXT + #define CND_PRECONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_PRECONDITION,NULL) + #define CND_CONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_CONDITION,NULL) + #define CND_WARNING(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_WARNING,NULL) + #define CND_MESSAGE(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_MESSAGE,NULL) + #define CND_DEBUGMESSAGE(usermessage) CND__MESSAGE(__FILE__,__LINE__,CND_STR_DEBUGMESSAGE,NULL) + #else + #define CND_PRECONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_PRECONDITION,usermessage) + #define CND_CONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_CONDITION,usermessage) + #define CND_WARNING(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_WARNING,usermessage) + #define CND_MESSAGE(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_MESSAGE,usermessage) + #define CND_DEBUGMESSAGE(usermessage) CND__MESSAGE(__FILE__,__LINE__,CND_STR_DEBUGMESSAGE,usermessage) + #endif + + //if _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG is defined, then you must implement + //this routine in the client application. The debug callback can then + //be better customised to the host application. + //Here is the default implementation: + void _Cnd_OutDebug( const char* FormattedMsg, const char* StrTitle, const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ); + + void CLUCENE_SHARED_EXPORT __cnd_FormatDebug( const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ); + #define CND__EXIT(file,line,title,mes2) {__cnd_FormatDebug(file,line,title,mes2,1);} + #define CND__EXITCONDITION(cond,file,line,title,mes2) {if(!(cond)){__cnd_FormatDebug(file,line,title,mes2,1);}} + #define CND__CONDITION(cond,file,line,title,mes2) {if(!(cond)){__cnd_FormatDebug(file,line,title,mes2,0);}} + #define CND__MESSAGE(file,line,title,mes2) {__cnd_FormatDebug(file,line,title,mes2,0);} +#else + #define CND_PRECONDITION(cond, usermessage) + #define CND_CONDITION(cond, usermessage) + #define CND_WARNING(cond,usermessage) + #define CND_MESSAGE(cond,usermessage) + #define CND_DEBUGMESSAGE(usermessage) +#endif + +#ifndef CND_STR_DEFINES + #define CND_STR_DEFINES + #define CND_STR_PRECONDITION 1 + #define CND_STR_CONDITION 2 + #define CND_STR_WARNING 3 + #define CND_STR_MESSAGE 4 + #define CND_STR_DEBUGMESSAGE 5 + #define CND_STR_EXIT 6 +#endif + +//cnd-debug exit command +#ifndef debugFatalExit + #define debugFatalExit(ret) exit(ret) +#endif + + +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/LuceneThreads.h clucene-core-2.3.3.4/src/shared/CLucene/LuceneThreads.h --- clucene-core-0.9.21b/src/shared/CLucene/LuceneThreads.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/LuceneThreads.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _LuceneThreads_h +#define _LuceneThreads_h + + +CL_NS_DEF(util) +class CLuceneThreadIdCompare; + +#if defined(_CL_DISABLE_MULTITHREADING) + #define SCOPED_LOCK_MUTEX(theMutex) + #define DEFINE_MUTEX(x) + #define DEFINE_MUTABLE_MUTEX(x) + #define DEFINE_CONDITION(x) + #define STATIC_DEFINE_MUTEX(x) + #define CONDITION_WAIT(theMutex, theCondition) + #define CONDITION_NOTIFYALL(theCondition) + #define _LUCENE_CURRTHREADID 1 + #define _LUCENE_THREADID_TYPE int + #define _LUCENE_THREAD_FUNC(name, argName) int name(void* argName) + #define _LUCENE_THREAD_FUNC_RETURN(val) return (int)val; + #define _LUCENE_THREAD_CREATE(func, arg) (*func)(arg) + #define _LUCENE_THREAD_JOIN(value) //nothing to do... + #define _LUCENE_THREADMUTEX void* + + #define _LUCENE_ATOMIC_INC(theInteger) (++(*theInteger)) + #define _LUCENE_ATOMIC_DEC(theInteger) (--(*theInteger)) + #define _LUCENE_ATOMIC_INT int +#else + #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + //do nothing + #else + class mutexGuard; + + #if defined(_CL_HAVE_PTHREAD) + #define _LUCENE_THREADID_TYPE pthread_t + #define _LUCENE_THREAD_FUNC(name, argName) void* name(void* argName) //< use this macro to correctly define the thread start routine + #define _LUCENE_THREAD_FUNC_RETURN(val) return (void*)val; + typedef void* (luceneThreadStartRoutine)(void* lpThreadParameter ); + + class CLUCENE_SHARED_EXPORT mutex_thread + { + public: + struct Internal; + Internal* _internal; + + mutex_thread(const mutex_thread& clone); + mutex_thread(); + ~mutex_thread(); + void lock(); + void unlock(); + static _LUCENE_THREADID_TYPE _GetCurrentThreadId(); + static _LUCENE_THREADID_TYPE CreateThread(luceneThreadStartRoutine* func, void* arg); + static void JoinThread(_LUCENE_THREADID_TYPE id); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + class CLUCENE_SHARED_EXPORT shared_condition{ + private: + class Internal; + Internal* _internal; + public: + shared_condition(); + ~shared_condition(); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + #define _LUCENE_ATOMIC_INT uint32_t + #define _LUCENE_ATOMIC_INT_SET(x,v) x=v + #define _LUCENE_ATOMIC_INT_GET(x) x + #else + class CLUCENE_SHARED_EXPORT __LUCENE_ATOMIC_INT{ + public: + int value; + CL_NS(util)::mutex_thread THIS_LOCK; + }; + #define _LUCENE_ATOMIC_INT CL_NS(util)::__LUCENE_ATOMIC_INT + #define _LUCENE_ATOMIC_INT_SET(x,v) x.value=v + #define _LUCENE_ATOMIC_INT_GET(x) x.value + #endif + + class CLUCENE_SHARED_EXPORT atomic_threads{ + public: + static int32_t atomic_increment(_LUCENE_ATOMIC_INT* theInteger); + static int32_t atomic_decrement(_LUCENE_ATOMIC_INT* theInteger); + }; + + #define _LUCENE_ATOMIC_INC(theInteger) CL_NS(util)::atomic_threads::atomic_increment(theInteger) + #define _LUCENE_ATOMIC_DEC(theInteger) CL_NS(util)::atomic_threads::atomic_decrement(theInteger) + + #elif defined(_CL_HAVE_WIN32_THREADS) + #define _LUCENE_THREADID_TYPE uint64_t + #define _LUCENE_THREAD_FUNC(name, argName) void __stdcall name(void* argName) //< use this macro to correctly define the thread start routine + #define _LUCENE_THREAD_FUNC_RETURN(val) CL_NS(util)::mutex_thread::_exitThread(val) + + #define _LUCENE_ATOMIC_INC(theInteger) CL_NS(util)::mutex_thread::atomic_increment(theInteger) + #define _LUCENE_ATOMIC_DEC(theInteger) CL_NS(util)::mutex_thread::atomic_decrement(theInteger) +#ifdef _M_X64 + #define _LUCENE_ATOMIC_INT long long +#else + #define _LUCENE_ATOMIC_INT long +#endif + #define _LUCENE_ATOMIC_INT_SET(x,v) x=v + #define _LUCENE_ATOMIC_INT_GET(x) x + + typedef void (__stdcall luceneThreadStartRoutine)(void* lpThreadParameter ); + class CLUCENE_SHARED_EXPORT mutex_thread + { + private: + struct Internal; + Internal* _internal; + public: + mutex_thread(const mutex_thread& clone); + mutex_thread(); + ~mutex_thread(); + void lock(); + void unlock(); + static void _exitThread(int ret); + static _LUCENE_THREADID_TYPE _GetCurrentThreadId(); + static _LUCENE_THREADID_TYPE CreateThread(luceneThreadStartRoutine* func, void* arg); + static void JoinThread(_LUCENE_THREADID_TYPE id); + + static int32_t atomic_increment(_LUCENE_ATOMIC_INT* theInteger); + static int32_t atomic_decrement(_LUCENE_ATOMIC_INT* theInteger); + }; + class CLUCENE_SHARED_EXPORT shared_condition{ + private: + class Internal; + Internal* _internal; + public: + shared_condition(); + ~shared_condition(); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + #else + #error A valid thread library was not found + #endif //mutex types + + #define _LUCENE_THREAD_CREATE(func, arg) CL_NS(util)::mutex_thread::CreateThread(func,arg) + #define _LUCENE_THREAD_JOIN(id) CL_NS(util)::mutex_thread::JoinThread(id) + #define _LUCENE_CURRTHREADID CL_NS(util)::mutex_thread::_GetCurrentThreadId() + #define _LUCENE_THREADMUTEX CL_NS(util)::mutex_thread + #define _LUCENE_THREADCOND CL_NS(util)::shared_condition + #endif //don't implement + + /** @internal */ + class CLUCENE_SHARED_EXPORT mutexGuard + { + private: + _LUCENE_THREADMUTEX* mrMutex; + mutexGuard(const mutexGuard& clone); + public: + mutexGuard( _LUCENE_THREADMUTEX& rMutex ); + ~mutexGuard(); + }; + + #define SCOPED_LOCK_MUTEX(theMutex) CL_NS(util)::mutexGuard theMutexGuard(theMutex); + #define DEFINE_MUTEX(theMutex) _LUCENE_THREADMUTEX theMutex; + #define DEFINE_CONDITION(theCondition) _LUCENE_THREADCOND theCondition; + #define DEFINE_MUTABLE_MUTEX(theMutex) mutable _LUCENE_THREADMUTEX theMutex; + #define STATIC_DEFINE_MUTEX(theMutex) static _LUCENE_THREADMUTEX theMutex; + + #define CONDITION_WAIT(theMutex, theCondition) theCondition.Wait(&theMutex); + #define CONDITION_NOTIFYALL(theCondition) theCondition.NotifyAll(); + +#endif //_CL_DISABLE_MULTITHREADING +CL_NS_END + +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/SharedHeader.cpp clucene-core-2.3.3.4/src/shared/CLucene/SharedHeader.cpp --- clucene-core-0.9.21b/src/shared/CLucene/SharedHeader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/SharedHeader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "CLucene/_SharedHeader.h" + + +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif + + +const TCHAR* _LUCENE_BLANK_STRING=_T(""); +const char* _LUCENE_BLANK_ASTRING=""; + + +#if defined(_ASCII) + #if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Using ascii mode!!!==================") + #else + #warning "==================Using ascii mode!!!==================" + #endif +#endif + +wchar_t* lucene_wcsdup( const wchar_t* str ){ + size_t len = wcslen(str); + wchar_t* ret = (wchar_t*)malloc( (len + 1) * sizeof(wchar_t) ); + wcscpy(ret, str); + return ret; +} diff -Nru clucene-core-0.9.21b/src/shared/CLucene/_SharedHeader.h clucene-core-2.3.3.4/src/shared/CLucene/_SharedHeader.h --- clucene-core-0.9.21b/src/shared/CLucene/_SharedHeader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/_SharedHeader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef lucene_internal_sharedheader_h +#define lucene_internal_sharedheader_h + +#define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL + +#include "CLucene/_clucene-config.h" +#include "CLucene/SharedHeader.h" + +//don't show deprecated warnings while building internally... +#undef _CL_DEPRECATE_TEXT +#define _CL_DEPRECATE_TEXT(_Text) + +#define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF) +#define LUCENE_INT64_MIN_SHOULDBE (-LUCENE_INT64_MAX_SHOULDBE - _ILONGLONG(1) ) + +//required globally (internally only) +#include +#include + +//we always need this stuff.... +#include "CLucene/debug/_condition.h" +#include "CLucene/LuceneThreads.h" +#include "CLucene/config/repl_tchar.h" +#include "CLucene/config/repl_wchar.h" +#include "CLucene/config/repl_wctype.h" //replacements for functions + +#define cl_min(a,b) ((a)>(b) ? (b) : (a)) +#define cl_min3(a,b,c) ((a)<(b) ? ((a)<(c) ? (a) : (c)) : ((b)<(c) ? (b) : (c))) +#define cl_max(a,b) ((a)>(b) ? (a): (b)) +#define cl_max3(a,b,c) ((a)>(b) ? ((a)>(c) ? (a) : (c)) : ((b)>(c) ? (b) : (c))) + +#ifdef _CL_HAVE_SAFE_CRT + #define cl_sprintf sprintf_s + #define cl_stprintf _stprintf_s + #define cl_strcpy(Dst,Src,DstLen) strcpy_s(Dst,DstLen,Src) +#else + #define cl_sprintf _snprintf + #define cl_stprintf _sntprintf + #define cl_strcpy(Dst,Src,DstLen) strcpy(Dst,Src) +#endif + + +///a blank string... +CLUCENE_SHARED_EXPORT extern const TCHAR* _LUCENE_BLANK_STRING; +#define LUCENE_BLANK_STRING _LUCENE_BLANK_STRING +CLUCENE_SHARED_EXPORT extern const char* _LUCENE_BLANK_ASTRING; +#define LUCENE_BLANK_ASTRING _LUCENE_BLANK_ASTRING + +#if defined(_WIN32) || defined(_WIN64) + #define PATH_DELIMITERA "\\" +#else + #define PATH_DELIMITERA "/" +#endif + +#define _LUCENE_SLEEP(ms) CL_NS(util)::Misc::sleep(ms) + +//if a wide character is being converted to a ascii character and it +//cannot fit, this character is used instead. +#define LUCENE_OOR_CHAR(c) ((char)(((unsigned short)c)&0xFF)) + + +#endif //lucene_internal_sharedheader_h diff -Nru clucene-core-0.9.21b/src/shared/CLucene/SharedHeader.h clucene-core-2.3.3.4/src/shared/CLucene/SharedHeader.h --- clucene-core-0.9.21b/src/shared/CLucene/SharedHeader.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/SharedHeader.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,213 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef lucene_sharedheader_h +#define lucene_sharedheader_h + +/** +* This header contains definitions and macros for helping create cross-platform code. +* It is primarily for use by the clucene-core library, but is split off so that +* other applications such as the demo, test, benchmarks, etc can benefit from the +* cross platform code. Cross platform code is not distributed with the clucene-core +* and is not available through the shared library. +*/ + +#include "CLucene/clucene-config.h" + +//some early definitions +#if defined(_MSC_VER) || defined(__BORLANDC__) + #define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning +#endif + + +//////////////////////////////////////////////////////// +//Are we in unicode mode? +//////////////////////////////////////////////////////// +#if defined(_MBCS) || defined(_ASCII) + #undef _ASCII + #undef _UCS2 + #define _ASCII +#elif defined(_UNICODE) + #ifndef _UCS2 + #define _UCS2 + #endif +#elif !defined(_UCS2) + #define _UCS2 +#endif + +//msvc needs unicode define so that it uses unicode library +#ifdef _UCS2 + #undef _UNICODE + #define _UNICODE + #undef _ASCII +#else + #undef _UNICODE + #undef _UCS2 +#endif +//////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////// +//platform includes that MUST be included for the public headers to work... +//////////////////////////////////////////////////////// +#include //need this for wchar_t, size_t, NULL +#ifdef _CL_HAVE_STDINT_H + #include //need this for int32_t, etc +#endif +#include //required for float_t +#include //need to include this really early... + +#ifdef _CL_HAVE_TCHAR_H + #include //required for _T and TCHAR +#endif + +//////////////////////////////////////////////////////// +//namespace helper +//////////////////////////////////////////////////////// +#if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS) + //do nothing +#elif !defined(DISABLE_NAMESPACE) && defined(_CL_HAVE_NAMESPACES) + #define CL_NS_DEF(sub) namespace lucene{ namespace sub{ + #define CL_NS_DEF2(sub,sub2) namespace lucene{ namespace sub{ namespace sub2 { + + #define CL_NS_END }} + #define CL_NS_END2 }}} + + #define CL_NS_USE(sub) using namespace lucene::sub; + #define CL_NS_USE2(sub,sub2) using namespace lucene::sub::sub2; + + #define CL_NS(sub) lucene::sub + #define CL_NS2(sub,sub2) lucene::sub::sub2 + + #define CL_STRUCT_DEF(sub,clazz) namespace lucene { namespace sub{ struct clazz; } } + #define CL_CLASS_DEF(sub,clazz) namespace lucene { namespace sub{ class clazz; } } + #define CL_CLASS_DEF2(sub,sub2, clazz) namespace lucene { namespace sub{ namespace sub2{ class clazz; } } } + + #define CL_TEMPATE_DEF(sub, clazz, typedefs) namespace lucene { namespace sub{ template class clazz; }} + #define CL_TYPE_DEF(sub, clazz, def) namespace lucene { namespace sub{ typedef def clazz; }} +#else + #define CL_NS_DEF(sub) + #define CL_NS_DEF2(sub, sub2) + #define CL_NS_END + #define CL_NS_END2 + #define CL_NS_USE(sub) + #define CL_NS_USE2(sub,sub2) + #define CL_NS(sub) + #define CL_NS2(sub,sub2) + #define CL_CLASS_DEF(sub,clazz) class clazz; + #define CL_CLASS_DEF2(sub,sub2, clazz) class clazz; +#endif + +#if defined(LUCENE_NO_STDC_NAMESPACE) + //todo: haven't actually tested this on a non-stdc compliant compiler + #define CL_NS_STD(func) ::func +#else + #define CL_NS_STD(func) std::func +#endif +// +//////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////// +// EXPORTS definition +//////////////////////////////////////////////////////// +#if defined(_WIN32) || defined(_WIN64) + #define CLUCENE_EXPORT_DECL __declspec(dllexport) + #define CLUCENE_IMPORT_DECL __declspec(dllimport) + #define CLUCENE_LOCAL_DECL +#elif defined(_CL_HAVE_GCCVISIBILITYPATCH) + #define CLUCENE_EXPORT_DECL __attribute__ ((visibility("default"))) + #define CLUCENE_LOCAL_DECL __attribute__ ((visibility("hidden"))) + #define CLUCENE_IMPORT_DECL +#else + #define CLUCENE_EXPORT_DECL + #define CLUCENE_IMPORT_DECL + #define CLUCENE_LOCAL_DECL +#endif + +//define for the libraries +#if defined(clucene_shared_EXPORTS) + #define CLUCENE_SHARED_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_SHARED_LIB) + #define CLUCENE_SHARED_EXPORT //don't export if we are building a static library +#else + #define CLUCENE_SHARED_EXPORT CLUCENE_IMPORT_DECL +#endif +#if defined(clucene_core_EXPORTS) + #define CLUCENE_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_CORE_LIB) + #define CLUCENE_EXPORT +#else + #define CLUCENE_EXPORT CLUCENE_IMPORT_DECL +#endif +#if defined(clucene_contribs_lib_EXPORTS) + #define CLUCENE_CONTRIBS_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_CONTRIBS_LIB) + #define CLUCENE_CONTRIBS_EXPORT +#else + #define CLUCENE_CONTRIBS_EXPORT CLUCENE_IMPORT_DECL +#endif +#ifndef CLUCENE_LOCAL + #define CLUCENE_LOCAL +#endif + +//inline definitions +#if defined(__MINGW32__) || defined(_MSC_VER) + #define CLUCENE_SHARED_INLINE_EXPORT + #define CLUCENE_INLINE_EXPORT + #define CLUCENE_CONTRIBS_INLINE_EXPORT +#else + #define CLUCENE_SHARED_INLINE_EXPORT CLUCENE_SHARED_EXPORT + #define CLUCENE_INLINE_EXPORT CLUCENE_EXPORT + #define CLUCENE_CONTRIBS_INLINE_EXPORT CLUCENE_CONTRIBS_EXPORT +#endif +//////////////////////////////////////////////////////// + + +//todo: put this logic in cmake +#if defined(_MSC_VER) + #if _MSC_FULL_VER >= 140050320 + #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) + #elif _MSC_VER >= 1300 + #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated) + #else + #define _CL_DEPRECATE_TEXT(_Text) + #endif +#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) + #define _CL_DEPRECATE_TEXT(_Text) __attribute__((__deprecated__)) +#else + #define _CL_DEPRECATE_TEXT(_Text) +#endif +#define _CL_DEPRECATED(_NewItem) _CL_DEPRECATE_TEXT("This function or variable has been superceded by newer library or operating system functionality. Consider using " #_NewItem " instead. See online help for details.") +// +//////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////// +// boost stuff +//////////////////////////////////////////////////////// +#if defined(_MSC_VER) +# pragma warning (disable : 4251) // disable exported dll function +# endif + +//////////////////////////////////////////////////////// +//Class interfaces +//////////////////////////////////////////////////////// +#include "CLucene/debug/lucenebase.h" +//////////////////////////////////////////////////////// + +//memory handling macros/functions +#include "CLucene/debug/mem.h" + +#ifdef DMALLOC + #include + #include + #include +#endif + +#endif //lucene_sharedheader_h diff -Nru clucene-core-0.9.21b/src/shared/CLucene/util/deflate.cpp clucene-core-2.3.3.4/src/shared/CLucene/util/deflate.cpp --- clucene-core-0.9.21b/src/shared/CLucene/util/deflate.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/util/deflate.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1714 @@ +/* deflate.c -- compress data using the deflation algorithm + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process depends on being able to identify portions + * of the input text which are identical to earlier input (within a + * sliding window trailing behind the input currently being processed). + * + * The most straightforward technique turns out to be the fastest for + * most input files: try all possible matches and select the longest. + * The key feature of this algorithm is that insertions into the string + * dictionary are very simple and thus fast, and deletions are avoided + * completely. Insertions are performed at each input character, whereas + * string matches are performed only when the previous match ends. So it + * is preferable to spend more time in matches to allow very fast string + * insertions and avoid deletions. The matching algorithm for small + * strings is inspired from that of Rabin & Karp. A brute force approach + * is used to find longer strings when a small match has been found. + * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze + * (by Leonid Broukhis). + * A previous version of this file used a more sophisticated algorithm + * (by Fiala and Greene) which is guaranteed to run in linear amortized + * time, but has a larger average cost, uses more memory and is patented. + * However the F&G algorithm may be faster for some highly redundant + * files if the parameter max_chain_length (described below) is too large. + * + * ACKNOWLEDGEMENTS + * + * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and + * I found it in 'freeze' written by Leonid Broukhis. + * Thanks to many people for bug reports and testing. + * + * REFERENCES + * + * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". + * Available in http://www.ietf.org/rfc/rfc1951.txt + * + * A description of the Rabin and Karp algorithm is given in the book + * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. + * + * Fiala,E.R., and Greene,D.H. + * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 + * + */ + +/* @(#) $Id$ */ + +#include "zlib/deflate.h" + +const char deflate_copyright[] = + " deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +/* Compression function. Returns the block state after the call. */ + +local void fill_window OF((deflate_state *s)); +local block_state deflate_stored OF((deflate_state *s, int flush)); +local block_state deflate_fast OF((deflate_state *s, int flush)); +#ifndef FASTEST +local block_state deflate_slow OF((deflate_state *s, int flush)); +#endif +local void lm_init OF((deflate_state *s)); +local void putShortMSB OF((deflate_state *s, uInt b)); +local void flush_pending OF((z_streamp strm)); +local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +#ifndef FASTEST +#ifdef ASMV + void match_init OF((void)); /* asm code initialization */ + uInt longest_match OF((deflate_state *s, IPos cur_match)); +#else +local uInt longest_match OF((deflate_state *s, IPos cur_match)); +#endif +#endif +local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); + +#ifdef DEBUG +local void check_match OF((deflate_state *s, IPos start, IPos match, + int length)); +#endif + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +#ifdef FASTEST +local const config configuration_table[2] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ +#else +local const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ +#endif + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +#define EQUAL 0 +/* result of memcmp for equal strings */ + +#ifndef NO_DUMMY_DECL +struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ +#endif + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to to UPDATE_HASH are made with consecutive + * input characters, so that a running hash key can be computed from the + * previous key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of str are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* ========================================================================= */ +int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version, int stream_size) +{ + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int ZEXPORT deflateInit2_( + z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy, + const char *version, + int stream_size) +{ + deflate_state *s; + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; + } + if (strm == Z_NULL) return Z_STREAM_ERROR; + + strm->msg = Z_NULL; + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + + s->wrap = wrap; + s->gzhead = Z_NULL; + s->w_bits = windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= */ +int ZEXPORT deflateSetDictionary ( + z_streamp strm, + const Bytef *dictionary, + uInt dictLength +){ + deflate_state *s; + uInt length = dictLength; + uInt n; + IPos hash_head = 0; + + if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || + strm->state->wrap == 2 || + (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) + return Z_STREAM_ERROR; + + s = strm->state; + if (s->wrap) + strm->adler = adler32(strm->adler, dictionary, dictLength); + + if (length < MIN_MATCH) return Z_OK; + if (length > MAX_DIST(s)) { + length = MAX_DIST(s); + dictionary += dictLength - length; /* use the tail of the dictionary */ + } + zmemcpy(s->window, dictionary, length); + s->strstart = length; + s->block_start = (long)length; + + /* Insert all strings in the hash table (except for the last two bytes). + * s->lookahead stays null, so s->ins_h will be recomputed at the next + * call of fill_window. + */ + s->ins_h = s->window[0]; + UPDATE_HASH(s, s->ins_h, s->window[1]); + for (n = 0; n <= length - MIN_MATCH; n++) { + INSERT_STRING(s, n, hash_head); + } + if (hash_head) hash_head = 0; /* to make compiler happy */ + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateReset (z_streamp strm) +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + lm_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateSetHeader ( z_streamp strm, gz_headerp head) +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (strm->state->wrap != 2) return Z_STREAM_ERROR; + strm->state->gzhead = head; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePrime ( + z_streamp strm, + int bits, + int value +){ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + strm->state->bi_valid = bits; + strm->state->bi_buf = (ush)(value & ((1 << bits) - 1)); + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateParams( + z_streamp strm, + int level, + int strategy +){ + deflate_state *s; + compress_func func; + int err = Z_OK; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + func = configuration_table[s->level].func; + + if (func != configuration_table[level].func && strm->total_in != 0) { + /* Flush the last buffer: */ + err = deflate(strm, Z_PARTIAL_FLUSH); + } + if (s->level != level) { + s->level = level; + s->max_lazy_match = configuration_table[level].max_lazy; + s->good_match = configuration_table[level].good_length; + s->nice_match = configuration_table[level].nice_length; + s->max_chain_length = configuration_table[level].max_chain; + } + s->strategy = strategy; + return err; +} + +/* ========================================================================= */ +int ZEXPORT deflateTune( + z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain +){ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + s->good_match = good_length; + s->max_lazy_match = max_lazy; + s->nice_match = nice_length; + s->max_chain_length = max_chain; + return Z_OK; +} + +/* ========================================================================= + * For the default windowBits of 15 and memLevel of 8, this function returns + * a close to exact, as well as small, upper bound on the compressed size. + * They are coded as constants here for a reason--if the #define's are + * changed, then this function needs to be changed as well. The return + * value for 15 and 8 only works for those exact settings. + * + * For any setting other than those defaults for windowBits and memLevel, + * the value returned is a conservative worst case for the maximum expansion + * resulting from using fixed blocks instead of stored blocks, which deflate + * can emit on compressed data for some combinations of the parameters. + * + * This function could be more sophisticated to provide closer upper bounds + * for every combination of windowBits and memLevel, as well as wrap. + * But even the conservative upper bound of about 14% expansion does not + * seem onerous for output buffer allocation. + */ +uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) +{ + deflate_state *s; + uLong destLen; + + /* conservative upper bound */ + destLen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; + + /* if can't get parameters, return conservative bound */ + if (strm == Z_NULL || strm->state == Z_NULL) + return destLen; + + /* if not default parameters, return conservative bound */ + s = strm->state; + if (s->w_bits != 15 || s->hash_bits != 8 + 7) + return destLen; + + /* default settings: return tight bound for that case */ + return compressBound(sourceLen); +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +local void putShortMSB (deflate_state *s, uInt b) +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->next_out buffer and copying into it. + * (See also read_buf()). + */ +local void flush_pending(z_streamp strm) +{ + unsigned len = strm->state->pending; + + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, strm->state->pending_out, len); + strm->next_out += len; + strm->state->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + strm->state->pending -= len; + if (strm->state->pending == 0) { + strm->state->pending_out = strm->state->pending_buf; + } +} + +/* ========================================================================= */ +int ZEXPORT deflate (z_streamp strm, int flush) +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + flush > Z_FINISH || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + s->strm = strm; /* just in case */ + old_flush = s->last_flush; + s->last_flush = flush; + + /* Write the header */ + if (s->status == INIT_STATE) { +#ifdef GZIP + if (s->wrap == 2) { + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s->status = BUSY_STATE; + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; + } + } + else +#endif + { + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + s->status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + } + } +#ifdef GZIP + if (s->status == EXTRA_STATE) { + if (s->gzhead->extra != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + + while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) + break; + } + put_byte(s, s->gzhead->extra[s->gzindex]); + s->gzindex++; + } + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (s->gzindex == s->gzhead->extra_len) { + s->gzindex = 0; + s->status = NAME_STATE; + } + } + else + s->status = NAME_STATE; + } + if (s->status == NAME_STATE) { + if (s->gzhead->name != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->name[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) { + s->gzindex = 0; + s->status = COMMENT_STATE; + } + } + else + s->status = COMMENT_STATE; + } + if (s->status == COMMENT_STATE) { + if (s->gzhead->comment != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->comment[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) + s->status = HCRC_STATE; + } + else + s->status = HCRC_STATE; + } + if (s->status == HCRC_STATE) { + if (s->gzhead->hcrc) { + if (s->pending + 2 > s->pending_buf_size) + flush_pending(strm); + if (s->pending + 2 <= s->pending_buf_size) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + } + } + else + s->status = BUSY_STATE; + } +#endif + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && flush <= old_flush && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + Assert(strm->avail_out > 0, "bug2"); + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int ZEXPORT deflateEnd (z_streamp strm) +{ + int status; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + status = strm->state->status; + if (status != INIT_STATE && + status != EXTRA_STATE && + status != NAME_STATE && + status != COMMENT_STATE && + status != HCRC_STATE && + status != BUSY_STATE && + status != FINISH_STATE) { + return Z_STREAM_ERROR; + } + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* ========================================================================= + * Copy the source state to the destination state. + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +int ZEXPORT deflateCopy (z_streamp dest, z_streamp source) +{ +#ifdef MAXSEG_64K + return Z_STREAM_ERROR; +#else + deflate_state *ds; + deflate_state *ss; + ushf *overlay; + + + if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + return Z_STREAM_ERROR; + } + + ss = source->state; + + zmemcpy(dest, source, sizeof(z_stream)); + + ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; + zmemcpy(ds, ss, sizeof(deflate_state)); + ds->strm = dest; + + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); + ds->pending_buf = (uchf *) overlay; + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { + deflateEnd (dest); + return Z_MEM_ERROR; + } + /* following zmemcpy do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); + ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; + ds->bl_desc.dyn_tree = ds->bl_tree; + + return Z_OK; +#endif /* MAXSEG_64K */ +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local int read_buf(z_streamp strm, Bytef *buf, unsigned size) +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, strm->next_in, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, strm->next_in, len); + } +#endif + zmemcpy(buf, strm->next_in, len); + strm->next_in += len; + strm->total_in += len; + + return (int)len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init (deflate_state *s) +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +#ifndef FASTEST +#ifdef ASMV + match_init(); /* initialize the asm code */ +#endif +#endif +} + +#ifndef FASTEST +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +#ifndef ASMV +/* For 80x86 and 680x0, an optimized version will be provided in match.asm or + * match.S. The code will be functionally equivalent. + */ +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} +#endif /* ASMV */ +#endif /* FASTEST */ + +/* --------------------------------------------------------------------------- + * Optimized version for level == 1 or strategy == Z_RLE only + */ +local uInt longest_match_fast(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + + match = s->window + cur_match; + + /* Return failure if the match length is less than 2: + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match += 2; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + + if (len < MIN_MATCH) return MIN_MATCH - 1; + + s->match_start = cur_match; + return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; +} + +#ifdef DEBUG +/* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +local void check_match(s, start, match, length) + deflate_state *s; + IPos start, match; + int length; +{ + /* check that the match is indeed a match */ + if (zmemcmp(s->window + match, + s->window + start, length) != EQUAL) { + fprintf(stderr, " start %u, match %u, length %d\n", + start, match, length); + do { + fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); + } while (--length != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { + fprintf(stderr,"\\[%d,%d]", start-match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } +} +#else +# define check_match(s, start, match, length) +#endif /* DEBUG */ + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(s) + deflate_state *s; +{ + register unsigned n, m; + register Posf *p; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + /* %%% avoid this when Z_RLE */ + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + } while (--n); + + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif + more += wsize; + } + if (s->strm->avail_in == 0) return; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead >= MIN_MATCH) { + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, eof) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (eof)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, eof) { \ + FLUSH_BLOCK_ONLY(s, eof); \ + if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +local block_state deflate_stored(s, flush) + deflate_state *s; + int flush; +{ + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + ulg max_block_size = 0xffff; + ulg max_start; + + if (max_block_size > s->pending_buf_size - 5) { + max_block_size = s->pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s->lookahead <= 1) { + + Assert(s->strstart < s->w_size+MAX_DIST(s) || + s->block_start >= (long)s->w_size, "slide too late"); + + fill_window(s); + if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + if (s->lookahead == 0) break; /* flush the current block */ + } + Assert(s->block_start >= 0L, "block gone"); + + s->strstart += s->lookahead; + s->lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + max_start = s->block_start + max_block_size; + if (s->strstart == 0 || (ulg)s->strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s->lookahead = (uInt)(s->strstart - max_start); + s->strstart = (uInt)max_start; + FLUSH_BLOCK(s, 0); + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { + FLUSH_BLOCK(s, 0); + } + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +local block_state deflate_fast(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ +#ifdef FASTEST + if ((s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) || + (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { + s->match_length = longest_match_fast (s, hash_head); + } +#else + if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } +#endif + /* longest_match() or longest_match_fast() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +#ifndef FASTEST +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +local block_state deflate_slow(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } + /* longest_match() or longest_match_fast() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif /* FASTEST */ + +#if 0 +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +local block_state deflate_rle(s, flush) + deflate_state *s; + int flush; +{ + int bflush; /* set if current block must be flushed */ + uInt run; /* length of run */ + uInt max; /* maximum length of run */ + uInt prev; /* byte at distance one to match */ + Bytef *scan; /* scan for end of run */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest encodable run. + */ + if (s->lookahead < MAX_MATCH) { + fill_window(s); + if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + run = 0; + if (s->strstart > 0) { /* if there is a previous byte, that is */ + max = s->lookahead < MAX_MATCH ? s->lookahead : MAX_MATCH; + scan = s->window + s->strstart - 1; + prev = *scan++; + do { + if (*scan++ != prev) + break; + } while (++run < max); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (run >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, run); + _tr_tally_dist(s, 1, run - MIN_MATCH, bflush); + s->lookahead -= run; + s->strstart += run; + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/util/dirent.cpp clucene-core-2.3.3.4/src/shared/CLucene/util/dirent.cpp --- clucene-core-0.9.21b/src/shared/CLucene/util/dirent.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/util/dirent.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,224 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Matt J. Weinstein +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#if !defined(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H) +#include "dirent.h" +#include +#include + + +DIR * +opendir (const char *szPath) +{ + DIR *nd; + char szFullPath[CL_MAX_PATH]; + + errno = 0; + + if (!szPath) + { + errno = EFAULT; + return NULL; + } + + if (szPath[0] == '\0') + { + errno = ENOTDIR; + return NULL; + } + + /* Attempt to determine if the given path really is a directory. */ + struct cl_stat_t rcs; + if ( fileStat(szPath,&rcs) == -1) + { + /* call GetLastError for more error info */ + errno = ENOENT; + return NULL; + } + if (!(rcs.st_mode & _S_IFDIR)) + { + /* Error, entry exists but not a directory. */ + errno = ENOTDIR; + return NULL; + } + + /* Make an absolute pathname. */ + _realpath(szPath,szFullPath); + + /* Allocate enough space to store DIR structure and the complete + * directory path given. */ + //nd = (DIR *) malloc (sizeof (DIR) + _tcslen (szFullPath) + _tcslen (DIRENT_SLASH) + + // _tcslen (DIRENT_SEARCH_SUFFIX)+1); + nd = new DIR; + + if (!nd) + { + /* Error, out of memory. */ + errno = ENOMEM; + return NULL; + } + + /* Create the search expression. */ + strcpy (nd->dd_name, szFullPath); + + /* Add on a slash if the path does not end with one. */ + if (nd->dd_name[0] != '\0' && + nd->dd_name[strlen (nd->dd_name) - 1] != '/' && + nd->dd_name[strlen (nd->dd_name) - 1] != '\\') + { + strcat (nd->dd_name, DIRENT_SLASH); + } + + /* Add on the search pattern */ + strcat (nd->dd_name, DIRENT_SEARCH_SUFFIX); + + /* Initialize handle to -1 so that a premature closedir doesn't try + * to call _findclose on it. */ + nd->dd_handle = -1; + + /* Initialize the status. */ + nd->dd_stat = 0; + + /* Initialize the dirent structure. ino and reclen are invalid under + * Win32, and name simply points at the appropriate part of the + * findfirst_t structure. */ + //nd->dd_dir.d_ino = 0; + //nd->dd_dir.d_reclen = 0; + nd->dd_dir.d_namlen = 0; + nd->dd_dir.d_name = nd->dd_dta.name; + + return nd; +} + + +struct dirent * readdir (DIR * dirp) +{ + errno = 0; + + /* Check for valid DIR struct. */ + if (!dirp) + { + errno = EFAULT; + return NULL; + } + + if (dirp->dd_dir.d_name != dirp->dd_dta.name) + { + /* The structure does not seem to be set up correctly. */ + errno = EINVAL; + return NULL; + } + + bool bCallFindNext = true; + + if (dirp->dd_stat < 0) + { + /* We have already returned all files in the directory + * (or the structure has an invalid dd_stat). */ + return NULL; + } + else if (dirp->dd_stat == 0) + { + /* We haven't started the search yet. */ + /* Start the search */ + dirp->dd_handle = _findfirst (dirp->dd_name, &(dirp->dd_dta)); + + if (dirp->dd_handle == -1) + { + /* Whoops! Seems there are no files in that + * directory. */ + dirp->dd_stat = -1; + } + else + { + dirp->dd_stat = 1; + } + + /* Dont call _findnext first time. */ + bCallFindNext = false; + } + + while (dirp->dd_stat > 0) + { + if (bCallFindNext) + { + /* Get the next search entry. */ + if (_findnext (dirp->dd_handle, &(dirp->dd_dta))) + { + /* We are off the end or otherwise error. */ + _findclose (dirp->dd_handle); + dirp->dd_handle = -1; + dirp->dd_stat = -1; + return NULL; + } + else + { + /* Update the status to indicate the correct + * number. */ + dirp->dd_stat++; + } + } + + /* Successfully got an entry. Everything about the file is + * already appropriately filled in except the length of the + * file name. */ + dirp->dd_dir.d_namlen = strlen (dirp->dd_dir.d_name); + + bool bThisFolderOrUpFolder = dirp->dd_dir.d_name[0] == '.' && + (dirp->dd_dir.d_name[1] == 0 || (dirp->dd_dir.d_name[1] == '.' && dirp->dd_dir.d_name[2] == 0)); + + if (!bThisFolderOrUpFolder) + { + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + size_t bl = strlen(dirp->dd_name)-strlen(DIRENT_SEARCH_SUFFIX); + strncpy(buffer,dirp->dd_name,bl); + buffer[bl]=0; + strcat(buffer, dirp->dd_dir.d_name); + if ( fileStat(buffer,&buf) == 0 ) + { + /* Finally we have a valid entry. */ + return &dirp->dd_dir; + } + } + + /* Allow to find next file. */ + bCallFindNext = true; + } + + return NULL; +} + + + +int32_t +closedir (DIR * dirp) +{ + int32_t rc; + + errno = 0; + rc = 0; + + if (!dirp) + { + errno = EFAULT; + return -1; + } + + if (dirp->dd_handle != -1) + { + rc = _findclose (dirp->dd_handle); + } + + /* Delete the dir structure. */ + _CLVDELETE(dirp); + + return rc; +} +#endif //HAVE_DIRENT_H + diff -Nru clucene-core-0.9.21b/src/shared/CLucene/util/dirent.h clucene-core-2.3.3.4/src/shared/CLucene/util/dirent.h --- clucene-core-0.9.21b/src/shared/CLucene/util/dirent.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/util/dirent.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,109 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Matt J. Weinstein +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef lucene_util_dirent_H +#define lucene_util_dirent_H + + +#if !defined(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H) + +#ifdef _WIN64 + typedef __int64 intptr_t; +#else + typedef int intptr_t; +#endif +#include + + +/** + * dirent.c + * + * Derived from DIRLIB.C by Matt J. Weinstein + * This note appears in the DIRLIB.H + * DIRLIB.H by M. J. Weinstein Released to public domain 1-Jan-89 + * + * Updated by Jeremy Bettis + * Significantly revised and rewinddir, seekdir and telldir added by Colin + * Cut down again & changed by Ben van Klinken + * Peters + * + */ + +/** dirent structure - used by the dirent.h directory iteration functions */ +struct CLUCENE_SHARED_INLINE_EXPORT dirent +{ + unsigned short d_namlen; /* Length of name in d_name. */ + char *d_name; /* File name. */ +}; + +/** DIR structure - used by the dirent.h directory iteration functions*/ +struct CLUCENE_SHARED_INLINE_EXPORT DIR +{ + /** disk transfer area for this dir */ + struct _finddata_t dd_dta; + + /* dirent struct to return from dir (NOTE: this makes this thread + * safe as long as only one thread uses a particular DIR struct at + * a time) */ + struct dirent dd_dir; + + /** _findnext handle */ + intptr_t dd_handle; + + /** + * Status of search: + * 0 = not started yet (next entry to read is first entry) + * -1 = off the end + * positive = 0 based index of next entry + */ + int32_t dd_stat; + + /** given path for dir with search pattern (struct is extended) */ + char dd_name[CL_MAX_DIR]; + +}; + +#define DIRENT_SEARCH_SUFFIX "*" +#define DIRENT_SLASH PATH_DELIMITERA + + +/** +* Returns a pointer to a DIR structure appropriately filled in to begin +* searching a directory. +*/ +CLUCENE_SHARED_EXPORT DIR* opendir (const char* filespec); + +/** +* Return a pointer to a dirent structure filled with the information on the +* next entry in the directory. +*/ +CLUCENE_SHARED_EXPORT struct dirent* readdir (DIR* dir); + +/** +* Frees up resources allocated by opendir. +*/ +CLUCENE_SHARED_EXPORT int32_t closedir (DIR* dir); + + +#elif defined (_CL_HAVE_DIRENT_H) +# include +# define NAMLEN(dirent) strlen((dirent)->d_name) + +#else +# define dirent direct +# define NAMLEN(dirent) (dirent)->d_namlen +# if defined(_CL_HAVE_SYS_NDIR_H) +# include +# endif +# if defined(_CL_HHAVE_SYS_DIR_H) +# include +# endif +# if defined(_CL_HHAVE_NDIR_H) +# include +# endif + +#endif //HAVE_DIRENT_H +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/util/Misc.cpp clucene-core-2.3.3.4/src/shared/CLucene/util/Misc.cpp --- clucene-core-0.9.21b/src/shared/CLucene/util/Misc.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/util/Misc.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,651 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Misc.h" +#include +#include +#include + +#if defined(_CL_HAVE_SYS_TIME_H) +# include +#elif defined(_CL_HAVE_TIME_H) +# include +#endif +#ifdef _CL_HAVE_SYS_TIMEB_H + #include +#endif + +#if defined(_CL_HAVE_SYS_STAT_H) + #include +#endif +#ifdef _CL_HAVE_STRINGS_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif + +#include +#include +#include "CLucene/util/dirent.h" //if we have dirent, then the native one will be used + +//for zlib... +#include "zlib.h" +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif +#define CL_Z_DEFAULT_CHUNK 1024 + + +#ifdef _CL_HAVE_FUNCTION_SLEEP + //don't ignore windows.h... breaks mingw32 in some cases. Define Sleep instead + extern "C" __declspec(dllimport) void __stdcall Sleep(_cl_dword_t); +#endif + +CL_NS_DEF(util) + +size_t Misc::ahashCode(const char* str){ + // Compute the hash code using a local variable to be reentrant. + size_t hashCode = 0; + while ( *str != 0 ) + hashCode = hashCode * 31 + *str++; + return hashCode; +} +size_t Misc::ahashCode(const char* str, size_t len){ + // Compute the hash code using a local variable to be reentrant. + size_t hashCode = 0; + for (size_t i = 0; i 50 ) // if it still doesn't show up, then we do some sleeping for the last 50ms + _LUCENE_SLEEP( 1 ); + } + + if( maxAttempts > 0 ) + maxAttempts--; + } + + return 0; +} + + +//static +TCHAR* Misc::join ( const TCHAR* a, const TCHAR* b, const TCHAR* c, const TCHAR* d,const TCHAR* e,const TCHAR* f ) { +#define LEN(x) (x == NULL ? 0 : _tcslen(x)) +const size_t totalLen = + LEN(a) + LEN(b) + LEN(c) + LEN(d) + LEN(e) + LEN(f) + + sizeof(TCHAR); /* Space for terminator. */ + +TCHAR* buf = _CL_NEWARRAY(TCHAR,totalLen); +buf[0]=0; +if ( a != NULL) _tcscat(buf,a); +if ( b != NULL) _tcscat(buf,b); +if ( c != NULL) _tcscat(buf,c); +if ( d != NULL) _tcscat(buf,d); +if ( e != NULL) _tcscat(buf,e); +if ( f != NULL) _tcscat(buf,f); +return buf; +} + +char* Misc::ajoin ( const char* a, const char* b, const char* c, const char* d,const char* e,const char* f ) { + #define aLEN(x) (x == NULL ? 0 : strlen(x)) + const size_t totalLen = + aLEN(a) + aLEN(b) + aLEN(c) + aLEN(d) + aLEN(e) + aLEN(f) + + sizeof(char); /* Space for terminator. */ + + char* buf = _CL_NEWARRAY(char,totalLen); + buf[0]=0; + if ( a != NULL) strcat(buf,a); + if ( b != NULL) strcat(buf,b); + if ( c != NULL) strcat(buf,c); + if ( d != NULL) strcat(buf,d); + if ( e != NULL) strcat(buf,e); + if ( f != NULL) strcat(buf,f); +return buf; +} + +//static +bool Misc::priv_isDotDir( const TCHAR* name ) +{ +if( name[0] == '\0' ) { + return (false); +} +if( name[0] == '.' && name[1] == '\0' ) { + return (true); +} +if( name[1] == '\0' ) { + return (false); +} +if( name[0] == '.' && name[1] == '.' && name[2] == '\0' ) { + return (true); +} + +return (false); +} + +//internal static function shared for clucene +string Misc::segmentname( const char* segment, const char* ext, const int32_t x ){ +//Func - Returns an allocated buffer in which it creates a filename by +// concatenating segment with ext and x +//Pre ext != NULL and holds the extension +// x contains a number +//Post - A buffer has been instantiated an when x = -1 buffer contains the concatenation of +// segment and ext otherwise buffer contains the contentation of segment, ext and x + + CND_PRECONDITION(ext != NULL, "ext is NULL"); + + + if ( x!=-1 ){ + char buf[30]; + _snprintf(buf,10,"%d",x); + return string(segment) + ext + buf; + }else{ + return string(segment) + ext; + } +} +void Misc::segmentname(char* buffer,int32_t bufferLen, const char* Segment, const char* ext, const int32_t x){ +//Func - Static Method +// Creates a filename in buffer by concatenating Segment with ext and x +//Pre - buffer != NULL +// Segment != NULL and holds the name of the segment +// ext != NULL and holds the extension +// x contains a number +//Post - When x = -1 buffer contains the concatenation of Segment and ext otherwise +// buffer contains the contentation of Segment, ext and x + + CND_PRECONDITION(buffer != NULL, "buffer is NULL"); + CND_PRECONDITION(Segment != NULL, "Segment is NULL"); + CND_PRECONDITION(ext != NULL, "ext is NULL"); + + if ( x== -1 ) + _snprintf(buffer,bufferLen,"%s%s", Segment,ext ); + else + _snprintf(buffer,bufferLen,"%s%s%d", Segment,ext,x ); +} + + +//static +int32_t Misc::stringDifference(const TCHAR* s1, const int32_t len1, const TCHAR* s2, const int32_t len2) { + int32_t len = len1 < len2 ? len1 : len2; + for (int32_t i = 0; i < len; i++) + if ( s1[i] != s2[i]) + return i; + return len; +} + +TCHAR* Misc::stringTrim(TCHAR* text) { + size_t j, i; + size_t len = _tcslen(text); + + for ( i=0;i i; --j ){ // find the last non-space character and store it as j + if ( ! _istspace(text[j]) ) { + break; + } + } + + if (i==0 && j==len-1) // prevent unnecessary copy + return text; + + if (i==0) + text[j+1]=0; + else { + j++; + _tcsncpy(text, text+i, j-i); + text[j-i] = 0; + } + + return text; +} + +TCHAR* Misc::wordTrim(TCHAR* text) { + size_t j, i; + size_t len = _tcslen(text); + + for ( i=0;i buf && value ); + + memcpy( retval, ptr, end - ptr ); + retval[end-ptr] = 0; + + return end-ptr; +} + +int64_t Misc::base36ToLong( const char* value ) { + char* ptr = (char*)value; + int64_t lval = 0; + + while ( *ptr != '\0' ) { + lval = isdigit(*ptr) ? ( 36 * lval ) + ( *ptr - '0' ) : ( 36 * lval ) + ( *ptr - 'a' + 10 ); + ptr++; + } + + return lval; +} + +bool Misc::listFiles(const char* directory, std::vector& files, bool fullPath){ + //clear old files + DIR* dir = opendir(directory); + if ( dir == NULL ) return false; + struct dirent* fl = readdir(dir); + struct cl_stat_t buf; + string path; + while ( fl != NULL ){ + path = string(directory) + "/" + fl->d_name; + int32_t ret = fileStat(path.c_str(),&buf); + if ( ret==0 && !(buf.st_mode & S_IFDIR) ) { + if ( (strcmp(fl->d_name, ".")) && (strcmp(fl->d_name, "..")) ) { + if ( fullPath ){ + files.push_back(path); + }else{ + files.push_back(fl->d_name); + } + } + } + fl = readdir(dir); + } + closedir(dir); + return true; +} + + +std::string Misc::toString(const bool value){ + return value ? "true" : "false"; +} +std::string Misc::toString(_LUCENE_THREADID_TYPE value){ + static int32_t nextindex = 0; + static std::map<_LUCENE_THREADID_TYPE, int32_t> ids; + if (ids.find(value) == ids.end()) { + ids[value] = nextindex++; + } + return toString(ids[value]); +} +std::string Misc::toString(const int32_t value){ + char buf[20]; + TCHAR tbuf[20]; + _i64tot(value, tbuf, 10); + STRCPY_TtoA(buf,tbuf,20); + return buf; +} +std::string Misc::toString(const int64_t value){ + char buf[20]; + TCHAR tbuf[20]; + _i64tot(value, tbuf, 10); + STRCPY_TtoA(buf,tbuf,20); + return buf; +} +std::string Misc::toString(const float_t value){ + char buf[20]; + _snprintf(buf,20,"%0.2f",(double)value); + return buf; +} + +void Misc::zerr(int ret, string& err) +{ + switch (ret) { + case Z_ERRNO: + err = "error occurred while reading or writing from the zlib streams"; + break; + case Z_STREAM_ERROR: + err = "invalid compression level"; + break; + case Z_DATA_ERROR: + err = "invalid or incomplete deflate data"; + break; + case Z_MEM_ERROR: + err = "out of memory"; + break; + case Z_VERSION_ERROR: + err ="zlib version mismatch"; + } +} + + + +/* Compress from file source to file dest until EOF on source. + def() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_STREAM_ERROR if an invalid compression + level is supplied, Z_VERSION_ERROR if the version of zlib.h and the + version of the library linked do not match, or Z_ERRNO if there is + an error reading or writing the files. */ +bool Misc::deflate(const uint8_t* in, size_t inlen, std::ostream& dest, string& err, int CHUNK, int level) +{ + int ret, flush; + unsigned have; + z_stream strm; + if ( level == -1 ) level = Z_BEST_COMPRESSION; + if ( CHUNK == -1 ) CHUNK = CL_Z_DEFAULT_CHUNK; + uint8_t* out = (uint8_t*)malloc(CHUNK); + + /* allocate deflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = deflateInit(&strm, level); + if (ret != Z_OK){ + free(out); + zerr(ret, err); + return false; + } + + /* compress until end of file */ + do { + strm.avail_in = inlen; + strm.next_in = (uint8_t*)in; + flush = Z_FINISH; + + /* run deflate() on input until output buffer not full, finish + compression if all of source has been read in */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = ::deflate(&strm, flush); /* no bad return value */ + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + have = CHUNK - strm.avail_out; + dest.write( (char*)out,have); + if ( dest.fail() ) { + (void)deflateEnd(&strm); + free(out); + zerr(Z_ERRNO, err); + return false; + } + } while (strm.avail_out == 0); + assert(strm.avail_in == 0); /* all input will be used */ + + /* done when last data in file processed */ + } while (flush != Z_FINISH); + assert(ret == Z_STREAM_END); /* stream will be complete */ + + /* clean up and return */ + (void)deflateEnd(&strm); + free(out); + return true; +} + +/* Decompress from file source to file dest until stream ends or EOF. + inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_DATA_ERROR if the deflate data is + invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and + the version of the library linked do not match, or Z_ERRNO if there + is an error reading or writing the files. */ +bool Misc::inflate(const uint8_t* in, size_t inlen, std::ostream& dest, string& err, int CHUNK) +{ + int ret; + unsigned have; + z_stream strm; + if ( CHUNK == -1 ) CHUNK = CL_Z_DEFAULT_CHUNK; + uint8_t* out = (uint8_t*)malloc(CHUNK); + + /* allocate inflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); + if (ret != Z_OK){ + free(out); + zerr(ret, err); + return false; + } + + /* decompress until deflate stream ends or end of file */ + do { + strm.avail_in = inlen; + if (strm.avail_in == 0) + break; + strm.next_in = (uint8_t*)in; + + /* run inflate() on input until output buffer not full */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = ::inflate(&strm, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + switch (ret) { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; /* and fall through */ + case Z_DATA_ERROR: + case Z_MEM_ERROR: + (void)inflateEnd(&strm); + free(out); + zerr(ret, err); + return false; + } + have = CHUNK - strm.avail_out; + dest.write( (char*)out,have); + if ( dest.fail() ) { + (void)inflateEnd(&strm); + free(out); + zerr(Z_ERRNO, err); + return false; + } + } while (strm.avail_out == 0); + + /* done when inflate() says it's done */ + } while (ret != Z_STREAM_END); + + /* clean up and return */ + (void)inflateEnd(&strm); + free(out); + if ( ret == Z_STREAM_END ) + return true; + zerr(Z_DATA_ERROR, err); + return false; +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/shared/CLucene/util/Misc.h clucene-core-2.3.3.4/src/shared/CLucene/util/Misc.h --- clucene-core-0.9.21b/src/shared/CLucene/util/Misc.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/util/Misc.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,106 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_Misc_H +#define _lucene_util_Misc_H + +#include + +CL_NS_DEF(util) + /** A class containing various functions. + */ + class CLUCENE_SHARED_EXPORT Misc{ + static void zerr(int ret, std::string& err); + public: + static uint64_t currentTimeMillis(); + static const TCHAR* replace_all( const TCHAR* val, const TCHAR* srch, const TCHAR* repl ); + static bool dir_Exists(const char* path); + static int64_t file_Size(const char* path); + static int64_t filelength(int handle); + static void sleep(const int ms); + + /** + * Unlinks the given file, waits until dir_Exists is false. It makes maxAttempts + * attempts to remove the file. If maxAttemps is less than 0 then unlimited + * count of attempts is done. + * Returns 1 if deleted and dir_Exists returns false + * Returns 0 if deleted and dir_Exists returns still true + * Returns -1 if file can not be deleted. + */ + static int32_t file_Unlink(const char* path, int32_t maxAttempts = -1); + + static size_t ahashCode(const char* str); + static size_t ahashCode(const char* str, size_t len); + + static TCHAR* join ( const TCHAR* a, const TCHAR* b, const TCHAR* c=NULL, const TCHAR* d=NULL,const TCHAR* e=NULL,const TCHAR* f=NULL ); + static char* ajoin ( const char* a, const char* b, const char* c=NULL, const char* d=NULL,const char* e=NULL,const char* f=NULL ); + + static bool priv_isDotDir( const TCHAR* name ); + //Creates a filename by concatenating Segment with ext and x + static std::string segmentname(const char* segment, const char* ext, const int32_t x=-1 ); + //Creates a filename in buffer by concatenating Segment with ext and x + static void segmentname(char* buffer,int32_t bufferLen, const char* Segment, const char* ext, const int32_t x=-1); + + /** + * Compares two strings, character by character, and returns the + * first position where the two strings differ from one another. + * + * @param s1 The first string to compare + * @param s1Len The length of the first string to compare + * @param s2 The second string to compare + * @param s2Len The length of the second string to compare + * @return The first position where the two strings differ. + */ + static int32_t stringDifference(const TCHAR* s1, const int32_t s1Len, const TCHAR* s2, const int32_t s2Len); + + // In-place trimming for strings and words ("te st" will be returned by stringTrim, while wordTrim will return "te") + // This is by design only meant for use with on-memory strings, and calling it like stringTrim(_T("test")) will + // be errorneous + static TCHAR* stringTrim(TCHAR* s); + static TCHAR* wordTrim(TCHAR* s); + + static size_t longToBase( int64_t value, int32_t base, char* to ); //< length of to should be at least ((sizeof(unsigned long) << 3) + 1). returns actual length used + static int64_t base36ToLong( const char* value ); + + static std::string toString(const int32_t value); + static std::string toString(const int64_t value); + static std::string toString(const _LUCENE_THREADID_TYPE value); + static std::string toString(const bool value); + static std::string toString(const float_t value); + static std::string toString(const TCHAR* s, int32_t len=-1); + + #ifdef _UCS2 + static size_t whashCode(const wchar_t* str); + static size_t whashCode(const wchar_t* str, size_t len); + #define thashCode whashCode + + static char* _wideToChar(const wchar_t* s); + static wchar_t* _charToWide(const char* s); + + static void _cpycharToWide(const char* s, wchar_t* d, size_t len); + static void _cpywideToChar(const wchar_t* s, char* d, size_t len); + #else + #define thashCode ahashCode + #endif + + /** List all files in dir. + * @param bool fullPath True to return entire path + */ + static bool listFiles(const char* dir, std::vector& files, bool fullPath=false); + + /** uncompress the source stream into the dest stream. + * Default CHUNK size is 1k + */ + static bool inflate(const uint8_t* source, size_t sourcelen, std::ostream& dest, std::string& err, int CHUNK=-1); + /** compress the source stream into the dest stream. + * Default CHUNK size is 1k + * Default level is Z_BEST_COMPRESSION + */ + static bool deflate(const uint8_t* source, size_t sourcelen, std::ostream& dest, std::string& err, int CHUNK=-1, int level=-1); + }; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/shared/CLucene/util/StringBuffer.cpp clucene-core-2.3.3.4/src/shared/CLucene/util/StringBuffer.cpp --- clucene-core-0.9.21b/src/shared/CLucene/util/StringBuffer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/util/StringBuffer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,423 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "StringBuffer.h" +#include "Misc.h" +#include + +CL_NS_DEF(util) + + StringBuffer::StringBuffer(TCHAR* buf,size_t maxlen, const bool consumeBuffer){ + buffer = buf; + bufferLength = maxlen; + bufferOwner = !consumeBuffer; + len = 0; + } + StringBuffer::StringBuffer(){ + //Func - Constructor. Allocates a buffer with the default length. + //Pre - true + //Post - buffer of length bufferLength has been allocated + + //Initialize + bufferLength = LUCENE_DEFAULT_TOKEN_BUFFER_SIZE; + len = 0; + //Allocate a buffer of length bufferLength + buffer = _CL_NEWARRAY(TCHAR,bufferLength); + bufferOwner = true; + } + + StringBuffer::StringBuffer(const size_t initSize){ + //Func - Constructor. Allocates a buffer of length initSize + 1 + //Pre - initSize > 0 + //Post - A buffer has been allocated of length initSize + 1 + + //Initialize the bufferLength to initSize + 1 The +1 is for the terminator '\0' + bufferLength = initSize + 1; + len = 0; + //Allocate a buffer of length bufferLength + buffer = _CL_NEWARRAY(TCHAR,bufferLength); + bufferOwner = true; + } + + StringBuffer::StringBuffer(const TCHAR* value){ + //Func - Constructor. + // Creates an instance of Stringbuffer containing a copy of the string value + //Pre - value != NULL + //Post - An instance of StringBuffer has been created containing the copy of the string value + + //Initialize the length of the string to be stored in buffer + len = (size_t) _tcslen(value); + + //Calculate the space occupied in buffer by a copy of value + const size_t occupiedLength = len + 1; + + // Minimum allocated buffer length is LUCENE_DEFAULT_TOKEN_BUFFER_SIZE. + bufferLength = (occupiedLength >= LUCENE_DEFAULT_TOKEN_BUFFER_SIZE + ? occupiedLength : LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); + + //Allocate a buffer of length bufferLength + buffer = _CL_NEWARRAY(TCHAR,bufferLength); + bufferOwner = true; + //Copy the string value into buffer + _tcsncpy(buffer, value, occupiedLength); + //Assert that the buffer has been terminated at the end of the string + CND_PRECONDITION (buffer[len] == '\0', "Buffer was not correctly terminated"); + } + + StringBuffer::~StringBuffer() { + // Func - Destructor + // Pre - true + // Post - Instanc has been destroyed + + if( bufferOwner ){ + _CLDELETE_CARRAY(buffer); + }else + buffer = NULL; + } + + void StringBuffer::clear(){ + //Func - Clears the Stringbuffer and resets it to it default empty state + //Pre - true + //Post - pre(buffer) has been destroyed and a new one has been allocated + + // TODO: Should we really delete and recreate the buffer - perhaps just reseting len should suffice? + // We should really look into at least providing both options + + //Destroy the current buffer if present + _CLDELETE_LCARRAY(buffer); + + //Initialize + len = 0; + bufferLength = LUCENE_DEFAULT_TOKEN_BUFFER_SIZE; + //Allocate a buffer of length bufferLength + buffer = _CL_NEWARRAY(TCHAR,bufferLength); + } + + void StringBuffer::appendChar(const TCHAR character) { + //Func - Appends a single character + //Pre - true + //Post - The character has been appended to the string in the buffer + + //Check if the current buffer length is sufficient to have the string value appended + if (len + 1 > bufferLength){ + //Have the size of the current string buffer increased because it is too small + growBuffer(len + 1); + } + //Put character at position len which is the end of the string in the buffer + //Note that this action might overwrite the terminator of the string '\0', which + //is kind of tricky + buffer[len] = character; + //Increase the len by to represent the correct length of the string in the buffer + len++; + } + + void StringBuffer::append(const TCHAR* value) { + //Func - Appends a copy of the string value + //Pre - value != NULL + //Post - value has been copied and appended to the string in buffer + + append(value, _tcslen(value)); + } + void StringBuffer::append(const TCHAR* value, size_t appendedLength) { + //Func - Appends a copy of the string value + //Pre - value != NULL + // appendedLength contains the length of the string value which is to be appended + //Post - value has been copied and appended to the string in buffer + + //Check if the current buffer length is sufficient to have the string value appended + if (len + appendedLength + 1 > bufferLength){ + //Have the size of the current string buffer increased because it is too small + growBuffer(len + appendedLength + 1); + } + + //Copy the string value into the buffer at postion len + _tcsncpy(buffer + len, value, appendedLength); + + //Add the length of the copied string to len to reflect the new length of the string in + //the buffer (Note: len is not the bufferlength!) + len += appendedLength; + } + + void StringBuffer::appendInt(const int64_t value, const int32_t _Radix) { + //Func - Appends an integer (after conversion to a character string) + //Pre - true + //Post - The converted integer value has been appended to the string in buffer + + //instantiate a buffer of 30 charactes for the conversion of the integer + TCHAR buf[30]; + //Convert the integer value to a string buf using _Radix + _i64tot(value, buf, _Radix); + //Have the converted integer now stored in buf appended to the string in buffer + append(buf); + } + + void StringBuffer::appendFloat(const float_t value, const size_t digits){ + //Func - Appends a float_t (after conversion to a character string) + //Pre - digits > 0. Indicates the minimum number of characters printed + //Post - The converted float_t value has been appended to the string in buffer + + //using sprintf("%f" was not reliable on other plaforms... we use a custom float convertor + //bvk: also, using sprintf and %f seems excessivelly slow + assert(digits <= 8); + + //the maximum number of characters that int64 will hold is 23. so we need 23*2+2 + TCHAR buf[48]; //the buffer to hold + int64_t v = (int64_t)value; //the integer value of the float + _i64tot(v,buf,10); //add the whole number + + size_t l = 99-_tcslen(buf); //how many digits we have to work with? + size_t dig = l< (size_t)digits ? l : digits; + if ( dig > 0 ){ + _tcscat(buf,_T(".")); //add a decimal point + + int64_t remi=(int64_t)((value-v)*pow((float_t)10,(float_t)(dig+1))); //take the remainder and make a whole number + if ( remi<0 ) remi*=-1; + int64_t remadj=remi/10; + if ( remi-(remadj*10) >=5 ) + remadj++; //adjust remainder + + // add as many zeros as necessary between the decimal point and the + // significant part of the number. Fixes a bug when trying to print + // numbers that have zeros right after the decimal point + if (remadj) { + size_t numZeros = dig - (size_t)log10((float_t)remadj) - 1; + while(numZeros-- > 0 && numZeros < 10) + _tcscat(buf,_T("0")); //add a zero before the decimal point + } + + _i64tot(remadj,buf+_tcslen(buf),10); //add the remainder + } + + append(buf); + } + + void StringBuffer::appendBoost(const float_t boost){ + if (boost != 1.0f) { + appendChar(_T('^')); appendFloat(boost,1); + } + } + + void StringBuffer::appendBool(const bool value){ + append( value ? _T( "true" ) : _T( "false" )); + } + + void StringBuffer::prepend(const TCHAR* value){ + //Func - Puts a copy of the string value infront of the current string in the StringBuffer + //Pre - value != NULL + //Post - The string in pre(buffer) has been shifted n positions where n equals the length of value. + // The string value was then copied to the beginning of stringbuffer + + prepend(value, _tcslen(value)); + } + + void StringBuffer::prepend(const TCHAR* value, const size_t prependedLength) { + //Func - Puts a copy of the string value in front of the string in the StringBuffer + //Pre - value != NULL + // prependedLength contains the length of the string value which is to be prepended + //Post - A copy of the string value is has been in front of the string in buffer + //todo: something is wrong with this code, i'm sure... it only grows (and therefore moves if the buffer is to small) + //Check if the current buffer length is sufficient to have the string value prepended + if (prependedLength + len + 1 > bufferLength){ + //Have the size of the current string buffer increased because it is too small + //Because prependedLength is passed as the second argument to growBuffer, + //growBuffer will have left the first prependedLength characters empty + //when it recopied buffer during reallocation. + growBuffer(prependedLength + len + 1, prependedLength); + } + + //Copy the string value into the buffer at postion 0 + _tcsncpy(buffer, value, prependedLength); + //Add the length of the copied string to len to reflect the new length of the string in + //the buffer (Note: len is not the bufferlength!) + len += prependedLength; + } + + size_t StringBuffer::length() const{ + //Func - Returns the length of the string in the StringBuffer + //Pre - true + //Post - The length len of the string in the buffer has been returned + + return len; + } + TCHAR* StringBuffer::toString(){ + //Func - Returns a copy of the current string in the StringBuffer sized equal to the length of the string + // in the StringBuffer. + //Pre - true + //Post - The copied string has been returned + + //Instantiate a buffer equal to the length len + 1 + TCHAR* ret = _CL_NEWARRAY(TCHAR,len + 1); + if (ret){ + //Copy the string in buffer + _tcsncpy(ret, buffer, len); + //terminate the string + ret[len] = '\0'; + } + //return the the copy + return ret; + } + TCHAR* StringBuffer::getBuffer() { + //Func - '\0' terminates the buffer and returns its pointer + //Pre - true + //Post - buffer has been '\0' terminated and returned + + // Check if the current buffer is '\0' terminated + if (len == bufferLength){ + //Make space for terminator, if necessary. + growBuffer(len + 1); + } + //'\0' buffer so it can be returned properly + buffer[len] = '\0'; + + return buffer; + } + + TCHAR* StringBuffer::giveBuffer() { + TCHAR* ret = getBuffer(); + buffer = NULL; + len = 0; + bufferLength = 0; + bufferOwner = false; + return ret; + } + + void StringBuffer::reserve(const size_t size){ + if ( bufferLength >= size ) + return; + bufferLength = size; + + //Allocate a new buffer of length bufferLength + TCHAR* tmp = _CL_NEWARRAY(TCHAR,bufferLength); + _tcsncpy(tmp, buffer, len); + tmp[len] = '\0'; + + //destroy the old buffer + if (buffer){ + _CLDELETE_CARRAY(buffer); + } + //Assign the new buffer tmp to buffer + buffer = tmp; + } + + void StringBuffer::growBuffer(const size_t minLength, const size_t skippingNInitialChars) { + //Func - Has the buffer grown to a minimum length of minLength or bigger and shifts the + // current string in buffer by skippingNInitialChars forward + //Pre - After growth, must have at least enough room for contents + terminator so + // minLength >= skippingNInitialChars + len + 1 + // skippingNInitialChars >= 0 + //Post - The buffer has been grown to a minimum length of minLength or bigger and + // if skippingNInitialChars > 0, the contents of the buffer has beeen shifted + // forward by skippingNInitialChars positions as the buffer is reallocated, + // leaving the first skippingNInitialChars uninitialized (presumably to be + // filled immediately thereafter by the caller). + + CND_PRECONDITION (minLength >= skippingNInitialChars + len + 1,"skippingNInitialChars is not large enough"); + + //More aggressive growth strategy to offset smaller default buffer size: + if ( !bufferOwner ){ + assert(bufferLength>=minLength); + return; + } + + bufferLength *= 2; + //Check that bufferLength is bigger than minLength + if (bufferLength < minLength){ + //Have bufferLength become minLength because it still was too small + bufferLength = minLength; + } + + //Allocate a new buffer of length bufferLength + TCHAR* tmp = _CL_NEWARRAY(TCHAR,bufferLength); + memset(tmp, 0, sizeof(TCHAR) * skippingNInitialChars); + + //The old buffer might not have been null-terminated, so we _tcsncpy + //only len bytes, not len+1 bytes (the latter might read one char off the + //end of the old buffer), then apply the terminator to the new buffer. + _tcsncpy(tmp + skippingNInitialChars, buffer, len); + tmp[skippingNInitialChars + len] = '\0'; + + //destroy the old buffer + _CLDELETE_LCARRAY(buffer); + + //Assign the new buffer tmp to buffer + buffer = tmp; + } + + void StringBuffer::setCharAt(size_t pos, const TCHAR chr) { + CND_PRECONDITION (pos < len, "pos is not in string"); + buffer[pos] = chr; + } + + TCHAR StringBuffer::charAt(size_t pos) { + CND_PRECONDITION (pos < len, "pos is not in string"); + return buffer[pos]; + } + + void StringBuffer::insert(const size_t pos, TCHAR chr) { + CND_PRECONDITION (pos <= len, "pos is larger than string len"); + growBuffer(len + 1, 0); + memmove(&buffer[pos + 1], &buffer[pos], sizeof(TCHAR) * (len - pos)); + buffer[pos] = chr; + len++; + } + + void StringBuffer::insert(const size_t pos, const TCHAR* chrs, size_t length) { + CND_PRECONDITION (pos <= len, "pos is larger than string len"); + + if (length == -1) { + length = _tcslen(chrs); + } + + if (length > 0) { + growBuffer(len + length, 0); + memmove(&buffer[pos + length], &buffer[pos], sizeof(TCHAR) * (len - pos)); + memcpy(&buffer[pos], chrs, sizeof(TCHAR) * (length)); + len += length; + } + } + + void StringBuffer::deleteCharAt(size_t pos) { + CND_PRECONDITION (pos < len, "pos is larger than string len"); + + memmove(&buffer[pos], &buffer[pos + 1], sizeof(TCHAR) * (len - pos)); + len--; + buffer[len] = _T('\0'); + } + + void StringBuffer::deleteChars(size_t start, size_t end) { + CND_PRECONDITION (start <= end && end <= len, "start/end is not in string"); + + if (start < end) { + memmove(&buffer[start], &buffer[end], sizeof(TCHAR) * (len - end)); + buffer[len - (end - start)] = _T('\0'); + len -= end - start; + } + } + + void StringBuffer::toLower() { + _tcslwr(buffer); + } + + bool StringBuffer::substringEquals(size_t start, size_t end, const TCHAR* str, size_t length) const { + if (length == -1) { + length = _tcslen(str); + } + + if (end - start != length) { + return false; + } + + for (size_t c = start; c < end; c++) { + if (buffer[c] != str[c - start]) { + return false; + } + } + + return true; + } + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/shared/CLucene/util/StringBuffer.h clucene-core-2.3.3.4/src/shared/CLucene/util/StringBuffer.h --- clucene-core-0.9.21b/src/shared/CLucene/util/StringBuffer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CLucene/util/StringBuffer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,99 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_StringBuffer_ +#define _lucene_util_StringBuffer_ + +CL_NS_DEF(util) + class CLUCENE_SHARED_EXPORT StringBuffer{ + public: + ///Constructor. Allocates a buffer with the default length. + StringBuffer(); + ///Constructor. Allocates a buffer of length initSize + 1 + StringBuffer(const size_t initSize); + ///Constructor. Creates an instance of Stringbuffer containing a copy of + ///the string value + StringBuffer(const TCHAR* value); + ///Constructs a StringBuffer using another buffer. The StringBuffer can + ///the be used to easily manipulate the buffer. + StringBuffer(TCHAR* buf,size_t maxlen, const bool consumeBuffer); + ///Destructor + virtual ~StringBuffer(); + ///Clears the Stringbuffer and resets it to it default empty state + void clear(); + + ///Appends a single character + void appendChar(const TCHAR chr); + ///Appends a copy of the string value + void append(const TCHAR* value); + ///Appends a copy of the string value + void append(const TCHAR* value, size_t appendedLength); + ///Appends an integer (after conversion to a character string) with a default radix of 10. Radixes lower than 10 not supported. + void appendInt(const int64_t value, const int32_t _Radix = 10); + ///Appends a float_t (after conversion to a character string) + void appendFloat(const float_t value, const size_t digits); + ///Appends a Lucene boost, formatted in the format used in the toString() functions; replaces JL's ToStringUtils::boost + void appendBoost(const float_t boost); + ///Appends a bool in the same way as java StringBuffer does (i.e. "true", "false" ) + void appendBool(const bool value); + ///Puts a copy of the string value in front of the current string in the StringBuffer + void prepend(const TCHAR* value); + ///Puts a copy of the string value in front of the current string in the StringBuffer + void prepend(const TCHAR* value, size_t prependedLength); + + StringBuffer& operator<< (const TCHAR* value) + { + append(value); + return *this; + } + StringBuffer& operator<< (const int64_t value) + { + appendInt(value); + return *this; + } + + void setCharAt(size_t pos, const TCHAR chr); + TCHAR charAt(size_t pos); + + void insert(const size_t pos, TCHAR chr); + void insert(const size_t pos, const TCHAR* chrs, size_t length = -1); + void deleteCharAt(size_t pos); + void deleteChars(size_t start, size_t end); + + void toLower(); + bool substringEquals(size_t start, size_t end, const TCHAR* str, size_t length = -1) const; + + ///Contains the length of string in the StringBuffer + ///Public so that analyzers can edit the length directly + size_t len; + ///Returns the length of the string in the StringBuffer + size_t length() const; + ///Returns a copy of the current string in the StringBuffer + TCHAR* toString(); + ///Returns a null terminated reference to the StringBuffer's text + TCHAR* getBuffer(); + /** Returns a null terminated reference to the StringBuffer's text + * the StringBuffer's buffer is released so that the text doesn't need to be copied + */ + TCHAR* giveBuffer(); + + ///reserve a minimum amount of data for the buffer. + ///no change made if the buffer is already longer than length + void reserve(const size_t length); + private: + ///A buffer that contains strings + TCHAR* buffer; + ///The length of the buffer + size_t bufferLength; + bool bufferOwner; + + ///Has the buffer grown to a minimum length of minLength or bigger and shifts the + ///current string in buffer by skippingNInitialChars forward + void growBuffer(const size_t minLength, const size_t skippingNInitialChars=0); + + }; +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckAtomicFunctions.cmake clucene-core-2.3.3.4/src/shared/cmake/CheckAtomicFunctions.cmake --- clucene-core-0.9.21b/src/shared/cmake/CheckAtomicFunctions.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckAtomicFunctions.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,25 @@ +INCLUDE(CheckCXXSourceRuns) + +MACRO ( CHECK_HAVE_GCC_ATOMIC_FUNCTIONS result ) + +# Do step by step checking, +CHECK_CXX_SOURCE_RUNS(" +#include +int main() +{ + unsigned value = 0; + void* ptr = &value; + __sync_add_and_fetch(&value, 1); + __sync_synchronize(); + __sync_sub_and_fetch(&value, 1); + if (!__sync_bool_compare_and_swap(&value, 0, 1)) + return EXIT_FAILURE; + + if (!__sync_bool_compare_and_swap(&ptr, ptr, ptr)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} +" ${result} ) + +ENDMACRO ( CHECK_HAVE_GCC_ATOMIC_FUNCTIONS result ) diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckErrorHandling.cmake clucene-core-2.3.3.4/src/shared/cmake/CheckErrorHandling.cmake --- clucene-core-0.9.21b/src/shared/cmake/CheckErrorHandling.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckErrorHandling.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,12 @@ +#check if we can do try and catch. +#bit useless, since we don't have any alternatives to try and catch currently + +MACRO ( CHECK_HAVE_FUNCTION_TRY_BLOCKS result ) + #check for try/catch blocks + CHECK_CXX_SOURCE_RUNS(" + void foo() { try{ return; } catch( ... ){} } + int main(){ foo(); return 0; }" ${result}) + IF ( NOT ${result} ) + SET ( ${result} 1 FORCE) + ENDIF ( NOT ${result} ) +ENDMACRO ( CHECK_HAVE_FUNCTION_TRY_BLOCKS ) diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckFloatByte.cmake clucene-core-2.3.3.4/src/shared/cmake/CheckFloatByte.cmake --- clucene-core-0.9.21b/src/shared/cmake/CheckFloatByte.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckFloatByte.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,37 @@ +# - Check if our methods for converting from floats to bytes and back work. +# CHECK_FLOAT_BYTE_WORKS(RESULT reverse) +# reverse: set to false if the check succeeds +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link +# CMAKE_EXTRA_INCLUDE_FILES = list of extra includes to check in + +MACRO(CHECK_FLOAT_BYTE_WORKS RESULT reverse) + IF("${RESULT}" MATCHES "^${RESULT}$") + MESSAGE(STATUS "Checking support new float byte<->float conversions") + + CONFIGURE_FILE("${clucene-shared_SOURCE_DIR}/cmake/CheckFloatByte.cpp.in" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckFloatByte.cpp" IMMEDIATE @ONLY) + + TRY_COMPILE(${RESULT} + ${CMAKE_BINARY_DIR} + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckFloatByte.cpp" + OUTPUT_VARIABLE OUTPUT) + IF(${RESULT}) + MESSAGE(STATUS "Checking support new float byte<->float conversions - yes") + ELSE(${RESULT}) + MESSAGE(STATUS "Checking support new float byte<->float conversions - no") + ENDIF(${RESULT}) + + #reverse decision if required. + IF (${reverse}) + IF (${RESULT}) + SET ( ${RESULT} 0 ) + ELSE (${RESULT}) + SET ( ${RESULT} 1 ) + ENDIF (${RESULT}) + ENDIF (${reverse}) + ENDIF("${RESULT}" MATCHES "^${RESULT}$") +ENDMACRO(CHECK_FLOAT_BYTE_WORKS) diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckFloatByte.cpp.in clucene-core-2.3.3.4/src/shared/cmake/CheckFloatByte.cpp.in --- clucene-core-0.9.21b/src/shared/cmake/CheckFloatByte.cpp.in 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckFloatByte.cpp.in 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,81 @@ + typedef long double float_t; + typedef long int32_t; + typedef char uint8_t; + + //float to bits conversion utilities... + union clvalue { + int32_t i; + float f; //must use a float type, else types dont match up + }; + + int32_t floatToIntBits(float_t value) + { + clvalue u; + int32_t e, f; + u.f = value; + e = u.i & 0x7f800000; + f = u.i & 0x007fffff; + + if (e == 0x7f800000 && f != 0) + u.i = 0x7fc00000; + + return u.i; + } + float_t intBitsToFloat(int32_t bits) + { + clvalue u; + u.i = bits; + return u.f; + } + + float_t byteToFloat(uint8_t b) { + if (b == 0) // zero is a special case + return 0.0f; + int32_t mantissa = b & 7; + int32_t exponent = (b >> 3) & 31; + int32_t bits = ((exponent+(63-15)) << 24) | (mantissa << 21); + return intBitsToFloat(bits); + } + + uint8_t floatToByte(float_t f) { + if (f < 0.0f) // round negatives up to zero + f = 0.0f; + + if (f == 0.0f) // zero is a special case + return 0; + + int32_t bits = floatToIntBits(f); // parse float_t into parts + int32_t mantissa = (bits & 0xffffff) >> 21; + int32_t exponent = (((bits >> 24) & 0x7f) - 63) + 15; + + if (exponent > 31) { // overflow: use max value + exponent = 31; + mantissa = 7; + } + + if (exponent < 0) { // underflow: use min value + exponent = 0; + mantissa = 1; + } + + return (uint8_t)((exponent << 3) | mantissa); // pack into a uint8_t + } + + +#ifdef __CLASSIC_C__ +int main(){ + int ac; + char*av[]; +#else +int main(int ac, char*av[]){ +#endif + //well known conversion + if ( floatToByte(0.5f) != 120 ) + return 1; + + //converting back works? + if ( floatToByte(byteToFloat(57)) != 57 ) + return 1; + + return 0; +} diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckHashmaps.cmake clucene-core-2.3.3.4/src/shared/cmake/CheckHashmaps.cmake --- clucene-core-0.9.21b/src/shared/cmake/CheckHashmaps.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckHashmaps.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,72 @@ +#check how to use hashmaps (which namespace) +#HashingValue is filled with namespace definition +#DisableHashing is set if we can't support hashing + +INCLUDE (Macro_ChooseStatus) + +#find hashing namespace (internal, use CHECK_HASH_MAPS) ... +MACRO(HASHMAP_TEST HashingValue namespace) + IF ( NOT ${HashingValue} ) + IF ( _CL_HAVE_TR1_UNORDERED_MAP ) + SET(_CL_HASH_MAP unordered_map) + SET(_CL_HASH_SET unordered_set) + SET(CMAKE_REQUIRED_DEFINITIONS "-D_CL_HAVE_TR1_UNORDERED_MAP=1") + ELSE ( _CL_HAVE_TR1_UNORDERED_MAP ) + IF ( _CL_HAVE_HASH_MAP ) + SET(_CL_HASH_MAP hash_map) + SET(_CL_HASH_SET hash_set) + SET(CMAKE_REQUIRED_DEFINITIONS "-D_CL_HAVE_HASH_MAP=1") + ELSE ( _CL_HAVE_HASH_MAP ) + IF ( _CL_HAVE_EXT_HASH_MAP ) + SET(_CL_HASH_MAP hash_map) + SET(_CL_HASH_SET hash_set) + SET(CMAKE_REQUIRED_DEFINITIONS "-D_CL_HAVE_EXT_HASH_MAP=1") + ENDIF ( _CL_HAVE_EXT_HASH_MAP ) + ENDIF ( _CL_HAVE_HASH_MAP ) + ENDIF ( _CL_HAVE_TR1_UNORDERED_MAP ) + + STRING(TOUPPER ${namespace} NAMESPACE) + STRING(REPLACE / _ NAMESPACE ${NAMESPACE}) + STRING(REPLACE : _ NAMESPACE ${NAMESPACE}) + + CHECK_CXX_SOURCE_COMPILES(" +#if defined(_CL_HAVE_HASH_MAP) + #include +#elif defined(_CL_HAVE_EXT_HASH_MAP) + #include +#elif defined(_CL_HAVE_TR1_UNORDERED_MAP) + #include +#endif +int main() { + ${namespace}::${_CL_HASH_MAP} a; + return 0; +} + " _CL_HAVE_${NAMESPACE}_HASHMAP) + + IF ( _CL_HAVE_${NAMESPACE}_HASHMAP ) + SET (${HashingValue} "${namespace}::func") + ENDIF ( _CL_HAVE_${NAMESPACE}_HASHMAP ) + + ENDIF ( NOT ${HashingValue} ) + +ENDMACRO(HASHMAP_TEST) + + +MACRO ( CHECK_HASH_MAPS HashingValue DisableHashing) + IF ( _CL_HAVE_EXT_HASH_MAP OR _CL_HAVE_HASH_MAP ) + _CHOOSE_STATUS(PROGRESS "hashmaps" "namespace") + HASHMAP_TEST (${HashingValue} "std::tr1") + HASHMAP_TEST (${HashingValue} std) + HASHMAP_TEST (${HashingValue} stdext) + HASHMAP_TEST (${HashingValue} __gnu_cxx) + + IF ( NOT ${HashingValue} ) + _CHOOSE_STATUS(END "hashmaps" "namespace" "failed") + SET(${DisableHashing} 1) + ELSE ( NOT ${HashingValue} ) + _CHOOSE_STATUS(END "hashmaps" "namespace" ${${HashingValue}}) + ENDIF ( NOT ${HashingValue} ) + + ENDIF ( _CL_HAVE_EXT_HASH_MAP OR _CL_HAVE_HASH_MAP ) + SET(CMAKE_REQUIRED_DEFINITIONS) +ENDMACRO ( CHECK_HASH_MAPS ) diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckNamespace.cmake clucene-core-2.3.3.4/src/shared/cmake/CheckNamespace.cmake --- clucene-core-0.9.21b/src/shared/cmake/CheckNamespace.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckNamespace.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,8 @@ +#check if we support namespaces +MACRO ( CHECK_NAMESPACE haveNamespace ) + #Check if namespaces work in the compiler + CHECK_CXX_SOURCE_RUNS(" + namespace Outer { namespace Inner { int i = 0; }} + int main(){ using namespace Outer::Inner; return i; }" + ${haveNamespace} ) +ENDMACRO ( CHECK_NAMESPACE haveNamespace ) \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckPthread.cmake clucene-core-2.3.3.4/src/shared/cmake/CheckPthread.cmake --- clucene-core-0.9.21b/src/shared/cmake/CheckPthread.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckPthread.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,27 @@ +#define if we have pthreads with recusrive capabilities + +MACRO ( CHECK_PTHREAD_RECURSIVE ifpthread result) + +IF ( ${ifpthread} ) + SET ( CMAKE_REQUIRED_FLAGS "${CMAKE_THREAD_LIBS_INIT}") + + CHECK_CXX_SOURCE_RUNS(" + #include + #include + #include + + int main() { + pthread_mutexattr_t attr; + pthread_mutex_t m; + + exit (pthread_mutexattr_init(&attr) + || pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) + || pthread_mutex_init(&m, &attr)); + } + " ${result} ) + #NOTE: pthread_mutexattr_setkind_np is the deprecated name for pthread_mutexattr_settype. old compilers might need it + + + SET ( CMAKE_REQUIRED_FLAGS) +ENDIF ( ${ifpthread} ) +ENDMACRO ( CHECK_PTHREAD_RECURSIVE ) diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckSnprintf.cmake clucene-core-2.3.3.4/src/shared/cmake/CheckSnprintf.cmake --- clucene-core-0.9.21b/src/shared/cmake/CheckSnprintf.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckSnprintf.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,42 @@ +#checks if snprintf have bugs + +MACRO ( CHECK_SNPRINTF ) + #check that our snprintf works correctly... + IF ( _CL_HAVE_FUNCTION_SNPRINTF ) + CHECK_CXX_SOURCE_RUNS(" + #include + int main(){ + char ovbuf[7]; + int i; + for (i=0; i<7; i++) ovbuf[i]='x'; + snprintf(ovbuf, 4,\"foo%s\", \"bar\"); + if (ovbuf[5]!='x') return 1; + snprintf(ovbuf, 4,\"foo%d\", 666); + if (ovbuf[5]!='x') return 1; + return 0; + }" _CL_HAVE_NO_SNPRINTF_BUG) + IF ( NOT _CL_HAVE_NO_SNPRINTF_BUG ) + SET ( _CL_HAVE_SNPRINTF_BUG 1 ) + MESSAGE ( FATAL_ERROR "snprintf has a bug, and we don't have a replacement!" ) + ENDIF ( NOT _CL_HAVE_NO_SNPRINTF_BUG ) + ENDIF ( _CL_HAVE_FUNCTION_SNPRINTF ) + + #check that our swnprintf works correctly... + IF ( _CL_HAVE_FUNCTION_SNWPRINTF ) + CHECK_CXX_SOURCE_RUNS(" + #include + #include + + int main(void) + { + wchar_t buf[5]; + snwprintf(buf,5,L\"%s\",L\"foo\"); + if ( wcslen(buf) != 3 ) + return 1; + return 0; + }" _CL_HAVE_NO_SNWPRINTF_BUG) + IF ( NOT _CL_HAVE_NO_SNWPRINTF_BUG ) + SET ( _CL_HAVE_SNWPRINTF_BUG 1 ) + ENDIF ( NOT _CL_HAVE_NO_SNWPRINTF_BUG ) + ENDIF ( _CL_HAVE_FUNCTION_SNWPRINTF ) +ENDMACRO ( CHECK_SNPRINTF ) diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckStdCallFunctionExists.cmake clucene-core-2.3.3.4/src/shared/cmake/CheckStdCallFunctionExists.cmake --- clucene-core-0.9.21b/src/shared/cmake/CheckStdCallFunctionExists.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckStdCallFunctionExists.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,89 @@ +# - Check if the STDCALL function exists. +# This works for non-cdecl functions (kernel32 functions, for example) +# CHECK_STDCALL_FUNCTION_EXISTS(FUNCTION FUNCTION_DUMMY_ARGS VARIABLE) +# - macro which checks if the stdcall function exists +# FUNCTION_DECLARATION - the definition of the function ( e.g.: Sleep(500) ) +# VARIABLE - variable to store the result +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link +# CMAKE_EXTRA_INCLUDE_FILES = list of extra includes to check in + +MACRO(CHECK_STDCALL_FUNCTION_EXISTS FUNCTION_DECLARATION VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + #get includes + SET(CHECK_STDCALL_FUNCTION_PREMAIN) + FOREACH(def ${CMAKE_EXTRA_INCLUDE_FILES}) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"${def}\"\n") + ENDFOREACH(def) + + #add some default includes + IF ( HAVE_WINDOWS_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"windows.h\"\n") + ENDIF ( HAVE_WINDOWS_H ) + IF ( HAVE_UNISTD_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"unistd.h\"\n") + ENDIF ( HAVE_UNISTD_H ) + IF ( HAVE_DIRECT_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"direct.h\"\n") + ENDIF ( HAVE_DIRECT_H ) + IF ( HAVE_IO_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"io.h\"\n") + ENDIF ( HAVE_IO_H ) + IF ( HAVE_SYS_TIMEB_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"sys/timeb.h\"\n") + ENDIF ( HAVE_SYS_TIMEB_H ) + + STRING(REGEX REPLACE "(\\(.*\\))" "" CHECK_STDCALL_FUNCTION_EXISTS_FUNCTION ${FUNCTION_DECLARATION} ) + + SET(MACRO_CHECK_STDCALL_FUNCTION_DEFINITIONS "${CMAKE_REQUIRED_FLAGS}") + MESSAGE(STATUS "Looking for ${CHECK_STDCALL_FUNCTION_EXISTS_FUNCTION}") + + IF(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_STDCALL_FUNCTION_EXISTS_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_STDCALL_FUNCTION_EXISTS_ADD_LIBRARIES) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_STDCALL_FUNCTION_EXISTS_ADD_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_STDCALL_FUNCTION_EXISTS_ADD_INCLUDES) + ENDIF(CMAKE_REQUIRED_INCLUDES) + + SET(CHECK_STDCALL_FUNCTION_DECLARATION ${FUNCTION_DECLARATION}) + CONFIGURE_FILE("${clucene-shared_SOURCE_DIR}/cmake/CheckStdCallFunctionExists.cpp.in" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckStdCallFunctionExists.cpp" IMMEDIATE @ONLY) + FILE(READ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckStdCallFunctionExists.cpp" + CHECK_STDCALL_FUNCTION_CONTENT) + + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckStdCallFunctionExists.cpp" + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_STDCALL_FUNCTION_DEFINITIONS} + "${CHECK_STDCALL_FUNCTION_EXISTS_ADD_LIBRARIES}" + "${CHECK_STDCALL_FUNCTION_EXISTS_ADD_INCLUDES}" + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + SET(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION_DECLARATION}") + MESSAGE(STATUS "Looking for ${FUNCTION_DECLARATION} - found") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the stdcall function ${FUNCTION_DECLARATION} exists passed with the following output:\n" + "${OUTPUT}\nCheckStdCallFunctionExists.cpp:\n${CHECK_STDCALL_FUNCTION_CONTENT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for ${FUNCTION_DECLARATION} - not found") + SET(${VARIABLE} "" CACHE INTERNAL "Have function ${FUNCTION_DECLARATION}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the stdcall function ${FUNCTION_DECLARATION} exists failed with the following output:\n" + "${OUTPUT}\nCheckStdCallFunctionExists.cpp:\n${CHECK_STDCALL_FUNCTION_CONTENT}\n\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_STDCALL_FUNCTION_EXISTS) diff -Nru clucene-core-0.9.21b/src/shared/cmake/CheckStdCallFunctionExists.cpp.in clucene-core-2.3.3.4/src/shared/cmake/CheckStdCallFunctionExists.cpp.in --- clucene-core-0.9.21b/src/shared/cmake/CheckStdCallFunctionExists.cpp.in 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/CheckStdCallFunctionExists.cpp.in 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,12 @@ +@CHECK_STDCALL_FUNCTION_PREMAIN@ + +#ifdef __CLASSIC_C__ +int main(){ + int ac; + char*av[]; +#else +int main(int ac, char*av[]){ +#endif + @CHECK_STDCALL_FUNCTION_DECLARATION@; + return 0; +} diff -Nru clucene-core-0.9.21b/src/shared/cmake/DefineDword.cmake clucene-core-2.3.3.4/src/shared/cmake/DefineDword.cmake --- clucene-core-0.9.21b/src/shared/cmake/DefineDword.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/DefineDword.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,17 @@ +#defines a dword replacement + +MACRO ( DEFINE_DWORD ) + + IF ( HAVE_WINDOWS_H ) + SET (CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_EXTRA_INCLUDE_FILES};windows.h") + ENDIF ( HAVE_WINDOWS_H ) + + CHECK_TYPE_SIZE ( DWORD _CL_HAVE_TYPE_DWORD ) + + IF ( _CL_HAVE_TYPE_DWORD ) + CHOOSE_TYPE(_cl_dword_t ${_CL_HAVE_TYPE_DWORD} unsigned "long;long long;__int64;short;int" ) + ENDIF ( _CL_HAVE_TYPE_DWORD ) + + SET ( CMAKE_EXTRA_INCLUDE_FILES ) + +ENDMACRO ( DEFINE_DWORD ) \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/shared/cmake/DefineFloat.cmake clucene-core-2.3.3.4/src/shared/cmake/DefineFloat.cmake --- clucene-core-0.9.21b/src/shared/cmake/DefineFloat.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/DefineFloat.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,29 @@ +MACRO ( DEFINE_FLOAT ) + #find float symbol + CHECK_CXX_SOURCE_COMPILES(" + #include + int main(){ float_t x=0.0; }" + HAVE_SYMBOL_FLOAT_T) + + IF ( NOT HAVE_SYMBOL_FLOAT_T ) + #try using FLT_EVAL_METHOD + CHECK_CXX_SOURCE_COMPILES(" + #define FLT_EVAL_METHOD 2 + #include + int main(){ float_t x=0.0; }" + HAVE_SYMBOL_FLOAT_T) + + IF ( HAVE_SYMBOL_FLOAT_T ) + SET ( _FLT_EVAL_METHOD 2 ) + SET ( TYPE_FLOAT_T "/* undef float_t*/" ) + ENDIF ( HAVE_SYMBOL_FLOAT_T ) + + ELSE ( NOT HAVE_SYMBOL_FLOAT_T ) + SET ( TYPE_FLOAT_T "/* undef float_t*/" ) + ENDIF ( NOT HAVE_SYMBOL_FLOAT_T ) + + IF ( NOT HAVE_SYMBOL_FLOAT_T ) + #todo: could we do a better guess here? + SET ( TYPE_FLOAT_T "typedef double float_t;" ) + ENDIF ( NOT HAVE_SYMBOL_FLOAT_T ) +ENDMACRO ( DEFINE_FLOAT ) diff -Nru clucene-core-0.9.21b/src/shared/cmake/DefineLongLongSyntax.cmake clucene-core-2.3.3.4/src/shared/cmake/DefineLongLongSyntax.cmake --- clucene-core-0.9.21b/src/shared/cmake/DefineLongLongSyntax.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/DefineLongLongSyntax.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,14 @@ +MACRO ( DEFINE_LONGLONG_SYNTAX ) + #check how to define a long (and longlong number) + CHECK_CXX_SOURCE_COMPILES("int main(){ int x = (int)(1234LL); }" _CL_ILONGLONG_LL) + IF ( _CL_ILONGLONG_LL ) + SET(_CL_ILONGLONG_VALUE "x ## LL") + ELSE ( _CL_ILONGLONG_LL ) + CHECK_CXX_SOURCE_COMPILES("int main(){ int x = (int)(1234i64); }" _CL_ILONGLONG_i64) + IF ( _CL_ILONGLONG_i64 ) + SET(_CL_ILONGLONG_VALUE "x ## i64") + ELSE ( _CL_ILONGLONG_i64 ) + MESSAGE( FATAL_ERROR "_CL_ILONGLONG_VALUE could not be determined" ) + ENDIF ( _CL_ILONGLONG_i64 ) + ENDIF ( _CL_ILONGLONG_LL ) +ENDMACRO ( DEFINE_LONGLONG_SYNTAX ) diff -Nru clucene-core-0.9.21b/src/shared/cmake/DefineMAXPATHValue.cmake clucene-core-2.3.3.4/src/shared/cmake/DefineMAXPATHValue.cmake --- clucene-core-0.9.21b/src/shared/cmake/DefineMAXPATHValue.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/DefineMAXPATHValue.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,30 @@ +#checks if snprintf have bugs + +MACRO ( DEFINE_MAXPATH_VALUE MaxPathValue ) +# also check for MAXPATHLEN +#or this: +#path_max = pathconf (path, _PC_PATH_MAX); + #if (path_max <= 0) + #path_max = 4096; + + #use CHOOSE_SYMBOL mechanism to determine which variable to use... + #CHOOSE_SYMBOL (_CL_MAX_PATH "PATH_MAX;MAX_PATH;_MAX_PATH;_POSIX_PATH_MAX" DefineMaxPathValue) + #IF ( DefineMaxPathValue ) + #now try and find its value... + # Include ( MacroGetVariableValue ) + + # SET ( _CL_MAX_PATH_VALUE ) + # GET_VARIABLE_VALUE (${DefineMaxPathValue} d _CL_MAX_PATH_VALUE) + # IF ( _CL_MAX_PATH_VALUE ) + # SET( ${MaxPathValue} "#define ${MaxPathValue} ${_CL_MAX_PATH_VALUE}" ) + # ENDIF( _CL_MAX_PATH_VALUE ) + #ELSE ( DefineMaxPathValue ) + # MESSAGE ( FATAL_ERROR "_CL_MAX_PATH could not be determined") + #ENDIF ( DefineMaxPathValue ) + + #SET (CMAKE_REQUIRED_DEFINITIONS) + + #HACK!!! + #todo: fix this + SET( ${MaxPathValue} "#define CL_MAX_PATH 4096") +ENDMACRO ( DEFINE_MAXPATH_VALUE ) diff -Nru clucene-core-0.9.21b/src/shared/cmake/DefineStaticSyntax.cmake clucene-core-2.3.3.4/src/shared/cmake/DefineStaticSyntax.cmake --- clucene-core-0.9.21b/src/shared/cmake/DefineStaticSyntax.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/DefineStaticSyntax.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,13 @@ +#defines how we can define a static const (or fallback to using an enum) + +MACRO ( DEFINE_STATIC_SYNTAX ) + + #check which syntax of static const to use + CHECK_CXX_SOURCE_RUNS("class x{public: static const int SCI=55; }; int main(){ x a; if ( a.SCI!=55 ) throw \"err\"; return 0; }" LUCENE_STATIC_CONSTANT_SYNTAX) + IF ( LUCENE_STATIC_CONSTANT_SYNTAX ) + SET ( LUCENE_STATIC_CONSTANT_SYNTAX "static const type assignment") + ELSE ( LUCENE_STATIC_CONSTANT_SYNTAX ) + SET ( LUCENE_STATIC_CONSTANT_SYNTAX "enum { assignment }") + ENDIF ( LUCENE_STATIC_CONSTANT_SYNTAX ) + +ENDMACRO ( DEFINE_STATIC_SYNTAX ) \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroCheckGccVisibility.cmake clucene-core-2.3.3.4/src/shared/cmake/MacroCheckGccVisibility.cmake --- clucene-core-0.9.21b/src/shared/cmake/MacroCheckGccVisibility.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroCheckGccVisibility.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,58 @@ +# +# Copyright (c) 2006, Alexander Neundorf +# Copyright (c) 2006, Laurent Montel, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +macro(MACRO_CHECK_GCC_VISIBILITY GccVisibility) + if (CMAKE_COMPILER_IS_GNUCXX) + include(CheckCXXCompilerFlag) + include(MacroEnsureVersion) + # visibility support + check_cxx_compiler_flag(-fvisibility=hidden ${GccVisibility}) + + # get the gcc version + exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info) + + string (REGEX MATCH "[345]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}") + if (NOT _gcc_version) + + # clang reports: clang version 1.1 (trunk 95754) + string (REGEX MATCH "clang version ([123]\\.[0-9])" _gcc_version "${_gcc_version_info}") + if ( _gcc_version ) + string(REGEX REPLACE "clang version (.*)" "\\1.0" _gcc_version "${_gcc_version}" ) + endif ( _gcc_version ) + + # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the patch level, handle this here: + if (NOT _gcc_version) + string (REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0" _gcc_version "${_gcc_version_info}") + endif (NOT _gcc_version) + endif (NOT _gcc_version) + + + + macro_ensure_version("4.1.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_1) + macro_ensure_version("4.2.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_2) + + set(_GCC_COMPILED_WITH_BAD_ALLOCATOR FALSE) + if (GCC_IS_NEWER_THAN_4_1) + exec_program(${CMAKE_C_COMPILER} ARGS -v OUTPUT_VARIABLE _gcc_alloc_info) + string(REGEX MATCH "(--enable-libstdcxx-allocator=mt)" _GCC_COMPILED_WITH_BAD_ALLOCATOR "${_gcc_alloc_info}") + endif (GCC_IS_NEWER_THAN_4_1) + + if (${GccVisibility} AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") + set (KDE4_C_FLAGS "${KDE4_C_FLAGS}" "-fvisibility=hidden") + + if (GCC_IS_NEWER_THAN_4_2) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") + endif (GCC_IS_NEWER_THAN_4_2) + else (${GccVisibility} AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) + set (${GccVisibility} 0) + endif (${GccVisibility} AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) + + else (CMAKE_COMPILER_IS_GNUCXX) + set(${GccVisibility} FALSE) + endif (CMAKE_COMPILER_IS_GNUCXX) +endmacro(MACRO_CHECK_GCC_VISIBILITY) diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroChooseFunction.cmake clucene-core-2.3.3.4/src/shared/cmake/MacroChooseFunction.cmake --- clucene-core-0.9.21b/src/shared/cmake/MacroChooseFunction.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroChooseFunction.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,49 @@ + +INCLUDE (CheckFunctionExists) +INCLUDE (Macro_ChooseStatus) + +#macro that sets OUTPUT as the value of oneof options (if _CL_HAVE_OPTION exists) +MACRO(CHOOSE_FUNCTION name options) + STRING(TOUPPER ${name} NAME) + FOREACH(option ${options}) + IF ( NOT FUNCTION_${NAME} ) + STRING(TOUPPER ${option} OPTION) + SET( option1 ${option} ) + + STRING(REGEX MATCH "[(|)]+" MACRO_CHOOSE_FUNCTION_MATCH ${option} ) + IF ( MACRO_CHOOSE_FUNCTION_MATCH STREQUAL "" ) + _CHOOSE_STATUS(PROGRESS ${name} "function" ) + CHECK_FUNCTION_EXISTS (${option} _CL_HAVE_FUNCTION_${OPTION}) + ELSE ( MACRO_CHOOSE_FUNCTION_MATCH STREQUAL "" ) + STRING(REGEX REPLACE "(\\(.*\\))" "" option ${option} ) + STRING(TOUPPER ${option} OPTION) + _CHOOSE_STATUS(PROGRESS ${name} "function" ) + CHECK_STDCALL_FUNCTION_EXISTS (${option1} _CL_HAVE_FUNCTION_${OPTION}) + ENDIF ( MACRO_CHOOSE_FUNCTION_MATCH STREQUAL "" ) + + IF ( _CL_HAVE_FUNCTION_${OPTION} ) + _CHOOSE_STATUS(END ${name} function ${option}) + IF ( option STREQUAL ${name} ) + #already have it, ignore this... + SET (FUNCTION_${NAME} "/* undef ${name} ${option} */" ) + ELSE ( option STREQUAL ${name} ) + SET (FUNCTION_${NAME} "#define ${name} ${option}") + ENDIF ( option STREQUAL ${name} ) + ENDIF ( _CL_HAVE_FUNCTION_${OPTION} ) + ENDIF( NOT FUNCTION_${NAME} ) + ENDFOREACH(option ${options}) + + IF ( NOT FUNCTION_${NAME} ) + IF ( NOT ${ARGV2} STREQUAL "" ) + _CHOOSE_STATUS(END ${name} function "using default") + SET (FUNCTION_${NAME} ${ARGV2} ) + ELSE ( NOT ${ARGV2} STREQUAL "" ) + _CHOOSE_STATUS(END ${name} function "not found") + SET (FUNCTION_${NAME} "/* undef ${name} */" ) + ENDIF ( NOT ${ARGV2} STREQUAL "" ) + ENDIF ( NOT FUNCTION_${NAME} ) + + IF ( FUNCTION_${NAME} ) + SET (HAVE_FUNCTION_${NAME} 1) + ENDIF ( FUNCTION_${NAME} ) +ENDMACRO(CHOOSE_FUNCTION) diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroChooseMisc.cmake clucene-core-2.3.3.4/src/shared/cmake/MacroChooseMisc.cmake --- clucene-core-0.9.21b/src/shared/cmake/MacroChooseMisc.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroChooseMisc.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,82 @@ +#macro that sets result to one of results (and have_result to true) when the first option TRY_COMPILE is successful. +#this is mainly to get around the fact that some compilers couldn't do sizeof(structs), therefore CHOOSE_TYPE wasn't going to work +#syntax: CHOOSE_TYPE ( TYPE_X HAVE_TYPE_X "struct stat x\;" "typedef stat cl_stat" "stat" ) (the last 3 options can be repeated indefinately in pairs of 3) + +INCLUDE (Macro_ChooseStatus) + +MACRO(CHOOSE_MISC result have_result ) + IF ( HAVE_SYS_STAT_H ) + SET (HEADERS "${HEADERS} + #include \"sys/stat.h\"") + ENDIF ( HAVE_SYS_STAT_H ) + IF ( HAVE_SYS_TIMEB_H ) + SET (HEADERS "${HEADERS} + #include \"sys/timeb.h\"") + ENDIF ( HAVE_SYS_TIMEB_H ) + + SET ( M_TEST ) + SET ( M_SUCCESS ) + SET ( M_name ) + SET ( M_RESULT ) + SET ( M_HAVE_RESULT ) + + FOREACH(optiong ${ARGV}) + #MESSAGE( STATUS "m ${optiong}" ) + SET ( m_continue ) + + #this will only happen the first round... + IF ( NOT m_continue AND NOT M_RESULT ) + SET ( M_RESULT "${optiong}") + SET ( m_continue 1 ) + ENDIF ( NOT m_continue AND NOT M_RESULT ) + IF ( NOT m_continue AND NOT M_HAVE_RESULT ) + SET ( M_HAVE_RESULT "${optiong}") + SET ( m_continue 1 ) + ENDIF ( NOT m_continue AND NOT M_HAVE_RESULT ) + + #test and success in pairs... + IF ( NOT m_continue AND NOT M_TEST ) + SET ( M_TEST "${optiong}") + SET ( m_continue 1 ) + ENDIF ( NOT m_continue AND NOT M_TEST ) + IF ( NOT m_continue AND NOT M_SUCCESS ) + SET ( M_SUCCESS "${optiong}") + SET ( m_continue 1 ) + ENDIF ( NOT m_continue AND NOT M_SUCCESS ) + IF ( NOT m_continue AND NOT M_name ) + SET ( M_name "${optiong}") + STRING(TOUPPER ${M_name} M_NAME) + #this one doesn't continue... + ENDIF ( NOT m_continue AND NOT M_name ) + + IF ( NOT m_continue ) + _CHOOSE_STATUS(PROGRESS ${M_HAVE_RESULT} "option" ${M_TEST}) + + IF ( NOT ${M_HAVE_RESULT} ) + CHECK_CXX_SOURCE_COMPILES( + "${HEADERS} + int main(){ + ${M_TEST} + }" + _CL_HAVE_OPTION_${M_NAME} ) + + IF ( _CL_HAVE_OPTION_${M_NAME} ) + SET (${M_RESULT} "${M_SUCCESS}") + SET (${M_HAVE_RESULT} 1 ) + _CHOOSE_STATUS(END ${M_HAVE_RESULT} "option" "${M_name}") + ENDIF ( _CL_HAVE_OPTION_${M_NAME} ) + ENDIF ( NOT ${M_HAVE_RESULT} ) + + #reset for next round + SET ( M_TEST ) + SET ( M_SUCCESS ) + SET ( M_name ) + ENDIF ( NOT m_continue ) + ENDFOREACH(optiong) + + IF ( NOT ${M_HAVE_RESULT} ) + _CHOOSE_STATUS(END ${M_HAVE_RESULT} option "not found") + ENDIF ( NOT ${M_HAVE_RESULT} ) + + SET(CMAKE_EXTRA_INCLUDE_FILES) +ENDMACRO(CHOOSE_MISC) diff -Nru clucene-core-0.9.21b/src/shared/cmake/Macro_ChooseStatus.cmake clucene-core-2.3.3.4/src/shared/cmake/Macro_ChooseStatus.cmake --- clucene-core-0.9.21b/src/shared/cmake/Macro_ChooseStatus.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/Macro_ChooseStatus.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,20 @@ +#internal macro for choose_* macros. + +MACRO(_CHOOSE_STATUS status name type) + STRING(TOUPPER ${name} NAME) + STRING(TOUPPER ${type} TYPE) + + IF ( ${status} STREQUAL "PROGRESS" ) + IF ( "" STREQUAL "${_CHOOSE_STATUS_${TYPE}_${NAME}}" ) + MESSAGE ( STATUS "Choosing ${type} for ${name}" ) + SET ( _CHOOSE_STATUS_${TYPE}_${NAME} "XXX" ) + ENDIF ( "" STREQUAL "${_CHOOSE_STATUS_${TYPE}_${NAME}}" ) + ENDIF ( ${status} STREQUAL "PROGRESS" ) + + IF ( ${status} STREQUAL "END" ) + IF ( "XXX" STREQUAL "${_CHOOSE_STATUS_${TYPE}_${NAME}}" ) + MESSAGE ( STATUS "Choosing ${type} for ${name} - ${ARGV3}" ) + SET ( _CHOOSE_STATUS_${TYPE}_${NAME} ON CACHE INTERNAL "Chose ${type} for ${name} - ${ARGV3}" ) + ENDIF ( "XXX" STREQUAL "${_CHOOSE_STATUS_${TYPE}_${NAME}}" ) + ENDIF ( ${status} STREQUAL "END" ) +ENDMACRO(_CHOOSE_STATUS) diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroChooseSymbol.cmake clucene-core-2.3.3.4/src/shared/cmake/MacroChooseSymbol.cmake --- clucene-core-0.9.21b/src/shared/cmake/MacroChooseSymbol.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroChooseSymbol.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,62 @@ + +INCLUDE (CheckSymbolExists) +INCLUDE (Macro_ChooseStatus) + +MACRO(CHOOSE_SYMBOL name options) + #note: don't add windows.h to this list, since we don't want to find things + #in there (bcc might make you think otherwise, but it's true!)... + + IF ( CYGWIN ) + #cygwin requires this to determine some things... + SET ( CMAKE_REQUIRED_DEFINITIONS "-D_WIN32") + ENDIF( CYGWIN ) + + IF ( HAVE_LIMITS_H ) + SET (CHOOSE_SYMBOL_INCLUDES "${CHOOSE_SYMBOL_INCLUDES};limits.h") + ENDIF ( HAVE_LIMITS_H ) + IF ( HAVE_STAT_H ) + SET (CHOOSE_SYMBOL_INCLUDES "${CHOOSE_SYMBOL_INCLUDES};stat.h") + ENDIF ( HAVE_STAT_H ) + IF ( HAVE_SYS_STAT_H ) + SET (CHOOSE_SYMBOL_INCLUDES "${CHOOSE_SYMBOL_INCLUDES};sys/stat.h") + ENDIF ( HAVE_SYS_STAT_H ) + IF ( HAVE_TCHAR_H ) + SET (CHOOSE_SYMBOL_INCLUDES "${CHOOSE_SYMBOL_INCLUDES};tchar.h") + ENDIF ( HAVE_TCHAR_H ) + + SET (CHOOSE_SYMBOL_INCLUDES "${CHOOSE_SYMBOL_INCLUDES};fcntl.h") + + STRING(TOUPPER ${name} NAME) + FOREACH(option ${options}) + IF ( NOT SYMBOL_${NAME} ) + STRING(TOUPPER ${option} OPTION) + + _CHOOSE_STATUS(PROGRESS ${name} "symbol" ) + CHECK_SYMBOL_EXISTS (${option} "${CHOOSE_SYMBOL_INCLUDES}" _CL_HAVE_SYMBOL_${OPTION}) + + IF ( _CL_HAVE_SYMBOL_${OPTION} ) + IF ( option STREQUAL ${name} ) + #already have it, ignore this... + SET (SYMBOL_${NAME} "/* undef ${name} ${option} */" ) + ELSE ( option STREQUAL ${name} ) + SET (SYMBOL_${NAME} "#define ${name} ${option}") + ENDIF ( option STREQUAL ${name} ) + + IF ( NOT "${ARGV2}" STREQUAL "" ) + SET ( ${ARGV2} "${option}" ) + ENDIF ( NOT "${ARGV2}" STREQUAL "" ) + _CHOOSE_STATUS(END ${name} "symbol" ${option}) + ENDIF ( _CL_HAVE_SYMBOL_${OPTION} ) + ENDIF( NOT SYMBOL_${NAME} ) + ENDFOREACH(option ${options}) + + IF ( NOT SYMBOL_${NAME} ) + SET (SYMBOL_${NAME} "/* undef ${name} */" ) + _CHOOSE_STATUS(END ${name} "symbol" "not found" ) + ELSE ( NOT SYMBOL_${NAME} ) + SET (HAVE_SYMBOL_${NAME} 1) + ENDIF ( NOT SYMBOL_${NAME} ) + + SET (CHOOSE_SYMBOL_INCLUDES) + SET (CMAKE_REQUIRED_DEFINITIONS) +ENDMACRO(CHOOSE_SYMBOL) diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroChooseType.cmake clucene-core-2.3.3.4/src/shared/cmake/MacroChooseType.cmake --- clucene-core-0.9.21b/src/shared/cmake/MacroChooseType.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroChooseType.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,49 @@ + +INCLUDE (CheckTypeSize) +INCLUDE (Macro_ChooseStatus) + +#macro that sets OUTPUT as the value of oneof options (if _CL_HAVE_OPTION exists) +MACRO(CHOOSE_TYPE name size sign options) + #note: don't add windows.h to this list, since we don't want to find things + #in there (bcc might make you think otherwise, but it's true!)... + IF ( HAVE_TCHAR_H ) + SET (CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_EXTRA_INCLUDE_FILES};tchar.h") + ENDIF ( HAVE_TCHAR_H ) + + STRING(TOUPPER ${name} NAME) + FOREACH(option ${options}) + IF ( NOT TYPE_${NAME} ) + STRING(TOUPPER ${option} OPTION) + STRING(REPLACE " " "" OPTION ${OPTION}) + STRING(REPLACE "_" "" SO_OPTION ${OPTION}) + + _CHOOSE_STATUS(PROGRESS ${name} "type") + CHECK_TYPE_SIZE(${option} _CL_HAVE_TYPE_${OPTION}) + IF ( _CL_HAVE_TYPE_${OPTION} ) + IF ( option STREQUAL ${name} ) + #already have it, ignore this... + SET (TYPE_${NAME} "/* undef ${name} ${option} */" ) + ELSE ( option STREQUAL ${name} ) + IF ( ${size} LESS 0 OR _CL_HAVE_TYPE_${OPTION} EQUAL ${size} ) + SET (TYPE_${NAME} "typedef ${sign} ${option} ${name};") + ENDIF ( ${size} LESS 0 OR _CL_HAVE_TYPE_${OPTION} EQUAL ${size}) + ENDIF ( option STREQUAL ${name} ) + + IF ( NOT "${ARGV4}" STREQUAL "" ) + SET ( ${ARGV4} "${option}" ) + ENDIF ( NOT "${ARGV4}" STREQUAL "" ) + _CHOOSE_STATUS(END ${name} "type" "${sign} ${option}") + ENDIF ( _CL_HAVE_TYPE_${OPTION} ) + ENDIF( NOT TYPE_${NAME} ) + ENDFOREACH(option ${options}) + + IF ( NOT TYPE_${NAME} ) + SET (TYPE_${NAME} "/* undef ${name} */" ) + _CHOOSE_STATUS(END ${name} "type" "not found") + ELSE ( NOT TYPE_${NAME} ) + SET (HAVE_TYPE_${NAME} 1) + ENDIF ( NOT TYPE_${NAME} ) + + + SET(CMAKE_EXTRA_INCLUDE_FILES) +ENDMACRO(CHOOSE_TYPE) diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroEnsureVersion.cmake clucene-core-2.3.3.4/src/shared/cmake/MacroEnsureVersion.cmake --- clucene-core-0.9.21b/src/shared/cmake/MacroEnsureVersion.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroEnsureVersion.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,71 @@ +# This macro compares version numbers of the form "x.y.z" +# MACRO_ENSURE_VERSION( FOO_MIN_VERSION FOO_VERSION_FOUND FOO_VERSION_OK) +# will set FOO_VERSIN_OK to true if FOO_VERSION_FOUND >= FOO_MIN_VERSION +# where both have to be in a 3-part-version format, leading and trailing +# text is ok, e.g. +# MACRO_ENSURE_VERSION( "2.5.31" "flex 2.5.4a" VERSION_OK) +# which means 2.5.31 is required and "flex 2.5.4a" is what was found on the system + +# Copyright (c) 2006, David Faure, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +MACRO(MACRO_ENSURE_VERSION requested_version found_version var_too_old) + + # parse the parts of the version string + STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_major_vers "${requested_version}") + STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" req_minor_vers "${requested_version}") + STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_patch_vers "${requested_version}") + + STRING(REGEX REPLACE "[^0-9]*([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" found_major_vers "${found_version}") + STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" found_minor_vers "${found_version}") + STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" found_patch_vers "${found_version}") + + # compute an overall version number which can be compared at once + MATH(EXPR req_vers_num "${req_major_vers}*10000 + ${req_minor_vers}*100 + ${req_patch_vers}") + MATH(EXPR found_vers_num "${found_major_vers}*10000 + ${found_minor_vers}*100 + ${found_patch_vers}") + + if (found_vers_num LESS req_vers_num) + set( ${var_too_old} FALSE ) + else (found_vers_num LESS req_vers_num) + set( ${var_too_old} TRUE ) + endif (found_vers_num LESS req_vers_num) + +ENDMACRO(MACRO_ENSURE_VERSION) + + +# This macro compares version numbers of the form "x.y" +# MACRO_ENSURE_VERSION( FOO_MIN_VERSION FOO_VERSION_FOUND FOO_VERSION_OK) +# will set FOO_VERSIN_OK to true if FOO_VERSION_FOUND >= FOO_MIN_VERSION +# where both have to be in a 2-part-version format, leading and trailing +# text is ok, e.g. +# MACRO_ENSURE_VERSION( "0.5" "foo 0.6" VERSION_OK) +# which means 0.5 is required and "foo 0.6" is what was found on the system + +# Copyright (c) 2006, David Faure, +# Copyright (c) 2007, Pino Toscano, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +MACRO(MACRO_ENSURE_VERSION2 requested_version found_version var_too_old) + + # parse the parts of the version string + STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+" "\\1" req_major_vers "${requested_version}") + STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)" "\\1" req_minor_vers "${requested_version}") + + STRING(REGEX REPLACE "[^0-9]*([0-9]+)\\.[0-9]+.*" "\\1" found_major_vers "${found_version}") + STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.([0-9]+).*" "\\1" found_minor_vers "${found_version}") + + # compute an overall version number which can be compared at once + MATH(EXPR req_vers_num "${req_major_vers}*100 + ${req_minor_vers}") + MATH(EXPR found_vers_num "${found_major_vers}*100 + ${found_minor_vers}") + + if (found_vers_num LESS req_vers_num) + set( ${var_too_old} FALSE ) + else (found_vers_num LESS req_vers_num) + set( ${var_too_old} TRUE ) + endif (found_vers_num LESS req_vers_num) + +ENDMACRO(MACRO_ENSURE_VERSION2) diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroGetVariableValue.c.in clucene-core-2.3.3.4/src/shared/cmake/MacroGetVariableValue.c.in --- clucene-core-0.9.21b/src/shared/cmake/MacroGetVariableValue.c.in 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroGetVariableValue.c.in 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,20 @@ + +#include + +#ifdef HAVE_WINDOWS_H + #include +#endif +#ifdef HAVE_LIMITS_H + #include +#endif +#ifdef HAVE_STAT_H + #include +#endif +#ifdef HAVE_SYS_STAT_H + #include +#endif + +int main(){ + printf("%${}", ${}); + return 0; +} diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroGetVariableValue.cmake clucene-core-2.3.3.4/src/shared/cmake/MacroGetVariableValue.cmake --- clucene-core-0.9.21b/src/shared/cmake/MacroGetVariableValue.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroGetVariableValue.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,33 @@ + +#macro that sets OUTPUT as the value of oneof options (if _CL_HAVE_OPTION exists) +MACRO(GET_VARIABLE_VALUE variable printfType result) + + SET ( GET_VARIABLE_VALUE_DEFINITIONS "-DVARIABLENAME=${variable} -DPRINTFTYPE=${printfType}") + + IF ( HAVE_WINDOWS_H ) + SET ( GET_VARIABLE_VALUE_DEFINITIONS "${GET_VARIABLE_VALUE_DEFINITIONS} -DHAVE_WINDOWS_H") + ENDIF ( HAVE_WINDOWS_H ) + IF ( HAVE_LIMITS_H ) + SET (GET_VARIABLE_VALUE_DEFINITIONS "${GET_VARIABLE_VALUE_DEFINITIONS} -DHAVE_LIMITS_H") + ENDIF ( HAVE_LIMITS_H ) + IF ( HAVE_STAT_H ) + SET (GET_VARIABLE_VALUE_DEFINITIONS "${GET_VARIABLE_VALUE_DEFINITIONS} -DHAVE_STAT_H") + ENDIF ( HAVE_STAT_H ) + IF ( HAVE_SYS_STAT_H ) + SET (GET_VARIABLE_VALUE_DEFINITIONS "${GET_VARIABLE_VALUE_DEFINITIONS} -DHAVE_SYS_STAT_H") + ENDIF ( HAVE_SYS_STAT_H ) + + CONFIGURE_FILE("${${PROJECT_SOURCE_DIR}}/cmake/MacroGetVariableValue.c.in" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/MacroGetVariableValue.c" IMMEDIATE @ONLY) + + TRY_COMPILE(HAVE_${VARIABLE} + ${CMAKE_BINARY_DIR} + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckTypeSizeC.c" + COMPILE_DEFINITIONS ${GET_VARIABLE_VALUE_DEFINITIONS} + OUTPUT_VARIABLE OUTPUT + COPY_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/MacroGetVariablesValue.bin" ) + + + MESSAGE(FATAL_ERROR stop) + SET(GET_VARIABLE_VALUE_DEFINITIONS) +ENDMACRO(GET_VARIABLE_VALUE) diff -Nru clucene-core-0.9.21b/src/shared/cmake/MacroMustDefine.cmake clucene-core-2.3.3.4/src/shared/cmake/MacroMustDefine.cmake --- clucene-core-0.9.21b/src/shared/cmake/MacroMustDefine.cmake 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/cmake/MacroMustDefine.cmake 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,69 @@ +#this macro throws an error if any of the vars are not defined + +MACRO(MUSTDEFINE_VAR VARS) + foreach(ARG ${VARS}) + IF ( NOT ${ARG} ) + MESSAGE( FATAL_ERROR "The symbol '${ARG}' was not defined." ) + ENDIF ( NOT ${ARG} ) + endforeach(ARG) +ENDMACRO(MUSTDEFINE_VAR) + +#required headers +MACRO(CHECK_REQUIRED_HEADERS COMPULSARY_HEADERS) + FOREACH(func ${ARGV}) + STRING(TOUPPER ${func} FUNC) + STRING(REPLACE . _ FUNC ${FUNC}) + CHECK_INCLUDE_FILE_CXX (${func} HAVE_${FUNC}) + IF ( HAVE_${FUNC} ) + SET(_CL_HAVE_${FUNC} ${FUNC}) + ENDIF ( HAVE_${FUNC} ) + IF ( NOT HAVE_${FUNC} ) + MESSAGE ( FATAL_ERROR "${func} could not be found" ) + ENDIF ( NOT HAVE_${FUNC} ) + ENDFOREACH(func ${COMPULSARY_HEADERS}) +ENDMACRO(CHECK_REQUIRED_HEADERS) + +#optional headers +MACRO(CHECK_OPTIONAL_HEADERS OPTIONAL_HEADERS) + FOREACH(func ${ARGV}) + STRING(TOUPPER ${func} FUNC) + STRING(REPLACE . _ FUNC ${FUNC}) + STRING(REPLACE / _ FUNC ${FUNC}) + CHECK_INCLUDE_FILE_CXX (${func} HAVE_${FUNC}) + IF ( HAVE_${FUNC} ) + SET(_CL_HAVE_${FUNC} ${FUNC}) + ENDIF ( HAVE_${FUNC} ) + ENDFOREACH(func ${OPTIONAL_HEADERS}) +ENDMACRO(CHECK_OPTIONAL_HEADERS) + +#check for compulsary functions +MACRO(CHECK_REQUIRED_FUNCTIONS COMPULSARY_FUNCTIONS) + FOREACH(func ${ARGV}) + CHECK_OPTIONAL_FUNCTIONS ( ${func} ) + + IF ( NOT _CL_HAVE_FUNCTION_${FUNC} ) + MESSAGE ( FATAL_ERROR "${func} could not be found" ) + ENDIF ( NOT _CL_HAVE_FUNCTION_${FUNC} ) + ENDFOREACH(func ${COMPULSARY_FUNCTIONS}) + + SET( CMAKE_EXTRA_INCLUDE_FILES ) +ENDMACRO(CHECK_REQUIRED_FUNCTIONS) + +#check for optional functions +MACRO(CHECK_OPTIONAL_FUNCTIONS OPTIONAL_FUNCTIONS) + FOREACH(func ${ARGV}) + STRING(TOUPPER ${func} FUNC) + + STRING(REGEX MATCH "[(|)]+" CHECK_OPTIONAL_FUNCTIONS_MATCH ${func} ) + IF ( CHECK_OPTIONAL_FUNCTIONS_MATCH STREQUAL "" ) + CHECK_FUNCTION_EXISTS (${func} _CL_HAVE_FUNCTION_${FUNC}) + ELSE ( CHECK_OPTIONAL_FUNCTIONS_MATCH STREQUAL "" ) + STRING(REGEX REPLACE "(\\(.*\\))" "" CHECK_OPTIONAL_FUNCTIONS_MATCH ${func} ) + STRING( TOUPPER ${CHECK_OPTIONAL_FUNCTIONS_MATCH} FUNC ) + + CHECK_STDCALL_FUNCTION_EXISTS (${func} _CL_HAVE_FUNCTION_${FUNC}) + ENDIF ( CHECK_OPTIONAL_FUNCTIONS_MATCH STREQUAL "" ) + + ENDFOREACH(func ${OPTIONAL_FUNCTIONS}) + +ENDMACRO(CHECK_OPTIONAL_FUNCTIONS) \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/shared/CMakeLists.txt clucene-core-2.3.3.4/src/shared/CMakeLists.txt --- clucene-core-0.9.21b/src/shared/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,360 @@ +PROJECT(clucene-shared) + +#define command line options +INCLUDE (DefineOptions) +DEFINE_OPTIONS(EXTRA_OPTIONS EXTRA_LIBS) +ADD_DEFINITIONS(${EXTRA_OPTIONS} -DMAKE_CLUCENE_SHARED_LIB) + +# include specific modules +set(CMAKE_MODULE_PATH "${clucene-shared_SOURCE_DIR}/cmake") + +INCLUDE (CheckIncludeFiles) +INCLUDE (CheckIncludeFileCXX) +INCLUDE (CheckCXXSourceCompiles) +INCLUDE (CheckCXXSourceRuns) +INCLUDE (CheckFunctionExists) + +#local macros +INCLUDE (MacroMustDefine) +INCLUDE (MacroChooseType) +INCLUDE (MacroChooseMisc) +INCLUDE (MacroChooseFunction) +INCLUDE (MacroChooseSymbol) +INCLUDE (MacroCheckGccVisibility) + +INCLUDE (DefineFloat) +INCLUDE (DefineDword) +INCLUDE (DefineLongLongSyntax) +INCLUDE (DefineStaticSyntax) +INCLUDE (DefineMAXPATHValue) + +INCLUDE (CheckFloatByte) +INCLUDE (CheckErrorHandling) +INCLUDE (CheckHashmaps) +INCLUDE (CheckNamespace) +INCLUDE (CheckSnprintf) +INCLUDE (CheckStdCallFunctionExists) + +find_package(Threads REQUIRED) +INCLUDE (CheckPthread) +INCLUDE (CheckAtomicFunctions) + +find_package(ZLIB) +IF ( ZLIB_FOUND ) + SET ( EXTRA_LIBS ${EXTRA_LIBS} ${ZLIB_LIBRARY} ) +ELSEIF ( ZLIB_FOUND ) + MESSAGE( "ZLIB not found, using local: ${clucene-ext_SOURCE_DIR}/zlib" ) + SET(ZLIB_INCLUDE_DIR ${clucene-ext_SOURCE_DIR}/zlib ) + SET(ZLIB_LIBRARY ${clucene-ext_BINARY_DIR}) +ENDIF ( ZLIB_FOUND ) +INCLUDE_DIRECTORIES( ${ZLIB_INCLUDE_DIR} ) + +######################################################################## +# test for headers +######################################################################## + +CHECK_INCLUDE_FILES ("sys/time.h;time.h" _CL_TIME_WITH_SYS_TIME) + +CHECK_REQUIRED_HEADERS ( stdlib.h stdarg.h stdio.h stddef.h ctype.h algorithm + functional map vector list set math.h fcntl.h limits.h) + +CHECK_OPTIONAL_HEADERS ( string.h sys/time.h memory.h sys/types.h + stdint.h unistd.h io.h direct.h sys/dir.h sys/ndir.h dirent.h wctype.h fcntl.h + stat.h sys/stat.h stdexcept errno.h fcntl.h windef.h windows.h wchar.h + hash_map hash_set ext/hash_map ext/hash_map tr1/unordered_set tr1/unordered_map + sys/timeb.h tchar.h strings.h stdexcept sys/mman.h winerror.h ) + + +######################################################################## +# test for types +######################################################################## +#find int_t types +CHOOSE_TYPE(int8_t 1 signed "int8_t;char") +CHOOSE_TYPE(uint8_t 1 unsigned "uint8_t;char") +CHOOSE_TYPE(int16_t 2 signed "int16_t;short") +CHOOSE_TYPE(uint16_t 2 unsigned "uint16_t;short") +CHOOSE_TYPE(int32_t 4 signed "int32_t;int;long") +CHOOSE_TYPE(uint32_t 4 unsigned "uint32_t;int;long") +CHOOSE_TYPE(int64_t 8 signed "int64_t;long long;__int64") +CHOOSE_TYPE(uint64_t 8 unsigned "uint64_t;long long;__int64") + +CHOOSE_TYPE(size_t -1 unsigned "size_t;int" ) +CHOOSE_MISC(TYPE__TIMEB + HAVE_TYPE__TIMEB + "struct _timeb x\;" "/* #undef _timeb */" "_timeb" + "struct timeb x\;" "#define _timeb timeb" "timeb" + ) + +#run macro for checking float. (and _FLT_EVAL_METHOD) +DEFINE_FLOAT() +DEFINE_DWORD() + +######################################################################## +# Test for functions +######################################################################## + + +CHECK_REQUIRED_FUNCTIONS( printf strftime wcscpy wcsncpy wcscat wcschr wcsstr wcslen + wcscmp wcsncmp wcscspn ) + +#todo: wcstoq is bsd equiv of wcstoll, we can use that... +CHECK_OPTIONAL_FUNCTIONS( wcsupr wcscasecmp wcsicmp wcstoll wprintf lltow + wcstod wcsdup strupr strlwr lltoa strtoll gettimeofday _vsnwprintf mmap "MapViewOfFile(0,0,0,0,0)" +) + +#make decisions about which functions to use... +CHOOSE_FUNCTION(fileHandleStat "fstati64;_fstati64;fstat64;fstat;_fstat") +IF ( _CL_HAVE_FUNCTION_FSTATI64 OR _CL_HAVE_FUNCTION__FSTATI64 OR _CL_HAVE_FUNCTION_FSTAT64 ) + SET ( USE_STAT64 1 ) +ENDIF ( _CL_HAVE_FUNCTION_FSTATI64 OR _CL_HAVE_FUNCTION__FSTATI64 OR _CL_HAVE_FUNCTION_FSTAT64 ) + +IF ( USE_STAT64 ) + CHOOSE_FUNCTION(fileStat "stati64;_stati64;stat64;stat;_stat") + CHOOSE_FUNCTION(fileSize "filelengthi64;_filelengthi64;filelength;_filelength" "#define fileSize CL_NS(util)::Misc::filelength") + CHOOSE_FUNCTION(fileSeek "lseeki64;_lseeki64;lseek64;lseek;_lseek") + CHOOSE_MISC(TYPE_CL_STAT_T + HAVE_TYPE_CL_STAT_T + "struct stati64 x\;" "#define cl_stat_t stati64" "stati64" + "struct _stati64 x\;" "#define cl_stat_t _stati64" "_stati64" + "struct stat64 x\;" "#define cl_stat_t stat64" "stat64" + "struct stat x\;" "#define cl_stat_t stat" "stat" + "struct _stat x\;" "#define cl_stat_t _stat" "_stat" + ) +ELSE( USE_STAT64 ) + #borland doesn't have a fstat64, so we have to fallback to non 64 bit everything... + CHOOSE_FUNCTION(fileStat "stat;_stat") + CHOOSE_FUNCTION(fileSize "filelength;_filelength" "#define fileSize CL_NS(util)::Misc::filelength") + CHOOSE_FUNCTION(fileSeek "lseek;_lseek") + CHOOSE_MISC(TYPE_CL_STAT_T + HAVE_TYPE_CL_STAT_T + "struct stat x\;" "#define cl_stat_t stat" "stat" + "struct _stat x\;" "#define cl_stat_t _stat" "_stat" + ) +ENDIF( USE_STAT64 ) + +#ftell (and probably soon ftell64) are POSIX standard functions, but tell and +#tell64 are not, so we define fileTell in terms of fileSeek. +CHOOSE_FUNCTION(fileTell "telli64;_telli64;tell64;tell;_tell" "#define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR)") + +CHOOSE_FUNCTION(_realpath "realpath" "#define _realpath(rel,abs) ::_fullpath(abs,rel,CL_MAX_PATH)") +CHOOSE_FUNCTION(_rename "rename") +CHOOSE_FUNCTION(_close "_close((int)0);close") +CHOOSE_FUNCTION(_read "_read((int)0, (void*)0, (unsigned int)0);read") +CHOOSE_FUNCTION(_cl_open "_open(0,0,0);open") +CHOOSE_FUNCTION(_write "_write((int)0, (const void*)0, (unsigned int)0);write") +CHOOSE_FUNCTION(_unlink "_unlink((const char*)0);unlink") +CHOOSE_FUNCTION(_ftime "_ftime(0);ftime") +CHOOSE_FUNCTION(_mkdir "_mkdir((const char*)0)" "#define _mkdir(x) mkdir(x,0777)") +CHOOSE_FUNCTION(SLEEPFUNCTION "usleep;Sleep(0);_sleep") + +CHOOSE_FUNCTION(_snprintf "snprintf;_snprintf") +CHOOSE_FUNCTION(_snwprintf "snwprintf;_snwprintf") + +######################################################################## +# test for symbols +######################################################################## +CHOOSE_SYMBOL (_O_RANDOM "_O_RANDOM;O_RANDOM") +CHOOSE_SYMBOL (_O_BINARY "_O_BINARY;O_BINARY") +CHOOSE_SYMBOL (_S_IREAD "_S_IREAD;S_IREAD") +CHOOSE_SYMBOL (_S_IWRITE "_S_IWRITE;S_IWRITE") + + +#define defaults +IF ( NOT HAVE_SYMBOL__O_RANDOM ) + SET (SYMBOL__O_RANDOM "#define _O_RANDOM 0") +ENDIF ( NOT HAVE_SYMBOL__O_RANDOM ) + +IF ( NOT HAVE_SYMBOL__O_BINARY ) + SET (SYMBOL__O_BINARY "#define _O_BINARY 0") +ENDIF ( NOT HAVE_SYMBOL__O_BINARY) + +IF ( NOT HAVE_SYMBOL__S_IREAD ) + SET (SYMBOL__S_IREAD "#define _S_IREAD 0333") +ENDIF ( NOT HAVE_SYMBOL__S_IREAD ) + +IF ( NOT HAVE_SYMBOL__S_IWRITE ) + SET (SYMBOL__S_IWRITE "#define _S_IWRITE 0333") +ENDIF ( NOT HAVE_SYMBOL__S_IWRITE ) + +#try and figure out the actual value of what _CL_MAX_PATH is +DEFINE_MAXPATH_VALUE (SYMBOL_CL_MAX_PATH) + + +######################################################################## +# test for tchar replacments +######################################################################## +IF ( ENABLE_ASCII_MODE ) + CHOOSE_TYPE(TCHAR 1 "" "TCHAR;char" SYMBOL_TCHAR ) +ELSE ( ENABLE_ASCII_MODE ) + CHOOSE_TYPE(TCHAR -1 "" "TCHAR;wchar_t;unsigned short" SYMBOL_TCHAR) +ENDIF ( ENABLE_ASCII_MODE ) +IF ( NOT SYMBOL_TCHAR STREQUAL "TCHAR" ) + SET( SYMBOL_TCHAR "#define TCHAR ${SYMBOL_TCHAR}" ) +ELSE ( NOT SYMBOL_TCHAR STREQUAL "TCHAR" ) + SET( SYMBOL_TCHAR "/* #undef TCHAR */" ) +ENDIF ( NOT SYMBOL_TCHAR STREQUAL "TCHAR" ) + +CHOOSE_SYMBOL (_T "_T" SYMBOL__T) +IF ( NOT HAVE_SYMBOL__T ) +IF ( ENABLE_ASCII_MODE ) + SET (SYMBOL__T "#define _T(x) x") +ELSE ( ENABLE_ASCII_MODE ) + SET (SYMBOL__T "#define _T(x) L ## x") +ENDIF ( ENABLE_ASCII_MODE ) +ELSE ( NOT HAVE_SYMBOL__T ) + SET( SYMBOL__T "/* #undef _T */" ) +ENDIF ( NOT HAVE_SYMBOL__T ) + + +######################################################################## +# test for compiler capabilities. +######################################################################## + +#check for pthreads +IF ( CMAKE_USE_WIN32_THREADS_INIT ) + SET ( _CL_HAVE_WIN32_THREADS 1 ) +ENDIF ( CMAKE_USE_WIN32_THREADS_INIT ) +IF ( CMAKE_USE_PTHREADS_INIT ) + SET ( _CL_HAVE_PTHREAD 1 ) +ENDIF (CMAKE_USE_PTHREADS_INIT) +IF ( CMAKE_USE_SPROC_INIT OR CMAKE_HP_PTHREADS_INIT ) + MESSAGE(FATAL_ERROR "Threads library not implemented") +ENDIF( CMAKE_USE_SPROC_INIT OR CMAKE_HP_PTHREADS_INIT ) + +#define if we have pthreads with recursive capabilities +CHECK_PTHREAD_RECURSIVE(_CL_HAVE_PTHREAD _CL_HAVE_PTHREAD_MUTEX_RECURSIVE) + +CHECK_HAVE_GCC_ATOMIC_FUNCTIONS(_CL_HAVE_GCC_ATOMIC_FUNCTIONS) + +#see if we can hide all symbols by default... +MACRO_CHECK_GCC_VISIBILITY(_CL_HAVE_GCCVISIBILITYPATCH) + +#Check that we can handle try/catch +CHECK_HAVE_FUNCTION_TRY_BLOCKS (_CL_HAVE_TRY_BLOCKS) + +#check that we support new float byte<->float conversions +CHECK_FLOAT_BYTE_WORKS(_CL_HAVE_NO_FLOAT_BYTE, 1) + +#check how to use hashmaps +CHECK_HASH_MAPS (CL_NS_HASHING_VALUE LUCENE_DISABLE_HASHING) + +#check that we have namespace support +CHECK_NAMESPACE (_CL_HAVE_NAMESPACES) + +#check if snprintf functions are buggy +CHECK_SNPRINTF() + +#define how we are going to define 64bit numbers +DEFINE_LONGLONG_SYNTAX() + +#define how to define a static const (or fallback to enum) +DEFINE_STATIC_SYNTAX() + +#test for ansi for scope (needed for msvc6) +INCLUDE(TestForANSIForScope) +IF ( CMAKE_ANSI_FOR_SCOPE ) + SET ( CMAKE_ANSI_FOR_SCOPE 1 ) +ELSE ( CMAKE_ANSI_FOR_SCOPE ) + SET ( CMAKE_ANSI_FOR_SCOPE 0 ) +ENDIF ( CMAKE_ANSI_FOR_SCOPE ) + + +#check that all these definitions are set, or fail... +MUSTDEFINE_VAR("HAVE_TYPE_INT8_T;HAVE_TYPE_UINT8_T;HAVE_TYPE_INT16_T;HAVE_TYPE_UINT16_T;HAVE_TYPE_UINT16_T;" ) +MUSTDEFINE_VAR("HAVE_TYPE_INT32_T;HAVE_TYPE_UINT32_T;HAVE_TYPE_INT64_T;HAVE_TYPE_UINT64_T;HAVE_TYPE_SIZE_T;HAVE_TYPE_CL_STAT_T") +MUSTDEFINE_VAR("_CL_HAVE_TRY_BLOCKS") + +#must have timeb OR GETTIMEOFDAY +IF ( NOT HAVE_TYPE__TIMEB AND NOT _CL_HAVE_FUNCTION_GETTIMEOFDAY ) + MESSAGE( FATAL_ERROR "timeb or gettimeofday must be available." ) +ENDIF ( NOT HAVE_TYPE__TIMEB AND NOT _CL_HAVE_FUNCTION_GETTIMEOFDAY ) + +#now write out our configuration.... +CONFIGURE_FILE(${clucene-shared_SOURCE_DIR}/CLucene/clucene-config.h.cmake ${clucene-shared_BINARY_DIR}/CLucene/clucene-config.h) +CONFIGURE_FILE(${clucene-shared_SOURCE_DIR}/CLucene/_clucene-config.h.cmake ${clucene-shared_BINARY_DIR}/CLucene/_clucene-config.h) + +#add the files to our groups +SOURCE_GROUP("config" ./CLucene/config/*) +SOURCE_GROUP("debug" ./CLucene/debug/*) +SOURCE_GROUP("util" ./CLucene/util/*) +SOURCE_GROUP("zlib" ./zlib/*) + +MACRO (GET_SHARED_FILES result) + IF ( "" STREQUAL "${ARGV2}" ) + SET ( rel ${clucene-shared_SOURCE_DIR} ) + ELSE ( "" STREQUAL "${ARGV2}" ) + SET ( rel ${ARGV2} ) + ENDIF ( "" STREQUAL "${ARGV2}" ) + + SET(${result} + ${rel}/CLucene/SharedHeader.cpp + ${rel}/CLucene/config/gunichartables.cpp + ${rel}/CLucene/config/repl_tcslwr.cpp + ${rel}/CLucene/config/repl_tcstoll.cpp + ${rel}/CLucene/config/repl_tcscasecmp.cpp + ${rel}/CLucene/config/repl_tprintf.cpp + ${rel}/CLucene/config/repl_lltot.cpp + ${rel}/CLucene/config/repl_tcstod.cpp + ${rel}/CLucene/config/utf8.cpp + ${rel}/CLucene/config/threads.cpp + ${rel}/CLucene/debug/condition.cpp + ${rel}/CLucene/util/StringBuffer.cpp + ${rel}/CLucene/util/Misc.cpp + ${rel}/CLucene/util/dirent.cpp + ) + + IF ( NOT ZLIB_FOUND ) + SET(${result} ${${result}} + ${clucene-ext_SOURCE_DIR}/zlib/adler32.c + ${clucene-ext_SOURCE_DIR}/zlib/compress.c + ${clucene-ext_SOURCE_DIR}/zlib/crc32.c + ${clucene-ext_SOURCE_DIR}/zlib/deflate.c + ${clucene-ext_SOURCE_DIR}/zlib/gzio.c + ${clucene-ext_SOURCE_DIR}/zlib/inffast.c + ${clucene-ext_SOURCE_DIR}/zlib/inflate.c + ${clucene-ext_SOURCE_DIR}/zlib/inftrees.c + ${clucene-ext_SOURCE_DIR}/zlib/trees.c + ${clucene-ext_SOURCE_DIR}/zlib/zutil.c + ) + ENDIF ( NOT ZLIB_FOUND ) +ENDMACRO (GET_SHARED_FILES) + +GET_SHARED_FILES(clucene_shared_Files ".") + +#find our headers +file(GLOB_RECURSE HEADERS ${clucene-shared_SOURCE_DIR}/*.h) + +add_library(clucene-shared SHARED + ${clucene_shared_Files} ${HEADERS} +) + +#set properties on the libraries +SET_TARGET_PROPERTIES(clucene-shared PROPERTIES + VERSION ${CLUCENE_VERSION} + SOVERSION ${CLUCENE_SOVERSION} + COMPILE_DEFINITIONS_DEBUG _DEBUG +) +TARGET_LINK_LIBRARIES(clucene-shared ${CMAKE_THREAD_LIBS_INIT}) +IF ( EXTRA_LIBS ) + TARGET_LINK_LIBRARIES(clucene-shared ${EXTRA_LIBS}) +ENDIF ( EXTRA_LIBS ) + +install(TARGETS clucene-shared + DESTINATION ${LIB_DESTINATION} + COMPONENT development ) + +IF ( BUILD_STATIC_LIBRARIES ) + add_library(clucene-shared-static STATIC + ${clucene_shared_Files} ${HEADERS} + ) + + SET_TARGET_PROPERTIES(clucene-shared-static PROPERTIES + VERSION ${CLUCENE_VERSION} + SOVERSION ${CLUCENE_SOVERSION} + COMPILE_DEFINITIONS_DEBUG _DEBUG + ) + TARGET_LINK_LIBRARIES(clucene-shared-static ${CMAKE_THREAD_LIBS_INIT}) + install(TARGETS clucene-shared-static + DESTINATION ${LIB_DESTINATION} + COMPONENT runtime ) +ENDIF ( BUILD_STATIC_LIBRARIES ) diff -Nru clucene-core-0.9.21b/src/shared/README clucene-core-2.3.3.4/src/shared/README --- clucene-core-0.9.21b/src/shared/README 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/shared/README 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,5 @@ +This package creates a library that is used in all the CLucene projects. It provides +cross-platform macros and functions that used to be inside CLucene. Since we need +to be able to link against the shared clucene-core library, we need these functions +to be seperate. They provide things like cl_* string macros, file handling functions, +replacement functions, etc. diff -Nru clucene-core-0.9.21b/src/test/analysis/TestAnalysis.cpp clucene-core-2.3.3.4/src/test/analysis/TestAnalysis.cpp --- clucene-core-0.9.21b/src/test/analysis/TestAnalysis.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/analysis/TestAnalysis.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,76 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + + void test(CuTest *tc,Reader* reader, bool verbose, int64_t bytes) { + StandardAnalyzer analyzer; + TokenStream* stream = analyzer.tokenStream(NULL, reader); + + uint64_t start = Misc::currentTimeMillis(); + + int32_t count = 0; + CL_NS(analysis)::Token t; + while ( stream->next(&t) != NULL ) { + if (verbose) { + CuMessage(tc, _T("Text=%s start=%d end=%d\n"), t.termBuffer(), t.startOffset(), t.endOffset() ); + } + count++; + } + + uint64_t end = Misc::currentTimeMillis(); + int64_t time = end - start; + CuMessageA (tc,"%d milliseconds to extract ", (int32_t)time); + CuMessageA (tc,"%d tokens\n", count); + CuMessageA (tc,"%f microseconds/token\n",(time*1000.0)/count ); + CuMessageA (tc,"%f megabytes/hour\n", (bytes * 1000.0 * 60.0 * 60.0)/(time * 1000000.0) ); + + _CLDELETE(stream); + } + +/*todo: move this to contribs because we have no filereader + void _testFile(CuTest *tc,const char* fname, bool verbose) { + struct cl_stat_t buf; + fileStat(fname,&buf); + + int64_t bytes = buf.st_size; + + CuMessageA(tc," Reading test file containing %d bytes.\n", bytes ); + FileReader fr (fname); + const TCHAR *start; + size_t total = 0; + do { + size_t numRead = fr.read(start, numRead); + total += numRead; + } while (numRead >= 0); + test(tc,&fr, verbose, total); + fr.close(); + }*/ + + void _testText(CuTest *tc,const TCHAR* text, bool verbose) { + CuMessage(tc, _T(" Tokenizing string: %s\n"), text ); + StringReader reader(text); + test(tc, &reader, verbose, _tcslen(text)); + } + + void testText(CuTest *tc){ + _testText(tc,_T("This is a test"),true); + } + /* void testFile(CuTest *tc){ + CuAssert(tc,_T("words.txt does not exist"),Misc::dir_Exists(CLUCENE_LOCATION "reuters-21578/feldman-cia-worldfactbook-data.txt")); + _testFile(tc,CLUCENE_LOCATION "reuters-21578/feldman-cia-worldfactbook-data.txt",false); + }*/ + +CuSuite *testanalysis(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Analysis Test")); + + // SUITE_ADD_TEST(suite, testFile); + SUITE_ADD_TEST(suite, testText); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/analysis/TestAnalyzers.cpp clucene-core-2.3.3.4/src/test/analysis/TestAnalyzers.cpp --- clucene-core-0.9.21b/src/test/analysis/TestAnalyzers.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/analysis/TestAnalyzers.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,518 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" + +// Ported from Java Lucene tests + + void assertAnalyzesTo(CuTest *tc,Analyzer* a, const TCHAR* input, const TCHAR* output){ + Reader* reader = _CLNEW StringReader(input); + TokenStream* ts = a->tokenStream(_T("dummy"), reader ); + + const TCHAR* pos = output; + TCHAR buffer[80]; + const TCHAR* last = output; + CL_NS(analysis)::Token t; + while( (pos = _tcsstr(pos+1, _T(";"))) != NULL ) { + int32_t len = (int32_t)(pos-last); + _tcsncpy(buffer,last,len); + buffer[len]=0; + + CLUCENE_ASSERT(ts->next(&t)!=NULL); + CLUCENE_ASSERT( t.termLength() == _tcslen(buffer) ); + CLUCENE_ASSERT(_tcscmp( t.termBuffer(), buffer) == 0 ); + + last = pos+1; + } + CLUCENE_ASSERT(ts->next(&t)==NULL); //Test failed, more fields than expected. + + ts->close(); + _CLDELETE(reader); + _CLDELETE(ts); + } + + void assertReusableAnalyzesTo(CuTest *tc,Analyzer* a, const TCHAR* input, const TCHAR* output){ + Reader* reader = _CLNEW StringReader(input); + TokenStream* ts = a->reusableTokenStream(_T("dummy"), reader ); + + const TCHAR* pos = output; + TCHAR buffer[80]; + const TCHAR* last = output; + CL_NS(analysis)::Token t; + while( (pos = _tcsstr(pos+1, _T(";"))) != NULL ) { + int32_t len = (int32_t)(pos-last); + _tcsncpy(buffer,last,len); + buffer[len]=0; + + CLUCENE_ASSERT(ts->next(&t)!=NULL); + CLUCENE_ASSERT( t.termLength() == _tcslen(buffer) ); + CLUCENE_ASSERT(_tcscmp( t.termBuffer(), buffer) == 0 ); + + last = pos+1; + } + CLUCENE_ASSERT(ts->next(&t)==NULL); //Test failed, more fields than expected. + + ts->close(); + _CLLDELETE(reader); + } + + void testSimpleAnalyzer(CuTest *tc){ + Analyzer* a = _CLNEW SimpleAnalyzer(); + assertAnalyzesTo(tc,a, _T("foo bar FOO BAR"), _T("foo;bar;foo;bar;") ); + assertAnalyzesTo(tc,a, _T("foo bar . FOO <> BAR"), _T("foo;bar;foo;bar;")); + assertAnalyzesTo(tc,a, _T("foo.bar.FOO.BAR"), _T("foo;bar;foo;bar;")); + assertAnalyzesTo(tc,a, _T("U.S.A."), _T("u;s;a;") ); + assertAnalyzesTo(tc,a, _T("C++"), _T("c;") ); + assertAnalyzesTo(tc,a, _T("B2B"), _T("b;b;")); + assertAnalyzesTo(tc,a, _T("2B"), _T("b;")); + assertAnalyzesTo(tc,a, _T("\"QUOTED\" word"), _T("quoted;word;")); + + _CLLDELETE(a); + } + + void useKeywordTokenizer(CuTest *tc, const TCHAR* text) { + StringReader reader(text); + KeywordTokenizer tokenizer(&reader, 1); + Token t; + CuAssertTrue(tc, tokenizer.next(&t) != NULL, _T("token expected")); + CuAssertStrEquals(tc, _T(""), text, t.termBuffer(), false); + CuAssertTrue(tc, tokenizer.next(&t) == NULL, _T("no further token expected")); + } + + // Tracker-Id: 3106808 + void testKeywordTokenizer(CuTest *tc) { + useKeywordTokenizer(tc, _T("1")); + useKeywordTokenizer(tc, _T("12")); + useKeywordTokenizer(tc, _T("123")); + useKeywordTokenizer(tc, _T("1234")); + useKeywordTokenizer(tc, _T("12345")); + useKeywordTokenizer(tc, _T("123456")); + useKeywordTokenizer(tc, _T("1234567")); + useKeywordTokenizer(tc, _T("12345678")); + useKeywordTokenizer(tc, _T("123456789")); + useKeywordTokenizer(tc, _T("1234567812345678")); + useKeywordTokenizer(tc, _T("123456781234567812345678")); + } + + void testKeywordAnalyzer(CuTest *tc){ + Analyzer* a = _CLNEW KeywordAnalyzer(); + + assertAnalyzesTo(tc,a, _T("foo bar FOO BAR"), _T("foo bar FOO BAR;") ); + assertAnalyzesTo(tc,a, _T("foo bar . FOO <> BAR"), _T("foo bar . FOO <> BAR;")); + assertAnalyzesTo(tc,a, _T("foo.bar.FOO.BAR"), _T("foo.bar.FOO.BAR;")); + assertAnalyzesTo(tc,a, _T("U.S.A."), _T("U.S.A.;") ); + assertAnalyzesTo(tc,a, _T("C++"), _T("C++;") ); + assertAnalyzesTo(tc,a, _T("B2B"), _T("B2B;")); + assertAnalyzesTo(tc,a, _T("2B"), _T("2B;")); + assertAnalyzesTo(tc,a, _T("\"QUOTED\" word"), _T("\"QUOTED\" word;")); + + _CLDELETE(a); + } + + void testNull(CuTest *tc){ + Analyzer* a = _CLNEW WhitespaceAnalyzer(); + assertAnalyzesTo(tc,a, _T("foo bar FOO BAR"), _T("foo;bar;FOO;BAR;")); + assertAnalyzesTo(tc,a, _T("foo bar . FOO <> BAR"), _T("foo;bar;.;FOO;<>;BAR;")); + assertAnalyzesTo(tc,a, _T("foo.bar.FOO.BAR"), _T("foo.bar.FOO.BAR;")); + assertAnalyzesTo(tc,a, _T("U.S.A."), _T("U.S.A.;")); + assertAnalyzesTo(tc,a, _T("C++"), _T("C++;")); + assertAnalyzesTo(tc,a, _T("B2B"), _T("B2B;")); + assertAnalyzesTo(tc,a, _T("2B"), _T("2B;")); + assertAnalyzesTo(tc,a, _T("\"QUOTED\" word"), _T("\"QUOTED\";word;") ); + + _CLLDELETE(a); + } + + void testStop(CuTest *tc){ + Analyzer* a = _CLNEW StopAnalyzer(); + assertAnalyzesTo(tc,a, _T("foo bar FOO BAR"), _T("foo;bar;foo;bar;")); + assertAnalyzesTo(tc,a, _T("foo a bar such FOO THESE BAR"), _T("foo;bar;foo;bar;")); + + _CLLDELETE(a); + } + + class BuffTokenFilter : public TokenFilter { + public: + std::list* lst; + + BuffTokenFilter(TokenStream* input) : TokenFilter(input), lst(NULL) { + } + + virtual ~BuffTokenFilter() + { + _CLLDELETE(lst); + } + + Token* next(Token* t) { + if (lst == NULL) { + lst = new std::list(); + for(;;) { + if (input->next(t) == NULL) break; + lst->push_back(t); + } + } + if (lst->size()==0) return NULL; + Token* ret = lst->back(); + lst->pop_back(); + return ret; + } + }; + + class PayloadSetter : public TokenFilter { + public: + ValueArray* data; + Payload* p; + + PayloadSetter(TokenStream* input) : TokenFilter(input), data(_CLNEW ValueArray) { + p = _CLNEW Payload(data->values, 1, false); + } + + Token* next(Token* target) { + if (input->next(target) == NULL) return NULL; + target->setPayload(p); // reuse the payload / byte[] + data->values[0]++; + return target; + } + }; + + void verifyPayload(CuTest* tc, TokenStream* ts) { + Token* t = _CLNEW Token(); + for(uint8_t b=1;;b++) { + t->clear(); + if ( ts->next(t) ) break; + // System.out.println("id="+System.identityHashCode(t) + " " + t); + // System.out.println("payload=" + (int)t.getPayload().toByteArray()[0]); + const ValueArray* pl = t->getPayload()->toByteArray(); + assertTrue(b == pl->values[0]); + _CLLDELETE(pl); + } + _CLLDELETE(t); + } + + // Make sure old style next() calls result in a new copy of payloads + void testPayloadCopy(CuTest* tc) { + const TCHAR* s = _T("how now brown cow"); + TokenStream* ts; + ts = _CLNEW WhitespaceTokenizer(_CLNEW StringReader(s)); + ts = _CLNEW BuffTokenFilter(ts); + ts = _CLNEW PayloadSetter(ts); + verifyPayload(tc, ts); + _CLLDELETE(ts); + + ts = _CLNEW WhitespaceTokenizer(_CLNEW StringReader(s)); + ts = _CLNEW PayloadSetter(ts); + ts = _CLNEW BuffTokenFilter(ts); + verifyPayload(tc, ts); + _CLLDELETE(ts); + } + + // LUCENE-1150: Just a compile time test, to ensure the + // StandardAnalyzer constants remain publicly accessible + void _testStandardConstants() { + int x = standard::ALPHANUM; + x = standard::APOSTROPHE; + x = standard::ACRONYM; + x = standard::COMPANY; + x = standard::EMAIL; + x = standard::HOST; + x = standard::NUM; + x = standard::CJK; // TODO: Java Lucene 2.3.2 declares this as CJ + // const TCHAR** y = standard::tokenImage; <-- TODO: Failing compile time test + } + +// TestPerFieldAnalzyerWrapper.Java + void testPerFieldAnalzyerWrapper(CuTest *tc){ + const TCHAR* text = _T("Qwerty"); + PerFieldAnalyzerWrapper analyzer(_CLNEW WhitespaceAnalyzer()); + + analyzer.addAnalyzer(_T("special"), _CLNEW SimpleAnalyzer()); + + StringReader reader(text); + TokenStream* tokenStream = analyzer.tokenStream( _T("field"), &reader); + CL_NS(analysis)::Token token; + + CLUCENE_ASSERT( tokenStream->next(&token) != NULL ); + CuAssertStrEquals(tc,_T("token.termBuffer()"), _T("Qwerty"), + token.termBuffer()); + _CLDELETE(tokenStream); + + StringReader reader2(text); + tokenStream = analyzer.tokenStream(_T("special"), &reader2); + CLUCENE_ASSERT( tokenStream->next(&token) != NULL ); + CuAssertStrEquals(tc, _T("token.termBuffer()"), _T("qwerty"), + token.termBuffer()); + _CLDELETE(tokenStream); + } + +// A CLucene-specific test +#define USE_PER_FIELD_ANALYZER +//#define SUB_ANALYZER_TYPE lucene::analysis::WhitespaceAnalyzer +#define SUB_ANALYZER_TYPE lucene::analysis::standard::StandardAnalyzer + + void testPerFieldAnalzyerWrapper2(CuTest *tc){ + try { +#ifdef USE_PER_FIELD_ANALYZER + lucene::analysis::PerFieldAnalyzerWrapper analyzer( + _CLNEW lucene::analysis::standard::StandardAnalyzer()); + analyzer.addAnalyzer(_T("First"), _CLNEW SUB_ANALYZER_TYPE()); + analyzer.addAnalyzer(_T("Second"), _CLNEW SUB_ANALYZER_TYPE()); + analyzer.addAnalyzer(_T("Third"), _CLNEW SUB_ANALYZER_TYPE()); + analyzer.addAnalyzer(_T("Fourth"), _CLNEW SUB_ANALYZER_TYPE()); + analyzer.addAnalyzer(_T("Fifth"), _CLNEW SUB_ANALYZER_TYPE()); +#else + lucene::analysis::WhitespaceAnalyzer analyzer; +#endif + char INDEX_PATH[CL_MAX_PATH]; + sprintf(INDEX_PATH,"%s/%s",cl_tempDir, "test.analyzers"); + lucene::index::IndexWriter writer(INDEX_PATH, &analyzer, true); + lucene::document::Document doc; + int flags = lucene::document::Field::STORE_YES + | lucene::document::Field::INDEX_TOKENIZED; + for (int i = 0; i < 100/*00000*/; i++) { + doc.clear(); + doc.add(*(_CLNEW lucene::document::Field( + _T("First"), _T("Blah blah blah"), flags))); + doc.add(*(_CLNEW lucene::document::Field( + _T("Second"), _T("Blah blah-- blah"), flags))); + doc.add(*(_CLNEW lucene::document::Field( + _T("Fifth"), _T("Blah blah__ blah"), flags))); + doc.add(*(_CLNEW lucene::document::Field( + _T("Eigth"), _T("Blah blah blah++"), flags))); + doc.add(*(_CLNEW lucene::document::Field( + _T("Ninth"), _T("Blah123 blah blah"), flags))); + writer.addDocument(&doc); + } + writer.close(); + } catch (CLuceneError err) { + printf("CLuceneError: %s", err.what()); + } + } + + void testEmptyStopList(CuTest *tc) + { + const TCHAR* stopWords = { NULL }; + StandardAnalyzer a(&stopWords); + RAMDirectory ram; + IndexWriter writer(&ram, &a, true); + + Document doc; + doc.add(*(_CLNEW lucene::document::Field( + _T("First"), _T("Blah blah blah"), Field::STORE_YES | Field::INDEX_TOKENIZED))); + writer.addDocument(&doc); + writer.close(); + + IndexSearcher searcher(&ram); + Query* q = QueryParser::parse(_T("blah"), _T("First"), &a); + Hits* h = searcher.search(q); + _CLLDELETE(h); + _CLLDELETE(q); + } + + void testStandardAnalyzer(CuTest *tc){ + Analyzer* a = _CLNEW StandardAnalyzer(); + + //todo: check this + assertAnalyzesTo(tc,a, _T("[050-070]"), _T("050;-070;") ); + assertReusableAnalyzesTo(tc,a, _T("[050-070]"), _T("050;-070;") ); + assertReusableAnalyzesTo(tc,a, _T("[050-070]"), _T("050;-070;") ); + + _CLDELETE(a); + } + + void testISOLatin1AccentFilter(CuTest *tc){ + TCHAR str[200]; + _tcscpy(str, _T("Des mot cl\xe9s \xc0 LA CHA\xceNE \xc0 \xc1 \xc2 ") //Des mot cl?s ? LA CHA?NE ? ? ? + _T("\xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf") //? ? ? ? ? ? ? ? ? ? ? ? ? + _T(" \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd8 \xde \xd9 \xda \xdb") //? ? ? ? ? ? ? ? ? ? ? ? ? + _T(" \xdc \xdd \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 ") //? ? ? ? ? ? ? ? ? ? ? + _T("\xea \xeb \xec \xed \xee \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 ") //? ? ? ? ? ? ? ? ? ? ? ? ? + _T("\xf8 \xdf \xfe \xf9 \xfa \xfb \xfc \xfd \xff") //? ? ? ? ? ? ? ? ? + _T(" ") ); //room for extra latin stuff + #ifdef _UCS2 + int p = _tcslen(str)-6; + str[p+1] = 0x152;// ? + str[p+3] = 0x153;// ? + str[p+5] = 0x178;//? + #endif + + StringReader reader(str); + WhitespaceTokenizer ws(&reader); + ISOLatin1AccentFilter filter(&ws,false); + CL_NS(analysis)::Token token; + + + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("Des"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("mot"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("cles"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("LA"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("CHAINE"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("AE"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("C"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("E"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("E"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("E"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("E"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("I"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("I"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("I"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("I"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("D"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("N"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("TH"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("U"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("U"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("U"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("U"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("Y"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("ae"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("c"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("e"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("e"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("e"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("e"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("i"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("i"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("i"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("i"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("d"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("n"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("ss"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("th"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("u"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("u"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("u"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("u"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("y"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("y"), token.termBuffer()); + + #ifdef _UCS2 + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("OE"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("oe"), token.termBuffer()); + CLUCENE_ASSERT(filter.next(&token) != NULL); CuAssertStrEquals(tc, _T("Token compare"), _T("Y"), token.termBuffer()); + #endif + + + CLUCENE_ASSERT(filter.next(&token)==NULL); + } + + void testWordlistLoader(CuTest *tc){ + char stopwordsfile[1024]; + strcpy(stopwordsfile, clucene_data_location); + strcat(stopwordsfile, "/StopWords.test"); + Analyzer* a = _CLNEW StopAnalyzer(stopwordsfile); + assertAnalyzesTo(tc,a, _T("foo bar FOO BAR"), _T("foo;bar;foo;bar;")); + assertAnalyzesTo(tc,a, _T("foo a bar such FOO THESE BAR"), _T("foo;bar;foo;bar;")); + + _CLDELETE(a); + + TCHAR testString[10]; + _tcscpy(testString, _T("test")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("test")); + _tcscpy(testString, _T("test ")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("test")); + _tcscpy(testString, _T("test ")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("test")); + _tcscpy(testString, _T(" test")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("test")); + _tcscpy(testString, _T(" test")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("test")); + _tcscpy(testString, _T(" test ")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("test")); + _tcscpy(testString, _T(" test ")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("test")); + _tcscpy(testString, _T(" test ")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("test")); + _tcscpy(testString, _T(" te st ")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("te")); + _tcscpy(testString, _T("tes t")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("tes")); + _tcscpy(testString, _T(" t est ")); + CuAssertStrEquals(tc, _T("stringTrim compare"), CL_NS(util)::Misc::wordTrim(testString), _T("t")); + } + + void testMutipleDocument(CuTest *tc) { + RAMDirectory dir; + KeywordAnalyzer a; + IndexWriter* writer = _CLNEW IndexWriter(&dir,&a, true); + Document* doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("partnum"), _T("Q36"), Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("partnum"), _T("Q37"), Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + writer->close(); + _CLLDELETE(writer); + + IndexReader* reader = IndexReader::open(&dir); + Term* t = _CLNEW Term(_T("partnum"), _T("Q36")); + TermDocs* td = reader->termDocs(t); + _CLDECDELETE(t); + CLUCENE_ASSERT(td->next()); + t = _CLNEW Term(_T("partnum"), _T("Q37")); + td = reader->termDocs(t); + _CLDECDELETE(t); + reader->close(); + CLUCENE_ASSERT(td->next()); + _CLLDELETE(reader); + } + +CuSuite *testanalyzers(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Analyzers Test")); + + // Ported from TestAnalyzers.java + SUITE_ADD_TEST(suite, testSimpleAnalyzer); + SUITE_ADD_TEST(suite, testNull); + SUITE_ADD_TEST(suite, testStop); + SUITE_ADD_TEST(suite, testKeywordTokenizer); + SUITE_ADD_TEST(suite, testStandardAnalyzer); + //SUITE_ADD_TEST(suite, testPayloadCopy); // <- TODO: Finish Payload and remove asserts before enabling this test + + // Ported from TestPerFieldAnalzyerWrapper.java + 1 test of our own + SUITE_ADD_TEST(suite, testPerFieldAnalzyerWrapper); + SUITE_ADD_TEST(suite, testPerFieldAnalzyerWrapper2); + +// Still incomplete: + // Ported from TestKeywordAnalyzer.java + //SUITE_ADD_TEST(suite, testMutipleDocument); // <- TODO: This is failing with an exception "Terms are out of order" + + // Ported from TestISOLatin1AccentFilter.java + SUITE_ADD_TEST(suite, testISOLatin1AccentFilter); + + SUITE_ADD_TEST(suite, testWordlistLoader); + SUITE_ADD_TEST(suite, testEmptyStopList); + + // TODO: Remove testStandardAnalyzer and port TestStandardAnalyzer.java as a whole + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/CLMonolithic_Test.cpp clucene-core-2.3.3.4/src/test/CLMonolithic_Test.cpp --- clucene-core-0.9.21b/src/test/CLMonolithic_Test.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/CLMonolithic_Test.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,67 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +/* +* this is a monolithic file that can be used to compile clucene tests using one source file. +* +* note: when creating a project add either this file, or all the other .cpp files, not both! +*/ + +#include "CuTest.cpp" +#include "testall.cpp" +#include "tests.cpp" + +#include "analysis/TestAnalysis.cpp" +#include "analysis/TestAnalyzers.cpp" +#include "debug/TestError.cpp" +#include "document/TestDateTools.cpp" +#include "document/TestDocument.cpp" +#include "document/TestField.cpp" +#include "document/TestNumberTools.cpp" +#include "index/IndexWriter4Test.cpp" +#include "index/TestAddIndexesNoOptimize.cpp" +#include "index/TestHighFreqTerms.cpp" +#include "index/TestIndexModifier.cpp" +#include "index/TestIndexReader.cpp" +#include "index/TestIndexWriter.cpp" +#include "index/TestReuters.cpp" +#include "index/TestTermVectorsReader.cpp" +#include "index/TestThreading.cpp" +#include "index/TestUtf8.cpp" +#include "queryParser/TestMultiFieldQueryParser.cpp" +#include "queryParser/TestQueryParser.cpp" +#include "search/BaseTestRangeFilter.cpp" +#include "search/CheckHits.cpp" +#include "search/QueryUtils.cpp" +#include "search/spans/TestBasics.cpp" +#include "search/spans/TestNearSpansOrdered.cpp" +#include "search/spans/TestSpanExplanations.cpp" +#include "search/spans/TestSpanExplanationsOfNonMatches.cpp" +#include "search/spans/TestSpanQueries.cpp" +#include "search/spans/TestSpansAdvanced2.cpp" +#include "search/spans/TestSpansAdvanced.cpp" +#include "search/spans/TestSpans.cpp" +#include "search/TestBoolean.cpp" +#include "search/TestConstantScoreRangeQuery.cpp" +#include "search/TestDateFilter.cpp" +#include "search/TestExplanations.cpp" +#include "search/TestExtractTerms.cpp" +#include "search/TestForDuplicates.cpp" +#include "search/TestIndexSearcher.cpp" +#include "search/TestQueries.cpp" +#include "search/TestRangeFilter.cpp" +#include "search/TestSearch.cpp" +#include "search/TestSort.cpp" +#include "search/TestTermVector.cpp" +#include "search/TestWildcard.cpp" +#include "store/MockRAMDirectory.cpp" +#include "store/TestRAMDirectory.cpp" +#include "store/TestStore.cpp" +#include "util/English.cpp" +#include "util/TestBitSet.cpp" +#include "util/TestPriorityQueue.cpp" +#include "util/TestStringBuffer.cpp" + diff -Nru clucene-core-0.9.21b/src/test/CMakeLists.txt clucene-core-2.3.3.4/src/test/CMakeLists.txt --- clucene-core-0.9.21b/src/test/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/CMakeLists.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,260 @@ +PROJECT(clucene-test) + +INCLUDE (DefineOptions) +DEFINE_OPTIONS(EXTRA_OPTIONS EXTRA_LIBS) +ADD_DEFINITIONS(${EXTRA_OPTIONS}) + +INCLUDE_DIRECTORIES( ${clucene-test_SOURCE_DIR} ) + +SOURCE_GROUP("unit_testing" ./*.cpp) +SOURCE_GROUP("analysis" ./analysis/*) +SOURCE_GROUP("debug" ./debug/*) +SOURCE_GROUP("document" ./document/*) +SOURCE_GROUP("index" ./index/*) +SOURCE_GROUP("queryParser" ./queryParser/*) +SOURCE_GROUP("search" ./search/*) +SOURCE_GROUP("search-spans" ./search/spans/*) +SOURCE_GROUP("store" ./store/*) +SOURCE_GROUP("util" ./util/*) + +IF ( BUILD_CONTRIBS_LIB ) + SET(test_contribs_lib_files ./contribs-lib/analysis/de/TestGermanStemFilter.cpp) + SET(EXTRA_LIBS ${EXTRA_LIBS} clucene-contribs-lib) + ADD_DEFINITIONS(-DTEST_CONTRIB_LIBS) + INCLUDE_DIRECTORIES(${clucene-test_SOURCE_DIR} ${clucene-contribs-lib_SOURCE_DIR}) + + SOURCE_GROUP("contribs-lib" REGULAR_EXPRESSION ./contribs-lib/*) + SOURCE_GROUP("contribs-lib\\analysis" REGULAR_EXPRESSION ./contribs-lib/analysis/*) + SOURCE_GROUP("contribs-lib\\analysis\\de" FILES ${test_contribs_lib_files}) +ENDIF ( BUILD_CONTRIBS_LIB ) + +file(GLOB_RECURSE test_HEADERS ${CMAKE_SOURCE_DIR}/test/*.h) + +SET(test_files ./tests.cpp +./CuTest.cpp +./testall.cpp +./queryParser/TestQueryParser.cpp +./queryParser/TestMultiFieldQueryParser.cpp +./analysis/TestAnalysis.cpp +./analysis/TestAnalyzers.cpp +./debug/TestError.cpp +./document/TestDateTools.cpp +./document/TestDocument.cpp +./document/TestNumberTools.cpp +./document/TestField.cpp +./store/TestStore.cpp +./store/MockRAMDirectory.cpp +./store/TestRAMDirectory.cpp +./search/MockScorer.h +./search/MockHitCollector.h +./search/TestBoolean.cpp +./search/TestDateFilter.cpp +./search/TestForDuplicates.cpp +./search/TestQueries.cpp +./search/TestRangeFilter.cpp +./search/TestSearch.cpp +./search/TestSort.cpp +./search/TestWildcard.cpp +./search/TestTermVector.cpp +./search/TestExtractTerms.cpp +./search/TestConstantScoreRangeQuery.cpp +./search/TestIndexSearcher.cpp +./index/IndexWriter4Test.cpp +./search/BaseTestRangeFilter.h +./search/BaseTestRangeFilter.cpp +./search/QueryUtils.h +./search/QueryUtils.cpp +./search/CheckHits.h +./search/CheckHits.cpp +./search/TestExplanations.cpp +./search/TestExplanations.h +./search/spans/TestSpans.h +./search/spans/TestSpans.cpp +./search/spans/TestSpanQueries.cpp +./search/spans/TestBasics.h +./search/spans/TestBasics.cpp +./search/spans/TestSpansAdvanced.cpp +./search/spans/TestSpansAdvanced.h +./search/spans/TestSpansAdvanced2.cpp +./search/spans/TestSpansAdvanced2.h +./search/spans/TestNearSpansOrdered.cpp +./search/spans/TestNearSpansOrdered.h +./search/spans/TestSpanExplanations.cpp +./search/spans/TestSpanExplanations.h +./search/spans/TestSpanExplanationsOfNonMatches.cpp +./search/spans/TestSpanExplanationsOfNonMatches.h +./index/TestIndexModifier.cpp +./index/TestIndexWriter.cpp +./index/TestIndexModifier.cpp +./index/TestIndexReader.cpp +./index/TestThreading.cpp +./index/TestUtf8.cpp +./index/TestHighFreqTerms.cpp +./index/TestReuters.cpp +./index/TestAddIndexesNoOptimize.cpp +./index/TestTermVectorsReader.cpp +./util/TestPriorityQueue.cpp +./util/TestBitSet.cpp +./util/TestStringBuffer.cpp +./util/English.cpp +${test_HEADERS} +) +IF ( USE_SHARED_OBJECT_FILES ) + GET_SHARED_FILES(clucene_shared_Files) +ENDIF ( USE_SHARED_OBJECT_FILES ) + +#todo: do glob header and include header files for IDE. +ADD_EXECUTABLE(cl_test EXCLUDE_FROM_ALL ${clucene_shared_Files} ${test_files} ${test_contribs_lib_files}) + +#link the executable against the releavent clucene-shared library (if we aren't using the object files) +IF ( NOT USE_SHARED_OBJECT_FILES ) + TARGET_LINK_LIBRARIES(cl_test clucene-core clucene-shared ${EXTRA_LIBS}) +ENDIF ( NOT USE_SHARED_OBJECT_FILES ) + +############################ +#special tests: +############################ + +IF ( ENABLE_COMPILE_TESTS ) + +#define zlib library requirements... +find_package(ZLIB) +IF ( ZLIB_FOUND ) + SET ( EXTRA_LIBS ${EXTRA_LIBS} ${ZLIB_LIBRARY} ) + INCLUDE_DIRECTORIES( ${ZLIB_INCLUDE_DIR} ) +ENDIF ( ZLIB_FOUND ) + +SET(test_monolithic_Files ${clucene-core_SOURCE_DIR}/CLucene/CLMonolithic.cpp ./CLMonolithic_Test.cpp) + +SET (TESTS_CXX_FLAGS "-DMAKE_CLUCENE_SHARED_LIB -DMAKE_CLUCENE_CORE_LIB") +SET (TESTS_EXE_LINKER_FLAGS "${CMAKE_THREAD_LIBS_INIT}") + +ADD_EXECUTABLE(cl_test-ascii EXCLUDE_FROM_ALL ${test_monolithic_Files} ) +TARGET_LINK_LIBRARIES(cl_test-ascii "${EXTRA_LIBS}") +SET_TARGET_PROPERTIES(cl_test-ascii PROPERTIES + COMPILE_DEFINITIONS "_ASCII" + COMPILE_FLAGS "${TESTS_CXX_FLAGS}" + LINK_FLAGS "${TESTS_EXE_LINKER_FLAGS}") +ADD_CUSTOM_TARGET(test-ascii + COMMENT "Running cl_test-ascii" + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-ascii + DEPENDS cl_test-ascii) + +ADD_EXECUTABLE(cl_test-namespace EXCLUDE_FROM_ALL ${test_monolithic_Files} ) +TARGET_LINK_LIBRARIES(cl_test-namespace "${EXTRA_LIBS}") +SET_TARGET_PROPERTIES(cl_test-namespace PROPERTIES + COMPILE_DEFINITIONS "DISABLE_NAMESPACE" + COMPILE_FLAGS "${TESTS_CXX_FLAGS}" + LINK_FLAGS "${TESTS_EXE_LINKER_FLAGS}") +ADD_CUSTOM_TARGET(test-namespace + COMMENT "Running cl_test-namespace" + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-namespace + DEPENDS cl_test-namespace) + +ADD_EXECUTABLE(cl_test-mmap EXCLUDE_FROM_ALL ${test_monolithic_Files} ) +TARGET_LINK_LIBRARIES(cl_test-mmap "${EXTRA_LIBS}") +SET_TARGET_PROPERTIES(cl_test-mmap PROPERTIES + COMPILE_DEFINITIONS "LUCENE_FS_MMAP" + COMPILE_FLAGS "${TESTS_CXX_FLAGS}" + LINK_FLAGS "${TESTS_EXE_LINKER_FLAGS}") +ADD_CUSTOM_TARGET(test-mmap + COMMENT "Running cl_test-mmap" + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-mmap + DEPENDS cl_test-mmap) + +ADD_EXECUTABLE(cl_test-singlethreading EXCLUDE_FROM_ALL ${test_monolithic_Files} ) +TARGET_LINK_LIBRARIES(cl_test-singlethreading "${EXTRA_LIBS}") +SET_TARGET_PROPERTIES(cl_test-singlethreading PROPERTIES + COMPILE_DEFINITIONS "_CL_DISABLE_MULTITHREADING" + COMPILE_FLAGS "${TESTS_CXX_FLAGS}" + LINK_FLAGS "${TESTS_EXE_LINKER_FLAGS}") +ADD_CUSTOM_TARGET(test-singlethreading + COMMENT "Running cl_test-singlethreading" + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-singlethreading + DEPENDS cl_test-singlethreading) + +ADD_EXECUTABLE(cl_test-refcnt EXCLUDE_FROM_ALL ${test_monolithic_Files} ) +TARGET_LINK_LIBRARIES(cl_test-refcnt "${EXTRA_LIBS}") +SET_TARGET_PROPERTIES(cl_test-refcnt PROPERTIES + COMPILE_DEFINITIONS "LUCENE_ENABLE_REFCOUNT" + COMPILE_FLAGS "${TESTS_CXX_FLAGS}" + LINK_FLAGS "${TESTS_EXE_LINKER_FLAGS}") +ADD_CUSTOM_TARGET(test-refcnt + COMMENT "Running cl_test-refcnt" + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-refcnt + DEPENDS cl_test-refcnt) + +ADD_EXECUTABLE(cl_test-platform-charfuncs EXCLUDE_FROM_ALL ${test_monolithic_Files} ) +TARGET_LINK_LIBRARIES(cl_test-platform-charfuncs "${EXTRA_LIBS}") +SET_TARGET_PROPERTIES(cl_test-platform-charfuncs PROPERTIES + COMPILE_DEFINITIONS "LUCENE_USE_INTERNAL_CHAR_FUNCTIONS=0" + COMPILE_FLAGS "${TESTS_CXX_FLAGS}" + LINK_FLAGS "${TESTS_EXE_LINKER_FLAGS}") +#this one just tests that the compile works... tests will (mostly) fail, since the +#internal functions do not produce the exact results expected. +ADD_CUSTOM_TARGET(test-platform-charfuncs + COMMENT "Running cl_test-platform-charfuncs" + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-platform-charfuncs + DEPENDS cl_test-platform-charfuncs) + +#this one last so we only have pedantic for test-pedantic +ADD_EXECUTABLE(cl_test-pedantic EXCLUDE_FROM_ALL ${test_monolithic_Files}) +TARGET_LINK_LIBRARIES(cl_test-pedantic "${EXTRA_LIBS}") +SET_TARGET_PROPERTIES(cl_test-pedantic PROPERTIES + COMPILE_DEFINITIONS "" + COMPILE_FLAGS "${TESTS_CXX_FLAGS} -std=gnu++98 -pedantic -Wnon-virtual-dtor -Wundef -Wcast-align -Wchar-subscripts -W -Wformat-security -Wextra -Wall -Wno-long-long -Wno-sign-compare" + LINK_FLAGS "${TESTS_EXE_LINKER_FLAGS} -Wall") +ADD_CUSTOM_TARGET(test-pedantic + COMMENT "Running cl_test-pedantic" + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-pedantic + DEPENDS cl_test-pedantic) + + +CHECK_CXX_ACCEPTS_FLAG("-fprofile-arcs -ftest-coverage" GccFlagGcov) +IF ( GccFlagGcov ) + ADD_EXECUTABLE(cl_test-gcov EXCLUDE_FROM_ALL ${test_monolithic_Files} ) + TARGET_LINK_LIBRARIES(cl_test-gcov "${EXTRA_LIBS}") + SET_TARGET_PROPERTIES(cl_test-gcov PROPERTIES + COMPILE_FLAGS "${TESTS_CXX_FLAGS} -fprofile-arcs -ftest-coverage" + LINK_FLAGS "${TESTS_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage") + ADD_CUSTOM_TARGET(test-gcov + COMMENT "Running cl_test-gcov" + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-gcov + COMMAND lcov --directory CMakeFiles/cl_test-gcov.dir/__/core/CLucene -c -o clucene-coverage.info + COMMAND lcov --remove clucene-coverage.info "\"/usr/*\"" -o clucene-coverage.clean + COMMAND genhtml -o ${CMAKE_BINARY_DIR}/clucene-coverage clucene-coverage.clean + DEPENDS cl_test-gcov) +ENDIF ( GccFlagGcov ) + + + +#target for running all tests +ADD_CUSTOM_TARGET(test-all + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-pedantic + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-ascii + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-namespace + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-mmap + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-singlethreading + COMMAND ${EXECUTABLE_OUTPUT_PATH}/cl_test-refcnt + DEPENDS cl_test-pedantic cl_test-ascii cl_test-namespace cl_test-mmap cl_test-singlethreading cl_test-refcnt cl_test-platform-charfuncs +) + +ENDIF ( ENABLE_COMPILE_TESTS ) + +############################ + +IF ( BUILD_STATIC_LIBRARIES ) +PROJECT(clucene-test-static) + +ADD_EXECUTABLE(cl_test-static EXCLUDE_FROM_ALL ${clucene_shared_Files} ${test_files} ) + +IF ( UNIX ) + TARGET_LINK_LIBRARIES(cl_test-static clucene-core-static clucene-shared-static pthread ${EXTRA_LIBS}) +ELSE () + TARGET_LINK_LIBRARIES(cl_test-static clucene-core-static clucene-shared-static ${EXTRA_LIBS}) +ENDIF ( UNIX ) + +ENDIF ( BUILD_STATIC_LIBRARIES ) + +############################ + diff -Nru clucene-core-0.9.21b/src/test/contribs-lib/analysis/de/TestGermanStemFilter.cpp clucene-core-2.3.3.4/src/test/contribs-lib/analysis/de/TestGermanStemFilter.cpp --- clucene-core-0.9.21b/src/test/contribs-lib/analysis/de/TestGermanStemFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/contribs-lib/analysis/de/TestGermanStemFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,65 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "test.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/de/GermanStemmer.h" +#include "CLucene/analysis/de/GermanStemFilter.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" + +CL_NS_USE(util) +CL_NS_USE(analysis) +CL_NS_USE2(analysis,de) + + void check(CuTest* tc, const TCHAR* input, const TCHAR* expected) { + StandardTokenizer* tokenStream = new StandardTokenizer(new StringReader(input)); + GermanStemFilter filter(tokenStream, true); + Token t; + if (filter.next(&t) == NULL) + CuFail(tc, _T("Token expected!")); + CuAssertStrEquals(tc, _T(""), expected, t.termBuffer()); + filter.close(); + } + + void testStemming(CuTest *tc) { + try { + // read test cases from external file: + char path[CL_MAX_PATH]; + strcpy(path, clucene_data_location); + strcat(path, "/contribs-lib/analysis/de/data.txt"); + CuAssert(tc, _T("File with test data does not exist"), Misc::dir_Exists(path)); + FileReader reader(path, "UTF-8"); + TCHAR buffer[1024]; + while (true) { + int32_t len = reader.readLine(buffer, 1024); + if (len == 0) + break; + Misc::wordTrim(buffer); + if (_tcslen(buffer) == 0 || buffer[0] == _T('#')) + continue; // ignore comments and empty lines + const TCHAR* pos = _tcsstr(buffer, _T(";")); + TCHAR part0[1024], part1[1024]; + if (pos != NULL) { + _tcsncpy(part0, buffer, pos - buffer); + _tcscpy(part1, pos + 1); + part0[pos - buffer] = '\0'; + check(tc, part0, part1); + } else { + check(tc, buffer, _T("")); + } + } + } catch (CLuceneError &e) { + CuFail(tc, e); + } + } + +CuSuite *testGermanAnalyzer() { + CuSuite *suite = CuSuiteNew(_T("CLucene GermanAnalyzer Test")); + SUITE_ADD_TEST(suite, testStemming); + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/CuTest.cpp clucene-core-2.3.3.4/src/test/CuTest.cpp --- clucene-core-0.9.21b/src/test/CuTest.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/CuTest.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,639 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CuTest.h" +#include +#include +#include +#include + +static int verbose = 0; +static int messyPrinting = 0; + +void CuInit(int argc, char *argv[]) +{ + int i; + + for (i = 0; i < argc; i++) { + if (!strcmp(argv[i], "-v")) { + verbose = 1; + } + if (!strcmp(argv[i], "-p")) { + messyPrinting = 1; + } + } +} + +/*-------------------------------------------------------------------------* + * CuTcs + *-------------------------------------------------------------------------*/ +TCHAR* CuStrAlloc(int size) +{ + TCHAR* n = (TCHAR*) malloc( sizeof(TCHAR) * (size) ); + return n; +} + +TCHAR* CuTcsCopy(TCHAR* old) +{ + int len = _tcslen(old); + TCHAR* n = CuStrAlloc(len + 1); + _tcscpy(n, old); + return n; +} +TCHAR* CuTcsCat(TCHAR* orig, TCHAR* add) +{ + int len = _tcslen(orig) + _tcslen(add); + TCHAR* n = CuStrAlloc(len + 1); + _tcscpy(n, orig); + _tcscat(n, add); + return n; +} + +/*-------------------------------------------------------------------------* + * CuString + *-------------------------------------------------------------------------*/ + +TCHAR* CuTcsAlloc(int size) +{ + TCHAR* n = (TCHAR*) malloc( sizeof(TCHAR) * (size) ); + return n; +} + +TCHAR* CuTcsCopy(const TCHAR* old) +{ + int len = _tcslen(old); + TCHAR* n = CuTcsAlloc(len + 1); + _tcscpy(n, old); + return n; +} + +/*-------------------------------------------------------------------------* + * CuString + *-------------------------------------------------------------------------*/ + +void CuStringInit(CuString* str) +{ + str->length = 0; + str->size = STRING_MAX; + str->buffer = (TCHAR*) malloc(sizeof(TCHAR) * str->size); + str->buffer[0] = '\0'; +} + +CuString* CuStringNew(void) +{ + CuString* str = (CuString*) malloc(sizeof(CuString)); + str->length = 0; + str->size = STRING_MAX; + str->buffer = (TCHAR*) malloc(sizeof(TCHAR) * str->size); + str->buffer[0] = '\0'; + return str; +} + +void CuStringFree(CuString* str){ + free(str->buffer); + free(str); +} + +void CuStringResize(CuString* str, int newSize) +{ + str->buffer = (TCHAR*) realloc(str->buffer, sizeof(TCHAR) * newSize); + str->size = newSize; +} + +void CuStringAppend(CuString* str, const TCHAR* text) +{ + int length = _tcslen(text); + if (str->length + length + 1 >= str->size) + CuStringResize(str, str->length + length + 1 + STRING_INC); + str->length += length; + _tcscat(str->buffer, text); +} + +void CuStringAppendChar(CuString* str, TCHAR ch) +{ + TCHAR text[2]; + text[0] = ch; + text[1] = '\0'; + CuStringAppend(str, text); +} + +void CuStringAppendFormat(CuString* str, const TCHAR* format, ...) +{ + TCHAR buf[HUGE_STRING_LEN]; + va_list argp; + va_start(argp, format); + _vsntprintf(buf, HUGE_STRING_LEN,format, argp); + va_end(argp); + CuStringAppend(str, buf); +} + +void CuStringRead(CuString *str, TCHAR *path) +{ + path = NULL; + CU_TDUP(path,str->buffer); +} + +/*-------------------------------------------------------------------------* + * CuTest + *-------------------------------------------------------------------------*/ + +void CuTestInit(CuTest* t, const TCHAR* name, TestFunction function) +{ + t->name = CuTcsCopy(name); + t->notimpl = 0; + t->failed = 0; + t->ran = 0; + t->message = NULL; + t->function = function; +// t->jumpBuf = NULL; +} + +CuTest* CuTestNew(const TCHAR* name, TestFunction function) +{ + CuTest* tc = CU_ALLOC(CuTest); + CuTestInit(tc, name, function); + return tc; +} + +void CuTestDelete(CuTest* tst){ + free(tst->name); + if ( tst->message != NULL ) + free(tst->message); + free(tst); +} + +void CuNotImpl(CuTest* tc, const TCHAR* message) +{ + CuString* newstr = CuStringNew(); + CuStringAppend(newstr, message); + CuStringAppend(newstr, _T(" not implemented on this platform")); + tc->notimpl = 1; + CuMessage(tc,newstr->buffer); + CuStringFree(newstr); +// if (tc->jumpBuf != 0) longjmp(*(tc->jumpBuf), 0); +} + +void CuFail(CuTest* tc, const TCHAR* format, ...) +{ + tc->failed = 1; + + TCHAR buf[HUGE_STRING_LEN]; + va_list argp; + va_start(argp, format); + _vsntprintf(buf, HUGE_STRING_LEN, format, argp); + va_end(argp); + +// CuMessage(tc,buf); + _CLTHROWT(CL_ERR_Runtime, buf); +} + +void CuFail(CuTest* tc, CLuceneError& e) +{ + tc->failed = 1; + throw e; +} + +void CuMessageV(CuTest* tc, const TCHAR* format, va_list& argp){ + TCHAR buf[HUGE_STRING_LEN]; + _vsntprintf(buf, HUGE_STRING_LEN, format, argp); + + TCHAR* old = tc->message; + if ( messyPrinting ){ + _tprintf(_T("%s"),buf); + }else{ + if ( old == NULL ){ + tc->message = CuTcsCopy(buf); + }else{ + tc->message = CuTcsCat(old,buf); + free(old); + } + } +} +void CuMessage(CuTest* tc, const TCHAR* format, ...){ + va_list argp; + va_start(argp, format); + CuMessageV(tc,format,argp); + va_end(argp); +} +void CuMessageA(CuTest* tc, const char* format, ...){ + va_list argp; + char buf[HUGE_STRING_LEN]; + TCHAR tbuf[HUGE_STRING_LEN]; + va_start(argp, format); + vsprintf(buf, format, argp); + va_end(argp); + + TCHAR* old = tc->message; + STRCPY_AtoT(tbuf,buf,HUGE_STRING_LEN); + if ( messyPrinting ){ + _tprintf(_T("%s"),buf); + }else{ + if ( old == NULL ){ + tc->message = CuTcsCopy(tbuf); + }else{ + tc->message = CuTcsCat(old,tbuf); + free(old); + } + } +} + +void CuAssert(CuTest* tc, const TCHAR* message, int condition) +{ + if (condition) return; + CuFail(tc, message); +} + +void CuAssertTrue(CuTest* tc, int condition, const TCHAR* msg) +{ + if (condition) return; + if (msg != NULL) + CuFail(tc, msg); + else + CuFail(tc, _T("assert failed")); +} + +void CuAssertEquals(CuTest* tc, const int32_t expected, const int32_t actual, const TCHAR* msg) +{ + CuAssertIntEquals(tc, msg, expected, actual); +} + +void CuAssertStrEquals(CuTest* tc, const TCHAR* preMessage, const TCHAR* expected, TCHAR* actual, bool bDelActual){ + CuString* message; + if (_tcscmp(expected, actual) == 0) { + if (bDelActual) _CLDELETE_LCARRAY(actual); + return; + } + message = CuStringNew(); + if (preMessage) { + CuStringAppend(message, preMessage); + CuStringAppend(message, _T(" : ") ); + } + CuStringAppend(message, _T("expected\n---->\n")); + CuStringAppend(message, expected); + CuStringAppend(message, _T("\n<----\nbut saw\n---->\n")); + CuStringAppend(message, actual); + if (bDelActual) _CLDELETE_LCARRAY(actual); + CuStringAppend(message, _T("\n<----")); + CuFail(tc, message->buffer); + CuStringFree(message); +} +void CuAssertStrEquals(CuTest* tc, const TCHAR* preMessage, const TCHAR* expected, const TCHAR* actual) +{ + CuString* message; + if (_tcscmp(expected, actual) == 0) { + return; + } + message = CuStringNew(); + if (preMessage) { + CuStringAppend(message, preMessage); + CuStringAppend(message, _T(" : ") ); + } + CuStringAppend(message, _T("expected\n---->\n")); + CuStringAppend(message, expected); + CuStringAppend(message, _T("\n<----\nbut saw\n---->\n")); + CuStringAppend(message, actual); + CuStringAppend(message, _T("\n<----")); + CuFail(tc, message->buffer); + CuStringFree(message); +} + +void CuAssertIntEquals(CuTest* tc, const TCHAR* preMessage, int expected, int actual) +{ + if (expected == actual) return; + TCHAR buf[STRING_MAX]; + if (preMessage != NULL){ + _sntprintf(buf, STRING_MAX, _T("%s : expected <%d> but was <%d>"), preMessage, expected, actual); + } else { + _sntprintf(buf, STRING_MAX, _T("Assert failed : expected <%d> but was <%d>"), expected, actual); + } + CuFail(tc, buf); +} +void CuAssertSizeEquals(CuTest* tc, const TCHAR* preMessage, size_t expected, size_t actual) +{ + if (expected == actual) return; + TCHAR buf[STRING_MAX]; + if (preMessage != NULL){ + _sntprintf(buf, STRING_MAX, _T("%s : expected <%d> but was <%d>"), preMessage, expected, actual); + } else { + _sntprintf(buf, STRING_MAX, _T("Assert failed : expected <%d> but was <%d>"), expected, actual); + } + CuFail(tc, buf); +} + +void CuAssertPtrEquals(CuTest* tc, const TCHAR* preMessage, const void* expected, const void* actual) +{ + TCHAR buf[STRING_MAX]; + if (expected == actual) return; + _sntprintf(buf, STRING_MAX,_T("%s : expected pointer <%p> but was <%p>"), preMessage, expected, actual); + CuFail(tc, buf); +} + +void CuAssertPtrNotNull(CuTest* tc, const TCHAR* preMessage, const void* pointer) +{ + TCHAR buf[STRING_MAX]; + if (pointer != NULL ) return; + _sntprintf(buf,STRING_MAX, _T("%s : null pointer unexpected, but was <%p>"), preMessage, pointer); + CuFail(tc, buf); +} + +void CuTestRun(CuTest* tc) +{ +// jmp_buf buf; +// tc->jumpBuf = &buf; +// if (setjmp(buf) == 0) +// { + tc->ran = 1; + (tc->function)(tc); +// } +// tc->jumpBuf = 0; +} + +/*-------------------------------------------------------------------------* + * CuSuite + *-------------------------------------------------------------------------*/ + +void CuSuiteInit(CuSuite* testSuite, const TCHAR *name) +{ + testSuite->name = NULL; + CU_TDUP(testSuite->name,name); + testSuite->count = 0; + testSuite->failCount = 0; + testSuite->notimplCount = 0; + testSuite->timeTaken = 0; +} + +CuSuite* CuSuiteNew(const TCHAR *name) +{ + CuSuite* testSuite = CU_ALLOC(CuSuite); + CuSuiteInit(testSuite, name); + return testSuite; +} + +void CuSuiteDelete(CuSuite* suite){ + free(suite->name); + for ( int i=0;icount;i++ ){ + CuTestDelete(suite->list[i]); + } + free(suite); +} + +void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase) +{ + assert(testSuite->count < MAX_TEST_CASES); + testSuite->list[testSuite->count] = testCase; + testSuite->count++; +} + +void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2) +{ + int i; + for (i = 0 ; i < testSuite2->count ; ++i) + { + CuTest* testCase = testSuite2->list[i]; + CuSuiteAdd(testSuite, testCase); + } +} + +void CuSuiteRun(CuSuite* testSuite) +{ + int i; + uint64_t start = Misc::currentTimeMillis(); + for (i = 0 ; i < testSuite->count ; ++i) + { + CuTest* testCase = testSuite->list[i]; + try{ + CuTestRun(testCase); + }catch(CLuceneError& err){ + testCase->failed=1; + CuMessage(testCase,err.twhat()); + } + testSuite->timeTaken = Misc::currentTimeMillis() - start; + if (testCase->failed) { testSuite->failCount += 1; } + if (testCase->notimpl) { testSuite->notimplCount += 1; } + } +} + +void CuSuiteSummary(CuSuite* testSuite, CuString* summary, bool times) +{ + int i; + for (i = 0 ; i < testSuite->count ; ++i) + { + CuTest* testCase = testSuite->list[i]; + CuStringAppend(summary, testCase->failed ? _T("F") : + testCase->notimpl ? _T("N"): _T(".")); + } + if ( times ){ + int bufferLen = 25-summary->length-10; + for (int i=0;itimeTaken); + } + CuStringAppend(summary, _T("\n")); +} + +void CuSuiteOverView(CuSuite* testSuite, CuString* details) +{ + CuStringAppendFormat(details, _T("%d %s run: %d passed, %d failed, ") + _T("%d not implemented.\n"), + testSuite->count, + testSuite->count == 1 ? "test" : "tests", + testSuite->count - testSuite->failCount - + testSuite->notimplCount, + testSuite->failCount, testSuite->notimplCount); +} + +void CuSuiteDetails(CuSuite* testSuite, CuString* details) +{ + int i; + int failCount = 0; + + if (testSuite->failCount != 0 && verbose) + { + CuStringAppendFormat(details, _T("\nFailed tests in %s:\n"), testSuite->name); + for (i = 0 ; i < testSuite->count ; ++i) + { + CuTest* testCase = testSuite->list[i]; + if (testCase->failed) + { + failCount++; + CuStringAppendFormat(details, _T("%d) %s: %s\n"), + failCount, testCase->name, testCase->message); + } + } + } + if (testSuite->notimplCount != 0 && verbose) + { + CuStringAppendFormat(details, _T("\nNot Implemented tests in %s:\n"), testSuite->name); + for (i = 0 ; i < testSuite->count ; ++i) + { + CuTest* testCase = testSuite->list[i]; + if (testCase->notimpl) + { + failCount++; + CuStringAppendFormat(details, _T("%d) %s: %s\n"), + failCount, testCase->name, testCase->message); + } + } + } +} + +/*-------------------------------------------------------------------------* + * CuSuiteList + *-------------------------------------------------------------------------*/ + +CuSuiteList* CuSuiteListNew(const TCHAR *name) +{ + CuSuiteList* testSuite = CU_ALLOC(CuSuiteList); + testSuite->name = NULL; + CU_TDUP(testSuite->name,name); + testSuite->count = 0; + return testSuite; +} +void CuSuiteListDelete(CuSuiteList* lst){ + free(lst->name); + for ( int i=0;icount;i++ ){ + CuSuiteDelete(lst->list[i]); + } + free(lst); +} + +void CuSuiteListAdd(CuSuiteList *suites, CuSuite *origsuite) +{ + assert(suites->count < MAX_TEST_CASES); + suites->list[suites->count] = origsuite; + suites->count++; +} + +void CuSuiteListRun(CuSuiteList* testSuite) +{ + int i; + for (i = 0 ; i < testSuite->count ; ++i) + { + CuSuite* testCase = testSuite->list[i]; + CuSuiteRun(testCase); + } +} + +static const TCHAR *genspaces(int i) +{ + TCHAR *str = (TCHAR*)malloc((i + 1) * sizeof(TCHAR)); + for ( int j=0;jname); + for (i = 0 ; i < testSuite->count ; ++i) + { + bool hasprinted=false; + CuSuite* testCase = testSuite->list[i]; + CuString *str = CuStringNew(); + + size_t len = _tcslen(testCase->name); + const TCHAR* spaces = len>31?NULL:genspaces(31 - len); + _tprintf(_T(" %s:%s"), testCase->name, len>31?_T(""):spaces); + free((void*)spaces); + fflush(stdout); + + CuSuiteRun(testCase); + if ( verbose ){ + for ( int i=0;icount;i++ ){ + if ( testCase->list[i]->ran ){ + if ( testCase->list[i]->message != NULL ){ + if ( !hasprinted ) + printf("\n"); + _tprintf(_T(" %s:\n"),testCase->list[i]->name); + + TCHAR* msg = testCase->list[i]->message; + bool nl = true; + //write out message, indenting on new lines + while ( *msg != '\0' ){ + if ( nl ){ + printf(" "); + nl=false; + } + if ( *msg == '\n' ) + nl = true; + putc(*msg,stdout); + + msg++; + } + + if ( testCase->list[i]->message[_tcslen(testCase->list[i]->message)-1] != '\n' ) + printf("\n"); + hasprinted=true; + } + } + } + } + CuSuiteSummary(testCase, str, times); + if ( hasprinted ) + _tprintf(_T(" Result: %s\n"), str->buffer); + else + _tprintf(_T(" %s"), str->buffer); + + CuStringFree(str); + } + _tprintf(_T("\n")); +} + +int CuSuiteListDetails(CuSuiteList* testSuite, CuString* details) +{ + int i; + int failCount = 0; + int notImplCount = 0; + int count = 0; + + for (i = 0 ; i < testSuite->count ; ++i) + { + failCount += testSuite->list[i]->failCount; + notImplCount += testSuite->list[i]->notimplCount; + count += testSuite->list[i]->count; + } + CuStringAppendFormat(details, _T("%d %s run: %d passed, %d failed, ") + _T("%d not implemented.\n"), + count, + count == 1 ? _T("test") : _T("tests"), + count - failCount - notImplCount, + failCount, notImplCount); + + if (failCount != 0 && verbose) + { + for (i = 0 ; i < testSuite->count ; ++i) + { + CuString *str = CuStringNew(); + CuSuite* testCase = testSuite->list[i]; + if (testCase->failCount) + { + CuSuiteDetails(testCase, str); + CuStringAppend(details, str->buffer); + } + CuStringFree(str); + } + } + if (notImplCount != 0 && verbose) + { + for (i = 0 ; i < testSuite->count ; ++i) + { + CuString *str = CuStringNew(); + CuSuite* testCase = testSuite->list[i]; + if (testCase->notimplCount) + { + CuSuiteDetails(testCase, str); + CuStringAppend(details, str->buffer); + } + CuStringFree(str); + } + } + return failCount; +} + diff -Nru clucene-core-0.9.21b/src/test/CuTest.h clucene-core-2.3.3.4/src/test/CuTest.h --- clucene-core-0.9.21b/src/test/CuTest.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/CuTest.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef CU_TEST_H +#define CU_TEST_H + +/* CuString */ + +TCHAR* CuWstrAlloc(int size); +TCHAR* CuWstrCopy(const TCHAR* old); + +#define CU_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE))) +#define CU_TDUP(dest,src) dest=((TCHAR*)malloc(sizeof(TCHAR)*_tcslen(src)+sizeof(TCHAR)));_tcscpy(dest,src); + +#define HUGE_STRING_LEN 8192 +#define STRING_MAX 256 +#define STRING_INC 256 + +#define CLUCENE_ASSERT(x) CuAssert(tc,_T("Assert Failed: ") _T(#x),x) + +typedef struct +{ + int length; + int size; + TCHAR* buffer; +} CuString; + +void CuStringInit(CuString* str); +CuString* CuStringNew(void); +void CuStringFree(CuString* str); +void CuStringRead(CuString* str, TCHAR* path); +void CuStringAppend(CuString* str, const TCHAR* text); +void CuStringAppendChar(CuString* str, TCHAR ch); +void CuStringAppendFormat(CuString* str, const TCHAR* format, ...); +void CuStringResize(CuString* str, int newSize); + +/* CuTest */ + +typedef struct CuTest CuTest; + +typedef void (*TestFunction)(CuTest *); + +struct CuTest +{ + TCHAR* name; + TestFunction function; + int notimpl; + int failed; + int ran; + TCHAR* message; +// jmp_buf *jumpBuf; +}; + + +void CuInit(int argc, char *argv[]); +void CuTestInit(CuTest* t, const TCHAR* name, TestFunction function); +CuTest* CuTestNew(const TCHAR* name, TestFunction function); +void CuTestDelete(CuTest* tst); +void CuFail(CuTest* tc, const TCHAR* format, ...); +void CuFail(CuTest* tc, CLuceneError& e); +void CuMessage(CuTest* tc, const TCHAR* message,...); +void CuMessageV(CuTest* tc, const TCHAR* format, va_list& argp); +void CuMessageA(CuTest* tc, const char* format, ...); +void CuNotImpl(CuTest* tc, const TCHAR* message); +void CuAssert(CuTest* tc, const TCHAR* message, int condition); +void CuAssertTrue(CuTest* tc, int condition, const TCHAR* msg = NULL); +void CuAssertEquals(CuTest* tc, const int32_t expected, const int32_t actual, const TCHAR* msg = NULL); +void CuAssertStrEquals(CuTest* tc, const TCHAR* preMessage, const TCHAR* expected, const TCHAR* actual); +void CuAssertStrEquals(CuTest* tc, const TCHAR* preMessage, const TCHAR* expected, TCHAR* actual, bool bDelActual = false); +void CuAssertIntEquals(CuTest* tc, const TCHAR* preMessage, int expected, int actual); +void CuAssertSizeEquals(CuTest* tc, const TCHAR* preMessage, int expected, int actual); +void CuAssertPtrEquals(CuTest* tc, const TCHAR* preMessage, const void* expected, const void* actual); +void CuAssertPtrNotNull(CuTest* tc, const TCHAR* preMessage, const void* pointer); + +void CuTestRun(CuTest* tc); + +/* CuSuite */ + +#define MAX_TEST_CASES 1024 + +#define SUITE_ADD_TEST(SUITE,TEST) CuSuiteAdd(SUITE, CuTestNew(_T(#TEST), TEST)) + +/* + * Macros used to make porting of Java Lucene tests easier. Assumes CuTest exists in the scope as tc + */ +#define assertTrue(CND) CuAssertTrue(tc, CND) +#define assertTrueMsg(MSG, CND) CuAssertTrue(tc, CND, MSG) +#define assertEquals(EXPECTED, ACTUAL) CuAssertEquals(tc, EXPECTED, ACTUAL) +#define assertEqualsMsg(MSG, EXPECTED, ACTUAL) CuAssertEquals(tc, EXPECTED, ACTUAL, MSG) + +extern char clucene_data_location[1024]; + +typedef struct +{ + TCHAR *name; + int count; + CuTest* list[MAX_TEST_CASES]; + int failCount; + int notimplCount; + uint64_t timeTaken; +} CuSuite; + + +void CuSuiteInit(CuSuite* testSuite, const TCHAR* name); +CuSuite* CuSuiteNew(const TCHAR* name); +void CuSuiteDelete(CuSuite* suite); +void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase); +void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2); +void CuSuiteRun(CuSuite* testSuite); +void CuSuiteSummary(CuSuite* testSuite, CuString* summary, bool times); +void CuSuiteOverView(CuSuite* testSuite, CuString* details); +void CuSuiteDetails(CuSuite* testSuite, CuString* details); + +typedef struct +{ + TCHAR *name; + int count; + CuSuite* list[MAX_TEST_CASES]; +} CuSuiteList; + + +struct unittest { + const char *testname; + CuSuite *(*func)(void); +}; + +CuSuiteList* CuSuiteListNew(const TCHAR* name); +void CuSuiteListDelete(CuSuiteList* lst); +void CuSuiteListAdd(CuSuiteList* testSuite, CuSuite *testCase); +void CuSuiteListRun(CuSuiteList* testSuite); +void CuSuiteListRunWithSummary(CuSuiteList* testSuite, bool verbose, bool times); +//void CuSuiteListSummary(CuSuiteList* testSuite, CuString* summary); +/* Print details of test suite results; returns total number of + * tests which failed. */ +int CuSuiteListDetails(CuSuiteList* testSuite, CuString* details); +#endif /* CU_TEST_H */ diff -Nru clucene-core-0.9.21b/src/test/data/contribs-lib/analysis/de/data.txt clucene-core-2.3.3.4/src/test/data/contribs-lib/analysis/de/data.txt --- clucene-core-0.9.21b/src/test/data/contribs-lib/analysis/de/data.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/contribs-lib/analysis/de/data.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,51 @@ +# German special characters are replaced: +häufig;haufig + +# here the stemmer works okay, it maps related words to the same stem: +abschließen;abschliess +abschließender;abschliess +abschließendes;abschliess +abschließenden;abschliess + +tisch;tisch +tische;tisch +tischen;tisch + +haus;hau +hauses;hau +häuser;hau +häusern;hau +# here's a case where overstemming occurs, i.e. a word is +# mapped to the same stem as unrelated words: +hauen;hau + +# here's a case where understemming occurs, i.e. two related words +# are not mapped to the same stem. This is the case with basically +# all irregular forms: +drama;drama +dramen;dram + +# replace "ß" with 'ss': +ausmaß;ausmass + +# fake words to test if suffixes are cut off: +xxxxxe;xxxxx +xxxxxs;xxxxx +xxxxxn;xxxxx +xxxxxt;xxxxx +xxxxxem;xxxxx +xxxxxer;xxxxx +xxxxxnd;xxxxx +# the suffixes are also removed when combined: +xxxxxetende;xxxxx + +# words that are shorter than four charcters are not changed: +xxe;xxe +# -em and -er are not removed from words shorter than five characters: +xxem;xxem +xxer;xxer +# -nd is not removed from words shorter than six characters: +xxxnd;xxxnd + +# words where section sign will be used +machen;mach Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/test/data/french_unicode.bin and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/test/data/french_unicode.bin differ diff -Nru clucene-core-0.9.21b/src/test/data/readme.txt clucene-core-2.3.3.4/src/test/data/readme.txt --- clucene-core-0.9.21b/src/test/data/readme.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/readme.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,41 @@ +Reuters-21578 is the data set we use to test for index compatibility. + +Retuers-21578-index directory contains an index created using java lucene +version 1.4.3. The following changes were made to the java demo to create +this index: + +* The FileDocument is using f.getName() instead of f.getPath() for the path field. +* The modified field was removed +* The indexwriter must not use compound file: writer.setUseCompoundFile(false) +* The files are sorted using java.util.Arrays.sort(files, String.CASE_INSENSITIVE_ORDER); +* Used a special analyser instead of StandardAnalyzer. This is because the text + classification of java differs to that of clucene. See the TestReuters.cpp code + for implementation. Java version used exactly the same implementation. + +The java equivalent analyzer is: + + static class ReutersTokenizer extends org.apache.lucene.analysis.CharTokenizer { + // Construct a new LetterTokenizer. + public ReutersTokenizer(java.io.Reader in){ + super(in); + } + protected boolean isTokenChar(char c){ + if ( c == ' ' || c == '\t' || + c == '-' || c == '.' || + c == '\n' || c == '\r' || + c == ',' || c == '<' || + c == '>' || c<=9){ + return false; + }else + return true; + } + protected char normalize(char c){ + return c; + } + } + + static class ReutersAnalyzer extends org.apache.lucene.analysis.Analyzer { + public org.apache.lucene.analysis.TokenStream tokenStream(String fieldName, java.io.Reader reader){ + return new ReutersTokenizer(reader); + } + }; diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/all-exchanges-strings.lc.txt clucene-core-2.3.3.4/src/test/data/reuters-21578/all-exchanges-strings.lc.txt --- clucene-core-0.9.21b/src/test/data/reuters-21578/all-exchanges-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/all-exchanges-strings.lc.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,39 @@ +amex +ase +asx +biffex +bse +cboe +cbt +cme +comex +cse +fox +fse +hkse +ipe +jse +klce +klse +liffe +lme +lse +mase +mise +mnse +mose +nasdaq +nyce +nycsce +nymex +nyse +ose +pse +set +simex +sse +stse +tose +tse +wce +zse diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/all-orgs-strings.lc.txt clucene-core-2.3.3.4/src/test/data/reuters-21578/all-orgs-strings.lc.txt --- clucene-core-0.9.21b/src/test/data/reuters-21578/all-orgs-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/all-orgs-strings.lc.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,56 @@ +adb-africa +adb-asia +aibd +aid +anrpc +asean +atpc +bis +cipec +comecon +ec +eca +ecafe +ece +ecla +ecsc +ecwa +efta +eib +emcf +escap +euratom +fao +gatt +gcc +geplacea +iaea +iata +icco +ico-coffee +ico-islam +ida +iea +iisi +ilo +ilzsg +imco +imf +inro +irsg +isa +itc +iwc-whale +iwc-wheat +iwcc +iws +iwto +lafta +mfa +oapec +oecd +opec +un +unctad +who +worldbank diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/all-people-strings.lc.txt clucene-core-2.3.3.4/src/test/data/reuters-21578/all-people-strings.lc.txt --- clucene-core-0.9.21b/src/test/data/reuters-21578/all-people-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/all-people-strings.lc.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,267 @@ +abdel-hadi-kandeel +alfonsin +alhaji-abdul-ahmed +alptemocin +amato +andersen +andriessen +aqazadeh +aquino +arafat +babangida +balladur +bangemann +barreto +berge +beteta +blix +boesky +bond +botha +bouey +braks +bresser-pereira +brodersohn +brundtland +camdessus +carlsson +caro +castelo-branco +castro +cavaco-silva +chaves +chen-muhua +chiang-ching-kuo +chien +chirac +ciampi +colombo +conable +concepcion +corrigan +cossiga +crow +dadzie +dauster +de-clercq +de-kock +de-korte +de-la-madrid +de-larosiere +del-mazo +delamuraz +delors +dementsev +deng-xiaoping +dennis +dhillon +dominguez +douglas +du-plessis +duisenberg +dunkel +edelman +enggaard +eser +evren +eyskens +feldt +fernandez +ferrari +finnbogadottir +friedman +fujioka +gaddafi +gandhi +garcia +gava +godeaux +gonzalez +gorbachev +goria +gostyev +graf +greenspan +gromyko +grosz +guillaume +halikias +hamad-saud-al-sayyari +hannibalsson +haughey +hawke +he-kang +herrington +hillery +hisham-nazer +hoefner +hoffmeyer +holberg +holkeri +honecker +hovmand +howard-baker +husak +icahn +james-baker +james-miller +jaruzelski +jayme +johnston +kaminsky +kaufman +keating +khameini +khomeini +kiechle +king-fahd +kohl +koivisto +kondo +koren +kullberg +lacina +lange +languetin +lawson +lee-ta-hai +lee-teng-hui +leenanon +leigh-pemberton +leitz +li-peng +li-xiannian +liikanen +lubbers +lukman +lyng +machinea +macsharry +malhotra +mancera-aguayo +martens +martin +masse +maxwell +maystadt +medgyessy +messner +mikulic +milliet +mitterrand +miyazawa +mohammad-ibrahim-jaffrey-baluch +mohammad-khan-junejo +mohammad-yasin-khan-wattoo +mohammed-ahmed-al-razaz +mohammed-ali-abal-khail +mohammed-salaheddin-hamid +morales-bermudez +mousavi +moyle +mubarak +mulroney +murdoch +mustapha +nakao +nakasone +nasko +nemeth +nobrega +o-cofaigh +o-kennedy +oeien +okongwu +ongpin +ortega +ozal +palsson +pandolfi +papandreou +parkinson +paye +perez-de-cuellar +petricioli +pickens +poehl +pottakis +prawiro +qassemi +rafnar +rafsanjani +reagan +rezende +riberio-cadilhe +rich +rikanovic +rojas +romero +roumeliotis +rowland +rubio +ruder +ruding +russell +ryzhkov +saberbein +salinas +samojlik +santer +saracoglu +sarney +sartzetakis +sathe +schlueter +sedki +simitis +simonsen +singhasaneh +siregar +skaanland +soares +solchaga +sourrouille +sprinkel +steeg +stich +stoltenberg +stoph +strougal +subroto +suharto +sumita +suominen +takeshita +tamura +tavares-moreia +thatcher +timar +tinsulanonda +tiwari +toernaes +toman +tsovolas +vancsa +venkataraman +vera-la-rosa +verity +villanyi +vlatkovic +volcker +von-weizsaecker +vranitzky +waldheim +wali +walsh +wang-bingqian +wardhana +wasim-aun-jaffrey +wilson +wise +yeutter +young +yu-kuo-hua +zak +zhao-ziyang +zheng-tuobin +zia-ul-haq diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/all-places-strings.lc.txt clucene-core-2.3.3.4/src/test/data/reuters-21578/all-places-strings.lc.txt --- clucene-core-0.9.21b/src/test/data/reuters-21578/all-places-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/all-places-strings.lc.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,175 @@ +afghanistan +albania +algeria +american-samoa +andorra +angola +anguilla +antigua +argentina +aruba +australia +austria +bahamas +bahrain +bangladesh +barbados +belgium +belize +benin +bermuda +bhutan +bolivia +botswana +brazil +british-virgin-islands +brunei +bulgaria +burkina-faso +burma +burundi +cameroon +canada +cape-verde +cayman-islands +central-african-republic +chad +chile +china +colombia +congo +costa-rica +cuba +cyprus +czechoslovakia +denmark +djibouti +dominica +dominican-republic +east-germany +ecuador +egypt +el-salvador +equatorial-guinea +ethiopia +fiji +finland +france +french-guiana +gabon +gambia +ghana +gibraltar +greece +grenada +guadeloupe +guam +guatemala +guinea +guinea-bissau +guyana +haiti +honduras +hong-kong +hungary +iceland +india +indonesia +iran +iraq +ireland +israel +italy +ivory-coast +jamaica +japan +jordan +kampuchea +kenya +kuwait +laos +lebanon +lesotho +liberia +libya +liechtenstein +luxembourg +macao +madagascar +malawi +malaysia +mali +malta +martinique +mauritania +mauritius +mexico +monaco +morocco +mozambique +namibia +nepal +netherlands +netherlands-antilles +new-caledonia +new-zealand +nicaragua +niger +nigeria +north-korea +norway +oman +pakistan +panama +papua-new-guinea +paraguay +peru +philippines +poland +portugal +qatar +romania +rwanda +saudi-arabia +senegal +seychelles +sierra-leone +singapore +somalia +south-africa +south-korea +spain +sri-lanka +sudan +suriname +swaziland +sweden +switzerland +syria +taiwan +tanzania +thailand +togo +tonga +trinidad-tobago +tunisia +turkey +uae +uganda +uk +uruguay +us-virgin-islands +usa +ussr +vanuatu +vatican +venezuela +vietnam +west-germany +western-samoa +yemen-arab-republic +yemen-demo-republic +yugoslavia +zaire +zambia +zimbabwe diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/all-topics-strings.lc.txt clucene-core-2.3.3.4/src/test/data/reuters-21578/all-topics-strings.lc.txt --- clucene-core-0.9.21b/src/test/data/reuters-21578/all-topics-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/all-topics-strings.lc.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,135 @@ +acq +alum +austdlr +austral +barley +bfr +bop +can +carcass +castor-meal +castor-oil +castorseed +citruspulp +cocoa +coconut +coconut-oil +coffee +copper +copra-cake +corn +corn-oil +cornglutenfeed +cotton +cotton-meal +cotton-oil +cottonseed +cpi +cpu +crude +cruzado +dfl +dkr +dlr +dmk +drachma +earn +escudo +f-cattle +ffr +fishmeal +flaxseed +fuel +gas +gnp +gold +grain +groundnut +groundnut-meal +groundnut-oil +heat +hk +hog +housing +income +instal-debt +interest +inventories +ipi +iron-steel +jet +jobs +l-cattle +lead +lei +lin-meal +lin-oil +linseed +lit +livestock +lumber +lupin +meal-feed +mexpeso +money-fx +money-supply +naphtha +nat-gas +nickel +nkr +nzdlr +oat +oilseed +orange +palladium +palm-meal +palm-oil +palmkernel +peseta +pet-chem +platinum +plywood +pork-belly +potato +propane +rand +rape-meal +rape-oil +rapeseed +red-bean +reserves +retail +rice +ringgit +rubber +rupiah +rye +saudriyal +sfr +ship +silk +silver +singdlr +skr +sorghum +soy-meal +soy-oil +soybean +stg +strategic-metal +sugar +sun-meal +sun-oil +sunseed +tapioca +tea +tin +trade +tung +tung-oil +veg-oil +wheat +wool +wpi +yen +zinc diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/cat-descriptions_120396.txt clucene-core-2.3.3.4/src/test/data/reuters-21578/cat-descriptions_120396.txt --- clucene-core-0.9.21b/src/test/data/reuters-21578/cat-descriptions_120396.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/cat-descriptions_120396.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1203 @@ + +Some notes on the Reuters Categories +David D. Lewis +3-Dec-96 + + The letter W. Bruce Croft received from Phil Hayes (March 9, 1990) +gave a list of 135 TOPICS categories, which were used in HAYES89. I +reproduce this list below. + + The email message David D. Lewis received (Nov. 26, 1990) from Phil +Hayes gave lists (which I reproduce below) for categories in these +fields: + + number stated number actually + at top of list on list + ORGS 56 56 + EXCHANGES 39 39 + PLACES (i.e. COUNTRIES) 176 175 + PEOPLE 269 267 + + Total 540 537 + Total stated in IEEE paper: 539 + + The total 674 categories mentioned in HAYES90b is the sum of 135 and +539. So the published numbers are a little off. For the purposes of +Reuters-21578 we have taken as ground truth the actual lists of +category names, and the number of items on those lists. + +********************************************************************* + +****Subject Codes (135) + +Money/Foreign Exchange (MONEY-FX) +Shipping (SHIP) +Interest Rates (INTEREST) + +**Economic Indicator Codes (16) + +Balance of Payments (BOP) +Trade (TRADE) +Consumer Price Index (CPI) +Wholesale Price Index (WPI) +Unemployment (JOBS) +Industrial Production Index (IPI) +Capacity Utilisation (CPU) +Gross National/Domestic Product (GNP) +Money Supply (MONEY-SUPPLY) +Reserves (RESERVES) +Leading Economic Indicators (LEI) +Housing Starts (HOUSING) +Personal Income (INCOME) +Inventories (INVENTORIES) +Instalment Debt/Consumer Credit (INSTAL-DEBT) +Retail Sales (RETAIL) + +**Currency Codes (27) + +U.S. Dollar (DLR) +Australian Dollar (AUSTDLR) +Hong Kong Dollar (HK) +Singapore Dollar (SINGDLR) +New Zealand Dollar (NZDLR) +Canadian Dollar (CAN) +Sterling (STG) +D-Mark (DMK) +Japanese Yen (YEN) +Swiss Franc (SFR) +French Franc (FFR) +Belgian Franc (BFR) +Netherlands Guilder/Florin (DFL) +Italian Lira (LIT) +Danish Krone/Crown (DKR) +Norwegian Krone/Crown (NKR) +Swedish Krona/Crown (SKR) +Mexican Peso (MEXPESO) +Brazilian Cruzado (CRUZADO) +Argentine Austral (AUSTRAL) +Saudi Arabian Riyal (SAUDRIYAL) +South African Rand (RAND) +Indonesian Rupiah (RUPIAH) +Malaysian Ringitt (RINGGIT) +Portuguese Escudo (ESCUDO) +Spanish Peseta (PESETA) +Greek Drachma (DRACHMA) + +**Corporate Codes (2) + +Mergers/Acquisitions (ACQ) +Earnings and Earnings Forecasts (EARN) + +**Commodity Codes (78) + +ALUM +BARLEY +CARCASS +CASTOR-MEAL +CASTOR-OIL +CASTORSEED +CITRUSPULP +COCOA +COCONUT-OIL +COCONUT +COFFEE +COPPER +COPRA-CAKE +CORN-OIL +CORN +CORNGLUTENFEED +COTTON +COTTON-MEAL +COTTON-OIL +COTTONSEED +F-CATTLE +FISHMEAL +FLAXSEED +GOLD +GRAIN +GROUNDNUT +GROUNDNUT-MEAL +GROUNDNUT-OIL +IRON-STEEL +LEAD +LIN-MEAL +LIN-OIL +LINSEED +LIVESTOCK +L-CATTLE +HOG +LUMBER +LUPIN +MEAL-FEED +NICKEL +OAT +OILSEED +ORANGE +PALLADIUM +PALM-MEAL +PALM-OIL +PALMKERNEL +PLATINUM +PLYWOOD +PORK-BELLY +POTATO +RAPE-MEAL +RAPE-OIL +RAPESEED +RED-BEAN +RICE +RUBBER +RYE +SILK +SILVER +SORGHUM +SOY-MEAL +SOY-OIL +SOYBEAN +STRATEGIC-METAL +SUGAR +SUN-MEAL +SUN-OIL +SUNSEED +TAPIOCA +TEA +TIN +TUNG-OIL +TUNG +VEG-OIL +WHEAT +WOOL +ZINC + +**Energy Codes (9) + +Crude Oil (CRUDE) +Heating Oil/Gas Oil (HEAT) +Fuel Oil (FUEL) +Gasoline (GAS) +Natural Gas (NAT-GAS) +Petro-Chemicals (PET-CHEM) +Propane (PROPANE) +Jet and Kerosene (JET) +Naphtha (NAPHTHA) + +________________________________________________________________ + +@heading[Organization Codes (56)] +@begin[format] +African Development Bank (ADB-AFRICA)@* +Agency for International Development (AID)@* +Asian Development Bank (ADB-ASIA)@* +Association of International Bond Dealers (AIBD)@* +Association of Natural Rubber Producing Countries (ANRPC)@* +Association of South East Asian Nations (ASEAN)@* +Association of Tin Producing Countries (ATPC)@* +Bank for International Settlements (BIS)@* +Council for Mutual Economic Assistance (COMECON)@* +Economic Commission for Africa (ECA)@* +Economic Commission for Asia and the Far East (ECAFE)@* +Economic Commission for Europe (ECE)@* +Economic Commission for Latin America and The Caribbean (ECLA)@* +Economic Commission for West Asia (ECWA)@* +Economic and Social Commission for Asia and the Pacific (ESCAP)@* +European Atomic Energy Community (EURATOM)@* +European Coal and Steel Community (ECSC)@* +European Community (EC)@* +European Free Trade Association (EFTA)@* +European Investment Bank (EIB)@* +European Monetary Cooperation Fund (EMCF)@* +Food and Agriculture Organisation (FAO)@* +General Agreement on Tariffs and Trade (GATT)@* +Grupo de Paises Latinoamericanos y del Caribe Exportadores de Azucar +[Group of Latin American and Caribbean Sugar Exporting Countries] +(GEPLACEA)@* +Gulf Cooperation Council (GCC)@* +Inter-Government Council of Copper Exporting Countries (CIPEC)@* +Inter-Governmental Maritime Consultative Organisation (IMCO)@* +International Air Transport Association (IATA)@* +International Atomic Energy Authority (IAEA)@* +International Bank for Reconstruction and Development (WORLDBANK)@* +International Cocoa Organisation (ICCO)@* +International Coffee Organisation (ICO-COFFEE)@* +International Development Association (IDA)@* +International Energy Agency (IEA)@* +International Iron and Steel Institute (IISI)@* +International Labour Organisation (ILO)@* +International Lead and Zinc Study Group (ILZSG)@* +International Monetary Fund (IMF)@* +International Natural Rubber Organisation (INRO)@* +International Rubber Study Group (IRSG)@* +International Sugar Agreement (ISA)@* +International Tin Council (ITC)@* +International Whaling Commission (IWC-WHALE)@* +International Wheat Council (IWC-WHEAT)@* +International Wool Secretariat (IWS)@* +International Wool Textile Organisation (IWTO)@* +International Wrought Copper Council (IWCC)@* +Islamic Conference Organisation (ICO-ISLAM)@* +Latin American Free Trade Association (LAFTA)@* +Multi-Fibres Arrangement (MFA)@* +Organisation for Economic Cooperation and Development (OECD)@* +Organisation of Arab Petroleum Exporting Countries (OAPEC)@* +Organisation of Petroleum Exporting Countries (OPEC)@* +United Nations (UN)@* +United Nations Conference on Trade and Development (UNCTAD)@* +World Health Organisation (WHO)@* +@end[format] +@blankspace[3 lines] +________________________________________________________________ +@heading[Exchange Codes (39)] +@begin[format] +American Stock Exchange (AMEX)@* +Amsterdam Stock Exchange/Bourse (ASE)@* +Australian Stock Exchange (ASX)@* +Baltic International Freight Futures Exchange (BIFFEX)@* +Brussels Stock Exchange/Bourse (BSE)@* +Chicago Board of Trade (CBT)@* +Chicago Board of Trade Options Exchange (CBOE)@* +Chicago Mercantile Exchange (CME)@* +Copenhagen Stock Exchange/Bourse (CSE)@* +Frankfurt Stock Exchange/Bourse (FSE)@* +Hong Kong Stock Exchange (HKSE)@* +International Petroleum Exchange (IPE)@* +Johannesburg Stock Exchange (JSE)@* +Kuala Lumpur Commodity Exchange (KLCE)@* +Kuala Lumpur Stock Exchange (KLSE)@* +London Futures and Options Exchange (FOX)@* +London International Financial Futures Exchange (LIFFE)@* +London Metal Exchange (LME)@* +London Stock Exchange (LSE)@* +Madrid Stock Exchange (MASE)@* +Manila Stock Exchange (MNSE)@* +Milan Stock Exchange/Bourse (MISE)@* +Montreal Stock Exchange (MOSE)@* +National Association of Securities Dealers Automated Quotation System (NASDAQ)@* +New York Coffee, Sugar and Cocoa Exchange (NYCSCE)@* +New York Commodity Exchange (COMEX)@* +New York Cotton Exchange (NYCE)@* +New York Mercantile Exchange (NYMEX)@* +New York Stock Exchange (NYSE)@* +Oslo Stock Exchange/Bourse (OSE)@* +Paris Stock Exchange/Bourse (PSE)@* +Securities Exchange of Thailand (SET)@* +Singapore International Monetary Exchange (SIMEX)@* +Singapore Stock Exchange (SSE)@* +Stockholm Stock Exchange/Bourse (STSE)@* +Tokyo Stock Exchange (TSE)@* +Toronto Stock Exchange (TOSE)@* +Winnipeg Commodity Exchange (WCE)@* +Zurich Stock Exchange/Bourse (ZSE)@* +@end[format] +@blankspace[3 lines] +________________________________________________________________ +@heading[Country Codes (176)] +@begin[format] +AFGHANISTAN@* +ALBANIA @* +ALGERIA @* +AMERICAN-SAMOA@* +ANDORRA @* +ANGOLA @* +ANGUILLA@* +ANTIGUA @* +ARGENTINA @* +ARUBA@* +AUSTRALIA @* +AUSTRIA @* +BAHAMAS @* +BAHRAIN @* +BANGLADESH @* +BARBADOS@* +BELGIUM @* +BELIZE @* +BENIN@* +BERMUDA @* +BHUTAN @* +BOLIVIA @* +BOTSWANA@* +BRAZIL @* +BRITISH-VIRGIN-ISLANDS@* +BRUNEI @* +BULGARIA@* +BURKINA-FASO@* +BURMA@* +BURUNDI @* +CAMEROON@* +CANADA @* +CAPE-VERDE @* +CAYMAN-ISLANDS@* +CENTRAL-AFRICAN-REPUBLIC@* +CHAD @* +CHILE@* +CHINA@* +COLOMBIA@* +CONGO@* +COSTA-RICA @* +CUBA @* +CYPRUS @* +CZECHOSLOVAKIA@* +DENMARK@* +DJIBOUTI@* +DOMINICA@* +DOMINICAN-REPUBLIC@* +EAST-GERMANY@* +ECUADOR @* +EGYPT@* +EL-SALVADOR@* +EQUATORIAL-GUINEA@* +ETHIOPIA@* +FIJI @* +FINLAND @* +FRANCE @* +FRENCH-GUIANA@* +GABON@* +GAMBIA @* +GHANA@* +GIBRALTAR @* +GREECE @* +GRENADA @* +GUADELOUPE @* +GUAM @* +GUATEMALA @* +GUINEA-BISSAU@* +GUINEA @* +GUYANA @* +HAITI@* +HONDURAS@* +HONG-KONG @* +HUNGARY @* +ICELAND @* +INDIA@* +INDONESIA @* +IRAN @* +IRAQ @* +IRELAND @* +ISRAEL @* +ITALY@* +IVORY-COAST@* +JAMAICA @* +JAPAN@* +JORDAN @* +KAMPUCHEA @* +KENYA@* +KUWAIT @* +LAOS @* +LEBANON @* +LESOTHO @* +LIBERIA @* +LIBYA@* +LIECHTENSTEIN@* +LUXEMBOURG @* +MACAO@* +MADAGASCAR @* +MALAWI @* +MALAYSIA@* +MALI @* +MALTA@* +MARTINIQUE @* +MAURITANIA @* +MAURITIUS @* +MEXICO @* +MONACO @* +MOROCCO @* +MOZAMBIQUE @* +NAMIBIA @* +NEPAL@* +NETHERLANDS@* +NETHERLANDS-ANTILLES@* +NEW-CALEDONIA@* +NEW-ZEALAND@* +NICARAGUA @* +NIGER@* +NIGERIA @* +NORTH-KOREA@* +NORWAY @* +OMAN @* +PAKISTAN@* +PANAMA @* +PAPUA-NEW-GUINEA@* +PARAGUAY@* +PERU @* +PHILIPPINES@* +POLAND @* +PORTUGAL@* +QATAR@* +ROMANIA @* +RWANDA @* +SAUDI-ARABIA@* +SENEGAL @* +SEYCHELLES @* +SIERRA-LEONE@* +SINGAPORE @* +SOMALIA @* +SOUTH-AFRICA@* +SOUTH-KOREA@* +SPAIN@* +SRI-LANKA @* +SUDAN@* +SURINAME@* +SWAZILAND @* +SWEDEN @* +SWITZERLAND@* +SYRIA@* +TAIWAN @* +TANZANIA@* +THAILAND@* +TOGO @* +TONGA@* +TRINIDAD-TOBAGO@* +TUNISIA @* +TURKEY @* +UAE @* +UGANDA @* +UK@* +URUGUAY @* +USA@* +USSR@* +US-VIRGIN-ISLANDS@* +VANUATU @* +VATICAN @* +VENEZUELA @* +VIETNAM @* +WEST-GERMANY@* +WESTERN-SAMOA@* +YEMEN-ARAB-REPUBLIC@* +YEMEN-DEMO-REPUBLIC@* +YUGOSLAVIA @* +ZAIRE@* +ZAMBIA @* +ZIMBABWE@* +@end[format] +@blankspace[3 lines] +________________________________________________________________ +@heading[People Codes (269)] +@begin[itemize] +Argentina +@begin[itemize] + President Raul Alfonsin (ALFONSIN) + + Economy Minister Juan Sourrouille (SOURROUILLE) + + Finance Secretary Mario Brodersohn (BRODERSOHN) + + Central Bank Governor Jose Luis Machinea (MACHINEA) +@end[itemize] + +Australia +@begin[itemize] + Prime Minister Robert (Bob) Hawke (HAWKE) + + Federal Treasurer Paul Keating (KEATING) + + Finance Minister Peter Walsh (WALSH) + + Central Bank (Reserve Bank) Governor Bob Johnston (JOHNSTON) +@end[itemize] + +Austria +@begin[itemize] + President Kurt Waldheim (WALDHEIM) + + Chancellor Franz Vranitzky (VRANITZKY) + + Finance Minister Ferdinand Lacina (LACINA) + + Economy Minister Robert Graf (GRAF) + + Central Bank President Stephan Koren (KOREN) +@end[itemize] + +Belgium +@begin[itemize] + Prime Minister Wilfried Martens (MARTENS) + + Deputy Prime Minister and Economy Minister Philippe Maystadt (MAYSTADT) + + Finance Minister Mark Eyskens (EYSKENS) + + Central Bank (National Bank) Governor Jean Godeaux (GODEAUX) +@end[itemize] + +Brazil +@begin[itemize] + President Jose Sarney (SARNEY) + + Finance Minister Mailson Nobrega (NOBREGA) + + (former) Finance Minister Luiz Carlos Bresser Pereira (BRESSER-PEREIRA) + + Industry and Trade Minister Jose Hugo Castelo Branco (CASTELO-BRANCO) + + Agriculture Minister Iris Rezende (REZENDE) + + Mines and Energy Minister Aureliano Chaves (CHAVES) + + Central Bank President Fernando Milliet (MILLIET) +@end[itemize] + +Canada +@begin[itemize] + Prime Minister Brian Mulroney (MULRONEY) + + Agriculture Minister John Wise (WISE) + + Finance Minister Michael Wilson (WILSON) + + Energy Minister Marcel Masse (MASSE) + + (former) Central Bank (Bank of Canada) Governor Gerald K. Bouey (BOUEY) + + Central Bank (Bank of Canada) Governor John Crow (CROW) +@end[itemize] + +China +@begin[itemize] + President Li Xiannian (LI-XIANNIAN) + + Prime Minister Zhao Ziyang (ZHAO-ZIYANG) + + Premier Li Peng (LI-PENG) + + Elder Statesman (a member of the Standing Committee of the + Communist Party Politburo) Deng Xiaoping (DENG-XIAOPING) + + Finance Minister Wang Bingqian (WANG-BINGQIAN) + + Foreign Economic Relations and Trade Minister Zheng Tuobin (ZHENG-TUOBIN) + + Agriculture Minister He Kang (HE-KANG) + + President of the People's Bank of China and Head of National + Treasury Mrs Chen Muhua (CHEN-MUHUA) +@end[itemize] + +Cuba +@begin[itemize] +Fidel Castro, President of Cuba (CASTRO) +@end[itemize] + +Czechoslovakia +@begin[itemize] + President Gustav Husak (HUSAK) + + Prime Minister Lubomir Strougal (STROUGAL) + + Deputy Minister and Minister of Agriculture and Food + Miroslav Toman (TOMAN) + + Finance Minister Jaromir Zak (ZAK) +@end[itemize] + +Denmark +@begin[itemize] + Prime Minister Poul Schlueter (SCHLUETER) + + Finance Minister Palle Simonsen (SIMONSEN) + + (former) Economy Minister Anders Andersen (ANDERSEN) + + Economy Minister Knud Enggaard (ENGGAARD) + + Energy Minister Svend Erik Hovmand (HOVMAND) + + (former) Agriculture Minister Mrs Britta Schall Holberg (HOLBERG) + + Agriculture Minister Laurits Toernaes (TOERNAES) + + Central Bank Governor Erik Hoffmeyer (HOFFMEYER) +@end[itemize] + +East Germany +@begin[itemize] +Head of State and Chairman of Council of State Erich Honecker, who is also +General Secretary of the Socialist Unity Party (HONECKER) + + Prime Minister Willi Stoph (STOPH) + + Finance Minister Ernst Hoefner (HOEFNER) + + Agriculture, Forestry and Food Minister Bruno Leitz (LEITZ) + + State Bank President Horst Kaminsky (KAMINSKY) +@end[itemize] + +Egypt +@begin[itemize] + President Hosni Mubarak (MUBARAK) + + Prime Minister Atef Sedki (SEDKI) + + (former) Economy Minister Youssri Wali (WALI) + + Economy Minister Youssri mustapha (MUSTAPHA) + + Finance Minister Mohammed Ahmed al-Razaz (MOHAMMED-AHMED-AL-RAZAZ) + + Oil and Mineral Wealth Minister Abdel-Hadi Kandeel (ABDEL-HADI-KANDEEL) + + Central Bank Governor Mohammed Salaheddin Hamid (MOHAMMED-SALAHEDDIN-HAMID) +@end[itemize] + +Finland +@begin[itemize] + President Mauno Koivisto (KOIVISTO) + + Prime Minister Harri Holkeri (HOLKERI) + + Finance Minister Erkki Liikanen (LIIKANEN) + + Trade and Industry Minister Ilkka Suominen (SUOMINEN) + + Central Bank Governor Rolf Kullberg (KULLBERG) +@end[itemize] + + +France +@begin[itemize] + President Francois Mitterrand (MITTERRAND) + + Prime Minister Jacques Chirac (CHIRAC) + + Minister of State for Economy, Finance and Privatisation + Edouard Balladur (BALLADUR) + + Agriculture Minister Francois Guillaume (GUILLAUME) + + Central Bank (Bank of France) Governor Jacques de Larosiere + (DE-LAROSIERE) +@end[itemize] + +Greece +@begin[itemize] + President Christos Sartzetakis (SARTZETAKIS) + + Prime Minister Andreas Papandreou (PAPANDREOU) + + Economy Minister Panayotis Roumeliotis (ROUMELIOTIS) + + (former) Economy Minister Kostas Simitis (SIMITIS) + + Finance Minister Dimitris Tsovolas (TSOVOLAS) + + Agriculture Minister Yannis Pottakis (POTTAKIS) + + Central Bank Governor Dimitris Halikias (HALIKIAS) +@end[itemize] + +Hungary +@begin[itemize] + Head of State and President of Presidential Council Karoly Nemeth (NEMETH) + + Prime Minister Karoly Grosz (GROSZ) + + Finance Minister Miklos Villanyi (VILLANYI) + + (former) Finance Minister Peter Medgyessy (MEDGYESSY) + + Agriculture and Food Minister Jenoe Vancsa (VANCSA) + + Central Bank President Dr Matyas Timar (TIMAR) +@end[itemize] + +Iceland +@begin[itemize] + President Mrs Vigdis Finnbogadottir (FINNBOGADOTTIR) + + Prime Minister Thorsteinn Palsson (PALSSON) + + Finance Minister Jon Baldvin Hannibalsson (HANNIBALSSON) + + Central Bank Chairman Jonas G. Rafnar (RAFNAR) +@end[itemize] + +India +@begin[itemize] + President Ramaswamy Venkataraman (VENKATARAMAN) + + Prime Minister Rajiv Gandhi (GANDHI) + + Finance and Commerce Minister Narain Dutt Tiwari (TIWARI) + + Energy Minister Vasant Sathe (SATHE) + + Agriculture and Rural Development Minister Gurdial Singh Dhillon + (DHILLON) + + Central Bank (Reserve Bank) Governor R.N. Malhotra (MALHOTRA) +@end[itemize] + +Indonesia +@begin[itemize] + President General Suharto (SUHARTO) + + Economy Minister Ali Wardhana (WARDHANA) + + Finance Minister Radius Prawiro (PRAWIRO) + + Mining and Energy Minister Subroto (SUBROTO) + + Central Bank Governor Arifin Siregar (SIREGAR) +@end[itemize] + +Iran +@begin[itemize] + Revolutionary Leader Ayatollah Ruhollah Khomeini (KHOMEINI) + + President Hojatoleslam Ali Khameini (KHAMEINI) + + Prime Minister Mir-Hossein Mousavi (MOUSAVI) + + Oil Minister Gholamreza Aqazadeh (AQAZADEH) + + Central Bank Governor Majid Qassemi (QASSEMI) + + Speaker of the Majlis (Parliament) Hojatoleslam Ali Hashemi Rafsanjani + (RAFSANJANI) +@end[itemize] + +Ireland +@begin[itemize] + President Patrick Hillery (HILLERY) + + Prime Minister Charles Haughey (HAUGHEY) + + Finance Minister Ray MacSharry (MACSHARRY) + + Agriculture Minister Michael O'Kennedy (O-KENNEDY) + + Central Bank Governor Tomas O'Cofaigh (O-COFAIGH) +@end[itemize] + +Italy +@begin[itemize] + President Francesco Cossiga (COSSIGA) + + Prime Minister Giovanni Goria (GORIA) + + Deputy Prime Minister and Treasury Minister Guiliano Amato (AMATO) + + Finance Minister Antonio Gava (GAVA) + + Budget and Planning Minister Emilio Colombo (COLOMBO) + + Agriculture and Forestry Minister Filippo Maria Pandolfi (PANDOLFI) + + Central Bank (Bank of Italy) Governor Carlo Ciampi (CIAMPI) +@end[itemize] + + + +Japan +@begin[itemize] + Prime Minister Noboru Takeshita (TAKESHITA) + + (former) Prime Minister Yasuhiro Nakasone (NAKASONE) + + Finance Minister Kiichi Miyazawa (MIYAZAWA) + + International Trade and Industry Minister Hajime Tamura (TAMURA) + + Director-General of Economic Planning Agency Eiichi Nakao (NAKAO) + + (former) Director-General of Economic Planning Agency Tetsuo Kondo (KONDO) + + Central Bank (Bank of Japan) Governor Satoshi Sumita (SUMITA) +@end[itemize] + +Libya +@begin[itemize] +Muammar Gaddafi, Libyan leader (GADDAFI) +@end[itemize] + + +Luxembourg +@begin[itemize] + Prime Minister (who is also Minister of Communications, of Finance, + of Planning and of Posts, Telephone and Telegraph) + Jacques Santer (SANTER) +@end[itemize] + +Mexico +@begin[itemize] + President Miguel de la Madrid (DE-LA-MADRID) + + Finance Minister Gustavo Petricioli (PETRICIOLI) + + Oil, Mines and Parastatal Industry Minister Alfredo Del Mazo (DEL-MAZO) + + (former) Director-General of Pemex (State Oil Company) Ramon Beteta (BETETA) + + Director-General of Pemex (State Oil Company) francisco Rojas (ROJAS) + + Central Bank President Miguel Mancera Aguayo (MANCERA-AGUAYO) +@end[itemize] + + +The Netherlands +@begin[itemize] + Prime Minister Ruud Lubbers (LUBBERS) + + Deputy Prime Minister and Minister for Economic Affairs + Rudolf De Korte (DE-KORTE) + + Finance Minister Onno Ruding (RUDING) + + Agriculture Minister Gerrit Braks (BRAKS) + + Central Bank Governor Wim Duisenberg (DUISENBERG) +@end[itemize] + + +New Zealand +@begin[itemize] + Prime Minister David Lange (LANGE) + + Finance Minister Roger Douglas (DOUGLAS) + + Agriculture Minister Colin Moyle (MOYLE) + + Central Bank (Reserve Bank) Governor Spencer Russell (RUSSELL) +@end[itemize] + +Nicaragua +@begin[itemize] +Daniel Ortega, President of Nicaragua (ORTEGA) +@end[itemize] + +Nigeria +@begin[itemize] + President General Ibrahim Babangida (BABANGIDA) + + Agriculture Minister Major-General Mohammed Gado Nasko (NASKO) + + Finance Minister Chu Okongwu (OKONGWU) + + Petroleum Resources (Oil) Minister Rilwanu Lukman (LUKMAN) + + Central Bank Governor Alhaji Abdul Ahmed (ALHAJI-ABDUL-AHMED) +@end[itemize] + +Norway +@begin[itemize] + Prime Minister Mrs Gro Harlem Brundtland (BRUNDTLAND) + + Finance Minister Gunnar Berge (BERGE) + + Oil and Energy Minister Arne Oeien (OEIEN) + + Central Bank Governor Hermud Skaanland (SKAANLAND) +@end[itemize] + + +Pakistan +@begin[itemize] + President General Zia-ul-Haq (ZIA-UL-HAQ) + + Prime Minister Mohammad Khan Junejo (MOHAMMAD-KHAN-JUNEJO) + + Finance and Economic Affairs, Petroleum and Natural Resources + Minister Mohammad Yasin Khan Wattoo + (MOHAMMAD-YASIN-KHAN-WATTOO) + + Agriculture Minister Mohammad Ibrahim Jaffrey Baluch + (MOHAMMAD-IBRAHIM-JAFFREY-BALUCH) + + Central Bank (State Bank) Governor Wasim Aun Jaffrey (WASIM-AUN-JAFFREY) +@end[itemize] + +Peru +@begin[itemize] + President Alan Garcia (GARCIA) + + Economy and Finance Minister Gustavo Saberbein Chevalier (SABERBEIN) + + (former) Trade and Industry Minister Manuel Romero Caro (CARO) + + Industry and Trade Minister Alberto Vera La Rose (VERA-LA-ROSA) + + Energy Minister Abel Salinas (SALINAS) + + Agriculture Minister Remigio Morales Bermudez (MORALES-BERMUDEZ) + + Central Bank President Cesar Ferrari (FERRARI) +@end[itemize] + +Philippines +@begin[itemize] + President Mrs Corazon Aquino (AQUINO) + + (former) Finance Minister Jaime Ongpin (ONGPIN) + + Finance Minister Vicente Jayme (JAYME) + + Agriculture Minister Carlos Dominguez (DOMINGUEZ) + + Trade and Industry Minister Jose Concepcion (CONCEPCION) + + Central Bank Governor Jose Fernandez (FERNANDEZ) +@end[itemize] + +Poland +@begin[itemize] +Head of State and Chairman of Council of State (who is also First Secretary +of Polish United Workers (Communist) Party) General Wojciech Jaruzelski +(JARUZELSKI) + + Prime Minister Zbigniew Messner (MESSNER) + + Finance Minister Bazyli Samojlik (SAMOJLIK) +@end[itemize] + + + + +Portugal +@begin[itemize] + President Mario Soares (SOARES) + + Prime Minister Anibal Cavaco Silva (CAVACO-SILVA) + + Finance Minister Miguel Riberio Cadilhe (RIBERIO-CADILHE) + + Agriculture, Fisheries and Food Minister Alvaro Barreto (BARRETO) + + Central Bank Governor Jose Tavares Moreia (TAVARES-MOREIA) +@end[itemize] + + +Saudi Arabia +@begin[itemize] + Head of State and also Prime Minister King Fahd (Ibn Abdulaziz) + (KING-FAHD) + + Finance and National Economy Minister Sheikh Mohammed Ali Abal-Khail + (MOHAMMED-ALI-ABAL-KHAIL) + + Petroleum/Oil Minister Hisham Nazer (HISHAM-NAZER) + + Governor of the Saudi Arabian Monetary Agency Hamad Saud al-Sayyari + (HAMAD-SAUD-AL-SAYYARI) +@end[itemize] + +South Africa +@begin[itemize] + President P.W. Botha (BOTHA) + + Finance Minister Barend du Plessis (DU-PLESSIS) + + Central Bank (Reserve Bank) Governor Gerhard de Kock (DE-KOCK) +@end[itemize] + +Spain +@begin[itemize] + Prime Minister Felipe Gonzalez (GONZALEZ) + + Economy, Trade and Finance Minister Carlos Solchaga (SOLCHAGA) + + Agriculture Minister Carlos Romero (ROMERO) + + Central Bank Governor Mariano Rubio (RUBIO) +@end[itemize] + + +Sweden +@begin[itemize] + Prime Minister Ingvar Carlsson (CARLSSON) + + Finance Minister Kjell-Olof Feldt (FELDT) + + Central Bank Governor Bengt Dennis (DENNIS) +@end[itemize] + +Switzerland +@begin[itemize] + Economy Minister Jean-Pascal Delamuraz (DELAMURAZ) + + Finance Minister Otto Stich (STICH) + + Central Bank President Pierre Languetin (LANGUETIN) +@end[itemize] + +Taiwan +@begin[itemize] + President Lee Teng-hui (LEE-TENG-HUI) + + (former) President Chiang Ching-kuo (CHIANG-CHING-KUO) + + Prime Minister Yu Kuo-hua (YU-KUO-HUA) + + Economy Minister Lee Ta-hai (LEE-TA-HAI) + + Finance Minister Robert Chien (CHIEN) +@end[itemize] + +Thailand +@begin[itemize] + President General Prem Tinsulanonda (TINSULANONDA) + + Finance Minister Suthee Singhasaneh (SINGHASANEH) + + Agriculture Minister General Harn Leenanon (LEENANON) +@end[itemize] + +Turkey +@begin[itemize] + President Kenan Evren (EVREN) + + Prime Minister Turgut Ozal (OZAL) + + Finance Minister Ahmet Kurtcebe Alptemocin (ALPTEMOCIN) + + Central Bank Governor Rusdu Saracoglu (SARACOGLU) +@end[itemize] + + +United Kingdom +@begin[itemize] + Prime Minister Margaret Thatcher (THATCHER) + + Chancellor of the Exchequer (Finance Minister) Nigel Lawson (LAWSON) + + Energy Secretary Cecil Parkinson (PARKINSON) + + Trade and Industry Secretary Lord Young (YOUNG) + + Central Bank (Bank of England) Governor Robin Leigh-Pemberton + (LEIGH-PEMBERTON) +@end[itemize] + + +United States +@begin[itemize] + President Ronald Reagan (REAGAN) + + Treasury Secretary James Baker (JAMES-BAKER) + + Commerce Secretary C. William Verity (VERITY) + + Energy Secretary John Herrington (HERRINGTON) + + Agriculture Secretary Richard Lyng (LYNG) + + White House Chief of Staff Howard Baker (HOWARD-BAKER) + + Representative for Trade Negotiations Clayton Yeutter (YEUTTER) + + Director of Management and Budget Office James Miller (JAMES-MILLER) + + Chairman of Federal Reserve Board Alan Greenspan (GREENSPAN) + + President of New York Federal Reserve Bank E. Gerald Corrigan + (CORRIGAN) +@end[itemize] + +USSR (Soviet Union) +@begin[itemize] + President Andrei Gromyko (GROMYKO) + + General Secretary of the Communist Party Mikhail Gorbachev (GORBACHEV) + + Prime Minister Nikolai Ryzhkov (RYZHKOV) + + Finance Minister Boris Gostyev (GOSTYEV) + + State Bank Board Chairman Viktor Dementsev (DEMENTSEV) +@end[itemize] + +West Germany +@begin[itemize] + President Richard Von Weizsaecker (VON-WEIZSAECKER) + + Chancellor Helmut Kohl (KOHL) + + Finance Minister Gerhard Stoltenberg (STOLTENBERG) + + Economy Minister Martin Bangemann (BANGEMANN) + + Agriculture, Food and Forestry Minister Ignaz Kiechle (KIECHLE) + + Central Bank (Bundesbank) President Karl Otto Poehl (POEHL) +@end[itemize] + +Yugoslavia +@begin[itemize] + Prime Minister Branko Mikulic (MIKULIC) + + Finance Minister Svetozar Rikanovic (RIKANOVIC) + + Central Bank (National Bank) Governor Dusan Vlatkovic (VLATKOVIC) +@end[itemize] + +European Community Commission +@begin[itemize] + President Jacques Delors (DELORS) + + Commissioner for Agriculture and Forestry Frans Andriessen (ANDRIESSEN) + + Commissioner for Trade Policy Willy de Clercq (DE-CLERCQ) +@end[itemize] + +International Monetary Fund Managing Director Michel Camdessus (CAMDESSUS) + +World Bank President Barber Conable (CONABLE) + +International Atomic Energy Agency Director-General Hans Blix (BLIX) + +International Energy Agency Executive Director Helga Steeg (STEEG) + +Asian Development Bank President Masao Fujioka (FUJIOKA) + +United Nations Secretary-General Javier Perez de Cuellar (PEREZ-DE-CUELLAR) + +UNCTAD (United Nations Conference on Trade and Development) + Secretary-General Kenneth Dadzie (DADZIE) + +Organisation for Economic Cooperation and Development + Secretary-General Jean-Claude Paye (PAYE) + +International Air Transport Association Director General + Guenter Eser (ESER) + +Securities and Exchange Commission Chairman David S. Ruder (RUDER) + +General Agreement on Tariffs and Trade Director-General + Arthur Dunkel (DUNKEL) + +Milton Friedman, economist (FRIEDMAN) + +Henry Kaufman, economist with Salomon Bros. (KAUFMAN) + +Ivan Boesky (BOESKY) + +Carl Icahn (ICAHN) + +T. Boone Pickens (PICKENS) + +Rupert Murdoch, publisher and chairman of News Corp Ltd (MURDOCH) + +Robert Maxwell, publisher and chairman of Mirror Group of newspapers (MAXWELL) + +Roland (Tiny) Rowland, chairman of Lonrho Plc (ROWLAND) + +Asher Edelman (EDELMAN) + +Marc Rich (RICH) + +Alan Bond, chairman of Bond Corp Ltd (BOND) + +Jorio Dauster, President of The Brazilian Coffee Institute (DAUSTER) + +Beryl Sprinkel, Chairman of Council of Economic Advisers (SPRINKEL) + +Yasser Arafat, Chairman of Palestine Liberation Organisation (ARAFAT) + +Paul Volcker, economist (VOLCKER) + +Preston Martin, member of Federal Reserve Board (MARTIN) +@end[itemize] + + + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/feldman-cia-worldfactbook-data.txt clucene-core-2.3.3.4/src/test/data/reuters-21578/feldman-cia-worldfactbook-data.txt --- clucene-core-0.9.21b/src/test/data/reuters-21578/feldman-cia-worldfactbook-data.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/feldman-cia-worldfactbook-data.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,5199 @@ +This is a set of Prolog assertions for facts about countries, kindly +made available by Ronen Feldman of Bar-Ilan University. It was +extracted by Ronen Feldman and Amir Zilberstein from "The Project +Gutenberg Etext of the 1994 CIA World Factbook", available at a +variety of locations on the Web. --David D. Lewis, 9-Dec-96 + +pred_type("LandBounderies","countries","countries"). +pred_type("NaturalResources","countries","topics"). +pred_type("Population","countries","countries"). +pred_type("Capital","countries","countries"). +pred_type("MemberOf","countries","countries"). +pred_type("ExportCommodities","countries","topics"). +pred_type("ExportPartners","countries","countries"). +pred_type("ImportCommodities","countries","topics"). +pred_type("ImportPartners","countries","countries"). +pred_type("Industries","countries","topics"). +pred_type("Agriculture","countries","topics"). +bgfact("Afghanistan","LandBounderies",["China","Iran","Pakistan","Tajikis= +tan","Turkmenistan","Uzbekistan"]). +bgfact("Afghanistan","NaturalResources",["natural = +gas","petroleum","coal","copper","talc","barites","sulphur","lead","zinc"= +,"iron ore","salt","precious and semiprecious stones"]). +bgfact("Afghanistan","Population",["16903400"]). +bgfact("Afghanistan","Capital",["Kabul"]). +bgfact("Afghanistan","MemberOf",["AsDB","CP","ECO","ESCAP","FAO","G-77","= +IAEA","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","INTELSAT","IOC"= +,"ITU","LORCS","NAM","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","W= +HO","WMO","WTO"]). +bgfact("Afghanistan","ExportCommodities",["fruits and nuts","handwoven = +carpets","wool","cotton","hides and pelts","precious and semi-precious = +gems"]). +bgfact("Afghanistan","ExportPartners",["FSU = +countries","Pakistan","Iran","Germany","India","UK","Belgium","Luxembourg= +","Czechoslovakia"]). +bgfact("Afghanistan","ImportCommodities",["most consumer goods"]). +bgfact("Afghanistan","ImportPartners",["FSU = +countries","Pakistan","Iran","Japan","Singapore","India","South = +Korea","Germany"]). +bgfact("Afghanistan","Industries",["textiles","soap","furniture","shoes",= +"fertilizer","natural gas","oil","coal","copper"]). +bgfact("Afghanistan","Agriculture",["wheat","fruits","nuts","karakul = +pelts","wool","mutton"]). +bgfact("Albania","LandBounderies",["Greece","The Former Yugoslav = +Republic of Macedonia","Serbia and Montenegro"]). +bgfact("Albania","NaturalResources",["petroleum","natural = +gas","coal","chromium","copper","timber","nickel"]). +bgfact("Albania","Population",["3374085"]). +bgfact("Albania","Capital",["Tirane"]). +bgfact("Albania","MemberOf",["BSEC","CCC","CE","ISO","ITU","LORCS","NACC"= +,"OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WIPO","WMO"]). +bgfact("Albania","ExportCommodities",["asphalt","metals and metallic = +ores","electricity","crude","vegetables","fruits","tobacco"]). +bgfact("Albania","ExportPartners",["Italy","The Former Yugoslav Republic = +of = +Macedonia","Germany","Greece","Czechoslovakia","Poland","Romania","Bulgar= +ia","Hungary"]). +bgfact("Albania","ImportCommodities",["machinery","consumer = +goods","grains"]). +bgfact("Albania","ImportPartners",["Italy","The Former Yugoslav Republic = +of = +Macedonia","Germany","Czechoslovakia","Romania","Poland","Hungary","Bulga= +ria","Greece"]). +bgfact("Albania","Industries",["food processing","textiles and = +clothing","lumber","oil","cement","chemicals","mining","basic = +metals","hydropower"]). +bgfact("Albania","Agriculture",["produces wide range of temperate-zone = +crops and livestock"]). +bgfact("Algeria","LandBounderies",["Libya","Mali","Mauritania","Morocco",= +"Niger","Tunisia","Western Sahara"]). +bgfact("Algeria","NaturalResources",["petroleum","natural gas","iron = +ore","phosphates","uranium","lead","zinc"]). +bgfact("Algeria","Population",["27895068"]). +bgfact("Algeria","Capital",["Algiers"]). +bgfact("Algeria","MemberOf",["ABEDA","AfDB","AFESD","AL","AMF","AMU","CCC= +","ECA","FAO","G-15","G-19","G-24","G-77","IAEA","IBRD","ICAO","IDA","IDB= +","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","= +ISO","ITU","LORCS","NAM","OAPEC","OAS","OAU","OIC","OPEC","UN","UNAVEM = +II","UNCTAD","UNESCO","UNHCR","UNIDO","UNTAC","UPU","WCL","WHO","WIPO","W= +MO","WTO"]). +bgfact("Algeria","ExportCommodities",["petroleum and natural gas"]). +bgfact("Algeria","ExportPartners",["Italy","France","US","Germany","Spain= +"]). +bgfact("Algeria","ImportCommodities",["Capital goods","food and = +beverages","consumer goods"]). +bgfact("Algeria","ImportPartners",["France","Italy","Spain","US","Germany= +"]). +bgfact("Algeria","Industries",["petroleum","light Industries","natural = +gas","mining","electrical","petrochemical","food processing"]). +bgfact("Algeria","Agriculture",["wheat","barley","oats","grapes","olives"= +,"citrus","fruits","sheep","net importer of food - grain","vegetable = +oil","sugar"]). +bgfact("American Samoa","LandBounderies",[]). +bgfact("American Samoa","NaturalResources",["pumice","pumicite"]). +bgfact("American Samoa","Population",["55223"]). +bgfact("American Samoa","Capital",["Pago Pago"]). +bgfact("American Samoa","MemberOf",["ESCAP","IOC","SPC"]). +bgfact("American Samoa","ExportCommodities",["canned tuna"]). +bgfact("American Samoa","ExportPartners",["US"]). +bgfact("American Samoa","ImportCommodities",["materials for = +canneries","food","petroleum products","machinery and parts"]). +bgfact("American = +Samoa","ImportPartners",["US","Japan","NZ","Australia","Fiji"]). +bgfact("American Samoa","Industries",["tuna canneries","meat = +canning","handicrafts"]). +bgfact("American = +Samoa","Agriculture",["bananas","coconuts","vegetables","taro","breadfrui= +t","yams","copra","pineapples","papayas","dairy farming"]). +bgfact("Andorra","LandBounderies",["France","Spain"]). +bgfact("Andorra","NaturalResources",["hydropower","mineral = +water","timber","iron ore","lead"]). +bgfact("Andorra","Population",["63930"]). +bgfact("Andorra","Capital",["Andorra la Vella"]). +bgfact("Andorra","MemberOf",["ECE","INTERPOL","IOC","UN"]). +bgfact("Andorra","ExportCommodities",["electricity","tobacco = +products","furniture"]). +bgfact("Andorra","ExportPartners",["France","Spain"]). +bgfact("Andorra","ImportCommodities",["consumer goods","food"]). +bgfact("Andorra","ImportPartners",["France","Spain"]). +bgfact("Andorra","Industries",["tourism","sheep","timber","tobacco","bank= +ing"]). +bgfact("Andorra","Agriculture",["small quantities of = +tobacco","rye","wheat","barley","oats"]). +bgfact("Angola","LandBounderies",["Congo","Namibia","Zaire","Zambia"]). +bgfact("Angola","NaturalResources",["petroleum","diamonds","iron = +ore","phosphates","copper","feldspar","gold","bauxite","uranium"]). +bgfact("Angola","Population",["9803576"]). +bgfact("Angola","Capital",["Luanda"]). +bgfact("Angola","MemberOf",["ACP","AfDB","CCC","CEEAC","OAU","SADC","UN",= +"UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Angola","ExportCommodities",["oil","diamonds","refined petroleum = +products","gas","coffee","sisal","fish and fish = +products","timber","cotton"]). +bgfact("Angola","ExportPartners",["US","France","Germany","Netherlands","= +Brazil"]). +bgfact("Angola","ImportCommodities",["Capital = +equipment","food","vehicles and spare parts","textiles and = +clothing","substantial military deliveries"]). +bgfact("Angola","ImportPartners",["Portugal","Brazil","US","France","Spai= +n"]). +bgfact("Angola","Industries",["mining - diamonds","iron = +ore","phosphates","feldspar","bauxite","uranium","basic metal = +products"]). +bgfact("Angola","Agriculture",["bananas","sugar = +cane","coffee","sisal","corn","cotton","cane","manioc","food = +cassava","corn","vegetables","livestock production accounts = +for","fishing","disruptions caused by civil war"]). +bgfact("Anguilla","LandBounderies",[]). +bgfact("Anguilla","NaturalResources",["salt","fish","lobster"]). +bgfact("Anguilla","Population",["7052"]). +bgfact("Anguilla","Capital",["The Valley"]). +bgfact("Anguilla","MemberOf",["CARICOM"]). +bgfact("Anguilla","ExportCommodities",["lobster and salt"]). +bgfact("Anguilla","ExportPartners",["NA"]). +bgfact("Anguilla","ImportCommodities",["NA"]). +bgfact("Anguilla","ImportPartners",["NA"]). +bgfact("Anguilla","Industries",["tourism","boat building","salt"]). +bgfact("Anguilla","Agriculture",["pigeon peas","corn","sweet = +potatoes","sheep","goats","pigs","cattle","poultry","fishing"]). +bgfact("Antarctica","LandBounderies",["none","but see entry on = +International disputes"]). +bgfact("Antarctica","NaturalResources",["iron = +ore","chromium","copper","gold","nickel","uncommercial quantities"]). +bgfact("Antigua and Barbuda","LandBounderies",[]). +bgfact("Antigua and Barbuda","NaturalResources",["pleasant climate = +fosters tourism"]). +bgfact("Antigua and Barbuda","Population",["64762"]). +bgfact("Antigua and Barbuda","Capital",["Saint John's"]). +bgfact("Antigua and = +Barbuda","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-77","GATT= +","IBRD","ICAO","ICFTU","IFAD","IFC","ILO","IMF","IMO","INTELSAT","OAS","= +OECS","OPANAL","UN","UNCTAD","UNESCO","WCL","WHO","WMO"]). +bgfact("Antigua and Barbuda","ExportCommodities",["petroleum = +products","manubgfactures","food and live animals","machinery and = +transport equipment"]). +bgfact("Antigua and = +Barbuda","ExportPartners",["OECS","Barbados","Guyana","Trinidad and = +Tobago","US"]). +bgfact("Antigua and Barbuda","ImportCommodities",["food and live = +animals","machinery and transport = +equipment","manubgfactures","chemicals","oil"]). +bgfact("Antigua and = +Barbuda","ImportPartners",["US","UK","Canada","OECS"]). +bgfact("Antigua and = +Barbuda","Industries",["tourism","construction","light = +manubgfacturing"]). +bgfact("Antigua and Barbuda","Agriculture",["expanding output of = +cotton","fruits","vegetables","coconuts","cucumbers","mangoes","not = +self-sufficient in food"]). +bgfact("Arctic Ocean","NaturalResources",["sand and gravel = +aggregates","placer deposits","polymetallic nodules","oil and gas = +fields","fish","marine mammals"]). +bgfact("Argentina","LandBounderies",["Bolivia","Brazil","Chile","Paraguay= +","Uruguay"]). +bgfact("Argentina","NaturalResources",["fertile plains of the = +pampas","lead","zinc","tin","copper","iron = +ore","manganese","petroleum","uranium"]). +bgfact("Argentina","Population",["33912994"]). +bgfact("Argentina","Capital",["Buenos Aires"]). +bgfact("Argentina","MemberOf",["AG","Australia = +Group","BCIE","CCC","ECLAC","FAO","G-6","G-11","G-15","G-19","G-24","AfDB= +","G-77","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","I= +FC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO",= +"ITU","LAES","LAIA","LORCS","MERCOSUR","MINURSO","MTCR","OAS","PCA","RG",= +"UN","UNAVEM = +II","UNCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UNOMOZ","UNOSOM","UNPROFO= +R","UNTAC","UNTSO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Argentina","ExportCommodities",["meat","wheat","corn","oilseed","= +hides","wool"]). +bgfact("Argentina","ExportPartners",["US","Brazil","Italy","Japan","Nethe= +rlands"]). +bgfact("Argentina","ImportCommodities",["machinery and = +equipment","chemicals","metals","fuels and lubricants","agricultural = +products"]). +bgfact("Argentina","ImportPartners",["US","Brazil","Germany","Bolivia","J= +apan","Italy","Netherlands"]). +bgfact("Argentina","Industries",["food processing","motor = +vehicles","consumer durables","textiles","chemicals and = +petrochemicals","printing","metallurgy","steel"]). +bgfact("Argentina","Agriculture",["principal = +wheat","corn","sorghum","soybeans","sugar beets"]). +bgfact("Armenia","LandBounderies",["Azerbaijan","Georgia","Iran","Turkey"= +]). +bgfact("Armenia","NaturalResources",["small deposits of = +gold","copper","molybdenum","zinc","alumina"]). +bgfact("Armenia","Population",["3521517"]). +bgfact("Armenia","Capital",["Yerevan"]). +bgfact("Armenia","MemberOf",["BSEC","CCC","CIS","CSCE","EBRD","ECE","IAEA= +","IBRD","ICAO","IDA","IFAD","ILO","IMF","INTELSAT","INTERPOL","IOC","ITU= +","NACC","NAM","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]).= + +bgfact("Armenia","ExportCommodities",["machinery and transport = +equipment","light industrial products","processed food items","alcoholic = +products"]). +bgfact("Armenia","ExportPartners",["NA"]). +bgfact("Armenia","ImportCommodities",["grain","fuel"]). +bgfact("Armenia","ImportPartners",["Russia","US","EC"]). +bgfact("Armenia","Industries",["traditionally diverse","currently","much = +of industry is shut down"]). +bgfact("Armenia","Agriculture",["fruits and vegetable farming"]). +bgfact("Aruba","LandBounderies",[]). +bgfact("Aruba","NaturalResources",["white sandy beaches"]). +bgfact("Aruba","Population",["65545"]). +bgfact("Aruba","Capital",["Oranjestad"]). +bgfact("Aruba","ExportCommodities",["mostly petroleum products"]). +bgfact("Aruba","ExportPartners",["US","EC"]). +bgfact("Aruba","ImportCommodities",["food","consumer = +goods","manubgfactures","petroleum products"]). +bgfact("Aruba","ImportPartners",["US","EC"]). +bgfact("Aruba","Industries",["tourism","transshipment facilities","oil = +refining"]). +bgfact("Aruba","Agriculture",["poor quality soils and low rainfall limit = +agricultural activity to the cultivation of aloes","some livestock"]). +bgfact("Ashmore and Cartier Islands","LandBounderies",[]). +bgfact("Ashmore and Cartier Islands","NaturalResources",["fish"]). +bgfact("Ashmore and Cartier Islands","Capital",["none; administered from = +Canberra, Australia"]). +bgfact("Atlantic Ocean","NaturalResources",["oil and gas = +fields","fish","marine mammals","sand and gravel aggregates","placer = +deposits","polymetallic nodules","precious stones"]). +bgfact("Australia","LandBounderies",[]). +bgfact("Australia","NaturalResources",["bauxite","coal","iron = +ore","copper","tin","silver","uranium","nickel","tungsten","mineral = +sands","lead","zinc","diamonds","natural gas","petroleum"]). +bgfact("Australia","Population",["18077419"]). +bgfact("Australia","Capital",["Canberra"]). +bgfact("Australia","MemberOf",["AfDB","AG","NEA","NSG","OECD","PCA","SPAR= +TECA","SPC","SPF","UN","UNCTAD","UNESCO","UNFICYP","UNHCR","UNIDO","UNOSO= +M","UNPROFOR","UNTAC","UNTSO","UPU","WFTU","WHO","WIPO","WMO","ZC"]). +bgfact("Australia","ExportCommodities",["coal","gold","meat","wool","alum= +ina","wheat","machinery and transport equipment"]). +bgfact("Australia","ExportPartners",["Japan","US","South = +Korea","NZ","UK","Taiwan","Singapore","Hong Kong"]). +bgfact("Australia","ImportCommodities",["machinery and transport = +equipment","computers and office machines","crude and petroleum = +products"]). +bgfact("Australia","ImportPartners",["US","Japan","UK","Germany","NZ"]). +bgfact("Australia","Industries",["mining","industrial and transportation = +equipment","food processing","chemicals","steel"]). +bgfact("Australia","Agriculture",["world's largest exporter of beef and = +wool","second-largest for mutton","major = +wheat","barley","sugarcane","livestock - cattle","sheep","poultry"]). +bgfact("Austria","LandBounderies",["Czech = +Republic","Germany","Hungary","Italy","Liechtenstein","Slovakia","Sloveni= +a","Switzerland"]). +bgfact("Austria","NaturalResources",["iron = +ore","petroleum","timber","magnesite","aluminum","lead","coal","lignite",= +"copper","hydropower"]). +bgfact("Austria","Population",["7954974"]). +bgfact("Austria","Capital",["Vienna"]). +bgfact("Austria","MemberOf",["AfDB","AG","OECD","ONUSAL","PCA","UN","UNCT= +AD","UNESCO","UNDOF","UNFICYP","UNHCR","UNIDO","UNIKOM","UNOMIG","UNTAC",= +"UNTSO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Austria","ExportCommodities",["machinery and equipment","iron = +and steel","lumber","textiles","paper products","chemicals"]). +bgfact("Austria","ExportPartners",["EC"]). +bgfact("Austria","ImportCommodities",["petroleum","foodstuffs","machinery= + and equipment","vehicles","chemicals","textiles and = +clothing","pharmaceuticals"]). +bgfact("Austria","ImportPartners",["EC"]). +bgfact("Austria","Industries",["foods","iron","steel","machines","textile= +s","chemicals","electrical","paper and pulp","tourism","mining","motor = +vehicles"]). +bgfact("Austria","Agriculture",["grains","fruit","potatoes","sugar = +beets","sawn wood","cattle","pigs","-90% self-sufficient in food"]). +bgfact("Azerbaijan","LandBounderies",["Armenia","Russia","Turkey"]). +bgfact("Azerbaijan","NaturalResources",["petroleum","natural gas","iron = +ore","nonferrous metals","alumina"]). +bgfact("Azerbaijan","Population",["7684456"]). +bgfact("Azerbaijan","Capital",["Baku"]). +bgfact("Azerbaijan","MemberOf",["BSEC","CCC","CIS","CSCE","EBRD","ECE","E= +CO","ESCAP","IBRD","ICAO","IDB","ILO","IMF","INTELSAT","INTERPOL","IOC","= +ITU","NACC","OIC","UN","UNCTAD","UNESCO","UPU","WHO"]). +bgfact("Azerbaijan","ExportCommodities",["oil","gas","chemicals","oilfiel= +d equipment","textiles","cotton"]). +bgfact("Azerbaijan","ExportPartners",["mostly CIS and European = +countries"]). +bgfact("Azerbaijan","ImportCommodities",["machinery and parts","consumer = +durables","foodstuffs","textiles"]). +bgfact("Azerbaijan","ImportPartners",["European countries"]). +bgfact("Azerbaijan","Industries",["petroleum","natural gas","petroleum = +products","steel","iron ore","textiles"]). +bgfact("The Bahamas","LandBounderies",[]). +bgfact("The Bahamas","NaturalResources",["salt","aragonite","timber"]). +bgfact("The Bahamas","Population",["273055"]). +bgfact("The Bahamas","Capital",["Nassau"]). +bgfact("The = +Bahamas","MemberOf",["ACP","C","CCC","CARICOM","CDB","ECLAC","FAO","G-77"= +,"IADB","IBRD","ICAO","ICFTU","IFC","ILO","IMF","IMO","INTELSAT","INTERPO= +L","IOC","ITU","LORCS","NAM","OAS","OPANAL","UN","UNCTAD","UNESCO","UNIDO= +","UPU","WHO","WIPO","WMO"]). +bgfact("The = +Bahamas","ExportCommodities",["pharmaceuticals","cement","rum","crawfish"= +]). +bgfact("The = +Bahamas","ExportPartners",["US","UK","Norway","France","Italy"]). +bgfact("The Bahamas","ImportCommodities",["foodstuffs","manubgfactured = +goods","mineral fuels","crude"]). +bgfact("The = +Bahamas","ImportPartners",["US","Japan","Nigeria","Denmark","Norway"]). +bgfact("The Bahamas","Industries",["tourism","banking","cement","oil = +refining and transshipment","salt = +production","rum","aragonite","pharmaceuticals","spiral welded steel = +pipe"]). +bgfact("The Bahamas","Agriculture",["citrus","vegetables","large net = +importer of food"]). +bgfact("Bahrain","LandBounderies",[]). +bgfact("Bahrain","NaturalResources",["oil","associated and nonassociated = +natural gas","fish"]). +bgfact("Bahrain","Population",["585683"]). +bgfact("Bahrain","Capital",["Manama"]). +bgfact("Bahrain","MemberOf",["ABEDA","AFESD","AL","AMF","ESCWA","FAO","G-= +77","GATT","GCC","IBRD","ICAO","IDB","ILO","IMF","IMO","INMARSAT","INTELS= +AT","ITU","LORCS","NAM","OAPEC","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU= +","WFTU","WHO","WMO"]). +bgfact("Bahrain","ExportCommodities",["petroleum and petroleum = +products","aluminum"]). +bgfact("Bahrain","ExportPartners",["Japan","UAE","India","Pakistan","Sing= +apore"]). +bgfact("Bahrain","ImportCommodities",["nonoil","crude"]). +bgfact("Bahrain","ImportPartners",["Saudi = +Arabia","US","UK","Japan","Germany"]). +bgfact("Bahrain","Industries",["petroleum processing and = +refining","aluminum smelting","offshore banking","ship repairing"]). +bgfact("Bahrain","Agriculture",["including fishing","heavily subsidized = +sector produces fruit","vegetables","poultry","dairy = +products","shrimp","fish"]). +bgfact("Baker Island","LandBounderies",[]). +bgfact("Baker Island","Population",["1942"]). +bgfact("Baker Island","Capital",["none; administered from Washington, = +DC"]). +bgfact("Bangladesh","LandBounderies",["Burma","India"]). +bgfact("Bangladesh","NaturalResources",["natural gas","arable = +land","timber"]). +bgfact("Bangladesh","Population",["125149469"]). +bgfact("Bangladesh","Capital",["Dhaka"]). +bgfact("Bangladesh","MemberOf",["AsDB","C","CCC","CP","ESCAP","FAO","G-77= +","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","IFC","ILO","IMF= +","IMO","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","MINURSO","= +NAM","OIC","SAARC","UN","UNCTAD","UNESCO","UNIDO","UNIKOM","UNOMIG","UNOM= +OZ","UNOMUR","UNOSOM","UNPROFOR","UNTAC","UPU","WCL","WHO","WFTU","WIPO",= +"WMO","WTO"]). +bgfact("Bangladesh","ExportCommodities",["garments","jute and jute = +goods","leather","shrimp"]). +bgfact("Bangladesh","ExportPartners",["US","Western Europe"]). +bgfact("Bangladesh","ImportCommodities",["Capital = +goods","petroleum","food","textiles"]). +bgfact("Bangladesh","ImportPartners",["Hong = +Kong","Singapore","China","Japan"]). +bgfact("Bangladesh","Industries",["jute manubgfacturing","cotton = +textiles","food processing","steel","fertilizer"]). +bgfact("Bangladesh","Agriculture",["accounts for of GDP","of = +employment","commercial = +jute","rice","wheat","tea","sugarcane","potatoes","beef","milk","shortage= +s include wheat","vegetable oils","cotton"]). +bgfact("Barbados","LandBounderies",[]). +bgfact("Barbados","NaturalResources",["petroleum","fishing","natural = +gas"]). +bgfact("Barbados","Population",["255827"]). +bgfact("Barbados","Capital",["Bridgetown"]). +bgfact("Barbados","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-= +77","GATT","IADB","IBRD","ICAO","ICFTU","IFAD","IFC","ILO","IMF","IMO","I= +NTELSAT","INTERPOL","IOC","ISO","ITU","LAES","LORCS","NAM","OAS","OPANAL"= +,"UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). +bgfact("Barbados","ExportCommodities",["sugar and = +molasses","rum","chemicals","electrical components","clothing"]). +bgfact("Barbados","ExportPartners",["US","UK","Trinidad and = +Tobago","Windward Islands"]). +bgfact("Barbados","ImportCommodities",["machinery","foodstuffs","construc= +tion materials","chemicals","fuel","electrical components"]). +bgfact("Barbados","ImportPartners",["US","UK","Trinidad and = +Tobago","Japan"]). +bgfact("Barbados","Industries",["tourism","sugar","light = +manubgfacturing","component assembly for export","petroleum"]). +bgfact("Barbados","Agriculture",["not self-sufficient in food"]). +bgfact("Bassas da India","LandBounderies",[]). +bgfact("Bassas da India","NaturalResources",["none"]). +bgfact("Bassas da India","Capital",["none; administered by France from = +Reunion"]). +bgfact("Belarus","LandBounderies",["Latvia","Lithuania","Poland","Russia"= +,"Ukraine"]). +bgfact("Belarus","NaturalResources",["forest land","peat deposits"]). +bgfact("Belarus","Population",["10404862"]). +bgfact("Belarus","Capital",["Minsk"]). +bgfact("Belarus","MemberOf",["CBSS","IOC","ITU","NACC","PCA","UN","UNCTAD= +","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). +bgfact("Belarus","ExportCommodities",["machinery and transport = +equipment","chemicals","foodstuffs"]). +bgfact("Belarus","ExportPartners",["Russia","Ukraine","Poland","Bulgaria"= +]). +bgfact("Belarus","ImportCommodities",["fuel","industrial raw = +materials","textiles","sugar"]). +bgfact("Belarus","ImportPartners",["Russia","Ukraine","Poland"]). +bgfact("Belarus","Industries",[]). +bgfact("Belarus","Agriculture",["net exporter of = +meat","milk","eggs","flour","potatoes"]). +bgfact("Belgium","LandBounderies",["France","Germany","Luxembourg","Nethe= +rlands"]). +bgfact("Belgium","NaturalResources",["coal","natural gas"]). +bgfact("Belgium","Population",["10062836"]). +bgfact("Belgium","Capital",["Brussels"]). +bgfact("Belgium","MemberOf",["AG","OECD","PCA","UN","UNCTAD","UNESCO","UN= +HCR","UNIDO","UNMOGIP","UNOSOM","UNPROFOR","UNRWA","UNTAC","UNTSO","UPU",= +"WCL","WEU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Belgium","ExportCommodities",["iron and steel","transportation = +equipment","tractors","diamonds","petroleum products"]). +bgfact("Belgium","ExportPartners",["EC","US","former Communist = +countries"]). +bgfact("Belgium","ImportCommodities",["fuels","grains","chemicals","foods= +tuffs"]). +bgfact("Belgium","ImportPartners",["EC","US","oil-exporting less = +developed countries","former Communist countries"]). +bgfact("Belgium","Industries",["engineering and metal products","motor = +vehicle assembly","processed food and beverages","chemicals","basic = +metals","textiles","glass","petroleum","coal"]). +bgfact("Belgium","Agriculture",["emphasis on livestock production - = +beef","veal","pork","major crops are sugar beets","fresh = +vegetables","fruits","grain","net importer of farm products"]). +bgfact("Belize","LandBounderies",["Guatemala","Mexico"]). +bgfact("Belize","NaturalResources",["arable land = +potential","timber","fish"]). +bgfact("Belize","Population",["208949"]). +bgfact("Belize","Capital",["Belmopan"]). +bgfact("Belize","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-77= +","GATT","IADB","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO= +","INTELSAT","ITU","LAES","LORCS","NAM","OAS","UN","UNCTAD","UNESCO","UNI= +DO","UPU","WCL","WHO","WMO"]). +bgfact("Belize","ExportCommodities",["sugar","citrus","clothing","fish = +products","bananas","molasses","wood"]). +bgfact("Belize","ExportPartners",["US","UK"]). +bgfact("Belize","ImportCommodities",["machinery and transportation = +equipment","food","manubgfactured = +goods","fuels","chemicals","pharmaceuticals"]). +bgfact("Belize","ImportPartners",["US","UK","Mexico"]). +bgfact("Belize","Industries",["garment production","citrus = +concentrates","sugar refining","rum","beverages","tourism"]). +bgfact("Belize","Agriculture",["commercial crops include sugar = +cane","bananas","coca","net importer of basic foods"]). +bgfact("Benin","LandBounderies",["Burkina","Niger","Nigeria","Togo"]). +bgfact("Benin","NaturalResources",["small offshore oil = +deposits","limestone","marble","timber"]). +bgfact("Benin","Population",["5341710"]). +bgfact("Benin","Capital",["Porto-Novo"]). +bgfact("Benin","MemberOf",["ACCT","ACP","AfDB","CEAO","ECA","ECOWAS","Ent= +ente","FAO","FZ","G-77","GATT","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","= +IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","O= +AU","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WFTU","WHO",= +"WIPO","WMO","WTO"]). +bgfact("Benin","ExportCommodities",["crude","cotton","palm = +products","cocoa"]). +bgfact("Benin","ExportPartners",["FRG","France","Spain","Italy","UK"]). +bgfact("Benin","ImportCommodities",["foodstuffs","beverages","tobacco","p= +etroleum products","intermediate goods","Capital goods","light = +consumer goods"]). +bgfact("Benin","ImportPartners",["France","Thailand","Netherlands","US"])= +. +bgfact("Benin","Industries",["textiles","cigarettes","construction = +materials","beverages","food production","petroleum"]). +bgfact("Benin","Agriculture",["production is dominated by food = +corn","sorghum","cassava","beans","crops include cotton","palm = +oil","poultry and livestock output has not kept up with consumption"]). +bgfact("Bermuda","LandBounderies",[]). +bgfact("Bermuda","NaturalResources",["limestone","pleasant climate = +fostering tourism"]). +bgfact("Bermuda","Population",["61158"]). +bgfact("Bermuda","Capital",["Hamilton"]). +bgfact("Bermuda","MemberOf",["CARICOM","IOC"]). +bgfact("Bermuda","ExportCommodities",["semitropical produce","light = +manubgfactures","re-exports of pharmaceuticals"]). +bgfact("Bermuda","ExportPartners",["US","UK","Canada"]). +bgfact("Bermuda","ImportCommodities",["fuel","foodstuffs","machinery"]). +bgfact("Bermuda","ImportPartners",["US","UK","Venezuela","Canada","Japan"= +]). +bgfact("Bermuda","Industries",["tourism","finance","structural concrete = +products","paints","pharmaceuticals","ship repairing"]). +bgfact("Bermuda","Agriculture",["produces bananas","vegetables","citrus = +fruits","flowers","dairy products"]). +bgfact("Bhutan","LandBounderies",["China","India"]). +bgfact("Bhutan","NaturalResources",["timber","hydropower","gypsum","calci= +um carbide"]). +bgfact("Bhutan","Population",["716380"]). +bgfact("Bhutan","Capital",["Thimphu"]). +bgfact("Bhutan","MemberOf",["AsDB","CP","ESCAP","FAO","G-77","IBRD","ICAO= +","IDA","IFAD","IMF","INTELSAT","IOC","ITU","NAM","SAARC","UN","UNCTAD","= +UNESCO","UNIDO","UPU","WHO"]). +bgfact("Bhutan","ExportCommodities",["cardamon","gypsum","timber","handic= +rafts","cement","fruit","electricity","precious stones","spices"]). +bgfact("Bhutan","ExportPartners",["India","Bangladesh","Singapore"]). +bgfact("Bhutan","ImportCommodities",["fuel and = +lubricants","grain","machinery and parts","vehicles","fabrics"]). +bgfact("Bhutan","ImportPartners",["India","Japan","Germany","US","UK"]). +bgfact("Bhutan","Industries",["cement","wood products","processed = +fruits","alcoholic beverages","calcium carbide"]). +bgfact("Bhutan","Agriculture",["corn","root crops","citrus fruit","dairy = +products","eggs"]). +bgfact("Bolivia","LandBounderies",["Argentina","Brazil","Chile","Paraguay= +","Peru"]). +bgfact("Bolivia","NaturalResources",["tin","natural = +gas","petroleum","zinc","tungsten","antimony","silver","iron = +ore","lead","gold","timber"]). +bgfact("Bolivia","Population",["7719445"]). +bgfact("Bolivia","Capital",["La Paz"]). +bgfact("Bolivia","MemberOf",["AG","ECLAC","FAO","GATT","G-11","G-77","IAD= +B","IAEA","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","= +INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","NAM","OAS","OPANAL","P= +CA","RG","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","= +WMO","WTO"]). +bgfact("Bolivia","ExportCommodities",["metals","natural gas"]). +bgfact("Bolivia","ExportPartners",["US","Argentina"]). +bgfact("Bolivia","ImportCommodities",["food","petroleum","consumer = +goods","Capital goods"]). +bgfact("Bolivia","ImportPartners",["US"]). +bgfact("Bolivia","Industries",["mining","smelting","petroleum","food and = +beverage","tobacco","handicrafts","illicit drug industry reportedly = +produces of its revenues"]). +bgfact("Bolivia","Agriculture",["principal commodities - = +coffee","coca","cotton","corn","sugarcane","rice","potatoes","self-suffic= +ient in food"]). +bgfact("Bosnia and Herzegovina","LandBounderies",["Croatia","Serbia and = +Montenegro"]). +bgfact("Bosnia and = +Herzegovina","NaturalResources",["coal","iron","bauxite","manganese","tim= +ber","wood products","copper","chromium","lead","zinc"]). +bgfact("Bosnia and Herzegovina","Population",["4651485"]). +bgfact("Bosnia and Herzegovina","Capital",["Sarajevo"]). +bgfact("Bosnia and = +Herzegovina","MemberOf",["CEI","CSCE","ECE","ICAO","ILO","IMO","INTELSAT"= +,"UN","UNCTAD","UNESCO","UNIDO","UPU","WHO"]). +bgfact("Bosnia and Herzegovina","ExportCommodities",["NA"]). +bgfact("Bosnia and Herzegovina","ExportPartners",["NA"]). +bgfact("Bosnia and Herzegovina","ImportCommodities",["NA"]). +bgfact("Bosnia and Herzegovina","ImportPartners",["NA"]). +bgfact("Bosnia and Herzegovina","Industries",["steel = +production","mining"]). +bgfact("Bosnia and Herzegovina","Agriculture",["the foothills of = +northern Bosnia support orchards","vineyards","livestock","farms are = +mostly privately held","small"]). +bgfact("Botswana","LandBounderies",["Namibia","South = +Africa","Zimbabwe"]). +bgfact("Botswana","NaturalResources",["diamonds","copper","nickel","salt"= +,"soda ash","potash","coal","iron ore","silver"]). +bgfact("Botswana","Population",["1359352"]). +bgfact("Botswana","Capital",["Gaborone"]). +bgfact("Botswana","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","FLS","G= +-77","GATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","INTELSA= +T","INTERPOL","IOC","ITU","LORCS","NAM","OAU","SACU","SADC","UN","UNCTAD"= +,"UNESCO","UNIDO","UNOMOZ","UNOMUR","UNOSOM","UPU","WCL","WHO","WMO"]). +bgfact("Botswana","ExportCommodities",["diamonds","copper and = +nickel","meat"]). +bgfact("Botswana","ExportPartners",["Switzerland","UK","SACU"]). +bgfact("Botswana","ImportCommodities",["foodstuffs","vehicles and = +transport equipment","textiles","petroleum products"]). +bgfact("Botswana","ImportPartners",["Switzerland","SACU","UK","US"]). +bgfact("Botswana","Industries",["mining of = +diamonds","copper","nickel","coal","salt","soda ash","livestock = +processing"]). +bgfact("Botswana","Agriculture",["must import up to of of food = +needs"]). +bgfact("Bouvet Island","LandBounderies",[]). +bgfact("Bouvet Island","NaturalResources",["none"]). +bgfact("Bouvet Island","Capital",["none; administered from Oslo, = +Norway"]). +bgfact("Brazil","LandBounderies",["Argentina","Bolivia","Colombia","Frenc= +h Guiana","Guyana","Paraguay","Peru","Suriname","Uruguay","Venezuela"]). +bgfact("Brazil","NaturalResources",["iron = +ore","manganese","bauxite","nickel","uranium","phosphates","tin","hydropo= +wer","gold","platinum","petroleum","timber"]). +bgfact("Brazil","Population",["158739257"]). +bgfact("Brazil","Capital",["Brasilia"]). +bgfact("Brazil","MemberOf",["AfDB","AG","OAS","ONUSAL","OPANAL","PCA","RG= +","UN","UNAVEM = +II","UNCTAD","UNESCO","UNHCR","UNIDO","UNOMOZ","UNOMUR","UNPROFOR","UPU",= +"WCL","WHO","WFTU","WIPO","WMO","WTO"]). +bgfact("Brazil","ExportCommodities",["iron ore","soybean bran","orange = +juice","footwear","coffee","motor vehicle parts"]). +bgfact("Brazil","ExportPartners",["EC","Latin America","US","Japan"]). +bgfact("Brazil","ImportCommodities",["crude","Capital goods","chemical = +products","foodstuffs","coal"]). +bgfact("Brazil","ImportPartners",["US","EC","Middle East","Latin = +America","Japan"]). +bgfact("Brazil","Industries",["shoes","chemicals","cement","lumber","iron= + ore","steel","motor vehicles and auto parts","metalworking","Capital = +goods","tin"]). +bgfact("Brazil","Agriculture",["corn","sugarcane","cocoa","self-sufficien= +t in food","except for wheat"]). +bgfact("British Indian Ocean Territory","LandBounderies",[]). +bgfact("British Indian Ocean = +Territory","NaturalResources",["coconuts","fish"]). +bgfact("British Indian Ocean Territory","Capital",["none"]). +bgfact("British Virgin Islands","LandBounderies",[]). +bgfact("British Virgin Islands","NaturalResources",["negligible"]). +bgfact("British Virgin Islands","Population",["12864"]). +bgfact("British Virgin Islands","Capital",["Road Town"]). +bgfact("British Virgin Islands","MemberOf",["CARICOM"]). +bgfact("British Virgin Islands","ExportCommodities",["rum","fresh = +fish","gravel","sand","fruits","animals"]). +bgfact("British Virgin Islands","ExportPartners",["Virgin = +Islands","Puerto Rico","US"]). +bgfact("British Virgin Islands","ImportCommodities",["building = +materials","automobiles","foodstuffs","machinery"]). +bgfact("British Virgin Islands","ImportPartners",["Virgin = +Islands","Puerto Rico","US"]). +bgfact("British Virgin Islands","Industries",["tourism","light = +industry","construction","rum","concrete block","offshore financial = +center"]). +bgfact("British Virgin = +Islands","Agriculture",["livestock","fish","fruit","vegetables"]). +bgfact("Brunei","LandBounderies",["Malysia"]). +bgfact("Brunei","NaturalResources",["petroleum","natural = +gas","timber"]). +bgfact("Brunei","Population",["284653"]). +bgfact("Brunei","Capital",["Bandar Seri Begawan"]). +bgfact("Brunei","MemberOf",["APEC","ASEAN","C","ESCAP","FAO","G-77","GATT= +","ICAO","IDB","IMO","INTELSAT","ITU","NAM","OIC","UN","UNCTAD","UPU","UN= +TAC","WHO","WMO"]). +bgfact("Brunei","ExportCommodities",["crude","liquefied natural = +gas","petroleum products"]). +bgfact("Brunei","ExportPartners",["Japan","UK","South = +Korea","Thailand","Singapore"]). +bgfact("Brunei","ImportCommodities",["machinery and transport = +equipment","manubgfactured goods","food","chemicals"]). +bgfact("Brunei","ImportPartners",["Singapore","UK","Switzerland","US","Ja= +pan"]). +bgfact("Brunei","Industries",["petroleum","petroleum = +refining","liquefied natural gas","construction"]). +bgfact("Brunei","Agriculture",["principal crops and livestock include = +rice","cassava","bananas","buffaloes"]). +bgfact("Bulgaria","LandBounderies",["Greece","The Former Yugoslav = +Republic of Macedonia","Romania","Serbia and Montenegro","Turkey"]). +bgfact("Bulgaria","NaturalResources",["bauxite","copper","lead","zinc","c= +oal","timber","arable land"]). +bgfact("Bulgaria","Population",["8799986"]). +bgfact("Bulgaria","Capital",["Sofia"]). +bgfact("Bulgaria","MemberOf",["ACCT","NSG","PCA","UN","UNCTAD","UNESCO","= +UNIDO","UNTAC","UPU","WFTU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Bulgaria","ExportCommodities",["fuels","minerals","raw = +materials"]). +bgfact("Bulgaria","ExportPartners",["former CEMA countries"]). +bgfact("Bulgaria","ImportCommodities",["fuels","minerals"]). +bgfact("Bulgaria","ImportPartners",["former CEMA countries"]). +bgfact("Bulgaria","Industries",["machine building and metal = +working","food processing","chemicals","textiles","building = +materials","ferrous and nonferrous metals"]). +bgfact("Bulgaria","Agriculture",["climate and soil conditions support = +livestock raising and the growing of various grain = +crops","oilseeds","vegetables","fruits","surplus food producer"]). +bgfact("Burkina","LandBounderies",["Benin","Ghana","Cote = +d'Ivoire","Mali","Niger","Togo"]). +bgfact("Burkina","NaturalResources",["manganese","limestone","small = +deposits of = +gold","antimony","copper","nickel","bauxite","lead","phosphates","zinc","= +silver"]). +bgfact("Burkina","Population",["10134661"]). +bgfact("Burkina","Capital",["Ouagadougou"]). +bgfact("Burkina","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOW= +AS","Entente","FAO","FZ","G-77","GATT","IBRD","ICAO","ICC","ICFTU","IDA",= +"IDB","IFAD","IFC","ILO","IMF","INTELSAT","INTERPOL","IOC","ITU","LORCS",= +"NAM","OAU","OIC","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL"= +,"WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Burkina","ExportCommodities",["cotton","gold","animal = +products"]). +bgfact("Burkina","ExportPartners",["EC","Cote d'Ivoire","Taiwan"]). +bgfact("Burkina","ImportCommodities",["machinery","food = +products","petroleum"]). +bgfact("Burkina","ImportPartners",["EC","Africa","Japan"]). +bgfact("Burkina","Industries",["cotton lint","beverages","agricultural = +processing","soap","cigarettes","textiles","gold mining and = +extraction"]). +bgfact("Burkina","Agriculture",["peanuts","shea nuts","sesame","food = +sorghum","millet","corn","not self-sufficient in food grains"]). +bgfact("Burma","LandBounderies",["Bangladesh","China","India","Laos","Tha= +iland"]). +bgfact("Burma","NaturalResources",["petroleum","timber","tin","antimony",= +"zinc","copper","tungsten","lead","coal","some = +marble","limestone","precious stones","natural gas"]). +bgfact("Burma","Population",["44277014"]). +bgfact("Burma","Capital",["Rangoon"]). +bgfact("Burma","MemberOf",["AsDB","CCC","CP","ESCAP","FAO","G-77","GATT",= +"IAEA","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INT= +ERPOL","IOC","ITU","LORCS","NAM","UN","UNCTAD","UNESCO","UNIDO","UPU","WH= +O","WMO"]). +bgfact("Burma","ExportCommodities",["pulses and = +beans","teak","rice","hardwood"]). +bgfact("Burma","ExportPartners",["Singapore","China","Thailand","India","= +Hong Kong"]). +bgfact("Burma","ImportCommodities",["machinery","transport = +equipment","chemicals","food products"]). +bgfact("Burma","ImportPartners",["Japan","China","Thailand","Singapore","= +Malaysia"]). +bgfact("Burma","Industries",["mining of = +copper","tin","tungsten","fertilizer"]). +bgfact("Burma","Agriculture",["principal paddy = +rice","corn","oilseed","sugarcane","rice and timber account for of = +export revenues"]). +bgfact("Burundi","LandBounderies",["Rwanda","Tanzania","Zaire"]). +bgfact("Burundi","NaturalResources",["nickel","uranium","rare earth = +oxide","peat","cobalt","copper","platinum","vanadium"]). +bgfact("Burundi","Population",["6124747"]). +bgfact("Burundi","Capital",["Bujumbura"]). +bgfact("Burundi","MemberOf",["ACCT","ACP","AfDB","CCC","CEEAC","CEPGL","E= +CA","FAO","G-77","GATT","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","INT= +ELSAT","INTERPOL","ITU","LORCS","NAM","OAU","UN","UNCTAD","UNESCO","UNIDO= +","UPU","WHO","WIPO","WMO","WTO"]). +bgfact("Burundi","ExportCommodities",["coffee","tea","cotton","hides"]). +bgfact("Burundi","ExportPartners",["EC","US","Asia"]). +bgfact("Burundi","ImportCommodities",["Capital goods","petroleum = +products","foodstuffs","consumer goods"]). +bgfact("Burundi","ImportPartners",["EC","Asia","US"]). +bgfact("Burundi","Industries",["light consumer goods such as = +blankets","shoes","food processing"]). +bgfact("Burundi","Agriculture",["coffee","cotton","food = +corn","sorghum","sweet potatoes","bananas","livestock - = +meat","milk","hides and skins"]). +bgfact("Cambodia","LandBounderies",["Laos","Thailand","Vietnam"]). +bgfact("Cambodia","NaturalResources",["timber","gemstones","some iron = +ore","manganese","phosphates","hydropower potential"]). +bgfact("Cambodia","Population",["10264628"]). +bgfact("Cambodia","Capital",["Phnom Penh"]). +bgfact("Cambodia","MemberOf",["ACCT","INTERPOL","ITU","LORCS","NAM","PCA"= +,"UN","UNCTAD","UNESCO","UPU","WFTU","WHO","WMO","WTO"]). +bgfact("Cambodia","ExportCommodities",["natural = +rubber","rice","pepper","raw timber"]). +bgfact("Cambodia","ExportPartners",["Thailand","Japan","India","Singapore= +","Malaysia","China","Vietnam"]). +bgfact("Cambodia","ImportCommodities",["fuels","consumer = +goods","machinery"]). +bgfact("Cambodia","ImportPartners",["Japan","India","Singapore","Malaysia= +","Thailand","China","Vietnam"]). +bgfact("Cambodia","Industries",["rice milling","fishing","wood and wood = +products","rubber","cement","gem mining"]). +bgfact("Cambodia","Agriculture",["main rice","rubber","food shortages - = +rice","meat","vegetables","dairy products","sugar","flour"]). +bgfact("Cameroon","LandBounderies",["Central African = +Republic","Chad","Congo","Equatorial Guinea","Gabon","Nigeria"]). +bgfact("Cameroon","NaturalResources",["petroleum","bauxite","iron = +ore","timber","hydropower potential"]). +bgfact("Cameroon","Population",["13132191"]). +bgfact("Cameroon","Capital",["Yaounde"]). +bgfact("Cameroon","MemberOf",["ACCT","ACP","AfDB","BDEAC","CCC","CEEAC","= +ECA","FAO","FZ","G-19","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","= +IDA","IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL= +","IOC","ITU","LORCS","NAM","OAU","OIC","PCA","UDEAC","UN","UNCTAD","UNES= +CO","UNIDO","UNTAC","UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Cameroon","ExportCommodities",["petroleum = +products","coffee","beans","cocoa","aluminum products","timber"]). +bgfact("Cameroon","ExportPartners",["EC about","US","African = +countries"]). +bgfact("Cameroon","ImportCommodities",["machines and electrical = +equipment","food","consumer goods","transport equipment"]). +bgfact("Cameroon","ImportPartners",["EC about","African = +countries","Japan","US"]). +bgfact("Cameroon","Industries",["petroleum production and = +refining","food processing","light consumer = +goods","textiles","sawmills"]). +bgfact("Cameroon","Agriculture",["the Agriculture and forestry sectors = +provide employment for the majority of the Population","commercial and = +food crops include = +coffee","cocoa","timber","cotton","rubber","bananas","oilseed","grains","= +livestock","root starches"]). +bgfact("Canada","LandBounderies",["US"]). +bgfact("Canada","NaturalResources",["nickel","zinc","copper","gold","lead= +","molybdenum","potash","silver","fish","timber","wildlife","coal","petro= +leum","natural gas"]). +bgfact("Canada","Population",["28113997"]). +bgfact("Canada","Capital",["Ottawa"]). +bgfact("Canada","MemberOf",["ACCT","AfDB","AG","NATO","NEA","NSG","OAS","= +OECD","ONUSAL","PCA","UN","UNAVEM = +II","UNCTAD","UNDOF","UNESCO","UNFICYP","UNHCR","UNIDO","UNIKOM","UNOMOZ"= +,"UNOMUR","UNPROFOR","UNTAC","UNTSO","UPU","WCL","WHO","WMO","WIPO","WTO"= +,"ZC"]). +bgfact("Canada","ExportCommodities",["newsprint","wood = +pulp","timber","crude petroleum","machinery","natural = +gas","aluminum","telecommunications equipment"]). +bgfact("Canada","ExportPartners",["US","Japan","UK","Germany","South = +Korea","Netherlands","China"]). +bgfact("Canada","ImportCommodities",["crude","chemicals","motor vehicles = +and parts","durable consumer goods","telecommunications equipment and = +parts"]). +bgfact("Canada","ImportPartners",["US","Japan","UK","Germany","France","M= +exico","Taiwan","South Korea"]). +bgfact("Canada","Industries",["processed and unprocessed minerals","food = +products","wood and paper products","transportation = +equipment","chemicals","fish products","petroleum and natural gas"]). +bgfact("Canada","Agriculture",["commercial fisheries provide annual = +catch of million metric tons","of which is exported"]). +bgfact("Cape Verde","LandBounderies",[]). +bgfact("Cape Verde","NaturalResources",["salt","basalt = +rock","pozzolana","limestone","kaolin","fish"]). +bgfact("Cape Verde","Population",["423120"]). +bgfact("Cape Verde","Capital",["Praia"]). +bgfact("Cape = +Verde","MemberOf",["ACP","AfDB","CCC","ECA","ECOWAS","FAO","G-77","IBRD",= +"ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL"= +,"IOM","UNCTAD","UNESCO","UNIDO","UNOMOZ","UPU","WCL","WHO","WMO"]). +bgfact("Cape Verde","ExportCommodities",["fish","bananas","hides and = +skins"]). +bgfact("Cape = +Verde","ExportPartners",["Portugal","Algeria","Angola","Netherlands"]). +bgfact("Cape Verde","ImportCommodities",["foodstuffs","consumer = +goods","industrial products","transport equipment"]). +bgfact("Cape = +Verde","ImportPartners",["Sweden","Spain","Germany","Portugal","France","= +Netherlands","US"]). +bgfact("Cape Verde","Industries",["fish processing","salt = +mining","clothing bgfactories","ship repair","construction = +materials","food and beverage production"]). +bgfact("Cape Verde","Agriculture",["beans","sweet potatoes","fish catch = +provides for both domestic consumption and small exports"]). +bgfact("Cayman Islands","LandBounderies",[]). +bgfact("Cayman Islands","NaturalResources",["fish","climate and beaches = +that foster tourism"]). +bgfact("Cayman Islands","Population",["31790"]). +bgfact("Cayman Islands","Capital",["George Town"]). +bgfact("Cayman Islands","MemberOf",["CARICOM","IOC"]). +bgfact("Cayman Islands","ExportCommodities",["turtle = +products","manubgfactured consumer goods"]). +bgfact("Cayman Islands","ExportPartners",["mostly US"]). +bgfact("Cayman = +Islands","ImportCommodities",["foodstuffs","manubgfactured goods"]). +bgfact("Cayman Islands","ImportPartners",["US","Trinidad and = +Tobago","UK","Netherlands Antilles","Japan"]). +bgfact("Cayman Islands","Industries",["tourism","banking","insurance and = +finance","construction","building materials","furniture making"]). +bgfact("Cayman Islands","Agriculture",["minor production of = +vegetables","fruit","turtle farming"]). +bgfact("Central African = +Republic","LandBounderies",["Cameroon","Chad","Congo","Sudan","Zaire"]). +bgfact("Central African = +Republic","NaturalResources",["diamonds","uranium","timber","gold","oil"]= +). +bgfact("Central African Republic","Population",["3142182"]). +bgfact("Central African Republic","Capital",["Bangui"]). +bgfact("Central African = +Republic","MemberOf",["ACCT","ACP","AfDB","BDEAC","CCC","CEEAC","ECA","FA= +O","FZ","G-77","GATT","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","INTEL= +SAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","UDEAC","UN","UNCTAD","UN= +ESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO"]). +bgfact("Central African = +Republic","ExportCommodities",["diamonds","cotton","coffee","timber","tob= +acco"]). +bgfact("Central African = +Republic","ExportPartners",["France","Belgium","Italy","Japan","US"]). +bgfact("Central African = +Republic","ImportCommodities",["food","textiles","petroleum = +products","machinery","electrical equipment","motor = +vehicles","chemicals","pharmaceuticals","consumer goods","industrial = +products"]). +bgfact("Central African = +Republic","ImportPartners",["France","Japan","Algeria"]). +bgfact("Central African Republic","Industries",["diamond = +mining","sawmills","breweries","textiles","footwear","assembly of = +bicycles and motorcycles"]). +bgfact("Central African Republic","Agriculture",["commercial = +cotton","coffee","tobacco","food crops - = +manioc","yams","millet","corn","bananas"]). +bgfact("Chad","LandBounderies",["Cameroon","Central African = +Republic","Libya","Niger","Nigeria","Sudan"]). +bgfact("Chad","NaturalResources",["petroleum"]). +bgfact("Chad","Population",["5466771"]). +bgfact("Chad","Capital",["N'Djamena"]). +bgfact("Chad","MemberOf",["ACCT","ACP","AfDB","BDEAC","CEEAC","ECA","FAO"= +,"FZ","G-77","GATT","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","ILO","IMF",= +"INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","UDEAC","UN",= +"UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Chad","ExportCommodities",["cotton","cattle","textiles","fish"]).= + +bgfact("Chad","ExportPartners",["France","Nigeria","Cameroon"]). +bgfact("Chad","ImportCommodities",["machinery and transportation = +equipment","industrial goods","petroleum products","note - excludes = +military equipment"]). +bgfact("Chad","ImportPartners",["US","France","Nigeria","Cameroon"]). +bgfact("Chad","Industries",["cotton textile = +mills","slaughterhouses","brewery","natron","soap","cigarettes"]). +bgfact("Chad","Agriculture",["food crops include = +sorghum","millet","peanuts","rice","potatoes","livestock - = +cattle","sheep","goats","self-sufficient in food in years of adequate = +rainfall"]). +bgfact("Chile","LandBounderies",["Argentina","Bolivia","Peru"]). +bgfact("Chile","NaturalResources",["copper","timber","iron = +ore","nitrates","precious metals","molybdenum"]). +bgfact("Chile","Population",["13950557"]). +bgfact("Chile","Capital",["Santiago"]). +bgfact("Chile","MemberOf",["CCC","ECLAC","FAO","G-11","G-77","GATT","IADB= +","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INMA= +RSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LAES","LAIA","LORCS"= +,"NAM","OAS","ONUSAL","OPANAL","PCA","RG","UN","UNCTAD","UNESCO","UNIDO",= +"UNMOGIP","UNTAC","UNTSO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Chile","ExportCommodities",["copper","wood products","fish and = +fishmeal","fruits"]). +bgfact("Chile","ExportPartners",["EC","Japan","US","Argentina","Brazil"])= +. +bgfact("Chile","ImportCommodities",["Capital goods","spare parts","raw = +materials","petroleum","foodstuffs"]). +bgfact("Chile","ImportPartners",["EC","US","Brazil","Japan"]). +bgfact("Chile","Industries",["copper","foodstuffs","fish = +processing","iron and steel","wood and wood products","transport = +equipment","cement","textiles"]). +bgfact("Chile","Agriculture",["major exporter of fruit","fish","major = +wheat","corn","grapes","beans","sugar beets","potatoes","livestock = +beef","poultry","net agricultural importer"]). +bgfact("China","LandBounderies",["Afghanistan","Bhutan","Burma","Hong = +Kong","India","Kazakhstan","North = +Korea","Kyrgyzstan","Laos","Macau","Mongolia","Nepal","Pakistan","Russia"= +,"Tajikistan","Vietnam"]). +bgfact("China","NaturalResources",["coal","iron = +ore","petroleum","mercury","tin","tungsten","antimony","manganese","molyb= +denum","vanadium","magnetite","aluminum","lead","zinc","uranium","hydropo= +wer potential"]). +bgfact("China","Population",["1190431106"]). +bgfact("China","Capital",["Beijing"]). +bgfact("China","MemberOf",["AfDB","APEC","AsDB","CCC","ESCAP","FAO","IAEA= +","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INMARSAT","= +INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","MINURSO","NAM","PCA","UN"= +,"UNCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UN Security = +Council","UNTAC","UNTSO","UN Trusteeship = +Council","UPU","WHO","WIPO","WMO","WTO"]). +bgfact("China","ExportCommodities",["textiles","garments","footwear","toy= +s","crude"]). +bgfact("China","ExportPartners",["Hong = +Kong","US","Japan","Germany","South Korea","Russia"]). +bgfact("China","ImportCommodities",["rolled steel","motor = +vehicles","textile machinery","oil products"]). +bgfact("China","ImportPartners",["Japan","Taiwan","US","Hong = +Kong","Germany","South Korea"]). +bgfact("China","Industries",["iron and steel","coal","machine = +building","armaments","textiles","petroleum","cement","chemical = +fertilizers","consumer durables","food processing"]). +bgfact("China","Agriculture",["among the world's largest producers of = +rice","potatoes","sorghum","peanuts","tea","millet","barley","commercial = + crops include cotton","fish catch of million metric tons"]). +bgfact("Christmas Island","LandBounderies",[]). +bgfact("Christmas Island","NaturalResources",["phosphate"]). +bgfact("Christmas Island","Population",["973"]). +bgfact("Christmas Island","Capital",["The Settlement"]). +bgfact("Christmas Island","MemberOf",["none"]). +bgfact("Christmas Island","ExportCommodities",["phosphate"]). +bgfact("Christmas Island","ExportPartners",["Australia","NZ"]). +bgfact("Christmas Island","ImportCommodities",["consumer goods"]). +bgfact("Christmas Island","ImportPartners",["principally Australia"]). +bgfact("Christmas Island","Industries",["phosphate extraction"]). +bgfact("Christmas Island","Agriculture",["NA"]). +bgfact("Clipperton Island","LandBounderies",[]). +bgfact("Clipperton Island","NaturalResources",["none"]). +bgfact("Clipperton Island","Capital",["none; administered by France from = +French Polynesia"]). +bgfact("Cocos (Keeling) Islands","LandBounderies",[]). +bgfact("Cocos (Keeling) Islands","NaturalResources",["fish"]). +bgfact("Cocos (Keeling) Islands","Population",["598"]). +bgfact("Cocos (Keeling) Islands","Capital",["West Island"]). +bgfact("Cocos (Keeling) Islands","MemberOf",["none"]). +bgfact("Cocos (Keeling) Islands","ExportCommodities",["copra"]). +bgfact("Cocos (Keeling) Islands","ExportPartners",["Australia"]). +bgfact("Cocos (Keeling) Islands","ImportCommodities",["foodstuffs"]). +bgfact("Cocos (Keeling) Islands","ImportPartners",["Australia"]). +bgfact("Cocos (Keeling) Islands","Industries",["copra products"]). +bgfact("Cocos (Keeling) Islands","Agriculture",["gardens provide = +vegetables","bananas","pawpaws","coconuts"]). +bgfact("Colombia","LandBounderies",["Brazil","Ecuador","Panama","Peru","V= +enezuela"]). +bgfact("Colombia","NaturalResources",["petroleum","natural = +gas","coal","iron ore","nickel","gold","copper","emeralds"]). +bgfact("Colombia","Population",["35577556"]). +bgfact("Colombia","Capital",["Bogota"]). +bgfact("Colombia","MemberOf",["AG","CDB","CG","ECLAC","FAO","G-3","G-11",= +"G-24","G-77","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFA= +D","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","= +ISO","ITU","LAES","LAIA","LORCS","NAM","OAS","ONUSAL","OPANAL","PCA","RG"= +,"UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNPROFOR","UNTAC","UPU","WCL","W= +FTU","WHO","WIPO","WMO","WTO"]). +bgfact("Colombia","ExportCommodities",["petroleum","coffee","coal","banan= +as","fresh cut flowers"]). +bgfact("Colombia","ExportPartners",["US","EC","Japan","Venezuela"]). +bgfact("Colombia","ImportCommodities",["industrial = +equipment","transportation equipment","consumer = +goods","chemicals","paper products"]). +bgfact("Colombia","ImportPartners",["US","EC","Brazil","Venezuela","Japan= +"]). +bgfact("Colombia","Industries",["textiles","food = +processing","oil","clothing and footwear","beverages","chemicals","metal = +products","mining - = +gold","coal","emeralds","iron","nickel","silver","salt"]). +bgfact("Colombia","Agriculture",["climate and soils permit a wide = +variety of crops","such as = +coffee","rice","tobacco","corn","sugarcane","cocoa = +beans","oilseeds","forest products and shrimp farming are becoming more = +important"]). +bgfact("Comoros","LandBounderies",[]). +bgfact("Comoros","NaturalResources",["negligible"]). +bgfact("Comoros","Population",["530136"]). +bgfact("Comoros","Capital",["Moroni"]). +bgfact("Comoros","MemberOf",["ACCT","ACP","AfDB","ECA","FAO","FZ","G-77",= +"IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","INTELSAT","ITU","NAM"= +,"OAU","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WMO"]). +bgfact("Comoros","ExportCommodities",["vanilla","cloves","perfume = +oil","copra","ylang-ylang"]). +bgfact("Comoros","ExportPartners",["US","France","Africa","FRG"]). +bgfact("Comoros","ImportCommodities",["cement","petroleum = +products","consumer goods"]). +bgfact("Comoros","ImportPartners",["Europe"]). +bgfact("Comoros","Industries",["perfume = +distillation","textiles","furniture","jewelry","construction = +materials","soft drinks"]). +bgfact("Comoros","Agriculture",["plantations produce crops for export - = +vanilla","cloves","perfume essences","principal food = +coconuts","bananas","large net food importer"]). +bgfact("Congo","LandBounderies",["Angola","Cameroon","Central African = +Republic","Gabon","Zaire"]). +bgfact("Congo","NaturalResources",["petroleum","timber","potash","lead","= +zinc","uranium","copper","phosphates","natural gas"]). +bgfact("Congo","Population",["2446902"]). +bgfact("Congo","Capital",["Brazzaville"]). +bgfact("Congo","MemberOf",["ACCT","ACP","AfDB","BDEAC","CCC","CEEAC","ECA= +","FAO","FZ","G-77","GATT","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","= +IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","UDEAC","UN","= +UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Congo","ExportCommodities",["crude","lumber","plywood","coffee","= +cocoa","sugar","diamonds"]). +bgfact("Congo","ExportPartners",["US","France"]). +bgfact("Congo","ImportCommodities",["foodstuffs","consumer = +goods","intermediate manubgfactures","Capital equipment"]). +bgfact("Congo","ImportPartners",["France","Germany","Italy","Spain","US",= +"Japan","Brazil"]). +bgfact("Congo","Industries",["petroleum","cement","lumbering","brewing","= +sugar milling","palm oil","soap","cigarette"]). +bgfact("Congo","Agriculture",["corn","peanuts","imports over of food = +needs"]). +bgfact("Cook Islands","LandBounderies",[]). +bgfact("Cook Islands","NaturalResources",["negligible"]). +bgfact("Cook Islands","Population",["19124"]). +bgfact("Cook Islands","Capital",["Avarua"]). +bgfact("Cook = +Islands","MemberOf",["AsDB","ESCAP","IOC","SPARTECA","SPC","SPF","UNESCO"= +,"WHO"]). +bgfact("Cook Islands","ExportCommodities",["copra","fresh and canned = +fruit","clothing"]). +bgfact("Cook Islands","ExportPartners",["NZ","Japan"]). +bgfact("Cook = +Islands","ImportCommodities",["foodstuffs","textiles","fuels","timber"]).= + +bgfact("Cook Islands","ImportPartners",["NZ","Japan","Australia","US"]). +bgfact("Cook Islands","Industries",["fruit processing","tourism"]). +bgfact("Cook Islands","Agriculture",["accounts for of GDP","export = +copra","citrus fruits","pineapples","tomatoes","subsistence = +yams","taro"]). +bgfact("Coral Sea Islands","LandBounderies",[]). +bgfact("Coral Sea Islands","NaturalResources",["negligible"]). +bgfact("Coral Sea Islands","Population",["3"]). +bgfact("Coral Sea Islands","Capital",["none; administered from Canberra, = +Australia"]). +bgfact("Costa Rica","LandBounderies",["Nicaragua","Panama"]). +bgfact("Costa Rica","NaturalResources",["hydropower potential"]). +bgfact("Costa Rica","Population",["3342154"]). +bgfact("Costa Rica","Capital",["San Jose"]). +bgfact("Costa = +Rica","MemberOf",["AG","OAS","OPANAL","UN","UNCTAD","UNESCO","UNIDO","UPU= +","WCL","WFTU","WHO","WIPO","WMO"]). +bgfact("Costa = +Rica","ExportCommodities",["coffee","bananas","textiles","sugar"]). +bgfact("Costa = +Rica","ExportPartners",["US","Germany","Italy","Guatemala","El = +Salvador","Netherlands","UK","France"]). +bgfact("Costa Rica","ImportCommodities",["raw materials","consumer = +goods","Capital equipment","petroleum"]). +bgfact("Costa = +Rica","ImportPartners",["US","Japan","Mexico","Guatemala","Venezuela","Ge= +rmany"]). +bgfact("Costa Rica","Industries",["food processing","textiles and = +clothing","construction materials","fertilizer","plastic products"]). +bgfact("Costa Rica","Agriculture",["commodities - = +coffee","beef","bananas","rice","beans","depletion of forest resources = +resulting in lower timber output"]). +bgfact("Cote = +d'Ivoire","LandBounderies",["Burkina","Ghana","Guinea","Liberia","Mali"])= +. +bgfact("Cote = +d'Ivoire","NaturalResources",["petroleum","diamonds","manganese","iron = +ore","cobalt","bauxite","copper"]). +bgfact("Cote d'Ivoire","Population",["14295501"]). +bgfact("Cote d'Ivoire","Capital",["Yamoussoukro"]). +bgfact("Cote = +d'Ivoire","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWAS","En= +tente","FAO","FZ","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","IDA","= +IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","= +NAM","OAU","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WHO","WIPO"= +,"WMO","WTO"]). +bgfact("Cote d'Ivoire","ExportCommodities",["cocoa","coffee","tropical = +woods","petroleum","cotton","bananas","pineapples","palm = +oil","cotton"]). +bgfact("Cote = +d'Ivoire","ExportPartners",["France","FRG","Netherlands","US","Belgium","= +Spain"]). +bgfact("Cote d'Ivoire","ImportCommodities",["food","Capital = +goods","consumer goods","fuel"]). +bgfact("Cote = +d'Ivoire","ImportPartners",["France","Nigeria","US","Japan"]). +bgfact("Cote d'Ivoire","Industries",["foodstuffs","wood processing","oil = +refinery","automobile assembly","textiles","fertilizer","beverage"]). +bgfact("Cote d'Ivoire","Agriculture",["most important sector","crops = +include coffee","cocoa beans","timber","bananas","palm kernels","food = +corn","rice","manioc","not self-sufficient in bread grain and dairy = +products"]). +bgfact("Croatia","LandBounderies",["Bosnia and = +Herzegovina","Hungary","Serbia and Montenegro","Slovenia"]). +bgfact("Croatia","NaturalResources",["oil","some = +coal","bauxite","low-grade iron ore","calcium","natural = +asphalt","silica","mica","clays","salt"]). +bgfact("Croatia","Population",["4697614"]). +bgfact("Croatia","Capital",["Zagreb"]). +bgfact("Croatia","MemberOf",["CE","UN","UNCTAD","UNESCO","UNIDO","UPU","W= +HO","WIPO","WMO"]). +bgfact("Croatia","ExportCommodities",["machinery and transport = +equipment","chemicals","food and live animals","raw materials","fuels = +and lubricants"]). +bgfact("Croatia","ExportPartners",["EC countries","Slovenia"]). +bgfact("Croatia","ImportCommodities",["machinery and transport = +equipment","fuels and lubricants","food and live = +animals","chemicals","manubgfactured goods","miscellaneous = +manubgfactured articles","raw materials","beverages and tobacco"]). +bgfact("Croatia","ImportPartners",["EC countries","Slovenia","FSU = +countries"]). +bgfact("Croatia","Industries",["chemicals and plastics","machine = +tools","fabricated metal","electronics","pig iron and rolled steel = +products","aluminum reduction","paper","wood = +products","textiles","shipbuilding","petroleum and petroleum = +refining","food processing and beverages"]). +bgfact("Croatia","Agriculture",["wheat","corn","sugar = +beets","sunflowers","alfalfa","central Croatian highlands are less = +fertile but support cereal production","orchards","vineyards","livestock = + breeding","coastal areas and offshore islands grow olives","citrus = +fruits"]). +bgfact("Cuba","LandBounderies",["US Naval Base at Guantanamo Bay"]). +bgfact("Cuba","NaturalResources",["cobalt","nickel","iron = +ore","copper","manganese","salt","timber","silica","petroleum"]). +bgfact("Cuba","Population",["11064344"]). +bgfact("Cuba","Capital",["Havana"]). +bgfact("Cuba","MemberOf",["CCC","ECLAC","FAO","G-77","GATT","IAEA","ICAO"= +,"IFAD","ILO","IMO","INMARSAT","INTELSAT","PCA","UN","UNCTAD","UNESCO","U= +NIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Cuba","ExportCommodities",["sugar","nickel","shellfish","tobacco"= +,"medical products","citrus","coffee"]). +bgfact("Cuba","ExportPartners",["Russia","Canada","China","Ukraine","Japa= +n","Spain"]). +bgfact("Cuba","ImportCommodities",["petroleum","food","machinery","chemic= +als"]). +bgfact("Cuba","ImportPartners",["Venezuela","China","Spain","Mexico","Ita= +ly","Canada","France"]). +bgfact("Cuba","Industries",["sugar milling and refining","petroleum = +refining","food and tobacco processing","textiles","chemicals","paper = +and wood products","metals","cement","fertilizers","consumer = +goods","agricultural machinery"]). +bgfact("Cuba","Agriculture",["sector hurt by growing shortages of fuels = +and parts"]). +bgfact("Cyprus","LandBounderies",[]). +bgfact("Cyprus","NaturalResources",["copper","pyrites","asbestos","gypsum= +","timber","salt","marble","clay earth pigment"]). +bgfact("Cyprus","Population",["730084"]). +bgfact("Cyprus","Capital",["Nicosia"]). +bgfact("Cyprus","MemberOf",["C","CCC","CE","CSCE","EBRD","ECE","FAO","G-7= +7","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","IFC","ILO","IM= +F","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","NAM","= +OAS","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO"= +,"WTO"]). +bgfact("Cyprus","ExportCommodities",["citrus","potatoes","grapes","wine",= +"cement","clothing and shoes"]). +bgfact("Cyprus","ExportPartners",["UK","Greece","Lebanon","Egypt"]). +bgfact("Cyprus","ImportCommodities",["consumer goods","petroleum and = +lubricants","food and feed grains","machinery"]). +bgfact("Cyprus","ImportPartners",["UK","Japan","Italy","Germany","US"]). +bgfact("Cyprus","Industries",["food","beverages","textiles","chemicals","= +metal products","tourism","wood products"]). +bgfact("Cyprus","Agriculture",["major = +potatoes","vegetables","barley","grapes","olives","vegetables and fruit = +provide of export revenues"]). +bgfact("Czech = +Republic","LandBounderies",["Austria","Germany","Poland","Slovakia"]). +bgfact("Czech Republic","NaturalResources",["hard coal","soft = +coal","kaolin","clay","graphite"]). +bgfact("Czech Republic","Population",["10408280"]). +bgfact("Czech Republic","Capital",["Prague"]). +bgfact("Czech Republic","MemberOf",["BIS","CCC","CE","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNOMIG","UNOMOZ","UNPROFOR","UPU","WFTU","= +WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Czech Republic","ExportCommodities",["manubgfactured = +goods","machinery and transport = +equipment","chemicals","fuels","minerals"]). +bgfact("Czech = +Republic","ExportPartners",["Germany","Slovakia","Poland","Austria","Hung= +ary","Italy","France","US","UK","CIS republics"]). +bgfact("Czech Republic","ImportCommodities",["machinery and transport = +equipment","fuels and lubricants","manbgfactured goods","raw = +materials","chemicals","agricultural products"]). +bgfact("Czech Republic","ImportPartners",["Slovakia","CIS = +republics","Germany","Austria","Poland","Switzerland","Hungary","UK","Ita= +ly"]). +bgfact("Czech Republic","Industries",["fuels","ferrous = +metallurgy","machinery and equipment","coal","motor = +vehicles","glass","armaments"]). +bgfact("Czech Republic","Agriculture",["diversified crop and livestock = +production","including grains","potatoes","sugar = +beets","hops","fruit","hogs","cattle","exporter of forest products"]). +bgfact("Denmark","LandBounderies",["Germany"]). +bgfact("Denmark","NaturalResources",["petroleum","natural = +gas","fish","salt","limestone"]). +bgfact("Denmark","Population",["5187821"]). +bgfact("Denmark","Capital",["Copenhagen"]). +bgfact("Denmark","MemberOf",["AfDB","AG","AsDB","Australia = +Group","BIS","CBSS","CCC","CE","CERN","COCOM","CSCE","EBRD","EC","ECE","E= +IB","ESA","FAO","G-9","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","I= +DA","IEA","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL"= +,"IOC","IOM","ISO","ITU","LORCS","MTCR","NACC","NATO","NC","NEA","NIB","N= +SG","OECD","PCA","UN","UNCTAD","UNESCO","UNFICYP","UNHCR","UNIDO","UNIKOM= +","UNOMIG","UNMOGIP","UNPROFOR","UNTSO","UPU","WEU","WFTU","WHO","WIPO","= +WMO","ZC"]). +bgfact("Denmark","ExportCommodities",["meat and meat products","dairy = +products","transport equipment","fish","chemicals","industrial = +machinery"]). +bgfact("Denmark","ExportPartners",["EC"]). +bgfact("Denmark","ImportCommodities",["petroleum","machinery and = +equipment","chemicals","grain and foodstuffs","textiles","paper"]). +bgfact("Denmark","ImportPartners",["EC"]). +bgfact("Denmark","Industries",["food processing","machinery and = +equipment","textiles and clothing","chemical = +products","electronics","construction","furniture","shipbuilding"]). +bgfact("Denmark","Agriculture",["principal = +meat","dairy","grain","potatoes","rape","sugar beets","self-sufficient = +in food production"]). +bgfact("Djibouti","LandBounderies",["Eritrea","Ethiopia","Somalia"]). +bgfact("Djibouti","NaturalResources",[]). +bgfact("Djibouti","Population",["412599"]). +bgfact("Djibouti","Capital",["Djibouti"]). +bgfact("Djibouti","MemberOf",["ACCT","ACP","AfDB","AFESD","AL","ECA","FAO= +","G-77","IBRD","ICAO","IDA","IDB","IFAD","IFC","IGADD","ILO","IMF","IMO"= +,"INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","UN","UNESCO= +","UNCTAD","UNIDO","UPU","WHO","WMO"]). +bgfact("Djibouti","ExportCommodities",["hides and skins","coffee"]). +bgfact("Djibouti","ExportPartners",["Africa","Middle East","Western = +Europe"]). +bgfact("Djibouti","ImportCommodities",["foods","beverages","transport = +equipment","chemicals","petroleum products"]). +bgfact("Djibouti","ImportPartners",["Western Europe","Asia","Africa"]). +bgfact("Djibouti","Industries",["limited to a few small-scale = +enterprises","such as dairy products and mineral-water bottling"]). +bgfact("Djibouti","Agriculture",["half of Population pastoral nomads = +herding goats","sheep","imports bulk of food needs"]). +bgfact("Dominica","LandBounderies",[]). +bgfact("Dominica","NaturalResources",["timber"]). +bgfact("Dominica","Population",["87696"]). +bgfact("Dominica","Capital",["Roseau"]). +bgfact("Dominica","MemberOf",["ACCT","ACP","C","CARICOM","CDB","ECLAC","F= +AO","G-77","GATT","IBRD","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","IN= +TERPOL","LORCS","NAM","OAS","OECS","UN","UNCTAD","UNESCO","UNIDO","UPU","= +WCL","WHO","WMO"]). +bgfact("Dominica","ExportCommodities",["bananas","soap","bay = +oil","vegetables","grapefruit","oranges"]). +bgfact("Dominica","ExportPartners",["UK","CARICOM = +countries","Italy","US"]). +bgfact("Dominica","ImportCommodities",["manubgfactured goods","machinery = +and equipment","food","chemicals"]). +bgfact("Dominica","ImportPartners",["US","CARICOM","UK","Canada"]). +bgfact("Dominica","Industries",["soap","coconut = +oil","tourism","copra","furniture","cement blocks","shoes"]). +bgfact("Dominica","Agriculture",["principal = +bananas","citrus","mangoes","root crops","forestry and fisheries = +potential not exploited"]). +bgfact("Dominican Republic","LandBounderies",["Haiti"]). +bgfact("Dominican = +Republic","NaturalResources",["nickel","bauxite","gold","silver"]). +bgfact("Dominican Republic","Population",["7826075"]). +bgfact("Dominican Republic","Capital",["Santo Domingo"]). +bgfact("Dominican = +Republic","MemberOf",["ACP","CARICOM","OAS","OPANAL","PCA","UN","UNCTAD",= +"UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WMO","WTO"]). +bgfact("Dominican = +Republic","ExportCommodities",["ferronickel","sugar","gold","coffee","coc= +oa"]). +bgfact("Dominican Republic","ExportPartners",["US","EC","Puerto Rico"]). +bgfact("Dominican = +Republic","ImportCommodities",["foodstuffs","petroleum","cotton and = +fabrics","chemicals and pharmaceuticals"]). +bgfact("Dominican Republic","ImportPartners",["US"]). +bgfact("Dominican Republic","Industries",["tourism","sugar = +processing","ferronickel and gold = +mining","textiles","cement","tobacco"]). +bgfact("Dominican Republic","Agriculture",["sugarcane is the most = +important commercial crop","followed by coffee","cotton","cocoa","food = +rice","beans","potatoes","corn","animal output - cattle","hogs","dairy = +products","meat","not self-sufficient in food"]). +bgfact("Ecuador","LandBounderies",["Colombia","Peru"]). +bgfact("Ecuador","NaturalResources",["petroleum","fish","timber"]). +bgfact("Ecuador","Population",["10677067"]). +bgfact("Ecuador","Capital",["Quito"]). +bgfact("Ecuador","MemberOf",["AG","ECLAC","FAO","G-11","G-77","IADB","IAE= +A","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTE= +LSAT","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","NAM","OAS","ONU= +SAL","OPANAL","PCA","RG","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU= +","WHO","WIPO","WMO","WTO"]). +bgfact("Ecuador","ExportCommodities",["petroleum","bananas","shrimp","coc= +oa","coffee"]). +bgfact("Ecuador","ExportPartners",["US","Latin America","Caribbean","EC = +countries"]). +bgfact("Ecuador","ImportCommodities",["transport = +equipment","vehicles","machinery","chemicals"]). +bgfact("Ecuador","ImportPartners",["US","Latin America","Caribbean","EC = +countries","Japan"]). +bgfact("Ecuador","Industries",["petroleum","food = +processing","textiles","metal works","paper products","wood = +products","chemicals","plastics","fishing","timber"]). +bgfact("Ecuador","Agriculture",["cocoa","fish","crop production - = +rice","potatoes","manioc","plantains","livestock sector - = +cattle","sheep","hogs","beef","pork","net importer of foodgrains","dairy = +products"]). +bgfact("Egypt","LandBounderies",["Gaza = +Strip","Israel","Libya","Sudan"]). +bgfact("Egypt","NaturalResources",["petroleum","natural gas","iron = +ore","phosphates","manganese","limestone","gypsum","talc","asbestos","lea= +d","zinc"]). +bgfact("Egypt","Population",["60765028"]). +bgfact("Egypt","Capital",["Cairo"]). +bgfact("Egypt","MemberOf",["ABEDA","ACC","ACCT","OAU","OIC","PCA","UN","U= +NAVEM = +II","UNCTAD","UNESCO","UNIDO","UNOMOZ","UNOSOM","UNPROFOR","UNTAC","UPU",= +"UNRWA","WHO","WIPO","WMO","WTO"]). +bgfact("Egypt","ExportCommodities",["crude and petroleum = +products","cotton yarn","raw cotton","textiles","metal = +products","chemicals"]). +bgfact("Egypt","ExportPartners",["EC","Eastern Europe","US","Japan"]). +bgfact("Egypt","ImportCommodities",["machinery and = +equipment","foods","fertilizers","wood products","durable consumer = +goods","Capital goods"]). +bgfact("Egypt","ImportPartners",["EC","US","Japan","Eastern Europe"]). +bgfact("Egypt","Industries",["textiles","food = +processing","tourism","chemicals","petroleum","construction","cement","me= +tals"]). +bgfact("Egypt","Agriculture",["corn","wheat","beans","fruit","livestock = +- cattle","water buffalo","sheep","annual fish catch about"]). +bgfact("El Salvador","LandBounderies",["Guatemala","Honduras"]). +bgfact("El Salvador","NaturalResources",["hydropower","petroleum"]). +bgfact("El Salvador","Population",["5752511"]). +bgfact("El Salvador","Capital",["San Salvador"]). +bgfact("El = +Salvador","MemberOf",["BCIE","CACM","ECLAC","FAO","G-77","GATT","IADB","I= +AEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT= +","IOC","IOM","ITU","LAES","LAIA","OAS","OPANAL","PCA","UN","UNCTAD","UNE= +SCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO"]). +bgfact("El = +Salvador","ExportCommodities",["coffee","sugarcane","shrimp"]). +bgfact("El Salvador","ExportPartners",["US","Guatemala","Costa = +Rica","Germany"]). +bgfact("El Salvador","ImportCommodities",["raw materials","consumer = +goods","Capital goods"]). +bgfact("El = +Salvador","ImportPartners",["US","Guatemala","Mexico","Venezuela","German= +y"]). +bgfact("El Salvador","Industries",["food = +processing","beverages","petroleum","nonmetallic = +products","tobacco","chemicals","textiles","furniture"]). +bgfact("El = +Salvador","Agriculture",["corn","rice","beans","oilseeds","beef","dairy = +products","not self-sufficient in food"]). +bgfact("Equatorial Guinea","LandBounderies",["Cameroon","Gabon"]). +bgfact("Equatorial = +Guinea","NaturalResources",["timber","petroleum","small unexploited = +deposits of gold","manganese","uranium"]). +bgfact("Equatorial Guinea","Population",["409550"]). +bgfact("Equatorial Guinea","Capital",["Malabo"]). +bgfact("Equatorial = +Guinea","MemberOf",["ACCT","ACP","AfDB","BDEAC","CEEAC","ECA","FAO","FZ",= +"G-77","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","OAU= +","UDEAC","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO"]). +bgfact("Equatorial Guinea","ExportCommodities",["coffee","timber","cocoa = +beans"]). +bgfact("Equatorial = +Guinea","ExportPartners",["Spain","Nigeria","Cameroon"]). +bgfact("Equatorial = +Guinea","ImportCommodities",["petroleum","food","beverages","clothing","m= +achinery"]). +bgfact("Equatorial = +Guinea","ImportPartners",["Cameroon","Spain","France","US"]). +bgfact("Equatorial Guinea","Industries",["fishing","sawmilling"]). +bgfact("Equatorial Guinea","Agriculture",["accounts for almost of = +GDP","timber and coffee from Rio Muni","food = +rice","yams","cassava","bananas","oil palm nuts","manioc","livestock"]). +bgfact("Eritrea","LandBounderies",["Djibouti","Ethiopia","Sudan"]). +bgfact("Eritrea","NaturalResources",["gold","potash","zinc","copper","sal= +t","probably oil","fish"]). +bgfact("Eritrea","Population",["3782543"]). +bgfact("Eritrea","Capital",["Asmara"]). +bgfact("Eritrea","MemberOf",["OAU","ACP","AfDB","ECA","ILO","IMO","INTELS= +AT","ITU","UN","UNCTAD","UNESCO","UPU","WMO"]). +bgfact("Eritrea","ExportCommodities",["NA"]). +bgfact("Eritrea","ExportPartners",["NA"]). +bgfact("Eritrea","ImportCommodities",["NA"]). +bgfact("Eritrea","ImportPartners",["NA"]). +bgfact("Eritrea","Industries",["food processing","beverages","clothing = +and textiles"]). +bgfact("Eritrea","Agriculture",["sorghum","livestock"]). +bgfact("Estonia","LandBounderies",["Latvia","Russia"]). +bgfact("Estonia","NaturalResources",["shale = +oil","peat","phosphorite","amber"]). +bgfact("Estonia","Population",["1616882"]). +bgfact("Estonia","Capital",["Tallinn"]). +bgfact("Estonia","MemberOf",["BIS","CBSS","CCC","CE","CSCE","EBRD","ECE",= +"FAO","IAEA","IBRD","ICAO","ICFTU","IFC","ILO","IMF","IMO","INTERPOL","IO= +C","ISO","ITU","NACC","UN","UNCTAD","UNESCO","UPU","WHO","WMO"]). +bgfact("Estonia","ExportCommodities",["textile","food = +products","vehicles","metals"]). +bgfact("Estonia","ExportPartners",["Russia","Finland","Latvia","Germany",= +"Ukraine"]). +bgfact("Estonia","ImportCommodities",["machinery","fuels","vehicles","tex= +tiles"]). +bgfact("Estonia","ImportPartners",["Finland","Russia","Sweden","Germany",= +"Netherlands"]). +bgfact("Estonia","Industries",["oil = +shale","shipbuilding","phosphates","electric = +motors","excavators","cement","furniture","clothing","textiles","paper","= +shoes","apparel"]). +bgfact("Estonia","Agriculture",["net exports of meat","fish","dairy = +products","fruits and vegetables"]). +bgfact("Ethiopia","LandBounderies",["Djibouti","Eritrea","Kenya","Somalia= +","Sudan"]). +bgfact("Ethiopia","NaturalResources",["small reserves of = +gold","platinum","copper","potash"]). +bgfact("Ethiopia","Population",["54927108"]). +bgfact("Ethiopia","Capital",["Addis Ababa"]). +bgfact("Ethiopia","MemberOf",["ACP","AfDB","CCC","ECA","FAO","G-24","G-77= +","IAEA","IBRD","ICAO","IDA","IFAD","IFC","IGADD","ILO","IMF","IMO","INTE= +LSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","OAU","UN","UNCTAD","UNE= +SCO","UNHCR","UNIDO","UPU","WFTU","WHO","WMO","WTO"]). +bgfact("Ethiopia","ExportCommodities",["coffee","leather = +products","gold","petroleum products"]). +bgfact("Ethiopia","ExportPartners",["Germany","Japan","Saudi = +Arabia","France","Italy"]). +bgfact("Ethiopia","ImportCommodities",["Capital goods","consumer = +goods","fuel"]). +bgfact("Ethiopia","ImportPartners",["US","Germany","Italy","Saudi = +Arabia","Japan"]). +bgfact("Ethiopia","Industries",["food = +processing","beverages","textiles","chemicals","metals = +processing","cement"]). +bgfact("Ethiopia","Agriculture",["principal crops and livestock - = +cereals","pulses","coffee","oilseeds","sugarcane","hides and = +skins","cattle","sheep","goats"]). +bgfact("Europa Island","LandBounderies",[]). +bgfact("Europa Island","NaturalResources",["negligible"]). +bgfact("Europa Island","Capital",["none; administered by France from = +Reunion"]). +bgfact("Falkland Islands (Islas Malvinas)","LandBounderies",[]). +bgfact("Falkland Islands (Islas = +Malvinas)","NaturalResources",["fish","wildlife"]). +bgfact("Falkland Islands (Islas Malvinas)","Population",["2261"]). +bgfact("Falkland Islands (Islas Malvinas)","Capital",["Stanley"]). +bgfact("Falkland Islands (Islas Malvinas)","MemberOf",["ICFTU"]). +bgfact("Falkland Islands (Islas = +Malvinas)","ExportCommodities",["wool","hides and skins"]). +bgfact("Falkland Islands (Islas = +Malvinas)","ExportPartners",["UK","Netherlands","Japan"]). +bgfact("Falkland Islands (Islas = +Malvinas)","ImportCommodities",["food","clothing","fuels"]). +bgfact("Falkland Islands (Islas = +Malvinas)","ImportPartners",["UK","Netherlands Antilles"]). +bgfact("Falkland Islands (Islas Malvinas)","Industries",["wool and fish = +processing"]). +bgfact("Falkland Islands (Islas Malvinas)","Agriculture",["some fodder = +and vegetable crops"]). +bgfact("Faroe Islands","LandBounderies",[]). +bgfact("Faroe Islands","NaturalResources",["fish"]). +bgfact("Faroe Islands","Population",["48427"]). +bgfact("Faroe Islands","Capital",["Torshavn"]). +bgfact("Faroe Islands","MemberOf",["none"]). +bgfact("Faroe Islands","ExportCommodities",["fish and fish = +products","animal feedstuffs","transport equipment"]). +bgfact("Faroe = +Islands","ExportPartners",["Denmark","Germany","UK","France","Spain","US"= +]). +bgfact("Faroe Islands","ImportCommodities",["machinery and transport = +equipment","manubgfactures","food and livestock","fuels","chemicals"]). +bgfact("Faroe = +Islands","ImportPartners",["Denmark","Norway","Sweden","Germany","US"]). +bgfact("Faroe = +Islands","Industries",["fishing","shipbuilding","handicrafts"]). +bgfact("Faroe Islands","Agriculture",["annual fish catch about"]). +bgfact("Fiji","LandBounderies",[]). +bgfact("Fiji","NaturalResources",["timber","fish","gold","copper","offsho= +re oil potential"]). +bgfact("Fiji","Population",["764382"]). +bgfact("Fiji","Capital",["Suva"]). +bgfact("Fiji","MemberOf",["ACP","AsDB","CP","ESCAP","FAO","G-77","GATT","= +IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INT= +ERPOL","IOC","ITU","LORCS","PCA","SPARTECA","SPC","SPF","UN","UNCTAD","UN= +ESCO","UNIDO","UNIFIL","UNIKOM","UNOMUR","UNTAC","UPU","WHO","WIPO","WMO"= +]). +bgfact("Fiji","ExportCommodities",["sugar","clothing","processed = +fish","gold","lumber"]). +bgfact("Fiji","ExportPartners",["EC","Australia","Pacific = +Islands","Japan"]). +bgfact("Fiji","ImportCommodities",["machinery and transport = +equipment","petroleum products","food","consumer goods","chemicals"]). +bgfact("Fiji","ImportPartners",["Australia","NZ","Japan","EC","US"]). +bgfact("Fiji","Industries",["sugar","tourism","copra","gold","silver","cl= +othing","lumber","small cottage Industries"]). +bgfact("Fiji","Agriculture",["coconuts","cassava","rice","sweet = +potatoes","small livestock sector includes = +cattle","pigs","horses","fish catch nearly"]). +bgfact("Finland","LandBounderies",["Norway","Sweden","Russia"]). +bgfact("Finland","NaturalResources",["timber","copper","zinc","iron = +ore","silver"]). +bgfact("Finland","Population",["5068931"]). +bgfact("Finland","Capital",["Helsinki"]). +bgfact("Finland","MemberOf",["AfDB","AG","OECD","PCA","UN","UNCTAD","UNDO= +F","UNESCO","UNFICYP","UNHCR","UNIDO","UNIFIL","UNIKOM","UNMOGIP","UNPROF= +OR","UNTSO","UPU","WFTU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Finland","ExportCommodities",["timber","paper and = +pulp","ships","machinery","clothing and footwear"]). +bgfact("Finland","ExportPartners",["EC"]). +bgfact("Finland","ImportCommodities",["foodstuffs","petroleum and = +petroleum products","chemicals","transport equipment","iron and = +steel","machinery","textile yarn and fabrics","fodder grains"]). +bgfact("Finland","ImportPartners",["EC"]). +bgfact("Finland","Industries",["metal products","shipbuilding","forestry = +and wood processing","copper = +refining","foodstuffs","chemicals","textiles","clothing"]). +bgfact("Finland","Agriculture",["livestock production","especially dairy = +cattle","main crops - cereals","sugar beets","self-sufficient","annual = +fish catch about"]). +bgfact("France","LandBounderies",["Andorra","Belgium","Germany","Italy","= +Luxembourg","Monaco","Spain","Switzerland"]). +bgfact("France","NaturalResources",["coal","iron = +ore","bauxite","fish","timber","zinc","potash"]). +bgfact("France","Population",["57840445"]). +bgfact("France","Capital",["Paris"]). +bgfact("France","MemberOf",["ACCT","AfDB","AG","OECD","ONUSAL","PCA","SPC= +","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNIFIL","UNIKOM","UNOSOM","UNPR= +OFOR","UNRWA","UN Security Council","UNTAC","UN Trusteeship = +Council","UNTSO","UPU","WCL","WEU","WFTU","WHO","WIPO","WMO","WTO","ZC"])= +. +bgfact("France","ExportCommodities",["machinery and transportation = +equipment","chemicals","foodstuffs","agricultural products","iron and = +steel products","textiles and clothing"]). +bgfact("France","ExportPartners",["Germany","Italy","Spain","Belgium-Luxe= +mbourg","UK","Netherlands","US","Japan","former USSR"]). +bgfact("France","ImportCommodities",["crude","machinery and = +equipment","agricultural products","chemicals","iron and steel = +products"]). +bgfact("France","ImportPartners",["Germany","Italy","US","Netherlands","S= +pain","Belgium-Luxembourg","UK","Japan","former USSR"]). +bgfact("France","Industries",["steel","machinery","chemicals","automobile= +s","metallurgy","aircraft","electronics","mining","textiles","food = +processing","tourism"]). +bgfact("France","Agriculture",["dairy products","cereals","sugar = +beets","potatoes","shortages include fats and oils and tropical = +produce","fish catch of"]). +bgfact("French Guiana","LandBounderies",["Brazil","Suriname"]). +bgfact("French = +Guiana","NaturalResources",["bauxite","timber","gold","cinnabar","kaolin"= +,"fish"]). +bgfact("French Guiana","Population",["139299"]). +bgfact("French Guiana","Capital",["Cayenne"]). +bgfact("French Guiana","MemberOf",["FZ","WCL"]). +bgfact("French = +Guiana","ExportCommodities",["shrimp","timber","rum","rosewood = +essence"]). +bgfact("French Guiana","ExportPartners",["France","Spain","US"]). +bgfact("French Guiana","ImportCommodities",["food","producer = +goods","petroleum"]). +bgfact("French Guiana","ImportPartners",["France","Germany","US"]). +bgfact("French Guiana","Industries",["construction","shrimp = +processing","forestry products","rum","gold mining"]). +bgfact("French = +Guiana","Agriculture",["rice","corn","manioc","cocoa","bananas","livestoc= +k - cattle","pigs","poultry"]). +bgfact("French Polynesia","LandBounderies",[]). +bgfact("French = +Polynesia","NaturalResources",["timber","fish","cobalt"]). +bgfact("French Polynesia","Population",["215129"]). +bgfact("French Polynesia","Capital",["Papeete"]). +bgfact("French = +Polynesia","MemberOf",["ESCAP","FZ","ICFTU","SPC","WMO"]). +bgfact("French Polynesia","ExportCommodities",["coconut = +products","vanilla","shark meat"]). +bgfact("French Polynesia","ExportPartners",["France","US","Japan"]). +bgfact("French = +Polynesia","ImportCommodities",["fuels","foodstuffs","equipment"]). +bgfact("French = +Polynesia","ImportPartners",["France","US","Australia","NZ"]). +bgfact("French Polynesia","Industries",["tourism","pearls","agricultural = +processing","handicrafts"]). +bgfact("French Polynesia","Agriculture",["poultry","beef","dairy = +products"]). +bgfact("French Southern and Antarctic Lands","LandBounderies",[]). +bgfact("French Southern and Antarctic = +Lands","NaturalResources",["fish","crayfish"]). +bgfact("French Southern and Antarctic Lands","Capital",["none; = +administered from Paris, France"]). +bgfact("Gabon","LandBounderies",["Cameroon","Congo","Equatorial = +Guinea"]). +bgfact("Gabon","NaturalResources",["petroleum","manganese","uranium","gol= +d","timber","iron ore"]). +bgfact("Gabon","Population",["1139006"]). +bgfact("Gabon","Capital",["Libreville"]). +bgfact("Gabon","MemberOf",["ACCT","ACP","AfDB","BDEAC","CCC","CEEAC","ECA= +","FAO","FZ","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA= +","IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","= +IOC","ITU","LORCS","NAM","OAU","OIC","OPEC","UDEAC","UN","UNCTAD","UNESCO= +","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Gabon","ExportCommodities",["crude","timber","manganese","uranium= +"]). +bgfact("Gabon","ExportPartners",["France","US","Germany","Japan"]). +bgfact("Gabon","ImportCommodities",["foodstuffs","chemical = +products","petroleum products","construction = +materials","manubgfactures","machinery"]). +bgfact("Gabon","ImportPartners",["France","African = +countries","US","Japan"]). +bgfact("Gabon","Industries",["petroleum","food and beverages","lumbering = +and plywood","textiles","mining - = +manganese","uranium","gold","cement"]). +bgfact("Gabon","Agriculture",["accounts for of GDP is the most important = +timber product"]). +bgfact("The Gambia","LandBounderies",["Senegal"]). +bgfact("The Gambia","NaturalResources",["fish"]). +bgfact("The Gambia","Population",["959300"]). +bgfact("The Gambia","Capital",["Banjul"]). +bgfact("The = +Gambia","MemberOf",["ACP","AfDB","C","CCC","ECA","ECOWAS","FAO","G-77","G= +ATT","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","IFC","IMF","IMO","INTELSAT= +","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","UN","UNCTAD","UNESCO"= +,"UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("The Gambia","ExportCommodities",["peanuts and peanut = +products","fish","cotton lint","palm kernels"]). +bgfact("The Gambia","ExportPartners",["Japan","Europe","Africa","US"]). +bgfact("The = +Gambia","ImportCommodities",["foodstuffs","manubgfactures","raw = +materials","fuel","machinery and transport equipment"]). +bgfact("The Gambia","ImportPartners",["Europe","Asia","USSR and Eastern = +Europe","US"]). +bgfact("The Gambia","Industries",["peanut = +processing","tourism","beverages","agricultural machinery = +assembly","woodworking","metalworking","clothing"]). +bgfact("The = +Gambia","Agriculture",["sorghum","rice","corn","cassava","livestock - = +cattle","sheep","forestry and fishing resources not fully exploited"]). +bgfact("Gaza Strip","LandBounderies",["Egypt","Israel"]). +bgfact("Gaza Strip","NaturalResources",["negligible"]). +bgfact("Gaza Strip","Population",["731296"]). +bgfact("Gaza Strip","ExportCommodities",["citrus"]). +bgfact("Gaza Strip","ExportPartners",["Israel","Egypt"]). +bgfact("Gaza Strip","ImportCommodities",["food","consumer = +goods","construction materials"]). +bgfact("Gaza Strip","ImportPartners",["Israel","Egypt"]). +bgfact("Gaza Strip","Industries",["generally small family businesses = +that produce textiles","soap","olive-wood carvings","the Israelis have = +established some small-scale modern Industries in an industrial = +center"]). +bgfact("Gaza Strip","Agriculture",["olives","vegetables","beef","dairy = +products"]). +bgfact("Georgia","LandBounderies",["Armenia","Azerbaijan","Russia","Turke= +y"]). +bgfact("Georgia","NaturalResources",["forest = +lands","hydropower","manganese deposits","iron ores","copper","coastal = +climate and soils allow for important tea and citrus growth"]). +bgfact("Georgia","Population",["5681025"]). +bgfact("Georgia","Capital",["T'bilisi"]). +bgfact("Georgia","MemberOf",["BSEC","CIS","CSCE","EBRD","ECE","IBRD","IDA= +","ILO","IMF","IMO","INMARSAT","IOC","ITU","NACC","UN","UNCTAD","UNESCO",= +"UNIDO","UPU","WHO"]). +bgfact("Georgia","ExportCommodities",["citrus fruits","tea","wine","fuel = + re-exports"]). +bgfact("Georgia","ExportPartners",["Russia","Turkey","Armenia","Azerbaija= +n"]). +bgfact("Georgia","ImportCommodities",["fuel","machinery and = +parts","transport equipment"]). +bgfact("Georgia","ImportPartners",["Russia","Azerbaijan","Turkey"]). +bgfact("Georgia","Industries",["heavy industrial products include raw = +steel","rolled steel","machine tools","foundry equipment","electric = +locomotives","tower cranes","electric welding equipment","machinery for = +food preparation and meat packing","electric motors","process control = +equipment","trucks","tractors","light industrial products","including = +cloth","hosiery","the most important food industry is wine"]). +bgfact("Georgia","Agriculture",["dependent on imports for grain","dairy = +products","small livestock sector"]). +bgfact("Germany","LandBounderies",["Austria","Belgium","Czech = +Republic","Denmark","France","Luxembourg","Netherlands","Poland","Switzer= +land"]). +bgfact("Germany","NaturalResources",["iron = +ore","coal","potash","timber","lignite","uranium","copper","natural = +gas","salt","nickel"]). +bgfact("Germany","Population",["81087506"]). +bgfact("Germany","Capital",["Berlin"]). +bgfact("Germany","MemberOf",["AfDB","AG","OECD","PCA","UN","UNCTAD","UNES= +CO","UNIDO","UNHCR","UNOMIG","UNOSOM","UNTAC","UPU","WEU","WHO","WIPO","W= +MO","WTO","ZC"]). +bgfact("Germany","ExportCommodities",["manubgfactures"]). +bgfact("Germany","ExportPartners",["EC"]). +bgfact("Germany","ImportCommodities",["manubgfactures","agricultural = +products","fuels","raw materials"]). +bgfact("Germany","ImportPartners",["EC"]). +bgfact("Germany","Industries",[]). +bgfact("Germany","Agriculture",[]). +bgfact("Ghana","LandBounderies",["Burkina","Cote d'Ivoire","Togo"]). +bgfact("Ghana","NaturalResources",["gold","timber","industrial = +diamonds","bauxite","manganese","fish","rubber"]). +bgfact("Ghana","Population",["17225185"]). +bgfact("Ghana","Capital",["Accra"]). +bgfact("Ghana","MemberOf",["ACP","AfDB","C","CCC","ECA","ECOWAS","FAO","G= +-24","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO",= +"IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","MINURS= +O","NAM","OAU","UN","UNCTAD","UNESCO","UNIDO","UNIFIL","UNIKOM","UNPROFOR= +","UNTAC","UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Ghana","ExportCommodities",["cocoa","gold","timber","tuna","bauxi= +te"]). +bgfact("Ghana","ExportPartners",["Germany","US","UK","Netherlands","Japan= +"]). +bgfact("Ghana","ImportCommodities",["petroleum","consumer = +goods","foods","intermediate goods","Capital equipment"]). +bgfact("Ghana","ImportPartners",["UK","US","Germany","Japan"]). +bgfact("Ghana","Industries",["mining","lumbering","light = +manubgfacturing","aluminum","food processing"]). +bgfact("Ghana","Agriculture",["coffee","cassava","peanuts","corn","shea = +nuts","normally self-sufficient in food"]). +bgfact("Gibraltar","LandBounderies",["Spain"]). +bgfact("Gibraltar","NaturalResources",["negligible"]). +bgfact("Gibraltar","Population",["31684"]). +bgfact("Gibraltar","Capital",["Gilbraltar"]). +bgfact("Gibraltar","MemberOf",["INTERPOL"]). +bgfact("Gibraltar","ExportCommodities",["petroleum","manubgfactured = +goods"]). +bgfact("Gibraltar","ExportPartners",["UK","Morocco","Portugal","Netherlan= +ds","Spain","US","FRG"]). +bgfact("Gibraltar","ImportCommodities",["fuels","manubgfactured = +goods"]). +bgfact("Gibraltar","ImportPartners",["UK","Spain","Japan","Netherlands"])= +. +bgfact("Gibraltar","Industries",["tourism","banking and = +finance","construction","light manubgfacturing of tobacco","roasted = +coffee","ice","mineral waters","candy","beer"]). +bgfact("Gibraltar","Agriculture",["none"]). +bgfact("Glorioso Islands","LandBounderies",[]). +bgfact("Glorioso Islands","NaturalResources",["guano","coconuts"]). +bgfact("Glorioso Islands","Capital",["none; administered by France from = +Reunion"]). +bgfact("Greece","LandBounderies",["Albania","Bulgaria","Turkey","The = +Former Yugoslav Republic of Macedonia"]). +bgfact("Greece","NaturalResources",["bauxite","lignite","magnesite","petr= +oleum","marble"]). +bgfact("Greece","Population",["10564630"]). +bgfact("Greece","Capital",["Athens"]). +bgfact("Greece","MemberOf",["Australian = +Group","BIS","BSEC","CCC","CE","CERN","COCOM","CSCE","EBRD","EC","ECE","E= +IB","FAO","G-6","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IEA","IF= +AD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM",= +"ISO","ITU","LORCS","MINURSO","MTCR","NACC","NAM","WFTU","WHO","WIPO","WM= +O","WTO","ZC"]). +bgfact("Greece","ExportCommodities",["manubgfactured = +goods","foodstuffs","fuels"]). +bgfact("Greece","ExportPartners",["Germany","Italy","France","UK","US"]).= + +bgfact("Greece","ImportCommodities",["manubgfactured = +goods","foodstuffs","fuels"]). +bgfact("Greece","ImportPartners",["Germany","Italy","France","Netherlands= +","Japan"]). +bgfact("Greece","Industries",["food and tobacco = +processing","textiles","chemicals","metal = +products","tourism","mining","petroleum"]). +bgfact("Greece","Agriculture",["including fishing and = +forestry","principal wheat","corn","barley","sugar = +beets","olives","tomatoes","wine","tobacco","self-sufficient in food = +except meat","dairy products"]). +bgfact("Greenland","LandBounderies",[]). +bgfact("Greenland","NaturalResources",["zinc","lead","iron = +ore","coal","molybdenum","cryolite","uranium","fish"]). +bgfact("Greenland","Population",["57040"]). +bgfact("Greenland","Capital",["Nuuk"]). +bgfact("Greenland","ExportCommodities",["fish and fish products"]). +bgfact("Greenland","ExportPartners",["Denmark","Benelux","Germany"]). +bgfact("Greenland","ImportCommodities",["manubgfactured = +goods","machinery and transport equipment","food and live = +animals","petroleum products"]). +bgfact("Greenland","ImportPartners",["Denmark","Norway","US","Germany","J= +apan","Sweden"]). +bgfact("Greenland","Industries",["fish processing","lead and zinc = +mining","handicrafts","some small shipyards","potential for platinum and = +gold mining"]). +bgfact("Greenland","Agriculture",["fish catch of"]). +bgfact("Grenada","LandBounderies",[]). +bgfact("Grenada","NaturalResources",["timber","tropical = +fruit","deepwater harbors"]). +bgfact("Grenada","Population",["94109"]). +bgfact("Grenada","Capital",["Saint George's"]). +bgfact("Grenada","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-7= +7","GATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","INTERPOL"= +,"IOC","ITU","LAES","LORCS","NAM","OAS","OECS","OPANAL","UN","UNCTAD","UN= +ESCO","UNIDO","UPU","WCL","WHO","WTO"]). +bgfact("Grenada","ExportCommodities",["bananas","cocoa","nutmeg","fruit = +and vegetables","clothing","mace"]). +bgfact("Grenada","ExportPartners",["Netherlands","UK","Trinidad and = +Tobago","United States"]). +bgfact("Grenada","ImportCommodities",["food","manubgfactured = +goods","machinery","chemicals","fuel"]). +bgfact("Grenada","ImportPartners",["US","UK","Trinidad and = +Tobago","Japan","Canada"]). +bgfact("Grenada","Industries",["food and beverage","textile","light = +assembly operations","tourism","construction"]). +bgfact("Grenada","Agriculture",["bananas","cocoa","nutmeg","small-size = +farms predominate","growing a variety of citrus = +fruits","avocados","root crops","sugarcane","corn"]). +bgfact("Guadeloupe","LandBounderies",[]). +bgfact("Guadeloupe","NaturalResources",["cultivable land","beaches and = +climate that foster tourism"]). +bgfact("Guadeloupe","Population",["428947"]). +bgfact("Guadeloupe","Capital",["Basse-Terre"]). +bgfact("Guadeloupe","MemberOf",["FZ","WCL","WFTU"]). +bgfact("Guadeloupe","ExportCommodities",["bananas","sugar","rum"]). +bgfact("Guadeloupe","ExportPartners",["France","Martinique"]). +bgfact("Guadeloupe","ImportCommodities",["vehicles","foodstuffs","constru= +ction materials","petroleum products"]). +bgfact("Guadeloupe","ImportPartners",["France","Italy","FRG","US"]). +bgfact("Guadeloupe","Industries",["construction","cement","rum","sugar","= +tourism"]). +bgfact("Guadeloupe","Agriculture",["bananas","livestock - = +cattle","pigs","not self-sufficient in food"]). +bgfact("Guam","LandBounderies",[]). +bgfact("Guam","NaturalResources",["fishing"]). +bgfact("Guam","Population",["149620"]). +bgfact("Guam","Capital",["Agana"]). +bgfact("Guam","MemberOf",["ESCAP","IOC","SPC"]). +bgfact("Guam","ExportCommodities",["mostly transshipments of refined = +petroleum products","construction materials","fish","food and beverage = +products"]). +bgfact("Guam","ExportPartners",["US","Trust Territory of the Pacific = +Islands"]). +bgfact("Guam","ImportCommodities",["petroleum and petroleum = +products","food","manubgfactured goods"]). +bgfact("Guam","ImportPartners",["US","Japan"]). +bgfact("Guam","Industries",["US = +military","tourism","construction","transshipment services","concrete = +products","printing and publishing","food processing","textiles"]). +bgfact("Guam","Agriculture",["fruits","vegetables","eggs","pork","poultry= +","beef","copra"]). +bgfact("Guatemala","LandBounderies",["Belize","El = +Salvador","Honduras","Mexico"]). +bgfact("Guatemala","NaturalResources",["petroleum","nickel","rare = +woods","fish","chicle"]). +bgfact("Guatemala","Population",["10721387"]). +bgfact("Guatemala","Capital",["Guatemala"]). +bgfact("Guatemala","MemberOf",["BCIE","CACM","CCC","ECLAC","FAO","G-24","= +G-77","GATT","IADB","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO"= +,"IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS= +","NAM","OAS","OPANAL","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","= +WFTU","WHO","WIPO","WMO"]). +bgfact("Guatemala","ExportCommodities",["coffee","sugar","bananas","carda= +mon","beef"]). +bgfact("Guatemala","ExportPartners",["US","El Salvador","Costa = +Rica","Germany","Honduras"]). +bgfact("Guatemala","ImportCommodities",["fuel and petroleum = +products","machinery","grain","fertilizers","motor vehicles"]). +bgfact("Guatemala","ImportPartners",["US","Mexico","Venezuela","Japan","G= +ermany"]). +bgfact("Guatemala","Industries",["sugar","textiles and = +clothing","furniture","chemicals","petroleum","metals","rubber","tourism"= +]). +bgfact("Guatemala","Agriculture",["principal = +sugarcane","corn","bananas","coffee","beans","livestock - = +cattle","sheep","pigs","food importer"]). +bgfact("Guernsey","LandBounderies",[]). +bgfact("Guernsey","NaturalResources",["cropland"]). +bgfact("Guernsey","Population",["63719"]). +bgfact("Guernsey","Capital",["Saint Peter Port"]). +bgfact("Guernsey","MemberOf",["none"]). +bgfact("Guernsey","ExportCommodities",["tomatoes","flowers and = +ferns","sweet peppers","eggplant"]). +bgfact("Guernsey","ExportPartners",["UK"]). +bgfact("Guernsey","ImportCommodities",["coal","gasoline"]). +bgfact("Guernsey","ImportPartners",["UK"]). +bgfact("Guernsey","Industries",["tourism","banking"]). +bgfact("Guernsey","Agriculture",["tomatoes","flowers","sweet = +peppers","eggplant","Guernsey cattle"]). +bgfact("Guinea","LandBounderies",["Guinea-Bissau","Cote = +d'Ivoire","Liberia","Mali","Senegal","Sierra Leone"]). +bgfact("Guinea","NaturalResources",["bauxite","iron = +ore","diamonds","gold","uranium","hydropower","fish"]). +bgfact("Guinea","Population",["6391536"]). +bgfact("Guinea","Capital",["Conakry"]). +bgfact("Guinea","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWA= +S","FAO","G-77","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IMO",= +"INTELSAT","INTERPOL","IOC","ITU","LORCS","MINURSO","NAM","OAU","OIC","UN= +","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Guinea","ExportCommodities",["bauxite","alumina","diamonds","gold= +","coffee","pineapples","bananas","palm kernels"]). +bgfact("Guinea","ExportPartners",["US","Belgium","Ireland","Spain"]). +bgfact("Guinea","ImportCommodities",["petroleum = +products","metals","machinery","transport = +equipment","foodstuffs","textiles"]). +bgfact("Guinea","ImportPartners",["France","Cote d'Ivoire","Hong = +Kong","Germany"]). +bgfact("Guinea","Industries",["bauxite mining","alumina","gold","diamond = +mining","light manubgfacturing and agricultural processing = +Industries"]). +bgfact("Guinea","Agriculture",["principal = +rice","coffee","pineapples","palm kernels","cassava","bananas","sweet = +potatoes","livestock - cattle","not self-sufficient in food grains"]). +bgfact("Guinea-Bissau","LandBounderies",["Guinea","Senegal"]). +bgfact("Guinea-Bissau","NaturalResources",["unexploited deposits of = +petroleum","bauxite","phosphates","fish","timber"]). +bgfact("Guinea-Bissau","Population",["1098231"]). +bgfact("Guinea-Bissau","Capital",["Bissau"]). +bgfact("Guinea-Bissau","MemberOf",["ACCT","ITU","LORCS","NAM","OAU","OIC"= +,"UN","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNOMOZ","UPU","WFTU","WHO","WIPO","WMO","W= +TO"]). +bgfact("Guinea-Bissau","ExportCommodities",["cashews","fish","peanuts","p= +alm kernels"]). +bgfact("Guinea-Bissau","ExportPartners",["Portugal","Spain","Senegal","In= +dia","Nigeria"]). +bgfact("Guinea-Bissau","ImportCommodities",["foodstuffs","transport = +equipment","petroleum products","machinery and equipment"]). +bgfact("Guinea-Bissau","ImportPartners",["Portugal","Netherlands","China"= +,"Germany","Senegal"]). +bgfact("Guinea-Bissau","Industries",["agricultural = +processing","beer","soft drinks"]). +bgfact("Guinea-Bissau","Agriculture",["accounts for over of GDP","nearly = +of exports","beans","cassava","cashew nuts","peanuts","palm = +kernels","fishing and forestry potential not fully exploited"]). +bgfact("Guyana","LandBounderies",["Brazil","Suriname","Venezuela"]). +bgfact("Guyana","NaturalResources",["bauxite","gold","diamonds","hardwood= + timber","shrimp","fish"]). +bgfact("Guyana","Population",["729425"]). +bgfact("Guyana","Capital",["Georgetown"]). +bgfact("Guyana","MemberOf",["ACP","C","CARICOM","CCC","CDB","ECLAC","FAO"= +,"G-77","GATT","IADB","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF= +","IMO","INTELSAT","INTERPOL","IOC","ITU","LAES","LORCS","NAM","OAS","ONU= +SAL","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WMO"]). +bgfact("Guyana","ExportCommodities",["sugar","bauxite/alumina","rice","sh= +rimp","molasses"]). +bgfact("Guyana","ExportPartners",["UK","US","Canada","France","Japan"]). +bgfact("Guyana","ImportCommodities",["manubgfactures","machinery","petrol= +eum","food"]). +bgfact("Guyana","ImportPartners",["US","Trinidad and = +Tobago","UK","Italy","Japan"]). +bgfact("Guyana","Industries",["bauxite mining","sugar","rice = +milling","timber","fishing","textiles","gold mining"]). +bgfact("Guyana","Agriculture",["most important sector","not = +self-sufficient in food","especially wheat","vegetable oils"]). +bgfact("Haiti","LandBounderies",["Dominican Republic"]). +bgfact("Haiti","NaturalResources",["bauxite"]). +bgfact("Haiti","Population",["6491450"]). +bgfact("Haiti","Capital",["Port-au-Prince"]). +bgfact("Haiti","MemberOf",["ACCT","ACP","CARICOM","CCC","ECLAC","FAO","G-= +77","GATT","IADB","IAEA","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","IM= +O","INTELSAT","INTERPOL","IOC","ITU","LAES","LORCS","OAS","OPANAL","PCA",= +"UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO= +"]). +bgfact("Haiti","ExportCommodities",["light manubgfactures","coffee"]). +bgfact("Haiti","ExportPartners",["US","Italy","France","less developed = +countries"]). +bgfact("Haiti","ImportCommodities",["machines and manubgfactures","food = +and beverages","petroleum products","chemicals","fats and oils"]). +bgfact("Haiti","ImportPartners",["US","Netherlands = +Antilles","Japan","France","Canada","Germany"]). +bgfact("Haiti","Industries",["sugar refining","textiles","flour = +milling","cement manubgfacturing","tourism","light assembly Industries = +based on imported parts"]). +bgfact("Haiti","Agriculture",["commercial = +coffee","mangoes","sugarcane","staple rice","corn","shortage of wheat = +flour"]). +bgfact("Heard Island and McDonald Islands","LandBounderies",[]). +bgfact("Heard Island and McDonald Islands","NaturalResources",["none"]). +bgfact("Heard Island and McDonald Islands","Capital",["none; = +administered from Canberra, Australia"]). +bgfact("Holy See (Vatican City)","LandBounderies",["Italy"]). +bgfact("Holy See (Vatican City)","NaturalResources",["none"]). +bgfact("Holy See (Vatican City)","Population",["821"]). +bgfact("Holy See (Vatican City)","Capital",["Vatican City"]). +bgfact("Holy See (Vatican = +City)","MemberOf",["CSCE","IAEA","ICFTU","IMF"]). +bgfact("Holy See (Vatican City)","Industries",["worldwide banking and = +financial activities"]). +bgfact("Honduras","LandBounderies",["Guatemala","El = +Salvador","Nicaragua"]). +bgfact("Honduras","NaturalResources",["timber","gold","silver","copper","= +lead","zinc","iron ore","antimony","coal","fish"]). +bgfact("Honduras","Population",["5314794"]). +bgfact("Honduras","Capital",["Tegucigalpa"]). +bgfact("Honduras","MemberOf",["BCIE","CACM","ECLAC","FAO","G-77","GATT","= +IADB","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSA= +T","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","MINURSO","OAS","OP= +ANAL","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO= +","WMO"]). +bgfact("Honduras","ExportCommodities",["bananas","coffee","shrimp","lobst= +er","minerals","meat","lumber"]). +bgfact("Honduras","ExportPartners",["US","Germany","Belgium","UK"]). +bgfact("Honduras","ImportCommodities",["machinery and transport = +equipment","chemical products","manubgfactured goods","fuel and = +oil","foodstuffs"]). +bgfact("Honduras","ImportPartners",["US","Mexico","Guatemala"]). +bgfact("Honduras","Industries",["agricultural = +processing","textiles","clothing","wood products"]). +bgfact("Honduras","Agriculture",["most important sector","accounting for = +more than of GDP","more than of the labor force","principal products = +include bananas","coffee","timber","beef","citrus fruit","importer of = +wheat"]). +bgfact("Hong Kong","LandBounderies",["China"]). +bgfact("Hong Kong","NaturalResources",["outstanding deepwater = +harbor","feldspar"]). +bgfact("Hong Kong","Population",["5548754"]). +bgfact("Hong Kong","Capital",["Victoria"]). +bgfact("Hong Kong","MemberOf",["COCOM","WCL","WMO"]). +bgfact("Hong Kong","ExportCommodities",["clothing","textiles","yarn and = +fabric","footwear","electrical appliances","watches and = +clocks","toys"]). +bgfact("Hong = +Kong","ExportPartners",["China","US","Germany","Japan","UK"]). +bgfact("Hong Kong","ImportCommodities",["foodstuffs","transport = +equipment","raw materials","semimanubgfactures","petroleum"]). +bgfact("Hong Kong","ImportPartners",["China","Japan","Taiwan","US"]). +bgfact("Hong = +Kong","Industries",["textiles","clothing","tourism","electronics","plasti= +cs","toys","watches","clocks"]). +bgfact("Hong Kong","Agriculture",["local farmers produce fresh = +vegetables","of land area suitable for farming"]). +bgfact("Howland Island","LandBounderies",[]). +bgfact("Howland Island","NaturalResources",["guano"]). +bgfact("Howland Island","Population",["1942"]). +bgfact("Howland Island","Capital",["none; administered from Washington, = +DC"]). +bgfact("Hungary","LandBounderies",["Austria","Croatia","Romania","Serbia = + and Montenegro","Slovakia","Slovenia","Ukraine"]). +bgfact("Hungary","NaturalResources",["bauxite","coal","natural = +gas","fertile soils"]). +bgfact("Hungary","Population",["10319113"]). +bgfact("Hungary","Capital",["Budapest"]). +bgfact("Hungary","MemberOf",["Australian = +Group","BIS","CCC","CE","CEI","CERN","COCOM","PCA","UN","UNAVEM = +II","UNCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UNOMOZ","UNOMUR","UNOSOM"= +,"UNTAC","UPU","WFTU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Hungary","ExportCommodities",["raw materials","semi-finished = +goods","chemicals","machinery","consumer goods","food and = +Agriculture","fuels and energy"]). +bgfact("Hungary","ExportPartners",["EC"]). +bgfact("Hungary","ImportCommodities",["fuels and energy","raw = +materials","semi-finished goods","chemicals","machinery","consumer = +goods","food and Agriculture"]). +bgfact("Hungary","ImportPartners",["EC","Austria","the FSU","Eastern = +Europe"]). +bgfact("Hungary","Industries",["mining","metallurgy","construction = +materials","processed = +foods","textiles","chemicals","buses","automobiles"]). +bgfact("Hungary","Agriculture",["including forestry","principal = +wheat","corn","sunflowers","potatoes","livestock - = +hogs","cattle","poultry","self-sufficient in food output"]). +bgfact("Iceland","LandBounderies",[]). +bgfact("Iceland","NaturalResources",["fish","hydropower","diatomite"]). +bgfact("Iceland","Population",["263599"]). +bgfact("Iceland","Capital",["Reykjavik"]). +bgfact("Iceland","MemberOf",["Australian = +Group","BIS","CCC","CE","CSCE","EBRD","ECE","EFTA","FAO","GATT","IAEA","I= +BRD","ICAO","ICC","ICFTU","IDA","IFC","ILO","IMF","IMO","INMARSAT","INTEL= +SAT","INTERPOL","IOC","ISO","ITU","LORCS","MTCR","NACC","NATO","NC","NEA"= +,"NIB","OECD","PCA","UN","UNCTAD","UNESCO","UPU","WEU","WHO","WIPO","WMO"= +]). +bgfact("Iceland","ExportCommodities",["fish and fish products","animal = +products","aluminum","ferrosilicon","diatomite"]). +bgfact("Iceland","ExportPartners",["EC"]). +bgfact("Iceland","ImportCommodities",["machinery and transportation = +equipment","petroleum products","foodstuffs","textiles"]). +bgfact("Iceland","ImportPartners",["EC"]). +bgfact("Iceland","Industries",["fish processing","aluminum = +smelting","ferro-silicon production"]). +bgfact("Iceland","Agriculture",["fishing is most important economic = +activity","principal crops - potatoes","livestock - cattle","fish catch = +of about million metric tons in"]). +bgfact("India","LandBounderies",["Bangladesh","Bhutan","Burma","China","N= +epal","Pakistan"]). +bgfact("India","NaturalResources",["coal","iron = +ore","manganese","mica","bauxite","titanium ore","chromite","natural = +gas","diamonds","petroleum","limestone"]). +bgfact("India","Population",["919903056"]). +bgfact("India","Capital",["New Delhi"]). +bgfact("India","MemberOf",["AG","ONUSAL","PCA","SAARC","UN","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNIKOM","UNOMOZ","UNOSOM","UNPROFOR","UNTA= +C","UPU","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("India","ExportCommodities",["gems and = +jewelry","clothing","engineering goods","chemicals","leather = +manubgfactures","cotton yarn"]). +bgfact("India","ExportPartners",["US","Germany","Italy"]). +bgfact("India","ImportCommodities",["crude and petroleum = +products","gems","fertilizer","chemicals","machinery"]). +bgfact("India","ImportPartners",["US","Belgium","Germany"]). +bgfact("India","Industries",["textiles","chemicals","food = +processing","steel","transportation = +equipment","cement","mining","petroleum","machinery"]). +bgfact("India","Agriculture",["principal = +rice","wheat","oilseeds","cotton","jute","tea","sugarcane","livestock - = +cattle","buffaloes","sheep","goats","fish catch of about million metric = +tons ranks India among the world's top fishing nations"]). +bgfact("Indian Ocean","NaturalResources",["oil and gas = +fields","fish","shrimp","sand and gravel aggregates","placer = +deposits","polymetallic nodules"]). +bgfact("Indian Ocean","Industries",["based on exploitation of natural = +resources","particularly fish","minerals","oil and gas","fishing","sand = +and gravel"]). +bgfact("Indonesia","LandBounderies",["Malaysia","Papua New Guinea"]). +bgfact("Indonesia","NaturalResources",["petroleum","tin","natural = +gas","nickel","timber","bauxite","copper","fertile = +soils","coal","gold","silver"]). +bgfact("Indonesia","Population",["200409741"]). +bgfact("Indonesia","Capital",["Jakarta"]). +bgfact("Indonesia","MemberOf",["APEC","AsDB","ASEAN","CCC","CP","ESCAP","= +FAO","G-15","G-19","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA"= +,"IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","I= +OC","IOM","ISO","ITU","LORCS","NAM","OIC","OPEC","UN","UNCTAD","UNESCO","= +UNIDO","UNIKOM","UNOSOM","UNTAC","UPU","WCL","WFTU","WHO","WIPO","WMO","W= +TO"]). +bgfact("Indonesia","ExportCommodities",["petroleum and gas","clothing = +and fabrics","plywood","footwear"]). +bgfact("Indonesia","ExportPartners",["Japan","US","Singapore","South = +Korea"]). +bgfact("Indonesia","ImportCommodities",["machinery","semi-finished = +goods","chemicals","raw materials","transport equipment","food = +stuffs","petroleum products","consumer goods"]). +bgfact("Indonesia","ImportPartners",["Japan","US","Germany","South = +Korea","Singapore","Australia","Taiwan"]). +bgfact("Indonesia","Industries",["petroleum and natural = +gas","textiles","mining","cement","chemical = +fertilizers","plywood","food","rubber"]). +bgfact("Indonesia","Agriculture",["main products are = +rice","cassava","peanuts","rubber","cocoa","coffee","palm = +oil","copra","poultry","beef","pork","eggs"]). +bgfact("Iran","LandBounderies",["Afghanistan","Armenia","Azerbaijan","Ira= +q","Pakistan","Turkey","Turkmenistan"]). +bgfact("Iran","NaturalResources",["petroleum","natural = +gas","coal","chromium","copper","iron = +ore","lead","manganese","zinc","sulfur"]). +bgfact("Iran","Population",["65615474"]). +bgfact("Iran","Capital",["Tehran"]). +bgfact("Iran","MemberOf",["CCC","CP","ESCAP","ECO","FAO","G-19","G-24","G= +-77","IAEA","IBRD","ICAO","ICC","IDA","IDB","IFAD","IFC","ILO","IMF","IMO= +","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","OIC",= +"OPEC","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WFTU","W= +HO","WIPO","WMO","WTO"]). +bgfact("Iran","ExportCommodities",["petroleum","carpets","fruits","nuts",= +"hides"]). +bgfact("Iran","ExportPartners",["Japan","Italy","France","Netherlands","B= +elgium/Luxembourg","Spain"]). +bgfact("Iran","ImportCommodities",["machinery","military = +supplies","metal works","foodstuffs","pharmaceuticals","technical = +services","refined oil products"]). +bgfact("Iran","ImportPartners",["Germany","Japan","Italy","UK","France"])= +. +bgfact("Iran","Industries",["petroleum","petrochemicals","textiles","food= + processing","metal fabricating"]). +bgfact("Iran","Agriculture",["principal wheat","rice","sugar = +beets","fruits","nuts","cotton","dairy products","wool","not = +self-sufficient in food"]). +bgfact("Iraq","LandBounderies",["Iran","Jordan","Kuwait","Saudi = +Arabia","Syria","Turkey"]). +bgfact("Iraq","NaturalResources",["petroleum","natural = +gas","phosphates","sulfur"]). +bgfact("Iraq","Population",["19889666"]). +bgfact("Iraq","Capital",["Baghdad"]). +bgfact("Iraq","MemberOf",["ABEDA","ACC","AFESD","AL","AMF","CAEU","CCC","= +ESCWA","FAO","G-19","G-77","IAEA","IBRD","ICAO","IDA","IDB","IFAD","IFC",= +"ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LOR= +CS","NAM","OAPEC","OIC","OPEC","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU"= +,"WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Iraq","ExportCommodities",["crude and refined = +products","fertilizer","sulfur"]). +bgfact("Iraq","ExportPartners",["US","Brazil","Turkey","Japan","Netherlan= +ds","Spain"]). +bgfact("Iraq","ImportCommodities",["manubgfactures","food"]). +bgfact("Iraq","ImportPartners",["Germany","US","Turkey","France","UK"]). +bgfact("Iraq","Industries",["petroleum production and = +refining","chemicals","textiles","construction materials","food = +processing"]). +bgfact("Iraq","Agriculture",["principal = +wheat","barley","rice","vegetables","dates","cotton","livestock - = +cattle","not self-sufficient in food output"]). +bgfact("Ireland","LandBounderies",["UK"]). +bgfact("Ireland","NaturalResources",["zinc","lead","natural = +gas","petroleum","barite","copper","gypsum","limestone","dolomite","peat"= +,"silver"]). +bgfact("Ireland","Population",["3539296"]). +bgfact("Ireland","Capital",["Dublin"]). +bgfact("Ireland","MemberOf",["Australian = +Group","BIS","CCC","CE","COCOM","WHO","WIPO","WMO","ZC"]). +bgfact("Ireland","ExportCommodities",["chemicals","data processing = +equipment","industrial machinery","live animals","animal products"]). +bgfact("Ireland","ExportPartners",["EC","US"]). +bgfact("Ireland","ImportCommodities",["food","animal feed","data = +processing equipment","petroleum and petroleum = +products","machinery","textiles","clothing"]). +bgfact("Ireland","ImportPartners",["EC","US"]). +bgfact("Ireland","Industries",["food = +products","brewing","textiles","clothing","chemicals","pharmaceuticals","= +machinery","transportation equipment","glass and crystal"]). +bgfact("Ireland","Agriculture",["principal = +turnips","barley","potatoes","sugar beets","food shortages include = +bread grain","fruits","vegetables"]). +bgfact("Israel","LandBounderies",["Egypt","Gaza = +Strip","Jordan","Lebanon","Syria","West Bank"]). +bgfact("Israel","NaturalResources",["copper","phosphates","bromide","pota= +sh","clay","sand","sulfur","asphalt","manganese","small amounts of = +natural gas and crude"]). +bgfact("Israel","Population",["5050850"]). +bgfact("Israel","Capital",["Jerusalem"]). +bgfact("Israel","MemberOf",["AG","PCA","UN","UNCTAD","UNESCO","UNHCR","UN= +IDO","UPU","WHO","WIPO","WMO","WTO"]). +bgfact("Israel","ExportCommodities",["machinery and equipment","cut = +diamonds","chemicals","textiles and apparel","agricultural = +products","metals"]). +bgfact("Israel","ExportPartners",["US","EC","Japan"]). +bgfact("Israel","ImportCommodities",["military equipment","investment = +goods","rough diamonds","oil","consumer goods"]). +bgfact("Israel","ImportPartners",["US","EC"]). +bgfact("Israel","Industries",["food processing","diamond cutting and = +polishing","textiles and apparel","chemicals","metal products","military = +equipment","transport equipment","electrical equipment","miscellaneous = +machinery","potash mining","high-technology electronics","tourism"]). +bgfact("Israel","Agriculture",["largely self-sufficient in food = +production","vegetables","livestock beef","dairy","poultry"]). +bgfact("Italy","LandBounderies",["Austria","France","Holy See","San = +Marino","Slovenia","Switzerland"]). +bgfact("Italy","NaturalResources",["mercury","potash","marble","sulfur","= +dwindling natural gas and crude reserves","fish","coal"]). +bgfact("Italy","Population",["58138394"]). +bgfact("Italy","Capital",["Rome"]). +bgfact("Italy","MemberOf",["AfDB","AG","OECD","ONUSAL","PCA","UN","UNCTAD= +","UNESCO","UNHCR","UNIDO","UNIFIL","UNIKOM","UNMOGIP","UNOSOM","UNTAC","= +UNTSO","UPU","WCL","WEU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Italy","ExportCommodities",["metals","textiles and = +clothing","production machinery","motor vehicles","transportation = +equipment","chemicals"]). +bgfact("Italy","ExportPartners",["EC","US","OPEC"]). +bgfact("Italy","ImportCommodities",["industrial = +machinery","chemicals","transport = +equipment","petroleum","metals","food","agricultural products"]). +bgfact("Italy","ImportPartners",["EC","OPEC","US"]). +bgfact("Italy","Industries",["machinery","iron and = +steel","chemicals","food processing","textiles","motor = +vehicles","clothing","footwear","ceramics"]). +bgfact("Italy","Agriculture",["dairy products","principal = +fruits","vegetables","grapes","potatoes","sugar = +beets","soybeans","grain","fish catch of"]). +bgfact("Jamaica","LandBounderies",[]). +bgfact("Jamaica","NaturalResources",["bauxite","gypsum","limestone"]). +bgfact("Jamaica","Population",["2555064"]). +bgfact("Jamaica","Capital",["Kingston"]). +bgfact("Jamaica","MemberOf",["ACP","C","CARICOM","CCC","CDB","ECLAC","FAO= +","G-19","G-77","GATT","G-15","IADB","IAEA","IBRD","ICAO","ICFTU","IFAD",= +"IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LAES","L= +ORCS","NAM","OAS","OPANAL","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WF= +TU","WHO","WIPO","WMO","WTO"]). +bgfact("Jamaica","ExportCommodities",["alumina","bauxite","sugar","banana= +s","rum"]). +bgfact("Jamaica","ExportPartners",["US","UK","Germany","Canada","Norway"]= +). +bgfact("Jamaica","ImportCommodities",["fuel","construction = +materials","food","transport equipment"]). +bgfact("Jamaica","ImportPartners",["US","UK","Venezuela","Germany","Japan= +"]). +bgfact("Jamaica","Industries",["tourism","bauxite = +mining","textiles","food processing","light manubgfactures"]). +bgfact("Jamaica","Agriculture",["accounts for about of GDP","of work = +force","commercial = +sugarcane","bananas","coffee","citrus","potatoes","livestock and = +livestock products include poultry","goats","not self-sufficient in = +grain","meat"]). +bgfact("Jan Mayen","LandBounderies",[]). +bgfact("Jan Mayen","NaturalResources",["none"]). +bgfact("Jan Mayen","Capital",["none"]). +bgfact("Japan","LandBounderies",[]). +bgfact("Japan","NaturalResources",["negligible mineral = +resources","fish"]). +bgfact("Japan","Population",["125106937"]). +bgfact("Japan","Capital",["Tokyo"]). +bgfact("Japan","MemberOf",["AfDB","AG","OECD","PCA","UN","UNCTAD","UNESCO= +","UNHCR","UNIDO","UNRWA","UNTAC","UPU","WFTU","WHO","WIPO","WMO","WTO","= +ZC"]). +bgfact("Japan","ExportCommodities",["manubgfactures"]). +bgfact("Japan","ExportPartners",["Southeast Asia","US","Western = +Europe","China"]). +bgfact("Japan","ImportCommodities",["manubgfactures","fossil = +fuels","foodstuffs and raw materials"]). +bgfact("Japan","ImportPartners",["Southeast Asia","US","Western = +Europe","China"]). +bgfact("Japan","Industries",["steel and non-ferrous metallurgy","heavy = +electrical equipment","construction and mining equipment","motor = +vehicles and parts","electronic and telecommunication equipment and = +components","machine tools and automated production = +systems","locomotives and railroad rolling = +stock","shipbuilding","chemicals","textiles","food processing"]). +bgfact("Japan","Agriculture",["highly subsidized and protected = +sector","principal rice","sugar beets","vegetables","animal products = +include pork","poultry","shortages of wheat","corn","world's largest = +fish catch of million metric tons in"]). +bgfact("Jarvis Island","LandBounderies",[]). +bgfact("Jarvis Island","NaturalResources",["guano"]). +bgfact("Jarvis Island","Capital",["none; administered from Washington, = +DC"]). +bgfact("Jersey","LandBounderies",[]). +bgfact("Jersey","NaturalResources",["agricultural land"]). +bgfact("Jersey","Population",["86048"]). +bgfact("Jersey","Capital",["Saint Helier"]). +bgfact("Jersey","MemberOf",["none"]). +bgfact("Jersey","ExportCommodities",["light industrial and electrical = +goods","foodstuffs","textiles"]). +bgfact("Jersey","ExportPartners",["UK"]). +bgfact("Jersey","ImportCommodities",["machinery and transport = +equipment","manubgfactured goods","foodstuffs","mineral = +fuels","chemicals"]). +bgfact("Jersey","ImportPartners",["UK"]). +bgfact("Jersey","Industries",["tourism","banking and finance","dairy"]). +bgfact("Jersey","Agriculture",["potatoes","cauliflowers","dairy and = +cattle farming"]). +bgfact("Johnston Atoll","LandBounderies",[]). +bgfact("Johnston Atoll","NaturalResources",["guano"]). +bgfact("Johnston Atoll","Population",["327"]). +bgfact("Johnston Atoll","Capital",["none; administered from Washington, = +DC"]). +bgfact("Jordan","LandBounderies",["Iraq","Israel","Saudi = +Arabia","Syria","West Bank"]). +bgfact("Jordan","NaturalResources",["phosphates","potash","shale oil"]). +bgfact("Jordan","Population",["3961194"]). +bgfact("Jordan","Capital",["Amman"]). +bgfact("Jordan","MemberOf",["ABEDA","ACC","AFESD","AL","AMF","CAEU","CCC"= +,"ESCWA","FAO","G-77","IAEA","IBRD","ICAO","ICC","IDA","IDB","IFAD","IFC"= +,"ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ITU","LORCS","NAM",= +"OIC","PCA","UN","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNOSOM","UNRWA","UNPROFOR","UNTAC","UPU","= +WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Jordan","ExportCommodities",["phosphates","fertilizers","potash",= +"agricultural products","manubgfactures"]). +bgfact("Jordan","ExportPartners",["India","Iraq","Saudi = +Arabia","EC","Indonesia","UAE"]). +bgfact("Jordan","ImportCommodities",["crude","machinery","transport = +equipment","food","live animals","manubgfactured goods"]). +bgfact("Jordan","ImportPartners",["EC","US","Iraq","Japan","Turkey"]). +bgfact("Jordan","Industries",["phosphate mining","petroleum = +refining","cement","potash","light manubgfacturing"]). +bgfact("Jordan","Agriculture",["principal products are = +wheat","barley","citrus fruit","tomatoes","melons","livestock - = +sheep","goats","large net importer of food"]). +bgfact("Juan de Nova Island","LandBounderies",[]). +bgfact("Juan de Nova Island","NaturalResources",[]). +bgfact("Juan de Nova Island","Capital",["none; administered by France = +>from Reunion"]). +bgfact("Kazakhstan","LandBounderies",["China","Kyrgyzstan","Russia","Turk= +menistan","Uzbekistan"]). +bgfact("Kazakhstan","NaturalResources",["major deposits of = +petroleum","coal","iron ore","manganese","chrome = +ore","nickel","cobalt","copper","molybdenum","lead","zinc","bauxite","gol= +d","uranium"]). +bgfact("Kazakhstan","Population",["17267554"]). +bgfact("Kazakhstan","Capital",["Almaty"]). +bgfact("Kazakhstan","MemberOf",["CCC","CIS","CSCE","EBRD","ECO","ESCAP","= +IBRD","ICAO","IDA","IFC","ILO","IMF","INTELSAT","UN","UNCTAD","UNESCO","U= +PU","WHO","WMO"]). +bgfact("Kazakhstan","ExportCommodities",["oil","ferrous and nonferrous = +metals","chemicals","grain","wool","meat"]). +bgfact("Kazakhstan","ExportPartners",["Russia","Ukraine","Uzbekistan"]). +bgfact("Kazakhstan","ImportCommodities",["machinery and = +parts","industrial materials","oil and gas"]). +bgfact("Kazakhstan","ImportPartners",["China"]). +bgfact("Kazakhstan","Industries",["extractive Industries","iron and = +steel","nonferrous metal","electric motors","construction materials"]). +bgfact("Kazakhstan","Agriculture",["grain","meat","cotton","wool"]). +bgfact("Kenya","LandBounderies",["Ethiopia","Somalia","Sudan","Tanzania",= +"Uganda"]). +bgfact("Kenya","NaturalResources",["gold","limestone","soda ash","salt = +barytes","rubies","fluorspar","garnets","wildlife"]). +bgfact("Kenya","Population",["28240658"]). +bgfact("Kenya","Capital",["Nairobi"]). +bgfact("Kenya","MemberOf",["ACP","AfDB","C","CCC","EADB","ECA","FAO","G-7= +7","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","IGADD","ILO","= +IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","MINURSO= +","NAM","OAU","UN","UNCTAD","UNESCO","UNIDO","UNIKOM","UNPROFOR","UNTAC",= +"UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Kenya","ExportCommodities",["tea","coffee","petroleum = +products"]). +bgfact("Kenya","ExportPartners",["EC","Africa","Asia","US","Middle = +East"]). +bgfact("Kenya","ImportCommodities",["machinery and transportation = +equipment","petroleum and petroleum products","iron and steel","raw = +materials","food and consumer goods"]). +bgfact("Kenya","ImportPartners",["EC","Asia","Middle East","US"]). +bgfact("Kenya","Industries",["small-scale consumer goods","agricultural = +processing","oil refining","cement","tourism"]). +bgfact("Kenya","Agriculture",["most important = +sector","coffee","tea","sisal","food = +corn","wheat","sugarcane","fruit","vegetables","dairy = +products","beef","pork","poultry","food output not keeping pace with = +Population growth"]). +bgfact("Kingman Reef","LandBounderies",[]). +bgfact("Kingman Reef","NaturalResources",["none"]). +bgfact("Kingman Reef","Capital",["none; administered from Washington, = +DC"]). +bgfact("Kiribati","LandBounderies",[]). +bgfact("Kiribati","NaturalResources",["phosphate"]). +bgfact("Kiribati","Population",["77853"]). +bgfact("Kiribati","Capital",["Tarawa"]). +bgfact("Kiribati","MemberOf",["ACP","AsDB","C","ESCAP","IBRD","ICAO","ICF= +TU","IDA","IFC","IMF","INTELSAT","INTERPOL","ITU","SPARTECA","SPC","SPF",= +"UNESCO","UPU","WHO"]). +bgfact("Kiribati","ExportCommodities",["copra","seaweed","fish"]). +bgfact("Kiribati","ExportPartners",["Denmark","Fiji","US"]). +bgfact("Kiribati","ImportCommodities",["foodstuffs","machinery and = +equipment","miscellaneous manubgfactured goods","fuel"]). +bgfact("Kiribati","ImportPartners",["Australia","Japan","Fiji","NZ","US"]= +). +bgfact("Kiribati","Industries",["fishing","handicrafts"]). +bgfact("Kiribati","Agriculture",["food taro","breadfruit","sweet = +potatoes","not self-sufficient in food"]). +bgfact("Korea, North","LandBounderies",["China","South = +Korea","Russia"]). +bgfact("Korea, = +North","NaturalResources",["coal","lead","tungsten","zinc","graphite","ma= +gnesite","iron = +ore","copper","gold","pyrites","salt","fluorspar","hydropower"]). +bgfact("Korea, North","Population",["23066573"]). +bgfact("Korea, North","Capital",["P'yongyang"]). +bgfact("Korea, = +North","MemberOf",["ESCAP","FAO","G-77","ICAO","IFAD","IMF","IOC","ISO","= +ITU","LORCS","NAM","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WIP= +O","WMO","WTO"]). +bgfact("Korea, North","ExportCommodities",["minerals","metallurgical = +products","agricultural and fishery products","manubgfactures"]). +bgfact("Korea, North","ExportPartners",["China","Japan","Russia","South = +Korea","Germany","Hong Kong","Mexico"]). +bgfact("Korea, North","ImportCommodities",["petroleum","grain","coking = +coal","machinery and equipment","consumer goods"]). +bgfact("Korea, North","ImportPartners",["China","Russia","Japan","Hong = +Kong","Germany","Singapore"]). +bgfact("Korea, North","Industries",["machine building","military = +products","electric = +power","chemicals","mining","metallurgy","textiles","food processing"]). +bgfact("Korea, North","Agriculture",["principal = +rice","corn","potatoes","soybeans","livestock and livestock = +cattle","hogs","pork","not self-sufficient in grain"]). +bgfact("Korea, South","LandBounderies",["North Korea"]). +bgfact("Korea, = +South","NaturalResources",["coal","tungsten","graphite","molybdenum","lea= +d","hydropower"]). +bgfact("Korea, South","Population",["45082880"]). +bgfact("Korea, South","Capital",["Seoul"]). +bgfact("Korea, = +South","MemberOf",["AfDB","APEC","AsDB","CCC","COCOM","UN","UNCTAD","UNES= +CO","UNIDO","UNOSOM","UPU","WHO","WIPO","WMO","WTO"]). +bgfact("Korea, South","ExportCommodities",["electronic and electrical = +equipment","machinery","steel","automobiles","ships","textiles","clothing= +","footwear","fish"]). +bgfact("Korea, South","ExportPartners",["US","Japan","EC"]). +bgfact("Korea, South","ImportCommodities",["machinery","electronics and = +electronic equipment","oil","steel","transport = +equipment","textiles","organic chemicals","grains"]). +bgfact("Korea, South","ImportPartners",["Japan","US","EC"]). +bgfact("Korea, South","Industries",["electronics","automobile = +production","chemicals","shipbuilding","steel","textiles","clothing","foo= +twear","food processing"]). +bgfact("Korea, South","Agriculture",["principal rice","root = +crops","barley","vegetables","livestock and livestock = +cattle","hogs","chickens","milk","self-sufficient in food","fish catch = +of million metric tons","seventh-largest in world"]). +bgfact("Kuwait","LandBounderies",["Iraq","Saudi Arabia"]). +bgfact("Kuwait","NaturalResources",["petroleum","fish","shrimp","natural = +gas"]). +bgfact("Kuwait","Population",["1819322"]). +bgfact("Kuwait","Capital",["Kuwait"]). +bgfact("Kuwait","MemberOf",["ABEDA","AfDB","AFESD","AL","AMF","BDEAC","CA= +EU","ESCWA","FAO","G-77","GATT","GCC","IAEA","IBRD","ICAO","ICC","IDA","I= +DB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC"= +,"ISO","ITU","LORCS","NAM","OAPEC","OIC","OPEC","UN","UNCTAD","UNESCO","U= +NIDO","UPU","WFTU","WHO","WMO","WTO"]). +bgfact("Kuwait","ExportCommodities",["oil"]). +bgfact("Kuwait","ExportPartners",["France","Italy","Japan","UK"]). +bgfact("Kuwait","ImportCommodities",["food","construction = +materials","vehicles and parts","clothing"]). +bgfact("Kuwait","ImportPartners",["US","Japan","UK","Canada"]). +bgfact("Kuwait","Industries",["petroleum","petrochemicals","desalination"= +,"food processing","building materials","salt","construction"]). +bgfact("Kuwait","Agriculture",["about of potable water must be = +distilled or imported"]). +bgfact("Kyrgyzstan","LandBounderies",["China","Kazakhstan","Tajikistan","= +Uzbekistan"]). +bgfact("Kyrgyzstan","NaturalResources",["locally exploitable = +coal","mercury","bismuth","lead","natural gas","oil","nepheline","rare = +earth metals","mercury","bismuth","gold","lead","zinc","hydroelectric = +power"]). +bgfact("Kyrgyzstan","Population",["4698108"]). +bgfact("Kyrgyzstan","Capital",["Bishkek"]). +bgfact("Kyrgyzstan","MemberOf",["CIS","CSCE","EBRD","ECE","ECO","ESCAP","= +IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IOC","NACC","OIC","PCA= +","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO"]). +bgfact("Kyrgyzstan","ExportCommodities",["wool","chemicals","cotton","fer= +rous and nonferrous metals","shoes","machinery","tobacco"]). +bgfact("Kyrgyzstan","ExportPartners",["Russia","Ukraine","Uzbekistan","Ka= +zakhstan"]). +bgfact("Kyrgyzstan","ImportCommodities",["grain","lumber","industrial = +products","ferrous metals","fuel","machinery","textiles","footwear"]). +bgfact("Kyrgyzstan","ImportPartners",[]). +bgfact("Kyrgyzstan","Industries",["small = +machinery","textiles","food-processing = +Industries","cement","shoes","sawn = +logs","refrigerators","furniture","electric motors","gold"]). +bgfact("Kyrgyzstan","Agriculture",["wool","tobacco","cotton","livestock",= +"vegetables","meat","grapes","fruits and = +berries","eggs","milk","potatoes"]). +bgfact("Laos","LandBounderies",["Burma","Cambodia","China","Thailand","Vi= +etnam"]). +bgfact("Laos","NaturalResources",["timber","hydropower","gypsum","tin","g= +old","gemstones"]). +bgfact("Laos","Population",["4701654"]). +bgfact("Laos","Capital",["Vientiane"]). +bgfact("Laos","MemberOf",["ACCT","AsDB","ASEAN","INTERPOL","IOC","ITU","L= +ORCS","NAM","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WMO"= +,"WTO"]). +bgfact("Laos","ExportCommodities",["electricity","wood = +products","coffee","tin"]). +bgfact("Laos","ExportPartners",["Thailand","Malaysia","Vietnam","FSU","US= +","China"]). +bgfact("Laos","ImportCommodities",["food","fuel oil","consumer = +goods","manubgfactures"]). +bgfact("Laos","ImportPartners",["Thailand","FSU","Japan","France","Vietna= +m","China"]). +bgfact("Laos","Industries",["tin and gypsum mining","timber","electric = +power","agricultural processing","construction"]). +bgfact("Laos","Agriculture",["principal rice","sweet = +potatoes","vegetables","corn","coffee","sugarcane","livestock - = +buffaloes","hogs","cattle","poultry"]). +bgfact("Latvia","LandBounderies",["Belarus","Estonia","Lithuania","Russia= +"]). +bgfact("Latvia","NaturalResources",["amber","peat","limestone","dolomite"= +]). +bgfact("Latvia","Population",["2749211"]). +bgfact("Latvia","Capital",["Riga"]). +bgfact("Latvia","MemberOf",["BIS","CBSS","CCC","CE","ITU","LORCS","NACC",= +"UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). +bgfact("Latvia","ExportCommodities",["oil products","timber","ferrous = +metals","dairy products","furniture","textiles"]). +bgfact("Latvia","ExportPartners",["Russia","Western Europe"]). +bgfact("Latvia","ImportCommodities",["fuels","cars","ferrous = +metals","chemicals"]). +bgfact("Latvia","ImportPartners",["Russia","Western Europe"]). +bgfact("Latvia","Industries",["dependent on imports for energy","raw = +materials","produces buses","vans","street and railroad cars","synthetic = +fibers","agricultural machinery","fertilizers","washing = +machines","radios","electronics","pharmaceuticals","processed = +foods","textiles"]). +bgfact("Latvia","Agriculture",["meat","milk","eggs","grain","sugar = +beets","potatoes","fishing and fish packing"]). +bgfact("Lebanon","LandBounderies",["Israel","Syria"]). +bgfact("Lebanon","NaturalResources",["limestone","iron = +ore","salt","water-surplus state in a water-deficit region"]). +bgfact("Lebanon","Population",["3620395"]). +bgfact("Lebanon","Capital",["Beirut"]). +bgfact("Lebanon","MemberOf",["ABEDA","ACCT","AFESD","AL","AMF","CCC","ESC= +WA","FAO","G-24","G-77","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IDB","I= +FAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","N= +AM","OIC","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNRWA","UPU","WFT= +U","WHO","WIPO","WMO","WTO"]). +bgfact("Lebanon","ExportCommodities",["agricultural = +products","chemicals","textiles","precious and semiprecious metals and = +jewelry","metals and metal products"]). +bgfact("Lebanon","ExportPartners",["Saudi = +Arabia","Switzerland","Jordan","Kuwait","US"]). +bgfact("Lebanon","ImportCommodities",["Consumer goods","machinery and = +transport equipment","petroleum products"]). +bgfact("Lebanon","ImportPartners",["Italy","France","US","Turkey","Saudi = +Arabia"]). +bgfact("Lebanon","Industries",["banking","food = +processing","textiles","cement","oil = +refining","chemicals","jewelry","some metal fabricating"]). +bgfact("Lebanon","Agriculture",["principal citrus = +fruits","vegetables","potatoes","olives","tobacco","hemp","sheep","not = +self-sufficient in grain"]). +bgfact("Lesotho","LandBounderies",["South Africa"]). +bgfact("Lesotho","NaturalResources",["water","agricultural and grazing = +land"]). +bgfact("Lesotho","Population",["1944493"]). +bgfact("Lesotho","Capital",["Maseru"]). +bgfact("Lesotho","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","G-77","G= +ATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","INTELSAT","INT= +ERPOL","IOC","ITU","LORCS","NAM","OAU","SACU","SADC","UN","UNCTAD","UNESC= +O","UNHCR","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Lesotho","ExportCommodities",["wool","mohair","wheat","cattle","p= +eas","beans","corn","hides","skins","baskets"]). +bgfact("Lesotho","ExportPartners",["South Africa","EC","North and South = +America"]). +bgfact("Lesotho","ImportCommodities",["mainly corn","building = +materials","clothing","vehicles","machinery","medicines","petroleum"]). +bgfact("Lesotho","ImportPartners",["South Africa","Asia","EC"]). +bgfact("Lesotho","Industries",["food","beverages","textiles","handicrafts= +","tourism"]). +bgfact("Lesotho","Agriculture",["exceedingly primitive","principal crops = +corn","wheat","pulses","sorghum","barley"]). +bgfact("Liberia","LandBounderies",["Guinea","Cote d'Ivoire","Sierra = +Leone"]). +bgfact("Liberia","NaturalResources",["iron = +ore","timber","diamonds","gold"]). +bgfact("Liberia","Population",["2972766"]). +bgfact("Liberia","Capital",["Monrovia"]). +bgfact("Liberia","MemberOf",["ACP","AfDB","CCC","ECA","ECOWAS","FAO","G-7= +7","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INM= +ARSAT","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","UN","UNCTAD= +","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO"]). +bgfact("Liberia","ExportCommodities",["iron = +ore","rubber","timber","coffee"]). +bgfact("Liberia","ExportPartners",["US","EC","Netherlands"]). +bgfact("Liberia","ImportCommodities",["rice","mineral = +fuels","chemicals","machinery","transportation equipment"]). +bgfact("Liberia","ImportPartners",["US","EC","Japan","China","Netherlands= +","ECOWAS"]). +bgfact("Liberia","Industries",["rubber processing","food = +processing","construction materials","furniture","palm oil = +processing","mining"]). +bgfact("Liberia","Agriculture",["principal = +rubber","timber","coffee","cocoa","rice","cassava","palm = +oil","sugarcane","bananas","sheep","not self-sufficient in = +food","imports of rice consumption"]). +bgfact("Libya","LandBounderies",["Algeria","Chad","Egypt","Niger","Sudan"= +,"Tunisia"]). +bgfact("Libya","NaturalResources",["petroleum","natural gas","gypsum"]). +bgfact("Libya","Population",["5057392"]). +bgfact("Libya","Capital",["Tripoli"]). +bgfact("Libya","MemberOf",["ABEDA","AfDB","AFESD","AL","AMF","AMU","CAEU"= +,"CCC","ECA","FAO","G-77","IAEA","IBRD","ICAO","IDA","IDB","IFAD","IFC","= +ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","O= +APEC","OAU","OIC","OPEC","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO= +","WMO","WTO"]). +bgfact("Libya","ExportCommodities",["crude","refined petroleum = +products","natural gas"]). +bgfact("Libya","ExportPartners",["Italy","Germany","Spain","France","UK",= +"Turkey","Greece","Egypt"]). +bgfact("Libya","ImportCommodities",["machinery","transport = +equipment","food","manubgfactured goods"]). +bgfact("Libya","ImportPartners",["Italy","Germany","UK","France","Spain",= +"Turkey","Tunisia","Eastern Europe"]). +bgfact("Libya","Industries",["petroleum","food = +processing","textiles","handicrafts","cement"]). +bgfact("Libya","Agriculture",["wheat","barley","olives","dates","citrus = +fruits","of food is imported"]). +bgfact("Liechtenstein","LandBounderies",["Austria","Switzerland"]). +bgfact("Liechtenstein","NaturalResources",["hydroelectric potential"]). +bgfact("Liechtenstein","Population",["30281"]). +bgfact("Liechtenstein","Capital",["Vaduz"]). +bgfact("Liechtenstein","MemberOf",["CE","CSCE","EBRD","ECE","EFTA","IAEA"= +,"INTELSAT","INTERPOL","IOC","ITU","LORCS","UN","UNCTAD","UPU","WCL","WIP= +O"]). +bgfact("Liechtenstein","ExportCommodities",["small specialty = +machinery","dental products","stamps","hardware","pottery"]). +bgfact("Liechtenstein","ExportPartners",["EFTA countries"]). +bgfact("Liechtenstein","ImportCommodities",["machinery","metal = +goods","textiles","foodstuffs","motor vehicles"]). +bgfact("Liechtenstein","ImportPartners",["NA"]). +bgfact("Liechtenstein","Industries",["electronics","metal = +manubgfacturing","textiles","ceramics","pharmaceuticals","food = +products","precision instruments","tourism"]). +bgfact("Liechtenstein","Agriculture",["livestock","vegetables","corn","wh= +eat","potatoes","grapes"]). +bgfact("Lithuania","LandBounderies",["Belarus","Latvia","Poland","Russia"= +]). +bgfact("Lithuania","NaturalResources",["peat"]). +bgfact("Lithuania","Population",["3848389"]). +bgfact("Lithuania","Capital",["Vilnius"]). +bgfact("Lithuania","MemberOf",["BIS","CBSS","CCC","CE","CSCE","EBRD","ECE= +","FAO","IBRD","ICAO","ILO","IMF","INTELSAT","ITU","LORCS","NACC","UN","U= +NCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). +bgfact("Lithuania","ExportCommodities",["electronics","petroleum = +products","food","chemicals"]). +bgfact("Lithuania","ExportPartners",["Russia","Ukraine","West"]). +bgfact("Lithuania","ImportCommodities",["oil","machinery","chemicals","gr= +ain NA%"]). +bgfact("Lithuania","ImportPartners",["Russia","Belarus","West"]). +bgfact("Lithuania","Industries",["shipbuilding","furniture = +making","textiles","food processing","fertilizers","agricultural = +machinery","optical equipment","electronic components","computers"]). +bgfact("Lithuania","Agriculture",["sugar","grain","potatoes","sugar = +beets","vegetables","meat","milk","dairy products","eggs","most = +developed are the livestock and dairy branches","net exporter of = +meat","milk"]). +bgfact("Luxembourg","LandBounderies",["Belgium","France","Germany"]). +bgfact("Luxembourg","NaturalResources",["iron ore"]). +bgfact("Luxembourg","Population",["401900"]). +bgfact("Luxembourg","Capital",["Luxembourg"]). +bgfact("Luxembourg","MemberOf",["ACCT","Australia = +Group","Benelux","CCC","CE","COCOM","CSCE","EBRD","EC","ECE","EIB","FAO",= +"GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IEA","IFAD","IFC","ILO",= +"IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ITU","LORCS","MTCR","NACC"= +,"NATO","NEA","NSG","OECD","PCA","UN","UNCTAD","UNESCO","UNIDO","UNPROFOR= +","UPU","WCL","WEU","WHO","WIPO","WMO","ZC"]). +bgfact("Luxembourg","ExportCommodities",["finished steel = +products","chemicals","rubber products","glass","aluminum"]). +bgfact("Luxembourg","ExportPartners",["EC","US"]). +bgfact("Luxembourg","ImportCommodities",["minerals","metals","foodstuffs"= +,"quality consumer goods"]). +bgfact("Luxembourg","ImportPartners",["Belgium","FRG","France","US"]). +bgfact("Luxembourg","Industries",["banking","iron and steel","food = +processing","chemicals","metal = +products","engineering","tires","glass","aluminum"]). +bgfact("Luxembourg","Agriculture",["principal = +barley","oats","potatoes","wheat","fruits","cattle raising = +widespread"]). +bgfact("Macau","LandBounderies",["China"]). +bgfact("Macau","NaturalResources",["negligible"]). +bgfact("Macau","Population",["484557"]). +bgfact("Macau","Capital",["Macau"]). +bgfact("Macau","MemberOf",["ESCAP"]). +bgfact("Macau","ExportCommodities",["textiles","clothing","toys"]). +bgfact("Macau","ExportPartners",["US","Hong = +Kong","Germany","China","France"]). +bgfact("Macau","ImportCommodities",["raw = +materials","foodstuffs","Capital goods"]). +bgfact("Macau","ImportPartners",["Hong Kong","China","Japan"]). +bgfact("Macau","Industries",["clothing","textiles","toys","plastic = +products","furniture","tourism"]). +bgfact("Macau","Agriculture",["rice","food shortages - = +rice","vegetables","depends mostly on imports for food requirements"]). +bgfact("Madagascar","LandBounderies",[]). +bgfact("Madagascar","NaturalResources",["graphite","chromite","coal","bau= +xite","salt","quartz","tar sands","semiprecious stones","mica","fish"]). +bgfact("Madagascar","Population",["13427758"]). +bgfact("Madagascar","Capital",["Antananarivo"]). +bgfact("Madagascar","MemberOf",["ACCT","ACP","AfDB","CCC","ECA","FAO","G-= +77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","IFC","ILO","I= +MF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","OAU","UN= +","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO"= +,"WTO"]). +bgfact("Madagascar","ExportCommodities",["coffee","vanilla","cloves","she= +llfish","sugar","petroleum products"]). +bgfact("Madagascar","ExportPartners",["France","Japan","Italy","Germany",= +"US"]). +bgfact("Madagascar","ImportCommodities",["intermediate = +manubgfactures","Capital goods","petroleum","consumer goods","food"]). +bgfact("Madagascar","ImportPartners",["France","Germany","UK","US"]). +bgfact("Madagascar","Industries",["agricultural = +processing","cement","automobile assembly plant","paper","petroleum"]). +bgfact("Madagascar","Agriculture",["coffee","vanilla","sugarcane","cloves= +","food rice","cassava","beans","bananas","almost self-sufficient in = +rice"]). +bgfact("Malawi","LandBounderies",["Mozambique","Tanzania","Zambia"]). +bgfact("Malawi","NaturalResources",["limestone","unexploited deposits of = +uranium","coal"]). +bgfact("Malawi","Population",["9732409"]). +bgfact("Malawi","Capital",["Lilongwe"]). +bgfact("Malawi","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","G-77","GA= +TT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT"= +,"INTERPOL","IOC","ISO","ITU","LORCS","NAM","OAU","SADC","UN","UNCTAD","U= +NESCO","UNIDO","UPU","WHO","WIPO","WMO","WTO"]). +bgfact("Malawi","ExportCommodities",["tobacco","tea","sugar","coffee","pe= +anuts","wood products"]). +bgfact("Malawi","ExportPartners",["US","UK","Zambia","South = +Africa","Germany"]). +bgfact("Malawi","ImportCommodities",["food","petroleum = +products","semimanubgfactures","consumer goods","transportation = +equipment"]). +bgfact("Malawi","ImportPartners",["South = +Africa","Japan","US","UK","Zimbabwe"]). +bgfact("Malawi","Industries",["agricultural = +processing","sawmilling","cement","consumer goods"]). +bgfact("Malawi","Agriculture",["tobacco","sugarcane","cotton","tea","subs= +istence potatoes","cassava","sorghum","livestock - cattle","goats"]). +bgfact("Malaysia","LandBounderies",["Brunei","Indonesia","Thailand"]). +bgfact("Malaysia","NaturalResources",["tin","petroleum","timber","copper"= +,"iron ore","natural gas","bauxite"]). +bgfact("Malaysia","Population",["19283157"]). +bgfact("Malaysia","Capital",["Kuala Lumpur"]). +bgfact("Malaysia","MemberOf",["APEC","AsDB","ASEAN","C","CCC","CP","ESCAP= +","FAO","G-15","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IF= +AD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO",= +"ITU","LORCS","MINURSO","NAM","OIC","UN","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNIKOM","UNOMOZ","UNOSOM","UNTAC","UPU","W= +CL","WHO","WIPO","WMO","WTO"]). +bgfact("Malaysia","ExportCommodities",["electronic equipment","petroleum = +and petroleum products","palm oil","wood and wood = +products","rubber","textiles"]). +bgfact("Malaysia","ExportPartners",["Singapore","US","Japan","UK","German= +y","Thailand"]). +bgfact("Malaysia","ImportCommodities",["machinery and = +equipment","chemicals","food","petroleum products"]). +bgfact("Malaysia","ImportPartners",["Japan","Singapore","US","Taiwan","Ge= +rmany","UK","Australia"]). +bgfact("Malaysia","Industries",[]). +bgfact("Malaysia","Agriculture",["accounts for of GDP"]). +bgfact("Maldives","LandBounderies",[]). +bgfact("Maldives","NaturalResources",["fish"]). +bgfact("Maldives","Population",["252077"]). +bgfact("Maldives","Capital",["Male"]). +bgfact("Maldives","MemberOf",["AsDB","C","CP","ESCAP","FAO","G-77","GATT"= +,"IBRD","ICAO","IDA","IDB","IFAD","IFC","IMF","IMO","INTELSAT","INTERPOL"= +,"IOC","ITU","NAM","OIC","SAARC","UN","UNCTAD","UNESCO","UNIDO","UPU","WH= +O","WIPO","WMO","WTO"]). +bgfact("Maldives","ExportCommodities",["fish","clothing"]). +bgfact("Maldives","ExportPartners",["US","UK","Sri Lanka"]). +bgfact("Maldives","ImportCommodities",["consumer goods","intermediate = +and Capital goods","petroleum products"]). +bgfact("Maldives","ImportPartners",["Singapore","Germany","Sri = +Lanka","India"]). +bgfact("Maldives","Industries",["fishing and fish = +processing","tourism","shipping","boat building","some coconut = +processing","garments","woven mats","coir","handicrafts"]). +bgfact("Maldives","Agriculture",["accounts for almost of GDP"]). +bgfact("Mali","LandBounderies",["Algeria","Burkina","Guinea","Cote = +d'Ivoire","Mauritania","Niger","Senegal"]). +bgfact("Mali","NaturalResources",["gold","phosphates","kaolin","salt","li= +mestone","uranium","bauxite","iron ore","manganese","tin"]). +bgfact("Mali","Population",["9112950"]). +bgfact("Mali","Capital",["Bamako"]). +bgfact("Mali","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWAS"= +,"FAO","FZ","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IFAD"= +,"IFC","ILO","IMF","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM",= +"OAU","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WHO","WIPO= +","WMO","WTO"]). +bgfact("Mali","ExportCommodities",["cotton","livestock","gold"]). +bgfact("Mali","ExportPartners",["mostly franc zone and Western = +Europe"]). +bgfact("Mali","ImportCommodities",["machinery and = +equipment","foodstuffs","construction = +materials","petroleum","textiles"]). +bgfact("Mali","ImportPartners",["mostly franc zone and Western = +Europe"]). +bgfact("Mali","Industries",["small local consumer goods and = +processing","construction","phosphate","gold","fishing"]). +bgfact("Mali","Agriculture",["rice","corn","vegetables","livestock - = +cattle","sheep","goats"]). +bgfact("Malta","LandBounderies",[]). +bgfact("Malta","NaturalResources",["limestone","salt"]). +bgfact("Malta","Population",["366767"]). +bgfact("Malta","Capital",["Valletta"]). +bgfact("Malta","MemberOf",["C","CCC","CE","CSCE","EBRD","ECE","FAO","G-77= +","GATT","IBRD","ICAO","ICFTU","IFAD","ILO","IMF","IMO","INMARSAT","INTEL= +SAT","ITU","NAM","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","= +WIPO","WMO","WTO"]). +bgfact("Malta","ExportCommodities",["machinery and transport = +equipment","clothing and footware","printed matter"]). +bgfact("Malta","ExportPartners",["Italy","Germany","UK"]). +bgfact("Malta","ImportCommodities",["food","petroleum","machinery and = +semimanubgfactured goods"]). +bgfact("Malta","ImportPartners",["Italy","UK","Germany","US"]). +bgfact("Malta","Industries",["tourism","electronics","ship repair = +yard","construction","food = +manubgfacturing","textiles","footwear","clothing","beverages","tobacco"])= +. +bgfact("Malta","Agriculture",["overall","main = +potatoes","cauliflower","grapes","wheat","barley","tomatoes","citrus","cu= +t flowers","green peppers","hogs","poultry","generally adequate supplies = +of vegetables","poultry","milk","seasonal or periodic shortages in = +grain","animal fodder","fruits"]). +bgfact("Man, Isle of","LandBounderies",[]). +bgfact("Man, Isle of","NaturalResources",["lead","iron ore"]). +bgfact("Man, Isle of","Population",["72017"]). +bgfact("Man, Isle of","Capital",["Douglas"]). +bgfact("Man, Isle of","MemberOf",["none"]). +bgfact("Man, Isle of","ExportCommodities",["tweeds","herring","processed = +shellfish","meat"]). +bgfact("Man, Isle of","ExportPartners",["UK"]). +bgfact("Man, Isle = +of","ImportCommodities",["timber","fertilizers","fish"]). +bgfact("Man, Isle of","ImportPartners",["UK"]). +bgfact("Man, Isle of","Industries",["financial services","light = +manubgfacturing","tourism"]). +bgfact("Man, Isle = +of","Agriculture",["cattle","sheep","pigs","poultry"]). +bgfact("Marshall Islands","LandBounderies",[]). +bgfact("Marshall Islands","NaturalResources",["phosphate = +deposits","marine products","deep seabed minerals"]). +bgfact("Marshall Islands","Population",["54031"]). +bgfact("Marshall Islands","Capital",["Majuro"]). +bgfact("Marshall = +Islands","MemberOf",["AsDB","ESCAP","IBRD","ICAO","IDA","IFC","IMF","INTE= +LSAT","INTERPOL","SPARTECA","SPC","SPF","UN","UNCTAD","WHO"]). +bgfact("Marshall Islands","ExportCommodities",["coconut = +oil","fish","live animals","trichus shells"]). +bgfact("Marshall Islands","ExportPartners",["US","Japan","Australia"]). +bgfact("Marshall Islands","ImportCommodities",["foodstuffs","machinery = +and equipment","beverages and tobacco","fuels"]). +bgfact("Marshall Islands","ImportPartners",["US","Japan","Australia"]). +bgfact("Marshall Islands","Industries",["copra","fish","craft items from = +shell","wood","offshore banking"]). +bgfact("Marshall = +Islands","Agriculture",["coconuts","cacao","taro","breadfruit","fruits","= +pigs","chickens"]). +bgfact("Martinique","LandBounderies",[]). +bgfact("Martinique","NaturalResources",["coastal scenery and = +beaches","cultivable land"]). +bgfact("Martinique","Population",["392362"]). +bgfact("Martinique","Capital",["Fort-de-France"]). +bgfact("Martinique","MemberOf",["FZ","WCL","WFTU"]). +bgfact("Martinique","ExportCommodities",["refined petroleum = +products","bananas","rum","pineapples"]). +bgfact("Martinique","ExportPartners",["France","Guadeloupe","French = +Guiana"]). +bgfact("Martinique","ImportCommodities",["petroleum = +products","crude","foodstuffs","construction materials","vehicles"]). +bgfact("Martinique","ImportPartners",["France","UK","Italy","Germany","Ja= +pan","US"]). +bgfact("Martinique","Industries",["construction","rum","cement","oil = +refining","sugar","tourism"]). +bgfact("Martinique","Agriculture",["including fishing and = +forestry","principal = +pineapples","avocados","bananas","flowers","vegetables","dependent on = +imported food","particularly meat and vegetables"]). +bgfact("Mauritania","LandBounderies",["Algeria","Mali","Senegal","Western= + Sahara"]). +bgfact("Mauritania","NaturalResources",["iron = +ore","gypsum","fish","copper","phosphate"]). +bgfact("Mauritania","Population",["2192777"]). +bgfact("Mauritania","Capital",["Nouakchott"]). +bgfact("Mauritania","MemberOf",["ABEDA","ACCT","ACP","AfDB","AFESD","AL",= +"AMF","AMU","CAEU","CCC","CEAO","ECA","ECOWAS","FAO","G-77","GATT","IBRD"= +,"ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL",= +"IOC","ITU","LORCS","NAM","OAU","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU= +","WHO","WIPO","WMO","WTO"]). +bgfact("Mauritania","ExportCommodities",["iron ore","fish and fish = +products"]). +bgfact("Mauritania","ExportPartners",["Japan","Italy","Belgium","Luxembou= +rg"]). +bgfact("Mauritania","ImportCommodities",["foodstuffs","consumer = +goods","petroleum products","Capital goods"]). +bgfact("Mauritania","ImportPartners",["Algeria","China","US","France","Ge= +rmany","Spain","Italy"]). +bgfact("Mauritania","Industries",["fish processing","mining of iron ore = +and gypsum"]). +bgfact("Mauritania","Agriculture",["dates","millet","sorghum","large = +food deficit in years of drought"]). +bgfact("Mauritius","LandBounderies",[]). +bgfact("Mauritius","NaturalResources",["arable land","fish"]). +bgfact("Mauritius","Population",["1116923"]). +bgfact("Mauritius","Capital",["Port Louis"]). +bgfact("Mauritius","MemberOf",["ACCT","ACP","AfDB","C","CCC","ECA","FAO",= +"G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF"= +,"INMARSAT","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","= +OAU","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO"= +,"WMO","WTO"]). +bgfact("Mauritius","ExportCommodities",["textiles","sugar","light = +manubgfactures"]). +bgfact("Mauritius","ExportPartners",["EC and US have preferential = +treatment","EU","US"]). +bgfact("Mauritius","ImportCommodities",["manubgfactured goods","Capital = +equipment","foodstuffs","petroleum products","chemicals"]). +bgfact("Mauritius","ImportPartners",["EC","US","South Africa","Japan"]). +bgfact("Mauritius","Industries",["food processing","textiles","wearing = +apparel","chemicals","metal products","transport = +equipment","nonelectrical machinery","tourism"]). +bgfact("Mauritius","Agriculture",["corn","potatoes","bananas","pulses","c= +attle","goats","net food importer","especially rice and fish"]). +bgfact("Mayotte","LandBounderies",[]). +bgfact("Mayotte","NaturalResources",["negligible"]). +bgfact("Mayotte","Population",["93468"]). +bgfact("Mayotte","Capital",["Mamoutzou"]). +bgfact("Mayotte","MemberOf",["FZ"]). +bgfact("Mayotte","ExportCommodities",["ylang-ylang","vanilla"]). +bgfact("Mayotte","ExportPartners",["France","Comoros","Reunion"]). +bgfact("Mayotte","ImportCommodities",["building = +materials","transportation equipment","rice","clothing","flour"]). +bgfact("Mayotte","ImportPartners",["France","Kenya","South = +Africa","Pakistan"]). +bgfact("Mayotte","Industries",["newly created lobster and shrimp = +industry"]). +bgfact("Mayotte","Agriculture",["vanilla","ylang-ylang","coffee","imports= + major share of food needs"]). +bgfact("Mexico","LandBounderies",["Belize","Guatemala","US"]). +bgfact("Mexico","NaturalResources",["petroleum","silver","copper","gold",= +"lead","zinc","natural gas","timber"]). +bgfact("Mexico","Population",["92202199"]). +bgfact("Mexico","Capital",["Mexico"]). +bgfact("Mexico","MemberOf",["AG","OAS","OECD","ONUSAL","OPANAL","PCA","RG= +","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTI","WHO","WIPO","WMO","W= +TO"]). +bgfact("Mexico","ExportCommodities",["crude","oil = +products","coffee","silver","engines","motor = +vehicles","cotton","consumer electronics"]). +bgfact("Mexico","ExportPartners",["US","Japan","EC"]). +bgfact("Mexico","ImportCommodities",["metal-working machines","steel = +mill products","agricultural machinery","electrical equipment","car = +parts for assembly","repair parts for motor vehicles","aircraft"]). +bgfact("Mexico","ImportPartners",["US","Japan","EC"]). +bgfact("Mexico","Industries",["food and = +beverages","tobacco","chemicals","iron and = +steel","petroleum","mining","textiles","clothing","motor = +vehicles","consumer durables","tourism"]). +bgfact("Mexico","Agriculture",["major food = +corn","wheat","rice","cotton","coffee","fruit","tomatoes"]). +bgfact("Micronesia, Federated States of","LandBounderies",[]). +bgfact("Micronesia, Federated States = +of","NaturalResources",["forests","marine products","deep-seabed = +minerals"]). +bgfact("Micronesia, Federated States of","Population",["120347"]). +bgfact("Micronesia, Federated States of","Capital",["Kolonia"]). +bgfact("Micronesia, Federated States = +of","MemberOf",["AsDB","ESCAP","IBRD","ICAO","IDA","IFC","IMF","ITU","SPA= +RTECA","SPC","SPF","UN","UNCTAD","WHO"]). +bgfact("Micronesia, Federated States of","ExportCommodities",["copra"]). +bgfact("Micronesia, Federated States of","ExportPartners",["NA"]). +bgfact("Micronesia, Federated States of","ImportCommodities",["NA"]). +bgfact("Micronesia, Federated States of","ImportPartners",["NA"]). +bgfact("Micronesia, Federated States = +of","Industries",["tourism","construction","fish processing","craft = +items from shell","wood"]). +bgfact("Micronesia, Federated States of","Agriculture",["tropical fruits = +and vegetables","coconuts","cassava","sweet = +potatoes","pigs","chickens"]). +bgfact("Midway Islands","LandBounderies",[]). +bgfact("Midway Islands","NaturalResources",["fish","wildlife"]). +bgfact("Midway Islands","Population",["453"]). +bgfact("Midway Islands","Capital",["none; administered from Washington, = +DC"]). +bgfact("Moldova","LandBounderies",["Romania","Ukraine"]). +bgfact("Moldova","NaturalResources",["lignite","phosphorites","gypsum"]).= + +bgfact("Moldova","Population",["4473033"]). +bgfact("Moldova","Capital",["Chisinau"]). +bgfact("Moldova","MemberOf",["BSEC","CE","IOC","ITU","NACC","UN","UNCTAD"= +,"UNESCO","UNIDO","UPU","WHO","WIPO"]). +bgfact("Moldova","ExportCommodities",["foodstuffs","wine","tobacco","text= +iles and footwear","machinery","chemicals"]). +bgfact("Moldova","ExportPartners",["Russia","Kazakhstan","Ukraine","Roman= +ia","Germany"]). +bgfact("Moldova","ImportCommodities",["oil","gas","coal","steel = +machinery","foodstuffs","automobiles"]). +bgfact("Moldova","ImportPartners",["Russia","Ukraine","Uzbekistan","Roman= +ia","Germany"]). +bgfact("Moldova","Industries",["key products are canned = +food","agricultural machinery","foundry equipment","refrigerators and = +freezers","washing machines","hosiery","refined sugar","vegetable = +oil","shoes","textiles"]). +bgfact("Moldova","Agriculture",["products are = +vegetables","fruits","wine","grain","sugar beets","sunflower = +seed","meat","milk","tobacco"]). +bgfact("Monaco","LandBounderies",["France"]). +bgfact("Monaco","NaturalResources",["none"]). +bgfact("Monaco","Population",["31278"]). +bgfact("Monaco","Capital",["Monaco"]). +bgfact("Monaco","MemberOf",["ACCT","CSCE","ECE","IAEA","ICAO","IMF","IMO"= +,"INMARSAT","INTELSAT","INTERPOL","IOC","ITU","LORCS","UN","UNCTAD","UNES= +CO","UPU","WHO","WIPO"]). +bgfact("Monaco","Agriculture",["none"]). +bgfact("Mongolia","LandBounderies",["China","Russia"]). +bgfact("Mongolia","NaturalResources",["oil","coal","copper","molybdenum",= +"tungsten","phosphates","tin","nickel","zinc","wolfram","fluorspar","gold= +"]). +bgfact("Mongolia","Population",["2429762"]). +bgfact("Mongolia","Capital",["Ulaanbaatar"]). +bgfact("Mongolia","MemberOf",["AsDB","CCC","ESCAP","FAO","G-77","IAEA","I= +BRD","ICAO","IDA","IFC","ILO","IMF","INTELSAT","UN","UNCTAD","UNESCO","UN= +IDO","UPU","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Mongolia","ExportCommodities",["copper","livestock","animal = +products","cashmere","wool","hides","fluorspar"]). +bgfact("Mongolia","ExportPartners",["former CMEA = +countries","China","EC"]). +bgfact("Mongolia","ImportCommodities",["machinery and = +equipment","fuels","food products","industrial consumer = +goods","chemicals","building materials","sugar","tea"]). +bgfact("Mongolia","ImportPartners",["USSR","Austria","China"]). +bgfact("Mongolia","Industries",["copper","processing of animal = +products","building materials","food and beverage","mining"]). +bgfact("Mongolia","Agriculture",["wheat","barley","potatoes","forage"]). +bgfact("Montserrat","LandBounderies",[]). +bgfact("Montserrat","NaturalResources",["negligible"]). +bgfact("Montserrat","Population",["12701"]). +bgfact("Montserrat","Capital",["Plymouth"]). +bgfact("Montserrat","MemberOf",["CARICOM","CDB","ECLAC","OECS","WCL"]). +bgfact("Montserrat","ExportCommodities",["electronic parts","plastic = +bags","apparel","hot peppers","live plants","cattle"]). +bgfact("Montserrat","ExportPartners",["NA"]). +bgfact("Montserrat","ImportCommodities",["machinery and transportation = +equipment","foodstuffs","manubgfactured goods","fuels","lubricants"]). +bgfact("Montserrat","ImportPartners",["NA"]). +bgfact("Montserrat","Industries",["light manubgfacturing - = +rum","textiles","electronic appliances"]). +bgfact("Montserrat","Agriculture",["food tomatoes","onions","not = +self-sufficient in food","especially livestock products"]). +bgfact("Morocco","LandBounderies",["Algeria","Western Sahara"]). +bgfact("Morocco","NaturalResources",["phosphates","iron = +ore","manganese","lead","zinc","fish","salt"]). +bgfact("Morocco","Population",["28558635"]). +bgfact("Morocco","Capital",["Rabat"]). +bgfact("Morocco","MemberOf",["ABEDA","ACCT","NAM","OIC","UN","UNAVEM = +II","UNCTAD","UNESCO","UNHCR","UNIDO","UNOSOM","UNTAC","UPU","WHO","WIPO"= +,"WMO","WTO"]). +bgfact("Morocco","ExportCommodities",["food and = +beverages","semiprocessed goods","consumer goods","phosphates"]). +bgfact("Morocco","ExportPartners",["EC","India","Japan","US"]). +bgfact("Morocco","ImportCommodities",["Capital goods","semiprocessed = +goods","raw materials","fuel and lubricants","food and = +beverages","consumer goods"]). +bgfact("Morocco","ImportPartners",["EC","US","Saudi = +Arabia","FSU","Japan"]). +bgfact("Morocco","Industries",["phosphate rock mining and = +processing","food processing","leather = +goods","textiles","construction","tourism"]). +bgfact("Morocco","Agriculture",["accounts for of GDP","of = +employment","barley","wheat","citrus = +fruit","wine","vegetables","olives"]). +bgfact("Mozambique","LandBounderies",["Malawi","South = +Africa","Swaziland","Tanzania","Zambia","Zimbabwe"]). +bgfact("Mozambique","NaturalResources",["coal","titanium"]). +bgfact("Mozambique","Population",["17346280"]). +bgfact("Mozambique","Capital",["Maputo"]). +bgfact("Mozambique","MemberOf",["ACP","AfDB","CCC","ECA","FAO","FLS","G-7= +7","GATT","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","INMARSAT","IMO","= +INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","SADC","UN","U= +NCTAD","UNESCO","UNIDO","UPU","WHO","WMO"]). +bgfact("Mozambique","ExportCommodities",["shrimp","cashews","sugar","copr= +a","citrus"]). +bgfact("Mozambique","ExportPartners",["US","Western = +Europe","Germany","Japan"]). +bgfact("Mozambique","ImportCommodities",["food","clothing","farm = +equipment","petroleum"]). +bgfact("Mozambique","ImportPartners",["US","Western Europe","USSR"]). +bgfact("Mozambique","Industries",["food","beverages","chemicals","tobacco= +"]). +bgfact("Mozambique","Agriculture",["cotton","cashew = +nuts","sugarcane","tea","corn","rice","not self-sufficient in food"]). +bgfact("Namibia","LandBounderies",["Angola","Botswana","South = +Africa","Zambia"]). +bgfact("Namibia","NaturalResources",["diamonds","copper","uranium","gold"= +,"lead","tin","lithium","cadmium","zinc","salt","vanadium","natural = +gas","suspected deposits of oil","natural gas","coal","iron ore"]). +bgfact("Namibia","Population",["1595567"]). +bgfact("Namibia","Capital",["Windhoek"]). +bgfact("Namibia","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","FLS","G-= +77","GATT","IAEA","IBRD","ICAO","IFAD","IFC","ILO","IMF","INTELSAT","ITU"= +,"NAM","OAU","SACU","SADC","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","= +WCL","WFTU","WHO","WIPO","WMO"]). +bgfact("Namibia","ExportCommodities",["diamonds","copper","gold","zinc","= +lead","uranium","cattle","processed fish","karakul skins"]). +bgfact("Namibia","ExportPartners",["Switzerland","South = +Africa","Germany","Japan"]). +bgfact("Namibia","ImportCommodities",["foodstuffs","petroleum products = +and fuel","machinery and equipment"]). +bgfact("Namibia","ImportPartners",["South = +Africa","Germany","US","Switzerland"]). +bgfact("Namibia","Industries",["meatpacking","fish processing","dairy = +products","mining"]). +bgfact("Namibia","Agriculture",["millet","sorghum","fish catch = +potential of over million metric tons not being fulfilled","catch = +reaching only","not self-sufficient in food"]). +bgfact("Nauru","LandBounderies",[]). +bgfact("Nauru","NaturalResources",["phosphates"]). +bgfact("Nauru","Population",["10019"]). +bgfact("Nauru","Capital",["Yaren District"]). +bgfact("Nauru","MemberOf",["AsDB","C","INTERPOL","ITU","SPARTECA","SPC","= +SPF","UPU"]). +bgfact("Nauru","ExportCommodities",["phosphates"]). +bgfact("Nauru","ExportPartners",["Australia","NZ"]). +bgfact("Nauru","ImportCommodities",["food","fuel","manubgfactures","build= +ing materials","machinery"]). +bgfact("Nauru","ImportPartners",["Australia","UK","NZ","Japan"]). +bgfact("Nauru","Industries",["phosphate mining","financial = +services","coconut products"]). +bgfact("Nauru","Agriculture",["almost completely dependent on imports = +for food and water"]). +bgfact("Navassa Island","LandBounderies",[]). +bgfact("Navassa Island","NaturalResources",["guano"]). +bgfact("Navassa Island","Capital",["none; administered from Washington, = +DC"]). +bgfact("Nepal","LandBounderies",["China","India"]). +bgfact("Nepal","NaturalResources",["quartz","water","timber","hydroelectr= +ic potential","scenic beauty","small deposits of = +lignite","copper","cobalt","iron ore"]). +bgfact("Nepal","Population",["21041527"]). +bgfact("Nepal","Capital",["Kathmandu"]). +bgfact("Nepal","MemberOf",["AsDB","CCC","CP","ESCAP","FAO","G-77","IBRD",= +"ICAO","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","= +ISO","ITU","LORCS","NAM","SAARC","UN","UNCTAD","UNESCO","UNIDO","UNIFIL",= +"UNPROFOR","UNTAC","UPU","WFTU","WHO","WMO","WTO"]). +bgfact("Nepal","ExportCommodities",["carpets","clothing","leather = +goods","jute goods","grain"]). +bgfact("Nepal","ExportPartners",["US","Germany","India","UK"]). +bgfact("Nepal","ImportCommodities",["petroleum = +products","fertilizer","machinery"]). +bgfact("Nepal","ImportPartners",["India","Singapore","Japan","Germany"]).= + +bgfact("Nepal","Industries",["small = +rice","jute","sugar","cigarette","textile","carpet","cement","tourism"]).= + +bgfact("Nepal","Agriculture",["farm = +rice","corn","wheat","sugarcane","root crops","milk","not = +self-sufficient in food","particularly in drought years"]). +bgfact("Netherlands","LandBounderies",["Belgium","Germany"]). +bgfact("Netherlands","NaturalResources",["natural = +gas","petroleum","fertile soil"]). +bgfact("Netherlands","Population",["15367928"]). +bgfact("Netherlands","Capital",["Amsterdam; The Hague is the seat of = +government"]). +bgfact("Netherlands","MemberOf",["AfDB","AG","OECD","PCA","UN","UNAVEM = +II","UNCTAD","UNESCO","UNHCR","UNIDO","UNOMUR","UNPROFOR","UNTAC","UNTSO"= +,"UPU","WCL","WEU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Netherlands","ExportCommodities",["metal = +products","chemicals","processed food and tobacco","agricultural = +products"]). +bgfact("Netherlands","ExportPartners",["EC"]). +bgfact("Netherlands","ImportCommodities",["raw materials and = +semifinished products","consumer goods","transportation = +equipment","crude","food products"]). +bgfact("Netherlands","ImportPartners",["EC"]). +bgfact("Netherlands","Industries",["agro Industries","metal and = +engineering products","electrical machinery and = +equipment","chemicals","petroleum","fishing","construction","microelectro= +nics"]). +bgfact("Netherlands","Agriculture",["grains","potatoes","sugar = +beets","fruits","shortages of grain","fats"]). +bgfact("Netherlands Antilles","LandBounderies",[]). +bgfact("Netherlands Antilles","NaturalResources",["phosphates"]). +bgfact("Netherlands Antilles","Population",["185790"]). +bgfact("Netherlands Antilles","Capital",["Willemstad"]). +bgfact("Netherlands Antilles","MemberOf",["CARICOM"]). +bgfact("Netherlands Antilles","ExportCommodities",["petroleum = +products"]). +bgfact("Netherlands = +Antilles","ExportPartners",["US","Brazil","Colombia"]). +bgfact("Netherlands Antilles","ImportCommodities",["crude = +petroleum","food","manubgfactures"]). +bgfact("Netherlands = +Antilles","ImportPartners",["Venezuela","US","Colombia","Netherlands","Ja= +pan"]). +bgfact("Netherlands Antilles","Industries",["tourism"]). +bgfact("Netherlands Antilles","Agriculture",["chief = +aloes","sorghum","peanuts","fresh vegetables","not self-sufficient in = +food"]). +bgfact("New Caledonia","LandBounderies",[]). +bgfact("New = +Caledonia","NaturalResources",["nickel","chrome","iron","cobalt","mangane= +se","silver","gold","lead","copper"]). +bgfact("New Caledonia","Population",["181309"]). +bgfact("New Caledonia","Capital",["Noumea"]). +bgfact("New = +Caledonia","MemberOf",["ESCAP","FZ","ICFTU","SPC","WFTU","WMO"]). +bgfact("New Caledonia","ExportCommodities",["nickel metal","nickel = +ore"]). +bgfact("New Caledonia","ExportPartners",["France","Japan","US"]). +bgfact("New = +Caledonia","ImportCommodities",["foods","fuels","minerals","machines","el= +ectrical equipment"]). +bgfact("New Caledonia","ImportPartners",["France","US","Australia"]). +bgfact("New Caledonia","Industries",["nickel mining and smelting"]). +bgfact("New = +Caledonia","Agriculture",["coffee","corn","wheat","self-sufficient in = +beef"]). +bgfact("New Zealand","LandBounderies",[]). +bgfact("New Zealand","NaturalResources",["natural gas","iron = +ore","sand","coal","timber","hydropower","gold","limestone"]). +bgfact("New Zealand","Population",["3388737"]). +bgfact("New Zealand","Capital",["Wellington"]). +bgfact("New = +Zealand","MemberOf",["ANZUS","OECD","PCA","SPARTECA","SPC","SPF","UN","UN= +AVEM = +II","UNCTAD","UNESCO","UNIDO","UNOSOM","UNPROFOR","UNTAC","UNTSO","UPU","= +WHO","WIPO","WMO"]). +bgfact("New = +Zealand","ExportCommodities",["wool","lamb","mutton","beef","fruit","fish= +","cheese","manubgfactures","chemicals","forestry products"]). +bgfact("New Zealand","ExportPartners",["Australia","Japan","US","South = +Korea"]). +bgfact("New Zealand","ImportCommodities",["petroleum","consumer = +goods","motor vehicles","industrial equipment"]). +bgfact("New = +Zealand","ImportPartners",["Australia","US","Japan","UK","Germany"]). +bgfact("New Zealand","Industries",["food processing","wood and paper = +products","textiles","machinery","transportation equipment","banking and = +insurance","tourism","mining"]). +bgfact("New Zealand","Agriculture",["livestock predominates - = +wool","meat","wheat","barley","potatoes","pulses","fruits","fish catch = +reached a record"]). +bgfact("Nicaragua","LandBounderies",["Costa Rica","Honduras"]). +bgfact("Nicaragua","NaturalResources",["gold","silver","copper","tungsten= +","lead","zinc","timber","fish"]). +bgfact("Nicaragua","Population",["4096689"]). +bgfact("Nicaragua","Capital",["Managua"]). +bgfact("Nicaragua","MemberOf",["BCIE","CACM","ECLAC","FAO","G-77","GATT",= +"IADB","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO",= +"INTELSAT","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","NAM","OAS"= +,"OPANAL","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WFTU"= +,"WHO","WIPO","WMO","WTO"]). +bgfact("Nicaragua","ExportCommodities",["foodstuffs","cotton","coffee","c= +hemicals"]). +bgfact("Nicaragua","ExportPartners",["EC","US","Japan","Costa Rica","El = +Salvador","Mexico"]). +bgfact("Nicaragua","ImportCommodities",["petroleum","food","chemicals","m= +achinery","clothing"]). +bgfact("Nicaragua","ImportPartners",["US","Venezuela","Costa = +Rica","EC","Guatemala"]). +bgfact("Nicaragua","Industries",["food processing","chemicals","metal = +products","textiles","clothing","petroleum refining and = +distribution","beverages","footwear"]). +bgfact("Nicaragua","Agriculture",["export = +coffee","bananas","sugarcane","food rice","corn","cassava","citrus = +fruit","also produces a variety of animal = +beef","veal","pork","poultry","normally self-sufficient in food"]). +bgfact("Niger","LandBounderies",["Algeria","Benin","Burkina","Chad","Liby= +a","Mali","Nigeria"]). +bgfact("Niger","NaturalResources",["uranium","coal","iron = +ore","tin","phosphates"]). +bgfact("Niger","Population",["8971605"]). +bgfact("Niger","Capital",["Niamey"]). +bgfact("Niger","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWAS= +","Entente","FAO","FZ","G-77","GATT","IAEA","IBRD","ICAO","IDA","IDB","IF= +AD","IFC","ILO","IMF","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OA= +U","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WHO","WIPO","= +WMO","WTO"]). +bgfact("Niger","ExportCommodities",["uranium ore","livestock = +products","cowpeas","onions"]). +bgfact("Niger","ExportPartners",["France","Nigeria","Cote = +d'Ivoire","Italy"]). +bgfact("Niger","ImportCommodities",["primary = +materials","machinery","vehicles and parts","electronic = +equipment","cereals","petroleum products","pharmaceuticals","chemical = +products","foodstuffs"]). +bgfact("Niger","ImportPartners",["Germany","Cote = +d'Ivoire","France","Italy","Nigeria"]). +bgfact("Niger","Industries",["cement","brick","textiles","food = +processing","chemicals","slaughterhouses","uranium mining began in"]). +bgfact("Niger","Agriculture",["cowpeas","cotton","food = +millet","sorghum","cassava","livestock - = +cattle","sheep","self-sufficient in food except in drought years"]). +bgfact("Nigeria","LandBounderies",["Benin","Cameroon","Chad","Niger"]). +bgfact("Nigeria","NaturalResources",["petroleum","tin","columbite","iron = +ore","coal","limestone","lead","zinc","natural gas"]). +bgfact("Nigeria","Population",["98091097"]). +bgfact("Nigeria","Capital",["Abuja"]). +bgfact("Nigeria","MemberOf",["ACP","AfDB","C","CCC","ECA","ECOWAS","FAO",= +"G-15","G-19","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","IDA","IFAD= +","IFC","ILO","IMO","IMF","INMARSAT","INTELSAT","INTERPOL","IOC","ITU","L= +ORCS","MINURSO","NAM","OAU","OIC","OPEC","PCA","UN","UNAVEM","UNCTAD","UN= +ESCO","UNHCR","UNIDO","UNIKOM","UNPROFOR","UNTAC","UPU","WCL","WHO","WMO"= +,"WTO"]). +bgfact("Nigeria","ExportCommodities",["oil","cocoa","rubber"]). +bgfact("Nigeria","ExportPartners",["US","EC"]). +bgfact("Nigeria","ImportCommodities",["machinery and = +equipment","manubgfactured goods","food and animals"]). +bgfact("Nigeria","ImportPartners",["EC","US","Japan"]). +bgfact("Nigeria","Industries",["crude","coal","tin","palm = +oil","peanut","cotton","rubber","wood","textiles","cement","building = +materials","food = +products","footwear","chemical","printing","ceramics","steel"]). +bgfact("Nigeria","Agriculture",["cocoa","peanuts","palm = +oil","corn","rice","sorghum","millet","cassava","livestock - = +cattle","sheep","goats","fishing and forestry resources extensively = +exploited"]). +bgfact("Niue","LandBounderies",[]). +bgfact("Niue","NaturalResources",["fish","arable land"]). +bgfact("Niue","Population",["1906"]). +bgfact("Niue","Capital",["Alofi"]). +bgfact("Niue","MemberOf",["ESCAP","SPARTECA","SPC","SPF"]). +bgfact("Niue","ExportCommodities",["canned coconut = +cream","copra","honey","passion fruit products","pawpaw","root = +crops","limes","footballs","stamps","handicrafts"]). +bgfact("Niue","ExportPartners",["NZ","Fiji","Cook = +Islands","Australia"]). +bgfact("Niue","ImportCommodities",["food","live animals","manubgfactured = +goods","machinery","fuels","lubricants","chemicals","drugs"]). +bgfact("Niue","ImportPartners",["NZ","Fiji","Japan","Western = +Samoa","Australia","US"]). +bgfact("Niue","Industries",["tourist","handicrafts","coconut = +products"]). +bgfact("Niue","Agriculture",["coconuts","passion = +fruit","honey","subsistence = +taro","yams","cassava","pigs","poultry","beef cattle"]). +bgfact("Norfolk Island","LandBounderies",[]). +bgfact("Norfolk Island","NaturalResources",["fish"]). +bgfact("Norfolk Island","Population",["2710"]). +bgfact("Norfolk Island","Capital",["Kingston"]). +bgfact("Norfolk Island","MemberOf",["none"]). +bgfact("Norfolk Island","ExportCommodities",["postage stamps","seeds of = +the Norfolk Island pine and Kentia palm","small quantities of = +avocados"]). +bgfact("Norfolk Island","ExportPartners",["Australia","Pacific = +Islands","NZ","Asia","Europe"]). +bgfact("Norfolk Island","ImportCommodities",["NA"]). +bgfact("Norfolk Island","ImportPartners",["Australia","Pacific = +Islands","NZ","Asia","Europe"]). +bgfact("Norfolk Island","Industries",["tourism"]). +bgfact("Norfolk Island","Agriculture",["Norfolk Island pine = +seed","Kentia palm = +seed","cereals","vegetables","fruit","cattle","poultry"]). +bgfact("Northern Mariana Islands","LandBounderies",[]). +bgfact("Northern Mariana Islands","NaturalResources",["arable = +land","fish"]). +bgfact("Northern Mariana Islands","Population",["49799"]). +bgfact("Northern Mariana Islands","Capital",["Saipan"]). +bgfact("Northern Mariana Islands","MemberOf",["ESCAP","SPC"]). +bgfact("Northern Mariana Islands","ExportCommodities",["manubgfactured = +goods","garments","bread","pastries","concrete blocks","light iron = +work"]). +bgfact("Northern Mariana Islands","ExportPartners",["NA"]). +bgfact("Northern Mariana = +Islands","ImportCommodities",["food","construction","equipment","material= +s"]). +bgfact("Northern Mariana Islands","ImportPartners",["NA"]). +bgfact("Northern Mariana = +Islands","Industries",["tourism","construction","light = +industry","handicrafts"]). +bgfact("Northern Mariana = +Islands","Agriculture",["coconuts","fruits","cattle","vegetables"]). +bgfact("Norway","LandBounderies",["Finland","Sweden","Russia"]). +bgfact("Norway","NaturalResources",["petroleum","copper","natural = +gas","pyrites","nickel","iron = +ore","zinc","lead","fish","timber","hydropower"]). +bgfact("Norway","Population",["4314604"]). +bgfact("Norway","Capital",["Oslo"]). +bgfact("Norway","MemberOf",["AfDB","AsDB","Australia = +Group","BIS","CBSS","CCC","CE","CERN","COCOM","CSCE","EBRD","ECE","EFTA",= +"ESA","FAO","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IEA",= +"IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IO= +M","ISO","ITU","LORCS","MTCR","NACC","NAM","WHO","WIPO","WMO","ZC"]). +bgfact("Norway","ExportCommodities",["petroleum and petroleum = +products","metals and products","fish and fish = +products","chemicals","natural gas","ships"]). +bgfact("Norway","ExportPartners",["EC","Nordic countries","developing = +countries","US","Japan"]). +bgfact("Norway","ImportCommodities",["machinery and = +equipment","manubgfactured consumer goods","foodstuffs"]). +bgfact("Norway","ImportPartners",["EC","Nordic countries","developing = +countries","US","Japan"]). +bgfact("Norway","Industries",["petroleum and gas","food = +processing","shipbuilding","pulp and paper = +products","metals","chemicals","timber","mining","textiles","fishing"]). +bgfact("Norway","Agriculture",["fish catch of million metric tons in"]). +bgfact("Oman","LandBounderies",["Saudi Arabia","UAE","Yemen"]). +bgfact("Oman","NaturalResources",["petroleum","copper","asbestos","some = +marble","limestone","chromium","gypsum","natural gas"]). +bgfact("Oman","Population",["1701470"]). +bgfact("Oman","Capital",["Muscat"]). +bgfact("Oman","MemberOf",["ABEDA","AFESD","AL","AMF","ESCWA","FAO","G-77"= +,"GCC","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT= +","INTELSAT","INTERPOL","IOC","ISO","ITU","NAM","OIC","UN","UNCTAD","UNES= +CO","UNIDO","UPU","WFTU","WHO","WMO"]). +bgfact("Oman","ExportCommodities",["petroleum","re-exports","fish","proce= +ssed copper","textiles"]). +bgfact("Oman","ExportPartners",["UAE","Japan","South = +Korea","Singapore"]). +bgfact("Oman","ImportCommodities",["machinery","transportation = +equipment","manubgfactured goods","food","livestock","lubricants"]). +bgfact("Oman","ImportPartners",["Japan","UAE","UK","US"]). +bgfact("Oman","Industries",["crude production and refining","natural gas = +production","construction","cement","copper"]). +bgfact("Oman","Agriculture",["annual fish catch averages"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","LandBounderies",[]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","NaturalResources",["forests","minerals","marine = +products","deep-seabed minerals"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","Population",["16366"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","Capital",["Koror"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","MemberOf",["ESCAP"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","ExportCommodities",["trochus","tuna","copra","handicrafts"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","ExportPartners",["US","Japan"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","ImportCommodities",["NA"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","ImportPartners",["US"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","Industries",["tourism","craft items","Agriculture"]). +bgfact("Pacific Islands (Palau), Trust Territory of = +the","Agriculture",["coconut","copra","cassava","sweet potatoes"]). +bgfact("Pacific Ocean","NaturalResources",["oil and gas = +fields","polymetallic nodules","sand and gravel aggregates","placer = +deposits","fish"]). +bgfact("Pacific Ocean","Industries",["fishing","oil and gas = +production"]). +bgfact("Pakistan","LandBounderies",["Afghanistan","China","India","Iran"]= +). +bgfact("Pakistan","NaturalResources",["land","extensive natural gas = +reserves","limited petroleum","poor quality coal","iron = +ore","copper","salt","limestone"]). +bgfact("Pakistan","Population",["128855965"]). +bgfact("Pakistan","Capital",["Islamabad"]). +bgfact("Pakistan","MemberOf",["AsDB","C","CCC","CP","ECO","ESCAP","FAO","= +G-19","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IDB"= +,"IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","I= +OM","ISO","ITU","LORCS","MINURSO","NAM","OAS","OIC","PCA","SAARC","UN","U= +NCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UNOSOM","UNTAC","UPU","WCL","WF= +TU","WHO","WIPO","WMO","WTO"]). +bgfact("Pakistan","ExportCommodities",["cotton","textiles","clothing","ri= +ce","leather","carpets"]). +bgfact("Pakistan","ExportPartners",["US","Japan","Hong = +Kong","Germany","UK"]). +bgfact("Pakistan","ImportCommodities",["petroleum","petroleum = +products","machinery","transportation equipment","vegetable = +oils","animal fats","chemicals"]). +bgfact("Pakistan","ImportPartners",["Japan","US","Germany","UK","Saudi = +Arabia"]). +bgfact("Pakistan","Industries",["textiles","food = +processing","beverages","construction materials","clothing","paper = +products","shrimp"]). +bgfact("Pakistan","Agriculture",["of GDP","major = +cotton","wheat","rice","sugarcane","fruits","livestock = +milk","beef","mutton","self-sufficient in food grain"]). +bgfact("Palmyra Atoll","LandBounderies",[]). +bgfact("Palmyra Atoll","NaturalResources",["none"]). +bgfact("Palmyra Atoll","Capital",["none; administered from Washington, = +DC"]). +bgfact("Panama","LandBounderies",["Colombia","Costa Rica"]). +bgfact("Panama","NaturalResources",["copper","mahogany = +forests","shrimp"]). +bgfact("Panama","Population",["63"]). +bgfact("Panama","Capital",["Panama"]). +bgfact("Panama","MemberOf",["AG","LORCS","NAM","OAS","OPANAL","PCA","UN",= +"UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Panama","ExportCommodities",["bananas","shrimp","sugar","clothing= +","coffee"]). +bgfact("Panama","ExportPartners",["US","EC","Central America and = +Caribbean"]). +bgfact("Panama","ImportCommodities",["Capital = +goods","crude","foodstuffs","consumer goods","chemicals"]). +bgfact("Panama","ImportPartners",["US","EC","Central America and = +Caribbean","Japan"]). +bgfact("Panama","Industries",["manubgfacturing and construction = +activities","petroleum refining","brewing","sugar milling"]). +bgfact("Panama","Agriculture",["crops - = +bananas","rice","corn","coffee","importer of food = +grain","vegetables"]). +bgfact("Papua New Guinea","LandBounderies",["Indonesia"]). +bgfact("Papua New = +Guinea","NaturalResources",["gold","copper","silver","natural = +gas","timber","oil potential"]). +bgfact("Papua New Guinea","Population",["4196806"]). +bgfact("Papua New Guinea","Capital",["Port Moresby"]). +bgfact("Papua New = +Guinea","MemberOf",["ACP","APEC","AsDB","ASEAN","ITU","LORCS","NAM","SPAR= +TECA","SPC","SPF","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WMO"= +]). +bgfact("Papua New Guinea","ExportCommodities",["gold","copper = +ore","oil","logs","palm oil","coffee","cocoa","lobster"]). +bgfact("Papua New Guinea","ExportPartners",["Australia","Japan","South = +Korea","UK","US"]). +bgfact("Papua New Guinea","ImportCommodities",["machinery and transport = +equipment","manubgfactured goods","food","fuels","chemicals"]). +bgfact("Papua New = +Guinea","ImportPartners",["Australia","Japan","US","Singapore","New = +Zealand","UK"]). +bgfact("Papua New Guinea","Industries",["copra crushing","palm oil = +processing","plywood production","wood chip production","mining of = +gold","silver","construction","tourism"]). +bgfact("Papua New = +Guinea","Agriculture",["coffee","cocoa","coconuts","rubber","sweet = +potatoes","fruit","vegetables","poultry","net importer of food for urban = +centers"]). +bgfact("Paracel Islands","LandBounderies",[]). +bgfact("Paracel Islands","NaturalResources",["none"]). +bgfact("Paraguay","LandBounderies",["Argentina","Bolivia","Brazil"]). +bgfact("Paraguay","NaturalResources",["hydropower","timber","iron = +ore","manganese","limestone"]). +bgfact("Paraguay","Population",["5213772"]). +bgfact("Paraguay","Capital",["Asuncion"]). +bgfact("Paraguay","MemberOf",["AG","CCC","ECLAC","FAO","G-77","GATT","IAD= +B","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INT= +ELSAT","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","MERCOSUR","OAS= +","OPANAL","PCA","RG","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","W= +IPO","WMO","WTO"]). +bgfact("Paraguay","ExportCommodities",["cotton","soybean","timber","veget= +able oils","meat products","coffee","tung oil"]). +bgfact("Paraguay","ExportPartners",["EC","Brazil","Argentina","Chile","US= +"]). +bgfact("Paraguay","ImportCommodities",["Capital = +goods","foodstuffs","consumer goods","raw materials","fuels"]). +bgfact("Paraguay","ImportPartners",["Brazil","EC","US","Argentina","Japan= +"]). +bgfact("Paraguay","Industries",["meat packing","oilseed = +crushing","milling","brewing","textiles","cement","construction"]). +bgfact("Paraguay","Agriculture",["cotton","sugarcane","wheat","tobacco","= +cassava","fruits","animal beef","pork","eggs","self-sufficient in most = +foods"]). +bgfact("Peru","LandBounderies",["Bolivia","Brazil","Chile","Colombia","Ec= +uador"]). +bgfact("Peru","NaturalResources",["copper","silver","gold","petroleum","t= +imber","fish","iron ore","coal","phosphate","potash"]). +bgfact("Peru","Population",["23650671"]). +bgfact("Peru","Capital",["Lima"]). +bgfact("Peru","MemberOf",["AG","CCC","ECLAC","FAO","G-11","G-15","G-19","= +G-24","G-77","GATT","IADB","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC= +","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","U= +N","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]= +). +bgfact("Peru","ExportCommodities",["copper","zinc","fishmeal","crude = +petroleum and byproducts","lead","refined silver","coffee","cotton"]). +bgfact("Peru","ExportPartners",["US","Japan","Italy","Germany"]). +bgfact("Peru","ImportCommodities",["machinery","transport = +equipment","foodstuffs","petroleum","iron and = +steel","chemicals","pharmaceuticals"]). +bgfact("Peru","ImportPartners",["US","Colombia","Argentina","Japan","Germ= +any","Brazil"]). +bgfact("Peru","Industries",["mining of = +metals","petroleum","fishing","textiles","clothing","food = +processing","cement","auto assembly","steel","shipbuilding","metal = +fabrication"]). +bgfact("Peru","Agriculture",["accounts for of GDP","commercial = +coffee","cotton","wheat","potatoes","plantains","animal poultry","red = +meats","dairy","fish catch of million metric tons"]). +bgfact("Philippines","LandBounderies",[]). +bgfact("Philippines","NaturalResources",["timber","petroleum","nickel","c= +obalt","silver","gold","salt","copper"]). +bgfact("Philippines","Population",["69808930"]). +bgfact("Philippines","Capital",["Manila"]). +bgfact("Philippines","MemberOf",["APEC","AsDB","ASEAN","CCC","CP","ESCAP"= +,"FAO","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IF= +C","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","= +ITU","LORCS","NAM","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNTAC","UPU","= +WCL","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Philippines","ExportCommodities",["electronics","textiles","cocon= +ut products","cooper","fish"]). +bgfact("Philippines","ExportPartners",["US","Japan","Germany","UK","Hong = +Kong"]). +bgfact("Philippines","ImportCommodities",["raw materials","Capital = +goods","petroleum products"]). +bgfact("Philippines","ImportPartners",["Japan","US","Taiwan","Saudi = +Arabia","Hong Kong","South Korea"]). +bgfact("Philippines","Industries",["textiles","pharmaceuticals","chemical= +s","wood products","food processing","electronics assembly","petroleum = +refining","fishing"]). +bgfact("Philippines","Agriculture",["major = +rice","coconuts","corn","sugarcane","bananas","pineapples","animal = +pork","eggs","fish catch of million metric tons annually"]). +bgfact("Pitcairn Islands","LandBounderies",[]). +bgfact("Pitcairn Islands","NaturalResources",["miro trees","fish"]). +bgfact("Pitcairn Islands","Population",["71"]). +bgfact("Pitcairn Islands","Capital",["Adamstown"]). +bgfact("Pitcairn Islands","MemberOf",["SPC"]). +bgfact("Pitcairn = +Islands","ExportCommodities",["fruits","vegetables","curios"]). +bgfact("Pitcairn Islands","ExportPartners",["NA"]). +bgfact("Pitcairn Islands","ImportCommodities",["fuel = +oil","machinery","building materials","flour","sugar"]). +bgfact("Pitcairn Islands","ImportPartners",["NA"]). +bgfact("Pitcairn Islands","Industries",["postage stamp = +sales","handicrafts"]). +bgfact("Pitcairn Islands","Agriculture",["must import grain products"]). +bgfact("Poland","LandBounderies",["Belarus","Czech = +Republic","Germany","Lithuania","Russia","Slovakia","Ukraine"]). +bgfact("Poland","NaturalResources",["coal","sulfur","copper","natural = +gas","silver","lead","salt"]). +bgfact("Poland","Population",["38654561"]). +bgfact("Poland","Capital",["Warsaw"]). +bgfact("Poland","MemberOf",["BIS","BSEC","PCA","UN","UNCTAD","UNESCO","UN= +DOF","UNIDO","UNIFIL","UNIKOM","UNOMIG","UNPROFOR","UNTAC","UPU","WCL","W= +FTU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Poland","ExportCommodities",["machinery","metals","chemicals","fu= +els and power","food"]). +bgfact("Poland","ExportPartners",["Germany","Netherlands","Italy","Russia= +"]). +bgfact("Poland","ImportCommodities",["fuels and = +power","machinery","chemicals","food"]). +bgfact("Poland","ImportPartners",["Germany","Russia","Italy","UK"]). +bgfact("Poland","Industries",["machine building","iron and = +steel","extractive Industries","chemicals","shipbuilding","food = +processing","glass","beverages","textiles"]). +bgfact("Poland","Agriculture",["of output from private farms","leading = +European producer of rye","rapeseed","normally self-sufficient in = +food"]). +bgfact("Portugal","LandBounderies",["Spain"]). +bgfact("Portugal","NaturalResources",["fish","forests","tungsten","iron = +ore","uranium ore","marble"]). +bgfact("Portugal","Population",["10524210"]). +bgfact("Portugal","Capital",["Lisbon"]). +bgfact("Portugal","MemberOf",["AfDB","Australian = +Group","BIS","CCC","CE","CERN","COCOM","CSCE","EBRD","EC","ECE","ECLAC","= +EIB","FAO","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IEA","= +IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM= +","ISO","ITU","LAIA","OECD","PCA","UN","UNCTAD","UNESCO","UNIDO","UNOMOZ"= +,"UNPROFOR","UPU","WCL","WEU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Portugal","ExportCommodities",["cotton textiles","cork and paper = +products","canned fish","wine","timber and timber = +products","resin","machinery","appliances"]). +bgfact("Portugal","ExportPartners",["EC","US"]). +bgfact("Portugal","ImportCommodities",["machinery and transport = +equipment","agricultural products","chemicals","petroleum","textiles"]). +bgfact("Portugal","ImportPartners",["EC","US"]). +bgfact("Portugal","Industries",["wood pulp","paper","tourism"]). +bgfact("Portugal","Agriculture",["small","major = +grain","potatoes","olives","livestock sector - = +sheep","cattle","goats","poultry","meat","dairy products"]). +bgfact("Puerto Rico","LandBounderies",[]). +bgfact("Puerto Rico","NaturalResources",["some copper and = +nickel","potential for onshore and offshore crude"]). +bgfact("Puerto Rico","Population",["3801977"]). +bgfact("Puerto Rico","Capital",["San Juan"]). +bgfact("Puerto Rico","MemberOf",["CARICOM"]). +bgfact("Puerto = +Rico","ExportCommodities",["pharmaceuticals","electronics","apparel","can= +ned tuna","rum","beverage concentrates","medical = +equipment","instruments"]). +bgfact("Puerto Rico","ExportPartners",["US"]). +bgfact("Puerto = +Rico","ImportCommodities",["chemicals","clothing","food","fish","petroleu= +m products"]). +bgfact("Puerto Rico","ImportPartners",["US"]). +bgfact("Puerto Rico","Industries",["manubgfacturing accounts for of GDP: = +manubgfacturing of pharmaceuticals","electronics","apparel","food = +products","tourism"]). +bgfact("Puerto Rico","Agriculture",["accounts for only of labor force = +and less than of GDP: = +sugarcane","coffee","pineapples","plantains","livestock - = +cattle","imports a large share of food needs"]). +bgfact("Qatar","LandBounderies",["Saudi Arabia"]). +bgfact("Qatar","NaturalResources",["petroleum","natural gas","fish"]). +bgfact("Qatar","Population",["512779"]). +bgfact("Qatar","Capital",["Doha"]). +bgfact("Qatar","MemberOf",["ABEDA","AFESD","AL","AMF","CCC","ESCWA","FAO"= +,"G-77","GCC","IAEA","IBRD","ICAO","IDB","IFAD","ILO","IMF","IMO","INMARS= +AT","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAPEC","OIC","OPEC",= +"UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). +bgfact("Qatar","ExportCommodities",["petroleum = +products","steel","fertilizers"]). +bgfact("Qatar","ExportPartners",["Japan","Brazil","South = +Korea","UAE","Singapore"]). +bgfact("Qatar","ImportCommodities",["machinery and equipment","consumer = +goods","food","chemicals"]). +bgfact("Qatar","ImportPartners",["Japan","UK","US","Germany","France"]). +bgfact("Qatar","Industries",["crude production and = +refining","fertilizers","petrochemicals","steel","cement"]). +bgfact("Qatar","Agriculture",["farming and grazing on small scale","most = +food imported"]). +bgfact("Reunion","LandBounderies",[]). +bgfact("Reunion","NaturalResources",["fish","arable land"]). +bgfact("Reunion","Population",["652857"]). +bgfact("Reunion","Capital",["Saint-Denis"]). +bgfact("Reunion","MemberOf",["FZ","WFTU"]). +bgfact("Reunion","ExportCommodities",["sugar","rum and = +molasses","perfume essences","lobster","vanilla and tea"]). +bgfact("Reunion","ExportPartners",["France","Mauritius","Bahrain","South = +Africa","Italy"]). +bgfact("Reunion","ImportCommodities",["manubgfactured = +goods","food","beverages","tobacco","machinery and transportation = +equipment","raw materials"]). +bgfact("Reunion","ImportPartners",["France","Mauritius","Bahrain","South = +Africa","Italy"]). +bgfact("Reunion","Industries",["sugar","rum","cigarettes","several small = +shops producing handicraft items"]). +bgfact("Reunion","Agriculture",["sugarcane","vanilla","food tropical = +fruits","vegetables","imports large share of food needs"]). +bgfact("Romania","LandBounderies",["Bulgaria","Hungary","Moldova","Serbia= + and Montenegro"]). +bgfact("Romania","NaturalResources",["petroleum","timber","natural = +gas","coal","iron ore","salt"]). +bgfact("Romania","Population",["23181415"]). +bgfact("Romania","Capital",["Bucharest"]). +bgfact("Romania","MemberOf",["ACCT","PCA","UN","UNCTAD","UNESCO","UNIDO",= +"UNIKOM","UNOSOM","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Romania","ExportCommodities",["metals and metal = +products","mineral products","textiles","electric machines and = +equipment","transport materials"]). +bgfact("Romania","ExportPartners",["EC","developing countries","East and = +Central Europe","EFTA","Russia","Japan","US"]). +bgfact("Romania","ImportCommodities",["minerals","machinery and = +equipment","textiles","agricultural goods"]). +bgfact("Romania","ImportPartners",["EC","East and Central = +Europe","developing countries","Russia","EFTA","US","Japan"]). +bgfact("Romania","Industries",["mining","timber","construction = +materials","metallurgy","chemicals","machine building","food = +processing","petroleum production and refining"]). +bgfact("Romania","Agriculture",["sunflower = +seed","potatoes","milk","eggs","meat","grapes"]). +bgfact("Russia","LandBounderies",["Azerbaijan","Belarus","China","Ukraine= +"]). +bgfact("Russia","NaturalResources",["wide natural resource base = +including major deposits of oil","natural gas","coal","timber"]). +bgfact("Russia","Population",["149608953"]). +bgfact("Russia","Capital",["Moscow"]). +bgfact("Russia","MemberOf",["BSEC","CBSS","CCC","CE","PCA","UN","UNCTAD",= +"UNESCO","UNIDO","UNIKOM","UNOMOZ","UNPROFOR","UN Security = +Council","UNTAC","UN Trusteeship = +Council","UNTSO","UPU","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("Russia","ExportCommodities",["petroleum and petroleum = +products","natural gas","wood and wood products","metals","chemicals"]). +bgfact("Russia","ExportPartners",["Europe","North = +America","Japan","Third World countries","Cuba"]). +bgfact("Russia","ImportCommodities",["machinery and = +equipment","chemicals","consumer = +goods","grain","meat","sugar","semifinished metal products"]). +bgfact("Russia","ImportPartners",["Europe","North = +America","Japan","Third World countries","Cuba"]). +bgfact("Russia","Industries",["coal","oil","gas","chemicals","agricultura= +l machinery","tractors","consumer durables"]). +bgfact("Russia","Agriculture",["grain","sugar beet","sunflower = +seeds","meat","milk","vegetables","cotton","tea"]). +bgfact("Rwanda","LandBounderies",["Burundi","Tanzania","Uganda","Zaire"])= +. +bgfact("Rwanda","NaturalResources",["gold","cassiterite","natural = +gas","hydropower"]). +bgfact("Rwanda","Population",["8373963"]). +bgfact("Rwanda","Capital",["Kigali"]). +bgfact("Rwanda","MemberOf",["ACCT","ACP","AfDB","ECA","CCC","CEEAC","CEPG= +L","FAO","G-77","GATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IM= +F","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","UN","UNCTAD","U= +NESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Rwanda","ExportCommodities",["coffee","tea","cassiterite","wolfra= +mite","pyrethrum"]). +bgfact("Rwanda","ExportPartners",["Germany","Belgium","Italy","Uganda","U= +K","France","US"]). +bgfact("Rwanda","ImportCommodities",["textiles","foodstuffs","machines = +and equipment","Capital goods","steel","petroleum products","cement and = +construction material"]). +bgfact("Rwanda","ImportPartners",["US","Belgium","Germany","Kenya","Japan= +"]). +bgfact("Rwanda","Industries",["mining of = +cassiterite","tin","cement","agricultural processing","small-scale = +beverage production","soap","furniture","shoes","plastic = +goods","textiles","cigarettes"]). +bgfact("Rwanda","Agriculture",["coffee","tea","bananas","beans","sorghum"= +]). +bgfact("Saint Helena","LandBounderies",[]). +bgfact("Saint Helena","NaturalResources",["no minerals"]). +bgfact("Saint Helena","Population",["6741"]). +bgfact("Saint Helena","Capital",["Jamestown"]). +bgfact("Saint Helena","MemberOf",["ICFTU"]). +bgfact("Saint Helena","ExportCommodities",["fish","handicrafts"]). +bgfact("Saint Helena","ExportPartners",["South Africa","UK"]). +bgfact("Saint = +Helena","ImportCommodities",["food","beverages","tobacco","fuel = +oils","animal feed","building materials","motor vehicles and = +parts","machinery and parts"]). +bgfact("Saint Helena","ImportPartners",["UK","South Africa"]). +bgfact("Saint Helena","Industries",["crafts","fishing"]). +bgfact("Saint Helena","Agriculture",["maize","potatoes","crawfishing on = +Tristan da Cunha"]). +bgfact("Saint Kitts and Nevis","LandBounderies",[]). +bgfact("Saint Kitts and Nevis","NaturalResources",["negligible"]). +bgfact("Saint Kitts and Nevis","Population",["40671"]). +bgfact("Saint Kitts and Nevis","Capital",["Basseterre"]). +bgfact("Saint Kitts and = +Nevis","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-77","IBRD",= +"ICFTU","IDA","IFAD","IMF","INTERPOL","LORCS","OAS","OECS","UN","UNCTAD",= +"UNESCO","UNIDO","UPU","WCL","WHO"]). +bgfact("Saint Kitts and = +Nevis","ExportCommodities",["sugar","clothing","electronics","postage = +stamps"]). +bgfact("Saint Kitts and Nevis","ExportPartners",["US","UK","Trinidad and = +Tobago","OECS"]). +bgfact("Saint Kitts and = +Nevis","ImportCommodities",["foodstuffs","intermediate = +manubgfactures","machinery","fuels"]). +bgfact("Saint Kitts and Nevis","ImportPartners",["US","UK","Trinidad and = +Tobago","Canada","Japan","OECS"]). +bgfact("Saint Kitts and Nevis","Industries",["sugar = +processing","tourism","cotton","salt","copra","clothing","footwear","beve= +rages"]). +bgfact("Saint Kitts and Nevis","Agriculture",["subsistence = +rice","yams","vegetables","most food imported"]). +bgfact("Saint Lucia","LandBounderies",[]). +bgfact("Saint Lucia","NaturalResources",["forests","sandy = +beaches","minerals","mineral springs"]). +bgfact("Saint Lucia","Population",["145090"]). +bgfact("Saint Lucia","Capital",["Castries"]). +bgfact("Saint = +Lucia","MemberOf",["ACCT","INTERPOL","LORCS","NAM","OAS","OECS","UN","UNC= +TAD","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO"]). +bgfact("Saint = +Lucia","ExportCommodities",["bananas","clothing","cocoa","vegetables","fr= +uits","coconut oil"]). +bgfact("Saint Lucia","ExportPartners",["UK","US","CARICOM"]). +bgfact("Saint Lucia","ImportCommodities",["manubgfactured = +goods","machinery and transportation equipment","food and live = +animals","chemicals","fuels"]). +bgfact("Saint = +Lucia","ImportPartners",["US","CARICOM","UK","Japan","Canada"]). +bgfact("Saint Lucia","Industries",["clothing","assembly of electronic = +components","beverages","corrugated cardboard boxes","tourism","lime = +processing","coconut processing"]). +bgfact("Saint = +Lucia","Agriculture",["bananas","coconuts","vegetables","citrus = +fruit","root crops","imports food for the tourist industry"]). +bgfact("Saint Pierre and Miquelon","LandBounderies",[]). +bgfact("Saint Pierre and Miquelon","NaturalResources",["fish","deepwater = +ports"]). +bgfact("Saint Pierre and Miquelon","Population",["6704"]). +bgfact("Saint Pierre and Miquelon","Capital",["Saint-Pierre"]). +bgfact("Saint Pierre and Miquelon","MemberOf",["FZ","WFTU"]). +bgfact("Saint Pierre and Miquelon","ExportCommodities",["fish and fish = +products","fox and mink pelts"]). +bgfact("Saint Pierre and = +Miquelon","ExportPartners",["US","France","UK","Canada","Portugal"]). +bgfact("Saint Pierre and = +Miquelon","ImportCommodities",["meat","clothing","fuel","electrical = +equipment","machinery","building materials"]). +bgfact("Saint Pierre and = +Miquelon","ImportPartners",["Canada","France","US","Netherlands","UK"]). +bgfact("Saint Pierre and Miquelon","Industries",["tourism"]). +bgfact("Saint Pierre and = +Miquelon","Agriculture",["vegetables","cattle","sheep","fish catch = +of"]). +bgfact("Saint Vincent and the Grenadines","LandBounderies",[]). +bgfact("Saint Vincent and the = +Grenadines","NaturalResources",["negligible"]). +bgfact("Saint Vincent and the Grenadines","Population",["115437"]). +bgfact("Saint Vincent and the Grenadines","Capital",["Kingstown"]). +bgfact("Saint Vincent and the = +Grenadines","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-77","G= +ATT","IBRD","ICAO","ICFTU","IDA","IFAD","IMF","IMO","INTELSAT","INTERPOL"= +,"IOC","ITU","LORCS","OAS","OECS","OPANAL","UN","UNCTAD","UNESCO","UNIDO"= +,"UPU","WCL","WFTU","WHO"]). +bgfact("Saint Vincent and the = +Grenadines","ExportCommodities",["bananas","eddoes and = +dasheen","arrowroot starch","tennis racquets"]). +bgfact("Saint Vincent and the = +Grenadines","ExportPartners",["UK","CARICOM","US"]). +bgfact("Saint Vincent and the = +Grenadines","ImportCommodities",["foodstuffs","machinery and = +equipment","chemicals and fertilizers","minerals and fuels"]). +bgfact("Saint Vincent and the = +Grenadines","ImportPartners",["US","CARICOM","UK","Trinidad and = +Tobago"]). +bgfact("Saint Vincent and the Grenadines","Industries",["food = +processing","cement","furniture","clothing","starch"]). +bgfact("Saint Vincent and the = +Grenadines","Agriculture",["bananas","coconuts","sweet potatoes","small = +numbers of cattle","sheep","hogs","small fish catch used locally"]). +bgfact("San Marino","LandBounderies",["Italy"]). +bgfact("San Marino","NaturalResources",["building stone"]). +bgfact("San Marino","Population",["24091"]). +bgfact("San Marino","Capital",["San Marino"]). +bgfact("San = +Marino","MemberOf",["CE","CSCE","ECE","ICAO","ICFTU","ILO","IMF","IOC","I= +OM","UN","UNCTAD","UNESCO","UPU","WHO","WIPO","WTO"]). +bgfact("San Marino","Industries",["wine","olive = +oil","cement","leather","textile","tourism"]). +bgfact("San = +Marino","Agriculture",["wheat","grapes","maize","olives","meat","cheese",= +"small numbers of cattle","pigs","depends on Italy for food imports"]). +bgfact("Sao Tome and Principe","LandBounderies",[]). +bgfact("Sao Tome and Principe","NaturalResources",["fish"]). +bgfact("Sao Tome and Principe","Population",["136780"]). +bgfact("Sao Tome and Principe","Capital",["Sao Tome"]). +bgfact("Sao Tome and = +Principe","MemberOf",["ACP","AfDB","CEEAC","ECA","FAO","G-77","IBRD","ICA= +O","IDA","IFAD","ILO","IMF","IMO","INTELSAT","ITU","LORCS","NAM","OAU","U= +N","UNCTAD","UNESCO","UNIDO","UPU","WHO","WMO","WTO"]). +bgfact("Sao Tome and = +Principe","ExportCommodities",["cocoa","copra","coffee","palm oil"]). +bgfact("Sao Tome and = +Principe","ExportPartners",["Netherlands","Germany","China","Portugal"]).= + +bgfact("Sao Tome and Principe","ImportCommodities",["machinery and = +electrical equipment","food products","petroleum"]). +bgfact("Sao Tome and = +Principe","ImportPartners",["Portugal","Japan","Spain","France","Angola"]= +). +bgfact("Sao Tome and Principe","Industries",["light = +construction","shirts","soap","beer","fisheries","shrimp processing"]). +bgfact("Sao Tome and Principe","Agriculture",["dominant sector of = +economy","cocoa","coconuts","palm kernels","food = +bananas","papaya","beans","poultry","not self-sufficient in food grain = +and meat"]). +bgfact("Saudi = +Arabia","LandBounderies",["Iraq","Jordan","Kuwait","Oman","Qatar","UAE","= +Yemen"]). +bgfact("Saudi Arabia","NaturalResources",["petroleum","natural = +gas","iron ore","gold","copper"]). +bgfact("Saudi Arabia","Population",["18196783"]). +bgfact("Saudi Arabia","Capital",["Riyadh"]). +bgfact("Saudi = +Arabia","MemberOf",["ABEDA","AfDB","AFESD","AL","AMF","CCC","ESCWA","FAO"= +,"G-19","G-77","GCC","IAEA","IBRD","ICAO","ICC","IDA","IDB","IFAD","IFC",= +"ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LOR= +CS","NAM","OAPEC","OAS","OIC","OPEC","UN","UNCTAD","UNESCO","UNIDO","UNOS= +OM","UPU","WFTU","WHO","WIPO","WMO"]). +bgfact("Saudi Arabia","ExportCommodities",["petroleum and petroleum = +products"]). +bgfact("Saudi = +Arabia","ExportPartners",["US","Japan","Singapore","France","Korea"]). +bgfact("Saudi Arabia","ImportCommodities",["machinery and = +equipment","chemicals","foodstuffs","motor vehicles","textiles"]). +bgfact("Saudi = +Arabia","ImportPartners",["US","UK","Japan","Germany","France"]). +bgfact("Saudi Arabia","Industries",["crude production","petroleum = +refining","basic petrochemicals","cement","two small steel-rolling = +mills","construction","fertilizer","plastics"]). +bgfact("Saudi Arabia","Agriculture",["accounts for about of = +GDP","wheat","barley","tomatoes","melons","dates","citrus = +fruit","mutton","chickens","eggs","approaching self-sufficiency in = +food"]). +bgfact("Senegal","LandBounderies",["The = +Gambia","Guinea","Guinea-Bissau","Mali","Mauritania"]). +bgfact("Senegal","NaturalResources",["fish","phosphates","iron ore"]). +bgfact("Senegal","Population",["8730508"]). +bgfact("Senegal","Capital",["Dakar"]). +bgfact("Senegal","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOW= +AS","FAO","FZ","G-15","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","I= +DA","IDB","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","IOM= +","ITU","LORCS","NAM","OAU","OIC","PCA","UN","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNIKOM","UNOMUR","UNTAC","UPU","WADB","WCL= +","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Senegal","ExportCommodities",["fish","ground nuts","petroleum = +products","phosphates","cotton"]). +bgfact("Senegal","ExportPartners",["France","Cote d'Ivoire","Mali"]). +bgfact("Senegal","ImportCommodities",["foods and beverages","consumer = +goods","Capital goods","petroleum"]). +bgfact("Senegal","ImportPartners",["France","Nigeria","Cote = +d'Ivoire","Algeria","China","Japan"]). +bgfact("Senegal","Industries",["agricultural and fish = +processing","phosphate mining","petroleum refining","building = +materials"]). +bgfact("Senegal","Agriculture",["major = +peanuts","millet","corn","sorghum","rice","cotton","tomatoes","fish = +catch of"]). +bgfact("Serbia and = +Montenegro","LandBounderies",["Albania","Hungary","The Former Yugoslav = +Republic of Macedonia","Romania"]). +bgfact("Serbia and = +Montenegro","NaturalResources",["oil","gas","coal","antimony","copper","l= +ead","zinc","nickel","gold","pyrite","chrome"]). +bgfact("Serbia and Montenegro","Capital",["Belgrade"]). +bgfact("Serbia and Montenegro","ExportCommodities",["machinery and = +transport equipment","manubgfactured goods","miscellaneous = +manubgfactured articles","chemicals","food and live animals","raw = +materials","fuels and lubricants","beverages and tobacco"]). +bgfact("Serbia and Montenegro","ExportPartners",["Italy","Germany","the = +FSU countries","East European countries","US"]). +bgfact("Serbia and Montenegro","ImportCommodities",["machinery and = +transport equipment","fuels and lubricants","manubgfactured = +goods","chemicals","food and live animals","miscellaneous manubgfactured = +items","raw materials","including coking coal for the steel = +industry","beverages","tobacco"]). +bgfact("Serbia and Montenegro","ImportPartners",["the FSU countries","EC = +countries","East European countries","US"]). +bgfact("Serbia and Montenegro","Industries",["machine = +building","electronics","petroleum products","chemicals"]). +bgfact("Serbia and Montenegro","Agriculture",["the fertile plains of = +Vojvodina produce of the cereal production of the former Yugoslavia and = +most of the cotton","oilseeds","Serbia proper","although = +hilly","produces fruit","grapes","in this area","Kosovo produces = +fruits","vegetables","tobacco","mostly near the coast where a = +Mediterranean climate permits the culture of = +olives","citrus","grapes"]). +bgfact("Seychelles","LandBounderies",[]). +bgfact("Seychelles","NaturalResources",["fish","copra","cinnamon = +trees"]). +bgfact("Seychelles","Population",["72113"]). +bgfact("Seychelles","Capital",["Victoria"]). +bgfact("Seychelles","MemberOf",["ACCT","ACP","AfDB","C","ECA","FAO","G-77= +","IBRD","ICAO","ICFTU","IFAD","IFC","ILO","IMF","IMO","INTELSAT","NAM","= +OAU","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","WMO","WTO"]). +bgfact("Seychelles","ExportCommodities",["fish","copra","cinnamon = +bark","petroleum products"]). +bgfact("Seychelles","ExportPartners",["UK France","Reunion"]). +bgfact("Seychelles","ImportCommodities",["manubgfactured = +goods","food","petroleum products","tobacco","beverages","machinery and = +transportation equipment"]). +bgfact("Seychelles","ImportPartners",["South Africa","Singapore","UK"]). +bgfact("Seychelles","Industries",["tourism","processing of coconut and = +vanilla","fishing","coir rope bgfactory","boat = +building","printing","furniture","beverage"]). +bgfact("Seychelles","Agriculture",["accounts for of = +GDP","coconuts","cinnamon","cassava","expansion of tuna fishing under = +way"]). +bgfact("Sierra Leone","LandBounderies",["Guinea","Liberia"]). +bgfact("Sierra Leone","NaturalResources",["diamonds","titanium = +ore","bauxite","iron ore","gold","chromite"]). +bgfact("Sierra Leone","Population",["4630037"]). +bgfact("Sierra Leone","Capital",["Freetown"]). +bgfact("Sierra = +Leone","MemberOf",["ACP","AfDB","C","CCC","ECA","ECOWAS","FAO","G-77","GA= +TT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","IFC","ILO","IMF","IM= +O","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","UN","UNCT= +AD","UNESCO","UNIDO","UNOMIG","UPU","WCL","WHO","WIPO","WMO","WTO"]). +bgfact("Sierra = +Leone","ExportCommodities",["rutile","bauxite","diamonds","coffee"]). +bgfact("Sierra Leone","ExportPartners",["US","UK","Belgium","Germany"]). +bgfact("Sierra Leone","ImportCommodities",["foodstuffs","machinery and = +equipment","fuels"]). +bgfact("Sierra Leone","ImportPartners",["US","EC = +countries","Japan","China","Nigeria"]). +bgfact("Sierra Leone","Industries",["mining","petroleum refinery"]). +bgfact("Sierra Leone","Agriculture",["coffee","cocoa","annual fish = +catch averages"]). +bgfact("Singapore","LandBounderies",[]). +bgfact("Singapore","NaturalResources",["fish","deepwater ports"]). +bgfact("Singapore","Population",["2859142"]). +bgfact("Singapore","Capital",["Singapore"]). +bgfact("Singapore","MemberOf",["APEC","AsDB","ASEAN","C","CCC","COCOM","C= +P","ESCAP","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IFC","ILO","= +IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NA= +M","UN","UNAVEM = +II","UNCTAD","UNIKOM","UNTAC","UPU","WHO","WIPO","WMO"]). +bgfact("Singapore","ExportCommodities",["computer equipment","rubber and = +rubber products","petroleum products","telecommunications equipment"]). +bgfact("Singapore","ExportPartners",["US","Malaysia","Hong = +Kong","Japan","Thailand"]). +bgfact("Singapore","ImportCommodities",["aircraft","petroleum","chemicals= +","foodstuffs"]). +bgfact("Singapore","ImportPartners",["Japan","US","Malaysia","Saudi = +Arabia","Taiwan"]). +bgfact("Singapore","Industries",["petroleum refining","electronics","oil = +drilling equipment","rubber processing and rubber products","processed = +food and beverages","ship repair","entrepot trade","financial = +services","biotechnology"]). +bgfact("Singapore","Agriculture",["major = +rubber","copra","fruit","vegetables"]). +bgfact("Slovakia","LandBounderies",["Austria","Czech = +Republic","Hungary","Poland","Ukraine"]). +bgfact("Slovakia","NaturalResources",["small amounts of iron = +ore","salt"]). +bgfact("Slovakia","Population",["5403505"]). +bgfact("Slovakia","Capital",["Bratislava"]). +bgfact("Slovakia","MemberOf",["BIS","CCC","CE","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNOMUR","UNPROFOR","UPU","WFTU","WHO","WIP= +O","WMO","WTO","ZC"]). +bgfact("Slovakia","ExportCommodities",["fuels","minerals","agricultural = +products"]). +bgfact("Slovakia","ExportPartners",["Czech Republic","CIS = +republics","Germany","Poland","Austria","Hungary","Italy","France","US","= +UK"]). +bgfact("Slovakia","ImportCommodities",["agricultural products"]). +bgfact("Slovakia","ImportPartners",["Czech Republic","CIS = +republics","Germany","Austria","Poland","Switzerland","Hungary","UK","Ita= +ly"]). +bgfact("Slovakia","Industries",["brown coal = +mining","chemicals","metal-working","consumer = +appliances","fertilizer","plastics","armaments"]). +bgfact("Slovakia","Agriculture",["diversified crop and livestock = +production","including grains","potatoes","sugar = +beets","hops","fruit","hogs","cattle","exporter of forest products"]). +bgfact("Slovenia","LandBounderies",["Austria","Croatia","Italy","Hungary"= +]). +bgfact("Slovenia","NaturalResources",["lignite = +coal","lead","zinc","mercury","uranium","silver"]). +bgfact("Slovenia","Population",["1972227"]). +bgfact("Slovenia","Capital",["Ljubljana"]). +bgfact("Slovenia","MemberOf",["CCC","CE","CEI","CSCE","EBRD","ECE","IAEA"= +,"IBRD","ICAO","IDA","IFC","ILO","IMF","IMO","INTELSAT","UN","UNCTAD","UN= +ESCO","UNIDO","UPU","WHO","WIPO","WMO"]). +bgfact("Slovenia","ExportCommodities",["machinery and transport = +equipment","chemicals","food and live animals","raw = +materials","beverages and tobacco less than"]). +bgfact("Slovenia","ExportPartners",["Germany","Croatia","Italy","France"]= +). +bgfact("Slovenia","ImportCommodities",["machinery and transport = +equipment","chemicals","raw materials","fuels and lubricants","food and = +live animals"]). +bgfact("Slovenia","ImportPartners",["Germany","Croatia","Italy","France",= +"Austria"]). +bgfact("Slovenia","Industries",["ferrous metallurgy and rolling mill = +products","aluminum reduction and rolled products","lead and zinc = +smelting","electronics","trucks","electric power equipment","wood = +products","textiles","chemicals","machine tools"]). +bgfact("Slovenia","Agriculture",["main potatoes","hops","hemp"]). +bgfact("Solomon Islands","LandBounderies",[]). +bgfact("Solomon = +Islands","NaturalResources",["fish","forests","gold","bauxite","phosphate= +s","lead","zinc","nickel"]). +bgfact("Solomon Islands","Population",["385811"]). +bgfact("Solomon Islands","Capital",["Honiara"]). +bgfact("Solomon = +Islands","MemberOf",["ACP","AsDB","C","ESCAP","FAO","G-77","IBRD","ICAO",= +"IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","IOC","ITU","LORCS","SPAR= +TECA","SPC","SPF","UN","UNCTAD","UNESCO","UPU","WFTU","WHO","WMO"]). +bgfact("Solomon Islands","ExportCommodities",["fish","timber","palm = +oil","cocoa","copra"]). +bgfact("Solomon = +Islands","ExportPartners",["Japan","UK","Thailand","Australia","US"]). +bgfact("Solomon Islands","ImportCommodities",["plant and machinery = +manubgfactured goods","food and live animals","fuel"]). +bgfact("Solomon = +Islands","ImportPartners",["Australia","Japan","Singapore","NZ"]). +bgfact("Solomon Islands","Industries",["copra","fish"]). +bgfact("Solomon Islands","Agriculture",["including fishing and = +forestry","cocoa","beans","coconuts","palm = +kernels","potatoes","vegetables","fruit","cattle"]). +bgfact("Somalia","LandBounderies",["Djibouti","Ethiopia","Kenya"]). +bgfact("Somalia","NaturalResources",["uranium and largely unexploited = +reserves of iron ore","tin","gypsum","bauxite","copper","salt"]). +bgfact("Somalia","Population",["6666873"]). +bgfact("Somalia","Capital",["Mogadishu"]). +bgfact("Somalia","MemberOf",["ACP","AfDB","AFESD","AL","AMF","CAEU","ECA"= +,"FAO","G-77","IBRD","ICAO","IDA","IDB","IFAD","IFC","IGADD","ILO","IMF",= +"IMO","INTELSAT","INTERPOL","IOC","IOM","ITU","LORCS","NAM","OAU","OIC","= +UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WHO","WIPO","WMO"]). +bgfact("Somalia","ExportCommodities",["bananas","live = +animals","fish","hides"]). +bgfact("Somalia","ExportPartners",["Saudi Arabia","Italy","FRG"]). +bgfact("Somalia","ImportCommodities",["petroleum = +products","foodstuffs","construction materials"]). +bgfact("Somalia","ImportPartners",["US","Italy","FRG","Kenya","UK","Saudi= + Arabia"]). +bgfact("Somalia","Industries",["sugar","textiles"]). +bgfact("Somalia","Agriculture",["dominant = +sector","bananas","sorghum","corn","mangoes","fishing potential largely = +unexploited"]). +bgfact("South = +Africa","LandBounderies",["Botswana","Lesotho","Mozambique","Namibia","Sw= +aziland","Zimbabwe"]). +bgfact("South = +Africa","NaturalResources",["gold","chromium","antimony","coal","iron = +ore","manganese","nickel","phosphates","tin","uranium","gem = +diamonds","platinum","copper","vanadium","salt","natural gas"]). +bgfact("South Africa","Population",["43930631"]). +bgfact("South Africa","Capital",["Pretoria"]). +bgfact("South = +Africa","MemberOf",["BIS","CCC","ECA","GATT","G-77","IAEA","IBRD","ICAO",= +"ZC"]). +bgfact("South Africa","ExportCommodities",["gold","food","chemicals"]). +bgfact("South = +Africa","ExportPartners",["Italy","Japan","US","Germany","UK","Hong = +Kong"]). +bgfact("South Africa","ImportCommodities",["machinery","transport = +equipment","chemicals","oil","textiles","scientific instruments"]). +bgfact("South = +Africa","ImportPartners",["Germany","US","Japan","UK","Italy"]). +bgfact("South Africa","Industries",["mining","automobile = +assembly","metalworking","machinery","textile","iron and = +steel","chemical","fertilizer","foodstuffs"]). +bgfact("South = +Africa","Agriculture",["cattle","poultry","sheep","wool","milk","beef","c= +orn","wheat","sugarcane","fruits","self-sufficient in food"]). +bgfact("South Georgia and the South Sandwich = +Islands","LandBounderies",[]). +bgfact("South Georgia and the South Sandwich = +Islands","NaturalResources",["fish"]). +bgfact("South Georgia and the South Sandwich Islands","Capital",["none; = +Grytviken on South Georgia is the garrison town"]). +bgfact("Spain","LandBounderies",["Andorra","France","Gibraltar","Portugal= +"]). +bgfact("Spain","NaturalResources",["coal","lignite","iron = +ore","uranium","mercury","pyrites","fluorspar","gypsum","zinc","lead","tu= +ngsten","copper","kaolin","potash","hydropower"]). +bgfact("Spain","Population",["39302665"]). +bgfact("Spain","Capital",["Madrid"]). +bgfact("Spain","MemberOf",["AG","OECD","ONUSAL","PCA","UN","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNOMOZ","UNPROFOR","UPU","WCL","WEU","WHO"= +,"WIPO","WMO","WTO","ZC"]). +bgfact("Spain","ExportCommodities",["cars and trucks","semifinished = +manubgfactured goods","foodstuffs","machinery"]). +bgfact("Spain","ExportPartners",["EC","US"]). +bgfact("Spain","ImportCommodities",["machinery","transport = +equipment","fuels","semifinished goods","foodstuffs","consumer = +goods","chemicals"]). +bgfact("Spain","ImportPartners",["EC","US","Middle East"]). +bgfact("Spain","Industries",["textiles and apparel","food and = +beverages","metals and metal = +manubgfactures","chemicals","shipbuilding","automobiles","machine = +tools","tourism"]). +bgfact("Spain","Agriculture",["major grain","vegetables","olives","wine = +grapes","sugar beets","citrus fruit","beef","pork","poultry","fish = +catch of million metric tons is among top nations"]). +bgfact("Spratly Islands","LandBounderies",[]). +bgfact("Spratly = +Islands","NaturalResources",["fish","guano","undetermined oil and = +natural gas potential"]). +bgfact("Spratly Islands","Industries",["none"]). +bgfact("Sri Lanka","LandBounderies",[]). +bgfact("Sri Lanka","NaturalResources",["limestone","graphite","mineral = +sands","gems","phosphates","clay"]). +bgfact("Sri Lanka","Population",["18129850"]). +bgfact("Sri Lanka","Capital",["Colombo"]). +bgfact("Sri = +Lanka","MemberOf",["AsDB","C","CCC","CP","ESCAP","FAO","G-24","G-77","GAT= +T","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO= +","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","NAM",= +"PCA","SAARC","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WI= +PO","WMO","WTO"]). +bgfact("Sri Lanka","ExportCommodities",["garments and = +textiles","teas","gems","petroleum products","coconuts","rubber","marine = +products","graphite"]). +bgfact("Sri = +Lanka","ExportPartners",["US","Germany","UK","Netherlands","Japan","Franc= +e","Singapore"]). +bgfact("Sri Lanka","ImportCommodities",["food and beverages","textiles = +and textile materials","petroleum and petroleum products","machinery = +and equipment"]). +bgfact("Sri = +Lanka","ImportPartners",["Japan","India","US","UK","Singapore","Germany",= +"Hong King","Taiwan","South Korea"]). +bgfact("Sri Lanka","Industries",["processing of = +rubber","tea","coconuts","clothing","cement","petroleum = +refining","textiles","tobacco"]). +bgfact("Sri = +Lanka","Agriculture",["grains","pulses","oilseeds","roots","tea","rubber"= +,"animal milk","eggs","hides","not self-sufficient in rice = +production"]). +bgfact("Sudan","LandBounderies",["Central African = +Republic","Chad","Egypt","Eritrea","Ethiopia","Kenya","Libya","Uganda","Z= +aire"]). +bgfact("Sudan","NaturalResources",["small reserves of petroleum","iron = +ore","copper","chromium ore","zinc","tungsten","mica","silver"]). +bgfact("Sudan","Population",["29419798"]). +bgfact("Sudan","Capital",["Khartoum"]). +bgfact("Sudan","MemberOf",["ABEDA","ACP","AfDB","AFESD","AL","AMF","CAEU"= +,"CCC","ECA","FAO","G-77","IAEA","IBRD","ICAO","IDA","IFAD","IFC","IGADD"= +,"ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU",= +"PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WFTU","WHO","WIPO","W= +MO","WTO"]). +bgfact("Sudan","ExportCommodities",["cotton","sesame","gum = +arabic","peanuts"]). +bgfact("Sudan","ExportPartners",["Western Europe","Saudi = +Arabia","Eastern Europe","Japan","US"]). +bgfact("Sudan","ImportCommodities",["foodstuffs","petroleum = +products","manubgfactured goods","machinery and equipment","medicines = +and chemicals","textiles"]). +bgfact("Sudan","ImportPartners",["Western Europe","Africa and = +Asia","US","Eastern Europe"]). +bgfact("Sudan","Industries",["cotton = +ginning","textiles","cement","edible oils","sugar","soap = +distilling","shoes","petroleum refining"]). +bgfact("Sudan","Agriculture",["major = +cotton","oilseeds","sorghum","millet","wheat","gum arabic","marginally = +self-sufficient in most foods"]). +bgfact("Suriname","LandBounderies",["Brazil","French Guiana","Guyana"]). +bgfact("Suriname","NaturalResources",["timber","hydropower = +potential","fish","shrimp","bauxite","iron = +ore","copper","platinum","gold"]). +bgfact("Suriname","Population",["422840"]). +bgfact("Suriname","Capital",["Paramaribo"]). +bgfact("Suriname","MemberOf",["ACP","CARICOM","ITU","LAES","LORCS","NAM",= +"OAS","OPANAL","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","W= +MO"]). +bgfact("Suriname","ExportCommodities",["alumina","aluminum","shrimp and = +fish","rice","bananas"]). +bgfact("Suriname","ExportPartners",["Norway","Netherlands","US","Japan","= +Brazil","UK"]). +bgfact("Suriname","ImportCommodities",["Capital = +equipment","petroleum","foodstuffs","cotton","consumer goods"]). +bgfact("Suriname","ImportPartners",["US","Netherlands","Trinidad and = +Tobago","Brazil"]). +bgfact("Suriname","Industries",["bauxite mining","alumina and aluminum = +production","lumbering","food processing","fishing"]). +bgfact("Suriname","Agriculture",["palm = +kernels","coconuts","plantains","peanuts","beef","self-sufficient in = +most foods"]). +bgfact("Svalbard","LandBounderies",[]). +bgfact("Svalbard","NaturalResources",["coal","copper","iron = +ore","phosphate","zinc","wildlife","fish"]). +bgfact("Svalbard","Population",["3018"]). +bgfact("Svalbard","Capital",["Longyearbyen"]). +bgfact("Svalbard","MemberOf",["none"]). +bgfact("Swaziland","LandBounderies",["Mozambique","South Africa"]). +bgfact("Swaziland","NaturalResources",["asbestos","coal","clay","cassiter= +ite","hydropower","forests","small gold and diamond deposits","quarry = +stone"]). +bgfact("Swaziland","Population",["936369"]). +bgfact("Swaziland","Capital",["Mbabane"]). +bgfact("Swaziland","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","G-77",= +"GATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","INTELSAT","I= +NTERPOL","IOC","ITU","LORCS","NAM","OAU","PCA","SACU","SADC","UN","UNCTAD= +","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). +bgfact("Swaziland","ExportCommodities",["sugar","edible = +concentrates","wood pulp","canned fruit","citrus"]). +bgfact("Swaziland","ExportPartners",["South Africa","EC = +countries","Canada"]). +bgfact("Swaziland","ImportCommodities",["motor = +vehicles","machinery","transport equipment","petroleum = +products","foodstuffs","chemicals"]). +bgfact("Swaziland","ImportPartners",["South = +Africa","Switzerland","UK"]). +bgfact("Swaziland","Industries",["mining","wood pulp","sugar"]). +bgfact("Swaziland","Agriculture",["sugarcane","cotton","maize","tobacco",= +"rice","citrus fruit","sorghum","peanuts","cattle","goats","not = +self-sufficient in grain"]). +bgfact("Sweden","LandBounderies",["Finland","Norway"]). +bgfact("Sweden","NaturalResources",["zinc","iron = +ore","lead","copper","silver","timber","uranium","hydropower = +potential"]). +bgfact("Sweden","Population",["8778461"]). +bgfact("Sweden","Capital",["Stockholm"]). +bgfact("Sweden","MemberOf",["AfDB","AG","NC","NEA","NIB","NSG","OECD","ON= +USAL","PCA","UN","UNAVEM = +II","UNCTAD","UNESCO","UNFICYP","UNHCR","UNIDO","UNIFIL","UNIKOM","UNMOGI= +P","UNOMIG","UNOMOZ","UNOSOM","UNPROFOR","UNTAC","UNTSO","UPU","WFTU","WH= +O","WIPO","WMO","ZC"]). +bgfact("Sweden","ExportCommodities",["machinery","motor vehicles","paper = +products","pulp and wood","iron and steel = +products","chemicals","petroleum and petroleum products"]). +bgfact("Sweden","ExportPartners",["EC"]). +bgfact("Sweden","ImportCommodities",["machinery","petroleum and = +petroleum products","chemicals","motor vehicles","foodstuffs","iron and = +steel","clothing"]). +bgfact("Sweden","ImportPartners",["EC"]). +bgfact("Sweden","Industries",["iron and steel","precision = +equipment","wood pulp and paper products","processed foods","motor = +vehicles"]). +bgfact("Sweden","Agriculture",["animal husbandry predominates","main = +grains","sugar beets","farming accounted for of GDP and of jobs in"]). +bgfact("Switzerland","LandBounderies",["Austria","France","Italy","Liecht= +enstein","Germany"]). +bgfact("Switzerland","NaturalResources",["hydropower = +potential","timber","salt"]). +bgfact("Switzerland","Population",["7040119"]). +bgfact("Switzerland","Capital",["Bern"]). +bgfact("Switzerland","MemberOf",["AfDB","AG","UNCTAD","UNESCO","UNHCR","U= +NIDO","UNOMIG","UNPROFOR","UNTSO","UPU","WCL","WHO","WIPO","WMO","WTO","Z= +C"]). +bgfact("Switzerland","ExportCommodities",["machinery and = +equipment","precision instruments","metal = +products","foodstuffs","textiles and clothing"]). +bgfact("Switzerland","ExportPartners",["Western Europe","US","Japan"]). +bgfact("Switzerland","ImportCommodities",["agricultural = +products","machinery and transportation = +equipment","chemicals","textiles","construction materials"]). +bgfact("Switzerland","ImportPartners",["Western Europe","US"]). +bgfact("Switzerland","Industries",["machinery","chemicals","watches","tex= +tiles","precision instruments"]). +bgfact("Switzerland","Agriculture",["must import fish","refined = +sugar","fats and oils","grains","eggs","fruits","vegetables","meat"]). +bgfact("Syria","LandBounderies",["Iraq","Israel","Jordan","Lebanon","Turk= +ey"]). +bgfact("Syria","NaturalResources",["petroleum","phosphates","chrome and = +manganese ores","asphalt","iron ore","rock salt","marble","gypsum"]). +bgfact("Syria","Population",["14886672"]). +bgfact("Syria","Capital",["Damascus"]). +bgfact("Syria","MemberOf",["ABEDA","AFESD","AL","AMF","CAEU","CCC","ESCWA= +","FAO","G-24","G-77","IAEA","IBRD","ICAO","ICC","IDA","IDB","IFAD","IFC"= +,"ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM",= +"OAPEC","OIC","UN","UNCTAD","UNESCO","UNIDO","UNRWA","UPU","WFTU","WHO","= +WMO","WTO"]). +bgfact("Syria","ExportCommodities",["petroleum","textiles","cotton","frui= +ts and vegetables"]). +bgfact("Syria","ExportPartners",["EC","former CEMA countries","Arab = +countries"]). +bgfact("Syria","ImportCommodities",["foodstuffs","metal = +products","machinery"]). +bgfact("Syria","ImportPartners",["EC","former CEMA countries","US and = +Canada"]). +bgfact("Syria","Industries",["textiles","food = +processing","beverages","tobacco","phosphate rock mining","petroleum"]). +bgfact("Syria","Agriculture",["animal = +beef","lamb","eggs","poultry","not self-sufficient in grain or = +livestock products"]). +bgfact("Taiwan","LandBounderies",[]). +bgfact("Taiwan","NaturalResources",["small deposits of coal","natural = +gas","limestone","marble"]). +bgfact("Taiwan","Population",["21298930"]). +bgfact("Taiwan","Capital",["Taipei"]). +bgfact("Taiwan","MemberOf",["suspended from IAEA in","but still allows = +IAEA controls over extensive atomic = +development","APEC","AsDB","BCIE","ICC","IOC","COCOM","WCL"]). +bgfact("Taiwan","ExportCommodities",["electrical machinery","electronic = +products","textiles","footwear","foodstuffs","plywood and wood = +products"]). +bgfact("Taiwan","ExportPartners",["US","Hong Kong","EC = +countries","Japan"]). +bgfact("Taiwan","ImportCommodities",["machinery and = +equipment","electronic products","chemicals","iron and = +steel","crude","foodstuffs"]). +bgfact("Taiwan","ImportPartners",["Japan","US","EC countries"]). +bgfact("Taiwan","Industries",["electronics","textiles","chemicals","cloth= +ing","food processing","plywood","sugar = +milling","cement","shipbuilding","petroleum refining"]). +bgfact("Taiwan","Agriculture",["major = +vegetables","rice","fruit","livestock - hogs","poultry","beef","not = +self-sufficient in wheat","soybeans","fish catch increasing","reached = +million metric tons in"]). +bgfact("Tajikistan","LandBounderies",["Afghanistan","China","Kyrgyzstan",= +"Uzbekistan"]). +bgfact("Tajikistan","NaturalResources",["significant hydropower = +potential","some petroleum","uranium","mercury","brown = +coal","lead","zinc","antimony","tungsten"]). +bgfact("Tajikistan","Population",["5995469"]). +bgfact("Tajikistan","Capital",["Dushanbe"]). +bgfact("Tajikistan","MemberOf",["CIS","CSCE","EBRD","ECO","ESCAP","IBRD",= +"IDA","IDB","IMF","INTELSAT","IOC","NACC","OIC","UN","UNCTAD","UNESCO","U= +NIDO","WHO","WMO"]). +bgfact("Tajikistan","ExportCommodities",["cotton","aluminum","fruits","ve= +getable oil","textiles"]). +bgfact("Tajikistan","ExportPartners",["Russia","Kazakhstan","Ukraine","Uz= +bekistan","Turkmenistan"]). +bgfact("Tajikistan","ImportCommodities",["fuel","chemicals","machinery = +and transport equipment","textiles","foodstuffs"]). +bgfact("Tajikistan","ImportPartners",["Russia","Uzbekistan","Kazakhstan"]= +). +bgfact("Tajikistan","Industries",["aluminum","zinc","lead","chemicals = +and fertilizers","cement","vegetable oil","metal-cutting machine = +tools","refrigerators and freezers"]). +bgfact("Tajikistan","Agriculture",["cotton","grain","fruits","grapes","ca= +ttle","sheep and goats"]). +bgfact("Tanzania","LandBounderies",["Burundi","Kenya","Malawi","Mozambiqu= +e","Rwanda","Uganda","Zambia"]). +bgfact("Tanzania","NaturalResources",["hydropower = +potential","tin","phosphates","iron = +ore","coal","diamonds","gemstones","gold","natural gas","nickel"]). +bgfact("Tanzania","Population",["27985660"]). +bgfact("Tanzania","Capital",["Dar es Salaam"]). +bgfact("Tanzania","MemberOf",["ACP","AfDB","C","CCC","EADB","ECA","FAO","= +FLS","G-6","G-77","GATT","IAEA","IBRD","ICAO","IDA","IFAD","IFC","ILO","I= +MF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","OAU","SA= +DC","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WHO","WIPO","WMO"= +,"WTO"]). +bgfact("Tanzania","ExportCommodities",["coffee","cotton","tobacco","tea",= +"cashew nuts","sisal"]). +bgfact("Tanzania","ExportPartners",["FRG","UK","Japan","Netherlands","Ken= +ya","Hong Kong","US"]). +bgfact("Tanzania","ImportCommodities",["manubgfactured goods","machinery = +and transportation equipment","cotton piece = +goods","crude","foodstuffs"]). +bgfact("Tanzania","ImportPartners",["FRG","UK","US","Japan","Italy","Denm= +ark"]). +bgfact("Tanzania","Industries",["primarily agricultural = +processing","diamond and gold mining","oil = +refinery","shoes","cement","textiles","wood products","fertilizer"]). +bgfact("Tanzania","Agriculture",["coffee","sisal","tea","cotton","food = +corn","wheat","cassava","bananas","fruits","small numbers of = +cattle","sheep","not self-sufficient in food grain production"]). +bgfact("Thailand","LandBounderies",["Burma","Cambodia","Laos","Malaysia"]= +). +bgfact("Thailand","NaturalResources",["tin","rubber","natural = +gas","tungsten","tantalum","timber","lead","fish","gypsum","lignite","flu= +orite"]). +bgfact("Thailand","Population",["59510471"]). +bgfact("Thailand","Capital",["Bangkok"]). +bgfact("Thailand","MemberOf",["APEC","AsDB","ASEAN","CCC","CP","ESCAP","F= +AO","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","= +IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","NAM","P= +CA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UNTAC","UPU","WCL","= +WFTU","WHO","WIPO","WMO"]). +bgfact("Thailand","ExportCommodities",["machinery and = +manubgfactures","agricultural products","fisheries products"]). +bgfact("Thailand","ExportPartners",["US","Japan","Singapore","Hong = +Kong","Germany","Netherlands","UK","Malaysia","France","China"]). +bgfact("Thailand","ImportCommodities",["Capital goods","intermediate = +goods and raw materials","consumer goods","oil"]). +bgfact("Thailand","ImportPartners",["Japan","US","Singapore","Taiwan","Ge= +rmany","South Korea","Malaysia","China","Hong Kong","UK"]). +bgfact("Thailand","Industries",["textiles and garments","agricultural = +processing","beverages","tobacco","cement","light = +manubgfacturing","electric appliances and components","integrated = +circuits","furniture","world's second-largest tungsten producer and = +third-largest tin producer"]). +bgfact("Thailand","Agriculture",["corn","sugarcane","coconuts","except = +for wheat","self-sufficient in food"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","LandBounderies",["Albania","Bulgaria","Greece","Serbia and = +Montenegro"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","NaturalResources",["chromium","lead","zinc","manganese","tung= +sten","nickel","low-grade iron ore","asbestos","sulphur","timber"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","Population",["2213785"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","Capital",["Skopje"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","MemberOf",["CE","ITU","UN","UNCTAD","UNESCO","UNIDO","UPU","W= +HO","WIPO","WMO"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","ExportCommodities",["manubgfactured goods","machinery and = +transport equipment","miscellaneous manubgfactured articles","raw = +materials","food"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","ExportPartners",["Germany","Greece","Albania"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","ImportCommodities",["fuels and lubricants","manubgfactured = +goods","machinery and transport equipment","food and live = +animals","chemicals","raw materials","miscellaneous manubgfactured = +articles","beverages and tobacco"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","ImportPartners",["Greece","Albania","Germany","Bulgaria"]). +bgfact("The Former Yugoslav Republic of Macedonia","Industries",["low = +levels of technology predominate","such as","produces basic liquid = +fuels","coal","metallic chromium","lead","zinc","light industry = +produces basic textiles","wood products"]). +bgfact("The Former Yugoslav Republic of = +Macedonia","Agriculture",["principal crops are = +rice","tobacco","wheat","corn","also grown are = +cotton","sesame","mulberry leaves","citrus fruit","The Former Yugoslav = +Republic of Macedonia is one of the seven legal cultivators of the = +opium poppy for the world pharmaceutical industry","agricultural = +production is highly labor intensive"]). +bgfact("Togo","LandBounderies",["Benin","Burkina","Ghana"]). +bgfact("Togo","NaturalResources",["phosphates","limestone","marble"]). +bgfact("Togo","Population",["4255090"]). +bgfact("Togo","Capital",["Lome"]). +bgfact("Togo","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWAS"= +,"Entente","FAO","FZ","G-77","GATT","IBRD","ICAO","ICC","ICFTU","IDA","IF= +AD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NA= +M","OAU","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WHO","WIPO","= +WMO","WTO"]). +bgfact("Togo","ExportCommodities",["phosphates","cotton","cocoa","coffee"= +]). +bgfact("Togo","ExportPartners",["EC","Africa","US"]). +bgfact("Togo","ImportCommodities",["machinery and equipment","consumer = +goods","food","chemical products"]). +bgfact("Togo","ImportPartners",["EC","Africa","US","Japan"]). +bgfact("Togo","Industries",["phosphate mining","agricultural = +processing","cement","handicrafts","textiles","beverages"]). +bgfact("Togo","Agriculture",["coffee","cocoa","yams","cassava","corn","be= +ans","rice","millet","annual fish catch of"]). +bgfact("Tokelau","LandBounderies",[]). +bgfact("Tokelau","NaturalResources",["negligible"]). +bgfact("Tokelau","Population",["1523"]). +bgfact("Tokelau","Capital",["none; each atoll has its own administrative = +center"]). +bgfact("Tokelau","MemberOf",["SPC","WHO"]). +bgfact("Tokelau","ExportCommodities",["stamps","copra","handicrafts"]). +bgfact("Tokelau","ExportPartners",["NZ"]). +bgfact("Tokelau","ImportCommodities",["foodstuffs","building = +materials","fuel"]). +bgfact("Tokelau","ImportPartners",["NZ"]). +bgfact("Tokelau","Industries",["small-scale enterprises for copra = +production","wood work","stamps","fishing"]). +bgfact("Tokelau","Agriculture",["coconuts","basic subsistence = +breadfruit","papaya","pigs","poultry","goats"]). +bgfact("Tonga","LandBounderies",[]). +bgfact("Tonga","NaturalResources",["fish","fertile soil"]). +bgfact("Tonga","Population",["104778"]). +bgfact("Tonga","Capital",["Nuku'alofa"]). +bgfact("Tonga","MemberOf",["ACP","AsDB","C","ESCAP","FAO","G-77","IBRD","= +ICAO","ICFTU","IDA","IFAD","IFC","IMF","INTELSAT","INTERPOL","IOC","ITU",= +"LORCS","SPARTECA","SPC","SPF","UNCTAD","UNESCO","UNIDO","UPU","WHO"]). +bgfact("Tonga","ExportCommodities",["vanilla","fish","root = +crops","coconut oil","squash"]). +bgfact("Tonga","ExportPartners",["Japan","US","Australia","NZ"]). +bgfact("Tonga","ImportCommodities",["food products","machinery and = +transport equipment","manubgfactures","fuels","chemicals"]). +bgfact("Tonga","ImportPartners",["NZ","Australia","US","Japan"]). +bgfact("Tonga","Industries",["tourism","fishing"]). +bgfact("Tonga","Agriculture",["dominated by coconut","copra","vanilla = +beans","cocoa","coffee","ginger","black pepper"]). +bgfact("Trinidad and Tobago","LandBounderies",[]). +bgfact("Trinidad and Tobago","NaturalResources",["petroleum","natural = +gas","asphalt"]). +bgfact("Trinidad and Tobago","Population",["1328282"]). +bgfact("Trinidad and Tobago","Capital",["Port-of-Spain"]). +bgfact("Trinidad and = +Tobago","MemberOf",["ACP","C","CARICOM","CCC","CDB","ECLAC","FAO","G-24",= +"G-77","GATT","IADB","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF"= +,"IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LAES","LORCS","NAM","OAS"= +,"OPANAL","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WIPO","WMO"]= +). +bgfact("Trinidad and Tobago","ExportCommodities",["petroleum and = +petroleum products","chemicals","steel = +products","fertilizer","sugar","cocoa","coffee","citrus","flowers"]). +bgfact("Trinidad and Tobago","ExportPartners",["US","CARICOM","Latin = +America","EC"]). +bgfact("Trinidad and = +Tobago","ImportCommodities",["machinery","transportation = +equipment","manubgfactured goods","food","live animals"]). +bgfact("Trinidad and Tobago","ImportPartners",["US","Venezuela","UK"]). +bgfact("Trinidad and = +Tobago","Industries",["petroleum","chemicals","tourism","food = +processing","cement","beverage","cotton textiles"]). +bgfact("Trinidad and Tobago","Agriculture",["major cocoa","sugarcane = +acreage is being shifted into rice","citrus","coffee","must import large = +share of food needs"]). +bgfact("Tromelin Island","LandBounderies",[]). +bgfact("Tromelin Island","NaturalResources",["fish"]). +bgfact("Tromelin Island","Capital",["none; administered by France from = +Reunion"]). +bgfact("Tunisia","LandBounderies",["Algeria","Libya"]). +bgfact("Tunisia","NaturalResources",["petroleum","phosphates","iron = +ore","lead","zinc","salt"]). +bgfact("Tunisia","Population",["8726562"]). +bgfact("Tunisia","Capital",["Tunis"]). +bgfact("Tunisia","MemberOf",["ABEDA","ACCT","AfDB","AFESD","AL","AMF","AM= +U","CCC","ECA","FAO","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","ID= +A","IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL",= +"IOC","ISO","ITU","LORCS","MINURSO","NAM","OAPEC","OAU","OIC","UN","UNCTA= +D","UNESCO","UNHCR","UNIDO","UNOSOM","UNPROFOR","UNTAC","UPU","WHO","WIPO= +","WMO","WTO"]). +bgfact("Tunisia","ExportCommodities",["hydrocarbons","agricultural = +products","phosphates and chemicals"]). +bgfact("Tunisia","ExportPartners",["EC countries","Middle = +East","Algeria","India","US"]). +bgfact("Tunisia","ImportCommodities",["industrial goods and = +equipment","hydrocarbons","food","consumer goods"]). +bgfact("Tunisia","ImportPartners",["EC countries","US","Middle = +East","Japan","Switzerland","Algeria"]). +bgfact("Tunisia","Industries",["petroleum","mining","tourism","textiles",= +"footwear","food","beverages"]). +bgfact("Tunisia","Agriculture",["export = +olives","dates","oranges","sugar beets","wine = +grapes","poultry","beef","not self-sufficient in food"]). +bgfact("Turkey","LandBounderies",["Armenia","Azerbaijan","Bulgaria","Geor= +gia","Greece","Iran","Iraq","Syria"]). +bgfact("Turkey","NaturalResources",["antimony","coal","chromium","mercury= +","copper","borate","sulphur","iron ore"]). +bgfact("Turkey","Population",["62153898"]). +bgfact("Turkey","Capital",["Ankara"]). +bgfact("Turkey","MemberOf",["AsDB","BIS","BSEC","CCC","CE","CERN","WFTU",= +"WHO","WIPO","WMO","WTO"]). +bgfact("Turkey","ExportCommodities",["manubgfactured = +products","foodstuffs","mining products"]). +bgfact("Turkey","ExportPartners",["EC countries","US","Russia","Saudi = +Arabia"]). +bgfact("Turkey","ImportCommodities",["manubgfactured = +products","fuels","foodstuffs"]). +bgfact("Turkey","ImportPartners",["EC countries","US","Saudi = +Arabia","Russia"]). +bgfact("Turkey","Industries",["textiles","food = +processing","mining","steel","petroleum","construction","lumber","paper"]= +). +bgfact("Turkey","Agriculture",["tobacco","cotton","grain","olives","sugar= + beets","pulses","citrus fruit","self-sufficient in food most years"]). +bgfact("Turkmenistan","LandBounderies",["Afghanistan","Iran","Kazakhstan"= +,"Uzbekistan"]). +bgfact("Turkmenistan","NaturalResources",["petroleum","natural = +gas","coal","sulphur","salt"]). +bgfact("Turkmenistan","Population",["3995122"]). +bgfact("Turkmenistan","Capital",["Ashgabat"]). +bgfact("Turkmenistan","MemberOf",["CIS","CSCE","EBRD","ECE","ECO","ESCAP"= +,"IBRD","ICAO","IDB","ILO","IMF","IMO","INTELSAT","IOC","ITU","NACC","OIC= +","UN","UNCTAD","UNESCO","UPU","WHO","WMO"]). +bgfact("Turkmenistan","ExportCommodities",["natural = +gas","cotton","petroleum products","textiles","carpets"]). +bgfact("Turkmenistan","ExportPartners",["Ukraine","Russia","Kazakhstan","= +Uzbekistan","Georgia","Eastern Europe","Turkey","Argentina"]). +bgfact("Turkmenistan","ImportCommodities",["machinery and parts","grain = +and food","plastics and rubber","consumer durables","textiles"]). +bgfact("Turkmenistan","ImportPartners",["Russia","Azerbaijan","Uzbekistan= +","Kazakhstan","Turkey"]). +bgfact("Turkmenistan","Industries",["natural gas","oil","petroleum = +products","textiles","food processing"]). +bgfact("Turkmenistan","Agriculture",["cotton","grain","animal = +husbandry"]). +bgfact("Turks and Caicos Islands","LandBounderies",[]). +bgfact("Turks and Caicos Islands","NaturalResources",["spiny = +lobster","conch"]). +bgfact("Turks and Caicos Islands","Population",["13552"]). +bgfact("Turks and Caicos Islands","Capital",["Grand Turk"]). +bgfact("Turks and Caicos Islands","MemberOf",["CARICOM"]). +bgfact("Turks and Caicos Islands","ExportCommodities",["lobster","dried = +and fresh conch","conch shells"]). +bgfact("Turks and Caicos Islands","ExportPartners",["US","UK"]). +bgfact("Turks and Caicos Islands","ImportCommodities",["food and = +beverages","tobacco","clothing","manubgfactures","construction = +materials"]). +bgfact("Turks and Caicos Islands","ImportPartners",["US","UK"]). +bgfact("Turks and Caicos = +Islands","Industries",["fishing","tourism","offshore financial = +services"]). +bgfact("Turks and Caicos Islands","Agriculture",["subsistence farming = +prevails","not self-sufficient in food"]). +bgfact("Tuvalu","LandBounderies",[]). +bgfact("Tuvalu","NaturalResources",["fish"]). +bgfact("Tuvalu","Population",["9831"]). +bgfact("Tuvalu","Capital",["Funafuti"]). +bgfact("Tuvalu","MemberOf",["ACP","AsDB","C","ITU","SPARTECA","SPC","SPF"= +,"UNESCO","UPU","WHO"]). +bgfact("Tuvalu","ExportCommodities",["copra"]). +bgfact("Tuvalu","ExportPartners",["Fiji","Australia","NZ"]). +bgfact("Tuvalu","ImportCommodities",["food","animals","mineral = +fuels","machinery","manubgfactured goods"]). +bgfact("Tuvalu","ImportPartners",["Fiji","Australia","NZ"]). +bgfact("Tuvalu","Industries",["fishing","tourism","copra"]). +bgfact("Tuvalu","Agriculture",["coconuts and fish"]). +bgfact("Uganda","LandBounderies",["Kenya","Rwanda","Sudan","Tanzania","Za= +ire"]). +bgfact("Uganda","NaturalResources",["copper","cobalt","limestone","salt"]= +). +bgfact("Uganda","Population",["19121934"]). +bgfact("Uganda","Capital",["Kampala"]). +bgfact("Uganda","MemberOf",["ACP","AfDB","C","CCC","EADB","ECA","FAO","G-= +77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","IFC","IGADD",= +"ILO","IMF","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","NAM","= +OAU","OIC","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNOSOM","UPU","W= +HO","WIPO","WMO","WTO"]). +bgfact("Uganda","ExportCommodities",["coffee","cotton","tea"]). +bgfact("Uganda","ExportPartners",["US","UK","France","Spain"]). +bgfact("Uganda","ImportCommodities",["petroleum = +products","machinery","cotton piece goods","metals","transportation = +equipment","food"]). +bgfact("Uganda","ImportPartners",["Kenya","UK","Italy"]). +bgfact("Uganda","Industries",["sugar","brewing","tobacco","cotton = +textiles","cement"]). +bgfact("Uganda","Agriculture",["coffee","tea","cotton","food = +cassava","potatoes","corn","millet","livestock beef","goat = +meat","milk","self-sufficient in food"]). +bgfact("Ukraine","LandBounderies",["Belarus","Hungary","Moldova","Poland"= +,"Romania","Russia","Slovakia"]). +bgfact("Ukraine","NaturalResources",["iron = +ore","coal","manganese","natural = +gas","oil","salt","sulphur","graphite","titanium","magnesium","kaolin","n= +ickel","mercury","timber"]). +bgfact("Ukraine","Population",["51846958"]). +bgfact("Ukraine","Capital",["Kiev"]). +bgfact("Ukraine","MemberOf",["BSEC","CBSS","INTERPOL","IOC","ITU","NACC",= +"PCA","UN","UNCTAD","UNESCO","UNIDO","UNPROFOR","UPU","WHO","WIPO","WMO"]= +). +bgfact("Ukraine","ExportCommodities",["coal","electric power","ferrous = +and nonferrous metals","chemicals","machinery and transport = +equipment","grain","meat"]). +bgfact("Ukraine","ExportPartners",["FSU = +countries","Germany","China","Austria"]). +bgfact("Ukraine","ImportCommodities",["machinery and = +parts","transportation equipment","chemicals","textiles"]). +bgfact("Ukraine","ImportPartners",["FSU = +countries","Germany","China","Austria"]). +bgfact("Ukraine","Industries",["coal","electric power","ferrous and = +nonferrous metals","machinery and transport = +equipment","chemicals","food-processing"]). +bgfact("Ukraine","Agriculture",["grain","vegetables","meat","milk","sugar= + beets"]). +bgfact("United Arab Emirates","LandBounderies",["Oman","Saudi Arabia"]). +bgfact("United Arab Emirates","NaturalResources",["petroleum","natural = +gas"]). +bgfact("United Arab Emirates","Population",["2791141"]). +bgfact("United Arab Emirates","Capital",["Abu Dhabi"]). +bgfact("United Arab = +Emirates","MemberOf",["ABEDA","AFESD","AL","AMF","CAEU","CCC","ESCWA","FA= +O","G-77","GATT","GCC","IAEA","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO= +","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS",= +"NAM","OAPEC","OIC","OPEC","UN","UNCTAD","UNESCO","UNIDO","UNOSOM","UPU",= +"WHO","WIPO","WMO","WTO"]). +bgfact("United Arab Emirates","ExportCommodities",["crude","natural = +gas","re-exports","dried fish","dates"]). +bgfact("United Arab = +Emirates","ExportPartners",["Japan","Singapore","Korea","Iran","India"]).= + +bgfact("United Arab Emirates","ImportCommodities",["manubgfactured = +goods","machinery and transport equipment","food"]). +bgfact("United Arab = +Emirates","ImportPartners",["Japan","UK","US","Germany"]). +bgfact("United Arab = +Emirates","Industries",["petroleum","fishing","petrochemicals","construct= +ion materials","some boat building","handicrafts","pearling"]). +bgfact("United Arab Emirates","Agriculture",["food = +vegetables","watermelons","poultry","eggs","dairy","only self-sufficient = +in food"]). +bgfact("United Kingdom","LandBounderies",["Ireland"]). +bgfact("United Kingdom","NaturalResources",["coal","petroleum","natural = +gas","tin","limestone","iron = +ore","salt","clay","chalk","gypsum","lead","silica"]). +bgfact("United Kingdom","Population",["58135110"]). +bgfact("United Kingdom","Capital",["London"]). +bgfact("United = +Kingdom","MemberOf",["AfDB","AG","ISO","ITU","LORCS","MINURSO","MTRC","NA= +CC","NATO","NEA","NSG","OECD","PCA","SPC","UN","UNCTAD","UNFICYP","UNHCR"= +,"UNIDO","UNIKOM","UNPROFOR","UNRWA","UN Security Council","UNTAC","UN = +Trusteeship Council","UPU","WCL","WEU","WHO","WIPO","WMO","ZC"]). +bgfact("United Kingdom","ExportCommodities",["manubgfactured = +goods","machinery","fuels","chemicals","semifinished goods","transport = +equipment"]). +bgfact("United Kingdom","ExportPartners",["EC countries","US"]). +bgfact("United Kingdom","ImportCommodities",["manubgfactured = +goods","machinery","semifinished goods","foodstuffs","consumer goods"]). +bgfact("United Kingdom","ImportPartners",["EC countries","US"]). +bgfact("United Kingdom","Industries",["production machinery including = +machine tools","electric power equipment","equipment for the automation = +of production","railroad equipment","shipbuilding","aircraft","motor = +vehicles and parts","electronics and communications = +equipment","metals","chemicals","coal","petroleum","paper and paper = +products","food processing","textiles","clothing"]). +bgfact("United Kingdom","Agriculture",["about self-sufficient in food = +and feed needs"]). +bgfact("United States","LandBounderies",["Canada","Mexico"]). +bgfact("United = +States","NaturalResources",["coal","copper","lead","molybdenum","phosphat= +es","uranium","bauxite","gold","iron","mercury","nickel","potash","silver= +","tungsten","zinc","petroleum","natural gas","timber"]). +bgfact("United States","Population",["260713585"]). +bgfact("United States","Capital",["Washington, DC"]). +bgfact("United = +States","MemberOf",["AfDB","AG","ANZUS","APEC","AsDB","Australian = +Group","BIS","CCC","COCOM","CP","CSCE","EBRD","ECE","ECLAC","FAO","ESCAP"= +,"G-2","G-5","G-7","G-8","G-10","GATT","IADB","IAEA","IBRD","ICAO","ICC",= +"ICFTU","IDA","IEA","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT",= +"INTERPOL","IOC","IOM","ISO","ITU","LORCS","MINURSO","MTCR","NACC","NATO"= +,"NEA","NSG","OAS","OECD","PCA","SPC","UN","UNCTAD","UNHCR","UNIDO","UNIK= +OM","UNOSOM","UNRWA","UN Security Council","UNTAC","UN Trusteeship = +Council","UNTSO","UPU","WCL","WHO","WIPO","WMO","WTO","ZC"]). +bgfact("United States","ExportCommodities",["Capital = +goods","automobiles","industrial supplies and raw materials","consumer = +goods","agricultural products"]). +bgfact("United States","ExportPartners",["Western = +Europe","Canada","Japan"]). +bgfact("United States","ImportCommodities",["crude and refined petroleum = +products","machinery","automobiles","consumer goods","industrial raw = +materials","food and beverages"]). +bgfact("United States","ImportPartners",["Canada","Western = +Europe","Japan"]). +bgfact("United States","Industries",["leading industrial power in the = +world","petroleum","steel","motor = +vehicles","aerospace","telecommunications","chemicals","electronics","foo= +d processing","consumer goods","lumber","mining"]). +bgfact("United States","Agriculture",["fish catch of million metric = +tons"]). +bgfact("Uruguay","LandBounderies",["Argentina","Brazil"]). +bgfact("Uruguay","NaturalResources",["soil","hydropower = +potential","minor minerals"]). +bgfact("Uruguay","Population",["3198910"]). +bgfact("Uruguay","Capital",["Montevideo"]). +bgfact("Uruguay","MemberOf",["AG","OAS","OPANAL","PCA","RG","UN","UNCTAD"= +,"UNESCO","UNIDO","UNIKOM","UNMOGIP","UNOMOZ","UNTAC","UPU","WCL","WFTU",= +"WHO","WIPO","WMO","WTO"]). +bgfact("Uruguay","ExportCommodities",["wool and textile = +manubgfactures","leather","rice"]). +bgfact("Uruguay","ExportPartners",["Brazil","Argentina","US","China","Ita= +ly"]). +bgfact("Uruguay","ImportCommodities",["machinery and = +equipment","vehicles","chemicals","minerals","plastics"]). +bgfact("Uruguay","ImportPartners",["Brazil","Argentina","US","Nigeria"]).= + +bgfact("Uruguay","Industries",["meat processing","wool and = +hides","sugar","textiles","footwear","leather = +apparel","tires","cement","fishing","petroleum refining","wine"]). +bgfact("Uruguay","Agriculture",["wheat","rice","corn","self-sufficient = +in most basic foodstuffs"]). +bgfact("Uzbekistan","LandBounderies",["Afghanistan","Kazakhstan","Kyrgyzs= +tan","Tajikistan","Turkmenistan"]). +bgfact("Uzbekistan","NaturalResources",["natural = +gas","petroleum","coal","gold","uranium","silver","copper","lead and = +zinc","tungsten","molybdenum"]). +bgfact("Uzbekistan","Population",["22608866"]). +bgfact("Uzbekistan","Capital",["Tashkent"]). +bgfact("Uzbekistan","MemberOf",["CCC","CIS","CSCE","EBRD","ECE","ECO","ES= +CAP","IBRD","ICAO","IDA","IFC","ILO","IMF","IOC","ITU","NACC","NAM","UN",= +"UNCTAD","WHO","WMO"]). +bgfact("Uzbekistan","ExportCommodities",["cotton","gold","natural = +gas","mineral fertilizers","ferrous metals","textiles","food = +products"]). +bgfact("Uzbekistan","ExportPartners",["Russia","Ukraine","Eastern = +Europe","US"]). +bgfact("Uzbekistan","ImportCommodities",["grain","machinery and = +parts","consumer durables"]). +bgfact("Uzbekistan","ImportPartners",["Czech Republic"]). +bgfact("Uzbekistan","Industries",["textiles","food processing","machine = +building","metallurgy","natural gas"]). +bgfact("Uzbekistan","Agriculture",["livestock","cotton","vegetables","fru= +its","grain"]). +bgfact("Vanuatu","LandBounderies",[]). +bgfact("Vanuatu","NaturalResources",["manganese","hardwood = +forests","fish"]). +bgfact("Vanuatu","Population",["169776"]). +bgfact("Vanuatu","Capital",["Port-Vila"]). +bgfact("Vanuatu","MemberOf",["ACCT","ACP","AsDB","C","ESCAP","FAO","G-77"= +,"IBRD","ICAO","IDA","IFC","IMF","IMO","INTELSAT","IOC","ITU","NAM","SPAR= +TECA","SPC","SPF","UN","UNCTAD","UNIDO","UPU","WHO","WMO"]). +bgfact("Vanuatu","ExportCommodities",["copra","beef","cocoa","timber","co= +ffee"]). +bgfact("Vanuatu","ExportPartners",["Netherlands","Japan","France","New = +Caledonia","Belgium"]). +bgfact("Vanuatu","ImportCommodities",["machines and vehicles","food and = +beverages","basic manubgfactures","raw materials and = +fuels","chemicals"]). +bgfact("Vanuatu","ImportPartners",["Australia","Japan","NZ","France","Fij= +i"]). +bgfact("Vanuatu","Industries",["food and fish freezing","wood = +processing","meat canning"]). +bgfact("Vanuatu","Agriculture",["export = +coconuts","cocoa","coffee","subsistence = +taro","yams","coconuts","fruits","vegetables"]). +bgfact("Venezuela","LandBounderies",["Brazil","Colombia","Guyana"]). +bgfact("Venezuela","NaturalResources",["petroleum","natural gas","iron = +ore","gold","bauxite","hydropower","diamonds"]). +bgfact("Venezuela","Population",["20562405"]). +bgfact("Venezuela","Capital",["Caracas"]). +bgfact("Venezuela","MemberOf",["AG","BCIE","CARICOM","CDB","CG","ECLAC","= +FAO","G-3","G-11","G-15","G-19","G-24","G-77","GATT","IADB","IAEA","IBRD"= +,"ICAO","ICC","ICFTU","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL= +","IOC","IOM","ISO","ITU","LAES","LAIA","LORCS","MINURSO","NAM","OAS","ON= +USAL","OPANAL","OPEC","PCA","RG","UN","UNCTAD","UNESCO","UNHCR","UNIDO","= +UNIKOM","UNPROFOR","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Venezuela","ExportCommodities",["petroleum","bauxite and = +aluminum","steel","chemicals","agricultural products","basic = +manubgfactures"]). +bgfact("Venezuela","ExportPartners",["US and Puerto = +Rico","Japan","Netherlands","Italy"]). +bgfact("Venezuela","ImportCommodities",["raw materials","machinery and = +equipment","transport equipment","construction materials"]). +bgfact("Venezuela","ImportPartners",["US","Germany","Japan","Netherlands"= +,"Canada"]). +bgfact("Venezuela","Industries",["petroleum","iron-ore = +mining","construction materials","food = +processing","textiles","steel","aluminum","motor vehicle assembly"]). +bgfact("Venezuela","Agriculture",["corn","sorghum","sugarcane","rice","ba= +nanas","vegetables","coffee","beef","pork","milk","eggs"]). +bgfact("Vietnam","LandBounderies",["Cambodia","China","Laos"]). +bgfact("Vietnam","NaturalResources",["phosphates","coal","manganese","bau= +xite","chromate","offshore oil deposits","forests"]). +bgfact("Vietnam","Population",["73103898"]). +bgfact("Vietnam","Capital",["Hanoi"]). +bgfact("Vietnam","MemberOf",["ACCT","AsDB","ASEAN","ISO","ITU","LORCS","N= +AM","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO",= +"WTO"]). +bgfact("Vietnam","ExportCommodities",["petroleum","rice","agricultural = +products","marine products","coffee"]). +bgfact("Vietnam","ExportPartners",["Japan","Hong = +Kong","Thailand","Germany","Indonesia"]). +bgfact("Vietnam","ImportCommodities",["petroleum products","steel = +products","railroad equipment","chemicals","medicines","raw = +cotton","fertilizer","grain"]). +bgfact("Vietnam","ImportPartners",["Hong = +Kong","Japan","Indonesia","South Korea","Taiwan"]). +bgfact("Vietnam","Industries",["food processing","textiles","machine = +building","mining","cement","chemical = +fertilizer","glass","tires","oil"]). +bgfact("Vietnam","Agriculture",["paddy rice","corn","commercial = +crops"]). +bgfact("Virgin Islands","LandBounderies",[]). +bgfact("Virgin Islands","NaturalResources",["sun","sand","sea","surf"]). +bgfact("Virgin Islands","Population",["97564"]). +bgfact("Virgin Islands","Capital",["Charlotte Amalie"]). +bgfact("Virgin Islands","MemberOf",["ECLAC","IOC"]). +bgfact("Virgin Islands","ExportCommodities",["refined petroleum = +products"]). +bgfact("Virgin Islands","ExportPartners",["US","Puerto Rico"]). +bgfact("Virgin = +Islands","ImportCommodities",["crude","foodstuffs","consumer = +goods","building materials"]). +bgfact("Virgin Islands","ImportPartners",["US","Puerto Rico"]). +bgfact("Virgin Islands","Industries",["tourism","petroleum = +refining","watch assembly","rum = +distilling","construction","pharmaceuticals","textiles","electronics"]). +bgfact("Virgin Islands","Agriculture",["truck gardens","food = +crops","fruit","sorghum","Senepol cattle"]). +bgfact("Wake Island","LandBounderies",[]). +bgfact("Wake Island","NaturalResources",["none"]). +bgfact("Wake Island","Population",["302"]). +bgfact("Wake Island","Capital",["none; administered from Washington, = +DC"]). +bgfact("Wallis and Futuna","LandBounderies",[]). +bgfact("Wallis and Futuna","NaturalResources",["negligible"]). +bgfact("Wallis and Futuna","Population",["14338"]). +bgfact("Wallis and Futuna","Capital",["Mata-Utu"]). +bgfact("Wallis and Futuna","MemberOf",["FZ","SPC"]). +bgfact("Wallis and Futuna","ExportCommodities",["copra","handicrafts"]). +bgfact("Wallis and Futuna","ExportPartners",["NA"]). +bgfact("Wallis and = +Futuna","ImportCommodities",["foodstuffs","manubgfactured = +goods","transportation equipment","fuel"]). +bgfact("Wallis and Futuna","ImportPartners",["France","Australia","New = +Zealand"]). +bgfact("Wallis and = +Futuna","Industries",["copra","handicrafts","fishing","lumber"]). +bgfact("Wallis and Futuna","Agriculture",["dominated by coconut = +production","with subsistence crops of yams","taro","bananas"]). +bgfact("West Bank","LandBounderies",["Israel","Jordan"]). +bgfact("West Bank","NaturalResources",["negligible"]). +bgfact("West Bank","Population",["1443790"]). +bgfact("West Bank","ExportCommodities",["olives","fruit","vegetables"]). +bgfact("West Bank","ExportPartners",["Jordan","Israel"]). +bgfact("West Bank","ImportCommodities",["food","consumer = +goods","construction materials"]). +bgfact("West Bank","ImportPartners",["Jordan","Israel"]). +bgfact("West Bank","Industries",[]). +bgfact("West Bank","Agriculture",["olives","vegetables","beef"]). +bgfact("Western = +Sahara","LandBounderies",["Algeria","Mauritania","Morocco"]). +bgfact("Western Sahara","NaturalResources",["phosphates","iron ore"]). +bgfact("Western Sahara","Population",["211877"]). +bgfact("Western Sahara","Capital",["none"]). +bgfact("Western Sahara","MemberOf",["none"]). +bgfact("Western Sahara","ExportCommodities",["phosphates"]). +bgfact("Western Sahara","ExportPartners",["Morocco claims and = +administers Western Sahara","so trade partners are included in overall = +Moroccan accounts"]). +bgfact("Western Sahara","ImportCommodities",["fuel for fishing = +fleet","foodstuffs"]). +bgfact("Western Sahara","ImportPartners",["Morocco claims and = +administers Western Sahara","so trade partners are included in overall = +Moroccan accounts"]). +bgfact("Western Sahara","Industries",["phosphate = +mining","fishing","handicrafts"]). +bgfact("Western Sahara","Agriculture",["camels","sheep","economy exists = +largely for the garrison forces"]). +bgfact("Western Samoa","LandBounderies",[]). +bgfact("Western Samoa","NaturalResources",["hardwood forests","fish"]). +bgfact("Western Samoa","Population",["204447"]). +bgfact("Western Samoa","Capital",["Apia"]). +bgfact("Western = +Samoa","MemberOf",["ACP","AsDB","C","ESCAP","FAO","G-77","IBRD","ICFTU","= +IDA","IFAD","IFC","IMF","INTELSAT","IOC","ITU","LORCS","SPARTECA","SPC","= +SPF","UN","UNCTAD","UNESCO","UPU","WHO"]). +bgfact("Western Samoa","ExportCommodities",["coconut oil and = +cream","taro","copra","cocoa"]). +bgfact("Western Samoa","ExportPartners",["New Zealand","American = +Samoa","Germany","Australia"]). +bgfact("Western Samoa","ImportCommodities",["intermediate = +goods","food","Capital goods"]). +bgfact("Western Samoa","ImportPartners",["New = +Zealand","Australia","Japan","Fiji"]). +bgfact("Western Samoa","Industries",["timber","tourism","food = +processing","fishing"]). +bgfact("Western Samoa","Agriculture",["coconuts","fruit"]). +bgfact("Yemen","LandBounderies",["Oman","Saudi Arabia"]). +bgfact("Yemen","NaturalResources",["petroleum","fish","rock = +salt","marble","small deposits of coal","gold","lead","nickel","fertile = +soil in west"]). +bgfact("Yemen","Population",["11105202"]). +bgfact("Yemen","Capital",["Sanaa"]). +bgfact("Yemen","MemberOf",["ACC","AFESD","AL","AMF","CAEU","ESCWA","FAO",= +"G-77","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IMO","INTELSAT= +","INTERPOL","IOC","ITU","LORCS","NAM","OIC","UN","UNCTAD","UNESCO","UNID= +O","UPU","WFTU","WHO","WIPO","WMO","WTO"]). +bgfact("Yemen","ExportCommodities",["crude","cotton","coffee","hides","ve= +getables","dried and salted fish"]). +bgfact("Yemen","ExportPartners",["Italy","US","Jordan"]). +bgfact("Yemen","ImportCommodities",["petroleum = +products","sugar","grain","flour","cement","machinery","chemicals"]). +bgfact("Yemen","ImportPartners",["UAE","Japan","Saudi = +Arabia","Kuwait","US"]). +bgfact("Yemen","Industries",["cement"]). +bgfact("Yemen","Agriculture",["grain","fruits","vegetables","qat","coffee= +","cotton","dairy","poultry","meat","not self-sufficient in grain"]). +bgfact("Zaire","LandBounderies",["Angola","Burundi","Central African = +Republic","Congo","Rwanda","Sudan","Uganda","Zambia"]). +bgfact("Zaire","NaturalResources",["cobalt","copper","cadmium","petroleum= +","industrial and gem = +diamonds","gold","silver","zinc","manganese","tin","germanium","uranium",= +"radium","bauxite","iron ore","coal","hydropower potential"]). +bgfact("Zaire","Population",["42684091"]). +bgfact("Zaire","Capital",["Kinshasa"]). +bgfact("Zaire","MemberOf",["ACCT","ACP","AfDB","CCC","CEEAC","CEPGL","ECA= +","FAO","G-19","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","IDA","IFA= +D","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM= +","OAU","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WFTU","= +WHO","WIPO","WMO","WTO"]). +bgfact("Zaire","ExportCommodities",["copper","coffee","diamonds","cobalt"= +,"crude"]). +bgfact("Zaire","ExportPartners",["US","Belgium","France","Germany","Italy= +","UK","Japan","South Africa"]). +bgfact("Zaire","ImportCommodities",["consumer = +goods","foodstuffs","transport equipment","fuels"]). +bgfact("Zaire","ImportPartners",["South = +Africa","US","Belgium","France","Germany","Italy","Japan","UK"]). +bgfact("Zaire","Industries",["mining","mineral processing","consumer = +products","processed foods and beverages","cement","diamonds"]). +bgfact("Zaire","Agriculture",["coffee","palm oil","rubber","food = +cassava","bananas","root crops","corn"]). +bgfact("Zambia","LandBounderies",["Angola","Malawi","Mozambique","Namibia= +","Tanzania","Zaire","Zimbabwe"]). +bgfact("Zambia","NaturalResources",["copper","cobalt","zinc","lead","coal= +","emeralds","gold","silver","uranium","hydropower potential"]). +bgfact("Zambia","Population",["9188190"]). +bgfact("Zambia","Capital",["Lusaka"]). +bgfact("Zambia","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","FLS","G-1= +9","G-77","GATT","IAEA","IBRD","ICAO","IDA","IFAD","IFC","IFTU","ILO","IM= +F","INTELSAT","INTERPOL","IOC","IOM","ITU","LORCS","NAM","OAU","SADC","UN= +","UNCTAD","UNESCO","UNIDO","UNOMOZ","UNOSOM","UPU","WCL","WHO","WIPO","W= +MO","WTO"]). +bgfact("Zambia","ExportCommodities",["copper","zinc","cobalt","lead","tob= +acco"]). +bgfact("Zambia","ExportPartners",["EC countries","Japan","South = +Africa","US","India"]). +bgfact("Zambia","ImportCommodities",["machinery","transportation = +equipment","foodstuffs","fuels","manubgfactures"]). +bgfact("Zambia","ImportPartners",["EC countries","Japan","Saudi = +Arabia","South Africa","US"]). +bgfact("Zambia","Industries",["copper mining and = +processing","construction","foodstuffs","beverages","chemicals","textiles= +"]). +bgfact("Zambia","Agriculture",["corn","sorghum","rice","peanuts","sunflow= +er","tobacco","cotton","sugarcane","cattle","goats","beef","eggs"]). +bgfact("Zimbabwe","LandBounderies",["Botswana","Mozambique","South = +Africa","Zambia"]). +bgfact("Zimbabwe","NaturalResources",["coal","chromium = +ore","asbestos","gold","nickel","copper","iron = +ore","vanadium","lithium","tin","platinum group metals"]). +bgfact("Zimbabwe","Population",["10975078"]). +bgfact("Zimbabwe","Capital",["Harare"]). +bgfact("Zimbabwe","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","FLS","G= +-15","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO",= +"IMF","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","NAM","OAU","= +PCA","SADC","UN","UNAVEM = +II","UNCTAD","UNESCO","UNIDO","UNOMUR","UNOSOM","UPU","WCL","WHO","WIPO",= +"WMO","WTO"]). +bgfact("Zimbabwe","ExportCommodities",["agricultural"]). +bgfact("Zimbabwe","ExportPartners",["UK","Germany","South = +Africa","Japan","US"]). +bgfact("Zimbabwe","ImportCommodities",["machinery and transportation = +equipment","chemicals","fuels"]). +bgfact("Zimbabwe","ImportPartners",["South = +Africa","UK","Germany","US","Japan"]). +bgfact("Zimbabwe","Industries",["mining","steel","clothing and = +footwear","chemicals","foodstuffs","fertilizer","beverage","transportatio= +n equipment","wood products"]). +bgfact("Zimbabwe","Agriculture",["of land area divided = +into","corn","cotton","tobacco","wheat","coffee","sugarcane","livestock = +- cattle","sheep","goats","self-sufficient in food"]). + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/LEWIS.DTD clucene-core-2.3.3.4/src/test/data/reuters-21578/LEWIS.DTD --- clucene-core-0.9.21b/src/test/data/reuters-21578/LEWIS.DTD 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/LEWIS.DTD 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/README.TXT clucene-core-2.3.3.4/src/test/data/reuters-21578/README.TXT --- clucene-core-0.9.21b/src/test/data/reuters-21578/README.TXT 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/README.TXT 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,816 @@ + + Reuters-21578 text categorization test collection + Distribution 1.0 + README file (v 1.2) + 26 September 1997 + + David D. Lewis + AT&T Labs - Research + lewis@research.att.com + +I. Introduction + + This README describes Distribution 1.0 of the Reuters-21578 text +categorization test collection, a resource for research in information +retrieval, machine learning, and other corpus-based research. + + +II. Copyright & Notification + + The copyright for the text of newswire articles and Reuters +annotations in the Reuters-21578 collection resides with Reuters Ltd. +Reuters Ltd. and Carnegie Group, Inc. have agreed to allow the free +distribution of this data *for research purposes only*. + If you publish results based on this data set, please acknowledge +its use, refer to the data set by the name "Reuters-21578, +Distribution 1.0", and inform your readers of the current location of +the data set (see "Availability & Questions"). + + +III. Availability & Questions + + The Reuters-21578, Distribution 1.0 test collection is available +from David D. Lewis' professional home page, currently: + http://www.research.att.com/~lewis + +Besides this README file, the collection consists of 22 data files, an +SGML DTD file describing the data file format, and six files +describing the categories used to index the data. (See Sections VI +and VII for more details.) Some additional files, which are not part +of the collection but have been contributed by other researchers as +useful resources are also included. All files are available +uncompressed, and in addition a single gzipped Unix tar archive of the +entire distribution is available as reuters21578.tar.gz. + + The text categorization mailing list, DDLBETA, is a good place to +send questions about this collection and other text categorization +issues. You may join the list by writing David Lewis at +lewis@research.att.com. + + +IV. History & Acknowledgements + + The documents in the Reuters-21578 collection appeared on the +Reuters newswire in 1987. The documents were assembled and indexed +with categories by personnel from Reuters Ltd. (Sam Dobbins, Mike +Topliss, Steve Weinstein) and Carnegie Group, Inc. (Peggy Andersen, +Monica Cellio, Phil Hayes, Laura Knecht, Irene Nirenburg) in 1987. + +In 1990, the documents were made available by Reuters and CGI for +research purposes to the Information Retrieval Laboratory (W. Bruce +Croft, Director) of the Computer and Information Science Department at +the University of Massachusetts at Amherst. Formatting of the +documents and production of associated data files was done in 1990 by +David D. Lewis and Stephen Harding at the Information Retrieval +Laboratory. + +Further formatting and data file production was done in 1991 and 1992 +by David D. Lewis and Peter Shoemaker at the Center for Information +and Language Studies, University of Chicago. This version of the data +was made available for anonymous FTP as "Reuters-22173, Distribution +1.0" in January 1993. From 1993 through 1996, Distribution 1.0 was +hosted at a succession of FTP sites maintained by the Center for +Intelligent Information Retrieval (W. Bruce Croft, Director) of the +Computer Science Department at the University of Massachusetts at +Amherst. + +At the ACM SIGIR '96 conference in August, 1996 a group of text +categorization researchers discussed how published results on +Reuters-22173 could be made more comparable across studies. It was +decided that a new version of collection should be produced with less +ambiguous formatting, and including documentation carefully spelling +out standard methods of using the collection. The opportunity would +also be used to correct a variety of typographical and other errors in +the categorization and formatting of the collection. + +Steve Finch and David D. Lewis did this cleanup of the collection +September through November of 1996, relying heavily on Finch's +SGML-tagged version of the collection from an earlier study. One +result of the re-examination of the collection was the removal of 595 +documents which were exact duplicates (based on identity of timestamps +down to the second) of other documents in the collection. The new +collection therefore has only 21,578 documents, and thus is called the +Reuters-21578 collection. This README describes version 1.0 of this +new collection, which we refer to as "Reuters-21578, Distribution +1.0". + +In preparing the collection and documentation we have benefited from +discussions with Eric Brown, William Cohen, Fred Damerau, Yoram +Singer, Amit Singhal, and Yiming Yang, among many others. + +We thank all the people and organizations listed above for their +efforts and support, without which this collection would not exist. + +A variety of other changes were also made in going from Reuters-22173 +to Reuters-21578: + + 1. Documents were marked up with SGML tags, and a corresponding +SGML DTD was produced, so that the boundaries of important sections of +documents (e.g. category fields) are unambiguous. + 2. The set of categories that are legal for each of the five +controlled vocabulary fields was specified. All category names not +legal for a field were corrected to a legal category, moved to their +appropriate field, or removed, as appropriate. + 3. Documents were given new ID numbers, in chronological order, and +are collected 1000 to a file in order by ID (and therefore in order +chronologically). + + +V. What is a Text Categorization Test Collection and Who Cares? + + *Text categorization* is the task of deciding whether a piece of +text belongs to any of a set of prespecified categories. It is a +generic text processing task useful in indexing documents for later +retrieval, as a stage in natural language processing systems, for +content analysis, and in many other roles [LEWIS94d]. + + The use of standard, widely distributed test collections has been a +considerable aid in the development of algorithms for the related task +of *text retrieval* (finding documents that satisfy a particular +user's information need, usually expressed in an textual request). +Text retrieval test collections have allowed the comparison of +algorithms developed by a variety of researchers around the world. +(For more on text retrieval test collections see SPARCKJONES76.) + + Standard test collections have been lacking, however, for text +categorization. Few data sets have been used by more than one +researcher, making results hard to compare. The Reuters-22173 test +collection has been used in a number of published studies since it was +made available, and we believe that the Reuters-21578 collection will +be even more valuable. + + The collection may also be of interest to researchers in machine +learning, as it provides a classification task with challenging +properties. There are multiple categories, the categories are +overlapping and nonexhaustive, and there are relationships among the +categories. There are interesting possibilities for the use of domain +knowledge. There are many possible feature sets that can be extracted +from the text, and most plausible feature/example matrices are large +and sparse. There is even some temporal structure to the data +[LEWIS94b], though problems with the indexing and the uneven +distribution of stories within the timespan covered may make this +collection a poor one to explore temporal issues. + + +VI. Formatting + + The Reuters-21578 collection is distributed in 22 files. Each of +the first 21 files (reut2-000.sgm through reut2-020.sgm) contain 1000 +documents, while the last (reut2-021.sgm) contains 578 documents. + + The files are in SGML format. Rather than going into the details +of the SGML language, we describe here in an informal way how the SGML +tags are used to divide each file, and each document, into sections. +Readers interested in more detail on SGML are encouraged to pursue +one of the many books and web pages on the subject. + + Each of the 22 files begins with a document type declaration line: + + +The DTD file lewis.dtd is included in the distribution. Following the +document type declaration line are individual Reuters articles marked +up with SGML tags, as described below. + + + VI.A. The REUTERS tag: + + Each article starts with an "open tag" of the form + + + +where the ?? are filled in an appropriate fashion. Each article ends +with a "close tag" of the form: + + + +In all cases the and tags are the only items +on their line. + + Each REUTERS tag contains explicit specifications of the values +of five attributes, TOPICS, LEWISSPLIT, CGISPLIT, OLDID, and NEWID. +These attributes are meant to identify documents and groups of +documents, and have the following meanings: + + 1. TOPICS : The possible values are YES, NO, and BYPASS: + a. YES indicates that *in the original data* there was at +least one entry in the TOPICS fields. + b. NO indicates that *in the original data* the story had no +entries in the TOPICS field. + c. BYPASS indicates that *in the original data* the story was +marked with the string "bypass" (or a typographical variant on that +string). + This poorly-named attribute unfortunately is the subject of much +confusion. It is meant to indicate whether or not the document had +TOPICS categories *in the raw Reuters-22173 dataset*. The sole use of +this attribute is to defining training set splits similar to those +used in previous research. (See the section on training set splits.) +The TOPICS attribute does **NOT** indicate anything about whether or +not the Reuters-21578 document has any TOPICS categories. (Version +1.0 of this document was errorful on this point.) That can be +determined by actually looking at the TOPICS field. A story with +TOPICS="YES" can have no TOPICS categories, and a story with +TOPICS="NO" can have TOPICS categories. + Now, a reasonable (though not certain) assumption is that for all +TOPICS="YES" stories the indexer at least thought about whether the +story belonged to a valid TOPICS category. Thus, the TOPICS="YES" +stories with no topics can reasonably be considered negative examples +for all 135 valid TOPICS categories. + TOPICS="NO" stories are more problematic in their interpretation. +Some of them presumedly result because the indexer made an explicit +decision that they did not belong to any of the 135 valid TOPICS +categories. However, there are many cases where it is clear that a +story should belong to one or more TOPICS categories, but for some +reason the category was not assigned. There appear to be certain time +intervals where large numbers of such stories are concentrated, +suggesting that some parts of the data set were simply not indexed, or +not indexed for some categories or category sets. Also, in a few +cases, the indexer clearly meant to assign TOPICS categories, but put +them in the wrong field. These cases have been corrected in the +Reuters-21578 data, yielding stories that have TOPICS categories, but +where TOPICS="NO", because the the category was not assigned in the +raw version of the data. + "BYPASS" stories clearly were not indexed, and so are useful only +for general distributional information on the language used in the +documents. + + 2. LEWISSPLIT : The possible values are TRAINING, TEST, and +NOT-USED. TRAINING indicates it was used in the training set in the +experiments reported in LEWIS91d (Chapters 9 and 10), LEWIS92b, +LEWIS92e, and LEWIS94b. TEST indicates it was used in the test set +for those experiments, and NOT-USED means it was not used in those +experiments. + + 3. CGISPLIT : The possible values are TRAINING-SET and +PUBLISHED-TESTSET indicating whether the document was in the training +set or the test set for the experiments reported in HAYES89 and +HAYES90b. + + 4. OLDID : The identification number (ID) the story had in the +Reuters-22173 collection. + + 5. NEWID : The identification number (ID) the story has in the +Reuters-21578, Distribution 1.0 collection. These IDs are assigned to +the stories in chronological order. + +In addition, some REUTERS tags have a sixth attribute, CSECS, which +can be ignored. + +The use of these attributes is critical to allowing comparability +between different studies with the collection, and is discussed +further in Section VIII. + + + VI.B. Document-Internal Tags + + Just as the and tags serve to delimit +documents within a file, other tags are used to delimit elements +within a document. We discuss these in the order in which they +typically appear, though the exact order should not be relied upon in +processing. In some cases, additional tags occur within an element +delimited by these top level document-internal tags. These are +discussed in this section as well. + + We specify below whether each open/close tag pair is used exactly +once (ONCE) per a story, or a variable (VARIABLE) number of times +(possibly zero). In many cases the start tag of a pair appears only +at the beginning of a line, with the corresponding end tag always +appearing at the end of the same line. When this is the case, we +indicate it with the notation "SAMELINE" below, as an aid to those +processing the files without SGML tools. + + 1. , [ONCE, SAMELINE]: Encloses the date and time +of the document, possibly followed by some non-date noise material. + + 2. , [VARIABLE] : Notes on certain hand +corrections that were done to the original Reuters corpus by Steve +Finch. + + 3. , [ONCE, SAMELINE]: Encloses the list of +TOPICS categories, if any, for the document. If TOPICS categories are +present, each will be delimited by the tags and . + + 4. , [ONCE, SAMELINE]: Same as +but for PLACES categories. + + 5. , [ONCE, SAMELINE]: Same as +but for PEOPLE categories. + + 6. , [ONCE, SAMELINE]: Same as but +for ORGS categories. + + 7. , [ONCE, SAMELINE]: Same as + but for EXCHANGES categories. + + 8. , [ONCE, SAMELINE]: These tags always +appear adjacent to each other, since there are no COMPANIES categories +assigned in the collection. + + 9. , [VARIABLE]: These tags bracket control +characters and other noisy and/or somewhat mysterious material in the +Reuters stories. + + 10. , [ONCE]: We have attempted to delimit all the +textual material of each story between a pair of these tags. Some +control characters and other "junk" material may also be included. +The whitespace structure of the text has been preserved. The +tag has the following attribute: + + a. TYPE: This has one of three values: NORM, BRIEF, and +UNPROC. NORM is the default value and indicates that the text of the +story had a normal structure. In this case the TEXT tag appears simply +as . The tag appears as when the story is a +short one or two line note. The tags appears as +when the format of the story is unusual in some fashion that limited +our ability to further structure it. + +The following tags optionally delimit elements inside the TEXT +element. Not all stories will have these tags: + + a. , : Author of the story. + b. , : Location the story +originated from, and day of the year. + c. , : Title of the story. We have attempted +to capture the text of stories with TYPE="BRIEF" within a +element. + d. <BODY>, </BODY> : The main text of the story. + + +VII. Categories + + A test collection for text categorization contains, at minimum, a +set of texts and, for each text, a specification of what categories +that text belongs to. For the Reuters-21578 collection the documents +are Reuters newswire stories, and the categories are five different +sets of content related categories. For each document, a human +indexer decided which categories from which sets that document +belonged to. The category sets are as follows: + + Number of Number of Categories Number of Categories +Category Set Categories w/ 1+ Occurrences w/ 20+ Occurrences +************ ********** ******************** ******************** +EXCHANGES 39 32 7 +ORGS 56 32 9 +PEOPLE 267 114 15 +PLACES 175 147 60 +TOPICS 135 120 57 + + +The TOPICS categories are economic subject categories. Examples +include "coconut", "gold", "inventories", and "money-supply". This +set of categories is the one that has been used in almost all previous +research with the Reuters data. HAYES90b discusses some examples of +the policies (not always obvious) used by the human indexers in +deciding whether a document belonged to a particular TOPIC category. + +The EXCHANGES, ORGS, PEOPLE, and PLACES categories correspond to named +entities of the specified type. Examples include "nasdaq" +(EXCHANGES), "gatt" (ORGS), "perez-de-cuellar" (PEOPLE), and +"australia" (PLACES). Typically a document assigned to a category from +one of these sets explicitly includes some form of the category name +in the document's text. (Something which is usually not true for +TOPICS categories.) However, not all documents containing a named +entity corresponding to the category name are assigned to these +category, since the entity was required to be a focus of the news +story [HAYES90b]. Thus these proper name categories are not as simple +to assign correctly as might be thought. + +Reuters-21578, Distribution 1.0 includes five files +(all-exchanges-strings.lc.txt, all-orgs-strings.lc.txt, +all-people-strings.lc.txt, all-places-strings.lc.txt, and +all-topics-strings.lc.txt) which list the names of *all* legal +categories in each set. A sixth file, cat-descriptions_120396.txt +gives some additional information on the category sets. + +Note that a sixth category field, COMPANIES, was present in the +original Reuters materials distributed by Carnegie Group, but no +company information was actually included in these fields. In the +Reuters-21578 collection this field is always empty. + +In the table above we note how many categories appear in at least 1 of +the 21,578 documents in the collection, and how many appear at least +20 of the documents. Many categories appear in no documents, but we +encourage researchers to include these categories when evaluating the +effectiveness of their categorization system. + +Additional details of the documents, categories, and corpus +preparation process appear in LEWIS92b, and at greater length in +Section 8.1 of LEWIS91d. + +VIII. Using Reuters-21578 for Text Categorization Research + + In testing a method for text categorization it is important that +knowledge of the nature of the test data not unduly influence the +development of the system, or the performance obtained will be +unrealistically high. One way of dealing with this is to divide a set +of data into two subsets: a training set and a test set. An +experimenter then develops a categorization system by automated +training on the training set only, and/or by human knowledge +engineering based on examination of the training set only. The +categorization system is then tested on the previously unexamined test +set. A number of variations on this basic theme are possible---see +WEISS91 for a good discussion. + + Effectiveness results can only be compared between studies that +the same training and test set (or that use cross-validation +procedures). One problem with the Reuters-22173 collection was that +the ambiguity of formatting and annotation led different researchers +to use different training/test divisions. This was particularly +problematic when researchers attempted to remove documents that "had +no TOPICS", as there were several definitions of what this meant. + + To eliminate these ambiguities from the Reuters-21578 collection +we specify exactly which articles are in each of the recommended +training sets and test sets by specifying the values those articles +will have on the TOPICS, LEWISSPLIT, and CGISPLIT attributes of the +REUTERS tags. We strongly encourage that all studies on Reuters-21578 +use one of the following training test divisions (or use multiple +random splits, e.g. cross-validation): + +VIII.A. The Modified Lewis ("ModLewis") Split: + + Training Set (13,625 docs): LEWISSPLIT="TRAIN"; TOPICS="YES" or "NO" + Test Set (6,188 docs): LEWISSPLIT="TEST"; TOPICS="YES" or "NO" + Unused (1,765): LEWISSPLIT="NOT-USED" or TOPICS="BYPASS" + +This replaces the 14704/6746 split (723 unused) of the Reuters-22173 +collection, which was used in LEWIS91d (Chapters 9 and 10), LEWIS92b, +LEWIS92c, LEWIS92e, and LEWIS94b. Note the following: + + 1. The duplicate documents removed in forming Reuters-21578 are +of course not present. + 2. The documents with TOPICS="BYPASS" are not used, since +subsequent analysis strongly indicates that they were not categorized +by the indexers. + 3. The 1,765 unused documents should not be tested on and should +not be used for supervised learning. However, they may useful as +additional information on the statistical distribution of words, +phrases, and other features that might used to predict categories. + +This split assigns documents from April 7, 1987 and before to the +training set, and documents from April 8, 1987 and after to the test +set. + +WARNING: Given the many changes in going from Reuters-22173 to +Reuters-21578, including correction of many typographical errors in +category labels, results on the ModLewis split cannot be compared +with any published results on the Reuters-22173 collection! + + +VIII.B. The Modified Apte ("ModApte") Split : + + Training Set (9,603 docs): LEWISSPLIT="TRAIN"; TOPICS="YES" + Test Set (3,299 docs): LEWISSPLIT="TEST"; TOPICS="YES" + Unused (8,676 docs): LEWISSPLIT="NOT-USED"; TOPICS="YES" + or TOPICS="NO" + or TOPICS="BYPASS" + +This replaces the 10645/3672 split (7,856 not used) of the +Reuters-22173 collection. These are our best approximation to the +training and test splits used in APTE94 and APTE94b. Note the +following: + + 1. As with the ModLewis, those documents removed in forming +Reuters-21578 are not present, and BYPASS documents are not used. + 2. The intent in APTE94 and APTE94b was to use the Lewis split, +but restrict it to documents with at least one TOPICS categories. +However, but it was not clear exactly what Apte, et al meant by having +at least one TOPICS category (e.g. how was "bypass" treated, whether +this was before or after any fixing of typographical errors, etc.). We +have encoded our interpretation in the TOPICS attribute. ***Note +that, as discussed above, some TOPICS="YES" stories have no TOPICS +categories, and a few TOPICS="NO" stories have TOPICS +categories. These facts are irrelevant to the definition of the +split.*** If you are using a learning algorithm that requires each +training document to have at least TOPICS category, you can screen out +the training documents with no TOPICS categories. Please do NOT screen +out any of the 3,299 documents - that will make your results +incomparable with other studies. + + 3. As with ModLewis, it may be desirable to use the 8,676 Unused +documents for gathering statistical information about feature +distribution. + +As with ModLewis, this split assigns documents from April 7, 1987 and +before to the training set, and documents from April 8, 1987 and after +to the test set. The difference is that only documents with at least +one TOPICS category are used. The rationale for this restriction is +that while some documents lack TOPICS categories because no TOPICS +apply (i.e. the document is a true negative example for all TOPICS +categories), it appears that others simply were never assigned TOPICS +categories by the indexers. (Unfortunately, the amount of time that +has passed since the collection was created has made it difficult to +establish exactly what went on during the indexing.) + +WARNING: Given the many changes in going from Reuters-22173 to +Reuters-21578, including correction of many typographical errors in +category labels, results on the ModApte split cannot be compared +with any published results on the Reuters-22173 collection! + + +VIII.C. The Modified Hayes ("ModHayes") Split: + Training Set (20856 docs): CGISPLIT="TRAINING-SET" + Test Set (722 docs): CGISPLIT="PUBLISHED-TESTSET" + Unused (0 docs) + +This is the best approximation we have to the training and test splits +used in HAYES89, HAYES90b, and Chapter 8 of LEWIS91d. It replaces the +21450/723 split of the Reuters-22173 collection. Note the following: + + 1. As with the other splits, the duplicate documents removed in +forming Reuters-21578 are not present. + + 2. "Training" in HAYES89 and HAYES90b was actually done by human +beings looking at the documents and writing categorization rules. +We can not be sure which of the document files were actually looked +at. + + 3. We specify that the BYPASS stories and the TOPICS=NO stories +are part of the training set, since they were used during manual +knowledge engineering in the original Hayes experiments. That does not +mean researchers are obliged to give these stories to, for instance, a +supervised learning algorithm. As mentioned in the other splits, they +may be more useful for getting distributional information about +features. + +There are a number of problems with the ModHayes split that make it +less than desirable for text categorization research, including +unusual distribution of categories, pairs of near-duplicate documents, +and chronological burstiness. (See [LEWIS90b, Ch. 8] for more +details.) + +Despite these problems, this split is of interest because it provides +the ability to compare results with those of the CONSTRUE system +[HAYES89, HAYES90b]. Comparison of results on the ModHayes split with +previously published results on the original Hayes split in HAYES89 +and HAYES90b (and LEWIS90b, Ch. 8) is possible, though the following +points should be taken into account: + + 1. The testset we provide in the ModHayes split has one fewer +document than the one Hayes used. The document that was removed +(OLDID="22026") was a timestamp duplicate of the document with +OLDID="22027" and NEWID="13234". So in computing effectiveness +measures for comparison with HAYES89/90b, the document with +NEWID="13234" should be counted twice. + + 2. The documents in the Hayes testset had relatively few errors and +anomalies in their categorization. And the errors which we did find +and correct appear unlikely to have affected the original Hayes +results. In particular, it appears that the only errors in the TOPICS +field were the addition of a few invalid categories that were not +evaluated on. However, for completeness we list the changes in the +Hayes testset documents made going from Reuters-22173 to Reuters-21578 +(all documents are referred to by their NEWID): + + Removal of invalid TOPIC "loan" : 13234, 16946, 17111, 17112, 17207, +17217, 17228, 17234, 17271, 17310 + + Removal of invalid TOPIC "gbond" : 17138, 17260 + + Removal of invalid TOPIC "tbill" : 17258 + + Removal of invalid TOPIC "cbond" : 17024 + + Removal of invalid TOPIC "fbond" : 17087 + + Correction of invalid PEOPLE mancera to mancera-aguayo: 17142, +17149, 17154, 17177, 17187 + + Correction of invalid PEOPLE andriesssen to andriessen : 17366 + + Correction of invalid PLACES "ivory" and "coast" to single correct +PLACE "ivory-coast": 18383 + + 3. The effectiveness measures used in HAYES89 and HAYES90b were +somewhat nonstandard. See Ch. 8 of LEWIS91d for a discussion. + + +VIII.D. Other Splits + + We strongly encourage researchers to use one (or more) of the +above splits for their experiments (or use cross-validation on one of +the sets of documents defined in the above splits). We recommend the +Modified Apte ("ModApte") Split for research on predicting the TOPICS +field, since the evidence is that a significant number of documents +that should have TOPICS do not. The ModLewis split can be used if the +researcher has a strong need to test the ability of a system to deal +with examples belonging to no category. While it is likely that some +of these examples should indeed belong to a category, the ModLewis +split is at least better than the corresponding split from +Reuters-22173, in that it eliminates the "bypass" stories. + + We in particular encourage you to resist the following +temptations: + 1. Defining new splits based on whether or not the documents +actually have any TOPICS categories. (See the discussion of the +ModApte split.) + 2. Testing your system only on the "easy" categories. This is a +temptation we have succumbed to in the past, but will resist in the +future. Yes, we know that some of the 135 TOPICS categories have few +or no positive training examples or few or no positive test examples +or both. Yes, purely supervised learning systems will do very badly +on these categories. Knowledge-based systems, on the other hand, +might do well on them, while doing poorly in comparison with +supervised learning on categories with lots of positive +examples. These comparisons are of great interest. Of course, it's of +great interest to *in addition* analyze subsets of categories +(e.g. lots of positive examples vs. few positive examples, etc.). + + Note that one strategy we considered and rejected is to assume +that documents which have no TOPICS but do have categories in other +fields (PLACES, etc.) could be assumed to belong to no TOPICS +categories. This does not appear to be a safe assumption - we have +found a number of examples of documents with PLACES but no TOPICS when +there are TOPICS that clearly apply. + +IX. Feature Sets in Text Categorization + + For many text categorization methods, particularly those using +statistical classification techniques, it is convenient to represent +documents not as a sequence of characters, but rather as a tuple of +numeric or binary feature values. For instance, the value of feature +Fi for a document Dj might be 1 if the string of characters +"financial" occurred in the document with whitespace on either side, +and 0 otherwise. Or the value of Fi for Dj might be the number of +occurrences of "financial" in document Dj. In information retrieval +such features are often called "indexing terms" and one often speaks +of a term being "present" in a document, to mean that the feature +takes on a non-default value. (Usually, but not always, any value but +0 is non-default.) + + Comparisons between text categorization methods that represent +documents as feature tuples are aided by ensuring that the same tuple +representation is used with all methods, thus avoiding conflating +differences in feature extraction with differences in, say, machine +learning methods. For that reason, the Reuters-22173 distribution +included not only the formatted text of the Reuters stories, but also +feature tuple representations of the stories in each of two feature +sets, one based on words and one based on noun phrases. Surprisingly, +almost no use was made of these files by other researchers, so we have +not included files of this sort in the Reuters-21578 distribution. + + However, we are willing to make available as part of the +distribution any tuple representations of this sort that researchers +want to contribute. (Contact lewis@research.att.com if you would like +to do this.) Perhaps the ideal situation would be if someone with a +strong interest in feature set formation produced tuples based on a +high quality set of features which other researchers interested only +in learning algorithms could make use of. + + +X. Bibliography + +[This needs to be updated.] + +@article{APTE94 + ,author = "Chidanand Apt{\'{e}} and Fred Damerau and Sholom M. Weiss" + ,title = "Automated Learning of Decision Rules for Text Categorization" + ,journal = "ACM Transactions on Information Systems" + ,year = 1994 + , note = "To appear." + } + +@inproceedings{APTE94b + ,author = "Chidanand Apt{\'{e}} and Fred Damerau and Sholom M. Weiss" + ,title = "Toward Language Independent Automated Learning of Text Categorization Models" + ,booktitle = sigir94 + ,year = 1994 + ,note = "To appear." + } + +@inproceedings{HAYES89 +,author = "Philip J. Hayes and Peggy M. Anderson and Irene B. Nirenburg and +Linda M. Schmandt" +,title = "{TCS}: A Shell for Content-Based Text Categorization" +,booktitle = "IEEE Conference on Artificial Intelligence Applications" +,year = 1990 +} + +@inproceedings{HAYES90b +,author = "Philip J. Hayes and Steven P. Weinstein" +,title = "{CONSTRUE/TIS:} A System for Content-Based Indexing of a +Database of News Stories" +,booktitle = "Second Annual Conference on Innovative Applications of +Artificial Intelligence" +,year = 1990 +} + +@incollection{HAYES92 + ,author = "Philip J. Hayes" + ,title = "Intelligent High-Volume Text Processing using Shallow, +Domain-Specific Techniques" + ,booktitle = "Text-Based Intelligent Systems" + ,publisher = "Lawrence Erlbaum" + ,address = "Hillsdale, NJ" + ,year = 1992 + ,editor = "Paul S. Jacobs" +} + +@inproceedings{LEWIS91c + ,author = "David D. Lewis" + ,title = "Evaluating Text Categorization" + ,booktitle = "Proceedings of Speech and Natural Language Workshop" + ,year = 1991 + ,month = feb + ,organization = "Defense Advanced Research Projects Agency" + ,publisher = "Morgan Kaufmann" + ,pages = "312--318" + +} + +@phdthesis{LEWIS91d +,author = "David Dolan Lewis" +,title = "Representation and Learning in Information Retrieval" +,school = "Computer Science Dept.; Univ. of Massachusetts; Amherst, MA 01003" +,year = 1992 +,note = "Technical Report 91--93." +} + +@inproceedings{LEWIS91e +,author = "David D. Lewis" +,title = "Data Extraction as Text Categorization: An Experiment with +the {MUC-3} Corpus" +,booktitle = "Proceedings of the Third Message Understanding Evaluation +and Conference" +,year = 1991 +,month = may +,organization = "Defense Advanced Research Projects Agency" +,publisher = "Morgan Kaufmann" +,address = "Los Altos, CA" + +} + +@inproceedings{LEWIS92b + ,author = "David D. Lewis" + ,title = "An Evaluation of Phrasal and Clustered Representations on a Text +Categorization Task" + ,booktitle = "Fifteenth Annual International ACM SIGIR Conference on +Research and Development in Information Retrieval" + ,year = 1992 + ,pages = "37--50" +} + +@inproceedings{LEWIS92d +,author = "David D. Lewis and Richard M. Tong" +,title = "Text Filtering in {MUC-3} and {MUC-4}" +,booktitle = "Proceedings of the Fourth Message Understanding Conference ({MUC-4})" +,year = 1992 +,month = jun +,organization = "Defense Advanced Research Projects Agency" +,publisher = "Morgan Kaufmann" +,address = "Los Altos, CA" +} + +@inproceedings{LEWIS92e +,author = "David D. Lewis" +,title = "Feature Selection and Feature Extraction for Text Categorization" +,booktitle = "Proceedings of Speech and Natural Language Workshop" +,year = 1992 +,month = feb +,organization = "Defense Advanced Research Projects Agency" +,publisher = "Morgan Kaufmann" +,pages = "212--217" +} + +@inproceedings{LEWIS94b + ,author = "David D. Lewis and Marc Ringuette" + ,title = "A Comparison of Two Learning Algorithms for Text Categorization" + ,booktitle = "Symposium on Document Analysis and Information Retrieval" + ,year = 1994 + ,organization = "ISRI; Univ. of Nevada, Las Vegas" + ,address = "Las Vegas, NV" + ,month = apr + ,pages = "81--93" +} + +@article{LEWIS94d +, author = "David D. Lewis and Philip J. Hayes" +, title = "Guest Editorial" +, journal = "ACM Transactions on Information Systems" +, year = 1994 +, volume = 12 +, number = 3 +, pages = "231" +, month = jul +} + +@article{SPARCKJONES76 +,author = "K. {Sparck Jones} and C. J. {van Rijsbergen}" +,title = "Information Retrieval Test Collections" +,journal = "Journal of Documentation" +,year = 1976 +,volume = 32 +,number = 1 +,pages = "59--75" + } + +@book{WEISS91 + ,author = "Sholom M. Weiss and Casimir A. Kulikowski" + ,title = "Computer Systems That Learn" + ,publisher = "Morgan Kaufmann" + ,year = 1991 + ,address = "San Mateo, CA" + } + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-000.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-000.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-000.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-000.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2032 @@ +<!DOCTYPE lewis SYSTEM "lewis.dtd"> +<REUTERS TOPICS="YES" LEWISSPLIT="TRAIN" CGISPLIT="TRAINING-SET" OLDID="5544" NEWID="1"> +<DATE>26-FEB-1987 15:01:01.79</DATE> +<TOPICS><D>cocoa</D></TOPICS> +<PLACES><D>el-salvador</D><D>usa</D><D>uruguay</D></PLACES> +<PEOPLE></PEOPLE> +<ORGS></ORGS> +<EXCHANGES></EXCHANGES> +<COMPANIES></COMPANIES> +<UNKNOWN> +C T +f0704reute +u f BC-BAHIA-COCOA-REVIEW 02-26 0105</UNKNOWN> +<TEXT> +<TITLE>BAHIA COCOA REVIEW + SALVADOR, Feb 26 - Showers continued throughout the week in +the Bahia cocoa zone, alleviating the drought since early +January and improving prospects for the coming temporao, +although normal humidity levels have not been restored, +Comissaria Smith said in its weekly review. + The dry period means the temporao will be late this year. + Arrivals for the week ended February 22 were 155,221 bags +of 60 kilos making a cumulative total for the season of 5.93 +mln against 5.81 at the same stage last year. Again it seems +that cocoa delivered earlier on consignment was included in the +arrivals figures. + Comissaria Smith said there is still some doubt as to how +much old crop cocoa is still available as harvesting has +practically come to an end. With total Bahia crop estimates +around 6.4 mln bags and sales standing at almost 6.2 mln there +are a few hundred thousand bags still in the hands of farmers, +middlemen, exporters and processors. + There are doubts as to how much of this cocoa would be fit +for export as shippers are now experiencing dificulties in +obtaining +Bahia superior+ certificates. + In view of the lower quality over recent weeks farmers have +sold a good part of their cocoa held on consignment. + Comissaria Smith said spot bean prices rose to 340 to 350 +cruzados per arroba of 15 kilos. + Bean shippers were reluctant to offer nearby shipment and +only limited sales were booked for March shipment at 1,750 to +1,780 dlrs per tonne to ports to be named. + New crop sales were also light and all to open ports with +June/July going at 1,850 and 1,880 dlrs and at 35 and 45 dlrs +under New York july, Aug/Sept at 1,870, 1,875 and 1,880 dlrs +per tonne FOB. + Routine sales of butter were made. March/April sold at +4,340, 4,345 and 4,350 dlrs. + April/May butter went at 2.27 times New York May, June/July +at 4,400 and 4,415 dlrs, Aug/Sept at 4,351 to 4,450 dlrs and at +2.27 and 2.28 times New York Sept and Oct/Dec at 4,480 dlrs and +2.27 times New York Dec, Comissaria Smith said. + Destinations were the U.S., Covertible currency areas, +Uruguay and open ports. + Cake sales were registered at 785 to 995 dlrs for +March/April, 785 dlrs for May, 753 dlrs for Aug and 0.39 times +New York Dec for Oct/Dec. + Buyers were the U.S., Argentina, Uruguay and convertible +currency areas. + Liquor sales were limited with March/April selling at 2,325 +and 2,380 dlrs, June/July at 2,375 dlrs and at 1.25 times New +York July, Aug/Sept at 2,400 dlrs and at 1.25 times New York +Sept and Oct/Dec at 1.25 times New York Dec, Comissaria Smith +said. + Total Bahia sales are currently estimated at 6.13 mln bags +against the 1986/87 crop and 1.06 mln bags against the 1987/88 +crop. + Final figures for the period to February 28 are expected to +be published by the Brazilian Cocoa Trade Commission after +carnival which ends midday on February 27. + Reuter + + + +26-FEB-1987 15:02:20.00 + +usa + + + + + +F Y +f0708reute +d f BC-STANDARD-OIL-<SRD>-TO 02-26 0082 + +STANDARD OIL <SRD> TO FORM FINANCIAL UNIT + CLEVELAND, Feb 26 - Standard Oil Co and BP North America +Inc said they plan to form a venture to manage the money market +borrowing and investment activities of both companies. + BP North America is a subsidiary of British Petroleum Co +Plc <BP>, which also owns a 55 pct interest in Standard Oil. + The venture will be called BP/Standard Financial Trading +and will be operated by Standard Oil under the oversight of a +joint management committee. + + Reuter + + + +26-FEB-1987 15:03:27.51 + +usa + + + + + +F A +f0714reute +d f BC-TEXAS-COMMERCE-BANCSH 02-26 0064 + +TEXAS COMMERCE BANCSHARES <TCB> FILES PLAN + HOUSTON, Feb 26 - Texas Commerce Bancshares Inc's Texas +Commerce Bank-Houston said it filed an application with the +Comptroller of the Currency in an effort to create the largest +banking network in Harris County. + The bank said the network would link 31 banks having +13.5 billion dlrs in assets and 7.5 billion dlrs in deposits. + + Reuter + + + +26-FEB-1987 15:07:13.72 + +usabrazil + + + + + +F +f0725reute +u f BC-TALKING-POINT/BANKAME 02-26 0105 + +TALKING POINT/BANKAMERICA <BAC> EQUITY OFFER + by Janie Gabbett, Reuters + LOS ANGELES, Feb 26 - BankAmerica Corp is not under +pressure to act quickly on its proposed equity offering and +would do well to delay it because of the stock's recent poor +performance, banking analysts said. + Some analysts said they have recommended BankAmerica delay +its up to one-billion-dlr equity offering, which has yet to be +approved by the Securities and Exchange Commission. + BankAmerica stock fell this week, along with other banking +issues, on the news that Brazil has suspended interest payments +on a large portion of its foreign debt. + The stock traded around 12, down 1/8, this afternoon, +after falling to 11-1/2 earlier this week on the news. + Banking analysts said that with the immediate threat of the +First Interstate Bancorp <I> takeover bid gone, BankAmerica is +under no pressure to sell the securities into a market that +will be nervous on bank stocks in the near term. + BankAmerica filed the offer on January 26. It was seen as +one of the major factors leading the First Interstate +withdrawing its takeover bid on February 9. + A BankAmerica spokesman said SEC approval is taking longer +than expected and market conditions must now be re-evaluated. + "The circumstances at the time will determine what we do," +said Arthur Miller, BankAmerica's Vice President for Financial +Communications, when asked if BankAmerica would proceed with +the offer immediately after it receives SEC approval. + "I'd put it off as long as they conceivably could," said +Lawrence Cohn, analyst with Merrill Lynch, Pierce, Fenner and +Smith. + Cohn said the longer BankAmerica waits, the longer they +have to show the market an improved financial outlook. + Although BankAmerica has yet to specify the types of +equities it would offer, most analysts believed a convertible +preferred stock would encompass at least part of it. + Such an offering at a depressed stock price would mean a +lower conversion price and more dilution to BankAmerica stock +holders, noted Daniel Williams, analyst with Sutro Group. + Several analysts said that while they believe the Brazilian +debt problem will continue to hang over the banking industry +through the quarter, the initial shock reaction is likely to +ease over the coming weeks. + Nevertheless, BankAmerica, which holds about 2.70 billion +dlrs in Brazilian loans, stands to lose 15-20 mln dlrs if the +interest rate is reduced on the debt, and as much as 200 mln +dlrs if Brazil pays no interest for a year, said Joseph +Arsenio, analyst with Birr, Wilson and Co. + He noted, however, that any potential losses would not show +up in the current quarter. + With other major banks standing to lose even more than +BankAmerica if Brazil fails to service its debt, the analysts +said they expect the debt will be restructured, similar to way +Mexico's debt was, minimizing losses to the creditor banks. + Reuter + + + +26-FEB-1987 15:10:44.60 +grainwheatcornbarleyoatsorghum +usa + + + + + +C G +f0738reute +u f BC-average-prices 02-26 0095 + +NATIONAL AVERAGE PRICES FOR FARMER-OWNED RESERVE + WASHINGTON, Feb 26 - The U.S. Agriculture Department +reported the farmer-owned reserve national five-day average +price through February 25 as follows (Dlrs/Bu-Sorghum Cwt) - + Natl Loan Release Call + Avge Rate-X Level Price Price + Wheat 2.55 2.40 IV 4.65 -- + V 4.65 -- + VI 4.45 -- + Corn 1.35 1.92 IV 3.15 3.15 + V 3.25 -- + X - 1986 Rates. + + Natl Loan Release Call + Avge Rate-X Level Price Price + Oats 1.24 0.99 V 1.65 -- + Barley n.a. 1.56 IV 2.55 2.55 + V 2.65 -- + Sorghum 2.34 3.25-Y IV 5.36 5.36 + V 5.54 -- + Reserves I, II and III have matured. Level IV reflects +grain entered after Oct 6, 1981 for feedgrain and after July +23, 1981 for wheat. Level V wheat/barley after 5/14/82, +corn/sorghum after 7/1/82. Level VI covers wheat entered after +January 19, 1984. X-1986 rates. Y-dlrs per CWT (100 lbs). +n.a.-not available. + Reuter + + + +26-FEB-1987 15:14:36.41 +veg-oillinseedlin-oilsoy-oilsun-oilsoybeanoilseedcornsunseedgrainsorghumwheat +argentina + + + + + +G +f0754reute +r f BC-ARGENTINE-1986/87-GRA 02-26 0066 + +ARGENTINE 1986/87 GRAIN/OILSEED REGISTRATIONS + BUENOS AIRES, Feb 26 - Argentine grain board figures show +crop registrations of grains, oilseeds and their products to +February 11, in thousands of tonnes, showing those for futurE +shipments month, 1986/87 total and 1985/86 total to February +12, 1986, in brackets: + Bread wheat prev 1,655.8, Feb 872.0, March 164.6, total +2,692.4 (4,161.0). + Maize Mar 48.0, total 48.0 (nil). + Sorghum nil (nil) + Oilseed export registrations were: + Sunflowerseed total 15.0 (7.9) + Soybean May 20.0, total 20.0 (nil) + The board also detailed export registrations for +subproducts, as follows, + SUBPRODUCTS + Wheat prev 39.9, Feb 48.7, March 13.2, Apr 10.0, total +111.8 (82.7) . + Linseed prev 34.8, Feb 32.9, Mar 6.8, Apr 6.3, total 80.8 +(87.4). + Soybean prev 100.9, Feb 45.1, MAr nil, Apr nil, May 20.0, +total 166.1 (218.5). + Sunflowerseed prev 48.6, Feb 61.5, Mar 25.1, Apr 14.5, +total 149.8 (145.3). + Vegetable oil registrations were : + Sunoil prev 37.4, Feb 107.3, Mar 24.5, Apr 3.2, May nil, +Jun 10.0, total 182.4 (117.6). + Linoil prev 15.9, Feb 23.6, Mar 20.4, Apr 2.0, total 61.8, +(76.1). + Soybean oil prev 3.7, Feb 21.1, Mar nil, Apr 2.0, May 9.0, +Jun 13.0, Jul 7.0, total 55.8 (33.7). REUTER + + + +26-FEB-1987 15:14:42.83 + +usa + + + + + +F +f0755reute +d f BC-RED-LION-INNS-FILES-P 02-26 0082 + +RED LION INNS FILES PLANS OFFERING + PORTLAND, Ore., Feb 26 - Red Lion Inns Limited Partnership +said it filed a registration statement with the Securities and +Exchange Commission covering a proposed offering of 4,790,000 +units of limited partnership interests. + The company said it expects the offering to be priced at 20 +dlrs per unit. + It said proceeds from the offering, along with a 102.5 mln +dlr mortgage loan, will be used to finance its planned +acquisition of 10 Red Lion hotels. + Reuter + + + +26-FEB-1987 15:15:40.12 + +usa + + + + + +F A RM +f0758reute +u f BC-USX-<X>-DEBT-DOWGRADE 02-26 0103 + +USX <X> DEBT DOWGRADED BY MOODY'S + NEW YORK, Feb 26 - Moody's Investors Service Inc said it +lowered the debt and preferred stock ratings of USX Corp and +its units. About seven billion dlrs of securities is affected. + Moody's said Marathon Oil Co's recent establishment of up +to one billion dlrs in production payment facilities on its +prolific Yates Field has significant negative implications for +USX's unsecured creditors. + The company appears to have positioned its steel segment +for a return to profit by late 1987, Moody's added. + Ratings lowered include those on USX's senior debt to BA-1 +from BAA-3. + Reuter + + + +26-FEB-1987 15:17:11.20 +earn +usa + + + + + +F +f0762reute +r f BC-CHAMPION-PRODUCTS-<CH 02-26 0067 + +CHAMPION PRODUCTS <CH> APPROVES STOCK SPLIT + ROCHESTER, N.Y., Feb 26 - Champion Products Inc said its +board of directors approved a two-for-one stock split of its +common shares for shareholders of record as of April 1, 1987. + The company also said its board voted to recommend to +shareholders at the annual meeting April 23 an increase in the +authorized capital stock from five mln to 25 mln shares. + Reuter + + + +26-FEB-1987 15:18:06.67 +acq +usa + + + + + +F +f0767reute +d f BC-COMPUTER-TERMINAL-SYS 02-26 0107 + +COMPUTER TERMINAL SYSTEMS <CPML> COMPLETES SALE + COMMACK, N.Y., Feb 26 - Computer Terminal Systems Inc said +it has completed the sale of 200,000 shares of its common +stock, and warrants to acquire an additional one mln shares, to +<Sedio N.V.> of Lugano, Switzerland for 50,000 dlrs. + The company said the warrants are exercisable for five +years at a purchase price of .125 dlrs per share. + Computer Terminal said Sedio also has the right to buy +additional shares and increase its total holdings up to 40 pct +of the Computer Terminal's outstanding common stock under +certain circumstances involving change of control at the +company. + The company said if the conditions occur the warrants would +be exercisable at a price equal to 75 pct of its common stock's +market price at the time, not to exceed 1.50 dlrs per share. + Computer Terminal also said it sold the technolgy rights to +its Dot Matrix impact technology, including any future +improvements, to <Woodco Inc> of Houston, Tex. for 200,000 +dlrs. But, it said it would continue to be the exclusive +worldwide licensee of the technology for Woodco. + The company said the moves were part of its reorganization +plan and would help pay current operation costs and ensure +product delivery. + Computer Terminal makes computer generated labels, forms, +tags and ticket printers and terminals. + Reuter + + + +26-FEB-1987 15:18:59.34 +earn +usa + + + + + +F +f0772reute +r f BC-COBANCO-INC-<CBCO>-YE 02-26 0058 + +COBANCO INC <CBCO> YEAR NET + SANTA CRUZ, Calif., Feb 26 - + Shr 34 cts vs 1.19 dlrs + Net 807,000 vs 2,858,000 + Assets 510.2 mln vs 479.7 mln + Deposits 472.3 mln vs 440.3 mln + Loans 299.2 mln vs 327.2 mln + Note: 4th qtr not available. Year includes 1985 +extraordinary gain from tax carry forward of 132,000 dlrs, or +five cts per shr. + Reuter + + + +26-FEB-1987 15:19:15.45 +earnacq +usa + + + + + +F +f0773reute +u f BC-OHIO-MATTRESS-<OMT>-M 02-26 0095 + +OHIO MATTRESS <OMT> MAY HAVE LOWER 1ST QTR NET + CLEVELAND, Feb 26 - Ohio Mattress Co said its first +quarter, ending February 28, profits may be below the 2.4 mln +dlrs, or 15 cts a share, earned in the first quarter of fiscal +1986. + The company said any decline would be due to expenses +related to the acquisitions in the middle of the current +quarter of seven licensees of Sealy Inc, as well as 82 pct of +the outstanding capital stock of Sealy. + Because of these acquisitions, it said, first quarter sales +will be substantially higher than last year's 67.1 mln dlrs. + Noting that it typically reports first quarter results in +late march, said the report is likely to be issued in early +April this year. + It said the delay is due to administrative considerations, +including conducting appraisals, in connection with the +acquisitions. + Reuter + + + +26-FEB-1987 15:20:13.09 +earn +usa + + + + + +F +f0775reute +r f BC-AM-INTERNATIONAL-INC 02-26 0065 + +AM INTERNATIONAL INC <AM> 2ND QTR JAN 31 + CHICAGO, Feb 26 - + Oper shr loss two cts vs profit seven cts + Oper shr profit 442,000 vs profit 2,986,000 + Revs 291.8 mln vs 151.1 mln + Avg shrs 51.7 mln vs 43.4 mln + Six mths + Oper shr profit nil vs profit 12 cts + Oper net profit 3,376,000 vs profit 5,086,000 + Revs 569.3 mln vs 298.5 mln + Avg shrs 51.6 mln vs 41.1 mln + NOTE: Per shr calculated after payment of preferred +dividends. + Results exclude credits of 2,227,000 or four cts and +4,841,000 or nine cts for 1986 qtr and six mths vs 2,285,000 or +six cts and 4,104,000 or 11 cts for prior periods from +operating loss carryforwards. + Reuter + + + +26-FEB-1987 15:20:27.17 +earn +usa + + + + + +F +f0776reute +u f BC-BROWN-FORMAN-INC-<BFD 02-26 0043 + +BROWN-FORMAN INC <BFD> 4TH QTR NET + LOUISVILLE, Ky., Feb 26 - + Shr one dlr vs 73 cts + Net 12.6 mln vs 15.8 mln + Revs 337.3 mln vs 315.2 mln + Nine mths + Shr 3.07 dlrs vs 3.08 dlrs + Net 66 mln vs 66.2 mln + Revs 1.59 billion vs 997.1 mln + Reuter + + + +26-FEB-1987 15:20:48.43 + +usa + + + + + +F +f0778reute +r f BC-NATIONAL-INTERGROUP<N 02-26 0047 + +NATIONAL INTERGROUP<NII> TO OFFER PERMIAN UNITS + PITTSBURGH, Feb 26 - National Intergroup Inc said it plans +to file a registration statement with the securities and +exchange commission for an offering of cumulative convertible +preferred partnership units in Permian Partners L.P. + The Permian Partners L.P. was recently formed by National +Intergroup to continue to business of Permian Corp, acquired by +the company in 1985. + The company said Permian will continue to manage the +business as a general partner, retaining a 35 pct stake in the +partnership in the form of common and general partnership +units. + It did not say how many units would be offered or what the +price would be. + Reuter + + + +26-FEB-1987 15:21:16.13 + +usabrazil + + + + + +RM +f0781reute +u f BC--ECONOMIC-SPOTLIGHT-- 02-26 0104 + +ECONOMIC SPOTLIGHT - BANKAMERICA <BAC> + by Janie Gabbett, Reuters + LOS ANGELES, Feb 26 - BankAmerica Corp is not under +pressure to act quickly on its proposed equity offering and +would do well to delay it because of the stock's recent poor +performance, banking analysts said. + Some analysts said they have recommended BankAmerica delay +its up to one-billion-dlr equity offering, which has yet to be +approved by the Securities and Exchange Commission. + BankAmerica stock fell this week, along with other banking +issues, on the news that Brazil has suspended interest payments +on a large portion of its foreign debt. + The stock traded around 12, down 1/8, this afternoon, +after falling to 11-1/2 earlier this week on the news. + Banking analysts said that with the immediate threat of the +First Interstate Bancorp <I> takeover bid gone, BankAmerica is +under no pressure to sell the securities into a market that +will be nervous on bank stocks in the near term. + BankAmerica filed the offer on January 26. It was seen as +one of the major factors leading the First Interstate +withdrawing its takeover bid on February 9. + A BankAmerica spokesman said SEC approval is taking longer +than expected and market conditions must now be re-evaluated. + "The circumstances at the time will determine what we do," +said Arthur Miller, BankAmerica's Vice President for Financial +Communications, when asked if BankAmerica would proceed with +the offer immediately after it receives SEC approval. + "I'd put it off as long as they conceivably could," said +Lawrence Cohn, analyst with Merrill Lynch, Pierce, Fenner and +Smith. + Cohn said the longer BankAmerica waits, the longer they +have to show the market an improved financial outlook. + Although BankAmerica has yet to specify the types of +equities it would offer, most analysts believed a convertible +preferred stock would encompass at least part of it. + Such an offering at a depressed stock price would mean a +lower conversion price and more dilution to BankAmerica stock +holders, noted Daniel Williams, analyst with Sutro Group. + Several analysts said that while they believe the Brazilian +debt problem will continue to hang over the banking industry +through the quarter, the initial shock reaction is likely to +ease over the coming weeks. + Nevertheless, BankAmerica, which holds about 2.70 billion +dlrs in Brazilian loans, stands to lose 15-20 mln dlrs if the +interest rate is reduced on the debt, and as much as 200 mln +dlrs if Brazil pays no interest for a year, said Joseph +Arsenio, analyst with Birr, Wilson and Co. + He noted, however, that any potential losses would not show +up in the current quarter. + With other major banks standing to lose even more than +BankAmerica if Brazil fails to service its debt, the analysts +said they expect the debt will be restructured, similar to way +Mexico's debt was, minimizing losses to the creditor banks. + Reuter + + + +26-FEB-1987 15:24:48.56 + +usa + + + + + +F +f0789reute +d f BC-NATIONAL-HEALTH-ENHAN 02-26 0076 + +NATIONAL HEALTH ENHANCEMENT <NHES> NEW PROGRAM + PHOENIX, Ariz., Feb 26 - National Health Enhancement +Systems Inc said it is offering a new health evaluation system +to its line of fitness assessment programs. + The company said the program, called The Health Test, will +be available in 60 days. + Customers who use the program will receive a +computer-generated report and recommendations for implementing +a program to improve their physical condition. + Reuter + + + +26-FEB-1987 15:26:26.78 +earn +usa + + + + + +F +f0796reute +r f BC-DEAN-FOODS-<DF>-SEES 02-26 0101 + +DEAN FOODS <DF> SEES STRONG 4TH QTR EARNINGS + CHICAGO, Feb 26 - Dean Foods Co expects earnings for the +fourth quarter ending May 30 to exceed those of the same +year-ago period, Chairman Kenneth Douglas told analysts. + In the fiscal 1986 fourth quarter the food processor +reported earnings of 40 cts a share. + Douglas also said the year's sales should exceed 1.4 +billion dlrs, up from 1.27 billion dlrs the prior year. + He repeated an earlier projection that third-quarter +earnings "will probably be off slightly" from last year's 40 +cts a share, falling in the range of 34 cts to 36 cts a share. + Douglas said it was too early to project whether the +anticipated fourth quarter performance would be "enough for us +to exceed the prior year's overall earnings" of 1.53 dlrs a +share. + In 1988, Douglas said Dean should experience "a 20 pct +improvement in our bottom line from effects of the tax reform +act alone." + President Howard Dean said in fiscal 1988 the company will +derive benefits of various dairy and frozen vegetable +acquisitions from Ryan Milk to the Larsen Co. + Dean also said the company will benefit from its +acquisition in late December of Elgin Blenders Inc, West +Chicago. + He said the company is a major shareholder of E.B.I. Foods +Ltd, a United Kingdom blender, and has licensing arrangements +in Australia, Canada, Brazil and Japan. + "It provides ann entry to McDonalds Corp <MCD> we've been +after for years," Douglas told analysts. + Reuter + + + +26-FEB-1987 15:26:54.12 +wheatgrain +yemen-arab-republicusa + + + + + +C G +f0798reute +u f BC-/BONUS-WHEAT-FLOUR-FO 02-26 0096 + +BONUS WHEAT FLOUR FOR NORTH YEMEN -- USDA + WASHINGTON, Feb 26 - The Commodity Credit Corporation, CCC, +has accepted an export bonus offer to cover the sale of 37,000 +long tons of wheat flour to North Yemen, the U.S. Agriculture +Department said. + The wheat four is for shipment March-May and the bonus +awarded was 119.05 dlrs per tonnes and will be paid in the form +of commodities from the CCC inventory. + The bonus was awarded to the Pillsbury Company. + The wheat flour purchases complete the Export Enhancement +Program initiative announced in April, 1986, it said. + Reuter + + + +26-FEB-1987 15:32:03.12 + +usa + + + + + +F A +f0804reute +d f BC-CREDIT-CARD-DISCLOSUR 02-26 0111 + +CREDIT CARD DISCLOSURE BILLS INTRODUCED + WASHINGTON, Feb 26 - Legislation to require disclosure of +credit card fees and interest rates before the cards are issued +have been introduced in the Senate and House. + Sen. Chris Dodd, D-Conn, a co-sponsor of the bill, said +many banks and financial institutions do not disclose all the +information about terms of their cards in promotional material +sent to prospective customers. + "By requiring card issuers to disclose the terms and +conditions of their cards at the time of solicitation, the +legislation is intended to arm consumers with enough +information to shop around for the best deal," Dodd said in a +statement. + Reuter + + + +26-FEB-1987 15:33:23.61 + +usa + + + + + +F +f0809reute +d f BC-HUGHES-CAPITAL-UNIT-S 02-26 0086 + +HUGHES CAPITAL UNIT SIGNS PACT WITH BEAR STEARNS + FORT LAUDERDALE, Fla., Feb 26 - Hughes/Conserdyne Corp, a +unit of <Hughes Capital Corp> said it made Bear Stearns and Co +Inc <BSC> its exclusive investment banker to develop and market +financing for the design and installation of its micro-utility +systems for municipalities. + The company said these systems are self-contained +electrical generating facilities using alternate power sources, +such as photovoltaic cells, to replace public utility power +sources. + Reuter + + + +26-FEB-1987 15:34:07.03 +copper +usa + + + + + +C M F +f0810reute +u f BC-magma-copper-price 02-26 0036 + +MAGMA LOWERS COPPER 0.75 CENT TO 66 CTS + NEW YORK, Feb 26 - Magma Copper Co, a subsidiary of Newmont +Mining Corp, said it is cutting its copper cathode price by +0.75 cent to 66 cents a lb, effective immediately. + Reuter + + + +26-FEB-1987 15:34:16.30 +earn +usa + + + + + +F +f0811reute +u f BC-BROWN-FORMAN-<BFDB>-S 02-26 0053 + +BROWN-FORMAN <BFDB> SETS STOCK SPLIT, UPS PAYOUT + LOUISVILLE, Ky., Feb 26 - Brown-Forman Inc said its board +has approved a three-for-two stock split and a 35 pct increase +in the company cash dividend. + The company cited its improved earnings outlook and +continued strong cash flow as reasons for raising the dividend. + Brown-Forman said the split of its Class A and Class B +common shares would be effective March 13. + The company said directors declared a quarterly cash +dividend on each new share of both classes of 28 cts, payable +April one to holders of record March 20. Prior to the split, +the company had paid 31 cts quarterly. + Brown-Forman today reported a 37 pct increase in third +quarter profits to 21.6 mln dlrs, or 1.00 dlr a share, on a +seven pct increase in sales to a record 337 mln dlrs. + Brown-Forman said nine month profits declined a bit to 66.0 +mln dlrs, or 3.07 dlrs a share, from 66.2 mln dlrs, or 3.08 +dlrs a share, a year earlier due to a second quarter charge of +37 cts a share for restructuring its beverage operations. + The company said lower corporate tax rates and the +restructuring "are expected to substantially improve +Brown-Forman's earnings and cash flow in fiscal 1988." + Reuter + + + +26-FEB-1987 15:35:16.67 +earn +usa + + + + + +F +f0814reute +h f BC-ESQUIRE-RADIO-AND-ELE 02-26 0072 + +ESQUIRE RADIO AND ELECTRONICS INC <EE> 4TH QTR + NEW YORK, Feb 26 - + Shr profit 15 cts vs profit four cts + Annual div 72 cts vs 72 cts prior yr + Net profit 72,000 vs profit 16,000 + Revs 7,075,000 vs 2,330,000 + 12 mths + Shr profit 42 cts vs loss 11 cts + Net profit 203,000 vs loss 55,000 + Revs 16.1 mln vs 3,971,000 + NOTE: annual dividend payable April 10, 1987, to +stockholders of record on March 27, 1987. + Reuter + + + +26-FEB-1987 15:35:39.38 + +usa + + + + + +F +f0815reute +h f BC-SHEARSON-LEHMAN-NAMES 02-26 0061 + +SHEARSON LEHMAN NAMES NEW MANAGING DIRECTOR + NEW YORK, Feb 26 - Shearson Lehman Brothers, a unit of +American Express Co <AXP>, said Robert Stearns has joined the +company as managing director of its merger and acquisition +department. + Shearson said Stearns formerly was part of Merrill Lynch +Pierce, Fenner and Smith Inc's <MER> merger and acquisitions +department. + Reuter + + + +26-FEB-1987 15:36:44.78 + +usabrazilvenezuela + + + + + +V RM +f0817reute +b f BC-/BANKERS-REPORT-BREAK 02-26 0092 + +BANKERS REPORT BREAKTHROUGH ON VENEZUELAN DEBT + NEW YORK, Feb 26 - Venezuela and its bank advisory +committee have agreed in principle on revisions to the terms of +a 21 billion dlr debt-rescheduling package signed last +February, bankers said. + They declined to disclose details because two or three +representatives on the panel have still to obtain the approval +of their senior management for the new terms. + The committee was meeting in New York this afternoon and +could put its final stamp of approval of the deal later today, +the bankers said. + "A number of details have still to be finalized, but the +broad details of the new amortization schedules and interest +rates are in place," one senior banker said. + The interest rate on the rescheduling was originally set at +1-1/8 pct over Eurodollar rates, but Venezuela requested easier +terms because of a 40 pct drop in oil income last year. + It also asked for a reduction in the repayments it was due +to make in 1987, 1988 and 1989 - after an earlier request that +it make no amortizations at all in those years was rebuffed - +and sought a commitment from the banks to finance new +investment in Venezuela. + The breakthrough in the Venezuelan talks, which have been +going on intermittently for several months, follows the +announcement earlier today of a 10.6 billion dlr debt +rescheduling pact between Chile and its bank advisory panel. + And last night Citibank said Mexico's financing package, +including a 7.7 billion dlr loan, will be signed on March 20. + While the sudden progress is to some extent coincidental, +bankers acknowledge a desire to chalk up some quick successes +after the shock of Brazil's unilateral interest suspension last +Friday. By striking swift deals, banks hope to reduce the +incentive for other debtors to emulate Brazil. + Reuter + + + +26-FEB-1987 15:36:53.42 +earn +usa + + + + + +F +f0818reute +d f BC-UNITED-PRESIDENTIAL-C 02-26 0073 + +UNITED PRESIDENTIAL CORP <UPCO> 4TH QTR NET + KOKOMO, Ind., Feb 26 - + Shr 39 cts vs 50 cts + Net 1,545,160 vs 2,188,933 + Revs 25.2 mln vs 19.5 mln + Year + Shr 1.53 dlrs vs 1.21 dlrs + Net 6,635,318 vs 5,050,044 + Revs 92.2 mln vs 77.4 mln + NOTE: Results include adjustment of 848,600 dlrs or 20 cts +shr for 1986 year and both 1985 periods from improvement in +results of its universal life business than first estimated. + Reuter + + + +26-FEB-1987 15:38:26.23 + +usa +reagan + + + + +V RM +f0823reute +r f AM-REAGAN-IMPACT-(NEWS-A NALYSIS) 02-26 0092 + +TOWER REPORT DIMINISHES REAGAN'S HOPES OF REBOUND + By Michael Gelb, Reuters + WASHINGTON, Feb 26 - The Tower Commission report, which +says President Reagan was ignorant about much of the Iran arms +deal, just about ends his prospects of regaining political +dominance in Washington, political analysts said. + "This is certification of incompetence," private political +analyst Stephen Hess told Reuters in commenting on the Tower +report made public today. + "It's as if he went before a professional licensing board +and was denied credentials." + In one of the most direct criticisms, board chairman John +Tower, a longtime Reagan supporter and former Republican +senator from Texas, told a press conference, "The president +clearly did not understand the nature of this operation." + The report, which lent credence to widespread opinion in +Washington that Reagan is not in full command of the +government, was particularly damaging because it was prepared +by a board of the Republican president's own choosing. + The three-member panel made up of Tower, former National +Security Adviser Brent Scowcroft and former Secretary of State +Edmund Muskie, does not carry the partisan taint of criticism +from a Congress controlled by the Democratic party. + "We're falling by our own hand," said one Republican +political strategist. "What can we say except 'we're sorry, we +won't do it again'?" + The strategist, who works for one of his party's top 1988 +presidential contenders and asked not to be identified, said +the report was like "an anvil falling on us." + Hess, with the Brookings Institution public policy study +group, said the report is the final blow to Reagan's hopes of +regaining the upper hand he once had in dealings with Congress, +the press and the Washington bureaucracy. + The report may also undermine the standing of Defense +Secretary Caspar Weinberger and Secretary of State George +Shultz, who the report suggests were more interested in keeping +their own skirts clean than supporting the president. + "They protected the record as to their own positions on this +issue. They were not energetic in attempting to protect the +president from the consequences," it said. + White House chief of staff Donald Regan and former Central +Intelligence Agency Director William Casey also received strong +criticism, but the blows were expected in their cases. + Regan, expected to resign or be fired shortly, was savaged +for allegedly failing both to help Reagan conduct the Iran +initiative and to avoid "chaos" in the disclosure process. + Casey, who underwent surgery for removal of a cancerous +brain tumor in December, had already resigned for health +reasons last month. + "This is a story about people who came up somewhat short of +being heroes," Tower told reporters. + While Reagan retains considerable constitutional powers, +including command of the armed forces and the right to veto +legislation, analysts say it will be difficult for him to +retake control of the country's policy agenda -- particularly +with Congress controlled by the Democrats. + The crucial remaining question, they said, is whether the +man in the street will forsake Reagan over the affair. + Although his job approval rating has fallen as much as +twenty percentage points in some opinion polls since the arms +deal with Iran became public last November, his personal +popularity is still relatively high. + A Los Angeles Times poll released earlier this week showed +that just 37 pct of those surveyed thought Reagan was in +control of the government, but 55 pct still thought he was +doing a good job as president. + American Enterprise Institute analyst William Schneider, a +Democrat, says Reagan's loss of support among Washington power +brokers could be offset by continued backing of the public. + "In the past, he has been able to go around the power elite +by appealing directly to the public," Schneider said. + Reagan will again plead his case that way in a televised +address next week. + But one top Republican strategist warned against expecting +a dramatic turnaround. + "The White House has to avoid building expectations that +cannot be met," said the strategist, who requested anonymity. +"They have to recognize there is no quick fix." + Analysts also point out that Reagan's personal popularity +has not always translated into public backing for his policies. + They note he was dramatically rebuffed in last November's +elections when voters rejected his appeals and restored control +of the Senate to the Democrats. + Reuter + + + +26-FEB-1987 15:39:41.92 +housing +usa + + + + + +F +f0827reute +r f BC-JANUARY-HOUSING-SALES 02-26 0103 + +JANUARY HOUSING SALES DROP, REALTY GROUP SAYS + WASHINGTON, Feb 26 - Sales of previously owned homes +dropped 14.5 pct in January to a seasonally adjusted annual +rate of 3.47 mln units, the National Association of Realtors +(NAR) said. + But the December rate of 4.06 mln units had been the +highest since the record 4.15 mln unit sales rate set in +November 1978, the group said. + "The drop in January is not surprising considering that a +significant portion of December's near-record pace was made up +of sellers seeking to get favorable capital gains treatment +under the old tax laws," said the NAR's John Tuccillo. + Reuter + + + +26-FEB-1987 15:41:56.54 +money-supply + + + + + + +A +f0835reute +f f BC-******ASSETS-OF-MONEY 02-26 0012 + +******ASSETS OF MONEY MARKET MUTUAL FUNDS ROSE 720.4 MLN DLRS IN LATEST WEEK +Blah blah blah. + + + + + +26-FEB-1987 15:43:14.36 + +usa + + + + + +A +f0840reute +b f BC-******U.S.-TAX-WRITER 02-26 0013 + +******U.S. TAX WRITERS SEEK ESTATE TAX CURBS, RAISING 6.7 BILLION DLRS THRU 1991 +Blah blah blah. + + + + + +26-FEB-1987 15:43:59.53 + +usa + + + + + +F +f0842reute +d f BC-SENATORS-INTRODUCE-EX 02-26 0110 + +SENATORS INTRODUCE EXPORT LICENSING REFORM BILL + WASHINGTON, Feb 26 - Sens. Alan Cranston (D-Cal.) and +Daniel Evans (R-Wash.) said they introduced export licensing +reform legislation that could save U.S. companies hundreds of +thousands of dollars annually. + "Our emphasis is two-fold: Decontrol and de-license items +where such actions will not endanger our national security, and +eliminate the Department of Defense's de facto veto authority +over the licensing process," Cranston said. + "Our reforms should reduce licensing requirements by 65 to +70 pct," he told reporters. "I am convinced that a more +rational...licensing process will boost exports." + U.S. export controls are intended to deny Eastern bloc +countries access to technology that could further their +military capabilities. + "By refocusing our control resources on higher levels of +technology, technology that is truly critical, we will do a +better job of preventing diversion of critical technology to +our adversaries while promoting more exports," Cranston said. + "We cannot expect to continue to play a leading role in new +technology development in the future if we unduly restrict the +activities of U.S. firms in the world market-place," Evans told +reporters. + Reuter + + + +26-FEB-1987 15:44:36.04 + +usa + + + + + +F +f0845reute +r f BC-EXCELAN-INC-SETS-INIT 02-26 0061 + +EXCELAN INC SETS INITIAL STOCK OFFER + SAN JOSE, Calif., Feb 26 - Excelan Inc said it is making an +initial public offering of 2,129,300 shares of common stock at +12 dlrs per share. + Excelan said 1.6 mln of the shares are being sold by the +company and 529,300 shares are being sold by stockholders. + Excelan designs and manufactures computer-related products. + Reuter + + + +26-FEB-1987 15:45:19.65 + +usa + + + + + +F +f0847reute +d f BC-CCX-NETWORK-<CCXN>-SE 02-26 0074 + +CCX NETWORK <CCXN> SECONDARY OFFERING UNDERWAY + CONWAY, Ark., Feb 26 - CCX Network Inc said it was offering +220,838 shares of stock at 15.75 dlrs a share though +underwriters Stephens Inc and Cazenove Inc. + The company said it was selling the stock on behalf of some +shareholders, including those who recently received shares +in the company in exchange for their businesses. + The company said it was receiving no proceeds from the +offering. + Reuter + + + +26-FEB-1987 15:45:26.55 + +usa + + + + + +F +f0848reute +r f BC-FIRST-UNION-<FUNC>-FI 02-26 0055 + +FIRST UNION <FUNC> FILES 100 MLN DLR NOTES ISSUE + NEW YORK, Feb 26 - First Union Corp said it has filed with +the Securities and Exchange Commission for a proposed offering +of 100 mln dlrs of fixed rate subordinated notes due 1997. + The notes will be sold nationwide through underwriters +managed by Shearson Lehman Brothers Inc. + Reuter + + + +26-FEB-1987 15:45:35.37 +earn +usa + + + + + +F +f0849reute +r f BC-OWENS-AND-MINOR-INC-< 02-26 0025 + +OWENS AND MINOR INC <OBOD> RAISES QTLY DIVIDEND + RICHMOND, Va. Feb 26 - + Qtly div eights cts vs 7.5 cts prior + Pay March 31 + Record March 13 + Reuter + + + +26-FEB-1987 15:45:39.20 +earn +usa + + + + + +F +f0850reute +r f BC-COMPUTER-LANGUAGE-RES 02-26 0070 + +COMPUTER LANGUAGE RESEARCH IN <CLRI> 4TH QTR + CARROLLTON, Texas, Feb 26 - + Shr loss 22 cts vs loss 18 cts + Net loss 3,035,000 vs loss 2,516,000 + Revs 20.9 mln vs 19.6 mln + Qtly div three cts vs three cts prior + Year + Shr profit two cts vs profit 34 cts + Net profit 215,000 vs profit 4,647,000 + Revs 93.4 mln vs 98.7 mln + NOTE: Dividend payable April one to shareholders of record +March 17. + Reuter + + + +26-FEB-1987 15:45:47.29 +earn +usa + + + + + +E F +f0851reute +d f BC-<CINRAM-LTD>-4TH-QTR 02-26 0051 + +<CINRAM LTD> 4TH QTR NET + Scarborough, Ontario, Feb 26 - + Shr 45 cts vs 58 cts + Net 1.1 mln vs 829,000 + Sales 7.9 mln vs 9.4 mln + Avg shrs 2,332,397 vs 1,428,000 + Year + Shr 1.22 dlrs vs 1.06 dlrs + Net 2.9 mln vs 1.5 mln + Sales 25.7 mln vs 22.2 mln + Avg shrs 2,332,397 vs 1,428,000 + Reuter + + + +26-FEB-1987 15:46:36.16 + +usa + + + + + +F +f0855reute +h f BC-DU-PONT-CO-<DD>-LAUNC 02-26 0105 + +DU PONT CO <DD> LAUNCHES IMPROVED ARAMID FIBERS + WILMINGTON, Del., Feb 26 - The Du Pont Co said it has +devloped a new generation of high-strength aramid fibers which +is stiffer and less absorbant than previous generations. + Du Pont said the new product, Kevlar 149, is up to 40 pct +stiffer than first generation aramids, and absorbs less than +half the moister of other similar aramid fibers. + Kevlar was invented by Du Pont in the late 1960s and is +five times stronger than steel and 10 times stronger than +aluminum on an equal wieght basis, and is used to replace +metals in a variety of products, according to the company. + Reuter + + + +26-FEB-1987 15:47:16.17 +earn +canada + + + + + +E F +f0859reute +r f BC-STANDARD-TRUSTCO-SEES 02-26 0099 + +STANDARD TRUSTCO SEES BETTER YEAR + Toronto, Feb 26 - Standard Trustco said it expects earnings +in 1987 to increase at least 15 to 20 pct from the 9,140,000 +dlrs, or 2.52 dlrs per share, recorded in 1986. + "Stable interest rates and a growing economy are expected to +provide favorable conditions for further growth in 1987," +president Brian O'Malley told shareholders at the annual +meeting. + Standard Trustco previously reported assets of 1.28 billion +dlrs in 1986, up from 1.10 billion dlrs in 1985. Return on +common shareholders' equity was 18.6 pct last year, up from 15 +pct in 1985. + Reuter + + + +26-FEB-1987 15:48:26.92 +earn +usa + + + + + +F +f0865reute +u f BC-HANDY-AND-HARMAN-<HNH 02-26 0068 + +HANDY AND HARMAN <HNH> 4TH QTR LOSS + NEW YORK, Feb 26 - + Shr loss 51 cts vs loss three cts + Net loss 7,041,000 vs loss 467,000 + Rev 138.9 mln vs 131.4 mln + 12 months + Shr loss 64 cts vs profit 46 cts + Net loss 8,843,000 vs profit 6,306,0000 + Rev 558.9 mln vs 556.7 mln + NOTE: Net loss for 4th qtr 1986 includes charge for +restructuring of 2.6 mln dlrs after tax, or 19 cts a share. + 1986 net loss includes after tax special charge of 2.7 mln +dlrs, or 20 cts a share. + + Reuter + + + +26-FEB-1987 15:49:27.16 +coffee +uk + +ico-coffee + + + +C T +f0871reute +b f BC-ICO-PRODUCERS-TO-PRES 02-26 0109 + +ICO PRODUCERS TO PRESENT NEW COFFEE PROPOSAL + LONDON, Feb 26 - International Coffee Organization, ICO, +producing countries will present a proposal for reintroducing +export quotas for 12 months from April 1 with a firm +undertaking to try to negotiate up to September 30 any future +quota distribution on a new basis, ICO delegates said. + Distribution from April 1 would be on an unchanged basis as +in an earlier producer proposal, which includes shortfall +redistributions totalling 1.22 mln bags, they said. + Resumption of an ICO contact group meeting with consumers, +scheduled for this evening, has been postponed until tomorrow, +delegates said. + Reuter + + + +26-FEB-1987 15:49:44.93 + +usairan + + + + + +V RM +f0873reute +u f AM-REAGAN-SHULTZ-1STLD 02-26 0108 + +SHULTZ SAYS NO RESIGNATION OVER IRAN REPORT + ANCHORAGE, Alaska, Feb 26 - Secretary of State George +Shultz acknowledged failings in the Iran arms affair but +declared he would not resign. + His role in the scandal that has scarred the Reagan +administration attracted harsh criticism from the Tower +commission in its report on the affair published today. + Shultz, travelling to China for a week-long visit, refused +to comment directly on the report, published after he had left +Washington. But he repeated -- as he has done since the crisis +broke last November -- that he was not going to resign. + "You can wipe that off your slate," he said. + Reuter + + + +26-FEB-1987 15:49:56.01 +acqship +usa + + + + + +F +f0874reute +r f BC-MCLEAN'S-<MII>-U.S.-L 02-26 0094 + +MCLEAN'S <MII> U.S. LINES SETS ASSET TRANSFER + CRANFORD, N.J., Feb 26 - McLean Industries Inc's United +States Lines Inc subsidiary said it has agreed in principle to +transfer its South American service by arranging for the +transfer of certain charters and assets to <Crowley Mariotime +Corp>'s American Transport Lines Inc subsidiary. + U.S. Lines said negotiations on the contract are expected +to be completed within the next week. Terms and conditions of +the contract would be subject to approval of various regulatory +bodies, including the U.S. Bankruptcy Court. + Reuter + + + +26-FEB-1987 15:51:17.84 +acq +usa + + + + + +F +f0881reute +u f BC-CHEMLAWN-<CHEM>-RISES 02-26 0106 + +CHEMLAWN <CHEM> RISES ON HOPES FOR HIGHER BIDS + By Cal Mankowski, Reuters + NEW YORK, Feb 26 - ChemLawn Corp <CHEM> could attract a +higher bid than the 27 dlrs per share offered by Waste +Management Inc <WNX>, Wall Street arbitrageurs said. + Shares of ChemLawn shot up 11-5/8 to 29-3/8 in +over-the-counter- trading with 3.8 mln of the company's 10.1 +mln shares changing hands by late afternoon. + "This company could go for 10 times cash flow or 30 dlrs, +maybe 32 dollars depending on whether there is a competing +bidder," an arbitrageur said. Waste Management's tender offer, +announced before the opening today, expires March 25. + "This is totally by surprise," said Debra Strohmaier, a +ChemLawn spokeswoman. The company's board held a regularly +scheduled meeting today and was discussing the Waste Management +announcement. She said a statement was expected but it was not +certain when it would be ready. + She was unable to say if there had been any prior contact +between Waste Management and ChemLawn officials. + "I think they will resist it," said Elliott Schlang, +analyst at Prescott, Ball and Turben Inc. "Any company that +doesn't like a surprise attack would." + Arbitrageurs pointed out it is difficult to resist tender +offers for any and all shares for cash. Schlang said ChemLawn +could try to find a white knight if does not want to be +acquired by Waste Management. + Analyst Rosemarie Morbelli of Ingalls and Snyder said +ServiceMaster Companies L.P. <SVM> or Rollins Inc <ROL> were +examples of companies that could be interested. + ChemLawn, with about two mln customers, is the largest U.S. +company involved in application of fertilizers, pesticides and +herbicides on lawns. Waste Management is involved in removal of +wastes. + Schlang said ChemLawn's customer base could be valuable to +another company that wants to capitalize on a strong +residential and commercial distribution system. + Both Schlang and Morbelli noted that high growth rates had +catapulted ChemLawn's share price into the mid-30's in 1983 but +the stock languished as the rate of growth slowed. + Schlang said the company's profits are concentrated in the +fourth quarter. In 1986 ChemLawn earned 1.19 dlrs per share for +the full year, and 2.58 dlrs in the fourth quarter. + Morbelli noted ChemLawn competes with thousands of +individual entrepreuers who offer lawn and garden care sevice. + Reuter + + + +26-FEB-1987 15:51:28.42 +sugar +usa + + + + + +C T +f0882reute +b f BC-sugar-imports 02-26 0120 + +U.S. SUGAR IMPORTS DOWN IN WEEK - USDA + WASHINGTON, Feb 26 - Sugar imports subject to the U.S. +sugar import quota during the week ended January 9, the initial +week of the 1987 sugar quota year, totaled 5,988 short tons +versus 46,254 tons the previous week, the Agriculture +Department said. + The sugar import quota for the 1987 quota year +(January-December) has been set at 1,001,430 short tons +compared with 1,850,000 tons in the 1986 quota year, which was +extended three months to December 31. + The department said the Customs Service has reported that +weekly and cumulative imports are reported on an actual weight +basis and when final polarizations are received, cumulative +import data are adjusted accordingly. + Reuter + + + +26-FEB-1987 15:51:51.24 +trade +brazil + + + + + +C G L M T +f0884reute +d f AM-CRUZADO 02-26 0114 + +BRAZIL ANTI-INFLATION PLAN LIMPS TO ANNIVERSARY + RIO DE JANEIRO, Feb 26 - Brazil's "Cruzado" anti- inflation +plan, initially hailed at home and abroad as the saviour of the +economy, is limping towards its first anniversary amid soaring +prices, widespread shortages and a foreign payments crisis. + Announced last February 28 the plan froze prices, fixed the +value of the new Cruzado currency and ended widespread +indexation of the economy in a bid to halt the country's 250 +pct inflation rate. + But within a year the plan has all but collapsed. + "The situation now is worse than it was. Although there was +inflation, at least the economy worked," a leading bank +economist said. + The crumbling of the plan has been accompanied by a +dramatic reversal in the foreign trade account. In 1984 and +1985 Brazil's annual trade surpluses had been sufficient to +cover the 12 billion dlrs needed to service its 109 billion dlr +foreign debt. + For the first nine months of 1986 all seemed to be on +target for a repeat, with monthly surpluses averaging one +billion dlrs. But as exports were diverted and imports +increased to avoid further domestic shortages the trade surplus +plunged to 211 mln dlrs in October and since then has averaged +under 150 mln. + Reuter + + + +26-FEB-1987 15:52:15.10 +reserves +new-zealand + + + + + +RM +f0886reute +u f BC-N.Z.-OFFICIAL-FOREIGN 02-26 0049 + +N.Z. OFFICIAL FOREIGN RESERVES FALL IN JANUARY + WELLINGTON, Feb 27 - New Zealand's official foreign +reserves fell to 7.15 billion N.Z. Dlrs in January from 7.20 +billion dlrs in December and compared with 3.03 billion a year +ago period, the Reserve Bank said in its weekly statistical +bulletin. + Reuter + + + +26-FEB-1987 15:52:25.60 +ship +usapanama + + + + + +G T M +f0888reute +d f BC-panama-canal-ships 02-26 0071 + +AGENCY REPORTS 39 SHIPS WAITING AT PANAMA CANAL + WASHINGTON, Feb 26 - The Panama Canal Commission, a U.S. +government agency, said in its daily operations report that +there was a backlog of 39 ships waiting to enter the canal +early today. Over the next two days it expects -- + 2/26 2/27 + Due: 27 35 + Scheduled to Transit: 35 41 + End-Day Backlog: 31 25 + Average waiting time tomorrow -- + Super Tankers Regular Vessels + North End: 13 hrs 15 hrs + South End: 4 hrs 26 hrs + Reuter + + + +26-FEB-1987 15:52:33.04 +earn +usa + + + + + +F +f0889reute +d f BC-AMERICA-FIRST-MORTGAG 02-26 0046 + +AMERICA FIRST MORTGAGE SETS SPECIAL PAYOUT + OMAHA, Neb., Feb 26 - <America First Federally Guaranteed +Mortgage Fund Two> said it is making a special distribution of +71.6 cts per exchangeable unit, which includes 67.62 cts from +return on capital and 3.98 cts from income gains. + Reuter + + + +26-FEB-1987 15:52:57.49 + +usa + + + + + +C G +f0894reute +d f BC-REPUBLICANS-EYE-BIGGE 02-26 0112 + +REPUBLICANS EYE BIGGER U.S. CONSERVATION RESERVE + WASHINGTON, Feb 26 - A group of Republican governors and +members of Congress said they intended to explore expanding the +conservation reserve program by up to 20 mln acres. + Under current law, between 40 and 45 mln acres of erodible +land must be enrolled in the program by the end of fiscal 1990. + The Republican Task Force on Farm and Rural America, headed +by Senate Majority Leader Robert Dole (Kan.), said they would +consider drafting legislation to increase the reserve by +between 15 and 20 mln acres. + Sen. Charles Grassley (R-Iowa) told Reuters he would offer +a bill to expand the reserve to 67 mln acres. + Reuter + + + +26-FEB-1987 15:53:05.48 + +usa + + + + + +F +f0895reute +h f BC-ARVIN-INDS-<ARV>-PROM 02-26 0037 + +ARVIN INDS <ARV> PROMOTES EVANS TO PRESIDENT + COLUMBUS, IND., Feb 26 - Arvin Industries Inc said L.K. +Evans has been elected president, succeeding James Baker who +remains chairman. Evans had been executive vice president. + Reuter + + + +26-FEB-1987 15:53:54.56 +earn +usa + + + + + +F +f0899reute +s f BC-EMHART-CORP-<EMH>-QTL 02-26 0024 + +EMHART CORP <EMH> QTLY DIVIDEND + FARMINGTON, Conn., FEb 26 - + Qtly div 35 cts vs 35 cts prior + Payable March 31 + Record March nine + + Reuter + + + +26-FEB-1987 15:54:55.20 + +usa + + + + + +V RM +f0901reute +u f BC-/U.S.-DATA-POINT-TO-C 02-26 0102 + +U.S. DATA POINT TO CAPITAL SPENDING SLOWDOWN + By Kathleen Hays, Reuters + NEW YORK, Feb 26 - A surprise 7.5 pct drop in U.S. January +durable goods orders points to a slowdown in capital spending +that could presage lackluster real growth in the U.S. economy +in the first quarter of 1987, economists said. + With total orders, excluding the volatile defense sector, +falling a record 9.9 pct, economists agreed that the report +painted a bleak picture for the U.S. economy. + But they stressed that the 1987 tax reform laws may be a +primary factor behind the drop in orders for business capital +investment. + "It's a rather gloomy outlook for the economy, said David +Wyss of Data Resources Inc. "I'm particularly impressed by the +19.7 pct drop in non-defense capital goods orders because it +may be a sign that businesses are reacting more adversely to +tax reform than we thought." + The Commerce Department pointed out that a record 14.8 pct +decline in new orders for machinery was led by declines in +office and computing equipment orders. + Economists said the drop in computer orders may have been a +response to the lengthening of depreciation schedules and the +end of the investment tax credit under the new tax laws. + "It's more expensive to invest than it used to be, so +people just aren't doing it as much," Wyss said. + Increases in durable goods orders at year's end reinforced +the view that businesses anticipated the changing tax laws, +economists said. + November durable goods orders rose 5.1 pct and December's +increased 1.5 pct, revised upwards from a previously reported +0.9 pct. + But most acknowledged that the huge January drop was caused +by more than tax reform. + "The wash-out that took place in January was far greater +than the actual gains that took place in November and +December," said Bill Sullivan of Dean Witter Reynolds Inc. "The +economy has a weakening bent to it early in the year." + "The report definitely points to very sluggish capital +spending over the next couple of quarters," said Donald Maude +of Midland Montagu Capital Markets Inc. + Maude pointed to a continuing decline in order backlogs as +evidence that the outlook for new orders is not improving. In +November, order backlogs rose 0.6 pct, but in December they +fell 0.6 pct and in January 0.7 pct, he said. + "It suggests orders in the pipeline are depleting, which +may quickly translate to a drop in production," Midland +Montagu's Maude said. + Wyss cautioned that too much should not be made of +January's report, given that other reports have reflected +strength. + But he acknowledged that the decline occurred despite a 51 +pct rise in defense orders, compared with a 57.7 pct decline in +December. + He also noted that there was a 6.9 pct drop in January +shipments, compared with a 5.4 pct rise in December. + "Given these numbers, there's no reason for the Fed to +tighten," Data Resources' Wyss said. + "But there's no reason to ease unless we see more numbers +like this. The Fed will wait and see," he added. + Sullivan predicted the Fed will ease by Easter. "People +aren't talking recession or Fed easing now, but the Fed will +have to ease to ensure global growth." + Reuter + + + +26-FEB-1987 15:56:00.50 + +usa + + + + + +C +f0903reute +d f BC-SENATORS-INTRODUCE-EX 02-26 0110 + +SENATORS INTRODUCE EXPORT LICENSING REFORM BILL + WASHINGTON, Feb 26 - Sens. Alan Cranston (D-Cal.) and +Daniel Evans (R-Wash.) said they introduced export licensing +reform legislation that could save U.S. companies hundreds of +thousands of dollars annually. + "Our emphasis is two-fold: Decontrol and de-license items +where such actions will not endanger our national security, and +eliminate the Department of Defense's de facto veto authority +over the licensing process," Cranston said. + "Our reforms should reduce licensing requirements by 65 to +70 pct," he told reporters. "I am convinced that a more +rational...licensing process will boost exports." + U.S. export controls are intended to deny Eastern bloc +countries access to technology that could further their +military capabilities. + "By refocusing our control resources on higher levels of +technology, technology that is truly critical, we will do a +better job of preventing diversion of critical technology to +our adversaries while promoting more exports," Cranston said. + "We cannot expect to continue to play a leading role in new +technology development in the future if we unduly restrict the +activities of U.S. firms in the world market-place," Evans told +reporters. + Reuter + + + +26-FEB-1987 15:57:48.22 +earn +usa + + + + + +F +f0906reute +r f BC-AM-INTERNATIONAL-<AM> 02-26 0092 + +AM INTERNATIONAL <AM> CITES STRONG PROSPECTS + CHICAGO, Feb 26 - AM International Inc, reporting an +operating loss for the January 31 second quarter, said +prospects for the balance of the fiscal year remain good. + It said orders at its Harris Graphics subsidiary, acquired +in June 1986, "continue to run at a strong pace." For the six +months, orders rose 35 pct over the corresponding prior-year +period, or on an annualized basis are running at about 630 mln +dlrs. + The backlog at Harris is up 30 pct from the beginning of +the fiscal year, AM said. + AM International said its old division are expected to +benefit from recent new product introductions and the decline +in the value of the dollar. + "Research, development and engineering expenditures in +fiscal 1987 will be in the 45-50 mln dlr range, and the company +said it has allocated another 30-40 mln dlrs for capital +expenditures. + Earlier AM reported a fourth quarter operating loss of two +cts a share compared to profits of seven cts a share a year +ago. Revenues rose to 291.8 mln dlrs from 151.1 mln dlrs. + Reuter + + + +26-FEB-1987 15:58:07.34 +graincorn +usahonduras + + + + + +C G +f0907reute +u f BC-CCC-CREDITS-FOR-HONDU 02-26 0097 + +CCC CREDITS FOR HONDURAS SWITCHED TO WHITE CORN + WASHINGTON, Feb 26 - The Commodity Credit Corporation (CCC) +announced 1.5 mln dlrs in credit guarantees previously +earmarked to cover sales of dry edible beans to Honduras have +been switched to cover sales of white corn, the U.S. +Agriculture Department said. + The department said the action reduces coverage for sales +of dry edible beans to 500,000 dlrs and creates the new line of +1.5 mln dlrs for sales of white corn. + All sales under the credit guarantee line must be +registered and shipped by September 30, 1987, it said. + Reuter + + + +26-FEB-1987 15:58:19.46 +money-supply +usa + + + + + +A RM +f0908reute +u f BC-ASSETS-OF-U.S.-MONEY 02-26 0072 + +ASSETS OF U.S. MONEY FUNDS ROSE IN WEEK + WASHINGTON, Feb 26 - Assets of money market mutual funds +increased 720.4 mln dlrs in the week ended yesterday to 236.90 +billion dlrs, the Investment Company Institute said. + Assets of 91 institutional funds rose 356 mln dlrs to 66.19 +billion dlrs, 198 general purpose funds rose 212.5 mln dlrs to +62.94 billion dlrs and 92 broker-dealer funds rose 151.9 mln +dlrs to 107.77 billion dlrs. + Reuter + + + +26-FEB-1987 15:58:47.73 +ship +usa + + + + + +G C +f0910reute +u f BC-gulf-grain-barge-frgt 02-26 0117 + +GULF BARGE FREIGHT RATES UP FURTHER ON CALL + ST LOUIS, Feb 26 - Gulf barge freight rates firmed again on +the outlook for steady vessel loadings at the Gulf, increasing +the demand for barges to supply those ships, dealers said. + No barges traded today on the St Louis Merchants' Exchange +call session, versus 29 yesterday. + Quotes included - + - Delivery this week on the Illinois River (Joliet) 135 pct of +tariff bid/140 offered, with next week same river (ex Chicago) +quoted the same - both up 2-1/2 percentage points. + - Next week Mississippi River (St Louis) 120 pct bid/127-1/2 +offered - up five points. + - Next week Ohio River (Owensboro/south) 125 pct bid/132-1/2 +offered - up 7-1/2 points. + - On station Illinois River (south Chicago) 135 pct bid/140 +offered - no comparison. + - March Illinois (ex Chicago) 132-1/2 pct bid/140 offered - up +2-1/2 points. + - March Ohio River bid at yesterday's traded level of 125 pct, +offered at 132-1/2. + - March lower Mississippi River (Memphis/Cairo) 112-1/2 pct +bid/120 offered - no comparison. + - May Illinois River (ex Chicago) 100 pct bid/107-1/2 offered +- no comparison. + - Sept/Nov Lower Mississippi River (Memphis/Cairo) 137-1/2 pct +bid/145 offered, with Sept/Dec same section 125 pct bid/135 +offered - no comparison. + Reuter + + + +26-FEB-1987 16:03:15.46 + +argentina + + + + + +C G L M T +f0923reute +u f BC-ARGENTINA-COULD-SUSPE 02-26 0110 + +ARGENTINA COULD SUSPEND DEBT PAYMENTS - DEPUTY + BUENOS AIRES, Feb 26 - Argentina could suspend payments on +its foreign debt if creditor banks reject a 2.15 billion dlr +loan request to meet 1987 growth targets, ruling Radical Party +Deputy Raul Baglini told a local radio station. + "Argentina does not discard the use of (a moratorium) if the +negotiations do not produce a result that guarantees the growth +of the country," he added. + Baglini, an observer at Argentina's negotiations in New +York with the steering committee for its 320 creditors banks, +told the Radio del Plata in a telephone interview that the +banks were divided on the loan request. + Baglini said that as a result, today's scheduled second day +of talks had been postponed. + He said Argentina was prepared to follow the example of +Brazil, which last week declared a moratorium on interest +payments of a large portion of its 108 billion dlr foreign +debt. + Argentina's prime objective in renegotiating the debt was +to maintain growth, which has been targeted at four pct in +1987, Baglini said. + "Debtor nations should not have to take from their own +pockets, that is their commercial balance, to meet interest +payments," he added. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-001.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-001.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-001.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-001.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2010 @@ + + + 3-MAR-1987 09:18:21.26 + +usaussr + + + + + +G T +f0288reute +d f BC-SANDOZ-PLANS-WEEDKILL 03-03 0095 + +SANDOZ PLANS WEEDKILLER JOINT VENTURE IN USSR + BASLE, March 3 - Sandoz AG said it planned a joint venture +to produce herbicides in the Soviet Union. + The company said it had signed a letter of intent with the +Soviet Ministry of Fertiliser Production to form the first +foreign joint venture the ministry had undertaken since the +Soviet Union allowed Western firms to enter into joint ventures +two months ago. + The ministry and Sandoz will each have a 50 pct stake, but +a company spokeswoman was unable to give details of the size of +investment or planned output. + Reuter + + + + 3-MAR-1987 09:19:31.96 + +usataiwan + + + + + +G +f0295reute +d f BC-TAIWAN-REJECTS-TEXTIL 03-03 0137 + +TAIWAN REJECTS TEXTILE MAKERS EXCHANGE RATE PLEA + TAIPEI, March 3 - Central bank governor Chang Chi-cheng +rejected a request by textile makers to halt the rise of the +Taiwan dollar against the U.S. Dollar to stop them losing +orders to South Korea, Hong Kong and Singapore, a spokesman for +the Taiwan Textile Federation said. + He quoted Chang as telling representatives of 19 textile +associations last Saturday the government could not fix the +Taiwan dollar exchange rate at 35 to one U.S. Dollar due to +U.S. Pressure for an appreciation of the local currency. + The Federation asked the government on February 19 to hold +the exchange rate at that level. + The federation said in its request that many local textile +exporters were operating without profit and would go out of +business if the rate continued to fall. + Reuter + + + + 3-MAR-1987 09:20:23.32 +earn +usa + + + + + +F +f0296reute +d f BC-NATIONAL-FSI-INC-<NFS 03-03 0080 + +NATIONAL FSI INC <NFSI> 4TH QTR LOSS + DALLAS, March 3 - + Shr loss six cts vs profit 19 cts + Net loss 166,000 vs profit 580,000 + Revs 3,772,000 vs 5,545,000 + Year + Shr loss 13 cts vs profit 52 cts + Net loss 391,000 vs profit 1,425,000 + Revs 15.4 mln vs 16.6 mln + NOTE: 1985 year figures pro forma for purchase accounting +adjustments resulting from March 1985 reeacquisition of company +by its original shareholders before August 1985 initial public +offering. + Reuter + + + + 3-MAR-1987 09:21:39.11 + +usa + + + + + +Y +f0301reute +r f BC-OCCIDENTAL-<OXY>-OFFI 03-03 0049 + +OCCIDENTAL <OXY> OFFICIAL RESIGNS + LOMBARD, Ill., March 3 - MidCon Corp, a subsidiary of +Occidental Petroleum Corp <OXY>, said William C. Terpstra has +resigned as president and chief operating officer and his +reponsibilities will be assumed by MidCon chairman O.C. Davis. + No reason was given. + Reuter + + + + 3-MAR-1987 09:25:48.88 + +italy + + + + + +RM +f0308reute +u f BC-ITALY'S-BNL-TO-ISSUE 03-03 0101 + +ITALY'S BNL TO ISSUE 120 MLN DLR CONVERTIBLE BOND + ROME, March 3 - Italy's state-owned <Banca Nazionale del +Lavoro - BNL> said it would issue 120 mln dlrs of five-year +convertible eurobonds, an operation to be lead-managed by +<Credit Suisse-First Boston Ltd>. + BNL president Nerio Nesi told a news conference that the +issue, to be placed on the main international markets and +listed in Luxembourg, would be the first equity linked issue by +an Italian bank on the Euromarket. + BNL officials said the issue is scheduled for mid-March and +additional financial details were not immediately available. + They said the operation would be through the issue of +depositary receipts by BNL's London branch. They said the bonds +would carry warrants issued by its <Efibanca> subsidiary and +convertible into BNL saving shares within five years. + The officials said a banking consortium led by Credit +Suisse-First Boston would at the same time arrange for the +private placing of an unspecified number of BNL savings shares +with foreign institutional investors. + The operation was to further its aim of obtaining a listing +on foreign stock exchanges with a view to future capital +increases through ordinary share issues, they said. + REUTER + + + + 3-MAR-1987 09:27:51.06 + +usa + + + + + +F +f0313reute +u f BC-GE-<GE>-SAYS-AMR-<AMR 03-03 0076 + +GE <GE> SAYS AMR <AMR> ORDER WORTH 650 MLN DLRS + EVENDALE, Ohio, March 3 - General Electric Co said AMR +Corp's oprder of GE CFG-80C2 engines to power 25 new <Airbus +Industrie> A300-600R and 15 Boeing Co <BA> 767-300ER twinjets +is worth over 650 mln dlrs. + The company said the order is the largest single one it has +ever received for commercial aircraft engines. + AMR announced the order earlier today. + GE said deliveries will start in early 1988. + Reuter + + + + 3-MAR-1987 09:30:07.60 +earn +canada + + + + + +E F +f0314reute +r f BC-precambrian-shield 03-03 0054 + +<PRECAMBRIAN SHIELD RESOURCES LTD> YEAR LOSS + CALGARY, Alberta, March 3 - + Shr loss 1.93 dlrs vs profit 16 cts + Net loss 53,412,000 vs profit 4,479,000 + Revs 24.8 mln vs 32.7 mln + Note: 1986 shr and net include 51,187,000 dlr writedown on +U.S. operations, uneconomic coal operations and other mineral +properties + Reuter + + + + 3-MAR-1987 09:30:48.45 +money-fxinterest +uk + + + + + +RM +f0316reute +b f BC-U.K.-MONEY-MARKET-GIV 03-03 0094 + +U.K. MONEY MARKET GIVEN FURTHER 437 MLN STG HELP + LONDON, March 3 - The Bank of England said it had provided the +money market with a further 437 mln stg assistance in the +afternoon session. This brings the Bank's total help so far +today to 461 mln stg and compares with its revised shortage +forecast of 450 mln stg. + The central bank made purchases of bank bills outright +comprising 120 mln stg in band one at 10-7/8 pct and 315 mln +stg in band two at 10-13/16 pct. + In addition, it also bought two mln stg of treasury bills +in band two at 10-13/16 pct. + REUTER + + + + 3-MAR-1987 09:32:34.04 +earn +usa + + + + + +F +f0323reute +d f BC-GREASE-MONKEY-HOLDING 03-03 0024 + +GREASE MONKEY HOLDING CORP <GMHC> YEAR NOV 30 + DENVER, March 3 - + Shr nil vs nil + Net 130,998 vs 30,732 + Revs 1,568,941 vs 1,0053,234 + Reuter + + + + 3-MAR-1987 09:33:32.98 +earn +usa + + + + + +F +f0331reute +d f BC-ACCEPTANCE-INSURANCE 03-03 0058 + +ACCEPTANCE INSURANCE HOLDINGS INC <ACPT> YEAR + OMAHA, March 3 - + Oper shr profit 1.80 dlrs vs loss 2.28 dlrs + Oper net profit 2,048,0000 vs loss 1,318,000 + Revs 25.4 mln vs 12.3 mln + Avg shrs 1,135,000 vs 576,000 + NOTE: Net excludes realized investment gains of 40,000 dlrs +vs 13,000 dlrs. + 1986 net excludes 729,000 dlr tax credit. + Reuter + + + + 3-MAR-1987 09:35:03.37 +earn +usa + + + + + +F +f0333reute +u f BC-MINSTAR-INC-<MNST>-4T 03-03 0064 + +MINSTAR INC <MNST> 4TH QTR NET + MINNEAPOLIS, MINN., March 3 - + Oper shr loss 31 cts vs loss 30 cts + Oper net loss 5,429,000 vs loss 5,216,000 + Revs 257.5 mln vs 243.6 mln + Avg shrs 17.5 mln vs 13.5 mln + Year + Oper shr loss eight cts vs profit 28 cts + Oper net loss 1,324,000 vs profit 4,067,000 + Revs 989.5 mln vs 747.9 mln + Avg shrs 17.6 mln vs 15.7 mln + + NOTE: 1986 operating net loss excludes income from +discontinued operations equal to 11 cts in the quarter and 66 +cts in the year compared with 1.07 dlrs in the quarter and 1.23 +dlrs in the respective periods of 1985. + 1986 operating net loss also excludes extraordinary charges +of 14 cts in the quarter and 54 cts in the year. + 1985 operating net profit excludes an extraordinary gain of +47 cts. + Reuter + + + + 3-MAR-1987 09:37:19.17 + +switzerland + + + + + +RM +f0338reute +u f BC-DAI-ICHI-HOTEL-SWISS 03-03 0080 + +DAI-ICHI HOTEL SWISS FRANC NOTES COUPON CUT + ZURICH, March 3 - The coupon on Dai-Ichi Hotel Ltd's 50 mln +Swiss franc issue of five-year notes with equity warrants has +been cut to 1-5/8 pct from the indicated 1-7/8 pct, lead +manager Swiss Volksbank said. + The warrants have an exercise price of 1,507 yen per share, +compared with the last traded price of 1,470 yen, it said. + The notes are guarantees by Long-Term Credit Bank of Japan +Ltd. Payment is due on March 25. + REUTER + + + + 3-MAR-1987 09:37:43.02 +earn +canada + + + + + +E F +f0339reute +r f BC-mark-resources-inc 03-03 0044 + +<MARK RESOURCES INC> YEAR LOSS + CALGARY, Alberta, March 3 - + Shr not given + Loss 54.9 mln + Revs 27.2 mln + Note: Prior year results not given. 1986 results include +accounts of 89 pct owned <Precambrian Shield Resources Ltd>, +acquired November 5, 1986 + Reuter + + + + 3-MAR-1987 09:37:53.73 + +uk + + + + + +A +f0340reute +r f BC-SAAB-SCANIA-ISSUES-15 03-03 0078 + +SAAB-SCANIA ISSUES 150 MLN DLR EUROBOND + LONDON, March 3 - Saab-Scania AB is issuing a 150 mln dlr +eurobond due April 2, 1992 paying 7-3/4 pct and priced at +101-3/4 pct, lead manager Morgan Guaranty Ltd said. + The bond is available in denominations of 5,000 and 50,000 +dlrs and will be listed in London. Payment date is April 2, +1992. + Fees comprise 1-1/4 pct selling concession and 5/8 pct +management and underwriting combined, and listing will be in +London. + REUTER + + + + 3-MAR-1987 09:38:16.31 +earn +usa + + + + + +F +f0341reute +d f BC-TRANSFORM-LOGIC-<TOOG 03-03 0133 + +TRANSFORM LOGIC <TOOG> REVISES RESULTS DOWNWARD + SCOTTSDALE, Ariz., March 3 - Transform Logic Corp said it +has revised downward its previously reported fourth quarter and +year, ended October 31, results to reflect compensation expense +for employee stock options. + The company said resolution of this disagreement with its +auditors came as a result of Securities and Exchange Commission +involvement. The company will amend its option-granting +procedure to conform to the SEC decision which will eliminate +future charges, it added. + Transform said its fourth quarter profit was revised to +305,082 dlrs, or two cts a share, from the previously reported +580,955 dlrs, which left the company with a fiscal 1986 loss of +249,814 dlrs, or two cts a share, instead of the reported +26,195 dlrs profit. + Reuter + + + + 3-MAR-1987 09:38:28.76 +earn +usa + + + + + +F +f0342reute +r f BC-AMERICAN-STORES-<ASC> 03-03 0061 + +AMERICAN STORES <ASC> SEES LOWER YEAR NET + SALT LAKE CITY, March 3 - American Stores Co said it +expects to report earnings per share of 3.70 to 3.85 dlrs per +share on sales of slightly over 14 billion dlrs for the year +ended January 31. + The supermarket chain earned 4.11 dlrs per share on sales +of 13.89 billion dlrs last year. + The company did not elaborate. + Reuter + + + + 3-MAR-1987 09:38:33.69 +earn +usa + + + + + +F +f0343reute +r f BC-KASLER-CORP-<KASL>-1S 03-03 0031 + +KASLER CORP <KASL> 1ST QTR JAN 31 NET + SAN BERNARDINO, Calif., March 3 - + Shr profit three cts vs loss seven cts + Net profit 161,000 vs loss 367,000 + Revs 24.3 mln vs 26.5 mln + Reuter + + + + 3-MAR-1987 09:41:45.44 + +usa + + + + + +F +f0346reute +r f BC-CARIBBEAN-SELECT-<CSE 03-03 0091 + +CARIBBEAN SELECT <CSEL> TO REDEEM WARRANTS + TAMPA, Fla., March 3 - Caribbean Select Inc said it has +elected to redeem on April 10 all its Class A warrants and all +Class B warrants at 0.01 ct each. + At the same time, it said its board has decided to reduce +the exercise price of the Class B warrants to 3.50 dlrs per +common share from four dlrs to encourage the exercise of the +warrants. Each Class B warrant allows the purchase of one +common share. + It said each Class A warrant is still exercisable into one +common share at two dlrs each. + Reuter + + + + 3-MAR-1987 09:45:18.22 +earn +uk + + + + + +F +f0356reute +d f BC-UNILEVER-HAS-IMPROVED 03-03 0099 + +UNILEVER HAS IMPROVED MARGINS, VOLUMES IN 1986 + LONDON, MARCH 3 - Unilever Plc <UN.A> and NV group reported +improvements in margins and underlying sales volume growth of +five pct in 1986 after stripping out the effects of falling +prices, disposals and currency movements, Unilever Plc chairman +Michael Angus said. + He told reporters that volumes in North America increased +some 10.5 pct while European consumer goods rose about 2.5 pct +after being flat for some years. + Much of the disposal strategy, aimed at concentrating +activities on core businesses, had now been completed, he +noted. + But the process of acquisitions would go on, with strategic +acquisitions taking place "from time to time," he said. + The company earlier reported a 20 pct rise in pre-tax +profits for 1986 to 1.14 billion stg from 953 mln previously. +In guilder terms, however, profits at the pre-tax level dropped +three pct to 3.69 billion from 3.81 billion. + Angus said the recent purchase of Chesebrough-Pond's Inc +<CBM.N> for 72.50 dlrs a share was unlikely to bring any +earnings dilution. + However, it would not add much to profits, with much of the +company's operating profits paying for the acquisition costs. + Finance director Niall Fitzgerald added that while gearing +- debt to equity plus debt - rose to about 60 pct at end 1986 +from 35 pct last year, this was expected to drop back to about +40 pct by end-1987. + The same divergence was made in full year dividend, with +Unilever NV's rising 3.4 pct to 15.33 guilders and Unilever +Plc's increasing 29.9 pct to 50.17p, approximately in line with +the change in attributable profit. + Angus said the prospectus for the sale of parts of +Chesebrough was due to be published shortly. However, he said +that there was no target date for completing the process. + He also declined to say what sort of sum Unilever hoped to +realise from the operation, beyond noting that Chesebrough had +paid around 1.25 billion dlrs for Stauffer Chemical Co, which +operates outside Unilever's core activities. + In the U.S., Organic growth from the Lipton Foods business, +considerable expansion in the household products business and +in margarine had been behind the overall sales increase. + However, he noted that the U.S. Household products business +had turned in a planned loss, with fourth quarter performance +better than expected despite the anticipated heavy launch costs +of its Surf detergents. + Reuter + + + + 3-MAR-1987 09:45:29.48 +acq +usa + + + + + +F +f0357reute +r f BC-SARA-LEE-<SLE>-TO-BUY 03-03 0096 + +SARA LEE <SLE> TO BUY 34 PCT OF DIM + CHICAGO, March 3 - Sara Lee Corp said it agreed to buy a 34 +pct interest in Paris-based DIM S.A., a subsidiary of BIC S.A., +at a cost of about 84 mln dlrs. + DIM S.A., a hosiery manufacturer, had 1985 sales of about +260 mln dlrs. + The investment includes the purchase of 360,537 newly +issued DIM shares valued at about 51 mln dlrs and a loan of +about 33 mln dlrs, it said. The loan is convertible into an +additional 229,463 DIM shares, it noted. + The proposed agreement is subject to approval by the French +government, it said. + Reuter + + + + 3-MAR-1987 09:45:54.32 + +usa + + + + + +F +f0358reute +r f BC-HOLIDAY-CORP-<HIA>-HO 03-03 0086 + +HOLIDAY CORP <HIA> HOTEL GROUP ADDS PROPERTIES + MEMPHIS, Tenn., March 3 - Holiday Corp's Holiday Inn Hotel +Group said it will add a record 17 hotels with 4,440 rooms to +its international division as part of its plan to double its +presence abroad by 1995. + The company said its international division will reach +50,000 rooms by this spring, classifying it as the eighth +largest hotel chain in the world. Holiday said by the end of +the year, there will be approximately 220 Holiday Inn hotels in +54 countries. + The company said it plans to expand from 28 to 55 hotels in +its Asia/Pacific region and to 192 in its Europe/Middle +East/Africa regionby 1995. + For 1987, the hotel group will focus on expansion on +Western Europe and Asia, citing China as an untapped source for +the international lodging industry. + Holiday also said it will concentrate on city center hotels +in key destination cities in Western Europe, catering primarily +to business travelers. + Some of those cities where Holiday said it will open new +properties this year include Amsterdam, Lyon/Atlas and Lisbon. + Reuter + + + + 3-MAR-1987 09:46:36.82 +trade +usachina + + + + + +G T M C +f0360reute +r f BC-CHINA-CALLS-FOR-BETTE 03-03 0140 + +CHINA CALLS FOR BETTER TRADE DEAL WITH U.S. + PEKING, March 3 - China called on the United States to +remove curbs on its exports, to give it favourable trading +status and ease restrictions on exports of high technology. + But the U.S. Embassy replied that Chinese figures showing +13 years of trade deficits with the U.S. Out of the last 15 are +inaccurate and said Peking itself would have to persuade +Congress to change laws which limit its exports. + The official International Business newspaper today +published China's demands in a editorial to coincide with the +visit of U.S. Secretary of State George Shultz. + "It is extremely important that the U.S. Market reduce its +restrictions on Chinese imports, provide the needed facilities +for them and businessmen from both sides help to expand Chinese +exports," the editorial said. + "The U.S. Should quickly discard its prejudice against +favourable tariff treatment for Chinese goods and admit China +into the Generalised System of Preference (GSP). + "Despite easing of curbs on U.S. Technology exports in +recent years, control of them is still extremely strict and +influences normal trade between the two countries," it added. + The paper also printed an article by China's commercial +counsellor in its Washington embassy, Chen Shibiao, who said +that "all kinds of difficulties and restrictions" were preventing +bilateral trade fulfilling its full potential. + He named them as U.S. Protectionist behaviour, curbs on +technology transfer and out-of-date trade legislation. + Reuter + + + + 3-MAR-1987 09:46:55.59 +lei +usa + + + + + +V RM +f0361reute +u f BC-/U.S.-COMMERCE-SECRET 03-03 0106 + +U.S. COMMERCE SECRETARY SAYS EXPORT RISE NEEDED + WASHINGTON, March 3 - Commerce Secretary Malcolm Baldrige +said after the release of a sharply lower January leading +indicator index that a pickup in exports is needed. + "The best tonic for the economy now would be a pickup in net +exports," he said in a statement after the department reported +the index fell 1.0 pct in January from December, the sharpest +drop since a 1.7 pct fall in July, 1984. + The main reasons for the January decline after a 2.3 pct +December rise were declines in building permits, new orders for +plant and equipment and for consumer and industrial goods. + Reuter + + + + 3-MAR-1987 09:47:47.16 +earn +canada + + + + + +E F +f0366reute +r f BC-precambrian-takes 03-03 0108 + +PRECAMBRIAN SHIELD TAKES 51 MLN DLR WRITEDOWN + CALGARY, Alberta, March 3 - <Precambrian Shield Resources +Ltd>, earlier reporting a large loss against year-ago profit, +said the 1986 loss was mainly due to a 51,187,000 dlr writedown +on its U.S. operations, uneconomic coal and other mineral +properties. + Precambrian, which is 89 pct owned by <Mark Resources Inc>, +said it took the writedown in accordance with new Canadian +Insititute of Chartered Accountants guidelines for full cost +method accounting by oil and gas companies. + Precambrian earlier reported a 1986 loss of 53.4 mln dlrs, +compared to profit of 4.5 mln dlrs in the prior year. + Reuter + + + + 3-MAR-1987 09:48:24.78 + +usa + + +nasdaq + + +F +f0367reute +r f BC-AERO-SERVICES-<AEROE> 03-03 0075 + +AERO SERVICES <AEROE> GETS NASDAQ EXCEPTION + TETERBORO, N.J., March 3 - Aero Services Inc said its +common stock will continue to be included for quotation in the +National Association of Securities Dealers' NASDAQ system due +to an exception from filing requiements, which it failed to +meet as of January 15. + The company said while it believes it can meet conditions +the NASD imposed for the exception, there can be no assurance +that it will do so. + Reuter + + + + 3-MAR-1987 09:49:23.53 +coffeecrude +kenya + + + + + +RM +f0373reute +r f BC-KENYAN-ECONOMY-FACES 03-03 0099 + +KENYAN ECONOMY FACES PROBLEMS, PRESIDENT SAYS + NAIROBI, March 3 - The Kenyan economy is heading for +difficult times after a boom last year, and the country must +tighten its belt to prevent the balance of payments swinging +too far into deficit, President Daniel Arap Moi said. + In a speech at the state opening of parliament, Moi said +high coffee prices and cheap oil in 1986 led to economic growth +of five pct, compared with 4.1 pct in 1985. + The same factors produced a two billion shilling balance of +payments surplus and inflation fell to 5.6 pct from 10.7 pct in +1985, he added. + "But both these factors are no longer in our favour ... As a +result, we cannot expect an increase in foreign exchange +reserves during the year," he said. + The price of coffee, Kenya's main source of foreign +exchange, fell in London today to about 94 cents a pound from a +peak of 2.14 dlrs in January 1986. + Crude oil, which early last year slipped below 10 dlrs a +barrel, has since crept back to over 18 dlrs. + Moi said the price changes, coupled with a general decline +in the flow of capital from the rest of the world, made it more +difficult to finance the government's budget deficit. + Kenya was already spending over 27 pct of its budget on +servicing its debts and last year it was a net exporter of +capital for the first time in its history, he added. + "This is a clear indication that we are entering a difficult +phase as regards our external debts, and it is imperative that +we raise the rate of domestic savings and rely less on foreign +sources to finance our development," he said. + "It will be necessary to maintain strict discipline on +expenditure ... And members of this house will have to take the +lead in encouraging wananchi (ordinary people) to be more +frugal in satisfying immediate needs," the president added. + REUTER + + + + 3-MAR-1987 09:49:45.02 + +usa + + + + + +F +f0375reute +r f BC-TRI-STAR-<TRSP>-CHANG 03-03 0079 + +TRI-STAR <TRSP> CHANGING FISCAL YEAR + NEW YORK, March 3 - Tri-Star Pictures Inc said it is +changing its fiscal year to year ending at the end of February +from a calendar year to reflect the traditional business cycles +of its two principal businesses, motion picture distribution +and motion picture exhibition. + It said it expects to file a report for the two-month +fiscal "year" ended February 28, 1987 by May 28 and to report +earnings for the new first quarter in June. + Reuter + + + + 3-MAR-1987 09:50:34.51 + +usa + + + + + +F +f0378reute +u f BC-LIFETIME-<LFT>-TO-MAK 03-03 0055 + +LIFETIME <LFT> TO MAKE ANNOUNCEMENT + NEW YORK, March 3 - Lifetime Corp said it will make an +announcement this morning between 1000 EST and 1030 EST. + A company spokesman said the company preferred not to +comment until that time. + The American Stock Exchange delayed trading in Lifetime +shares this morning for news pending. + Reuter + + + + 3-MAR-1987 09:53:44.44 +acq +usa + + + + + +E F +f0389reute +r f BC-scott's-hospitality 03-03 0071 + +SCOTT'S HOSPITALITY ACQUIRES CAPITAL FOOD + TORONTO, March 3 - <Scott's Hospitality Inc> said it +acquired all issued shares of Capital Food Services Ltd, of +Ottawa. Terms were not disclosed. + Scott's said Capital Food had 1986 sales of more than 20 +mln dlrs and will continue to operate under its present name +with existing management. + Capital Food provides food services to several Ottawa +institutions, the company said. + Reuter + + + + 3-MAR-1987 09:57:02.21 +coffee +zimbabwe + + + + + +C T +f0399reute +r f BC-ZIMBABWE-COFFEE-OUTPU 03-03 0099 + +ZIMBABWE COFFEE OUTPUT SET TO RISE + HARARE, March 3 - Zimbabwean coffee output will reach +13,000 tonnes this year, up on just over 11,000 tonnes produced +in 1986, the Commercial Coffee Growers Association said. + Administrative Executive Robin Taylor told the domestic +news agency ZIANA that Zimbabwe earned the equivalent of 33 mln +U.S. Dlrs from coffee exports last year. He would not say how +much the country would earn in 1987. + Taylor said the 173 commercial coffee growers under his +association had increased production from 5,632 tonnes in 1980 +to more than 11,000 tonnes in l986. + Reuter + + + + 3-MAR-1987 09:58:00.11 + +usa + + + + + +F +f0401reute +r f BC-YANKEE-<YNK>-SWAPS-ST 03-03 0048 + +YANKEE <YNK> SWAPS STOCK FOR DEBENTURES + COHASSET, Mass., March 3 - Yankee Cos Inc said it has +acquired 3,916,000 dlrs of 7-1/2 pct convertible subordinated +debentures due May 15, 1998 of its YFC International Finance NV +affiliate for 501,807 common shares from an institutional +investor. + Reuter + + + + 3-MAR-1987 10:00:52.96 +acq +usa + + + + + +F +f0408reute +d f BC-VIDEO-DISPLAY-<VIDE> 03-03 0082 + +VIDEO DISPLAY <VIDE> TO SELL CABLE TV UNIT + ATLANTA, March 3 - Video Display Corfp said it has reached +a tentiative agreement to sell its existing cable television +business for undisclosed terms and expects to report a gain on +the transaction. The buyer was not named. + The company said it will redeploy its service assets into +manufacturing and distribution. + It said the operations being sold accounted for about five +pct of revenues for the year ended February 28 and lost money. + Reuter + + + + 3-MAR-1987 10:00:57.16 +earn +usa + + + + + +F +f0409reute +d f BC-INTEK-DIVERSIFIED-COR 03-03 0041 + +INTEK DIVERSIFIED CORP <IDCC> 4TH QTR NET + LOS ANGELES, March 3 - + Shr three cts vs three cts + Net 98,20000 vs 91,898 + Revs 2,843,520 vs 2,372,457 + Year + Shr 13 cts vs 21 cts + Net 401,179 vs 681,374 + Revs 10.5 mln vs 9,699,535 + Reuter + + + + 3-MAR-1987 10:01:14.42 + +usa + + + + + +F +f0410reute +d f BC-BERYLLIUM-INT'L-SIGNS 03-03 0122 + +BERYLLIUM INT'L SIGNS JOINT VENTURE PACT + SALT LAKE CITY, Utah, March 3 - <Beryllium International +Corp> said it has signed a joint venture agreement with Cominco +American Inc, a unit of Cominco Ltd <CLT>, to develop a +beryllium mine and processing plant on Beryllium +International's property in the Topaz Mountains southwest of +Salt Lake City. + Beryllium said as a 49 pct owner of the venture iot would +be contributing the mine while Cominco, as operator and 51 pct +owner, would conduct drilling, metallurgical studies, process +testing and other preliminary work for a feasibility study. + Beryllium said the cost of the preliminary work in 1987, +which will start immediately, should be about 250,000 dlrs to +300,000 dlrs. + Reuter + + + + 3-MAR-1987 10:01:28.07 +housing +usa + + + + + +V RM +f0411reute +f f BC-******U.S.-SINGLE-FAM 03-03 0014 + +******U.S. SINGLE-FAMILY HOME SALES FELL 6.8 PCT IN JAN AFTER REVISED 12.1 PCT DEC GAIN +Blah blah blah. + + + + + + 3-MAR-1987 10:02:11.63 +housing +usa + + + + + +V RM +f0415reute +b f BC-/U.S.-HOME-SALES-FELL 03-03 0079 + +U.S. HOME SALES FELL 6.8 PCT IN JANUARY + WASHINGTON, March 3 - Sales of new single-family homes in +the United States fell 6.8 pct in January from December to a +seasonally adjusted annual rate of 716,000 units, the Commerce +Department said. + The department revised downward December's sales to a 12.1 +pct rise to 768,000 units from the previously reported 12.7 pct +increase. + The January decline in sales was the largest since last +October when sales fell 9.3 pct. + Before seasonal adjustment, the number of homes actually +sold in January was 53,000, up from 49,000 in December but down +from 59,000 in January, 1986. + The January fall brought home sales to a level 1.6 pct +below January, 1986, when they were a seasonally adjusted +728,000 units. + The average price was a record 127,100 dlrs, surpassing the +previous record 119,100 price set in December. + The median price of a home in January reached 100,700 dlrs +-- the first time the price has exceeded 100,000 dlrs. That +compared with a median price of 94,600 dlrs in December and +94,000 dlrs in January a year ago. + New homes available on the market in January totaled a +seasonally adjusted 362,000 units, unchanged from December and +equal to a 6.3 months' supply. + The supply in December was 5.9 months. + Reuter + + + + 3-MAR-1987 10:02:22.46 + +usa + + + + + +F +f0416reute +r f BC-DIMIS-<DMS>-EXTENDS-L 03-03 0070 + +DIMIS <DMS> EXTENDS LIFE OF WARRANTS BRIEFLY + EATONTOWN, N.J., March 3 - Dimis Inc said it has extended +by five business days the expiration of its common stock +purchase warrants until March Nine. + It said over one mln have already been exercised. The +warrants became effective February 17. + Holders exercising will receive a new warrant expiring +March 31 allowing the purchase of half a common share at one +dlr. + Reuter + + + + 3-MAR-1987 10:05:32.60 + +canadausa + + + + + +E F +f0441reute +r f BC-american-barrick 03-03 0046 + +AMERICAN BARRICK <ABX> UNIT COMPLETES ISSUE + TORONTO, March 3 - <American Barrick Resources Corp> said +wholly owned Barrick Resources (USA) Inc completed the +previously announced 50 mln U.S. dlr issue of two pct gold +indexed notes, which are guaranteed by American Barrick. + Reuter + + + + 3-MAR-1987 10:07:42.19 +acq +usa + + + + + +F +f0445reute +d f BC-COMMUNITY-BANK-<CBSI> 03-03 0060 + +COMMUNITY BANK <CBSI> TO MAKE ACQUISITION + SYRACUSE, N.Y., March 3 - Community Bank System Inc said it +has entered into a definitive agreement to acquire Nichols +Community Bank for 2,800,000 dlrs in common stock. + It said subject to approval by Nichols shareholders and +regulatory authorities, the transaction is expected to be +completed later this year. + Reuter + + + + 3-MAR-1987 10:08:28.26 +jobs +belgium + + + + + +RM +f0447reute +r f BC-BELGIAN-UNEMPLOYMENT 03-03 0086 + +BELGIAN UNEMPLOYMENT FALLS IN FEBRUARY + BRUSSELS, March 3 - Belgian unemployment, based on the +number of jobless drawing unemployment benefit, fell to 12.1 +pct of the working population at the end of February from 12.6 +pct at the end of January, the National Statistics Office said. + The rate compares with 12.4 pct at the end of February +1986. + The total number of jobless stood at 508,392, compared with +530,587 at the end of January and 521,219 at the end of +February 1986, the Statistics Office said. + REUTER + + + + 3-MAR-1987 10:12:44.89 + +usa + + + + + +F +f0456reute +r f BC-KODAK-<EK>-HAS-NEW-DA 03-03 0068 + +KODAK <EK> HAS NEW DATA STORAGE, USAGE SYSTEMS + NEW YORK, March 3 - Eastman Kodak Co said it is introducing +four information technology systems that will be led by today's +highest-capacity system for data storage and retrieval. + The company said information management products will be +the focus of a multi-mln dlr business-to-business +communications campaign under the threme "The New Vision of +Kodak." + Noting that it is well-known as a photographic company, +Kodak said its information technology sales exceeded four +billion dlrs in 1986. "If the Kodak divisions generating those +sales were independent, that company would rank among the top +100 of the Fortune 500," it pointed out. + The objective of Kodak's "new vision" communications +campaign, it added, is to inform others of the company's +commitment to the business and industrial sector. + Kodak said the campaign will focus in part on the +information management systems unveilded today -- + -- The Kodak optical disk system 6800 which can store more +than a terabyte of information (a tillion bytes). + - The Kodak KIMS system 5000, a networked information +management system using optical disks or microfilm or both. + -- The Kodak KIMS system 3000, an optical-disk-based system +that allows users to integrate optical disks into their current +information management systems. + -- The Kodak KIMS system 4500, a microfilm-based, +computer-assisted system which can be a starter system. + Kodak said the optical disy system 6800 is a +write-once/ready-many-times type its Mass Memory Division will +market on a limited basis later this year and in quantity in +1988. + Each system 6800 automated disk library can accommodate up +to 150, 14-inch optical disks. Each disk provides 6.8 gigabytes +of randomly accessible on-line storage. Thus, Kodak pointed +out, 150 disks render the more-than-a-terabyte capacity. + Kodak said it will begin deliveries of the KIMS system 5000 +in mid-1987. The open-ended and media-independent system +allows users to incorporate existing and emerging technologies, +including erasable optical disks, high-density magnetic media, +fiber optics and even artificial intelligence, is expected to +sell in the 700,000 dlr range. + Initially this system will come in a 12-inch optical disk +version which provides data storage and retrieval through a +disk library with a capacity of up to 121 disks, each storing +2.6 gigabytes. + Kodak said the KIMS system 3000 is the baseline member of +the family of KIMS systems. Using one or two 12-inch manually +loaded optical disk drives, it will sell for about 150,000 dlrs +with deliveries beginning in mid-year. + The company said the system 3000 is fulling compatibal with +the more powerful KIMS system 5000. + It said the KIMS system 4500 uses the same hardware and +software as the system 5000. It will be available in mid-1987 +and sell in the 150,000 dlr range. + Reuter + + + + 3-MAR-1987 10:14:49.98 + +usa + + + + + +F +f0467reute +r f BC-BANGOR-HYDRO-<BANG>-S 03-03 0081 + +BANGOR HYDRO <BANG> SEEKS RATE CUT + BANGOR, Maine, March 3 - Bangor Hydro-Electric Cor said it +has filed with the Maine Public Utilities Commission (MPUC) for +a two-stage base rate reduction. + Bangor Hydro said the first stage, which could take effect +on April 1 and would stay effective until the MPUC makes a +final decision on the filing, could cut revenues by 6.149 mln +dlrs, or 9.7 pct. + The company said lower federal income taxes and lower +capital costs prompted the filing. + The second stage, Bangor Hydro said, effective when the +MPUC makes a final decision, calls for an additional revenue +reduction of 712,000 dlrs, or 1.1 pct. + Bangor Hydro said, if approved, the cuts would reduce +residential base rates by 8.5 pct, with 7.5 pct cut by April 1. + The utility company also said it is seeking to increase its +fuel cost adjustment rate by April 1. + Bangor said if the increase is approved it could offset +much of the base rate cut and may cause a net increase in some +customers' rates. + Reuter + + + + 3-MAR-1987 10:15:06.95 + +usa + + + + + +F +f0469reute +d f BC-BROWNING-FERRIS-<BFI> 03-03 0105 + +BROWNING-FERRIS <BFI>WASTE DISPOSAL SITE CLEARED + HOUSTON, March 3 - Browning-Ferris Industries Inc said the +Colorado Department of Health and the U.S. Environmental +Protection Agency have awarded the company permits to build and +operate a hazardous waste disposal site near Last Chance, Colo. + The company said construction will start this year and take +about 12 months, costing about 14 to 16 mln dlrs. It said it +has already spent 10 mln dlrs on development costs. + The site will not accept materials that react rapidly with +air or water, explosives, shock sensitive materials or +radioactive wastes, the company said. + Reuter + + + + 3-MAR-1987 10:16:12.11 +earn +sweden + + + + + +F +f0472reute +d f BC-PHARMACIA-AB-<PHAB-ST 03-03 0028 + +PHARMACIA AB <PHAB ST> 1986 YEAR + STOCKHOLM, March 3 - Sales 3.65 billion crowns vs 3.40 +billion. + Profit after financial items 821.2 mln crowns vs 740.2 +mln. + The 1986 results include a once-off writedown of 520 mln +crowns for intangible assets, mainly the know-how paid for in +the takeover of a number of high-tech companies by the group, +Pharmacia said. + Earnings per share after real tax including the writedown: +1.94 crowns vs 12.05 crowns. + Earnings per share after real tax (not including the +writedown): 12.38 crowns vs 12.05 + Earnings per American Depository Receipt (ADR) according to +U.S. Accounting principles after real tax including the +writedown): 1.96 crowns vs 9.49 crowns. + Earnings per ADR according to U.S. Accounting principles +after real tax (without the writedown): 9.8 crowns vs 9.49. + One ADR represents 0.75 pct of one B Free share in +Pharmacia. + The board proposed a dividend of 1.55 crowns vs 1.25. + REUTER + + + +3-MAR-1987 10:16:24.19 + +usa + + + + + +F +f0473reute +d f BC-VWR-CORP-<VWRX>-FORMS 03-03 0069 + +VWR CORP <VWRX> FORMS NEW UNIT + SEATTLE, March 3 - VWR Corp said it has formed a new +subsidiary, Momentun Textiles, to handle the distribution of +upholstery fabrics, leathers and naugahyde to contract and +consumer furniture manufacturers. + It said its VWR Textiles and Supplies unit, which had +handled that business, will continue to distribute non-woven +textiles, construction fabrics and manufacturing supplies. + Reuter + + + + 3-MAR-1987 10:17:43.59 + +usa + + + + + +F +f0484reute +r f BC-HALLWOOD-GROUP-<HWG> 03-03 0091 + +HALLWOOD GROUP <HWG> OFFICIAL GET SAXON POST + DALLAS, March 3 - Saxon Oil Development Partners' Saxon Oil +Co said its chairman Bill Saxon and chief executive officer +Steven Saxon have resigned effective immediately. + Saxon said Anthony Gumbiner, chairman and chief executive +officer of The Hallwood Group Inc, succeeds Bill Saxon as +chairman. + Hallwood owns a substantial number of shares of preferred +stock in Saxon which, if converted into common stock, would +constitute approximately 37 pct of the company, according to a +source. + Hallwood specializes in bailing out financially troubled +companies and restructuring their debt, according to the +source. In exchange sometimes, the group receives a small +portion of the company's common stock. + At times, the group also receives a position in the +company, as was the case at Saxon, the source explained. + Reuter + + + + 3-MAR-1987 10:20:45.46 +earn +usa + + + + + +F +f0494reute +d f BC-PHARMACIA-FORECASTS-H 03-03 0101 + +PHARMACIA FORECASTS HIGHER 1987 EARNINGS + STOCKHOLM, March 3 - Pharmacia AB <PHAB ST> forecast +earnings after financial items of one billion crowns in 1987 vs +821.2 mln last year on condition that exchange rates remained +at their present parities. + Sales would in such circumstances go up to six billion +crowns from 3.65 billion in 1986, it said. + A weakening Dollar was mainly responsible for a five pct +negative impact on sales during 1986 which the company blamed +on currency movements. + Last year's results were also badly hit by a once-off +writedown of 520 mln crowns for intangible assets. + The company said mainly this represented the premium the +group had paid for the know-how of various high-tech firms it +had taken over. + The accounts also showed a financial deficit of 1.87 +billion crowns vs a deficit of 133 mln which was covered partly +by drawing down company liquidity to 738 mln vs one billion and +partly by increasing borrowing to 2.23 billion vs 621 mln. + Pharmacia said the financial deficit was caused by it +having used more funds than generated by group operations, +mainly because of the 1.36 billion it paid in cash for shares +in LKB-Produkter AB and the assets of Intermedics-Intraocular +Inc. + REUTER + + + + 3-MAR-1987 10:23:39.80 + +usa + + + + + +M +f0504reute +d f BC-BERYLLIUM-INT'L-SETS 03-03 0121 + +BERYLLIUM INT'L SETS JOINT VENTURE WITH COMINCO + SALT LAKE CITY, Utah, March 3 - Beryllium International +Corp said it has signed a joint venture agreement with Cominco +American Inc, a unit of Cominco Ltd, to develop a beryllium +mine and processing plant on Beryllium International's property +in the Topaz Mountains southwest of Salt Lake City. + Beryllium said as a 49 pct owner of the venture it would be +contributing the mine while Cominco, as operator and 51 pct +owner, would conduct drilling, metallurgical studies, process +testing, and other preliminary work for a feasibility study. + Beryllium said the cost of the preliminary work in 1987, +which will start immediately, should be about 250,000 dlrs to +300,000 dlrs. + Reuter + + + + 3-MAR-1987 10:26:35.62 +gnp +canada + + + + + +E V RM +f0508reute +f f BC-CANADA-REAL-4TH-QTR-G 03-03 0013 + +******CANADA REAL 4TH QTR GDP ROSE 1.1 PCT, AFTER 3RD QTR 1.1 PCT RISE - OFFICIAL +Blah blah blah. + + + + + + 3-MAR-1987 10:29:04.26 +bop +canada + + + + + +E V RM +f0518reute +f f BC-CANADA-4TH-QTR-CURREN 03-03 0017 + +******CANADA 4TH QTR CURRENT ACCOUNT DEFICIT 2.3 BILLION DLRS VS 3RD QTR 1.9 BILLION DEFICIT - OFFICIAL +Blah blah blah. + + + + + + 3-MAR-1987 10:29:32.44 + +usa + + + + + +F +f0519reute +h f BC-UNITED-GUARDIAN-<UNIR 03-03 0075 + +UNITED-GUARDIAN <UNIR>, <FEDERAL> SIGN CONTRACT + SMITHTOWN, N.Y., March 3 - United-Guardian Inc said it +signed a contract with <Federal Health Corp> covering the +exclusive marketing of Warexin, a disinfectant for kidney +dialysis machines, hospital equipment and instruments. + Under the contract, United-Guardian said Federal will +continue to supply Hospal, a subsidiary of <Sandoz Ltd> and +<Rhone Poulenc S.A.> with all its Warexin requirements. + Reuter + + + + 3-MAR-1987 10:31:10.05 +ship +usa + + + + + +F +f0524reute +r f BC-MCLEAN-INDUSTRIES-<MI 03-03 0082 + +MCLEAN INDUSTRIES <MII> UNIT TRANSERS SERVICE + CRANFORD, N.J., March 3 - McLean Industries Inc said its +shipping subsidiary, United States Lines Inc, reached an +agreement in principle to transfer its South American service +to American Transport Lines Inc, a subsidiary of <Crowley +Maritime Corp>. + Under the terms of the agreement, United States Lines will +lease five vessels to American Transport for 15 months with an +option to extend the period up to 10 years, the company said. + In return, U.S. Lines will receive a fixed payment and a +percentage of revenues for at least three years and possibly as +long as American Transport utilizes its vessels and conducts +trade in South America, the company said. + The companies will consummate the transactions as soon as +the required approvals are obtained, McLean said. + Reuter + + + + 3-MAR-1987 10:32:15.36 + +usa + + + + + +RM F A +f0528reute +u f BC-PROXMIRE-VOWS-QUICK-A 03-03 0108 + +PROXMIRE VOWS QUICK ACTION ON U.S. BANKING BILL + WASHINGTON, March 3 - Senate Banking Committee Chairman +William Proxmire said modified legislation to help a federal +deposit insurance fund and prohibit new limited-service banks +and thrifts could be ready for a Senate vote in two to three +weeks. + Proxmire said he agreed to demands from committee members +for a one-year moratorium on granting new business powers +sought by commercial banks to increase the bill's chances. + In its new form, the bill would proscribe regulators from +granting new powers to banks, Proxmire told reporters after a +speech to the U.S. League of Savings Institutions. + A vote on the bill by the committee is scheduled for +Thursday. If approved it will go to the full Senate. + "I have spoken to the majority leader and he has agreed to +bring it up promptly on the Senate floor in two or three weeks," +Proxmire told the thrift executives. + The bill would recapitalize the Federal Savings and Loan +Insurance Corp fund with 7.5 billion dlrs. + It also would prohibit establishment of new nonbank banks +and nonthrift thrifts, so-called because they provide financial +services but do not meet the regulatory definition of both +making loans and receiving deposits. + Reuter + + + + 3-MAR-1987 10:33:48.56 + +usa + + + + + +C G L +f0540reute +u f BC-lard-consumption 03-03 0107 + +U.S. LARD CONSUMPTION IN JANUARY + WASHINGTON, March 3 - U.S. factory usage of lard in the +production of both edible and inedible products during January +totaled 21.3 mln lbs, vs a revised 25.6 mln lbs in December, +according to Census Bureau figures. + In the year-earlier period, usage, which includes +hydrogenated vegetable and animal fats and other oils in +process, amounted to 33.3 mln lbs. + Usage in January comprised 15.7 mln lbs of edible products +and 5.6 mln lbs of inedible products. + Total lard usage in the 1986/87 marketing season, which +began October 1, amounted to 104.3 mln lbs, vs 154.2 mln lbs in +the year-ago period. + Reuter + + + + 3-MAR-1987 10:34:47.47 + +netherlands + + + + + +RM +f0546reute +u f BC-SOCIETE-GENERALE-DUTC 03-03 0097 + +SOCIETE GENERALE DUTCH UNIT LAUNCHES CD PROGRAMME + AMSTERDAM, March 3 - The Amsterdam unit of French bank +Societe Generale said it is launching a 50-mln guilder, five +month certificate of deposit programme starting March 6 and +ending September 7. + Denominations will be in one mln guilders. The price is to +be set on March 4, issue date is March 6 and redemption at par +is on September 7. + Subscriptions are to be placed with Societe Generale, +Oolders en de Jong C.V or Haighton en Ruth B.V. A global note +for the issue will be deposited with the Dutch central bank. + REUTER + + + + 3-MAR-1987 10:35:22.38 + +uk + + + + + +RM +f0548reute +b f BC-MONY-FUNDING-ISSUES-1 03-03 0087 + +MONY FUNDING ISSUES 125 MLN DLR EUROBOND + LONDON, March 3 - Mony Funding Inc is issuing a 125 mln dlr +eurobond due April 7, 1997 paying 8-1/8 pct and priced at +101-1/2 pct, sole lead manager Citicorp Investment Bank Ltd +said. + The non-callable bond is guaranteed by Mutual Life +Insurance Co of the U.S. And is available in denominations of +5,000 dlrs and will be listed in Luxembourg. The selling +concession is 1-3/8 pct while management and underwriting +combined pays 5/8 pct. + The payment date is April 7. + REUTER + + + + 3-MAR-1987 10:37:40.72 +grainwheat +uk + + + + + +G +f0559reute +u f BC-SMALL-QUANTITY-OF-U.K 03-03 0057 + +SMALL QUANTITY OF UK WHEAT SOLD TO HOME MARKET + LONDON, March 3 - A total of 2,435 tonnes of British +intervention feed wheat were sold at today's tender for the +home market out of requests for 3,435 tonnes, the Home Grown +Cereals Authority, HGCA, said. + Price details were not reported. + No bids were submitted for intervention barley. + Reuter + + + + 3-MAR-1987 10:38:18.98 +gnp +canada + + + + + +E V RM +f0564reute +f f BC-CANADA-DECEMBER-GDP-U 03-03 0013 + +******CANADA DECEMBER GDP UP 1.2 PCT AFTER NOVEMBER'S 0.2 PCT FALL - OFFICIAL +Blah blah blah. + + + + + + 3-MAR-1987 10:38:44.01 +earn +usa + + + + + +F +f0568reute +d f BC-FIRST-FEDERAL-SAVINGS 03-03 0052 + +FIRST FEDERAL SAVINGS <FFKZ> YEAR NET + KALAMAZOO, MICH., March 3 - + Shr 78 cts vs one dlr + Net 1,413,000 vs 1,776,000 + Assets 705.3 mln vs 597.3 mln + Deposits 495.6 mln vs 493.9 mln + Loans 260.0 mln vs 379.7 mln + Qtly div six cts vs six cts prior qtr + Pay April 1 + Record March 6 + NOTE: 1986 net includes charges from accounting changes, +from one-time expenses associated with a proxy contest and an +increase in loan reserves. + First Federal Savings and Loan Association of Kalamazoo is +full name of company. + Reuter + + + + 3-MAR-1987 10:39:00.13 + +usa + + + + + +F +f0569reute +u f BC-BOEING-<BA>-SAYS-ORDE 03-03 0088 + +BOEING <BA> SAYS ORDER WORTH ONE BILLION DLRS + SEATTLE, March 3 - Boeing Co said its order for 15 +extended-range 767-300's from AMR Corp <AMR> is worth over one +billion dlrs. + The company said AMR is its first customer for the +767-300ER twinjet, a derivative of its 767-200 designed for +increased passenger and cargo capability on flights of up to +6,600 miles. It said the first delivery is scheduled for +February 1988 and the jet will seat 215 in tri-class +configuration. + Boeing said it now has orders for 47 767-300's. + In New York, <Airbus Industrie> said AMR is also the launch +customer for its A300-600R widebody. + AMR today announced the order of 15 of the Boeing and 25 of +the Airbus twinjets. + Airbus said in AMR's configuration, the A300-600R will seat +16 in first class and 251 in economy. Deliveries will be made +bewtween April 1988 and June 1989. + Airbus did not disclose the value of the order. + Boeing said AMR will operate the 767's on North Atlantic +routes, while Airbus said AMR will operate the A300's on +Caribbean routes. + Reuter + + + + 3-MAR-1987 10:40:22.86 + +usa + + + + + +F +f0577reute +u f BC-INLAND-<IAD>-FILES-FO 03-03 0105 + +INLAND <IAD> FILES FOR 1.5 MLN SHARES OFF + CHICAGO, March 3 - Inland Steel Industries Inc said it +registered with the Securities and Exchange Commission for a +proposed public offering of 1.5 mln shares of Series C +cumulative convertible exchangeable preferred shares, 50 dlrs a +share liquidation value. + Goldman Sachs and Co and First Boston Corp are +underwriters. They have an option to buy 225,000 additional +shares to cover overallotments. + Proceeds are for general corporate purposes, including to +fund a portion of the investment needed for a continuous cold +mill joint venture under discussion with Nippon Steel Corp. + Reuter + + + + 3-MAR-1987 10:40:34.06 + +usa + + + + + +F +f0579reute +r f BC-<ACUSTAR-CORP>-HAS-UN 03-03 0067 + +<ACUSTAR CORP> HAS UNAUTHORIZED ACCOUNT ACTION + BLOOMINGTON, Minn., March 3 - Acustar Corp said it has +discovered significant unauthorized activity in its corporate +accounts but has not yet determined the full extent of the +problem. + It said it has requested that all over-the-counter trading +in its stock be halted until it can make a further +announcement. An investigation is underway, it said. + Reuter + + + + 3-MAR-1987 10:41:05.96 +earn +usa + + + + + +F +f0584reute +r f BC-TOLL-BROTHERS-INC-<TO 03-03 0046 + +TOLL BROTHERS INC <TOL> 1ST QTR JAN 31 NET + HORSHAM, Penn., March 3 - + Shr 22 cts vs 12 cts + Net 3,243,000 vs 1,656,000 + Revs 28.4 mln vs 21.5 mln + NOTE: All amts reflect 3-for-2 stock split of company's +common in form of 50 pct stock dividend paid Feb 26, 1987. + Reuter + + + + 3-MAR-1987 10:41:11.13 + +usa + + + + + +F +f0585reute +d f BC-UNICORP-AMERICAN-<UAC 03-03 0049 + +UNICORP AMERICAN <UAC> IN JOINT VENTURE + NEW YORK, March 3 - Unicorp American Corp said it has +formed a joint venture with Sybedon Corp, a New York real +estate investment banking firm, to pursue real estate projects. + It said a total of 20 mln dlrs is being committed to the +joint venture. + Reuter + + + + 3-MAR-1987 10:41:36.86 +earn +usa + + + + + +F +f0589reute +s f BC-PILLSBURY-CO-<PSY>-VO 03-03 0025 + +PILLSBURY CO <PSY> VOTES QUARTERLY DIVIDEND + MINNEAPOLIS, MINN., March 3 - + Qtly div 25 cts vs 25 cts prior qtr + Pay 31 May + Record 1 May + Reuter + + + + 3-MAR-1987 10:41:41.92 +earn +usa + + + + + +F +f0590reute +s f BC-BERKSHIRE-GAS-CO-<BGA 03-03 0025 + +BERKSHIRE GAS CO <BGAS> PAYS REGULAR QTLRY DIV + PITTSFIELD, Mass., March 3 - + Qtrly div 28.5 cts vs 28.5 cts + Pay April 15 + Record March 31 + Reuter + + + + 3-MAR-1987 10:44:50.56 +grainwheatbarley +ukussr + + + + + +G +f0601reute +d f BC-U.K.-WHEAT-AND-BARLEY 03-03 0096 + +U.K. WHEAT AND BARLEY EXPORTS ADJUSTED UPWARDS + LONDON, March 3 - The U.K. Exported 535,460 tonnes of wheat +and 336,750 tonnes of barley in January, the Home Grown Cereals +Authority (HGCA) said, quoting adjusted Customs and Excise +figures. + Based on the previous January figures issued on February 9, +wheat exports increased by nearly 64,000 tonnes and barley by +about 7,000 tonnes. + The new figures bring cumulative wheat exports for the +period July 1/February 13 to 2.99 mln tonnes, and barley to +2.96 mln compared with 1.25 and 1.89 mln tonnes respectively a +year ago. + January wheat exports comprised 251,000 tonnes to European +Community destinations and 284,000 tonnes to third countries. + The Soviet Union was prominent in third country +destinations, taking 167,700 tonnes while Poland was credited +with 54,500 and South Korea 50,000 tonnes. Italy was the +largest EC recipient with 75,000 tonnes followed by West +Germany with 55,200 and France 52,000 tonnes. + Barley exports for January comprised 103,700 tonnes to the +EC and 233,000 to third countries. The Soviet Union was the +largest single importer with 133,265 tonnes followed by Saudi +Arabia with 53,800 tonnes. + Reuter + + + + 3-MAR-1987 10:46:56.99 +gnp +canada + + + + + +E V RM +f0609reute +b f BC-CANADA-GDP-RISES-3.1 03-03 0085 + +CANADA GDP RISES 3.1 PCT IN 1986 + OTTAWA, March 3 - Canada's real gross domestic product, +seasonally adjusted, rose 1.1 pct in the fourth quarter of +1986, the same as the growth as in the previous quarter, +Statistics Canada said. + That left growth for the full year at 3.1 pct, which is +down from 1985's four pct increase. + The rise was also slightly below the 3.3 pct growth rate +Finance Minister Michael Wilson predicted for 1986 in +February's budget. He also forecast GDP would rise 2.8 pct in +1987. + Statistics Canada said final domestic demand rose 0.6 pct +in the final three months of the year after a 1.0 pct gain in +the third quarter. + Business investment in plant and equipment rose 0.8 pct in +the fourth quarter, partly reversing the cumulative drop of 5.8 +pct in the two previous quarters. + Reuter + + + + 3-MAR-1987 10:47:04.45 +grainwheat +ussrpolandczechoslovakiaromania + + + + + +C G T +f0610reute +u f BC-EAST-EUROPE-WHEAT-WIN 03-03 0099 + +EAST EUROPE WHEAT WINTERKILL POSSIBLE, ACCU SAYS + STATE COLLEGE, Pa., March 3 - Winter wheat crops in the +western Soviet Union, Poland and eastern Czechoslovakia through +northern Romania may suffer some winterkill over the next two +nights, private forecaster Accu-Weather Inc said. + Western USSR winter wheat areas have had only light and +spotty snow and winterkill is possible tonight and tomorrow +night as temperatures drop to minus 10 to 0 degrees F. + Snow cover is scant in Poland, with only about 50 pct of +the winter wheat areas reporting one to two inches of snow as +of this morning. + The remaining 50 pct of winter wheat crops do not have snow +cover, making winterkill possible on each of the next two +nights. Lowest temperatures will be minus 10 to 0 degrees F. + Winter wheat areas from eastern Czechoslovakia through +northern Romania had light snow flurries yesterday and last +night, but amounts were an inch or less. With temperatures +expected to fall to near 0 degrees F over the next two nights, +some light winterkill is possible, Accu-Weather added. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-002.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-002.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-002.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-002.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2013 @@ + + + 5-MAR-1987 09:07:54.17 +earn +uk + + + + + +F +f0986reute +d f BC-JAGUAR-SEES-STRONG-GR 03-05 0115 + +JAGUAR SEES STRONG GROWTH IN NEW MODEL SALES + LONDON, March 5 - Jaguar Plc <JAGR.L> is about to sell its +new XJ-6 model on the U.S. And Japanese markets and expects a +strong reception based on its success in the U.K., Chairman Sir +John Egan told a news conference. + Commenting on an 11 pct growth in 1986 group turnover to +830.4 mln stg and pre-tax profits at 120.8 mln stg, slightly +below 1985's 121.3 mln, Egan said Jaguar aimed at an average +profit growth of 15 pct per year. However, the introduction of +the new model had kept this year's pre-tax profit down. + Jaguar starts selling XJ-6 in the U.S. In May and plans to +sell 25,000 of its total 47,000 production there in 1987. + U.S. Sales now account for 65 pct of total turnover, +finance director John Edwards said. + A U.S. Price for the car has not been set yet, but Edwards +said the relatively high car prices in dollars of West German +competitors offered an "umbrella" for Jaguar. He added the XJ-6 +had also to compete with U.S. Luxury car producers which would +restrict the car's price. + Jaguar hedges a majority of its dollar receipts on a +12-month rolling basis and plans to do so for a larger part of +its receipts for longer periods, John Egan said. + In the longer term, capital expenditure will amount to 10 +pct of net sales. Research and development will cost four pct +of net sales and training two pct. + Jaguar builds half of its cars and buys components for the +other half. The firm is in early stages of considering the +building of an own press shop in Britain for about 80 mln stg, +but Egan said this would take at least another three years + On the London Stock Exchange, Jaguar's shares were last +quoted at 591p, down from 611p at yesterday's close, after +reporting 1986 results which were in line with market +expectations, dealers said. + REUTER... + + + + 5-MAR-1987 09:18:26.80 + + + + + + + +F +f0011reute +f f BC-******occidental-petr 03-05 0012 + +******OCCIDENTAL PETROLEUM COMMON STOCK OFFERING RAISED TO 36 MLN SHARES +Blah blah blah. + + + + + + 5-MAR-1987 09:19:43.22 +grainwheat +usairaq + + + + + +C G +f0012reute +u f BC-/CCC-ACCEPTS-BONUS-BI 03-05 0117 + +CCC ACCEPTS BONUS BID ON WHEAT FLOUR TO IRAQ + WASHINGTON, March 5 - The Commodity Credit Corporation, +CCC, has accepted bids for export bonuses to cover sales of +25,000 tonnes of wheat flour to Iraq, the U.S. Agriculture +Department said. + The department said the bonuses awarded averaged 116.84 +dlrs per tonne. + The shipment periods are March 15-April 20 (12,500 tonnes) +and April 1-May 5 (12,500 tonnes). + The bonus awards were made to Peavey Company and will be +paid in the form of commodities from CCC stocks, it said. + An additional 175,000 tonnes of wheat flour are still +available to Iraq under the Export Enhancement Program +initative announced January 7, 1987, the department said. + Reuter + + + + 5-MAR-1987 09:21:58.67 +crude + + + + + + +Y +f0017reute +f f BC-******DIAMOND-SHAMROC 03-05 0016 + +******DIAMOND SHAMROCK RAISES CRUDE POSTED PRICES ONE DLR, EFFECTIVE MARCH 4, WTI NOW 17.00 DLRS/BBL +Blah blah blah. + + + + + + 5-MAR-1987 09:22:57.75 +earn +usa + + + + + +F +f0019reute +r f BC-NORD-RESOURCES-CORP-< 03-05 0063 + +NORD RESOURCES CORP <NRD> 4TH QTR NET + DAYTON, Ohio, March 5 - + Shr 19 cts vs 13 cts + Net 2,656,000 vs 1,712,000 + Revs 15.4 mln vs 9,443,000 + Avg shrs 14.1 mln vs 12.6 mln + Year + Shr 98 cts vs 77 cts + Net 13.8 mln vs 8,928,000 + Revs 58.8 mln vs 48.5 mln + Avg shrs 14.0 mln vs 11.6 mln + NOTE: Shr figures adjusted for 3-for-2 split paid Feb 6, +1987. + Reuter + + + + 5-MAR-1987 09:23:44.74 +copper +chile + + + + + +C M +f0022reute +b f BC-NO-QUAKE-DAMAGE-AT-CH 03-05 0089 + +NO QUAKE DAMAGE AT CHUQUICAMATA - MINE SPOKESMAN + SANTIAGO, March 5 - The earthquake which hit northern Chile +today, registering 7.0 on the open-ended Richter scale, caused +no damage to the copper mine at Chuquicamata, a mine spokesman +said. + Chuquicamata public relations director Guillermo Barcelo +told Reuters by telephone from the mine that the quake had +caused no problems and operations continued as usual. + A spokesman for the state Chilean Copper Commission in +Santiago confirmed there had been no damage at Chuquicamata. + Reuter + + + + 5-MAR-1987 09:24:40.64 +crudenat-gas +canada + + + + + +E F Y +f0025reute +r f BC-orbit-oil-increases 03-05 0094 + +ORBIT INCREASES OIL AND GAS RESERVE VALUES + CALGARY, Alberta, March 5 - <Orbit Oil and Gas Ltd> said +the value of its oil and gas reserves increased by 19 pct to +52.6 mln dlrs from 44.2 mln dlrs reported at year-end 1985, +according to an independent appraisal. + Orbit said it has reserves of 2.4 mln barrels of oil and +natural gas liquids and 67.2 billion cubic feet of natural gas. + In addition, 75 pct owned <Sienna Resources Ltd> has +Canadian reserves of 173,000 barrels of oil and 1.6 bcf of +natural gas with a current value of 2.2 mln dlrs, Orbit said. + Reuter + + + + 5-MAR-1987 09:24:55.56 +grainwheat +usaegypt + + + + + +C G +f0026reute +u f BC-CCC-ACCEPTS-BONUS-BID 03-05 0105 + +CCC ACCEPTS BONUS BID ON SEMOLINA TO EGYPT + WASHINGTON, March 5 - The Commodity Credit Corporation, +CCC, has accepted a bid for an export bonus to cover a sale of +2,000 tonnes of semolina to Egypt, the U.S. Agriculture +Department said. + The department said the bonus was 233.91 dlrs per tonne and +was made to International Multifoods Corp. The bonus will be +paid in the form of commodities from CCC stocks. + The semolina is for shipment during June 1987, it said. + An additional 13,000 tonnes of semolina are still available +to Egypt under the Export Enhancement Program initiative +announced on August 6, 1986, it said. + Reuter + + + + 5-MAR-1987 09:26:07.38 + +france +balladur + + + + +F +f0032reute +d f BC-FRENCH-CGE-GROUP-LIKE 03-05 0099 + +FRENCH CGE GROUP LIKELY TO BE PRIVATISED IN MAY + PARIS, March 5 - France's state-owned Cie Generale +d'Electricite (CGE) is likely to be privatised during May this +year, sources close to Finance Minister Edouard Balladur said. + Although the Finance Ministry simply said that the group +would be privatised during the course of this year, when it +first announced the operation in early January, the May date is +earlier than the market had expected. + As a result it will follow close on the heels of the +privatisation of the TF1 television channel and the advertising +group <Agence Havas>. + Last month the government privatised the first of the state +financial groups, Cie Financiere de Paribas <PARI.P>, in a +floatation which was 40 times oversubscribed. + And in December the first of the industrial groups, glass +maker Cie de Saint-Gobain <SGEP.P>, returned to the private +sector. + CGE has interests ranging from telecommunications to +shipbuilding and nuclear engineering, and recently struck a +deal with ITT Corp <ITT.N> to create the world's second largest +telecommunications group under the Alcatel name. + REUTER + + + + 5-MAR-1987 09:26:17.58 +acq +franceusawest-germanynetherlandssweden + + + + + +F +f0033reute +d f BC-FIVE-GROUPS-APPLY-TO 03-05 0118 + +FIVE GROUPS APPLY TO BUY FRENCH TELEPHONE GROUP + PARIS, March 5 - Five consortia have applied to buy the +French state-owned telephone equipment manufacturer <Cie +Generale de Constructions Telephoniques (CGCT)>, which will +give the owners control of 16 pct of the French telephone +switching market, sources close to Finance Minister Edouard +Balladur said. + The French government has given itself until the end of +April to decide which applicant will be accepted, they added. + While several foreign groups have said they want to gain a +foothold in the French market, their potential stake in CGCT is +limited to 20 pct under privatisation laws passed last year, +with 80 pct to be left in French hands. + The Finance Ministry sources gave no details of the groups +interested in CGCT, but several have publicly announced their +candidacies. + U.S. Telecommunications giant American Telephone and +Telegraph Co <T.N> which has been at the centre of the two-year +battle for CGCT, has teamed up with the Dutch-based <Philips +Telecommunications Industrie B.V.>, a subsidiary of NV Philips +Gloeilampenfabriek <PGLO.AS> and <Societe Anonyme de +Telecommunications> (SAT) to present a joint bid, in +association with holding company Cie du Midi SA <MCDP.P> and +five French investment funds. + A second bid has come from the West German electronics +group Siemens AG <SIEG.F>, which hopes to take a 20 pct stake +in CGCT, with the French telecommunications <Jeumont-Schneider> +taking the remaining 80 pct. + Sweden's <AB LM Ericsson> has also submitted a bid for the +maximum 20 pct permitted, in association with French defence +electronics group <Matra>, which would hold between 40 and 49 +pct, and construction group <Bouygues>. + Matra has already acquired CGCT's private telephone +business. +REUTER... + + + + 5-MAR-1987 09:27:39.53 + +usa + + + + + +V RM +f0039reute +b f BC-/SPEAKER-SEEKING-SUPP 03-05 0112 + +SPEAKER SEEKING SUPPORT FOR U.S. TAX INCREASES + WASHINGTON, March 5 - House Speaker Jim Wright is lobbying +congressmen to support a plan to cut the 1988 budget deficit +about 40 billion dlrs, half through spending cuts and the +remainder through tax hikes, congressional sources said. + He is backing a half and half plan and has made the +suggestion to Democrats on the House Budget Committee +privately, committee sources said. + However, a committee source told Reuters that committee +Democrats already generally favor a plan to cut the deficit +about 40 billion dlrs, half through taxes and the Speaker's +move was seen as building support outside the committee. + Wright's 20 billion dlr revenue raising plan has no +specifics, although he has floated a stock transfer tax and +also has suggested deferring tax cuts due to the wealthy. + Neither of those plans has caught fire yet in Congress, and +some congressmen are cool to the idea of a stock tax. + The Budget committee is considering a 1988 budget aimed at +reducing the estimated deficit of 170 billion dlrs as estimated +by the nonpartisan Congressional Budget Office. + Committee Chairman William Gray has publicly backed a +budget cutting move of 40 billion dlrs but says that will not +reach the Gramm-Rudman deficit target for 1988 of 108 billion +dlrs, although he claims it will be in the spirit of it. + Reuter + + + + 5-MAR-1987 09:31:01.67 +ship +turkey + + + + + +C G T M +f0051reute +u f BC-BLIZZARD-CLOSES-BOSPH 03-05 0099 + +BLIZZARD CLOSES BOSPHORUS + ISTANBUL, March 5 - Blizzard conditions halted shipping +through the Bosphorus waterway and piled snow up to 70 cms deep +in central Istanbul, paralysing the city for the second day +running. + Snow whipped by 48 kph winds continued to fall on Istanbul +and northwest Anatolia after 36 hours and weather reports +predicted no relief for another two days. + Port officials said at least six large vessels in the Black +Sea and 13 in the Sea of Marmara were waiting for conditions to +improve. + Istanbul's Ataturk international airport has been closed +since yesterday. + Reuter + + + + 5-MAR-1987 09:33:06.03 +acq +usa + + + + + +F +f0060reute +u f BC-JAPAN-FUND-<JPN>-SEEK 03-05 0100 + +JAPAN FUND <JPN> SEEKERS CONFIDENT OF FINANCING + NEW YORK, March 5 - The <Sterling Grace Capital Management +L.P.> group said it is confident financing can be arranged if +The Japan Fund's board recommend's the group's acquisition +proposal. + The group, which also includes <Anglo American Security +Fund L.P.> and T.B. Pickens III, Tuesday proposed an entity it +controls acquire for cash all the assets of Japan Fund for 95 +pct of the fund's aggregate net asset value. + The group said it has had a number of meetings over the +past few days with domestic and overseas financial institutions. + The Sterling Grace Capital group said certain of these +institutions have expressed serious interest in providing +financing for the proposed acquisition of Japan Fund, "adding +we are reasonably confident that the financing can be quickly +arranged if the Japan Fund's board of directors is willing to +recommend the transaction to shareholders." + Reuter + + + + 5-MAR-1987 09:33:18.80 + + + + + + + +F +f0061reute +f f BC-******K-MART-CORP-FEB 03-05 0011 + +******K MART CORP FEBRUARY SALES UP 13.1 PCT ON COMPARABLE STORE BASIS +Blah blah blah. + + + + + + 5-MAR-1987 09:34:02.54 + +tanzaniacanadabelgiumwest-germanyukswedenitalydenmarkzambiasouth-africa + +worldbankadb-africaec + + + +G T M +f0066reute +r f BC-TANZANIAN-RAILWAYS-SE 03-05 0113 + +TANZANIAN RAILWAYS SECURE 25.6 MLN DLRS AID + DAR ES SALAAM, March 5 - State-run Tanzania Railway +Corporation (TRC) has secured 25.6 mln dlrs aid from banks and +European countries for a one-year emergency repair program, +Transport Minister Mustafa Nyang'anyi said. + Nyang'anyi told Reuters on his return from a World Bank +sponsored donors' conference in New York that the aid would +enable TRC to buy spares for 32 locomotives, overhaul 800 +wagons and replace 67,000 sleepers over the next 12 months. + The World Bank, African Development Bank, European +Community, Canada, Belgium, West Germany, Britain, Sweden, +Italy and Denmark had contributed to the package, he said. + TRC runs a rail network linking Dar es Salaam and the +northern port of Tanga with the coffee-growing area around +Mount Kilimanjaro and ports on Lake Victoria and Lake +Tanganyika. + It is under separate administration from the +Tanzania-Zambia railway linking Dar es Salaam with the Zambian +copperbelt and the railway system of southern Africa, which has +already received substantial aid as part of international +efforts to ease the dependence of landlocked African states on +trade routes through South Africa. + But this is the first international aid package for TRC, +which also carries cargo for Uganda, Zaire and Burundi. + Reuter + + + + 5-MAR-1987 09:34:13.71 +earn +canada + + + + + +E F +f0068reute +r f BC-pegasus-gold-inc 03-05 0053 + +PEGASUS GOLD INC <PGULF> 3RD QTR DEC 31 NET + VANCOUVER, British Columbia, March 5 - + Shr profit 20 cts vs loss two cts + Net profit 2,665,000 vs loss 202,000 + Revs 12,141,000 vs 5,993,000 + Nine mths + Shr profit 35 cts vs loss 11 cts + Net profit 4,653,000 vs loss 1,167,000 + Revs 35.1 mln vs 18.0 mln + Reuter + + + + 5-MAR-1987 09:34:57.56 + +usa + + + + + +F +f0072reute +u f BC-STOP-AND-SHOP'S-<SHP> 03-05 0083 + +STOP AND SHOP'S <SHP> BRADLEES FEBRUARY SALES UP + BOSTON, March 5 - Stop and Shop Cos Inc said sales for the +four weeks ended February 28 for its Bradlees Discount +Department Stores Division were up six pct to 104 mln dlrs from +98 mln dlrs a year before, with same-store sales up three pct. + The company said the modest comparable store sales increase +was due to a combination of difficult weather conditions in the +Northeast, a later Easter this year and a possible slowing in +consumer demand. + Reuter + + + + 5-MAR-1987 09:35:22.89 + +usa + + + + + +M +f0075reute +d f BC-GM-(GM)-LAYING-OFF-5, 03-05 0083 + +GM LAYING OFF 5,500 AT TWO MICHIGAN PLANTS + DETROIT, March 5 - General Motors Corp said it ordered +temporary layoffs of 5,500 hourly workers to cut production and +thereby reduce inventories of cars built at two plants later +this month. + A spokesman said 2,000 workers would be laid off one week +beginning March 9 at GM's Detroit-Hamtramck luxury car plant. + Another 3,500 will be laid off a week effective March 23 at +GM's Lansing, Mich, plant which builds the company's "N-body" +compact cars. + Reuter + + + + 5-MAR-1987 09:36:37.16 + +usa + + + + + +F +f0079reute +r f BC-MITSUBISHI-MOTOR/AMER 03-05 0103 + +MITSUBISHI MOTOR/AMERICA FEBRUARY SALES RISE + FOUNTAIN VALLEY, Calif., March 5 - Mitsubishi Motor Sales +of America Inc said sales of all vehicles rose 43.7 pct in +February to 9,735 units from 6,776 in February 1986. + Sales of passenger cars and wagons grew 11.7 pct to 5,314 +from 4,758 and truck and van sales more than doubled to 4,421 +from 2,018, the affiliate of Mitsubishi Motors Corp said. + Year-to-date total vehicle sales increased 16.5 pct to +14,966 from 12,842. + Car and wagon sales in the two months fell 13.7 pct to +7,640 from 8,848 but sales of trucks and vans grew 83.4 pct to +7,326 from 3,994. + Reuter + + + + 5-MAR-1987 09:38:14.93 +earn +canada + + + + + +E F +f0085reute +d f BC-keltic-inc 03-05 0036 + +<KELTIC INC> YEAR NET + TORONTO, March 5 - + Shr 99 cts vs 1.25 dlrs + Net 418,733 vs 235,572 + Revs 2,777,425 vs 2,024,116 + Note: 1986 shr after November, 1986 600,000 class A +subordinate floating share issue + Reuter + + + + 5-MAR-1987 09:39:13.96 + +usa + + + + + +F +f0086reute +u f BC-SUPERMARKETS-GENERAL 03-05 0043 + +SUPERMARKETS GENERAL <SGC> FEBRUARY SALES RISE + WOODBRIDGE, N.J. - Supermarkets General Corp reported sales +of 424.8 mln dlrs for the four-week period ended Feb 28, 1987, +A 7.2 pct increase over sales of 396.4 mln dlrs for the +comparable period last year. + Reuter + + + + 5-MAR-1987 09:40:41.79 +money-fxinterest +uk + + + + + +RM +f0087reute +b f BC-U.K.-MONEY-MARKET-GIV 03-05 0095 + +U.K. MONEY MARKET GIVEN HELP, OFFERED FACILITIES + LONDON, March 5 - The Bank of England said it had given the +money market 206 mln stg of assistance this afternoon and +offered the discount houses borrowing facilities to take out +the rest of the 1.10 billion stg shortage, revised down from an +initial 1.15 billion estimate. + It made no alteration to its established dealing rates, +buying 95 mln stg of band one bank bills at 10-7/8 pct and 111 +mln of band two bank bills at 10-13/16 pct. This brings the +Bank's total assistance so far today to 243 mln stg. + REUTER + + + + 5-MAR-1987 09:40:53.56 + +usa + + + + + +F +f0088reute +u f BC-SUPERMARKETS-GENERAL 03-05 0044 + +SUPERMARKETS GENERAL <SGC> FEBRUARY SALES RISE + WOODBRIDGE, N.J., March 5 - Supermarkets General Corp +reported sales of 424.8 mln dlrs for the four-week period ended +Feb 28, 1987, A 7.2 pct increase over sales of 396.4 mln dlrs +for the comparable period last year. + Reuter + + + + 5-MAR-1987 09:41:51.56 +acq +usa + + + + + +F +f0096reute +r f BC-E.F.-HUTTON-<EFH>-STA 03-05 0093 + +E.F. HUTTON <EFH> STARTS PUROLATOR <PCC> BID + NEW YORK, March 5 - E.F. Hutton Group Inc said it has +started its previously announced offer to purchase up to +6,332,471 common shares of Purolator Courier Corp at 35 dlrs +each. + In a newspaper advertisement, the company said the offer, +proration period and withdrfawal rights will expire April One +unless extended. The offer is conditioned on receipt of at +least 5,116,892 Purolator shares, or a 66.7 pct interest, and +is the first step in a merger agreement that has been approved +by the Purolator board. + Hutton said it reserves the right to buy more than +6,332,471 shares but has no present intention of doing so. It +said it may waive the condition that at least 5,116,892 shares +be tendered as long as it received at least a 50.1 pct +interest. If it were to receive fewer shares than that, it +said it would only purchase sharesd with the consent of +Purolator. + Reuter + + + + 5-MAR-1987 09:42:45.36 +money-fx +usataiwansouth-korea +yeutter + + + + +RM A +f0100reute +r f BC-YEUTTER-PUTS-CURRENCY 03-05 0101 + +YEUTTER PUTS CURRENCY BURDEN ON TAIWAN, KOREA + NEW YORK , March 5 - Responsibility for the appreciation of +the Taiwan dollar and the South Korean Won lies soley with +those countries, said U.S. trade representative Clayton Yeutter + Speaking to the Asia Society, Yeutter said that it is in +those countries' own long-term interest to raise the value of +their currencies against the dollar. + Yeutter was responding to a question about what the U.S. +could do to encourage appreciation of those currencies against +the dollar in order to reduce the large U.S. trade deficits +with Taiwain and Korea. + "An undervalued currency will help those countries' exports +in the short term, but in the long run they have to be +concerned about how they are perceived in the international +business community," Yeutter said. + For Taiwan, Yeutter said that with its per capita trade +surplus with the U.S., much larger than that of Japan's, and +with huge foreign exchange reserves, it was difficult to defend +the high import tarrifs and other barriers that prevail in that +country. + He also said that the south Korean Won should begin to move +to reflect underlying economic fundamentals, "otherwise in two +or three years' time, Korea will be in the same situation that +prevails in Taiwan." + Turning to the U.S. deficit with Japan of more than 50 +billion dlrs, Yeutter said that this situation was not +sustainable. + "Something must give soon. If not, there is a great threat +of U.S. legislative action to counteract that trend," Yeutter +said. + Reuter + + + + 5-MAR-1987 09:42:52.28 +earn +usa + + + + + +F +f0101reute +r f BC-PRINCEVILLE-DEVELOPME 03-05 0069 + +PRINCEVILLE DEVELOPMENT CORP <PVDC> YEAR LOSS + PRINCEVILLE, Hawaii, March 5 - + Shr diluted loss 31 cts vs profit 17 cts + Net loss 2,806,005 vs profit 1,513,395 + Revs 15.0 mln vs 10.4 mln + Avg shrs diluted 8,982,754 vs 8,804,899 + NOTE: Current year includes loss of 3.4 mln dlrs from +takeover defense expenses. Also includes losses of 1.8 mln dlrs +vs 332,000 dlrs from equity in limited partnerships. + Reuter + + + + 5-MAR-1987 09:44:47.86 +acq +usa + + + + + +F +f0112reute +r f BC-ORANGE-CO-<OJ>-HOLDER 03-05 0035 + +ORANGE-CO <OJ> HOLDER RAISES STAKE + LAKE HAMILTON, Fla., March 5 - Orange-Co Inc said its +largest shareholder, <Summit Resoureces Inc>, has increased its +stake to 15 pct from 14 pct and now owns 644,727 shares. + Reuter + + + + 5-MAR-1987 09:44:55.17 +earn +usa + + + + + +F +f0113reute +r f BC-HORIZON-CORP-<HZN>-4T 03-05 0075 + +HORIZON CORP <HZN> 4TH QTR NET + FOUNTAIN HILLS, Ariz., March 5 - + Oper shr profit 1.66 dlrs vs loss eight cts + Oper net profit 12.0 mln vs loss 572,000 + Revs 27.4 mln vs 4,311,000 + Year + Oper shr profit 1.36 dlrs vs loss 43 cts + Oper net profit 9,817,000 vs loss 2,433,000 + Revs 35.0 mln vs 13.8 mln + Avg shrs 7,224,000 vs 6,731,000 + NOTE: 1985 net includes tax credits of 492,000 dlrs in +quarter and 2,433,000 dlrs in year. + 1985 net both periods excludes 168,000 dlr loss from +discontinued operations. + 1986 net both periods includes pretax gain 21.8 mln dlrs +from sale of remaining interest in Paradise Hills, N.M., +development. + Reuter + + + + 5-MAR-1987 09:45:10.22 +earn +canada + + + + + +E F +f0115reute +r f BC-thomson 03-05 0046 + +<INTERNATIONAL THOMSON ORGANISATION LTD> YEAR + TORONTO, Mar 5 - + Shr 33p vs 38p + Net 97 mln vs 111 mln + Revs 1.71 billion vs 1.76 billion + NOTE: Figures in sterling. + Share results after deducting preferred share dividends of +one mln pounds sterling in 1986. + Reuter + + + + 5-MAR-1987 09:45:49.05 + +france + +ec + + + +C G +f0118reute +u f BC-FRENCH-FARMERS-STRONG 03-05 0108 + +FRENCH FARMERS STRONGLY CRITICISE EC MILK PACT + PARIS, March 5 - The EC agriculture ministers' agreement on +reducing dairy output puts milk producers in an impossible +situation, French farm unions said. + The accord to limit butter sales into intervention, part of +planned dairy output cuts of 9-1/2 pct over two years, will cut +milk producers' income, a spokeswoman for France's largest farm +union, the FNSEA, said. + The move has destroyed part of the Common Agricultural +Policy, French milk producers said in a press release. + But Agriculture Minister Francois Guillaume said +repercussions of the plan will affect dairies, not farmers. + "If there are negative repercussions, it will be at the +level of the dairies which have never looked for new outlets +for butter and milk," he told journalists during a visit to +Rouen. + FNSEA president Raymond Lacombe said on French radio the +milk sector needs restructuring by encouraging early retirement +and helping young farmers to start. But Commission proposals, +rejected by ministers, would have frozen land prices, he said. + The FNSEA says it will demonstrate over Commission +proposals to freeze most 1987/88 farm prices and cut supports. +Pig farmers have held violent demonstrations over falling pork +prices and milk producers blocked roads in protest at cuts in +milk output. + Reuter + + + + 5-MAR-1987 09:52:38.52 + +uk + + + + + +RM +f0137reute +b f BC-IBJ-ESTABLISHES-200-M 03-05 0074 + +IBJ ESTABLISHES 200 MLN STG CD PROGRAMME + LONDON, March 5 - The Industrial Bank of Japan Ltd (IBJ), +London Branch, said it is establishing a sterling certificate +of deposit (CD) issuance programme for up to 200 mln stg. + The arranger is LLoyds Merchant Bank Ltd and dealers are +LLoyds, Samuel Montagu and Co Ltd, Morgan Grenfell and Co Ltd +and S.G. Warburg and Co Ltd. + The paper will have maturities between seven and 365 days. + REUTER + + + + 5-MAR-1987 09:53:39.85 + + + + + + + +F +f0139reute +f f BC-******MOBIL'S-MONTGOM 03-05 0015 + +******MOBIL'S MONTGOMERY WARD AND CO FEBRUARY SALES UP 12.7 PCT ON COMPARABLE STORE BASIS +Blah blah blah. + + + + + + 5-MAR-1987 09:54:03.66 +earn +usa + + + + + +F +f0140reute +r f BC-EQUATORIAL-COMMUNICAT 03-05 0058 + +EQUATORIAL COMMUNICATIONS CO <EQUA> 4TH QTR LOSS + MOUNTAIN VIEW, Calif., March 4 - + Shr loss 3.84 dlrs vs nil + Net loss 56,879,000 vs profit 23,000 + Rev 10.3 mln vs 17.7 mln + Year + Shr loss 4.60 dlrs vs profit 14 cts + Net loss 67,818,000 vs profit 1,807,000 + Rev 50.9 mln vs 56.1 mln + Avg shares 14,734,000 vs 12,801,000 + NOTE: Fourth qtr net includes a one-time restructuring +charge of 45.2 mln dlrs. 1985 net income includes extraordinary +gain of 3.2 mln dlrs, or 25 cts. + Reuter + + + + 5-MAR-1987 09:55:41.23 + +iraniraq + + + + + +RM +f0142reute +u f BC-IRAQ-SAYS-IT-CRUSHES 03-05 0121 + +IRAQ SAYS IT CRUSHES NEW IRANIAN BASRA OFFENSIVE + BAGHDAD, March 5 - Iraq said its forces killed or wounded +15,000 Iranian Revolutionary Guards as they crushed a new +Iranian offensive near the strategic port city of Basra. + A high command war communique said four Revolutionary +Guards divisions attacked Iraqi positions east of Basra on the +Gulf War southern front, but they were fully crushed by noon +(0900 GMT). + Adbul-Jabbar Mohsen, chief of the defence ministry +political department, said the Iranians had 15,000 casualties. + Iran earlier today said its forces launched fresh attacks +near Basra last night, adding that 1,200 Iraqis were killed or +wounded in fighting near Fish Lake, 10 km east of Basra. + In its first reaction to Tehran reports of a new Iranian +offensive on the northern front, Iraq said fighting continues +around the strategic mountain peak of Kardamanend, overlooking +the Haj Omran-Rawandiz axis close to the Iranian border. + A military spokesman said Iran launched its attack in the +north "to (turn) Iraqi attention towards that area and relax +pressure in the south." + He added, "Iraq knows well that Iran's main goal is to +occupy Basra in the south and that was the reason why Iraq has +repelled their new offensive so decisively and firmly." + Iran reported heavy fighting on both fronts today. + REUTER + + + + 5-MAR-1987 09:55:46.08 +earn + + + + + + +E F +f0143reute +b f BC-thomson 03-05 0010 + +******INTERNATIONAL THOMSON ORGANISATION LTD YEAR SHR 33P VS 38P +Blah blah blah. + + + + + + 5-MAR-1987 09:56:03.54 + +usa + + + + + +F +f0144reute +b f BC-ENZON-<ENZN>-SAYS-DRU 03-05 0063 + +ENZON <ENZN> SAYS DRUG TREATS DISEASE + SOUTH PLAINFIELD, N.J., March 5 - Enzon Inc said a new +treatment using its investigational new drug PEG-ADA has +restored the functioning of the immune system in the first two +children that were born deficient in the enzyme adenosine +deaminase. + The disorder is known as severe combined immunodeficiency +disease, or "bubble boy disease" + Bubble Boy Disease is a rare but severe disease that +hampers the development of the immune system. It has killed +most of its victims before adulthood. + Children with the disease are consigned to live in a +sterile environment, such as a plastic bubble, to avoid +infection, the company said. + The study of Enzon's drug, conducted at Duke University, +showed that two children suffering from the disease were +treated for 11 and seven months, respectively, and were free of +serious infection during that time, the company said. The +results were published in the New England Journal of Medicine. + The disease is caused by a missing enzyme, called Adenosine +Deaminase, or ADA, that is crucial to the development of the +immune system. + Enzon said it has developed a technology to coat the enzyme +with a substance called polyethylene glycol, or PEG, serving to +disguise the enzyme when it is reintroduced into the body, +preventing rejection. + "Marked improvement in laboratory tests of immune function +occurred in each child, along with an increase in the number of +T-lymphocytes, the immune cells that were missing before +treatment with PEG-ADA had begun," the study said. + "The children are now more active and have begun to gain +weight and height. Before treatment their growth had been very +poor in comparison to normal children of the same age," the +study, conducted by Doctors Michael Hershfield and Rebecca +Buckley, said. + The PEG-ADA injections were given once a week. Victims of +the disease have traditionally been treated by bone marrow +transplants, but for most, donors are not available or +transplantation is unsuccessful, the company said. Other +diseases caused by a missing enzyme might also be treated by +introducing a PEG coated enzyme, the article noted. + Reuter + + + + 5-MAR-1987 09:57:00.61 + + + + + + + +F +f0149reute +f f BC-******MCI-COMMUNICATI 03-05 0011 + +******MCI COMMUNICATIONS CALLS FOR IMMEDIATE DEREGULATION OF ATT +Blah blah blah. + + + + + + 5-MAR-1987 09:58:35.61 + + + + + + + +F +f0154reute +b f BC-******F.W.-WOOLWORTH 03-05 0009 + +*****F.W. WOOLWORTH CO FEBRUARY SALES INCREASE 11.3 PCT +Blah blah blah. + + + + + + 5-MAR-1987 09:59:40.82 +acq +usa + + + + + +F +f0160reute +r f BC-TRIMEDYNE-<TMED>-TO-S 03-05 0066 + +TRIMEDYNE <TMED> TO SPIN OFF STAKE IN UNIT + SANTA ANA, Calif., March 5 - Trimedyne Inc said it will +distribute one Class B common share of <Automedix Sciences Inc> +for each four Trimedyne shares held of record on March Nine. + The company said in the spinoff it is distributing its +entire 44 pct interesdt in Automedix. The spun-off stock will +not be saleable for 13 months, the company said. + Reuter + + + + 5-MAR-1987 10:00:29.72 + +usa + + + + + +F +f0163reute +b f BC-K-MART-<KM>-FEBRUARY 03-05 0088 + +K MART <KM> FEBRUARY SALES UP 8.2 PCT + TROY, Mich., March 5 - K Mart Corp said February sales +rose 13.1 pct from a year ago and comparable store sales in the +four-week period ended February 25 rose 8.2 pct. + K Mart said consolidated sales in the period were 1.46 +billion dlrs compared with 1.29 billion last year. It said the +year-ago figures excluded sales for discontinued operations. + K Mart cited "favorable consumer response to our +merchandise programs" and said its specialty retailers had +"excellent February sales." + Reuter + + + + 5-MAR-1987 10:00:45.71 + + + + + + + +F +f0165reute +b f BC-*****HECK'S-INC-TO-RE 03-05 0006 + +*****HECK'S INC TO RELEASE NEWS SHORTLY . +Blah blah blah. + + + + + + 5-MAR-1987 10:01:44.44 +earn +usa + + + + + +F +f0171reute +r f BC-CASEY'S-GENERAL-STORE 03-05 0045 + +CASEY'S GENERAL STORES INC <CASY> 3RD QTR JAN 31 + DES MOINES, Iowa, March 5 - + Shr 16 cts vs 13 cts + Net 1,900,000 vs 1,600,000 + Sales 68.2 mln vs 69.6 mln + Nine mths + Shr 60 cts vs 43 cts + Net 7,100,000 vs 4,700,000 + Sales 214.0 mln vs 219.5 mln + Reuter + + + + 5-MAR-1987 10:02:32.72 + + + + + + + +F +f0176reute +f f BC-******J.C.-PENNEY-FEB 03-05 0010 + +******J.C. PENNEY FEBRUARY STORE AND CATALOG SALES UP 5.3 PCT +Blah blah blah. + + + + + + 5-MAR-1987 10:02:53.85 +grainwheatbarleycorn +france + +ec + + + +C G +f0179reute +u f BC-FRENCH-FREE-MARKET-CE 03-05 0092 + +FRENCH FREE MARKET CEREAL EXPORT BIDS DETAILED + PARIS, March 5 - French operators have requested licences +to export 40,000 tonnes of free market feed wheat, 32,500 +tonnes of soft bread wheat, 375,000 tonnes of barley and +465,000 tonnes of maize at today's European Community tender, +trade sources here said. + Rebates requested ranged between 134 and 136.50 European +currency units (Ecus) a tonne for the feed wheat, 137.39 and +141.50 Ecus a tonne for the bread wheat, 137.93 and 142.95 Ecus +for the barley and 133.75 and 140.25 Ecus for the maize. + Reuter + + + + 5-MAR-1987 10:03:24.09 + +usa + + + + + +F Y +f0183reute +b f BC-OCCIDENTAL-<OXY>-OFFE 03-05 0099 + +OCCIDENTAL <OXY> OFFERS OVER 37 MLN SHARES + NEW YORK, March 5 - Occidental Petroleum Corp said its +common stock offering has been further increased to a total of +37,950,000 shares. + The company explained that underwriters exercised in full +their option to increase tohe offering by buying an additional +4,950,000 shares over and above the 33 mln brought to market +yesterday. Originally, Occidental had planned to offer 30 mln +shares. It had 165 mln outstanding prior to the offering. + The underwriters are Drexel Burnham Lambert Inc, Kidder +Peabody and Co Inc and Salomon Brothers Inc. + At the public offering price of 30.50 dlrs a share, +Occidental said, the total value of the offering was nearly +1.16 billion dlrs, making it the largest underwritten common +equity offering by a U.S. natural resource company. + The company said the significant financial improvements +from applying the net proceeds of the offering, principally to +the reduction of debt, along with its 1986 restructuring of oil +and gas operations and the acquisition of Midcon Corp have +positioned Occidental to benefit from an improving oil and gas +industry environment. + Reuter + + + + 5-MAR-1987 10:03:43.41 +crude +usa + + + + + +F Y +f0186reute +u f BC-DIAMOND-SHAMROCK-<DIA 03-05 0073 + +DIAMOND SHAMROCK <DIA> RAISES CRUDE OIL POSTINGS + NEW YORK, MAR 5 - Diamond Shamrock said it raised its +posted prices for all grades of crude oil one dlr a barrel, +effective yesterday. + The one dlr increase brings West Texas Intermediate, WTI +the U.S. benchmark crude, to 17.00 dlrs a bbl, the company +said. + Diamond Shamrock joined Sun Co, Coastal, Citgo and Murphy +Oil in raising crude oil posted prices one dlr a barrel +yesterday. + Reuter + + + + 5-MAR-1987 10:04:23.59 +earn +usa + + + + + +F +f0190reute +r f BC-OAK-HILL-SPORTSWEAR-C 03-05 0047 + +OAK HILL SPORTSWEAR CORP <OHSC> 4TH QTR NET + NEW YORK, March 5 - + Shr 27 cts vs 28 cts + Net 1,026,000 vs 1,025,000 + Sales 27.8 mln vs 25.4 mln + Year + Shr 95 cts vs 16 cts + Net 3,682,000 vs 598,000 + Sales 102.1 mln vs 100.4 mln + Avg shrs 3,858,000 vs 3,700,000 + Reuter + + + + 5-MAR-1987 10:04:32.26 +earn +usa + + + + + +F +f0191reute +r f BC-OAK-INDUSTRIES-INC-<O 03-05 0068 + +OAK INDUSTRIES INC <OAK> 4TH QTR LOSS + SAN DIEGO, March 5 - + Oper shr loss five cts vs loss 50 cts + Oper net loss 3,862,000 vs loss 15,900,000 + Sales 42.6 mln vs 38.8 mln + Avg shr 72.1 mln vs 31.7 mln + Year + Oper shr loss 51 cts vs loss 2.10 dlrs + Oper net loss 30.3 mln vs 51.3 mln + Sales 151.7 mln vs 153.1 mln + Avg shrs 59.4 mln vs 24.4 mln + Backlog 57.1 mln vs 52.9 mln + NOTES: Operating losses exclude profits from discontinued +operationgs of 1,000,000 dlrs, or one cent a share, vs +2,493,000 dlrs, or eight cts a share, in quarter and 65.0 mln +dlrs, or 1.09 dlrs a share, vs 13.7 mln dlrs, or 56 cts a +share, in year + 1986 year operating loss also excludes extraordinary gain +of of 25.6 mln dlrs, or 43 cts a share + Backlog, which includes only orders to be shipped within 12 +mths, was 63.0 mln dlrs on January 31. Orders to be shipped +beyond 12 mths were 27.6 mln dlrs vs 17.1 mln dlrs at December +31 + Reuter + + + + 5-MAR-1987 10:04:36.77 +earn +usa + + + + + +F +f0192reute +s f BC-REGIS-CORP-<RGIS>-REG 03-05 0024 + +REGIS CORP <RGIS> REGULAR DIVIDEND SET + MINNEAPOLIS, March 5 - + Qtly div 4-1/2 cts vs 4-1/2 cts prior + Pay April 15 + Record March 24 + Reuter + + + + 5-MAR-1987 10:05:25.49 + +usa + + + + + +F +f0196reute +u f BC-JAMESWAY-<JMY>-FEBRUA 03-05 0068 + +JAMESWAY <JMY> FEBRUARY SALES UP 13 PCT + SECAUCUS, N.J., March 5 - Jamesway Corp said it had sales +for the four weeks ended February 28, excluding leased +departments, were 31.7 mln dlrs, up 13 pct from 28.0 mln dlrs +in the comperable four week period a year earlier. + On a store for store basis, the company said, sales +increased five pct. It operated 100 stores last month, up from +92 in February 1986. + Reuter + + + + 5-MAR-1987 10:09:59.43 + +usa + + + + + +F +f0209reute +u f BC-K-MART-<KM>-COMPARABL 03-05 0102 + +K MART <KM> COMPARABLE-STORE FEBRUARY SALES UP + TROY, Mich., March 5 - K Mart Corp said February sales +rose 13.1 pct from a year ago and comparable store sales in the +four-week period ended February 25 rose 8.2 pct. + K Mart said consolidated sales in the period were +1,459,193,000 dlrs compared with 1,289,635,000 dlrs last year. +It said the year-ago figures excluded sales for discontinued +operations such as Designer Depots, Furr's Cafeterias and +Bishop Buffets. + K Mart cited "favorable consumer response to our +merchandise programs" and said its specialty retailers had +"excellent February sales." + Reuter + + + + 5-MAR-1987 10:11:50.97 + +usa +james-baker +worldbank + + + +C G L M T +f0214reute +r f BC-Trade 03-05 0143 + +CONGRESS MAY CURB U.S. AID TO DEVELOPMENT BANKS + WASHINGTON, March 5 - Congressional ire is rising against +the multinational development banks which make loans to help +other countries produce goods in direct competition with +beleagured U.S. farmers and miners. + With a record U.S. trade deficit of 169 billion dlrs last +year and a farm economy in the doldrums, Congress is pressing +to hold back U.S. funds for the World Bank and other +development banks if the money is used to subsidize production +or to produce goods already in oversupply around the world. + "American tax dollars are being used to subsidize foreign +agriculture and mineral production that is often in direct +competition with our producers," Senator Don Nickles, an +Oklahoma Republican, said in a letter to fellow senators +seeking support for his legislation to limit these loans. + Nickles and Senator Steven Symms, a conservative Republican +from Idaho, have introduced legislation that would strictly +limit U.S. funding of multinational development banks if they +make any loans to help developing countries produce surplus +commodities or minerals. + Current law requires that the United States vote against +such loans but carries no reprisals if they are ultimately +approved by the banks. + Treasury Secretary James Baker's assurances that U.S. +policy is to oppose these loans did not satisfy concerns raised +at two Senate committee hearings last week. + Baker told a Senate Appropriations subcommittee on Foreign +Operations, "As a policy matter, we oppose loans for production +of commodities in oversupply." + The senators cited a 350-mln-dlr World Bank loan made to +Argentina last year to help it increase its agricultural +exports by one billion dlrs a year by 1989. + Nickles, Symms and others also have cited other loans such +as a 1985 World Bank loan to Hungary to expand livestock +exports and 500 mln dlrs lent to Thailand from 1981 to 1985 at +low interest rates for agriculture. + Last year the Republican-controlled Senate voted three +times over the objections of the administration to cut U.S. +funding of development banks by the amount of these loans. + But even with a 65 to 15 vote in favour of the proposal, +the restrictions were weakened in the final version. Only a +provision directing U.S. officials to vote disapproval cleared +Congress. + This year's version, called the Foreign Agricultural +Investment Reform (FAIR) Act would require the U.S. to vote +against loans designed to increase production of surplus +commodities and minerals. Also, the recipient countries would +have to prove that the production, marketing and export of the +commodities could be handled without government subsidy. + If the loan is approved over U.S. objections, the United +States would not increase or replenish funds for that +institution until it agrees to stop making such loans. + Objections to such loans have most often been raised by +conservative Republicans who have traditionally opposed U.S. +funding for these international development banks. + But the loss of many jobs to foreign competition has raised +similar concerns among more moderate senators. + The administration opposes any legislation that would tie +its hands in votes on the loans. It argues there might be +instances in which a country needed the money to continue its +moves toward U.S. policies in other areas. + Baker said the United States would continue to use its +leverage in the banks to require foreign trade liberalization +measures, often in the form of elimination of subsidies. + Two House Republicans, Representatives Larry Craig of Idaho +and Beau Bolter of Texas, have introduced the bill. But it +faces stiff opposition in the House Banking Committee which has +blocked its consideration by the House in the past. + Symms intends to offer the bill as an amendment to any +related legislation this year, an aide said. + Reuter + + + + 5-MAR-1987 10:13:13.34 + +usa + + + + + +F +f0219reute +d f BC-EQUATORIAL-<EQUA>-SIG 03-05 0094 + +EQUATORIAL <EQUA> SIGNS PACT WITH CONTEL UNIT + MOUNTAIN VIEW, Calif., March 5 - Equatorial Communications +Co, a satellite data network concern, said it has signed an +agreement with Contel Corp's <CTC>, Contel ASC, unit allowing +Contel ASC to buy 3.6 mln shares of Equatorial stock at 3.25 +dlrs per share. + In addition, Equatorial said under the agreement Contel ASC +would buy a minimum of 10 mln dlrs of equipment from +Equatorial, loan Equatorial up to six mln dlrs and assume a +portion of Equatorial's rights and obligations under a +satellite transponder lease. + Reuter + + + + 5-MAR-1987 10:13:54.12 +acq +west-germanyusa + + + + + +F +f0223reute +d f BC-MANNESMANN-SEEKS-STAK 03-05 0101 + +MANNESMANN SEEKS STAKE IN U.S. FIRM + DUESSELDORF, March 5 - Mannesmann AG <MMWG.F>, the +diversified engineering and pipe-making group, is interested in +taking a stake in a U.S. Company or companies but has not yet +found a suitable firm, a spokesman said in reply to questions. + Mannesmann managing board chairman Werner Dieter told the +business weekly Wirtschaftswoche in an interview that +Mannesmann wanted to invest in a U.S. Company in order to +strengthen its presence on the U.S. Market. + Dieter said Mannesmann would act quickly when and if it +found a firm in which it wanted to take a stake. + The Mannesmann spokesman declined to say in which +industrial sector the group may make a U.S. Acquisition or how +big the acquisition might be. + He also said the group had not yet completed taking over a +stake in car components firm <Fichtel und Sachs AG>. + Mannesmann had said in January it hoped to take a 37.5 pct +stake in Fichtel und Sachs's holding company, Sachs AG, in the +first quarter. The spokesman said Mannesmann had a letter of +intent on the takeover from the heirs of the company's late +owner but completion has been delayed by legal questions +concerning the inheritance. + REUTER + + + + 5-MAR-1987 10:15:44.63 +earn +usa + + + + + +F +f0228reute +u f BC-AMERICAN-INT'L-GROUP 03-05 0052 + +AMERICAN INT'L GROUP INC <AIG> 4TH QTR NET + NEW YORK, March 5 - + Shr 1.83 dlrs vs 77 cts + Net 296.6 mln vs 120.1 mln + Year + Shr 4.90 dlrs vs 2.76 dlrs + Net 795.8 mln vs 420.5 mln + NOTE: Includes gains of 139.2 mln vs 46.8 mln in year and +94.0 mln vs 11.6 mln from capital gains from investments. + Reuter + + + + 5-MAR-1987 10:17:54.70 +earn +usa + + + + + +F +f0241reute +r f BC-SYSTEMS-FOR-HEALTH-CA 03-05 0075 + +SYSTEMS FOR HEALTH CARE IN ONE-FOR-50 SPLIT + CHICAGO, March 5 - Systems for Health Care Inc said it +repositioned the company through a one-for-50 reverse stock +split. + It said there are now 3,002,500 common shares outstanding +with a quoted price of about 7/8 bid, compared to 150,125,000 +shares outstanding prior to the split. + In another recent development, Systems for Health Care +formally changed its name to its present form from Orcas Corp. + Reuter + + + + 5-MAR-1987 10:18:25.05 + +usa + + + + + +F +f0245reute +r f BC-FIRST-EXECUTIVE-CORP 03-05 0085 + +FIRST EXECUTIVE CORP <FEXC> GIVES UNIT FUNDS + LOS ANGELES, March 5 - First Executive Corp said that its +principal subsidiary contributed 152 mln dlrs to one of its +divisions to cover credits it wrongfully took on its 1983 to +1985 regulatory accounting statements. + The company said Executive Life Insurance Co gave the +capital infusion to its subsidiary, Executive Life Insurance Co +of New York. It said the new funds bring to 280 mln dlrs the +company has received from its parent the past three years. + Executive Life Insurance Co of New York admitted a +violation of state insurance law and paid a fine of 250,000 +dlrs levied by the New York Insurance Department, according to +the company. + Executive Life of New York took credits for reinsurance +agreements that provided less protection to the insurer and its +policyholders than New York rules require, according to +published reports. + Reuter + + + + 5-MAR-1987 10:18:32.34 + +usa + + + + + +F +f0246reute +r f BC-<HARD-ROCK-CAFE-PLC> 03-05 0087 + +<HARD ROCK CAFE PLC> SETS INITIAL U.S. OFFERING + NEW YORK, March 5 - Hard Rock Cafe PLC said it has filed +for an initial U.S. offering of 2,240,000 American Depositary +Shares representing 11.2 mln Class A ordinary shares. + It said 240,000 of the ADS's will be sold by a current +shareholder. + Lead underwriter is <Drexel Burnham Lambert Inc>. + The company said proceeds will be used for the financing of +additional restaurants, the expansion of existing restaurants +and retail operations and the repayment of debt. + Reuter + + + + 5-MAR-1987 10:18:46.99 + +belgium + + + + + +RM +f0247reute +b f BC-BELGIUM-TO-ISSUE-150 03-05 0093 + +BELGIUM TO ISSUE 150 BILLION FRANC STATE LOAN + BRUSSELS, March 5 - Belgium is to issue a 150 billion +franc, eight-year state loan carrying a coupon of eight pct, a +Finance Ministry spokesman said. + Pricing will be fixed next week. + The spokesman said the loan will feature a call option +after four years at a price also to be determined. + Some 120 billion francs of the loan will be taken up by +members of the issuing consortium, comprising major Belgian +commercial banks, and the remaining 30 billion by semi-state +owned financial institutions. + The most recent public authority loan stock issue, for the +state road building fund Fonds des Routes, was also for eight +years with an eight pct coupon. It was priced at par. + The issue also featured a call option after four years at +102, falling to 101-1/2 after five and by a half point each +year thereafter. + REUTER + + + + 5-MAR-1987 10:18:51.21 + + + + + + + +F +f0248reute +f f BC-******MAY-DEPARTMENT 03-05 0009 + +******MAY DEPARTMENT STORES CO FEBRUARY SALES RISE 15 PCT +Blah blah blah. + + + + + + 5-MAR-1987 10:20:40.73 +earncrude +ukusa + + + + + +F Y +f0253reute +d f BC-ROYAL-DUTCH/SHELL-U.S 03-05 0111 + +ROYAL DUTCH/SHELL U.S. EARNINGS SHARPLY LOWER + LONDON, March 5 - Royal Dutch/Shell Group <RD.AS> earnings +for 1986 from the U.S. Fell sharply because of difficult market +conditions, lower crude and gas prices and also due to +different accounting methods, Shell chairman Peter Holmes said. + The Shell Oil dollar net income fell 47 pct in the year, +while the additional effect of currency movements reduced the +contribution to group net income by 57 pct to 472 mln stg. + The group earlier reported a drop in net income for the +year to 2.54 billion stg from 3.03 billion previously, with +lower crude prices outweighing the effect of increased sales by +volume. + Although the figures were lower, they were nonetheless at +the top end of market forecasts. Shell Transport and Trading +Plc <SC.L> shares, the U.K. Arm of the group, rose to 11.39 stg +from a close last night of 11.06 stg. Analysts noted that a +general collapse in exploration and production volumes was +partially offset by earnings from chemicals rising to 462 mln +stg from 205 mln in 1985. + Also, a windfall tax credit and lower than expected +currency losses had added about 100 mln stg onto fourth quarter +results, which was the main reason for the figures exceeding +forecasts, industry analyst Chris Rowland of Barclays de Zoete +Wedd noted. + However, he added there could well be a sharp fall in +performance in the first quarter of 1987, due to the +improbability that the group would be able to repeat the high +refining and marketing margins of first quarter 1986. + The impact of recovering oil prices would come through +faster on the downstream side than on the upstream as such a +high proportion of upstream activity centred on gas, which +typically reacted to oil price changes with about a half-year +lag, analysts said. + Holmes said that in the upstream U.S. Sector the third +quarter of 1986 had been the worst of all. + Only two of the oil majors had managed to make a profit in +the period, with Shell Oil being one of them. The decrease in +U.S. Earnings had been accentuated by tax rates but the group +had increased share to become volume market leader, Holmes +added. + Continued low crude oil prices would continue to subdue +U.S. Exploration activity. "Exploration is currently pretty +flat. We are going to go on, but at 16-18 dlrs there will be no +massive upturn," he said. + A renewal of exploration in high cost areas of the North +Sea and the U.S. Requires prices of around 25 dlrs a barrel. + Ultimately this would lead to a rise in U.S. Imports. "If +you are not exploring you are not going to find anything," he +noted. + U.S. Oil production had dropped some half mln barrels a day +(bbd) in 1986 and would continue to fall if the price stayed +below 20 dlrs a barrel. + This favored OPEC's attempts to stabilise prices, as the +lower the price the more likelihood there was of non-OPEC +marginal production shutting down. "OPEC has done pretty +extraordinarily well...Everything is moving in (its) direction," +he added. + Reuter + + + + 5-MAR-1987 10:21:29.06 + +usa + + + + + +F +f0258reute +u f BC-J.C.-PENNEY-<JCP>-FEB 03-05 0069 + +J.C. PENNEY <JCP> FEBRUARY SALES 5.3 PCT + NEW YORK, March 5 - J.C. Penney co Inc said sales for the +four weeks ended February 28 for its JCPenney stores and +catalogs were up 5.3 pct to 780 mln dlrs from 741 mln dlrs a +year earlier, with comparable store sales up 5.5 pct. + The company said total company sales for the period were up +6.0 pct to 888 mln dlrs from 838 mln dlrs, with same-store +sales up 6.3 pct. + Reuter + + + + 5-MAR-1987 10:21:41.00 + +usa + + + + + +F +f0259reute +u f BC-F.W.-WOOLWORTH-<Z>-FE 03-05 0057 + +F.W. WOOLWORTH <Z> FEBRUARY SALES INCREASE + NEW YORK, March 5 - F.W. Woolworth Co said total sales for +the four weeks ended February 28 rose 11.3 pct to 416 mln, from +374 mln in the comparable 1986 period. + Woolworth said domestic sales increased 7.1 pct, to 249 mln +from 233 mln, while foreign sales rose 18.4 pct to 167 mln, +from 141 mln. + Reuter + + + + 5-MAR-1987 10:22:24.09 +interest +spain + + + + + +RM +f0266reute +r f BC-BANKERS-WELCOME-SPANI 03-05 0115 + +BANKERS WELCOME SPANISH RESERVE REQUIREMENT HIKE + MADRID, March 5 - Bankers welcomed the Bank of Spain's +decision to raise the reserve requirement for banks and savings +banks, saying it reflected the socialist government's +determination not to ease up in the fight against inflation +despite the painful social effects of four years of austerity. + The central bank last night raised the requirement by one +percentage point to 19 pct from March 13, saying that excess +liquidity threatened money supply and inflation targets. + Bankers said the move represented a change of tactic by the +Bank, which until now has relied on raising interest rates to +choke off money supply growth. + "I think it's a good measure," a senior foreign banker said. +"It's a faster way to get the job done than using interest rates +and avoids unpleasant effects on other areas of the economy." + "It shows that the political will is very strong. They know +that controlling inflation will make industry more competitive +and bring down unemployment in the long run," he added. + The head of another foreign bank said that only a month +ago, the Bank of Spain had dismissed his suggestion of a rise +in reserve requirements, preferring to pursue its strategy of +raising interest rates. + But bankers said the high real interest rates on offer now +-- around eight pct for overnight funds -- was attracting money +from abroad, strengthening the peseta and making Spanish +exports less competitive. + The government says industry's competitiveness is also +being hit hard by inflation. At 8.3 pct last year, the rate was +way above that of Spain's major trading partners in the +European Community, which it joined a year ago. + To help meet this year's target of five pct, it is +insisting pay rises stay at that level, setting the stage for +clashes with trade unions, who say they have made enough +sacrifices. + Demonstrations by workers, students and farmers, whose +demands essentially involve more government spending, have +become an almost daily occurrence. But Prime Minister Felipe +Gonzalez insists that the state is doing as much as it can. + Bankers said the reserve requirement increase could have +some impact on commercial lending rates but should not hit the +money market too hard. + The Bank of Spain, which only yesterday raised its key +overnight call money rate to 13.5 pct, left it unchanged at +today's auction. The rate has been increased nine times since +the start of the year, when it was below 12 pct. + Bankers said commercial lending rates were set to rise in +any case with the end of the six pct maximium interest rate +banks can offer for time deposits of up to six months. + The measure will take effect tomorrow, following the +publication of the decree in today's official gazette. Bankers +say the liberalisation will increase the cost of funds and, +inevitably, push lending rates higher. + A companion measure, reducing the proportion of funds which +banks must invest in specific areas, also takes effect +tomorrow. Officials said when the cut was approved last month +that it was aimed partly at compensating banks for higher +interest rates. + REUTER + + + + 5-MAR-1987 10:22:36.39 +earn +sweden + + + + + +F +f0268reute +d f BC-GAMBRO-AB-<GAMB-ST>-1 03-05 0035 + +GAMBRO AB <GAMB ST> 1986 YEAR + STOCKHOLM, Mar 5 - Group profit after net financial items -133.5 mln crowns vs 101 mln. + Sales 1.61 billion vs 1.51 billion. + Proposed dividend 0.80 crowns vs 0.40 crowns. + REUTER + + + + 5-MAR-1987 10:22:52.88 + +netherlands + + + + + +F +f0269reute +d f BC-KLM-LOAD-FACTOR-HIGHE 03-05 0100 + +KLM LOAD FACTOR HIGHER IN FEBRUARY + AMSTERDAM, March 5 - KLM Royal Dutch Airlines <KLM.AS> said +its load factor rose to 66.5 pct in February from 62.5 pct in +January and 65.7 pct in February 1986. + The load factor was 66.6 pct in the April/February period +of 1986/87 compared with 67.2 pct in the same period in +1985/86. + Traffic rose 18 pct and capacity rose 17 pct in February +versus 12 and 13 pct respectively in January. + In the April/February period of 1986/87 traffic rose nine +pct and capacity rose 10 pct compared with eight and nine pct +respectively in the same period in 1985/86. + REUTER + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-003.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-003.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-003.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-003.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2006 @@ + + + 9-MAR-1987 04:58:41.12 +money-fx +uk + + + + + +RM +f0416reute +b f BC-U.K.-MONEY-MARKET-SHO 03-09 0095 + +U.K. MONEY MARKET SHORTAGE FORECAST AT 250 MLN STG + LONDON, March 9 - The Bank of England said it forecast a +shortage of around 250 mln stg in the money market today. + Among the factors affecting liquidity, it said bills +maturing in official hands and the treasury bill take-up would +drain around 1.02 billion stg while below target bankers' +balances would take out a further 140 mln. + Against this, a fall in the note circulation would add 345 +mln stg and the net effect of exchequer transactions would be +an inflow of some 545 mln stg, the Bank added. + REUTER + + + + 9-MAR-1987 05:03:09.75 +money-fxinterest +france + + + + + +RM +f0423reute +u f BC-BANK-OF-FRANCE-SETS-M 03-09 0112 + +BANK OF FRANCE SETS MONEY MARKET TENDER + PARIS, March 9 - The Bank of France said it invited offers +of first category paper today for a money market intervention +tender. + Money market dealers said conditions seemed right for the +Bank to cut its intervention rate at the tender by a quarter +percentage point to 7-3/4 pct from eight, reflecting an easing +in call money rate last week, and the French franc's steadiness +on foreign exchange markets since the February 22 currency +stabilisation accord here by the Group of Five and Canada. + Intervention rate was last raised to eight pct from 7-1/4 +on January 2. Call money today was quoted at 7-11/16 7-3/4 pct. + REUTER + + + + 9-MAR-1987 05:03:38.51 +crude +china + + + + + +F +f0426reute +u f BC-AMOCO-REPORTS-SOUTH-C 03-09 0073 + +AMOCO REPORTS SOUTH CHINA SEA OIL FIND + PEKING, March 9 - The U.S. <Amoco Petroleum Corp> has +reported an offshore oil find at its Pearl River basin +concession in the South China Sea, the New China News Agency +said. + It said the Liu Hua 11-1-1 A well produced at around 2,240 +barrels per day at a depth of 305 metres. + The news agency said Amoco plans to drill a second well in +the area this year, but gave no further details. + REUTER + + + + 9-MAR-1987 05:12:17.12 + +south-korea + + + + + +F +f0437reute +u f BC-SOUTH-KOREA-DELAYS-CO 03-09 0110 + +SOUTH KOREA DELAYS CONTRACT FOR NUCLEAR PLANTS + SEOUL, March 9 - Technology transfer problems have delayed +the finalising of contracts between South Korea's state-owned +Korea Electric Power Corp (Kepco) and U.S. Firms for supplies +of equipment and services for Kepco's latest two 950-megawatt +nuclear power plants, a Kepco spokesman said. + He told Reuters the contracts for Kepco's tenth and +eleventh stations, costing between two and three billion dlrs, +were due for completion by the end of February. + Kepco has been negotiating with Combustion Engineering Inc +(CSP) for pressurised light-water reactors and General Electric +Co (GE) for turbines. + + KEPCO has also been negotiating with (Sargent and Lundy +Engineers) for engineering and design consultancy services. + "We have been waging a tug-of-war on the transfer of +advanced technology. But I am optimistic we will sign contracts +with them within this month," the spokesman said. + He said the transfer of advanced technology is vital for +South Korea, which wants to build future nuclear power plants +with its own technology. + Work on the two plants is due to start about June 1988 for +completion in 1995 and 1996, although the sites have yet to be +chosen, he said. + REUTER + + + + 9-MAR-1987 05:19:27.56 + +switzerland + + + + + +RM +f0442reute +u f BC-KEIAISHA-ISSUING-12-M 03-09 0060 + +KEIAISHA ISSUING 12 MLN SWISS FRANC NOTES + ZURICH, March 9 - Keiaisha Co Ltd of Tokyo is issuing 12 +mln Swiss francs of straight notes due March 26, 1992 with a +4-5/8 pct coupon, lead manager Gotthard Bank said. + The notes can be called from September 26, 1989 at 101-1/4, +declining semi-annually. + The issue is guaranteed by the Kyowa Bank Ltd. + REUTER + + + + 9-MAR-1987 07:59:05.79 +interest + + + + + + +RM +f0749reute +f f BC-NATIONAL-WESTMINSTER 03-09 0015 + +******NATIONAL WESTMINSTER BANK SAYS IT CUTTING BASE LENDING RATE TO 10.5 PCT FROM 11 PCT. +Blah blah blah. + + + + + + 9-MAR-1987 08:08:57.16 +interest +uk + + + + + +RM +f0776reute +b f BC-NATIONAL-WESTMINSTER 03-09 0029 + +NATIONAL WESTMINSTER BANK CUTS BASE RATE + LONDON, March 9 - National Westminster Bank Plc said it has +cut its base lending rate 0.5 percentage points to 10.5 pct +today. + National Westminster said that it was responding to general +easing in money market rates. + Its move followed a signal from the Bank of England earlier +this afternoon that it would endorse a half point cut in the +base rate, a surprise move following its strong signals last +week that such a move would be premature. + However, since then the pound has continued to gain +strongly. + REUTER + + + + 9-MAR-1987 08:11:20.25 +earn +usa + + + + + +F +f0792reute +s f BC-U.S.-FACILITIES-<USRE 03-09 0047 + +U.S. FACILITIES <USRE> SEMI-ANNUAL DIVIDEND + COSTA MESA, Calif., March 9 - + Semi-annual dividend 4 cts + Pay May 29 + Record April 14 +Note: full name is U.S. Facilities Corp. This is first dividend +declared since company completed its initial public offering on +November 7. + Reuter + + + + 9-MAR-1987 08:13:16.75 +acq +usa + + + + + +F A +f0805reute +r f BC-STANDARD-PACIFIC-<SPF 03-09 0134 + +STANDARD PACIFIC <SPF> ACQUIRES SOUTH BAY S/L + COSTA MESA, Calif, March 9 - Standard Pacific LP said it +has acquired substantially all of the assets and liabilities of +South Bay Savings and Loan Association of Newport Beach. + The firm said over the weekend that it will conduct its +savings and loan activities through Standard Pacific Savings +FA, a Federal stock association. + On Friday, the Federal Home Loan Bank Board in Washington +said it approved the acquisition of South Bay S and L, a 62.5 +mln dlr state-chartered stock association, by Standard Pacific, +which has 312.8 mln dlrs in assets. + The Bank Board said that the Federal Savings and Loan +Insurance Corp will make a cash contribution, provide capital +loss coverage and indemnify Standard Pacific against +undisclosed liabilities. + Reuter + + + + 9-MAR-1987 08:13:36.29 +strategic-metal +usasouth-africa + + + + + +A +f0808reute +d f AM-URANIUM 03-09 0135 + +U.S. TO ALLOW TEMPORARY IMPORTS OF S.A. URANIUM + WASHINGTON, March 9 - The Treasury Department said it would +temporarily permit imports of South African uranium ore and +oxide pending clarification of anti-apartheid sanctions laws +passed by Congress last fall. + The decision was announced late Friday. It applies, until +July 1, to uranium ore and oxide imported into the U.S. for +processing and re-export to third countries. + The Treasury said it took the action because it felt that +when Congress passed the comprehensive South African sanctions +bill last fall over President Reagan's veto it had not intended +to hurt U.S. industry. + In addition, the Treasury said it would permit U.S.-made +goods to be imported temporarily from South African +state-controlled organizations for repair or servicing. + + Reuter + + + + 9-MAR-1987 08:15:28.61 + +usairan + + + + + +V +f0812reute +u f BC-PAPER-SAYS-INDICTMENT 03-09 0115 + +PAPER SAYS INDICTMENTS IN IRAN CASE EXPECTED + NEW YORK, March 9 - The special prosecutor in the Iran arms +scandal is expected to bring indictments that could include +felony charges against senior Reagan administration officials, +the New York Times reported. + It quoted law enforcement officials with knowledge of the +investigation as saying special prosecutor Lawrence Walsh, who +is investigating the scandal, was focusing on three areas. + The paper identified these as conspiracy to defraud the +government, obstructing justice and making false statements to +the government. It said the prosecutor had not ruled out any +suspects, including current and former government officials. + MORE + + + + 9-MAR-1987 08:15:42.31 + +usauk + + +nyselse + + +F +f0814reute +r f BC-NYSE-RULE-COULD-AFFEC 03-09 0101 + +NYSE RULE COULD AFFECT TRADING IN LONDON + LONDON, March 9 - An existing New York Stock Exchange, +NYSE, rule might be used to limit the trading activities of its +members in London in stocks listed on both exchanges, sources +at the London Exchange said. + This could arise if the London Stock Exchange goes ahead +with plans to close its trading floor. + The London Exchange sources were commenting on press +reports that the NYSE would bar its members firms from trading +on the London Exchange in interlisted stocks during periods +when the NYSE was open. + The London exchange is seeking clarification. + London Exchange sources said the possibility of +restrictions on NYSE members appears to reflect a rule which +requires that exchanges recognised by the NYSE possess a +trading floor. + Last month, the London Exchange said in a statement that it +planned to close its floor in due course, apart from a floor +for traded options, because almost all business is now being +done by screen and telephone between brokerage offices. + This development stemmed from the Big Bang restructuring of +the market on October 27. The demise of the traditional Stock +Exchange floor has been widely expected, though no date has +been set as yet. + Market sources said a compromise over the NYSE rule could +well be reached, partly because the interests of U.S. +Securities dealers are not all identical. + Some of them could well start lobbying the NYSE, pointing +out, among other things, that the expansion of global trading +needs to be based on reciprocal arrangements. + NYSE brokerage firms which also trade on the London +Exchange would presumably be put at a disadvantage over +non-NYSE U.S. Firms, which have affiliates on the London +Exchange, market sources said. + REUTER + + + + 9-MAR-1987 08:16:35.37 +acq +usa + + + + + +F +f0816reute +u f BC-/PIEDMONT-<PIE>-AGREE 03-09 0113 + +PIEDMONT <PIE> AGREES TO USAIR <U> BUYOUT + NEW YORK, March 9 - USAir Group Inc said Piedmont Aviation +Inc has agreed to be acquired for 69 dlrs per share. + The company, in a newspaper advertisement, said it has +started a tender offer for all Piedmont shares at that price, +and the Piedmont board, with two directors absent, has +unanimously approved the bid. The offer and withdrawal rights +are to expire April Three unless extended, and the bid is to be +followed by a merger at the same price. + USAir said Piedmont has granted it an irrevocable option to +buy up to 3,491,030 new shares under certain circumstances. +Piedmont now has about 18.6 mln shares outstanding. + USAir said the tender is conditioned on receipt of enough +shares to give USAir at least a 50.1 pct interest in Piedmont +on a fully diluted basis and approval by the U.S. Department of +Transportation of a voting trust agreement permitting USAir to +buy and hold shares pending review of its application to gain +control of Piedmont. + The company said its merger agreement with Piedmont +provides that the offer is not to be amended without Piedmont's +prior written consent in any way that would be adverse to +Piedmont shareholders, but it said it could cut the number of +shares to be bought without Piedmont's consent. + USAir said it could reduce the number of Piedmont shares to +be purchased in the offer to no less than the minimum number +needed to cause the voting trust condition of the bid to be +satisfied. + In that case, it said if more than that minimum number of +shares were tendered, it would buy shares on a pro rata basis. + In February USAir had offered to pay 71 dlrs per share in +cash for 50 pct of Piedmont's stock and 1.55 to 1.90 USAir +shares for each remaining Piedmont share. + Last week, Carl C. Icahn-controlled Trans World Airlines +Inc <TWA> made a conditional offer to acquire USAir for 52 dlrs +per share, a bid that was rejected by the USAir board. + The Transportation Department on Friday rejected TWA's +application to acquire USAir on the grounds that the +application failed to comply with department regulations by +omitting necessary information. TWA said it would refile +today, providing the information needed. + On Friday TWA said it had already acquired four mln shares +or 15 pct of USAir. + Reuter + + + + 9-MAR-1987 08:21:01.71 + +usaussr + + + + + +V +f0832reute +r f BC-U.S.-AIDES-SEE-MOSCOW 03-09 0103 + +U.S. AIDES SEE MOSCOW AGREEING TO ARMS CHECK PACT + WASHINGTON, March 9 - Senior U.S. Arms control officials +said they were optimistic the United States and Soviet Union +could reach agreement on ways to verify a pact to eliminate +medium-range nuclear missiles in Europe. + Chief U.S. Arms control negotiator Max Kampelman said on +the NBC television network a fair pact would be hard to +negotiate, but, "We are determined to do it." + Assistant Secretary of Defence for international security +policy Richard Perle said he thought the two sides could agree +on a method to ensure each side was honouring a missile pact. + President Reagan said on Friday that Secretary of State +George Shultz would go to Moscow next month for talks on arms +control and a possible U.S.-Soviet summit meeting. + The decision to send Shultz to Moscow followed an +announcement by Soviet leader Mikhael Gorbachev that he was +willing to separate elimination of medium-range missiles in +Europe from his demand for curbs on U.S. Development of a +Strategic Defence Initiative (SDI) anti-missile system. + Kampelman said the United States and the Soviet Union both +had a general definition of so-called "intrusive" or on-site +inspection of a pact, but details would be tough to work out. + Reuter + + + + 9-MAR-1987 08:22:57.04 +crudenat-gas +usa + + + + + +Y F +f0839reute +d f BC-API-REPORTS-SHARP-FAL 03-09 0082 + +API REPORTS SHARP FALL IN DRILLINGS + WASHINGTON, March 9 - Estimated oil and gas drilling +completions in the United States dropped by almost 41 per cent +in 1986 from 1985, the American Petroleum Institute said. + API, an industry group, said that of the 42,387 wells +completed last year, a total of 19,741 were oil wells, 8,645 +were natural gas wells and 14,001 were dry holes. + In 1985, a total of 71,539 wells were drilled - 36,834 oil +wells, 13,036 gas wells and 21,669 dry holes. + reuter + + + + 9-MAR-1987 08:23:31.25 +instal-debt +uk + + + + + +RM +f0840reute +b f BC-U.K.-CREDIT-BUSINESS 03-09 0109 + +U.K. CREDIT BUSINESS FALLS IN JANUARY + LONDON, March 9 - New credit advanced by finance houses, +retailers, bank credit cards and other specialist providers of +credit slipped to 2.66 billion stg in January from 2.78 billion +in December - but remained close to the average level for +1986's fourth quarter, the Department of Trade and Industry +said. + Of the January total, 1.15 billion stg was advanced on bank +credit cards. + On a three-month basis, total advances in November to +January were 3.0 pct lower than in the previous three months. +Within this total, lending to consumers fell by 6.0 pct and +lending to businesses declined by 5.0 pct. + At end-January 1987, the total amount outstanding was 24.07 +billion stg, up from December's 23.77 billion stg and 3.0 pct +above the total three months earlier, the department said. + January saw a rise of 300 mln stg in amounts outstanding to +finance houses, other specialist credit grantors and retailers. + The department said advances on credit cards rose by 1.0 +pct between the latest two three-month periods. Retailers +advanced 3.0 pct less in the latest three months than in the +previous three months, it said. + REUTER + + + + 9-MAR-1987 08:27:14.06 +crudeship +brazil + + + + + +C G L M T +f0842reute +u f BC-BRAZILIAN-SEAFARERS' 03-09 0108 + +BRAZILIAN SEAFARERS' STRIKE DAMAGES OIL EXPORTS + SAO PAULO, March 9 - A strike by Brazil's 40,000 seafarers +who want pay rises of up to 180 pct may have cost the +state-owned oil company Petrobras 20 mln dlrs in lost export +orders, the company's commercial director Arthur de Carvalho +was quoted as saying in press reports. + More than 170 ships in Brazil, and about nine more in +foreign ports, have been halted by the strike, which began on +February 27. + Marines began blockading the ships on Friday after the +strike was ruled illegal, and some strikers are running short +of food, National Merchants Marine Union president Edson Areias +said. + Reuter + + + + 9-MAR-1987 08:38:11.68 + +usa + + + + + +F +f0875reute +u f BC-NEC-<NIPNY>-UNIT-INTR 03-09 0098 + +NEC <NIPNY> UNIT INTRODUCES NEW COMPUTERS + BOXBOROUGH, Mass., March 9 - NEC Corp's NEC Informational +Systems Inc said it introduced three advanced personal +computers that are fully compatible with the International +Business Machines Corp <IBM> PC AT. + The computers, the PowerMate 1, PowerMate 2 and +BusinessMate, are based on a chip made by Intel Corp <INTC>. + The PowerMate 1 and 2 are available immediately and sell +for 1,995 dlrs and 2,595 dlrs, respectively, the company said. + The BusinessMate, scheduled for April availability, will +sell for less than 6,000 dlrs, it said. + Reuter + + + + 9-MAR-1987 08:40:06.50 +tradegnpbopdlr +ukusawest-germanyjapan + +oecd + + + +A +f0886reute +d f BC-OECD-TRADE,-GROWTH-SE 03-09 0110 + +OECD TRADE, GROWTH SEEN SLOWING IN 1987 + LONDON, March 9 - The 24 nations of the Organisation for +Economic Cooperation and Development (OECD), hampered by +sluggish industrial output and trade, face slower economic +growth, and their joint balance of payments will swing into +deficit in 1987, the Economist Intelligence Unit (EIU ) said. + The EIU said in its World Trade Forecast it revised OECD +economic growth downwards to 2.5 pct this year, compared with a +2.8 pct growth forecast in December. + It said the new areas of weakness are West Germany and the +smaller European countries it influences, and Japan, hardest +hit by currency appreciation this year. + The independent research organisation cut its 1987 growth +rate forecasts for West Germany to 2.2 pct from 3.2 pct in +December and to 2.3 pct from three pct for Japan. + It said it expected the OECD to post a current account +deficit of some 13 billion dlrs in both 1987 and 1988, due in +large part to a 1.50 dlrs a barrel rise in 1987 oil prices. + It said the U.S. Current account deficit looked likely to +fall even more slowly than forecast, to 125 billion dlrs in +1987 and 115 billion in 1988 from 130 billion in 1986. + It said it expected West Germany to post a 31 billion dlr +payments surplus and Japan a 76 billion dlr surplus this year. + The EIU said it saw oil prices dropping to around 16.50 +dlrs a barrel by end-1987 and 15.50 dlrs in 1988 from about 18 +dlrs last year, as adherence to OPEC output policy becomes +increasingly ragged. + It said the dollar is poised to resume its decline in +foreign exchange markets, and will lose a further 13 pct on its +trade-weighted index this year and five pct in 1988 after last +year's 18.4 pct drop. The average mark/dollar rate is put at +1.80 marks this year and 1.70 in 1988 while the yen/dollar rate +is expected to break through the 150 yen barrier with an +average value of 150 yen in 1987 and 146 yen in 1988, it said. + "This is not a crash scenario but the dollar's steeper +angle of descent increases the risk of ending with a fireball +rather than a three-point landing," the EIU said. + "Talking will not stop the dollar's slide for long and the +February meeting (of finance ministers of the Group of Five and +Canada) produced scant promise of either a decisive shift to +more expansive policies in West Germany and Japan, or a tighter +U.S. Fsical policy," it said. + It said the key to the dollar's fortunes was the +willingness of Japanese institutions to buy U.S. Government +assets despite prospects of sustaining a currency loss. + "Thus far they have been willing," the EIC said, adding +that if Japan was deterred from buying U.S. bonds the dollar +would collapse. + To contain such a currency crisis, dollar interest rates +would have to soar, bringing recession and a Third World debt +crisis, it said. + On trade, the EIU said prospects for 1987 look +"increasingly sick." + Import growth, forecast in December at 4.5 pct, is now seen +slowing down to around 3.8 pct in 1987 with a recovery only to +4.2 pct in 1988, it said. + The weakness of the West German economy is the biggest +single factor, with import growth there expected to feature a +sluggish 3.5 pct growth in 1987 against the 6.5 pct forecast in +December, the EIU said. + On the export side, it said it saw weak demand in West +Germany affecting export prospects elsewhere in Europe, while +Japan's exports in 1987 would remain flat and sales by U.S. +Exporters would respond only marginally to a lower, more +competitively-priced dollar. + It said in most of Europe and in Japan, raw materials and +oil will cost less in domestic currency in 1987 than in 1986. + Reuter + + + + 9-MAR-1987 08:44:23.42 +interestmoney-fxdlr +usawest-germany +poehl + + + + +RM +f0895reute +u f BC-POEHL-SAYS-FURTHER-RA 03-09 0110 + +POEHL SAYS FURTHER RATE CUT POSSIBLE - SOURCES + By Allan Saunderson and Antonia Sharpe, Reuters + FRANKFURT, March 9 - Bundesbank president Karl Otto Poehl +told a closed investment symposium that West Germany could cut +leading interest rates again if the United States makes a +similar move, banking sources said. + The sources were reporting Poehl's remarks at a symposium +in Duesseldorf last week organised by Deutsche Bank Ag. Press +representatives were not invited. + The sources, speaking separately, said Poehl told about 200 +bankers in reply to questions that a cut in U.S. Interest rates +would give room for a matching measure in Germany. + "It was a definite hint at lower German interest rates," said +one banker who attended the symposium. + A Bundesbank spokesman said the central bank would have no +comment on the reported remarks, made at the private meeting. + But, according to a second source, who also declined to be +identified, Poehl's comments were seen by bankers present as a +direct pointer to further moves by the central bank to defend +German industry from an additional revaluation of the mark. + "He said if the Americans drop their interest rates then the +Bundesbank would also drop them. He said that quite clearly," +the second source said. + In reply to questions, Poehl also said the half-point cut +in the discount and Lombard rates on January 22 came after the +U.S. Had signalled it would be prepared to attend a meeting to +discuss the level of the dollar on condition Germany made such +a move in advance, the sources said. + Asked if American authorities could have been persuaded, by +cuts in German rates, to come to the bargaining table as early +as last September, one of the sources quoted Poehl as saying, +"No, they wouldn't have been. We checked that." + The Paris meeting of the Group of Six industrial nations +took place exactly one month after the German cut in rates. + Poehl emphasised in his comments the very close talks +between central banks before and after the G-6 meeting, saying +that financial markets had not fully realised the significance +of the Paris session and the U.S. Agreement to stem further +falls in the value of the dollar, the sources said. + For the first time all participants at the summit agreed +that a further fall in the dollar would be harmful for all +world economies, including the U.S., Poehl had said. + The sources said the tone of Poehl's comments boosted +growing sentiment that the dollar would be stabilised around +current levels by international central bank cooperation. + One source said Poehl's remarks also underlined the fact +that the Bundesbank was now more prepared to be accommodative +in monetary policy in order to prevent a further slowdown in +West Germany's economic growth. + Poehl and other Bundesbank officials have in the past +stressed that the German central bank had no direct +responsibility for growth and was solely concerned with +combatting inflation. + This led, for instance, to the introduction of a tighter +monetary stance from the beginning of December until the +half-point cut in rates in late January. + The sources quoted Poehl as saying that the current +overshooting of the German monetary target would not directly +respark inflation. The Bundesbank was not obliged to react +immediately whenever such overshooting occurs. + Latest data for central bank money stock, the Bundesbank's +main measure of money supply, showed the measure was growing at +7-1/2 pct in January, outside its three to six pct 1987 target. + Share prices rose in very active trading today, with +dealers reporting that Poehl's remarks, coupled with a bullish +outlook on stock prices from Deutsche at the same symposium, +brought in strong bargain hunting at current low levels. + REUTER + + + + 9-MAR-1987 08:44:51.73 + +ukcolombia + + + + + +F +f0897reute +u f BC-PLESSEY-TO-SELL-TELEP 03-09 0106 + +PLESSEY TO SELL TELEPHONE SYSTEM TO COLOMBIA + LONDON, March 9 - Plessey Co Plc <PLY.L> said it had won a +multi-million stg contract to supply Colombia with the System X +digital telephone exchange, the first major export contract for +the system. + Company sources said the deal was worth about 15 mln stg. +v A Plessey statement said the contract, awarded by the +National Telecommunications Authority of Colombia, was won +against competition from Telefon L M Ericsson AB, NEC Corp, +Fujitsu Ltd and Italtel of Italy. + "The award is regarded as a triumph for System X and a +breakthrough in the South American market," it said. + Plessey said the contract was one of the largest awarded by +Telecom Colombia for the past 10 years and involved supplying +13 telephone exchanges including 68,000 lines. + The award also includes transmission equipment for the +interconnection of the exchanges and the existing system. + The firm was actively marketing System X worldwide and +contract negotiations in certain countries had reached an +advanced stage, it said. + Plessey shares were down 5p at 235p, having gone +ex-dividend. + REUTER + + + + 9-MAR-1987 08:46:08.05 + +venezuela + + + + + +A +f0901reute +r f BC-VENEZUELA-REVEALS-DEB 03-09 0113 + +VENEZUELA REVEALS DEBT PAYMENT SCHEDULE DETAILS + CARACAS, March 8 - The 20.3 billion dlr debt rescheduling +accord Venezuela signed a week ago will reduce its payments +over the next three years by 64 pct, according to Finance +Ministry figures released this weekend. + A ministry statistical analysis said while the original +accord called for payments of 3.82 billion dlrs between 1987 +and 1989, the new agreement requires debt servicing of 1.35 +billion over the same period. In 1987, Venezuela will be +required to pay 250 mln dlrs instead of the 1.55 billion +originally agreed. Payments in 1988 were cut to 400 mln from +1.20 billion, and in 1989 to 700 mln from 1.11 billion. + The ministry's analysis said the reduction in debt +servicing during 1987-1989 amounts to an effective grace +period, something the Venezuelan negotiators sought from +creditor banks but were not granted. + Most of the rescheduling falls during 1994-1998, when 53.3 +pct, or some 11.25 billion dlrs, must be paid. Under the +February 27 accord, Venezuela will repay 20.3 billion dlrs of +public sector debt over 14 years at 7/8 of a percentage point +over London interbank offered rates (Libor). + This compares with the February 1986 accord which called +for a 12-year term and interest of 1-1/8 point over Libor. + REUTER + + + + 9-MAR-1987 08:48:26.10 +acq +usa + + + + + +F +f0909reute +r f BC-SOSNOFF-STARTS-BID-FO 03-09 0113 + +SOSNOFF STARTS BID FOR CAESARS WORLD <CAW> + NEW YORK, March 9 - <MTS Acquisition Corp>, a company +formed by Martin T. Sosnoff, said it has started a tender offer +for all shares of Caesars World Inc at 28 dlrs each. + In a newspaper advertisement, MTS said the offer and +withdrawal rights expire April Three unless extended. + Sosnoff, a New York investor, already owns about four mln +of Caesars' 30.3 mln shares outstanding, or about 13.3 pct, and +is Caesars' largest shareholder. Caesars owns casino hotels in +Nevada and honeymoon resorts in Pennsylvania's Pocono +Mountains. It also controls Caesars New Jersey Inc <CJN>, +which owns an Atlantic City, N.J., casino hotel. + For the second quarter ended January 31, Caesars World +earned 12.6 mln dlrs on revenues of 190.4 mln dlrs, up from +earnings of 7,500,000 dlrs and revenues of 163.8 mln dlrs a +year before. For all of fiscal 1986, the company earned 41.0 +mln dlrs on revenues of 694.4 mln dlrs. + MTS said the offer is conditioned on receipt of at least +enough shares to give Sosnoff a majority interest on a fully +diluted basis, the arrangement of sufficient financing to buy +all Caesars shares not already owned and pay related costs and +approval by the New Jersey Casino control Commission and the +NEvada Gaming Commission and State Gaming Control Board. + MTS said Marine Midland Banks Inc <MM> has committed to +lend it 100 mln dlrs for the acquisition and use its best +efforts to syndicate another 400 mln dlrs in senior financing +for the transaction. + It said its financial adviser, PaineWebber Group Inc <PWJ>, +has stated in writing that subject to market conditions, it is +highly confident that it can arrange commitments for up to 475 +mln dlrs in "mezzanine" financing. + MTS said it does not expect problems in obtaining New +Jersey and Nevada regulatory approval for the acquisition, +since ownership in a Caesars stake has already been cleared. + In June 1986, Sosnoff requested a seat on the Caesars World +board, a request that has not yet been granted. In September +1986, Sosnoff, who is chairman of <Atalanta/Sosnoff Capital +Corp>, filed for clearance under U.S. antitrust laws to raise +his interest in Caesars World to 25 pct. + Sosnoff said, in a letter to Caesars World chairman and +chief executive officer Henry Gluck, that "The decision to go +directly to the shareholders was made at the urging of may +financial and legal advisors, who repeatedly stressed to me the +lack of responsiveness of the management in the past." + Sosnoff, who said he has made numerous efforts to express +his views to management on ways of maximizing shareholder +values, said Caesars twicce refused his request for a board +seat. "My advisers felt that, had I given you advance notice, +you would have used the time to throw up obstacles to my offer +rather than giving it serious consideration," he said. + Sosnoff said he hopes that Caesars World management will be +willing to negotiate an acquisition agreement with him. + "As I have indicated publicly in the past, I believe +operating management of the company has performed well and that +appropriate consideration should be given to a significant +equity interest for them in the company following the +acquisition," Sosnoff said in the letter to Gluck. + MTS said Sosnoff has asked the company to fix March 27 as +the record date for the determination of shareholders entitled +to authorize action without a meeting -- including the election +or removal of directors. + Reuter + + + + 9-MAR-1987 08:51:35.60 +gnpjobscpibopdfl +netherlands + + + + + +RM +f0913reute +r f BC-DUTCH-PLANNING-AGENCY 03-09 0104 + +DUTCH PLANNING AGENCY FORECASTS LOWER GROWTH + THE HAGUE, March 9 - Dutch economic growth is slowing as a +firming guilder cuts competitiveness abroad and industries +reduce the pace of investment, the Dutch official planning +agency CPB said. + The Centraal Planbureau, publishing its 1987 economic +outlook, said Dutch Net National Income (NNI) was expected to +grow by one pct this year, down from two pct growth recorded in +1986 and 2.5 pct in 1985 and 1984. + Dutch Gross National Product is expected to rise to 432.20 +billion guilders in 1987 in constant prices, a two pct increase +from last year's 423.95 billion. + The CPB, forecasting an 8.5 pct increase in the value of +the guilder on a trade-weighted basis compared with 10.0 pct +last year, said the dollar was expected to trade at an average +of 2.0 guilders in 1987 compared with 2.45 guilders in 1986. + "The higher guilder is causing a substantial fall in unit +labour costs abroad, when measured in guilder terms, while +these are rising slightly in the Netherlands," the CPB said. + More of economic growth now depended on domestic +consumption, the CPB said, but noting that higher margins set +by domestic producers and importers mitigated the effect on +purchasing power of lower import costs and deflation. + Consumer prices were set to fall by 1.5 pct this year, the +CPB said. Inflation was zero last year. + Gross investment in industry was expected to grow by five +pct this year, a slowdown compared with 11.5 pct growth last +year, the CPB said. + Exchange rate and oil price fluctuations will continue to +condition the Dutch economy in the future as it has in recent +years, the CPB said, noting a continued depressing impact of +these factors on Dutch competitiveness. + In addition, it noted a slight rise in taxation and social +security costs to employers. + The CPB, forecasting a rise in the budget deficit to 7.2 +pct of Net National Income in 1987 from 6.3 pct last year, +urged the government to cut expenditure further to bring down +the deficit and reduce tax and social security payments in +future. + Dutch government revenue is being depressed further by +falling income from natural gas sales in 1987, the CPB said. + It said unemployment was expected to fall to 675,000 this +year from 710,000 last year. + While the two pct GDP growth forecast set by the CPB is +within its latest forecast, issued last month, of 1.5 to two +pct growth, the figure is well above recent market estimates. + Dutch merchant bank Pierson, Heldring en Pierson said in +its February economic outlook that GDP growth at constant +prices was expected to be 1.1 pct this year and market analysts +had expected the CPB's final forecast to be below its own +latest estimate. + "It is too early to comment because I haven't seen the whole +document yet, but it would seem we are more pessimistic in some +of our estimates," a Pierson economist said. + The CPB forecast 2.5 pct export growth in volume terms in +1987, after four pct growth last year. Excluding energy +exports, the 1987 figure would be two pct, it said. + Imports were set to rise by 4.5 pct this year compared with +four pct in 1986 in volume terms, the CPB said. + The balance of payments would see a sharp decline in the +surplus, to six billion guilders in 1987 compared with 12.1 +billion last year, the CPB forecast. + REUTER + + + + 9-MAR-1987 08:51:49.54 +acq +usa + + + + + +F +f0914reute +b f BC-TRUMP-MAKES-BID-FOR-C 03-09 0088 + +TRUMP MAKES BID FOR CONTROL OF RESORTS <RTB> + NEW YORK, March 9 - Casino owner and real estate developer +Donald Trump has offered to acquire all Class B common shares +of Resorts International Inc, a spokesman for Trump said. + The estate of late Resorts chairman James M. Crosby owns +340,783 of the 752,297 Class B shares. + Resorts also has about 6,432,000 Class A common shares +outstanding. Each Class B share has 100 times the voting power +of a Class A share, giving the Class B stock about 93 pct of +Resorts' voting power. + More + + + + 9-MAR-1987 08:54:12.02 +earn +usa + + + + + +F +f0922reute +u f BC-IOMEGA-<IOMG>-SETS-MA 03-09 0096 + +IOMEGA <IOMG> SETS MANAGEMENT, LABOR LAYOFFS + ROY, Utah, March 9 - Iomega Corp said it has laid off over +a quarter of its professional and management staff and nearly +half of its direct labor force as part of a restructuring and +downsizing of its business. + The company also said it will receive a qualified opinion +from the auditors of it 1986 financial statement subject to the +outcome of two suits. The company is a defendant in a +consolidated class action law suit which seeks damages in an +unspecified amount and is also a defendant in a related +shareholder action. + Iomega said the auditors state in their opinion letter that +both actions are in the early stages of discovery and the +likely outcome can not be determined at this time. + The company said a corporate wide reduction of its +professional, management and indirect labor will result in the +permanent elimination of 183 positions in all functional areas +of the company's business. This represents over 25 pct of +professional, management and indirect employees, it added. + In addition, Iomega announced layoff of about 182 +employees, principally from its manufacturing direct labor +force. Those affected represent about 46 pct of direct labor. + Commenting on the layoffs, Iomega said those from among the +direct labor force affects personnel building the Alpha Eight +Inch Disk Drive and Bernoulli Boxes. + "This action is required as we bring our finished goods +inventory and inventory in our distribution channels down to +acceptable levels," it explained. + The company stated this layoff does not affect the +production of its new 5-1/4 inch Beta 20 product which is +currently being built to a backlog of orders. + Reuter + + + + 9-MAR-1987 08:58:22.38 + +usa + + + + + +F +f0942reute +d f BC-TECHNOLOGY/NEW-ERA-FO 03-09 0109 + +TECHNOLOGY/NEW ERA FOR INFORMATION HANDLING + By Lawrence Edelman, Reuters + NEW YORK, March 9 - Ground-breaking new systems for storing +and retrieving information are ushering in a new era for +computer companies and computer users. + Within the past few weeks, International Business Machines +Corp <IBM>, Eastman Kodak Co <EK> and others have launched +products that radically increase the amount of data that can be +catalogued and shelved in computerized libraries. + "This flurry of new technology could yield systems that +handle a multimedia blitz of data," said Ian Warhaftig, a +senior analyst with International Data Corp, Framingham, Mass. + "We're developing new systems because our customers are +asking for them," Peter Giles, vice president and general +manager of Kodak's mass memory division, said in a recent +interview. + This demand is expected to soar in coming years. While +estimates vary, industry analysts project that providing +products and services geared for information storage and +retrieval could become a 20 billion dlr a year business by +1995. + A wide range of technologies will be needed to meet the +varying requirements of users. + For example, a large credit verification service would want +a system from which it could quickly retrieve credit data and +relay it to its clients. A law firm, however, may need a +computerized law library in which capacity, rather than speed, +is the key feature. For architects and engineers, the ability +to store photographs, sketches and other graphics would be +crucial. + Regardless of the specific application, the trend is toward +converting information - documents, video or film or even sound +recordings - into to the digital language of zeros and ones +understood by computers. + Saving space is the key goal in digitizing data for +storage. An optical disk the size of a standard compact disk +can store 550 megabytes of data, or about 250,000 pages of +typewritten text. + For this reason, the compact disk read-only memory, or +CD-ROM, is already a popular data storage media. Last week, +Microsoft introduced Microsoft Bookshelf, a 300 dlr program +that contains, on a single CD-ROM disk, a dictionary, +thesaurus, national ZIP code directory, Bartlett's Familiar +Quotations, the World Almanac and other reference works. + Scores of such products are already on the market, but most +are specialty items, such as Lotus Development Corp's <LOTS> +CD-ROM data base of stock information for financial analysts +and investors. "Microsoft Bookshelf is important because it +marks the arrival of CD-ROM packages for the general public," +said Ian Warhaftig of International Data Corp. + One drawback of the CD-ROM, which uses a laser to record +and read data, is that that it requires a special player. +CD-ROM players for the retail market will appear later this +year. + Moreover, IDC's Warhaftig said CD-ROM's will be integrated +with personal computers. + "Eventually, CD-ROM's will fit right inside the PC box," he +said. "Imagine the advantage of having a spelling checker and +thesaurus at your fingertips when you're writing with a word +processing program." + But CD-ROM's are just the beginning. Also last week, Kodak +unveiled several systems that use 12-inch optical disks. The +largest Kodak system uses a jukebox-like cabinet to hold up to +150 optical disks from which data can be retrieved in a matter +of seconds. + Kodak also announced a 14-inch optical disk with 6.8 +gigabytes of memory, five times the memory of a CD-ROM. The +Kodak disk, which will not be available until the middle of +1988, is designed for users who need quick access to very large +amounts of data, said Kodak's Giles. + Meanwhile, N.V. Philips <PGLO.AS>, the Dutch electronics +giant, is preparing to take optical disk technology a step +further with the first disk that can combine text, video and +sound. Philips said the system, called Called CD-Interactive, +will be ready next year. It will include a new kind of CD-ROM +player that can hook up with a television set and stereo. + Additional breakthroughs are expected as the next +generation of computer memory chips are introduced. Last month +IBM said it has made a four-megabyte chip, capable of storing +more data than eight CD-ROM's. Meantime, <Nippon Telegraph and +Telephone> of Japan said it has built a 16-megabyte chip. + Analysts say commercial versions of these chips are several +years away, though some suspect that IBM may start volume +production of its four-megabyte chip sometime this year. + Such chips will enable computer makers to build computers +with immense memory capacities. + + Reuter + + + + 9-MAR-1987 09:01:34.94 +ship +brazil + + + + + +C G L M T +f0951reute +u f BC-BRAZIL-SEAMEN-CONTINU 03-09 0114 + +BRAZIL SEAMEN CONTINUE STRIKE DESPITE COURT + RIO DE JANEIRO, March 9 - Hundreds of marines were on alert +at 11 key Brazilian ports after 40,000 seamen decided to remain +on indefinite strike, even after the Higher Labour Court +Saturday ruled it illegal, union leaders said. + The halt, the first national strike by seamen in 25 years, +started on February 27, and union leaders said they would not +return to work unless they got a 275 pct pay rise. Shipowners +have offered a 100 per cent raise, which the seamen rejected. + "We have nothing to lose. If they want to lay off the +workers, fine, but we are determined to carry on with our +protest until the end," a union leader said. + more + He said they had decided in a meeting that if the marines +take over the ships, the seamen would abandon the vessels and +let the marines handle the situation by themselves. + A spokesman for the Rio de Janeiro Port said the order to +send marines to take over the ports was given by Navy Minister +Henrique Saboya on grounds that ports are areas of national +security. But he said there were no incidents. The strike has +cut exports and imports and made an estimated 160 ships idle. + Petrol station owners in four states also continued their +shutdown and there were fears that the combination of the two +stoppages could lead to a serious fuel shortage. + Reuter + + + + 9-MAR-1987 09:06:39.94 + +usa + + + + + +F A +f0971reute +r f BC-BANKING-TRADE-GROUP-S 03-09 0098 + +BANKING TRADE GROUP SAYS BANK PROFITS DOWN + WASHINGTON, March 9 - The American Bankers Association said +the profitability of the nation's commercial banks declined by +12 pct during the first three quarters of 1986. + During the first nine months of last year, the industry's +annualized rate of return on assets dropped to 0.68 pct from +0.77 pct in the same period in 1985, the ABA said. Return on +equity fell to 10.8 pct from 12.3 pct the previous year. + Despite the decline in profits, the ABA said banks' capital +grew boosting the industry's capital ratio to 6.4 pct from 6.3 +pct. + The number and size of banks losing money during the period +increased significantly, the ABA said. + During the first nine months of 1986, 17.5 pct of banks, +holding 9.6 pct of banking assets, were unprofitable, the group +said. That compares with 13 pct of banks, holding 8.8 pct of +assets, during the same period in 1985, it said. + The industry's provisions for loan losses increased to 0.73 +pct of assets during the period, up from 0.59 pct of assets +during the same period in 1985, the group said. + Reuter + + + + 9-MAR-1987 09:08:09.30 + +usa + + + + + +F +f0975reute +r f BC-PAPER-INSTITUTE-SEES 03-09 0074 + +PAPER INSTITUTE SEES STRONG PAPER MARKET IN '87 + NEW YORK, March 9 - The American Paper Institute said the +industry is headed for another year of record volume in 1987, +with linerboard particularly strong. + "A pro-growth trade policy, continued attention to currency +management, a fairly low interest rate climate and no major tax +increases are the essential ingredients in this outlook," Red +Cavaney, American Paper Institute president said. + Cavaney said that so far this year the industry's +performance mimics last year's strength. + Last year, he said, paper and paperboard production hit a +record 71 mln tons, 5.9 pct above 1985's 67 mln tons, while +industry after-tax profits in 1986 exceeded 1985 profits. + Cavaney said that inventories will play a major role in +this year's performance. + "Inventories, which are generally low, are a positive +factor in the industry's outlook this year," he said, citing +market pulp stocks, which are currently at 21 days supply, at +the low end of the industry's long term average. + Cavaney added that as a result of slimmer inventories in +1986 and in the early part of this year, shipments for 1987 as +a whole will be higher than last year, even if demand slackens. + Cavaney said, however, he expects demand this year to be +strong, spurred by consumer spending. + The benefits of tax reform on individual after-tax income +and consumer goods companies' cash flow, he said, will increase +demand for both communications paper and packaging this year. + In addition, Cavaney said low mortgage rates should support +high levels of housing starts in 1987, increasing demand for +many kinds of packaged goods. + Inventory building should help demand for cartons and +corrugated containers this year, he added. + Cavaney said he expects exports to remain fairly high in +1987, as well, as a result of the recent declines in the dollar +against major world currencies. + But more importantly, he said, an improved balance of trade +in 1987 from the lower dollar would induce increased industrial +activity at home and thus higher packaging demand. + Cavaney said increased competitiveness, caused by lower +costs, higher productivity and improved efficiency would also +contribute to a strong showing from the industry this year. + Cavaney said, however, that the Tax Reform Act of 1986 +could have a negative impact on the industry this year. + "For manufacturers, the removal of the investment tax +credit creates an impediment to future investment," he said. + Also, he said API estimates the industry will lose three +billion dlrs in cash flow over a five year period as a result +of reforms. + "Adjustments to this loss will require time and careful +evaluation and will adversely affect the capital spending +decisions of individual companies," Cavaney said. + Reuter + + + + 9-MAR-1987 09:11:10.46 +money-fxgnp +belgiumwest-germany + +ec + + + +RM +f0984reute +r f BC-BONN-SERIOUS-ABOUT-CU 03-09 0090 + +BONN SERIOUS ABOUT CURRENCY PACT, SAYS TIETMEYER + BRUSSELS, March 9 - West Germany takes "very seriously" the +recent undertaking by major industrial countries to promote +exchange rate stability around current levels, Finance Ministry +State Secretary Hans Tietmeyer said. + Talking to journalists before a meeting of European +Community Economy and Finance Ministers here, Tietmeyer +declined to say whether the February 22 Paris accord by the +Group of Five countries plus Canada included secret agreements +for stabilising currencies. + But he noted the official communique said the participants +agreed to cooperate closely to foster stability of exchange +rates around current levels. "We're taking this sentence very +seriously," he said. + Tietmeyer remarked that the dollar had hardly moved against +the mark since the meeting. + He said a slowdown in West German economic growth had been +caused by sharp exchange rate swings and that the Paris +agreement should help in this respect. + Economics Ministry State Secretary Otto Schlecht said the +Bonn government saw no current need for measures to bolster the +economy but was paying close attention to the slower growth and +had not ruled out "appropriate and timely" action if necessary. + Schlecht and Tietmeyer were speaking ahead of a discussion +by the EC ministers of the latest EC Commission report on the +economic situation in the 12-nation bloc. + The Commission has sharply revised down expected German +gross national product growth this year to two pct from 3.2 pct +predicted last autumn and says Bonn has the most room of any EC +country to stimulate economic activity. + Schlecht said the upturn in West Germany's economy slowed +in the fourth quarter of last year and the first quarter of +1987. But he said there was no cumulative downwards trend in +view that would make quick remedial action necessary. + He said a number of favourable indicators such as high +level of investment and a good climate for consumption meant a +recovery could be expected, while exports would pick up +slightly during the course of the year. + REUTER + + + + 9-MAR-1987 09:11:41.38 + +saudi-arabia + + + + + +RM +f0986reute +r f BC-SAUDI-FRENCH-BANK-TO 03-09 0109 + +SAUDI-FRENCH BANK TO DOUBLE PAID-UP CAPITAL + JEDDAH, March 9 - <Al Bank Al Saudi Al Fransi>, also known +as Saudi-French, will double paid-up capital to 400 mln riyals +from 200 mln by converting reserves into equity, bank officials +said. + Jeddah-based Saudi-French, 40 pct owned by Banque Indosuez +and 60 pct by the Saudi public, will sign a technical services +agreement with Indosuez in Riyadh on Tuesday for management of +the bank over the next five years, they said. + The officials said the increase in paid-up capital, +doubling the number of shares held by shareholders, will add +depth to the market and extend trading to more investors. + REUTER + + + + 9-MAR-1987 09:12:08.15 + +usa + + + + + +F +f0988reute +u f BC-COMPAQ-COMPUTER-<CPQ> 03-09 0031 + +COMPAQ COMPUTER <CPQ> HAS NEW DESKTOP COMPUTER + HOUSTON, March 9 - Compaq Computer Corp said it has +introduced a new 12 megahertz desktop personal computer called +the Compaq Deskpro 286R. + More + + + + 9-MAR-1987 09:12:30.97 +coffee +uganda + +ico-coffee + + + +T C +f0990reute +u f BC-UGANDA-DISAPPOINTED-B 03-09 0129 + +UGANDA DISAPPOINTED BY COFFEE TALKS FAILURE + KAMPALA, March 9 - Uganda, Africa's second largest coffee +producer, was disappointed by the stalemate in recent coffee +talks in London, the chairman of the state-run Coffee Marketing +Board, CMB, said. + "This has not been good for coffee producers, more so in a +situation where the prices dropped by 200 pounds per tonne of +robusta coffee," J. Makumbi said when he returned from London on +Friday. + Producers and consumers failed to agree on a quota formula +to share the world's coffee production during International +Coffee Organisation, ICO, talks that ended last week. + Makumbi blamed the failure to set quotas, which were +suspended in Feburary last year, on Indonesian demands that its +quota be increased dramatically. + Uganda -- which earns about 400 mln dlrs annually from +coffee exports, over 95 pct of its foreign exchange earnings -- +had sought to raise its ICO quota to 3.0 mln from 2.45 mln +60-kilo bags, according to sources close to the CMB. + The CMB has estimated that production will rise 20 to 25 +pct in the current 1986/87 October-September season to over +three mln bags. + For several years Uganda had been unable to meet its ICO +export quota as rebel activity disrupted the coffee industry. + The Ugandan government depends on coffee export duties for +about 60 pct of its sales tax revenue and the industry employs +over half of salaried manpower. + In Dar es Salaam, Tanzania's Agriculture and Livestock +Development Minister Paul Bomani said today Third World +countries would suffer from the failure of the London coffee +talks. + "It is only the middlemen who will benefit, he said. + Bomani called on the ICO to convene another meeting within +two months, saying, "Once tempers have cooled and delegations +have had time to report back to their headquarters, common +sense will prevail." + Reuter + + + + 9-MAR-1987 09:17:04.78 +acq + + + + + + +F +f0001reute +f f BC-Chrysler-to-take-over 03-09 0012 + +****** Chrysler to take over Renault stake in American Motors, says Renault +Blah blah blah. + + + + + + 9-MAR-1987 09:17:44.88 +meal-feed +usahungary + + + + + +C G +f0005reute +r f BC-ADDITIONAL-CCC-CREDIT 03-09 0127 + +ADDITIONAL CCC CREDIT GUARANTEES FOR HUNGARY + WASHINGTON, March 9 - The Commodity Credit Corporation, +CCC, has authorized an additional 8.0 mln dlrs in credit +guarantees for sales of vegetable protein meals to Hungary for +fiscal year 1987, the U.S. Agriculture Department said. + The additional guarantees increase the vegetable protein +meal credit line to 16.0 mln dlrs and increases the cumulative +fiscal year 1987 program for agricultural products to 23.0 mln +dlrs from 15.0 mln, it said. + The department also announced an extension of the export +period from September 30, 1987, to December 31 for sales of +vegetable protein meals. + To be eligible for the credit guarantees all sales must be +registered before export but not later than September 30. + Reuter + + + + 9-MAR-1987 09:20:38.92 +earn + + + + + + +F +f0010reute +b f BC-******southern-co-to 03-09 0012 + +******SOUTHERN CO TO TAKE 226 MLN DLR CHARGE ON PROJECTED VOGTLE COST RISE +Blah blah blah. + + + + + + 9-MAR-1987 09:21:19.67 +acq +usa + + + + + +F +f0014reute +r f BC-APPLIED-CIRCUIT<ACRT> 03-09 0091 + +APPLIED CIRCUIT<ACRT> SELLS ELECTRONICS BUSINESS + ANAHEIM, Calif., March 9 - Applied Circuit Technology Inc +(ACT) said it has agreed in principal to sell its primary +computer electronics business to the <Sanpao Group> of San +Francisco. + ACT said it has not disclosed the deal's terms, but added +that 50 pct of the sale price is in cash, with the remainder to +be paid over a two year period. + The deal is expected to close on March 31, ACT said. + ACT said it made the move to concentrate resources on its +pharmaceuticals subsidiaries. + Reuter + + + + 9-MAR-1987 09:24:32.21 +acq +usa + + + + + +F +f0030reute +u f BC-USAIR-<U>-ACQUIRES-9. 03-09 0107 + +USAIR <U> ACQUIRES 9.9 PCT OF PIEDMONT <PIE> + WASHINGTON, D.C., March 9 - USAir Group Inc said it has +acquired 2,292,599 Piedmont Aviation Inc shares, about 9.9 pct +on a fully diluted basis, from Norfolk Southern Corp <NSC>. + The acquisition of Piedmont by USAir has been approved by +the directors of both companies. + USAir said it has been advised by Norfolk Southern that the +company supports the proposed merger and intends to tender all +of its remaining 1,477,829 Piedmont common shares in response +to USAir's tender offer which began today. This total includes +shares issuable upon conversion of Piedmont preferred, USAir +noted. + USAir said Piedmont has about 23.1 mln common shares on a +fully diluted basis, adding its offer is conditioned on the +tender of at least 9,309,394 shares, representing 40.2 pct of +the oustanding shares on a diluted basis. + USAir said the 3,491,030 new shares it has an option to buy +represent 18.5 pct of Piedmont's currently outstanding shares. + Reuter + + + + 9-MAR-1987 09:25:10.00 +coffee +brazil + + + + + +T C +f0031reute +r f BC-BRAZILIAN-COFFEE-RAIN 03-09 0059 + +BRAZILIAN COFFEE RAINFALL + SAO PAULO, MARCH 9 - THE FOLLOWING RAINFALL WAS RECORDED IN +THE AREAS OVER PAST 72 HOURS + PARANA STATE: UMUARAMA NIL, PARANAVAI 1.5 MILLIMETRES, +LONDRINA NIL, MARINGA NIL. + SAO PAULO STATE: PRESIDENTE PRUDENTE O.6 MM, VOTUPORANGA +12.0 MM, FRANCA 28.0 MM, CATANDUVA 10.0 MM, SAO CARLOS NIL, SAO +SIMAO NIL. REUTER11:43/VB + + + + 9-MAR-1987 09:25:41.63 +acq + + + + + + +F +f0033reute +f f BC-******GENCORP-TO-SELL 03-09 0011 + +******GENCORP TO SELL LOS ANGELES TELEVISION STATION TO WALT DISNEY CO +Blah blah blah. + + + + + + 9-MAR-1987 09:26:28.51 +acq +usa + + + + + +F +f0035reute +d f BC-NATIONWIDE-CELLULAR-< 03-09 0073 + +NATIONWIDE CELLULAR <NCEL> COMPLETES PURCHASE + VALLEY STREAM, N.Y., March 9 - Nationwide Cellular Service +Inc said it has completed the previously-announced acquisition +of privately-held Nova Cellular Co, a Chicago reseller of +mobile telephone service with 1,800 subscribers, for about +65,000 common shares. + Nova Cellular has an accumulated deficit of about 650,000 +dlrs and had revenues of about 2,600,000 dlrs for 1986, it +said. + Reuter + + + + 9-MAR-1987 09:27:57.44 +interest +uk + + + + + +C G T M +f0038reute +u f BC-NATIONAL-WESTMINSTER 03-09 0092 + +NATIONAL WESTMINSTER BANK CUTS BASE RATE + LONDON, March 9 - National Westminster Bank Plc said it has +cut its base lending rate 0.5 percentage points to 10.5 pct +today. + National Westminster said it was responding to general +easing in money market rates. + Its move followed a signal from the Bank of England earlier +this afternoon that it would endorse a half point cut in the +base rate, a surprise move following its strong signals last +week that such a move would be premature. + However, since then the pound has continued to gain +strongly. + Reuter + + + + 9-MAR-1987 09:30:35.65 +money-fxinterest +uk + + + + + +RM +f0039reute +b f BC-U.K.-MONEY-MARKET-GIV 03-09 0096 + +U.K. MONEY MARKET GIVEN FURTHER HELP AT NEW RATES + LONDON, March 9 - The Bank of England said it provided the +market with further assistance during the afternoon, buying +bills worth 166 mln stg at the lower rates introduced this +morning. + It bought 45 mln stg of local authority bills plus 27 mln +stg of bank bills in band one at 10-3/8 pct together with 94 +mln stg of band two bank bills at 10-5/16 pct. + The bank also revised its estimate of the market shortage +up to 300 mln stg from 250 mln this morning. It has given total +assistance of 213 mln stg today. + REUTER + + + + 9-MAR-1987 09:30:53.98 + +usa + + +cbtcme + + +C +f0040reute +u f BC-CBT,-CME-HEADS-TO-ADD 03-09 0125 + +CBT, CME HEADS TO ADDRESS CFTC COMMITTEE + WASHINGTON, March 9 - The heads of the Chicago Board of +Trade, CBT, and the Chicago Mercantile Exchange, CME, are to +address a meeting of the Commodity Futures Trading Commission's +financial products advisory committee March 11 in Chicago, CFTC +said. + CBT Chairman Karsten Mahlmann will present the objectives +and views of the CBT's ad hoc committee on off exchange trading +issues, CFTC said. + CME President William Brodsky is set to discuss current +issues involving equity index markets, including factors +affecting price volatility, changes in settlement procedures, +margin changes and price limits. + The CFTC committee, headed by Commissioner Robert Davis, +examines financial futures market issues. + Reuter + + + + 9-MAR-1987 09:31:21.09 +ship +hong-kongjapan + + + + + +F +f0043reute +r f BC-HUTCHISON-UNIT-BUYS-C 03-09 0075 + +HUTCHISON UNIT BUYS CONTAINER CRANES FROM JAPAN + HONG KONG, March 9 - Container port operator, <Hong Kong +International Terminals Ltd>, a 89 pct held unit of Hutchison +Whampoa Ltd <HWHH.HK>, said it has placed a 164 mln H.K. Dlr +order for seven quayside container cranes of 800 tons each with +Japan's Mitsui Engineering and Shipbuilding Co Ltd <MSET.T> for +May 1988 to August 1989 delivery. + Hong Kong International Terminals operates 32 cranes. + REUTER + + + + 9-MAR-1987 09:32:01.67 +ship +turkey + + + + + +C G T M +f0046reute +d f BC-BOSPHORUS-SHIPPING-MO 03-09 0111 + +BOSPHORUS SHIPPING MOVES, ISTANBUL OFFICES CLOSE + ISTANBUL, March 9 - Istanbul remained at a virtual +standstill today under snow up to a meter deep but shipping was +moving through the narrow Bosphorus waterway linking the Sea of +Marmara and the Black Sea, officials said. + The authorities ordered government offices closed until +Wednesday. Many banks, businesses and schools stayed shut as +workers struggled to keep main roads and supply lines open in +this city of 6.5 mln people. + The second blizzard to hit Istanbul in a week stopped +yesterday afternoon and the international airport reopened +today after a two-day closure. It was also shut earlier last +week. + Reuter + + + + 9-MAR-1987 09:32:40.79 +crude +ecuador + +opec + + + +V +f0048reute +u f BC-ECUADOR-TO-EXPORT-NO 03-09 0113 + +ECUADOR TO EXPORT NO OIL FOR 4 MONTHS, OFFICIAL + By WALKER SIMON, Reuters + QUITO, March 9 - The suspension of Ecuador's crude oil +shipments after an earthquake cut an oil pipeline will last at +least four months, a senior Energy Ministry official said. + The official said Ecuador could resume exports after +repairing a 40 km section of the 510 km pipeline, which links +jungle oil fields at Lago Agrio to Balao on the Pacific coast. +It would take about 100 mln U.S. Dlrs to repair the pipeline, +the official, who did not want to be named, told Reuters. +Ecuador had enough oil to meet domestic demand for about 35 +days and would have to import crude to supplement stocks. + The earthquake last Thursday night registered six on the +12-point international Mercalli scale. The damage to the +pipeline was a severe economic blow to Ecuador, where oil +accounts for up to two-thirds of total exports and as much as +60 pct of government revenues. + Financially pressed Ecuador, a member of the Organisation +of Petroleum Exporting Countries (OPEC), was recently pumping +about 260,000 barrels per day (bpd) of crude, about 50,000 bpd +above the output quota assigned by the cartel, another Energy +Ministry spokesman said. Last year, it exported an average of +173,500 bpd, according to the central bank. + However, Ecuador might build an emergency 25 km pipeline, +costing 15 to 20 mln dlrs, to hook up with a Colombian +pipeline, the first official said. He estimated it could take +about 60 days to build. + Ecuador, squeezed by the slide in world oil prices in 1986, +had only 138 mln dlrs in net international reserves at the end +of January, about equal to one month's imports. + It suspended interest payments in January on 5.4 billion +dlrs owed to about 400 private foreign banks. The country's +total foreign debt is 8.16 billion dlrs, the eighth largest in +Latin America. + In Caracas, President Jaime Lusinchi said Venezuela would +loan five mln barrels of crude to Ecuador over the next three +months to make up for losses from damage to the pipeline. + Ecuador asked for the loan to guarantee domestic supplies +and would ship an equivalent volume back to Venezuela in +repayment in May, Lusinchi said. + A commission headed by Venezuelan Investment Fund Minister +Hector Hurtado and including representatives from the interior +and defence ministries and the state oil company Petroleos de +Venezuela will travel to Ecuador Tuesday to evaluate and +co-ordinate an emergency relief program, he said. + REUTER + + + + 9-MAR-1987 09:33:35.86 +money-supply +france + + + + + +RM +f0056reute +f f BC-FRENCH-JAN-M-3-MONEY 03-09 0015 + +******FRENCH JAN M-3 MONEY SUPPLY ROSE PROV ADJUSTED ONE PCT (O.7 PCT FALL IN DEC) - OFFICIAL. +Blah blah blah. + + + + + + 9-MAR-1987 09:35:55.99 + +greeceitaly + + + + + +C G T M +f0067reute +d f PM-GREECE-BLIZZARDS 03-09 0109 + +HEAVY SNOWS HIT GREECE, ITALY + ATHENS, March 9 - Blizzards lashed Greece today, piling up +to 10 feet of snow in places and paralyzing transport in what +state radio called unprecedented weather conditions for this +time of year. + Except for a handful of flights of the national airline +Olympic Airways that took off before the blizzards started, all +air traffic in and out of the Athens international airport was +canceled, radio said. + The weather service said heavy snowfalls would continue for +several hours. + Cold weather also hit southern and eastern Italy. Heavy +snowfalls caused long delays and difficulties for road, rail +and air traffic. + Reuter + + + + 9-MAR-1987 09:39:30.30 +rubber +malaysia + + + + + +T +f0080reute +r f BC-MALAYSIA-SAYS-RUBBER 03-09 0138 + +MALAYSIA SAYS RUBBER PACT DEPENDS ON CONSUMERS + KUALA LUMPUR, March 9 - Malaysia said the success of talks +opening today on a new International Natural Rubber Agreement +(INRA) depends on how flexible consumer countries are. + Rubber producer and consumer countries meet for 12 days in +Geneva from tomorrow to try to hammer out a rubber pact after +they failed to reach agreement last November to replace the +current accord, which expires next October. + Primary Industries Minister Lim Keng Yaik said in a +statement that Malaysia wants to continue with a second INRA +and is prepared to accept modifications that would strengthen +the present agreement. + He said the second INRA would allow for an orderly disposal +of the accumulated buffer stock of 375,000 tonnes, since the +market is now capable of absorbing such releases. + Reuter + + + + 9-MAR-1987 09:39:45.70 + +sweden + + + + + +RM +f0081reute +u f BC-PHARMACIA-AB-LAUNCHES 03-09 0115 + +PHARMACIA AB LAUNCHES EUROCOMMERCIAL PAPER PROGRAMME + STOCKHOLM, March 9 - Pharmacia AB said it was launching a +200 mln dlr Eurocommercial paper programme as part of a move to +internationalise the company's financing. + Market makers will be Credit Suisse First Boston, Morgan +Stanley International and Svenska Handelsbanken PLC. + Pharmacia treasurer Bertil Tiusanen said gaining direct +access to the short term international capital market would +improve its ability to meet its dollar borrowing requirement. + He said it was a natural step for an internationally known +company whose shares are noted in Tokyo and Stockholm and are +traded over the counter in the United States. + REUTER + + + + 9-MAR-1987 09:40:54.41 +acq +usa + + + + + +F +f0084reute +u f BC-MCDOWELL-<ME>-TO-MERG 03-09 0103 + +MCDOWELL <ME> TO MERGER WITH <INTERPHARM INC> + NASHVILLE, Tenn., March 9 - McDowell Enterprises Inc said +it has signed a definitive agreement to acquire an 80 pct +interest in privately held Interpharm Inc for a 19.9 pct +interest in McDowell. + The company said subject to contigencies, including future +sales and profit levels, McDowell could over a four-year period +acquire 100 pct of Interpharm in exchange for up to 51 pct of +McDowell's voting stock. + It said the transaction is expected to be completed within +60 days, at which time the McDowell board would be restructured +to include Interpharm management. + Reuter + + + + 9-MAR-1987 09:41:09.67 + +usa + + + + + +F +f0085reute +r f BC-FEDERAL-HOME-MORTAGE 03-09 0108 + +FEDERAL HOME MORTAGE BUYS FUNDS FROM LENDER + CHARLOTTE, N.C., March 9 - The Federal Home Mortgage Corp +announced the sale of 400 mln dlrs for residential mortgages to +First Union Corp's mortgage subsidiary. + Freddie Mac said that First Union Mortgage Corp already +swapped 70 mln dlrs of new residential mortgages to Freddie Mac +in the first phase of the contract. + Freddie Mac said buy selling 400 mln dlrs worth of +mortages, it makes more mortgage money available. It said +through its guarantor program, First Union will be allowed to +convert its investment-quality mortgages into mortgage-backed +securities accepted in capital markets. + Freddie Mac explained that the securities can be used as +collateral for borrowings, sold to other investors, or employed +in a variety of cash management techniques. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-004.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-004.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-004.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-004.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2023 @@ + + +11-MAR-1987 18:04:17.59 + +canada + + + + + +M +f0849reute +d f BC-INCO-SEES-NO-MAJOR-IM 03-11 0133 + +INCO SEES NO MAJOR IMPACT FROM DOW REMOVAL + TORONTO, March 11 - Inco Ltd said it did not expect its +earlier reported removal from the Dow Jones industrial index to +make a major impact on the company's stock. + "We don't think that individuals or institutions buy our +shares because we were one of the Dow Jones industrials," +spokesman Ken Cherney said in reply to a query. + Inco closed 1-3/8 lower at 19-3/8 in second most active +trading on the Toronto Stock Exchange. + The Wall Street Journal, which selects the index, said Inco +was dropped to make the index more representative of the +market. Inco, the non-Communist world's largest nickel +producer, was a member of the index since 1928. + Replacing Inco and Owens-Illinois Inc will be Coca-Cola Co +and Boeing Co, effective tomorrow. + Nickel analyst Ilmar Martens at Walwyn Stodgell Cochran +Murray Ltd said Inco's removal from the index would likely +spark short-term selling pressure on the stock. + "Some investors who have Inco may suddenly say, 'well, +because it's not now a Dow stock, we should eliminate that +investment,'" said Martens, although he added the move was +unlikely to have a serious long-term impact on Inco stock. + Inco has struggled in recent years against sharply lower +nickel prices. Its net earnings fell to 200,000 U.S. dlrs in +1986 from 52.2 mln dlrs the previous year. + Reuter + + + +11-MAR-1987 18:06:47.22 + +usa + + + + + +F +f0852reute +d f BC-FORMER-EMPIRE-OF-CARO 03-11 0107 + +FORMER EMPIRE OF CAROLINA <EMP> EXEC SENTENCED + NEW YORK, March 11 - Mason Benson, former president and +chief operating officer of Empire of Carolina Inc, a toy maker, +today was sentenced in Manhattan federal court to a year and +one day in jail for his involvement in a kickback scheme. + Benson pleaded guilty to charges of conspiracy, tax +evasion, filing false corporate tax returns and defrauding the +company's shareholders. He was also fined 5,000 dlrs. + Benson was charged with demanding kickbacks from sales +representatives who were asked to turn over a portion of their +commisisons as a condition for doing business with Empire. + Reuter + + + +11-MAR-1987 18:09:39.66 + +usa + + + + + +F +f0856reute +h f AM-AIDS 03-11 0095 + +DOCTORS FIND LINK BETWEEN AIDS, SMALLPOX VIRUS + BOSTON, March 11 - In a discovery that could complicate the +search for an AIDS vaccine, a team of U.S. Army doctors said +they have uncovered a potentially-fatal interaction between the +AIDS virus and a virus used to protect against smallpox. + Physicians at the Walter Reed Army Institute of Research +said a 19-year-old man, who apparently had been exposed to the +AIDS virus, developed a pox-like disease and died after +receiving the smallpox vaccine. The military now tests recruits +for AIDS before vaccinating them. + The findings, reported in The New England Journal of +Medicine, are significant because scientists have begun working +on an AIDS vaccine that relies on the smallpox vaccine. + "Our case report raises provocative questions concerning +the ultimate safety of such vaccines," said the group led by +Dr. Robert Redfield. + The report also throws into question the belief held by +some scientists that the smallpox vaccine, which exposes people +to a milder, protective form of the disease known as cowpox, +could be further modified to protect people against a host of +other diseases. + Reuter + + + +11-MAR-1987 18:13:59.93 + +usa + + + + + +F +f0860reute +d f AM-CANCER 03-11 0107 + +BIRTH CONTROL PILLS HELP PREVENT CANCER - STUDY + BOSTON, March 11 - Doctors at the Centers for Disease +Control in Atlanta said they have new evidence that birth +control pills can help provide long-term protection from cancer +of the ovary, even if the pills are only taken for a few +months. + The study, reported in the New England Journal of +Medicine, also found that all the various types of oral +contraceptives on the market were equally effective in lowering +the rate of ovarian cancer. + The researchers estimated that the use of birth control +pills in this country probably prevented about 1,700 cases of +ovarian cancer in 1982. + As more and more women who have taken oral contraceptives +"move into the age groups that are at highest risk for +epithelial ovarian cancer we may witness a declining incidence +of this serious disease," they said. + Specifically, the team led by Dr. Howard Ory found that +"oral contraceptive use, even for a few months, reduces the +risk of epithelial ovarian cancer by 40 percent for women 20 to +54 years of age. + "The effect probably takes from five to ten years to +become apparent, but it persists long after the use of oral +contraceptives ends. Moreover, protection exists regardless of +the formulation of oral contraceptive used," they said. + Reuter + + + +11-MAR-1987 18:14:49.93 +interestretailipi +usa + + + + + +RM C +f0861reute +u f BC-fin-futures-outlook 03-11 0103 + +U.S. ECONOMIC DATA KEY TO DEBT FUTURES OUTLOOK + By Brad Schade, Reuters + CHICAGO, March 11 - U.S. economic data this week could be +the key in determining whether U.S. interest rate futures break +out of a 3-1/2 month trading range, financial analysts said. + Although market expectations are for February U.S. retail +sales Thursday and industrial production Friday to show healthy +gains, figures within or slightly below expectations would be +positive for the market, the analysts said. + "You have to be impressed with the resiliency of bonds +right now," said Smith Barney Harris Upham analyst Craig +Sloane. + Treasury bond futures came under pressure today which +traders linked to a persistently firm federal funds rate and a +rise in oil prices. However, when sufficient selling interest +to break below chart support in the June contract failed to +materialize, participants who had sold bond futures early +quickly covered short positions, they said. + "Everyone is expecting strong numbers, and if they come in +as expected it won't be that bad for the market," Sloane said. + Sloane said the consensus estimate for the non-auto sector +of retail sales is for a rise of 0.6 to 0.7 pct. + Dean Witter analyst Karen Gibbs said a retail sales figure +below market forecasts would give a boost to debt futures, and +she put the range for the non-auto sector of retail sales at up +0.8 to 1.2 pct. + Industrial production and the producer price index Friday +both are expected to show increases of about 0.5 pct, she +added. + Retail sales "will tell us whether or not we will be able +to fill the gap," Gibbs said, referring to a chart gap in June +bonds between 100-26/32 and 101-3/32 created Friday. June bonds +closed at 100-4/32 today. + Also key to debt futures direction, in addition to the +federal funds rate, is the direction of crude oil prices, said +Carroll McEntee and McGinley Futures analyst Brian Singer. + "A higher fed funds rate and firm oil prices precluded the +market from breaking out of the trading range the last time the +market approached the top of the range," Singer said. + In order for bonds to break above the top of the range, +which is just below 102 in the June contract, "the crude oil +rally needs to run its course and pull back a little bit," +Singer said. "Fed funds are already easing back down toward the +six pct level." + The recent surge in oil prices has also been a concern to +Manufacturers Hanover Futures analyst Jim Rozich, but the rally +may be nearing a top around 18.50 dlrs per barrel, he said. + Rozich said he is looking for the June bond contract to +ease to 99-6/32 and find support. + "I'm not quite ready to jump on the bullish bandwagon yet. +The jury is still out this week," Rozich said. + Reuter + + + +11-MAR-1987 18:15:09.97 + +usa + + + + + +C G L M T +f0863reute +d f AM-AID 03-11 0106 + +U.S. "ACTION PROGRAM" FOR SUB-SAHARAN AFRICA + WASHINGTON, March 11 - The Reagan administration, +responding to last year's United Nations special session on +Africa, today outlined a U.S. "action program" for sub-Saharan +Africa focusing heavily on economic reform and self-help. + A White House statement announced establishment of "a +long-term U.S. goal for all U.S. economic programs and policies +in sub-Saharan Africa: to end hunger in the region through +economic growth, policy reform and private sector development." + The statement said the "program of action" was recommended by +a White House task force set up last September. + In a series of recommendations, the task force called for +new efforts to address Africa's heavy debt burden and said U.S. +food aid should stress production incentives to reinforce +African nations' economic reform and productivity. + It also said better African access to world markets should +be promoted to reward good performance and enable African +nations to earn their way toward economic growth. + The U.S. private sector should be mobilized to provide +"private, voluntary and corporate involvement of a humanitarian + It said donor countries "should negotiate, through the +existing International Monetary Fund/World Bank coordination +process, framework agreements with each sub-Saharan African +country to establish long-term structural adjustment and reform +programs." + The task force called for a separate budget account for +U.S. bilateral aid "in order to focus better on rewarding +economic performance and increasing the flexibility of U.S. +assistance programs for incentive economic reforms and private +sector development." + Reuter + + + +11-MAR-1987 18:16:09.87 + +usa + + + + + +F A RM +f0867reute +r f BC-UNUSUAL-TEXAS-INSTRUM 03-11 0091 + +UNUSUAL TEXAS INSTRUMENTS <TXN> PREFERRED PRICED + NEW YORK, March 11 - In a novel type of financing, Texas +Instruments Inc marketed a three-part, 225 mln dlr issue of +convertible money market preferred stock through Shearson +Lehman Brothers Inc as sole manager. + Shearson, which originated the new convertible concept, +said each of the three tranches totaled 75 mln dlrs. In the +first, a 2.85 pct dividend was set on the stock with a strike +price of 190 dlrs that represented a 15 pct premium over the +common stock price when terms were set. + Also included were 4.36 pct dividend preferred with a 220 +dlr strike price and 33 pct premium and 4.49 pct dividend +preferred with a 235 dlr strike price and 42 pct premium. + Texas Instruments common closed at 167.25 dlrs, up 2-1/8. + Ronald Gallatin, managing director at Shearson, said that +"demand for the offering was unbelievable, especially for the +first tranche." + He said that Shearson originated the concept of auction +money market preferred stock three years ago. The conversion +feature of this issue is the new wrinkle. + Commenting on the first tranche, Gallatin noted that the +original pricing talk called for a dividend in the four to 4.20 +pct area. This was gradually cut to 2.85 pct because of intense +demand, saving the issuer money in financing costs. + The Shearson official said that virtually all buyers of the +first tranche received less than they wanted. He said the +latter two tranches were less strongly oversubscribed. + Like non-convertible money market preferred stock, the new +version allows investors to redeem their holdings every seven +weeks. Investors then can maintain their holdings, sell them, +or offer to hold on to the securities if the auction +dividend is at least at a level they specify in advance. + Gallatin said the securities were sold to a broad range of +investors, including major insurance companies, banks, money +managers and pension funds. + Reuter + + + +11-MAR-1987 18:21:00.31 + +usacanada +james-bakerreagan + + + + +E +f0877reute +r f AM-CANADA-CLARK 03-11 0105 + +CLARK SAYS HE EXPECTS U.S. ACTION ON ACID RAIN + WASHINGTON, March 11 - Canadian Foreign Secretary Joe +Clark, winding up a two-day visit to Washington, said he +expected the Reagan administration to take some action on +reducing acid rain. + "My impression is there will be some movement by the United +States administration on acid rain (but) how much movement I +can't judge or predict," he told reporters. + The meetings with American officials are part of a routine +U.S.-Canada consultation but are also expected to lay the +groundwork for a summit in Ottawa next month between President +Reagan and Prime Minister Brian Mulroney. + Clark today held discussions with Treasury Secretary James +Baker and Democratic Sens. Patrick Moynihan of New York, +Christopher Dodd of Connecticut, Lloyd Bentsen of Texas and +George Mitchell of Maine. + Yesterday, he held talks with Vice President George Bush, +Secretary of State George Shultz and Commerce Secretary Malcolm +Baldrige. + Among its priorities, Canada is seeking evidence that +Reagan is prepared to live up to a commitment made last year to +implement in the United States a five-year 5 billion U.S. dlr +program to test cleaner ways of burning coal. + This issue was discussed at length with Baker and several +of the senators, including Mitchell who urged Canada to "keep +the heat on" the Reagan administration to force action, Canadian +officials said. + Also taken up with most of the senators and Baker were +trade issues, including the need for the United States and +Canada to establish a better mechanism for settling trade +disputes between the two countries, who are each other's major +trading partner, Canadian officials said. + Reuter + + + +11-MAR-1987 18:22:58.57 + +usa + + + + + +F +f0886reute +r f BC-FORD-MOTOR-<F>-DISTRI 03-11 0052 + +FORD MOTOR <F> DISTRIBUTES PROFIT SHARING + DALLAS, March 11 - Ford Motor COr said that profit-sharing +checks were distributed to employees in its U.S. facilities. + About 371 mln dlrs was distributed to 160,253 emplyees. The +average payment per employee was more than 2,100 dlrs compared +with 1,200 in 1985. + + Reuter + + + +11-MAR-1987 18:24:57.40 + +jamaica + + + + + +RM A +f0887reute +u f BC-jamaica-puts-cap-on-b 03-11 0079 + +JAMAICA PUTS CAP ON BORROWING + Kingston, march 11 - jamaica has put a cap on its 3.5 +billion dlr foreign debt and will reduce its obligations by 300 +mln dlrs this year, prime minister edward seaga said today. + Speaking at a news conference, seaga said jamaica has +reached its "maximum stock of debt" and will not undertake any +more borrowing until it is justified by economic growth. + "this year we'll be reducing the stock of debt by 300 +million dollars," he said. + He told reporters his government aims to reduce jamaica's +ratio of debt payments to foreign exchange earnings from the +current 50 pct to 25 pct within three years. + Debt payments this year are expected to total 287 mln +dollars, seaga said. + yesterday jamaica agreed with creditor banks to reschedule +over the next 12 years some 181 miln dlrs due in 1987-89. + The accord includes a grace period on principal payments +for eight and a half years and a reduction of interest rates +from 2.5 to 1.125 pct above libor. + Last week, jamaica obtained a 10-year rescheduling of 100 +pct of principal and 85 pct of interest on 125 mln dollars of +debt to the paris club nations the debt would have fallen due +over the next two years. + Reuter + + + +11-MAR-1987 18:26:24.22 + +usa + + + + + +F +f0888reute +d f AM-SICKLE 03-11 0114 + +FASTER TEST FOR SICKLE CELL ANEMIA DEVELOPED + BOSTON, March 11 - A team of California researchers said +that they have developed a better, faster test for detecting +sickle cell anemia in unborn children than existing procedures. + The test, developed by Cetus Corp <CTUS> researchers, +requires only a small amount of genetic material from a fetus +and produces a diagnosis within a day, unlike other tests that +require several days and can only be done in a few specialized +centers, they said. + Sickle cell anemia is a painful, inherited blood disease +that causes the normally-flexible red blood cells to stiffen +into a sickle-like shape. It is primarily found in blacks. + The researchers said in The New England Journal of Medicine +that their "procedure promises to be a rapid, sensitive and +reliable method for the prenatal diagnosis of sickle cell +disease." + In addition, they said, the technique might also be +adapted to detect other types of genetic disease. + Reuter + + + +11-MAR-1987 18:36:05.15 +earn +canada + + + + + +E F +f0900reute +r f BC-BANK-OF-BRITISH-COLUM 03-11 0060 + +BANK OF BRITISH COLUMBIA 1ST QTR JAN 31 NET + VANCOUVER, British Columbia, March 11 - + Oper shr loss two cts vs profit three cts + Oper net profit 273,000 dlrs vs profit 1,710,000 + YEAR - period ended October 31, 1986 + Oper shr loss 23 cts vs profit 14 cts + Oper net loss 4,397,000 vs profit 7,527,000 + Assets 2.67 billion vs 3.25 billion + Note: 1987 1st qtr net excludes extraordinary loss of 2.2 +mln dlrs or six cts shr. + 1986 yr net excludes extraordinary loss of 66 mln dlrs or +1.94 dlrs shr involving 22.1 mln dlrs of costs from sale of +bank assets to Hongkong Bank of Canada, eight mln dlrs for +contingent liabilities in respect of litigation and potential +tax reassessment by U.S. govt and 35.9 mln dlrs of deferred tax +debits. + Most bank assets sold to HongKong Bank of Canada, a unit of +<Hong Kong and Shanghai Banking Corp> in Nov, 1986. + Shr after preferred divs. + Reuter + + + +11-MAR-1987 18:37:48.60 + +usairan + + + + + +V +f0904reute +u f AM-REAGAN-HAKIM 03-11 0101 + +RAN SCANDAL PARTICIPANT TO GET IMMUNITY OFFER + WASHINGTON, March 11 - Albert Hakim, an arms merchant, is +the first top-ranked player in the Iran arms scandal who may be +enticed into testifying by the promise of immunity, +investigators said. + The House Select committee probing the Iran arms scandal +has voted to grant limited immunity from criminal prosecution +to Hakim in return for his testimony. + Hakim, 51, was said deeply involved from the start in the +attempt to trade arms to Iran for help in freeing American +hostages in Lebanon and the diversion of funds and arms to +rebels in Nicaragua. + + Reuter + + + +11-MAR-1987 18:38:02.32 +earn +usa + + + + + +F +f0905reute +r f BC-RESTAURANT-ASSOCIATES 03-11 0069 + +RESTAURANT ASSOCIATES INC <RA> 4TH QTR JAN 3 + NEW YORK, March 11 - + Shr 25 cts vs 36 cts + Net 1.4 mln vs 1.4 mln + Revs 56.9 mln vs 35.1 mln + Year + Shr 86 cts vs 75 cts + Net 4.7 mln vs 3.0 mln + REvs 201.4 mln vs 140.0 mln + NOTE:1985 4th qtr includes 99,000 loss from carryforward. +Shares restated to give effect to 1.4 to one stock split in the +form a 40 pct class A dividend in August 1985. + Reuter + + + +11-MAR-1987 18:41:59.82 +earn +usa + + + + + +F +f0907reute +r f BC-MICHIGAN-GENERAL-CORP 03-11 0077 + +MICHIGAN GENERAL CORP <MGL> 4TH QTR + SADDLE BROOK, N.J., March 11 - + Shr loss 1.02 dlrs vs 1.01 dlr + Net loss 18.1 mln vs 11.4 mln + Revs 96.0 mln vs 90.3 mln + Year + Shr loss 2.65 dlrs vs loss 3.06 dlrs + Net loss 39.3 mln vs 34.6 mln + Revs 386.0 mln vs 373.0 mln + NOTE:1986 4th qtr, year loss includes 14.4 mln dlrs, 4.6 +mln dlrs respectively from discontinued. 1985 4th qtr and year +include loss of 13.1 mln, 1.9 mln dlr respectively. + Reuter + + + +11-MAR-1987 18:45:36.66 +crudenat-gasiron-steel +usalibya + + + + + +F Y +f0908reute +u f BC-USX-<X>-PROVED-OIL,-G 03-11 0103 + +USX <X> PROVED OIL, GAS RESERVES FALL IN 1986 + NEW YORK, March 11 - USX Corp said proved reserves of oil +and natural gas liquids fell 28 pct to 802.8 mln barrels at the +end of 1986 from 1.12 billion barrels at year-end 1985. + The figures, in USX's just-released 1986 annual report, +indicate much of the drop resulted from the exclusion of 293.7 +mln barrels of Libyan reserves, after the U.S. government last +June directed U.S. oil companies to end Libyan operations. + USX, which owns Marathon Oil Co and Texas Oil and Gas Corp, +had 60 pct of its 1986 sales of 14.94 billion dlrs from its oil +and gas operations. + About 24 pct of total sales came from USX's USS steel unit +and 16 pct from diversified businesses, which include oilfield +services, raw materials, minerals, chemicals and real estate. + According to the report, domestic liquids reserves fell +slightly to 628.5 mln barrels from 628.9 mln and foreign +reserves fell to 174.3 mln from 486.4 mln barrels. The large +drop in foreign reserves was in the Middle East and Africa, +where they fell to about 9.3 mln barrels from 316.7 mln, +reflecting the exclusion of Libya. + Total natural gas reserves fell to 4.82 trillion cubic feet +at year-end 1986 from 5.18 trillion at the end of 1985. + Again, most of the drop came from the Middle East and +Africa, where reserves fell to zero from 71.9 billion cubic +feet, excluding Libyan reserves. + U.S. natural gas reserves fell to 3.44 trillion cubic feet +from 3.65 trillion and foreign reserves fell to 1.38 trillion +from 1.53 trillion. + In other areas, USX said total capital spending fell to 962 +mln dlrs in 1986 from 1.78 billion dlrs in 1985. The 1986 +audited figure is eight mln dlrs higher than the unaudited +figure the company reported on Jan 27. + USX also said it expects to record a gain of 150 mln dlrs +in 1988, representing 50 pct of previously existing investment +tax credits allowable under the new tax law. The loss of the +other half of the credits was reflected in the fourth quarter. + In a discussion of steel results, USX said plants that were +shut down last month and some previously idled plants may be +permanently closed. USX took a fourth quarter charge of 1.03 +billion dlrs to restructure its steel operations. The charge +included the "indefinite idling" last month of four plants in +Utah, Pennsylvania and Texas. + Other plants or parts of plants in Pennsylvania, Indiana, +Alabama, Ohio and Chicago had been previously idled. + "These operations are not permanently shut down. Improved +market conditions for the products from these plants may make +it feasible to reopen some of them," USX said in the report. + "On the other hand, a lack of any future market improvement +may necessitate their permanent closing," it added. + Reuter + + + +11-MAR-1987 18:50:05.96 + +usa + + + + + +F Y +f0914reute +r f BC-PHILLIPS<P>-SAYS-STOC 03-11 0099 + +PHILLIPS<P> SAYS STOCK UP ON STEPS TO PARE DEBT + NEW YORK, March 11 - Phillips Petroleum Co Chairman C. J. +"Pete" Silas said his company's stock, ranked fourth on the +most active list of stocks traded today, rose partly because of +steps it took to pare its debt. + Silas told Reuters in an interview today, "part of this +strength results from the rise in oil prices and also because +some of the analysts have been happy with the steps we've taken +in 1986 to pare our debt." + Phillips stocks rose 1/4 to 14 dlrs a share following +recommendations by some oil analysts, a company source said. + Phillips debt stood at 5.9 billion dlrs in December 1986 +down from a 1985 high of 8.6 billion dlrs, analysts said. + "At 14 dlrs a share, Phillips is priced closer to the actual +price of oil," he added. + Silas said, "if the analysts are right that oil prices will +rise to 20 dlrs or higher, then it seems to make sense to buy +Phillips." He is, however, more cautious about the strength in +crude prices, expecting the price to fluctuate between 16-18 +dlrs a barrel for the year. + Oil industry analysts said one reason for the stock's +popularity of the stock is that it traded at a strong discount +to its appraised value and was attractively priced for small +investors. + Charles Andrew, an analyst who follows Phillips for John S. +Herold Inc of Greenwich, Conn said that the appraised value of +the company, based on available data is 34.25 dlrs. + "The stock is trading at about 1/3 its appraised value. The +company has tremendous leverage and if it can get its act +together and if oil prices are steady to higher there is good +room for improvement," he said. + But, he added, "if oil prices turn lower, there will be a +lot of pressure on Phillips." + Phillips' shares fell as low as eight dlrs a share over the +last 52 weeks with a 1987 low of 11-3/4 dlrs in 1987. +Analysts say that the appraised value of the company could be +revised due to asset sales of their oil and gas reserves. + Silas told Reuters that the asset sales which amount to +about two billion dlrs for 1986 were completed and that none +were planned. + Reuter + + + +11-MAR-1987 18:50:57.36 + +usa + + + + + +F +f0915reute +u f BC-MICHIGAN-GENERAL-<MGL 03-11 0107 + +MICHIGAN GENERAL <MGL> BEGINS EXCHANGE OFFER + SADDLE BROOK, N.J., march 11 - Michigan General Corp said +it began an exchange offer for its 110 mln dlrs outstanding +principal amount of 10-3/4 pct senior subordinated debentures +due December 1, 1998. + Pursuant to the exchange offer, each 1,000 dlr principal +amount will receive 500 dlr principal amount of senior +subordinated notes due March 1, 1992, 200 dlr principal amount +of non-interest bearing convertible senior subordainted notes +due March 1, 1997 and 12 shares of delayed convertible +preferred stock, liquidation preference 25 dlrs per share. + The offer will expire April nine. + Michigan General said the exchange offer is crucial to is +attempt to restructure and reduce its risk from Chapter 11. + The principal purpose of the offer is to reduce its debt +service on the 10-3/4 pct debetures, increase stockholders' +equity and induce its lender to continue to fund. + Assuming a 90 pct acceptance of the offer, Michigan's +annual cash interest requirements will be reduced by about 10.6 +mln dlrs, it said. + Completion is subject to the tender of at least 90 pct of +the debentures and its lender to waive it from default under +its loan agreements. + + Reuter + + + +11-MAR-1987 18:53:18.49 +earn +canada + + + + + +E F +f0918reute +r f BC-BANK-OF-B.C.-REVISES 03-11 0108 + +BANK OF B.C. REVISES SHARE PAYOUT ESTIMATE + VANCOUVER, British Columbia, March 11 - Bank of British +Columbia said it revised its estimate of shareholder +distributions from last November's sale of most of the bank's +assets to HongKong Bank of Canada to between 65 cts and 1.15 +dlrs a share from 55 cts to 1.20 dlrs a share. + The bank said the estimate could rise to between 1.30 dlrs +and 1.80 dlrs a share if the full pension surplus is obtained. +It said it did not know when distributions would be made. + It earlier reported that operating profit for first quarter +ended January 31 fell to 273,000 dlrs from 1.7 mln dlrs the +previous year. + For full-year 1986 ended October 31, the bank posted an +operating loss of 4.4 mln dlrs against year-earlier profit of +7.5 mln dlrs. The bank also posted a 66 mln dlr extraordinary +loss in fiscal 1986. + Bank of British Columbia sold most of its assets last +November to HongKong Bank Canada, a unit of <HongKong and +Shanghai Banking Corp>, of Hong Kong, for 63.5 mln dlrs. + It said efforts to wind up the bank's affairs were +proceeding as quickly as possible. + The bank said it expected to report positive earnings in +future periods, barring unforeseen circumstances. + Loan losses, which the bank previously said figured in its +move to sell off most of its assets, rose to 105.7 mln dlrs in +fiscal 1986 from year-earlier 36.1 mln dlrs. The bank said 31.1 +mln dlrs of the 1986 total represented downward adjustments to +its portfolio of syndicated sovereign risk loans as required +under the sale to HongKong Bank. + Since November 27, the bank has confined activities to the +winding up of affairs, Bank of British Columbia said. + Reuter + + + +11-MAR-1987 18:54:46.18 + +usa +reagan + + + + +V +f0921reute +u f BC-HOUSE-VOTES-TO-BLOCK 03-11 0111 + +HOUSE VOTES TO BLOCK CONTRA AID FOR SIX MONTHS + WASHINGTON, March 11 - The House voted to block 40 mln dlrs +in military aid to the Nicaraguan rebels until President Reagan +accounts for past assistance, including money diverted from the +U.S. sale of arms to Iran. + The vote was seen as a temporary defeat for Reagan, who has +made aid to the "contras" a key initiative. + Congressional Democratic leaders have conceded that despite +today's vote, they can not muster a two-thirds majority to +override a certain Reagan veto. But they have said it is likely +they can win a battle expected this fall over 105 mln dlrs iin +new aid Reagan is requesting. + + Reuter + + + +11-MAR-1987 18:56:34.21 +earn +canada + + + + + +E F +f0924reute +d f BC-<KIENA-GOLD-MINES-LTD 03-11 0040 + +<KIENA GOLD MINES LTD> 4TH QTR NET + TORONTO, March 11 - + Shr 17 cts vs 16 cts + Net 1,019,000 vs 985,000 + Revs 7,997,000 vs 7,492,000 + YEAR + Shr 1.18 dlrs vs 64 cts + Net 6,959,000 vs 3,778,000 + Revs 36.5 mln vs 29.8 mln + Reuter + + + +11-MAR-1987 18:56:43.55 +carcasslivestock +argentina + + + + + +L +f0925reute +r f BC-ARGENTINE-MEAT-EXPORT 03-11 0117 + +ARGENTINE MEAT EXPORTS HIGHER IN JAN/FEB 1987 + BUENOS AIRES, March 11 - Argentine meat exports during +Jan/Feb 1987 totalled 39,714 tonnes, against 36,594 tonnes +shipped in the same 1986 period, National Meat board said. + Shipments in tonnes with comparative figures for the 1986 +period, in brackets, included: beef 26,945 (20,096), horse meat +3,257 (4,211) and beef offal 7,660 (10,502). + Argentine's meat exports totalled 20,243 tonnes in February +1987, against 19,217 tonnes shipped in the same 1986 month. + Shipments in tonnes, with comparative figures for February +1986, in brackets, included: beef 13,272 (11,464), horse meat +1,543 (2,083) and beef offal 4,476 (4,672), the board added. + Main destinations for refrigerated beef (bone in +equivalent) were as follows, in tonnes, with comparative +figures for 1986 in brackets - + EC 5,500 (7,900), Brazil 5,200 (unavailable), Israel 3,700 +(3,000), Peru 2,500 (800), Singapore 500 (300), Switzerland 500 +(400), Canary Islands 500 (300), Malta 500 (700), Aruba/Curazao +200 (300), Chile 100 (600). + Main destinations for canned meat and cooked beef (bone in +equivalent), in tonnes with comparative figures for Jan/Feb +1986, in brackets, were - + United States 11,200 (13,400), EC 4,700 (5,100). + Reuter + + + +11-MAR-1987 19:02:33.14 +earn +canada + + + + + +E F +f0940reute +r f BC-KIENA-PLANS-TWO-FOR-O 03-11 0056 + +KIENA PLANS TWO-FOR-ONE STOCK SPLIT + TORONTO, March 11 - <Kiena Gold Mines Ltd> said it planned +a two-for-one common stock split, pending shareholder approval +on April 7. + It said approval would require 66-2/3 pct of votes cast. +Kiena said 57 pct-owner Campbell Red Lake Mines Ltd <CRK> was +expected to vote in favor of the split. + Reuter + + + +11-MAR-1987 19:04:31.39 + +usa + + + + + +F +f0941reute +r f BC-VANZETTI-<VANZ>-INCRE 03-11 0053 + +VANZETTI <VANZ> INCREASE OF SHARES APPROVED + STOUGHTON, Mass, March 11 - vanzetti Systems INc said its +shareholders approved increasing the number of authorized +shares to five mln from three mln. + Shareholders also approved increasing the number of shares +reserved for options to employees to 300,000 from 150,000 + Reuter + + + +11-MAR-1987 19:04:38.26 +earn +usa + + + + + +F +f0942reute +s f BC-ROWE-FURNITURE-CORP-< 03-11 0025 + +ROWE FURNITURE CORP <ROWE> SETS QTLY DIVIDEND + SALEM, Va., March 11 - + Qtly div four cts vs four cts prior + Pay April 15 + Record March 20 + Reuter + + + +11-MAR-1987 19:05:21.41 +trade +usa +reaganyeutter + + + + +V RM +f0943reute +u f BC-U.S.-HOUSE-PANEL-TAKE 03-11 0092 + +U.S. HOUSE PANEL TAKES FIRST TRADE BILL VOTES + By Jacqueline Frank + WASHINGTON, March 11 - House trade lawmakers took their +first votes on measures designed to toughen U.S. trade laws but +held over until tomorrow the most difficult votes on +controversial plans to protect American industries. + Meeting in closed session, the House Ways and Means Trade +Subcommittee failed to resolve one of the most sensitive issues +in the bill--whether they will force major foreign trading +partners to severely cut their trade surpluses with the United +States. + The subcommittee is considering a toned-down version of +Democratic-sponsored trade legislation that aims to open +foreign markets but which drops last year's effort to force +President Reagan to retaliate with quotas or tariffs. + Congressional aides who asked not to be identified said the +lawmakers intend to wrap up their proposals tomorrow and will +consider a proposal to mandate retaliation without setting +specific trade penalties. + The legislation faces another hurdle in the full Ways and +Means Committee next week before the full House votes on it. + Rep. Richard Gephardt, a Missouri Democrat who is seeking +his party's 1988 presidential nomination, said he may offer an +amendment to call for reductions in the trade surpluses of +those countries with barriers to imports of U.S. goods. + This would be a moderated version of his earlier plan to +force a mandatory ten per cent annual cut in the trade surplus +with the United States by Japan, South Korea, Taiwan, West +Germany and other countries with the largest trade imbalances. + "My criteria for a good amendment sets a standard for +getting the trade deficit down," he told reporters. + The trade law changes are to become part of a major +congressional and administration effort to turn around the +record U.S. trade deficit of 169 billion dlrs last year by +opening up foreign markets and making U.S. products more +competitive. + House Speaker James Wright, a Texas Democrat, said again +today he expects the full House will approve the trade bill by +May and that Reagan will accept the final congressional bill. + "I expect whatever is reported (by the Ways and Means +Committee) will pass. We will have a good bill and an effective +bill," he told reporters. + The comprehensive trade bill will include work by other +committees to ease export controls on high technology, to aid +U.S. workers displaced by foreign competition, to stimulate +research and development, to remove foreign trade barriers and +to improve education and worker training. + The lawmakers agreed that for the first time a U.S. +industry could charge foreign producers with unfair competition +if they deny basic worker rights such as collective bargaining, +safety rules and payment of a minimum wage appropriate to the +country's economic development. + They transferred to U.S. Trade Representative Clayton +Yeutter the powers now held by Reagan to decide whether to +retaliate against foreign violations of fair trade rules and +whether an injured industry deserves import relief. + They agreed to make it easier for a company to get +temporary relief from import competition but agreed the +industry should provide a plan to become competitive. + The administration has not announced its support but +Yeutter said yesterday, "I am cautiously optimistic," that the +Democratic-led House will come up with an acceptable bill. + Reuter + + + +11-MAR-1987 19:06:36.56 +trade +franceussr + + + + + +C G L M T +f0945reute +r f BC-SOVIET-MINISTER-SAYS 03-11 0087 + +SOVIET MINISTER SAYS TRADE BOOST UP TO FRENCH + PARIS, March 11 - Soviet first deputy prime minister +Vsevolod Murakhovsky said at the end of a brief visit here his +country wanted to boost joint business with France, but that a +reduction of France's trade deficit with the Soviet Union +depended on the French. + Murakhovsky, who is also chairman of the State +Agro-Industrial Committee (GOSAGROPROM), told a news conference +he had discussed a variety of possible deals with French +companies Rhone-Poulenc, Pechiney and Imec. + Declining to put figures on possible contracts he said he +had discussed plant protection and the processing of highly +sulphuric gas with Rhone-Poulenc, packaging technology for +agricultural products with Pechiney, and fruit and vegetable +juice processing with Imec. + An official for Pechiney said an agreement of intent on +packaging could be signed soon, but could not give any other +details. The other two companies were not immediately available +for comment. + Asked whether he foresaw a reduction this year of France's +trade shortfall, at 7.6 billion francs in the first 11 months +of 1986 against 5.1 billion for the whole of 1985, Murakhovsky +told Reuters: "It all depends on France." + At a meeting in Paris last January French and Soviet +foreign trade ministers said they were committed to increased +efforts to reduce the deficit. Estimates at the time showed a +French 190 mln franc surplus for December 1986. + Murakhovsky said the Soviet Union was prepared to talk with +anybody with "interesting" proposals offering latest technology +and assuring "a mutual advantage." + He said the Soviet Union had many tasks ahead of it and +would deal rapidly with proposals it considered interesting. + He encouraged companies to take advantage of new laws +guaranteeing "the interests of foreign partners" in joint +ventures. + But he said no agreements had yet been finalised under the +new joint venture laws. + He said concrete deals had not yet been finalised as a +result of a one billion dollar accord signed in Moscow last +month with French businessman Jean-Baptiste Doumeng. + He said Doumeng's Interagra company was preparing proposals +for further examination by the Soviet Union. Doumeng last month +said the agreement was to exchange one billion dollars worth of +goods. + Murakhovsky said the agreement was one of intent, and +designed primarily to renew and increase the Soviet Union's +food production capacity. + Reuter + + + +11-MAR-1987 19:09:27.77 +crude +ecuadorvenezuela + + + + + +RM A Y +f0952reute +u f AM-ecuador-assistance 1stld 03-11 0103 + +VENEZUELA TO LEND OIL TO ECUADOR FOR EXPORT + Caracas, march 11 - venezuela will supply ecuador with an +as yet undetermined amount of crude oil to help it meet export +commitments, seriously affected by last week's earthquake, +energy and mines minister arturo hernandez grisanti said. + He gave few details about the deal, but said a crude oil +loan agreement will be made between state oil companies +petroleos de venezuela (pdvsa) and ecuador's cepe. + Ecuador was forced to suspend oil exports for an expected +four months after an earthquake damaged a pipeline. Oil +accounts for 60 per cent of its export income. + Hernandez was speaking to reporters at miraflores palace +on the results of talks with ecuador's deputy energy minister +fernando santos alvite, who arrived here last night. + "the volume lent to ecuador would be discounted from its +opec quota and would not affect venezuela's," he said. "we would +from august on produce our own quota and sell the additional +amounts that ecuador would be repaying us," he said. + He did not elaborate on the quota arrangements but did say +ecuador would notify opec by telex that venezuela would be +lending it a certain amount over so many days. + Venezuela's opec output quota is currently 1.495 million +barrels a day, and ecuador's has been set at 210,000 bpd. + Reuter + + + +11-MAR-1987 19:10:26.95 +earn +usa + + + + + +F +f0956reute +d f BC-EAGLE-CLOTHES-INC-<EG 03-11 0083 + +EAGLE CLOTHES INC <EGL> 2nD QTR JAN 31 + NEW YORK, March 11 - + Shr profit 17 cts vs profit 14 cts + Net profit 1.3 mln vs profit 901,000 + Revs 36.9 mln vs 36.2 mln + Six months + Shr profit 18 cts vs loss 11 cts + Net profit 1.4 mln vs loss 716,000 + Revs 63.6 mln vs 57.7 mln + NOTE:1986 six months includes increase in provision for +doubtful accounts to 1.5 mln dlrs. 1986 shares give effect to +issuance of 1.5 mln shares in exchange for outstanding Series 1 +preferred shares. + Reuter + + + +11-MAR-1987 19:11:19.94 + +iraniraq + + + + + +C G L M T +f0958reute +r f AM-GULF-IRAQ 03-11 0112 + +IRAQ SAYS IRAN ATTACK REPULSED ON SOUTHERN FRONT + BAGHDAD, March 11 - Iraq said it had repelled an Iranian +attack on positions held by its fourth army corps east of the +southern Iraqi town of Amarah on the Baghdad-Basra highway. + A Baghdad war communique said an Iranian infantry brigade, +backed by tanks, launched the overnight attack and fierce +fighting raged for more than six hours before Iranian troops +fled the battlefield, leaving 220 men killed and many wounded. + No major battles have been reported fought by the fourth +army corps for more than a year in the area, mainly swamplands +of the Hawizah marshes running eastward to the southern port +city of Basra. + Reuter + + + +11-MAR-1987 19:15:32.68 +trade +ukjapan + + + + + +C G L M T +f0961reute +r f AM-BRITAIN-JAPAN 03-11 0120 + +BRITAIN CALLS ON JAPAN TO INCREASE IMPORTS + LONDON, March 11 - Britain today called on Japan to +increase foreign imports or risk the rise of protectionism and +the harm it would bring to it and other trading nations. + British Trade and Industry Secretary Paul Channon said +Japan must heed a report issued by a Japanese government +advisory body in December calling for faster domestic demand to +help cut its trade surplus and restructure its economy. + "I recognise that the strong yen has brought problems to +Japan's domestic economy," he told a group of Japanese +businessmen in London. + "But these short term difficulties should not be allowed to +deflect Japan from the fundamental reforms necessary," he said. + "It is not just a domestic issue for Japan. If import +propensity does not expand very soon there is a real risk from +protectionist lobbies, particularly in the U.S. With whom Japan +has so massive a surplus," he said. + "They may well succeed in securing action by governments +which would be highly injurious to trading nations like Japan +and the U.K." + Channon said there had been substantial growth in the +volume of trade between Japan and Britain, amounting to 6.2 +billion sterling (9.8 billion dlrs) last year. + But he added: "Regrettably too much of it was in one +direction, with the Japanese selling us 3.7 billion sterling +(5.8 billion dlrs) more than we sold them." + Reuter + + + +11-MAR-1987 19:15:55.25 +acq + + + + + + +F +f0963reute +f f BC-******TAFT-BROADCASTI 03-11 0013 + +******TAFT BROADCASTING REJECTS 145 DLR PER SHARE BUYOUT OFFER FROM THETA CORP +Blah blah blah. + + + + + +11-MAR-1987 19:18:49.58 +acq +usa + + + + + +F +f0964reute +u f BC-TAFT-<TFB>-REJECTS-14 03-11 0098 + +TAFT <TFB> REJECTS 145 DLR/SHR OFFER + Cincinnati, March 11 - Taft Braodacasting Co said its board +of directors unanimously decided not to accept the pending +proposal of Theta Corp, an investor group led by Dudley Taft. + The decision was based on, among other things, the advise +of its financial advisors, goldman sachs and co, that the offer +of 145 dlrs per share was inadequate. + Taft said the board concluded that the offer failed to +recognize fully the future propsects of the company and +directed management to explore alternatives including possible +financial restructuring. + + Reuter + + + +11-MAR-1987 19:23:42.46 + +ecuador + + + + + +C G L M T +f0967reute +d f AM-ecuador-tremor 1stld 03-11 0120 + +ECUADOR DEBT TO BE HONOURED AFTER QUAKE SURVIVAL + QUITO, March 11 - Ecuador, stricken by a severe earthquake, +will honour its 8.16 billion dlr foreign debt but only after +ensuring the survival of the country after the tremor which +claimed at least 300 lives and caused 4,000 persons to +disappear. + "The government's position ... is to permit us to honour the +(debt) commitments but without sacrificing the country, because +first we have to survive and later we can comply," information +minister Marco Lara told reuters. + He said the nation would later announce definitive +measures on the foreign debt in the aftermath of the earthquake +which the government said will cause nearly a billion dlrs in +economic losses. + Reuter + + + +11-MAR-1987 19:26:43.72 +veg-oil +uk + +ec + + + +C G +f0968reute +r f AM-COMMUNITY-BRITAIN 03-11 0087 + +BRITISH MINISTER CRITICISES PROPOSED EC OILS TAX + LONDON, March 11 - A British minister said that a proposed +European Community tax on vegetable oils and fats would raise +the price of fish and chips and he pledged the government would +fight against it. + Lord Belstead, a junior agriculture minister, told the +House of Lords the tax would raise the price of raw materials +used in many processed foods by about 100 pct. + He said revenue should not be raised by taxing the consumer +and called the proposal "repugnant." + Reuter + + + +11-MAR-1987 20:04:55.06 +jobs +australia + + + + + +RM +f0981reute +b f BC-AUSTRALIAN-UNEMPLOYME 03-11 0091 + +AUSTRALIAN UNEMPLOYMENT EASES IN FEBRUARY + CANBERRA, March 12 - Australia's seasonally-adjusted +unemployment rate eased to 8.2 pct of the estimated workforce +in February from 8.3 pct in January, compared with 7.9 pct a +year earlier, the Statistics Bureau said. + The number of unemployed declined to 632,100 from 638,300 +in January, against 594,500 in February 1986, it said. + But unadjusted, the number of jobless rose to 699,800 or +9.1 pct of the workforce from 671,400 or 8.9 pct in January and +658,500 or 8.7 pct a year earlier. + REUTER + + + +11-MAR-1987 21:02:16.57 + +ecuador + + + + + +RM +f0996reute +u f BC-ECUADOR-SEEKS-HALT-TO 03-11 0106 + +ECUADOR SEEKS HALT TO PAYMENTS TO BANKS IN 1987 + QUITO, March 11 - Ecuador, stricken by a severe earthquake, +is seeking through negotiations with private foreign banks to +postpone all payments due to them for the rest of the year, +Finance Minister Domingo Cordovez said. + He said in a statement, "The idea with the foreign banks is +to obtain from them the best terms to give the Ecuadorean +economy a complete relief in the period of deferral of payments +on the foreign debt during the present year." + The statement referred only to payments due to private +foreign banks, a senior government finance official told +Reuters. + These creditors hold two-thirds of Ecuador's foreign debt +which totals 8.16 billion dlrs. + It did not refer to debts maturing to foreign governments +and multilateral lending agencies, accounting for the remainder +of Ecuador's foreign debt, the official said. + He said Ecuador owed the private foreign banks between 450 +and 500 mln dlrs in interest payments for the rest of 1987 and +about 66 mln in principal payments maturing this year. + Cordovez said Ecuador would seek new loans from +multilateral organisations. A World Bank mission was due here +soon to evaluate emergency loans, government officials said. + Ecuador has also appealed for emergency +aid from about 40 foreign governments. + Government officials have calculated losses to the 1987 +budget from last Thursday's earthquake at 926 mln dlrs. + In 1986, Ecuador's total service on the foreign debt was +about 996 mln dlrs to all creditors. + The quake ruptured Ecuador's main oil pipeline, suspending +crude exports for five months until the line is repaired. Oil +accounts for up to two-thirds of its total exports and up to 60 +pct of total revenues. Before the tremor, Ecuador suspended +interest payments on January 31 to private foreign banks. + Officials said they stopped interest payments due to a +cash-flow squeeze stemming from a slide in world oil prices, +which cut 1986 exports by about 25 pct to 2.18 billion dlrs. + Ecuadorean finance officials have been in telephone contact +every day this week with some of the banks who sit on its +14-bank advisory committee, the senior government finance +official said. The committee represents the country's 400 or so +private foreign bank creditors. + Cordovez also said in the statement, "The banks should +perceive that it is impossible at this moment to comply with +what was forseen." + Cordovez added, Ecuador must make a new proposal in line +with the reality since the earthquake by seeking better options +of deferment and of softening the negotiation conditions." + Interest payments fall due at least monthly to private +foreign banks. + Ecuador's initial proposal earlier this year was to make +only one semi-annual or one annual interest payment this year. + Under this proposal, it sought to defer interest payments +until June at the earliest, foreign bankers and government +officials here said. + Ecuadorean officials held their last formal meeting with +the advisory committee in New York in January, but the +negotiations were suspended on January 16 due to the 12-hour +kidnapping of President Leon Febres Cordero by air force +paratroopers. + The Red Cross says that least 300 people died and at least +4,000 are missing due to the earthquake. + REUTER + + + +11-MAR-1987 21:06:50.50 +money-fx +usa +james-baker + + + + +RM +f0002reute +u f BC-TREASURY-SECRETARY-BA 03-11 0096 + +TREASURY SECRETARY BAKER DECLINES COMMENT ON G-6 + NEW YORK, March 11 - U.S. Treasury Secretary James Baker +declined comment on the February 22 Paris accord between the +six major industrial nations under which they agreed to foster +exchange rate stability. + Asked by reporters after a speech before the National +Fitness Foundation banquet what, if any, currency intervention +levels had been set in Paris, Baker replied: "We never talk +about intervention." + Baker also declined to comment on his views about the +foreign exchange markets' reaction to the accord. + REUTER + + + +11-MAR-1987 21:32:41.13 +crude +venezuelaecuador + +opec + + + +RM +f0019reute +u f BC-ECUADOR-TO-ASK-OPEC-T 03-11 0104 + +ECUADOR TO ASK OPEC TO RAISE EXPORT QUOTA + CARACAS, March 11 - Ecuador will ask OPEC to raise its oil +export quota by 100,000 barrels per day to 310,000 to +compensate for lost output due to last week's earthquake, +deputy Energy Minister Fernando Santos Alvite said. + Santos Alvite, who arrived in Caracas last night to discuss +an aid plan for Ecuador, did not say when the Organisation of +Petroleum Exporting Countries (OPEC) would be approached. + The additional output would be related to plans now under +discussion for Venezuela and Mexico to lend Ecuador crude while +it repairs a pipeline damaged by the quake. + Earlier, Venezuelan Energy and Mines Minister Aturo +Hernandez Grisanti said his country would supply an unspecified +part of Ecuador's export commitments. + But Santos Alvite told reporters he hoped a first cargo of +300,000 barrels could leave Maracaibo this weekend to supply +refineries near Guayaquil. He added Ecuador also wanted to make +up for 50,000 bpd it shipped to Caribbean destinations. Mexico +might supply Ecuador's South Korean market. + Ecuador may be unable to export oil for up to five months +due to extensive damage to a 25 mile stretch of pipeline +linking jungle oilfields to the Pacific port of Balao. + REUTER + + + +11-MAR-1987 21:37:18.46 +oilseedrapeseed +china + + + + + +G C +f0024reute +u f BC-CHINA'S-RAPESEED-CROP 03-11 0097 + +CHINA'S RAPESEED CROP DAMAGED BY STORMS + PEKING, March 12 - The yield on 46,000 hectares (ha) of +rapeseed in central China will be cut by up to 70 pct by +hailstorms and tornadoes that swept across nearly 100,000 ha of +crops on March 6, the New China News Agency said today. + The storm, which lashed the Huai and Yangtze rivers and +eastern Anhui province, left two people dead and 800 others +injured. Some 800 houses were flattened and 19 boats sunk, it +said. + The Anhui provincial government has sent emergency relief +to the 19 counties affected, the news agency said. + REUTER + + + +11-MAR-1987 22:25:49.20 +crude +china + + + + + +F +f0040reute +u f BC-CHINA-CLOSES-SECOND-R 03-11 0112 + +CHINA CLOSES SECOND ROUND OF OFFSHORE OIL BIDS + PEKING, March 12 - China has closed the second round of +bidding by foreign firms for offshore oil exploration rights, +the China Daily has reported. + It quoted a spokesman for the China National Offshore Oil +Corp (CNOOC) as saying China signed eight contracts with 15 +foreign firms for blocks in the Pearl River mouth and south +Yellow Sea covering a total area of 44,913 sq km. + Second round bidding began at the end of 1984 and only one +well has so far produced results -- Lufeng 13-1-1, 250 km +south-east of Shenzhen, with an output of 6,770 barrels a day. +The well was drilled by a group of Japanese companies. + The spokesman added CNOOC was ready to enter into contracts +for offshore blocks before third round bidding began. He did +not say when this would be, but added the contracts would not +be bound by restrictions imposed during the second round. + China has signed 36 oil contracts and agreements with 37 +companies from 10 countries since 1979, when offshore +exploration was open to foreigners. Eleven contracts were +terminated after no oil was discovered. + Foreign firms have invested 2.1 billion dlrs on offshore +China since 1979. + REUTER + + + +11-MAR-1987 22:42:47.98 + +japan + + + + + +RM +f0046reute +b f BC-JAPAN-RELAXES-RULES-O 03-11 0097 + +JAPAN RELAXES RULES ON SECURITIES COMPANY OUTLETS + TOKYO, March 12 - Japan has relaxed its limit on the +establishment of securities company outlets in order to service +a growing number of individual investors, the Finance Ministry +said. + Japanese securities companies can now set up as many as 21 +new outlets in the two years before March 31, 1989, against the +previous maximum of 13. + The rules apply to outlets in department stores, +supermarkets and other locations convenient for individuals. + Foreign securities firms are not affected by the ruling, it +said. + REUTER + + + +11-MAR-1987 22:56:45.09 +acq +usa + + + + + +F +f0048reute +u f BC-AMC-IMPOSES-HIRING-FR 03-11 0097 + +AMC IMPOSES HIRING FREEZE DUE TO TAKEOVER BID + DETROIT, March 11 - American Motors Corp <AMO> management +has ordered a hiring freeze in view of Chrysler Corp's <C> 1.5 +billion dlr takeover bid, a spokesman for AMC said. + Analysts said the merger is virtually certain to go ahead. + American Motors directors met for five hours Wednesday to +review the takeover proposal. "The board ... Expects to be +meeting periodically over the next several weeks on the +Chrysler proposal," AMC said in its first formal statement since +it acknowledged the Chrysler proposal on Monday. + Chrysler, the number three U.S. Automaker, has said the +merger is motivated principally by its desire to acquire AMC's +profitable Jeep business and dealers, as well as a new modern +car assembly plant in Bramalea, Ontario. + That means a guaranteed future for much of AMC, but it +leaves in question the fate of many of its 19,000-plus +employees, according to industry analysts. AMC's Toledo, Ohio +Jeep plant has 1,850 hourly workers on indefinite layoff while +its Kenosha, Wisconsin, car plant has another 2,250 on layoff. + REUTER + + + +11-MAR-1987 22:57:31.32 + +china + + + + + +F +f0050reute +u f BC-ROTHMANS-CLOSE-TO-JOI 03-11 0108 + +ROTHMANS CLOSE TO JOINT VENTURE IN CHINA + PEKING, March 12 - Rothmans International plc <ROT.L> aims +to set up a joint venture with Jinan cigarette factory in +Shandong, China to produce high quality cigarettes, some for +export, Chinese newspapers said. + The China Daily said the factory has produced high-quality +"General" brand cigarettes using advanced machinery and technical +assistance worth 2.5 mln dlrs donated by Rothmans under a +co-operation agreement signed in 1985. + The Economic Daily newspaper said the high quality "General" +will help China's cigarettes enter the international market. +The two papers gave no more details. + REUTER + + + +11-MAR-1987 23:00:56.20 +bop +australia + + + + + +RM +f0052reute +u f BC-FOREIGN-INVESTMENT-IN 03-11 0113 + +FOREIGN INVESTMENT IN AUSTRALIA JUMPS IN LAST QTR + CANBERRA, March 12 - The net inflow of foreign investment +into Australia jumped to 7.3 billion dlrs in the fourth quarter +of 1986 from 4.32 billion in the third quarter and 4.55 billion +a year earlier, the Statistics Bureau said. + The Bureau attributed the increase to a turnaround of 2.08 +billion dlrs in official sector transactions and a 1.09 billion +turnaround in direct investment. + The turnaround in official transactions to a 1.52 billion +inflow from a 555 mln outflow in the third quarter, against a +520 mln inflow a year earlier, was largely on account of +government foreign currency borrowings, it said. + Direct investment recorded a turnaround to a 1.04 billion +dlr inflow in the fourth quarter from a 57 mln withdrawal in +the third quarter, against a 546 mln inflow in the fourth +quarter of 1985, the Bureau said. + It said the major part of the turnaround reflected an +injection of funds, estimated at around 700 mln dlrs, +associated with the previously reported restructuring of the +Australian operations of General Motors Corp <GM>. + GM used the funds to pay out or take over certain +Australian liabilities of its local unit <General +Motors-Holden's Ltd>, it said. + However, net borrowings remained the major part of total +inflow, accounting for 6.16 billion dlrs in the fourth quarter +against 3.88 billion in the third quarter and 4.03 billion a +year earlier, the Bureau said. + Net official borrowings comprised 1.52 billion dlrs against +a net outflow of 548 mln in the third quarter and a 516 mln +inflow a year earlier. + Total private and semi-public authority net borrowings rose +to 4.64 billion dlrs from 4.42 billion in the third quarter and +3.51 billion a year earlier. + REUTER + + + +11-MAR-1987 23:06:27.89 + +ukussr + + + + + +RM +f0055reute +u f BC-MOSCOW-CARRIES-OUT-NU 03-11 0094 + +MOSCOW CARRIES OUT NUCLEAR TEST + LONDON, March 12 - The Soviet Union carried out a nuclear +test early today, the official Tass news agency reported. + According to the report, monitored by the British +Broadcasting Corporation, the explosion was at 0200 gmt. + A blast on February 26 ended a 19-month unilateral test +moratorium declared by the Soviet Union. Moscow blamed the end +of the freeze on U.S. Refusal to join a total test ban. + Tass said the latest explosion, with a power of up to 20 +kilotonnes, had "the aim of improving military equipment." + REUTER + + + +11-MAR-1987 23:06:44.14 +graincorn +taiwan + + + + + +G C +f0058reute +u f BC-TAIWAN'S-FIRST-QUARTE 03-11 0086 + +TAIWAN'S FIRST QUARTER MAIZE IMPORTS SEEN RISING + TAIPEI, March 12 - Taiwan's maize import commitments are +expected to rise to 970,000 tonnes in the first four months of +1987 from 870,000 tonnes a year earlier, a spokesman for the +Joint Committee of Maize Importers told Reuters. + He said more than 75 pct of the imports come from the U.S. +And the rest from South Africa. + The maize import target for calendar 1987 is set at well +over 3.4 mln tonnes compared with an actual 3.07 mln in 1985, +he added. + REUTER + + + +11-MAR-1987 23:46:55.84 +trade +taiwan + + + + + +RM +f0077reute +u f BC-TAIWAN-FURTHER-RELAXE 03-11 0110 + +TAIWAN FURTHER RELAXES FOREIGN GOODS IMPORT CURBS + TAIPEI, March 12 - Taiwan said it would soon relax import +controls on some 400 foreign items, including stationery and +books, in a further effort to allow trading partners, +especially the U.S., Greater access to its markets. + Taiwan announced the easing of import curbs on some 600 +farm and industrial products last month, a Council for Economic +Planning and Development spokesman told Reuters. + He said the new move was intended to balance trade between +Taiwan and its trading partners. The island's trade surplus +reached a record 15.6 billion U.S. Dlrs last year, up from +10.62 billion in 1985. + In January, Taiwan cut import tariffs on some 1,700 foreign +products and allowed imports of U.S. Wine, beer and cigarettes. + "We hope the measures will help reduce our trade surplus +this year, especially with that of the U.S.," the spokesman +said. + Washington is pressing Taiwan to open its markets wider as +a way of cutting its trade deficit with the island, which rose +to 2.35 billion U.S. Dlrs in the first two months of 1987 from +1.87 billion in the year-earlier period. + REUTER + + + +12-MAR-1987 00:06:25.87 +shipiron-steel +japanusa + + + + + +F +f0081reute +u f BC-ECONOMIC-SPOTLIGHT-- 03-12 0111 + +ECONOMIC SPOTLIGHT - MITSUBISHI HEAVY FIGHTS BACK + By Fumiko Fujisaki, Reuters + TOKYO, March 12 - International efforts to redirect Japan's +export-driven economy toward domestic consumption face heavy +going if the country's largest defence contractor and world's +biggest shipbuilder is anything to go by. + Mitsubishi Heavy Industries Ltd <MITH.T> (MHI), which began +making ships and iron goods for Japan's military rulers 130 +years ago, is responding to the strong yen by redoubling its +efforts to maintain its share of export markets. + "If we sell the best quality and the cheapest products, +everyone will buy them," MHI president Yotaro Iida said. + Although two of MHI's main businesses, shipbuilding and +power plant construction, have been hit hard by the yen's 40 +pct rise against the dollar, the company has no plans to +abandon them, Iida told Reuters in an interview. + Its other big activity, aircraft component manufacture, has +performed so well that MHI now accounts for half of the money +Tokyo spends on defence procurement each year. + "We have made the utmost efforts among the world's +manufacturers to improve productivity," he said. "You may be +surprised if you come to see our plants. The outside is old but +the inside is ultra-modern, with robots and computers." + Securities analysts at major securities houses agreed that +MHI has pared costs more quickly than its competitors. The +company has slashed its workforce to 47,000 from 86,000 in +1976. + Despite its cost-cutting, MHI expects profits to drop 40 +pct to 30 billion yen in the current fiscal year ending March +31, from 1985/86's record 50.14 billion. + And that includes gains from the sale of MHI's stake in +Mitsubishi Motors Corp <MIMT.T> for 49 billion yen. + Iida is optimistic about the future, however. He said a +resurgence of demand from the Middle East following the recent +recovery in oil prices coupled with persistent demand for power +plants in developing countries will help MHI restore its +exports-to-sales ratio to the past decade's average of 30 pct. + MHI's exports-to-sales ratio fell to 25.9 pct in the +half-year ended last September, from 35 to 36 pct five years +ago. + China is the most promising market, although MHI also +considers other non-oil-producing developing countries as major +customers. + "Our customers are all seen as being in trouble due to a +lack of foreign currency," Iida said. But he added that he felt +MHI could sell to those markets with Japanese government +financial support. + It can also finance the plants itself and recover its +investment through product sales, a strategy Iida said could +prove popular in the future. + In shipping, MHI is fighting back against low-priced South +Korean competition by building more technologically advanced +carriers to carry liquefied natural gas and other products +difficult to transport. + Shipbuilders Association officials told Reuters MHI is the +world's largest shipbuilder in terms of orders and capacity. + Domestically, MHI is involved in 12 national projects, +including development of nuclear fusion reactors and launch +vehicles for man-made satellites. + It has been the biggest contractor for the Japan Defence +Agency's F-15 and F-14 jet fighters and missiles, although all +of these have been built under licence from U.S. Firms. + MHI is now heading up five Japanese companies seeking to +develop the country's own fighter plane to replace the +currently used F-1 support fighters in the late 1990s. + Military experts said Washington is putting strong pressure +on Tokyo to buy a U.S. Plane, either the McDonnell Douglas Corp +F-18 or General Dynamics Corp F-16, to reduce Japan's huge +trade surplus with the U.S. + "It might be a good idea to jointly produce planes with U.S. +Makers as Japan is supported by the U.S. Defence umbrella," Iida +said. + MHI also plans to cooperate with the U.S. In its Strategic +Defence Initiative space defence program by participating in +the project when it moves from the research stage, he said. + The U.S. Has been seeking Japan's technological support. + In fiscal 1985/86, aircraft accounted for 17.1 pct of MHI's +sales, shipbuilding 17 pct and power plants 27.9 pct. Iida said +the ideal ratio is power plants 30 pct, aircraft and special +vehicles 25 pct and shipbuilding 15 pct. + As for the remaining 30 pct, Iida said he wanted to shift +the domestic focus away from heavy machinery sold to +manufacturers and towards household goods, but he declined to +specify which products. + "By the end of this year, you may find our brand name on +your daily products, although this does not mean we will run +away from our mainstream business," he said. + REUTER + + + +12-MAR-1987 00:37:11.96 + +japan + + + + + +RM +f0096reute +u f BC-JAPANESE-BANKRUPTCIES 03-12 0091 + +JAPANESE BANKRUPTCIES DECLINE IN FEBRUARY + TOKYO, March 12 - Japan's corporate bankruptcies in +February fell 10.8 pct from January to 1,071 cases and total +debts dropped 49.4 pct to 149.40 billion yen, the Tokyo +Commerce and Industry Research Co said. + February bankruptcies fell 14.9 pct from a year earlier, +the 26th straight monthly decline, and debts fell 54.3 pct. + The lower number of bankruptcies in February reflected a +relaxation of money market conditions and reduced bill +settlements due to fewer operating days, it said. + Bankruptcies caused by the strength of the yen against the +dollar totalled 69, or 6.4 pct of those in February, with debts +of 25.52 billion yen, the research firm said. + This compared with 64 with debts of 125.59 billion yen in +January, it said. + Currency-linked bankruptcies since November 1985, when the +dollar's depreciation against the yen began to affect Japanese +export-linked firms, totalled 772, with cumulative debts of +660.53 billion yen, it said. + The value of the yen against the dollar rose to an average +153.49 yen per dollar in February from 184.62 a year earlier. + Bankruptcies usually decline in the first quarter of the +year due to fewer operating days and for seasonal reasons. + Bankruptcies are expected to increase in the quarter +starting April 1 due to expectations of slow consumer spending, +low wage increases for the 1987/88 fiscal year which starts in +April, and slow capital spending by manufacturers, the company +said. + Bankrupcties among export-linked subcontractors will rise +due to a recent shift by major manufacturers to overseas +production, it added. + REUTER + + + +12-MAR-1987 00:55:57.87 +ship +bangladesh + + + + + +G C +f0108reute +u f BC-BANGLADESH-PORT-WORKE 03-12 0089 + +BANGLADESH PORT WORKERS END STRIKE + CHITTAGONG, March 12 - Cargo handling resumed at +Bangladesh's Chittagong port today after 7,000 workers ended +their three day walk-out triggered by a pay dispute, port +officials said. + Loading and unloading of 14 ships stranded by the strike +started this morning and will be completed as quickly as +possible, they said. + The strikers returned to work after an agreement was +reached last night between port authorities and the Port +Workers Association, they said without giving details. + REUTER + + + +12-MAR-1987 01:01:34.13 +acq +uk +leigh-pemberton + + + + +RM +f0111reute +u f BC-LEIGH-PEMBERTON-OPPOS 03-12 0116 + +LEIGH-PEMBERTON OPPOSES TAKEOVER PROTECTION RULES + LONDON, March 11 - The Bank of England does not favour the +introduction of rules to shield companies from hostile takeover +attempts, its governor, Robin Leigh-Pemberton, said. + Instead, merchant banks advising bidding companies must +show restraint and responsibility to avoid the excesses that +have marred recent takeovers, he told the Yorkshire and +Humberside Regional Confederation of British Industries' annual +dinner. + Leigh-Pemberton also called on companies to improve ties +with institutional investors, suggesting representatives of +those institutions be granted seats on the boards of directors +of companies they invest in. + "Boards cannot expect protection from unwelcome predators, +for that is but a short step from saying that they should be +protected from their own shareholders -- who are, after all, +the proprietors of the company," Leigh-Pemberton said. + He added takeovers and mergers had an important role to +play in furthering economies of scale, integration and more +efficient market penetration. "The degree of success or failure +(of a takeover) has not in my experience depended on whether or +not the takeover was contested," he said. + Leigh-Pemberton noted there had been excesses in takeover +activity in the recent past. "The aim is to pressurise a +company's management into action dedicated solely to a +favourable impact on the share price in the short-term, partly +or even primarily at the expense of the future," he said. + Such bids "often depend for their success on creating a +highly-charged and artificial situation in the share market, +and give rise to temptations, on both sides of the battle, to +engage in aggressive, even manipulative tactics that are +immensely damaging to the interest of the shareholders," he +said. + In a clear reference recent events, he said "those in the +City who act for companies or individuals .. Must, I suggest, +be ready to accept a full measure of responsibility -- even if +it entails opprobrium -- for the transactions that may result." + They "should exercise the most careful judgment at the +outset with respect to the clients for whom they act and the +activities contenplated. Those who sow wind cannot expect the +whirlwind to visit elsewhere," he added. + REUTER + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-005.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-005.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-005.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-005.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2012 @@ + + +13-MAR-1987 15:05:02.92 +acq +usa + + + + + +F +f0215reute +d f BC-PLM-<PLMA>-UNIT-ENDS 03-13 0076 + +PLM <PLMA> UNIT ENDS MERGER TALKS + SAN FRANCISCO, March 13 - PLM Cos Inc said its PLM Power Co +unit broke off merger discussions with Sunlaw Energy Corp of +Beverly Hills, Calif. + In January PLM Power entered into a letter of intent to +negotiate a potential acquisition of Sunlaw, subject to +substantial due diligence, the company said. + But it also said the two companies were not able to agree +on mutually satisfactory final terms and conditions. + Reuter + + + +13-MAR-1987 15:08:53.08 +coffee +colombia + + + + + +C T +f0224reute +b f BC-colombia-opens-coffee 03-13 0086 + +COLOMBIA OPENS APRIL/MAY COFFEE REGISTRATIONS + BOGOTA, March 13 - Colombia opened coffee export +registrations for April and May with the National Coffee +Growers' Federation setting no limit, Gilberto Arango, +president of the private exporters' association, said. + He told Reuters the decision not to put any limit responded +to "new factors" which have emerged from recent International +Coffee Organisation talks in London, where producers and +consumers failed to agree on a re-introduction of export quotas. + Reuter + + + +13-MAR-1987 15:11:52.98 +graincorn +usa + + + + + +C G L +f0228reute +b f BC-/USDA-REPORTS-10.572 03-13 0098 + +USDA REPORTS 10.572 MLN ACRES IN CONSERVATION + WASHINGTON, March 13 - The U.S. Agriculture Department has +accepted 10,572,402 more acres of highly erodable cropland into +the Conservation Reserve Program, USDA announced. + In the latest signup, farmers on 101,020 farms submitted +bids on a total of 11,254,837 acres. + The accepted bids for annual rental payments ranged up to +90 dlrs per acre with an average of 51.17 dlrs per acre. + Land entered into the Conservation Reserve Program will be +ineligible for farming for ten years and must be planted with +permanent vegetative cover. + Producers enrolled 1,894,764 acres of corn base acreage in +the conservation program to take advantage of a corn "bonus" +rental payment that was offered by USDA. + The corn bonus, to be paid in generic comodity +certificates, amounts to two dlrs per bushel, based on the ASCS +program payment yield for corn, for each acre of corn based +accepted into the reserve. + The state showing the biggest enrollment in the +conservation program during this signup was Texas with +approximately 1.225 mln acres, followed by Iowa with 1.030 mln +acres, Minnesota with 890,000 acres, Montana 875,000 acres, and +Kansas with 842,000 acres. + Other states showing big enrollment were Missouri with +646,000 acres, North Dakota with 588,000 acres, and Nebraska +with 554,000 acres. + In the corn belt states of Illinois and Indiana, 217,000 +acres and 116,000 acres respectively were enrolled. + Farm land signed up to date in the conservation program +totals 19,488,587 acres. Bids on the previous signups ranged up +to 90 dlrs per acre with an average of 45.52 dlrs. + Reuter + + + +13-MAR-1987 15:13:01.16 + +usabrazil + + + + + +RM +f0233reute +u f BC-BRAZIL-DEBT-POSES-THO 03-13 0103 + +BRAZIL DEBT POSES THORNY ISSUE FOR U.S. BANKS + By Cal Mankowski, Reuters + NEW YORK, March 13 - CitiCorp <CCI> appears to be digging +in its heels for tough negotiations over the billions of +dollars in loans that Brazil owes to money center banks, Wall +Street analysts said. + "I view it as pre-negotiation posturing," said analyst +Carole Berger of Cyrus J. Lawrence Inc, referring to both +Brazil and Citicorp. Brazil recently stopped paying interest on +its commercial bank debt. Today, CitiCorp said its first +quarter income would be reduced by 50 mln dlrs after tax if it +lists the loans as non-performing status. + Citicorp filed an 8-K form with the Securities and Exchange +Commission, indicating a material change in its financial +situation. "Citicorp is saying you can't scare us with threats, +we'll make your loans non-performing right now," Berger said. + The loans have to be treated as non-performing after 90 +days without a payment. CitiCorp said only that the situation +will be reviewed at the end of the current quarter. + Berger asserted that Brazil is doing its own politicking by +talking to U.S. regulators and trying to drive a wedge between +U.S. and European banks. + Analyst Lawrence Cohn of Merrill Lynch and Co said it is +unlikely the situation will be resolved until the second half +of this year. + "Ultimately the Brazilians are going to have to pay up on +all the interest they owe," Cohn said. "The real issue is the +rescheduling of debt terms. + Another question is whether or not the International +Monetary Fund can help Brazil with a new austerity program. + Stocks of money center banks were mostly down fractions in +late dealings. One trader most stocks in the group bounced off +their lows by midday as investors took the news in stride. + Cohn said the bank stocks may be risky until numbers on +non-performing loans are reported for each bank. But he said +investors looking ahead six to 12 months might want to buy at +present levels for the "tremendous fundamental values" in the +group. + Analyst Robert Gordon of Shearson Lehman Brothers Inc said +Manufacturers Hanover Corp <MHC) has the greatest exposure to +Brazilian loans of any New York bank, in terms of percentage of +earnings. He said his only two recommendations currently among +New York banks are J.P. Morgan and Co <JPM> and Bankers Trust +Co <BT> which happen to have the least exposure. + Gordon said his positive opinion on J.P. Morgan and Bankers +Trust was not merely a response to the fact that the two have +lower exposure to Brazilian loans than other banks. + In fact he said there's a chance those banks could get more +involved in the future. He noted that Morgan has already set up +a brokerage subsidiary to deal in loans to less developed +countries. + "I don't see any reason to change full year earnings +estimates, said Frederick Meinke, analyst at E.F. Hutton Co. He +thinks the confrontation with Brazil could end in a replay of a +situation that occurred with Argentina in 1984 and 1985. + Meinke noted that in the case of Argentina the loans became +non-accruing for a couple of quarters but then when the banks +came to an agreement with Argentina all the back interest was +paid. "What it did was distort the quarterly earnings pattern," +he said. + He said in the case of Brazil write-offs of loans is a +worst-case outcome which is highly unlikely. He noted that +Brazil is a country with a diversified economy, going through +some economic upheaval after the transition from a military to +a civilian government. + "The countries of Latin America have too much debt relative +to their ability to service it," said John Mason of +Interstate Securities. "We've been fiddling around with these +problems for five years and the hour is growing late." + He said up to now the banks have reduced their spreads, cut +interest rates internally and extended maturities and none of +these measures has been enough. He expects re-classification of +as much as a third of the loans as non-accruing and he sees +partial write downs of some loans. + Nevertheless Mason thinks the money center bank stocks +could be poised for a short term rally. + A spokesman at First Chicago Corp <FNB> said it is +premature to put Brazil's loans on a cash basis. "It is our +expectation that economic development will allow Brazil to meet +its debt," a spokesman said. + Bankers Trust in New York said it would be premature to +make a decision. Several other banks queried by Reuters said +much the same thing. + A spokesman at Manufacturers Hanover noted that of 2.3 +billion dlrs in loan exposure to Brazil only 1.3 billion is +subject to Brazil's unilateral moratorium on repayment of +interest. + + Reuter + + + +13-MAR-1987 15:13:10.18 + +usa + + + + + +F +f0234reute +b f BC-ROCKWELL-<ROK>-TO-REP 03-13 0112 + +ROCKWELL <ROK> TO REPURCHASE MORE COMMON SHARES + PITTSBURGH, March 13 - Rockwell International Corp said its +board has authorized extension of the company's 500 mln dlr +stock repurchase program by an additional 500 mln dlrs. + Since the beginning of the present repurchase program in +March 1986, Rockwell said, it has bought 10.4 mln shares for +461 mln dlrs. At present prices, it said, the program would +reduce the presently outstanding 140 mln common shares by about +seven pct. Since November 1983, the company has repurchased +18.1 mln shares for 672 mln dlrs, it said. + Rockwell said the stock will be repurchased through open +market and private transactions. + Rockwell said the repurchased shares will be available for +potential acquisitions, stock options, employee benefit +programs, conversion of convertible securities and other +purposes. + The company said, "We continue to view our repurchase +program as an integral part of our long term goal of improving +shareholder values." + Rockwell said the program "complements our aggressive +program of support for the growth plans of our businesses with +capital investments, product and research development +resources, and acquisitions in support of our core businesses." + + Reuter + + + +13-MAR-1987 15:14:20.63 + +usa + + + + + +F Y +f0237reute +r f BC-VOGTLE-NUCLEAR-PLANT 03-13 0100 + +VOGTLE NUCLEAR PLANT GETS FULL-POWER LICENSE + ATLANTA, March 13 - The Nuclear Regulatory Commission +issued a full-power operating license for Unit 1 of the Vogtle +Electric Generating Plant, said Southern Co <SO> unit Georgia +Power, which is a co-owner of the plant. + Georgia Power said the license allows for completion of +pre-operational testing, which will be followed by full-power +operation. Unit 1 is scheduled to begin commerical operation by +June one, it said. + The other co-owners of the plant are <Olgethorpe Corp>, the +Municpal Electric Authority of Georgia and the city of Dalton. + Reuter + + + +13-MAR-1987 15:19:10.06 + +ukjapanusa + + + + + +F +f0255reute +r f BC-BRITISH-AIRWAYS-<BAB> 03-13 0081 + +BRITISH AIRWAYS <BAB> TO FLY TO TOKYO NON-STOP + NEW YORK, March 13 - British Airways said the British +government reached an agreement on new traffic rights with the +Japanese government which clears the way for non-stop flights +between London and Tokyo. + The flight is scheduled to cut across Siberia, shaving +almost six hours off the previous flight path to 11-1/2 hours, +British Airways said. + The trans-Siberian route is subject to approval by the +USSR, British Airways added. + Under the agreement, British Airways said it will continue +to leave Heathrow daily, but the new non-stop service will +operate on Thursdays and Saturdays starting early June. The +company said return flights will be on Fridays and Sundays. + Reuter + + + +13-MAR-1987 15:20:20.42 + +ukjapan + + + + + +A +f0260reute +h f BC-BRITAIN-WANTS-BANK-RE 03-13 0118 + +BRITAIN WANTS BANK REGULATION DEAL WITH JAPAN + LONDON, March 13 - Britain wants Japan to agree a timetable +for work towards joint rules on capital adequacy for banks +along the lines of a January outline agreement between the U.S +and the U.K., Corporate Affairs Minister Michael Howard said. + Howard told a Nikkei conference on Tokyo financial markets, +"I want to see an agreement between us on what progress is to be +made and the rate at which it will happen." + Japanese vice-minister of finance for international affairs +Toyoo Gyohten told the conference yesterday he was ready to +discuss capital adequacy, but no negotiations were planned and +he could not see how or when agreement would be reached. + Reuter + + + +13-MAR-1987 15:21:39.08 +livestockcarcass +usa + +ec + + + +C G L +f0264reute +u f BC-/U.S.-MEAT-GROUP-TO-F 03-13 0131 + +U.S. MEAT GROUP TO FILE TRADE COMPLAINTS + WASHINGTON, March 13 - The American Meat Institute, AME, +said it intended to ask the U.S. government to retaliate +against a European Community meat inspection requirement. + AME President C. Manly Molpus also said the industry would +file a petition challenging Korea's ban of U.S. meat products. + Molpus told a Senate Agriculture subcommittee that AME and +other livestock and farm groups intended to file a petition +under Section 301 of the General Agreement on Tariffs and Trade +against an EC directive that, effective April 30, will require +U.S. meat processing plants to comply fully with EC standards. + The meat industry will seek to have the U.S. government +retaliate against EC and Korean exports if their complaints are +upheld. + Reuter + + + +13-MAR-1987 15:21:47.30 + +usa + + + + + +F +f0265reute +r f BC-COMMERCE-BANCORP-<COB 03-13 0095 + +COMMERCE BANCORP <COBA> FILES FOR OFFERING + CHERRY HILL, N.J., March 13 - Commerce Bancorp Inc said it +has filed a registration statement with the Securities and +Exchange Commission for a 575,000 share Series B cumulative +preferred stock offering, including 75,000 shares to cover +allotments. + Commerce said it and its banking subsidiaries will use the +proceeds to support their planned growth and for general +corporate purposes. + The bank holding company said each share of preferred +stocks initially will be convertible into one share of Commerce +common stock. + Commerce said the preferred shares will be priced at a +range of 20-22 dlrs a share, with a proposed sale to the public +commencing in early-to-mid April. + Commerce said Butcher and Singer Inc will be the offering's +managing underwriter. + Reuter + + + +13-MAR-1987 15:21:53.56 + +usa + + + + + +F +f0266reute +d f BC-ADIA-SERVICES-<ADIA> 03-13 0080 + +ADIA SERVICES <ADIA> SELLS 500,000 SHARES + MENLO PARK, Calif., March 13 - Adia Services Inc said it +agreed to sell 500,000 shares of common stock to its principal +stockholder, Adia S.A., at a price based on the current market +price. + The sale will raise Adia S.A.'s ownership in the company to +74.7 pct from 72.7 pct, Adia said. + The company also said it intends to use proceeds from the +stock sale to retire debt, for working capital and for general +corporate purposes. + Reuter + + + +13-MAR-1987 15:22:36.13 +earn +usa + + + + + +F +f0268reute +s f BC-MET-PRO-CORP-<MPR>-TO 03-13 0024 + +MET-PRO CORP <MPR> TO PAY REGULAR DIVIDEND + HARLEYSVILLE, Pa., March 13 - + Qtrly 15 cts vs 15 cts prior + Pay May Eight + Record April 24 + Reuter + + + +13-MAR-1987 15:24:00.88 +earn +usa + + + + + +F +f0270reute +h f BC-AILEEN-INC-<AEE>-1SR 03-13 0028 + +AILEEN INC <AEE> 1SR QTR JAN 31 LOSS + NEW YORK, March 13 - + Shr loss 30 cts vs loss 20 cts + Net loss 1,553,000 vs loss 1,031,000 + Revs 10.0 mln vs 8,696,000 + Reuter + + + +13-MAR-1987 15:25:16.54 + +usa + + + + + +A RM +f0271reute +r f BC-INT'L-GAME-TECHNOLOGY 03-13 0065 + +INT'L GAME TECHNOLOGY <IGAM> TO SELL DEBT + NEW YORK, March 13 - International Game Technology said it +filed with the Securities and Exchange Commission a +registration statement covering a 35 mln dlr issue of senior +notes due 1995 and a 25 mln dlr issue of convertible senior +subordinated debentures due 2002. + The company named Drexel Burnham Lambert Inc as sole +manager of the offerings. + Reuter + + + +13-MAR-1987 15:32:32.81 +earn +usa + + + + + +F +f0285reute +u f BC-resending 03-13 0066 + +WOLVERINE WORLD WIDE INC <WWW> 4TH QTR LOSS + ROCKFORD, MICH., March 13 - + Shr loss six cts vs profit 55 cts + Net loss 414,000 vs profit 3,936,000 + Sales 109.4 mln vs 126.8 mln + Year + Shr loss 1.75 dlrs vs profit 55 cts + Net loss 12,589,000 vs profit 3,965,000 + Sales 341.7 mln vs 389.5 mln + NOTE: Year results include 14.0 mln dlr restructuring +charge in 2nd Qtr of 1986 + Reuter + + + +13-MAR-1987 15:32:42.51 + +usa + + + + + +F +f0286reute +r f BC-MEAD-<MEA>-FILES-150 03-13 0094 + +MEAD <MEA> FILES 150 MLN DLR SHELF REGISTRATION + DAYTON, Ohio, March 13 - Mead Corp said it filed a shelf +registration with the Securities and Exchange Commission +covering potential debt securities offerings of up to 150 mln +dlrs. + It said the underwriters for this offerings may include +Smith Barney, Harris Upham and Co Inc, Goldman Sachs and Co +and/or Salomon Brothers Inc. + Mead said proceeds will be used to retire short-term debt, +a portion of which was incurred to finance part of the recent +acquisitions of Ampad Corp and Zellerbach Distribution Group. + Reuter + + + +13-MAR-1987 15:33:15.31 +graincorn +usamexico + + + + + +C G +f0287reute +f f BC-ussr-export-sale 03-13 0012 + +******U.S. EXPORTERS REPORT 122,000 TONNES CORN SOLD TO MEXICO FOR 1986/87 +Blah blah blah. + + + + + +13-MAR-1987 15:34:07.21 +earn +usa + + + + + +F +f0290reute +r f BC-HURCO-COMPANIES-INC-< 03-13 0036 + +HURCO COMPANIES INC <HURC> FIRST QTR NET + INDIANAPOLIS, March 13 - + Shr profit three cts vs loss 18 cts + Net profit 124,000 vs loss 370,000 + Rev 11.3 mln vs 11.7 mln + Avg shares 3,673,000 vs 2,368,000 + Reuter + + + +13-MAR-1987 15:38:11.97 + +usa + + + + + +F +f0295reute +r f BC-ALCIDE'S-<ALCD>-SHELF 03-13 0036 + +ALCIDE'S <ALCD> SHELF REGISTRATION EFFECTIVE + NORWALK, Conn., March 13 - Alcide Corp said its shelf +registration of 4,500,000 shares of common has been declared +effective by the Securities and Exchange Commission. + Reuter + + + +13-MAR-1987 15:39:02.46 +acq +usa + + + + + +F +f0298reute +r f BC-MAXTOR-<MXTR>-AGREES 03-13 0107 + +MAXTOR <MXTR> AGREES TO ACQUIRE U.S. DESIGN + SAN JOSE, Calif., March 13 - Maxtor Corp and U.S. Design +Corp <USDC>, said they reached definitive agreement covering +the acquisition of U.S. Design by Maxtor. + They said the arrangement, which is subject to a number of +conditions including U.S. Design shareholder approval, calls +for Maxtor to issue 12 mln dlrs worth of its own common stock +in exchange for all of U.S. Design. + The number of Maxtor shares to be issued will be determined +by the average closing price of Maxtor stock over the 10 +trading day period prior to the day the acquisition becomes +effective, the companies also said. + Reuter + + + +13-MAR-1987 15:39:21.46 +earn +usa + + + + + +F +f0299reute +s f BC-SHARED-MEDICAL-SYSTEM 03-13 0024 + +SHARED MEDICAL SYSTEMS CORP <SMED> SETS PAYOUT + MALVERN, Pa., March 13 - + Qtly div 18 cts vs 18 cts prior + Pay April 15 + Record March 31 + Reuter + + + +13-MAR-1987 15:39:34.41 + +usa + + + + + +F +f0300reute +r f BC-INTERNATIONAL-LEASE-F 03-13 0064 + +INTERNATIONAL LEASE FINANCE <ILFC> PICKS ENGINE + EVENDALE, Ohio, March 13 - International Lease Finance Corp +said it picked the CFM International CFM56-5 high bypass +turbofan engine to power its three new Airbus Industries A320 +aircraft. + International Lease said it is negotiating to buy up to 27 +more A320s. Initial aircraft deliveries are planned for 1991, +the company said. + Reuter + + + +13-MAR-1987 15:40:26.67 + +usa + + + + + +A +f0301reute +d f BC-JWP-<JWP>-SELLS-30-ML 03-13 0053 + +JWP <JWP> SELLS 30 MLN DLRS OF NOTES + LAKE SUCCESS, N.Y., March 13 - JWP Inc said it sold 30 mln +dlrs principal amount of its 9.25 pct senior notes due 1996 to +certain institutional lenders. + The company said about 15 mln dlrs of the proceeds will be +used to pay debt and the balance for general corporate purposes. + Reuter + + + +13-MAR-1987 15:41:03.47 + + + + + + + +F RM +f0302reute +f f BC-******S/P-UPGRADES-UN 03-13 0010 + +******S/P UPGRADES UNION CARBIDE CORP'S 1.2 BILLION DLRS OF DEBT +Blah blah blah. + + + + + +13-MAR-1987 15:41:10.37 + + + + + + + +RM +f0303reute +f f BC-ELECTRICITE-DE-FRANCE 03-13 0014 + +******ELECTRICITE DE FRANCE SAYS IT WILL LAUNCH EURO-COMMERCIAL PAPER PROGRAM ON MONDAY +Blah blah blah. + + + + + +13-MAR-1987 15:41:31.04 + +usa + + + + + +F +f0304reute +d f BC-STORAGE-TECH-<STK>-IN 03-13 0104 + +STORAGE TECH <STK> IN DISCUSSIONS WITH IRS + VAIL, Colo., March 13 - Storage Technology Corp said it is +holding dicussions with the Internal Revenue Service that could +end their dispute over the amount of back taxes owed by the +company. + "We are currently pursuing discussions with the IRS that +could lead to a final solution," Stephen G. Jerritts, president +and chief operating officer said. "Simultaneously, we are +taking all necessary actions to try to expedite the court +appeal process, resolve these issues and allow final court +approval of the plan of reorganization, by our target date of +June 30, 1987," he said. + Last year, Storage Technology's bankruptcy court ruled that +the company owed about 25 mln dlrs in taxes, an amount much +lower than the IRS is seeking. + The IRS has appealed the court's decision. + Jerritts also said his company and <Siemens AG> of West +Germany extended an agreement under which Storage Technology +distributes a laser printer made by Siemens. + Reuter + + + +13-MAR-1987 15:41:46.52 + +usa + + + + + +C M +f0306reute +d f BC-U.S.-EARLY-MARCH-CAR 03-13 0128 + +U.S. EARLY MARCH CAR SALES OFF 2.2 PCT + DETROIT, March 13 - Retail sales of new cars by U.S. +automakers eased 2.2 pct in early March to the weakest levels +since 1983, with industry giant General Motors Corp down 9.3 +pct while Ford Motor Co and Chrysler Corp both had gains. + The decline by GM continued its trend of weaker sales since +the beginning of the 1987 model year, which has forced the +world's biggest corporation to cut its car production several +times through temporary and permanent layoffs at various +plants. + Consumer incentives apparently had some success, analysts +said, as the seasonally adjusted annualized sales rate improved +to 7.5 mln compared with about 7.0 mln in late February. The +eight domestic carmakers sold 8.2 mln units during 1986. + Reuter + + + +13-MAR-1987 15:42:09.99 + +usa + + + + + +F +f0310reute +h f BC-CAPITAL-INVESTMENTS-F 03-13 0038 + +CAPITAL INVESTMENTS FORMS UNIT + BOCA RATON, Fla., March 13 - <Capital Investments +Development Corp> said it formed Bradford-Taylor Clearing House +Inc, a unit that will compile mailing lists for use by the +direct mail industry. + Reuter + + + +13-MAR-1987 15:45:20.31 +earn +usa + + + + + +F +f0315reute +d f BC-WEIGH-TRONIX-INC-<WGH 03-13 0047 + +WEIGH-TRONIX INC <WGHT> 4TH QTR NET + FAIRMONT, MINN., March 13 - + Shr 18 cts vs 16 cts + Net 348,298 vs 308,927 + Sales 4,166,750 vs 3,740,970 + Year + Shr 72 cts vs 52 cts + Net 1,409,867 vs 1,020,096 + Sales 16.5 mln vs 15.0 mln + Avg shrs 1,974,529 vs 1,956,214 + Reuter + + + +13-MAR-1987 15:45:27.49 + +uk + + + + + +RM F A +f0316reute +r f BC-GOLDMAN-SACHS-GIVEN-B 03-13 0099 + +GOLDMAN SACHS GIVEN BOGUS EXXON BONDS IN TRADE + LONDON, March 13 - Goldman Sachs International Corp +received forged bonds of a unit of Exxon Corp <XON> in a trade, +a spokesman for Goldman Sachs and Co Inc said in a telephone +conversation from New York. + He said the transaction left Goldman Sachs International +with an exposure of about 2.2 mln dlrs but that it had +insurance to cover the loss. + The spokesman was responding to an enquiry about an item in +the London "Standard" newspaper, which said Goldman Sachs "is +feared to be the victim of a new multi-million pound City +scandal." + The newspaper also said, "The firm (Goldman Sachs) is +believed to be the paying agent for some 900 bonds issued in +the name of oil giant Exxon which were deposited at banks in +Brussels and have now been found to be forgeries." + The spokesman said that the bonds were delivered to the +firm by a man working on behalf of a third party. He said it +wasn't until the bonds were cleared through Euro-clear (a major +clearing house for the eurobond market) that it was discovered +they were forgeries. + The spokesman also said he believed that the intermediary +had been apprehended by police. However, a spokesman for the +City of London police said he was unaware of such an arrest and +could neither confirm nor deny it. + Last Friday, Exxon Corp said forgeries of a 20-year zero +coupon euronote issued by its Exxon Capital Corp subsidiary +have been discovered in the European market. It also said +Morgan Guaranty Trust Co was the fiscal agent and paying agent +and that Morgan, Euro-clear and Cedel (another major clearing +system) and police in London and Brussels were investigating +the case. + Reuter + + + +13-MAR-1987 15:45:35.38 +livestockcarcass +usa + +ec + + + +F +f0317reute +d f BC-U.S.-MEAT-GROUP-TO-FI 03-13 0109 + +U.S. MEAT GROUP TO FILE TRADE COMPLAINTS + WASHINGTON, March 13 - The American Meat Institute, AME, +said it intended to ask the U.S. government to retaliate +against a European Community meat inspection requirement. + AME President C. Manly Molpus also said the industry would +file a petition challenging Korea's ban of U.S. meat products. + Molpus told a Senate Agriculture subcommittee that AME and +other livestock and farm groups intended to file a petition +under Section 301 of the General Agreement on Tariffs and Trade +against an EC directive that, effective April 30, will require +U.S. meat processing plants to comply fully with EC standards. + + Reuter + + + +13-MAR-1987 15:47:27.24 + +uk + + + + + +A RM +f0322reute +u f BC-EDF-TO-LAUNCH-EURO-CP 03-13 0116 + +EDF TO LAUNCH EURO-CP PROGRAM MONDAY + LONDON, March 13 - <Electricite de France> (EdF) will make +its first offering of Euro-commercial paper in the +international market on Monday, EdF chief financial officer +Daniel Lallier said in a telephone call from Paris. + The program was announced in late January and dealers +expect the company will be pushing to maintain its ability to +obtain some of the finest terms available in the international +markets. + Lallier did not say how much would be offered, although he +has noted that EDF would be cautious because it believes the +market is still in its infancy. In January he said EdF may not +issue more than 300 to 500 mln dlrs of paper this year. + EdF plans to oversee the program itself, with Goldman Sachs +International Corp, Morgan Guaranty Ltd and Salomon Brothers +International Ltd acting as dealers for the general program, +which will be aimed at institutional and retail investors. + Union Bank of Switzerland will act as dealer for a specific +program, which is aimed at smaller retail investors. + Reuter + + + +13-MAR-1987 15:47:50.80 +graincorn +usa + + +cbt + + +C G +f0324reute +b f BC-/CBT-TRADERS-SAY-U.S. 03-13 0138 + +CBT TRADERS SAY U.S. CONSERVATION SIGNUP NEUTRAL + CHICAGO, March 13 - The 11,254,837 acres of highly erodable +farmland submitted to the U.S. Department of Agriculture for +the conservation reserve program was within trade guesses of +10-12 mln and should have an overall neutral impact on grain +and soybean prices Monday, grain traders said. + Farmers enrolled 1,894,764 acres of corn base acreage in +the conservation program to take advantage of a corn bonus +rental payment that was offered by the USDA, which may underpin +new crop futures, they said. + New crop corn prices firmed earlier this week on ideas of a +large sign-up in the program. But traders noted that the poor +yielding acres being set-aside will result in only a modest +decrease in final production figures, since farmers will +concentrate on high yielding land. + Of a total 11,254,837 erodoble acres submitted, usda +accepted 10,572,402 acres into the program at an average rental +payment of 51.17 dlrs per acre. + Farm land signed up to date now totals 19,488,587 acres. + Reuter + + + +13-MAR-1987 15:48:34.01 +earn +usa + + + + + +F +f0330reute +d f BC-MONARCH-AVALON-INC-<M 03-13 0064 + +MONARCH AVALON INC <MAHI> 3RD QTR JAN 31 LOSS + BALTIMORE, March 13 - + Shr loss 11 cts vs profit four cts + Net loss 199,000 vs profit 81,000 + Rev 1.9 mln vs 2.5 mln + Nine months + Shr loss 14 cts vs profit 15 cts + Net loss 261,000 vs profit 273,000 + Rev 6.4 mln vs 7.6 mln + NOTE: Per share information adjusted for three-for-two +stock split on January 31, 1986. + Reuter + + + +13-MAR-1987 15:52:33.91 + +canada + + + + + +E RM +f0336reute +r f BC-bcresources 03-13 0102 + +B.C. RESOURCES HAS NEW 360 MLN DLR CREDIT LINE + VANCOUVER, British Columbia, March 13 - British Columbia +Resources Investment Corp said it successfully concluded +refinancing negotiations with bankers for a new 360 mln dlr +restructured credit facility. + The credit line will be in place for four years to March +31, 1991, but is extendable up to 10 years under certain +circumstances which were not specified by the company. + B.C. Resources said subsidiaries Westar Timber and Westar +Petroleum have settled revised lending agreements, but debt +discussions regarding subsidiary Westar Mining are continuing. + + Reuter + + + +13-MAR-1987 15:53:40.40 + +argentina +machinea + + + + +RM F A +f0338reute +u f BC-ARGENTINE-DEBT-TALKS 03-13 0115 + +ARGENTINE DEBT TALKS DIFFICULT - CENTRAL BANK + BUENOS AIRES, March 13 - Central Bank President Jose Luis +Machinea said negotiations with creditor banks on Argentina's +30 billion dlr private sector foreign debt were difficult. + "There is considerable divergence with the banks. We must +try to get them to lower the spreads," Machinea told Reuter. + He said negotiations with the steering committee for the +country's creditor banks in New York would not end next week. + Machinea leaves for New York tomorrow with Treasury +Secretary Mario Brodersohn to complete Argentina's team at +negotiations with the steering committee for a 2.15 biilion dlr +loan to see the country through 1987. + Machinea said Argentina had World Bank support. He said he +and Economy Minister Juan Sourrouille had discussed Argentina's +loan request with World Bank Vice-President David Knox, who is +currently in Buenos Aires. + Argentina is aiming at four pct growth in 1987 and has said +this target is not negotiable. It has indicated that it would +not put payment of interest due on its foreign debt ahead of +its growth target if the loan was not granted. + The United States and 12 other industrial nations granted +Argentina a 500 mln dlr bridge which was received this week. + Talks on the 2.15 billion dlr lona began in January. + Reuter + + + +13-MAR-1987 15:54:21.09 +crudegasnat-gaswpi +usa + + + + + +C M +f0339reute +r f BC-U.S.-PRODUCER-ENERGY 03-13 0116 + +U.S. PRODUCER ENERGY PRICES RISE IN FEBRUARY + WASHINGTON, March 13 - Prices of wholesale finished energy +goods in the U.S. rose 4.0 pct in February after a 9.8 pct rise +in January, the Labor Department said. + The Producer Price Index for finished energy goods fell by +20.9 pct in the past 12 months. + Heating oil prices rose 3.0 pct in February after a 18.0 +pct rise in January, the department said. + Gasoline prices rose by 5.5 pct last month after a 15.7 +pct January rise, the department said. Natural gas prices rose +1.8 pct after a 4.2 pct rise in January. + Crude oil prices rose 4.4 pct in February, after a 19.7 pct +January rise and were off 21.3 pct from the year ago level. + Reuter + + + +13-MAR-1987 15:55:47.33 + +usa + + + + + +A RM +f0342reute +u f BC-UNION-CARBIDE-<UK>-DE 03-13 0103 + +UNION CARBIDE <UK> DEBT UPGRADED BY S/P + NEW YORK, March 13 - Standard and Poor's Corp said it +upgraded 1.2 billion dlrs of debt of Union Carbide Corp and its +affiliate, DCS Capital Corp. + Raised were the pair's senior debt to BB-plus from +BB-minus. Union Carbide's subordinated debt was upgraded to +BB-minus from B. + S and P said the action reflected several positive factors +which emerged over the past year, including a better balance of +supply and demand in the chemical industry. Union Carbide has +also benefitted from the turnaround in foreign exchange rates +and lower feedstock costs, the agency noted. + Standard and Poor's said the company's asset sales, and +subsequent use of the proceeds for debt reduction, exceeded the +corporate plan of a year ago. + The rating agency also pointed out that Union Carbide's +successful refinancing of more than 2.5 billion dlrs of +long-term debt has resulted in a substantially lower interest +burden. + Reuter + + + +13-MAR-1987 15:56:03.81 + +usa + + + + + +F +f0343reute +u f BC-U.S.-EARLY-MARCH-CAR 03-13 0095 + +U.S. EARLY MARCH CAR SALES OFF 2.2 PCT + By Richard Walker, Reuters + DETROIT, March 13 - Retail sales of new cars by U.S. +automakers eased 2.2 pct in early March to the weakest levels +since 1983, with industry giant General Motors Corp <GM> down +9.3 pct. + Ford Motor Co <F> and Chrysler Corp <C> both had gains. + The decline by GM continued its trend of weaker sales since +the beginning of the 1987 model year, which has forced the +world's biggest corporation to cut its car production several +times through temporary and permanent layoffs at various +plants. + Relatively weaker sales by all of the Detroit Big Three +carmakers have compelled the companies to offer a string of +sales incentives including cash rebates and below-market +interest loans in an effort to reignite the market. + Incentives apparently had some success, analysts said, as +the seasonally adjusted annualized sales rate improved to 7.5 +mln compared with about 7.0 mln in late February. The eight +domestic carmakers sold 8.2 mln units during 1986. + GM said its sales of domestic-built cars in the March 1-10 +period declined to 97,487 from 104,952 a year ago while truck +sales rose 14.4 pct to 40,131 from 35,081. There were eight +selling days in each period. + Despite the lower car sales, the giant automaker had a +bright spot as its Chevrolet division, which is launching a +national sales campaign this month for its new Corsica and +Beretta compact cars, was up almost 21 pct when only +domestic-built cars were counted. GM's Buick division was also +up, by 11.4 pct, while Cadillac was down 7.8 pct, Pontiac was +off 10.8 pct and Oldsmobile plunged 41 pct. + GM also showed an improvement in its market share to 53.6 +pct from 48.1 pct in late February, which analysts said was +partly due to the increasing sales for the new Chevrolets. + Meanwhile, Ford said its car sales rose 5.9 pct to 50,407 +compared with 47,592 a year ago while truck sales gained by +12.6 pct to 35,814 from 31,811. + Number three Chrysler's car sales gained to 0.4 pct to +25,286 from 25,191 while its truck sales gained 15 pct to +15,565 from 13,585. The truck sales were a record for the +period, the company said. + Among the smaller makers, Honda <HMC> said domestic car +sales rose 16 pct to 4,394 from 3,786 and Volkswagen of America +rose 4.9 pct to 849 from 809. + American Motors Corp <AMO> fell 57 pct to 760 from 1,780 +for cars but rose 18 pct in jeep sales to 4,500 from 3,800. + Nissan <NSANY> car sales rose 19.1 pct to 2,137 from 1,794 +and gained 3.6 pct on trucks to 1,686 from 1,628. Toyota +<TOYOY> said it sold 500 U.S.-built cars compared with none a +year ago. + Reuter + + + +13-MAR-1987 15:56:39.68 +cotton +usa + + + + + +C G +f0344reute +u f BC-/U.S.-COTTON-CERTIFIC 03-13 0137 + +U.S. COTTON CERTIFICATE EXPIRATION DATE EXTENDED + WASHINGTON, March 13 - Expiration dates on upland cotton +certificates issued under the 1986 upland cotton program are +being extended, the Agriculture Department announced. + The certificates are being extended because of a shortage +of Commodity Credit Corporation inventory available for +exchange with certificates, USDA undersecretary Danial Amstutz +said. + Presently, upland cotton commodity certificates expire nine +months from the last day of the month of issuance. + Under the new procedure, all current outstanding and all +new upland cotton certificates issued under the 1986 upland +cotton program will have an expiration date of either February +29, 1988, or nine months from the last day of the month in +which the certificate is issued, whichever is later. + Reuter + + + +13-MAR-1987 15:59:24.64 + +usa + + + + + +A RM +f0348reute +u f BC-S/P-DOWNGRADES-MICHIG 03-13 0113 + +S/P DOWNGRADES MICHIGAN GENERAL <MGL> DEBT + NEW YORK, March 13 - Standard and Poor's Corp said it cut +to C from CCC-minus Michigan General Corp's 110 mln dlrs of +10-3/4 pct senior subordinated debentures due 1998. + S and P said if Michigan General's exchange offer for the +debentures is not successful, the firm anticipates it will +default on the June 1 interest payment and will have to seek +protection from creditors under the Federal Bankruptcy Act. + The exchange offer faces numerous obstacles, including the +tender of at least 90 pct of the debentures and additional +financing from lenders, S and P noted. + The company's implied senior debt rating is CCC-minus. + Reuter + + + +13-MAR-1987 15:59:41.96 +earn +italy + + + + + +RM +f0349reute +u f BC-BNL-ANNOUNCES-NET-198 03-13 0083 + +BNL ANNOUNCES NET 1986 PROFITS IN BANK SECTOR + ROME, March 13 - State-owned <Banca Nazionale del Lavoro +BNL> said 1986 profits for its banking activities equalled 155 +billion lire against 146 billion lire in 1985. + Consolidated 1986 results for BNL, which also has interests +in tourism, public works, industrial credit and other sectors, +are expected to be announced later this year. + The results for the banking sector are to be presented at a +shareholders meeting scheduled for April 29. + Reuter + + + +13-MAR-1987 16:00:21.17 +earn +usa + + + + + +F +f0353reute +d f BC-APPLIED-DNA-SYSTEMS-I 03-13 0069 + +APPLIED DNA SYSTEMS INC <ADNA> 4TH QTR LOSS + NEW YORK, March 13 - + Shr loss one ct vs nil + Net loss 148,007 vs loss 58,863 + Revs 198,919 vs 133,071 + Avg shrs 7,476,433 vs 6,633,989 + Year + Shr loss three cts vs loss six cts + Net loss 230,949 vs 424,719 + Revs 666,626 vs 509,971 + NOTE: Amounts include losses of a 50 pct owned scientific +development affiliate, Analytical Biosystems Corp. + Reuter + + + +13-MAR-1987 16:05:31.61 +acq +usa + + + + + +F Y +f0366reute +r f BC-QED 03-13 0094 + +OILMAN HAS 8.7 PCT OF QED EXPLORATION <QEDX> + WASHINGTON, March 13 - Kansas oilman Nicholas Powell told +the Securities and Exchange Commission he has acquired 195,000 +shares of QED Exploration Inc, or 8.7 pct of the total +outstanding common stock. + Powell, who heads Prairie Resources Corp and Mack C. Colt +Inc, both Kansas oil and gas exploration companies, said he +bought the stock for investment purposes. + Powell, who said he has already spent 609,831 dlrs on his +QED stock, said he plans to buy more shares as long as he +considers them to be undervalued. + Reuter + + + +13-MAR-1987 16:05:38.71 + +usa + + + + + +F +f0367reute +d f BC-TEXAS-AIR-<TEX>-NAMES 03-13 0052 + +TEXAS AIR <TEX> NAMES BRITT AIRWAYS PRESIDENT + HOUSTON, March 13 - Texas Air Corp said it named Norman +McInnis as president of its Britt Airways unit, succeeding Bill +Britt, who retired March one. + McInnis, former president of Royale Airlines, most recently +was a consultant to the commuter airline industry. + + Reuter + + + +13-MAR-1987 16:05:59.28 +earn + + + + + + +E F +f0370reute +b f BC-labatt 03-13 0009 + +******JOHN LABATT LTD 3RD QTR SHR DILUTED 32 CTS VS 30 CTS +Blah blah blah. + + + + + +13-MAR-1987 16:06:21.90 + +usa + + + + + +F +f0373reute +d f BC-ARMATRON-<ART>-NEGOTI 03-13 0043 + +ARMATRON <ART> NEGOTIATES NEW CREDIT LINE + MELROSE, Mass., March 13 - Armatron International Inc said +it negotiated a new seasonal line of credit with three lenders +for 10 mln dlrs for working capital requirements to support its +lawn and garden product line. + Reuter + + + +13-MAR-1987 16:06:58.01 +earn +usa + + + + + +F +f0375reute +d f BC-LIFESTYLE-RESTAURANTS 03-13 0049 + +LIFESTYLE RESTAURANTS INC <LIF> 1ST QTR JAN 24 + NEW YORK, March 13 - + Shr loss 31 cts vs loss eight cts + Net loss 1,780,000 vs loss 449,000 + Revs 13.9 mln vs 17.8 mln + NOTE: Current 1st qtr loss included a gain of 870,000 dlrs +and 70,000 dlrs from the sale of restaurant leases. + Reuter + + + +13-MAR-1987 16:07:06.10 + +usa + + + + + +A RM +f0376reute +u f BC-TREASURY-BALANCES-AT 03-13 0085 + +TREASURY BALANCES AT FED ROSE ON MARCH 12 + WASHINGTON, March 13 - Treasury balances at the Federal +Reserve rose on March 12 to 3.038 billion dlrs on March 12 from +2.715 billion dlrs the previous business day, the Treasury said +in its latest budget statement. + Balances in tax and loan note accounts fell to 7.623 +billion dlrs from 8.870 billion dlrs on the same respective +days. + The Treasury's operating cash balance totaled 10.661 +billion dlrs on March 12 compared with 11.586 billion dlrs on +March 11. + Reuter + + + +13-MAR-1987 16:07:38.14 +earn +usa + + + + + +F +f0379reute +r f BC-SIERRA-HEALTH-SERVICE 03-13 0051 + +SIERRA HEALTH SERVICES INC <SIE> 4TH QTR LOSS + LAS VEGAS, Nev., March 13 - + Shr loss 52 cts vs profit six cts + Net loss 2,943,000 vs profit 334,000 + Revs 33.5 mln vs 18.5 mln + Year + Shr loss 1.57 dlrs vs profit 16 cts + Net loss 8,781,000 vs profit 792,000 + Revs 116.0 mln vs 56.5 mln + + Reuter + + + +13-MAR-1987 16:08:43.39 +earn +usa + + + + + +F +f0384reute +d f BC-FIRECOM-INC-<FRCM>-3R 03-13 0049 + +FIRECOM INC <FRCM> 3RD QTR JAN 31 LOSS + NEW YORK, March 13 - + Shr loss two cts vs profit two cts + Net loss 104,874 vs profit 90,470 + Sales 3,154,673 vs 1,666,313 + Nine mths + Shr loss one cent vs profit four cts + Net loss 39,169 vs profit 159,784 + Sales 8,250,003 vs 4,665,553 + Reuter + + + +13-MAR-1987 16:09:02.87 +ipi +brazil + + + + + +RM A +f0385reute +r f BC-BRAZIL-INDUSTRIAL-GRO 03-13 0106 + +BRAZIL INDUSTRIAL PRODUCTION SLOWED IN JANUARY + RIO DE JANEIRO, March 13 - Industrial output in January was +6.09 pct above the same 1986 month after rising 6.71 pct in +December, Brazilian Geography and Statistics Institute figures +show. + The result is in line with the declining trend in the +growth rate since October, the Institute said. + In the 12 months to end-January industrial production was +10.48 pct above the 12 months to end-January last year, while +in calendar 1986 output was 10.89 pct above 1985. + The biggest output rises in the 12 months to end-January +were 23.68 pct in pharmaceuticals and 22.12 pct in machinery. + Reuter + + + +13-MAR-1987 16:10:20.88 +earn +usa + + + + + +F +f0389reute +s f BC-WHEELING-AND-LAKE-ERI 03-13 0045 + +WHEELING AND LAKE ERIE RAILWAY CO <WLE> DIV + ROANAKE, Va., March 13 - + Qtly div 1.4375 dlrs vs 1.4375 dlrs + Pay May 1 + Record April 3 + Note: Dividend paid to all shareholders other than Norfolk +Southern Corp's <NSC> Norfolk and Western Railway Co. + Reuter + + + +13-MAR-1987 16:10:59.71 +earn +usa + + + + + +F +f0391reute +s f BC-GENERAL-CINEMA-CORP-< 03-13 0027 + +GENERAL CINEMA CORP <GCN> CLASS B DIVIDEND + CHESTNUT HILL, Mass., March 13 - + Qtly div class B 13.5 cts vs 13.5 cts + Pay April 30 + Record April 9 + + Reuter + + + +13-MAR-1987 16:11:18.64 +earn +canada + + + + + +E F +f0393reute +u f BC-labatt 03-13 0062 + +<JOHN LABATT LTD> 3RD QTR JAN 31 NET + TORONTO, March 13 - + Shr 36 cts vs 31 cts + Shr diluted 32 cts vs 30 cts + Net 26,158,000 vs 21,798,000 + Revs 1.05 billion vs 844.2 mln + Nine mths + Shr 1.28 dlrs vs 1.22 dlrs + Shr diluted 1.15 dlrs vs 1.08 dlrs + Net 92,779,000 vs 77,971,000 + Revs 3.16 billion vs 2.70 billion + Avg shrs 72.4 mln vs 64.0 mln + Reuter + + + +13-MAR-1987 16:12:28.42 +grainwheat +usasudan + + + + + +C G +f0394reute +u f BC-SUDAN-RECEIVES-50-MLN 03-13 0119 + +SUDAN RECEIVES 50 MLN DLRS IN PL480 AUTHORITY + WASHINGTON, March 13 - Authorizations to purchase 50 mln +dlrs worth of U.S. wheat and wheat flour under Public Law 480 +were issued to Sudan today, the Agriculture Department said. + The authorization provides for 34 mln dlrs -- about 309,000 +tonnes -- worth of wheat, grade U.S. number two or better +(except durum which shall be number three or better). + It also provides for 16 mln dlrs -- about 73,000 tonnes -- +worth of wheat flour. + The contracting period for both commodities is March 20 +through August 31, 1987. The delivery period for wheat is March +20 through September 30, 1987 and for wheat flour is April 10 +through SEptember 30, 1987, USDA said. + Reuter + + + +13-MAR-1987 16:14:48.69 +trade +usa + + + + + +F A +f0399reute +r f BC-TRADE-BILL-TO-CHANGE 03-13 0139 + +TRADE BILL TO CHANGE AGRICULTURE TRADE LAWS + WASHINGTON, March 13 - The House Ways and Means Committee +is moving toward passage of a trade bill that sponsors said was +intended to help open foreign markets to U.S. agricultural +goods and to modify some U.S. agricultural trade laws. + The trade subcommittee voted to require President Reagan to +take into account the potential harm to U.S. agricultural +exports of any trade retaliation he might impose for foreign +unfair trade practices against other domestic industries. + The bill would allow U.S. agricultural producers to seek +government monitoring of imports if there is a reasonable +chance the industry would be harmed by an import surge. + The full Ways and Means Committee is to consider the bill +next week and congressional sources said they expect it will be +approved. + In investigations involving a processed agricultural +product, trade associations of processors or producers would +have to petition for relief from foreign dumping or unfair +duties. + The bill sets out U.S. trade negotiating objectives for +the Uruguay round of talks under the General Agreement on +Tariffs and Trade. It would seek fair trade in agriculture, +seek to discipline restrictive or trade distorting import and +export practices, to eliminate tariffs, subsidies, quotas and +non-tariff barriers. + President Reagan's authority to negotiate a new GATT +agreement would be extended through January 1993 and authority +to negotiate a free trade zone with Canada would be extended +through January 3, 1991. + The bill extends Reagan's authority to negotiate an +international coffee agreement through October 31, 1989. + It allows a refund of import duties paid on raw sugar +imported from November 1, 1977 to March 31, 1985 for production +of sugar or products containing sugar and destined for +re-export. The export of the sugar or products must occur +before Octoer 1, 1991. + Presently, to qualify for the refund the sugar must be +processed within three years after import and exported within +five years. + Agriculture would also benefit from more rapid decisions in +complaints of unfair foreign trade practices or injury from +imports. + Reuter + + + +13-MAR-1987 16:15:15.79 +earn +usa + + + + + +F +f0400reute +r f BC-AMERICAN-CITY-<AMBJ> 03-13 0077 + +AMERICAN CITY <AMBJ> SETS INITIAL PREFERRED DIV + KANSAS CITY, Mo. - March 13 - American City Business +Journals Inc said it declared an initial dividend of 15.4 cts a +share on its recent issue of 1.6 mln shares of convertible +exchangeable preferred stock. + The dividend is payable March 31 to shareholders of record +March 20, American City said, adding that future dividends will +be paid on a quarterly basis. + The preferred stock was issued on February 23. + Reuter + + + +13-MAR-1987 16:16:39.20 +money-supply +usa + + + + + +RM V +f0405reute +f f BC-******U.S.-BUSINESS-L 03-13 0011 + +******U.S. BUSINESS LOANS RISE 377 MLN DLRS IN MARCH 4 WEEK, FED SAYS +Blah blah blah. + + + + + +13-MAR-1987 16:17:16.42 +money-supply +usa + + + + + +RM V +f0407reute +b f US-BUSINESS-LOAN-FULLOUT 03-13 0057 + +U.S. BUSINESS LOANS RISE 377 MLN DLRS + WASHINGTON, March 13 - Business loans on the books of major +U.S. banks, excluding acceptances, rose 377 mln dlrs to 279.085 +billion dlrs in the week ended March 4, the Federal Reserve +Board said. + The Fed said that business loans including acceptances +increased 484 mln dlrs to 281.546 billion dlrs. + Reuter + + + +13-MAR-1987 16:22:34.56 +wpigasnat-gascrudeheat +usa + + + + + +F A Y +f0420reute +r f BC-U.S.-PRODUCER-ENERGY 03-13 0099 + +U.S. PRODUCER ENERGY PRICES RISE IN FEBRUARY + WASHINGTON, March 13 - Prices of wholesale finished energy +goods in the United States were up in February, rising by 4.0 +pct after a 9.8 pct rise in January, the Labor Department said. + The Producer Price Index for finished energy goods has +fallen 20.9 pct in the past 12 months. + Heating oil prices rose 3.0 pct in February after a 18.0 +pct rise in January, the department said. + Gasoline prices rose by 5.5 pct last month after a 15.7 +pct January rise, the department said. Natural gas prices rose +1.8 pct after a 4.2 pct rise in January. + Energy goods at the intermediate stage of processing rose +2.7 pct in February after rising 3.5 pct in January and were +down 16.1 pct over the past 12 months, the Labor Department +said. + Prices for crude energy goods, such as crude oil, coal and +gas at the wellhead, rose 2.6 pct last month after a 10.0 pct +January rise. They were down 11.6 pct from February 1986, the +department said. + At the intermediate stage, liquefied petroleum gas prices +rose 10.1 pct last month after a 5.0 pct January rise and were +41.0 pct below prices a year earlier, the department said. + Residual fuel prices rose 16.7 pct in February after a 13.4 +pct rise a month earlier and were off 17.4 pct in 12 months. + Electric power prices fell 0.3 pct last month, after a 1.3 +pct January decline, and were down 3.6 pct from a year ago. + Crude oil prices rose 4.4 pct in February, after a 19.7 pct +January rise and were off 21.3 pct from the year ago level. + Prices of natural gas at the wellhead rose 1.8 pct in +February after rising 4.2 pct a month earlier and were 14.8 pct +lower than they were 12 months earlier, the department said. + Coal costs were down 0.3 pct last month after rising 0.4 +pct in January and were down 0.8 pct from a year ago. + Reuter + + + +13-MAR-1987 16:23:07.43 +earn + + + + + + +F +f0423reute +b f BC-******WEYERHAEUSER-CO 03-13 0012 + +******WEYERHAEUSER SAID IT SEES SIGNIFICANT INCREASES IN EARNINGS IN 1987 +Blah blah blah. + + + + + +13-MAR-1987 16:26:35.20 + +usaparaguay + + + + + +RM A +f0431reute +r f BC-BANK-OF-AMERICA-<BAC> 03-13 0105 + +BANK OF AMERICA <BAC> SEEKS TO QUIT PARAGUAY + NEW YORK, March 13 - BankAmerica Corp is seeking a buyer +for its branch in Asuncion, Paraguay, a spokesman in Miami for +the bank holding company said. + "We are in ongoing negotiations for the sale of our +Paraguay operations," the spokesman said. He declined to name +the possible buyer. + A sale of the Paraguayan operations, which employ about 80 +people, would be consistent with Bank of America's strategy of +concentrating its international efforts on wholesale banking, +he added. The bank has sold operations in a number of countries +recently, including Italy and Sri Lanka. + Reuter + + + +13-MAR-1987 16:27:23.99 + +usa + + + + + +F +f0437reute +r f '--GE-<GE>-GETS-474.5-ML 03-13 0034 + +GE <GE> GETS 474.5 MLN DLR CONTRACT + WASHINGTON, March 13 - General Electric Co has received a +474.5 mln dlr contract for 172 F-110-GE-100 fighter jet engines +and 32 other jet engines, the Air Force said. + REUTER + + + +13-MAR-1987 16:28:15.51 + +usa + + + + + +F +f0441reute +r f BC-GENERAL-HOST-<GH>-TO 03-13 0094 + +GENERAL HOST <GH> TO APPEAL COURT RULING + STAMFORD, Conn., March 13 - General Host Corp said a +federal district judge in Wichita, Kan., affirmed a preliminary +1984 ruling that the company's Amerian Salt Co unit polluted +groundwater near a plant in Lyons, Kan. + The company said it would appeal the ruling, which calls +for actual damages of 3.1 mln dlrs and punitive damages of 10 +mln dlrs. + General Host believes it has strong grounds for a reversal +of the ruling. It reiterated that it is not including a +provision for losses in its financial statements. + American Salt, part of General Host's AMS Industries Inc +unit, has agreed with the State of Kansas to carry out an +effective clean-up plan, the company said. + In the current ruling, Federal Judge Cecil Miller affirmed +his August 1984 preliminary ruling. + The suit was brought in 1977 by a group of local +landowners, a General Host spokesman said. + Reuter + + + +13-MAR-1987 16:29:46.00 + +usa + + + + + +F +f0448reute +d f BC-MOBIL-<MOB>-GETS-107. 03-13 0028 + +MOBIL <MOB> GETS 107.2 MLN DLR CONTRACT + WASHINGTON, March 13 - Mobil Oil Corp has received a 107.2 +mln dlr contract for jet fuel, the Defense Logistics Agency +said. + REUTER + + + +13-MAR-1987 16:31:43.02 + +usa + + + + + +F +f0454reute +h f BC-IOMEGA-<IMOG>-PRESIDE 03-13 0060 + +IOMEGA <IMOG> PRESIDENT RESIGNS FOR NEW POST + ROY, Utah, March 13 - Iomega Corp said its president, +Gabriel Fusco, resigned as president to become chairman and +chief executive officer of <Sequoia Systems>. + Fusco was president and chief executive officer of Iomega +between April 1983 and January 1987, and will remain on the +company's board of directors. + + Reuter + + + +13-MAR-1987 16:33:42.42 +earn + + + + + + +F +f0461reute +f f BC-varity 03-13 0010 + +******VARITY EXPECTS TO REPORT 4TH QTR AND FULL-YEAR 1986 LOSS +Blah blah blah. + + + + + +13-MAR-1987 16:36:20.34 + +usa + + + + + +A RM +f0467reute +r f BC-GUILFORD-MILLS-<GFD> 03-13 0087 + +GUILFORD MILLS <GFD> TO SELL CONVERTIBLE DEBT + NEW YORK, March 13 - Guilford Mills Inc said it filed with +the Securities and Exchange Commission a registration statement +covering a 60 mln dlr issue of convertible subordinated +debentures. + Proceeds will be used to repay certain indebtedness and +increase working capital, as well as for general corporate +purposes. + Guilford Mills said it expects the issue will be offered +later this month. The company named Bear, Stearns and Co as +lead underwriter of the offering. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-006.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-006.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-006.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-006.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2012 @@ + + +17-MAR-1987 10:59:37.95 + +usa + + + + + +A RM Y +f5264reute +r f BC-VALERO-ENERGY-<VLO>-D 03-17 0110 + +VALERO ENERGY <VLO> DEBT UPGRADED BY MOODY'S + NEW YORK, March 17 - Moody's Investors Service Inc said it +upgraded Valero Energy Corp's 120 mln dlrs of debt. + Moody's cited an improved leverage position that will +result from Valero's sale of its Valero Natural Gas subsidiary +to Valero Natural Gas Partners L.P., the partial sale of units +of that partnership to the public, and the simultaneous sale of +first mortgage bonds to institutional investors. + Raised were Valero-backed tax-exempt economic development +revenue bonds of Vincennes, Ind, to Baa-3 from B-1, Valero's +subordinated debt to Ba-1 from B-2 and depository preferred +stock to Ba-1 from B-2. + Reuter + + + +17-MAR-1987 11:01:59.32 + +usa + + + + + +F +f5272reute +r f BC-NL-<NL>-FILES-SUITS-A 03-17 0107 + +NL <NL> FILES SUITS AGAINST UNITED CATALYSTS + HIGHTSTOWN, N.J., March 17 - NL Industries Inc's NL +Chemicals Inc subsidiary said it filed two complaints against +<United Catalysts Inc> for patent infringements and +misappropriation of confidential information. + NL said the patent infringement suit alleges that United's +product, Thixogel DSS, infringes on NL's patent protecting its +Bentone 128 product. + NL said it filed the patent complaint in the United States +District Court for the Western District of Kentucky, and the +misappropriation complaint in Circuit Court, Jefferson County, +Ky. United Catalysts is based in Louisville, Ky. + Reuter + + + +17-MAR-1987 11:02:40.56 +acq +usa + + + + + +A +f5277reute +d f BC-IRVING-TRUST-<V>-BUYS 03-17 0060 + +IRVING TRUST <V> BUYS GULF/WESTERN <GW> UNIT + NEW YORK, March 17 - Irving Bank Corp said it bought the +factoring division of Associates Commercial Corp, a unit of +Gulf and Western Co Inc's Associates Corp of North America. + The terms of the previously announced deal were not +disclosed. + It said the assets were transferred to Irving Commercial +Corp. + + Reuter + + + +17-MAR-1987 11:03:32.29 + +usa + + + + + +F +f5283reute +r f BC-DITTLER-BROTHERS-SEEK 03-17 0098 + +DITTLER BROTHERS SEEK LOTTERY INVESTIGATIONS + ATLANTA, March 17 - Dittler Brothers called for +investigations by the attorneys general of 24 states in +connection with possible violation of state lottery laws by +Bally Manufacturing Corp <BLY> and its subsidiary, Scientific +Games. + Dittler Brothers said it requested the states' law +enforcement chiefs to investigate the companies following last +week's determination by a court-appointed auditor that +Scientific furnished erroneous information to those 24 state +lottery officials. + The states named are spread throughout the country. + Reuter + + + +17-MAR-1987 11:07:22.82 +earn +usa + + + + + +F +f5302reute +d f BC-AMRE-INC-<AMRE>-3RD-Q 03-17 0039 + +AMRE INC <AMRE> 3RD QTR JAN 31 NET + DALLAS, MArch 17 - + Shr five cts vs one ct + Net 196,986 vs 37,966 + Revs 15.5 mln vs 8,900,000 + Nine mths + Shr 52 cts vs 22 cts + Net two mln vs 874,000 + Revs 53.7 mln vs 28.6 mln + Reuter + + + +17-MAR-1987 11:07:47.91 +grainwheat +usa + + + + + +C G +f5304reute +u f BC-KANSAS-LEGISLATOR-TO 03-17 0112 + +KANSAS LEGISLATOR TO OFFER U.S. 0/92 BILL TODAY + WASHINGTON, March 17 - U.S. Rep. Dan Glickman, D-Kan., +chairman of the House Agriculture subcommittee on wheat, +soybeans and feedgrains, said he would today introduce a bill +to apply the so-called 0/92 concept to wheat and feedgrains +producers. + Glickman told Reuters the measure would allow 1987 winter +wheat producers and 1988 feedgrains producers the possibility +of receiving no less than 92 pct of their income support +payments regardless of how much acreage they planted. + He also said his bill would protect program participants +from reduced income payments in the event market prices rose +above the loan rate. + Reuter + + + +17-MAR-1987 11:09:12.10 + +uk + + + + + +RM +f5308reute +b f BC-C.-ITOH-FINANCE-(EURO 03-17 0112 + +C. ITOH FINANCE (EUROPE) ISSUES EUROBOND + LONDON, March 17 - C. Itoh Finance (Europe) Ltd is issuing +a 30 mln dlr deferred coupon eurobond, due March 30, 1992 and +priced at 100.1 pct, Wako International (Europe) Ltd said as +lead manager. + From the third year the bonds will pay interest at a rate +of four pct over six month London interbank borrowed rate +(Libor). They will be issued in denominations of 50,000 dlrs +and will be listed in Luxembourg. Fees of 0.1 pct comprise two +basis points for management and underwriting and eight points +for selling. + Co-leads are Mitsui Trust International and Pru-Bache +Securities International. Pay date is March 30. + The transaction is guaranteed by C. Itoh and Co (Hong Kong) +Ltd, Wako International said. + REUTER + + + +17-MAR-1987 11:09:38.54 + +usa + + + + + +F +f5309reute +r f BC-INTERNATIONAL-LEASE-< 03-17 0083 + +INTERNATIONAL LEASE <ILFC> SELLS TWO JETS + BEVERLY HILLS, Calif., March 17 - International Lease +Finance Corp said it sold two Boeing 737-200 aircraft and +leased one 737-200 in two transactions valued at 28 mln dlrs. + It said the sales will result in a pre-tax gain for its +second fiscal quarter ending May 31. + The two jets were sold for 18 mln dlrs to an investor group +and the third was leased for five years to Pacific Western +Airlines Ltd of Calgary, Alberta, International Lease said. + Reuter + + + +17-MAR-1987 11:10:08.50 + +usa + + + + + +F +f5314reute +r f BC-HITECH-ENGINEERING-<T 03-17 0057 + +HITECH ENGINEERING <THEX> COMPLETES STOCK SALE + MCLEAN, Va., March 17 - HiTech Engineering Co said it +completed the private sale of 200,000 shares of its common +stock to its chairman and president, Francine Prokoski, for +37,500 dlrs. + The company said the proceeds will be used to develop +products under a contract with a private company. + Reuter + + + +17-MAR-1987 11:10:19.73 +earn +usa + + + + + +F +f5316reute +d f BC-PORTA-SYSTEMS-CORP-<P 03-17 0042 + +PORTA SYSTEMS CORP <PSI> 4TH QTR JAN 31 NET + SYOSSET, N.Y., March 17 - + Shr 10 cts vs 11 cts + Net 547,000 vs 579,000 + Sales 11.0 mln vs 11.1 mln + Year + Shr 46 cts vs 52 cts + Net 2,500,000 vs 2,841,000 + Sales 40.7 mln vs 40.5 mln + Reuter + + + +17-MAR-1987 11:14:30.93 + +usa + + + + + +F +f5335reute +r f BC-CALIFORNIA-ENERGY-<CE 03-17 0055 + +CALIFORNIA ENERGY <CECI> INITIAL OFFER STARTS + SANTA ROSA, Calif., March 17 - California Energy Co Inc +said an initial public offering of 1,900,000 common shares is +underway at 7.50 dlrs each through underwriters led by Laidlaw +Adams and Peck Inc. + The geothermal power company said the offering is expected +to close March 19. + Reuter + + + +17-MAR-1987 11:15:07.84 + +usa + + +amex + + +F +f5338reute +r f BC-DIVI-HOTELS-<DVH>-WAR 03-17 0027 + +DIVI HOTELS <DVH> WARRANTTRADE ON AMEX + NEW YORK, March 17 - Divi Hotels NV of Aruba said its +warrants have started trading today on the <American Stock +Exchange>. + Reuter + + + +17-MAR-1987 11:15:13.82 +earn + + + + + + +F +f5339reute +f f BC-******FEDERATED-DEPAR 03-17 0012 + +******FEDERATED DEPARTMENT STORES INC 4TH QTR SHR 3.64 DLRS VS 3.16 DLRS +Blah blah blah. + + + + + +17-MAR-1987 11:15:25.35 +earn +usa + + + + + +F +f5340reute +r f BC-<WARNACO-GROUP-INC>-E 03-17 0072 + +<WARNACO GROUP INC> EIGHT MTHS JAN THREE NET + NEW YORK, March 17 - + Oper net 46.6 mln + Revs 392 mln + 12 mths + Oper net 65 mln vs 47.1 mln + Revs 590 mln vs 591 mln + NOTE: Eight months represents earnings following +acquisition in May 1986 when company went private. + Period ending Jan. 3, 1987 excludes 42.3 mln dlrs of +interest expenses, 41.6 mln dlrs of acquisition adjusments, and +1.7 mln dlrs of income taxes. + Reuter + + + +17-MAR-1987 11:15:35.39 + +ukirelandusa + + + + + +RM +f5341reute +b f BC-BANK-OF-IRELAND-LAUNC 03-17 0099 + +BANK OF IRELAND LAUNCHES U.S. PAPER PROGRAM + LONDON, March 17 - Bank of Ireland said it launched in the +U.S. Market a commercial paper program for up to 200 mln dlrs, +becoming the first Irish issuer of paper in that market. + It said the first tranche of an undisclosed amount was sold +today through Goldman Sachs and Co Inc and that the paper last +week had received the top A-1/P-1 rating of Standard and Poor's +Corp and Moody's Investors Service Inc, respectively. + In a statement, the Bank of Ireland noted that the U.S. +Paper market will provide it with a new source of funding. + REUTER + + + +17-MAR-1987 11:15:43.66 + +ussrusa +james-baker +worldbankimf + + + +A RM +f5342reute +b f BC-BAKER-SAYS-U.S.-OPPOS 03-17 0077 + +BAKER SAYS U.S. OPPOSES SOVIET BANK MEMBERSHIP + WASHINGTON, March 17 - Treasury Secretary James Baker said +the U.S. opposes Soviet membership of the World Bank or the +International Monetary Fund. + Baker told a House foreign affairs subcommittee, "I think +our position is absolutely clear on that ... We do not support +and will not support Soviet membership in the World Bank or the +IMF." + Baker said the U.S. position was "unqualified and +unconditional." + The secretary observed that he has written to congressman +Jack Kemp, a New York Republican who is also a presidential +contender, outlining the U.S. position. + Baker was responding to a questioner who noted that World +Bank President Barber Conable has in the past suggested future +Soviet membership could take place. + Ever since Soviet leader Mikhail Gorbachev suggested Soviet +membership in the General Agreement on Tariffs and Trade -- +which was also rejected -- there has been speculation Moscow +was interested in joining the international institutions. + Reuter + + + +17-MAR-1987 11:16:02.24 +earn +usa + + + + + +F +f5345reute +d f BC-GANTOS-INC-<GTOS>-4TH 03-17 0053 + +GANTOS INC <GTOS> 4TH QTR JAN 31 NET + GRAND RAPIDS, MICH., March 17 - + Shr 43 cts vs 37 cts + Net 2,276,000 vs 1,674,000 + Sales 31.9 mln vs 23.9 mln + Avg shrs 5.3 mln vs 4.5 mln + Year + Shr 90 cts vs 69 cts + Net 4,508,000 vs 3,096,000 + Sales 98.4 mln vs 75.0 mln + Avg shrs 5.0 mln vs 4.5 mln + Reuter + + + +17-MAR-1987 11:16:08.19 +earn +usa + + + + + +F +f5346reute +d f BC-<ATLANTIC-EXPRESS-INC 03-17 0027 + +<ATLANTIC EXPRESS INC> 1ST HALF DEC 31 NET + NEW YORK, March 17 - + Shr not given + Net 788,099 + Revs 15.5 mln + NOTE: Company went public during 1986. + Reuter + + + +17-MAR-1987 11:16:42.57 + +netherlands + + + + + +RM +f5349reute +b f BC-RABOBANK-LAUNCHES-250 03-17 0083 + +RABOBANK LAUNCHES 250 MLN GUILDER BULLET + UTRECHT, Netherlands, March 17 - Rabobank Nederland B.A. +Said it is launching under its own management a 250 mln guilder +eight-year bullet bond with a 6-3/4 pct coupon and priced at +par. + No early redemption is permitted on the bond which will be +paid back in full on April 15, 1995. + Denominations are in 1,000 and five times 1,000 guilders. +Subscription closes March 23, payment is April 15. Listing will +be on the Amsterdam Stock Exchange. + REUTER + + + +17-MAR-1987 11:18:43.18 +acq +usa + + + + + +F +f5358reute +u f BC-SPENDTHRIFT-FARMS-<SF 03-17 0049 + +SPENDTHRIFT FARMS <SFI> GETS BID FOR CONTROL + LEXINGTON, Ky., March 17 - Spendthrift Farm Inc said it has +received three tentative proposals to acquyire control of the +company. + It said it is evaluating the proposals and will not comment +further unless a definitive agreement is reached. + Reuter + + + +17-MAR-1987 11:18:58.30 + +usa + + + + + +F +f5360reute +d f BC-BIOTECHNICA-<BIOT>-HA 03-17 0105 + +BIOTECHNICA <BIOT> HAS NEW AGRICULTURE UNIT + CAMBRIDGE, Mass., March 17 - BioTechnica International said +it established a new subsidiary, BioTechnica Agriculture, to +develop and commercialize microbial and plant products for +improving crops. It said the unit will be based in Overland +Park, Kansas. + It said Charles H. Baker, former president of Rohm and Haas +Co's <ROH> Rohm and Haas Seed Inc affiliate, has been named +president of the new agriculture unit. The company said Baker +will also act for a limited time as president of <Chaco +Enterprises Inc>, formed to acquire the Hybrex hybrid wheat +technology from Rohm and Haas. + Reuter + + + +17-MAR-1987 11:19:09.96 + +usa + + + + + +F +f5361reute +d f BC-SUNWORLD-<SUNA>-HAS-H 03-17 0103 + +SUNWORLD <SUNA> HAS HIGHER LOAD FACTOR + LAS VEGAS, Nev., March 17 - Sunworld International Airways +Inc said its February load factor rose to 53 pct from 46.1 pct +a year earlier and its year-to-date load factor was up to 52 +pct from the 51 pct posted for the same period last year. + February revenue passenger miles rose to 27.4 mln from 26.4 +mln, but year-to-date revenue miles declined to 59.7 mln from +60.4 mln. + Available seat miles for the month dropped to 51.7 mln from +57.2 mln and for the two month period available miles totaled +115.3 mln, down from last year's 119.2 mln, Sunworld +International said. + Reuter + + + +17-MAR-1987 11:22:34.18 +crude +usa + +opec + + + +F Y +f5371reute +u f BC-SHEARSON-LEHMAN-UPGRA 03-17 0109 + +SHEARSON LEHMAN UPGRADES U.S. OIL STOCKS + NEW YORK, March 17 - Analyst Sanford Margoshes of Shearson +Lehman Brothers said he recommended a number of oil stocks +today now that it is apparent that OPEC has succeeded in +holding to its prescribed production quotas. + "It is clear that OPEC, through jawboning and quota +restraint, will boost the price of oil," Margoshes said. + Prices of oil stocks rose sharply today in response to +higher oil prices and optimism about OPEC quotas. Margoshes +said he recommends Imperial Oil <IMO.A>, up 1/2 to 49-1/8, +Standard Oil Co <SRD>, 7/8 to 62-3/4, Exxon <XON> one to +83-1/8, and Chevron <CHV> 1-1/8 to 54-7/8. + In addition, Margoshes said he recommended Atlantic +Richfield <ARC> on a short-term basis, though he said he is +still suspect about its debt situation. Atlantic Richfield rose +1-3/4 to 77. + He said "the market could come down to test the 16 dlr a +barrel level again, but the main thrust of investing in oil is +positive right now. Before the year is out we will see higher +oil prices." + He noted that belief that the government is interested in +raising the strategic reserves is factored into the rise in oil +stocks today. + Reuter + + + +17-MAR-1987 11:24:30.25 + +belgiumwest-germany +kohldelors +ec + + + +RM +f5381reute +u f BC-EC-COMMISSION-TO-VISI 03-17 0104 + + EC COMMISSION TO VISIT BONN AT KOHL'S INVITATION + BRUSSELS, March 17 - West German Chancellor Helmut Kohl has +invited the European Community's 17-man Commission for talks in +Bonn next month in a bid to repair strained relations, EC +diplomats said. + The Commissioners, led by President Jacques Delors, will +pay a two-day visit to Bonn on April 1-2 when they were due for +a meeting with the principal West German cabinet members. + The meeting, the first of its kind between the Commission +and the government of a member state, was originally meant to +focus on problems posed by West Germany's federal constitution. + But they said the meeting was now likely to be dominated by +Commission plans to restructure the EC's exhausted finances and +its costly farm policy, which have provoked strong opposition +from Bonn. + Kohl has written two letters to Delors, complaining that +the plans would hit West German farmers hard. His farm +minister Ignaze Kiechle has publicly criticised the two German +members of the Commission for failing to oppose them. + This caused protest from Brussels where the Commission +tries to guard the independence of its members from the +governments that nominate them. + REUTER + + + +17-MAR-1987 11:25:02.06 +copper +zambiasouth-africa + + + + + +C M +f5382reute +u f BC-ZAMBIAN-MINISTER-CONF 03-17 0109 + +ZAMBIAN MINISTER CONFIRMS COPPER DIVERSION + LUSAKA, March 17 - Minister of Mines Patrick Chitambala +confirmed that Zambia had ended copper shipments through South +Africa and announced that its state-run mining company had +closed down its liaison office in the white-ruled republic. + He told the official Times of Zambia newspaper in an +interview the government was diverting all mineral exports +along rail routes to Dar es Salaam in Tanzania and Beira in +Mozambique. Chitambala declined to say what volume of copper +and other minerals were being shipped through these two ports, +but he said there had not been any problem with the new +arrangements. + "So far our copper has been reaching its destinations +without hindrance," he told the Times. + The Times of Zambia quoted unnamed sources as saying Zambia +exported 100,000 tonnes of copper through Dar es Salaam and +17,000 through Beira in the last quarter of 1986. Diplomatic +sources in Lusaka had earlier expressed doubts over Zambia's +ability to ship all its copper through Beira and Dar es Salaam +without causing massive bottlenecks at the ports. + Chitambala also said that the state-run Zambia Consolidated +Copper Mines (ZCCM) had closed its liaison office in +Johannesburg, since it was now redundant. + Reuter + + + +17-MAR-1987 11:25:49.37 +acq + + + + + + +F +f5385reute +f f BC-******TAFT-CHAIRMAN'S 03-17 0012 + +******TAFT CHAIRMAN'S GROUP RAISES TAFT BROADCASTING BID TO 150 DLRS/SHARE +Blah blah blah. + + + + + +17-MAR-1987 11:26:47.36 +acq +usa + + + + + +F +f5388reute +d f BC-DEVELOPMENT-CORP-OF-A 03-17 0078 + +DEVELOPMENT CORP OF AMERICA <DCA> MERGED + HOLLYWOOD, Fla., March 17 - Development Corp of America +said its merger with Lennar Corp <LEN> was completed and its +stock no longer existed. + Development Corp of America, whose board approved the +acquisition last November for 90 mln dlrs, said the merger was +effective today and its stock now represents the right to +receive 15 dlrs a share. + The American Stock Exchange said it would provide further +details later. + Reuter + + + +17-MAR-1987 11:27:21.25 + +usabrazil +james-baker + + + + +RM A +f5391reute +u f BC-TREASURY'S-BAKER-CALL 03-17 0090 + +TREASURY'S BAKER CALLS FOR NEW BRAZIL PLAN + WASHINGTON, March 17 - Treasury Secretary James Baker said +that Brazil should come up with a new economic plan if it hopes +to get additional assistance from commercial banks and others. + In testimony before a House appropriations subcommittee, +Baker said that he had given that message to Brazilian +officials earlier this month when they met for talks in +Washington. + He said that the so-called Cruzado Plan had worked for a +while, but that new efforts by the government are now required. + Baker made it clear that he backed the decision by the +Paris Club official creditors to reschedule loans to Brazil, +even though the country later froze its payments to commercial +bank creditors. + He said that the official loans are being serviced and that +this was a result of the rescheduling. + Reuter + + + +17-MAR-1987 11:27:51.45 + +usa + + +nasdaq + + +F +f5394reute +d f BC-CALIFORNIA-MICRO-<CAM 03-17 0031 + +CALIFORNIA MICRO <CAMD> TRADES ON NASDAQ + MILPITAS, Calif., March 17 - California Micro Devices Corp +said its stock was included in the March 17 expansion of the +NASDAQ market system. + Reuter + + + +17-MAR-1987 11:28:09.98 +acq +usa + + + + + +F +f5396reute +d f BC-TEVA-<TEVIY>-SELLS-PR 03-17 0067 + +TEVA <TEVIY> SELLS PROMEDICO SUBSIDIARY + NEW YORK, March 17 - Teva Pharmaceutical Industries Ltd, +based in Israel, said it sold its wholly owned Promedico +subsidiary, to foreign investors for four mln dlrs. + It said the book value of the unit is about 2.2 mln dlrs. + Teva said it will continue to market Promedico's products +through its wholly owned subsidiary, Salomon, Levin and Elstein +Ltd. + + Reuter + + + +17-MAR-1987 11:28:28.04 + +usa + + + + + +F +f5398reute +d f BC-ERC-<ERC>-GETS-THIRD 03-17 0083 + +ERC <ERC> GETS THIRD CONTRACT + FIARFAX, Va., March 17 - ERC International said its +Facilities Management Group subsidiary, ERCI Facilities Service +Corp, was awarded a 2.1 mln dlrs contract in the drug +repository field, the third such contract in nine months. + It said that under the five-year contract, it will manage +the National Cancer Institutes's pre-clinical drug repository +of more than 400,000 drugs and chemicals used to test antitumor +activity in animals and tissue culture systems. + Reuter + + + +17-MAR-1987 11:29:40.89 + +usa +james-baker + + + + +A RM +f5404reute +u f BC-BAKER-SAYS-U.S.-NOT-S 03-17 0096 + +BAKER SAYS U.S. NOT SEEKING IADB VETO + WASHINGTON, March 17 - Treasury Secretary James Baker said +that the United States was not seeking loan veto in its +negotiation for voting power at the Inter-American Development +Bank. + Discussing the ongoing negotiation, Baker said the U.S. +position is that the countries that pay in the most should have +the greatest say over the loan decisions. + The U.S. is seeking the power to block loan votes with one +other country, and the issue will be discussed in Miami later +this month at the annual meeting of the Latin development bank. + Reuter + + + +17-MAR-1987 11:31:47.85 +earn +usa + + + + + +F +f5409reute +r f BC-NEW-MILFORD-SAVINGS-B 03-17 0025 + +NEW MILFORD SAVINGS BANK <NMSB> RAISES PAYOUT + NEW MILFORD, Conn., March 17 - + Qtly div 25 cts vs 20 cts prior + Pay April 21 + Reord March 27 + Reuter + + + +17-MAR-1987 11:32:05.95 +acq +usa + + + + + +F +f5411reute +b f BC-K-MART-<KM>-ENDS-TALK 03-17 0057 + +K MART <KM> ENDS TALKS TO SELL STORES + CHICAGO, March 17 - K Mart Corp said recent talks to sell +65 remaining Kresge variety stores and their underlying real +estate to F.W. Woolworth Co <Z> have ended. + Robert Stevenson, K Mart vice president, told Reuters the +talks, which began about six weeks ago, ended. He declined to +give a reason. + Kresge is the forerunner of what is now the K Mart chain. +The name was changed to K Mart in 1977, Stevenson said. + "We're selling and buying real estate in our real estate +division, and Woolworth was interested in some of our +properties. The talks were of a casual nature," he said. + The 65 Kresge stores that are scattered around the country +in downtown and suburban locations, he said. + Stevenson said K Mart will continue to operate the stores. +"The stores are profitable. The only decision K Mart has made +is that we will continue to operate them," he said + Kresge had been a nationwide chain of 900 variety stores. + Reuter + + + +17-MAR-1987 11:32:21.74 +earn +usa + + + + + +F +f5413reute +d f BC-INSTITUTE-OF-CLINICAL 03-17 0081 + +INSTITUTE OF CLINICAL PHARM PLC <ICPYY> YEAR + NEW YORK, March 17 - + Shr 20 ct vs 27 cts + Net 1,048,000 vs 1,368,000 + Revs 9,457,000 vs 5,386,000 + NOTE: Dollar amounts converted from Irish pounds at noon +buying rate of the Federal Reserve Bank of New York at Dec 31, +1986, of 1.4105 dlr per one Irish pound. The equivalent rate at +Dec 31, 1985, was 1.2470 dlr equals one Irsh pound. Full name +of company is The Institute of Clinical Pharmacology PLC, based +in Dulbin, Ireland. + Reuter + + + +17-MAR-1987 11:33:26.98 + + +lawson + + + + +RM +f5419reute +f f BC-LAWSON-SAYS-U.K.-BASI 03-17 0012 + +******LAWSON SAYS U.K. BASIC RATE INCOME TAX TO BE CUT TO 27 PCT FROM 29 PCT +Blah blah blah. + + + + + +17-MAR-1987 11:36:40.54 +gnpbop +uk +lawson + + + + +C +f5431reute +b f BC-U.K.-GROWTH-RATE-SEEN 03-17 0113 + +U.K. GROWTH RATE SEEN AT THREE PCT THIS YEAR + LONDON, March 17 - Chancellor of the Exchequer Nigel +Lawson, presenting his budget for fiscal 1987/88 to parliament, +said U.K. Economic growth was forecast at three pct in calendar +1987. + He said the Treasury expected a current account balance of +payments deficit in 1987 of 2.5 billion stg, after a 1.1 +billion shortfall in 1986. Inflation is expected to be 4.0 pct +at the end of 1987, he said, adding it may exceed 4.5 pct by +the summer before falling back to 4.0 pct by the end of the +year. + The planned PSBR for 1987/88 was 4.0 billion stg unchanged +when compared with the likely outturn for fiscal 1986/87, +Lawson said. + Although no explicit target was set for the broad sterling +M3 money supply, Lawson said broad money will continue to be +taken into account in assessing monetary conditions as well as +the exchange rate. + The low outturn of the PSBR in 1986/87 was mainly due to +the buoyancy of non-oil tax revenues in general, and the +corporation tax paid by an increasingly profitable business +sector in particular. + On oil prices, Lawson said he was sticking to his earlier +assumption that North Sea crude prices will average 15 dlrs per +barrel in calendar 1987. The treasury would strive to keep the +PSBR at 1.0 pct of GDP in future, he said. + Reuter + + + +17-MAR-1987 11:39:54.35 + +usa + + + + + +F +f5452reute +r f BC-BUTLER-<BTLR>-TO-BUY 03-17 0061 + +BUTLER <BTLR> TO BUY BACK 600,000 SHARES + KANSAS CITY, MO., March 17 - Butler Manufacturing Co said +its board authorized the repurchase of up to 600,000 shares, or +12 pct of its outstanding common stock. + It said purchases will be made in open market and private +transactions through Kidder, Peabody and Co. + Butler currently has 5,001,848 shares outstanding. + Reuter + + + +17-MAR-1987 11:40:05.58 + +usa + + + + + +F +f5453reute +r f BC-ROYAL-PALM-<RPAL>-SAY 03-17 0105 + +ROYAL PALM <RPAL> SAYS RESTRICTIONS LIFTED + WEST PALM BEACH, Fla., March 16 - Royal Palm Savings +Association said it has entered into an agreement with the +Federal Home Loan Bank Board and the Florida Department of +Banking and Finance resulting in the removal of limitations +which had severely restricted its growth and lending. + The company said it will now be permitted to grow about 70 +mln dlrs in calendar 1987, or about 15 pct for this year, and +at the same rate thereafter. + Royal Palm said under the accord, it will resume commercial +and nonresidential lending but will place substantial emphasis +on residential loans. + The company said it agreed to adopt new policies and +procedures but did not elaborate. + Reuter + + + +17-MAR-1987 11:40:26.25 + +west-germany + + + + + +G +f5457reute +d f BC-WEST-GERMAN-FEED-OUTP 03-17 0102 + +WEST GERMAN FEED OUTPUT SEEN DECLINING + BONN, March 17 - West German feedstuffs production is +expected to decline further after it dropped to 16.5 mln tonnes +in 1986 from 16.7 mln the previous year, the West German Feed +Stuff Industry Association (MFI) said. + Association president Ulrich Wagner told a news conference +West Germany's rate of self sufficiency in the feedstuffs +sector is expected to fall below 70 pct this year from around +75 pct in 1986. + He attributed the expected decline to introduction of milk +quotas in 1984, aimed at curbing EC milk production, and to +cheaper imports from abroad. + "Our industry's output is not even close to stagnation," +Wagner said. "In the long term we expect annual production to +decline steadily." + The only sector which saw a slight increase last year, by +0.6 pct, was feed for poultry which rose to 3.25 mln tonnes +from 3.23 mln, he said. + Wagner predicted that the sales volume in feed for dairy +cattle will decline even more this year because of the further +cut in milk output from April. + Reuter + + + +17-MAR-1987 11:40:46.06 +earn +usa + + + + + +F +f5460reute +d f BC-ICN-BIOMEDICALS-INC-< 03-17 0034 + +ICN BIOMEDICALS INC <BIMD> 1ST QTR FEB 28 NET + COSTA MESA, Calif., March 17 - + Shr 10 cts vs eight cts + Net 856,000 vs 574,000 + Sales 9,593,000 vs 9,232,000 + Avg shrs 8,809,000 vs 6,969,000 + Reuter + + + +17-MAR-1987 11:40:52.10 +earn +usa + + + + + +F +f5461reute +d f BC-APPLIED-CIRCUIT-TECHN 03-17 0043 + +APPLIED CIRCUIT TECHNOLOGY <ACRT> 1ST QTR LOSS + ANAHEIM, Calif., March 17 - Period ended January 31. + Shr loss two cts vs loss 12 cts + Net loss 192,370 vs loss 1,494,146 + Revs 6,751,830 vs 2,278,842 + Note: Full name Applied Circuit Technology Inc. + Reuter + + + +17-MAR-1987 11:40:57.61 +earn +usa + + + + + +F +f5463reute +s f BC-FRISCH'S-RESTAURANTS 03-17 0025 + +FRISCH'S RESTAURANTS INC <FRS> SETS QUARTERLY + CINCINNATI, March 17 - + Qtly div 5-1/2 cts vs 5-1/2 cts prior + Pay April 16 + Record April Six + Reuter + + + +17-MAR-1987 11:42:11.71 +money-fxinterest + + + + + + +V RM +f5465reute +f f BC-******FED-SETS-TWO-BI 03-17 0010 + +******FED SETS TWO BILLION DLR CUSTOMER REPURCHASE, FED SAYS +Blah blah blah. + + + + + +17-MAR-1987 11:44:54.11 + +usa + + +nyse + + +F +f5478reute +u f BC-NYSE-REVIEWS-PROGRAM 03-17 0037 + +NYSE REVIEWS PROGRAM TRADING + NEW YORK, March 17 - The <New York Stock Exchange> said it +is undertaking a review of the long-term effects on securities +markets of computer-driven trading techniques known as program +trading. + The NYSE said, "The study will review major new trading +techniques involving programmed portfolio hedging and index +arbitrage for their potential benefits and risks to the +financial system. It will also explore the regulatory +implications of these trading techniques and whether their +increased use could possibly lead to market abuse." + The exchange said a final report is expected before the end +of 1987. It said program trading is becoming increasingly +important as a market factor. + Reuter + + + +17-MAR-1987 11:45:10.92 +money-fxinterest +usa + + + + + +V RM +f5479reute +b f BC-/-FED-ADDS-RESERVES-V 03-17 0061 + +FED ADDS RESERVES VIA CUSTOMER REPURCHASES + NEW YORK, March 17 - The Federal Reserve entered the U.S. +Government securities market to arrange two billion dlrs of +customer repurchase agreements, a Fed spokesman said. + Dealers said Federal funds were trading at 6-1/16 pct when +the Fed began its temporary and indirect supply of reserves to +the banking system. + Reuter + + + +17-MAR-1987 11:46:13.53 +earn +usa + + + + + +F +f5486reute +u f BC-FEDERATED-DEPARTMENT 03-17 0062 + +FEDERATED DEPARTMENT STORES INC <FDS> 4TH QTR + CINCINNATI, March 17 - Jan 31 end + Shr 3.64 dlrs vs 3.16 dlrs + Net 171.3 mln vs 154.0 mln + Sales 3.44 billion vs 3.23 billion + Avg shrs 47.1 mln vs 48.8 mln + Year + Oper shr 6.23 dlrs vs 5.88 dlrs + Oper net 301.9 mln vs 286.6 mln + Sales 10.51 billion vs 9.98 billion + Avg shrs 48.5 mln vs 48.8 mln + NOTE: Latest year net excludes 14.3 mln dlr charge from +loss on early debt extinguishment. + Net includes charges 15.7 mln dlrs in both periods of +latest year vs charges 23.9 mln dlrs in both periods of earlier +year from merger of divisions. + Investment tax credits three mln dlrs vs 8,900,000 dlrs in +quarter and 4,900,000 dlrs vs 16.4 mln dlrs in year. + Latest year net includes nine mln dlr provision for loss on +disposition of two Abraham and Strauss stores and preopening +expenses for another. + Latest year net includes gain from sale of interest in Fort +Worth, Texas, shopping center of 9,500,000 dlrs. + Latest year net both periods includes gain 9,100,000 dlrs +from sale of interest in Memphis, Tenn., shopping center. + Prior year net includes gain 6,600,000 dlrs on sale of +Boston Store division. + Reuter + + + +17-MAR-1987 11:46:42.56 +earn +usa + + + + + +F +f5492reute +r f BC-CLOTHESTIME-INC-<CTME 03-17 0042 + +CLOTHESTIME INC <CTME> 4TH QTR NET + ANAHEIM, Calif., March 17 - + Shr 12 cts vs 10 cts + Net 1,683,000 vs 1,407,000 + Sales 42.2 mln vs 28.8 mln + Year + Shr 83 cts vs 70 cts + Net 11,908,000 vs 10,005,000 + sales 160.3 mln vs 126.5 mln + Reuter + + + +17-MAR-1987 11:47:10.74 + +canada + + + + + +E F Y +f5496reute +r f BC-phoenix-canada-oil-to 03-17 0103 + +PHOENIX CANADA OIL TO APPEAL RULING + Toronto, March 17 - <Phoenix Canada Oil Co Ltd> said it +intends to appeal a ruling in U.S. Federal District Court of +Delaware on its suit against Texaco Inc <TX>, Chevron Corp +<CHV>, Chevron's Gulf Oil unit and their Ecuador subsidiaries. + The court ruled against Phoenix's claim that a royalty it +held should have entitled it to a share of the 160 mln U.S. +dlrs paid to the defendants when they sold 62.5 pct of their +working interest in Ecuador oil operations, Phoenix said. + However, the court did award Phoenix 1,250,000 Canadian +dlrs in underpayments, the company said. + Phoenix Canada Oil said the fiduciary relationship that +existed between Phoenix, as the royalty owner, and the +defendants, as the working interest operators, was fundamental +in the oil industry and was not reflected in the court's +ruling. + Reuter + + + +17-MAR-1987 11:47:33.87 + +usa + + + + + +F +f5500reute +r f BC-GANNETT-<GCI>-SEEKS-T 03-17 0046 + +GANNETT <GCI> SEEKS TO DOUBLE AUTHORIZED SHARES + WASHINGTON, March 17 - Gannett Co Inc said it will ask +shareholders at the May Seven annual meeting to approve a +doubling of authorized common shares to 400 mln and limitations +on the liability of directors under Delaware law. + Reuter + + + +17-MAR-1987 11:47:39.87 +earn +usa + + + + + +F +f5501reute +d f BC-VIDEO-LIBRARY-INC-<VL 03-17 0055 + +VIDEO LIBRARY INC <VLVL> 4TH QTR LOSS + SAN DIEGO, Calif.,March 17 - + Shr loss two cts vs profit three cts + Net loss 59,299 vs profit 88,843 + Revs 3,487,693 vs 2,123,488 + Year + Shr profit 25 cts vs loss two cts + Net profit 816,395 vs loss 44,541 + Revs 12.2 mln vs 7,413,328 + Avg shrs 3,208,472 vs 2,348,559 + Reuter + + + +17-MAR-1987 11:47:50.38 + +finland + + + + + +RM +f5502reute +r f BC-CONSERVATIVE-GAINS-MA 03-17 0112 + +CONSERVATIVE GAINS MAY SPEED FINNISH MARKET REFORM + By Simon Haydon, Reuters + HELSINKI, March 17 - Conservative gains in Finnish general +elections could speed liberalisation of financial markets, +though there will not be a radical economic restructuring, +conservative officials and economic analysts said. + The conservatives gained nine new seats in parliament after +the two-day elections, which ended yesterday, and political +commentators say social democrat Prime Minister Kalevi Sorsa is +likely to be replaced by a centre-right coalition. + International spokesman Pasi Natri told Reuters: "we are +willing to liberalise the economy as much as possible." + Helsinki analysts said the outgoing centre-left coalition +had introduced major reforms of money and stock markets in its +period of government between 1983 and 1987. + They said Finnish conservatives bore little resemblance to +other European conservative movements and had, for example, +shelved privatisation policies to increase their popularity. + Finnish trade affairs are dominated by its special ties +with its neighbour, The Soviet Union, and a new centre-right +coalition could alter this relationship, the analysts said. + The two countries have a long-term pact under which trade +must be balanced in value. The 1987 accord signed in January +agreed bilateral trade totalling about 30 billion markka. + Finland exports finished products to the USSR, with crude +oil accounting for 80 pct of imports. + The Centre Party said before the elections that Fenno- +Soviet trade would have to be cut because Finland had to trim +exports when the value of Moscow's oil exports to Finland fell. + Finnish financial markets reacted cautiously to the +election news, with little movement in the markka or on the +Helsinki stock exchange. + Securities analysts said the market would respond positively +if a centre-right coalition was formed, but added it was too +early to exclude the possibility that social democrats would +hang on to power. + The spokesman said conservatives favoured legislation +governing the stock market to prevent "casino-style behaviour." + He said the conservatives also favoured the establishment +of an internal market between the Nordic countries. + International capital markets were becoming more and more +important, he said, adding conservatives would speed up the +development of Finland's capial markets. + He said the conservatives supported the bilateral trade ties +with Moscow, but that links with western Europe should be +studied. Finland is a member of the European Free Trade +Association ( EFTA). + Negotiations between the major Finnish political parties +are likely to be protracted, and the shape of the new +government will probably not be established before the start of +April. + Conservatives hold 44 seats now, The Centre Party gained +three to 40 and the social democrats lost one, and now hold 56 +seats. + REUTER + + + +17-MAR-1987 11:47:58.01 + +usabrazil + + + + + +F A RM +f5503reute +b f BC-/BANKAMERICA-<BAC>-MA 03-17 0108 + +BANKAMERICA <BAC> MAY RECLASSIFY BRAZIL LOANS + WASHINGTON, March 17 - BankAmerica Corp may place its +long-term loans to Brazil on nonaccrual status if Brazil +continues to defer interest payments on the loans, the bank +holding company said in a filing with the Securities and +Exchange Commission. + BankAmerica said its outstanding loans to Brazil currently +total about 2.7 billion dlrs, including about 1.5 billion dlrs +in long-term loans and 1.2 billion dlrs in short-term loans. + The Brazilian government announced in February its +intention to stop paying interest temporarily on its long-term +public and private sector commercial bank debt. + "Continued deferral of interest payment on these obligations +could result in the loans being placed on nonaccrual status," +the banking firm said. + BankAmerica said its outstanding loans to Mexico currently +total about 2.5 billion dlrs, of which about 215 mln dlrs of +loans have been reported as either nonaccrual or past due 90 +days or more. + Outstanding loans to Venezuela currently total about 1.3 +billion dlrs, of which 241 mln dlrs of loans have been reported +as either nonaccrual or past due 90 days or more, it said. + Reuter + + + +17-MAR-1987 11:48:39.18 +earn +austria + + + + + +F +f5504reute +d f BC-CHEMIE-LINZ-EXPECTS-S 03-17 0116 + +CHEMIE LINZ EXPECTS SHARPLY HIGHER 1986 LOSS + LINZ, Austria, March 17 - State-owned <Chemie Linz AG> is +likely to record a 1986 loss of some 600 mln schillings +compared with a 340 mln loss in 1985, a company spokesman said. + Falling sales and lower world prices of fertilisers were +largely responsible for the sharp increase, along with the +effects of the dollar's fall which has helped to give U.S. +Fibre producers a competitive edge, he told Reuters. + The firm would have made a small profit in 1985 had it not +been for 456 mln schillings lost by subsidiary <Merx +HandelsgesmbH> on oil trading. Merx has since withdrawn from +the oil market. The firm will announce 1986 results in July. + Reuter + + + +17-MAR-1987 11:49:09.95 +earn +canada + + + + + +E F +f5506reute +d f BC-cabre-exploration-ltd 03-17 0026 + +<CABRE EXPLORATION LTD> SIX MTHS JAN 31 NET + CALGARY, Alberta, March 17 - + Shr 13 cts vs 13 cts + Net 617,000 vs 604,000 + Revs 1,889,000 vs 1,920,000 + Reuter + + + +17-MAR-1987 11:50:08.20 +acq +usa + + + + + +F +f5508reute +b f BC-DUDLEY-TAFT-RAISES-BI 03-17 0108 + +DUDLEY TAFT RAISES BID FOR TAFT BROADCASTING<TFB> + CINCINNATI, Ohio, March 17 - Dudley Taft and Narragansett +Capital Inc said it was prepared to raise its bid to acquire +Taft Broadcasting Co to more than 150 dlrs per share. + Taft, through Theta Co, sent and letter to Taft's board of +directors stating he was committed to purchasing the +broadcasting company and was ready to discuss all aspects of +the purchase. + The company said items to be discussed included price, +structure and form of consideration. Taft said he was prepared +to negotiate a transaction in which Taft Broadcast shareholders +would receive in excess of 150 dlrs per share. + Reuter + + + +17-MAR-1987 11:50:48.87 + +japan +james-baker + + + + +V RM +f5510reute +f f BC-******TREASURY'S-BAKE 03-17 0014 + +******TREASURY'S BAKER SAYS HE IS "QUITE CONFIDENT" JAPAN WILL STIMULATE ITS ECONOMY +Blah blah blah. + + + + + +17-MAR-1987 11:52:58.57 +veg-oil +west-germany + +ec + + + +C G +f5519reute +u f BC-EC-OILS-TAX-NO-LONGER 03-17 0107 + +EC OILS TAX NO LONGER MAJOR ISSUE - ASSOCIATION + BONN, March 17 - The proposed European Community (EC) tax +on vegetable oils and fats is no longer a major issue on the +agenda and the EC Commission merely used it as a threat, the +West German Feed Stuffs Industry Association (MFI) said. + Association chairman Ulrich Wagner told a news conference +the West German feed industry believes the EC does not +seriously contemplate the introduction of such a tax because it +would end in another transatlantic trade war. + "We have just avoided a trade conflict with the U.S. And the +Commission used the tax threat to calm national farm lobbies." + American Soybean Association (ASA) president-elect Wayne +Bennett said yesterday in The Hague that U.S. Soybean producers +were confident the tax would be rejected. + Bennett, who is leading one of three soybean delegations on +a lobbying tour of EC capitals, will also visit Bonn on +Thursday and Friday. + There are indications the Bonn government will also reject +the proposed tax, Wagner said. + Reuter + + + +17-MAR-1987 11:54:05.69 +acq +usa + + + + + +F +f5525reute +d f BC-ALLWASTE-<ALWS>-TO-BU 03-17 0083 + +ALLWASTE <ALWS> TO BUY RELATED COMPANY + HOUSTON, March 17 - Allwaste Inc said it entered into an +agreement in principle to acquire all the outstanding common of +a related air-moving and industrial services company. It did +not disclose the name of the company. + Allwaste, which preforms air-moving and related services, +said it will swap shares of its common, valued at 2.6 mln dlrs, +with the company it is acquiring. + It said the acquisition is subject to negotiation of a +final agreement. + Reuter + + + +17-MAR-1987 11:57:19.33 +crude +usafrance + + + + + +F Y +f5543reute +u f BC-EXXON-<XON>-MAY-CLOSE 03-17 0104 + +EXXON <XON> MAY CLOSE ONE FRENCH REFINERY + NEW YORK, MARCH 17 - Exxon Corp, the world's largest oil +company, said in a published interview today that it was +reviewing its worldwide refinery operations and might decide to +close on of its french refineries. + Lee R. Raymond, Exxon's new president, singled out the +possibility of a closure of one of Exxon's refineries in France +during the interview. + An Exxon spokeswoman confirmed that Raymond had +specifically mentioned refineries in France but said that no +specific refinery had been named. She also said that all of +Exxon's opertations were under constant review. + Exxon currently has two refineries in France, FOS in the +mediterranean with a capcity of 175,000 barrels per day and +Port Jerome west of paris with a similar capacity. + Petroleum Intelligence Weekly, an influential trade +journal, said, in its current issue, that they understood that +Exxon was looking at the possibility of refinery closures in +Antwerp, Southern France or possibly Italy. + Paul Mlotok, oil analyst with Salomon Brothers inc said +that with the closures Exxon made in 1986 in Europe and the +improvement in the European refining situation, its future +profits there should be good. + "Exxon and other major oil companies have closed a bunch of +refineries in Europe, upgraded the rest and shaken many of the +indepedents out of the market. Now with demand for products +rising and efficient operations, Exxon should show superior +earnings," Mlotok said. + "Just after Royal Dutch <RD>, they are seen as one of the +highest grade refiners in Europe," he added. + Industry sources said that the oil companies were likely to +feel greater pressure on their operations in Southern Europe +where competition from the OPEC countries is increasing as +these producers move further into downstream operations. + PIW said that refiners in the Mediterranean can expect +increased shipments from Saudi Arabia and other OPEC export +refineries. + PIW said "sales from Libya, Algeria and elsewhere are +expected to reclaim markets lost to Italian and other European +refiners as a result of the abundance of cheap netback oil last +year." + Reuter + + + +17-MAR-1987 11:58:19.93 + +ussrusa +james-baker +worldbankimf + + + +C +f5551reute +r f BC-BAKER-SAYS-U.S.-OPPOS 03-17 0105 + +BAKER SAYS U.S. OPPOSES SOVIET BANK MEMBERSHIP + WASHINGTON, March 17 - U.S. Treasury Secretary James Baker +said the U.S. opposes Soviet membership of the World Bank or +the International Monetary Fund. + Baker told a House foreign affairs subcommittee, "I think +our position is absolutely clear on that ... We do not support +and will not support Soviet membership in the World Bank or the +IMF." + Baker said the U.S. position was "unqualified and +unconditional." + Baker was responding to a questioner who noted that World +Bank President Barber Conable has in the past suggested future +Soviet membership could take place. + Reuter + + + +17-MAR-1987 11:58:36.43 +veg-oilsoybean +italyusa + +ec + + + +C G +f5552reute +u f BC-ITALY-STANCE-ON-EC-OI 03-17 0100 + +ITALY STANCE ON EC OILS TAX NOT ENCOURAGING-ASA + ROME, March 17 - Italy's response to protests by U.S. +Soybean producers about the proposed European Community (EC) +tax on vegetable oils and fats had not been encouraging, +American Soybean Association (ASA) board chairman George +Fluegel said. + Fluegel, heading one of three U.S. Soybean producer +delegations currently on a lobbying tour of EC countries, told +Reuters in an interview meetings with officials from the +Italian Foreign and Agricultural ministries had not yielded +much to encourage hopes that Italy would vote against the +proposed tax. + Fluegel said his delegation had received a negative +response from the Italian Agriculture Ministry, but that the +attitude of the Foreign Ministry appeared "more realistic." + He said the proposed tax was discriminatory against U.S. +Farmers since it was basically asking them to help finance the +EC's Common Agricultural Policy (CAP) on oilseeds. + Asked which EC countries might be expected to vote against +the proposed tax, he said, "Realistically, from the information +we're getting, it looks like the English, the Germans, +hopefully the Netherlands and Denmark." His delegation also +hoped to convince Belgium to vote against the issue, he added. + Asked what form he thought U.S. Retaliatory action might +take in the event of the EC tax proposal being approved, +Fluegel said industrial as well as agricultural products could +be involved. + U.S. Agriculture Secretary Richard Lyng warned the EC +yesterday it would face serious retaliation if it enacted the +tax. + ASA president-elect Wayne Bennett said yesterday in The +Hague American soybean producers were confident the proposed +tax would be rejected. + Reuter + + + +17-MAR-1987 11:59:00.09 +cotton +israel + + + + + +G +f5556reute +d f BC-ISRAEL'S-FIVE-YEAR-PL 03-17 0142 + +ISRAEL'S FIVE-YEAR PLAN TO BOOST AGRICULTURE + TEL AVIV, March 17 - Israel has drawn up a five-year plan +for 1987-1991 to raise agricultural production by 500 mln dlrs +to 2.7 billion dlrs, an annual rise of 3.4 pct, the Israeli +Ministry of Agriculture said. Agricultural exports are to be +increased by 180 mln dlrs, or 4.8 pct per year on average. + The area planted to cotton is to remain at the 1986 level +of 100,000 to 112,500 acres with exports expected to bring in +80 to 90 mln dlrs per year. The 34 pct decline from the 1985 +level reflects continued water rationing which will remain in +force, the ministry said. + Groundnut production is planned to increase by 13,000 +tonnes, or 57 pct, by 1991 and exports by 9,000 tonnes, or 82 +pct. Maize production is targetted to rise by 48,000 tonnes, or +48 pct, and exports by 34,000 tonnes, or 45 pct. + Reuter + + + +17-MAR-1987 12:02:53.79 + +usa + + + + + +RM A +f5571reute +r f BC-BRUNSWICK-<BC>-FILES 03-17 0078 + +BRUNSWICK <BC> FILES FOR 300 MLN DLR SHELF + SKOKIE, ILL., March 17 - Brunswick Corp said it filed a +registration statement with the Securities and Exchange +Commission on a shelf offering of 300 mln dlr in senior debt +securities. + It said proceeds from the sale will be used mainly for to +replace variable rate indebtedness, primarily privately placed +commercial paper, incurred in connection with the acquisitions +of Bayliner marine Corp and Ray Industries Inc. + Reuter + + + +17-MAR-1987 12:03:31.99 +acq +usa + + + + + +F +f5575reute +u f BC-SOROS-GROUP-HAS-B.F. 03-17 0100 + +SOROS GROUP HAS B.F. GOODRICH <GR> STAKE + WASHINGTON, March 17 - An investor group led by New York +investor George Soros said it acquired a 6.1 pct stake in B.F. +Goodrich Co common stock as an investment. + The group said it paid about 69 mln dlrs for the 1,389,600 +Goodrich shares, which are being held by Quantum Fund N.V., a +Netherlands Antilles investment firm advised by Soros. + It said all the shares were bought between Dec. 29 and +March 9. + The group said it reserved the future right to buy +additional shares and to formulate other purposes or plans +regarding its Goodrich investment. + Reuter + + + +17-MAR-1987 12:04:26.00 + +usa +james-baker + + + + +C +f5584reute +r f BC-BAKER-SAYS-U.S.-NOT-S 03-17 0095 + +BAKER SAYS U.S. NOT SEEKING IADB VETO + WASHINGTON, March 17 - Treasury Secretary James Baker said +the United States was not seeking loan veto in its negotiation +for voting power at the Inter-American Development Bank. + Discussing the ongoing negotiation, Baker said the U.S. +position is that the countries that pay in the most should have +the greatest say over the loan decisions. + The U.S. is seeking the power to block loan votes with one +other country, and the issue will be discussed in Miami later +this month at the annual meeting of the Latin development bank. + Reuter + + + +17-MAR-1987 12:04:41.09 +housing +usa + + + + + +C M +f5585reute +d f BC-BALDRIGE-PREDICTS-SOL 03-17 0111 + +BALDRIGE PREDICTS SOLID U.S. HOUSING GROWTH + WASHINGTON, March 17 - Commerce Secretary Malcolm Baldrige +predicted 1987 will be the fifth successive year for growth in +housing starts after a 2.6 pct rise overall in February starts +to a seasonally adjusted annual rate of 1.851 mln units. + "This year should be the fifth solid year in a row for +homebuilding activity -- with single-family units stronger than +multi-family units," he said in a statement. + Single-family starts rose last month from January levels by +5.6 pct to 1.317 mln units on a seasonally adjusted basis while +multi-family unit starts fell 4.1 pct to 534,000 units, the +department reported. + Reuter + + + +17-MAR-1987 12:05:06.31 +acq + + + + + + +F +f5587reute +f f BC-******TAFT-BROADCASTI 03-17 0014 + +******TAFT BROADCASTING SAYS IT WILL CONTINUE TO REVIEW OPTIONS IN RESPONSE TO LATEST BID +Blah blah blah. + + + + + +17-MAR-1987 12:05:12.02 +acq + + + + + + +F +f5588reute +b f BC-******COURT-ENJOINS-Z 03-17 0012 + +******COURT ENJOINS ZICO INVESTMENT'S TENDER FOR BANCROFT CONVERTIBLE FUND +Blah blah blah. + + + + + +17-MAR-1987 12:06:41.72 +acq +usa + + + + + +F +f5599reute +u f BC-STEINHARDT-GROUP-HAS 03-17 0106 + +STEINHARDT GROUP HAS 6.6 PCT OF HOLIDAY <HIA> + WASHINGTON, March 17 - A group led by New York investor +Michael Steinhardt told the Securities and Exchange Commission +it bought a 6.6 pct stake in Holiday Corp common stock as an +investment. + The group said it paid 114 mln dlrs for its 1.6 mln Holiday +shares, 530,000 of which were bought since Feb. 6. + At the same time, group members said they held short +positions in the stock totaling 830,000 shares. + In addition to Steinhardt himself, the group includes +Steinhardt Partners and Institutional Partners, two investment +firms of which Steinhardt is one of the general partners. + Reuter + + + +17-MAR-1987 12:08:46.37 + +usa + + + + + +V +f5612reute +u f AM-REAGAN-POINDEXTER 03-17 0093 + +POINDEXTER REFUSES TO TESTIFY BEFORE COMMITTEE + WASHINGTON, March 17 - Adm. John Poindexter, a former +National Security Adviser who resigned over the Iran arms +scandal, refused to testify before a House committee probing a +recent expansion of White House and military control over +unclassified information. + "On advice of counsel, I decline to answer that question +pursuant to my constitutional rights under the Fifth Amendment," +Poindexter said four times in response to questions from House +Government Operations Committee chairman Rep. Jack Brooks. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-007.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-007.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-007.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-007.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2010 @@ + + +19-MAR-1987 06:17:22.36 +earn +australia + + + + + +F +f0363reute +u f BC-FAIRFAX-SAYS-HIGHER-T 03-19 0107 + +FAIRFAX SAYS HIGHER TAX HITS FIRST HALF EARNINGS + SYDNEY, March 19 - Media group John Fairfax Ltd <FFXA.S> +said that its flat first half net profit partly reflected the +impact of changes in the Australian tax system. + Fairfax earlier reported net earnings edged up 2.3 pct to +25.94 mln dlrs in the 26 weeks ended December 28 from 25.35 mln +a year earlier although pre-tax profit rose 9.1 pct to 48.30 +mln from 44.29 mln. + Net would have risen 10.1 pct but for the increase in +company tax to 49 pct from 46 and the imposition of the tax on +fringe benefits, paid by employers and not the recipients, the +company said in a statement. + Fairfax also pointed to the cyclical downturn in revenue +growth in the television industry as another reason for the +flat first half earnings. + It said it considered the result satisfactory in view of +these factors. + Fairfax said its flagship dailies, The Sydney Morning +Herald and the Melbourne Age, boosted advertising volume, as +did the Australian Financial Review, and posted extremely +satisfactory performances. Magazines also performed strongly. + But an 8.9 pct rise in television costs outweighed a 4.0 +pct rise in revenue, it said. + Fairfax said a fall in net interest also contributed to net +earnings because group borrowings were reduced following the +receipt of a 96.11 mln dlr capital dividend from <Australian +Associated Press Pty Ltd> (AAP) after the sale of AAP's "B" +shares in Reuters Holdings Plc <RTRS.L>. + This accounted for the 89.32 mln dlr extraordinary profit. + Fairfax said it is too early to predict results for the +full year. Increased borrowings after the recent 320 mln dlr +acquisition of the HSV-Seven television station in Melbourne +will hit earnings but networking with the Channel Sevens in +Sydney and Brisbane will produce some offsetting cost savings. + REUTER + + + +19-MAR-1987 06:20:33.63 + +france + + + + + +RM +f0367reute +b f BC-BANK-OF-FRANCE-SELLS 03-19 0095 + +BANK OF FRANCE SELLS 1.6 BILLION FRANCS CRH TAP + PARIS, March 19 - The Bank of France sold 1.6 billion +francs of 8.50 pct March 1987/99 Caisse de Refinancement +Hypothecaire (CRH) state-guaranteed tap stock at an auction, +the Bank said. + Demand totalled 6.82 billion francs and prices bid ranged +from 93.50 to 96.60 pct. The minimum accepted price was 95.50 +pct with a 9.13 pct yield, while the average price was 95.69. + At the last auction on February 19, two billion francs of +CRH tap stock was sold at a minimum price of 91.50 pct and +yield of 9.73 pct. + REUTER + + + +19-MAR-1987 06:21:45.34 +earn +uk + + + + + +F +f0370reute +b f BC-BRITOIL-PLC-<BTOL.L> 03-19 0045 + +BRITOIL PLC <BTOL.L> 1986 YR + LONDON, March 19 - + Shr 6.56p vs 50.31p + Final div 6p, making 8p vs 13p. + Pre-tax profit 134 mln stg vs 759 mln. + Net profit 33 mln vs 253 mln. + Turnover 978 mln stg vs 1.80 billion. + Extraordinary debit 50 mln vs nil. + Operating profit 149 mln stg vs 756 mln. + Exceptional debit on rationalisation programme 12 mln vs +nil + Petroleum Revenue Taxes 77 mln vs 319 mln, + U.K. Corporation tax and overseas tax 24 mln vs 187 mln, + Note - The net effect of accounting changes in 1986 was to +reduce after tax profits by 47 mln stg. Retained earnings for +prior years were increased by 209 mln. + Extraordinary debit of 50 mln stg related to the decision +to seek a buyer for the company's U.S. Assets. + REUTER + + + +19-MAR-1987 06:29:47.46 +jobs +uk + + + + + +RM +f0389reute +f f BC-(EMBARGOED-FOR-RELEAS 03-19 0023 + + (EMBARGOED FOR RELEASE AT 1130 GMT THURS MARCH 19) ******UK +FEB ADJUSTED UNEMPLOYMENT FELL 44,100 TOTAL 3.07 MLN OR 11.1 +PCT - OFFICIAL + + + + + +19-MAR-1987 06:31:34.81 +income +uk + + + + + +RM +f0391reute +f f BC-UK-UNIT-WAGE/LABOUR-C 03-19 0013 + +******UK UNIT WAGE/LABOUR COSTS ROSE 3.3 PCT IN THREE MONTHS ENDING JAN - OFFICIAL +Blah blah blah. + + + + + +19-MAR-1987 06:32:16.74 +income +uk + + + + + +RM +f0392reute +f f BC-UK-AVERAGE-EARNINGS-R 03-19 0014 + +******UK AVERAGE EARNINGS ROSE 7.6 PCT IN JANUARY, UNDERLYING RISE 7.5 PCT - OFFICIAL +Blah blah blah. + + + + + +19-MAR-1987 06:32:22.15 +money-supply +uk + + + + + +RM +f0393reute +f f BC-U.K.-FEBRUARY-ADJUSTE 03-19 0015 + +******U.K. FEBRUARY ADJUSTED STERLING M3 RISES 2-1/4 PCT, M0 DOWN 3/4 TO ONE PCT - OFFICIAL +Blah blah blah. + + + + + +19-MAR-1987 06:32:48.77 +earn +uk + + + + + +F +f0394reute +u f BC-LEGAL-AND-GENERAL-GRO 03-19 0037 + +LEGAL AND GENERAL GROUP PLC YEAR 1986 + LONDON, March 19 - + Shr 14.58p vs 7.86p + Div 6.5p making 9.75p, an increase of 19.4 pct + Pretax profit 83.2 mln stg vs 31.5 mln + Net after tax 68.6 mln stg vs 37.7 mln + Pretax profit 83.2 mln stg vs 31.5 +mln, consists of - + Long term business 45.9 mln stg vs 43.8 mln + U.S. Long term business 6.2 mln vs 8.9 mln + Fund management 4.7 mln vs 6.5 mln + Short term business 4.7 mln vs loss 29.0 mln + Associate companies 0.9 mln vs 0.8 mln + Shareholders other income and outgoings 0.4 mln debit vs +0.5 mln credit + Exceptional long-term business profit 21.4 mln vs nil + REUTER + + + +19-MAR-1987 06:33:49.51 +money-supply + + + + + + +RM +f0397reute +f f BC-FEB-STERLING-BANK-LEN 03-19 0014 + +******FEB STERLING BANK LENDING UP 2.9 BILLION STG AFTER 1.75 RISE IN JAN - OFFICIAL +Blah blah blah. + + + + + +19-MAR-1987 06:33:54.42 +jobs +uk + + + + + +RM +f0398reute +f f BC-UK-FEB-ADJUSTED-UNEMP 03-19 0014 + +******UK FEB ADJUSTED UNEMPLOYMENT FELL 44,100 TOTAL 3.07 MLN OR 11.1 PCT - OFFICIAL +Blah blah blah. + + + + + +19-MAR-1987 06:34:43.33 +trade +japanusa + + + + + +F +f0399reute +u f BC-JAPAN-TO-ASK-CHIP-MAK 03-19 0118 + +JAPAN TO ASK CHIP MAKERS TO SLASH OUTPUT FURTHER + TOKYO, March 19 - The Ministry of International Trade and +Industry will ask Japanese computer microchip makers to further +slash output in the second quarter in an effort to save its +semiconductor pact with the United States, MITI officials said. + The United States has accused Japan of reneging on the +semiconductor pact by failing to stop the flow of cut-price +Japanese chips to Asian markets. Washington has threatened to +take retaliatory action after April 1. + The pact, agreed last year, calls on Japan to stop selling +cut-price chips in world markets and to increase its imports of +American chips to reduce some of its huge trade surplus. + MITI, anxious to salvage the bilateral agreement, has been +pressing chip makers to limit production in the hope that will +boost domestic chip prices and reduce the incentive to export. + Last month, the ministry asked Japanese chip makers to +reduce first quarter output by 10 pct. To meet that request, +they had to slash production by 20 pct over the final six weeks +of the first quarter. + If that reduced production level were maintained through to +the end of June, second quarter output would come in 10 pct +below that of the first three months of the year. + MITI officials, who declined to be identified, said the +ministry has not yet decided on the extent of the second +quarter cutback. + One said that Japanese chip makers are losing ground in +Asia to South Korean and U.S. Competition just as markets there +are picking up. + MITI has been criticized privately by some Japanese +semiconductor makers for what they see as heavy-handed attempts +to ensure the success of the Japan/U.S. Chip pact. + REUTER + + + +19-MAR-1987 06:39:15.19 +money-supply +uk + + + + + +RM +f0402reute +b f BC-U.K.-CLEARING-BANK-LE 03-19 0067 + +U.K. CLEARING BANK LENDING RISES 1.6 BILLION STG + LONDON, March 19 - Clearing bank sterling lending to the +U.K. Private sector in February is estimated to have risen by +an underlying, seasonally-adjusted 1.6 billion stg after a 1.2 +billion stg rise in January, the Banking Information Service +said. + The unadjusted rise was 1.31 billion stg, compared with an +813 mln stg increase in January. + The Banking Information Service said the adjusted rise of +1.6 billion stg was well above the recent monthly average of +about 1.0 billion stg. + Of the increase, 297 mln stg was accounted for by personal +lending, which the Banking Information Service said was taken +up entirely by lending for home purchases. + Lending for consumption fell around 17 mln stg while about +182 mln stg of credit card debt was repaid during the month. + Lending to the manufacturing industry was up 370 mln stg, +and to leasing companies by 308 mln stg. + The Banking Information Service said February fell within +the governmemnt tax season, so much of the lending was probably +the result of industry's need to pay its tax bills. + Deposits by the private sector rose an unadjusted 1.1 +billion stg in February and by a seasonally-adjusted 1.75 +billion stg. + Deposits from the public sector rose 185 mln stg in +February while deposits from overseas residents rose by 43 mln. + REUTER + + + +19-MAR-1987 06:43:04.94 +jobs +uk + + + + + +RM +f0410reute +b f BC-U.K.-UNEMPLOYMENT-FAL 03-19 0084 + +U.K. UNEMPLOYMENT FALLS IN FEBRUARY + LONDON, March 19 - Unemployment in the U.K. Fell a +provisional seasonally-adjusted 44,100 in February, to total +3.07 mln or 11.1 pct of the workforce, the Employment +Department said. + In January, seasonally adjusted unemployment fell by a +revised 1,100 to 11.3 pct, it said. Initially the January +position was reported as flat. + The unadjusted jobless total, including school leavers, +fell to 3.23 mln, or 11.7 pct, from 3.30 mln, 11.9 pct, in +January. + February was the seventh successive month that seasonally +adjusted unemployment registered a fall. + It was at a peak of 11.7 pct last summer. + Lord Young, the Employment Minister, said there appeared +little doubt the monthly fall, which has been running at about +20,000, will continue. + A Department spokesman said the sharp fall in February +reflected some compensation for the flat figure in January and +continued the downward trend seen in the past six months. + He said the February fall was spread throughout the country +and among men and women. + REUTER + + + +19-MAR-1987 06:47:26.22 +money-supply +uk + + + + + +RM +f0415reute +b f BC-STERLING-M3-UP-2-1/4 03-19 0110 + +STERLING M3 UP 2-1/4 PCT IN FEBRUARY, M0 DOWN + LONDON, March 19 - The main measure of U.K. Broad money, +sterling M3, grew a provisional, seasonally adjusted 2-1/4 pct +in February after a rise of 1.1 pct in January, the Bank of +England said. + The narrow measure, M0, fell a provisional adjusted 3/4 to +one pct after a 0.6 pct drop in January, the Bank said. + Unadjusted annual growth in sterling M3 was 18-3/4 to 19 +pct in the 12 months to February against 17.6 pct in January +while M0 rose four to 4-1/4 pct after a 5.2 pct rise in +January. + Seasonally adjusted, sterling bank lending grew 2.9 billion +stg after a January rise of 1.75 billion. + Of the unadjusted counterparts to sterling M3, bank lending +to the private sector expanded 2.6 billion stg after a 1.4 +billion rise in January, the Bank said. + The public sector borrowing requirement (PSBR) contracted +by 300 mln stg after a contraction of 3.7 billion stg in +January. + Funding - debt sales to the non-bank private sector and +external flows to the public sector - rose by 300 mln stg after +a 1.5 billion stg rise in January. Of this, central government +debt sales to the public sector were expansionary by 400 mln +stg after a 1.3 billion expansion in January, the Bank said. + Other unadjusted counterparts to sterling M3 expanded by +300 mln stg in February after an expansion of 1.3 billion stg +in January, the Bank said. + Unadjusted figures showed a rise in sterling M3 by 1-3/4 to +two pct in February after a drop of 0.8 pct in January. + On the same basis, the figures showed a drop of about 1-1/2 +pct in MO in February after a sharp 6-1/2 pct fall in January. + The Bank said it would publish full, final figures on March +30. + The Bank said non-bank private sector holdings of public +sector debt fell by about 400 mln stg in February while +external flows to the public sector were about 100 mln stg. + Combined with a net PSBR repayment of about 300 mln stg, +the public sector contribution to the growth in sterling M3 was +therefore about flat, the Bank said. + It said seasonally adjusted bank lending, at about 2.9 +billion stg in February, compared with an average of about 2.6 +billion stg a month over the preceding six months. + REUTER + + + +19-MAR-1987 06:53:56.15 +income +uk + + + + + +RM +f0418reute +b f BC-U.K.-EARNINGS-RISE-7. 03-19 0094 + +U.K. EARNINGS RISE 7.6 PCT IN YEAR TO JANUARY + LONDON, March 19 - U.K. Average earnings rose a seasonally +adjusted 7.6 pct in the year to end-January after a 7.4 pct +rise in the year to December, the Department of Employment +said. + The underlying rise was 7.5 pct after 7.75 pct in December. + The January index, base 1980, was set at a provisional +seasonally adjusted 190.4, down from 193.4 in December. + The underlying rise, adjusted for factors such as back-pay +and timing variations, had been steady at 7.5 pct from October +1985 to October 1986. + Unit wage costs in U.K. Manufacturing industry rose 3.3 pct +in the three months to end January, on a year-on-year basis, +after a 3.1 pct rise in the three months to end December, the +Department of Employment said. + In January, the unit wage rise in manufacturing industries +was 3.6 pct, unchanged from the December rise. + The Department said the decline in the underlying rate of +rise in earnings reflected the reduced significance of bonus +payments in January compared with December. + The actual increase reflected teacher pay settlements and +industrial action in the transport and communications sectors +in January 1987. + REUTER + + + +19-MAR-1987 06:55:01.57 + +uk + + + + + +RM +f0419reute +b f BC-MEPC-ISSUES-PARTLY-PA 03-19 0088 + +MEPC ISSUES PARTLY PAID EUROSTERLING BOND + LONDON, March 19 - U.K. Property company MEPC Plc is +issuing a 75 mln stg eurobond due April 15, 2004 paying 9-7/8 +pct and priced at 99-5/8 pct, lead manager County Natwest +Capital Markets said. + The bond is in partly paid form with 25 pct due on April 15 +and the remainder on July 15. It will be available in +denominations of 1,000 and 10,000 stg and will be listed in +London. + Fees comprise 1-1/2 pct selling concession and 1/2 pct each +for management and underwriting. + REUTER + + + +19-MAR-1987 07:01:20.97 + +uk + + + + + +RM +f0426reute +b f BC-NOMURA-INTERNATIONAL 03-19 0108 + +NOMURA INTERNATIONAL FINANCE ISSUES EUROBOND + LONDON, March 19 - Nomura International Finance Plc is +issuing a 150 mln dlr eurobond due April 28, 1992 with a 7-1/4 +pct coupon and priced at 101-1/8 pct, Nomura International Ltd +said as lead manager. + The transaction carries the guarantee of Nomura Securities. +Bonds will be issued in denominations of 5,000 dlrs and will be +listed in London. Payment date is April 27. + Fees comprise 5/8 pct for management and underwriting, +including a 1/8 pct praecipuum, and 1-1/4 pct for selling. + Co-lead is Pru-Bache Securities. The issue is targeted at +Europe, with no Japanese co-managers. + REUTER + + + +19-MAR-1987 07:09:17.93 + +uk + + + + + +A +f0442reute +r f BC-VOLVO-ISSUES-70-BILLI 03-19 0078 + +VOLVO ISSUES 70 BILLION EUROLIRE BOND + LONDON, March 19 - AB Volvo is issuing a 70 billion +eurolire bond due May 31, 1990 paying 10-1/8 pct and priced at +100-1/2 pct, lead manager Banca Commerciale Italiana said. + The bond is available in denominations of two mln lire and +will be listed in London. + Fees comprise 7/8 pct selling concession with 1/2 pct for +management and underwriting combined. + Payment date is April 24 and there will be a long first +coupon. + REUTER + + + +19-MAR-1987 07:13:37.68 + +west-germany +stoltenberg + + + + +RM +f0450reute +u f BC-STOLTENBERG-CONSIDERS 03-19 0101 + +STOLTENBERG CONSIDERS RAISING SOME INDIRECT TAXES + BONN, March 19 - Finance Minister Gerhard Stoltenberg said +he was looking for ways to help finance a planned tax reform +without increasing value-added tax but could not rule out +raising some indirect taxes, for example, on tobacco. + Stoltenberg also told parliament that closing tax loopholes +would contribute towards the 19 billion marks the government is +seeking to finance part of its 44 billion mark tax reform +package for the 1990s. + He confirmed that a temporary and limited increase in the +borrowing requirement was also being considered. + Chancellor Helmut Kohl yesterday said a temporary rise in +borrowing was acceptable but stressed his government would +exercise strict discipline in spending. + New net borrowing was 23.0 billion marks in 1986 compared +with 37.2 billion in 1982. + REUTER + + + +19-MAR-1987 07:16:04.87 +money-fx +uk + + + + + +RM +f0456reute +b f BC-U.K.-MONEY-MARKET-SHO 03-19 0032 + +U.K. MONEY MARKET SHORTAGE FORECAST REVISED DOWN + LONDON, March 19 - The Bank of England said it revised down +its estimate of the deficit in the system today to 400 mln stg +from 450 mln. + REUTER + + + +19-MAR-1987 07:17:51.88 + +west-germany + + + + + +RM +f0457reute +u f BC-WESTLB-ISSUES-50-MLN 03-19 0115 + +WESTLB ISSUES 50 MLN AUSTRALIAN DLR EUROBOND + FRANKFURT, March 19 - A Westdeutsche Landesbank +Girozentrale (WestLB) unit is raising 50 mln Australian dlrs +through a five-year bullet eurobond with a 14-3/8 pct coupon +and priced at 101-1/2, co-lead manager WestLB said. + The bond, for WestLB Finance N.V., Is guaranteed by the +parent. Investors will pay for the bond on April 15, and the +bond pays annual interest on the same day. It matures on that +day in 1992. Fees total two pct, with 1-3/8 points for selling, +and 5/8 for management and underwriting combined. There is a +1/8 pct praecipuum. Listing is in Luxembourg. + Co-lead is Hambros Bank Ltd. Denomination is 1,000 dlrs. + REUTER + + + +19-MAR-1987 07:21:25.03 + +ecuador + + + + + +A +f0462reute +r f BC-DEBT-ECUADOR 03-19 0085 + +ECUADOR SEEKS 450 MLN DLRS IN EMERGENCY CREDIT + By Jorge Aguirre, Reuters + QUITO, March 18 - Ecuador is seeking between 437 and 450 +mln dlrs in loans this year from multilateral organisations and +foreign governments to grapple with economic losses from a +devastating earthquake 13 days ago, a presidential economic +adviser said. + Foreign governments and multilateral organisations hold +one-third of Ecuador's 8.16 billion dlrs total foreign debt, he +said in a news conference at the presidential palace. + But he added that the suspension of payments to private +foreign banks, who hold the rest of the foreign debt, would be +prolonged though the government hoped to negotiate an agreement +with these creditors. + President Leon Febres Cordero says the earthquake cost the +country one billion dlrs in losses and left 1,000 people dead +or missing. + Swett, who was Finance Minister of Ecuador between August +1984 to June 1986, added: "With the private foreign banks there +has been a ceasing of payments by Ecuador. + "We are bringing forward the respective negotiations whose +conclusion we hope finalises in the next few weeks." + Finance Minister Domingo Cordovez said last week that +quake-hit Ecuador sought through negotiations to postpone all +payments due to the private foreign banks in 1987 until next +year. + Although Swett gave no gave details on the latest plan for +negotiations with private foreign banks, he calculated the +suspension of payment to these creditors would save the +government 54.45 billion sucres. + This amount is equal to 363 mln dlrs at the free rate of +150 sucres to the dollar -- the rate Swett said reporters +should use in calculating the dollar equivalent. + The Ecuadorean central bank, which is the institution +remitting debt payments abroad, uses the official rate of 95 +sucres to the dollar for its accounting purposes. At the +official rate, the 54.45 billion sucres' sum equals 573 mln +dlrs. + Ecuador, squeezed by a slide last year in prices for crude, +its main export, suspended payments to private foreign banks in +January. + Swett said the government would also seek to refinance the +1.429 billion dlr section of the debt owed to the Paris Club +group of foreign governments, though it would continue to +service the debt with them. He gave no more details. + The government adopted a tough austerity program last +Friday intended to grapple with the tremor's economic costs. +But the country's labour unions have called a general strike +for Wednesday to press for a suspension of the program. + The 500,000-strong Unitary Workers' Front (FUT) and the +100,000-member General Union of Workers (UGT) called the strike +to cancel the measures, which include a rise in petrol prices +of up to 80 per cent and budget cuts of as much as 10 per cent. + The leftist-led FUT said it was also backing a call by the +Maoist Popular Movement for Democracy (MPD) party, to have +Congress impeach and oust Febres Cordero, a conservative, for +having adopted the austerity measures. + Reuter + + + +19-MAR-1987 07:23:33.05 +gold +south-africa + + + + + +A +f0474reute +r f BC-SOME-7,000-SOUTH-AFRI 03-19 0104 + +SOME 7,000 SOUTH AFRICAN MINERS RETURN TO WORK + JOHANNESBURG, March 19 - Some 7,000 black workers returned +to work after staging one-day strikes at two mines on Monday, +the National Union of Mineworkers and the companies that own +the mines said. + About 6,000 miners resumed work at the Grootvlei gold mine +east of Johannesburg after protesting the transfer of +colleagues to other jobs at the same mine, owners General +Mining Union Corp Ltd <GENM.J> said. + The union said about 1,000 mineworkers at a new coal +facility owned by Anglo American Corp of South Africa Ltd +<ANGL.J> also returned to their jobs on Tuesday. + The workers at Anglo's Vaal Colliery south of Johannesburg +had struck to protest the alleged refusal of officials of the +South African homeland of Transkei to allow miners to attend a +funeral in the homeland, a union spokesman said. + REUTER + + + +19-MAR-1987 07:27:17.84 +acq +japanusa + + + + + +F +f0490reute +r f BC-NIPPON-LIFE-SEEKING-T 03-19 0102 + +NIPPON LIFE SEEKING TIE WITH U.S. SECURITIES HOUSE + TOKYO, March 19 - <Nippon Life Insurance Co> is pursing a +possible link with an American securities house to expand its +overseas investment portfolio, a company spokesman said. + But he declined to comment on rumours the company would +take a 10 pct stake in <Shearson Lehman Brothers>, an +investment banking unit of American Express Co <AXP>. + He said the firm started to sound out several U.S. +Investment banks on capital participation about 18 months ago +and was narrowing the number of prospects, but he did not say +if it had set its sights on one firm. + Nippon Life, Japan's largest life insurer, also plans to +set up a wholly owned investment unit, <Nissei International +America>, in New York next month and subsidiaries in Canada, +Singapore, the Cayman Islands and Jersey this year, he said. + These moves are in line with its long-term strategy to put +more emphasis on overseas investment management as +opportunities at home are declining while the company's assets +are growing. + The company is especially attracted by the scale and depth +of U.S. Money and credit markets and wants to establish a firm +foothold there, the spokesman added. + REUTER + + + +19-MAR-1987 07:28:32.29 + + + + + + + +RM +f0495reute +f f BC-****** 03-19 0009 + +****** Bundesbank says it leaves credit policies unchanged +Blah blah blah. + + + + + +19-MAR-1987 07:28:41.74 + +west-germany + + + + + +F +f0496reute +u f BC-WEST-GERMAN-CAR-OUTPU 03-19 0107 + +WEST GERMAN CAR OUTPUT RISES IN FEBRUARY + FRANKFURT, March 19 - West German car and van production +rose to 389,900 in February from 380,900 in February 1986, the +German Automobile Industry Association VDA said in a statement. + Production of trucks of up to six tonnes fell sharply to +11,500 from 14,600, owing to a cut in production of small +delivery vans of up to two tonnes. Total vehicle output rose to +410,000 from 404,600. + Car and van exports eased to 222,000 in February from +225,000 one year earlier, and exports of trucks of up to six +tonnes dropped to 6,200 from 9.900. Total vehicle exports fell +to 233,200 from 240,300. + Car and van output in January and February eased to 758,700 +from 766,500 in the first two months of 1986. Production of +trucks up to six tonnes fell to 26,300 from 30,700, and total +vehicle production fell to 802,300 from 814,900. + Car and van exports in January and February fell to 424,700 +from 443,300 a year earlier and exports of trucks up to six +tonnes fell to 15,400 from 20,200. Total vehicle exports fell +to 449,200 from 473,500. + REUTER + + + +19-MAR-1987 07:28:55.45 +money-fx + + + + + + +RM +f0498reute +b f BC-U.K.-MONEY-MARKET-GIV 03-19 0083 + +U.K. MONEY MARKET GIVEN 181 MLN STG ASSISTANCE + LONDON, March 19 - The Bank of England said it provided the +money market with 181 mln stg in assistance this morning. + This compares with the Bank's revised shortage forecast of +around 400 mln stg. + The central bank purchased bank bills outright at the new +dealing rates established yesterday. + These comprised 65 mln stg in band one at 9-7/8 pct, 114 +mln stg in band two at 9-13/16 pct and two mln stg in band +three at 9-3/4 pct. + REUTER + + + +19-MAR-1987 07:29:03.46 + +japan + + + + + +F +f0499reute +d f BC-FUJI-BANK-ACCUSED-OF 03-19 0074 + +FUJI BANK ACCUSED OF MISUSE OF TAX FREE RESERVES + TOKYO, March 19 - The Tokyo Regional Taxation Bureau has +imposed a penalty tax on <Fuji Bank Ltd> for alleged improper +use of tax-free reserves, a bank spokeswoman told Reuters. + She declined to reveal the bank's planned response but +another bank official said it has not paid the penalty. + The bank said in a brief statement it believes that its use +of the tax-free reserves is legal. + Financial institutions can set aside 0.003 pct of their +risky loans as tax-free reserves. Fuji said a difference of +understanding exists between the bank and the tax bureau +regarding the use of tax-free reserves. It did not elaborate. + Fuji Bank reported a 72.1 billion yen net profit in the +1985/86 year. Lending totaled 16,120 billion yen. + REUTER + + + +19-MAR-1987 07:29:42.07 +money-supply +philippines + + + + + +A +f0505reute +h f BC-PHILIPPINES'-LIQUIDIT 03-19 0104 + +PHILIPPINES' LIQUIDITY RISES, LOAN DEMAND FALLS + MANILA, March 19 - Liquidity in the Philippines rose in +December while loan demand and short-term lending rates fell, +the Central Bank said. + A bank official said M-3 rose 9.72 pct to a provisional +149.80 billion pesos at the end of December from a month +earlier for a year-on-year gain of 12.72 pct. + She said short-term bank lending rates fell to an +annualised 13.88 pct at the end of December, from 14.58 pct a +month earlier and 19.82 pct at the end of December 1985. + Poor loan demand was illustrated by a rise in commercial +bank reserves, the official said. + The bank official said commercial bank reserves were 22.19 +billion pesos at the end of December, when reserves required +were 21.59 billion. + She said the surplus of 597 mln pesos, compared with a +deficit of 390 mln pesos a month earlier and a deficit of 1.64 +billion at the end of 1985, reflected political uncertainty in +the last quarter of 1986. + Reserve money, the total available to monetary authorities, +was a provisional 52.58 billion pesos at the end of 1986. This +was 5.19 pct up from 49.98 billion at the end of November and +41.85 pct up from 37.09 billion in December 1985. + The bank official noted M-3, which includes M-1 money +supply, plus savings, time deposits and deposit substitutes. +Was 132.88 billion pesos at the end of December 1985. + M-1 money supply rose a provisional 17.3 pct to 42.86 +billion pesos at the end of December 1986 from 36.52 billion a +month earlier. The year-on-year rise was 19.64 pct, up from +35.83 billion at the end of December 1985. + Reuter + + + +19-MAR-1987 07:31:01.10 +acq +japanportugal + + + + + +F +f0511reute +r f BC-SANWA-BANK-ACQUIRES-S 03-19 0103 + +SANWA BANK ACQUIRES SMALL STAKE IN PORTUGUESE BANK + TOKYO, March 19 - Sanwa Bank Ltd <ANWA.T> has agreed to buy +a two pct stake in Oporto-based <Banco Portugues de Investmento +Sarl> (BPI), Portugal's largest merchant bank, a Sanwa official +said. + Sanwa will purchase the shares from International Finance +Corp, a BPI shareholder and sister organisation of the World +Bank, for 351 mln yen, he said. + The acquisition will be completed this month as both the +Japanese and Portuguse governments are expected to give +permission soon. This is the first time a Japanese bank has +bought a stake in a Portuguese bank. + Sanwa plans to increase its stake in BPI to four pct, the +ceiling for foreign shareholders, the official said. + The bank has also agreed with <Banco Portugues do +Atlantico>, a state-owned merchant bank in Oporto, to exchange +information on customers and help accelerate Japanese +investment and technological transfers to Portugal, he said. + REUTER + + + +19-MAR-1987 07:41:42.61 +interest +west-germany + + + + + +A +f0527reute +u f BC-BUNDESBANK-LEAVES-CRE 03-19 0051 + +BUNDESBANK LEAVES CREDIT POLICIES UNCHANGED + FRANKFURT, March 19 - The Bundesbank left credit policies +unchanged after today's regular meeting of its council, a +spokesman said in answer to enquiries. + The West German discount rate remains at 3.0 pct, and the +Lombard emergency financing rate at 5.0 pct. + REUTER + + + +19-MAR-1987 07:44:43.08 +gnp +france +balladur + + + + +RM +f0534reute +u f BC-NO-FRENCH-REFLATION, 03-19 0103 + +NO FRENCH REFLATION, SOURCES CLOSE TO BALLADUR SAY + PARIS, March 19 - There is no question of stimulating +consumption or relying on a systematic budget deficit or other +reflationary policies to boost the French economy, sources +close to finance minister Edouard Balladur said. + Their comments followed remarks by prime minister Jacques +Chirac's spokesman Denis Baudouin, who said on Monday ministers +were agreed on the desirability of "relaunching" the economy. + This sparked speculation the government was preparing for a +reflationary U-turn, but the finance ministry immediately ruled +out any such move. + The sources today said the government's policy remained one +of "recovery," or sound finances and greater efficiency. + They said that while 8.6 billion of the 30 billion franc +revenues expected for 1987 from a sweeping privatisation +program will go to providing public companies with fresh +capital, 21.4 billion francs, or two-thirds, will go toward +paying off national debt. + Any further privatisation revenue this year above the 30 +billion would be distributed between repayment of national +internal debt and public companies in similar proportions, they +added. + The sources said it was absurd to talk of reflation when +the country's internal debt, expected to grow by 10 pct this +year from 1,300 billion francs in 1986 was growing twice as +fast as gross domestic product. + Nominal GDP is expected to grow by roughly five pct this +year from 5,000 billion francs last year, broadly in line with +earlier forecasts. Real GDP will grow by up to 2.5 pct. + The sources said that with France's economic targets for +1987 roughly in line with its main trading partners, the +government had no intention of pushing the economy to grow at +an artificial pace out of step with neighbouring economies. + REUTER + + + +19-MAR-1987 07:55:53.04 + +hong-kong + + + + + +RM +f0557reute +u f BC-H.K.-REVIEWS-BANKING 03-19 0100 + +H.K. REVIEWS BANKING STRUCTURE, CAPITAL RATIO + HONG KONG, March 19 - The Banking Commission is reviewing +the present three-tier banking system and its newly established +capital adequacy ratio, banking commissioner Robert Fell said. + He told a news conference his office has had talks with the +Bank of England and the U.S. Federal Reserve Board on +risk-based capital ratios, following an agreement on such +standards between the two central banks early this year. + The Bank of England and the Fed are trying to persuade the +Bank of Japan and European central banks to accept their +standards. + "We welcome international standards," Fell said. "It means a +level playing field for all." + Under a new banking rule that came into effect last year, +banks in Hong Kong are given a two-year grace period to meet a +five pct capital adequacy requirement. + "The difference between us (Hong Kong and the U.K.) is +really not that great," he said. + Fell said the majority of banks are comfortable with the +required capital ratio, though some are under-capitalised. + Some banks, mostly Japanese, want a lower capital ratio +because of the special nature of their business, mainly +offshore banking operations. These institutions have proposed +the creation of a limited service bank category. + Financial institutions in Hong Kong are now classified into +three types -- banks, registered and licensed deposit-taking +companies. + Fell said the Commission is reviewing the three-tier +structure in light of the possible changes in capital ratio and +the growing trend towards securitisation of debt. + Fell said the Commission is also studying a set of +guidelines on loan loss provisions with the help of the Society +of Accountants. + Other planned guidelines relate to securitisation of debt +and business that banks and deposit taking companies can +conduct. + REUTER + + + +19-MAR-1987 08:01:10.70 + +ukaustria + + + + + +RM +f0571reute +u f BC-AUSTRIA-INCREASES-BON 03-19 0059 + +AUSTRIA INCREASES BOND TO 75 MLN AUSTRALIAN DLRS + LONDON, March 19 - The Australian dollar eurobond launched +yesterday for the Republic of Austria has been increased to 75 +mln dlrs from the original 50 mln, Credit Suisse First Boston +Ltd said as lead manager. + The five year transaction has a 14-1/4 pct coupon and was +priced at 101-3/4 pct. + REUTER + + + +19-MAR-1987 08:02:36.22 + +uk + + + + + +RM +f0577reute +u f BC-U.K.-BUILDING-SOCIETY 03-19 0078 + +U.K. BUILDING SOCIETY TAPS EUROSTERLING MARKET + LONDON, March 19 - Cheltenham and Gloucester Building +Society is issuing a 50 mln stg eurobond due April 22, 1992, +paying 9-1/4 pct and priced at 101-1/4 pct, lead manager Union +Bank of Switzerland (Securities) Ltd said. + The bond will be available in denominations of 1,000 stg +and will be listed in Luxembourg. + Fees comprise 1-1/4 pct selling concession and 5/8 pct +management and underwriting combined. + REUTER + + + +19-MAR-1987 08:04:29.56 +money-fxincomemoney-supply +usa + + + + + +A +f0587reute +u f BC--U.S.-CREDIT-MARKET-O 03-19 0111 + +U.S. CREDIT MARKET OUTLOOK - SPENDING, M-1 + NEW YORK, March 19 - Brisk increases in personal income and +consumption are to appear in February data released today, but +the bond market's recent sluggishness suggests there will be no +major price reaction unless the rises are much larger than +expected, economists said. + Personal income is forecast to rise by 0.6 to 0.8 pct, +compared with no change in January, while consumption +expenditures are projected to increase 1.4 to 1.6 pct, +reversing most of the two pct drop recorded in January. + M-1 money supply data for the March 9 week will also be +released. An increase of some 2.3 billion dlrs is expected. + Peter Greenbaum of Smith Barney, Harris Upham and Co Inc +expects a one pct rise in income, led by a strong gain in wage +and salary disbursements in February. + Nonfarm payrolls expanded by 337,000 jobs in February, the +average workweek lengthened by 0.6 pct and hourly wages rose by +four cts, he noted in a report. Vigorous spending on durable +goods last month, especially cars, foreshadow a rise of at +least 1.5 pct in consumption, he added. + The prospect of bearish data did not trouble the bond +market much yesterday, with the 30-year Treasury bond slipping +just 7/32 to 99-28/32 for a yield of 7.51 pct. + Analysts said the market is still trapped in a narrow +range, desperately seeking direction. + "Seasonally adjusted, it's already December in the bond +market," quipped Robert Brusca of Nikko Securities Co +International Inc. + Paul Boltz of T. Rowe Price Associates Inc said the +steadiness of long bond yields around 7.5 pct, despite some +signs of a stronger economy, probably reflects expectations +that inflation will remain subdued. + But he warned that this assumption might not be justified. + "It took the bond market a long while to see that inflation +was not returning to double digits, and now that it has learned +that lesson, it may be a little slow to see that a four to five +pct inflation is a real possibility ahead," Boltz said in a +report. + After trading late yesterday at 5-15/16 pct, Fed funds were +indicated by brokers to open comfortably at 5-15/16, six pct. + Reuter + + + +19-MAR-1987 08:07:29.71 +veg-oiloilseedsoybean +west-germanyusa + +ec + + + +C G +f0595reute +r f BC-U.S.-DELEGATION-HOPES 03-19 0115 + +U.S. DELEGATION HOPES FOR VEG OILS TAX DEFEAT + BONN, March 19 - American soybean producers and processors +are hoping the proposed EC tax on vegetable oils and fats will +not be imposed, but say the U.S. Is prepared to retaliate if it +is introduced. + Wayne Bennett, the American Soybean Association's first +vice president, told a news conference the U.S. Administration +would not hesitate to retaliate, but both producers and +processors were trying to solve the issue through negotiation. + U.S. Secretary of Agriculture Richard Lyng said in a letter +to EC officials that U.S. Retaliatory measures would cover more +than agricultural products if the tax was imposed, Bennett +said. + The ASA and National Soybean Processors Association (NSPA) +delegations will meet top West German government officials +today and tomorrow to lobby for support. + Bennett said West Germany, Britain, the Netherlands, +Denmark and Portugal oppose the tax, but Italy and Belgium seem +to have taken a hardline view on the issue. + "Europeans in favour of the tax say it would be to their +advantage economically, but that is not correct because we +would hit back," NSPA chairman Jack Reed said. + This step would be very expensive for all and no one would +emerge as a winner if the tax were introduced, he said. + Reed pointed out the U.S. Administration and the soybean +industry view the EC proposal as violating the General +Agreement on Tariffs and Trade. + The proposed tax also violates the zero duty bindings +agreed between the EC and U.S. In 1962, he said. + Under the zero duty bindings pact U.S. Soybeans and +products can be exported to the Community duty-free. + REUTER + + + +19-MAR-1987 08:08:32.15 + +hong-kong + + + + + +RM +f0600reute +u f BC-H.K.-BANKING-SECTOR-S 03-19 0100 + +H.K. BANKING SECTOR STABLE, OFFICIAL SAYS + HONG KONG, March 19 - The banking sector has regained its +stability after a protracted period of difficulty, banking +commissioner Robert Fell said. + "The banking climate has dramatically changed from a year +ago," he said at a news conference to present his annual report +on the banking sector for 1986. + "We've got confidence back. We've got profitability back." he +said. + A three-year shake out in the local banking sector forced +the government to take over three banks and arrange for the +acquisition of four others by the private sector. + Fell said that in many cases the bank problems stemmed from +management fraud which he linked partly to dramatic swings in +the stock and property markets in the early 1980s. + "We've got it out of the system now," he said. "Fraud is no +longer a systemic problem." + But he acknowledged there may still be problems. + "Deliberate fraud is difficult to detect especially where +collusion and senior management are involved," he said. +"Prudential supervision cannot give complete protection. The +(new banking) ordinance is designed to give a "measure" of +protection." + Fell said a number of banks want to set up operations in +Hong Kong, adding the government approved three banking +licences this week. He did not give details. + At the end of 1986, there were 151 licenced banks, 25 of +which were locally incorporated, compared with 143 a year ago. +Another 134 foreign banks had representative offices compared +with 131 a year ago. + There were 34 licensed deposit-taking companies (DTCs) and +254 registered DTCs at the end of 1986, compared with 35 and +278 respectively a year ago, he said. + Foreign banks seeking banking licences in Hong Kong must +have assets of 14 billion U.S. Dlrs. But Financial Secretary +Piers Jacobs said yesterday the asset criteria are flexible. + A high asset threshold has worked in the favour of banks +incorporated in countries with relatively large economies, he +noted. + "No licences in the last few years have been granted to +banks from any of the smaller countries in the Asia-Pacific +region," he said. + REUTER + + + +19-MAR-1987 08:13:16.72 +acq + + + + + + +F +f0621reute +f f BC-******AMERICAN-EXPRES 03-19 0014 + +******AMERICAN EXPRESS SAYS IT'S HOLDING TALKS ON SALE OF SHEARSON STAKE TO NIPPON LIFE +Blah blah blah. + + + + + +19-MAR-1987 08:13:36.39 + +usa + + + + + +F +f0623reute +r f AM-SAVINGS 03-19 0103 + +SAVINGS BANK CLOSED, 15TH TROUBLED U.S. S&L OF YEAR + WASHINGTON, March 18 - The Federal Home Loan Bank Board +(FHLBB) announced today the replacement of a closed Santa Ana, +Calif., savings bank in the 15th federal action assisting +troubled U.S. savings institutions this year. + The FHLBB said Perpetual Savings Bank in Santa Ana was put +into receivorship because it was insolvent and was replaced by +a new federally chartered Perpetual Savings Association. + It said the savings bank's insolvency "was a direct result +of losses on speculative investments in real estate which were +not supported by appraisals." + The FHLBB said it appointed Great American First Savings +Bank <GTA> of San Diego to manage Perpetual Savings. + It said as of January 31, Perpetual had assets of 61.9 mln +dlrs. + Reuter + + + +19-MAR-1987 08:15:06.00 +acq +usajapan + + + + + +F +f0627reute +u f BC-/AMERICAN-EXPRESS-<AX 03-19 0044 + +AMERICAN EXPRESS <AXP> MAY SELL SHEARSON STAKE + NEW YORK, March 19 - American Express Co said it and its +Shearson Lehman Brothers Inc subsidiary have been holding talks +on the possible equity investment in Shearson Lehman by <Nippon +Life Insurance Co> of Japan. + The company said, "The discussions have led to a general +understanding by which Nippon Life would purchase a 13 pct +equity investment in Shearson Lehman for approximately 530 mln +dlrs and American Express, Shearson Lehman and Nippon Life +would explore mutually advantageous, nonexclusive business and +investment opportunities." + The company said a definitive agreement on the matter is +subject to a number of conditions, including approval of the +American Express board and the Japanese Ministry of Finance. + The company said its board is scheduled to meet March 27 +for its regular monthly sessions. + American Express said it is continuing to evaluate various +courses of action of strategic importance to Shearson Lehman in +addition to the possible investment by Nippon Life. + It said the options range from expanding Shearson's +capacity to meet international competition, to broadening +further its access to capital. + The company also said, "All the courses of action under +study reflect the continuing integral role of Shearson Lehman +in American Express' worldwide financial services strategy." + Reuter + + + +19-MAR-1987 08:15:21.69 + +usa + + + + + +F +f0629reute +r f BC-XEROX-<XRX>-TO-STOP-S 03-19 0092 + +XEROX <XRX> TO STOP SELLING PC'S BY THEMSELVES + NEW YORK, March 19 - Xerox Corp has decided to stop selling +personal computers as standalone products, a company spokesman +said. + The spokesman said "As a first priority, we're selling PC's +as part of preconfigured systems, mostly desktop publishing +systems, and not by themselves anymore." + He said Xerox does not expect to take any material charge +from changing its marketing of personal computers. He said for +the past five years, Xerox has sold most of its PC's as +components of larger systems. + Another Xerox spokesman said the company actually stopped +selling personal computers alone on February 16 but never +announced the move. + Reuter + + + +19-MAR-1987 08:16:10.53 +money-fxrand +south-africa + + + + + +RM +f0630reute +r f BC-S.AFRICA'S-FINANCIAL 03-19 0093 + +S.AFRICA'S FINANCIAL RAND SEEN HEADED HIGHER + JOHANNESBURG, March 19 - The financial rand, widely viewed +as a direct reflection of foreign investor confidence in South +Africa, appears headed above 30 U.S. Cents, dealers and bank +economists said. + The currency has risen about 25 pct in the past three +months to its current rate of 29.50 cents, due partly to signs +of a possible power shift with the appearance of a number of +independent candidates in the whites-only election on May 6, +they added. + It has risen about two cents this week alone. + "Another factor is that banks in London, where the main +market is based, are going long in the currency because of a +general feeling that it will rise in the future," one economist +said. + Dealers described 30 cents as a psychological barrier that +was expected to be broken soon after a brief consolidation +phase from recent gains. + After reaching 30 cents, "There is a chance of appreciation +to 32 cents in the next several weeks," one dealer said. + There was a widespread feeling that both the commercial +rand, holding stable at 48 cents, and the financial rand were +staying firm, banking sources said. + A Barclays National Bank executive who asked not to be +identified said: "The rise of the independents appears to be +indicative of a potential shift of power in the National Party +and has created a favourable sentiment overseas." + One dealer said growing business and investor interest from +West Germany and Switzerland were behind the financial rand's +rise. + Economists said foreigners also were being attracted by +South Africa's long-term government bonds and "semi-gilts" or +securities in partly government-owned firms, many with yields +as high as 30 pct. They could be purchased with financial rands +with interest paid in commercial rands. + "This has had a definite influence on the financial form of +the rand," a dealer said, adding that at present demand is +slightly in excess of supply. + The financial rand was reintroduced in September 1985 to +help end capital flight from South Africa during a period of +severe political unrest in the country. + REUTER + + + +19-MAR-1987 08:22:06.66 + +usa + + + + + +A +f0648reute +r f BC-EX-REAGAN-AIDE-DEAVER 03-19 0113 + +EX-REAGAN AIDE DEAVER INDICTED ON PERJURY CHARGES + WASHINGTON, March 19 - Former White House aide Michael +Deaver, a long-time confidant of President Reagan, has been +indicted on charges of lying about his contacts as a Washington +lobbyist with top U.S. Government officials. + The five-count perjury indictment charged that Deaver lied +in sworn testimony to Congress and before the grand jury +investigating his business affairs. + Deaver, who resigned as deputy White House chief of staff +in 1985 to open a lobbying firm, faces a maximum penalty of 25 +years in prison if convicted. Immediately after the indictment +was announced Reagan issued a statement wishing Deaver well. + Reuter + + + +19-MAR-1987 08:22:21.02 +acq +usa + + + + + +F +f0649reute +d f BC-<FI-TEK-CORP>-TO-MAKE 03-19 0094 + +<FI-TEK CORP> TO MAKE ACQUISITION + DENVER, March 19 - Fi-Tek Corp said it has signed a letter +of intent to acquire <Voice Systems and Services Inc> for an +undisclosed amount of stock. + It said on completion of the acquisition it would change +its name to Voice Systems and Services Inc. It said VBoice +Systems has received a 3,600,000 dlr contract to provide FLP +Communications of Dallas with voicemail systems through service +bureaus located throughout the U.S. and has also contracted to +provide voicemail systems and administration to M and S +Communications. + Reuter + + + +19-MAR-1987 08:22:28.01 +acq +usa + + + + + +F +f0650reute +r f BC-FIRST-WISCONSIN-<FWB> 03-19 0062 + +FIRST WISCONSIN <FWB> TO MAKE ACQUISITION + MILWAUKEE, March 19 - First Wisconsin Corp said it has +agreed to acquire North Shore Bancorp Inc of Northbrook, Ill., +for 6,160,000 dlrs in cash, or slightly more than twice book +value, subject to approval by North Shore shareholders and +regulatory authorities. + The company said completion is expected in the third +quarter. + Reuter + + + +19-MAR-1987 08:26:32.47 +bop +italy + + + + + +RM +f0656reute +b f BC-ITALY'S-FEBRUARY-PAYM 03-19 0085 + +ITALY'S FEBRUARY PAYMENTS BALANCE IN SURPLUS + ROME, March 19 - Italy's overall balance of payments showed +a surplus of 1,461 billion lire in February 1987 compared with +a deficit of 1,145 billion in January, provisional Bank of +Italy figures show. + The February surplus compared with a deficit of 1,578 +billion lire in the same month for 1986. + For the first two months of 1987, the balance of payments +showed a surplus of 302 billion lire against a deficit of 4,622 +billion in the same 1986 period. + The Bank of Italy said the cumulative balance for the first +two months of 1987 does not match the total calculated on the +individual monthly figures because of the provisional nature of +certain data. + REUTER + + + +19-MAR-1987 08:26:43.13 +earn +usa + + + + + +F +f0658reute +d f BC-BELVEDERE-CORP-<BLV> 03-19 0073 + +BELVEDERE CORP <BLV> 4TH QTR LOSS + NEW YORK, March 19 - + Oper shr loss 21 cts vs loss 95 cts + Oper net loss 666,000 vs loss 2,184,000 + Avg shrs 3,181,805 vs 2,310,200 + Year + Oper shr loss 30 cts vs loss 23 cts + Oper net loss 823,000 vs loss 606,000 + Avg shrs 2,757,040 vs 2,614,225 + NOTE: Net excludes realized investment gains of 666,000 +dlrs vs 289,000 dlrs in quarter and 2,274,000 dlrs vs 1,468,000 +dlrs in year. + Reuter + + + +19-MAR-1987 08:27:00.64 +reserves +italy + + + + + +RM +f0659reute +b f BC-ITALIAN-NET-RESERVES 03-19 0081 + +ITALIAN NET RESERVES RISE IN FEBRUARY + ROME, March 19 - Italy's net official reserves rose to +66,172 billion lire in February 1987 from a previously reported +62,174 billion in January, the Bank of Italy said. + Gold holdings at end-February totalled 35,203 billion lire, +unchanged on January. + Convertible currencies totalled 18,467 billion lire, up +from 14,899 billion in January, while European Currency Unit +(ECU) holdings were 10,156 billion lire against 10,133 billion. + REUTER + + + +19-MAR-1987 08:31:00.91 + +usa + + + + + +F +f0665reute +r f BC-SJNB-<SJNB>-SAYS-CHIE 03-19 0071 + +SJNB <SJNB> SAYS CHIEF EXECUTIVE RESIGNS + SAN JOSE, Calif., March 19 - SJNB Financial Corp said +Douglas McLendon has resigned as president and chief executive +officer of the holding company and its San Jose National Bank +subsidiary and as a director of its Tri-Valley National Bank +subsidiary to pursue other interests. + It said vice chairman William Pfeifle, 68, will act as +interim president and chjief executive officer. + Reuter + + + +19-MAR-1987 08:33:10.94 + +west-germany + + + + + +RM +f0671reute +r f BC-GERMAN-INVESTORS-SLOW 03-19 0109 + +GERMAN INVESTORS SLOW TO ACCEPT BOND INNOVATIONS + By Franz-Josef Ebel, Reuters + WEST BERLIN, March 19 - The liberalization of West German +capital markets in May 1985 led to a flood of financial +innovations but the lack of a secondary market for these has +diminished their acceptance, Deutsche Girozentrale - Deutsche +Kommunalbank management board member Wiegand Hennicke said. + While innovations may be intellectualy stimulating, they +lack transparency, he told an investors' forum in West Berlin. + "Properly functioning markets require standardized products. +This (condition) has not been met by some of the innovations," +Hennicke said. + The volume of zero coupon bonds and floating rate notes, +the most widely used financial innovations in Germany, stands +at four billion and 16 billion marks, respectively, a tiny +proportion of the 1,000 billion marks of bonds in circulation. + Even for zero-coupon bonds and floating rate notes, a +secondary market had not developed, Hennicke said. One +important reason for this was the bourse turnover tax, which +was reducing the rate of return to the investors. + West German Finance Minister Gerhard Stoltenberg said this +week he believed the tax could still be removed, even if its +abolition was not decided during recent coalition discussions. + Karl-Herbert Schneider-Gaedicke, deputy management board +chairman of DG Bank Deutsche Genossenschaftsbank, said German +domestic and institutional investors had also shown +reservations about investing in participation shares. + One of the reasons was the widely varying terms and +conditions of participation shares in West Germany. "The +investor has to scrutinize (participation shares) carefully, +before making an investment decision," Schneider-Gaedicke said. + He added the attractiveness of participation shares could +be increased by limiting the combination possibilities of terms +and conditions and increasing safeguards for investors. + He also urged publicizing the comparative advantage of +participation shares over ordinary shares for foreigners. + Foreigners do not receive the corporation tax bonus granted +to domestic investors for share dividends. + Karl Thomas, head of the Bundesbank's credit department, +said the domestic investor had missed earnings opportunities +over the last four years by failing to invest in German bonds. + Domestic investors did not believe interest rates would +decline and stay at low levels for such a long time, because +expectations were determined by sharp interest rate +fluctuations at the start of the decade. + The Bundesbank has a natural interest in seeing domestic +savings channelled into bonds and shares, Thomas said. + A shift of savings into long-term assets would dampen +monetary expansion and foster a stable rise of the money +supply, he said. + REUTER + + + +19-MAR-1987 08:34:53.72 +earn + + + + + + +F +f0681reute +f f BC-******CARTER-HAWLEY-H 03-19 0013 + +******CARTER HAWLEY HALE STORES INC 4TH QTR SHR LOSS 1.58 DLRS VS PROFIT 58 CTS +Blah blah blah. + + + + + +19-MAR-1987 08:40:55.05 + +usa + + +cbt + + +C G +f0698reute +u f BC-CBT-HEAD-CONFIDENT-OF 03-19 0142 + +CBT HEAD CONFIDENT OF SEPARATE CBT, MCE LIMITS + BOCA RATON, Fla., March 19 - Chicago Board of Trade, CBT, +President Thomas Donovan said he was confident the Commodity +Futures Trading Commission, CFTC, would not force the CBT and +the MidAmerica Commodity Exchange, MCE, to merge speculative +position limits on futures contracts traded on the two +exchanges. + Last month CFTC proposed combining CBT and MCE contracts on +corn, wheat, soybeans, soybean meal and oats for the purposes +of applying speculative position limits. + Donovan told Reuters he had spoken to CFTC officials about +the matter and believed they would modify the proposal. + CBT officials have complained the CFTC was reneging on a +commitment made when the two exchanges formed an affiliation, +and proposing to decrease spot month limits on the MCE contrary +to congressional intent. + Reuter + + + +19-MAR-1987 08:45:33.50 + +usa + + +cbt + + +C +f0705reute +u f BC-CBT-LEADERS-PLAN-TRIP 03-19 0125 + +CBT LEADERS PLAN APRIL TRIP TO FAR EAST + BOCA RATON, Fla., March 19 - The two top officials of the +Chicago Board of Trade, CBT, are planning to visit three +countries in the Far East next month to drum up support for the +exchange's proposed night trading session, CBT President Thomas +Donovan told Reuters. + Donovan said he and CBT Chairman Karsten Mahlmann will +leave April 3 and spend two weeks in Hong Kong, Tokyo and +Sydney discussing the night trading session with brokerage +firms, regulators and exchanges. + CBT hopes to launch the first U.S. night trading session at +the end of April, offering Treasury-bond and T-note futures and +options on the two futures contracts between 1700 and 2100 hrs +central U.S. time (2300 to 0300 hrs GMT). + Reuter + + + +19-MAR-1987 08:49:57.02 + +switzerland + + + + + +F +f0709reute +u f BC-SWISSAIR-PLANE-ORDER 03-19 0112 + +SWISSAIR PLANE ORDER FOR 1.2 BILLION SWISS FRANCS + ZURICH, March 19 - Swissair <SWSZ.Z> said that the order +for McDonnell Douglas Corp <MD> MD-11 long haul jets confirmed +this morning was worth a total 1.2 billion Swiss francs. + President Robert Staubli told a news conference it had not +yet been decided whether the planes would have General Electric +Co <GE.N>, Pratt and Whitney <UTX> or Rolls Royce engines. + The airline said it chose the U.S. Plane rather than the +rival A-340 of the European Airbus consortium because it met +better the Swissair requirements and would be able to enter +service in 1990 giving a smooth transition from the DC-10s it +replaces. + Staubli said Swissair planned to have replaced its whole +fleet of 11 DC10s by 1992 at the latest, entailing the order of +five more long-haul planes in addition to the six announced +today. He said it would decide on the basis of the development +of traffic whether these five would be MD-11s or Boeing 747s. + However, Staubli ruled out the possibility that Swissair +might eventually choose A-340s. "We cannot afford to operate +three different types of aircraft," he said. + Swissair also had no short term plans to exercise its +option to buy Airbus A-310s, of which it already operates nine, +officials said. But it would still hold the options open. + Staubli declined to say how much it paid for each of the +MD-11s. The total 1.2 billion franc figure was not only for the +planes but also for spare parts and other related expenditure. + Company officials said that Swissair intended to cover +around 75 pct of the costs of its entire DC-10 replacement +programme with internally generated funds. It hopes to raise +the remaining 25 pct on the Swiss and other capital markets +through issuing straight or equity related bonds and/or through +a capital increase. + The first such bond issue would likely come this year, they +predicted. + REUTER + + + +19-MAR-1987 08:56:16.58 + +uk + + + + + +A +f0726reute +d f BC-BP-SALE-WAS-IN-UK-198 03-19 0115 + +BP SALE WAS IN UK 1987/88 BUDGET MATHS - TREASURY + LONDON, March 19 - The U.K. Treasury said its 1987/88 +budget arithmetic which was unveiled on Tuesday "took full +account of likely proceeds" from the sale of the government's +remaining 31.7 pct stake in British Petroleum Co PLC (BP.L). + A statement issued by the Treasury said "the BP announcement +therefore makes no difference to our estimate of privatisation +proceeds in 1987/88, or to subsequent years, which remains 5.0 +billion stg a year." + "It makes no difference to the PSBR (Public Sector Borrowing +Requirement) which the Chancellor set in the budget," it said. + "It has nothing to do with the future scope for tax cuts." + The Treasury's move was prompted by press speculation, +officials said, which followed last night's surprise +announcement by the government. It currently holds about 578.5 +mln shares in BP. + The Treasury statement said that the sell-off "is simply a +part of the government's continuing privatisation programme, +the overall size of which was announced in the Autumn +(economic) Statement" (last November). + It said the BP proceeds "will be received in installments, +of which the first will be in 1987/88." + News of the privatisation weighed down both BP's share +price in London and the equity market overall, market sources +said. + The prospect of so much more BP paper in circulation had +cut BP shares at 1340 GMT to 824 pence from yesterday's London +close of 828 pence. The company's shares had been down as low +as 802 pence before rebounding, stock market sources said. + Worries over the ability of the London stock market to +digest the BP and other privatisation issues sent the Financial +Times/Stock Exchange 100 Share Index down 9.1 points by 1340 +GMT to 1997.5 from last night's close. At one point the index +was as low as 1989.1, the sources said. + REUTER + + + +19-MAR-1987 08:59:17.90 +acq + + + + + + +F +f0733reute +b f BC-******WASTE-MANAGEMEN 03-19 0015 + +******WASTE MANAGEMENT SAYS IT IS PREPARED TO RAISE ITS BID FOR CHEMLAWN TO 33 DLRS A SHARE +Blah blah blah. + + + + + +19-MAR-1987 09:00:53.32 +earn +usa + + + + + +F +f0736reute +u f BC-TRANSAMERICA-<TA>-TO 03-19 0090 + +TRANSAMERICA <TA> TO HAVE GAIN ON UNIT SALE + LOS ANGELES, MArch 19 - Transamerica Corp said it expects +to realize a gain of about 75 mln dlrs on the +previously-announced sale of the group life and health +operations of its Transamerican Occidental Life Insurance Co +subsidiary to Provident Life and Accident Co <PACC>. + But it said its Transamerica Life Cos unit plans to change +to a more conservative method of amortizing deferred policy +acquisition costs, resulting in a one-time charge that will +offset most of the gain from the sale. + Transamerica said it has now signed a definitive agreement +for the sale, which will be structured as a reinsurance +transaction involving about 400 mln dlrs of reserve +liabilities. + It said the 75 mln dlr gain from the sale and about 125 mln +dlrs of statutory surplus that previously supported operations +of the group being sold will be used to support Transamerica +Life Cos' efforts to accelerate the growth of its remaining +businesses. It said closing is expected by May One, subject to +regulatory approvals. + Reuter + + + +19-MAR-1987 09:01:39.59 + +usa + + + + + +F +f0738reute +u f BC-COCA-COLA-<KO>-IN-FIL 03-19 0046 + +COCA-COLA <KO> IN FILM COLORING VENTURE + MARINA DEL RAY, Calif., March 19 - Color Systems Technology +Inc <CLST> said it has completed formation of a joint venture +called Screen Gems Classicolor with Coca-Cola Co to color and +distribute feature films and television programs. + Color Systems said it and Coca-Cola will share profits from +worldwide television, basic cable, pay television and home +video distribution, and Color Systems will also be paid by the +venture to convert to color the black and white material +involved. + The company said Coca-Cola has initially contributed a +number of its Screen Gems television series and Color Systems +its library of more than 100 feature films and television +series. It said the venture expects to acquire more black and +white material for color conversion and will start generating +revenues by distributing the combined library initially as-is. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-008.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-008.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-008.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-008.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2019 @@ + + +20-MAR-1987 16:54:10.55 +earn +usa + + + + + +F +f2479reute +r f BC-GANTOS-INC-<GTOS>-4TH 03-20 0056 + +GANTOS INC <GTOS> 4TH QTR JAN 31 NET + GRAND RAPIDS, MICH., March 20 - + Shr 43 cts vs 37 cts + Net 2,276,000 vs 1,674,000 + Revs 32.6 mln vs 24.4 mln + Year + Shr 90 cts vs 69 cts + Net 4,508,000 vs 3,096,000 + Revs 101.0 mln vs 76.9 mln + Avg shrs 5,029,000 vs 4,464,000 + NOTE: 1986 fiscal year ended Feb 1, 1986 + Reuter + + + +20-MAR-1987 16:57:13.73 +acq + + + + + + +F +f2484reute +f f BC-******CHEMLAWN-CORP, 03-20 0010 + +******CHEMLAWN CORP, ECHOLAB INC SIGN DEFINITIVE MERGER AGREEMENT +Blah blah blah. + + + + + +20-MAR-1987 16:57:26.14 +grainwheatoilseedsoybeanveg-oil +usa + + + + + +C G +f2485reute +r f BC-LDC-FOOD-AID-NEEDS-DE 03-20 0124 + +LDC FOOD AID NEEDS DECLINE IN 1986/87 - USDA + WASHINGTON, March 20 - Total food aid needs in 69 of the +least developed countries declined in 1986/87, as requirments +fell in many countries in Africa, the Middle East and Asia, the +U.S. Agriculture Department said. + In a summary of its World Agriculture Report, the +department said grain production in sub-Saharan Africa was a +record high in 1986, with gains in almost every country. + However, food needs in Central America rose, worsened by +drought-reduced crops and civil strife. + Record wheat production in 1986/87 is pushing global wheat +consumption for food to a new high, and higher yielding +varieties have been particularly effective where spring wheat +is a common crop, it said. + However, may developing countries in tropical climates, +such as Sub-Saharan Africa, Southeast Asia, and Central +America, are not well adapted for wheat production, and +improved varieties are not the answer to rising food needs, the +department said. + World per capita consumption of vegetable oil will rise in +1986/87 for the third straight year. + Soybean oil constitutes almost 30 pct of vegetable oil +consumption, while palm oil is the most traded, the department +said. + Reuter + + + +20-MAR-1987 17:00:29.12 +sugargraincorn +usa + + + + + +C G T +f2491reute +b f BC-/U.S.-SUGAR-PROGRAM-C 03-20 0130 + +U.S. SUGAR PROGRAM CUT SENT TO CONGRESS BY USDA + WASHINGTON, MARCH 20 - The U.S. Agriculture Department +formally transmitted to Congress a long-awaited proposal to +drastically slash the sugar loan rate and compensate growers +for the cut with targeted income payments. + In a letter to the Congressional leadership accompanying +the "Sugar Program Improvements Act of 1987", Peter Myers, +Deputy Agriculture Secretary, said the Reagan administration +wants the sugar loan rate cut to 12 cents per pound beginning +with the 1987 crop, down from 18 cts now. + Sugarcane and beet growers would be compensated by the +government for the price support cut with targeted income +payments over the four years 1988 to 1991. The payments would +cost an estimated 1.1 billion dlrs, Myers said. + The administration sugar proposal is expected to be +introduced in the House of Representatives next week by Rep. +John Porter, R-Ill. + Congressional sources said the program cut is so drastic it +is unlikely to be adopted in either the House or Senate because +politically-influential sugar and corn growers +and high fructose corn syrup producers will strongly resist. + The direct payment plan outlined by the administration +targets subsidies to small cane and beet growers and gradually +lowers payments over four years. It also excludes from payment +any output exceeding 20,000 short tons raw sugar per grower. + For example, on the first 350 tons of production, a grower +would receive 6 cts per lb in fiscal 1988, 4.5 cts in 1989, 3 +cts in 1990 and 1.5 cts in 1991. + The income payments would be based on the amount of +commercially recoverable sugar produced by a farmer in the 1985 +or 1986 crop years, whichever is less, USDA said. + Myers said the administration is proposing drastic changes +in the sugar program because the current high price support is +causing adverse trends in the sugar industry. + He said the current program has artificially stimulated +domestic sugar and corn sweetener production which has allowed +corn sweeteners to make market inroads. + U.S. sugar consumption has declined which has resulted in a +"progressive contraction" of the sugar import quota to only one +mln short tons this year, he said. This has hurt cane sugar +refiners who rely on imported sugar processing. + Furthermore, USDA said the current sugar program gives +overseas manufacturers of sugar-containing products a +competitive advantage. The result has been higher imports of +sugar-containing products and a flight of U.S. processing +facilities overseas to take advantage of cheaper sugar. + USDA also said the current program imposes a heavy cost on +U.S. consumers and industrial users. In fiscal 1987, USDA said +consumers are paying nearly two billion dlrs more than +necessary for sugar. + "Enactment of this bill will reduce the price gap between +sweeteners and help to correct or stabilize the many adverse +impacts and trends which the sugar industry is currently +facing," Myers said. + The following table lists the rate of payments, in cts per +lb, to growers and the quantity covered, in short tons +recoverable raw sugar, under the administration's proposal to +compensate sugar growers with targeted payments. + QUANTITY 1988 1989 1990 1991 +First 350 tons 6.000 4.500 3.000 1.500 +Over 350 to 700 5.750 4.313 2.875 1.438 +Over 700 to 1,000 5.500 4.125 2.750 1.375 +Over 1,000 to 1,500 5.000 3.750 2.500 1.250 +Over 1,500 to 3,000 4.500 3.375 2.250 1.125 +Over 3,000 to 6,000 3.500 2.625 1.750 0.875 +Over 6,000 to 10,000 2.250 1.688 1.125 0.563 +Over 10,000 to 20,000 0.500 0.375 0.250 0.125 +Over 20,000 tons nil nil nil nil + Reuter + + + +20-MAR-1987 17:00:52.39 +earn +canada + + + + + +E +f2494reute +d f BC-oink 03-20 0042 + +<OE INC> 4TH QTR NET + MONTREAL, March 20 - + Shr 24 cts vs 26 cts + Net 1.5 mln vs 1.3 mln + Revs 40.5 mln vs 33.5 mln + Year + Shr 80 cts vs 82 cts + Net 4.9 mln vs 4.1 mln + Revs 143.0 mln vs 121.1 mln + Avg shrs 6.1 mln vs 5.0 mln + Reuter + + + +20-MAR-1987 17:01:28.16 + +usa + + + + + +F +f2497reute +r f BC-TEXAS-INSTRUMENTS-<TX 03-20 0106 + +TEXAS INSTRUMENTS <TXN> BEGINS BUILDING PLANT + DALLAS, March 20 - Texas Instruments Inc said construction +will begin in April on a new plant near Denton, Texas, on 193 +acres owned by the company. + It said the plant will initially employ between 1,000 and +1,500 people, and will be used by its Defense Systems and +Electronics Group for producing electronic equipemnt. The plant +is expected to be operational in late 1988. + Separately, the company said it leased about 185,000 square +feet of a complex in Texas for its Defense Systems group. It +plans to transfer about 700 employees to work at the site by +the third quarter of 1987. + Reuter + + + +20-MAR-1987 17:06:31.28 +earn +usa + + + + + +F +f2510reute +w f BC-VMS-MORTGAGE-LP-<VMLP 03-20 0037 + +VMS MORTGAGE LP <VMLPZ> MONTHLY CASH PAYOUT + CHICAGO, March 20 - VMS Mortgage L.P. said it declared a +regular monthly cash distribution of nine cts a depositary unit +for the month of March, payable May 14, record April One. + Reuter + + + +20-MAR-1987 17:06:47.92 +livestockpork-belly +usa + + +cme + + +C L +f2512reute +u f BC-LITTLE-EFFECT-SEEN-FR 03-20 0117 + +LITTLE EFFECT SEEN FROM COLD STORAGE REPORT + CHICAGO, March 20 - The USDA monthly cold storage report +for meats is expected to have little, if any, effect on +livestock and meat futures at the Chicago Mercantile Exchange +Monday and daily fundamentals will likely provide the bulk of +direction, livestock analysts said. + The increase of 66.4 mln lbs in total poultry offsets the +22.6 mln lbs decline in total red meats. Fundamentals may +provide most of the direction in futures on Monday, they said. + "I think the market is going to be looking at some other +things and accentuate whatever the action of cash markets might +be early next week," Jerry Gidel, livestock analyst for GH +Miller, said. + Shearson Lehman livestock analyst Chuck Levitt said futures +will be in the shadow of a little larger seasonal hog +marketings pace next week. Also, Easter ham business was +completed this week and there may be less aggressive interest +for pork in general next week. + "We needed some help from the cold storage report to avert +a possible setback next week in the pork complex," Levitt said. + Analysts agreed with CME floor traders and called the belly +figure neutral to slightly negative. Although belly stocks were +down 33 pct from last year, they exceeded the average +expectation and actually showed a lighter than expected decline +from last month due to an adjustment to last month's holdings, +they said. + However, analysts noted that the amount of bellies put in +storage has been light since the beginning of March and this is +a potentially bullish situation. + Glenn Grimes, agronomist at the University of Missouri, +said, "I would not look for (belly) storage during the next +month or two to be heavier than a year ago - I think it will be +less." + Reuter + + + +20-MAR-1987 17:07:44.99 +shipgrain +canada + + + + + +E F +f2515reute +h f BC-SEAWAY (PIX-EXPECTED) 03-20 0130 + +STRIKE THREAT, LOWER TRAFFIC MAR SEAWAY OPENING + By Jane Arraf, Reuters + MONTREAL, March 20, Reuter - The St. Lawrence Seaway, set +to reopen March 31 after the winter, faces another tough year +because of depressed traffic levels and the possibility of the +first strike in 20 years on the Great Lakes, seaway officials +said. + Depressed grain exports, rising costs, and competing modes +of transportation are all expected to result in only a marginal +increase over last year's traffic levels -- and revenues -- on +the 2,300 mile waterway, officials said. + In 1986, a season that ran from April 3 to December 27, the +seaway moved 37.6 mln metric tons of freight between Montreal +and Lake Ontario and 41.6 mln tons on the Welland Canal, +linking Lake Erie and Lake Ontario. + By comparison, in 1985 about 37 mln tons of cargo traveled +through the Montreal-Lake Ontario section and 42 mln through +the eight-lock canal. + The waterway is expected to lose 9-10 mln Canadian dlrs +this year, about the same as the estimated deficit for fiscal +1986-87 ending March 31, said William Blair, an executive +member of Canada's St Lawrence Seaway Authority. + The seaway moves about one-half of Canada's exported grain. +Those exports of the single most important commodity carried on +the waterway have been depressed by world surpluses. + The Seafarers' International Union, which represents about +2,300 workers on the Great Lakes and the ocean coasts, has said +it will likely go on strike this spring to protest employers' +demands for wage rollbacks and other concessions. + "It's 99.9 pct (certain)--I guarantee you a strike," Roman +Gralewicz, head of the Seafarers' Canadian branch, has said. + The Canadian government has called in a labor conciliator +to try to hammer out a contract agreement between the two +sides. The seaway authority said a walkout tying up ships on +the Great Lakes would badly hurt traffic. + "We haven't had a strike on the seaway for years...a +prolonged strike would have a disasterous effect," Seaway +Authority spokeswoman Gay Hemsley said. + "These are the heaviest contract talks in the history of the +St Lawrence Seaway," George Miller, vice-president of the +Canadian Lake Carriers Association, an association of major +Canadian shipping companies, said recently. + The workers' current contract expires May 31. The +association said it is asking for a five per cent cut in wages +for the next three years, reduced crew levels and the power to +restructure crew dispatching. + The association said its members recorded about a 6 mln dlrs +(U.S.) loss in each of 1985 and 1986 due to lower traffic and +freight rates and increasing competition. The seaway said 1985 +was its worst year in two decades. + Hemsley said the seaway authority plans to raise tolls on +the Welland Canal by eight pct this year, compared to last +year's 15 pct rise, while maintaining a freeze on tolls +throughout the rest of the waterway. + Canada is responsible for 13 of the seaway's 15 locks and +about 85 pct of its revenues and maintenance costs. + "We may see and hope for a steady upward climb...but we +won't see a major increase for a number of years," Hemsley said. + A Canada-U.S. delegation to promote the seaway to shippers +in Western Europe should result in some increased traffic this +season but the full benefits won't be felt for several years, +Blair said. + Reuter + + + +20-MAR-1987 17:07:50.76 +acq +usa + + + + + +F +f2516reute +u f BC-CHEMLAWN-<CHEM>,-ECOL 03-20 0065 + +CHEMLAWN <CHEM>, ECOLAB <ECON> IN MERGER PACT + COLUMBUS, Ohio, March 20 - Chemlawn Corp and Ecolab Inc +said they signed a definitive merger agreement under which +Ecolab will buy all outstanding Chemlawn common stock for 36.50 +dlrs a share in cash, for a total of about 370 mln dlrs. + Under terms of the agreement, Chemlawn said it rescinded +its previously announced rights dividend plan. + Chemlawn previously rejected a 27 dlr a share offer from +Waste Management Inc <WMX>. + Yesterday, the Oak Brook, Ill.-based waste disposal company +said it was prepared to offer 33 dlrs a share, or about 330 mln +dlrs, for Chemlawn, a lawn-care company. + Chemlawn had said last week that it was negotiating with +other possible suitors, which it did not identify. + A Chemlawn spokesman said further details on the merger +would be issued later. + Ecolab is a maker of commercial laundry detergent based in +St. Paul, Minn. For its first six months ended December 31, the +company earned 20.4 mln dlrs, or 76 cts a share, on sales of +421.8 mln dlrs. + Officials at Waste Management could not be reached for +immediate comment. + Reuter + + + +20-MAR-1987 17:10:14.07 +earn + + + + + + +F +f2524reute +b f BC-******LILCO-REVISES-1 03-20 0011 + +******LILCO REVISES 1986 NET TO INCLUDE 16 MLN DLR LOSS PROVISION +Blah blah blah. + + + + + +20-MAR-1987 17:12:06.51 +earn +usa + + + + + +F +f2527reute +h f BC-FALCON-CABLE-<FAL>-SE 03-20 0073 + +FALCON CABLE <FAL> SETS INITIAL DISTRIBUTION + PASADENA, Calif., March 20 - Falcon Cable Systems Co said +its set an initial quarterly cash distribution of 53.75 cts per +unit, payable May 15 to unitholders of record March 31. + The partnership made its initial public offering in +December, 1986. + Falcon said it expects to pay cash distributions to limited +partners at an annual rate of 2.15 dlrs per unit, through +December 31, 1989. + Reuter + + + +20-MAR-1987 17:12:35.20 + +usa + + + + + +F +f2530reute +u f BC-GENERAL-DYNAMICS-<GD> 03-20 0064 + +GENERAL DYNAMICS <GD> GETS 67.9 MLN DLR CONTRACT + WASHINGTON, March 20 - The Electric Boat Division of +General Dynamics Corp is being awarded a 67.9 mln dlr +modification to a Navy contract for architectural, engineering +and hardware development work for a submarine improvement +program, the Defense Department said. + It said the work is expected to be completed September 30, +1987. + Reuter + + + +20-MAR-1987 17:15:01.04 + +usa + + + + + +A RM +f2533reute +r f BC-SONAT-<SNT>-UNIT-FILE 03-20 0090 + +SONAT <SNT> UNIT FILES FOR DEBENTURE OFFERING + NEW YORK, March 20 - Southern Natural Gas Co, a unit of +Sonat Inc, said it filed with the Securities and Exchange +Commission a registration statement covering a 100 mln dlr +issue of debentures due 1999. + Proceeds will be used, together with funds from the +company's operations, to redeem Southern Natural's 15 pct +sinking fund debentures of 1991. + The company named Goldman, Sachs and Co, Lazard Freres and +Co and Merrill Lynch Capital Markets as managing underwriters +of the offering. + Reuter + + + +20-MAR-1987 17:16:21.60 +crude +usa + + + + + +Y +f2536reute +r f BC-BIDS-AWARDED-FOR-ELK 03-20 0104 + +BIDS AWARDED FOR ELK HILLS CRUDE OIL + LOS ANGELES, March 20 - The U.S. Department of Energy said +it has awarded bids for about 90,000 barrels per day, bpd, of +crude oil from the Elk Hills Naval Petroleum Reserve in +California. The contract period runs from April one through +July one, the DOE said. + Successful bidders, the amount of crude oil and the price +per bbl according to the DOE are as follows - + Texaco Inc's <TX> Texaco Trading and Transport 15,000 bpd +at 15.79 dlrs and 2,200 bpd at 15.19 dlrs, Beacon Oil Co 7,000 +bpd at 15.66 dlrs and 2,500 bpd at 16.04 dlrs, Golden West +Refining 8,110 bpd at 15.42 dlrs. + Successful bidders, the amount of oil and price per bbl, +according to the DOE continue as follows - + Chevron's <CHV> Chevron USA Inc 3,000 bpd at 14.51 dlrs and +4,000 bpd at 14.61 dlrs, Chevron International Oil Co 2,600 bpd +at 14.41 dlrs and 2,800 bpd at 14.51 dlrs, Newhall Refining Co +6,000 bpd at 15.82 dlrs, Caljet Inc 4,000 bpd at 15.32 dlrs, +Casey Co 4,000 bpd at 15.45 dlrs. + Also, Cryssen Refining Inc 4,000 bpd at 15.47 dlrs, +Edgington Oil Co 4,000 bpd at 15.54 dlrs, Sound Refining Inc +3,100 bpd at 15.51 dlrs, Atlantic Richfield Co <ARC> 3,000 bpd +at 15.75 dlrs. + Successful bidders, the amount of crude oil and the price +per bbl according to the DOE continue as follows - + Orkin Inc 2,679 bpd at 15.24 dlrs, Lunday-Thagard Co 2,511 +bpd at 15.27 dlrs, Golden Eagle Refining 2,500 bpd at 15.37 +dlrs, MacMillan Ring-Free Oil Co 1,000 bpd at 15.81 dlrs, 1,000 +bpd at 15.71 dlrs and 230 bpd at 16.02 dlrs, Mock Resources +2,000 bpd at 15.76 dlrs, Petro-Diamond 2,000 bpd at 15.46 dlrs. + Reuter + + + +20-MAR-1987 17:20:28.92 +earn +usa + + + + + +F +f2544reute +s f BC-MONTGOMERY-STREET-INC 03-20 0024 + +MONTGOMERY STREET INCOME <MTS> MONTHLY DIVIDEND + SAN FRANCISCO, March 20 - + Mthly div 15 cts vs 15 cts + Pay April 15 + Record April 1 + Reuter + + + +20-MAR-1987 17:20:54.85 +earn +canada + + + + + +E +f2545reute +r f BC-sullivan-mines-inc 03-20 0056 + +<SULLIVAN MINES INC> YEAR LOSS + MONTREAL, March 20 - + Oper shr loss 12 cts vs profit four cts + Oper loss 1,069,000 vs profit 339,000 + Revs 12.8 mln vs 10.9 mln + Note: 1986 shr and net exclude extraordinary gain of +382,000 dlrs or four cts share. 1985 shr and net exclude +extraordinary gain of 183,000 dlrs or two cts share + Reuter + + + +20-MAR-1987 17:21:38.85 + +usa + + + + + +F +f2547reute +u f BC-GRUMMAN-<GQ>-GETS-109 03-20 0051 + +GRUMMAN <GQ> GETS 109.1 MLN DLR NAVY CONTRACT + WASHINGTON, March 20 - Grumman Aerospace Corp is being +awarded a 109.1 mln dlr increment of funds to a Navy contract +for 12 EA-6B Prowler Electronic Warfare aircraft, the Defense +Department said. + It said the work is expected to be completed in July 1989. + Reuter + + + +20-MAR-1987 17:23:12.99 + +usa + + + + + +F +f2549reute +r f BC-MORTON-THIOKOL-<MTI> 03-20 0061 + +MORTON THIOKOL <MTI> GETS 61.4 MLN DLR CONTRACT + WASHINGTON, March 20 - Morton Thiokol Inc's Wasatch +Operations is being awarded a 61.4 mln dlr contract +modification finalizing a previously awarded contract for +missile rocket motors for Terrier, Tarter and Aegis ships, the +Defense Department said. + It said the work is expected to be completed in October +1987. + Reuter + + + +20-MAR-1987 17:26:53.43 +acq +usa + + + + + +F +f2560reute +u f BC-CYCLOPS 03-20 0106 + +INVESTMENT FIRM HAS 7.1 PCT OF CYCLOPS <CYL< + WASHINGTON, March 20 - Halcyon Investments, a New York risk +arbitrage and securities dealing partnership, told the +Securities and Exchange Commission it has acquired 288,000 +shares of Cyclops Corp, or 7.1 pct of the total outstanding. + Halcyon said it bought the stake for 26.1 mln dlrs as part +of its ordinary risk arbitrage and securities trading business. +Other than that, the firm said there was no specific purpose in +its purchases. + Halcyon said it might buy more stock or sell some or all of +its current stake. It said it bought the bulk of its stake +between Feb 6 and March 13. + Reuter + + + +20-MAR-1987 17:27:19.61 +acq +canada + + + + + +E A +f2561reute +d f BC-chrysler-credit-canad 03-20 0107 + +CHRYSLER'S <C> CREDIT CANADA PLACED ON CREDITWATCH + Montreal, March 20 - Canadian Bond Rating Service said it +placed Chrysler Credit Canada Ltd, a subsidiary of Chrysler +Corp <C>, on creditwatch until all financial details concerning +the proposed acquisition of American Motors Corp <AMO> are +finalized. + The creditwatch affects Chrysler Credit Canada's short term +notes, guaranteed notes, debentures and the recently completed +75 mln dlr 9.25 Eurobond issue due April 15, 1993. + Canadian Bond Rating Service said that, based on facts +currently available on the proposed transaction, it does not +anticipate the necessity of a downgrade. + Canadian Bond Rating Service said Chrysler Credit Canada +short term notes are now rated A-2 (high) and guaranteed notes +and debentures are rated B plus plus (high). + Reuter + + + +20-MAR-1987 17:27:55.93 +earn +usa + + + + + +F +f2565reute +u f BC-LILCO-<LIL>-REVISES-1 03-20 0089 + +LILCO <LIL> REVISES 1986 NET TO INCLUDE LOSS + HICKSVILLE, N.Y., March 20 - Long Island Lighting Co said +it revised its preliminary 1986 net income to include a 16 mln +dlrs after tax provision for its investment in the Jamesport +Nuclear units. + Due to the provision, it said its revised 1986 net income +was 316.7 mln dlrs or 2.13 dlrs per share after deducting for +preferred stock dividend requirements, which were not paid in +either 1986 or 1985. + It had earlier reported 1986 income of 332.7 mln dlrs or +2.28 dlrs per share. + LILCO also said its board authorized contracts for its +corporate officers calling for payment of one year's salary, +and continuation of insurance and retirement benefits if the +company changes hands and these officers lose their jobs. + LILCO said none of these contracts will result in +additional costs to its customers. + Lilco said the downward revision in its 1986 earnings is a +reserve established to reflect a settlement agreement with the +staff of New York State's Public Service Commission respecting +the utility's spending on a nuclear power station planned for, +but never built at, Jamestown, N.Y. + The company declined to detail the settlement, explaining +the settlement has not been approved by the commission. Lilco +was seeking to include costs totaling 118 mln dlrs for the +abandoned nuclear power plant project in its rate base, a +spokeswoman said. + Reuter + + + +20-MAR-1987 17:29:58.63 +acq +usa + + + + + +F +f2571reute +d f BC-ROGERS-<ROG>-ADOPTS-R 03-20 0104 + +ROGERS <ROG> ADOPTS RIGHTS PLAN + ROGERS, Conn., March 20 - Rogers Corp said its board +approved a shareholder rights plan designed to protect its +shareholders in the event of an attempted hostile takeover. + Rogers said the plan is not being adopted in response to +any specific takeover attempt. + Under the plan, shareholders may buy one share of common +stock at 65 dlrs for each share held. The rights will be +exercisable only if a person or group acquires 20 pct or more +of Rogers' shares or announces an offer for 30 pct or more. + The dividend distribution will be made March 30 to holders +or record on that date. + Reuter + + + +20-MAR-1987 17:32:18.21 + +usa + + +nyse + + +F +f2575reute +u f BC-WALL-STREET-SURVIVES 03-20 0102 + +WALL STREET SURVIVES TRIPLE EXPIRATIONS + By Cal Mankowski, Reuters + NEW YORK, March 20 - The four-times-a-year "triple +witching hour" did not jolt Wall Street as much as it has in +the past. + Market averages finished sharply higher as stock index +futures, index options and options on individual stocks expired +simultaenously. Some analysts warned part of the gain may be +retraced next week. But there were signs Wall Street is getting +used to the phenomeon which causes a huge burst of activity in +the final minutes. Officials of the New York Stock Exchange +said the day went smoothly and efficiently. + "This has been one of the few times that the consensus has +been right," said Jim Creber, trader at Miller, Tabak, Hirsch +and Co. + He expects a "follow-through" Monday and Tuesday to the +advance which lifted the Dow Jones Industrial Average 34 points +for the day and 75 points for the entire week. + Creber, whose firm was one of the first to get involved in +arbitrage activity involving index futures and options, said +the general trend of the market has been upward for months. +"Every time the market comes in, somebody comes along with more +money," he said. + He said investors adding to Individual Retirement Accounts +prior to a mid-April tax deadline and buying from Japanese +investors are apparently helping push stocks higher. + Ron Feinstein, an analyst with Dean Witter Reynolds Inc, +said reports of heavy Japanese buying, just prior to the end of +the fiscal year in Japan, fueled bullish sentiment. + He said investors who had long positions in stocks hedged +with short positions in index futures rolled the expiring March +futures over into June contracts. But he added different +players with other goals also were active and there was no +simple explanation of the market's gyrations. + For example, Feinstein noted the June contract for the June +Standard and Poor's 500 stock index future hit 300 about 15 +minutes prior to the close of NYSE trading. In 12 minutes, the +contracted dipped to 297.50. "That could have been a wave of +selling from institutional people making a roll," he said. + It was the first time a nearby contract of the S and P 500 +hit 300. The cash index closed at a record 298.17. "It looks +like the market is going to continue to go higher," he said. + "Triple expirations didn't really mean that much, it was a +strong day for stocks," said Steve Chronowitz of Smith Barney, +Harris Upham and Co. + Chronowitz said the stock market has been underpinned by +"good solid buying interest" which will cushion any pullback. + Other investors who were long futures and short stocks +bought stocks on the close today instead of rolling over, said +Mark Zurack of Goldman, Sachs and Co. He cautioned against +"over-dramatizing" the day's activity, which said was more a +reflection of fundamental strength in the markets. + Leigh Stevens of PaineWebber Group Inc said what he saw was +mostly covering of short positions in stocks as index options +and individual options expired. He said there could be a +decline early next week in the stock market. + "It looked like it worked well today," said Howard Kramer, +asssistant director of market regulation for the Securities and +Exchange Commission. But he said all of the data will have to +be analyzed next week. + He said there was relatively little commotion at the close, +with about 50 mln shares changing hands in the final minute +compared to 85 mln in the triple expirations three months +earlier. He noted the Dow industrials jumped about 12 points in +the closing minutes, a modest move for a 2333-point index. + Kramer pointed out an SEC-NYSE measure to curb volatility, +disclosure of "market-on-close" orders in 50 major stocks 30 +minutes prior to the end of trading, showed imbalances of +modest proportions. The disclosures are aimed at evening out +volatility by attracting orders on the opposite side of the +imbalance. + The data showed more buy orders than sell orders for 47 +stocks, a preponderance of sell orders for only one stock, and +no significant imbalance for two stocks. The NYSE had tightened +a rule governing what type of market on close orders can be +accepted in the final half hour. + Reuter + + + +20-MAR-1987 17:39:14.71 +earn +usa + + + + + +F +f2586reute +s f BC-EASTGROUP-PROPERTIES 03-20 0037 + +EASTGROUP PROPERTIES <EGP> DIVIDEND + JACKSON, MISS., May 20 + Qtly div 65 cts vs 65 cts prior + Payable APril 22 + REcord April 10 + NOTE:Company paid 30 cts special dividend along with prior +quarter's dividend + Reuter + + + + + +20-MAR-1987 17:40:10.54 +earn +usa + + + + + +F +f2588reute +r f BC-SUNBELT-NURSERY-GROUP 03-20 0050 + +SUNBELT NURSERY GROUP INC <SBN> 2ND QTR FEB 28 + FORT WORTH, Texas, March 20 - + Shr loss 40 cts vs loss 29 cts + Net loss 1.5 mln vs loss 1.1 mln + Revs 28.9 mln vs 28.5 mln + Six months + Shr loss 99 cts vs loss 69 cts + Net loss 3.7 mln vs loss 2.6 mln + Revs 52.5 mln vs 51.7 mln + + Reuter + + + +20-MAR-1987 17:41:26.30 +earn +usa + + + + + +F +f2590reute +d f BC-MARCOM-TELECOMMUNICAT 03-20 0067 + +MARCOM TELECOMMUNICATIONS <MRCM> 2ND QTR JAN 31 + WEST PALM BEACH, Fla., March 20 - + Oper shr loss five cts vs loss six cts + Oper net loss 157,688 vs loss 96,573 + Revs 1,094,331 vs 1,378,973 + Avg shrs 3,315,654 vs 1,661,023 + Six mths + Oper shr loss seven cts vs loss 24 cts + Oper net loss 198,555 vs loss 394,589 + Net 2,243,377 vs 2,440,850 + Avg shrs 2,796,848 vs 1,637,592 + NOTE: Current year 2nd qtr and six mths excludes a loss +10,767 dlrs for discontinued operations. + Prior year 2nd qtr and six mths excludes a loss of 54,686 +dlrs and 112,565 dlrs for discontinued operations. + Full name of company is Marcom Telecommunications Inc. + Reuter + + + +20-MAR-1987 17:43:13.77 +earn +usa + + + + + +F +f2600reute +s f BC-EASTPARK-REALTY-TRUST 03-20 0024 + +EASTPARK REALTY TRUST <ERT> QTLY DIV + JACKSON, MISS, March 20 - + Qlty div 25 cts vs 25 cts prior + Payable April 22 + Record April 10 + Reuter + + + +20-MAR-1987 17:44:23.79 +trade +canadausa + + + + + +E +f2604reute +h f AM-TRADE 03-20 0138 + +CANADA'S CLARK SEES TRADE AS MOST URGENT PROBLEM + By Dean Lokken, Reuters + SAN FRANCISCO, March 20 - Trade is the most urgent problem +facing U.S.-Canadian relations because of a pressing need to +reach a new bilateral pact within the coming months, Joe Clark, +Canadian secretary of state for external affairs, said. + Negotiators for the two countries have been meeting for +more than a year in an effort to work out an agreement. + "The most urgent problem now is the trade question because +that has to be decided within the next 10 months," Clark told +the Commonwealth Club of California. "We have a fast track +authority from your Congress for approval or rejection of +whatever the negotiators achieve." + Clark said that, as a practical matter, an initial +agreement must be reached by late September or early October. + He listed environmental questions, particularly acid rain, +and defense as the second and third most important bilateral +issues facing Ottawa and Washington. + On Wednesday, President Reagan announced that he will seek +2.5 billion dlrs from Congress to address the acid rain +problem. Some interpreted the move as a goodwill gesture in +advance of his annual meeting, on April 5-6 in Ottawa, with +Prime Minister Brian Mulroney. + In a question-and-answer session with the public affairs +group, Clark said that the two countries must find better +mechanisms for resolving their trade disputes. + "This rash of countervailing actions, where we acted on +corn and you acted on soft wood and we both said they were +quasijudicial -- the dispute resolution mechanisims in place +now are not working adequately in either of our interests," he +said. + Ottawa also is seeking to change some of Washington's rules +on government procurement that penalize Canadian businesses, he +said. + "There are a number of Canadian companies that, in order to +secure substantial contracts in the United States, have had to +move their head offices out of our country into your country +because you have national procurement requirements," he said. + In turn, he added, the United States would like to change +some of the procurement requirements that exist at the +provincial government level in Canada. + Clark declined to forecast the outcome of the discussions. + "What will come out of it remains for the negotiators, in +the first instance, to propose, and then governments and +congresses will have judge," he said. + In his prepared remarks, Clark said that the United States +has tended to take Canada for granted, although it exports to +its northern neighbor more than twice what it exports to Japan. +"Yet you bought almost 10 per cent more from Japan last year +than you bought from Canada," he said. REUTER + Reuter + + + +20-MAR-1987 17:45:15.30 +earn +usa + + + + + +F +f2605reute +h f BC-ESSEX-CORP-<ESEX>-YEA 03-20 0056 + +ESSEX CORP <ESEX> YEAR END LOSS + ALEXANDRIA, Va., March 20 - + Oper shr loss 11 cts vs profit 33 cts + Oper net loss 132,000 vs profit 408,000 + Revs 25.2 mln vs 23.0 mln + NOTE: 1986 and 1985 oper net excludes a loss of 636,000 +dlrs or 52 cts per share and a loss of 994,000 dlrs or 80 cts +per share for discontinued operations. + Reuter + + + +20-MAR-1987 17:45:24.11 + +usaindonesia + + + + + +F +f2606reute +r f BC-DELTA- 03-20 0078 + +U.S. LAUNCHES INDONESIAN COMMUNICATIONS SATELLITE + CAPE CANAVERAL, March 20 - NASA launched an Indonesian +communications satellite aboard a Delta rocket, marking the +first international payload to be put into orbit since the +Challenger disaster more than a year ago. + The 43 mln dlr satellite, the Palapa B2-P, was launched as +the result of an agreement reached last year between President +Ronald Reagan and Indonesia's President Suharto when they met +on Bali. + + Reuter + + + +20-MAR-1987 17:50:45.11 +earn +canada + + + + + +E F Y +f2617reute +r f BC-sulpetro 03-20 0093 + +<SULPETRO LTD> YEAR OCT 31 LOSS + CALGARY, Alberta, March 20 - + Shr loss 19.22 dlrs vs loss 3.90 dlrs + Net loss 276.4 mln vs loss 45.6 mln + Revs 85.4 mln vs 113.3 mln + NOTE: Shr results after deducting preferred share dividends +of 13.1 mln dlrs in both periods. + Current loss includes a 125 mln dlr writedown of oil and +gas properties, a 67 mln dlr writeoff of deferred charges, a +22.5 mln dlr loss on disposal of U.K. properties, a 21.2 mln +dlr equity loss from affiliate Sulbath Exploration ltd and a +4.6 mln dlr loss on other investments. + Reuter + + + +20-MAR-1987 17:51:40.27 + +canada + + + + + +E +f2619reute +d f BC-alberta-budget-sets 03-20 0097 + +ALBERTA BUDGET SETS TAX INCREASE, LOWER DEFICIT + EDMONTON, Alberta, March 20 - The Alberta provincial +government will increase its general corporate tax rate on +April 1 to 15 pct from 11 pct under its 1987-88 budget +announced today, provincial treasurer Dick Johnston said. + The budget forecasts the 1987-88 provincial deficit to be +1.90 billion dlrs, compared to a forecast deficit of 3.30 +billion dlrs for fiscal 1987, which ends March 31, Johnston +said. + The budget forecasts fiscal 1988 revenues of 8.63 billion +dlrs and expenditures of 10.42 billion dlrs, Johnston said. + The provincial budget raises combined personal and +corporate income taxes by about 20 pct, Johnston said. + Johnston told a news conference taxes were increased after +revenues from oil and gas taxes fell by 64 pct last year and +are not expected to increase sharply in the short term. + The provincial government expects resource tax revenues for +fiscal 1987 to fall to 1.30 billion dlrs from a previously +estimated 2.20 billion dlrs, compared to 3.60 billion dlrs +collected in fiscal 1986 before the collapse in oil prices. + Johnston told reporters he needed to raise taxes in order +to begin moving towards a balanced budget in 1990-91. + Johnston said the personal income tax increase takes three +forms. The basic provincial tax rate rises to 46.5 pct from +43.5 pct of the basic federal income tax rate. + The provincial budget also imposed a temporary eight pct +surtax on individuals with taxable income of more than 36,000 +dlrs, he said. + In addition, the government levied a flat one pct surtax on +all individuals with taxable income. + Johnston said overall government spending of 10.42 billion +dlrs represents a cut of 4.4 pct, but various grants and tax +credits for agriculture and energy industries will remain. + Reuter + + + +20-MAR-1987 17:54:04.61 + +usa + + + + + +F +f2622reute +d f BC-WISCONSIN-ELECTRIC-<W 03-20 0085 + +WISCONSIN ELECTRIC <WTC> OFFERS PREFERRED + NEW YORK, March 20 - Wisconsin Electric Power Co said it +began a public offering of 700,000 shares of serial preferred +stock, 6-3/4 pct series, 100 dlrs par value, at a price of 100 +dlrs per share. + The shares are being offered pursuant to a shelf +registration covering 700,000 sahres of serial preferred stock +which the company filed on February 19, 1987. + Proceeds will be used to redeem outstanding preferred stock +or for repayment of short-term indebtedness. + Reuter + + + +20-MAR-1987 17:55:02.25 + +usa + + + + + +A RM +f2623reute +r f BC-TEXAS-AIR-<TEX>-UNIT 03-20 0116 + +TEXAS AIR <TEX> UNIT SELLS EQUIPMENT-BACKED DEBT + NEW YORK, March 20 - Continental Airlines Inc, a unit of +Texas Air Corp, is offering 350 mln dlrs of equipment-backed +debt securities in three tranches and another 150 mln dlrs of +senior notes due 1997, said lead manager Drexel Burnham. + A 100 mln dlr offering of first priority secured equipment +certificates due 1992 was given a 10 pct coupon and par +pricing. This tranche is non-callable to maturity. + A 125 mln dlr issue of second priority secured equipment +certificates due 1995 has an 11 pct coupon and par pricing and +an equal-sized offering of third priority certificates due 1999 +was given an 11-3/8 pct coupon and par pricing. + The second two tranches of the equipment-backed deal are +non-callable for five years, Drexel said. + Continental's 10-year notes were assigned an 11-1/2 pct +coupon and priced at par. They are non-callable for five years. +Texas Air has guaranteed the scheduled payments of interest and +principal for the senior notes. + The securities are rated B-2 by Moody's and B by Standard +and Poor's. Kidder Peabody, Merrill Lynch and Smith Barney +co-managed the issues. Proceeds, estimated at 486 mln dlrs, +will be used to repay about 254 mln dlrs of bank debt, with the +remainder added to working capital, Continental said. + Reuter + + + +20-MAR-1987 18:00:25.76 +earn +usa + + + + + +F +f2628reute +r f BC-STANWOOD-CORP-<SNW>-4 03-20 0073 + +STANWOOD CORP <SNW> 4TH QTR JAN 3 + NEW YORK, March 30 - + Shr loss 1.12 dlrs vs profit one cts + Net loss 1.7 mln vs profit 8,000 dlrs + Revs 31.8 mln vs 42.1 mln + Year + Shr loss 51 cts vs profit 57 cts + NEt loss 780,000 vs profit 876,000 + Revs 117.8 mln vs 117.3 mln + NOTE:1986 4th qtr includes loss of 911,000 for termination +of licensing agreement and loss of 319,000 dlr for termination +of womens wear operation. + Reuter + + + +20-MAR-1987 18:01:38.04 + +usa + + + + + +F +f2630reute +r f BC-GUEST-SUPPLY-<GEST>-G 03-20 0059 + +GUEST SUPPLY <GEST> GETS SHAREHOLDER SUIT + NORTH BRUNSWICK, N.J., March 20 - Guest Supply INc said a +shareholder sued it and certain officers and directors, +alleging misrepresentations and omissions in the prospectus for +the company's September 1986 public offering. + Guest said the complaint is without merit and will defend +the action vigorously. + Reuter + + + +20-MAR-1987 18:01:49.51 + +usabraziljapan +conable +worldbankimf + + + +A RM +f2631reute +r f BC-CONABLE-SAYS-BRAZIL-D 03-20 0106 + +CONABLE SAYS BRAZIL DEBT MORATORIUM IS TEMPORARY + WASHINGTON, March 20 - World Bank President Barber Conable +said he believed Brazil's decision to suspend foreign debt +interest payments is temporary. + Conable in a wide-ranging television interview to be shown +on public broadcasting tomorrow said Brazil now has the +attention of its creditors and must come up with a plan +designed to reform its economy. + "I think the Brazilians have the attention of many of their +creditors, but they must come up with a plan that will persuade +people that the Brazilian economy is going to be put on a +course that will result in some growth." + Turning to Japan, Conable said the role of that country has +been increasing in the World Bank and is expected to continue +to do so. + He said that Japan had made an additional 450 mln dlr +pledge to the International Development Association, an +indication that it agrees that it must provide more help in +line with its economic position. + Conable said there was no indication that the Soviet Union +was serious about joining the International Monetary Fund and +World Bank. He said they would have to get convertible currency +and open their books and the Soviets "don't usually do that." + REUTER + + + +20-MAR-1987 18:06:35.19 +earn +canada + + + + + +E F Y +f2635reute +r f BC-sulpetro-loss-due-to 03-20 0116 + +SULPETRO LOSS DUE TO WRITEDOWNS, ASSET DISPOSALS + Calgary, Alberta, March 20 - <Sulpetro Ltd> said its 1986 +fiscal year net loss of 276.4 mln dlrs, or 19.22 dlrs per +share, was due to several factors, the largest of which was a +writedown of 125.0 mln dlrs of oil and gas properties. + Sulpetro also recorded a writeoff of deferred charges +amounting to 67.0 mln dlrs, a loss of 22.5 mln dlrs on the +disposal of all properties in the United Kingdom and an equity +loss of 21.2 mln dlrs from affiliate Sulbath Exploration Ltd. + There was also a loss on other investments of 4.6 mln dlrs +and a loss on operations of 36.1 mln dlrs after interest, +depletion, depreciation and income tax recoveries. + In the fiscal year ended October 31, 1985, Sulpetro had a +net loss of 45.6 mln dlrs, or 3.90 dlrs per share. + The company also said its non-recourse project financing +for the Irish-Lindergh heavy oil field remains in default due +to continuing low oil prices. + Reuter + + + +20-MAR-1987 18:07:55.50 +acq +usa + + + + + +F +f2636reute +u f BC-AMERICAN-EXPRESS-<AXP 03-20 0099 + +AMERICAN EXPRESS <AXP> TO DISCUSS SHEARSON DEAL + New York, March 20 - American Express Co's board of +directors Monday will discuss the company's arrangement to sell +13 pct of Shearson Lehman Brothers Inc to Nippon Life Insurance +Co, a company spokesman said. + The spokesman would not say whether the board is planning +to vote on the understanding between American Express and +Nippon Life. The Shearson stake is to be sold for 530 mln dlrs, +American Express has said. + The spokesman also would not comment on speculation that +the board was to discuss a sale of securities to the public. + Monday's board meeting is a regular monthly meeting. The +plan to sell part of Shearson to Nippon Life must be approved +by the American Express board and Japan's Ministry of Finance. + Earlier, American Express and Shearson said they were +subpoenaed by the Securities and Exchange Commission. American +Express said it was subpoenaed for documents pertaining to +securities transactions of American Express and Fireman's Fund. +Shearson was subpoenaed for documents related to transactions +with Jefferies and Co and others. + The American Express spokesman said he could not comment on +whether any officials of the firm were subpoenaed. + Reuter + + + +20-MAR-1987 18:11:31.62 +crudenat-gasfuel +usa + + + + + +Y +f2642reute +r f BC-NATURAL-GAS-SEEN-RECA 03-20 0107 + +NATURAL GAS SEEN RECAPTURING SOME MARKET SHARE + By NAILENE CHOU-WIEST, Reuters + NEW YORK, March 17 - Higher crude oil prices will raise +demand for natural gas, helping it to reclaim market share lost +to heavy oil when prices plunged in 1986, analysts said. + The analysts said that these efforts will be most +successful in the industrial sectors of the economy with large +and growing energy requirements. + "Natural gas stands a good chance to recapture the share of +oil supplied to electric utilities that it lost to the residual +fuel industry last year," Michael Smolinski, an energy +economist with Data Resources Inc, told Reuters. + An estimated 200,000 barrels per day of residual fuel went +into the utilities market at the expense of natural gas last +year when world oil prices plunged, Smolinski said. + Assuming oil prices hold above 15 dlrs a barrel, national +average gas prices delivered to the utilities at a projected +2.10 to 2.25 dlrs per mln Btu would be very competitive, +Michael German, vice president of economic analysis at American +Gas Association said. + The average delivered prices at the end of January were +2.10 dlrs per mln Btu, compared with 3.26 dlrs a year ago. + "We expect natural gas to regain 250 to 400 billion cubic +feet (of demand) in the overall energy market in the second and +third quarter (1987)," he said. + In addition to price competitiveness, availability will be +an important factor persuading energy users to switch to gas, +Frank Spadine, senior energy economist with Bankers Trust Corp. +in New York noted. + Spadine said the mild winter in many parts of the North +American continent has led to a build up of gas inventories and +less would be necessary to replenish underground storage this +spring freeing gas for spot sales. + These forecasts develop a strong counterpoint to the fears +that natural gas suplies would be tight and prices +significantly higher given a sharp decline in drilling last +year. + AGA's German contended that despite the drilling decline, +much of U.S. proved reserves could be brought to production +quickly through developments such as the infill drilling which +permits more wells to be drilled in proved reserve basins. + Citing recent EIA statistics, German said, the gas surplus +was likely to contract from three trillion cubic feet in 1986 +to two trillion cubic feet in 1987, but the surplus would not +go away until 1990. + Smolinski of Data Resources agreed that the surplus would +persist until 1990. While gas supplies may tighten in certain +consuming areas, notably in California and in the Northeast +U.S., an overall shortfall appeared remote. + Reuter + + + +20-MAR-1987 18:14:24.22 + +usa + + + + + +F +f2647reute +r f BC-LOUISIANA-LAND-<LLX> 03-20 0064 + +LOUISIANA LAND <LLX> ASSUMES INEXCO'S DEBT + NEW ORLEANS, March 20 - Louisiana Land and Exploration Co +said it assumed the obligation to pay the principal and +interest on the 8-1/2 pct convertible subordinated debentures +due September 1, 2000 of Inexco Oil Co, a unit of Louisiana +Land. + Effective March 23, the debentures will be listed as the +debentures of Louisiana Land, LLXOO. + Reuter + + + +20-MAR-1987 18:16:46.86 + +canada + + + + + +E A +f2653reute +r f BC-macmillan-bloedel-to 03-20 0063 + +MACMILLAN BLOEDEL <MMBLF> TO REDEEM DEBENTURES + VANCOUVER, British Columbia, March 20 - MacMillan Bloedel +Ltd said it will redeem all outstanding nine pct series J +debentures on April 27, 1987 for 34.9 mln U.S. dlrs, plus a +premium of one pct and accrued and unpaid interest. + The series J debentures were issued in Europe in 1977 and +were due February 1992, the company said. + Reuter + + + +20-MAR-1987 18:19:27.03 +trade +usajapan + + + + + +F A RM +f2659reute +r f AM-TRADE-COMPUTERS 03-20 0106 + +U.S. SENATORS SAY SANCTIONS LIKELY ON MICROCHIPS + By Jacqueline Frank, Reuters + WASHINGTON, March 20 - The United States will likely impose +sanctions soon on imports of Japanese microchips, senators said +today after a private meeting with Commerce Secretary Malcolm +Baldrige. + Although the senators said Baldrige told them no decision +would be taken until a final determination is made on whether +Japanese microchips were dumped in the United States, they said +they were virtually sure Japan would face penalties. + President Reagan's trade policy advisory group, of which +Baldrige is a member, will meet on the issue Wednesday. + "I am confident we will see action taken," Sen. John McCain, +an Arizona Republican, told reporters. + "I am expecting sanctions at least, and even more than +sanctions," Sen. Pete Domenici, a New Mexico Republican, said. + The senators, several congressmen and U.S. semiconductor +industry representatives met with Baldrige and State Department +officials to discuss Japan's alleged violations of a September +1986 agreement to stop dumping its microchips in the United +States and other countries. + They recommended Japanese firms be penalized through +tariffs or import duties over the next six to 12 months for +continuing to dump microchips. The violations were worth 100 +mln dls to the Japanese semiconductor industry, they said. + Asked if Baldrige intended to recommend sanctions, Sen. +Pete Wilson told reporters, "The clear import of what he said is +that there will be." + "Japan can't just say they will comply. We think sanctions +must be applied," for past violations of the agreement, the +California Republican said. + The semiconductor industry produces microprocessor chips +which are used in high technology products ranging from radios +to defence missile guidance systems. + Sen. James McClure, an Idaho Republican, said Baldrige told +them the administration had not made a final determination that +Japanese companies had dumped semiconductor microchips below +the cost of production in the United States or other countries. + But McClure said senators told him, "There is no doubt +dumping is going on," based on evidence such as invoices of +purchases of the Japanese products. + The two countries signed a pact last September in which +Japan agreed to stop selling its microchips in the United +States and other countries below production costs and to allow +the U.S. semiconductor industry access to the Japanese market. + In return, the United States waived its right to impose +import duties on the Japanese microchips. + Japanese officials have said they have lived up to the pact +and have asked Japanese chip-makers to further slash output to +save the pact. + Japan has frequently been the target of congressional +discouragement over last year's record 169-billion-dlr trade +deficit. Tokyo had a 59-billion-dlr surplus with the United +States last year and had large surpluses with other countries. + The Senate yesterday unanimously passed a resolution +calling for action against Japan for violations of the pact +since September. The resolution will be introduced in the House +next week by Rep. Bob Matsui, a California Democrat. + Reuter + + + +20-MAR-1987 18:20:01.80 +earn +usa + + + + + +F +f2661reute +d f BC-MULTI-MEDIA-SEES-YEAR 03-20 0093 + +MULTI-MEDIA SEES YEAR END LOSS + NEW YORK, March 20 - Multi-Media Barter Ltd said it expects +to report a net loss of 820,000 dlrs or 17 cts a share for the +year ended December 31, compared to a loss of 553,000 or 11 cts +a share in the prior year. + The fourth quarter resulted in a net loss of 227,000 or +four cts compared to a loss of 330,000 or six cts a shares last +year. + It said it is currently in the process of restructuring by +reducing expenses and streamlining operations and has cut +expenses from 50,000 dlrs to less than 15,000 dlrs a month. + Reuter + + + +20-MAR-1987 18:25:06.34 + +usa + + + + + +F +f2670reute +d f BC-WIEBOLDT'S-TO-CLOSE-E 03-20 0110 + +WIEBOLDT'S TO CLOSE EIGHT STORES + CHICAGO, March 20 - Wieboldt's Department Stores, in +Chapter 11 bankruptcy since September 1986, said as part of an +agreement with creditors it will operate its four largest and +most productive stores but close the remaining eight stores. + It said 341 employees of its remaining 885 employees will +be laid off or terminated as a result. + The company also said it established a fund of about 12 mln +dlrs to be available for payment of creditors' claims. + The retailer said it would continue to operate its four +largest and most productive Chicago area outlets - State +Street, Randhurst, Harlem-Irving and Ford City. + Reuter + + + +20-MAR-1987 18:26:27.13 +earn +usa + + + + + +F +f2673reute +w f BC-NATIONAL-HMO-CORP-<NH 03-20 0058 + +NATIONAL HMO CORP <NHMO> 2ND QTR JAN 31 + MELBOURNE, Fla, March 20 - + Shr loss nine cts vs profit nine cts + Net loss 478,000 vs profit 371,000 + Revs 3.4 mln vs 2.6 mln + Six months + Net loss 466,000 vs profit 685,000 + Revs 6.2 mln vs 5.0 mln + NOTE:1987 net loss includes writeoff of deferred start up +costs totaling 490,000 dlrs. + Reuter + + + +20-MAR-1987 18:39:41.65 +earn +canada + + + + + +F +f2685reute +r f BC-MINORCO-<MNRCY>-HALF 03-20 0038 + +MINORCO <MNRCY> HALF YEAR DEC 31 + TORONTO, ONtario, March 20 - + Shr 26 cts vs 38 cts + Net 44.0 mln vs 65.0 mln + NOTE:1986 net includes one mln dlr extraordinary gain and +1985 net icludes four mln dlrs extraordinary loss. + Reuter + + + +20-MAR-1987 18:41:04.26 + +usaphilippines + + + + + +RM A +f2686reute +u f BC-PHILIPPINE-DEBT-TALKS 03-20 0110 + +PHILIPPINE DEBT TALKS TO CONTINUE ON SATURDAY + NEW YORK, March 20 - The Philippines and its bank advisory +committee completed another round of debt rescheduling talks +and will meet again on Saturday, a senior banker said. + Although today's negotiations did not produce a final +agreement, the decision to meet at the weekend appears to be a +signal that the two sides are making progress. + The Philippines seeks to restructure 9.4 billion dlr of its +27.2 billion dlr foreign debt. The interest rate to be charged +on the debt and Manila's proposal to pay interest partly with +investment notes instead of cash have been the main sticking +points in the talks. + Reuter + + + +20-MAR-1987 18:41:09.81 +earn +usa + + + + + +F +f2687reute +r f BC-MINORCO-<MNRCY>-SEES 03-20 0069 + +MINORCO <MNRCY> SEES IMPROVED SECOND HALF + TORONTO, Ontario, March 20 - Minorco said it expects net +earnings to be substantially stronger than the 44.0 mln dlrs +reported for the first half. + In reporting that first half results declined from 65.0 mln +dlrs, Minorco said the contributions from its 50 pct investment +in December 1985 in Adobe Resources Corp was negative as a +result of low oil and gas prices. + Reuter + + + +20-MAR-1987 18:41:20.90 +earn +usa + + + + + +E +f2688reute +r f BC-MINORCO-<MNRCY>-SEES 03-20 0069 + +MINORCO <MNRCY> SEES IMPROVED SECOND HALF + TORONTO, Ontario, March 20 - Minorco said it expects net +earnings to be substantially stronger than the 44.0 mln dlrs +reported for the first half. + In reporting that first half results declined from 65.0 mln +dlrs, Minorco said the contributions from its 50 pct investment +in December 1985 in Adobe Resources Corp was negative as a +result of low oil and gas prices. + Reuter + + + +20-MAR-1987 18:44:31.15 + +usa + + + + + +A +f2691reute +r f BC-FDIC-SAYS-INDIANA-BAN 03-20 0091 + +FDIC SAYS INDIANA BANK BECOMES 48TH TO FAIL + WASHINGTON, March 20 - The Federal Deposit Insurance Corp +said state banking regulators closed the Morocco State Bank in +Morrocco, Indiana, bringing the total number of banks to fail +so far this year to 48. + The failed bank's 14.1 mln dlrs in deposits and 9.9 mln +dlrs of its loans and other assets will be assumed by DeMotte +State Bank in DeMotte, Ind, the FDIC said. + The FDIC said it will advance 3.7 mln dlrs to help the +transaction and would retain 5.1 mln dlrs in the failed banks +assets. + Reuter + + + +20-MAR-1987 18:48:35.54 + +usa + + + + + +V RM +f2693reute +u f AM-ARMS-KAMPELMAN 03-20 0112 + +U.S. ARMS NEGOTIATOR SAID TO HAVE HEART ATTACK + WASHINGTON, March 20 - U.S. arms negotiator Max Kampelman +suffered a mild heart attack, an aide said. + Nancy Tackett, Kampleman's staff assistant, told Reuters +Kampelman was doing well and was expected to leave George +Washington Hospital in about a week. + "A full recovery is expected," she said. + Kampelman did not feel well yesterday and may have +sufffered the heart attack then, Tackett said. He had a +regularly-scheduled physical this morning and entered the +hospital after that, on his doctor's advice, she said. + A hospital spokesman confirmed that Kampelman was a +patient in the coronary care unit. + + Reuter + + + +20-MAR-1987 18:49:16.73 + +usa + + + + + +A +f2695reute +u f BC-DALLAS-BASED-THRIFT-C 03-20 0103 + +DALLAS-BASED THRIFT CLOSED BY REGULATORS + WASHINGTON, March 20 - The Federal Home Loan Bank Board +said Dallas-based Vernon Savings and Loan Association, the 15th +largest thrift in Texas, was closed by state authorities and +its assets, deposits and liabilities were transfered to a new +federally chartered association. + Vernon, with 1.35 billion dlrs of assets and nine offices +in Texas and Oklahoma, was closed after state regulators +concluded it was in unsafe and unsound condition. + The thrift was owned by Texas businessman Donald Dixon, who +bought it in early 1982, when it had only 120 mln dlrs in +assets. + The bank board said growth was accomplished largely through +the purchase of brokered deposits and the sale of jumbo +certificates of deposit, which totaled 29 pct of total deposits +at the end of 1986. + The bank board also said that 96 pct of its loan portfolio +was nonperforming as a result of sloppy loan practices. + It said Vernon also paid excessive salaries and dividends +to officers and directors and bought a beach house and five +airplances for the use of thrift executives and stockholders. + The bank board ousted the thrift's officers and directors +and hired another Texas association to run it. + The bank board also said it closed First Federal of +Maryland, a federal savings association that had 115.2 mln dlrs +in assets. It said its 118 mln dlrs in insured deposits were +transferred to Columbia First Federal Savings and Loan +Association of Washington, D.C. + The bank board said First Federal had engaged in unsound +loan underwriting practices and many of the loans are now +deliquent. The institution experienced heavy and continuing +losses and became insolvent, the bank board said. + Reuter + + + +20-MAR-1987 18:50:54.45 +tin +bolivia + +imfworldbank + + + +RM A +f2699reute +r f BC-BOLIVIA-PREPARES-FOR 03-20 0108 + +ECONOMIC SPOTLIGHT - BOLIVIA + By Paul Iredale, Reuters + LA PAZ, March 20 - Bolivia, once Latin America's most +delinquent debtor, is preparing for a second International +Monetary Fund agreement after an economic stabilisation program +has effectively slowed inflation and reduced public spending. + A fund spokesman said an IMF team would visit La Paz +shortly to discuss terms of the new agreement. + He said the IMF had disbursed 130 mln dlrs here and 20 mln +dlrs are pending under the one year agreement that ends this +month. The accord provided for a stand-by loan, a compensatory +financing facility and a structural adjustment facility. + The spokesman said that if the agreement is renewed, +Bolivia can expect a further 60-mln-dlr stand-by loan over the +next 12 months. + Bolivia's agreement with the IMF, its first since 1980, +opened the door to rescheduling negotiations with the Paris +Club and Argentina and Brazil, which hold 2.5 billion dlrs of +Bolivia's 4.0-billion-dlr foreign debt. + Central Bank President Javier Nogales told Reuters the +negotiations with the Paris Club, which have yet to be +finalised, had been extremely successful. + Nogales said the Paris Club had agreed to reschedule +Bolivia's debt over 10 years with five to six years grace and +had waived all interest payments until the end of 1988. + Bilateral discussions on interest rates continue, he said. + Nogales said Bolivia was expecting some 400 mln dlrs in +disbursements this year from lender countries and international +agencies, including the World Bank and the Inter-American +Development Bank, although diplomatic and banking sources put +the figure at closer to 300 mln dlrs. + Nogales said Bolivia's net international reserves are +around 250 mln dlrs, up from one mln dlrs when President Ictor +Paz Estenssoro took office in august 1985. Nogales said the +capital flow on Bolivia's debt servicing versus new credits had +changed from a net outflow of 200 mln dlrs in 1985 to a net +inflow of 130 mln dlrs in 1986. + Bolivia's return from the financial wilderness follows paz +estenssoro's economic stabilisation program. He inherited +inflation of 23,000 pct a year, state enterprises that were +losing hundreds of mlns of dlrs and a currency that traded on +the black market at up to 16 times its official rate. + Paz estenssoro froze public sector wages, set a market- +related rate for the peso, introduced tax reforms and laid off +thousands of workers in state corporations. + Inflation has been running at 10 pct a year for the past +six months, according to the Central Bank, and the government +expects the economy to grow three pct this year after a 14 pct +contraction over the last six years. + The government is also proposing a novel solution to its +debt to commercial banks, some 900 mln dlrs, on which interest +has not been paid since March, 1984. + Nogales said that over the next few months Bolivia would +make a one-time offer to buy back all its commercial debt at +the price it trades on the international secondary market -- +10-15 cents on the dlr. He said Bolivia's commercial bank +steering committee agreed at a meeting in New York to consider +the proposal, but it is still unclear what proportion of the +country's creditor banks will take up the offer. + One foreign banker speculated that Bolivia might be able to +buy back up to 30 pct of its commercial debt paper under the +deal, mostly from small banks who have written off their loans +to the country. + But he said the larger creditors were more interested in a +scheme of debt-equity swaps, similar to that which has operated +in Chile for the past two years. + The Bolivian government has yet to draw up proposals for +debt-equity swaps, but the banker said it was planning to +privatise more than 100 state companies and these could serve +as a basis for such a scheme. + Foreign bankers said this type of proposal might prove +attractive to Bolivia in the long run, especially as the +government realises that it will have to attract a large amount +of new capital in order to grow. + Planning Minister Gonzalo Sanchez de Lozada told Reuters +that Bolivia was hoping for five to six billion dlrs in new +investment over the next 10 to 12 years. + The government realises that in order to remain viable, +Bolivia will need to develop new exports. + The price of tin, which accounted for some 45 pct of +Bolivia's exports in 1984, has collapsed on the world markets, +and gas, the country's major revenue earner, is in abundant +supply in the region. + Reuter + + + +20-MAR-1987 18:51:57.82 +earn +usa + + + + + +F +f2703reute +r f BC-NEOAX-INC-<NOAX>-4TH 03-20 0046 + +NEOAX INC <NOAX> 4TH QTR + LAWRENCEVILLE, N.J., March 20 - + Shr loss 13 cts vs loss six cts + Net loss 1.4 mln vs loss 635,000 + Revs 40.3 mln vs 28.5 mln + Year + Shr profit 40 cts vs profit 26 cts + Net profit 4.2 mln vs 2.6 mln + Revs 166.4 mln vs 94.6 mln + NOTE:1986 4th qtr and year net reflects dividend +requirements of 1.5 mln dlrs and 3.3 mln dlrs, and charges of +257,000 dlrs and 4.6 mln dlrs respectively which is not +accruable or payable because of pre-reorganization tax loss +carryforwards. + 1985 4th qtr and year net reflects dividend requirement of +1.1 mln dlrs and 2.3 mln dlrs, respectively, and charges of +472,000 dlrs and 2.9 mln dlrs respectively which is not +accruable or payable because of pre-organization tax loss +carryforwards. + Reuter + + + +20-MAR-1987 18:57:24.80 + +usa + + + + + +F +f2706reute +r f BC-PACIFIC-STOCK-EXCHANG 03-20 0083 + +PACIFIC STOCK EXCHANGE SHORT INTEREST UP + SAN FRANCISCO, March 20 - The Pacific Stock Exchange said +there was a total short interest of 1,413,674 shares of stock +exclusively traded on the Exchange as of March 13, an increase +of 102,486 shares from last month's restated total of +1,311,188. + The Exchange said the short interest ratio rose to 1.42 +from last month's ratio of 1.25. + The ratio is based on an average daily trading volume of +994,545 shares in the 47 issues included in the report. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-009.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-009.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-009.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-009.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2003 @@ + + +24-MAR-1987 15:59:17.10 + +usa + + + + + +F +f2412reute +u f BC-ADVANCED-MAGNETICS-<A 03-24 0066 + +ADVANCED MAGNETICS <ADMG> IN AGREEMENT + CAMBRIDGE, Mass., March 24 - Advanced Magnetics Inc said it +reached a four mln dlrs research and development agreement with +ML TEchnolgy Ventures LP, a limited partnership sponsored by +Merrill LYnch Capital Markets. + Under the agreement, Advanced Magnetics will develop and +conducts clinical trials of its contrast agents for magnetic +resonance imaging. + The agreement includes a warrant permitting MLTV to buy up +to 380,000 shares of Advanced Magnetics common stock through +February 1994 at 10.50 dlrs per sahre. + Reuter + + + +24-MAR-1987 15:59:39.63 + +usa + + + + + +F +f2414reute +d f BC-HEALTH-RESEARCH-FILES 03-24 0108 + +HEALTH RESEARCH FILES FOR BANKRUPTCY + MINNEAPOLIS, Minn., March 24 - <Health Research and +Management Group> said it has filed for protection under +Chapter 11 of the federal bankruptcy law. + The company said it filed the petitions to reorganize debt +and eliminate contingent liabilities it incurred while +attempting to expand nationally. + Health Research also said it owes about 750,000 dlrs of its +1.1 mln dlrs in debt to <MedPro Group Inc>, a former jont +venture partner. + The company added it has asked the Minnesota Department of +Commerce to suspend trading of its common stock pending +dissemination of current financial information. + Also, the company said George Frisch has been elected +chairman of the board, president and chief executive officer, +replacing Daniel Zismer, who resigned as chairman of the board +and O. Frederick Kiel, who resigned as president and chief +executive officer. + Reuter + + + +24-MAR-1987 16:00:01.29 +earn +usa + + + + + +F +f2415reute +h f BC-NUMEREX-CORP-<NMRX>-2 03-24 0052 + +NUMEREX CORP <NMRX> 2ND QTR JAN 31 LOSS + MINNEAPOLIS, MINN., March 24 - + Shr loss seven cts vs profit five cts + Net loss 149,421 vs profit 103,120 + Sales 1,698,345 vs 1,920,010 + Six Mths + Shr loss five cts vs profit nine cts + Net loss 100,472 vs profit 191,614 + Sales 3,836,794 vs 3,650,322 + Reuter + + + +24-MAR-1987 16:01:25.88 + + + + + + + +V RM +f2419reute +f f BC-******U.S.-SELLING-12 03-24 0015 + +******U.S. SELLING 12.8 BILLION DLRS OF 3 AND 6-MO BILLS MARCH 30 TO PAY DOWN 1.2 BILLION DLRS +Blah blah blah. + + + + + +24-MAR-1987 16:02:17.95 + + + + + + + +V RM +f2423reute +f f BC-******U.S.-2-YEAR-NOT 03-24 0015 + +******U.S. 2-YEAR NOTE AVERAGE YIELD 6.43 PCT, STOP 6.44 PCT, AWARDED AT HIGH YIELD 85 PCT +Blah blah blah. + + + + + +24-MAR-1987 16:03:55.80 + +usa + + + + + +F +f2426reute +u f BC-COMMODORE-<CBU>,-ATAR 03-24 0056 + +COMMODORE <CBU>, ATARI IN SETTLEMENT + NEW YORK, March 24 - Commodore International Ltd said it +settled and discontinued all pending litigation with Atari +Corp. + The company issued a statement which said the case had been +settled on terms satisfactory to both sides. + Company officials were not immediately available for +comment. + Reuter + + + +24-MAR-1987 16:04:42.31 +trademoney-fx +usataiwanjapansouth-korea + + + + + +RM A +f2428reute +b f BC-/BALDRIGE-SUPPORTS-NI 03-24 0088 + +BALDRIGE SUPPORTS NIC TALKS ON CURRENCIES + WASHINGTON, March 24 - Commerce Secretary Malcolm Baldrige +said he supported efforts to persuade newly-industrialized +countries (NICS) to revalue currencies that are tied to the +dollar in order to help the United States cut its massive trade +deficit. + "We do need to do something with those currencies or we +will be substituting Japanese products for Taiwanese products," +or those of other nations with currencies tied to the dollar, +Baldrige told a House banking subcommittee. + The U.S. dollar has declined in value against the Yen and +European currencies, but has changed very little against the +currencies of some developing countries such as South Korea and +Taiwan because they are linked to the value of the dollar. + As a result, efforts to reduce the value of the dollar over +the past year and a half have done little to improve the trade +deficits with those countries. + Baldrige told a House Banking subcommittee that the +Treasury Department was attempting to persuade those countries +to reach agreement with the United States on exchange rates. + + Reuter + + + +24-MAR-1987 16:05:14.04 + +usa + + + + + +F +f2431reute +u f BC-TRIANGLE-<TRI>-BEGINS 03-24 0044 + +TRIANGLE <TRI> BEGINS EXCHANGE OFFER + NEW YORK, March 24 - Triangle Industries Inc said it began +a previously announced offer to exchange one share of Triangle +common stock for each share of participating preferred stock. + The offer will expire April 21. + Triangle said that sales in 1987 will exceed four billion +dlrs. + For the year ended December 31, 1986, Triangle reported +sales of 2.7 billion dlrs and net income of 47.6 mln dlrs. + + Reuter + + + +24-MAR-1987 16:05:42.34 + +usa + + + + + +F +f2435reute +r f BC-SOUTHMARK-<SM>-UNIT-I 03-24 0108 + +SOUTHMARK <SM> UNIT IN PUBLIC OFFERING OF STOCK + DALLAS, March 24 - Southmark Corp's National Heritage Inc +said it has started the initial public offering of 2,000,000 +shares of common stock at 9.50 dlrs per share. + It said all shares are being traded though NASDAQ under +the symbol <NHER>. + The lead underwriter for the offering is Drexel Burnham +Lambert Inc, with Bear, Stearns and Co Inc., and E.F. Hutton +and Co Inc acting as co-underwriters, the company said. + Proceeds will be used to augment working capital, complete +scheduled renovations at some National Heritage leased +facilities and repay certain debts to Southmark, it said. + Reuter + + + +24-MAR-1987 16:06:25.01 +acq + + + + + + +F +f2438reute +f f BC-******EASTMAN-KODAK-C 03-24 0013 + +******EASTMAN KODAK CO TO SELL HOLDINGS IN ICN PHARMACEUTICALS AND VIRATEK INC +Blah blah blah. + + + + + +24-MAR-1987 16:07:44.11 + +usa + + + + + +A +f2442reute +r f BC-FEUD-PERSISTS-AT-U.S. 03-24 0105 + +FEUD PERSISTS AT U.S. HOUSE BUDGET COMMITTTEE + WASHINGTON, March 24 - A feud among Democrats and +Republicans persisted at the House Budget Committee, stalling +the writing of a fiscal 1988 U.S. budget plan. + Republicans failed to appear at a drafting session called +by Democratic committee chairman William Gray as a make-up +meeting to end bickering that has delayed budget activity for +a week and threatens the ability of Congress meeting an April +15 deadline for completing the deficit-cutting budget. + Republicans told Gray yesterday they would appear today and +participate if the meeting was held behind closed doors. + + He said the Republicans were prepared to make a "good faith" +effort to cooperate if the budget deliberations were held +behind closed doors and not in public as is the normal +procedure. + However, they failed to appear today and Gray said he had +been told they wanted House Speaker Jim Wright to answer a +series of budget questions posed by House Republican leader Bob +Michel before they would cooperate in budget matters. + The budget feuding led the Washington Post today to +editorialize that it was childish, similar to an eraser fight +among fourth grade students. + Reuter + + + +24-MAR-1987 16:07:51.39 +interest +usa + + + + + +A RM +f2443reute +u f BC-TREASURY-BALANCES-AT 03-24 0084 + +TREASURY BALANCES AT FED ROSE ON MARCH 23 + WASHINGTON, March 24 - Treasury balances at the Federal +Reserve rose on March 23 to 3.332 billion dlrs from 3.062 +billion dlrs on the previous business day, the Treasury said in +its latest budget statement. + Balances in tax and loan note accounts fell to 15.513 +billion dlrs from 17.257 billion dlrs on the same respective +days. + The Treasury's operating cash balance totaled 18.845 +billion dlrs on March 23 compared with 20.318 billion dlrs on +March 20. + Reuter + + + +24-MAR-1987 16:08:11.64 + +usa + + + + + +A +f2444reute +r f BC-FARM-CREDIT-SYSTEM-SE 03-24 0112 + +FARM CREDIT SYSTEM SEEN NEEDING 800 MLN DLRS AID + WASHINGTON, MARCH 24 - A member of the board which +regulates the farm credit system said Congress should plan to +provide at least 800 mln dlrs in fiscal 1988 to bailout the +troubled system, but other members of the board differed. + Jim Billington, Farm Credit Administration (FCA) board +member told a House Agriculture Appropriations subcommittee +hearing "I feel your subcommittee should plan on providing at +least 800 mln next year to assist the Farm Credit System." + However, FCA board member Marvin Duncan differed, saying +"it is premature to talk about the cost of a solution until we +know what kind of solution." + Chairman of the FCA board, Frank Naylor, said it might be +possible to structure a rescue of the system with government +guarantees or a line of credit which requires little or no +upfront government money. + However, Billington said Congress must provide help +immediately because "this system needs some assurance that it +will get some help." + The FCA estimates the system could lose up to 1.4 billion +dlrs in 1987, exhausting the remainder of its working capital, +Naylor said. + The farm credit system is expected to present its own +proposals for government aid to a Senate Agriculture +subcommittee hearing on Thursday. + Naylor said the Treasury Department is continuing to refine +Reagan administration ideas on how a rescue should be +structured. + Congressional sources said they hope to begin drafting a +rescue bill for the farm credit system as early as next week. + Reuter + + + +24-MAR-1987 16:09:09.08 +iron-steel +usa + + + + + +F +f2445reute +u f BC-USX-<X>-USS-UNIT-RAIS 03-24 0068 + +USX <X> USS UNIT RAISES PRICES + LORAIN, Ohio, March 24 - USX Corp's USS subsidiary said +that effective with shipments beginning July 1 prices for all +leaded grades and 1200-series grades of hot rolled bar and +semi-finished products from its Lorain, Ohio, facility will be +increased by 15 dlrs a ton over the prices in effect June 1. + It said the increase is being made to reflect current +market conditions. + Reuter + + + +24-MAR-1987 16:10:06.45 +trade +japanusa + + + + + +F +f2447reute +d f BC-UNIONIST-URGES-RETALI 03-24 0108 + +UNIONIST URGES RETALIATION AGAINST JAPAN + WASHINGTON, March 24 - William Bywater, president of the +International Union of Electronic Workers, called on President +Reagan to retaliate against Japan for unfair practices in +semiconductor trade. + He said in a statement a crash program was needed in the +semiconductor industry to prevent the United States from +becoming "one of the world's industrial lightweights." + Bywater's remarks came as the White House Economic Policy +Council prepared for a Thursday meeting to decide what +sanctions if any should be taken against Japan for alleged +violations of a U.S.-Japanese semiconductors agreement. + The pact, agreed to last July, called for Tokyo to end +selling semiconductors at below cost and to open its home +market to U.S. goods. In return, Washington agreed to forego +antidumping duties on Japanese semiconductors. + But U.S. officials have said that while Japan has stopped +dumping in the U.S. market, it has not ended third country +dumping; nor has it opened its market to U.S. semiconductors. + Japan yesterday, in an effort to ward off U.S. action, +ordered a cutback in semiconductors production as a way to +force prices up and end the dumping. + Bywater, in his statement, said he backed a Defense Science +Board task force proposal to set up a consortium to develop new +electronic products and manufacturing processes and make the +U.S. industory more competitive. + But he added the industry could not wait for legislation to +pass and that action was required now to help the depressed +electronic industry. + Bywater said, "I urge the Reagan Administration to take full +and severe action immediately against Japan by invoking the +retaliatory steps that are permitted under U.S. law and GATT +(General Agreement on Tariffs and Trade)." + Reuter + + + +24-MAR-1987 16:12:10.73 + +usa + + + + + +F +f2454reute +u f BC-EXXON-(XON)-GETS-99.2 03-24 0030 + +EXXON (XON) GETS 99.2 MLN DLR CONTRACT + WASHINGTON, March 24 - Exxon Co USA of Houston has been +awarded a 99.2 mln dlr contract for jet fuel, the Defense +Logistics Agency said. + Reuter + + + +24-MAR-1987 16:12:45.97 + +usa + + + + + +F +f2456reute +u f BC-EATON-(ETN)-GETS-53.0 03-24 0035 + +EATON (ETN) GETS 53.0 MLN DLR CONTRACT + WASHINGTON, March 24 - Eaton Corp's AIL Division has +received a 53.0 mln dlr contract for jamming system work for +the EA-6B electronic warfare aircraft, the Navy said. + Reuter + + + +24-MAR-1987 16:12:53.77 +grainrice +usazaire + + + + + +C G +f2457reute +u f BC-ZAIRE-AUTHORIZED-TO-B 03-24 0077 + +ZAIRE AUTHORIZED TO BUY PL 480 RICE - USDA + WASHINGTON, March 24 - Zaire has been authorized to +purchase about 30,000 tonnes of U.S. rice under an existing PL +480 agreement, the U.S. Agriculture Department said. + It may buy the rice, valued at 5.5 mln dlrs, between March +31 and August 31, 1987, and ship it from U.S. ports by +September 30, the department said. + The purchase authorization covers the entire quantity of +rice provided under the agreement. + Reuter + + + +24-MAR-1987 16:13:26.14 + +usa + + + + + +F +f2459reute +u f BC-MCDONNELL-DOUGLAS-GET 03-24 0036 + +MCDONNELL DOUGLAS GETS 30.6 MLN DLR CONTRACT + WASHINGTON, March 24 - McDonnell Douglas Corp (MD) has +received a 30.6 mln dlr contract for work on development of the +standoff land attack missile (SLAM), the Navy said. + REUTER + + + +24-MAR-1987 16:15:17.01 +acq +usa + + + + + +F +f2463reute +r f BC-MIDIVEST-ACQUIRES-ASS 03-24 0080 + +MIDIVEST ACQUIRES ASSETS OF BUSINESS AVIATION + ROANOKE, Va., March 24 - <Midivest Inc> said it acquired +all the assets of <Business Aviation Inc> of Sioux Falls, S.D., +for an undisclosed amount of stock. + Midivest said it expects to sell 10 to 20 of the renovated +Beechcraft planes next year. It said management will also lease +these airborne intensive care units to hospitals and government +subdivisions through Metropolitan Leasing, a wholly-owned +subsidiary of Midivest. + Reuter + + + +24-MAR-1987 16:15:59.31 +grainwheat +usajordan + + + + + +C G +f2464reute +u f BC-U.S.-WHEAT-CREDITS-FO 03-24 0113 + +U.S. WHEAT CREDITS FOR JORDAN SWITCHED + WASHINGTON, March 24 - The Commodity Credit Corporation +(CCC) has switched 25.0 mln dlrs in wheat credit guarantees to +Jordan under the Export Credit Guarantee Program to the +Intermediate Export Credit Guarantee Program, the U.S. +Agriculture Department said. + The switch reduces the total value of GSM-102 guarantees +for the current fiscal year to 30.0 mln dlrs. + The credit terms extended for export sales under the +Intermediate Export Credit Guarantee Program (GSM-103) must be +in excess of three years but not more than seven years. + All sales must be registered and exports completed by +September 30, 1987, the department said. + Reuter + + + +24-MAR-1987 16:17:44.35 +money-fxdlr +usajapanuk + + + + + +V RM +f2474reute +r f BC-DOLLAR-EXPECTED-TO-FA 03-24 0108 + +DOLLAR EXPECTED TO FALL DESPITE INTERVENTION + By Claire Miller, Reuters + NEW YORK, March 24 - Central bank intervention in the +foreign exchange markets succeeded in staunching the dollar's +losses today, but senior dealers here believe the U.S. currency +is headed for a further retreat. + Although the intervention was widespread, dealers perceive +that the six major industrial nations have differing levels of +commitment to their recent accord to stabilize currencies. + Moreover, hard economic realities hold greater sway over +the currency market than central bank intervention and these +argue for a further dollar decline, dealers said. + "The market can be bigger than the central banks. And +economic fundamentals will always come to the fore," said a +dealer at one major U.S. bank. + As the dollar dropped to post-World War II lows against the +yen today foreign exchange traders said the Bank of Japan, +Federal Reserve Board and Bank of England intervened in the +markets on behalf of the U.S. currency. + Reports of the authorities' actions helped the dollar +recover to about 149.45 yen in New York this afternoon from +the post-war low of 148.20 yen in the Far East. But it still +failed to regain Monday's U.S. closing level of 150.00/05 yen. + Tokyo dealers said the Bank of Japan bought one to 1.5 +billion dlrs in Tokyo today and may also have purchased dollars +yesterday in the U.S. via the Federal Reserve. + Meanwhile, there were strong rumors in New York that the +Fed also bought a modest amount of dollars around 148.50 yen +today. Talk also circulated that the Bank of England purchased +a small amount of dollars for yen. + The Fed's last confirmed intervention was on January 28 +when it bought 50 mln dlrs in coordination with the Bank of +Japan. But on March 11 the Fed also was rumored to have +signalled displeasure with a dollar surge above 1.87 marks. + The authorities' actions appeared to back up the February +22 Paris pact between the U.S., Japan, West Germany, Britain, +France and Canada under which the nations agreed to cooperate +to foster exchange rate stability around prevailing levels. + But foreign exchange dealers were not overly impressed by +the authorities' intervention which they said can only soften +extreme moves in the market. + For one thing, some dealers believed that the Fed's +purchases were done on behalf of the Bank of Japan rather than +for the U.S. central bank's own account, suggesting a rather +watered-down American commitment to the currency accord. + The Bank of England's action also was thought to be +completed on behalf of the Japanese central bank, reinforcing +the market's view that Japan is the most resolute of the six +nations in its support of the currency pact. + "No-one doubts the Bank of Japan is serious. But the other +two central banks seem to be making more token gestures than +anything else," said Chris Bourdain of BankAmerica Corp. + "I'm not convinced the intervention was concerted," said +Earl Johnson of Harris Trust and Savings Bank in Chicago. +"It's a yen problem more than anything else." + Some dealers said a rising wave of trade protectionist +sentiment in the U.S. limits the extent to which the American +authorities can endorse a stronger dollar against the yen. + "The dollar's break below the key 150 yen level ties the +Treasury's hands behind its back. The U.S. cannot intervene on +its own account because of the strength of protectionism here," +said Albert Soria of Swiss Bank Corp. + Such comments reflect the view that the currency markets +are becoming increasingly politicized. Despite official +denials, some traders still feel the U.S. would countenance a +lower dollar to help trim the nation's trade deficit. + The majority of the 170 billion dlr merchandise trade +deficit in 1986 was with Japan. + Indeed U.S. Treasury secretary James Baker's comment on +Sunday that the February currency pact had not established +dollar targets was read by the market as a signal to sell the +U.S. currency and kicked off the latest retreat. + "The dollar still has more room on the downside against the +yen based on the frictions in trade and financial services. The +currency market is becoming very political," said Natsuo Okada +of Sumitomo Bank Ltd. + Okada expects the dollar to trade between 148 and 150 yen +this week but sees the chance of a drop to 140 yen by the end +of April or early May. + Even if West Germany and Japan succeed in stimulating their +economies, it may not be enough to solve structural economic +imbalances in the near future, dealers said. + "Even if Japan and West Germany do expand this year, it +won't be enough to help the trade situation much," said +Bourdain of BankAmerica, who also expects the dollar to drop to +148 yen in the next couple of days. + Reuter + + + +24-MAR-1987 16:17:58.20 + +usa + + + + + +RM V +f2475reute +u f BC-/U.S.-TO-SELL-12.8-BI 03-24 0066 + +U.S. TO SELL 12.8 BILLION DLRS IN BILLS + WASHINGTON, March 24 - The U.S. Treasury said it will sell +12.8 billion dlrs of three and six-month bills at its regular +auction next week. + The March 30 sale, to be evenly divided between the three +and six month issues, will result in a paydown of 1.2 billion +dlrs as maturing bills total 13.99 billion dlrs. + The bills will be issued April 2. + Reuter + + + +24-MAR-1987 16:22:32.09 + +usa + + + + + +F +f2482reute +r f BC-INLAND-STEEL-<IAD>-TO 03-24 0081 + +INLAND STEEL <IAD> TO BUILD NEW PLANT IN INDIANA + SOUTH BEND, Ind., March 24 - Inland Steel Industries and +Governor Robert Orr of Indiana said the new joint venture cold- +rolled steel plant between Inland Steel and Nippon Steel Corp +will be built on a site in St. Joseph County Indiana. + Inland Steel said yesterday that the joint venture, to be +named I/N Tek, will cost more than 400 mln dlrs and will employ +over 200 people by the time the companies complete the project +in 1990. + Reuter + + + +24-MAR-1987 16:22:41.79 +acq +usa + + + + + +F +f2483reute +b f BC-******EASTMAN-KODAK-C 03-24 0093 + +EASTMAN KODAK <EK> TO SELL HOLDINGS + ROCHESTER, N.Y., March 24 - Eastman Kodak Co said it plans +to sell its 2.3 pct holding in ICN Pharmaceuticals <ICN> and +part of its nine pct holdings in Viratek <VIRA>. + It said the purpose of the investments had been to lay the +groundwork for the creation of its Nucleic Acid Research +Institute. + Since that has been achieved, there is no longer any reason +to maintain the equity positions, Kodak said. + Kodak holds 470,000 sahres of ICN, currently trading at +about 18-3/4 and 700,000 of Viratek, trading at 44. + Reuter + + + +24-MAR-1987 16:23:12.76 + +usa +boesky + + + + +F +f2485reute +u f BC-GUINNESS 03-24 0094 + +GUINNESS SUES BOESKY IN FEDERAL COURT + NEW YORK, March 24 - <Guinness PLC> has joined investors +suing former Wall Street speculator Ivan Boesky, alleging it +was deceived into putting money into his one billion dlr +investment partnership in 1986. + Guinness, the largest limited partner in Ivan F. Boeksy and +Co. L.P., is the latest to file suit in federal court in +Manhattan against Boesky, court papers show. + About 40 other investors have also filed suit over similar +allegations, including that Boesky did not reveal his illegal +insider trading activities. + Guinness is charging it was induced to join in the Boesky +partnership through a prospectus that contained "material untrue +statements and omissions." + The suit also alleged that the Boesky Corporation, which +became a part in the formation of the investment partnership, +Ivan F. Boesky and Co., L.P., "had achieved its extraordinary +rates of return as a result of trading on inside information +and other violations of the securities laws." + In addition, the suit charged that Boesky and other +defendants unlawfully "schemed with and provided substantial +assistance to one another to evade the registration provisions" +of securities law. + Reuter + + + +24-MAR-1987 16:23:23.82 +acq +usacanada + + + + + +F E +f2486reute +r f BC-FIRM-REDUCES-SCEPTRE 03-24 0078 + +FIRM REDUCES SCEPTRE RESOURCES <SRL> HOLDINGS + WASHINGTON, March 24 - Montreal-based Noverco Inc told the +Securities and Exchange Commission it reduced its stake in +Sceptre Resources Ltd to 1,232,200 shares or 4.8 pct of the +total outstanding. + Noverco said it sold off 400,500 shares "to reduce the +investment of Noverco in Sceptre." + "Additional common shares of Sceptre may be sold or +purchased by Noverco, depending upon market conditions," Noverco +said. + Reuter + + + +24-MAR-1987 16:23:35.03 + + + + + + + +F +f2487reute +b f BC-******GENCORP-BOARD-W 03-24 0011 + +******GENCORP BOARD WITHDRAWS PROPOSALS TO STAGGER DIRECTORS TERMS +Blah blah blah. + + + + + +24-MAR-1987 16:26:21.04 +earn +canada + + + + + +E +f2496reute +d f BC-<ACKLANDS-LTD>-1ST-QT 03-24 0029 + +<ACKLANDS LTD> 1ST QTR FEB 28 NET + TORONTO, March 24 - + Shr three cts vs 11 cts + Net 126,000 vs 434,000 + Revs 84.0 mln vs 80.2 mln + Avg shrs 4,948,731 vs 3,870,511 + Reuter + + + +24-MAR-1987 16:30:25.13 +earn +usa + + + + + +F +f2511reute +d f BC-BULL-AND-BEAR-GROUP-A 03-24 0078 + +BULL AND BEAR GROUP A <BNBGA> CUTS FUND PAYOUTS + NEW YORK, March 24 - Bull and Bear Group A said it lowered +its monthly dividends on three of its funds. + It said it lowered its Tax Free Income Fund <BLTFX> to 10.3 +cts from 10.6 cts; its U.S. Government Guaranteed Securities +Fund <BBUSX> to 11.5 cts from 11.8 cts; and its High Yield Fund +<BULHX> to 14 cts from 14.2 cts. + All dividends are payable March 31 to shareholders of +record March 25, the company said. + Reuter + + + +24-MAR-1987 16:30:42.93 +crude +usa + + + + + +Y +f2513reute +r f BC-CALTEX-TO-RAISE-BAHRA 03-24 0107 + +CALTEX TO RAISE BAHRAIN OIL PRODUCT PRICES + NEW YORK, March 24 - Caltex Petroleum Corp said it will +raise +posted prices for naphtha and several grades of residual fuel +in Bahrain, effective March 25. + Caltex, a joint venture of Chevron Corp <CHV> and Texaco +INC <TX>, said its naphtha posting is up four cts a gallon to +43 cts. It said it is raising its marine diesel oil posting by +30 cts a barrel to 20.24 dlrs a barrel. + Light, medium, and heavy fuel oil postings are up 1.50 dlrs +a barrel, the company said. This will bring the light fuel oil +price to 16.90 dlrs, medium to 15.50 dlrs, and heavy to 14.60 +dlrs, the company said. + Reuter + + + +24-MAR-1987 16:31:01.12 +pet-chem +usa + + + + + +F +f2515reute +u f BC-CHARTER-CO-<QCHR>-TO 03-24 0093 + +CHARTER CO <QCHR> TO COMPLETE REORGANIZATION + JACKSONVILLE, Fla., March 24 - Charter Co, the huge +petrochemical concern in bankruptcy proceedings stemming from +hundreds of dioxin-related claims, said it and all of its +subsidiaries, except the Independent Petrochemical Corp, will +complete their reorganization on March 31. + It said that on that date, it will deposit with an escrow +agent 288.8 mln dlrs in cash, 66.7 mln dlrs in notes and 31 mln +shares of its common for distribution. + Company officials were not immediately available for +comment. + As previously reported, Charter settled dioxin-related +claims for about 1,200 individuals and the state of Missouri, +resolving claims against it and all subsidiaries except +Independent Petrochemical. + Charter said some of the settlements remain subject to +appeals and final court approvals and resolve claims against +charter and its subsidiaries except Independent Petrochemical. + It said about 500 individual claims against it and certain +of its units remain pending as disputed claims in bankruptcy +court. It said about 300 of these claims have been filed since +confirmation of the joint plan of reorganization. + Charter said its two creditors, an equity committee in its +bankruptcy proceedings and <American Financial Corp>, which +will own 50.5 pct of its common after the reorganization, have +waived the requirement that Charter resolve all dioxin-related +claims against it prior to completing its reorganization. + That requirement excludes claims against Independent +Petrochemical. Charter also said a plan for liquidation of +Independent has been approved by the bankruptcy court and will +be completed after March 31. + Earlier, Charter reported net income for the year of 153.2 +mln dlrs, which included a gain of 28.5 mln dlrs for +discontinued operations and 114.8 mln dlrs for the settlement +of claims in its reorganization proceedings. + In 1985, it reported earnings of 1,274,000 dlrs, which +included a loss of 36.3 mln dlrs for discontinued operations +and 29.4 mln dlrs for extraordinary items. + For the fourth quarter, it reported earnings of 118.8 mln +dlrs, including a gain of 28.6 mln dlrs for discontinued +operations and 90.5 mln dlrs mainly for claims settlements. In +the year-ago period, Charter reported a loss of 13 mln dlrs. + Reuter + + + +24-MAR-1987 16:32:07.68 +acq +usa + + + + + +F +f2518reute +r f BC-NASHUA-<NSH>-TO-PURCH 03-24 0083 + +NASHUA <NSH> TO PURCHASE PRIVATE DISC MAKER + NASHUA, N.H., March 24 - Nashua Corp said it signed a +letter of intent to purchase <Lin Data Corp>, a private +manufacturer of high-capacity rigid discs for storage of +computer data. + Under the terms of the letter, Nashua said it will acquire +all classes of Lin stock for 24 mln dlrs. In addition, it said +it will loan Lin 1,200,000 dlrs to support its operations. + The closing of the sale is set for the second quarter of +1987, the company said. + Reuter + + + +24-MAR-1987 16:34:49.02 +earn +usa + + + + + +F +f2522reute +r f BC-ALTRON-INC-<ALRN>-4TH 03-24 0072 + +ALTRON INC <ALRN> 4TH QTR JAN 3 + WILMINGTON, Mass, March 24 - + Shr loss 56 cts vs loss five cts + Net loss 1.9 mln vs loss 164,000 + revs 6.9 mln vs 5.4 mln + Year + Shr loss 1.15 dlrs vs profit 52 cts + Net loss 3.8 mln vs profit 1.7 mln + Revs 25.6 mln vs 29.8 mln + NOTE: 1987 net loss includes loss 6.5 mln dlrs for +nonrecurring reserve for closing costs of facility, writeoffs +and sales of real estate. + + Reuter + + + +24-MAR-1987 16:38:19.15 + +usa + + + + + +F +f2534reute +r f BC-COLLINS-FOODS-<CF>-MO 03-24 0077 + +COLLINS FOODS <CF> MOVES UP WARRANT CONVERSION + LOS ANGELES, March 24 - Collins Foods International Inc +said it moved up the conversion date for its warrants to +purchase common stock to April 24. + There are currently 2,160,000 warrants outstanding, the +company said. It said each warrant entitles the holder to buy +one Collins common share at 12.11 dlrs per share. + Collins also said the warrants were originally scheduled to +expire on December 15, 1988. + But the agreement under which the warrants were issued +permits the company to accelerate the date if the closing price +of its common stock equals or exceeds 21.78 dlrs per share for +10 consecutive trading days, the company said. + It also pointed out that the stock price closed at 22.75 +dlrs per share on March 23. + Reuter + + + +24-MAR-1987 16:38:34.38 +earnacq +usa + + + + + +F +f2535reute +u f BC-GENCORP-<GY>-PROPOSAL 03-24 0098 + +GENCORP <GY> PROPOSALS WITHDRAWN FROM MEETING + AKRON, Ohio, March 24 - GenCorp Inc said it withdrew from +consideration at its annual meeting on March 31 proposals aimed +at providing for a stock split and an increased dividend so +that it could focus its energies on responding to the takeover +offer made last week by a partnership of AFG Industries Inc +<AFG> and Wagner and Brown. + In addition to proposing an increase in the number of its +outstanding common shares, GenCorp had suggested the adoption +of a classified or "staggered" board and the elimination of +cumulative voting. + GenCorp said these proposals could "distract energy and +attention from the real task at hand -- to respond to the +tender offer in a manner which is in the best interests of the +company, its shareholders and its other constituencies." + GenCorp said the proposal to increase its outstanding +shares was made with the aim of declaring a stock split and a +dividend increase. + The other proposals, it said, would provide for greater +long-term stability and cohesiveness for the GenCorp board. + The company did not indicate when it might resubmit the +proposals for approval by its shareholders. + Reuter + + + +24-MAR-1987 16:39:39.76 + +usa + + + + + +Y +f2540reute +r f BC-WEEKLY-ELECTRIC-OUTPU 03-24 0073 + +WEEKLY ELECTRIC OUTPUT UP 2.4 PCT FROM 1986 + WASHINGTON, March 24 - U.S. power companies generated a net +47.47 billion kilowatt-hours of electrical energy in the week +ended March 21, up 2.4 pct from 46.36 billion a year earlier, +the Edison Electric Institute (EEI) said. + In its weekly report on electric output, the electric +utility trade association said electric output in the week +ended March 14 was 48.31 billion kilowatt-hours. + The EEI said power production in the 52 weeks ended March +21 was 2,557.44 billion kilowatt hours, up 2.1 pct from the +year-ago period. + Electric output so far this year was 602.26 billion +kilowatt hours, up 2.2 pct from 589.51 billion last year, the +EEI said. + Reuter + + + +24-MAR-1987 16:40:00.41 + +usa + + + + + +F +f2541reute +r f BC-MONOLITHIC-<MMIC>-TO 03-24 0096 + +MONOLITHIC <MMIC> TO DROP GATE ARRAY LINE + SANTA CLARA, Calif., March 24 - Monolithic Memories Inc +said it plans to discontinue marketing its gate array +integrated circuit product line and focus efforts on the market +for field-programmable products. + It said the current market dynamics will hinder +profitability in the gate array market for some time. + Monolithic also said it does not expect the move to have a +negative impact on earnings, adding, the company has estimated +that the gate array products would have contributed only one +pct of revenues in fiscal 1987. + Reuter + + + +24-MAR-1987 16:40:32.83 +crudegas + + + + + + +Y +f2543reute +u f BC-******API-SAYS-DISTIL 03-24 0015 + +******API SAYS DISTILLATE STOCKS OFF 4.07 MLN BBLS, GASOLINE OFF 2.69 MLN, CRUDE UP 8.53 MLN +Blah blah blah. + + + + + +24-MAR-1987 16:41:16.33 +earn +usa + + + + + +F +f2547reute +r f BC-VERMONT-FINANCIAL-SER 03-24 0038 + +VERMONT FINANCIAL SERVICES <VFSC> SETS PAYOUT + BRATTLEBORO, Vermont, March 24 - Vermont Financial Services +Corp said its board approved a regular 20 cts per share cash +dividend payable April 25 to shareholders of record March 26. + Reuter + + + +24-MAR-1987 16:41:51.89 +acq + + + + + + +F +f2551reute +f f BC-******RESORTS-INTERNA 03-24 0011 + +******RESORTS INTERNATIONAL GETS BUYOUT PROPOSAL FROM KSZ CO INC +Blah blah blah. + + + + + +24-MAR-1987 16:42:09.41 + +usa + + + + + +F +f2554reute +d f BC-VR-BUSINESS-BROKERS-E 03-24 0073 + +VR BUSINESS BROKERS EXPANDS OPERATIONS + BOSTON, March 24 - <VR Business Brokers> said it sold a +master franchise license to one of the largest independent +groups of management consultants in the Caribbean. + It said that under the master license the group will +operate under the name VR Caribbean Inc and will cover +countries of the Caribbean basin and Central America and Dade +County, Fla. + Terms of the sale were not disclosed. + Reuter + + + +24-MAR-1987 16:42:29.98 + +usa + + + + + +F +f2556reute +u f BC-CORRECTED---ATT-<T>-F 03-24 0112 + +CORRECTED - ATT <T> FORMS COMPUTER SALES GROUPS + NEW YORK, March 24 - American Telephone and Telegraph Co +said it formed a 600-member sales force dedicated exclusively +to its computers and other data systems products. + Separately, ATT denied reports that it plans to buy back a +large chunk of its stock. ATT's stock is up 1/4 points at +25-1/8 in heavy trading. + The company said it also created a separate 500-member team +that will educate the computer sales force and its other sales +groups on ATT's computer products. This group, ATT said, +reports directly to Vittorio Cassoni, senior vice president of +its computer unit. (Corrects sales support team size to 500) + +REUTER + + + +24-MAR-1987 16:44:02.04 +earn +usa + + + + + +F +f2558reute +s f BC-GREAT-ATLANTIC-AND-PA 03-24 0024 + +GREAT ATLANTIC AND PACIFIC TEA CO INC <GAP> DIV + NEW YORK, March 24 - + Qtly div 10 cts vs 10 cts prior + Payable May one + Record April 15 + Reuter + + + +24-MAR-1987 16:44:47.92 +acq +usa + + + + + +F +f2559reute +d f BC-GARTNER-GROUP-<GART> 03-24 0077 + +GARTNER GROUP <GART> ACQUIRES COMTEC PROGRAM + STAMFORD, Conn., March 24 - Gartner Group Inc said it +acquired sole ownership of the COMTEC Market Research Program. + Gartner said its wholly-owned subsidiary purchased the +interests of its former partners for an aggregate price of +1,125,000 plus a percentage of net sales proceeds on future +sales of certain products. + Prior to the acquisition, Gartner Group owned one-third in +the COMTEC partnership, it said. + Reuter + + + +24-MAR-1987 16:48:46.78 + +usa + + + + + +F +f2569reute +r f BC-U.S.-CAR-SALES-DOWN-3 03-24 0117 + +U.S. CAR SALES DOWN 3.9 PCT IN MID-MARCH + Detroit, March 24 - Sales of U.S.-made cars during +mid-March, the traditional start of the spring selling season, +dropped 3.9 pct behind last year's level, analysts say. + Automakers sold about 204,000 cars in the March 11-20 +selling period, 10,000 fewer than last year. Analysts said the +decline may auger poorly for the rest of the spring season. + Buyers shied away from the showrooms of American Motors +Corp <AMO>, the target of a 1.5 billion dlr takeover bid from +Chrysler Corp <C>. Analysts said consumers were anxious about +the whether Chrysler will retain some American Motors models, +causing a 62 pct drop in American Motors sales in mid-March. + Chrysler's mid-March sales fell 3.6 pct. + "During the spring selling season, you usually look for +some kind of seasonal uplift in sales. It doesn't look like +it's happening," said Joseph Philippi, analyst with E.F. Hutton +and Co. + "There may be less bloom to the spring selling season this +year than last," one auto company official conceded. + General Motors Corp <GM>, still working to regain consumer +interest in its cars, led the drop with a 14.8 pct decline. + Ford Motor Co's <F> sales increased 15.2 pct for the +period. But analysts said the rise compares to a 1986 period +for Ford, leaving it down 10 pct in two years. + "The total industry (mid-March sales) was slightly less +than expected," the company official said. + American Motors' decline caught analysts eye. "American +Motors took it on the chin--big," said Philippi. + Given the prospective takeover by Chrysler, "people might +be a little leary about going to (American Motors) dealers," he +said. + American Motors sold 790 domestic cars in the period, +meaning each of American Motors 1,050 dealers "is selling a car +about every other day," Philippi said. + Potential American Motors buyers are afraid their car +models "might disappear," he said. + Chrysler, in its purchase agreement with American Motors' +majority stockholder <Renault>, has agreed not to undercut +sales of American Motors' new Medallion and Premier cars, made +by Renault. + On a company by company basis, sales of U.S. made cars from +the March 11 to 20 period were--GM 105,438, down 14.8 pct, Ford +67,672, up 15.2 pct, Chrysler 30,909, down 3.6 pct, American +Motors 790, down 6.2 pct, American Honda 7,447 compared with +5,031, Nissan Motor Corp, 3,358, up 10.7 pct, Volkswagon U.S. +Inc 1,330, down 35 pct. + Reuter + + + +24-MAR-1987 16:54:19.43 +acq +usa + + + + + +F +f2583reute +u f BC-RESORTS-INT'L-<RT.A> 03-24 0079 + +RESORTS INT'L <RT.A> RECEIVES TAKEOVER OFFER + ATLANTIC CITY, N.J., March 24 - Resorts International Inc +said it received a proposal from <KSZ Co Inc> under which +holders of Resorts class B stock would receive 140 dlrs a share +in cash and one share of common stock in a new company to be +formed through the takeover. + Under the offer, Resorts said holders of its class A shares +would receive 15 dlrs a share in cash and three shares of +common stock in the new company. + Resorts said the offer from KSZ calls for a merger of +Resorts with RI Acquisition Co Inc, a newly formed Delaware +corporation. + Resorts said that prior to the merger, RI Acquisition would +be capitalized with about 100 mln dlrs of debt and about 220 +mln dlrs of equity. + It said 200 mln dlrs of the equity would be in the form of +special preferred stock. + The KSZ offer, Resorts said, indicates that KSZ has a +commitment from <M. Davies Cos> to buy all of the special +preferred stock. + Resorts said the offer will expire at 1700 EST on March 27. +It said it asked its investment advisor, Bear, Stearns and Co, +to advise its board on the offer. + Earlier this month, the estate of James M. Crosby and +certian members of his family agreed to sell their class B +shares to New York real estate tycoon Donald Trump for 135 dlrs +a share. The estate and family members hold 78 pct of the +752,297 class B shares outstanding. + Trump also agreed to pay 135 dlrs a share for the remaining +class B shares outstanding. + Resorts also has about 5,680,000 shares of outstanding +class A stock. These shares carry one one-hundredth the voting +power of the class B shares. + Trump's offer beat out a rival bid of 135 dlrs a share made +by Pratt Hotel Corp <PRAT>. + Resorts said that under the proposal made by KSZ, existing +class A and class B shareholders would control about 96 pct of +the outstanding common of the new company formed to acquire +Resorts. + Resorts said the new company, upon completion of the +merger, would hold the 220 mln dlrs of debt and that the +special preferred stock would immediately be converted into +exchangeable participating preferred of the new company. + This preferred, Resorts said, would pay a dividend based on +the net cash flows from the new company's Paradise Island +operations. + A Resorts spokesman said the KSZ offer was made in a +two-page letter and that Resorts could not comment on it +because it did not contain enough information. Resorts has +asked Bear, Sterns to obtain complete data, he said. + The spokesman said Resorts is not familiar with KSZ but +that it believes the company is controlled by Marvin Davis, the +Denver oilman. + Calls to Davis were referred to Lee Solters, who handles +public relations for Davis. Solters, said to be travelling, was +not immediately available for comment. + Donald Trump was also unavailable for comment, as was a +spokesman for the Crosby estate. + Reuter + + + +24-MAR-1987 16:56:59.34 +earn +usa + + + + + +A F RM +f2588reute +r f BC-CITICORP-<CCI>-SEES-D 03-24 0111 + +CITICORP <CCI> SEES DOUBLING IN RETAIL BANK NET + NEW YORK, March 24 - Citicorp expects net income in its +individual banking sector to top one billion dlrs by 1993, +compared with 462 mln dlrs in 1986, said Richard Braddock, head +of Citicorp's individual banking division. + "We can double our earnings over the next five to seven +years," he told a banking analysts meeting, adding that this +forecast may be on the conservative side. + He said that bank card operations and the New York branch +system would continue to turn in hefty profits but also picked +out other developing areas, such as U.S. mortgage and +international consumer, as major potential earners. + Braddock and his sector heads made the following more +specific predictions: + - Cost of funds and net credit loss levels in the U.S. +bankcard unit will taper off in coming years from 1986's +relatively inflated levels. + - Customer net revenue in the mortgage banking area will +rise to 464.7 mln dlrs in 1987 from 374.3 mln in 1986. + - The international consumer business will show 22 pct +compound annual growth in earnings between 1986 and 1992. + - Private banking earnings will hit 100 mln dlrs in 1987 +and top 200 mln dlrs in 1992. + Reuter + + + +24-MAR-1987 16:58:33.67 +earn +usa + + + + + +F +f2593reute +d f BC-WD-40-CO-<WDFC>-2ND-Q 03-24 0042 + +WD-40 CO <WDFC> 2ND QTR FEB 28 NET + SAN DIEGO, Calif., March 24 - + Shr 35 cts vs 40 cts + Net 2,642,000 vs 3,017,000 + Sales 19.1 mln vs 18.9 mln + Six Mths + Shr 69 cts vs 70 cts + Net 5,178,000 vs 5,299,000 + Sales 35.6 mln vs 33.8 mln + Reuter + + + +24-MAR-1987 16:59:02.01 + +usa + + +nasdaq + + +F +f2594reute +u f BC-NASD-TO-BEGIN-SEARCH 03-24 0105 + +NASD TO BEGIN SEARCH FOR NEW PRESIDENT + NEW YORK, March 24 - The National Association of Securities +Dealers, which will launch a search for a new president later +this week, will probably concentrate on candidates with an +extensive background in the financial markets, officials of the +organization said today. + Gordon Macklin, 58, who has served as president for 17 +years, today announced his decision to leave the organization +of 6,658 broker-dealers. Macklin will join Hambrecht and Quist +as chairman and co-chief executive officer. + Association chairman Joseph Hardiman will appoint a search +committee later this week. + The committee will have its first meeting as early as next +week. The new president is expected to be someone knowledgable +about the over-the-counter markets and committed to the concept +of self-regulation. + Macklin joined the association as president in 1970, +leaving a position at McDonald and Co. + The National Association of Securities Dealers Automated +Quotations System, which currently lists 5200 securities of +4400 companies, was ushered in 10 months after Macklin's +arrival. + Reuter + + + +24-MAR-1987 17:00:51.46 +trade +brazilusa + + + + + +C G L M T +f2599reute +d f AM-BRAZIL-COMPUTER 03-24 0136 + +BRAZIL COMPUTER MARKET TO REMAIN CLOSED-MINISTER + RIO DE JANEIRO, MARCH 24 - Brazilian Science and Technology +Minister Renato Archer said Brazil will keep its computer +market closed to foreign goods in order to give its own infant +industry time to develop. + "Every country establishes laws to protect its interests. +The United States closed their borders at a certain stage to +some foreign goods and therefore protected its industrial +development. Now it is time for Brazil to do likewise," Archer +said at the opening of a national software conference. + After several meetings, Brazil and the U.S. Have made no +major progress in their computer row, which they have been +trying to resolve for the past 18 months. + The Reagan administration has objected to Brazil protecting +its computer industry from imports. + Reuter + + + +24-MAR-1987 17:02:09.20 + +usa + + + + + +F +f2603reute +d f BC-METALBANC-IN-OFFERING 03-24 0053 + +METALBANC IN OFFERING + MIAMI, March 24 - Metalbanc Corp said signed a letter of +intent for a proposed public offering of one mln units, +consisting of four shares of common stock and stock purchase +warrants for two additional shares. + The units are expected to be sold at between five dlrs and +6.50 dlrs per unit. + Reuter + + + +24-MAR-1987 17:03:05.68 +earn +usa + + + + + +F +f2608reute +d f BC-NORTHERN-INDIANA-PUBL 03-24 0071 + +NORTHERN INDIANA PUBLIC SVC <NI> AGAIN OMITS DIV + HAMMIND, Ind., March 24 - Northern Indiana Public Service +Company said it again omitted its quarterly common stock +dividend which would have been payable in May. + NIPSCO said it has not paid a qtly dividend since December +1985 following an adverse decision by the Indiana Supreme Court +denying amortization of about 191 mln dlrs NIPSCO invested in +its Bailly N-1 project. + Reuter + + + +24-MAR-1987 17:03:18.88 +money-fxdlr + + + + + + +A RM +f2610reute +f f BC-******FED'S-JOHNSON-S 03-24 0013 + +******FED'S JOHNSON SAYS DOLLAR STABILIZED AFTER FED TOOK APPROPRIATE ACTION +Blah blah blah. + + + + + +24-MAR-1987 17:05:30.74 +money-fxtrade +usajapan +volcker + + + + +A RM +f2612reute +r f BC-FED-CHAIRMAN-VOLCKER 03-24 0108 + +FED CHAIRMAN VOLCKER SAYS BANK PROPOSALS A WORRY + WASHINGTON, March 24 - The chairman of the Federal Reserve +Board, Paul Volcker, has written to the chairman of the House +Banking Committee to raise concerns about legislative proposals +scheduled for consideration Wednesday. + Volcker told committee chairman Fernand St. Germain a +proposal to deny primary dealer status to firms from countries +that do not grant U.S. firms equal access to their government +debt markets might invite retaliation against U.S. firms +abroad. + He added, "even Japan, against whom this proposal seems to +be particularly directed," has started opening its markets. + In his letter, made available at the Treasury, Volcker also +said a proposal to ease debt problems of developing countries +by setting up a public facility to buy their debts owed to +commercial banks, was a problem. + "I believe that the prospect of debt relief would undermine +the difficult internal efforts of the borrowing countries to +achieve the structural reform that is needed regardless of the +policies that are followed on servicing external debt," Volcker +said. + It might also cause private lenders to become reluctant to +extend more credit to the borrowing countries, he said. + Volcker said he endorsed comments by Treasury Secretary +James Baker "about the inappropriateness of using public +resources for purchasing private commercial bank debt, which we +both see as an inherent aspect of the proposed international +debt facility." + He also said a proposal for establishing formal procedures +for international negotiations on currency exchange rates "is +unrealistic and could well have damaging effects." + "For example, the bill's directive to intitiate negotiations +in order to achieve a competitive exchange rate for the dollar +-- a matter upon which there can be considerable difference +among analysts -- runs the risk of building up potentially +destabilizing market expectations," Volcker said. + He recommended "we should not lock ourselves into formalized +procedures for international negotiations" on exchange rates but +instead use other, more flexible means like the recent mmeting +in Paris between U.S. treasury and central bank representatives +and those of major trade allies. + Reuter + + + +24-MAR-1987 17:08:30.83 +earn +usa + + + + + +F +f2615reute +s f BC-BORMAN'S-INC-<BRF>-DE 03-24 0024 + +BORMAN'S INC <BRF> DECLARES QTLY DIVIDEND + DETROIT, Mich., March 24 - + Qtly div five cts vs five cts prior + Pay June 15 + Record May 18 + Reuter + + + +24-MAR-1987 17:08:39.15 + +usa + + + + + +F +f2616reute +r f BC-INTERLEUKIN-2-<ILTO> 03-24 0057 + +INTERLEUKIN-2 <ILTO> DETAILS WARRANT CONVERSION + WASHINGTON, March 24 - Interleukin-2 Inc said the +registration of warrants became effective March 20 and that 3.5 +mln warrants will be convertible into 1.75 mln shares of the +company's common stock, giving the company a maximum of 2.4 mln +dlrs. + The warrants must be exercised by June 22. + Reuter + + + +24-MAR-1987 17:10:19.66 +graincornoilseedsoybean +usa + + + + + +C G +f2618reute +u f BC-/U.S.-CORN-ACREAGE-SE 03-24 0134 + +U.S. CORN ACREAGE SEEN NEAR RECORD LOW + by Maggie McNeil, Reuters + WASHINGTON, March 24 - U.S. corn acreage this year is +likely to drop to the lowest level since the unsurpassed +acreage reductions of the 1983 PIK year and could rank as one +of the lowest corn plantings in the United States in sixty +years, Agriculture Department officials said. + USDA releases its official plantings report on March 31. +Agriculture Department analysts said next week's figures will +likely show a sharp drop in acreage to as low as 65 mln acres, +down 22 pct from last year's plantings of 83.3 mln acres. + Assuming an 18 mln acre drop in plantings, U.S. corn +production will also decrease significantly. Analysts said 1987 +corn production could drop by over one billion bushels to +around seven billion bushels. + Expected signup of up to 90 pct in the 1987 feed grains +program, along with 1.9 mln acres enrolled in the conservation +program, will cause acreage to plummet, Department feedgrain +analysts said. + "There's no question that there will be a sharp decrease in +corn acreage," one said. "It's difficult for any farmer to not +go along with the program this year." + Soybean acreage is also expected to decline this year but +at a much slower rate of around four pct, USDA analysts said. + Soybean plantings could drop to 59 mln acres or below, they +said, compared to last year's level of 61.5 mln acres. + If analysts' unofficial estimates prove correct then the +drop in u.s. corn acreage will be the largest since 1983 when +farmers idled 22 mln acres in the Payment-In-Kind program. + Farmers planted only around 60 mln acres of corn in 1983. A +severe drought that summer in major producing states caused +yields to tumble and final crop production to total only 4.2 +billion bushels. + Given normal weather conditions this year, USDA analysts +said the 1987 corn crop could end up around seven billion +bushels, down from last year's crop of 8.3 billion bushels. + "This kind of acreage reduction will mean a significant +reduction in production," an analyst said. + A crop of seven billion bushels is close to the annual U.S. +corn usage, so surplus stocks, while not decreasing, would not +increase significantly, a specialist said. + High producing corn belt states are expected to show the +greatest acreage reductions, based upon historical +participation in government programs, analysts said. + In contrast, soybean acreage is likely to be cut the most +in marginal producing areas of the southeast and the western +corn belt, a USDA soybean analyst said. + "Soybean acreage in the eastern corn belt will not budge," +he said. Neither does he expect any significant acreage cuts in +higher-producing delta areas. + Soybean production could drop fractionally from last year's +2.0 billion bushels to 1.8 to 1.9 billion, he said. + U.S. soybean acreage, after soaring to 71.4 mln acres in +1979 from only 52 mln acres five years prior to that, has +steadily declined in the 1980's. + U.S. corn acreage, with the exception of 1983, has been in +the low to mid 80-mln acre range for the past 10 years. The +highest corn plantings reported in the 60 years that USDA has +kept such records was in 1932 when farmers planted 113 mln +acres and obtained average yields of 26.5 bushels per acre. + Last year U.S. farmers obtained record corn yields +averaging 119.3 bushels per acre. + "We have absolutely no trouble producing an eight billion +bushel crop on only 80 mln acres or so," an analyst said. + Corn acreage will probably level at around 65 mln acres as +long as government program provisions remain the same, analysts +said. + Currently farmers enrolling in the program are required to +set aside 20 pct of their base acreage and then are eligible +for payments of two dlrs per bushel by idling an additional 15 +pct of their acreage. + "To get to the PIK level of 60 mln acres, we would have to +provide more incentives," an analyst said. + Reuter + + + +24-MAR-1987 17:10:32.59 +acq +usa + + + + + +F +f2620reute +r f BC-KIRSCHNER-<KMDC>-COMP 03-24 0065 + +KIRSCHNER <KMDC> COMPLETES PURCHASE + TIMONIUM, Md., March 24 - Kirschner Medical corp said it +completed the acquisition of Minnesota Mining and +Manufacturing's <MMM> orthopedic metal implant line division. + The acquisition price is 12.0 mln dlrs in cash, a six mln +dlr three year note and 100,000 shares of Kirschner common +stock. + The division had sales of 11.3 mln dlrs in 1986. + Reuter + + + +24-MAR-1987 17:10:45.15 +tradehogcarcasslivestock +usaussr + + + + + +C G L +f2621reute +r f BC-U.S.-SENATORS-SEEK-TO 03-24 0126 + +U.S. SENATORS SEEK TO EXPAND USDA EXPORT BONUS + WASHINGTON, March 24 - Leading U.S. farm state senators are +seeking to insert into the Senate's omnibus trade bill a +provision that would broaden eligibility requirements under the +U.S. Agriculture Department's export enhancement program, EEP, +to include traditional buyers of U.S. farm products, including +the Soviet Union, Senate staff said. + Under existing criteria, USDA can offer EEP subsidies to +recoup export markets lost to competing nations' unfair trading +practices. + Senate Agriculture Committee Chairman Patrick Leahy (D-Vt.) +is leading a group of farm state senators in an effort to +broaden the criteria in such a way as to enable Moscow to be +eligible for the subsidies, sources said. + The senators -- including Senate Finance Committee Chairman +Lloyd Bentsen (D-Tex.), Max Baucus (D-Mont.), David Pryor +(D-Ark.), John Melcher (D-Mont.) and Thad Cochran (R-Miss.) -- +also may fold into the trade bill a measure to shield pork +producers and processors from Canadian imports. + The measure, sponsored by Sen. Charles Grassley (R-Iowa), +would clarify the definition of "industry" in determining whether +or not imports were causing injury to U.S. producers. + Grassley's bill stems from a 1985 decision by the +International Trade Commission that imports from Canada of live +swine -- but not fresh, chilled and frozen pork -- were harming +U.S. producers. + The bill's proponents have argued Canada has simply +replaced shipments of live hogs with fresh pork. + Reuter + + + +24-MAR-1987 17:11:15.09 +money-fxdlr +usa + + + + + +A RM +f2623reute +b f BC-/FED'S-JOHNSON-SAYS-F 03-24 0088 + +FED'S JOHNSON SAYS FED ACTED TO STABILIZE DOLLAR + WASHINGTON, March 24 - Federal Reserve Board Vice Chairman +Manuel Johnson said the dollar has stabilized against other +currencies after action taken by the Fed. + "We have taken the appropriate action and the dollar has +stabilized," Johnson said after testifying to a House Banking +subcommittee. + He did not elaborate on the nature of the action nor when +it was taken, but said that it was in the spirit of the +agreement reached by six industrial nations in Paris recently. + Johnson said the dollar's decline against other currencies +such as the Japanese yen has been gradual. + Since the accord by the United States, Britain, West +Germany, Japan, France and Canada, foreign exchange markets +have been closely watching for indications of intervention by +central banks to determine the committment by those nations to +their agreement. + The nations agreed that currency exchange rates were at +about the correct levels when the pact was signed earlier this +year. + Reuter + + + +24-MAR-1987 17:11:23.20 + +usa + + + + + +F +f2624reute +r f BC-XOMA-<XOMA>-FILES-FOR 03-24 0098 + +XOMA <XOMA> FILES FOR PUBLIC OFFERING + BERKELEY, Calif., March 24 - Xoma Corp said it filed a +registration statement with the Securities and Exchange +Commission covering a proposed public offering of 1.3 mln +common shares. + Xoma, a biotechnology company which produces monoclonal +antibody-based products to treat some forms of cancer, said +proceeds will be used to fund research and product development, +human clinical trials and the expansion of manufacturing +capacity and working capital. + It said Dillon Read and Co Inc and Alex Brown and Sons Inc +will manage the underwriting. + Reuter + + + +24-MAR-1987 17:12:51.35 + +usa + + + + + +F +f2625reute +r f BC-REPUBLIC-AMERICAN-<RA 03-24 0088 + +REPUBLIC AMERICAN <RAWC> PLANS EXCHANGE OFFER + ENCINO, Calif., March 24 - Republic American Corp said it +began an offer to exchange a new issue of 9-1/2 pct +subordinated debentures due 2002 for a portion of its common +stock. + Republic said it is offering to acquire its stock at a rate +of 17.50 dlrs principal amount of debentures per common share. + The offering, which expires on April 27 unless extended, is +for up to 2,250,000 shares, with the company reserving the +right to accept three mln shares, Republic also said. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-010.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-010.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-010.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-010.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2002 @@ + + +26-MAR-1987 12:12:57.76 + +usa + + + + + +F +f1727reute +d f BC-AMOCO-<AN>-UNIT-EXPAN 03-26 0094 + +AMOCO <AN> UNIT EXPANDS CARPET YARN PLANT + CHICAGO, March 26 - Amoco Corp said its Amoco Fabrics Co +will expand the capacity of its polypropylene carpet face yarn +facility by 55 pct to support its successful penetration of the +commercial and residential carpet markets. + It said the expansion of the plant in Andalusia, Ala., will +bring Amoco's total face yarn capacity to nearly 140 mln pounds +a year, with Andalusia capacity at 85 mln pounds. + Amoco Fabrics is part of Amoco Chemicals Co, the chemical +manufacturing and marketing subsidiary of Amoco Corp. + Reuter + + + +26-MAR-1987 12:13:39.63 +earn +usa + + + + + +E F +f1730reute +d f BC-island-telephone 03-26 0038 + +ISLAND TELEPHONE SHARE SPLIT APPROVED + CHARLOTTETOWN, Prince Edward Island, March 26 - <Island +Telephone Co Ltd> said the previously announced two-for-one +common share split was approved by shareholders at the annual +meeting. + Reuter + + + +26-MAR-1987 12:15:35.31 + +usaukswitzerlandbelgiumluxembourg + + + + + +F +f1735reute +r f BC-BIOGEN-<BGNF>-GETS-PA 03-26 0103 + +BIOGEN <BGNF> GETS PATENT FROM EUROPEAN OFFICE + CAMBRIDGE, Mass., March 26 - Biogen Inc said the European +Patent Office granted it a patent covering certain proteins +used to produce a hepatitis B vaccine through genetic +engineering techniques. + Robert Gottlieb, Biogen spokesman, said the company has +licensed the vaccine on a nonexclusive basis to <Wellcome PLC>, +the British pharmaceutical firm, and is discussing licensing +with other companies. + Biogen said the patent gives it the right to exclude others +from marketing hepatitis B vaccine in the 11 member countries +of the European Patent Convention. + Gottlieb said the company has also filed a patent in other +markets, including the U.S. The vaccine is in clinical tests. + Patents in the biotechnology field are particularly +important as the company with an exclusive patent can reap +large rewards. Recently many of the products of genetic +engineering have become the target of patent lawsuits. + Merck and Co Inc <MRK> already sells a genetically +engineered hepatitis B vaccine in the U.S. called Recombivax +HB. A subsidiary of <SmithKline Beckman Corp>, SmithKline +Biologicals, based in Belgium, is selling a hepatitis B +vaccine, called Engerix-B, in Belgium. + A SmithKline spokesman said the vaccine has also been +formally approved in Switzerland and Luxembourg and has been +authorized for market in a number of Far East countries. + Hepatitis B is a serious liver infection common in many +parts of Africa and southeast Asia where about five pct to 15 +pct of the population carry the virus. In the U.S. about +200,000 new cases occur each year. + Last December the European Patent Ofice rejected Biogen's +patent for alpha-interferon, which Biogen said it will appeal +once it receives a formal written opinion from the office. + + Reuter + + + +26-MAR-1987 12:17:26.37 + +usa + + + + + +C +f1745reute +d f BC-KEY-HOUSE-MEMBER-OPPO 03-26 0113 + +KEY U.S. HOUSE MEMBER OPPOSES CFTC USER PLAN + WASHINGTON, March 26 - A key U.S. House member said he +opposed a Reagan administration plan to shift the cost of +surveillance of futures exchanges to the private sector. + "I just think user fees are the wrong way to attack a +problem of this sort," said Rep. Ed Jones (D-Tenn.), chairman +of the House Agriculture Subcommittee on Conservation, Credit +and Rural Development. + The White House budget office has asked the Commodity +Futures Trading Commission, CFTC, to draw up a plan for +transferring the three-mln dlr cost of monitoring futures +trading to either exchanges, futures commission merchants or +users of the markets. + CFTC Commissioner William Seale said the proposal was a +move in the wrong direction. "I would prefer to see +(surveillance) paid for through the appropriations process +rather than through taxation of market participants," he said. + CFTC Chairman Susan Phillips told the panel the commission +was preparing the proposal, due to be completed April 15, at +the request of the Office of Management and Budget. + Reuter + + + +26-MAR-1987 12:19:18.42 +tradeacq +ukjapan +thatcher + + + + +RM +f1749reute +u f BC-U.K.-GROWING-IMPATIEN 03-26 0119 + +U.K. GROWING IMPATIENT WITH JAPAN - THATCHER + LONDON, March 26 - Prime Minister Margaret Thatcher said +the U.K. Was growing more impatient with Japanese trade +barriers and warned that it would soon have new powers against +countries not offering reciprocal access to their markets. + She told Parliament that the bid by the U.K.'s Cable and +Wireless Plc <CAWL.L> to enter the Japanese telecommunications +market was being regarded by her government as a test case. + "I wrote to the prime minister of Japan, Mr Nakasone, on the +fourth of March to express our interest on the Cable and +Wireless bid. I have not yet had a reply. We see this as a test +on how open the Japanese market really is," Thatcher said. + Thatcher told Parliament that "shortly ... We shall have +more powers than we have now, when, for example the powers +under the Financial Services Act and the Banking Act become +available, then we shall be able to take action in cases where +other countries do not offer the same full access to financial +services as we do." + Cable and Wireless is seeking a stake in the proposed +Japanese telecommunications rival to Kokusai Denshin Denwa. + But the Japanese minister for post and telecommunications +was reported as saying that he opposed Cable and Wireless +having a managerial role in the new company. + REUTER + + + +26-MAR-1987 12:20:34.41 + +usa + + + + + +F +f1755reute +u f BC-GENCORP<GY>-TO-BUILD 03-26 0107 + +GENCORP<GY> TO BUILD 50 MLN DLR PLANT IN INDIANA + AKRON, Ohio, March 26 - GenCorp said it plans to build a 50 +mln dlr manufacturing facility in Shelbyville, Ind. + The company said it will begin building the plant, where it +will produce reinforced plastic components for cars and trucks, +this May with an expected completion date in mid-1988. + GenCorp said its DiversiTech General unit will operate the +plant through its reinforced plastics division. + "We believe the use of reinforced plastics in cars and +trucks will grow," A. William Reynolds, GenCorp chairman and +chief executive officer said as the reason for building the +plant. + "Our investment in the Shelbyville plant reflects the +confidence we have in the future of this product line," +Reynolds added. + GenCorp said the plant will create 500 new jobs. + Reuter + + + +26-MAR-1987 12:21:18.81 + +usa + + + + + +F +f1761reute +r f BC-JONES-INTERNATIONAL-R 03-26 0090 + +JONES INTERNATIONAL REALIGNS SUBSIDIARIES + ENGLEWOOD, Colo., March 26 - <Jones International Ltd> said +it realigned several subsidiaries to accommodate corporate +strategy. + Jones said ultimate control of the subsidiaries will remain +unchanged under the realignment. + Jones said it will exchange approximately 97 pct of its +holdings of the common stock of Jones Intercable Inc <JOIN> for +Class A common stock of Jones Spacelink Ltd <SPLK>. The company +said the move will enable Spacelink to elect 75 pct of +Intercable's directors. + In addition, Jones said 60 pct of the common stock of its +subsidiary, <The Jones Group Ltd>, will be exchanged for Class +A common stock of Jones Spacelink Ltd. + Following the exchange, Jones International's ownership of +Spacelink Class A voting stock will increase to approximately +89 pct. + Jones International said it will retain approximately two +pct of the common stock and approximately four pct of the Class +A common stock of Jones Intercable as well as the remaining 40 +pct of the Jones Group stock. + Reuter + + + +26-MAR-1987 12:21:42.19 +earn +usa + + + + + +F +f1764reute +d f BC-QUESTECH-INC-<QTEC>-Y 03-26 0062 + +QUESTECH INC <QTEC> YEAR NET + MCLEAN, Va., March 26 - + Shr loss nil vs profit 19 cts + Net loss 3,175 vs profit 284,945 + Revs 13.6 mln vs 10.6 mln + Year + Shr profit 13 cts vs profit 56 cts + Net profit 195,202 vs profit 857,006 + Revs 47.5 mln vs 42.9 mln + Note: Current year net includes charge against discontinued +operations of 1,060,848 dlrs. + Reuter + + + +26-MAR-1987 12:22:10.06 + +usa + + + + + +RM +f1766reute +u f BC-ASLK-CGER-FINANCE-ISS 03-26 0094 + +ASLK-CGER FINANCE ISSUES 10 BILLION YEN BOND + LONDON, March 26 - ASLK-CGER Finance NV is issuing a 10 +billion yen eurobond due April 10, 1994 with a 5-1/2 pct coupon +and priced at 101-1/2 pct, lead manager IBJ International Ltd +said. + The bonds are guaranteed by Belgian savings bank ASLK-CGER +Bank and have all been pre-placed. They will be issued in +denominations of one mln yen and listed in Luxembourg. + Fees comprise 5/8 pct for management and underwriting +combined, with a 1/8 pct praecipuum, and 1-1/4 pct for selling. +Pay date is April 10. + REUTER + + + +26-MAR-1987 12:23:03.99 + + + + + + + +F +f1768reute +f f BC-******UAW-STRIKES-GM 03-26 0009 + +******UAW STRIKES GM TRUCK AND BUS PLANT AT PONTIAC, MICH +Blah blah blah. + + + + + +26-MAR-1987 12:26:06.29 +crudenat-gas +canada + + + + + +E Y +f1773reute +u f BC-CANADA-OIL-EXPORTS-RI 03-26 0077 + +CANADA OIL EXPORTS RISE 20 PCT IN 1986 + OTTAWA, March 26 - Canadian oil exports rose 20 pct in 1986 +over the previous year to 33.96 mln cubic meters, while oil +imports soared 25.2 pct to 20.58 mln cubic meters, Statistics +Canada said. + Production, meanwhile, was unchanged from the previous year +at 91.09 mln cubic feet. + Natural gas exports plunged 19.4 pct to 21.09 billion cubic +meters, while Canadian sales slipped 4.1 pct to 48.09 billion +cubic meters. + The federal agency said that in December oil production +fell 4.0 pct to 7.73 mln cubic meters, while exports rose 5.2 +pct to 2.84 mln cubic meters and imports rose 12.3 pct to 2.1 +mln cubic meters. + Natural gas exports fell 16.3 pct in the month 2.51 billion +cubic meters and Canadian sales eased 10.2 pct to 5.25 billion +cubic meters. + Reuter + + + +26-MAR-1987 12:26:42.65 + +usa + + + + + +F +f1775reute +u f BC-PRU-BACHE-ANALYST-REA 03-26 0138 + +PRU BACHE ANALYST REAFFIRMS BULLISH MARKET CALL + NEW YORK, March 26 - Joseph Feshbach, chief market analyst +at Prudential-Bache Securities, said the stock market is poised +to climb above Dow Jones Industrial 2500 level by June. + The Dow average is around 2380 today. + "Liquidity is the biggest fundamental factor in the market +and money coming out of fixed income funds and flowing into +equities will propel the market sharply higher," Feshbach said, +noting that the market's peak will occur in June. + Feshbach said that in early January he predicted that the +Dow Jones Industrial average, the most closely watched market +barometer, would reach the 2400 level by April and the 2500 +level by June. He said he is now even more optimistic, saying +"the market is ready for a 150 point rise from current levels +any day now." + Reuter + + + +26-MAR-1987 12:27:23.14 + +uk + + + + + +RM +f1779reute +u f BC-LLOYD'S-APPOINTS-NEW 03-26 0117 + +LLOYD'S APPOINTS NEW OUTSIDE COUNCIL MEMBERS + LONDON, March 26 - Four new outsiders were appointed to the +policy-making Council of the Lloyd's of London insurance +market, shifting the voting balance on the Council away from +Lloyd's professionals, Lloyd's said. + It said in a statement the appointments of the new members, +none of them previously involved in the insurance market, were +made to comply with the core recommendation in the Neill report +into regulation at Lloyd's, which was published on January 22. + The recommendation, one of 70 to improve investor +protection in the Lloyd's market, was to reduce the number of +elected working members, Lloyd's professionals, from 16 to 12. + Simultaneously, the number of outsiders would be increased +by four while the number of external Council members, usually +Lloyd's investors without an active role in the market, would +remain unchanged at eight. + Lloyd's said the four newly-appointed Council members were +barrister Elizabeth Mary Freeman, Sir Maurice Hodgson, +non-executive chairman of British Home Stores Plc, Lloyd's Bank +Plc chairman Sir Jeremy Morse, and Brian Pomeroy, an accountant +who sat on the three-member Neill enquiry panel. + They replace the four Lloyd's professionals who resigned on +April 4 after Lloyd's agreed to implement the recommendation. + REUTER + + + +26-MAR-1987 12:27:45.45 +coffeecocoasugar + + + +nycsce + + +C T +f1783reute +d f BC-COFFEE,-SUGAR-AND-COC 03-26 0126 + +COFFEE, SUGAR AND COCOA EXCHANGE NAMES CHAIRMAN + NEW YORK, March 26 - The New York Coffee, Sugar and Cocoa +Exchange (CSCE) elected former first vice chairman Gerald +Clancy to a two-year term as chairman of the board of managers, +replacing previous chairman Howard Katz. + Katz, chairman since 1985, will remain a board member. + Clancy currently serves on the Exchange board of managers +as chairman of its appeals, executive, pension and political +action committees. + The CSCE also elected Charles Nastro, executive vice +president of Shearson Lehman Bros, as first vice chairman. +Anthony Maccia, vice president of Woodhouse, Drake and Carey, +was named second vice chairman, and Clifford Evans, president +of Demico Futures, was elected treasurer. + Reuter + + + +26-MAR-1987 12:28:11.69 +veg-oil +belgium + +ec + + + +C G +f1785reute +u f BC-MOST-EC-STATES-SAID-T 03-26 0121 + +MOST EC STATES SAID TO BE AGAINST OILS/FATS TAX + BRUSSELS, March 26 - A majority of European Community (EC) +member states are either against or have strong reservations +over a tax on both imported and domestically-produced oils and +fats proposed by the European Commission, senior diplomats +said. + They said a special committee of agricultural experts from +EC member states had voiced strong objections over the measure +during a meeting charged with preparing the ground for the +annual EC farm price-fixing which begins next Monday. + They added that only France and Italy had indicated they +would support the Commission proposal which would lead to a tax +initially of 330 Ecus per tonne during the 1987/88 price round. + Reuter + + + +26-MAR-1987 12:30:59.51 + +uk + + + + + +RM +f1797reute +u f BC-ROWNTREE-SEEKS-200-ML 03-26 0110 + +ROWNTREE SEEKS 200 MLN STG FACILITY, CP PROGRAM + LONDON, March 26 - Rowntree Mackintosh Plc is seeking a 200 +mln stg, five year multiple option facility, of which 150 mln +stg will be committed, and a 200 mln stg commercial paper +program, County Natwest Capital Markets Ltd said as arranger. + The facility includes options for sterling acceptances, +multi-currency advances, sterling and dollar notes via tender +panels and there is also a sterling swingline. + The committed portion carries a facility fee of five basis +points and a margin of ten. A 2-1/2 basis point utilisation +fee is payable on drawings of more than half the committed +portion. + The 200 mln stg commercial paper program will include a +dollar option, County Natwest said. + A County Natwest official said the facility, launched +earlier this week, seemed to be progressing well in +syndication. + REUTER + + + +26-MAR-1987 12:33:25.04 + +usa + + + + + +F +f1813reute +u f BC-TALKING-POINT/CONRAIL 03-26 0109 + +TALKING POINT/CONRAIL <CRR> + By Cal Mankowski, Reuters + NEW YORK, March 26 - Private investors eagerly snapped up +shares of Consolidated Rail Corp, the biggest initial stock +offering in U.S. history, but some analysts warned they could +be in a for a bumpy ride at least in the near term. + Analyst James Voytko of PaineWebber Group Inc believes some +investors who bought at the offering price of 28 dlrs will be +tempted to sell. The shares climbed 3-3/8 to 31-3/8 by midday. +Voytko said profit-taking pressure could become severe at the +35 dlr level. Others say Conrail, a combination of previously +bankrupt railroads, has good long term potential. + "Conrail is in the best position to weather the current +tremendous price competition in the transportation industry in +general," said Drew Robertson, analyst at Atlantic Systems Inc, +a research firm. + "It will survive and do damn well," said another analyst +who declined to be identified. He noted that Conrail's freight +trains serve heavy industry including steel and autos in major +U.S. cities in the northeast U.S. and midwest. + Robertson noted that Conrail's traffic is less dependent on +coal than other railroads based in the east. He expects Conrail +to earn 2.85 dlrs per share in 1987. + Voytko of PaineWebber sees another problem six months down +the road when more than 10 mln Conrail shares will be +distributed to current and former employees. He believes many +of these indivdiuals will be inclined to sell the stock. + Robertson says it's hard to determine the psychology of the +average employe, but even if a lot of stock is sold, it would +would not hit the market as one big block. He doubts it would +create a big downward push on the price. + "It's hard to call," said the analyst who requested +anonymity. In some cases employe loyalty may motivate +individuals to keep their shares, he said. + Steven Lewins, analyst for Citicorp Investment Management, +believes the key to Conrail's long term outlook is how it is +able to invest surplus cash. He expects Conrail to earn 3.00 +dlrs per share this year, flat in comparison with 1986, but by +1991 the picture could change dramatically if money not needed +for rail operations is invested wisely. + By 1991, earnings could reach 4.30 dlrs per share, Lewins +said, factoring in reinvestment of free cash flow at +conservative rates. + He believes motor freight will be one area of +diversification Conrail will explore. + Elizabeth Dole, U.S. Secretary of Transportation, whose +department was responsible for the sale of Conrail, noted that +Conrail is required to reinvest in its rail system and cannot +defer necessary maintenance. + For the historic offering of Conrail shares, Dole visited +the New York Stock Exchange and was photographed on the floor +wearing a locomotive engineer's cap, which she presented to +Stanley Crane, Conrail chairman and chief executive. + The U.S. government is expected to receive about 1.88 +billion dlrs for Conrail after factoring in underwriting fees +and other adjustments. + The possibility of a recession at some time in the next +five years is another issue troubling some investors. + Lewins says revenue-ton-miles, which he believes will climb +from 68.7 mln miles last year to 69.5 mln this year and 70.5 +mln in 1988, will grow to 71.5 mln in 1991, but in a recession +year, perhaps 1989, the figure could dip to 64.2 mln. + On the revenue side, he believes revenue per ton-mile will +be 4.7 cts in 1991, little changed from present levels and +exactly the same as in 1981. + "Their basic business isn't going anywhere," he says, +explaining why emphasizes investment of cash flow. + Voytko thinks Conrail can remain profitable in a recession +year. He points out his firm, PaineWebber, is not forecasting a +recession in any specific year, but as an example a 1990 +recession of modest degree could knock earnings down to 2.20 +dlrs per share. He estimated 3.00 dlrs per share this year and +3.35 dlrs next year. His 1988 figure reflects mostly a lowering +of the tax rate to 34 pct from 40 pct this year. + Voytko believes the Conrail shares merit purchase at the 26 +dlr level. + Goldman, Sachs and Co was lead manager for the offering. A +total of 148 firms took part in the U.S. syndicate. + Reuter + + + +26-MAR-1987 12:33:57.01 +acq +usa + + + + + +F +f1818reute +r f BC-GOULD<GLD>-COMPLETES 03-26 0077 + +GOULD<GLD> COMPLETES SALE OF FRENCH BATTERY UNIT + ROLLING MEADOWS, Ill., March 26 - Gould Inc said it has +completed the sale of its French battery business, Compagnie +Francaise D'Electro Chimie, to a group of investors including +the unit's employees and <GNB Inc> of Minnesota. + Gould did not disclose terms of the deal. + Gould said the move is part of its previously announced +plan to divest assets unrelated to its computer and electronics +businesses. + Reuter + + + +26-MAR-1987 12:34:24.39 + +usa + + + + + +F +f1823reute +r f BC-CMS-ENHANCEMENTS-<ACM 03-26 0054 + +CMS ENHANCEMENTS <ACMS> GETS CREDIT LINE + TUSTIN, Calif., March 26 - CMS Enhancements Inc said it has +obtained a ten mln dlr line of credit from Bank of the West, +effective immediately. + The credit line will be used in part to fund additional +growth, including research and development of new products, the +company said. + Reuter + + + +26-MAR-1987 12:37:48.01 + +usa + + + + + +F +f1836reute +d f BC-EXOVIR-<XOVR>-TO-GET 03-26 0108 + +EXOVIR <XOVR> TO GET EUROPEAN PATENT + GREAT NECK, N.Y., March 26 - Exovir Inc said the European +Patent Office notified it that its application covering +combinations of nonionic surfactants and all forms of +interferon has been approved and a patent will be issued in +about six months. + Exovir is completing trials of a gel combining alpha +interferon and nonoxynol-9, an antiviral surfactant, as a +treatment for genital and oral herpes and genital warts. The +gel was given a U.S. patent in 1985. + It said clinical tests will begin shortly to test whether +the gel is effective in preventing transmission of the AIDS +virus when used with a condom. + Reuter + + + +26-MAR-1987 12:38:09.30 + +usa + + + + + +F +f1839reute +d f BC-resending 03-26 0082 + +HIGHER U.S. WEEKLY CAR OUTPUT ESTIMATED + DETROIT, March 26 - U.S. automakers are expected to build +167,236 cars this week, up from 133,067 in the same year-ago +period, said the trade publication Ward's Automotive Reports. + It said year-to-date car production would reach 2,012,093 +compared to 2,126,954 in the 1986 period. + Domestic truck production for the week was seen as rising +to 70,033 from 58,506. Year to date, it was projected at +937,163 compared to 882,230 in the 1986 period. + Reuter + + + +26-MAR-1987 12:38:22.02 + +usa + + + + + +F +f1840reute +r f BC-CIRCLE-K-<CKP>-OFFICI 03-26 0071 + +CIRCLE K <CKP> OFFICIAL INCREASES HOLDINGS + PHOENIX, Ariz., March 26 - Circle K Corp said its chairman, +Karl Eller, will buy 750,000 shares of Circle K common stock +from the company's founder and Vice Chairman, Fred Hervey, in a +private transaction. + After the sale, Hervey will directly or beneficially own +6,764,004 shares, or 13.61 pct of Circle K stock and Eller will +hold 2,873,300 shares, of 5.78 pct of the stock. + Reuter + + + +26-MAR-1987 12:40:02.47 +earn +usa + + + + + +F +f1852reute +d f BC-SHOE-TOWN-INC-<SHU>-Y 03-26 0060 + +SHOE TOWN INC <SHU> YEAR ENDED JAN THREE 1987 + TOTOWA, N.J., March 26 - + Shr 51 cts vs 75 cts + Net 5,524,000 vs 8,094,000 + Revs 142.4 mln vs 137.2 mln + NOTE: 1986 and 1985 year net includes loss 785,000 dlrs or +eight cts a share and 59,000 dlrs or one ct a share, +respectively, for discontinued operations. + 1985 year ended December 28, 1985. + Reuter + + + +26-MAR-1987 12:40:16.38 + +usaargentina + + + + + +F +f1854reute +d f BC-EASTERN-AIR-<TXN>-SEE 03-26 0102 + +EASTERN AIR <TXN> SEEKS MORE ARGENTINA FLIGHTS + MIAMI, March 26 - Texas Air Corp's Eastern Airlines Inc +said it asked the U.S. Department of Transportation to approve +an increase in the number of its weekly roundtrip flights to +Buenos Aires to 11 from five. + It said if several of Pan Am Corp's <PN> one-stop flights +to Buenos Aires were terminated in Rio de Janeiro, Eastern +could add four non-stop flights from the U.S. + The expanded weekly schedule would include seven nonstop +flights from Miami, two from New York, and two one-stop flights +from Los Angeles via Lima. It asked for the change by June 12. + Reuter + + + +26-MAR-1987 12:40:43.84 +acq +usa + + + + + +F A +f1858reute +r f BC-FIRST-WISCONSIN-<FWB> 03-26 0055 + +FIRST WISCONSIN <FWB> TO BUY MINNESOTA BANK + MILWAUKEE, Wis., March 26 - First Wisconsin Corp said it +plans to acquire Shelard Bancshares Inc for about 25 mln dlrs +in cash, its first acquisition of a Minnesota-based bank. + First Wisconsin said Shelard is the holding company for two +banks with total assets of 168 mln dlrs. + First Wisconsin, which had assets at yearend of 7.1 billion +dlrs, said the Shelard purchase price is about 12 times the +1986 earnings of the bank. + It said the two Shelard banks have a total of five offices +in the Minneapolis-St. Paul area. + Reuter + + + +26-MAR-1987 12:40:52.65 + +usa + + + + + +F +f1859reute +r f BC-IMRE-<IMRE>-COMPLETES 03-26 0107 + +IMRE <IMRE> COMPLETES PRIVATE STOCK PLACEMENT + SEATTLE, March 26 - IMRE Corp said it completed a private +placement of about 400,000 shares of its securities with a +group of European institutions for 2.5 mln dlrs. + The company said proceeds will be used for working capital +and to implement the company's business plan. + IMRE also said it has established a light manufacturing +facility in Richmond, Washington that makes raw material +components for Prosorba column, a medical device that removes +disease-related immune components from the human bloodstream. + The company is awaiting Food and Drug Administration +approval on the device. + Reuter + + + +26-MAR-1987 12:41:04.85 +earn +usa + + + + + +F +f1860reute +d f BC-AMERICAN-NURSERY-PROD 03-26 0070 + +AMERICAN NURSERY PRODUCTS <ANSY> 3RD QTR NET + TAHLEQUAH, OKLA., March 26 - Period ended Feb 28 + Shr profit five cts vs profit four cts + Net profit 191,000 vs profit 108,000 + Sales 6,561,000 vs 5,896,000 + Nine mths + Shr loss 28 cts vs loss 40 cts + Net loss 871,000 vs loss 990,000 + Sales 9,310,000 vs 8,894,000 + Avg shrs 3,086,386 vs 2,465,996 + NOTE: Full name is American Nursery Products Inc + Reuter + + + +26-MAR-1987 12:41:30.21 + +usa + + + + + +F +f1864reute +h f BC-CLINICAL-DATA-<CLDA> 03-26 0050 + +CLINICAL DATA <CLDA> AWARDED RESEARCH CONTRACTS + BOSTON, March 26 - Clinical Data Inc said it has contracts +with four major pharmaceutical firms to analyze certain data in +research studies evaluating the efficacy and safety of new +cardiovascular drugs. + It said the contracts exceed 500,000 dlrs. + Reuter + + + +26-MAR-1987 12:43:18.88 + + + + + + + +F +f1871reute +f f BC-******DUN/BRADSTREET 03-26 0011 + +******DUN/BRADSTREET SAYS BUSINESS FAILURES UP 10.8 PCT IN FEBRUARY +Blah blah blah. + + + + + +26-MAR-1987 12:44:43.83 + +usa + + + + + +F +f1875reute +u f BC-UAW-STRIKES-GENERAL-M 03-26 0097 + +UAW STRIKES GENERAL MOTORS <GM> PLANT + PONTIAC, Mich., March 26 - The United Auto Workers struck +General Motors Corp's truck and bus plants at Pontiac, Mich, +General Motors said. + General Motors' truck and bus group failed to reach an +agreement on local issues with UAW Local 594 by the union's +deadline of noon today, causing a strike by 9,000 hourly +workers at the facility, the company said. + General Motors said it was "eager" to continue meeting with +union officials on the dispute. It was not immediately clear +whether contract talks were continuing at the facility. + General Motors spokesman Frank Cronin said the three plants +at Pontiac stopped working "as of noon today." + He said talks will resume Friday at 1000 EST in Pontiac. +"We're hoping (the strike) will be of very brief duration," +Cronin said. + Bus-manufacturing operations at one of the three +plants--the Pontiac Central facility--are being sold to +Greyhound Corp <G>, although GM will retain the facility. + Cronin said about 400 workers on the bus line will be laid +off "whenever we fulfill production commitments" on the buses, +"possibly in May." + The Pontiac Central plant also makes medium- and heavy-duty +trucks. Assembly of the medium trucks is scheduled to move to +Janesville, Wis., in 1990, Chronin said. + Heavy truck operations at the plant will be taken over by +GM's joint venture with Volvo AB, and all vehicle assembly +operations at the facility will eventually be ended, Chronin +said. The plant also has sheet metal operations, which are so +far unaffected, he said. + The other two plants at Pontiac--Pontiac East and Pontiac +West--make full-size pickups and sport utility vehicles. + Reuter + + + +26-MAR-1987 12:46:03.72 + +usa + + + + + +F +f1880reute +r f BC-S.P.I.-SUSPENSION-<SP 03-26 0046 + +S.P.I. SUSPENSION <SPILF> WINS CONTRACT + NEW YORK, March 26 - S.P.I. Suspension and Parts Industries +Ltd said it won four multi-year contracts from the U.S. Army +worth 34.5 mln dlrs. + The contracts, for wheels on U.S. Army vehicles, will run +for five years beginning 1987. + Reuter + + + +26-MAR-1987 12:46:20.26 +earn +usa + + + + + +F +f1881reute +d f BC-DISCUS-CORP-<DISC>-4T 03-26 0046 + +DISCUS CORP <DISC> 4TH QTR LOSS + BLOOMINGTON, Minn., March 26 - + Shr loss six cts vs loss seven cts + Net loss 125,000 vs loss 140,000 + Rev 2.4 mln vs 2.2 mln + Year + Shr loss 13 cts vs loss 14 cts + Net loss 271,000 vs loss 211,000 + Rev 10.1 mln vs 8.2 mln + Reuter + + + +26-MAR-1987 12:48:35.24 + + + + + + + +F +f1886reute +b f BC-******ENTERTAINMENT-P 03-26 0009 + +******ENTERTAINMENT PUBLICATIONS DISCONTINUES THREE UNITS +Blah blah blah. + + + + + +26-MAR-1987 12:49:18.15 + +usa + + + + + +C +f1887reute +d f BC-CFTC-OFFICIALS-SEE-NO 03-26 0106 + +CFTC OFFICIALS SEE NO MERGER WITH SEC + WASHINGTON, March 26 - Officials of the Commodity Futures +Trading Commission (CFTC) said merging the agency with the +Securities and Exchange Commission (SEC) would not help +regulation of commodities and securities markets. + "I don't think that a merger would solve regulatory +problems," CFTC chairman Susan Phillips told the House +Subcommittee on Conservation, Credit and Rural Development. + "I think what does solve our problems would be working with +other agencies in a strong capacity," she said in response to a +question. "We don't want agencies to trample on our +jurisdiction either." + CFTC Commissioner Fowler West said, "We ... do not have the +expertise to regulate securities markets. I don't think the SEC +has the expertise to regulate the futures markets." + Increased attention to price volatility in stock index +futures markets and reports of alleged futures trading abuses +have raised concerns Congress may adopt a radically different +regulatory structure for securities and futures markets. + Rep. John Dingell (D-Mich.), chairman of the House Energy +and Commerce Committee, which has jurisdiction over securities +regulation, has said he will hold hearings on the questions of +market volatility and alleged trading abuses. + Reuter + + + +26-MAR-1987 12:49:31.85 +earn + + + + + + +F +f1889reute +b f BC-*****ENTERTAINMENT-PU 03-26 0013 + +*****ENTERTAINMENT PUBLICATIONS SEES 31 CTS/SHR 3RD QTR LOSS ON UNITS DISPOSAL +Blah blah blah. + + + + + +26-MAR-1987 12:50:43.81 + +poland +jaruzelski + + + + +RM +f1894reute +u f BC-POLAND-FIRM-ON-ECONOM 03-26 0092 + +POLAND FIRM ON ECONOMY DESPITE CONCESSIONS + By Irena Czekierska, Reuters + WARSAW, March 26 - The Polish government has backed down +from some proposed price rises in the face of strong opposition +from trade unions, but has restated its commitment to economic +reforms entailing tougher discipline and austerity measures. + Following a warning from the officially-backed OPZZ unions +that sharp price hikes could spark confrontation, the +government has agreed that food prices this year will rise an +average 9.6 pct instead of the planned 13 pct. + A statement last night said the government had "partially +accepted" demands for the protection of the low-paid and agreed +to extend some social benefits. + But Polish leader Wojciech Jaruzelski, at a separate +meeting yesterday, sharply criticised the slow pace of reforms. + He told an economic commission that tougher discipline and +austerity measures, greater efficiency and initiative should +replace waste, red tape and inertia. He announced cost-cutting +measures affecting central administrative bodies. + OPZZ economic expert Zbigniew Kochan welcomed the move on +food prices. "This decrease was considerable," Kochan told +Reuters today. "Also important is the fact that the government +admitted we were right and agreed to consult us over prices +from now on," he added. + The communique made no mention of curbs on wage increases, +or price rises in sectors including transport and energy. + The authorities have said prices could go up by as much as +26 pct as state subsidies are sharply reduced in an effort to +make the market more free and to improve efficiency. + The OPZZ unions are officially recognised by the government +and replaced the Solidarity movement suppressed under martial +law. They claim a membership of seven million. + Western diplomats said today the climb-down on food prices +was a limited concession. "This is a small price to pay if they +can push through the other price rises," one said, adding that +fuel and energy rises would have a more significant effect. + He noted that there had been a concerted media campaign to +prepare people for price rises, including a major article in a +mass-circulation women's magazine, "clearly aimed at those who +do the shopping," he said. + Other articles in the official press this week have focused +on coal, which sells to both industrial and private consumers +at far less than either the production or export costs. + Countering scepticism from opposition sources and former +Solidarity activists as to OPZZ's role, Kochan said "It was +definitely not a question of gaining credibility, but true +concern for people's living standards." + Deputy Prime Minister Jozef Koziol said the authorities' +main aim was not to harm workers' living standards. But he was +also quoted by the official PAP news agency as saying the +government had to take current economic realities into account. + REUTER + + + +26-MAR-1987 12:50:49.04 +earn +usa + + + + + +F +f1895reute +r f BC-PAY-'N-PAK-STORES-INC 03-26 0043 + +PAY 'N PAK STORES INC <PNP> 4TH QTR FEB 28 NET + KENT, Wash., March 26 - + Shr 11 cts vs 13 cts + Net 1,129,000 vs 1,301,000 + Revs 83.2 mln vs 74.5 mln + Year + Shr 57 cts vs 82 cts + Net 5,686,000 vs 8,168,000 + Revs 398.4 mln vs 333.8 mln + Reuter + + + +26-MAR-1987 12:50:57.93 +gas +usa + + + + + +F Y +f1896reute +r f BC-corrected---mobil 03-26 0119 + +(CORRECTED) - MOBIL <MOB> TO UPGRADE REFINERY UNIT + NEW YORK, March 26 - Mobil Corp said it will spend over 30 +mln dlrs to upgrade a gasoline-producing unit at its Beaumont, +Texas, refinery. + It said the unit is a catalytic reformer, which converts +low-octane components of gasoline into high-octane components +for use in Super Unleaded gasoline. + The company said the modernization will allow the unit to +regenerate catalysts on a continuous basis without shutdown. +Currently, it must be shut twice a year. The unit produces +46,000 barrels of gasoline components a day. Construction will +start late this year, with completion set for mid-1989. + (Correcting unit's output to barrels/day from barrels/year) + Reuter + + + +26-MAR-1987 12:59:20.16 + +usa + + +cbt + + +C +f1921reute +d f BC-CFTC-SPECULATIVE-LIMI 03-26 0141 + +CFTC LIMIT PLAN MAY NOT REVERSE LIQUIDITY DROP + WASHINGTON, March 26 - A proposal by the Commodity Futures +Trading Commission, CFTC, to raise federal limits on futures +speculative positions for certain agricultural commodity +contracts would not reverse a decline in liquidity in those +markets that started in 1981, two CFTC commissioners said. + Commissioners William Seale and Kalo Hineman told a House +Agriculture subcommittee a recent proposal that would have the +effect of raising deferred month speculative position limits on +several agricultural commodity contracts would not +substantially increase liquidity in those months. + "I seriously doubt that increasing speculative limits will +create a great deal of liquidity in the back months," Seale +told the House Agriculture Subcommittee on Conservation, Credit +and Rural Development. + Analysts have attributed much of the liquidity squeeze to a +1981 tax law change, which by changing the treatment of +so-called straddles limited the ability of futures commission +merchants to roll positions forward for tax purposes. + CFTC Chairman Susan Phillips said only that the commission +would take into account Congress' recommendation that federal +speculative limits be raised. + The Chicago Board of Trade and the MidAmerica Commodity +Exchange have expressed concern that the CFTC plan would +decrease spot month limits for certain of their contracts. + Reuter + + + +26-MAR-1987 13:00:01.51 +earn +usa + + + + + +F +f1926reute +d f BC-AMERICAN-NURSERY-PROD 03-26 0073 + +AMERICAN NURSERY PRODUCTS <ANSY> 3RD QTR NET + TAHLEQUAH, Okla., March 26 - Qtr ends Feb 28 + Shr profit five cts vs profit four cts + Net profit 191,000 vs profit 108,000 + Revs 6,561,000 vs 5,896,000 + Avg shrs 3.6 mln vs 2.5 mln + Nine mths + Shr loss 28 cts vs loss 40 cts + Net loss 871,000 vs loss 990,000 + Revs 9,310,000 vs 8,894,000 + Avg shrs 3.1 mln vs 2.5 mln + NOTE: Full name American Nursery Products Inc. + Reuter + + + +26-MAR-1987 13:00:14.13 +earn +sweden + + + + + +F +f1927reute +d f BC-VOLVO-FINAL-RESULT-IM 03-26 0124 + +VOLVO 1986 RESULT OFF SLIGHTLY FROM 1985 + STOCKHOLM, March 26 - AB Volvo <VOLV.ST> said the weakening +dollar caused the drop in its 1986 profits, but company chief +executive Pehr Gyllenhammar said 1986 was one of Volvo's best +years ever. + In its final report released earlier, the company said the +group's 1986 profits before allocations and taxes was 7.53 +billion crowns compared with 1985's 7.60 billion. + Despite the fall, Gyllenhammar said, "Sales of industrial +products have never been higher, and Volvo Cars and Volvo +Trucks were both completely sold out at year-end. Operating +income was slightly higher than a year earlier." + He said the company's financial strength gave it +exceptional opportunities to invest for the future. + Although industrial sales were up, the company's yearend +report said total sales were 84.09 billion crowns against +1985's 86.19 billion. + Reuter + + + +26-MAR-1987 13:00:46.83 +acq +usa + + + + + +F +f1929reute +h f BC-<MERIDIAN-ENERGY>,-CA 03-26 0045 + +<MERIDIAN ENERGY>, CASTONE END LETTER OF INTENT + CHICAGO, March 26 - <Meridian Energy Inc> and Castone +Development Corp, a privately-held company, jointly announced +that they have decided to terminate the letter of intent under +which Meridian would have acquired Castone. + Reuter + + + +26-MAR-1987 13:06:17.40 +iron-steelship +taiwansouth-koreajapanchinauk + +ec + + + +M +f1955reute +r f BC-REPORT-EXPECTS-SHARP 03-26 0107 + +REPORT EXPECTS SHARP DROP IN WORLD IRON IMPORTS + LONDON, March 26 - World seaborne iron ore imports will +fall sharply by the year 2000 with declining imports to the EC +and Japan only partially offset by increased demand from South +East Asia, a report by Ocean Shipping Consultants said. + The report predicts annual world seaborne iron ore imports +of 267.7 mln tonnes by 2000 versus 312.4 mln tonnes in 1985. + It estimates that total bulk shipping demand from the iron +ore sector will fall by almost 10 pct, or 200 billion tonne +miles, with shipping demand associated with the coking trade +down about 17 pct or 130 billion tonne miles. + The report sees EC imports falling to 91.7 mln tonnes in +2000 from 123.6 mln in 1985 with Japanese imports falling to 89 +mln from 124.6 mln tonnes. Imports to South East Asia are seen +rising to 58.6 mln from 32.6 mln tonnes in 1985. + It predicts that EC steel production will fall to 109 mln +tonnes in 2000 from 135.7 mln in 1985 with Japanese production +falling to 92 mln from 105.3 mln. + South Korea and Taiwan are expected to double their output +to 40 mln tonnes with Chinese production increasing by 25 mln +tonnes to 80 mln, it added. + Reuter + + + +26-MAR-1987 13:06:50.85 + +usa + + + + + +F +f1960reute +d f BC-ROYCE-<RLAB>-TO-REDEE 03-26 0056 + +ROYCE <RLAB> TO REDEEM WARRANTS + MIAMI, March 26 - Royce Laboratories Inc said it is calling +for redemption its redeemable common purchase warrants on April +30 at 2.5 cts per warrant. + It said warrant holders retain the right to purchase one +share of its common at an exercise price of three dlrs per +share until 1700 EST April 29. + Reuter + + + +26-MAR-1987 13:07:08.34 + +usa + + + + + +F +f1961reute +b f BC-DUN/BRADSTREET-<DB>-S 03-26 0056 + +DUN/BRADSTREET <DB> SAYS BUSINESS FAILURES UP + NEW YORK, March 26 - Dun and Bradstreet Corp said business +failures in February increased 10.8 pct, to 5,390, from 4,864 +in February 1986. + "The national level of business failures continues to be +driven upward by substantial increases in the oil and +agricultural states," Dun said. + Dun said that of the nine U.S. Bureau of the Census +regions, three reported a decrease in the number of failures +and two had gains of less than 3.0 pct. + The largest increase was reported in the West South Central +states, Dun said, with business failures rising 47.8 pct, to +1,218. + The East South Central states posted a 44 pct rise, to 298, +Dun said, while the West North Central states recorded a 27.3 +pct gain, to 489. + The greatest decline, Dun reported, was registered by the +Middle Atlantic states, down 8.2 pct in February, to 324. + The Pacific states also reported a large decline in failing +businesses, off 6.8 pct, to 1,028, Dun said. + In the smokestack region of the East North Central states, +there was a negligible decline of 0.6 pct, to 794, Dun said. + Dun said the Mountain states recorded a gain in business +failures of 1.5 pct, to 530. + Business failures in the New England states rose 23.5 pct, +to 105. + By industry segment, Dun said the largest gain was recorded +by the agricultural, forestry and fishing sector, up 62.7 pct, +to 345. + Year to date, Dun said business failures rose to 11,004, an +increase of 5.3 pct over 1986. + Reuter + + + +26-MAR-1987 13:08:21.86 +earn +australia + + + + + +F +f1966reute +d f BC-GOLDFIELD-CORP-<GV>-4 03-26 0080 + +GOLDFIELD CORP <GV> 4TH QTR NET LOSS + MELBOURNE, Fla., March 26 - + Shr loss four cts vs loss five cts + Net loss 527,065 vs loss 1,204,080 + Revs 622,470 vs 613,205 + Year + Shr profit four cts vs loss 13 cts + Net profit 1,099,778 vs loss 3,282,478 + Revs 7,579,547 vs 6,068,254 + NOTE: 1985 excludes loss from discontinued operations of +four cts per share in the quarter and loss 10 cts in the year. +1986 year excludes extraordinary gain of two cts a share. + + Reuter + + + +26-MAR-1987 13:08:52.54 + + + + + + + +A F RM +f1970reute +f f BC-******FED'S-HELLER-UR 03-26 0015 + +******FED'S HELLER URGES FORMING FINANCIAL SERVICES HOLDING COMPANIES TO STRENGTHEN BANKING +Blah blah blah. + + + + + +26-MAR-1987 13:09:45.98 +money-fx +ukfrance +balladurlawson +ec + + + +RM +f1973reute +r f BC-BRITISH,-FRENCH-MINIS 03-26 0115 + +BRITISH, FRENCH MINISTERS DISCUSS PUBLIC SPENDING + LONDON, March 26 - French Finance Minister Edouard Balladur +discussed the need to control public spending in talks here +today with British Chancellor of the Exchequer Nigel Lawson, a +Treasury spokesman said. + The spokesman said the ministers reviewed their economies, +and public spending, domestic and European Community-wide. + He declined to comment on whether the subject of concerted +action to shore up the dollar had arisen. The U.S. Currency +dipped sharply earlier this week after a month of relative +stability after an agreement by six major industrialised +nations in Paris on February 22 to stabilise their currencies. +REUTER + + + +26-MAR-1987 13:09:57.13 +acq +usa + + + + + +F A RM +f1974reute +b f BC-FED'S-HELLER-URGES-BR 03-26 0091 + +FED'S HELLER URGES BROAD REFORM TO AID BANKING + WASHINGTON, March 26 - Federal Reserve Board Governor +Robert Heller said the banking system could be strengthened by +permitting formation of financial services holding companies +involved in areas like banking, insurance, real estate and +securities. + In a speech prepared for delivery in New York to the Bank +and Financial Analysts' Association, Heller said, "I believe +that increased diversification along geographic and product +lines is the key to strengthening the American banking system." + He said he supported the idea of financial services holding +companies advocated by the Association of Bank Holding +Companies in which regulation of various bank, thrift, +insurance, investment, securities and real estate subsidiaries +would be handled on functional lines. + "Limits would be placed on the extension of credit by the +bank to the associated institutions, and all transactions would +have to be on an arms-length basis," Heller said. + Measures would be necessary to avoid abuse of the banks' +special position by such holding companies or subsidiaries. + Heller said he "would require the holding company to serve +as a 'source of strength' to the bank by making a commitment to +maintain the bank's capital. + "In other words, the bank would not be allowed to fail as +long as the holding company has a positive net worth." + Heller also said commercial enterprises should be permitted +to own a financial services holding company, again with the +provision that capital would flow to the financial enterprise +if necessary. + Heller said the effects of these actions "would be banks +that are at least as strong as the corporations holding them" in +which customer deposits were assured while any incentive to +"loot the bank" was removed. + Such diversification would give access to national and +international financial services to corporations across the +United States. + Heller said that would mean "the steady decline of America's +banks in the world financial league tables would be arrested" by +permitting them to become more competitive. + Reuter + + + +26-MAR-1987 13:11:37.69 +earn + + + + + + +F +f1977reute +f f BC-******FEDERATED-DEPAR 03-26 0014 + +******FEDERATED DEPARTMENT STORES INC UPS QTLY DIV BY 10.5 PCT, SETS 2-FOR-1 STOCK SPLIT +Blah blah blah. + + + + + +26-MAR-1987 13:14:17.73 + +usa + + + + + +A RM +f1990reute +r f BC-OUTBOARD-MARINE-<OM> 03-26 0116 + +OUTBOARD MARINE <OM> SELLS 9.15 PCT DEBENTURES + NEW YORK, March 26 - Outboard Marine Corp is raising 100 +mln dlrs via an offering of sinking fund debentures due 2017 +yielding 9.15 pct, said lead manager Salomon Brothers Inc. + The debentures have a 9-1/8 pct coupon and were priced at +99.75 to yield 146 basis points over comparable Treasury bonds. +Morgan Stanley co-managed the deal. + The issue is non-refundable for 10 years. A sinking fund +beginning in 1998 to retire annually five pct of the debt may +be increased by 200 pct at the company's option, giving it an +estimated minimum life of 13.85 years and maximum of 20.5 +years. The debt is rated Baa-2 by Moody's and BBB-plus by S/P. + Reuter + + + +26-MAR-1987 13:15:04.62 +acq +usa + + + + + +F +f1992reute +r f BC-GOULD-<GLD>-SELLS-FRE 03-26 0052 + +GOULD <GLD> SELLS FRENCH BATTERY UNIT + ROLLING MEADOWS, March 26 - Gould Inc said it sold its +French Battery unit, Cie Francaise d'Electro Chimie, to a group +of investors including the unit's employees and <GNB Inc> of +Minnesota. + Terms of the sale were not disclosed. The unit had 1986 +sales of 65 mln dlrs. + Reuter + + + +26-MAR-1987 13:17:32.95 +earn +usa + + + + + +F +f2003reute +r f BC-ADVANCED-GENETIC-SCIE 03-26 0036 + +ADVANCED GENETIC SCIENCES <AGSI> YEAR LOSS + OAKLAND, Calif., March 26 - + Shr loss 30 cts vs loss 73 cts + Net loss 3,895,267 vs loss 8,250,222 + Revs 3,237,235 vs 234,745 + Note: 4th qtr data not available + Reuter + + + +26-MAR-1987 13:25:26.95 +earn +usa + + + + + +F +f2025reute +u f BC-FEDERATED-DEPARTMENT 03-26 0077 + +FEDERATED DEPARTMENT <FDS> RAISES QTLY DIVIDEND + CINCINNATI, March 26 - Federated Department Stores Inc said +it raised its quarterly common stock dividend to 74 cts a +share, from 67 cts, an increase of 10.5 pct. + The company said it also approved a two-for-one stock split +in the form of a 100 pct stock dividend. + At the same time, Federated said it will ask shareholders +to approve an increase in the number of authorized shares to +400 mln, from 200 mln. + Federated said the dividend is payable on a pre-split basis +on April 24 to shareholders of record April 10. + New shares from the stock split will be distributed May 11, +it said. + + Reuter + + + +26-MAR-1987 13:29:49.49 + +usa + + + + + +F +f2040reute +r f BC-CFTC-SEES-NO-TRADING, 03-26 0087 + +CFTC SEES NO TRADING, TRIPLE WITCHING RULES + WASHINGTON, March 26 - The chairman of the CFTC, Susan +Phillips, said she does not expect the CFTC to restrict dual +trading or to intervene in the quarterly expiration of stock +index futures and their options. + "At this time we have no plans to reexamine our policy (on +dual trading)," she told the House Subcommittee on +Conservation, Credit and Rural Development. + She said it would not be appropriate to ban dual trading +because it would decrease market liquidity. + Dual trading refers to the ability of futures commission +merchants to trade for their own as well as their clients' +accounts. Exchange rules prohibit a broker from attempting to +benefit from the market impact of a client's order by trading +on his own account before placing the client's order. + CFTC has required all futures exchanges by July 1 to have +implemented audit trails permitting the reconstruction of all +trades to the nearest minute. The move was designed in part to +discourage abuse of dual trading. + The board of directors of the Chicago Mercantile Exchange +has proposed limiting but not banning dual trading in the +Standard and Poor's 500 stock index future pit. + Phillips indicated the CFTC would not move beyond requiring +improved audit trails in its effort to allay concerns about +dual trading abuses. + "It would be inappropriate at this point until we see how +the audit trail will work," she said in response to a question. + On triple-witching, Phillips said recent experiments by +markets to quell price fluctuations have been quite successful +and that users of securities and derivative instruments were +still learning how to deal with the quarterly phenomenon. + Triple-witching refers to the simultaneous expiration of +stock index futures, options on those futures and options on +certain individual stocks. + The CFTC chairman noted the commission has heightened +surveillance of markets on triple-witching day. + "We aren't sure any other regulatory changes are needed at +this point," Phillips said. + Reuter + + + +26-MAR-1987 13:30:19.72 + +usa + + + + + +A RM +f2041reute +r f BC-TRINITY-INDUSTRIES-<T 03-26 0104 + +TRINITY INDUSTRIES <TRN> AND UNIT CUT BY S/P + NEW YORK, March 26 - Standard and Poor's Corp said it cut +to BB-minus from BB-plus Trinity Industries Inc's 275 mln dlrs +of liquid yield option notes. + Also downgraded were the unit Trinity Industries Leasing +Co's 60 mln dlrs of convertible debentures due 2006 to BB-plus +from BBB-minus. + S and P said the actions reflected Trinity's weakened +earnings due to depressed demand in several key markets, the +likelihood that a significant sustained improvement would not +occur in the near-term, as well as heightened financial risk +from a series of debt-financed acquisitions. + Reuter + + + +26-MAR-1987 13:32:52.55 +earn +usa + + + + + +F +f2054reute +u f BC-DANZAR-INVESTMENT-<DN 03-26 0079 + +DANZAR INVESTMENT <DNZR> SETS SPECIAL DIVIDEND + DALLAS, March 26 - Danzar Investment Group Inc said it +received 60 mln shares of <Commonwealth Capital Ltd> in +settlement of a debt and that it will distribute the shares to +its stockholders as a dividend. + Danzar said the dividend will also include 18,750,000 +Commonwealth shares it already holds. + The dividend of 39.9 shares per Danzar share held will be +paid to shareholders of record April 15, the company said. + Reuter + + + +26-MAR-1987 13:38:15.46 +acq +usa + + + + + +F +f2069reute +d f BC-FIDELITY-<FNF>-UNIT-A 03-26 0058 + +FIDELITY <FNF> UNIT ACQUIRES CALIFORNIA CONCERN + SCOTTSDALE, Ariz., March 26 - Fidelity National Financial +Inc said its Fidelity National Title Insurance Co subsidiary +acquired the operations of Safeco Title Insurance Co in the +northern California counties of Alameda, Contra Costa and San +Mateo. + Terms of the acquisition were not disclosed. + Reuter + + + +26-MAR-1987 13:40:37.69 + +usa + + + + + +F +f2070reute +d f AM-LIABILITY 03-26 0113 + +ADMINISTRATION SAYS INSURANCE CRISIS EASED + WASHINGTON, March 26 - The Reagan administration said the +national crisis in liability insurance eased during the past +year as the insurance industry's profits more than doubled to +11.5 billion dlrs, but some problems still persist. + An administration working group, in an update of its report +a year ago, found that insurance premiums generally have +stabilized, but at high levels, as the crisis has abated. + After severe financial difficulties in 1984 and 1985, the +insurance industry's rate of return last year recovered to the +same level as the performace of U.S. corporations in general, +the group said in a 98-page study. + While the crisis has eased, the study found that liability +insurance will likely remain expensive and continue to be +difficult to obtain for some lines of coverage and for some +sectors of the American economy. + Some types of insurance, especially associated with +environmental liability, remain unavailable for many companies +at any price, it said. + The increased availability and the price stability for +insurance the past year has been accompanied by higher +deductibles, lower coverage limits and additional policy +restrictions, the study said. + The administration last year unveiled a wide range of +recommendations aimed at dealing with the crisis, including +limits on punitive damages and awards for pain, suffering and +mental anguish at 100,000 dlrs. + Attorney General Edwin Meese told a news conference today +that the administration still supports state efforts to place +limits on damage awards and to enact other reforms of the tort +laws. + Assistant Attorney General Richard Willard denied charges +by consumer groups that the insurance crisis was caused by +industry collusion to raise rates in violation of the antitrust +laws. Willard, the head of the working group, said excessive +jury damage awards was the main reason for the insurance +liability problem. + Reuter + + + +26-MAR-1987 13:44:20.98 + + + + + + + +RM +f2081reute +f f BC-Saint-Gobain-U.S.-sub 03-26 0015 + +******Saint Gobain U.S. Subsidiary seeks 150 mln dlr, five year facility - arranger Chemical +Blah blah blah. + + + + + +26-MAR-1987 13:45:13.45 +earn +usa + + + + + +F +f2082reute +u f BC-HOME-SAVINGS-BANK-<HM 03-26 0022 + +HOME SAVINGS BANK <HMSB> SETS INITIAL DIVIDEND + NEW YORK, March 26 - + Qtly div nine cts + Pay April 30 + Record April six + Reuter + + + +26-MAR-1987 13:46:09.82 +cotton +usa + + + + + +C G +f2085reute +u f BC-cotton-ginnings 03-26 0093 + +FINAL 1986 CROP U.S. COTTON GINNINGS + WASHINGTON, March 26 - Final 1986 crop U.S. cotton ginnings +totaled 9,438,425 running bales, vs 12,987,834 bales at the end +of the 1985 season and 12,544,866 bales at end-1984 season, the +U.S. Census Bureau said. + The bureau said upland cotton ginnings from the final 1986 +crop totaled 9,237,296 bales, vs 12,837,088 bales in 1985 and +12,418,749 bales in 1984. + American Pima ginnings from the final 1986 crop totaled +201,129 bales, vs 150,746 bales in the 1985 crop and 126,117 +bales in 1984, the bureau said. + REUTER + + + +26-MAR-1987 13:48:02.47 + +usa + + + + + +F A +f2087reute +d f AM-ANDERSON 03-26 0119 + +FORMER TREASURY SECRETARY PLEADS GUILTY TO TAX EVASION + NEW YORK, March 26 - Former Secretary of the Treasury +Robert Anderson, whom Dwight Eisenhower once said deserved to +be president, pleaded guilty to income tax evason charges and +illegally running an offshore bank. + Anderson, declaring that he was "deeply regretful," admitted +to evading tax on 127,500 dlrs in undeclared income. Much of +the money was paid to him for lobbying for controversial South +Korean evangelist Sun Myung Moon's Unification Church. + The 77-year-old Anderson was President Eisenhower's +treasury secretary from 1957 to 1961 and a prominent +businessman afterwards. In his memoirs, Eisenhower said +Anderson deserved to be president. + Standing before Federal Court Judge Edmund Palmieri, +Anderson, who faces up to 10 years in jail, said he had +recently undergone two operations and treatment for alcoholism. + The judge set May 7 for sentencing and U.S. Attorney +Rudolph Giuliani declared the government would ask that +Anderson be sent to jail. + According to the indictment, Anderson was a prinicipal of +the Commercial Exchange Bank and Trust Ltd of Anguilla in the +British West Indies for two years ending in 1985. + During that time, government prosecutors said the bank +conducted operations in New York city but failed to register +with state and federal banking authorities. Depositors have +lost at least 4 mln dlrs. + Anderson pleaded gulity only for the tax year 1984 but +admitted other tax transgressions for the previous year and +faces civil fines for both years. + Among other things, he said he received 80,000 dlrs in 1983 +from a shell corporation for lobbying for the Unification +Church. The money was given to him as a no-interest loan +repayable in 1990 but the government said it should have been +reported as income. + Reuter + + + +26-MAR-1987 13:53:17.71 +earn + + + + + + +F +f2104reute +f f BC-******american-brankd 03-26 0009 + +******AMERICAN BRANDS SEES RECORD FIRST QUARTER RESULTS +Blah blah blah. + + + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-011.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-011.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-011.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-011.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2010 @@ + + +30-MAR-1987 14:22:36.87 + +usa + + + + + +F A RM +f2192reute +u f BC-FIDATA-<FID>-ANNOUNCE 03-30 0086 + +FIDATA <FID> ANNOUNCES PRELIMINARY ESM SETTLEMENT + NEW YORK, March 30 - Fidata Corp <FID> and its subsidiary, +Fidata Trust Company New York <FTCNY>, announced that they have +reached a preliminary settlement agreement in principle in the +lawsuits filed by major parties arising out of the E.S.M. +Government Securities, Inc bankruptcy. + Fidata Corp said that it anticipates that the cost of the +proposed settlement, after anticipated recoveries, will be less +than 4 mln dlrs, and possibly significantly less. + The major terms of the settlement agreement, applicable to +Fidata and FTCNY, provide for the release by Fidata of its +claims to 1.125 mln dlrs held by the ESM estate, and the +further payment of 8.425 mln dlrs for distribution to the +public body plaintiffs and Home State Savings Bank. + Fidata said it expects to recover along with its subsidiary +at least half of the sums to be paid under the terms of the +agreement, and potentially amounts substantially in excess of +that. + Reuter + + + +30-MAR-1987 14:23:25.56 + +usa + + + + + +F +f2194reute +w f BC-LOUISVILLE-GAS<LOU>-T 03-30 0084 + +LOUISVILLE GAS<LOU> TO ASK PROTECTIVE MEASURES + LOUISVILLE, KY., March 30 - Louisville Gas and Electric Co +said it will ask stockholders at its May 12 annual meeting to +approve several anti-takeover proposals. + It said the measures include staggered terms for directors +and a fair price provision that would require a potential +purchaser to make the same offer to all stockholders. + Louisville Gas said the amendments are not in response to +any specific effort to obtain control of the company. + Reuter + + + +30-MAR-1987 14:23:31.58 + +usa + + + + + +F +f2195reute +h f BC-TRACOR-<TRR>-UNIT-WIN 03-30 0064 + +TRACOR <TRR> UNIT WINS NAVY CONTRACT + AUSTIN, March 30 - Tracor Inc said its Tracor Applied +Sciences unit was awarded a 1.9 mln dlr contract by the U.S. +Navy's Naval Underwater Systems Center. + Under the contract, Tracor said the unit will provide +analytical, experimental, engineering and technical services to +the Navy's Surface Ships Antisubmarine Warefare Development +Program. + Reuter + + + +30-MAR-1987 14:23:38.33 + +usa + + + + + +F +f2196reute +r f BC-CAMPBELL-SOUP-<CPB>-T 03-30 0056 + +CAMPBELL SOUP <CPB> TO SELL PLANT IN DELAWARE + CAMDEN, N.J., March 30 - Campbell Soup co said it will sell +its W.L. Wheatley ingredients plant in Clayton, Del., as a +going operation. + It said it will continue to operate the plant until a buyer +is found. The sale is aimed at improving Campbell's return on +assets, the company said. + Reuter + + + +30-MAR-1987 14:28:03.38 + +usaindia + + + + + +F +f2207reute +h f BC-VIDEO-DISPLAY-<VIDE> 03-30 0065 + +VIDEO DISPLAY <VIDE> IN INDIAN JOINT VENTURE + STONE MOUNTAIN, Ga., March 30 - Video Display Corp said it +signed agreements with <Glowtronics <Ltd> to jointly build a +manufacturing plant in the state of Karnatake, India. + Video Display said the plant, in which it will own a 40 pct +equity interest, will make cathodes, filament heatrers and +electron gun assembles for television sets. + Reuter + + + +30-MAR-1987 14:28:16.03 +acq + + + + + + +F +f2208reute +f f BC-TAFT 03-30 0013 + +******BASS GROUP SAYS IT HAS HAD TALKS ON SEEKING CONTROL OF TAFT BROADCASTING +Blah blah blah. + + + + + +30-MAR-1987 14:29:14.28 +crude +usa + + + + + +Y +f2209reute +u f BC-REFINE- 03-30 0103 + +LOWER REFINERY OPERATIONS SEEN PRODUCING PROFITS + By BERNICE NAPACH, Reuters + SAN ANTONIO, TEXAS, March 30 - U.S. refiners will have to +reduce operations if they want to be profitable this year, said +industry officials attending the National Petroleum Refiners +Association meeting here. + "If the refining sector can discipline itself to refine +about 12 mln barrels of crude oil a day, we have a chance to +pull down inventories to acceptable levels by the second +quarter, said Archie Dunham, executive vice president of +petroluem products at Conoco Inc + "If not, the industry will have a tough 1987," he added. + Last week's American Petroleum Institute report said that +U.S. refining capacity rose three pct to 78.7 pct of capacity, +with crude oil runs at 12.2 mln barrels per day for the week +ended March 20. + The API said that with the higher crude oil runs, +distillate and gasoline inventories were sharply above year-ago +levels. Gasoline stocks were at 245.6 mln barrels, some 17.2 +mln barrels above year-ago levels. Distillate stocks, at 108.7 +mln barrels, are 10.9 mln barrels above last year's level, the +API said. + Henry Rosenberg, chairman of Crown Central Petroleum Corp +<CNP> told Reuters that unless refining and marketing return to +profitability, oil companies will have to rely on downstream +operations to produce an acceptable level of earnings. + "The jump in refining capacity is a concern if it +continues," said Kenneth Buckler, executive vice president of +refining and marketing at <Total Petroleum Co>, a U.S. +subsidiary of Cie Francaise Des Petroles of France. + Refineries should operate near 75 pct of capacity given +the current level of demand but the operating level should +increase as gasoline demand picks up in the next quarter, +Buckler said. + Dunham said the potential operable capacity of U.S. +refineries should also be cut about 500,000 barrels of crude +per day. "I expect to see the shutdown of more small refineries +over the next five years," he said, adding that these +facilities refine between 10,000 and 30,000 barrels of crude +oil per day. The API said U.S. operations have the capacity to +refine 15.6 mln bpd of crude. + Reuter + + + +30-MAR-1987 14:29:24.83 + +usa + + + + + +F +f2210reute +r f BC-NYNEX 03-30 0103 + +NYNEX <NYN> UNIT FILES 500 MLN DLR DEBT OFFERING + WASHINGTON, March 30 - New York Telephone Co, a subsidiary +of NYNEX Corp, filed with the Securities and Exchange +Commission for a shelf offering of up to 500 mln dlrs of debt +securities on terms to be determined at the time of the sale. + Proceeds from the offering, which is in addition to 50 mln +dlrs of debt securities already registered with the SEC but +unsold, will be used to refinance outstanding long-term debt, +to repay short-term debt and for other general corporate +purposes, the company said. + The company did not name an underwriter for the sale. + Reuter + + + +30-MAR-1987 14:29:34.81 + +usa + + + + + +F +f2212reute +d f BC-HALIFAX-ENGINEERING-< 03-30 0101 + +HALIFAX ENGINEERING <HX> GETS CONTRACTS + ALEXANDRIA, Va., March 30 - Halifax Engineering Inc said it +has received a fixed-price contract woirth 6,700,000 dlrs for +one year, plus two option years, to provide security services +for the U.S. Embassy in Tegucigalpa. + The company said it has also received a three-year U.S. +Army contract, including two option years, for +telecommunications installation support. The contract is worth +a total of 7,500,000 dlrs, it said. + Halifax said its backlog as of tomorrow, the end of its +fiscal year, will be about 53 mln dlrs, up from 27 mln dlrs a +year before. + Reuter + + + +30-MAR-1987 14:29:58.53 + +usasweden + + + + + +F +f2213reute +d f BC-<ELECTROLUX-AB>-UNIT 03-30 0095 + +<ELECTROLUX AB> UNIT TO BUILD WAREHOUSE + ASHEVILLE, N.C., March 30 - The North Carolina Department +of Commerce said Electrolux AB of Sweden's White Consolidated +Industries subsidiary will locate a new 15 mln dlr 352,000 +square foot national appliance parts distribution center at +Asheville, N.C. + It said the center will handle parts for Frigidaire, +Tappan, Kelvinator, Gibson, Vesta and White-Westinghouse +product lines. Each now has a separate distribution center. + The department said construction will start immediately and +should be finished in late 1987. + Reuter + + + +30-MAR-1987 14:30:15.88 + +ukfrance + + + + + +RM +f2215reute +u f BC-SALOMON-SA-EURO-CP/CR 03-30 0106 + +SALOMON SA EURO-CP/CREDIT TERMS DETAILED + LONDON, March 30 - A seven-year credit facility for Salomon +SA, the French ski bindings and boots maker, will have a +facility fee of 7.5 basis point, banking sources said. + The financing involves a 75 mln dlr euro-commercial paper +program which will be supported by a 75 mln dlr committed +syndicated revolving credit. Morgan Guaranty Ltd is the +arranger. + Drawings on the revolving credit will be at a margin of 10 +basis points over the London Interbank Offered Rate (LIBOR). +Banks are being invited to join at 7.5 mln dlrs for 10 basis +points and at five mln dlrs for eight basis points. + Reuter + + + +30-MAR-1987 14:32:12.01 +grainwheatcornoilseedsoybean +usa + + + + + +C G +f2221reute +f f BC-export-inspections 03-30 0015 + +******U.S. EXPORT INSPECTIONS, IN THOUS BUSHELS SOYBEANS 17,683 WHEAT 20,717 CORN 36,581 +Blah blah blah. + + + + + +30-MAR-1987 14:32:29.52 + +usa + + +cbtnyce + + +F RM +f2222reute +u f BC-REGULATORS-TO-CONSIDE 03-30 0112 + +REGULATORS TO CONSIDER CBT EVENING SESSION + WASHINGTON, March 30 - The Commodity Futures Trading +Commission, CFTC, said that on April 15 it will consider the +Chicago Board of Trade's proposal to establish night trading. + The Chicago exchange hopes to begin night trading at the +end of the month. The proposed trading session -- which would +be the first in the United States -- would extend from 1700 to +2100 local time (2300 to 0300 GMT). + CFTC also said that on April 22 it will consider the +Philadelphia Board of Trade's application to trade futures on +the Australian dollar and the New York Cotton Exchange's +application to trade the five-year U.S. Treasury Index. + Reuter + + + +30-MAR-1987 14:35:33.56 + +west-germanyjapan + + + + + +F +f2239reute +r f BC-SONY-INCREASING-PRODU 03-30 0099 + +SONY INCREASING PRODUCTION ABROAD + BONN, March 30 - Sony Corp <SNE.T> will increase production +abroad to overcome falling profits caused by the yen's rise +against the dollar, managing board chairman Akio Morita told +the West German newspaper Die Welt. + He was quoted as saying that Sony, whose latest profit +figures had been affected strongly by dollar fluctuations, +would increase production in the U.S. And Europe. + Several production facilities were being built, he added. +"At the same time we are also investing capital in order to +modernise our locations and raise our productivity." + Morita said that to overcome the same currency problems, +Japan needs to restructure its economy in order to live less +from exports and more from domestic demand. + He said U.S. And European companies had made the mistake of +not investing enough in the future, which was why they had lost +their lead in consumer electronics. + "They may spend a lot of money on research and development," +he said. "But planning and marketing are very important sectors +in developing a marketable product." + "If they don't spend money on these, they can't build up new +business lines." + Speaking of difficulties foreign firms experience in +penetrating the Japanese market, Morita said "Naturally, I have +to admit that there are still many obstacles in Japan." + On the other hand, many foreign firms were too interested +in short-term success, he said. + "If, therefore, a company comes to Japan and wants to make a +profit at once on this market, it is not so simple." + "These people then complain, while the successful firms keep +their mouths shut," Morita said. + Reuter + + + +30-MAR-1987 14:36:52.17 +earn +usa + + + + + +F +f2244reute +u f BC-NEWMONT-MINING-<NEM> 03-30 0084 + +NEWMONT MINING <NEM> PLANS 2-FOR-1 STOCK SPLIT + NEW YORK, March 30 - Newmont Mining Corp's board has +proposed a two-for-one stock split subject to shareholder +approval of an increase to 120 mln from 60 mln in authorized +common shares, the proxy for the company's annual meeting said. + If holdings voting at the May six meeting in Wilmington, +Del., approve the increase in authorized shares the split will +be paid in the form of a stock dividend on June 10 to holders +of record May 20, the proxy said. + Newmont said it will also ask shareholders to approve +amendments to its certificate of incorporation limiting certain +liabilities of its directors. + Reuter + + + +30-MAR-1987 14:38:10.07 + +mexico + + + + + +F +f2254reute +u f BC-MEXICO-FUND-<MFX>-TO 03-30 0086 + +MEXICO FUND <MFX> TO BUY BACK TWO MLN SHARES + MEXICO CITY, March 30 - The Mexico Fund Inc said its board +authorized an offer to purchase two mln shares, or about 10.2 +pct, of its common stock at 6.75 dlrs a share cash. + The fund, at a special board meeting, said the offer is not +conditioned on any minimum number of shares being tendered. + The fund has issued and outstanding 19,513,200 shares of +common stock, it said. As of March 26, 1987, the fund said the +net asset value of its shares was 8.13 dlrs. + The fund said it intends to commence the offer by a mailing +to its shareholders as soon as possible. + It said it purchased shares of its stock in open market +transactions prior to the proposed cash tender and intends to +purchase additional shares at prevailing market prices after +completion of the offer. + The fund's last price per share on the New York Stock +Exchange at the halt was 5-3/4. + Reuter + + + +30-MAR-1987 14:42:08.80 + +usa + + + + + +F +f2265reute +d f BC-QUARTZ-ENGINEERING-<Q 03-30 0046 + +QUARTZ ENGINEERING <QRTZ> GETS SIEMENS ORDER + TEMPE, Ariz., March 30 - Quartz Engineering and Materials +Inc said it has received a 500,000 dlr order from <Siemens AG> +of West Germany for its ATMOSCAN automated environmentally +controlled semiconductor wafer processing system. + Reuter + + + +30-MAR-1987 14:43:54.75 +earn +usa + + + + + +F +f2273reute +d f BC-DENPAC-CORP-<DNPC>-YE 03-30 0043 + +DENPAC CORP <DNPC> YEAR LOSS + HACKENSACK, N.J., March 30 - + Shr loss one ct vs loss one ct + Net loss 483,518 vs loss 220,582 + Sales 381,841 vs 400,518 + NOTE: 1985 net includes 196,868 dlr gain from forgiveness o +accrued interest due to affiliates. + Reuter + + + +30-MAR-1987 14:44:06.64 +earn +usa + + + + + +F +f2275reute +d f BC-<AIN-LEASING-CORP>-3R 03-30 0049 + +<AIN LEASING CORP> 3RD QTR JAN 31 LOSS + GREAT NECK, N.Y., March 30 - + Shr loss six cts vs profit 22 cts + Net loss 133,119 vs profit 496,391 + Revs 136,918 vs 737,917 + Nine mths + Shr loss 21 cts vs profit 15 cts + Net loss 478,991 vs profit 340,210 + Revs 324,011 vs 841,908 + Reuter + + + +30-MAR-1987 14:47:20.29 + +usa + + + + + +F +f2282reute +r f BC-WARNER-LAMBERT-<WLA> 03-30 0097 + +WARNER-LAMBERT <WLA> WINS PACKAGING SUIT + MORRIS PLAINS, N.J., March 30 - Warner-Lambert Co said a +federal court judgment resulted in <My-K Laboratories Inc> +agreeing to discontinue the sale of cough syrup and a +children's allergy elixir because it imitates Warner-Lambert +packaging. + Warner-Lambert said the final consent judgment was entered +in the U.S. District Court of the Northern District of +Illinois. It also said the packaging in question imitated its +own packaging of Benylin and Benadryl products. + My-K agreed to adopt different packaging, Warner-Lambert +said. + Reuter + + + +30-MAR-1987 14:47:40.85 + +usa + + + + + +F +f2284reute +d f BC-HARTMARX-<HMX>-UNIT-P 03-30 0094 + +HARTMARX <HMX> UNIT PRESIDENT RESIGNS + CHICAGO, March 30 - Hartmarx Corp said Geoffrey Bloom +resigned as president and chief executive officer of its +Jaymar-Ruby Inc subsidiary to accept the position of president +and chief operating officer of Wolverine World Wide Inc <WWW>. + It said Elbert Hand, president and chief operating officer +of Hartmarx, and president and chief executive officer of the +Hartmarx Men's Apparel Group, was named chief executive officer +of Jaymar-Ruby Inc. Burton Ruby, son of the Jaymar-Ruby +founder, remains as chairman. + + Reuter + + + +30-MAR-1987 14:48:20.82 + +usa + + + + + +A +f2286reute +u f BC-SENATE-BILL-WOULD-ALL 03-30 0102 + +SENATE BILL WOULD ALLOW FARM LOAN WRITE-DOWNS + WASHINGTON, March 30 - The U.S. Senate has approved a +measure that would allow an estimated 4,200 agricultural banks +to write off loan losses over ten years. + The measure, offered by Sen. Alan Dixon (D-Ill.), was +attached to a bill to recapitalize the Federal Savings and Loan +Insurance Corp that the Senate approved March 27. + Dixon's amendment would permit agricultural banks -- banks +with assets of 100 mln dlrs or less and at least 25 pct of +total loans in farm loans -- to write down over ten years +agricultural loan losses incurred between 1984 and 1992. + Reuter + + + +30-MAR-1987 14:49:29.53 + +usa + + + + + +C G +f2291reute +r f BC-U.S.-SENATE-BUDGET-CH 03-30 0131 + +U.S. SENATE BUDGET CHIEF EYES FARM POLICY CHANGE + WASHINGTON, March 30 - U.S. Senate Budget Committee +Chairman Lawton Chiles' (D-Fla.) fiscal 1988 budget plan would +cut farm spending by about two billion dlrs, primarily by +making unspecified changes in price and income support +programs, Senate staff members said. + Chiles presented his budget blueprint late last week and +said he would like to begin voting on it this week. + Senate Republican staff members said Chiles was +recommending that policy changes be adopted for 1988 crops. + While savings from the changes would accrue mainly in +fiscal 1989, Chiles said his income and price support proposals +would trim about two billion dlrs from advance deficiency +payments, most of which would be made in the spring of next +year. + It was not clear how the Senate Budget panel head would +achieve the savings in Commodity Credit Corp outlays. Aides to +Chiles would not comment on how the CCC savings would be made. + Recently the Congressional Budget Office released a report +listing possible price and income support program savings. + The options included lowering target prices, increasing +unpaid acreage reduction programs, targeting income support +payments to specific groups of producers, limiting the use of +generic commodity certificates, raising loan rates and +"decoupling" income support payments from production decisions. + Chiles proposed saving about 100 mln dlrs by freezing the +U.S. Agriculture Department's discretionary spending functions +which include research and credit programs, Senate staff said. + The Florida senator's plan also would provide 30 mln dlrs +for organic farming research and 20 mln dlrs for homeless aid. + Reuter + + + +30-MAR-1987 14:54:12.48 + +usasouth-africa + + + + + +F +f2301reute +u f BC-newmont-mining-<nem> 03-30 0112 + +NEWMONT MINING <NEM> SEEKS SOUTH AFRICAN SALE + NEW YORK, March 10 - Newmont Mining Corp will seek +favorable terms for sale of its South African investments, the +proxy statement for its annual meeting said. + Recommending that shareholders vote against a proposal +calling expeditious withdrawal from South Africa, the proxy +said "a quick sale could be akin to abandonment" because of the +depressed state of metal mining stocks and exchange rates on +capital withdrawals from South Africa. + The proxy said the company gave close consideration to +alternatives to the continued holdings of four existing South +African metal mining investments during the past year. + Pointing out "a measurable number of investors incline to +support" resolutions calling for South African divestment as +part of their effort to avoid pressure to sell a given stock, +the company said "this largely unspoken agenda of many +supporters of disinvestment does receive attention by the +corporation." + Because of this, Newmont Mining said it "is prepared to +consider, and will seek, favorable terms for sale of its South +African investments," but asked stockholders to reject the +resolution calling for withdrawal and leave the matter to the +continuing judgment of management. + Reuter + + + +30-MAR-1987 15:00:51.14 +crude +venezuela + + + + + +Y +f2311reute +u f BC-VENEZ- 03-30 0109 + +VENEZUELA WANTS TO BOOST ITS REFINING CAPACITY + SAN ANTONIO, TEXAS, March 30 - Venezuela's state oil +company Petroleos de Venezuela S.A. wants to raise its +worldwide refining capacity by 150,000 barrels of per day, a +company official attending the National Petroleum Refiners +Association meeting here said. + He declined to be identified but said PdVSA has the +capacity to refine about 650,000 bpd of crude oil from refining +centers +in Venezuela, Sweden, West Germany, Belgium, and the United +States. The company recently purchased a 50 pct stake in the +Corpus Christi, Texas refinery of Champlin Petroleum Co, a +subsidiary of Union Pacific Corp <UNP>. + Earlier it bought a similar stake in the Lake Charles, La +refinery owned by Citgo Petroleum Corp, a unit of Southland +Corp <SLC>. + According to the official, Venezuela is searching +worldwide for the additional refining capacity but he did not +mention where the company was looking. + Refineries abroad, he said, guarantee a refining outlet for +Venezuelan crude oil while ensuring stability of supply to +refiners. + He said Venezuela currently produces about 1.4 mln bpd of +crude oil, which is in line with its 1.495 bpd OPEC ceiling. + Reuter + + + +30-MAR-1987 15:02:17.84 + +usa + + + + + +F +f2316reute +r f BC-AUDI-OFFERS-CASH-INCE 03-30 0132 + +AUDI OFFERS CASH INCENTIVE TO CURRENT OWNERS + TROY, MICH., March 30 - Audi of America Inc said it +introduced the "Audi Private Purchase Plan" in which it will +offer 5,000 dlr purchase certificates exclusively to current +owners of 1984-86 Audi 5000 vehicles. + It said owners must apply the certificates toward purchase +or lease of any new 1987 Audi 5000 series vehicle. + The program will run between April 1 and June 30, and more +than 150,000 certificates will be mailed. + A company spokesman said eligible owners need not trade in +their old cars to take advantage of the offer. + He also said the scheme was not prompted by the fact that +Audi had to recall thousands of its cars earlier this year to +correct a possible defect that caused some of the cars to +accelerate suddenly. + Reuter + + + +30-MAR-1987 15:05:58.06 +earn +usa + + + + + +F +f2335reute +r f BC-PRIMEBANK-<PMBK>-SETS 03-30 0037 + +PRIMEBANK <PMBK> SETS 10 PCT STOCK DIVIDEND + GRAND RAPIDS, Mich., March 30 - PrimeBank Federal Savings +Bank said its board declared a 10 pct stock dividend to be +distributed about April 15 to holders or record March 31. + Reuter + + + +30-MAR-1987 15:06:30.04 +earn +usa + + + + + +F +f2336reute +d f BC-AMERICAN-LOCKER-GROUP 03-30 0074 + +AMERICAN LOCKER GROUP INC <ALGI> 4TH QTR NET + JAMESTOWN, N.Y., March 30 - + Shr profit 23 cts vs loss six cts + Net profit 319,564 vs loss 84,203 + Sales 6,419,230 vs 5,583,560 + Year + Shr profit 1.11 dlrs vs profit 43 cts + Net profit 1,582,125 vs profit 654,083 + Sales 26.2 mln vs 22.6 mln + NOTE: Full year 1985 includes gains of two cts per share +from discontinued operations and four cts per share from +disposal of assets. + Reuter + + + +30-MAR-1987 15:15:20.33 +acq +usa + + + + + +F +f2351reute +b f BC-TAFT 03-30 0087 + +BASS GROUP SAYS IT HAS HAD TALKS ON TAFT <TFB> + WASHINGTON, March 30 - A group led by members of the +wealthy Bass family of Fort Worth, Texas, which holds a 24.9 +pct stake in Taft Broadcasting Co, said it has had talks about +taking part in a move to take control of the company. + In a filing with the Securities and Exchange Commission, +the group said it has had discussions with other Taft +stockholders and some company managers and directors +"concerning participation in a group to acquire control" of the +company. + The Bass group, which did not identify any of the other +people with whom it said it has had talks, said it plans to +continue evaluating Taft and "will be involved in further +discussions relating to the future control and direction" of +the company. + The group, which holds 2,291,210 Taft common shares, said +its members may buy more shares of Taft common stock, or may +decide to sell some or all of its stake. + On Friday Taft said it would negotiate with a group led by +its vice chairman, Dudley Taft, and a Rhode Island investment +firm, which had offered 150 dlrs a share for the company. + The Dudley Taft group, Theta Corp, which also includes +Narragansett Capital Corp, a Providence, R.I., investment firm, +is seeking to take the company private in a leveraged buyout +valued at 1.38 billion dlrs. + Besides the Bass group, another major Taft shareholder, +Cincinnati, Ohio, financier Carl Lindner, has also said he has +had talks about increasing his stake in the company, taking +part in a takeover effort, or launching one himself. + Lindner controls 1,489,298 shares of Taft common stock, or +16.2 pct of the total. + Reuter + + + +30-MAR-1987 15:16:34.99 +iron-steel +usa + + + + + +MQ FQ +f2355reute +u f BC-us-steel-production 03-30 0077 + +U.S. STEEL PRODUCTION ROSE 1.3 PCT IN WEEK + New York, March 30 - Steel production rose +1.3 pct to 1,696,000 short tons in the +week ended March 28 from 1,675,000 short +tons, the American Iron and Steel Institute +reported + Production so far this year was 18,810,000 tons adjusted off +14.6 pct from 22,016,000 tons +produced by the nations mills a year ago. + Utilization for the week of March 28 was 78.7 pct and for +the week of March 21 was was 77.8 pct. + Reuter + + + +30-MAR-1987 15:17:57.62 +earn +usa + + + + + +F +f2366reute +r f BC-NORTH-AMERICAN-GROUP 03-30 0070 + +NORTH AMERICAN GROUP <NAMG> 4TH QTR OPER LOSS + CHICAGO, March 30 - + Oper shr loss 12 cts vs loss 10 cts + Oper net loss 474,270 vs loss 369,848 + Revs 202,500 vs 111,210 + Avg shrs 3,904,373 vs 3,495,579 + Year + Oper shr loss 28 cts vs loss 46 cts + Oper net loss 1,069,550 vs loss 893,612 + Revs 408,031 vs 438,933 + Avg shrs 3,785,607 vs 1,944,627 + NOTE: Full name is North American Group Ltd + Earnings exclude losses on reorganization expenses of +33,453 dlrs, or one ct a share vs 59,520 dlrs, or two cts a sh +are in the quarter and losses of 237,859 dlrs, or six cts a +share vs 413,444 dlrs, or 21 cts a share for the year + Earnings exclude gains on discontinued operations of +147,671, or four cts a share in the 1985 quarter and gains of +760,603 dlrs, or 20 cts a share vs 520,200 dlrs, or 27 cts a +share for the year + Reuter + + + +30-MAR-1987 15:18:39.33 + +usa + + + + + +F +f2371reute +u f BC-PAY-'N-PAK-<PNP>-TO-E 03-30 0079 + +PAY 'N PAK <PNP> TO EXPLORE ITS ALTERNATIVES + KENT, Wash., March 30 - Pay 'N Pak Stores Inc said it +intends to explore all alternatives for the purpose of +maximizing its value to stockholders. + The company said it also retained Salomon Brothers Inc as +its financial advisor to assist it in this regard. + Last week investor Paul Bilzerian reported that he holds a +7.2 pct stake in Pay 'N Pak and is considering seeking control +of the retail building materials firm. + In a filing with the Securities and Exchange Commission +Bilzerian said he and a Tampa, Fla., investment firm he +controls called Bicoastal Financial Corp, may acquire +additional Pay 'N Pak shares, or they may seek to acquire one +or more positions on the company's board. + He also said in the filing that he may attempt to obtain a +controlling interest through a tender offer or otherwise. + Reuter + + + +30-MAR-1987 15:20:25.66 + +usa + + + + + +RM A +f2377reute +r f BC-SOCIETY-FOR-SAVINGS-< 03-30 0111 + +SOCIETY FOR SAVINGS <SOCS> TO OFFER NOTES + NEW YORK, March 30 - Society for Savings said it will offer +up to 100 mln dlrs of medium-term notes with maturites of one +to five years through Goldman, Sachs and Co and Shearson Lehman +Brothers Inc. + The notes will be supported by an irrevocable letter of +credit by the Federal Home Loan Bank of Boston. Each note will +bear interest at a fixed-rate or variable rate formula +established at the time of issuance, Society for Savings said. + Bankers Trust Co will act as fiscal and paying agent. +Non-redeemable to maturity, the notes will be issued only in +registered form and in minimum denomiations of 100,000 dlrs. + Reuter + + + +30-MAR-1987 15:20:32.84 +earn +usa + + + + + +F +f2378reute +r f BC-<OXOCO-INC>-YEAR-LOSS 03-30 0072 + +<OXOCO INC> YEAR LOSS + HOUSTON, March 30 - + Oper shr loss 6.68 dlrs vs loss 9.95 dlrs + Oper net loss 53.9 mln vs loss 69.8 mln + Revs 16.5 mln vs 33.2 mln + Avg shrs 8,329,492 vs 7,271,668 + NOTE: 1986 excludes loss 12.9 mln for discontinued +compressor operations vs loss 14.9 mln year prior. + 1986 excludes gain of 98.7 mln for extinguishment of debt +from company's chapter 11 filing and subsequent reorganization. + Reuter + + + +30-MAR-1987 15:20:48.00 +earn +usa + + + + + +F +f2380reute +d f BC-TEECO-PROPERTIES-L.P. 03-30 0094 + +TEECO PROPERTIES L.P. OPER INCOME DOWN + NEW YORK, March 30 - <Teeco Properties L.P.> said the +partnership recorded income from operations for 1986 of 140,000 +dlrs, or two cts a unit. + The partnerhsip said this compared to 1985 figures of +660,000 dlrs, or 10 cts a unit. + Results of operations between both years is not comparable +since the partnership's principle objective is to sell or +dispose of its assets and distribute proceeds to unit holders, +according to the partnership. + It said the number of units outstanding for both years is +6,479,516. + + Reuter + + + +30-MAR-1987 15:20:52.65 +earn +usa + + + + + +F +f2381reute +d f BC-BROUGHER-INSURANCE-GR 03-30 0042 + +BROUGHER INSURANCE GROUP INC<BIGI> 4TH QTR LOSS + GREENWOOD, Ind., March 30 - + Shr loss nine cts vs profit 20 cts + Net loss 257,157 vs profit 414,890 + Year + Shr profit 54 cts vs profit 1.05 dlrs + Net profit 1,295,104 vs profit 2,140,673 + Reuter + + + +30-MAR-1987 15:22:33.92 + +usa + + + + + +F +f2385reute +d f AM-COURT-CARS 03-30 0099 + +HIGH COURT DECLINES TO REVIEW AIR BAG RULE + WASHINGTON, March 30 - The Supreme Court declined to review +a federal regulation requiring automobile manufacturers to +phase in automatic seat belts or air bags for new cars sold in +the United States. + The Department of Transportation (DOT) rule required that +the safety devices be installed, for the first time, on 10 pct +of this year's model cars. All new cars must have the devices +by the 1990-model year. + The regulation, however, can be rescinded if states with +two-thirds of the U.S. population adopt mandatory seat belt-use +laws by 1989. + Reuter + + + +30-MAR-1987 15:24:34.95 + +uk + + + + + +A +f2395reute +w f BC-TRADE-BODY-SETS-NEW-R 03-30 0105 + +TRADE BODY SETS NEW RULES FOR EURODLR MANAGERS + London, March 30 - The International Primary Market Makers +Association, a trade organisation, said its board last week +adopted new rules recommending lead managers of eurodollar bond +issues make a market in that security for 12 months. + Currently, while there is an implied obligation on the part +of firms to make markets in issues they underwrite, there is no +formal obligation to do so. + Christopher Sibson, secretary general of IPMA, in +explaining why the recommendation was adopted, said "It is aimed +at the problem of the lead manager who does a deal and +disappears." + Sibson said the organization cannot force its members to +adhere to the rule. "We're under no illusions about the legal +binding force of these recommendations," he said. + Lead managers have occasionally abandoned efforts to +support an unprofitable issue just a short while after it has +been offered, leaving investors and smaller firms with no one +to buy it back from them. + Most recently, when prices of perpetual floating rates +notes (FRNs) suddenly plunged, most market makers abandoned the +securities altogether, leaving investors stuck with about 17 +billion dlrs worth of unmarketable securities on their books. + Sibson noted that the recommendation adopted by the board +only applies to fixed-rate dollar issues and would not have +helped the floating rate sector out of its current crisis. + Among other measures, the IPMA also decided that the +criteria for membership should be tightened to exclude some of +the smaller firms. + Under the new rules, a firm must be the book running lead +manager during the two preceding years of 12 internationally +distributed debt issues denominated in U.S. Dlrs or in one of +eight other major currencies. + The former requirement called for three lead-managed +issues. Sibson said he expects the tighter entrance +requirements to pare 3he current list of 67 members down by six +to 10 members. + Smaller firms have criticized IPMA's efforts to restrict +membership to the larger firms, saying it is anti-competitive +and that it reinforces the big firms' already large market +share. + "Belonging to IPMA carries a certain amount of prestige with +borrowers," said a dealer at a small foreign bank. "The borrower +says to himself, "Well I can travel economy or I can travel +first class,'" he said. + Reuter + + + +30-MAR-1987 15:26:11.53 +iron-steel +usa + + + + + +F +f2401reute +r f BC-CSC-INDUSTRIES-UNIT-T 03-30 0091 + +CSC INDUSTRIES UNIT TO INCREASE PRICES + WARREN, Ohio, March 30 - Copperweld Steel Co <CPSL>, a +subsidiary of CSC Industries Inc., said it will increase from +market price levels its bar, semi-finished and leaded products +effective July One. + Hot rolled and cold finished bar wil be increase 25 dlrs +per net ton, while semi-finished products will be increased 15 +dlrs per net ton, the company said. + Anticipated higher energy and raw material costs, combined +with current market trends, were cited by the company as +reasons for the increases. + Reuter + + + +30-MAR-1987 15:26:25.70 +grainwheat +usa + + + + + +C G +f2402reute +u f BC-USDA-TO-UPDATE-WINTER 03-30 0098 + +USDA TO UPDATE WINTER WHEAT ACREAGE TOMORROW + WASHINGTON, March 30 - The U.S. Agriculture Department said +it will update its estimate of winter wheat seeded acreage in +the prospective planting report, scheduled for release at 1500 +est (2100 gmt) tomorrow, March 31. + The original estimate of seedings of winter wheat was +published in January. + It said the new survey is possible because of the new +integrated nationwide survey program that uses probability +sampling procedures that combine information from farmers +operating in selected areas and farmers identified on special +lists. + Reuter + + + +30-MAR-1987 15:27:02.85 +acq +usa + + + + + +F +f2404reute +b f BC-SANTA-FE-<SFX>-AWARE 03-30 0121 + +SANTA FE <SFX> AWARE OF HENLEY <HENG> STAKE + CHICAGO, March 30 - Santa Fe Southern Pacific Corp said it +has discussed with Henley Group that company's almost five pct +stake and was told the holdings are for investment purposes. + "We have confirmed with the Henley Group that they own +approximately 7.9 mln shares of Santa Fe Southern Pacific +common stock. They have informed me that they like our company +and purchased the stock last year for investment purposes," +Santa Fe chairman John Schmidt said in a statement. + Henley late Friday filed a 10-K report with the Securities +and Exchange Commission concerning the Santa Fe stake. + Earlier Santa Fe's stock was up 4-7/8 to 41 before slipping +to be up 1-7/8 at 38. + Reuter + + + +30-MAR-1987 15:29:30.70 + +usa + + + + + +F +f2406reute +r f BC-OXOCO-CONCLUDES-PRIVA 03-30 0097 + +OXOCO CONCLUDES PRIVATE SALE OF NEW COMMON + HOUSTON, March 30 - Oxoco Inc said it concluded the private +placement of 3,906,250 shares of its new common stock at an +average purchase price of 1.28 dlrs per share for a cash +payment of five mln dlrs. + Oxoco said the sale was to a group of venture capital +investors led by Hambrecht and Quist of San Francisco. + It said the venture capitalists now own 71.6 pct of the +outstanding stock of the company. + In addition, Andrew Loomis and Michael McGovern were +elected chairman and co-chairman, respectively, of the company, +it said. + Reuter + + + +30-MAR-1987 15:29:47.66 +sugar +usa + + + + + +C T +f2407reute +b f BC-sugar-imports 03-30 0122 + +U.S. SUGAR IMPORTS DOWN IN LATEST WEEK - USDA + WASHINGTON, March 30 - Sugar imports subject to the U.S. +sugar import quota during the week ended March 6 totaled 25,192 +short tons versus 29,043 tons the previous week, the +Agriculture Department said. + Cumulative imports now total 130,804 tons, it said. + The sugar import quota for the 1987 quota year +(January-December) has been set at 1,001,430 short tons +compared with 1,850,000 tons in the 1986 quota year, which was +extended three months to December 31. + The department said the Customs Service reported that +weekly and cumulative imports are reported on an actual weight +basis and when final polarizations are received, cumulative +import data are adjusted accordingly. + Reuter + + + +30-MAR-1987 15:39:21.47 + +usa + + + + + +F +f2427reute +u f BC-TRANSAMERICAN-FILES-A 03-30 0092 + +TRANSAMERICAN FILES AMENDED REORGANIZATION PLAN + HOUSTON, March 30 - TransAmerican Natural Gas Corp, which +has been operating under Chapter 11 bankruptcy protection since +January 1983, said it filed an amended and restated negotiated +plan of reorganization. + A hearing on the adequacy of the disclosure statement is +scheduled for April 29 in the U.S. Bankruptcy Court for the +Southern District of Texas. + Basic terms of the amended and restated negotiated plan +have not changed from the original plan filed last October, the +company said. + The amended filing reflects adding ancillary documents to +the plan filed in October, it said. + Assuming the plan is found adequate on April 29, +TransAmerican would then seek acceptance from creditors which +is relatively assured since they participated in the +negotiations, the company said. + Liabilities in excess of one billion dlrs are being +reorganized under the amended plan which provides for full +debt-repayment to secured bank lenders. + Unsecured creditors would receive either 100 pct repayment, +secured by liens on assets, or one-time lump sum payments of 25 +to 35 cts on the dollar, in cash, shortly after confirmation of +the plan by the court. + TransAmerican is vigorously resisting efforts by Coastal +Corp <CGP> to acquire its assets through a subsequent plan of +liquidation. + The spokesman said the company is confident its plan will +be confirmed and is optimistic that it will emerge from Chapter +11 as early ninety days after the April 29 confirmation. + A Coastal spokesman said it will file a plan in April with +the court and will request the court to review its plan. + On March 17, the company said that as a creditor, which is +owed 625,000 dlrs, it has a right to file its own plan which +will better serve the other creditors in a shorter time. + A TransAmerican spokesman said the net worth of Coastal's +offer is less than 25 pct of the fair market value of +Transamerican's assets which are in excess of one billion dlrs. + + Reuter + + + +30-MAR-1987 15:44:23.25 + +usa + + + + + +F +f2434reute +r f BC-TEXTRON-<TXT>-TO-REPA 03-30 0114 + +TEXTRON <TXT> TO REPAY DEBT THROUGH ASSET SALES + PROVIDENCE, R.I., March 30 - Texton Inc said it intends to +repay a substantial portion of the debt generated to acquire +Ex-Cell-O Corp last year through internally generated cash and +proceeds from the sale of assets. + Textron financed the acquisition by borrowing about one +billion dlrs under promissory notes, subsequently refinanced +through the sale of commercial paper and bank borrowings. + The large diversified conglomerate with operations ranging +from defense to consumer and financial services, said in its +annual report that it has not yet identified the units, other +than its Gorham division, it expects to sell. + Textron said it did expect to identify the units it intends +to sell during the next year. It said the sales are expected to +reduce income from continuing operations as the units' earnings +will exceed the interest on the debt retired with the proceeds +of the sales. + It also said it plans to "return to a more conservative +balance sheet ratio of debt-to-capital," through asset sales +and increasing cash flow from continuing operations. + It also said it will continue to examine "large acquisition +opportunities," while "pruning" operations no longer expected +to meet its strategic requirements. + Reuter + + + +30-MAR-1987 15:51:12.26 +earn +usa + + + + + +F +f2449reute +r f BC-TEMPLETON-ENERGY-INC 03-30 0064 + +TEMPLETON ENERGY INC <TMPL> 4TH QTR NET + HOUSTON, March 30 - + Shr profit four cts vs loss six cts + Net profit 967,000 vs loss 1,219,000 + Revs 10.1 mln vs 4.5 mln + Year + Shr profit three cts vs loss five cts + Net profit 688,000 vs 982,000 + Revs 24.6 mln vs 16.3 mln + NOTE: 1986 includes results of Louisiana Energy and +Development Corp acquired in November 1986. + Reuter + + + +30-MAR-1987 15:52:04.99 +earn +usa + + + + + +F +f2450reute +r f BC-AEL-INDUSTRIES-<AELNA 03-30 0063 + +AEL INDUSTRIES <AELNA> 4TH QTR FEB 27 NET + LANSDALE, Pa., March 30 - + Shr 66 cts vs 33 cts + Net 2,955,000 vs 1,563,000 + Revs 26.1 mln vs 23.9 mln + 12 mths + Shr 74 cts vs 1.01 dlrs + Net 3,321,000 vs 4,739,000 + Revs 108.4 mln vs 104.9 mln + NOTE: year 1987 includes charge of 818,000 dlrs, or 18 cts +per share, for sale of Elisra Electronic Systems Ltd. + Reuter + + + +30-MAR-1987 15:54:36.57 +acq +usa + + + + + +F +f2452reute +r f BC-AMOSKEAG-<AMKG>-TAKEO 03-30 0084 + +AMOSKEAG <AMKG> TAKEOVER BLOCKED BY COURT + MANCHESTER, N.H., March 30 - Amoskeag Bank Shares Inc said +the New Hampshire Supreme Court overturned its proposed +acquisition of Portsmouth Savings Bank in a three-two vote. + The acquisition had been opposed by some depositors, who +filed an action to block the takeover. + "We will respond to this news as soon as we have had an +opportunity to analyze the decision, and any and all options +available to us," chairman William Bushnell said in a +statement. + Reuter + + + +30-MAR-1987 15:55:50.23 +earn +usa + + + + + +F +f2454reute +d f BC-METROMAIL-<MTMA>-PRED 03-30 0117 + +METROMAIL <MTMA> PREDICTS FLAT EARNINGS + LINCOLN, Neb., March 30 - Metromail Corp said it expects +flat operating profits for its 1987 fiscal year ending May 31 +with last fiscal year's earnings from operations of 9,943,000 +dlrs, or 1.05 dlrs a share. + The company said the flat results will be due to higher +than normal expenditures during the fourth quarter for +expansion of its data processing capabilities. + Earlier, Metromail reported fiscal 1987 third quarter +earnings of 2.4 mln dlrs, or 25 cts a share, versus three mln +dlrs, or 32 cts a share, the prior third quarter, and nine +months net of 7.2 mln dlrs, or 76 cts a share, versus 7.8 mln +dlrs, or 82 cts a share the prior nine months. + Reuter + + + +30-MAR-1987 15:56:28.52 + +usa + + + + + +F +f2455reute +r f BC-APPLE-<AAPL>-EXPANDS 03-30 0088 + +APPLE <AAPL> EXPANDS NETWORK CAPABILITIES + CUPERTINO, Calif., March 30 - Apple Computer Inc said it +has extended the ability of the Apple MacIntosh personal +computer family to commmunicate over <Northern Telecom Ltd's> +Meridian SL-1 integrated services network. + The new capabilities include linking separate AppleTalk +networks, dial-up remote use of LaserWriter printers, one step +file transfer and conversion and Memorybank 485, a new 485 +megabyte storage subsystem for use with MacIntosh personal +computers, Apple said. + Reuter + + + +30-MAR-1987 15:58:33.75 +acq +usa + + + + + +F +f2457reute +u f BC-BALL-<BLL>-ENDS-TALKS 03-30 0056 + +BALL <BLL> ENDS TALKS WITH MONSANTO <MTC> + MUNCIE, IND., March 30 - Ball Corp said it was unable to +complete negotiations to acquire the plastic container business +of Monsanto Co. + It said the two companies had entered into exclusive +negotiations last October. + Neither company provided details on why the talks were +terminated. + Reuter + + + +30-MAR-1987 15:58:44.17 +oilseedrapeseed +japancanada + + + + + +C G +f2458reute +u f BC-JAPAN-BUYS-CANADIAN-R 03-30 0030 + +JAPAN BUYS CANADIAN RAPESEED + WINNIPEG, March 30 - Japanese crushers bought 2,000 tonnes +of Canadian rapeseed in export business overnight for May +shipment, trade sources said. + Reuter + + + +30-MAR-1987 15:59:18.08 + +usa + + + + + +F +f2459reute +u f BC-NEWMONT-MINING-<NEM> 03-30 0107 + +NEWMONT MINING <NEM> SETS HIGHER SPENDING IN 1987 + NEW YORK, March 30 - Newmont Mining Corp estimates its 1987 +capital spending at 137 mln dlrs, its annual report said. + A company spokesman said this figure excludes <Magma Copper +Co> and compares to spending of about 80 mln dlrs in 1986 +excluding the 45 mln dlrs spent on Magma operations. As +previously announced, Newmont is distributing 80 pct of Magma's +stock to its shareholders in the form of a dividend. + The report also said Newmont Mining increased its ownership +of Du Pont Co <DD> stock during 1986 to 5,970,141 shares at +year end from 5,250,376 shares a year earlier. + Newmont's annual report said the company held 2.5 pct of Du +Pont's stock at the end of 1986, up from 2.2 pct a year +earlier. + The report also said Newmont's proven oil reserves declined +to 7,970,000 barrels at the end of 1986 from 8,530,000 barrels +a year earlier and its natural gas reserves declined to 271.48 +billion cubic feet from 274.82 billion at the end of 1985. + Reuter + + + +30-MAR-1987 15:59:24.50 + +usa + + + + + +F +f2460reute +r f BC-3COM-CORP-<COMS>-INTR 03-30 0085 + +3COM CORP <COMS> INTRODUCES NEW WORKSTATION + SANTA CLARA, Calif., March 30 - 3Com Corp said it +introduced a new network workstation for business applications. + The product, called 3Station, is the first in a family of +network workstations, which will later include a Token Ring +version, the company said. + It said the 3Station is an IBM-compatible 80286-based +Ethernet product which can be integrated with personal +computers on a network. + The company also said it plans to begin shipments on May +15. + Reuter + + + +30-MAR-1987 16:00:03.76 + +usa + + + + + +A RM +f2462reute +r f BC-S/P-AFFIRMS-BANNER-<B 03-30 0110 + +S/P AFFIRMS BANNER <BNR>, LOWERS REXNORD <REX> + NEW YORK, March 30 - Standard and Poor's Corp said it +affirmed Banner Industries Inc's 135 mln dlrs of B-minus +subordinated debt following its purchase of Rexnord Inc. + Rexnord's 50 mln dlrs of 12-3/4 pct debentures of 1994 were +cut to B from A-minus to reflect the merger with Banner. + While increasing Banner's size and diversity, S and P said +the transaction heightens financial risk, with debt to capital +rising to more than 90 pct. + Near-term earnings and cash flow protection will weaken +from the acquisition, though Banner's plans to sell some +Rexnord assets will reduce debt for the medium term. + Reuter + + + +30-MAR-1987 16:00:28.68 +acq +usa + + + + + +F +f2463reute +d f BC-REEF-ENERGY-<RFEN>-EN 03-30 0098 + +REEF ENERGY <RFEN> ENTERS PIPELINE AGREEMENT + TRAVERSE CITY, MICH., March 30 - Reef Energy Corp said its +board entered into agreements with Penteco Corp, a private +Tulsa-based company, to buy a 12-pct interest in the general +partnership of Penteco East Central Pipeline and a 10-pct +interest in Lincoln Gas and Marketing Corp. + Penteco East is a gas gathering and transmission system in +southern Kansas and northern Oklahoma. + It said Penteco in turn has purchased one mln shares of +Reef common and taken options for the purchase of another two +mln shares over the next 36 months. + Reuter + + + +30-MAR-1987 16:00:33.29 +earn +usa + + + + + +F +f2464reute +s f BC-AMERON-INC-<AMN>-QTLY 03-30 0025 + +AMERON INC <AMN> QTLY DIVIDEND + MONTEREY PARK, Calif., March 30 - + Shr 24 cts vs 24 cts prior qtr + Pay May 15 + Record April 24 + + Reuter + + + +30-MAR-1987 16:00:39.33 +earn +usa + + + + + +F +f2465reute +d f BC-JOHNSON-ELECTRONICS-I 03-30 0070 + +JOHNSON ELECTRONICS INC <JHSN> 4TH QTR LOSS + WINTER PARK, Fla., March 30 - + Shr loss three cts vs profit eight cts + Net loss 35,000 vs profit 128,000 + Revs 1,133,000 vs 1,528,000 + Year + Shr profit four cts vs profit 21 cts + Net profit 72,000 vs profit 339,000 + Revs 4,837,000 vs 4,500,000 + NOTE: 1985 net income included an after tax gain of 195,000 +or 12 cts per share on sale of real property. + Reuter + + + +30-MAR-1987 16:01:55.85 +money-fx +usa + + + + + +A RM +f2469reute +u f BC-TREASURY-BALANCES-AT 03-30 0084 + +TREASURY BALANCES AT FED FELL ON MARCH 27 + WASHINGTON, March 30 - Treasury balances at the Federal +Reserve fell on March 27 to 2.424 billion dlrs from 2.508 +billion dlrs on the previous business day, the Treasury said in +its latest budget statement. + Balances in tax and loan note accounts fell to 9.706 +billion dlrs from 10.786 billion dlrs on the same respective +days. + The Treasury's operating cash balance totaled 12.131 +billion dlrs on March 27 compared with 13.283 billion dlrs on +March 26. + Reuter + + + +30-MAR-1987 16:06:38.27 +earn +usa + + + + + +F +f2480reute +r f BC-MORRISON-INC-<MORR>-3 03-30 0049 + +MORRISON INC <MORR> 3RD QTR FEB 28 NET + MOBILE, Ala., March 30 - + Shr 35 cts vs 29 cts + Qtly div 12 cts vs 12 cts prior qtr + Net 5,036,000 vs 4,165,000 + Revs 147.6 mln vs 132.4 mln + Nine mths + Shr 1.12 dlrs vs one dlr + Net 16.1 mln vs 14.4 mln + Revs 433.4 mln vs 385 mln + NOTE: Per share data reflect March 1986 five pct stock +distribution. Cash dividend is payable April 30 to holders of +record April 15. + Reuter + + + +30-MAR-1987 16:06:53.63 + +usa + + + + + +C G +f2481reute +d f BC-FOREIGN-OWNERSHIP-OF 03-30 0127 + +FOREIGN OWNERSHIP OF U.S. FARMLAND UP -- USDA + WASHINGTON, March 30 - Non-U.S. citizens held 12.4 mln +acres of privately owned U.S. agricultural land as of December +31, slightly less than one pct of the total agricultural land, +but 369,000 acres above the foreign ownership at the end of +1985, the U.S. Agriculture Department said. + The department said forest land accounted for 52 pct of all +foreign-owned acreage, cropland 17 pct, pastures and other +agricultural land 26 pct and non-agricultural and unreported +uses, five pct. + Corporations owned 79 pct of the foreign-held acreage, +parternships 11 pct, and individuals eight pct, the department +said. The remaining two pct was held by estates, trusts, +associations, institutions and others, it said. + Reuter + + + +30-MAR-1987 16:07:10.68 + +usasouth-africa + + + + + +F +f2483reute +u f BC-U.S.-GROUP-ASKS-SPECI 03-30 0101 + +U.S. GROUP ASKS SPECIAL ROYAL DUTCH<RD> MEETING + NEW YORK, March 30 - A group of U.S. investors opposed to +Royal Dutch Shell Petroleum Co's South African policies plans +to seek a special shareholders meeting to discuss their +complaints. + Representatives of the American Baptist Churches and the +New York City Teachers Retirement System said the company has +refused to include their proposals in proxy material prepared +for the annual meeting in May. + The group said its proposals call for an end to sales by +Royal Dutch to the South African police and military and +withdrawal from South Africa. + + Reuter + + + +30-MAR-1987 16:08:25.90 +acq +usa + + + + + +F +f2488reute +r f BC-VANDERBILT-<VAGO>-TO 03-30 0116 + +VANDERBILT <VAGO> TO RAISE COMMON, MERGE + LAS VEGAS, March 30 - Vanderbilt Gold Corp said +shareholders at a special meeting approved its reincorporation +in Delaware, an increase in authorized common to 25 mln shares +from 12 mln shares, and a non-qualified stock option plan. + It also said shareholders approved the merger of Morning +Star Mine interests held by six corporations in exchange for +issuing 2,098,602 shares of its common. It said the acquisition +brings its ownership in Morning to over 94 pct and it intends +to acquire the remaining interests before mid year. + It said its plans call for 1987 production of 30,000 ounces +of gold with product costs per ounce at about 200 dlrs. + Reuter + + + +30-MAR-1987 16:10:35.89 +cotton +usa + + + + + +C G +f2491reute +u f BC-/LITTLE-RISK-SEEN-FOR 03-30 0142 + +LITTLE RISK SEEN FOR TEXAS COTTON FROM COLD + New York, March 30 - Texas' cotton crop stands little +chance of damage from frigid temperatures expected tonight in +that state, as very little cotton has been planted, according +to Texas agricultural sources and cotton market analysts. + "It's still pretty early for cotton planting. Only six pct +of the crop was planted as of last week," said Doug Stillmann, +a statistician at the Texas Agricultural Statistic Service in +Austin, a division of the U.S. Agriculture Department. + Stillmann and other cotton market sources said planting had +begun in the Rio Grande Valley and South Texas areas only, with +planting in the crucial high and low plains areas not slated to +begin until next month. The high and low plains accounted for +60 pct of the 2.5 mln bales produced in Texas last year, +Stillmann said. + Temperatures tonight in most of Texas are expected to drop +to freezing to the low 20s, although the lower Rio Grande +Valley may see more moderate readings in the middle 30s, +according to meteorologists at Accu-Weather Inc. + The price of new-crop cotton on the New York cotton futures +market rallied today on weather-related fears. + Reuter + + + +30-MAR-1987 16:11:45.14 +grain +usa + + + + + +C G +f2493reute +u f BC-REPORT-ON-EXPORT-MARK 03-30 0054 + +REPORT ON EXPORT MARKETS FOR U.S. GRAIN DELAYED + WASHINGTON, March 30 - The U.S. Agriculture Department's +report on Export Markets for U.S. Grain, scheudled for release +today, has been delayed until Wednesday, April 1, a department +spokeswoman said. + No reason was given for the delay in releasing the monthly +report. + Reuter + + + +30-MAR-1987 16:12:16.53 +acq + + + + + + +F +f2497reute +b f BC-******BILZERIAN-TELLS 03-30 0010 + +******BILZERIAN TELLS SEC HE UPS PAY 'N PAK STAKE TO 9.9 PCT +Blah blah blah. + + + + + +30-MAR-1987 16:13:10.33 + +usa + + + + + +F +f2501reute +d f BC-ALLIED-SIGNAL-<ALD>-G 03-30 0037 + +ALLIED-SIGNAL <ALD> GETS 38.6 MLN DLR CONTRACT + WASHINGTON, March 30 - Allied Corp, a division of +Allied-Signal Inc, has received a 38.6 mln dlr contract for +work on F-15 aircraft avionics maintenance, the Air Force said. + reuter + + + +30-MAR-1987 16:16:09.66 + +usa + + + + + +F +f2503reute +r f BC-MORRISON-<MORR>-SETS 03-30 0055 + +MORRISON <MORR> SETS SHAREHOLDER RIGHTS PLAN + MOBILE, Ala., March 30 - Morrison Inc said its board +adopted a shareholder rights plan to deter any possible hostile +takeover of the company. + It said details of the plan will be released shortly. A +record date of April 10 was set for the distribution of the +rights to shareholders. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-012.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-012.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-012.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-012.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2010 @@ + + + 1-APR-1987 11:04:07.01 +earn +usa + + + + + + +F +f1288reute +s f BC-REPUBLIC-SAVINGS-AND 04-01 0039 + +REPUBLIC SAVINGS AND LOAN <RSLA> SETS DIVIDEND + MILWAUKEE, Wis., April 1 - + Qtly div 30 cts vs 30 cts prior + Pay April 27 + Record April 13 + NOTE: Company's full name is Republic Savings and Loan +Association of Wisconsin. + Reuter + + + + 1-APR-1987 11:04:40.35 +wheatcornsoybeangrainoilseed +usaussr + + + + + + +C G +f1292reute +u f BC-/SHULTZ-USSR-TRIP-FUE 04-01 0108 + +SHULTZ USSR TRIP FUELS TALK OF EEP WHEAT OFFER + By Nelson Graves, Reuters + WASHINGTON, April 1 - Speculation the United States will +offer subsidized wheat to the Soviet Union appears to have +reached a new level of intensity in the run-up to Secretary of +State George Shultz' visit later this month to Moscow. + Rumors of an impending deal have coursed through wheat +markets since officials from the two countries held their +customary, semi-annual grain talks in February. Moscow's +decision at that time to reenter the U.S. corn market +strengthened the perception of warming farm trade prospects. + Shultz is set to arrive in Moscow April 13. + Shultz' statement two weeks ago that he would not stand in +the way of a wheat subsidy offer under the Export Enhancement +Program, EEP, coupled with the announcement of his visit to +Moscow, was interpreted by many grain trade representatives +here as a clear signal that the Reagan administration was +preparing an offer. + Administration officials -- in and out of the U.S. +Agriculture Department -- have been extremely tight-lipped +about the prospects of a subsidy offer. + But USDA officials for the most part have abandoned the +contention the proposal is dormant, suggesting that an offer, +while not a "done deal," is a live possibility. + Prominent U.S. grain trade representatives -- many of whom +asked not to be identified -- continue to maintain that an +offer to subsidize four mln tonnes of wheat is imminent. + Others, who one month ago claimed a deal was not possible, +are saying they would not rule one out. + Rep. Pat Roberts, R-Kan., yesterday went so far as to +predict a subsidy offer would be made within the next ten days +to two weeks. + Aides to Roberts said he had spoken to Republican leaders +who had been in contact with administration officials. + Richard Fritz, director of international marketing at U.S. +Wheat Associates, said he was confident an export enhancement +offer would be made by the middle of this month. + Fritz also said he thought the value of the bonus would end +up being close to the offer Washington made Peking earlier this +year when USDA approved subsidies to China of around 36 dlrs +per tonne on one mln tonnes of wheat. + Some grain trade representatives say a four-mln-tonne wheat +subsidy offer might help stimulate more Soviet purchases of +U.S. corn and open the door to U.S. sales of soybeans. + As ever, one of the crucial sticking points in a wheat deal +would appear to be price. + Last summer the administration took the controversial step +of offering the Soviets subsidized wheat -- but were +embarrassed when Moscow spurned the proposal on the grounds +that the 15-dlr-per-tonne subsidy still left U.S. wheat prices +far above world market prices. + The administration's decision to set the subsidy level up +front instead of accepting bids from exporters appeared to be a +means of controlling the price while attempting to dampen +criticism, grain trade sources said. + Nonetheless, the pricing procedure did not prevent Shultz +from saying the Soviets were "chortling" because Washington was +offering Soviet housewives cheaper grain than that available to +U.S. housewives. + The conventional wisdom among grain trade representatives +here is that a general warming of relations between the two +countries since last summer, combined with continued hard times +in the U.S. grain belt, would favor a subsidy offer. + In addition, the USSR has made it clear it would consider +buying U.S. wheat if it were priced more competitively. + However, observers have not forgotten the circumstances +surrounding the administration's announcement of the wheat +subsidy offer last summer. + Up until the time of the announcment, congressional and +industry leaders were led to believe the White House had +decided to expand the Export Enhancement Program to include not +only the Soviets, but also a much broader list of countries. + Instead, the administration scaled back the offer to +include only the Soviets. + That last-minute change of heart adds a measure of +uncertainty even to the predictions of those most convinced +that the administration will not now pass up the opportunity to +sell four mln tonnes of wheat to the Soviet Union. + Reuter + + + + 1-APR-1987 11:05:07.78 +sugar +ukindia + + + + + + +C T +f1295reute +b f BC-KAINES-CONFIRMS-WHITE 04-01 0062 + +KAINES CONFIRMS WHITE SUGAR SALES TO INDIA + LONDON, April 1 - London-based sugar operator Kaines Ltd +confirmed it sold two cargoes of white sugar to India out of an +estimated overall sales total of four or five cargoes in which +other brokers participated. + The sugar, for April/May and April/June shipment, was sold +at between 214 and 218 dlrs a tonne cif, it said. + Reuter + + + + 1-APR-1987 11:09:07.45 + +usa + + + + + + +F +f1325reute +r f BC-LUXTEC-<LUXT>-CUTS-WA 04-01 0037 + +LUXTEC <LUXT> CUTS WARRANT EXERCISE PRICE + STURBRIDGE, Mass., April 1 - Luxtec Corp said it has +reduced the exercise price of its Class B common stock purchase +warrants to one dlr from two dlrs from today through June 30. + Reuter + + + + 1-APR-1987 11:09:11.43 +earn +usa + + + + + + +F +f1326reute +r f BC-<THL-HOLDINGS-INC>-YE 04-01 0038 + +<THL HOLDINGS INC> YEAR JAN 31 NET + CANTON, Mass., April 1 - + Oper net 94.4 mln vs 74.1 mln + Revs 1.3 bilion vs 1.2 billion + NOTE: THL is parent to SCOA Industries Inc, acquired in a +leveraged buyout in December 1985. + Reuter + + + + 1-APR-1987 11:09:19.56 + +uk + + + + + + +F +f1327reute +d f BC-GUARDIAN-ROYAL-SEES-E 04-01 0111 + +GUARDIAN ROYAL SEES EXPANSION IN LIFE ASSURANCE + LONDON, April 1 - Insurance group Guardian Royal Exchange +Plc <GREX.L> said it would expand its life assurance business +and push further into European markets, but that U.K. +Underwriting losses remained a heavy drag on profits. + Earlier, the group had announced sharply increased pre-tax +profits of 143.8 mln stg for calendar 1986, versus 3.5 mln the +previous year. + "We are anxious to develop our life assurance business," +group managing director Peter Dugdale told a news conference. +"If we have a thrust for the coming years, it is probably best +to spend more time on life in the U.K. And abroad," he said. + Reuter + + + + 1-APR-1987 11:09:50.05 +acqstrategic-metal +usa + + + + + + +M +f1330reute +d f BC-MOUNTAIN-STATES-ADDS 04-01 0090 + +MOUNTAIN STATES ADDS TWO MINERALS PROPERTIES + SALT LAKE CITY, April 1 - Mountain States Resources Corp +said it acquired two properties to add to its strategic +minerals holdings. + The acquisitions include a total of 5,100 acres of +titanium, zirconium and rare earth resources, the company said. + Both properties, located in southern Utah, consist of +approximately 1,430 acres of unpatented mining claims and one +state lease, it said. + The company also announced the formation of Rare Tech +Minerals Inc, a wholly-owned subsidiary. + Reuter + + + + 1-APR-1987 11:10:45.38 +coffee + + +ico-coffee + + + + +C T +f1333reute +b f BC-Restoration-of-coffee 04-01 0016 + +******RESTORATION OF COFFEE EXPORT QUOTAS BEFORE + OCTOBER SEEMS UNLIKELY - ICO PRODUCER DELEGATES + + + + + + 1-APR-1987 11:11:41.60 +wheatgrain +usaussr + + + + + + +F +f1337reute +d f BC-SHULTZ-USSR-TRIP-FUEL 04-01 0103 + +SHULTZ USSR TRIP FUELS TALK OF EEP WHEAT OFFER + WASHINGTON, April 1 - Speculation the United States will +offer subsidized wheat to the Soviet Union appears to have +reached a new level of intensity in the run-up to Secretary of +State George Shultz' visit later this month to Moscow. + Rumors of an impending deal have coursed through wheat +markets since officials from the two countries held their +customary, semi-annual grain talks in February. Moscow's +decision at that time to reenter the U.S. corn market +strengthened the perception of warming farm trade prospects. + Shultz is set to arrive in Moscow April 13. + Reuter + + + + 1-APR-1987 11:11:46.21 +interest +usa + + + + + + +RM A +f1338reute +r f BC-FREDDIE-MAC-ADJUSTS-S 04-01 0043 + +FREDDIE MAC ADJUSTS SHORT-TERM DISCOUNT RATES + WASHINGTON, April 1 - The Federal Home Loan Mortgage Corp +adjusted the rates on its short-term discount notes as follows: + MATURITY RATE OLD RATE MATURITY + 32 days 6.00 pct 6.10 pct 1 day + + Reuter + + + + 1-APR-1987 11:12:00.71 +coffee +ukbrazilguatemalacolombia + +ico-coffee + + + + +C T +f1340reute +b f BC-COFFEE-QUOTAS-BEFORE 04-01 0082 + +ICO QUOTAS BEFORE OCTOBER UNLIKELY - DELEGATES + LONDON, April 1 - The restoration of coffee export quotas +before the end of the current 1986/87 coffee year (Oct 1/Sept +30) now seems unlikely, given reluctance by International +Coffee Organization, ICO, producers and consumers to resume +negotiations on an interim quota accord, producer delegates +told reporters. + Consumers and most producers see no point in reopening the +quota dialogue while Brazil's position remains unchanged, they +said. + Brazil's refusal to accept a reduction in its previous 30 +pct share of the ICO's global export quota effectively +torpedoed talks here last month aimed at restoring quotas +before October, the delegates noted. + Disappointment at the lack of progress on quotas forced +coffee futures in London and New York to new lows today, +traders here said. Near May in New York fell below one dlr in +early trading at around 99.10 cents per pound, traders said. + Producer delegates said that while the possibility of +reimposing quotas before October remained on the ICO agenda, in +practice the idea had effectively been discarded. + The ICO's executive board session here this week has so far +barely touched on the quota debate, demonstrating general +unwillingness to revive talks while chances of success are +still remote, producer delegates said. + Some producers are in no hurry to see quotas restored, +despite the price collapse seen since the failure of last +month's negotiations, they said. + "With Brazil's frost season approaching, who wants to +negotiate quotas," one leading producer delegate said. + Coffee prices normally rise during Brazil's frost season +(mainly June-August) as dealers and roasters build up stocks as +insurance against possible severe frost damage to Brazil's +crop. + Many producers are more interested in working towards +reimposing quotas from October 1, based on a new system of +quota allocations valid until the International Coffee +Agreement expires in 1989, they said. + Guatemala has already proposed the "other oilds" producer +group should meet in the next two months to begin talks on how +to allocate quota shares. + Producers still seem divided on how to overhaul the quota +distribution system, with some producer delegates reporting +growing support for a radical reallocation, based on the +principle of "objective criteria" favoured by consumers. + At last month's council session a splinter group of small +producers backed consumer demands for new quota shares based on +exportable production and stocks, while Brazil, Colombia and +the rest of the producers favoured leaving quota allocations +unchanged, except for some temporary adjustments. + A delegate from one of the eight said more producers now +supported their cause. + The delegate said unless major producers like Brazil showed +readiness to negotiate new quota shares, prospects for a quota +accord in October also looked bleak. + The U.S. and most other consumers are still determined to +make reimposition of quotas conditional on a redistribution of +quota shares based on "objective criteria." + ICO observers remained sceptical that Brazil would be +prepared to accept a quota reduction when the ICO council meets +in September. + Brazil has adopted a tough stance with banks on external +debt negotiations and is likely to be just as tough on coffee, +they said. + They said Brazil's reluctance to open coffee export +registrations might reflect fears this would provoke another +price slide and force an emergency ICO council session, which +would most likely end in failure. + Producers met this afternoon to review the market situation +but had only a general discussion about how further +negotiations should proceed, a producer delegate said. + Producers plan to hold consultations on quotas, and then +may set a date for a formal producer meeting, but plans are not +fixed, he said. + The ICO executive board reconvened at 1650 hours local time +to hear a report from consultants on ICO operations. The board +meeting looks set to end today, a day earlier than scheduled, +delegates said. + Reuter + + + + 1-APR-1987 11:13:10.37 + +usa + + + + + + +F +f1346reute +f f BC-******AMERICAN-MOTORS 04-01 0011 + +******AMERICAN MOTORS MARCH U.S. CAR OUTPUT DOWN TO 2,578 FROM +5,922 + + + + + + 1-APR-1987 11:16:02.05 + +yugoslavia +mikulic + + + + + +A +f1350reute +h f BC-YUGOSLAVIA-WINS-TIME 04-01 0108 + +YUGOSLAVIA WINS TIME IN PARIS CLUB REFINANCING + BELGRADE, April 1 - Yugoslavia has won breathing space from +its major official creditors through yesterday's Paris Club +refinancing agreement but it will take time for it to resolve +its economic crisis, economists at western embassies said. + Yugoslav delegation chief Finance Minister Svetozar +Rikanovic said a refinancing was agreed for 475 mln dlrs of +debt falling due between May 16 this year and May 31, 1988. + The agreement was the second multi-year Yugoslav debt +refinancing, based on a protocol signed last May which ushered +in "enhanced monitoring" of Yugoslavia's economy by the IMF. + Western economists who follow Yugoslav financial affairs +said a similar deal would probably emerge from talks with +commercial creditors at the end of this month. But they said +the refinancings would only provide a breathing space, because +Yugoslavia has to repay 5.5 billion dlrs in 1987. + And the country is still struggling to reverse a dramatic +decline in export earnings, which have fallen 12.5 pct so far +this year, continuing a downward spiral of the past 18 months. + The Yugoslav hard currency debt has grown from 1.2 billion +dlrs in 1965 to stand at 19.7 billion dlrs at the end of 1986 +and is one of the country's most dire economic problems. + The debt began to snowball in the 1960s and 1970s due to an +excessive investment rate exceeding the growth of the Gross +Social Product and necessitating additional foreign borrowing. + Rising international oil prices in the 1970s proved to be a +serious blow to the country's balance of payments. + Deputy Prime Minister Milos Milosavljevic said this month +that Yugoslavia had repaid 640 mln dlrs of principal and 325 +mln dlrs of interest so far this year. + According to official Yugoslav figures, Yugoslavia repaid a +record 5.97 billion dlrs in capital and interest in 1986, +reducing overall indebtedness by 996 mln dlrs. + Mikulic is trying to rein in rampant retail inflation of +almost 100 pct a year through price and incomes controls. + Janez Zemljaric, also a Deputy Prime Minister, said +recently Yugoslavia expected a "definite measure of +understanding" from its 16 major western creditor nations. + Western economists said Yugoslavia has had its way with the +Paris Club creditors but that not all creditors were satisfied +with its economic performance last year. They said the Paris +discussions were heated and emotional. + "Economic factors were balanced by political realities," an +economist at one of the main embassies here said, but added +that creditors had no complaints regarding Yugoslavia's +repayment record because it had so far always repaid debts on +time. + Yugoslavia has refinanced its debt regularly since 1983. + In December 1985, it signed a deal with the International +Coordinating Committee of 600 commercial banks to refinance +maturities arising between January 1, 1985 and end-1988. + It had signed bilateral refinancing agreements in March of +that year for maturities arising from January 1, 1985 to March +25, 1986, following an agreement in Paris on March 25, 1985. + Government ministers told Reuters this month that +Yugoslavia had made too great an effort to repay its debts in +1986, at great cost to the economy, and that this was +regretted. + Mikulic has said Yugoslavia is unlikely to follow Brazil's +lead and suspend its debt repayments "but we have understanding +for what that country did." + Western economists said, however, that Mikulic's remarks, +taken with those of his ministers, could be a signal that some +problems were seen ahead in refinancing debt repayments. + Before the Paris talks, some Yugoslav officials had hinted +that Yugoslavia could start to look to the Soviet Bloc for +financial support if Belgrade failed to secure the necessary +refinancing from western creditors. + Sources close to the western creditors, however, said they +did not view the threat as serious. + REUTER + + + + 1-APR-1987 11:16:55.25 +earn +usa + + + + + + +E +f1353reute +u f BC-(GEOFFRION-LECLERC-IN 04-01 0031 + +(GEOFFRION LECLERC INC) SIX MTHS NET + MONTREAL, April 1 - + Shr 39 cts vs 26 cts + Net 3,466,000 vs 1,913,000 + Revs 27.7 mln vs 19.4 mln + Note: period ended February 28. REUTER + Reuter + + + + 1-APR-1987 11:19:36.90 + +usa + + + + + + +A RM +f1358reute +r f BC-ALLIED-SUPERMARKETS-< 04-01 0093 + +ALLIED SUPERMARKETS <ASU> FILES FOR OFFERING + NEW YORK, April 1 - Allied Supermarkets Inc said it filed +with the Securities and Exchange Commission a registration +statement covering 240 mln dlrs of debt securities. + The company plans to offer 140 mln dlrs of senior +subordinated discount debentures and 100 mln dlrs of +subordinated debentures. + Proceeds will be used to finance Allied's acquisition of +Vons Cos Inc. + Allied named Drexel Burnham Lambert Inc and Donaldson, +Lufkin and Jenrette Securities Corp as co-underwriters of both +offerings. + Reuter + + + + 1-APR-1987 11:19:44.38 +interest +usa + + + + + + +RM A +f1359reute +r f BC-FHLBB-CHANGES-SHORT-T 04-01 0083 + +FHLBB CHANGES SHORT-TERM DISCOUNT NOTE RATES + WASHINGTON, April 1 - The Federal Home Loan Bank Board +adjusted the rates on its short-term discount notes as follows: + MATURITY NEW RATE OLD RATE MATURITY + 5.00 pct 30-69 days + 5.92 pct 70-88 days + 30-123 days 5.00 pct 5.00 pct 89-123 days + 124-150 days 5.93 pct 5.93 pct 124-150 days + 151-349 days 5.00 pct 5.00 pct 151-349 days + 350-360 days 5.98 pct 5.98 pct 350-360 days + Reuter + + + + 1-APR-1987 11:20:01.59 +earn +usa + + + + + + +F +f1361reute +r f BC-TOWLE-MANUFACTURING-C 04-01 0044 + +TOWLE MANUFACTURING CO <QTOW> YEAR LOSS + BOSTON, April 1 - + Oper shr loss 4.71 dlrs vs loss 14.09 dlrs + Oper loss 22 mln vs loss 67.2 mln + NOTE: 1986 loss excludes gain on the sale of Gold Lance +Corp of 12.1 mln dlrs. Company is operating under chapter 11. + Reuter + + + + 1-APR-1987 11:21:36.73 +acq + + + + + + + +F +f1366reute +f f BC-******DELTA-AIR-LINES 04-01 0009 + +******DELTA AIR LINES COMPLETES ACQUISITION OF WESTERN AIR + + + + + + 1-APR-1987 11:22:14.20 +interest + +james-baker + + + + + +V RM +f1370reute +f f BC-******TREASURY'S-BAKE 04-01 0011 + +******TREASURY'S BAKER SAYS HE HOPES PRIME RATE INCREASES +TEMPORARY + + + + + + 1-APR-1987 11:23:07.19 + +canada + + + + + + +E +f1371reute +u f BC-NEW-MONTREAL-NEWSPAPE 04-01 0103 + +NEW MONTREAL NEWSPAPER FOLDS + MONTREAL, April 1 - Le Matin, the French-language tabloid +launched here in February, said it is shutting down its +operations because it can no longer get financing. + The paper, launched by private investors, was Montreal's +fourth French-language newspaper and was aimed at readers with +above average incomes and educations. It had a daily +circulation of about 20,000 copies. + Le Matin was printed and distributed by (Southam Inc)'s +Montreal Gazette newspaper. A Gazette spokesman said his +newspaper is Le Matin's biggest creditor but he declined to +reveal the amount of debt + Acting publisher Jean-Pierre Bordua said the newspaper's +bank blocked its lines of credit after three of the paper's +senior managers resigned Friday. + Reuter + + + + 1-APR-1987 11:24:00.34 + +usa + + + + + + +F +f1377reute +r f BC-TOWLE-<QTOW>-STOCK-MA 04-01 0103 + +TOWLE <QTOW> STOCK MAY BE DILUTED, CANCELED + BOSTON, Mass., April 1 - Towle Manufacturing Co, in Chapter +11 of the U.S. bankruptcy code, said any plan of reorganization +would likely lead to a dilution or cancellation of its common +and preferred stock. + The company also said claims for subordinated debentures +would likely be paid at less than their 100 pct of their face +value, and general unsecured claims would likely be paid +without interest. The company has not yet filed a plan of +reorganization. + The company said it lost 22 mln dlrs from operations in +1986 against a loss of 67.2 mln dlrs a year ago. + The company also said its independent accountants +disclaimed an opinion on the financial statements for 1986 +because of questions about its contination as a going concern. + The company said, however, it substantially restructured +its business, reducing borrowings on an outstanding credit line +to 16.5 mln dlrs in 1986 from 57 mln dlrs a year ago. The +company also cut its staff to 820 employees at the end of 1986 +from 2,500 a year earlier. + Reuter + + + + 1-APR-1987 11:24:06.95 +earn +usa + + + + + + +F +f1378reute +d f BC-SOUTH-ATLANTIC-FINANC 04-01 0045 + +SOUTH ATLANTIC FINANCIAL CORP <SOAF> 4TH QTR + STAMFORD, Conn., April 1 - + Shr 12 cts vs 33 cts + Net 699,037 vs 1,349,077 + Year + Shr 54 cts vs 55 cts + Net 2,748,280 vs 1,833,766 + NOTE: Per shr amounts reported after preferred stock +dividend requirements. + Reuter + + + + 1-APR-1987 11:25:07.00 + +usa + + + + + + +F +f1381reute +r f BC-AMERICAN-MOTORS-<AMO> 04-01 0085 + +AMERICAN MOTORS <AMO> MARCH OUTPUT FALLS + SOUTHFIELD, Mich., April 1 - American Motors Corp said it +produced 2,578 U.S. cars in March, down from 5,922 in the same +1986 month. + The automaker's March U.S. Jeep output was 21,390, up from +16,215 in the same month last year. + Year-to-date U.S. car production by American Motors through +the end of March was 8,647 vehicles compared to 12,553 in the +same 1986 period. Year-to-date Jeep output was 58,597 compared +to 56,801. + + Reuter + + + + 1-APR-1987 11:26:18.58 +copper +usa + + + + + + +C M F +f1385reute +u f BC-CYPRUS-LOWERS-COPPER 04-01 0035 + +CYPRUS LOWERS COPPER PRICE 1.25 CTS TO 67 CTS + DENVER, April 1 - Cyprus Minerals Company said it is +decreasing its electrolytic copper cathode price by 1.25 cents +to 67.0 cents a pound, effective immediately. + Reuter + + + + 1-APR-1987 11:27:55.71 + +ukjapan +thatcherlawson + +lse + + + +RM +f1393reute +u f BC-TOSHIBA-COULD-BE-FIRS 04-01 0113 + +TOSHIBA COULD BE FIRST TO FEEL U.K. TRADE ANGER + By Sten Stovall, Reuters + LONDON, April 1 - Toshiba Corp <TSBA.T>, the Japanese +electronics group which plans to enter Britain's liberalised +telecommunications equipment market, risks becoming the first +casualty in the current war of words over trade between Japan +and the U.K., Government and industry sources said. + U.K. Authorities have lost patience with Japanese trading +practices and said they are seeking ways to retaliate without +unleashing a damaging trade war. "Toshiba's timing seems most +unfortunate for the company, as it comes exactly when we are +looking for someone to punch," one official told Reuters. + Earlier, <Toshiba Information Systems (U.K.) Ltd> said it +wanted to enter the British business facsimile and key +telephone market. A facsimile machine sends printed data over +telephone lines, while a key telephone system is used for +switching calls within a business, industry sources said. + The move by Toshiba comes in the middle of a dispute over +Japan's refusal to open up its telecommunications market to +foreign companies. "Toshiba's timing is most extraordinary," one +official at the Department of Trade and Industry (DTI) said. + Tomorrow, the U.K. Government will consider what legal +action it can possible take to press for Japanese reform. + Prime Minister Margaret Thatcher has given notice that the +U.K. Would fight the Japanese government's attempt to prevent +Cable and Wireless Plc <CAWL.L> from taking a significant +position in a new Japanese international telecommunications +venture. "We regard this as a test case," she told Parliament. + But while the U.K. Is keen to see some movement on the +issue by Japan, it is also worried that recent anti-Japanese +rhetoric may cause developments to get out of hand, officials +said. + Japanese officials in Tokyo today reiterated that Japan had +no plans to bow to U.K. And U.S. Pressure to give foreign +telecommunications firms a bigger role there. + The government, for which competition and the deregulation +of markets are major political themes, is unlikely to make +final decisions tomorrow on how to act against Japan, officials +said. + Detailed consideration of the issue has been shelved during +Thatcher's official visit to the Soviet Union, which ends +today. + "We are waiting for the Prime Minister to decide what to do. +The DTI will pass the ball to her as soon as she returns +tonight," a DTI official said. + He said Toshiba's application would be considered by the +Office of Telecommunications (OFTEL). An OFTEL spokeswoman said +"a decision on this application will take weeks, maybe months." + Asked whether Toshiba's bid would fall victim to British +retaliation, the OFTEL spokeswoman said: "Who knows what's going +to happen given the current situation!" + A Toshiba executive, who asked not to be named, told +Reuters: "We do not anticipate any special problems." + Some analysts queried by Reuters questioned the basis of +Britain's strong stand on the Cable and Wireless bid. One said +that the company's proposal was equivalent to a Japanese +company wanting to take a stake in Mercury International, the +subsidiary of Cable and Wireless that is the only real +competitor of British Telecommunications Plc <BTY.L>. + British Corporate Affairs minister Michael Howard leaves +for Japan on Saturday. + The minister will seek a clear timetable from Japan for +easier access for British institutions to Japanese financial +markets, reciprocating the easy access Japanese securities +houses and banks have to the City of London. + Britain has threatened to use its new Financial Services +Act to revoke or deny licences to Japanese brokerage houses if +it does not get satisfaction. + But British authorities would be far from happy if forced +to use that weapon, government sources said. + Sir Nicholas Goodison, Chairman of the London Stock +Exchange, said in New York yesterday that sanctions against +Japanese financial institutions operating in the U.K. Would set +back London's ambition to become a leading centre for corporate +financing and securities trading. + Chancellor of the Exchequer Nigel Lawson also warned +yesterday of the negative effects that a trade war could have +on the British economy. Such a development could hit U.K. +Exports and sharply alter the outlook for the next general +election in which economic recovery will be one of the +government's main themes, political analysts said. + REUTER + + + + 1-APR-1987 11:28:34.96 + +uk + + + + + + +RM +f1395reute +u f BC-DOLLAR-EUROBONDS-END 04-01 0114 + +DOLLAR EUROBONDS END EASIER ON PRIME RATE RISES + By Christopher Pizzey, Reuters + LONDON, April 1 - The dollar straight sector of the +eurobond market ended easier after a subdued day's trading as +U.S. Banks began to match yesterday's surprise 1/4 point prime +rate hikes by Citibank and Chase Manhattan Bank, dealers said. + The prime rates were raised to 7-3/4 from 7-1/2 pct and the +timing of the moves puzzled many dealers. However, reaction +here was limited, with shorter dated paper ending steady to 1/4 +point easier, while longer dates dipped by 1/4 to 1/2 point. + In the primary market, activity again centred on currencies +other than the U.S. Dollar, dealers noted. + One dollar straight dealer at a U.S. Securities house +commented "There was, in fact, the odd retail buyer today, but +only in small sizes." He added that, ironically, the prime rate +rises may help the market to stabilise since the dollar rose on +the back of the news. + The only U.S. Dollar deal launched during the day was, as +has been the case recently, equity linked. The 15-year +convertible bond was for the Bank of Tokyo Ltd and has an +indicated coupon of two pct. One source at a house involved in +the deal said, "It's got to be a blow-out. With a name like this +you're talking about Japan Inc." + The lead manager was the Bank of Tokyo International (BOTI) +and the deal ended far above the par issue price at 108 109 +pct. A BOTI official said "We've had worldwide interest in the +deal." + She noted the Tokyo stock market had experienced a mild +correction at the beginning of the week but that bank stocks +were hardly affected. + The yen sector edged slightly firmer and one new straight +deal was launched, a 20 billion yen bond for France's Caisse +Nationale des Telecommunications. The state guaranteed five +year bond pays 4-3/8 pct and was priced at 101-1/2 pct. + The issue was lead managed by IBJ International Ltd and was +quoted on the grey market at less 1-7/8 less 1-3/4 pct compared +with the total fees of 1-7/8 pct. One syndicate official at a +firm not involved in the deal said "It's tight, but overall I +would say its fairly priced." + Also launched was a five-year zero coupon bond with a total +redemption amount of 19 billion yen for Rural Banking and +Finance Corp of New Zealand. It was priced at 81.22 pct and +lead managed by Nomura International. + In the Australian dollar sector, GMAC (Australia) Finance +Ltd issued a 50 mln Australian dlr bond. + Hambros Bank Ltd was lead manager for the four-year deal +which pays 14-1/4 pct and was priced at 101 pct. It was +guranteed by General Motors Acceptance Corp and was quoted on +the 1-3/4 pct fees at less 1-3/4 pct bid. + McDonalds Corp issued a 75 mln Canadian dlr bond paying +8-1/2 pct over five years and priced at 101-5/8 pct. It was +quoted around the 1-7/8 pct fees at less two less 1-3/4 and was +led by Morgan Guaranty Ltd. + The European Investment Bank launched a 300 mln Danish +Crown, seven-year, bond withan 11 pct coupon and pricing of 101 +pct. It was lead managed by Den Danske Bank. + The floating rate note sector basically ended easier +following the increase in period eurodollar deposit rates +prompted by the prime rate increases, dealers said. But they +noted that mis-match deals - issues whereby the coupon is +re-fixed on a monthly basis - were firmer. + REUTER + + + + 1-APR-1987 11:30:48.69 +interest +usa +james-baker + + + + + +V RM +f1401reute +b f BC-TREASURY'S-BAKER-HOPE 04-01 0080 + +TREASURY'S BAKER HOPES PRIME RATE RISE TEMPORARY + WASHINGTON, April 1 - Treasury Secretary James Baker said +he hopes yesterday's small increase in two major money center +banks' prime rate was a temporary phenomenon. + "I hope it was a temporary blip upward," he told a House +Appropriations subcommittee. + He said the decline in interest rates since President +Reagan took office remains "one of the significant +accomplishments, in the economic area, of this administration." + Reuter + + + + 1-APR-1987 11:31:43.99 +acq +usa + + + + + + +F +f1403reute +u f BC-DELTA-<DAL>-COMPLETES 04-01 0064 + +DELTA <DAL> COMPLETES WESTERN AIR <WAL> BUY + ATLANTA, April 1 - Delta Air Lines Inc said it completed +the acquisition of Western Air Lines Inc this morning. + The action follows U.S. Supreme Court Justice Sandra Day +O'Connor's overnight granting of Delta and Western's request to +stay an earlier injunction against the deal issued by the U.S. +Court of Appeals for the Ninth Circuit. + More + + + + 1-APR-1987 11:33:36.12 + +usa + + + + + + +F +f1412reute +r f BC-NATIONAL-DISTILLERS-A 04-01 0099 + +NATIONAL DISTILLERS AND CHEMICAL <DR> EXPANDING + NEW YORK, April 1 - National Distillers and Chemical Corp +said its board approved a modernization and expansion program +from its petrochemical division, USI Chemical Co, its +polyethylene producer. + The program will add 600 mln pounds per year to USI's +existing capacity of 3.2 billion pounds, the company said. The +increase will result from the addition of two linear reactors +based on fluid bed gas phase technology for the production of +linear low density or high density polyethylene at locations in +the Midwest and Gulf Coast, it said. + Plans are in the engineering stage with completion expected +in mid 1989, the company said. In addition, USI is presently +constructing a 300 mln pound linear low density polyethylene +facility, scheduled to come on stream in early 1988 at its Port +Author, Texas, plant. + Reuter + + + + 1-APR-1987 11:34:07.33 + +usa + + + + + + +F +f1417reute +r f BC-BALDWIN-PIANO-<BPAO> 04-01 0056 + +BALDWIN PIANO <BPAO> FILES FOR SECONDARY + CINCINNATI, April 1 - Baldwin Piano and Organ Co said it +has filed for a secondary offering of 630,000 common shares, +including 490,000 to be sold by General Electric Co <GE> and +140,000 by other shareholders. + Lead underwriters are William Blair and Co and McDonald and +Co Investments <MDD>. + Reuter + + + + 1-APR-1987 11:34:12.41 +earn +usa + + + + + + +F +f1418reute +r f BC-AMERICAN-OIL-AND-GAS 04-01 0049 + +AMERICAN OIL AND GAS CORP <AOG> 4TH QTR LOSS + HOUSTON, April 1 - + Shr loss 34 cts vs loss 2.14 dlrs + Net loss 2,275,000 vs loss 9,560,000 + Revs 17.0 mln vs 19.9 mln + Year + Shr loss 49 cts vs loss 2.11 dlrs + Net loss 2,661,000 vs loss 9,283,000 + Revs 73.5 mln vs 93.6 mln + + NOTE: Results have been restated to reflects equity +investment in WellTech Inc for one month ended Dec 31, 1986 and +its investment in American Well Servicing for the 11 months +ended Nov 30, 1986 and full year 1985. + 1986 and 1985 net include loss of 3,512,000 dlrs and +5,944,000 dlrs, respectively, for equity in WellTech and +predecessor operations. + Reuter + + + + 1-APR-1987 11:35:12.00 +acq + + + + + + + +F +f1425reute +f f BC-MACANDREWS/FORBES-UNI 04-01 0014 + +******MACANDREWS/FORBES UNIT BEGINS OFFER TO BUY ALL REVLON +GROUP NOT ALREADY OWNED + + + + + + 1-APR-1987 11:36:11.38 +earn +usa + + + + + + +F +f1433reute +r f BC-<NEWPARK-RESOURCES-IN 04-01 0076 + +<NEWPARK RESOURCES INC> YEAR ENDED DEC 31 LOSS + NEW ORLEANS, April 1 - + Oper shr loss 1.99 dlr vs loss 4.88 dlrs + Oper net loss 29.1 mln vs 70.8 mln + Revs 34.8 mln vs 84.8 mln + NOTE: 1986 and 1985 oper net excludes a loss of 5.5 mln +dlrs or 37 cts a share and 64.6 mln dlrs or 4.43 dlrs a share, +respectively, for discontinued operations. + 1986 net also excludes a gain of 66.4 mln dlrs or 4.50 dlrs +a share for credit on debt restructuring. + Reuter + + + + 1-APR-1987 11:36:30.26 + +usa + + + + + + +F +f1435reute +u f BC-CARDIS-<CDS>-EXPECTS 04-01 0096 + +CARDIS <CDS> EXPECTS SIGNIFICANT YEAR LOSS + BEVERLY HILLS, Calif., April 1 - Cardis Corp said it +anticipates reporting a loss from continuing operations of +approximately 17.7 mln dlrs on revenues of 228 mln dlrs for +fiscal year 1986. + In addition, the company said it expects to report a +year-end loss on the discontinued operations of its engine +rebuilding divisions of approximately 1,100,000 mln dlrs. + Cardis also said it expects to report a loss in excess of +five mln dlrs for its first fiscal quarter ended Jan 31, 1987, +on approximate revenues of 58 mlns dlrs. + For fiscal 1985 Cardis reported operating income of +8,680,000 and net income of 1,150,000 dlrs, and in the first +quarter of fiscal 1986, it reported a 495,000 dlr loss from +continuing operations. + The company said its auditor, Touche Ross and Co, has +indicated to it that any opinion it issues on the company's +soon-to-be completed year-end audit will be qualified. + The company also said it expects to conclude soon its +current negotiations with its primary lenders for extension of +its loan agreements and expansion of its credit lines. + Reuter + + + + 1-APR-1987 11:36:57.32 +earn +usa + + + + + + +F +f1439reute +d f BC-TIERCO-GROUP-INC-<TIE 04-01 0031 + +TIERCO GROUP INC <TIER> YEAR ENDED DEC 31 LOSS + OKLAHOMA CITY, April 1 - + Shr loss 72 cts vs loss 1.57 dlr + Net loss 1,526,359 vs loss 3,315,834 + Revs 8,032,798 vs 7,276,517 + Reuter + + + + 1-APR-1987 11:37:00.45 +earn +usa + + + + + + +F +f1440reute +s f BC-MICRODYNE-CORP-<MCDY> 04-01 0022 + +MICRODYNE CORP <MCDY> SETS PAYOUT + OCALA, Fla., April 1 - + Semi div three cts vs three cts prior + Pay June 12 + Record May 15 + Reuter + + + + 1-APR-1987 11:37:26.62 + +usa +james-baker + + + + + +V RM +f1442reute +f f BC-******U.S.-TREASURY'S 04-01 0012 + +******U.S. TREASURY'S BAKER SAYS JAPAN TARIFF ACTION NOT START +OF TRADE WAR + + + + + + 1-APR-1987 11:37:46.98 + +brazil + + + + + + +RM +f1443reute +u f BC-BRAZIL-CONFIRMS-RENEW 04-01 0098 + +BRAZIL CONFIRMS RENEWAL OF SHORT-TERM CREDIT LINES + BRASILIA, April 1 - Brazilian economic officials confirmed +a renewal of short-range credit lines by commercial creditors, +bringing optimism that renegotiation of the 109 billion dlrs +foreign debt is possible. + Finance Ministry sources said a "large majority" of foreign +banks had accepted to extend Brazil's credit lines before the +midnight deadline of March 31 for payment of 15 billion dlrs +servicing expired. + Finance Minister Dilson Funaro told reporters all short +range credit lines were renewed, "without exception." + Central Bank sources, although incapable of confirming that +100 pct of the banks had renewed the credit lines, said that +there was a massive affirmative reply. + The credit lines were extended in their majority by 30 +days, but there were banks which renewed the deadline by 90 +days and, sometimes, by 180 days, Funaro told reporters. + Brazil is pledging for an extension of the deadlines for an +indefinite period, until its economic officials seek a global +renegotiation of the debt. + Last week Brazil had suggested to creditors an extension of +the deadline for another two months, until May 31. + REUTER + + + + 1-APR-1987 11:38:11.26 + +ukjapan +thatcher + + + + + +F +f1446reute +d f BC-TOSHIBA-COULD-BE-FIRS 04-01 0112 + +TOSHIBA COULD BE FIRST TO FEEL U.K. TRADE ANGER + By Sten Stovall, Reuters + LONDON, April 1 - Toshiba Corp <TSBA.T>, the Japanese +electronics group which plans to enter Britain's liberalised +telecommunications equipment market, risks becoming the first +casualty in the current war of words over trade between Japan +and the U.K., Government and industry sources said. + U.K. Authorities have lost patience with Japanese trading +practices and said they are seeking ways to retaliate without +unleashing a damaging trade war. "Toshiba's timing seems most +unfortunate for the company, as it comes exactly when we are +looking for someone to punch," one official told Reuters. + Earlier, <Toshiba Information Systems (U.K.) Ltd> said it +wanted to enter the British business facsimile and key +telephone market. A facsimile machine sends printed data over +telephone lines, while a key telephone system is used for +switching calls within a business, industry sources said. + The move by Toshiba comes in the middle of a dispute over +Japan's refusal to open up its telecommunications market to +foreign companies. "Toshiba's timing is most extraordinary," one +official at the Department of Trade and Industry (DTI) said. + Tommorrow, the U.K. Government will consider what legal +action it can possible take to press for Japanese reform. + Prime Minister Margaret Thatcher has given notice that the +U.K. Would fight the Japanese government's attempt to prevent +Cable and Wireless Plc <CAWL.L> from taking a significant +position in a new Japanese international telecommunications +venture. "We regard this as a test case," she told Parliament. + But while the U.K. Is keen to see some movement on the +issue by Japan, it is also worried that recent anti-Japanese +rhetoric may cause developments to get out of hand, officials +said. + Japanese officials in Tokyo today reiterated that Japan had +no plans to bow to U.K. And U.S. Pressure to give foreign +telecommunications firms a bigger role there. +reuter^M + + + + 1-APR-1987 11:38:19.87 +interest +usa + + + + + + +RM A +f1447reute +r f BC-FHLBB-CHANGES-SHORT-T 04-01 0082 + +FHLBB CHANGES SHORT-TERM DISCOUNT NOTE RATES + WASHINGTON, April 1 - The Federal Home Loan Bank Board +adjusted the rates on its short-term discount notes as follows: + MATURITY NEW RATE OLD RATE MATURITY + + 30-123 days 5.00 pct 5.00 pct +30-123 days + 124-150 days 5.90 pct 5.93 pct 124-150 days + 151-349 days 5.00 pct 5.00 pct 151-349 days + 350-360 days 5.96 pct 5.98 pct 350-360 days + Reuter + + + + 1-APR-1987 11:39:28.49 + +brazil + + + + + + +A +f1452reute +r f BC-BRAZIL-CONFIRMS-RENEW 04-01 0097 + +BRAZIL CONFIRMS RENEWAL OF SHORT-TERM CREDIT LINES + BRASILIA, April 1 - Brazilian economic officials confirmed +a renewal of short-range credit lines by commercial creditors, +bringing optimism that renegotiation of the 109 billion dlrs +foreign debt is possible. + Finance Ministry sources said a "large majority" of foreign +banks had accepted to extend Brazil's credit lines before the +midnight deadline of March 31 for payment of 15 billion dlrs +servicing expired. + Finance Minister Dilson Funaro told reporters all short +range credit lines were renewed, "without exception." + Central Bank sources, although incapable of confirming that +100 pct of the banks had renewed the credit lines, said that +there was a massive affirmative reply. + The credit lines were extended in their majority by 30 +days, but there were banks which renewed the deadline by 90 +days and, sometimes, by 180 days, Funaro told reporters. + Brazil is pledging for an extension of the deadlines for an +indefinite period, until its economic officials seek a global +renegotiation of the debt. + Last week Brazil had suggested to creditors an extension of +the deadline for another two months, until May 31. + Reuter + + + + 1-APR-1987 11:40:15.71 +earn +usa + + + + + + +F +f1457reute +r f BC-CROWNAMERICA-INC-<CRN 04-01 0050 + +CROWNAMERICA INC <CRNA> 2ND QTR ENDED FEB 28 + DALTON, Ga., April 1 - + Shr two cts vs 29 cts + Net 23,000 vs 338,000 + Revs 20.2 mln vs 21.5 mln + Six mths + Shr 64 cts vs 97 cts + Net 741,000 vs 1,113,000 + Revs 43.2 mln vs 44.3 mln + NOTE: 1986 2nd qtr and six mths ended March one. + Reuter + + + + 1-APR-1987 11:40:30.77 + +usa + + + + + + +F +f1458reute +d f BC-QUANTUM-DIAGNOSTICS-< 04-01 0057 + +QUANTUM DIAGNOSTICS <QTMCU> GETS PATENT + HAUPPAUGE, N.Y., April 1 - Quantum Diagnostics Ltd said it +has been granted a patent for a new imaging technology it has +developed that uses electrmagnetic radiation. + It said it sees applications in airport security screening +devices, medical diagnostic imaging systems and quality control +devices. + Reuter + + + + 1-APR-1987 11:45:57.96 +earn +usa + + + + + + +F Y +f1471reute +u f BC-DIAMOND-SHAMROCK-<DIA 04-01 0112 + +DIAMOND SHAMROCK <DIA> SEES BETTER 1987 EARNINGS + NEW YORK, APRIL 1 - Diamond Shamrock Corp, which will split +this month into two separate companies, expects to show +improved earnings in 1987 over last year, executives of the new +company told Reuters. + Charles Blackburn, president and chief executive officer of +Diamond Shamrock and the new company, which will emphasize +exploration and production, said, "Earnings wil be better than +in 1986." He declined to say how much better. + In 1986 Diamond Shamrock reported a loss of 115.6 mln dlrs +on total revenues of 2.543 billion dlrs. Exploration and +production lost 18.5 mln dlrs on revenues of 593.5 mln dlrs. + Roger Hemminghaus, Diamond Shamrock vice president and +soon-to-be chief executive of the spin-off Diamond Shamrock +Refining and Marketing Co, said, "Refining and marketing is a +margin business. The margins will return and this will be a +better year than 1986." + In 1986, refining and marketing showed operating profits of +40.1 mln dlrs on revenues of 1.636 billion dlrs. + "We are also expecting to be in the black in the first +quarter (1987)," Heminghaus added. In the first quarter of 1986, +the refining and marketing segment showed a loss of 27.1 mln +dlrs on revenues of 492.1 mln dlrs. + + The executives were in New york for meetings with +institutional investors aimed at increasing interest in the +company's stock. + On the New York Stock Exchange, Diamond Shamrock was +trading at 16-1/4, down 1/4. + Earlier this year, T. Boone Pickens offered 15 dlrs a share +for Diamond Shamrock, and management countered with an offer at +17 dlrs and a decision to split off the refining and marketing +operation to its shareholders. + "Our advisors convinced us the market would give higher +multiples for pure plays," Blackburn said. + Reuter + + + + 1-APR-1987 11:46:53.00 +earn +usa + + + + + + +F +f1474reute +r f BC-VMS-STRATEGIC-<VLANS> 04-01 0054 + +VMS STRATEGIC <VLANS> SETS INITIAL DIVIDEND + CHICAGO, April 1 - VMS Strategic Land Trust said it +delcared an initial quarterly cash dividend of 30 cts a share, +payable May 15 to shareholders of record April 20. + The company also said that effective today it will be +trading on the NASDAQ system under the symbol <VLANS>. + Reuter + + + + 1-APR-1987 11:47:47.24 +iron-steel +usa + + + + + + +F +f1479reute +u f BC-BETHLEHEM-STEEL-<BS> 04-01 0087 + +BETHLEHEM STEEL <BS> SETS PLATE PRICE INCREASES + BETHLEHEM, Pa., April 1 - Bethlehem Steel Corp said its +base price for carbon plates and high-strength and low-alloy +plates will be increased by 25 dlrs to 405 dlrs a short ton, +effective July one. + The company said its composite prices for alloy plates will +also be increased 25 dlrs per ton on the same date, adding it +does not publish its prices for this product. + Bethlehem Steel said its composite prices for strip mill +plates will be increased 15 dlrs a ton. + Reuter + + + + 1-APR-1987 11:48:38.72 + +usajapan +james-baker + + + + + +V RM +f1482reute +b f BC-/TRREASURY'S-BAKER-SE 04-01 0099 + +TRREASURY'S BAKER SEES NO TRADE WAR OVER TARIFFS + WASHINGTON, April 1 - Treasury Secretary James Baker said +the U.S. imposition of tariffs on Japanese goods over +semiconductor trade does not signal the start of a trade war. + He also played down the significance of the precipitous +stock market decline earlier this week. + "I don't think this action should be interpreted in any way +as the start of a trade war," he said in response to a question +from a House Appropriations subcommittee. + He said a drop in stock market prices of the magnitude +experienced Monday was not so unusual. + "I don't think it is particularly unusual to see those kinds +of days" on Wall Street, Baker said. + Since Monday, he added, "The stock market has rebounded +rather vigorously." + He urged lawmakers to move cautiously on trade legislation +to avoid overly protectionist moves which might aggravate world +trade tensions. + "You're not going to legislate this (trade) deficit away," he +told the panel. + + Reuter + + + + 1-APR-1987 11:50:44.93 +earn +usa + + + + + + +F +f1490reute +d f BC-EQUICOR-SEES-YEAR-REV 04-01 0115 + +EQUICOR SEES YEAR REVENUES TO TOP TWO BILLION + NASHVILLE, Tenn., April 1 - Equicor, Equitable HCA Corp, +said that the company will likely attain revenues in excess of +two billion dlrs in its first year of operations. + The company, created last October with initial equity of +400 mln dlrs, is owned equally by the Equitable Life Assurance +Society of the U.S. and Hospital Corp of America <HCA>. + Financial results for the first six months of the company's +operations were not disclosed. Equicor provides employee group +plans to 1,500 corporations nationwide. It said it aims to +double its marketshare in five years from the about 3.5 pct of +the employee benefits industry it controls. + Reuter + + + + 1-APR-1987 11:50:55.18 +acq +usa + + + + + + +F +f1491reute +b f BC-MACANDREWS/FORBES-UNI 04-01 0110 + +MACANDREWS/FORBES BEGINS REVLON <REV> OFFER + NEW YORK, April 1 - MacAndrews and Forbes Group Inc said it +began an 18.50-dlr-a-share cash offer for all common stock of +Revlon Group Inc it does not already own. + The offer, which is being made by a wholly owned +subsidiary, Revmac Acquisition Corp, is subject to financing +and at least 28.5 mln shares being tendered, the company said. + MacAndrews and Forbes, wholly owned by Ronald Perelman, +chairman of Revlon Group, held about 31.8 pct of the voting +power of Revlon as of March 27, a spokesman said. The stake +includes about 15.1 pct of Revlon common and 95 pct of its +series A preferred stock, he said. + More + + + + 1-APR-1987 11:51:56.55 +earn +usa + + + + + + +F +f1494reute +u f BC-ARCO-<ARC>-UP-ON-HIGH 04-01 0109 + +ARCO <ARC> UP ON HIGHER EARNINGS ESTIMATE + NEW YORK, April 1 - Atlantic Richfield Co's stock rose +sharply after analyst Eugene Nowak of Dean Witter Reynolds Inc +raised his earnings estmates of the company, traders said. + ARCO jumped 1-3/4 to 81-3/4. + Nowak said that based on an average oil price of 17 dlrs a +barrel in 1987, the company should earn about 4.50 dlrs a +share. Next year, based on an average oil price of 18 dlrs a +barrel, ARCO should earn about five dlrs a share. The company +earned 3.38 dlrs a share in 1986. "If oil prices should rise to +an average of 20 dlrs a barrel," he said, "ARCO could record +earnings of 6.50 dlrs a share. + Nowak said his increased estimates come after the company +told analysts yesterday that its first quarter earnings will +comfortably cover its quarterly dividend requirement of one dlr +a share. + Nowak said, "The company has done an outstanding job +reducing expenses, and ARCO is poised to generate greater +earnings power." He said first quarter earnings will likely +exceed the company's expectations stated yesterday and be in +the 1.15-1.20 dlr-a-share range. + Reuter + + + + 1-APR-1987 11:53:49.16 + +usa +reagan + + + + + +V RM +f1505reute +b f BC-/SENATE-UPHOLDS-REAGA 04-01 0088 + +SENATE UPHOLDS REAGAN'S VETO BUT WILL REVOTE + WASHINGTON, April 1 - The Senate voted to sustain President +Reagan's veto of an 88 billion dlr highway and mass transit +funding bill, but Senate Democratic leader Robert Byrd of West +Virginia called for a second vote to reconsider the outcome. + The first vote ended with 65 Senators voting for the bill +and 35 voting to sustain the veto, two short of the two-thirds +majority needed to override. One of those voting to sustain the +veto was North Carolina Democrat Terry Sanford. + Reuter + + + + 1-APR-1987 11:53:59.16 +cornsorghumgrain +usabelgiumspain + +ec + + + + +C G +f1506reute +b f BC-EC-PROMISED-U.S.-BULK 04-01 0096 + +U.S. SAID PROMISED BULK OF MAIZE EXPORT TO SPAIN + BRUSSELS, April 1 - The U.S. Has been promised a near +monopoly of maize exports to Spain from third countries +guaranteed under an agreement with the European Community, an +EC official said. + The official, who asked not to be named, told Reuters that +the guarantee was given in an unpublished clause of the +agreement. + Under the accord, which began in January, third countries +were guaranteed access for the next four years for two mln +tonnes a year of maize to the Spanish market, as well as +300,000 tonnes of sorghum. + However, the official said the U.S. Had been assured that +almost all the exports would be reserved for its traders. + The EC Commission is to ask member states to agree either a +tender system to fix reduced import levies for the maize or to +authorise direct imports by the Spanish intervention board. + EC sources noted that under a tender system maize from +outside the U.S. Would sometimes be offered on more favourable +terms than that from the U.S. + No Commission spokesman was immediately available for +comment. + Reuter + + + + 1-APR-1987 11:54:45.49 +acq +usauk + + + + + + +F +f1511reute +d f BC-DEAK-INTERNATIONAL-BU 04-01 0114 + +DEAK INTERNATIONAL BUYS JOHNSON MATTHEY + NEW YORK, APRIL 1 - Deak International, a foreign currency +and precious metals firm, announced the acquisition of Johnson +Matthey Commodities of New York from Minories Finance Limited, +a unit of the Bank of England. + The purchase valued at 14.8 mln dlrs follows the recent +acquisition of London's Johnson Matthey Commodities Limited, +Deak said. + The New York firm will be known as Deak International +Trading Ltd, the company said. + Arkadi Kuhlmann, president and chief executive officer of +Deak International said the purchase will expand Deak's +operations into the precious metals and wholesale non-ferrous +metals trading arenas. + Reuter + + + + 1-APR-1987 11:56:02.30 +acq +usa + + + + + + +F +f1516reute +u f BC-WALL-STREET-STOCKS/PU 04-01 0095 + +WALL STREET STOCKS/PUROLATOR COURIER <PCC> + NEW YORK, April 1 - Purolator Courier Corp stock jumped +5-3/8 on a 40 dlr per share takeover offer from Emery Air +Freight Corp <EAF>, traders said. + Purolator was trading at 40-1/4, 1/4 above the offer price. +The Emery offer tops a 35 dlr per share buyout agreement E.F. +Hutton LBO Inc reached with Purolator February 27. + That offer was to have expired today. Neither Hutton nor +Purolator had any immediate comment. + "There's probably some speculation out there that there +might be another offer," said one analyst. + Reuter + + + + 1-APR-1987 11:57:09.82 +corngrain +usaargentinaussr + + + + + + +C G +f1518reute +b f BC-/ARGENTINE-CORN-SALES 04-01 0125 + +ARGENTINE CORN SALES TO USSR LOWER - USDA REPORT + WASHINGTON, April 1 - Total corn sales by Argentina to the +Soviet Union are only 1.5 to 1.8 mln tonnes, with delivery +spread out from March to June, the U.S. Agriculture +Department's Counselor in Buenos Aires said in a field report. + The report, dated March 27, said many sources have stated +that the Soviet Union was initially interested in purchasing +2.3 mln tonnes lof corn from Argentina. + However, Soviet purchases from the United States have +tended to displace additional Argentine purchases, the report +said. + The USDA has to date reported USSR purchases of 2.6 mln +tonnes of U.S. corn for delivery in the current U.S.-USSR grain +agreement year, which ends this September 30, it said. + Reuter + + + + 1-APR-1987 11:57:23.68 + +usa + + + + + + +F Y +f1519reute +r f BC-GPU'S-<GPU>-THREE-MIL 04-01 0085 + +GPU'S <GPU> THREE MILE ISLAND POWER REDUCED + MIDDLETOWN, Pa., April 1 - General Public Utilities corp +said its Three Mile Island Unit One's power output has been cut +to 81 pct of reactor power, or 730 megawatts of electricity, +due to mineral deposits on the secondary or non-nuclear side of +its two steam generators. + The company said the deposits do not affect the safe +operation of the plant but interfere with the production of +steam. + It said the unit was similarly limited in power in late +1985. + Reuter + + + + 1-APR-1987 11:58:09.69 + +usa + + + + + + +F +f1524reute +r f BC-CYPRUS-MINERALS-<CYPM 04-01 0064 + +CYPRUS MINERALS <CYPM> WINS COAL CONTRACT + DENVER, April 1 - Cyprus Minerals Co said it was awarded a +five year contract to supply 360,000 tons of steam coal to +Niagara Mohawk Power Co <NMK>. + The company is currently shipping 240,000 tons of steam +coal a year to Niagara Mohawk under a contract signed in 1985. +The coal comes from the Emerald mine in Southwestern +Pennsylvania. + + Reuter + + + + 1-APR-1987 11:58:19.48 + +usa + + + + + + +F +f1525reute +r f BC-QUANTECH-<QANT>-SAYS 04-01 0103 + +QUANTECH <QANT> SAYS THREE DIRECTORS RESIGN + LEVITTOWN, N.Y., April 1, Quantech Electronics Corp said +Leonard N. Hecht, Jack Goldfarb and Harold V. Wallace resigned +as directors. + On March 26, the company announced the resignations of +Bernard Weinblatt as president and a director, and Hecht as +chief executive officer. It said Hecht will serve as a +consultant for an interim period. + Quantech said its remaining directors are Henry Ginsberg +and David Siegel. Ginsberg, who is chairman, has been named +president and chief executive officer, and Siegel has been +named chief operating officer, the company said. + Reuter + + + + + + 1-APR-1987 11:58:27.08 +earn +usa + + + + + + +F +f1526reute +r f BC-BARNES-GROUP-<B>-EXPE 04-01 0104 + +BARNES GROUP <B> EXPECTS SALES TO GROW MODESTLY + HARTFORD, Conn., April 1 - Barnes Group said it expects +sales and net income for 1987 will be up slightly over 1986. + Without supplying specific figures, Barnes told +shareholders at its annual meeting it expected net income to +improve at a rate exceeding its growth in sales, which was two +pct higher than 1985. + The company said it recorded income from continuing +operations of 16.6 mln dlrs, or 2.57 dlrs per share, on sales +of 440 mln dlrs in 1986. It said it recorded income from +continuing operations of 16.4 mln dlrs, or 2.27 dlrs per share, +in the previous year. + Reuter + + + + 1-APR-1987 11:58:33.10 + +usa + + + + + + +A RM +f1527reute +r f BC-UNITED-CITIES-<UCIT> 04-01 0078 + +UNITED CITIES <UCIT> PRIVATELY PLACES BONDS + NEW YORK, April 1 - United Cities Gas Co said it placed +privately on March 18 20 mln dlrs of 8.69 pct first mortgage +bonds. + Proceeds will be used to retire short-term debt and fund +the company's current construction program, United Cities said. + The company said more than 30 lending institutions +participated in the bidding for the bonds and that 25 pct of +the issue was placed with the U.S. unit of a Canadian firm. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-013.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-013.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-013.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-013.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2011 @@ + + + 3-APR-1987 12:41:43.18 + +usa + + + + + + +F +f1680reute +b f BC-CHRYSLER-<C>-LATE-MAR 04-03 0085 + +CHRYSLER <C> LATE MARCH U.S. CAR SALES UP + DETROIT, April 3 - Chrysler Corp said car sales for the +March 21-31 period rose 20.2 pct to 40,454 from 33,669 a year +earlier. + For the month of March, it said auto sales increased 6.3 +pct to 96,649 from 90,945. + Chrysler said U.S. truck sales in late March jumped 65.2 +pct to 28,698 from 17,372 a year ago. For the entire month, +truck sales advanced 28.9 pct to 63,283 from 49,102, it said. + The company said it was still tabulating year-to-date +figures. + Reuter + + + + 3-APR-1987 12:42:15.79 + +usa + + + + + + +F +f1682reute +u f BC-WALL-STREET-STOCKS/CO 04-03 0085 + +WALL STREET STOCKS/COMPAQ COMPUTER <CPQ> + NEW YORK, April 3 - Compaq Computer Corp, IBM's chief +rival in the personal computer market, scored a big gain on +Wall Street today. Compaq's stock rose 1-3/8 to 32-1/4 on +volume of 1.3 mln shares. + "The rationale for the move," one trader said, "is that the +damage from the IBM announcement yesterday was less than +expected." He said Compaq's stock had been under pressure +recently because of anticipation of IBM's unveiling of a new +line of personal computers. + International Business Machines <IBM> introduced four new +personal computers and more than 100 new peripheral products. +But analysts said the new computers, though they do contain a +lot of proprietary concepts, will not be as hard to copy as +some other PC makers had feared. + "The long range issue here is who wins and who loses in the +PC business, and that issue was not resolved yesterday and is +unlikely to be decided any time soon," analyst Mark Stahlman of +Sanford C. Bernstein and Co said. + Stahlman reaffirmed his recommendation of Compaq and Apple +Computer Inc <AAPL>. + Stahlman said "The critical investment question now is who +will have a pickup in sales in the near term. We expect to see +a strong demand setting for PCs for the rest of this year, and +that will boost the revenues for all of the major PC vendors." + "The first quarter was the strongest PC sales period on +record for Compaq, Apple and IBM," Stahlman said, "and I don't +think the IBM announcement is going to change that trend soon." + "In anticipating the IBM announcement, Compaq has made +pricing adjustments necessary to compete for its immediate +purposes," he said. + Reuter + + + + 3-APR-1987 12:43:33.42 +copper +canada + + + + + + +E F +f1686reute +r f BC-noranda-sets-temporar 04-03 0090 + +NORANDA SETS TEMPORARY MINE SHUTDOWN + Murdochville, Quebec, April 3 - <Noranda Inc> said +production will remain shut down at its fire-damaged copper +mine here until it can completely examine the mine. + The fire, which started Wednesday and burned itself out +late yesterday, killed one miner and trapped 56 others +underground for about 24 hours. The 56 were eventually brought +safely out of the mine. + Company spokesman Dale Coffin said the investigation could +take from a few days to several weeks, but would not be more +specific. + Noranda said that, when it resumes production, it plans to +operate the mine at about one-third of the normal 72,000 metric +tons annual finished capacity. + The fire weakened part of the mine's support structure, +Coffin said. + Noranda said if it decides to keep the mine open, it would +take four or five months before it could resume full +production. + Reuter + + + + 3-APR-1987 12:48:00.50 + +canada + + + + + + +E A RM +f1694reute +u f BC-CANADA-BUDGET-DEFICIT 04-03 0115 + +CANADA BUDGET DEFICIT RISES IN JANUARY + OTTAWA, April 3 - The Canadian government's budget deficit +rose to 1.78 billion dlrs in January from 1.67 billion dlrs in +the same month last year, the finance department said. + But the deficit in the first 10 months of the fiscal year +which began on April 1, 1986, fell to 22.36 billion dlrs from +25.74 billion dlrs in the same period a year ago. + January revenues rose to 7.96 billion dlrs from 7.56 +billion dlrs while expenditures grew to 9.74 billion dlrs from +9.23 billion dlrs. Revenues in the first 10 months increased to +70.06 billion dlrs from 62.30 billion while expenditures grew +to 92.42 billion dlrs from 88.05 billion. + Reuter + + + + 3-APR-1987 12:49:26.47 +acq +usaswitzerland + + + + + + +F +f1697reute +r f BC-CIS-TECHNOLOGIES<CIH> 04-03 0099 + +CIS TECHNOLOGIES<CIH> TO SELL SHARES TO SWISS CO + TULSA, Okla, April 3 - CIS Technologies Inc said it +executed a formal share purchase agreement with Swiss +Reinsurance Co of Zurich, Switzerland. + Under terms of the agreement, Swiss Re will acquire 5.5 mln +newly issued CIS stock at 2.50 dlrs a share, or 13.8 mln dlrs. +This purchase represents 30 pct of the outstanding shares. + Swiss Re will acuqire 500,000 of the shares immediately and +remaining shares will be bought after a due diligence report is +completed by auditors. + The transaction is expected to be complete by June 11. + Reuter + + + + 3-APR-1987 12:51:05.81 +earn +usa + + + + + + +F +f1701reute +r f BC-COPLEY-PROPERTIES-INC 04-03 0025 + +COPLEY PROPERTIES INC <COP> INCREASES DIVIDEND + BOSTON, Mass, APril 3 - + Qtly div 42 cts vs 41.5 cts prior + Payable APril 28 + Record April 14 + Reuter + + + + 3-APR-1987 12:52:18.65 +cpi +colombia + + + + + + +RM +f1705reute +r f BC-COLOMBIAN-INFLATION-S 04-03 0085 + +COLOMBIAN INFLATION STABLE AT AROUND 20 PCT + BOGOTA, April 3 - Colombia's cost of living index rose 2.71 +pct in March, after a 2.03 pct increase in February and a 2.21 +pct rise in March 1986, the government statistics institute +said. + The result brought year-on-year inflation to 20.36 pct +compared with 22.65 pct at end-March 1986 and 19.77 pct for the +year ending February 1987. + The government has predicted that inflation this year would +be slightly lower than in 1986 when it reached 20.9 pct. + REUTER + + + + 3-APR-1987 12:52:47.08 +interest +usa + + + + + + +A RM +f1708reute +r f BC-FHLBB-SAYS-MORTGAGE-R 04-03 0103 + +FHLBB SAYS MORTGAGE RATES CONTINUE DECLINE + WASHINGTON, April 3 - The Federal Home Loan Bank Board said +home mortgage rates fell from early February to early March to +their lowest point in nine years, but the rate of decline was +slower than it had been in recent months. + The bank board said the average effective commitment rate +for fixed-rate mortgages for single family homes and a 25 pct +loan-to-price ratio with a maturity of at least 15 years was +9.48 pct in early March. + The rate was four basis points lower than a month ago, only +one-eighth the size of decline in the previous month, the bank +board said. + Rates for adjustable-rate mortgages decline eight basis +points from early February to 8.43 pct in early March, the bank +board said. The drop was far less than the 15 basis point +decline in the previous period, the agency said. + The average effective interest rate on all loans closed by +major mortgage lenders declined nine basis points from early +February to early March, the agency said. The fall brought the +rate to 9.14 pct was the lowest since December 1977, it said. + The effective rate for ARMS was 8.39 pct, 15 basis points +below a month earlier. For fixed-rate loans it was 9.36 pct, 14 +basis points below a month earlier, the agency said. + Reuter + + + + 3-APR-1987 12:56:19.95 + +usa + + +nyse + + + +F +f1713reute +d f BC-NYFE-SEAT-SELLS-FOR-1 04-03 0048 + +NYFE SEAT SELLS FOR 1,500 DLRS + NEW YORK, April 3 - The New York Stock Exchange said a seat +on the New York Futures Exchange sold for 1,500 dlrs, which is +up 250 dlrs from the previous sale yesterday. + The Exchange said the current bid is 1,250 and the current +offer is 1,500 dlrs. + Reuter + + + + 3-APR-1987 12:56:53.22 +money-supply +canada + + + + + + +E RM +f1716reute +f f BC-CANADIAN-MONEY-SUPPLY 04-03 0014 + +******CANADIAN MONEY SUPPLY M-1 FALLS 291 MLN DLRS IN WEEK, BANK OF CANADA SAID +Blah blah blah. + + + + + + 3-APR-1987 12:58:50.26 +acq +usa + + + + + + +F +f1722reute +r f BC-BENEFICIAL-<BNL>-UNIT 04-03 0100 + +BENEFICIAL <BNL> UNIT SALE APPROVED + NEW YORK, April 3 - Beneficial Corp said the sale of its +American Centennial Insurance Co subsidiary to <First Delaware +Holdings Inc> was approved by the Delaware Insurance +Department. + Under the transaction, American Centennial will receive a +cash infusion of 200 mln dlrs, including the settlement of tax +sharing agreements with Beneficial Corp, Beneficial said. + It will also receive 25 mln dlrs from Beneficial +International Insurance Co, another Beneficial subsidiary being +purchased by the management-led group of First Delaware, the +company said. + Reuter + + + + 3-APR-1987 12:59:13.76 + +netherlands + + +asecboe + + + +C +f1724reute +d f BC-LARGER-VOLUME-SEEN-ON 04-03 0114 + +LARGER VOLUME SEEN ON EUROPEAN OPTIONS EXCHANGES + AMSTERDAM, April 3 - European options exchanges will see +spectacular growth over the next five years as more +professional investors discover the options markets, Bernard +Reed, manager of the London options exchange said. + At an options outlook seminar to mark tomorrow's official +opening of a new Amsterdam options exchange (EOE) building, he +forecast increasing interest from banks and institutional +investors, using options for portfolio insurance. + "But the dominance by the professionals should not make us +neglect private clients," he noted. "Successful exploitation of +retail business has been one of the keys to success." + Reed said derived option products in particular will become +a popular instrument for managing equity risks. On the Chicago +Board Options Exchange (CBOE), the cash-settled S&P 100 index +option is the most traded in the world. + Dutch Stock Index Fund options to be relaunched on May 18 +and the upcoming options on London's FTSE 100 index will see a +30 pct yearly turnover growth until 1990, Reed estimated. + The CBOE and the Chicago Mercantile Exchange have agreed +with Morgan Stanley to trade options and futures on the capital +international EAFE index which will let investors participate +in worldwide market moves. + Reed said he did not believe in globalising the option +business by introducing international products, because this +would intensify competition among the exchanges, but he did see +a future for global rules and regulations. + Reuter + + + + 3-APR-1987 13:05:49.54 + +usa + + + + + + +F +f1749reute +r f BC-TIERCO-<TIER>-SELLS-N 04-03 0057 + +TIERCO <TIER> SELLS NOTE + OKLAHOMA CITY, April 3 - Tierco Group INc said it sold at +par to the Kuwait Real Estate INvestment and Management Co its +10 mln dlrs 75. pct senior subordinated note due 1997, together +with warrants to buy 1.1 mln shares of common stock. + The warrant may be exercised within five years at 9.50 dlrs +per share. + Reuter + + + + 3-APR-1987 13:05:53.71 +earn +canada + + + + + + +E F +f1750reute +r f BC-itt-canada-ltd 04-03 0040 + +<ITT CANADA LTD> YEAR NET + TORONTO, April 3 - + Shr 5.56 dlrs vs 3.88 dlrs + Net 47.5 mln vs 33.2 mln + Revs 254.5 mln vs 243.5 mln + Note: shr after preferred dividends + ITT Corp <ITT> owns 100 pct of ITT Canada common shares + Reuter + + + + 3-APR-1987 13:06:02.09 + +usa + + + + + + +F +f1751reute +d f BC-******ALLIED-SIGNAL-T 04-03 0089 + +CALIFORNIA MICRO DEVICES <CAMD> IN DEFENSE DEAL + MILPITAS, Calif, April 3 - California Micro Devices Corp +said an additional 3.2 mln dlrs contract was received from +General Dynamics Corp <GD> to supply electronic components +contained in the guidance control for Defense Electronics +Systems. + This contract follows a 750,000 dlrs contract awarded last +year. + Shipments will begin in APril 1987. + The company also disclosed that Fuji Photo Film Co Ltd is +the licensee of a one mln dlrs technology agreement announced +last fall. + Reuter + + + + 3-APR-1987 13:06:05.40 + +usa + + + + + + +F +f1752reute +d f BC-STEWART-INFORMATION-R 04-03 0032 + +STEWART INFORMATION RESCHEDULES ANNUAL MEETING + HOUSTON, APRIL 3 - Stewart INformation Services Corp said +it rescheduled its annual meeting to May 18. + It had been scheduled for APril 24. + Reuter + + + + 3-APR-1987 13:06:11.03 + +usa + + + + + + +F +f1753reute +h f BC-FISERVE-<FISV>-GETS-B 04-03 0061 + +FISERVE <FISV> GETS BUSINESS WORTH ONE MLN DLRS + WEST ALLIS, Wis., April 3 - FIserve Inc said 14 savings and +loans with 1.5 billion dlrs in cumulative assets will transfer +their data processing to FIserve from Midwest Commerce Data +Corp, a unit of Midwest Commerce Corp. + About one mln dlrs a year in new recurring revenues will be +generated for FIserve, it said. + Reuter + + + + 3-APR-1987 13:14:52.25 + +usa + + + + + + +F +f1764reute +r f BC-MONY-REAL-<MYM>-REPOR 04-03 0086 + +MONY REAL <MYM> REPORTS PORTFOLIO + NEW YORK, April 3 - Mony Real Estate Investors Trust said +its investment portfolio consists of 137.1 mln dlrs of +mortgages with an average maturity of less than six years, 43.7 +mln dlrs of real estate equities and 2.7 mln dlrs of foreclosed +real estate. + The trust's exposure to oil-dependent regions is limited to +2.2 mln dlrs, it said. + It said it accepted an offer to sell foreclosed property +and increased its loss reserve by 750,000 dlrs in anticipation +of the sale. + Reuter + + + + 3-APR-1987 13:17:05.48 +money-supply +canada + + + + + + +E A RM +f1768reute +u f BC-CANADIAN-MONEY-SUPPLY 04-03 0099 + +CANADIAN MONEY SUPPLY FALLS IN WEEK + OTTAWA, April 3 - Canadian narrowly-defined money supply +M-1 fell 291 mln dlrs to 32.44 billion dlrs in the week ended +March 25, Bank of Canada said. + M-1-A, which is M-1 plus daily interest chequable and +non-personal deposits, fell 7 mln dlrs to 75.14 billion dlrs +and M-2, which is M-1-A plus other notice and personal +fixed-term deposits, fell 56 mln dlrs to 177.54 billion dlrs. + M-3, which is non-personal fixed term deposits and foreign +currency deposits of residents booked at chartered banks in +Canada, rose 321 mln dlrs to 216.67 billion dlrs. + Chartered bank general loans outstanding fell 169 mln dlrs +to 126.03 billion dlrs. + Canadian liquid plus short term assets rose 72 mln dlrs to +36.47 billion dlrs and total Canadian dollar major assets of +the chartered banks rose 507 mln dlrs to 224.22 billion dlrs. + Chartered bank net foreign currency assets fell 231 mln +dlrs to minus 2.00 billion dlrs. + Notes in circulation totalled 16.16 billion dlrs, up 50 mln +dlrs from the week before. + Government cash balances fell 1.17 billion dlrs to 4.63 +billion dlrs in week ended April 1. + Government securities outstanding rose 1.09 billion dlrs to +226.42 billion dlrs in week ended April 1, treasury bills rose +1.35 billion dlrs to 76.95 billion dlrs and Canada Savings +Bonds fell 47 mln dlrs to 43.87 billion dlrs. + Reuter + + + + 3-APR-1987 13:17:16.61 + +usa + + + + + + +F +f1769reute +r f BC-COPLEY-PROPERTIES-<CO 04-03 0072 + +COPLEY PROPERTIES <COP> TO INVEST IN JOINT PACT + BOSTON, April 3 - Copley Properties Inc said the company +will invest 9,500,000 dlrs in a joint venture to acquire and +develop 33.4 acres of industrial land in Hayward, Calif. + Copley said it will own 60 pct of the project and be +entitled to a 10 pct preferential return on its investment plus +60 pct of all excess cash from operations, refinancings and +other capital transactions. + Reuter + + + + 3-APR-1987 13:18:53.02 +acq +usa + + + + + + +F +f1775reute +r f BC-UNION-TO-PROTEST-DART 04-03 0103 + +UNION TO PROTEST DART'S SUPERMARKETS <SGL> BID + LANDOVER, MD., April 3 - The United Food And Commercial +Workers said that more than 1,000 rank-and-file members of the +union will demonstrate Monday at Dart Group Corp's headquarters +protesting Dart's proposed 1.73 billion dlr takover of +Supermarkets General <SGL>. + Supermarkets is best known for its Pathmark chain of +supermarket drug stores in the New York and New Jersey area and +also owns Rickels home centers. + The union said that it is firmly against the Dart bid +because "workers have always ended up with a raw deal in the +current takeover mania." + A Union statement said: "We do not intend to allow our +members to pick up the tab for Supermarket General's executives +and the bankers or the Dart Group who stand to make millions." + Dart is controlled by the Haft family of Washington, which +last year made a bid for California-based Safeway Stores Inc. +The Hafts lost, but walked away with at least 100 mln dlrs in +profits, analysts estimate. + The union said that Dart's Safeway bid forced a major +restructuring at Safeway to pay the Hafts and their lawyers and +caused a loss of thousands of jobs. + Reuter + + + + 3-APR-1987 13:19:08.87 + +usa + + + + + + +F +f1776reute +u f BC-PAN-AM-<PN>-MARCH-LOA 04-03 0086 + +PAN AM <PN> MARCH LOAD FACTOR ROSE TO 60.6 PCT + NEW YORK, April 3 - Pan Am Corp's Pan American World +Airways said its load factor rose to 60.6 pct last month from +54.9 pct in March 1986. + The airline said its scheduled March traffic increased 14.6 +pct to 1.94 billion revenue passenger miles from 1.70 billion +last year as available seat miles rose 3.8 pct to 3.21 billion +from 3.09 billion. + It said the March traffic increase was the third +consecutive month of year over year traffic growth for Pan Am. + For the first quarter, Pan Am said, its load factor +increased to 56.3 pct from 53.4 pct as scheduled traffic +increased 10.2 pct to 5.25 billion miles and available seat +miles increased 4.5 pct to 9.32 billion. + The airlines said its March scheduled freight ton miles +increased 1.5 pct to 53.3 mln from 52.5 mln and was up 0.4 pct +for the first quarter to 134.6 mln. + Reuter + + + + 3-APR-1987 13:21:48.58 +acq +usa + + + + + + +F +f1785reute +u f BC-FCS-LABORATORIES-<FCS 04-03 0099 + +FCS LABORATORIES <FCSI> TERMINATES DEAL TALKS + TEMPE, Ariz., April 3 - FCS Laboratories Inc said merger +discussions with an unnamed privately-held company in the +health care field have ended without an agreement. + The previously announced negotiations began last August, +the company said. + "It's disappointing to spend so much time on these +negotiations and have them fail," said FCS chairman Nicholas +Gallo III. "But the discussions could not produce a deal +acceptable to our board in the context of the company's +stronger financial position today as compared to six months +ago." + Gallo said FCS will stop actively seeking potential merger +partners, but will respond to serious inquiries. + "We are determined to follow our plan to restore this +company to profitability," he said. "To continue actively +searching for potential acquirers inherently forces us to +postpone the implementation of critical decisions which are +part of the plan." + The company, which has 4,475,930 common shares outstanding, +reaffirmed it expects to be profitable in the second half of +the fiscal year ending September 30, 1987. + Reuter + + + + 3-APR-1987 13:23:23.58 +interest +usa + + + + + + +A RM +f1794reute +u f BC-WHITE-HOUSE-SAYS-INTE 04-03 0090 + +WHITE HOUSE SAYS INTEREST RATES REFLECT MARKET + WASHINGTON, April 3 - The White House said the rise in +interest rates was "unfortunate in a general sense" but reflected +market forces. + "There's always movement up and down and the basic fact is +that we believe the economy is strong and growing and there +will always be fluctuations in the interest rate, but the +economy is sound and in good shape," spokesman Marlin Fitzwater +said. + Citibank raised its prime rate by one quarter of a point +and the move was followed by other banks. + Reuter + + + + 3-APR-1987 13:25:20.85 +earn +usa + + + + + + +F +f1799reute +d f BC-REGAL-PETROLEUM-LTD-< 04-03 0049 + +REGAL PETROLEUM LTD <RPLO> YEAR + THE WOODLANDS, TExas, April 3 - + Shr loss nine cts + Net loss 1.4 mln + Revs 630,118 dlrs + NOTE:Due to change in fiscal year, prior 4th qth and year +cannot be presented on comparable basis. 1986 loss includes +writedowns approximating 1.4 mln dlrs. + Reuter + + + + 3-APR-1987 13:26:03.77 +earn +usa + + + + + + +F +f1801reute +w f BC-CANTERBURY-PRESS-INC 04-03 0042 + +CANTERBURY PRESS INC YEAR NOV 30 + MEDFORD, N.J., April 3 - + Shr 1.1 cts vs 1.7 cts + Net 26,708 vs 35,084 + Revs 447,548 vs 243,161 + NOTE:1986 net includes 4,300 dlrs gain from tax credit and +1985 includes gain of 8,300 dlrs gain from credit. + Reuter + + + + 3-APR-1987 13:26:44.58 +earn +usa + + + + + + +F +f1803reute +d f BC-GRAPHIC-MEDIA-INC-<GM 04-03 0044 + +GRAPHIC MEDIA INC <GMED> YEAR + FAIRFIELD, N.J., April 3 - + Shr nine cts vs 19 cts + Net 188,000 vs 362,000 + Revs 20.4 mln vs 11.3 mln + NOTE:1985 restated for reversal of certain tax benefits. +1986 and 1985 reflects preferred stock dividend requirements. + Reuter + + + + 3-APR-1987 13:27:04.11 + + + + + + + + +CQ MQ +f1804reute +r f BC-cbt-silver-vol-oi 04-03 0080 + +CBT SILVER VOLUME/OPEN INTEREST FOR APRIL 2 + VOLUME OPEN-INT CHANGE + Apr 714 684 up 516 + May 14 36 dn 1 + Jun 3097 7109 dn 140 + Aug 86 537 up 20 + Oct 12 157 up 7 + Dec 215 3125 up 56 + Feb 3 252 up 1 + Apr 28 1275 dn 2 + Jun 54 103 up 49 + Aug 0 9 unch + TTL 4223 13287 up 506 + Reuter + + + + + + 3-APR-1987 13:27:08.42 + + + + + + + + +FQ EQ +f1805reute +u f BC-WALL-STREET-INDICES-1 04-03 0040 + +WALL STREET INDICES 1300 + + NYSE COMPOSITE 168.38 UP 1.62 + NYSE INDUSTRIALS 203.81 UP 2.34 + S AND P COMPOSITE 296.94 UP 3.31 + + NYSE-A VOLUME 154525400 + + AMEX INDEX 338.30 UP 3.06 + + AMEX-B VOLUME 11343900 + + + + + + 3-APR-1987 13:27:38.57 + +usa + + + + + + +F A +f1806reute +r f BC-BURLINGTON-<BNI>-UNIT 04-03 0082 + +BURLINGTON <BNI> UNIT SETTLES BONDHOLDER SUIT + SEATTLE, April 3 - Burlington Northern Inc said its +Burlington Northern Railroad Co unit reached an agreement in +principle to settle a class action lawsuit filed against the +company in May 1985 by holders of two series of the company's +bonds. + It said the settlement arrangement calls for the company to +establish a cash settlement fund of 35.5 mln dlrs, which would +be distributed to the bondholders after deductions for +attorney's fees. + The lawsuit, filed by holders of its four pct Prior Lien +bonds due January 1, 1997 and its three pct General Lien Bonds +due January 1, 2047, sought to prevent the release of +collateral, the company said. + If the settlement agreement is approved, the trading prices +of the bonds will decline substantially because they will no +longer reflect the speculative premiums at which the bonds +currently trade, Burlington Northern also said. + It said the settlement is subject to negotiation by +Burlington Northern, the Citibank N.A. unit of Citicorp <CCI> +and Bankers Trust Co <BT>, the bonds' trustees. + Reuter + + + + 3-APR-1987 13:27:46.34 +earn +usa + + + + + + +F +f1807reute +r f BC-RICHARDSON-ELECTRONIC 04-03 0073 + +RICHARDSON ELECTRONICS <RELL> 3RD QTR FEB 28 NET + LaFox, Ill., April 3 - + Shr 20 cts vs 20 cts + Net 1,981,000 vs 1,689,000 + Rev 24.7 mln vs 19.6 mln + Nine months + Shr 59 cts vs 53 cts + Net 5,855,000 vs 4,360,000 + Rev 70.9 mln vs 51.9 mln + NOTE: Fiscal 1986 per share data reflects dilutive effect +of shares issued for April 1986 convertible debenture +conversion. Company's full name is Richarson Electronics Ltd. + Reuter + + + + 3-APR-1987 13:29:07.38 +earn +usa + + + + + + +F +f1812reute +d f BC-DIVERSIFIED-HUMAN-RES 04-03 0038 + +DIVERSIFIED HUMAN RESROUCES GROUP <HIRE> YEAR + DALLAS, APril 3 - + Shr loss five cts vs profit 72 cts + Net loss 79,069 vs profit 829,737 + Revs 14.4 mln vs 14.1 mln + NOTE:1985 includes extraordainy credit of 11 cts. + Reuter + + + + 3-APR-1987 13:30:04.51 + +usa + + + + + + +F +f1813reute +r f BC-ALASKA-AIR-<ALK>-UNIT 04-03 0110 + +ALASKA AIR <ALK> UNIT HAS HIGHER LOAD FACTOR + SEATTLE, April 3 - The Alaska Airlines unit of Alaska Air +Group Inc said its March load factor rose to 58.1 pct from 57.3 +pct a year earlier, but its year-to-date load factor dropped to +51.8 pct from 52.6 pct last year. + March revenue passenger miles rose five pct to 225.9 mln +from 215.6 mln, but year-to-date revenue miles fell one pct to +586.7 mln from 593 mln. + Available seat miles for the month totaled 389.1 mln, a +three pct increase over the 376.1 mln posted for March 1986, +and for the year-to-date available miles totaled 1.132 billion +compared with 1.128 billion a year earlier, Alaska Air said. + Reuter + + + + 3-APR-1987 13:30:26.85 + +ukjapan +nakasonethatcher + + + + + +RM +f1815reute +u f BC-UK-MINISTER-LOOKS-TO 04-03 0112 + +UK MINISTER LOOKS TO EASE TENSION ON TOKYO TRIP + By Sten Stovall, Reuters + LONDON, April 3 - The U.K. Government hopes for a +breakthrough on the deadlock with Japan over trade policies +during next week's visit to Tokyo by Corporate Affairs Minister +Michael Howard, political sources said. + Howard, who leaves for Japan tomorrow, told Reuters he will +try to promote understanding on trade issues during his visit. + Meanwhile, Britain will re-examine a letter from Japanese +Prime Minister Yasuhiro Nakasone promising personal help in +solving the row over a U.K. Firm's bid to win a significant +role in Japan's telecommunications market, government sources +said. + Tensions have risen following Britain's decision to arm +itself early with new statutory powers which it says could be +used against certain Japanese financial institutions. + Britain reacted optimistically at first to the letter from +Nakasone to Prime Minister Margaret Thatcher, seeing it as a +signal that he would work towards ensuring a satisfactory +outcome to the bid launched by Cable and Wireless Plc <CAWL.L>, +government officials said. + But this view has since been clouded by reports from Tokyo +that Nakasone's assurances really constituted little more than +politeness in the face of British anger, they added. + Howard said he would use his trip to push for a bigger role +in Japan's telecommunications industry for Cable and Wireless +Plc. The U.K. Government has made the issue a test case for +Japan's willingness to open its markets adequately to outside +competition. + Asked whether the letter from Nakasone was a rejection of +attempts by Britain to achieve that, Howard said "I am not sure +it is correct to regard Mr Nakasone's letter as a rejection of +Mrs Thatcher's request of him - and it says he is taking a +personal interest in this problem. + "I don't understand it to be closed at all." + Howard added that during his Tokyo visit he would be +"talking to them about it (the letter), finding out exactly what +they do mean about it, and making it plain that we take a very +serious view of the fact that access to Japanese markets is not +as free as we allow access to our markets to be." + He noted that under the new Financial Services Act, Britain +could revoke or deny licences to Japanese banking and insurance +institutions in London if U.K. Firms fail to receive similar +treatment in financial markets in Japan soon. + "I hope it won't come to that, and I don't think it will," +Howard added. + During the trip Howard will meet officials in the Tokyo +Stock Exchange, the Ministry of Finance, the Trade Ministry, +and Posts and Telecommunications Minister Shunjiro Karasawa. + Karasawa is regarded as behind opposition to any +significant role for Cable and Wireless in the Japanese +telecommunications industry. + Share prices on the London Stock Exchange were undermined +again today by fears of a possible U.K./Japanese trade war. +This was despite denials by Trade and Industry Secretary Paul +Channon that Britain was on the verge of a trade war. + He told a meeting of insurance brokers today that Britain +believed a "sensible solution" could be found which would open +Japanese markets to British goods. + Government officials were at pains today to deny that +Britain had set a deadline of three weeks for Japan to promise +similar access to its financial markets to U.K.-based financial +firms as that enjoyed in London by equivalent Japanese firms. + They said that Department of Trade and Industry officials +had said yesterday that the measures against Japanese financial +institutions could be imposed from then but that this did not +necessarily constitute a deadline. + Experts believe Britain would lose out by acting against +Japanese banks, insurance and investment institutions. But +despite the danger of Japanese firms taking their trade +elsewhere in Europe, Howard said he did not expect the move to +backfire. + He said in a radio interview today "it is true that we +benefit from their presence - but they would not want to lose +those advantages. And I am sure they are making their views +plain to the Japanese government on this matter." + Howard, who will also be visiting South Korea before +returning to London on April 11, said his trip to Tokyo was +planned well before the current trade row. + Howard said his talks with Japanese officials would also +include ways of jointly combating financial fraud in global +markets with Japanese officials. This would be done through a +cooperation between national regulatory bodies. + He said a memorandum of understanding for exchanging +information to combat financial fraud would be sought with +Japan on terms similar to one signed last autumn between +Britain and the United States. + REUTER + + + + 3-APR-1987 13:33:25.31 + +usa + + + + + + +F +f1828reute +d f BC-PACIFIC-GAS-<PCG>-PLA 04-03 0103 + +PACIFIC GAS <PCG> PLANT TO BEGIN REFUELING + SAN FRANCISCO, April 3 - Pacific Gas and Electric Co said +its Diablo Canyon Unit 2 nuclear power plant will begin its +first refueling today after about 13 months of operation. + The refueling outage is expected to last about 12 weeks and +will include a variety of maintenance as well as the +replacement of about one-third of Unit 2's fuel, the company +said. + Pacific Gas said Unit 2 generated power about 93.7 pct of +the time during its first year of operation. + Pacific Gas' two Diablo Canyon units generate about 2.2 mln +kilowatts of electricity in full operation. + Reuter + + + + 3-APR-1987 13:34:29.36 +acq +usa + + + + + + +F +f1833reute +d f BC-MID-STATE-<MSSL>,-FIR 04-03 0067 + +MID-STATE <MSSL>, FIRST FEDERAL IN DEAL + OCALA, Fla, April 3 - Mid-State Federal Savings and Loan +Association said it and First Federal Savings and Loan +Association of Brooksville <FFBV> reached a definitive merger +agreement. + As previously announced, Brooksville shareholders will get +cash and stock in exchange for their shares. The transaction is +expected to be completed during the summer 1987. + Reuter + + + + 3-APR-1987 13:34:50.83 +acq +canada + + + + + + +E F +f1835reute +r f BC-memotec-data-complete 04-03 0110 + +MEMOTEC DATA COMPLETES TELEGLOBE ACQUISITION + MONTREAL, April 3 - <Memotec Data Inc> said it completed +the previously announced 488.3 mln dlr acquisition of Teleglobe +Canada from the federal government. + Memotec Data said Teleglobe, which has provided Canada's +overseas telecommunications services since 1950, now becomes +Teleglobe Canada Inc, a unit of Memotec. + Teleglobe president and chief executive Jean-Claude Delorme +will continue in the same post, the company said. + In addition to the sale price, the government will receive +Teleglobe's accumulated cash of 102 mln dlrs and a special 18 +mln dlr dividend, making total proceeds 608.3 mln dlrs. + Reuter + + + + 3-APR-1987 13:37:55.73 + +usa + + + + + + +F +f1839reute +d f BC-CITIZENS-FIRST-BANCOR 04-03 0133 + +CITIZENS FIRST BANCORP <CFB> RECEIVES FINE + GLEN ROCK, N.J., April 3 - Citizens First Bancorp Inc said +its banking subsidiary pleaded guilty to two technical +violations of the Bank Secrecy Act and was fined 2,000 dlrs. + The subsidiary, Citizens First National Bank of New Jersey, +pleaded guilty to two misdemeanors in Federal District Court +for the District of New Jersey. Charges had been brought by the +U.S. Attorney's office. + The company said no additional charges will be brought +against it and that it has instituted additional procedures to +reduce the possibility of future violations. It cooperated with +authorities in the investigation. + The violations occurred on Aug 12, 1982, and May 25, 1984, +when the bank failed to report currency transactions involving +more than 10,000 dlrs. + Reuter + + + + 3-APR-1987 13:40:10.81 +trade +usajapan + + + + + + +F +f1844reute +u f AM-TRADE-AMERICAN 04-03 0100 + +U.S., JAPANESE OPEN TALKS ON SEMICONDUCTORS + WASHINGTON, April 5 - U.S. and Japanese officials meet +tomorrow to try to settle a dispute over semiconductor trade +and to cut short the 300 mln dlr penalty tariffs President +Reagan has ordered imposed on Japanese exports. + But U.S. officials held out little hope that any accord +could be reached before the tariffs of 100 per cent - up from +about five per cent - are to take effect on April 17. + The Customs Bureau last week started to levy a bond on the +Japanese goods that Reagan ordered penalized. The penalties +would be retroactive to March 31. + Reagan said on March 27 when ordering the tariffs that he +hoped the Japanese would soon end their unfair practices in +semiconductor trade and that sanctions could be lifted. + Technical meetings are to be held today and tomorrow, with +meetings at a more senior level scheduled for Thursday and +Friday. Public hearings on the sanctions are set for April 13. + The Japanese aides here for the technical talks include +Shigeru Muraoka, director-general of international trade policy +of the Ministry of International Trade and Industry (MITI), and +Masashi Yamamoto, deputy director-general of the information +and machinery bureau. + Meeting with them will Glen Fukushima, director of the +Japan office of the U.S. Trade Representative's Office, and Jim +Gradoville, of trade representative's office of industry and +services. + The two sides in the Thursday and Friday talks will be +headed by Deputy U.S. Trade Representative Michael Smith and +MITI vice minister Makoto Kuroda. + + Reuter + + + + 3-APR-1987 13:41:26.38 + +usa + + + + + + +F +f1847reute +r f BC-TRIBUNE-<TRB>-FILES-3 04-03 0051 + +TRIBUNE <TRB> FILES 300 MLN DLR SHELF REGISTRATION + CHICAGO, April 3 - Tribune Co said it filed a shelf +registration with the Securities and Exchange Commission for +300 mln dlrs in debt securities. + Underwriters may include Salomon Bros Inc and Merrill +Lynch, it said. Proceeds will be for general needs. + Reuter + + + + 3-APR-1987 13:42:58.60 +acq +usa + + + + + + +F +f1854reute +d f BC-AMERON-<AMN>-ADOPTS-S 04-03 0107 + +AMERON <AMN> ADOPTS SHAREHOLDER RIGHTS PLAN + MONTEREY PARK, Calif., April 3 - Ameron Inc said its board +adopted a rights plan designed to protect shareholders from +potentially unfair takeover tactics. + The plan calls for distribution of one right for each of +its outstanding common shares and each right entitles the +holder to buy one/one-hundredth of a share of newly authorized +Series A Junior Participating cumulative Preferred stock at an +exercise price of 55 dlrs, Ameron said. + It said the rights are exercisable if a group acquires 20 +pct or more of its common stock or announces a tender offer for +30 pct or more of its shares. + Reuter + + + + 3-APR-1987 13:43:34.67 + +uknigeria + + + + + + +RM +f1856reute +u f BC-BRITAIN'S-ECGD-DISCUS 04-03 0102 + +BRITAIN'S ECGD DISCUSSING NEW COVER FOR NIGERIA + LONDON, April 3 - Britain's Export Credits Guarantee +Department (ECGD) is holding talks with Nigeria aimed at +resuming insurance cover for British exporters to Nigeria, the +head of ECGD's international debt division, Gerry Breach, said. + The ECGD suspended cover on Nigeria in 1984 after the +country fell into arrears on payments of insured and uninsured +debts. + Following last week's bilateral accord between Britain and +Nigeria to reschedule the country's insured trade debts, +bankers had hoped that talks would commence on a resumption of +cover. + Breach made his comments in an address to a private meeting +of businessmen, a copy of which was made available to the +press. + Breach noted that for the ECGD to consider "a gradual +introduction of a package of new support" certain criteria would +have to be met. + This would involve the Nigerian economic structural +adjustment program being put into effect and being endorsed by +the International Monetary Fund, the program remaining on +course and continuing to be endorsed by the IMF and a +satisfactory level of acceptance by the Nigerian government of +the ECGD insured short-term trade arrears. + Breach said that these criteria are now beginning to be +satisfied, adding that while the ECGD could not yet formally +announce new cover, it was holding discussions with Nigeria on +priorities for new credits. + He said an announcement would be made "as soon as possible" +on an agreement and the ECGD would create a package for Nigeria +that would include the department's normal range of export +trade support facilities. + British exports to Nigeria exceeded 550 mln stg in 1986. + Breach noted that since cover was removed, the ECGD has +maintained a limited amount of short-term trade cover for +Nigeria, which was backed by letters of credit from the +Nigerian Central Bank. + While the ECGD would initially continue to use this +structure under a new package, it would also hope to expand the +volume of coverage in the short-term area and relax the terms +it is prepared to underwrite towards the commonly accepted +maximum of 180 days. + REUTER + + + + 3-APR-1987 13:44:08.77 +acq +usa + + + + + + +F +f1857reute +d f BC-FCS-LABORATORIES-<FCS 04-03 0062 + +FCS LABORATORIES <FCSI> ENDS MERGER TALKS + TEMPE, Ariz., April 3 - FCS Laboratories said its merger +talks with another unidentified company in the health care +field ended without agreement. + The talks began last August, the company said. + The company also said it will no longer actively seek out +potential merger partners, but will respond to serious +inquiries. + Reuter + + + + 3-APR-1987 13:45:46.93 + +usa + + + + + + +F +f1860reute +u f BC-******IBM-SECRETARY-J 04-03 0091 + +IBM <IBM> NEWLY NAMED SECRETARY DIES IN FIRE + ARMONK, N.Y., APril 3 - International Business Machines +Corp said recently elected secretary, John Manningham, and his +wife, Patricia, died early this morning in a fire at their +Reidgefield, Conn home. + Manningham, 53, began his IBM career in 1959 as a marketing +representative. His election would have been effective July 1. + Tom Irwin is the current secretary. + IBM Chairman John Akers said "this is a great loss to the +IBM Company and to the Manningham's family, friends and +community. + Reuter + + + + 3-APR-1987 13:46:44.30 +trade +ukjapan + + + + + + +C +f1863reute +d f BC-UK-MINISTER-LOOKS-TO 04-03 0106 + +UK MINISTER LOOKS TO EASE TENSION WITH JAPAN + LONDON, April 3 - The U.K. government hopes for a +breakthrough on the deadlock with Japan over trade policies +during next week's visit to Tokyo by Corporate Affairs Minister +Michael Howard, political sources said. + Howard, who leaves for Japan tomorrow, told Reuters he will +try to promote understanding on trade issues during his visit. + Meanwhile, Britain will re-examine a letter from Japanese +Prime Minister Yasuhiro Nakasone promising personal help in +solving the row over a U.K. firm's bid to win a significant +role in Japan's telecommunications market, government sources +said. + Tensions have risen following Britain's decision to arm +itself early with new statutory powers which it says could be +used against certain Japanese financial institutions. + Britain reacted optimistically at first to the letter from +Nakasone to Prime Minister Margaret Thatcher, seeing it as a +signal that he would work towards ensuring a satisfactory +outcome to the bid launched by Cable and Wireless Plc, +government officials said. + But this view has since been clouded by reports from Tokyo +that Nakasone's assurances really constituted little more than +politeness in the face of British anger, they added. + Reuter + + + + 3-APR-1987 13:54:45.70 +trade +usajapan +conable +imfworldbank + + + + +F RM A +f1876reute +u f BC-CONABLE-WARNS-PROTECT 04-03 0082 + +CONABLE WARNS PROTECTIONISM MIGHT SPREAD + By Alver Carlson, Reuters + WASHINGTON, April 3 - World Bank President Barber Conable +expressed concern that trade protectionism, at the heart of a +new showdown between the United States and Japan, might spread +throughout the industrial world. + But in an interview with Reuters, Conable said the action +by the United States to slap tariffs on certain electronic +goods from Japan did not mean the countries were heading for a +full-scale trade war. + Conable said the World Bank has been pressing developing +countries to open their markets, arguing that a free trading +environment increased the possibility of global economic +growth. + "We have, in fact, been making adjustment loans to many +countries in the developing world which have encouraged the +opening of their markets and we want to be sure that the +developed world doesn't close at the same time," he said. + He said the U.S. action against Japan was "a significant +retaliatory step but it did not constitute a basic change in +trade policy." + The interview came just before next week's semi-annual +meetings of the Bank and the International Monetary Fund. + Referring to Brazil's recent interest payments moratorium, +Conable also said the global debt situation was very serious +and must be closely watched. + He said the Bank, which in the past has concentrated on +making loans that assist the basic underpinnings in the +developing world such as dams, roads and sewers, will +increasingly make assistance available for economic reform. + The Bank has increased these loans, in part because of the +debt crisis that has found countries desperately in need of new +funds for balance of payments adjustment and economic reforms +aimed at opening their markets, encouraging foreign investment +and reducing government's role in the economy. + "We're comfortable with adjustment lending, we expect, +however, that it will never reach a majority of our portfolio," +Conable said. + He made clear, however, that adjustment lending would +continue to increase as a proportion of overall Bank lending +for some time. + He noted, "the problem of debt was a severe one and many +countries are asking for adjustment assistance because of the +problem of debt." + Conable, is a a former Republican Congressman from New York +chosen by President Reagan for the Bank position last year. He +is an associate of Treasury Secertary James Baker who launched +the U.S. strategy for shoring up indebted nations in October, +1985 which included a call for increased adjustment lending by +the World Bank. + Conable also said that he expected the result of a major +study of the Bank's organization to be completed in the next +several weeks. + He said the decision to seek a reorganization was based, in +part, on the fact that the Bank had come under fire from the +poorest countries for not doing enough to help and from the +richest countries because of inefficiency. + the reorganization is considered a major initiative by +Conable, and is being closely-watched by the agency's 151 +member-countries as an indication of his management style and +priorities. + "I want to be sure this institution is viewed by those who +must support it as soundly constituted so that it will be +permitted to grow," Conable said. + However, he said "I don't believe there is anything +basically wrong with this institution and I don't believe it +has to have any redefinition of its purpose." + He said, however, that it was apparent that the debt +initiative proposed by Baker has given the Bank a central role +in dealing with the debt crisis. + Conable added that cooperation between the Bank and its +sister agency, the International Monetary Fund, was good and +that he talked often with IMF Managing Director Michel +Camdessus on a variety of issues. + On a personal level, Conable said that he not feel a need +to put his personal stamp on the Bank noting that "I don't have +a particular mission here except to be useful to the +institution and to the process of development." + He added, "so I don't feel a great calling to personalize +the institution." + On the development needs of sub-Sahara Africa, Conable said +that the Bank was constantly reviewing new ways for assisting +the region, noting that half of the recently agreed financing +of 12.4 billion dlrs for Bank's International Development +Association was earmarked for Africa. + Leading industrial nations are expected to consider new +forms of debt relief for the very poorest nations, like those +in the Sub-Sahara, during next week's meetings. + Reuter + + + + 3-APR-1987 13:55:17.71 + +usa + + + + + + +F +f1877reute +r f BC-AMERICAN-SAVINGS-<AMS 04-03 0080 + +AMERICAN SAVINGS <AMSB> SEEKS STATE CHARTER + TACOMA, Wash., April 3 - American Savings Bank F.S.B. said +it applied for a state charter and it intends to change its +depositor insurance coverage to the Federal Deposit Insurance +Corp and to withdraw from coverage by the Federal Savings and +Loan Insurance Corp. + The savings bank also said state chartered institutions +have broader banking powers and the conversion will be in the +best interest of both shareholders and depositors. + Reuter + + + + 3-APR-1987 13:55:26.39 + +usa + + + + + + +F +f1878reute +r f BC-LTV-<QLTV>-UNIT-WINS 04-03 0063 + +LTV <QLTV> UNIT WINS TWO ARMY CONTRACTS + SOUTH BEND, Ind., April 3 - LTV Corp said its AM General +division received two contracts valued at 11.7 mln dlrs from +the U.S. Army to make special equipment kits for Hummer troop +and cargo vehicles. + Deliveries are set for May 1987 through November 1988, the +company said. AM General is part of LTV Missiles and +Electronics Group. + Reuter + + + + 3-APR-1987 13:57:12.03 + +usajapan + + + + + + +F +f1882reute +r f AM-PLANE-BOEING 04-03 0112 + +BOEING SEEKS CAUSE OF JAL ENGINE PROBLEM + SEATTLE, April 3 - Boeing Co. <BA> is trying to find out +what caused an engine brace to snap on one of Japan Air Line's +747-SR jumbo jets, a spokesman for the airplane manufacturer +said. + "We know about the problem and we have provided a service +advisory to operators of 747s," said the spokesman. "We are not +advising any massive inspections at this time." + The advisory alerts operators of the jumbo jets that a +problem has occurred and under what circumstances, but it does +not recommend any action. + "A 'service bulletin' would be sent out if there is +anything they should be concerned about," the spokesman said. + A JAL spokesman in Toyko said inspectors making a routine +check found one of three diagonal braces attaching an engine to +the wing of a 747-SR had snapped due to metal fatigue. + The airlines said it had ordered an inspection of all 11 of +its 747-SR's. The plane is a full-sized jumbo jet that has been +modified slightly to handle short-haul routes in Japan, mainly +between Tokyo and Osaka. + The jetliners have beefed-up landing gear to accommodate a +higher-than-normal number of landings and takeoffs. + Boeing's spokesman said only JAL and All Nippon Airlines +use the 747-SR. JAL took delivery of its first 747-SR in 1973 +and purchased two more last year. He said the braces had been +shipped to a Boeing plant near Seattle where they were being +inspected. + Reuter + + + + 3-APR-1987 13:58:59.52 + +uknigeria + + + + + + +C G T M +f1886reute +d f BC-BRITAIN'S-ECGD-DISCUS 04-03 0101 + +BRITAIN'S ECGD DISCUSSING NEW COVER FOR NIGERIA + LONDON, April 3 - Britain's Export Credits Guarantee +Department (ECGD) is holding talks with Nigeria aimed at +resuming insurance cover for British exporters to Nigeria, the +head of ECGD's international debt division, Gerry Breach, said. + The ECGD suspended cover on Nigeria in 1984 after the +country fell into arrears on payments of insured and uninsured +debts. + Following last week's bilateral accord between Britain and +Nigeria to reschedule the country's insured trade debts, +bankers had hoped that talks would commence on a resumption of +cover. + Breach told a businessmen's meeting that for the ECGD to +consider "a gradual introduction of a package of new support" +certain criteria would have to be met. + This would involve the Nigerian economic structural +adjustment program being put into effect and being endorsed by +the International Monetary Fund, the program remaining on +course and continuing to be endorsed by the IMF and a +satisfactory level of acceptance by the Nigerian government of +the ECGD insured short-term trade arrears. + British exports to Nigeria exceeded 550 mln stg in 1986. + Reuter + + + + 3-APR-1987 14:02:56.83 + +uk + + + + + + +RM F +f1899reute +u f BC-BP-CREDIT-FACILITY-SU 04-03 0115 + +BP CREDIT FACILITY SUBSTANTIALLY OVERSUBSCRIBED + LONDON, April 3 - A five billion dlr credit facility being +arranged for two units of British Petroleum Co Plc <BP.L> +attracted over 15 billion dlrs in syndication but will not be +increased, Morgan Guaranty Ltd said on behalf of Morgan +Guaranty Trust Co of New York, the arranger. + It said that 64 of BP's relationship banks will be joining +the facility, although their participations will be cut back +dramatically. Banks had been invited as lead managers at 200 +mln dlrs, managers at 125 mln and co-managers at 75 mln. + BP will make the final decision on the allotments broadly +based on relationships rather than on the amounts offered. + The facility is being arranged for BP International and BP +North America in conjunction with the company's planned tender +offer for the 45 pct of Standard Oil Co it does not already +own. + Because of the purpose of the facility, Morgan only had +five business days to arrange the facility. As a result, it +carried terms that bankers considered relatively favourable +when compared with those on most other recent credits. The +facility fee, for example, was 1/8 pct compared with the 1/16 +pct BP paid on a recent 1.5 billion dlr refinancing. + REUTER + + + + 3-APR-1987 14:04:13.24 +strategic-metal +spain + + + + + + +C M +f1903reute +u f BC-MINAS-DE-ALMADEN-RAIS 04-03 0113 + +MINAS DE ALMADEN RAISES MERCURY PRICE + MADRID, April 3 - Spain's Minas de Almaden y Arrayanes S.A. +has agreed with Algerian producer ENOF to establish a minimum +price of 300 dlrs per flask for spot mercury sales, Almaden +spokesman Jesus Gallego said. + In response to enquiries from Reuters, he said his company +had raised the minimum price for its spot sales from 240 dlrs +per flask following talks with ENOF. + In a separate press release, the company said that ENOF and +Almaden held talks in Istanbul a week ago with Turkish mercury +producers on ways to improve prices, but Gallego said he was +not in a position to say what action the Turkish companies +would be taking. + Reuter + + + + 3-APR-1987 14:04:52.21 +money-fx +usa + + + + + + +F A RM +f1907reute +u f BC-U.S.-JOBS-DATA-SAID-T 04-03 0099 + +U.S. JOBS DATA SAID TO RULE OUT FED TIGHTENING + By Kathleen Hays, Reuters + NEW YORK, April 3 - A steep drop in goods-producing jobs +detracted from U.S. March non-farm payroll employment and makes +it unlikely that the Federal Reserve will tighten monetary +policy to defend the dollar, economists said. + U.S. March non-farm payroll employment rose 164,000, less +than the gain of 220,000 to 290,000 the financial markets +expected. Manufacturing employment fell 25,000, compared with +February's 50,000 gain, while March construction employment +dropped 45,000 after being unchanged in February. + "The momentum of industrial activity is tapering off as we +end the first quarter," said Stephen Roach of Morgan Stanley +and Co Inc. "This sets the stage for more sluggish growth in +the second and third quarters." + "The Fed will view this as a caution flag on the economy," +he said. "They will not ease as long the dollar is weak, but +clearly they can't tighten." + David Wyss of Data Resources Inc said that the downward +revision in February non-farm payroll employment to 236,000 +from 337,000 means that employment gains in the first quarter +were weaker than expected. + While Wyss left his first-quarter forecast of real U.S. +gross national product growth at 3.5 pct, he said the March +jobs data suggested a downward revision in his second-quarter +growth forecast to 2.5 pct from 2.8 pct. + Bill Sullivan of Dean Witter Reynolds Inc said the average +monthly gain in non-farm jobs in the first quarter was only +237,000, compared with 254,000 in the fourth quarter of 1986. + "There's momentum in first quarter labor force activity, +but less than assumed," he said. "Gains in goods-producing jobs +were subdued at best. This rules out any possibilty of the Fed +tightening for exchange-related purposes." + In March, the average workweek fell back to its January +level of 34.8 hours from 35.0 hours in February. Manufacturing +hours also fell back to their January level, totalling 40.9 +hours in March compared with 41.2 hours in February. + The Commerce Department noted that loss of manufacturing +jobs in March was concentrated in automobile, electrical and +electronic manufacturing. + Robert Brusca of Nikko Securities International said that a +13,000 decline in auto manufacturing employment accounted for +nearly half of the total drop in manufacturing jobs. + Economists said that a build-up in auto inventories +resulting from a steep drop in sales has finally caught up with +the labor force and may point to slower growth ahead. + Most expect an increase in inventories of as much as five +pct to offset a steep four to five pct drop in final sales in +the first-quarter GNP accounts. + Roach said he expects first quarter U.S. GNP to rise two +pct, to be followed by a gain of 1.0-1.5 pct at best in the +second and third quarters. He said the March drop in industrial +activity "is a reasonable response in light of the inordinate +contribution inventory accumulation made to GNP." + Economists said the employment data also suggest weak gains +in industrial production and personal income for March. +They expect only marginal gains, if not small declines, for +these indicators, compared with a February increases of 0.5 pct +in industrial production and 0.9 pct in personal income. + Steve Slifer of Lehman Government Securities said the drop +in March construction employment may also signal a drop in +March housing starts, which rose 2.6 pct in February to 1.851 +million units at an annual rate from 1.804 million units in +January. + The rate of unemployment fell to 6.6 pct, its lowest level +since March 1980, from 6.7 pct in February. But Wyss pointed +out that this resulted from a drop in the labor force, which +fell to 119.2 mln in March from 119.35 mln in February. + "This just means that there were fewer people looking for +work, so the drop in unemployment doesn't mean much," he said. + He said the latest employment report will not concern the +Fed because it does points to GNP growth in the first half of +2.5-3.0 pct, but "it does suggest they can't afford to tighten +to quickly either." + The statistical factors used to smooth out seasonal +fluctuations in the jobs data may have understated March labor +force gains, just as seasonal factors probably overstated them +in January and February, Slifer said, but are consistent with +his forecast of 1.8 pct first quarter GNP growth. + Economic growth remains sluggish, but Silfer does not think +that the Federal Open Market Committee changed policy at their +meeting this week. "At some point they will be more inclined to +ease," he said. For the time being, however, the March +employment report "increases the likelihood they won't tighten, +regardless of the dollar." + + Reuter + + + + 3-APR-1987 14:06:26.28 +acq +usa + + + + + + +F +f1912reute +u f BC-BRISTOL-MYERS-<BMY>-R 04-03 0096 + +BRISTOL-MYERS <BMY> REVIEWING SCIMED MERGER + MINNEAPOLIS, April 3 - SciMed Life Systems Inc <SMLS> said +Bristol-Myers Co is analyzing the pending lawsuit brought +against SciMed by <Advanced Cardiovascular Systems Inc> to +determine whether to consummate its previously announced plans +to merge with SciMed. + The company said its was served the suit in Minneapolis on +March 31, the day after it announced its definitive merger +agreement with Bristol-Myers. + SciMed said the suit, which alleges that SciMed infringed +on Advanced Cardiovascular patents, is without merit. + Reuter + + + + 3-APR-1987 14:07:59.28 + +ukjapan + + + + + + +F +f1919reute +d f BC-UK-SEEKS-PACT-WITH-JA 04-03 0095 + +UK SEEKS PACT WITH JAPAN FOR INFORMATION EXCHANGE + LONDON, April 3 - Corporate Affairs Minister Michael Howard +said he will use a coming trip to Tokyo to seek a memorandum of +understanding between Britain and Japan on the exchange of +information to fight fraud in world financial markets. + He told journalists that he would be seeking an agreement +with Japan similar to one struck last autumn between the U.K. +Department of Trade and Industry, on the one hand, and the +Securities and Exchange Commission (SEC) and the Commodity +Futures Trading Commission on the other. + Market sources have persistently speculated that it was +information passed on to the U.K. By the SEC through their pact +that triggered the DTI's investigations into (Guinness Plc's) +<GUIN.L> takeover of <Distillers Co Plc> last year. + The probe, launched in December, triggered the resignation +of some of Guinness' senior management, including Chairman +Ernest Saunders. + The Trade department, however, has never confirmed this and +has yet to state what its investigation actually concerns. + REUTER + + + + 3-APR-1987 14:08:38.07 +crude +iraqiran + + + + + + +C +f1921reute +d f AM-GULF-IRAQ 04-03 0075 + +IRAQ SAYS ITS FORCES SINK THREE IRANIAN VESSELS + BAGHDAD, April 3 - Iraq said its forces sank three Iranian +boats which tried to approach its disused deep water oil +terminal in the northern Gulf today. + A military spokesman, quoted by the official Iraqi news +agency, said other Iranian boats fled. He did not identify the +vessels. + Iraq's major oil outlets in the northern Gulf were closed +shortly after the war with Iran started in late 1980. + Reuter + + + + 3-APR-1987 14:09:38.75 + +france + + + + + + +RM +f1924reute +r f BC-FRANCE-HLM-LAUNCHES-7 04-03 0083 + +FRANCE HLM LAUNCHES 750 MLN FRANC BOND + PARIS, April 3 - Housing group France HLM is launching a +750 mln French franc 8.40 pct 15-year bond with an issue price +of 95.36 pct and denominated in 5,000 franc units, lead manager +Banque Paribas said. + The issue is being co-led by Credit Lyonnais. + Payment date is April 20 and redemption will be in 12 equal +annual instalments starting after the first three years of the +issue's life. It will be listed in the Official Bulletin (BALO) +on April 6. + REUTER + + + + 3-APR-1987 14:12:09.91 + +usa + + + + + + +F +f1928reute +u f BC-******TEXAS-AIR'S-CON 04-03 0078 + +TEXAS AIR'S <TEX> CONTINENTAL MARCH TRAFFIC UP + HOUSTON, April 3 - Texas Air Corp'S Continental Airlines +said its March 1987 load factor rose to 65.6 pct from 64.3 pct +last year. Available seat miles rose to 5.1 mln from 2.5 mln +and revenues passenger miles rose to 3.3 mln from 1.6 mln + For the year to date, load factor fell to 61.8 pct from +61.9 pct, available seat miles rose to 13.2 mln from 7.3 mln +and revenue passenger miles rose to 8.2 mln from 4.5 mln + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-014.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-014.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-014.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-014.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2029 @@ + + + 7-APR-1987 11:02:35.07 + + + + + + + +E +f1137reute +b f BC-JOHANNESBURG-GOLD-SHA 04-07 0120 + +JOHANNESBURG GOLD SHARES CLOSE MIXED TO FIRMER + JOHANNESBURG, April 7 - Gold share prices closed mixed to +slightly firmer in quiet and cautious trading, showing little +reaction to a retreat in the bullion price back to below 420 +dlrs and a firmer financial rand, dealers said. + Heavyweight Vaal Reefs ended eight rand higher at 398 rand +but Grootvlei eased 40 cents at 16.60 rand, while mining +financials had Gold Fields up a rand at 63 rand despite weaker +quarterly results. Other minings were firm but platinums eased. + Industrials also closed mixed to firmer, the index once +again hitting a new high of 1757 from Friday's 1753 finish. The +overall index also hit a new high of 2188 versus 2179 on +Friday. + REUTER + + + + 7-APR-1987 11:02:40.82 + + + + + + + +TQ +f1138reute +u f BC-NY-SUGAR-11-1100 04-07 0024 + +NY SUGAR 11 1100 + + MAY7 662 OFF 17 + JUL7 678 OFF 15 + SEP7 696 OFF 12 + OCT7 699 OFF 14 + JAN8 UNTRD + MAR8 739 OFF 16 + MAY8 UNTRD + JUL8 780 OFF 3 + + + + + + 7-APR-1987 11:03:03.68 + + + + + + + +CQ TQ +f1140reute +u f BC-NY-COFFEE-11-00 04-07 0026 + +NY COFFEE 11:00 + + MAY7 10200 OFF 4 + JUL7 10390 OFF 10 + SEP7 10580 OFF 25 + DEC7 10900 UNCH + MAR8 11100 UP 50 + MAY8 11300 UP 50 + JUL8 UNTRD + SEP8 UNTRD + + + + + + 7-APR-1987 11:03:30.55 + + + + + + + +CQ LQ +f1143reute +u f BC-peoria-actual-rcpts 04-07 0023 + +PEORIA ACTUAL LIVESTOCK RECEIPTS - USDA + CATTLE HOGS + For April 8 + WEEK AGO 200 2,000 + YEAR AGO 100 2,400 + Reuter + + + + + + 7-APR-1987 11:04:03.63 + + + + + + + +C L +f1145reute +u f BC-feeder-cattle-report 04-07 0106 + +FEEDER CATTLE FUTURES SET NEW HIGHS, TURN MIXED + CHICAGO, April 7 - Feeder Cattle futures advanced 0.20 to +0.30 cent at the start and posted new season's highs in April +through August and October before slipping to trade 0.10 cent +lower to 0.20 higher in latest trade. + Futures ran up to new highs at the start on general demand +prompted by continued strong cattle fundamentals. Posting of +another 10 cent gain in the latest reported average feeder +steer price added to support, traders said. + However, prices retreated on profit-taking following the +lead of other meat pits. Stotler notably sold April on the +decline, they said. + Reuter + + + + 7-APR-1987 11:04:12.58 + + + + + + + +FQ EQ +f1146reute +u f BC-AMEX-CONSOLIDATED-110 04-07 0050 + +AMEX-CONSOLIDATED 1100 ACTIVES + + 364,200 WESTERN DIG 25 7/8 UP 1 1/4 + 230,200 WANG LAB B 15 1/2 UP 1/8 + 223,800 WICKES COS 4 1/8 OFF 1/8 + 190,600 ALZA CP 37 1/2 UP 1 7/8 + 187,900 TEXAS AIR 41 1/2 OFF 1 + + ADVANCES 247 DECLINES 152 + + + + + + 7-APR-1987 11:04:23.94 + + + + + + + +M +f1147reute +b f BC-LME-LEAD-AFT-2ND-RING 04-07 0025 + +LME LEAD AFT 2ND RING 1602 - APR 7 + LAST BUYER SELLER + Cash 308.0 -- -- + 3 Months 301.5 301.0 302.0 + + + + + + 7-APR-1987 11:04:29.67 + + + + + + + +GQ +f1148reute +u f BC-cbt-corn-spreads 04-07 0058 + +CBT CORN SPREADS + APRIL 7 - 1000 hrs cdt + MONTHS LAST DIFFERENCE + Jul/May 3-1/4 over 3-1/2 over + Dec/Jul 12-3/4 over 13 over + Jul/Sep 4-3/4 under 5 under + Sep/May no quote 8-1/4 over + Sep/Dec no quote 8-1/4 under + Dec/Mar8 no quote no quote + May/Dec 16 under 16-1/2 under + Reuter + + + + 7-APR-1987 11:04:47.19 + + + + + + + +FQ EQ +f1150reute +u f BC-NYSE-CONSOLIDATED-110 04-07 0090 + +NYSE-CONSOLIDATED 1100 ACTIVES + +4,969,500 GCA CP 7/32 OFF 1/32 +2,163,900 BELLSOUTH 39 3/8 OFF 1/8 +2,058,500 TEXACO 34 1/8 UP 1/2 +1,152,200 OKLAHO G&E 32 1/2 OFF 3/4 + 939,700 UNITED AIR 65 OFF 3/4 + 929,900 USX CORP 29 5/8 UP 3/8 + 918,100 GEN MOTORS 83 5/8 UP 2 1/8 + 917,500 FORD MOTOR 91 1/4 UP 1 1/8 + 755,700 DELMARVA 30 1/4 OFF 1/8 + 732,200 CAESARS 31 1/4 UP 5/8 + + ADVANCES 636 DECLINES 525 + + + + + + 7-APR-1987 11:05:05.48 + + + + + + + +C L +f1151reute +u f BC-TEXAS-PANHANDLE/W-OKL 04-07 0098 + +TEXAS PANHANDLE/W OKLA FEEDLOT ROUNDUP - USDA + Amarillo, April 7 - Cattle in the panhandle area monday +were 0.50 to 1.50 dlr higher. Trading was very active. + Feedlots reported very good interest and inquiry from +buying sources. Confirmed sales of 22,700 steers and heifers +8,100 head. There were 37,900 head sold for the week to date. + Steers - good and mostly choice 2-3, 70-85 pct choice, +1025-1150 lb 69.00-70.00, late mostly 69.50-70.00. + Heifers - near 350 head mostly choice 2-3 1000 lb 68.25. +Good and mostly choice 2-3 950-100 lb 66.50-68.00, late mostly +67.00-68.00. + Reuter + + + + 7-APR-1987 11:05:17.86 + + + + + + + +CQ +f1152reute +u f BC-MIDWEST-GRAIN-FUTURES 04-07 0061 + +MIDWEST GRAIN FUTURES 11:00 EDT +KANSAS CITY WHEAT + MAY7 274 1/2 UP 1/2 + JUL7 263 1/2 UP 1/2 + SEP7 265 1/2 UP 1/4 + DEC7 270 1/2 OFF 1/4 + MAR8 -- --MINNEAPOLIS WHEAT + MAY7 284 3/4 UP 1 1/4 + JUL7 280 1/4 OFF 1/2 + SEP7 277 UP 1 + DEC7 -- -- + MAR8 -- -- + + + + 7-APR-1987 11:05:28.64 +trade +usa +volcker + + + + +V RM +f1153reute +b f BC-VOLCKER-PUSHES-SPENDI 04-07 0080 + +VOLCKER PUSHES SPENDING CUTS OVER TRADE BILL + WASHINGTON, April 7 - Federal Reserve Board Chairman Paul +Volcker said reducing the federal budget deficit was a more +important goal for Congress than drafting trade legislation. + "Reduce the budget deficit," Volcker responded when asked by +a member of the Senate Banking Committee about trade +legislation priorities. + "If you don't deal with the budget deficit, everything else +you do is going to be counterproductive," he said. + Reuter + + + + 7-APR-1987 11:05:35.43 + + + + + + + +M +f1154reute +u f BC-cbt-metals-registns 04-07 0032 + +CBT METALS REGISTRATIONS - APRIL 7 + AS OF 0945 CDT + SILVER 1,000 OZ 13,943 UNC + 5,000 OZ 203 UNC + GOLD 100 OZ 42 UNC + 3-KG 42 UNC + 1-KG 658 UNC + Reuter + + + + + + 7-APR-1987 11:05:44.09 + + + + + + + +GQ +f1155reute +u f BC-MIDWEST-GRAIN-FUTURES 04-07 0061 + +MIDWEST GRAIN FUTURES 11:01 EDT +KANSAS CITY WHEAT + MAY7 274 1/2 UP 1/2 + JUL7 263 1/2 UP 1/2 + SEP7 265 1/2 UP 1/4 + DEC7 270 1/2 OFF 1/4 + MAR8 -- --MINNEAPOLIS WHEAT + MAY7 284 3/4 UP 1 1/4 + JUL7 280 1/4 OFF 1/2 + SEP7 277 UP 1 + DEC7 -- -- + MAR8 -- -- + + + + 7-APR-1987 11:05:53.61 + + + + + + + +GQ +f1156reute +u f BC-cbt-soybean-spreads 04-07 0074 + +CBT SOYBEAN SPREADS + APRIL 7 - 1000 hrs cdt + MONTHS LAST DIFFERENCE + May/Jul 1 under 1 under + Jul/Aug even even + Sep/Nov 1-1/2 under 2-1/2 under + May/Nov 2-1/2 over 2-1/4 over + Jul/Nov 3-1/2 over 3-1/2 over + Nov/Jan 6-3/4 under 6-3/4 under + Aug/Sep no quote 5 over + Mar/May8 no quote no quote + Jan/Mar8 no quote no quote + Reuter + + + + 7-APR-1987 11:06:07.52 + + + + + + + +GQ +f1157reute +u f BC-CBT-11-01-EDT 04-07 0105 + +CBT 11:01 EDT +WHEAT +MAY7 288 UP 1 3/4 +JUL7 273 UP 1/4 +SEP7 273 1/2 UP 1/2 +DEC7 279 UP 1 +MAR8 278 1/4 UP 1 +CORN +MAY7 159 3/4 UP 1 1/2 +JUL7 163 UP 1 1/4 +SEP7 167 1/2 UP 1 1/4 +DEC7 176 UP 1 1/4 +MAR8 183 UP 1 1/4 +OATS +MAY7 150 UNCH +JUL7 138 OFF 1/2 +SEP7 128 1/4 UNCH +DEC7 134 1/2 UP 1/2 +MAR8 UNTRD +BEANS +MAY7 501 1/4 UP 1 1/2 +JUL7 502 1/4 UP 2 +AUG7 502 1/2 UP 3 +SEP7 497 UP 3 +NOV7 498 3/4 UP 2 3/4 +JAN8 505 1/4 UP 2 3/4 +MEAL +MAY7 1456 UP 3 +JUL7 1457 UP 6 +AUG7 1455 UP 5 +SEP7 UNTRD +OCT7 1455 UP 4 +OIL +MAY7 1554 UP 11 +JUL7 1589 UP 11 +AUG7 1605 UP 10 +SEP7 1620 UP 9 +OCT7 1635 UP 10 + + + + + + 7-APR-1987 11:06:13.18 + + + + + + + +C G +f1158reute +u f BC-cbt-registrations 04-07 0063 + +CBT REGISTRATIONS - APRIL 7 + AS OF 0945 CDT + SOYOIL 7,099 UNC + SILVER 1,000 OZ 13,943 UNC + 5,000 OZ 203 UNC + GOLD 100 OZ 42 UNC 3-KG 42 UNC 1-KG 658 UNC + CERTIFICATES OUTSTANDING + SOYBEAN MEAL 0 UNC + CENTRAL 0 + MID-SOUTH 0 + MISSOURI 0 + EASTERN IOWA 0 + NORTHEAST 0 + NORTHERN 0 + Reuter + + + + + + 7-APR-1987 11:06:16.90 + + + + + + + +L +f1159reute +u f BC-SIOUX-FALLS-CATTLE-UP 04-07 0044 + +SIOUX FALLS CATTLE UP 0.50 DLR - USDA + sioux falls, april 7 - slaughter cattle rose 0.50 dlr in +active trade, the usda said. + stees - choice 2-4 1100-1400 lbs 66.00-67.00. + heifers - load choice 3 near 1225 lbs 66.50. choice 2-4 +950-1125 lbs 64.00-66.00. + Reuter + + + + 7-APR-1987 11:06:31.29 + + + + + + + +GQ +f1161reute +u f BC-CME-11-01--EDT 04-07 0053 + +CME 11:01 EDT + +L-CATTLE +APR7 69.57 UP 0.17 +JUN7 64.92 OFF 0.10 +AUG7 60.75 OFF 0.12 +F-CATTLE +APR7 69.00 OFF 0.10 +MAY7 68.05 OFF 0.17 +AUG7 66.50 UP 0.10 +HOGS +APR7 50.10 UP 0.28 +JUN7 48.75 UP 0.28 +JUL7 47.25 UP 0.38 +BELLIES +MAY7 66.15 OFF 0.25 +JUL7 64.70 OFF 0.15 +AUG7 61.65 UP 0.05 +FEB8 56.00 UP 0.40 + + + + + + 7-APR-1987 11:06:39.38 + + + + + + + +GQ +f1162reute +u f BC-cbt-soyoil-report 04-07 0060 + +CBT SOYBEAN OIL SPREADS + APRIL 7 - 1000 hrs cdt + MONTHS LAST DIFFERENCE + May/Jul 0.34 under 0.35 under + Jul/Aug 0.16 under 0.17 under + Jul/Dec 0.78 under 0.77 under + Aug/Sep 0.16 under 0.16 under + May/Aug no quote 0.52 under + May/Dec no quote 1.12 under + Dec/Jan no quote no quote + Reuter + + + + 7-APR-1987 11:06:45.97 + + + + + + + +MQ +f1163reute +u f BC-NY-COMEX-ALUMINUM-11- 04-07 0040 + +NY COMEX ALUMINUM 11:01 + LAST CHANGE +APR7 UNTRD +MAY7 6150 UNCH +JUN7 UNTRD +JUL7 UNTRD +SEP7 UNTRD +DEC7 UNTRD +JAN8 UNTRD +FEB8 UNTRD +MAR8 UNTRD +MAY8 UNTRD +JUL8 UNTRD +SEP8 UNTRD +DEC8 UNTRD +JAN9 UNTRD + + + + + + 7-APR-1987 11:06:50.37 + + + + + + + +LQ +f1164reute +u f BC-FLASH-SIOUX-FALLS-HOG 04-07 0027 + +FLASH SIOUX FALLS HOGS UP 1.75 DLR - USDA + sioux falls, april 7 - barrows and gilts rose 1.75 dlr in +active trade, the usda said. us 1-3 220-250 lbs 51.75-52.00. + Reuter + + + + 7-APR-1987 11:06:58.55 + + + + + + + +MQ CQ +f1165reute +u f BC-NY-COMEX-GOLD-11-01 04-07 0036 + +NY COMEX GOLD 11:01 + APR7 4199 UP 14 + MAY7 UNTRD + JUN7 4237 UP 11 + AUG7 4288 UP 15 + OCT7 4327 UP 10 + DEC7 4370 UP 9 + FEB8 4415 UP 8 + APR8 UNTRD + JUN8 UNTRD + AUG8 UNTRD + OCT8 UNTRD + DEC8 UNTRD + FEB9 UNTRD + + + + + + 7-APR-1987 11:07:09.81 + + + + + + + +FQ +f1167reute +u f BC-NASDAQ-COMP-11-01 04-07 0007 + +NASDAQ COMP 11:01 +COMP 437.49 OFF 0.29 + + + + + + 7-APR-1987 11:07:18.11 + + + + + + + +GQ +f1168reute +u f BC-cbt-soymeal-spreads 04-07 0052 + +CBT SOYBEAN MEAL SPREADS + APRIL 7 - 1000 hrs cdt + MONTHS LAST DIFFERENCE + May/Jul 0.10 over 0.10 over + Jul/Aug no quote even + Jul/Dec no quote 1.40 under + Oct/Dec no quote 1.40 under + Dec/Jan no quote 0.60 under + Oct/Jan no quote 2.00 under + Reuter + + + + 7-APR-1987 11:07:22.81 + + + + + + + +C G L M T RM +f1169reute +b f BC-LONDON-DOLLAR-FLUCTUA 04-07 0027 + +LONDON DOLLAR FLUCTUATIONS 1600 - APRIL 7 + STG 1.6177/82 + DMK 1.8235/45 + SFR 1.5120/30 + DFL 2.0578/88 + FFR 6.0650/0700 + YEN 145.20/30 + LIT 1299/1301 + BFC 37.76/81 + + + + + + 7-APR-1987 11:07:28.63 + + + + + + + +G +f1170reute +r f BC-PRSFRENCH-GRAINS---AP 04-07 0069 + +PRSFRENCH GRAINS - APR 07 + Prices in ff per 100 kilos. Cumulative monthly supplements of +17.40 ff per ton to be added from august 1986 onwards. + Soft wheat- dlvd ROUEN APR 130.50 PAID, MAY 130.25 PAID. +LA PALLICE APR/MAY 129.50 BYR. DUNKIRK APR 129.50 PAID. + SOFT WHEAT - EX REGION EURE ET LOIR APR/OCT 126 PAID. +CHALONS/MODANE APR/JUNE 122 BYR. + SOFT WHEAT - FOB REGION METZ APR/JUNE 127 BYR/127.50 SLR. + Feed barley - dlvd ROUEN APR/MAY 118.50 BYR/119 SLR. + FEED BARLEY - EX REGION EURE ET LOIR APR/MAY 114.50 SLR. +CHALONS/MODANE APR/MAY 112.50 BYR. + FEED BARLEY - FOB REGION METZ APR/MAY 116 BYR. + CORN - DLVD BAYONNE APR/JUNE 132.50 BYR. BORDEAUX APR/JUNE +134 BYR. TONNAY/CHARENTES APR/JUNE 131.75 BYR. + CORN - EX REGION EURE ET LOIR 126 TO 127 NOMINAL. MARNE +APR/JUNE 127 NOMINAL. + CORN - FOB REGION METZ APR/JUNE 132.50 BYR. CREIL +APR/MAY/JUNE 128 PAID, JUL/AUG/SEP 129/129.50 PAID. REUTER + + + + + + 7-APR-1987 11:07:45.56 +acq +usa + + + + + +F +f1172reute +d f BC-AMERICAN-SPORTS-ADVIS 04-07 0071 + +AMERICAN SPORTS ADVISORS <PIKS> TO LIQUIDATE + CARFLE PLACE, N.Y., April 7 - American sports Advisors Inc +said it has agreed to sell its sports handicapping and +publication business to Professor Enterprises for about +1,650,000 dlrs and intends to liquidate after closing. + The transaction is subject to shareholder approval. + Professor is owned by American Sports president Edward C. +Horowitz and Mike Warren, it said. + Reuter + + + + 7-APR-1987 11:08:01.92 + + + + + + + +C T +f1173reute +u f BC-ny-coffee-opg-report 04-07 0106 + +N.Y. COFFEE FUTURES SLIGHTLY HIGHER, THIN EARLY + NEW YORK, April 7 - N.Y. coffee futures were marginally +firmer midmorning, trading in ranges of no more than 0.50 cent. + May was up 0.16 cent at 102.20 cents at 1052 hrs EST, in a +range of 102.00 to 102.50 cents. July was up 0.15 at 104.15 +cents in a 35-point range. + Traders said reports that the U.S. State Department does +not forsee a meeting with Brazil prior to the next +International Coffee Organization session in September did not +affect the market as the news was expected. + Operators are watching the cash market for indications of +roaster interest or producer selling. + Reuter + + + + 7-APR-1987 11:08:12.19 + +uk +thatcher + + + + +V +f1174reute +u f AM-BRITAIN 1STLD 04-07 0124 + +THATCHER FIRM AS PRESSURE MOUNTS FOR ELECTIONS + By Colin McIntyre, Reuters + LONDON, April 7 - As pressure mounted on British Prime +Minister Margaret Thatcher to call a June election, she said +today that the decision on when to go to the county was hers +and hers alone. + She was speaking to parliament after senior members of the +ruling Conservative Party urged her to call elections due in +June 1988 a year early in the wake of two more opinion polls +giving her party a commanding lead. + Asked by a Conservative back-bencher for an assurance that +the decision was hers alone, and did not depend on "media hype, +pressure and speculation," she replied: "The date of the next +election will be decided by Downing Street, not Fleet Street." + Downing Street is the Prime Minister's official residence, +Fleet Street the traditional home of the British national +press. + A Harris poll for the breakfast-time program TV-AM gave the +Tories 43 pct of the vote, representing a majority of 132 seats +in parliament, their biggest lead since the party's landslide +victory in the 1983 elections. + In The Times of London, a MORI poll gave the Tories a 92 +seat majority. It was the sixth poll to show the ruling party +with a big lead over the opposition Labour Party and the +fast-improving centrist Alliance. + Leading the chorus urging Thatcher to go to the polls in +June, Sir Marcus Fox, vice-chairman of the influential 1922 +committee of Conservative back-benchers, said: "I have always +felt that it would be June, and this reinforces my view. + "I always thought June was right. We have got most of our +legislation through and to go beyond that I do not think would +be in the national interest." + Another Tory back-bencher, Anthony Beaumont-Dark, said: "I +have always been an October man, but I think it would be good +to get it out of the way now." + Their comments came as government officials dismissed +speculation about a snap election to coincide with local polls +in May, timed to reap maximum advantage from the recent +popularity surge, Thatcher's successful trip to Moscow and +Labour's current popularity slump. + Calls for a May poll were also prompted by Tory concern +over a steady advance by the Alliance, and the possibility that +if it continues it could rob the Conservatives of an overall +majority in parliament. + Today's MORI poll showed an Alliance gain of eight points +over the past month in around 100 key marginal seats where the +outcome of the next election is likely to be decided. + Reuter + + + + 7-APR-1987 11:08:21.35 + +ukportugal + + + + + +F +f1175reute +d f BC-PORTUGUESE-AIRLINE-CO 04-07 0122 + +PORTUGUESE AIRLINE CONFIRMS AIRBUS A310 ORDER + LONDON, April 7 - Portugal's "flag carrier" airline TAP has +confirmed an order for three Airbus Industrie <AINP.PA> +A310-300 passenger aircraft, British Aerospace Plc <BAEL.L> +(BAe), one of four shareholders in the international Airbus +consortium, said. + BAe said in a statement TAP had also taken options on +another two Airbus aircraft, either the existing A310-300 +medium range craft or the long-range four-engined A340 which +Airbus hopes to launch in 1992, depending on the airline's +needs. + BAe said the firm order confirmed a commitment taken by TAP +in January. Details of the value of the contract, delivery +dates or which engine would power the aircraft were not +available. + Reuter + + + + 7-APR-1987 11:08:49.00 + + + + + + + +G +f1177reute +r f BC-LONDON-EC-BARLEY/WHEA 04-07 0053 + +LONDON EC BARLEY/WHEAT CLOSING - APR 7 + BARLEY WHEAT + May 114.65 May 122.80 + Sep 99.85 Jul 125.50 + Nov 102.45 Sep 101.20 + Jan 105.05 Nov 103.40 + Mar 107.50 Jan 106.35 + May 109.40 Mar 108.75 + May 111.40 + ALL VALUES + SALES + BARLEY 24 + WHEAT 197 + + + + + + 7-APR-1987 11:09:35.39 + + + + + + + +LQ +f1178reute +b f BC-FLASH-ST-PAUL-HOGS-UP 04-07 0030 + +FLASH ST PAUL HOGS UP 1.00/2.00 DLRS - USDA + st paul, april 7 - barrow and gilt prices rose 1.00 to 2.00 +dlrs in very active trade, the usda said. us 1-3 220-260 lbs +51.50-52.00. + Reuter + + + + 7-APR-1987 11:09:39.16 +money-fx + +volcker + + + + +V +f1179reute +f f BC-******VOLCKER-SAYS-RE 04-07 0011 + +******VOLCKER SAYS RESTRICTIVE MONETARY POLICY WOULD HURT INVESTMENT +Blah blah blah. + + + + + + 7-APR-1987 11:09:46.42 + + + + + + + +M +f1180reute +b f BC-LME-ZINC-AFT-2ND-RING 04-07 0025 + +LME ZINC AFT 2ND RING 1607 - APR 7 + LAST BUYER SELLER + Hg Cash -- -- -- + 3 Months -- 456.0 457.0 + + + + + + 7-APR-1987 11:09:52.58 + + + + + + + +MQ +f1181reute +u f BC-ny-metals-est-vols 04-07 0035 + +N.Y. METALS FUTURES ESTIMATED VOLUMES- APRIL 7 + Time 10.00 11.00 + Silver 8000 13000 + Copper 900 1700 + Gold 4500 8000 + Aluminum 0 1 + Palladium ---- 190 + Platinum ---- 2226 + Reuter + + + + + + 7-APR-1987 11:10:01.59 + + + + + + + +C T +f1182reute +u f BC-ny-sugar-mids-report 04-07 0102 + +WORLD SUGAR FUTURES TUMBLE IN EARLY TRADING + NEW YORK, April 7 - World sugar futures tumbled early when +sell stops were triggered at 6.60 and 6.55 cents basis the spot +contract, traders said. + Spot May dropped 0.27 cent to 6.52 cents a lb. It opened at +6.72 cents. + Trade houses worked both sides of the market, analysts +said. + The decline may have been a continued reaction to the +market's inability yesterday to breach resistance around 6.93 +cents basis May, which unsettled traders, analysts said. + The market should draw support from buying tenders slated +for tomorrow and Saturday, they said. + Reuter + + + + 7-APR-1987 11:10:11.23 + + + + + + + +RM C M +f1183reute +u f BC-GOLD-AND-SILVER-CLOSE 04-07 0111 + +GOLD AND SILVER CLOSE OFF HIGHS IN ZURICH + ZURICH, April 7 - Gold and silver closed off the day's +highs on profit-taking, but silver, which continued to set the +pace, remained well up on yesterday's close, dealers said. + Underlying speculative demand for silver remained strong +but profit-taking eroded the gains, taking the metal off +indicated highs at around 6.80 dlrs to close at 6.64/66 dlrs an +ounce. Yesterday's close was 6.52/54 dlrs. + Some investors were noted selling gold and switching into +silver. This combined with profit-taking to push gold down to a +close of 418.50/419.00 dlrs from its opening 421.80/422.20 and +yesterday's 421.50/422.00. + Dealers said it was unclear if the silver rally had peaked +or if fresh gains could be achieved in New York. + "A lot depends on the Dow Jones index," one dealer commented. +"Further gains in stock prices would take away a lot of the +support for silver and gold." + Platinum ended 50 cents higher at 563/567 dlrs. + REUTER + + + + 7-APR-1987 11:10:21.78 + +swedenusa + + + + + +F +f1184reute +d f BC-SWEDEN'S-ERICSSON-WIN 04-07 0081 + +SWEDEN'S ERICSSON WINS U.S. ORDER + STOCKHOLM, April 7 - Sweden's Telefon AB L.M. Ericsson +<ERIC.ST> said it has won its third contract from U.S. West Co +Inc <WST> for digital exchange equipment to be supplied in the +state of Idaho over the next five years. + No financial details were available. The company said the +contract provided for the replacement of more than 50 older +exchanges run by <Mountain Bell>, one of U.S. West's three +operating companies, with Ericsson's AXE system. + Reuter + + + + 7-APR-1987 11:10:24.80 + + + + + + + +LQ CQ +f1185reute +b f BC-FLASH-OMAHA-HOGS-UP-1 04-07 0026 + +FLASH OMAHA HOGS UP 1.00 DLR - USDA + omaha, april 7 - barrow and gilt prices rose 1.00 dlr in +active trade, the usda said. us 1-3 220-260 lbs 51.00-51.50. + Reuter + + + + 7-APR-1987 11:10:27.07 + + + + + + + +RM C +f1186reute +u f BC-BANK-OF-ENGLAND-STERL 04-07 0016 + +BANK OF ENGLAND STERLING INDEX - CLOSING APRIL 7 + 72.3 AFTER NOON 72.3 + (PREVIOUS CLOSE 72.4 ) + + + + + + 7-APR-1987 11:11:03.67 + + + + + + + +C G +f1188reute +u f BC-cbt-wheat-opg-report 04-07 0130 + +CBT WHEAT FUTURES OPEN FIRMER, SET NEW HIGHS + CHICAGO, April 7 - CBT wheat futures opened firmer to again +set new contract highs in new crop, then back off those highs +to hold gains of 1-1/4 cents per bushel in May, with new crop +July unchanged in light early dealings. + Steady speculative buying after yesterday's strong close +kept the chart picture very bullish and supported initial +values, traders said. + Rumors that exporters are planning to ship SRW wheat out of +Toledo and/or Chicago, further tightening already low +deliverable stocks, kept May firm relative to new crop months, +they added. + However, the rally failed to follow-through due to the lack +of confirmed export sales of significant quantities of U.S. +wheat so far this week, as some traders expected. + + Reuter + + + + 7-APR-1987 11:11:10.86 + + + + + + + +RM +f1189reute +u f BC-DOLLAR-CLOSES-LITTLE 04-07 0103 + +DOLLAR CLOSES LITTLE CHANGED IN FRANKFURT + FRANKFURT, April 7 - The dollar closed virtually unchanged +from yesterday's finish, but near the day's high after another +extremely quiet session. + With the G-5 meeting in Washington ahead of this week's IMF +interim committee, traders remained reluctant to open any large +positions. Towards the end of the day the dollar firmed after +failing earlier to hold beneath 1.82 marks. Some dealers said +Senate testimony from Fed Chairman Paul Volcker also lent +support. + The dollar closed at 1.8265/75 marks after opening at +1.8200/15 and closing yesterday at 1.8260/70. + Volcker said that a further sizeable dollar decline could +be counter-productive, and that exchange rate adjustments have +been enough to narrow the U.S. Trade deficit. + Such remarks in the past might have moved the dollar +sharply, today they only pushed it up 20 or 30 basis points +when it was already firming for technical reasons. + The dollar in any case held in a narrow range today, +trading early in the morning just below 1.82 marks and rising +to a high of 1.8270. + Dealers said they were awaiting comments after the G-5 +meeting from U.S. Treasury Secretary James Baker. + Looking slightly further ahead, the market is awaiting U.S. +February trade data, due on April 14. + Another set of disappointing figures could push the dollar +below its recent 1.80-85 mark range if there have been no +supportive statements from G-5 officials in Washington in the +meantime, dealers said. + Sterling closed slightly easier at 2.950/954 marks, after +opening at 2.951/955 and closing yesterday at 2.954/958. + The pound has been buoyed by expectations the ruling +Conservatives will win the next U.K. Election. + But dealers said sterling now looks high against the mark +and room for further gains must be limited. + Many dealers believe sterling will enter the EMS joint +float after a U.K. Election. In this case, its ceiling could +well be at or near 2.95 marks, dealers said. + The yen closed at 1.2550/70 marks per 100 after closing +yesterday at 1.2490/2510, and the Swiss franc firmed to +120.55/70 marks per 100 from 120.10/50. + The French franc ended unchanged at 30.04/07 marks per 100. + REUTER + + + + 7-APR-1987 11:11:20.04 + + + + + + + +YQ +f1190reute +u f BC-U.S.-POSTED-PRICES-RE 04-07 0104 + +U.S. POSTED PRICES REPORT (DLRS/BBL) + COMPANY....EFFECTIVE DATE..W.T.I.....W.T.S...LT LOUISIANA + AMOCO.......2/23/87........17.50.....16.60....17.85 + ARCO........4/06/87........18.00.....17.10....18.35 + CHAMPLIN....1/12/87........17.50.....17.00....17.85 + CHEVRON.....2/04/87... ....17.50.....17.50....17.85 + CITGO.......3/12/87........17.50.....17.50....17.85 + COASTAL.....3/12/87........17.50.....16.60......... + CONOCO......3/09/87........17.50.....16.60....17.85 + DIAMOND.SH..3/12/87........17.50................... + EXXON.......3/12/87........17.50.....16.60....17.85 + MARATHON....3/12/87........17.50.....17.50....17.85 + COMPANY....EFFECTIVE DATE..W.T.I.....W.T.S....LT LOUISIANA + MOBIL......2/10/87.........17.50.....17.50....17.85 + MURPHY.....3/12/87.........17.50.....17.50....17.85 + PERMIAN....3/12/87.........17.50.....17.50....17.85 + PHILLIPS...3/12/87.........17.50.....17.50......... + SHELL......1/20/87.........18.11.....17.23....17.89 + SUN........3/12/87.........17.50.....17.50....17.85 + TEXACO*....4/01/87............................17.85 + UNION......3/12/87.........17.50.....17.50....17.85 + * Deleted West Texas-New Mexico postings. + + + + + + 7-APR-1987 11:12:10.97 + + + + + + + +C L +f1193reute +u f BC-live-hog-report 04-07 0127 + +LIVE HOG FUTURES HIGHER EARLY + CHICAGO, April 7 - Live Hog futures ran up for gains of +0.57 to 0.07 cent in eary trade paced by April and June. + Fairly active demand reflected strength in cash hogs and +the continued discount of futures to cash. The start of +fieldwork limited farmer movement of hogs to market and +prompted packers to bid up for hogs. Mostly steady to firm cash +pork products added to support, traders said. + However, prices slipped from the highs in latest trade as +commercial profit-taking developed. Some selling was also +attributed to expectations that cash ham prices will be falling +soon on a seasonal basis, they said. + Thomson and RBH bought while Packers Trading and Refco +sold. Stotler spread long June/short April, they added. + Reuter + + + + 7-APR-1987 11:12:32.96 + + + + + + + +GQ +f1194reute +u f BC-MIDWEST-GRAIN-FUTURES 04-07 0060 + +MIDWEST GRAIN FUTURES 11:10 EDT +KANSAS CITY WHEAT + MAY7 274 1/2 UP 1/2 + JUL7 263 1/2 UP 1/2 + SEP7 265 1/2 UP 1/4 + DEC7 270 1/2 OFF 1/4 + MAR8 -- --MINNEAPOLIS WHEAT + MAY7 285 UP 1 1/2 + JUL7 280 3/4 UNCH + SEP7 277 UP 1 + DEC7 -- -- + MAR8 -- -- + + + + 7-APR-1987 11:12:47.66 + + + + + + + +RM +f1196reute +u f BC-LONDON-LIFFE-YEN-CLOS 04-07 0024 + +LONDON LIFFE YEN CLOSE 1610 - APR 7 + MTH LAST HIGH LOW PR.SET + Jun 6918 6928 6918 6878 + Sep 6964 6964 6962 6923 + + + + + + 7-APR-1987 11:12:56.28 + + + + + + + +RM +f1197reute +u f BC-LONDON-LIFFE-EURODOLL 04-07 0064 + +LONDON LIFFE EURODOLLAR CLOSE 1610 - APR 7 + MTH LAST HIGH LOW PR.SET + Jun 9333 9334 9330 9336 + Sep 9326 9328 9325 9330 + Dec 9318 9319 9317 9322 + Mar 9304 9305 9300 9308 + Jun 9284 9285 9283 9288 + Sep 9262 9262 9260 9267 + Dec 9240 9240 9238 9245 + Mar 9219 9219 9218 9224 + + + + + + 7-APR-1987 11:13:07.76 + + + + + + + +GQ +f1198reute +u f BC-CBT-11-10-EDT 04-07 0108 + +CBT 11:10 EDT +WHEAT +MAY7 287 1/2 UP 1 1/4 +JUL7 273 UP 1/4 +SEP7 273 1/2 UP 1/2 +DEC7 279 1/4 UP 1 1/4 +MAR8 278 1/4 UP 1 +CORN +MAY7 160 UP 1 3/4 +JUL7 163 1/2 UP 1 3/4 +SEP7 168 1/4 UP 2 +DEC7 176 3/4 UP 2 +MAR8 183 1/4 UP 1 1/2 +OATS +MAY7 149 1/2 OFF 1/2 +JUL7 138 OFF 1/2 +SEP7 128 3/4 UP 1/2 +DEC7 134 UNCH +MAR8 UNTRD +BEANS +MAY7 501 1/4 UP 1 1/2 +JUL7 502 1/4 UP 2 +AUG7 502 1/2 UP 3 +SEP7 497 1/2 UP 3 1/2 +NOV7 499 UP 3 +JAN8 505 1/2 UP 3 +MEAL +MAY7 1455 UP 2 +JUL7 1455 UP 4 +AUG7 1455 UP 5 +SEP7 1458 UP 7 +OCT7 1457 UP 6 +OIL +MAY7 1556 UP 13 +JUL7 1591 UP 13 +AUG7 1608 UP 13 +SEP7 1623 UP 12 +OCT7 1635 UP 10 + + + + + + 7-APR-1987 11:13:21.62 + + + + + + + +F +f1200reute +f f BC-******HONEYWELL-BULL 04-07 0013 + +******HONEYWELL BULL INTRODUCES HIGH PERFORMANCE COMPUTERS FOR MEDIUM, LARGE FIRMS +Blah blah blah. + + + + + + 7-APR-1987 11:13:32.95 + + + + + + + +C L +f1201reute +u f BC-PORK-BELLY-FUTURES-ST 04-07 0128 + +PORK BELLY FUTURES START HIGHER, THEN EASE + CHICAGO, April 7 - Pork belly (bacon) futures ran up for +gains of 0.55 to 0.30 cent at the start and then eased to trade +0.15 cent lower to 0.15 higher in early dealings. + Active local carryover demand and mixed commission house +buying lifted futures at the start. Higher cash hog markets on +light runs and spillover from other meat pits prompted support, +traders said. + However, locals turned sellers along with Saul Stone and +Paine Webber and prices turned mostly lower. Trimming of gains +in other pits and expectations of possibly negative out of town +storage report this afternoon weighed on the market. Guesses on +the report ranged from in 1.0 to 2.25 mln lbs with most +indications on the high side, they noted. + Reuter + + + + 7-APR-1987 11:13:39.69 + + + + + + + +L +f1202reute +u f BC-miss-direct-hogs 04-07 0079 + +MISSOURI DIRECT HOGS UP 1.00-1.50 DLR - USDA + JEFFERSON CITY, April 7 - Barrow and gilts in the east and +west were 1.00 to 1.50 dlr higher than monday's midsession. Top +50.50 dlrs per cwt. + EAST WEST +U.S. 1-2 210-250 LB 49.50-50.50 49.50-50.50 +U.S. 1-3 210-250 LB 49.50-50.50 49.50-50.50 +U.S. 1-2 200-210 LB 48.50-49.50 48.50-49.50 + SOWS - steady/up 2.00 dlrs. Top 46.00 dlrs. +US 1-3 300-500 lb 42.00-43.00, over 500 lb 43.00-46.00 dlrs. + Reuter + + + + 7-APR-1987 11:14:21.32 + + + + + + + +RM +f1205reute +u f BC-LOMDON-LIFFE-STERLING 04-07 0064 + +LOMDON LIFFE STERLING-DP CLOSE 1612 - APR 7 + MTH LAST HIGH LOW PR.SET + Jun 9071 9079 9070 9078 + Sep 9096 9104 9096 9104 + Dec 9051 9056 9051 9051 + Mar 9089 9097 9089 9098 + Jun 9076 9076 9076 9083 + Sep 9055 9055 9055 9061 + Dec 9055 9055 9055 9061 + Mar 9027 9027 9027 9030 + + + + + + 7-APR-1987 11:14:26.83 + + + + + + + +RM +f1206reute +u f BC-LONDON-LIFFE-STERLING 04-07 0038 + +LONDON LIFFE STERLING CLOSE 1612 - APR 7 + MTH LAST HIGH LOW PR.SET + Jun 16100 16100 16100 16085 + Sep --- --- --- 15985 + Dec --- --- --- 15885 + Mar --- --- --- 15784 + + + + + + 7-APR-1987 11:14:36.23 +money-fx +usa +volcker + + + + +V RM +f1207reute +b f BC-VOLCKER-SEES-TIGHT-PO 04-07 0076 + +VOLCKER SEES TIGHT POLICY HURTING INVESTMENT + WASHINGTON, April 7 - Federal Reserve Board Chairman Paul +Volcker said a restrictive monetary policy would be damaging to +investment and that a better course would be to restrain +spending. + "A restrictive monetary policy would hit investment. You +don't want to put interest rates up unless you have to," Volcker +told the Senate Banking Committee. + "That is not a constructive way to proceed," he said. + Volcker said that given a choice between squeezing the +budget deficit or squeezing investment, he would favor +squeezing the budget deficit. + In response to a question about banks, Volcker said he +would be pleased if Congress decided to give banks a tax +writeoff as an incentive for them to take greater reserves +against loans to debtor countries. + "If you give a tax writeoff for reserving against loans, +then we will see more reserving and that would make me happy," +Volcker told Committee Chairman Sen William Proxmire (D-Wisc). + Reuter + + + + 7-APR-1987 11:14:55.96 + +usa + + + + + +F +f1209reute +d f BC-REUTERS-<RtrSY>-UNIT 04-07 0108 + +REUTERS <RtrSY> UNIT COMPLETES TRADING SYSTEM + NEW YORK, April - Rich Inc, a wholly-owned subsidiary of +Reuters Holdings PLC of London, said it completed installation +of a 20 mln dlr trading system for Merrill Lynch and Co Inc +<MER> in New York. + The company said its Composite Information System was +designed and installed for Merrill Lynch in the investment +firm's World Financial Center offices in downtown Manhattan. + The system, which offers access to financial news, in-house +computers, commercial television and other services, includes +479 equity positions, 614 in the debt area and 152 municipal +markets positions, the company said. + Reuter + + + + 7-APR-1987 11:15:52.09 + + + + + + + +RM +f1211reute +u f BC-LONDON-LIFFE-D.MARK-C 04-07 0025 + +LONDON LIFFE D.MARK CLOSE 1614 - APR 7 + MTH LAST HIGH LOW PR.SET + Jun --- --- --- 5507 + Sep --- --- --- 4885 + + + + 7-APR-1987 11:17:29.61 + + + + + + + +GQ +f1215reute +u f BC-CME-11-15--EDT 04-07 0053 + +CME 11:15 EDT + +L-CATTLE +APR7 69.60 UP 0.20 +JUN7 64.97 OFF 0.05 +AUG7 60.75 OFF 0.12 +F-CATTLE +APR7 69.00 OFF 0.10 +MAY7 68.12 OFF 0.10 +AUG7 66.50 UP 0.10 +HOGS +APR7 50.12 UP 0.30 +JUN7 48.80 UP 0.33 +JUL7 47.30 UP 0.43 +BELLIES +MAY7 66.25 OFF 0.15 +JUL7 64.77 OFF 0.08 +AUG7 61.75 UP 0.15 +FEB8 56.10 UP 0.50 + + + + + + 7-APR-1987 11:18:01.28 + + + + + + + +RM +f1216reute +u f BC-LONDON-LIFFE-S.FRANC 04-07 0025 + +LONDON LIFFE S.FRANC CLOSE 1616 - APR 7 + MTH LAST HIGH LOW PR.SET + Jun --- --- --- 6627 + Sep --- --- --- 6041 + + + + 7-APR-1987 11:18:17.62 + + + + + + + +RM +f1217reute +r f BC-stockholm-exchanges-c 04-07 0049 + +Stockholm exchanges clsg apr 6 stg 10.2807 10.2872 us 6.3540 +6.3560 dmk 348.3170 348.4840 ffr 104.6787 104.7981 sfr 419.8216 +420.2314 bfr con 16.8139 16.8281 dfl 308.7313 308.9186 dkr +92.4016 92.4643 nkr 93.1262 93.1965 lit 0.4889 0.4893 aus sch +49.5438 49.5788 can 4.8611 4.8645 yen 4.3730 4.3774 + + + + + + 7-APR-1987 11:18:33.41 + + + + + + + +F +f1219reute +u f BC-HOSPITAL-CORP-OF-AMER 04-07 0017 + +HOSPITAL CORP OF AMERICA, 100,000 AT 38-1/2, UNCH, ALL BUYSIDE +BY ABD SECURITIES ON THE BOSTON EXCHANGE + + + + + + 7-APR-1987 11:18:44.72 + + + + + + + +C G +f1220reute +u f BC-cbt-s'bean-opg-report 04-07 0102 + +CBT SOYBEAN FUTURES OPEN SLIGHTLY FIRMER + CHICAGO, April 7 - CBT soybean futures opened steady, with +new crop slightly firmer, then rallied further to hold gains of +one cent to three cents per bushel higher in light early +dealings. + A firmer Gulf soybean basis this morning, strength in corn +futures and delays in the Brazilian soybean harvest supported +soybean futures, despite a disappointing drop in the weekly +soybean export figure yesterday afternoon, traders said. + A local professional house and a local house were the +featured buyers of July, with sellers scattered and small-lot, +pit brokers said. + Reuter + + + + 7-APR-1987 11:18:57.30 + + + + + + + +RM C G L M T +f1221reute +u f BC-DOLLAR-REMAINS-IN-NAR 04-07 0096 + +DOLLAR REMAINS IN NARROW RANGE IN QUIET ZURICH + ZURICH, April 7 - The dollar remained confined in the same +narrow range in quiet trading, benefitting only slightly from +comments by Fed Chairman Paul Volcker that further sizeable +dollar losses would be counter-productive, dealers said. + It finished at 1.5140/50 Swiss francs after opening at +1.5128/38 and closing yesterday at 1.5185/95. + "Volcker's remarks produced some buying interest but most +people were still waiting to see what comes out of the finance +ministers' meetings in Washington," one dealer said. + Other currencies lost ground against the Swiss franc. + Sterling eased after advancing sharply yesterday on +expectations of an early U.K. General election. The pound ended +at 2.4469/4501 francs compared with 2.4547/4578 yesterday. + The mark slipped to 82.83/93 centimes from 83.11/21 and the +French franc dipped to 24.90/94 from 24.98/25.02. + REUTER + + + + 7-APR-1987 11:19:14.60 + + + + + + + +M +f1223reute +b f BC-LME-COPPER-AFT-2ND-RI 04-07 0026 + +LME COPPER AFT 2ND RING 1617 - APR 7 + LAST BUYER SELLER + Std Cash -- -- -- + 3 Months -- -- -- + + + + + + 7-APR-1987 11:19:21.24 + + + + + + + +TQ +f1224reute +u f BC-ny-comms-est-vols 04-07 0053 + +N.Y. COMMODITY FUTURES ESTIMATED VOLUMES - APRIL 7 + Time 11.00 + Coffee 825 + Cocoa 756 + Sugar 11 7040 + Sugar 14 16 + Orange ---- + Cotton ---- + Sugar 11 options calls 364 + Sugar 11 options puts 115 + Reuter + + + + + + 7-APR-1987 11:19:24.46 + + + + + + + +M +f1225reute +b f BC-LME-COPPER-AFT-2ND-RI 04-07 0026 + +LME COPPER AFT 2ND RING 1617 - APR 7 + LAST BUYER SELLER + Hg Cash 909.5 909.5 910.0 + 3 Months 879.0 879.0 879.5 + + + + + + 7-APR-1987 11:19:32.58 + + + + + + + +L +f1226reute +u f BC-ST-LOUIS-CATTLE-STEAD 04-07 0054 + +ST LOUIS CATTLE STEADY/UP 0.50 DLR - USDA + st louis, april 7 - slaughter steers were firm to 0.50 dlr +higher in active trade and heifers fully steady amid limited +supply, the usda said. + steers - choice 2-4 975-1250 lbs 64.00-65.50, package 2-3 +1230 lbs 66.00. + heifers - few lots choice 2-4 900-1075 lbs 61.50-63.00. + Reuter + + + + 7-APR-1987 11:19:42.99 + +uk + + +liffe + + +RM +f1227reute +u f BC-LIFFE,-AFTER-RECORD-V 04-07 0111 + +LIFFE, AFTER RECORD VOLUMES, SEES MORE GROWTH + LONDON, April 7 - The records in turnover set by the London +International Financial Futures Exchange (LIFFE) in March could +be surpassed in the coming months, Liffe Chief Executive +Michael Jenkins said. + Last month, Liffe saw record monthly futures volume at 1.15 +mln lots, and record monthly options volume at 97,700. Total +Liffe volume in first quarter 1987 rose to 2.8 mln contracts, +or 89 pct up on the same 1986 period. + Long gilt turnover in first quarter 1987 was 300 pct up on +the year-ago period at 1.63 mln lots versus 409,500. But T-bond +volume fell by 38 pct to 244,500 in first three months 1987. + Jenkins told Reuters the higher volumes for gilts reflected +in part the volatility in the U.K. Markets in recent months, +while the falloff in T-bonds was an indication of the relative +stability of U.S. Credit markets. + Jenkins said he saw room for the whole financial futures +sector to grow further in the coming months. In particular, FT- +SE 100 futures had great scope for expansion, and turnover in +them should be much higher by end 1987. + FT-SE futures volume was 62,700 in first quarter 1987, an +increase of 124 pct over the 28,000 contracts recorded in the +same months of 1986. + Institutions here had been slow to find out about the use +of stock exchange futures, but they would now learn more, +Jenkins predicted. + Commenting on the difference in popularity between gilts +and bonds, Jenkins said Liffe had designed the widest possible +variety of contracts so that at any given time, at least one +sector would be volatile enough to attract trading. The current +situation of U.S. Markets being steady, and U.K. Ones +changeable, might alter completely in coming months. + A further boost to Liffe's volume and attractiveness should +come with the introduction of yen bond futures, he added. + REUTER + + + + 7-APR-1987 11:20:07.42 +earn +usa + + + + + +F +f1230reute +r f BC-NEW-BEDFORD-INSTITUTI 04-07 0025 + +NEW BEDFORD INSTITUTION FOR SAVINGS <NBBS> YEAR + NEW BEDFORD, Mass., April 7 - + Net 12.3 mln vs 6,438,000 + NOTE: Company went public in March. + Reuter + + + + 7-APR-1987 11:20:16.05 + +usa + + + + + +F +f1231reute +b f BC-HONEYWELL-BULL-UNVEIL 04-07 0077 + +HONEYWELL BULL UNVEILS FIVE NEW COMPUTERS + MINNEAPOLIS, April 7 - Honeywell Bull, a 1.9 billion dlr +computer systems company formed March 27 by Honeywell Inc +<HON>, Compagnie des Machines Bull of France and NEC Corp of +Japan, said it introduced a line of high-performance computers +for medium and large companies. + The company also unveiled software for the new systems to +facilitate patient care in hospitals and control inventory and +production in factories. + Honeywell Bull said its new line includes five models in +the DPS 7000 family of 32-bit virtual memory systems that +support as many as 600 terminals and perform between 9,000 and +52,000 transactions an hour. + Prices for the systems will range from 127,000 dlrs to more +than 1.0 mln dlrs. + It said two integrated, modular software packages +introduced are specifically for operation on DPS 7000 +computers. + Reuter + + + + 7-APR-1987 11:20:25.56 + +usa + + + + + +F +f1232reute +r f BC-OXFORD-ENERGY-CO-<OEN 04-07 0095 + +OXFORD ENERGY CO <OEN> TO BUILD ENRGY PLANT + NEW YORK , APri 7 - The Oxford Energy Co said it received +final approval from the Connecticut Department of Public Utiliy +Control of a power contract for the company's tire burning +energy plant to be located in Sterling, Conn. + The Oxford facility has an estimated total cost of +approximately 70 mln dlrs, and is expected to start +construction during the second half of 1987. Construction of +the project is subject to the receipt of various state and +local permits, the company said, and the arrangement of +financing. + Under the terms of the order, issued by the Connecticut +Department of Publc Utility Control, Connecticut Light and +Power Co will be required to purchase the output of the +Sterling facility under a 25-year power purchase aagreemnt at +prices fixed by the contract formulas, the company said. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-015.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-015.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-015.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-015.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2003 @@ + + + 8-APR-1987 10:08:12.27 +acq +usa + + + + + +F +f1041reute +d f BC-PAXAR-CORP-<PAKS>-MAK 04-08 0032 + +PAXAR CORP <PAKS> MAKES ACQUISITION + PEARL RIVER, N.Y., April 8 - Paxar Corp said it has +acquired Thermo-Print GmbH of Lohn, West Germany, a distributor +of Paxar products, for undisclosed terms. + Reuter + + + + 8-APR-1987 10:08:15.55 +earn +canada + + + + + +E F +f1042reute +d f BC-<mark's-work-wearhous 04-08 0027 + +<MARK'S WORK WEARHOUSE LTD> YEAR JAN 31 NET + Calgary, Alberta, April 8 - + Shr 10 cts vs 32 cts + Net 975,000 vs 3,145,000 + Sales 159.1 mln vs 147.3 mln + Reuter + + + + 8-APR-1987 10:08:21.25 + +usa + + + + + +F +f1043reute +d f BC-KEY-TRONIC-<KTCC>-GET 04-08 0068 + +KEY TRONIC <KTCC> GETS NEW BUSINESS + SPOKANE, Wash., April 8 - Key Tronic corp said it has +received contracts to provide seven original equipment +manufacturers with which it has not done business recently with +over 300,000 computer keyboards for delivery within the next 12 +months. + The company said "The new contracts represent an annual +increase of approximately 25 pct in unit volume over last +year." + Reuter + + + + 8-APR-1987 10:08:26.93 +acq +canada + + + + + +E F Y +f1044reute +d f BC-canadian-bashaw,-ersk 04-08 0061 + +CANADIAN BASHAW, ERSKINE RESOURCES TO MERGE + Edmonton, Alberta, April 8 - Canadian Bashaw Leduc Oil and +Gas Ltd said it agreed to merge with Erskine Resources Ltd. +Terms were not disclosed. + Ownership of the combined company with 18.8 pct for the +current shareholders of Canadian Bashaw and 81.2 pct to the +current shareholders of Erskine, the companies said. + Reuter + + + + 8-APR-1987 10:11:16.60 +earn +usa + + + + + +F +f1055reute +d f BC-ENTOURAGE-<ENTG>-HAS 04-08 0097 + +ENTOURAGE <ENTG> HAS FIRST QUARTER LOSS + HOUSTON, April 8 - Entourage International Inc said it had +a first quarter loss of 104,357 dlrs, after incurring 70,000 +dlrs in costs for an internal audit, a report for shareholders +and proxy soliciation and 24,000 dlrs in startup expenses for +opening London offices. + The company went public during 1986. + Entourage also said it has started marketing a solid +perfume packaged in a lipstick tube called "Amadeus," retailing +at 15 dlrs. + The company also said it has acquired North Country Media +Group, a video productions company. + Reuter + + + + 8-APR-1987 10:11:26.26 +earn +canada + + + + + +E F +f1056reute +d f BC-<mr.-jax-fashions-inc 04-08 0028 + +<MR. JAX FASHIONS INC> YEAR FEB 28 NET + Vancouver, British Columbia, April 8 - + Shr 58 cts vs 29 cts + Net 3,141,000 vs 1,440,000 + Sales 24.7 mln vs 13.0 mln + Reuter + + + + 8-APR-1987 10:11:53.50 + +usa + + + + + +F +f1060reute +d f BC-DIGITAL-COMMUNICATION 04-08 0058 + +DIGITAL COMMUNICATIONS<DCAI> NAMES NEW PRESIDENT + ALPHARETTA, Ga., April 8 - Digital Communications +Associates Inc said its board has named James Ottinger +president and chief operating officer. + The company said Ottinger replaces Bertil Nordin as +president. Nordin will become chairman and chief executive +officer, Digital Communications added. + Reuter + + + + 8-APR-1987 10:11:58.32 + +usa + + + + + +F +f1061reute +d f BC-DIGITAL-<DEC>-IN-TERA 04-08 0054 + +DIGITAL <DEC> IN TERADYNE <TER> LICENSING PACT + BOSTON, April 8 - Teradyne Inc said Digital Equipment Corp +signed a multi-license purchase agreement valed at over one mln +dlrs for Teradyne's Lasar Version Six Simulation System. + The company said the agreement includes the option for +futrue lasar purchases by Digital. + Reuter + + + + 8-APR-1987 10:12:18.53 + +usa + + + + + +F +f1064reute +d f BC-HOME-INTENSIVE-<KDNY> 04-08 0032 + +HOME INTENSIVE <KDNY> EXTENDS DIALYSIS AT HOME + NORTH MIAMI BEACH, Fla., April 8 - Home Intensive Care Inc +said it has opened a Dialysis at Home office in Philadelphia, +its 12th nationwide. + Reuter + + + + 8-APR-1987 10:14:36.24 + +canada + + +tose + + +E F +f1071reute +u f BC-bache-canada-buys 04-08 0113 + +BACHE CANADA BUYS TORONTO STOCK EXCHANGE SEAT + TORONTO, April 8 - Bache Securities Inc, 80 pct owned by +Prudential Bache Securities Inc, said it acquired its third +Toronto Stock Exchange seat for 301,000 Canadian dlrs. + The company said the price was the highest yet paid for an +exchange seat. A Toronto Stock Exchange spokesman said an +exchange seat last sold for 195,000 dlrs in March, which was +acquired by <Toronto Dominion Bank>. + Bache Securities said it needed a third exchange seat as +part of an extensive plan to provide an enhanced level of +service to clients. The seat will be used to further build its +professional trading area, the investment dealer said. + Reuter + + + + 8-APR-1987 10:17:29.78 +earn + + + + + + +F +f1081reute +f f BC-******F.W.-WOOLWORTH 04-08 0012 + +******F.W. WOOLWORTH CO SAYS IT HIKES DIVIDEND TO 33 CTS A SHARE FROM 28 CTS +Blah blah blah. + + + + + + 8-APR-1987 10:19:42.41 +earn +usa + + + + + +F +f1088reute +b f BC-F.W.-WOOLWORTH-CO-<Z> 04-08 0021 + +F.W. WOOLWORTH CO <Z> HIKES DIVIDEND + NEW YORK, April 8 - + Qtly div 33 cts vs 28 cts prior + Pay June 1 + Record May 1 + Reuter + + + + 8-APR-1987 10:20:02.86 +sugar +netherlands + + + + + +C T +f1089reute +u f BC-DUTCH-SUGAR-BEET-PLAN 04-08 0103 + +DUTCH SUGAR BEET PLANTING HALF FINISHED + ROTTERDAM, April 8 - Roughly half of this year's expected +130,000 hectare Dutch sugar beet crop is already in the ground, +a spokesman for Suiker Unie, the largest sugar processor in the +Netherlands, told Reuters. + Conditions are generally good and the average sowing date +for the crop is expected to be around April 11, against April +23 last year, and a 10-year average of April 14, the spokesman +added. + "It is far too early yet to say what kind of output we can +expect when it comes to harvest in September, but at least the +crop is off to a very good start," he said. + Last year, the Netherlands planted a record 137,600 +hectares of sugar beet and produced a record 1.2 mln tonnes of +white sugar, substantially more than the country's combined "A" +and "B" quota of 872,000 tonnes. + This year, however, a self-imposed quota system has been +introduced with the aim of cutting plantings to 130,000 +hectares and reducing white sugar output to around 915,000 +tonnes to minimise the amount of non-quota "C" sugar produced. + Only farmers with a record of growing suger beet have been +allotted quotas. This is expected to prevent the area being +boosted by dairy or cereal farmers moving into sugar. + Reuter + + + + 8-APR-1987 10:20:14.11 + +uk + + + + + +F +f1090reute +d f BC-U.K.-EXPECTS-SUBSTANT 04-08 0121 + +U.K. EXPECTS SUBSTANTIAL DEMAND FOR ROLLS SHARES + LONDON, April 8 - Demand for shares in state-owned engine +maker <Rolls Royce Plc> is expected to be substantial when the +government privatises it at the end of April, Christopher Clark +of the group's bankers Samuel Montagu and Sons Ltd said. + He told a press conference after the release of an initial +prospectus for the float that the issue would be offered to +U.K. Institutions, company employees and the general public. + As in previous flotations, clawback arrangements would be +made if public subscriptions exceeded initial allocations. + He declined to say how the shares would be allocated beyond +saying that a "significant proportion" would go to institutions. + A decision on what percentage would go to each sector would +be made shortly before the sale price was announced on April +28. + Minimum subscription would be for 400 shares with payment +in two tranches, again a method broadly in line with previous +privatisations. + Chairman Sir Francis Tombs denied suggestions that Rolls +was a stock that should be left to the institutions. He noted +that although the aircraft industry was cyclical, Rolls had +several operations -- such as spare parts and military +equipment -- that evened out the swings. + Rolls' 1986 research and development expenditure in 1986 +was 255 mln stg and could be expected in the future to vary +according to changes in turnover. + He noted that net research and development expenditure was +written off in the year it occurred, a policy that received +"inadequate recognition in one or two of the more extravagant +forecasts of future profits." He made no forecast himself. + In 1986, Rolls reported that pretax profit rose 48 pct to +120 mln stg on turnover 12 pct higher at 1.8 billion. + Reuter + + + + 8-APR-1987 10:25:01.82 + +netherlands + + +nyse + + +F +f1109reute +r f BC-NV-PHILIPS-SHARES-GET 04-08 0097 + +NV PHILIPS SHARES GET NYSE QUOTE FROM APRIL 14 + EINDHOVEN, NETHERLANDS, APRIL 8 - NV Philips +Gloeilampenfabrieken <PGLO.AS> shares are due to start trading +on the New York Stock Exchange on April 14, Philips chairman +Cor van der Klugt told the annual shareholders meeting. + In March, the Dutch electronics group announced it would +end its current over the counter listing on the New York NASDAQ +system and move to the NYSE. + Philips said the "big board" listing in New York is expected +to boost its profile in the U.S., Where 10 pct of all +outstanding Philips shares are held. + Reuter + + + + 8-APR-1987 10:25:54.05 +earn + + + + + + +F +f1110reute +f f BC-******J.P.-MORGAN-AND 04-08 0010 + +******J.P. MORGAN AND CO INC 1ST QTR SHR 1.22 DLRS VS 1.28 DLRS +Blah blah blah. + + + + + + 8-APR-1987 10:28:08.79 +sugar +belgiumfrancewest-germanyspaindenmark + +ec + + + +T C +f1117reute +b f BC-EC-COMMISSION-DETAILS 04-08 0069 + +EC COMMISSION DETAILS SUGAR TENDER + BRUSSELS, April 8 - The EC Commission confirmed it granted +export licences for 118,350 tonnes of current series white +sugar at a maximum export rebate of 46.496 European Currency +Units (ECUs) per 100 kilos. + Out of this, traders in France received 34,500 tonnes, in +the U.K. 37,800, in West-Germany 20,000, in Belgium 18,500, in +Spain 5,800 and in Denmark 1,750 tonnes. + REUTER + + + + 8-APR-1987 10:30:36.41 + +canada + + + + + +E Y +f1126reute +r f BC-pancontinental-oil-ha 04-08 0093 + +PANCONTINENTAL OIL HAS PRIVATE FINANCING + Calgary, Alberta, April 8 - <Pancontinental Oil Ltd> said +it arranged a 10 mln dlr private financing with Pemberton +Houston Willoughby Bell Gouinlock Inc. + The private placement consists of special warrants to +purchase seven pct convertible redeemable preferred shares. + The shares will be convertible for five years into common +shares at five dlrs per share. The preferred shares are not +redeemable for 2-1/2 years. Net proceeds will be used to +increase working capital and finance exploration and +development. + Reuter + + + + 8-APR-1987 10:30:58.28 + +uk + + + + + +RM +f1128reute +b f BC-FEDERAL-REALTY-CONVER 04-08 0102 + +FEDERAL REALTY CONVERTIBLE INCREASED, PRICED + LONDON, April 8 - Today's dollar convertible eurobond for +Federal Realty Investment Trust has been increased to 100 mln +dlrs from the initial 75 mln, lead manager Salomon Brothers +International said. + The coupon has been fixed at 5-1/4 pct compared with the +indicated range of 5-1/4 to 5-1/2 pct. The conversion price has +been fixed at 30-5/8 dlrs compared with last night's close in +the U.S. Of 25-1/2 dlrs. This represents a premium of 20 pct. + The put option after seven years was priced at 120 pct to +give the investor a yield to the put of 7.53 pct. + REUTER + + + + 8-APR-1987 10:34:45.43 +earn +west-germany + + + + + +F +f1147reute +r f BC-VOLKSWAGEN-DIVIDEND-D 04-08 0114 + +VOLKSWAGEN DIVIDEND DECISION DUE TOMORROW + WOLFSBURG, West Germany, April 8 - Volkswagen AG <VOWG.F>, +VW, is due to make a formal announcement about its 1986 +dividend tomorrow after saying the 1985 level of 10 marks per +ordinary share would be held, despite massive losses because of +a suspected foreign currency fraud. + A spokesman said VW's supervisory board will meet tomorrow +to discuss the payout. A statement will be made afterwards. + VW has also said disclosed profits for 1986 will reach +their 1985 level, despite provisions of a possible 480 mln +marks linked to the currency affair. The figure is virtually +the same as the 477 mln mark 1985 parent company net profit. + When VW first confirmed the currency scandal on March 10 it +said the management board would propose an unchanged 10-mark +dividend to the supervisory board. A dividend of 11 marks would +be proposed for the company's new preference shares. + Share analysts said they saw supervisory board approval of +the management board proposal as virtually a formality. +"Anything else would be more than a surprise," one said. + Company sources said VW would have to dig into reserves to +maintain the disclosed profit. Parent company reserves stood at +around three billion marks at end-1985. + Reuter + + + + 8-APR-1987 10:35:24.55 + +uk + + + + + +RM +f1152reute +b f BC-TORONTO-DOMINION-UNIT 04-08 0082 + +TORONTO DOMINION UNIT ISSUES AUSTRALIAN DLR BOND + LONDON, April 8 - Toronto Dominion Bank, Nassau Branch is +issuing a 40 mln Australian dlr eurobond due May 15, 1990 +paying 14-1/2 pct and priced at 101-3/8 pct, lead manager +Hambros Bank Ltd said. + The non-callable bond is available in denominations of +1,000 Australian dlrs and will be listed in London. The selling +concession is one pct, while management and underwriting +combined will pay 1/2 pct. + The payment date is May 15. + REUTER + + + + 8-APR-1987 10:36:31.07 + +uk + + + + + +E +f1160reute +b f BC-TORONTO-DOMINION-UNIT 04-08 0081 + +TORONTO DOMINION UNIT ISSUES AUSTRALIAN DLR BOND + LONDON, April 8 - Toronto Dominion Bank, Nassau Branch is +issuing a 40 mln Australian dlr eurobond due May 15, 1990 +paying 14-1/2 pct and priced at 101-3/8 pct, lead manager +Hambros Bank Ltd said. + The non-callable bond is available in denominations of +1,000 Australian dlrs and will be listed in London. The selling +concession is one pct, while management and underwriting +combined will pay 1/2 pct. + The payment date is May 15. + Reuter + + + + 8-APR-1987 10:37:10.01 +earn +usa + + + + + +F +f1167reute +r f BC-CITYTRUST-BANCORP-INC 04-08 0028 + +CITYTRUST BANCORP INC <CITR> 1ST QTR NET + BRIDGEPORT, Conn., April 8 - + Shr 1.40 dlrs vs 1.16 dlrs + Net 5,776,000 vs 4,429,000 + Avg shrs 4,132,828 vs 3,834,117 + Reuter + + + + 8-APR-1987 10:37:30.96 +acq +usa + + + + + +F +f1170reute +r f BC-SOUTHMARK-<SM>-ACQUIR 04-08 0071 + +SOUTHMARK <SM> ACQUIRES 28 NURSING HOMES + DALLAS, April 8 - Southmark Corp said it acquired 28 +long-term care facilities containing for approximately 70 mln +dlrs in cash. + It said the facilities, which contain approximately 2,500 +beds in seven western states, were bought from Don Bybee and +Associates, of Salem,Ore. + The acquistion brings to 57 health care facilities acquired +in the last three months, the company said. + Reuter + + + + 8-APR-1987 10:38:13.19 + +usa + + + + + +A RM +f1175reute +r f BC-HELEN-OF-TROY-<HELE> 04-08 0084 + +HELEN OF TROY <HELE> FILES CONVERTIBLE OFFERING + NEW YORK, April 8 - Helen of Troy Corp said it filed with +the Securities and Exchange Commission a registration statement +covering a 20 mln dlr issue of covertible subordinated +debentures due 2007. + Proceeds will be used for general corporate purposes, +including possible repayment of bank debt, product development +and possible acquisitions, Helen of Troy said. + The company named Drexel Burnham Lambert Inc as sole +underwriter of the offering. + Reuter + + + + 8-APR-1987 10:38:19.91 +earn +usa + + + + + +F +f1176reute +b f BC-/J.P.-MORGAN-AND-CO-I 04-08 0088 + +J.P. MORGAN AND CO INC <JPM> 1ST QTR NET + NEW YORK, April 8 - + shr 1.22 dlrs vs 1.28 dlrs + net 226.4 mln vs 233.9 mln + assets 80.45 billion vs 70.23 billion + loans 35.16 billion vs 35.99 billion + deposits 45.22 billion vs 39.68 billion + return on assets 1.14 pct vs 1.35 pct + return on common equity 18.20 pct vs 22.08 pct + NOTE: 1987 qtr net was reduced by 20 mln dlrs because 1.3 +billion dlrs of loans to Brazil were placed on non-accrual. + loan loss provision 35 mln dlrs vs 70 mln year earlier. + Reuter + + + + 8-APR-1987 10:38:37.99 +earn +usa + + + + + +F +f1179reute +r f BC-FIRSTBANC-CORP-OF-OHI 04-08 0021 + +FIRSTBANC CORP OF OHIO <FBOH> 1ST QTR NET + AKRON, Ohio, April 8 - + Shr 74 cts vs 67 cts + Net 8,067,000 vs 7,317,000 + + Reuter + + + + 8-APR-1987 10:39:08.80 +earn +usa + + + + + +F +f1183reute +r f BC-MAYFAIR-SUPER-MARKETS 04-08 0063 + +MAYFAIR SUPER MARKETS INC <MYFRA> 2ND QTR NET + ELIZABETH, N.J., April 8 -Qtr ends Feb 28 + Shr Class A 61 cts vs 48 cts + Shr Class B 59 cts vs 46 cts + Net 2,358,000 vs 1,876,000 + Revs 122,508,000 vs 105,871,000 + Six mths + Shr Class A 1.15 dlrs vs 86 cts + Shr Class B 1.13 dlrs vs 84 cts + Net 4,485,000 vs 3,378,000 + Revs 242,453,000 vs 210,117,000 + NOTE: qtr and six mths prior figures reflect two-for-one +stock split in August 1986. + Reuter + + + + 8-APR-1987 10:39:16.52 +earn +usa + + + + + +F +f1184reute +r f BC-HANOVER-INSURANCE-<HI 04-08 0074 + +HANOVER INSURANCE <HINS> GET SPLIT APPROVAL + WORCESTER, Mass., April 8 - Hanover Insurance Co said its +stockholders approved a two-for-one stock split. + As a result of the split, Hanover said it increases the +number of authorized shares of capital stock from 10.4 mln, +having a par value of one dlr, to 20.9 mln, also having a par +value of one dlr. + The stock split is payable April 30 to stockholders of +record April 10, Hanover said. + Reuter + + + + 8-APR-1987 10:39:22.31 + +usajapan + + + + + +F +f1185reute +d f BC-FEDERAL-PAPERBOARD-<F 04-08 0057 + +FEDERAL PAPERBOARD <FBO> ENTERS AGREEMENT + MONTVALE, N.J., April 8 - Federal Paperboard Co Inc said it +has entered into an agreement with Ozaki Trading Co Ltd of +Osaka, Japan, allowing Ozaki to represent Federal Paperboard's +bleached paperboard sales in Japan. + Federal added it will be opening an office in Japan in the +near future. + + Reuter + + + + 8-APR-1987 10:39:29.93 +acq +usa + + + + + +F +f1186reute +d f BC-NATIONAL-GUARDIAN-<NA 04-08 0099 + +NATIONAL GUARDIAN <NATG> MAKES ACQUISITIONS + GREENWICH, Conn., April 8 - National Guardian Corp said it +has acquired a number of security services companies recently, +with aggregate revenues of about 3,500,000 dlrs, for an +aggregate cost of about 2,700,000 dlrs. + It said it acquired guard service companies C.S.C. Security +Gaurd Service of Paramus, N.J., from Cartel Security +Consultants Inc, the Guard Services Division of Security +Services of America of Wayne, N.J., Capital Investigations and +Protective Agency of Hackensack, N.J., and Meyer Detective +Agency Inc of National Park, N.J. + The company said it bought alarm service operations +Certified Security Services Inc of Key West, Fla., Custom +Security Services of Myrtle Beach, S.C., A-T-E Security Group +Inc of Houston and the Louisville, Kent and Nashville, Tenn, +offices of Wells Fargo Alarm Services. + Reuter + + + + 8-APR-1987 10:40:25.85 +earn +usa + + + + + +F +f1194reute +s f BC-resending 04-08 0041 + +UNIVERSAL MEDICAL <UMBIZ> DISTRIBUTION SET + MILWAUKEE, WIS., April 8 - + Qtly distribution 7-1/2 cts vs 7-1/2 cts prior (excluding +2-1/2 cts special) + Pay April 30 + Record April 22 + NOTE: Full name is Universal Medical Buildings L.P. + Reuter + + + + 8-APR-1987 10:43:34.24 +graincorn +zambia + +imf + + + +G C +f1209reute +u f BC-ZAMBIA-DOES-NOT-PLAN 04-08 0097 + +ZAMBIA DOES NOT PLAN RETAIL MAIZE PRICE HIKE + LUSAKA, April 8 - The Zambian government has no immediate +plans to follow last week's increase in the producer price of +maize with a hike in the retail price of maize meal, an +official of the ruling party said. + Last December, a 120 pct increase in the consumer price for +refined maize meal, a Zambian staple, led to food riots in +which at least 15 people died. + That price increase, which President Kenneth Kaunda later +revoked, followed pressure by the International Monetary Fund +(IMF) to reduce the government's subsidy bill. + However, if the producer price rise, from 6.10 dlrs to 8.67 +dlrs per 90-kg bag, is not accompanied by a retail price +increase, the government will have to spend more on subsidies, +a practice discouraged by the IMF. + "There is no way out but to raise the subsidy levels of +meal. It (the government) would have to choose between the +demands of the IMF and those of the people," a Ministry of +Agriculture economist said. + Reuter + + + + 8-APR-1987 10:45:27.04 + +usa + + + + + +F +f1218reute +r f BC-BLOCKER-ENERGY-<BLK> 04-08 0065 + +BLOCKER ENERGY <BLK> SHARE OFFERING UNDERWAY + HOUSTON, April 8 - Blocker Energy corp said an offering of +20 mln common shares is underway at 2.625 dlrs per share +through underwriters led by <Drexel Burnham Lambert Inc> and +Alex. Brown and Sons Inc <ABSB>. + The company is offering 19.7 mln shares and shareholders +the rest. Before the offering it had about 33.6 mln shares +outstanding. + Reuter + + + + 8-APR-1987 10:45:36.01 + +usa + + + + + +F +f1219reute +r f BC-ASARCO-<AR>-COMPLETES 04-08 0082 + +ASARCO <AR> COMPLETES SHARE OFFERING + NEW YORK, April 8 - Asarco Inc said it completed the sale +of four mln shares of Asarco common stock to an underwriting +group led by First Boston Corp. + The underwriters sold the shares to the public at a price +of 22.50 dlrs a share, the minerals and energy company said. + Proceeds of about 86 mln dlrs will be used to reduce +outstanding debt, it said. + The offering included 3.5 mln shares announced April 1 and +500,000 to cover overallotments. + Reuter + + + + 8-APR-1987 10:45:44.23 + +usa + + + + + +F +f1220reute +r f BC-AMERICAN-MIDLAND-<AMC 04-08 0088 + +AMERICAN MIDLAND <AMCO> SETS OPERATOR FOR CASINO + ENGLEWOOD CLIFFS, N.J., April 8 - American Midland Corp +said <Braodway Casinos Inc> has entered into a letter of intent +for a new company to be formed by <Carnival Cruise Lines Inc> +and <Continental Hotel Cos> to operate Broadway's planned +hotel/casino in the Marina area of Atlantic City, N.J. + American Midland has agreed to spin off its 8.2 acre +Atlantic City property to Broadway, a new company in which +American Midland shareholders would initially own an 85 pct +interest. + Reuter + + + + 8-APR-1987 10:45:50.03 +acq +usa + + + + + +F +f1221reute +r f BC-WEDGESTONE-REALTY-<WD 04-08 0046 + +WEDGESTONE REALTY <WDG> ACQUISITION APPROVED + NEWTON, Mass., April 8 - Wedgestone Realty Investors Trust +said shareholkders have approved the acquisition of its +advisor, Wedgestone Advisory Corp, for 600,000 shares. + It said completion is expected to take place April 10. + Reuter + + + + 8-APR-1987 10:51:43.03 +heat +usa + + + + + +Y +f1239reute +u f BC-SUN-<SUN>-CUTS-HEATIN 04-08 0062 + +SUN <SUN> CUTS HEATING OIL BARGE PRICE + NEW YORK, April 8 - Sun Co's Sun Refining and Marketing Co +subsidiary said it is decreasing the price it charges contract +barge customers for heating oil in ny harbor by 0.50 cent a +gallon, effective today. + The 0.50 cent a gallon price reduction brings Sun's heating +oil contract barge price to 50 cts a gallon, the company said. + Reuter + + + + 8-APR-1987 10:52:38.11 + + + + + + + +A RM +f1241reute +f f BC-******MOODY'S-AFFIRMS 04-08 0012 + +******MOODY'S AFFIRMS AVCO FINANCIAL'S LONG-TERM DEBT, CUTS COMMERCIAL PAPER +Blah blah blah. + + + + + + 8-APR-1987 10:56:40.19 + +usa + + + + + +F +f1250reute +u f BC-MEDICAL-JOURNAL-REPOR 04-08 0106 + +MEDICAL JOURNAL REPORTS NEW INTERLEUKIN PROMISE + WASHINGTON, April 8 - Promising new findings in the use of +a controversial experimental drug called Interleukin-2 as a +cure for cancer will be published in the April 9 issue of the +prestigious New England Journal of Medicine, according to a +Wall Street analyst who has obtained an advance copy of the +magazine. + Among interleukin's principal U. S. makers are Cetus Corp +<CTUS>, headquartered in Emeryville, Calif., and Immunex Corp +<IMNX>, based in Seattle, Wash. + The journal, to be released late today, contains two +articles reporting high remission rates several cancer types. + The journal also contains a signed editorial concluding +that the new results mark a significant milestone in the search +for a successful immunotherapy for cancer. + Interleukin-2, also known as IL-2, is a substance naturally +produced by living cells in the laboratory. + The drug is controversial because it was widely praised as +a promising cancer treatment in early reports on its +effectiveness in late 1985, only to come under criticism a year +later for its failure to live up to its promise and due to its +ravaging side effects. + One of the new studies, conducted by Dr. William West of +Biotherapeutics Inc of Franklin, Tenn., is particularly +significant because it found far fewer harsh side effects after +it changed the way in which the drug is administered. + In that study, researchers administered IL-2 to 48 cancer +patients and found a 50-pct remission rate for kidney cancers +and a 50 pct remission rate for melanoma, a type of skin +cancer, according to Prudential-Bache Securities' Stuart +Weisbrod, who obtained the advance copy of the magazine. + For rectal and colon cancer, the researchers found no +remissions, but none of the 48 patients treated had side +effects serious enough to be placed under intensive hospital +care, according to the article. + In the second study, whose principal author is Dr. Steven +Rosenberg of the National Cancer Institute, researchers +administered IL-2 to 157 cancer patients and found a 33 pct +remission rate in cancers of the kidney, a 27 pct rate in +melanomas and a 15 pct rate in cancers of the colon and rectum. + In the National Cancer Institute trials, a total of four +patients died, the magazine reported, confirming the harshness +of the drug's side effects as originally administered. + "Perhaps we are at the end of the beginning of the search +for successful immunotherapy for cancer," said the editorial, +signed by John Durant of Philadelphia's Chase Cancer Center. + "These observations reported by Rosenberg and West surely +did not describe successful practical approaches ready for +widespread applications in the therapy of cancer patients," the +editorial said. + "On the other hand, if they reflect, as seems possible, a +successful manipulation of the cellular immune system, then we +may be near the end of our search for a meaningful direction in +the immunuotherapy of cancer," the editorial concluded. + Reuter + + + + 8-APR-1987 10:58:23.92 + +usa + + + + + +F +f1260reute +u f BC-report-recommends-dis 04-08 0096 + +REPORT SEEKS TO DISALLOW SOUTHERN <SO> COSTS + ATALANTA, April 8 - An audit submitted to the Georgia +Public Service Commission claims that between 944 mln dlrs and +1.8 billion dlrs of the costs of the Plant Vogtle nuclear power +station should be disallowed, a Southern Co spokeswoman said. + Southern's Georgia Power Co subsidiary has a 45.7 pct +interest in the plant and estimated earlier this year it would +cost a total of 8.87 billion dlrs. Last year, the plant's +owners pledged to Georgia regulators they would limit the cost +passed on to rate payers to 8.4 billion dlrs. + The Southern spokeswoman said the company feels the report +by O'Brien-Kreitzberg is "flawed and biased." She said the +report was released yesterday by the state attorney general. + Responding to the report today, Georgia Power Chairman +Robert W. Scherer told a news conference the conclusions drawn +by the firm "are not only wrong -- they also reflect the same +bias against nuclear power that these auditors have +demonstrated in similar cases accross the country." + Saying he was not suggesting Georgia power was without +fault, Scherer said "the audit identified several things I wish +we had done differently." + Scherer pointed out a report O'Brien-Kreitzberg submitted +to Georgia regulators in March 1986 projected Georgia Power +would not finish Plant Vogtle unit one before the end of 1987. + Noting "unit one is finished, and we expect it to be in +commercial operationg by June," he said the firm's latest +report ignored the earlier projection, gave the utility no +credit for the completion and "actually penalized us by +suggesting that costs to maintain t he schedule be disallowed." + Scherer said the latest audit alleges Georgia Power could +have saved 95 mln dlrs if it had stopped using four shifts, +seven days a week to speed construction three years sooner. + He said this would have delayed completion of the plant for +another year "and it would have cost several hunderd million +dlrs more." + Noting the audit said costs were increased 600 mln dlrs by +schedule delays totaling 20.5 months, he said "First, we have +the best concrete placement record in the industry, Second new +government regulations after the Three Mile Island incident +significantly increased construction time. + + Reuter + + + + 8-APR-1987 10:58:52.50 + +uk + + + + + +A +f1263reute +r f BC-FINAL-TERMS-SET-ON-AT 04-08 0067 + +FINAL TERMS SET ON ATARI CORP CONVERTIBLE EUROBOND + LONDON, April 8 - The coupon on the 75 mln dlr, 15-year, +convertible eurobond for Atari Corp has been set at 5-1/4 pct +compared with indicated range of five to 5-1/4 pct, lead +manager Paine Webber International said. + The conversion price was set at 32-5/8 dlrs, representing a +premium of 20.38 pct over yesterday's Atari share close of 27 +dlrs. + REUTER + + + + 8-APR-1987 11:00:51.15 +graincornsorghumsunseedwheatoilseedsoybean +argentina + + + + + +C G +f1271reute +r f BC-FURTHER-ARGENTINE-COA 04-08 0112 + +FURTHER ARGENTINE COARSE GRAIN LOSSES FEARED + By Manuel Villanueva + BUENOS AIRES, April 8 - Argentine grain producers adjusted +their yield estimates for the 1986/87 coarse grain crop +downward in the week to yesterday after the heavy rains at the +end of March and beginning of April, trade sources said. + They said sunflower, maize and sorghum production estimates +had been reduced despite some later warm, dry weather, which +has allowed a return to harvesting in some areas. + However, as showers fell intermittently after last weekend, +producers feared another spell of prolonged and intense rain +could cause more damage to crops already badly hit this season. + Rains in the middle of last week reached an average of 27 +millimetres in parts of Buenos Aires province, 83 mm in +Cordoba, 41 in Santa Fe, 50 in Entre Rios and Misiones, 95 in +Corrientes, eight in Chaco and 35 in Formosa. + There was no rainfall in the same period in La Pampa. + Producers feared continued damp conditions could produce +rotting and lead to still lower yield estimates for all the +crops, including soybean. + However, as the lands began drying later in the week +harvesting advanced considerably, reaching between 36 and 40 +pct of the area sown in the case of sunflower. + Deterioration of the sunflower crop evident in harvested +material in Cordoba, La Pampa and Buenos Aires forced yield +estimates per hectare to be adjusted down again. + The season's sunflowerseed production is now forecast at +2.1 mln to 2.3 mln tonnes, against 2.2 mln to 2.4 mln forecast +last week and down 43.9 to 48.8 pct on the 1985/86 record of +4.1 mln. + Area sown to sunflowers was two to 2.2 mln hectares, 29.9 +to 36.3 pct below the record 3.14 mln hectares last season. + Maize harvesting has also reached 36 to 40 pct of the area +sown. It is near completion in Cordoba and Santa Fe and will +begin in La Pampa and southern Buenos Aires later in April. + Production estimates for maize were down from last week at +9.5 mln to 9.8 mln tonnes, against 9.6 mln to 9.9 mln estimated +previously. + This is 22.2 to 23.4 pct below the 12.4 mln to 12.6 mln +tonnes estimated by private sources for the 1985/86 crop and +21.9 to 25.8 pct down on the official figure of 12.8 mln +tonnes. + Maize was sown on 3.58 mln to 3.78 mln hectares, two to +seven pct down on last season's 3.85 mln. + Sorghum was harvested on 23 to 25 pct of the area sown in +Cordoba, Santa Fe and Chaco. Harvest will start in La Pampa and +Buenos Aires in mid-April. + The total area sown was 1.23 mln to 1.30 mln hectares, 10.3 +to 15.2 pct down on the 1.45 mln sown last season. + The new forecast for the sorghum crop is 2.9 mln to 3.2 mln +tonnes compared with three mln to 3.3 mln forecast last week, +and is 23.8 to 29.3 pct down on last season's 4.1 mln to 4.2 +mln tonne crop. + The soybean crop for this season was not adjusted, +remaining at a record 7.5 mln to 7.7 mln tonnes, up 4.2 to 5.5 +pct on the 7.2 mln to 7.3 mln estimated by private sources for +1985/86 and 5.6 to 8.5 pct higher than the official figure of +7.1 mln. + The area sown to soybeans this season was a record 3.7 mln +to 3.8 mln hectares, 10.8 to 13.8 pct up on the record 3.34 mln +sown in 1985/86. + The soybean crop is showing excessive moisture in some +areas and producers fear they may discover more damage. Some +experimental harvesting was carried out in Santa Fe on areas +making up only about one pct of the total crop but details on +this were not available. + Preparation of the fields for the 1987/88 wheat crop, which +will be sown between May and August or September, has so far +not been as intense as in previous years. + Reuter + + + + 8-APR-1987 11:04:45.96 + + + + + + + +V RM +f1297reute +f f BC-******TOP-OFFICIALS-A 04-08 0012 + +******TOP OFFICIALS ARRIVE AT U.S. TREASURY TO BEGIN GROUP OF FIVE MEETING +Blah blah blah. + + + + + + 8-APR-1987 11:05:28.33 +jobs +netherlands + + + + + +RM +f1304reute +r f BC-DUTCH-ADJUSTED-UNEMPL 04-08 0082 + +DUTCH ADJUSTED UNEMPLOYMENT RISES IN MARCH + THE HAGUE, April 8 - Dutch seasonally adjusted unemployment +rose in the month to end-March to a total 693,000 from 690,600 +at end-February, but was well down from 730,100 at end-March +1986, Social Affairs Ministry figures show. + The figure for male jobless rose by 2,000 in the month to +436,500 compared with 470,700 a year earlier. The figure for +women was 256,500 at end-March against 256,100 a month earlier +and 259,400 at end-March 1986. + On an unadjusted basis total unemployment fell by 16,500 in +the month to end-March to 692,200. In March 1986 the figure was +725,000. + A ministry spokesman said the unadjusted figures showed a +smaller than usual seasonal decrease for the time of year, +because of particularly cold weather delaying work in the +building industry. He said this explained the increase in the +adjusted statistics. + Total vacancies available rose by 1,900 to 26,300 at +end-March. A year earlier the figure was 28,763. + REUTER + + + + 8-APR-1987 11:06:39.06 +earn +usa + + + + + +F +f1309reute +u f BC-HARTMARX-CORP-<HMX>-B 04-08 0021 + +HARTMARX CORP <HMX> BOOSTS DIVIDEND + CHICAGO, April 8 + Qtly div 25 cts vs 23 cts prior qtr + Pay 15 May + Record 1 May + + + + + + 8-APR-1987 11:11:12.33 + +usa + + + + + +A RM F +f1329reute +b f BC-MOODY'S-AFFIRMS-AVCO 04-08 0107 + +MOODY'S AFFIRMS AVCO UNIT'S LONG-TERM DEBT + NEW YORK, April 8 - Moody's Investors Service Inc said it +affirmed the long-term debt ratings but cut the commercial +paper to Prime-2 from Prime-1 of Avco Financial Services Inc, a +unit of Avco Corp. + Avco Financial has 2.5 billion dlrs of debt outstanding. + For the paper cut, Moody's cited a higher risk profile +inherent in the company's core business. Moody's said the +affirmation reflected its assessment of a less diversified risk +profile in the company's receivables. + Affirmed were Avco Financial's A-3 senior debt, Baa-2 +senior subordinated debt and Baa-3 junior subordinated debt. + Reuter + + + + 8-APR-1987 11:12:13.98 +money-fx +usa +stoltenbergpoehlballadurde-larosieremiyazawasumitaleigh-pembertongoriajames-baker + + + + +V RM +f1335reute +b f BC-TOP-OFFICIALS-ARRIVE 04-08 0108 + +TOP OFFICIALS ARRIVE AT TREASURY FOR G-5 TALKS + WASHINGTON, April 8 - Top officials of leading industrial +nations arrived at the U.S. Treasury main building to begin a +meeting of the Group of Five. + Officials seen arriving by Reuter correspondents included +West German Finance Minister Gerhard Stoltenberg and Bundesbank +President Karl Otto Poehl, French Finance Minister Edouard +Balladur and his central banker Jacques de Larosiere. + Also seen arriving were Japanese Finance Minister Kiichi +Miyazawa and Japan's central bank governor Satoshi Sumita and +British Chancellor of the Exchequer and central bank governor +Robin Leigh Pemberton. + There was no immediate sign of Italian or Canadian +officials. Monetary sources have said a fully blown meeting of +the Group of Seven is expected to begin around 3 p.m. local +time (1900 gmt) and last at least until 6 p.m. (2200 gmt), when +a communique is expected to be issued. + Italian sources said Italian acting Finance Minister +Giovanni Goria met Treasury Secretary James Baker last night. + At those talks Baker apparently convinced Goria, who +declined to attend the February meeting of the Group of Seven +in Paris, that Italy would participate fully in any meaningful +decisions. + Reuter + + + + 8-APR-1987 11:12:43.58 +interest +usa + + + + + +V RM +f1338reute +b f BC-/-FED-EXPECTED-TO-SET 04-08 0110 + +FED EXPECTED TO SET CUSTOMER REPURCHASES + NEW YORK, April 8 - The Federal Reserve is expected to +intervene in the government securities market to supply +temporary reserves indirectly via customer repurchase +agreements, economists said. + Economists expect the Fed to execute 2.0-2.5 billion dlrs +of customer repos to offset pressures from the end of the +two-week bank reserve maintenance period today. Some also look +for a permanent reserve injection to offset seasonal pressures +via an outright purchase of bills or coupons this afternoon. + The Federal funds rate opened at 6-3/8 pct and remained at +that level, up from yesterday's 6.17 pct average. + Reuter + + + + 8-APR-1987 11:15:23.93 + +usa + + + + + +F +f1352reute +r f BC-BEST-BUY-<BBUY>-MARCH 04-08 0063 + +BEST BUY <BBUY> MARCH SALES RISE + MINNEAPOLIS, April 8 - Best Buy Co Inc said its sales for +March rose to 26.1 mln dlrs from 11.9 mln dlrs in the +comparable 1986 period. + It said sales for the fiscal year ended March 31 rose to +329.5 mln dlrs from 113.1 mln dlrs a year earlier. + The company said sales performance was based on the +addition of 12 new retail facilities. + Reuter + + + + 8-APR-1987 11:15:28.57 + +usa + + + + + +F +f1353reute +r f BC-AUTOSPA-<LUBE>-TO-RED 04-08 0041 + +AUTOSPA <LUBE> TO REDEEM WARRANTS + NEW YORK, April 8 - AutoSpa corp said it will redeem all +its common stock purchase warrants on May Five at 7.5 cts each. + Through May Four, each warrant may be exercised into one +common share at 1.75 dlrs. + Reuter + + + + 8-APR-1987 11:15:35.75 +acq +usa + + + + + +F +f1354reute +r f BC-READER'S-DIGEST-ASSOC 04-08 0071 + +READER'S DIGEST ASSOCIATION SELLS UNIT + PLEASANTVILLE, N.Y., April 8 - <The Reader's Digest +Association Inc> said it sold its subsidiary, Source +Telecomputing Corp, to the venture capital firm of <Welsh, +Carson, Anderson and Stowe>. + The purchase price was not disclosed, Reader's Digest said. + It said it purchased an 80 pct stake in Source in 1980 and +earned an unspecified profit on 14 mln dlrs in revenues in +1986. + Reuter + + + + 8-APR-1987 11:15:38.86 +earn +usa + + + + + +F +f1355reute +r f BC-WEIS-MARKETS-INC-<WMK 04-08 0026 + +WEIS MARKETS INC <WMK> 1ST QTR MARCH 28 NET + SUNBURY, Pa., April 8 - + Shr 59 cts vs 51 cts + Net 18.0 mln vs 15.6 mln + Revs 278.6 mln vs 272.2 mln + Reuter + + + + 8-APR-1987 11:15:46.20 + +usa + + + + + +F +f1356reute +r f BC-AVNET-INC-<AVT>-FILES 04-08 0093 + +AVNET INC <AVT> FILES FOR DEBENTURE OFFERING + NEW YORK, April 8 - Anvet Inc said it filed with the +Securities and Exchange Commission a registration statement for +a proposed public offering of 150 mln dlrs of convertible +subordinated debentures due 2012. + Avnet said it will use the net proceeds for general working +capital purposes and the anticipated domestic and foreign +expansion of its distribution, assembly and manufacturing +businesses. + The company said an investment banking group managed by +Dillon Read and Co Inc will handle the offering. + Reuter + + + + 8-APR-1987 11:15:53.12 +earn +canada + + + + + +E F +f1357reute +r f BC-CONTINENTAL-BANK-INIT 04-08 0100 + +CONTINENTAL BANK INITIAL DISTRIBUTION APPROVED + TORONTO, April 8 - Continental Bank of Canada said +shareholders approved a capital reorganization to allow an +initial payout by the end of May to common shareholders from +last year's 200 mln Canadian dlr sale of most Continental +assets to <Lloyds Bank PLC>'s Lloyds Bank Canada. + The bank said the initial distribution would take the form +of a stock dividend of cumulative redeemable retractable class +A series two preferred shares entitling holders to monthly +floating rate dividends at 72 pct of prime and to 12.75 dlrs a +share on retraction. + Continental said the initial payout was subject to Canadian +government approval. + The bank reiterated that total distributions to common +shareholders would range from 16.50 dlrs a share to 17.25 dlrs +including the initial stock dividend and a final distribution +in late 1988 or early 1989. + The payout of existing preferred shareholders will be +completed just before next month's initial distribution to +common shareholders, Continental added. + + Reuter + + + + 8-APR-1987 11:15:58.96 +earn +usa + + + + + +F +f1358reute +r f BC-ATLAS-CONSOLIDATED-MI 04-08 0060 + +ATLAS CONSOLIDATED MINING AND DEVELOPMENT <ACMB> + NEW YORK, April 8 - 4th qtr + Shr loss 17 cts vs loss 22 cts + Net loss 14.5 mln vs loss 18.0 mln + Revs 27.3 mln vs 23.7 mln + Year + Shr 58 cts vs 1.01 dlrs + Net loss 48.3 mln vs loss 84.2 mln + Revs 111.7 mln vs 141.9 mln + NOTE: Atlas Consolidated Mining and Development Corp of +Manila. + Translated from Philippine pesos at 20.3489 pesos to dollar +vs 18.5571 in quarter and 20.2315 vs 18.2743 in year. + Reuter + + + + 8-APR-1987 11:16:31.73 + +usa + + + + + +F +f1362reute +r f BC-FORD-<F>-EXTENDS-INCE 04-08 0119 + +FORD <F> EXTENDS INCENTIVES ON LIGHT TRUCKS + DEARBORN, Mich., April 8 - Ford Motor Co said it extended +its buyer incentive program on light trucks to April 30 from +April 6, the program's previous expiration date. + Ford, which saw a 23 pct rise in its March truck sales over +the March 1986 level, said the incentives were extended to +"maintain its truck sales momentum." + The program itself was not changed. Customers have a choice +of 3.9 to 9.9 annual percentage rate financing or a cash rebate +of 300 dlrs or 600 dlrs, depending on the type of transmission +chosen. + Ford last week extended to April 30 from March 12 its +incentive program on its compact trucks and the Ford Taurus and +Mercury Sable cars. + Reuter + + + + 8-APR-1987 11:16:47.23 + +italy + +fao + + + +C G T +f1364reute +d f BC-FAO-REPORTS-BETTER-CR 04-08 0104 + +FAO REPORTS BETTER CROPS IN DEVELOPING COUNTRIES + ROME, April 8 - World output of staple foods maintained +growth in 1986, following a record harvest the year before, and +most of the increase was in developing countries, the director +general of the U.N.'s Food and Agriculture Organisation (FAO) +said. + Speaking to FAO's committee on world food security, Edouard +Saouma said sub-Saharan Africa registered a cereal production +increase of 3.6 pct in 1986 and the Far East also continued to +increase production. + Despite ample supplies worldwide, many countries face +problems in paying for all the food they need, he said. + Saouma said many of the developing world's food problems +were the result of "chaotic" world trade. + He said it was vital to promote employment to improve the +"food-security situation" of the poor, with policy reforms in +developing countries to remove existing disincentives to +production so that agriculture could play a greater role in +stimulating economic growth. + Reuter + + + + 8-APR-1987 11:16:54.96 + +usa + + + + + +F +f1365reute +r f BC-AVX-CORP-<AVX>-FILES 04-08 0061 + +AVX CORP <AVX> FILES FOR DEBENTURE OFFERING + GREAT NECK, N.Y., April 8 - AVX Corp said it has filed a +registration statement with the Securities and Exchange +Commission for a proposed public offering of 75 mln dlrs +prinicipal amount of convertible subordinated debentures. + AVX said a syndicate managed by Shearson Lehman Brothers +Inc will underwrite the offering. + Reuter + + + + 8-APR-1987 11:17:19.96 +acq +usa + + + + + +F +f1367reute +u f BC-SCI-MED-<SMLS>-BOARD 04-08 0100 + +SCI-MED <SMLS> BOARD AGREES TO BRISTOL<BMY>DEAL + MINNEAPOLIS, MINN., April 8 - Sci-Med Life Systems Inc said +its directors approved a previously proposed agreement of +merger with Bristol-Myers Co. + The proposed transaction is subject to completion of a due +diligence investigation, including a review by Bristol-Myers of +a patent infringement suit served on Sci-Med by Advanced +Cardiovascular Systems Inc on March 31, 1987. + Bristol-Myers has the right to call off the agreement under +certain circumstances, it said. + Sci-Med said it continues to believe the patent suit is +without merit. + Reuter + + + + 8-APR-1987 11:18:14.40 +acq +usa + + + + + +F +f1371reute +r f BC-FIDELCOR-<FICR>-COMPL 04-08 0059 + +FIDELCOR <FICR> COMPLETES SALE OF UNIT + PHILADELPHIA, April 8 - Fidelcor Inc said it has completed +the sale of its Industrial Valley Title Insurance Co subsidiary +to a group of investors including the unit's management for +undisclosed terms. + Industrial Valley has assets of about 37.6 mln dlrs and was +acquired last year along with IVB Financial Corp. + Reuter + + + + 8-APR-1987 11:18:20.11 +earn +usa + + + + + +F +f1372reute +d f BC-DATA-TRANSLATION-INC 04-08 0033 + +DATA TRANSLATION INC <DATX> 1ST QTR FEB 28 NET + MARLBORO, Mass., April 8 - + Shr 18 cts vs 13 cts + Net 575,000 vs 379,000 + Sales 6,625,000 vs 4,537,000 + Avg shrs 3,173,000 vs 2,977,000 + Reuter + + + + 8-APR-1987 11:18:37.67 +pet-chemcrudeacqearn +usa + + + + + +F Y +f1375reute +d f BC-petrochemical 04-08 0098 + +ENERGY/U.S. PETROCHEMICAL INDUSTRY + By JULIE VORMAN, Reuters + HOUSTON, April 8 - Cheap oil feedstocks, the weakened U.S. +dollar and a plant utilization rate approaching 90 pct will +propel the streamlined U.S. petrochemical industry to record +profits this year, with growth expected through at least 1990, +major company executives predicted. + This bullish outlook for chemical manufacturing and an +industrywide move to shed unrelated businesses has prompted GAF +Corp <GAF>, privately-held Cain Chemical Inc, and other firms +to aggressively seek acquisitions of petrochemical plants. + Oil companies such as Ashland Oil Inc <ASH>, the +Kentucky-based oil refiner and marketer, are also shopping for +money-making petrochemical businesses to buy. + "I see us poised at the threshold of a golden period," said +Paul Oreffice, chairman of giant Dow Chemical Co <DOW>, adding, +"There's no major plant capacity being added around the world +now. The whole game is bringing out new products and improving +the old ones." + Analysts say the chemical industry's biggest customers, +automobile manufacturers and home builders that use a lot of +paints and plastics, are expected to buy quantities this year. + U.S. petrochemical plants are currently operating at about +90 pct capacity, reflecting tighter supply that could hike +product prices by 30 to 40 pct this year, said John Dosher, +managing director of Pace Consultants Inc of Houston. Demand +for some products such as styrene could push profit margins up +by as much as 300 pct, he said. + Oreffice, speaking at a meeting of chemical engineers in +Houston, said Dow would easily top the 741 mln dlrs it earned +last year and predicted it would have the best year in its +history. + In 1985, when oil prices were still above 25 dlrs a barrel +and chemical exports were adversely affected by the strong U.S. +dollar, Dow had profits of 58 mln dlrs. "I believe the entire +chemical industry is headed for a record year or close to it," +Oreffice said. + GAF chairman Samuel Heyman estimated that the U.S. chemical +industry would report a 20 pct gain in profits during 1987. +Last year, the domestic industry earned a total of 13 billion +dlrs, a 54 pct leap from 1985. + The turn in the fortunes of the once-sickly chemical +industry has been brought about by a combination of luck and +planning, said Pace's John Dosher. + Dosher said last year's fall in oil prices made feedstocks +dramatically cheaper and at the same time the American dollar +was weakening against foreign currencies. That helped boost +U.S. chemical exports. + Also helping to bring supply and demand into balance has +been the gradual market absorption of the extra chemical +manufacturing capacity created by Middle Eastern oil producers +in the early 1980s. + Finally, virtually all major U.S. chemical manufacturers +have embarked on an extensive corporate restructuring program +to mothball inefficient plants, trim the payroll and eliminate +unrelated businesses. The restructuring touched off a flurry of +friendly and hostile takeover attempts. + GAF, which made an unsuccessful attempt in 1985 to acquire +Union Carbide Corp <UK>, recently offered three billion dlrs +for Borg Warner Corp <BOR>, a Chicago manufacturer of plastics +and chemicals. Another industry powerhouse, W.R. Grace <GRA> +has divested its retailing, restaurant and fertilizer +businesses to raise cash for chemical acquisitions. + But some experts worry that the chemical industry may be +headed for trouble if companies continue turning their back on +the manufacturing of staple petrochemical commodities, such as +ethylene, in favor of more profitable specialty chemicals that +are custom-designed for a small group of buyers. + "Companies like DuPont <DD> and Monsanto Co <MTC> spent the +past two or three years trying to get out of the commodity +chemical business in reaction to how badly the market had +deteriorated," Dosher said. "But I think they will eventually +kill the margins on the profitable chemicals in the niche +market." Some top chemical executives share the concern. + "The challenge for our industry is to keep from getting +carried away and repeating past mistakes," GAF's Heyman +cautioned. "The shift from commodity chemicals may be +ill-advised. Specialty businesses do not stay special long." + Houston-based Cain Chemical, created this month by the +Sterling investment banking group, believes it can generate 700 +mln dlrs in annual sales by bucking the industry trend. + Chairman Gordon Cain, who previously led a leveraged buyout +of Dupont's Conoco Inc's chemical business, has spent 1.1 +billion dlrs since January to buy seven petrochemical plants +along the Texas Gulf Coast. + The plants produce only basic commodity petrochemicals that +are the building blocks of specialty products. + "This kind of commodity chemical business will never be a +glamorous, high-margin business," Cain said, adding that demand +is expected to grow by about three pct annually. + Garo Armen, an analyst with Dean Witter Reynolds, said +chemical makers have also benefitted by increasing demand for +plastics as prices become more competitive with aluminum, wood +and steel products. Armen estimated the upturn in the chemical +business could last as long as four or five years, provided the +U.S. economy continues its modest rate of growth. + Reuter + + + + 8-APR-1987 11:20:27.61 + +usa + + + + + +F +f1387reute +d f BC-FEDERAL-PAPER-BOARD-< 04-08 0047 + +FEDERAL PAPER BOARD <FBO> IN MARKETING DEAL + MONTVALE, N.J., April 8 - Federal Paper Board Co Inc said +it has named Ozaki Trading Co Ltd of Osaka to represent it it +Japan on the sale of bleached paperboard. + Federal said it plans to open its own Japanese office in +the near future. + Reuter + + + + 8-APR-1987 11:21:05.09 +earn +usa + + + + + +F +f1390reute +d f BC-FIDATA-CORP-<FID>-4TH 04-08 0094 + +FIDATA CORP <FID> 4TH QTR LOSS + NEW YORK, April 8 - + Shr loss two cts vs profit 38 cts + Net loss 90,000 vs profit 1,685,000 + Revs 1,826,000 vs 29.3 mln + Year + Shr profit 3.37 dlrs vs profit 46 cts + Net profit 15.0 mln vs profit 2,047,000 + Revs 26.2 mln vs 123.6 mln + NOTE: Net includes pretax securities sale gain 10,000 dlrs +vs loss 1,000 dlrs in quarter and gain 486,000 dlrs vs loss +112,000 dlrs in year. + Net includes pretax gains on sale of businesses of nil vs +4,656,000 dlrs in quarter and 26.0 mln dlrs vs 4,656,000 dlrs +in year. + Net includes pretax losses on disposition of product line +of nil vs 3,150,000 dlrs in quarter and 3,300,000 dlrs vs +3,150,000 dlrs in year. + Quarter net includes tax credits of 102,000 dlrs vs 736,000 +dlrs. + Net includes reversal of tax loss carryforwards of 259,000 +dlrs vs 264,000 dlrs in quarter and tax loss carryforwards of +8,635,000 dlrs vs 579,000 dlrs in year. + Reuter + + + + 8-APR-1987 11:21:19.09 + +usa + + + + + +F +f1392reute +d f BC-CMS-<ACMS>-UNVEILS-FI 04-08 0111 + +CMS <ACMS> UNVEILS FIRST IBM SYSTEM/2 ADD ONS + TUSTIN, Calif., April 8 - CMS Enhancements Inc said it has +introduced the first add-on mass storage products for the new +International Business Machines Corp <IBM> IBM Personal +System/2 Model 30 personal computers. + CMS said the products are available immediately and include +hard disk drives, tape backup subsystems and a hard disk drive +on an expansion card. + It added it plans to introduce more products for higher- +end models of the IBM personal computers within the next two +months. + Prices for the new products range from 795 dlrs for a tape +backup subsystem, to 5,695 dlrs for a mass storage subsystem. + Reuter + + + + 8-APR-1987 11:21:24.56 +earn +usa + + + + + +F +f1393reute +d f BC-MARBLE-FINANCIAL-CORP 04-08 0042 + +MARBLE FINANCIAL CORP <MRBL> 1ST QTR NET + RUTLAND, Vt., April 8 - + Oper shr 26 cts vs not given + Oper net 866,000 vs 480,000 + NOTE: 1987 net excludes 157,000 dlr gain from termination +of pension plan. + Company went public in August 1986. + Reuter + + + + 8-APR-1987 11:22:35.93 + +usa + + + + + +F +f1402reute +d f BC-NANTUCKET-<NAN>-NAMES 04-08 0055 + +NANTUCKET <NAN> NAMES NEW HEAD FOR UNIT + NEW YORK, April 8 - Nantucket Industries Inc said James +Adams has been named president of its hosiery division, +replacing John Wineapple, and Terry Hampton has been named vice +president of manufacturing for the division, replacing Howard +Fromkin. + No reason was given for the changes. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-016.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-016.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-016.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-016.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2030 @@ + + + 9-APR-1987 16:55:59.00 + + +james-baker + + + + +V RM +f2652reute +f f BC-******TREASURY'S-BAKE 04-09 0013 + +******TREASURY'S BAKER SAYS MACROECONOMIC INDICATORS NEED MORE PROMINENT ROLE +Blah blah blah. + + + + + + 9-APR-1987 16:56:03.23 +acq + + + + + + +F +f2653reute +b f BC-******HOSPITAL-CORP-O 04-09 0012 + +******HOSPITAL CORP SAYS IT RECEIVED 47 DLR A SHARE OFFER FROM INVESTOR GROUP +Blah blah blah. + + + + + + 9-APR-1987 16:56:14.45 +earn +usa + + + + + +F +f2654reute +s f BC-BEVERLY-ENTERPRISES-< 04-09 0026 + +BEVERLY ENTERPRISES <BEV> SETS REGULAR DIVIDEND + PASEDENA, Calif., April 9 - + Qtly div five cts vs five cts prior + Pay July 13 + Record June 30 + Reuter + + + + 9-APR-1987 16:59:15.05 +money-fx + +james-baker + + + + +V RM +f2662reute +f f BC-******TREASURY'S-BAKE 04-09 0013 + +******TREASURY'S BAKER SAYS FLOATING EXCHANGE RATE SYSTEM NEEDS GREATER STABILITY +Blah blah blah. + + + + + + 9-APR-1987 17:03:06.18 +crude +usa + + + + + +Y +f2669reute +r f BC-/CRUDE-OIL-NETBACKS-U 04-09 0110 + +CRUDE OIL NETBACKS UP SHARPLY IN EUROPE, U.S. + NEW YORK, April 9 - Crude oil netback values in complex +refineries rose sharply in Europe and firmed in the U.S. last +Friday from the previous week but fell sharply in Singapore, +according to calculations by Reuters Pipeline. + The firmer tone to refining margins in Europe and the U.S. +relected higher prices for petroleum products, particularly +gasoline, and support from crude oil prices. + Netback values for crude oil refined in Northern Europe +rose substantially following strong gains in gasoline prices +there. Brent is valued at 19.45 dlrs, up 56 cts a barrel or +three pct from the previous week. + In the U.S. Gulf, sweet crudes rose in value by 14 cts to +19.33 dlrs for West Texas Intermediate, up about 0.7 pct. + Sour grades in the U.S. Gulf showed an increase of 33 cts a +barrel for Alaska North Slope, up 1.7 pct. + But netbacks for crude oil refined in Singapore fell +sharply, down 15 cts to as much as 68 cts a barrel as ample +distillate supplies weighed on petroleum product prices. + Attaka in Singapore is valued at 18.55 dlrs, a decline of +68 cts a barrel or 3.5 pct from the previous week. + For refineries in the Mediterranean, netback values were +mostly lower, with declines of seven to 14 cts. The value of +Kuwait crude fell 14 cts to 18.37 dlrs, while Iranian Light +fell 11 cts to 19.14 dlrs. + On the U.S. West Coast, netback values for ANS CIF L.A. +also jumped sharply, up 40 cts a barrel or 2.2 pct to 18.82 +dlrs on higher gasoline prices. + Reuter + + + + 9-APR-1987 17:04:00.71 +money-fx +usa +james-baker +imf + + + +V RM +f2670reute +b f BC-TREASURY'S-BAKER-SAYS 04-09 0098 + +TREASURY'S BAKER SAYS SYSTEM NEEDS STABILITY + WASHINGTON, April 9 - Treasury Secretary James Baker said +the floating exchange rate system has not been as effective as +had been hoped in promoting stability and preventing imbalances +from emerging in the global economy. + In remarks before the afternoon session of the +International Monetary Fund's Interim Committee, Baker said he +was not suggesting that the system should be abandoned. + "But I do suggest," he said, "that we need something to give +it more stability and to keep it headed in the right direction +when the wind shifts." + He said that indicators can serve "as a kind of compass" but +added that structural indicators can help focus attention on +some policies. + Baker, however, said the IMF "needs to move beyond +macroeconomic indicators and find structural indicators that +can help focus attention on some of the policies of specific +relevance to the imbalances we face today." + The Treasury Secretary said that indicators should be given +a more prominent role in the annual economic reviews -- Article +IV consultations -- that the Fund performs. + Baker also told the policy making group that it was time +for the IMF to adopt earlier recommendations making IMF +surveillance more relevant to national policymakers and the +public. + "In particular, we urge increased publicity for IMF +appraisals developed in Article IV consultations, the use of +follow-up reports on country actions to implement IMF +recommendations, and greater use of special consultation +procedures," he said. + Baker emphasized that indicators were a device "for moving +beyond rhetoric to action." + He said they provide "more structure to the system, and +induce more discipline and peer pressure into the process of +policy coordination." + He said the Fund's procedures for surveillance need to be +reviewed and updated to reflect the use of indicators. + "This should be matter of priority for the executive board," +he said. + Baker also urged the Fund to develop alternative +medium-term economic scenarios for countries that "can help us +focus even more clearly on the most important imbalances, by +identifying options for addressing them and analyzing the +implications of these options." + He said also that further work should be done on finding +paths that lead toward possible medium-term objectives. + "If we are to take effective remedial action when there are +significant deviations from an intended course, then we must +have more definitive ways of indentifying the right course for +key variables," he said. + Reuter + + + + 9-APR-1987 17:07:18.35 +acqcrudenat-gas +usa + + + + + +F +f2677reute +r f BC-NERCI-<NER>-UNIT-CLOS 04-09 0083 + +NERCI <NER> UNIT CLOSES OIL/GAS ACQUISITION + PORTLAND, Ore., April 9 - Nerco Inc said its oil and gas +unit closed the acquisition of a 47 pct working interest in the +Broussard oil and gas field from <Davis Oil Co> for about 22.5 +mln dlrs in cash. + Nerco said it estimates the field's total proved developed +and undeveloped reserves at 24 billion cubic feet, or +equivalent, of natural gas, which more than doubles the +company's previous reserves. + The field is located in southern Louisiana. + Reuter + + + + 9-APR-1987 17:10:03.66 + +usauksouth-africanamibia + +un + + + +C M +f2679reute +d f AM-TERRITORY-COUNCIL-1ST LD'*'*'* 04-09 0131 + +U.S. AND BRITAIN VETO SANCTIONS AGAINST S.AFRICA + UNITED NATIONS, April 9 - For the second time in seven +weeks, the United States and Britain vetoed a Security Council +resolution to impose mandatory sanctions against South Africa. + Nine of the Council's 15 members voted for the draft, aimed +at forcing South Africa to implement an eight-year-old U.N. +independence plan for Namibia (South West Africa), a vast, +sparsely populated territory rich in minerals. + The U.S. and Britain were joined by West Germany in casting +negative votes. France, Italy and Japan abstained. + The resolution called for comprehensive mandatory sanctions +because Pretoria insists on making Namibian independence +conditional on the withdrawal of more than 30,000 Cuban troops +from neighbouring Angola. + Reuter + + + + 9-APR-1987 17:14:55.93 +money-fxgraincottonlivestockgoldsilver +usa + + + + + +F C G L M T +f2692reute +r f BC-media-summary 04-09 0127 + +U.S. DOLLAR LOSSES PROPEL BROAD COMMODITY GAINS + by Keith Leighty, Reuters + CHICAGO, April 9 - Commodities from gold to grains to +cotton posted solid gains in a flurry of buying today as losses +in the U.S. dollar and rising interest rates kindled fears of +inflation and economic instability. + Gains were most pronounced on the Commodity Exchange in New +York, where gold jumped 12.40 dlrs and closed at 436.50 dlrs a +troy ounce, and silver 22.5 cents to 6.86 dlrs a troy ounce. + A key factor behind the advance was anticipation that +inflation will be the only way for the major industrial nations +to halt the slide in the value of the U.S. dollar, said Steve +Chronowitz, director of commodity research with Smith Barney, +Harris Upham and Co., in New York. + The dollar tumbled one day after top finance officials from +the seven largest industrial nations reaffirmed their +commitment to support its value, and despite reports of +intervention by the U.S. Federal Reserve Bank, traders said. + Traders said it appears that the industrial nations, known +as the Group of Seven, lack the ability to change the long-term +direction of the currency markets. + "Maybe they have some ideas or plans," said Chronowitz. "If +they do, it's not evident." + "It looks like there's no cure but to let the free market +take values to where they should be. + "One way or another, we will force our major trading +partners to stimulate their economies," as a measure to correct +the mounting U.S. trade deficit, Chronowitz said. + "I think the markets believe, and have believed for a long +time, that the only recourse is to reflate at some point. It's +going to be a long and tedious process, but that's what's +happening," he said. + The falling value of the dollar makes U.S. commodities +cheaper for foreign buyers, stimulating demand. + At the same time, traders who are holding stocks and bonds +saw the value of their investments falling and many are turning +to commodities such as precious metals as a hedge, said Marty +McNeill, a metals analyst in New York with the trading house of +Dominick and Dominick. + The reaction in the metal markets reverberated throughout +the commodities markets, as grains, livestock, and cotton +posted broad gains. + Traders at the Chicago Board of Trade said attention in the +grain markets has shifted from concern about burdensome +supplies to the outlook that a lower dollar will stimulate +export demand. + After the close of trading, the Agriculture Department +raised its estimate for grain imports by the Soviet Union by +two mln tonnes from the month-earlier report. + Live hogs and frozen pork bellies posted sharp gains on the +Chicago Mercantile Exchange, while live cattle were moderately +higher. + Analysts said several factors boosted hog prices. They said +hogs haven't been making the weight gains that are normal at +this time of year, and farmers have been too busy with field +work to market animals. + Reuter + + + + 9-APR-1987 17:15:43.34 + +usa + + + + + +F +f2694reute +u f BC-GENERAL-MOTORS-<GM>-T 04-09 0052 + +GENERAL MOTORS <GM> TO IDLE 9,800 WORKERS + DETROIT, April 9 - General Motors Corp said it will +temporarily lay off 9,800 workers at two plants next week. + The layoffs will bring to 11,900 the number of General +Motors workers temporarily let go by the company. + Indefinite layoffs remain unchanged at 37,000. + General Motors said its Chevrolet-Pontiac-GM of Canada +plant at Okalhoma City, Okla., will be shut down April 13 +through April 20 for inventory adjustment. Some 5,500 workers +will be idled at the plant. + General Motors' Chevrolet-Pontiac-GM of Canada plant at +Doraville, Ga., will be closed for the same period for +inventory adjustment, with 4,300 workers affected. + The company's Lakewood, Ga., plant has been shut since +December, with 2,100 workers on temporary layoff. + General Motors said it will have one car plant and five +truck plants working on on overtime Saturday, April 11. + Reuter + + + + 9-APR-1987 17:16:11.81 + +usa + + + + + +F +f2695reute +d f BC-TENNEX-INDUSTRIES-TO 04-09 0076 + +TENNEX INDUSTRIES TO BUILD PLANT IN TENNESSEE + NASHVILLE, Tenn., April 9 - <Tennex Industries Inc>, a +Japanese owned supplier of air cleaners for the automotive +industry, said it will build a seven mln dlr plant in +Munfreesboro, Tenn. + The company said the 37,500-square-foot plant will +initially supply parts to <Nissan Motor Manufacturing Corp USA> +in nearby Smyna. + The company said it hopes to eventually produce parts for +other U.S. car makers. + Reuter + + + + 9-APR-1987 17:16:58.84 +graincorn +usaegypt + + + + + +C G +f2697reute +u f BC-EGYPT-SEEKING-500,000 04-09 0034 + +EGYPT SEEKING 500,000 TONNES CORN - U.S. TRADERS + KANSAS CITY, April 9 - Egypt is expected to tender April 22 +for 500,000 tonnes of corn for May through September shipments, +private export sources said. + Reuter + + + + 9-APR-1987 17:20:34.87 +earn +usa + + + + + +F +f2704reute +r f BC-TRUSTCORP-INC-<TTCO> 04-09 0048 + +TRUSTCORP INC <TTCO> 1ST QTR NET + TOLEDO, Ohio, April 9 - + Shr 67 cts vs 62 cts + Net 9,160,000 vs 7,722,000 + Assets 4.5 billion vs four billion + Note: Shr and net data are before accounting change +announced in 1986, which added 30 cts a share to year-ago 1st +qtr results. + Reuter + + + + 9-APR-1987 17:28:02.76 +grainship +usa + + + + + +G +f2720reute +r f BC-ny-grain-freights 04-09 0065 + +N.Y. GRAIN FREIGHTS - April 9 + Nidera took TBN 12,000 tonnes HSS Toledo to Casablanca +April 29-May 5 25.00 dlrs three days load 1,000 discharge + Comanav took Radnik 20,000 tonnes Lakehead to Morocco April +15-25 22.00 dlrs 5,000 load 3,000 discharge + Krohn took Akron 75,000 tonnes anygrains on 55 feet stowage +Mississippi River to Rotterdam May 1-10 8.05 dlrs 12 days all +purposes + Continental took Legionario 40,000 tonnes River Plate to +Japan April 25-May 10 22.50 dlrs 2,000 load 5,000 free +discharge + Garnac took Sokorri 30,000 tonnes U.S. Gulf to Constanza +April 15-25 17.00 dlrs load terms unknown 3,000 discharge + reuter + + + + + + 9-APR-1987 17:28:46.65 +earn +usa + + + + + +F +f2724reute +h f BC-NAPA-VALLEY-BANCORP-< 04-09 0019 + +NAPA VALLEY BANCORP <NVBC> 1ST QTR NET + NAPA, Calif, April 9 - + Shr 20 cts vs 25 cts + Net 487,000 vs 435,000 + Reuter + + + + 9-APR-1987 17:29:59.20 +earn +usa + + + + + +F +f2728reute +h f BC-INTERNATIONAL-POWER-M 04-09 0078 + +INTERNATIONAL POWER MACHINES <PWR> 4TH QTR LOSS + MESQUITE, Texas, April 9 - + Shr loss 21 cts vs loss 28 cts + Net loss 817,000 vs loss 1,058,000 + Revs 5,627,000 vs 7,397,000 + Year + Shr loss 75 cts vs loss 1.36 dlrs + Net loss 2,872,000 vs loss 5,200,000 + Revs 23.3 mln vs 21.1 mln + Note: 1985 net includes 1,255,000 adjustment in inventory +valuations and 486,000 in cost-reduction expenses. + Full name is International Power Machines Corp. + Reuter + + + + 9-APR-1987 17:33:46.96 + +usa + + +cboe + + +F RM +f2736reute +u f BC-CBOE-TO-LIST-NEW-S-AN 04-09 0112 + +CBOE TO LIST NEW S AND P OPTIONS <NSX> APRIL 20 + CHICAGO, April 9 - The Chicago Board Options Exchange, +CBOE, said it will list new Standard and Poor 500 stock index +options beginning April 20 that will trade side-by-side with +the existing S and P 500 options <SPX>. + The new S and P 500 option contract differs from the +existing contract in that settlement of the new contract will +be based on the opening value of the index on expiration +Friday. Settlement of the existing contract is based on the +closing value of the index on expiration Friday. + The new opening settlement S and P 500 options will be +offered only in months in which there are S and P 500 futures. + Initial months to be listed in the new options will be +June, September and December, the CBOE said. + Dissemination of the settlement of price of the new options +will be made through a special ticker symbol -- <SET>, the +exchange said. + There will initially be seven series of strike prices for +each contract month of the new options -- one strike price "at +the money," or near to the actual spot index value, and three +above and three below the spot index. + Position limits in any combination of both the new and +existing S and P 500 options will be 15,000 contracts. + The exchange said in the rare event that a stock does not +open on expiration Friday, the previous day's closing price of +that stock will be used to calculate the settlement value of +the index. + Reuter + + + + 9-APR-1987 17:35:06.68 + +usa + +ec + + + +F A RM +f2743reute +r f BC-EC-WARNS-AGAINST-PASS 04-09 0111 + +EC WARNS AGAINST PASSAGE OF TEXTILE BILL + WASHINGTON, April 9 - The European Community has told +Congress that if textile legislation injuring EC interests is +approved, there was no doubt the community would retaliate +against U.S. exports. + Roy Denmam, head of the EC delegation here, issued the +warning in a letter to Senator Lloyd Bentsen, chairman of the +Finance Committee. A copy of the letter was provided Reuters. + Denmam told Bentsen, a Texas Democrat, that if the textile +legislation passed on its own or was included in an omnibus +trade bill and injured EC interests, "there should be no doubt +that the EC will retaliate against the United States." + He added that "at a time when U.S. textile exports to the EC +are growing rapidly, one result of such retaliation would be a +substantial reduction of U.S. exports and jobs." + The textile legislation, backed strongly by the industry, +hard hit by imports, and by senators from textile-producing +states would impose new tough global quotas on textile imports +and for the first time include Europe in the quotas. + Reagan Administration officials have also opposed the +textile legislation, saying that if it passed it would likely +prompt a presidential veto. + Denman made his comments on the textile issue in a general +assessment of the Senate trade bill, titled S.490. + He said he was concerned about provisions in the Senate +bill that would limit, if not eliminate, the president's +discretion if retaliating against nations for keeping their +home markets closed to foreign goods. + U.S. Trade Representative Clayton Yeutter has also opposed +those provisions, arguing that presidential flexibility was +needed in order to be able to negotiate with countries to open +their markets, with retaliation being retained as a final, but +discretionary, weapon. + The pending overall trade legislation would force the +Administration to consult often with Congress and seek its +approval during step-by-step GATT negotiations. + He said "enactment of S. 490 would reduce the confidence of +other governments in America's commitment to multinational +trade." + Summing up the senate legislation, Denman said "a number of +provisions of that bil may achieve the opposite of what is +intended and lead to dangerous consequences for the world and +the U.S. economy." + Reuter + + + + 9-APR-1987 17:39:34.36 + +usa + + +cboe + + +C +f2752reute +u f BC-CBOE-TO-LIST-NEW-S-AN 04-09 0110 + +CBOE TO LIST NEW S AND P OPTIONS APRIL 20 + CHICAGO, April 9 - The Chicago Board Options Exchange, +CBOE, said it will list new Standard and Poor 500 stock index +options beginning April 20 that will trade side-by-side with +the existing S and P 500 options. + The new S and P 500 option contract differs from the +existing contract in that settlement of the new contract will +be based on the opening value of the index on expiration +Friday. Settlement of the existing contract is based on the +closing value of the index on expiration Friday. + The new opening settlement S and P 500 options will be +offered only in months in which there are S and P 500 futures. + Initial months to be listed in the new options will be +June, September and December, the CBOE said. + Dissemination of the settlement price of the new options +will be made through a special ticker symbol -- <SET>, the +exchange said. + There will initially be seven series of strike prices for +each contract month of the new options -- one strike price "at +the money," or near to the actual spot index value, and three +above and three below the spot index. + Position limits in any combination of both the new and +existing S and P 500 options will be 15,000 contracts. + The exchange said in the rare event that a stock does not +open on expiration Friday, the previous day's closing price of +that stock will be used to calculate the settlement value of +the index. + Reuter + + + + 9-APR-1987 17:39:43.66 + +usa + + + + + +F +f2753reute +u f BC-THREE-TRADERS-INDICTE 04-09 0111 + +THREE TRADERS INDICTED FOR INSIDER TRADING + NEW YORK, April 9 - A Grand Jury in Manhattan Federal Court +indicted three arbitrageurs, charging they swapped inside +information between their firms, Goldman Sachs and Co and +Kidder Peabody and Co, court documents showed. + Robert Freeman, head of risk arbitrage at Goldman +Sachs and Co, Richard Wigton, an employee of Kidder Peabody Co +Inc, and Timothy Tabor, also formerly with Kidder, were charged +with trading on inside information between June 1984 and +January 1986. They were arrested in February. + The indictments also alledged that Goldman Sachs and +Freeman made money on the insider trading scheme. + According to the indictment, Freeman exchanged inside +information with Martin Siegel, who at the time was a vice +president of Kidder Peabody. + Siegel pleaded guilty last February 13 to charges he +participated in the conspiracy. The indictment charged Siegel +passed on non-public information to both Wigton and Tabor from +Freeman. + Reuter + + + + 9-APR-1987 17:41:35.88 +acq +usa + + + + + +F +f2762reute +r f BC-GREAT-AMERICAN-MGMT<G 04-09 0102 + +GREAT AMERICAN MGMT<GAMI> HAS ATCOR<ATCO> STAKE + WASHINGTON, April 9 - Great American Management and +Investment Inc told the Securities and Exchange Commission it +acquired a 7.7 pct stake in Atcor Inc. + Great American said it bought the stake for investment. + It added that it has also considered--but not yet +decided--to buy additional Atcor shares, either in the open +market, in private transactions, through a tender offer or +otherwise. + Great American said it paid about 6.1 mln dlrs for its +462,400 Atcor shares. It said its most recent purchases +included 191,400 shares bought March 18-April 6. + Reuter + + + + 9-APR-1987 17:42:26.40 +earn +usa + + + + + +F +f2764reute +h f BC-RAI-RESEARCH-CORP-<RA 04-09 0072 + +RAI RESEARCH CORP <RAC> 3RD QTR FEB 28 NET + HAUPPAUGE, N.Y., April 9 - + Oper shr one ct vs 13 cts + Oper net 17,806 vs 312,692 + Revs 1,318,165 vs 2,239,349 + Nine mths + Oper shr 27 cts cs 28 cts + Oper net 640,156 vs 671,291 + Revs 5,612,818 vs 5,632,044 + Note: Oper excludes gain from discontinued operations of +15,598 for year-ago qtr and loss from discontinued operations +of 49,040 for year-ago nine mths. + Reuter + + + + 9-APR-1987 17:42:36.85 +earn +canada + + + + + +E F +f2765reute +r f BC-moore 04-09 0110 + +MOORE <MCL> SEES SUBSTANTIAL 1987 PROFIT GAIN + TORONTO, April 9 - Moore Corp Ltd expects 1987 profits from +continuing operations will exceed 1986 results and recover to +1985 levels when the company earned 152 mln U.S. dlrs or 1.70 +dlrs a share, president M. Keith Goodrich said. + "We'll have a substantial increase in earnings from +continuing operations," he told reporters after the annual +meeting. He said he expected profits would recover last year's +lost ground and reach 1985 results. + In 1986, profits from continuing operations slumped to +139.5 mln dlrs or 1.54 dlrs a share. The total excluded losses +of 30 mln dlrs on discontinued operations. + Goodrich said Moore is still actively looking for +acquisitions related to its core areas of business forms +manufacturing or handling. + "We could do a large acquisition," he said when asked if +the company could raise as much as one billion dlrs for this +purpose. + Chairman Judson Sinclair, answering a shareholder's +question, told the annual meeting that a special resolution +passed by shareholders to create a new class of preferred +shares would allow Moore to move quickly if it decided to +pursue an acquisition. + "If we were to make a major acquisition ... it means we can +move with a certain expediency," Sinclair said. + Asked if the resolution was designed to give Moore +protection from a possible hostile takeover, Sinclair said +only, "I know of no threat to the corporation at this time." + + Reuter + + + + 9-APR-1987 17:47:39.74 + +usa + + + + + +F +f2772reute +r f BC-ARVIN-<ARV>-RAISES-NU 04-09 0081 + +ARVIN <ARV> RAISES NUMBER OF AUTHORIZED SHARES + COLUMBUS, Ind., April 9 - Arvin Industries Inc said its +shareholders at the annual meeting voted to increase authorized +common shares to 50 mln from 30 mln. + The company told shareholders that the offering of 1.7 mln +common shares in January raised 50 mln dlrs, and the 500 shares +of variable rated preferred stock offered in February also +raised 50 mln dlrs. The company said it also placed 150 mln +dlrs in long-term debt in March. + Reuter + + + + 9-APR-1987 17:49:07.93 + +usa + + + + + +F +f2775reute +r f BC-RAYTHEON-<RTN>-WINS-U 04-09 0085 + +RAYTHEON <RTN> WINS U.S. NAVY CONTRACT + LEXINGTON, Mass., April 9 - Raytheon Co said the United +States Navy awarded it a 215.3 mln dlr contract to produce +1,927 AIM/RIM-7M Sparrow Missile Guidance and Control Sections +and associated hardware. + Under the contract, the company said it will provide +missiles and associated hardware to the U.S. Navy and Air Force +and to several U.S. allies. + Raytheon said the contract represents the major share of +the fiscal 1987 competitive Sparrow missile procurement. + Reuter + + + + 9-APR-1987 17:50:16.86 +acq +usa + + + + + +F +f2777reute +r f BC-FIRM-HAS-14.8-PCT-OF 04-09 0102 + +FIRM HAS 14.8 PCT OF DECISION/CAPITAL FUND<DCF> + WASHINGTON, April 9 - Gabelli Group Inc said it and two +subsidiaries held a total of 295,800 Decision/Capital Fund Inc +shares or 14.8 pct of the total outstanding. + It said the shares were held on behalf of investment +clients and it said it had no intention of seeking control of +the fund. + Gabelli said its most recent purchases of Decision/Capital +Fund stock included 95,800 shares bought April 3-6 on the +Philadelphia Stock Exchange. + Gabelli is an investment firm headquartered in New York +City. Its Gabelli and Co subsidiary is a brokerage firm. + Reuter + + + + 9-APR-1987 17:51:34.88 + +usa + + + + + +A RM +f2779reute +r f BC-CONSUMERS-POWER-<CMS> 04-09 0077 + +CONSUMERS POWER <CMS> TO REDEEM BONDS + JACKSON, Mich., April 9 - Consumers Power Co said it has 56 +mln dlrs available to be used to redeem at par any 15 pct +series first mortgage bonds that are not exchanged under an +outstanding bond exchange program. + The utility on March 17 offered to exchange its 15 pct +first mortgage bonds due March 1, 1994 for a new series of +first mortgage bonds, 9-1/4 pct due April 1, 1997. The offer +will expire April 14, 1987. + Reuter + + + + 9-APR-1987 17:52:21.04 + +usa + + + + + +F +f2782reute +u f BC-SEMICONDUCTOR-BOOK-TO 04-09 0110 + +SEMICONDUCTOR BOOK TO BILL RATIO AT 1.21 PCT + CUPERTINO, Calif., April 9 - The Semiconductor Industry +Association put the three-month average book-to-bill ratio at +1.21, which was above analysts' expectations and reflects the +sixth straight increase in this indicator of computer industry +activity. + Average booking in the three month period ended in March +totaled 910.8 mln dlrs, up 15.6 pct from a month ago and the +highest bookings since September, 1984. March billings, or +computer chip sales in the month, totaled 912.1 mln dlrs, up +34.6 pct from a month ago, the association said. The three +month average billings totaled 751.3 mln dlrs, up 6.5 pct. + March billings were the strongest recorded since November, +1984, the association said. The book to bill ratio, at 1.21, +was the highest since May, 1984, it noted. + Preliminary total solid state shipments for the first +quarter of 1987 totaled 2.25 billion dlrs, up 4.9 pct from last +quarter and up 15.9 pct from last year's first quarter. + Semiconductor Industry Association President Andrew +Procassini said the rise in the book to bill was due to a +substantial increase in U.S. bookings during March. + "We believe that the bookings increase reflects growing +confidence by electronic equipment manufacturers that some +end-equipment market segments have improved substantially +during the first quarter," Procassini said in a statement. + The association also revised its book-to-bill ratio +estimate for the three months ended in February to 1.12, from +1.13 earlier. It further revised the January book-to-bill +figure to 1.09 from 1.12 estimated earlier. + The three-month average book-to-bill ratio of 1.21 for +March means for every 100 dlrs worth of product shipped, +computer chip maker received 121 dlrs in new orders. + Drexel Burnham Lambert Inc analyst Michael Gumport said +association numbers indicate March orders were up 20 pct above +the normal seasonal level. + The association does not break out March orders from its +three-month average, which it put at 910.8 mln dlrs. + Gumport noted the three-month average bookings were well +above the 800-865 mln dlrs anticipated by the industry. + He said semiconductor stock could rise five to ten pct on +the stock market open tomorrow, due to the positive numbers. + "Skeptics are going to have to have some pretty strong +reasons not to like this group (of stocks)," Gumport said. + Kidder Peabody and Co analyst Michael Kubiak said the ratio +indicates March orders at about one billion dlrs, which would +be the highest monthly order rate since April, 1984. + He predicted at least a five pct rise in semiconductor +stocks on the open, and said the stock group could soar as high +as 15 pct during the session. + "One month does not a boom-time make, but this is very good +news," he said. + Kubiak attributed the stong semiconductor orders to +strength in the personal computer market, inventory restocking +and strong buying by distributors. + Purchasing managers had been keeping computer chip +inventories low, due to the overcapacity in the industry and +the slow growth of the economy in general, analysts noted. + The semiconductor industry has been in a slump for the past +three years. + The analysts said the March order and sales numbers are the +strongest evidence yet that the trend may be turning. + Nevertheless, they do not expect the Administration to +retreat from proposed sanctions against Japanese chip makers. + They added, however, if the industry continues to improve, +it could mean the sanctions will be short term. + Jack Beedle, President of In-Stat, an electronics industry +research firm, called the March numbers "excellent", but also +cautioned against excessive optimism. + "I still believe caution should be the word, rather than +euphoria," said Beedle, adding that he has yet to see strong +indications from the general economy or the computer industry +that support a solid, long-term recovery. + Beedle said while he thinks the semiconductor industry will +have a very good second quarter, he still thinks positive +shifts in exports and industrial production are needed to +sustain a recovery. + Reuter + + + + 9-APR-1987 17:54:38.77 +acq +usa + + + + + +F +f2786reute +u f BC-PARTNERSHIP-BUYS-IPCO 04-09 0097 + +PARTNERSHIP BUYS IPCO <IHS> STAKE OF 6.8 PCT + WASHINGTON, April 9 - MP Co, a New York investment +partnership, told the Securities and Exchange Commission it +bought a 6.8 pct stake in IPCO Corp common stock. + The partnership said it acquired 346,600 IPCO shares, +paying 4.9 mln dlrs, because it believed the securities to be +"an attractive investment opportunity." + It said it planned to regularly review its investment and +may in the future recommend business strategies or an +extraordinary corporate transaction such as a merger, +reorganization, liquidation or asset sale. + The partnership is controlled by Marcus Schloss and Co Inc, +a New York brokerage firm, and Prime Medical Products Inc, a +Greenwood, S.C., medical supplies firm. + Reuter + + + + 9-APR-1987 17:56:18.18 +earn +usa + + + + + +F +f2792reute +d f BC-DELMED-INC-<DMD>-YEAR 04-09 0081 + +DELMED INC <DMD> YEAR LOSS + FREEHOLD, N.J., April 9 - + Oper shr loss 30 cts vs loss 1.27 dlrs + Oper net loss 8,648,000 vs loss 25.6 mln + Revs 27.4 mln vs 33.3 mln + Avg shrs 29.1 mln vs 20.1 mln + Note: Oper excludes loss on provision for discontinued +operations of 971,000 vs 12.2 mln and loss from conversion of +debt 587,000 vs gain of 1,734,000. + 1985 oper excludes loss from pension plan liquidation of +631,000 and loss from discontinued operations of 1,015,000. + + Reuter + + + + 9-APR-1987 17:56:55.34 + +usa + + + + + +F +f2793reute +r f BC-MARCH-TRUCK-SALES-SAI 04-09 0058 + +MARCH TRUCK SALES SAID UP 16.4 PCT + DETROIT, April 9 - Retail sales of trucks in March rose +16.4 pct over the same month last year, said the Motor Vehicle +Manufacturers Association. + The trade group said dealers sold 377,617 trucks in March, +up from 324,327 last year. + Year-to-date truck sales were up 3.6 pct at 934,074 from +1986's 901,757. + Reuter + + + + 9-APR-1987 18:01:43.61 + +usa + + + + + +F +f2798reute +r f AM-ASPIRIN (EMBARGOED) 04-09 0097 + +DRUG INDUSTRY ATTACKED ON ASPIRIN ISSUE + CHICAGO, April 9 - Elements of the drug industry endangered +the lives of children by pressuring the government to delay a +now common warning on the link between aspirin and an often +fatal disease, a doctor said. + The warning involving Reye's Syndrome has since been +required on aspirin products under a Food and Drug +Administration (FDA) directive of one year ago, and now appears +on the labels of aspirin and aspirin-containing products. + The industry under government coaxing began voluntarily +printing warning labels in mid-1985. + + But in an editorial in this week's Journal of the +American Medical Association, Dr Edward Mortimer of Case +Western Reserve University in Cleveland said some aspirin +manufacturers misled physicians and acted irresponsibly in +opposing the warning for several years before then. + Mortimer's criticism was prompted by a new government study +published in the same issue of the Journal which said it had +found a "strong association" between aspirin and Reye's Syndrome. + Reye's Syndrome, which kills about 20 per cent of its +victims, strikes following chicken pox, influenza and other +illnesses. Symptoms include lethargy, belligerence and +excessive vomiting. Those who survive sometimes suffer brain +damage. + + Reuter + + + + 9-APR-1987 18:04:04.54 +acq + + + + + + +E F +f2802reute +b f BC-cadillac-fairview-say 04-09 0011 + +******CADILLAC FAIRVIEW SAYS IT HAS RECEIVED SOME ACQUISITION PROPOSALS +Blah blah blah. + + + + + + 9-APR-1987 18:04:24.13 + +usa + + + + + +F +f2803reute +r f BC-GM-<GM>-UNIT-GETS-BOE 04-09 0053 + +GM <GM> UNIT GETS BOEING <BA> CONTRACT + IRVINE, Calif., April 9 - General Motors Corp's Hughes +Aircraft Co said it received a contract worth more than 20 mln +dlrs from Boeing Co's Boeing Commercial Airplane Co. + Hughes will supply a cabin entertainment and service system +for Boeing's new 747-4000 jumbo jetliners. + Reuter + + + + 9-APR-1987 18:05:37.57 + +usa + + + + + +F +f2804reute +d f BC-AUDEC-IN-PRIVATE-PLAC 04-09 0057 + +AUDEC IN PRIVATE PLACEMENT OF STOCK, WARRANTS + SADDLEBROOK, N.J., April 9 - <Audec Corp> said it sold +privately 24 units, each consisting of 40,000 common shares and +40,000 redeemable common share purchase warrants, for a total +of 480,000 dlrs. + Audec said the sale was part of its plan to place a total +of 28 units at 20,000 dlrs each. + Reuter + + + + 9-APR-1987 18:09:50.90 + +usafrance + +worldbankimf + + + +RM A +f2808reute +u f BC-FRENCH-PROPOSE-NEW-WO 04-09 0109 + +FRENCH PROPOSE NEW WORLD BANK DEBT FACILITY + WASHINGTON, April 9 - The French government said it +proposed the creation of a new facility for development and for +debt reduction under the framework of the World Bank. + In a statement issued in conjunction with the meeting of +the International Monetary Fund's policy-making Interim +Committee, the French said the "multilateral resources thus +collected would permit a partial refinancing on highly +concessional terms of previously rescheduled official debts." + The statement said the "French government believes it is +necessary to take new steps to deal with the issue of the +poorest countries' debt." + The French statement said that Paris club reschedulings +should have a lengthening of the repayment period up to between +15 and 20 years instead of the current limit of 10 years. + And grace periods would be extended. + "These measures would be confined to the poorest, heavily +indebted countries and would be decided on a case-by-case +basis," it said. + The French also called for making the IMF's compensatory +financing facility for export shortfalls more concessional. + Reuter + + + + 9-APR-1987 18:10:34.32 +acq +canada + + + + + +E F +f2810reute +r f BC-cadillac-fairview-say 04-09 0066 + +CADILLAC FAIRVIEW SAYS IT RECEIVED TAKEOVER BIDS + Toronto, April 9 - <Cadillac Fairview Corp Ltd> said it +received proposals to acquire the company, following its +announcement last August that it had retained investment +dealers to solicit offers for all outstanding common shares. + Cadillac Fairview said the offers are subject to +clarification and negotiation and offered no further details. + Reuter + + + + 9-APR-1987 18:16:05.61 + +usa + + + + + +F +f2816reute +r f BC-ONE-CHRYSLER-<C>-PLAN 04-09 0083 + +ONE CHRYSLER <C> PLANT TO WORK OVERTIME + DETROIT, April 9 - Chrysler Corp said one of its U.S. car +and truck assembly plants will work overtime next week. + Six of its seven U.S. facilities will work during the week. +The plant on overtime, both during the week and on Saturday, +April 11, is the company's Sterling Heights, Mich., factory. + The company's U.S. plants and offices will be closed +Friday, April 17, and Monday, April 20, for the Good Friday and +Martin Luther King Jr. holidays. + Reuter + + + + 9-APR-1987 18:19:25.11 + +usa + +ec + + + +C G +f2817reute +d f BC-EC-WARNS-AGAINST-PASS 04-09 0131 + +EC WARNS AGAINST PASSAGE OF TEXTILE BILL + WASHINGTON, April 9 - The European Community (EC) will +retaliate against U.S. textile exports if Congress passes trade +legislation damaging European interests, an EC official warned +today. + Roy Denman, head of the EC delegation here, issued the +warning in a letter to Senator Lloyd Bentsen, chairman of the +Finance Committee. A copy was provided to Reuters. + The bill, backed by the textile industry and senators from +textile-producing states, would impose global quotas on textile +imports and for the first time include Europe. + Denman said he was concerned about provisions in the bill +that would limit, if not eliminate, the president's discretion +in retaliating against nations that keep their home markets +closed to foreign goods. + Reuter + + + + 9-APR-1987 18:20:35.91 +shipcrude +usa + + + + + +C +f2818reute +u f BC-ny-tankers 04-09 0084 + +N.Y. TANKERS - April 9 + Tennaco took Nicopolis part cargo 50,000 tons dirty April +12 Caribbean to U.S. Gulf worldscale 130 + Exxon took Brazil Glory 77,000 tons dirty April 17 East +Coast Mexico to U.S. Atlantic Coast worldscale 75 + Champlin took Tamba Maru part cargo 57,000 tons crude April +18 Caribbean to U.S. Gulf worldscale 105 + Pecten took World Cliff part cargo 74,500 tons dirty April +14 Sullom Voe to U.S. Atlantic Coast/U.S. Gulf worldscale 70 +for Atlantic Coast worldscale 67.5 for Gulf + Crown Petroleum took British Skill (Gotco relet) part cargo +100,000 tons dirty April 18 West Africa to U.S. Gulf worldscale +63 + Oroleum took Marika P. part cargo 59,000 tons dirty April +16 Caribbean to U.S. Atlantic Coast/U.S. Gulf rate not reported + Reuter + + + + + + 9-APR-1987 18:21:04.22 +acq +usa + + + + + +F +f2819reute +d f BC-WINTERHALTER-<WNTLC> 04-09 0044 + +WINTERHALTER <WNTLC> HOLDERS OKAY TAKEOVER + ANN ARBOR, Mich., April 9 - Winterhalter Inc said its +shareholders approved the 525,000 dlr acquisition of +Winterhalter by Interface Systems Inc <INTF>. + The acquisition would be for 15 cts per Winterhalter share. + Reuter + + + + 9-APR-1987 18:24:01.68 + +usa + + + + + +F +f2822reute +d f BC-LIBERTY-FINANCIAL-<LF 04-09 0078 + +LIBERTY FINANCIAL <LFG> PRESIDENT TO RESIGN + HORSHAM, Pa., April 9 - Harold H. Kline, 48, will resign on +May one as president of Liberty Financial Group Inc and its +Liberty Savings Bank unit to pursue other business +opportunties, the company said. + The company said Kline's post will be filled by Charles G. +Cheleden, chairman and chief executive officer. + Kline will continue to serve on the boards of Liberty +Financial and Liberty Savings, the company added. + Reuter + + + + 9-APR-1987 18:25:31.98 + +usa + + + + + +F +f2824reute +r f BC-IMMUNOMEDICS-<IMMU>-T 04-09 0105 + +IMMUNOMEDICS <IMMU> TO SELL COMMON STOCK + NEWARK, N.J., April 9 - Immunomedics Inc said it filed a +registration statement with the Securities and Exchange +Commission for the proposed sale of 2,500,000 shares of common +stock. + The company said it will sell 2,100,000 shares and that +certain stockholders will sell the remaining 400,000 shares. + Proceeds from the offering will be used for product +development, basic research, staff expansion, prepayment of +debt, capital expenditures and working capital, the company +said. The offering will be co-managed by E.F. Hutton and Co Inc +and First Boston Corp, Immunomedics said. + Reuter + + + + 9-APR-1987 18:29:26.90 + +usa + + + + + +F Y +f2826reute +u f BC-MOBIL-(MOB)-WILL-NOT 04-09 0095 + +MOBIL <MOB> WILL NOT INCREASE BUDGET + DALLAS, April 9 - Mobil Corp Chairman Allen E. Murray said +the company's exploration and production budget would not be +increased in the foreseeable future as it is "operating on the +assumption that (oil) prices will remain on the lower end of +the spectrum. + "Our budget is at about the same level as it was last year +and I think it is the right amount," said Murray who was in +town for ceremonies celebrating the consolidation of Mobil's +domestic exploration and production operations into a new, +locally-based subsidiary. + Last year, Mobil spent a total of 2.13 billion dlrs on +exploration and production, 341 mln dlrs in the United States +and 1.79 billion overseas. + Murray said the new subsidiary, Mobil Exploration and +Production U.S. Inc., was not created as "part of any cost +saving effort" but instead to "increase our efficiency and +ability to stay ahead of the pack." + The consolidation will, however, save Mobil about 15 mln +dlrs annually once relocation and reorganization costs have +been absorbed, according to A.F. Stancell, vice president of +U.S. producing operations for the company. + Mobil, the nation's second largest oil company, responded +to the collapse of oil prices last year -- from 30 dlrs a +barrel at end-1985 to as low as 10 dlrs in mid-1986 -- by +laying off 5,500 people and cutting its budget in midyear by 27 +percent, or 1.1 billion dlrs. + Of that amount, more than 900 mln dlrs was eliminated from +its exploration and spending spending plans. + But the company reported an increase in profits in 1986 +over 1985 and a jump in per share earnings to 3.45 dlrs a share +from 2.55 dlrs. + Reuter + + + + 9-APR-1987 18:31:32.77 +earn +canada + + + + + +E F +f2833reute +d f BC-<american-eagle-petro 04-09 0030 + +<AMERICAN EAGLE PETROLEUMS LTD> YEAR LOSS + Calgary, Alberta, April 9 - + Shr loss 10 cts vs profit 17 cts + Net loss 1,546,000 vs profit 4,078,000 + Revs 22.6 mln vs 38.9 mln + Reuter + + + + 9-APR-1987 18:33:20.67 + + +james-baker + + + + +V RM +f2836reute +f f BC-******TREASURY'S-BAKE 04-09 0011 + +******TREASURY'S BAKER SAYS DEBTOR NATIONS NEED TIMELY DISBURSEMENTS +Blah blah blah. + + + + + + 9-APR-1987 18:36:11.47 + +usa + + + + + +F +f2837reute +r f BC-GM'S<GM>-HUGHES-AIRCR 04-09 0091 + +GM'S<GM> HUGHES AIRCRAFT HAS BOEING<BA> CONTRACT + IRVINE, Calif, April 9 - General Motors' Hughes Aircraft Co +said it was awarded a contract worth more than 20 mln dlrs by +Boeing's Boeing Commercial Airplane Co to provide an advanced +cabin entertainment and service system for Boeing's new 747-400 +airliners. + Hughes said the new system uses advanced digital electronic +techniques and also adds cabin lighting control, cabin advisory +signs and seat information. + Hughes said the first 747-400 is scheduled to be completed +in early 1988. + + Reuter + + + + 9-APR-1987 18:36:43.22 + +usa +reagan + + + + +V +f2838reute +u f BC-REAGAN-HITS-HOUSE-PAS 04-09 0070 + +REAGAN HITS HOUSE-PASSED BUDGET + WEST LAFAYETTE, Ind, April 9 - President Reagan criticized +the House-passed budget by saying the Democratic budget plan +was just business as usual. + The budget cut defense by eight billion dlrs and called for +18 billion dlrs in new taxes. + He said the defense cut potentially theratened national +security and was asking the American taxpayers to pay for the +Democrats' excesses. + Reuter + + + + 9-APR-1987 18:36:56.22 + +usa + + + + + +RM A +f2839reute +r f BC-S/P-DOWNGRADES-ZENITH 04-09 0053 + +S/P DOWNGRADES ZENITH ELECTRONIC <ZE> + NEW YORK, April 9 - Standard and Poor's said it lowered its +rating on 190 mln dlrs of Zenith Electronic Corp debt because +of continued poor earnings results and increased debt leverage. + Among the rating changes, the company's senior debt was +lowered to BB-plus from BBB-plus. + Reuter + + + + 9-APR-1987 18:39:02.17 + +usa + + + + + +RM A +f2841reute +r f BC-MOODY'S-DOWNGRADES-RE 04-09 0102 + +MOODY'S DOWNGRADES REPUBLICBANK <RPT> + NEW YORK, April 9 - Moody's Investors Service said it +lowered the ratings on 464 mln dlrs of long-term debt issued by +RepublicBank Corp and its two principal subsidiaries but +upgraded 451 mln dlrs of securities of Interfirst Corp <IFC>. + The rating adjustments are based on the likelihood that the +proposed merger of the two Texas banks will be consummated. +Moody's said Interfirst is considerably the weaker of the two +institutions. + Among the rating changes, RepublicBank's senior debt was +downgraded to BA-1 from BAA-1 while Interfirst's was raised to +BA-1 from B-1. + Reuter + + + + 9-APR-1987 18:39:51.11 + +usa +james-baker +imf + + + +V RM +f2842reute +b f BC-TREASURY'S-BAKER-CALL 04-09 0092 + +TREASURY'S BAKER CALLS FOR MORE BANK FLEXIBILITY + WASHINGTON, April 9 - Treasury Secretary James Baker said +that commercial banks need to develop more flexibility in their +concerted lending mechanisms "to help assure continued +participation in new money packages." + He said that major debtor nations need to be able to count +on receiving timely disbursements on new loans essential to +support well-conceived economic programs. + His remarks were made to the afternoon session of the +International Monetary Fund's policy making Interim Committee. + Baker said, "The sense of urgency and willingness to +cooperate in support of a larger general interest that helped +to carry us through the difficult crisis period of 1982 and +1983 is now less evident." + He said to address this problem, it is important for the +commercial banks to "develop a menu of alternative new money +options from which all banks with debt exposure can choose in +providing continuing support for debtor reforms." + He said the "continued implementation of the debt strategy +may well rest on their doing so." + Baker also said that growth prospects for the lowest income +countries remain an issue of "critical concern to the United +States." + He said that he intended to address the problem of poor +country prospects in greater detail at tomorrow's meeting of +the joint IMF-World Bank Devlopment Committee. + Baker said, however, that ministers should guard against +what appear to be magical solutions to the complex debt +problem. + "I want to stress the need for all to guard against the +ephemeral attraction of magical solutions, which may appear as +tantalizing alternatives to the rigorous realities of grappling +with our debt problems," he said. + But he emphasized that the only lasting progress is to +approach each situation on a case-by-case basis, "bringing to +bear the policies and financing needed to bring the economy +back to sustained economic growth." + Reuter + + + + 9-APR-1987 18:41:59.03 +trade +chile + + + + + +RM A +f2844reute +u f BC-chilean-trade-surplus 04-09 0107 + +CHILEAN TRADE SURPLUS NARROWS SLIGHTLY IN FEBRUARY + Santiago, april 9 - chile's trade surplus narrowed to 102.2 +mln dlrs in february, from 105.4 mln dlrs in the same month +last year, but it was above the 18.2-mln-dlr surplus recorded +in january 1987, the central bank said. + Exports in february totalled 379.4 mln dlrs, 17.2 pct above +the january figure. Imports fell 9.2 pct from the previous +month to 277.2 mln dlrs. The figures for the same month last +year were 314 mln and 208.6 mln dlrs, respectively. + The accumulated trade surplus over the first two months of +1987 stands at 120.4 mln dlrs against 132.8 mln dlrs the +previous year. + Reuter + + + + 9-APR-1987 18:42:19.11 +interestmoney-fxdlr +usa + + + + + +RM A +f2845reute +u f BC-ANALYSTS-DOUBT-FED-FI 04-09 0112 + +ANALYSTS DOUBT FED FIRMED DESPITE BORROWING RISE + By Martin Cherrin, Reuters + NEW YORK, April 9 - Economists said that they doubt the +Federal Reserve is firming policy to aid the dollar, despite +higher discount window borrowings in the latest two-week +statement period and very heavy borrowings Wednesday. + Data out today show net borrowings from the Fed averaged +393 mln dlrs in the two weeks to Wednesday, up from 265 mln +dlrs in the prior statement period. Wednesday borrowings were +1.4 billion dlrs as Federal funds averaged a high 6.45 pct. + "One could make a case that the Fed is firming, but it +probably isn't," said William Sullivan of Dean Witter Reynolds. + Sullivan said some may assume the Fed has firmed policy +modestly to support the dollar because net borrowings in the +two-weeks to Wednesday were nearly 400 mln dlrs after averaging +around 250 mln dlrs over the previous two months. + However, the Dean Witter economist noted that the latest +two-week period included a quarter end when seasonal demand +often pushes up borrrowings. + "Some might argue that the Fed was firming policy, but it +looks like it tried to play catchup with reserve provisions +late in the statement period and didn't quite make it," said +Ward McCarthy of Merrill Lynch Capital Markets. + A Fed spokesman told a press press conference today that +the Fed had no large net one-day miss of two billion dlrs or +more in its reserve projections in the week ended Wednesday. + Still, McCarthy said it may have had a cumulative miss in +its estimates over the week that caused it to add fewer +reserves earlier in the week than were actually needed. + The Fed took no market reserve management action last +Thursday and Friday, the first two days of the week. It added +temporary reserves indirectly on Monday via two billion dlrs of +customer repurchase agreements and then supplied reserves +directly via System repurchases on Tuesday and Wednesday. + Based on Fed data out today, economists calculated that the +two-day System repurchase agreements the Fed arrranged on +Tuesday totaled around 5.9 billion dlrs. They put Wednesday's +overnight System repos at approximately 3.4 billion dlrs. + "It is quite clear that the Fed is not firming policy at +this time," said Larry Leuzzi of S.G. Warburg and Co Inc. + Citing the view shared by the other two economists, Leuzzi +said the Fed cannot really afford to seriously lift interest +rates to help the dollar because that would harm already weak +economies in the United States and abroad and add to the +financial stress of developing countries and their lenders. + "Those who believe the Fed tightened policy in the latest +statement period have to explain why it acted before the dollar +tumbled," said McCarthy of Merrill Lynch. + He said the dollar staged a precipitous drop as a new +statement period began today on disappointment yesterday's +Washington meetings of international monetary officials failed +to produce anything that would offer substantive dollar aid. + In fact, currency dealers said there was nothing in +Wednesday's G-7 communique to alter the prevailing view that +the yen needs to rise further to redress the huge trade +imbalance between the United States and Japan. + The economists generally agreed that the Fed is aiming for +steady policy now that should correspond to a weekly average +Fed funds rate between six and 6-1/8 pct. This is about where +the rate has been since early November. + "I'm not so sure that the Fed is engineering a tighter +policy to help the dollar, as some suspect," said Sullivan of +Dean Witter. + If it is, however, he said that Fed probably has just +nudged up its funds rate goal to around 6.25 to 6.35 pct from +six to 6.10 pct previously. + Reuter + + + + 9-APR-1987 18:45:25.86 + +usapakistan + +worldbank + + + +RM +f2848reute +r f BC-PAKISTAN-GETS-70-MLN 04-09 0105 + +PAKISTAN GETS 70 MLN DLR WORLD BANK LOAN + WASHINGTON, April 9 - The World Bank said it approved a 70-mln-dlr, 20-year loan to assist Pakistan in a project designed +to improve power plant efficiency. + Noting that a shortage of power constrains Pakistan's +economic development, the Bank said one objective of the +project is to provide at least 200 megawatts of additional +generating capacity. + Another objective is to improve the efficiency with which +hydrocarbons are used by Pakistan's Water and Power Development +Authority (WAPDA) in power production, it said. One effect of +this would be reduced atmospheric pollution. + Reuter + + + + 9-APR-1987 18:47:26.32 +earn +usa + + + + + +F +f2853reute +h f BC-VALEX-PETROLEUM-INC-< 04-09 0042 + +VALEX PETROLEUM INC <VALP> YEAR DEC 31 + DENVER, Colo, April 9 - + Shr loss six cts vs loss 84 cts + Net loss 219,632 vs loss 16.3 mln + Revs 1.4 mln vs 2.8 mln + NOTE:1985 net includes 15.5 mln dlrs of writedowns and tax +benefit of 51,294. + + Reuter + + + + 9-APR-1987 18:50:11.20 + +usa + + + + + +F +f2855reute +h f BC-VALEX-PETROLEUM-<VALP 04-09 0052 + +VALEX PETROLEUM <VALP> RECLASSIFIES DEBT + DENVER, Colo, April 9 - Valex Petroleum Inc said its 1.3 +mln dlrs in long-term debt with a commercial bank was +reclassified as a current liability, which resulted in its +auditors giving it a qualified opinion. + Earlier, Valex reported a net loss 219,632 for 1986. + Reuter + + + + 9-APR-1987 18:52:32.99 + +usa + + + + + +F +f2856reute +h f BC-DATA-ARCHITECTS-<DRCH 04-09 0052 + +DATA ARCHITECTS <DRCH> TO MAKE OFFERING + WALTHAM, Mass, April 9 - Data Architects inc said it +intends to make a public offering of 850,000 shares of its +common stock, of which 672,000 shares will be sold by the +company and 178,000 by certain shareholders. + Proceeds will be used for general corporate purposes. + Reuter + + + + 9-APR-1987 18:58:51.24 + +usa + + + + + +F +f2860reute +h f BC-FIVE-DIRECTORS-OF-TER 04-09 0051 + +FIVE DIRECTORS OF TERRAPET ENERGY RESIGN + DALLAS, April 9 - <Terrapet Energy Corp> said five +directors resigned because they could not obtain directors and +officers liability insurance. + It said the directors are Dean R. Fellows, Frederick B. +Hegi Jr, W.D. Masterson, Thomas Sturgess and John C. Thomas. + Reuter + + + + 9-APR-1987 19:03:16.01 + +usa + + + + + +F +f2863reute +u f BC-GOLDMAN,-SACHS-COMMEN 04-09 0109 + +GOLDMAN, SACHS COMMENTS ON FREEMAN INDICTMENT + NEW YORK, April 9 - Goldman, Sachs and Co, responding to +the indictment earlier today of Robert M. Freeman, who remains +head of its risk arbitrage unit, said it believes the +44-year-old executive did not violate insider trading laws. + "Based on all we now know, we continue to believe in him +and to believe that he did not act illegally," the company said +in a statement. + Freeman was indicated by a federal grand jury along with +two other top Wall Street executives, Richard Wigton and +Timothy Tabor, for allegedly swapping insider information in a +scheme that produced millions in illegal profits. + The company said it based in belief in Freeman's innocence +on an investigation conducted by its independent outside +counsel after Freeman was arrested in February. + Reuter + + + + 9-APR-1987 19:05:53.65 + +usamauritius + +worldbank + + + +A RM +f2867reute +r f BC-MAURITIUS-GETS-25-MLN 04-09 0091 + +MAURITIUS GETS 25 MLN DLR WORLD BANK LOAN + WASHINGTON, April 9 - The World Bank said it approved a 25 +mln dlr structural adjustment loan for Mauritius to aid that +country's industrial sector. + The Bank said the 17-year loan will support policy reforms +designed to help increase the efficiency of the country's +manufacturing sector, develop export enterprises and encourage +efficient use of resources. + It added, "The increased availability of foreign exchange +for imports is expected to help the expansion of industrial +output and exports." + Reuter + + + + 9-APR-1987 19:24:29.96 + +canada + + +tose + + +E +f2871reute +r f BC-power 04-09 0119 + +TORONTO FINANCIAL DISTRICT HIT BY POWER OUTAGE + TORONTO, April 9 - Toronto's financial district, the +business heart of Canada, slowed to a near halt this afternoon +after being struck by a power blackout, utility and business +officials said. + The blackout occurred around 1515 EDT in about an +eight-square-block section of the city's downtown core, home to +most of the city's skyscrapers, containing the headquarters of +many of Canada's major corporations and financial institutions. + Ontario Hydro spokeswoman Christina Warren told Reuters the +blackout occurred when a transformer cable went down during +routine maintenance at a downtown hydroelectricity station. +Power was restored after 10 minutes. + The power loss halted floor trading for 15 minutes on the +Toronto Stock Exchange, Canada's largest equity market, +although computerized trading - accounting for about 20 per +cent of the Exchange's normal volume - continued, Toronto Stock +Exchange official John Kolosky said. + Bank operations were also affected. The headquarters or +major offices of Canada's six major banks line a small section +of Bay Street, the Wall Street of Canada. + Bank of Montreal spokesman Brian Smith told Reuters the +blackout shut down electronic banking machines and caused a +minor slowdown in money trading operations, although "all in all +we were not seriously affected." + Officials at various downtown skyscrapers said the blackout +also briefly shut down elevators and disrupted business in the +downtown core's extensive network of underground shopping +malls. + Workers at some of the buildings said several people were +briefly trapped on elevators, but police and firefighters +reported no serious problems. + Reuter + + + + 9-APR-1987 19:36:34.99 + +usa + + + + + +A RM +f2876reute +r f BC-U.S.-THRIFT-OFFICIAL 04-09 0119 + +U.S. THRIFT OFFICIAL URGES MORE LENDER INSURANCE + NEW YORK, April 9 - The Administration's 15 billion dlr +plan to recapitalize the Federal Savings and Loan Insurance +Corporation is needed to ensure the future profitablity of the +U.S. thrift industry, according to a top industry regulator. + "Today thrifts in overwhelming numbers are profitable," +Shannon Fairbanks, executive chief of staff of the Federal Home +Loan Bank Board told a thrift industry conference. + "But every thrift is paying a market tax for the inabliity +of regulators to deal with problems carried forward from the +past," she said, referring to the premium that thrifts have to +pay in the marketplace to entice deposits away from banks. + "The industry wants to see a five billion dlr plan passed +now, and then to wait and see what happens," Fairbanks said. +"They're saying, 'we don't want to pay more right away.' The +argument is that it's a drain on the industry." + "But the dollars paid out can be recaptured in the +reduction in the market tax differential," she said. "The cost +of recapitalization to the industry would be recaptured in +bottom line profitability." + Fairbanks said that the public's confidence in thrift +instititutions eroded with the financial difficulties of +savings and loan associations in Ohio and Maryland in 1985. + As thrift institutions in economically distressed areas +like Texas have continued to fall on hard times, this has +increased depositors' demand for a higher premium on deposits +in savings and loans compared with premiums paid on deposits in +commercial banks, she said. + Before 1983, thrift institutions paid a 25 basis point +yield differential on savings deposits over that offered by +commercial banks as mandated by U.S. financial regulations. + With the elimination in 1983 of regulations that had drawn +strict lines between savings and loans and commercial banks, +the gap widened to as much as 50 to 75 basis points as wary +depositors demanded a higher premium to place their funds in +thrift institutions, Fairbanks said. + "The market tax paid by today's thrift industry is the most +significant impediment to future profits," she said. + Depositor confidence is also eroded by the existence of +thrifts that are failing but manage to stay in business by +paying deposit rates well above prevailing market rates. + Presently, the FHLBB cannot afford to close failing +institiutions "because we can't afford it with the current +FSLIC fund," she said. + Fairbanks estimated that the high market tax differential +paid by thrifts will drop by at least 10 to 20 basis points +with an adequate recapitalization of FSLIC because it will help +restore this lost confidence. + Reuter + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-017.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-017.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-017.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-017.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2014 @@ + + +21-APR-1987 11:35:01.50 +coffee +ukbrazil +dauster + + + + +C T +f1400reute +b f BC-IBC-COFFEE-AUCTIONS-T 04-21 0115 + +IBC COFFEE AUCTIONS TO START SOON - DAUSTER + LONDON, April 21 - The Brazilian Coffee Institute, IBC, +plans to sell in a series of auctions over the next few weeks +robusta coffee purchased in London last year, but details of +where and when auctions will take place are still to be +finalised, IBC president Jorio Dauster told reporters. + The sales of 630,000 bags of robusta and an unspecified +amount of Brazilian arabica coffee will take place over a +minimum of six months but it is not decided where sales will +take place or whether they will be held weekly or monthly. + The amount offered at each sale has also not been set, but +could be in the order of 100,000 bags, Dauster said. + Reuter + + + +21-APR-1987 11:37:33.52 + +canada + + + + + +E +f1416reute +u f BC-AMCA-(AIL)-NAMES-NEW 04-21 0054 + +AMCA (AIL) NAMES NEW CHAIRMAN + TORONTO, April 21 - AMCA International Ltd said it +appointed president and chief executive officer WIlliam Holland +to succeed Kenneth Barclay as chairman. + Barclay, who is 60 years old, decided not to stand for +reappointment as chairman this year but will continue as a +director, AMCA said. + Reuter + + + +21-APR-1987 11:38:04.12 +crude +usa + + + + + +Y +f1418reute +u f BC-API-OIL-INVENTORY-REP 04-21 0081 + +API OIL INVENTORY REPORT TO BE ISSUED TONIGHT + NEW YORK, APRIL 21 - The American Petroleum Institute, API, +said its weekly U.S. petroleum inventory report will be issued +tonight, despite many company closures on Friday of last week +for the Easter holiday. + The API report is usually released around 1700 EDT on +Tuesday nights. + The Energy Information Administration said it also expects +its weekly oil statistic report to be released as usual, on +Wednesday night at about 1700 EDT. + Reuter + + + +21-APR-1987 11:44:00.53 +acq +usa + + + + + +F +f1442reute +u f BC-FAIRCHILD 04-21 0095 + +SORO GROUP TO LIMIT FAIRCHILD <FEN> STOCK BUYS + WASHINGTON, April 21 - Quantum Fund N.V., a Netherlands +Antilles mutual fund for which New York investor George Soros +is investment adviser, said it has agreed to limit further +purchases of Fairchild Industries Inc stock. + In a filing with the Securities and Exchange Commission, +Quantum, which already holds 1,647,481 Fairchild common shares, +or 11.5 pct of the total outstanding, said it agreed to the +restriction after Fairchild said its security clearance might +be jeopardized if Quantum acquires a major stake in it. + But Quantum said Fairchild management was told that Soros, +acting either individually or through entities other than +Quantum that he controls, may decide to buy common stock in the +company on his own behalf. + Quantum had recently notified the Federal Trade Commission +under the Hart-Scott-Rodino Antitrust Improvements Act of 1976 +that it might buy up to 49.9 pct of Fairchild's voting stock. +Unless the FTC had objected, Quantum would have been free, but +not obligated, to buy up to 49.9 pct of Fairchild stock. + Fairchild management, however, warned that if Quantum, a +foreign entity, raises its stake in the company to 49.9 pct, it +could "impair" the government security clearances Fairchild +needs to carry out its its defense contract work. + In response, Quantum said it told Fairchild it will not +make "significant additional purchases" of its common or +preferred stock without giving Fairchild enough prior notice to +enable it to consult with Quantum over the impact of action. + Quantum also said it has withdrawn its notification request +to the FTC and the antitrust division of the Justice Department +of its intent to buy up to 49.9 pct of Fairchild. + Quantum also said it told the FTC and the Justice +Department that it does not expect to resubmit any further +notifications of intent to significantly raise its stake in +Fairchild at this time. + The restrictions Quantum has agreed to follow regarding +further dealings in Fairchild stock do not apply to Soros as an +individual investor. + Fairchild's annual shareholders meeting is scheduled to be +held tomorrow. + Reuter + + + +21-APR-1987 11:45:56.03 +money-fx +usa + + + + + +V RM +f1446reute +b f BC-/-FED-ADDS-RESERVES-V 04-21 0059 + +FED ADDS RESERVES VIA TWO-DAY REPURCHASES + NEW YORK, April 21 - The Federal Reserve entered the U.S. +Government securities market to arrange two-day System +repurchase agreements, a Fed spokesman said. + Dealers said that Federal funds were trading at 6-7/16 pct +when the Fed began its temporary and direct supply of reserves +to the banking system. + Reuter + + + +21-APR-1987 11:49:31.32 + +usa + + +nasdaq + + +F +f1466reute +d f BC-CAPITAL-ASSOCIATES-<C 04-21 0053 + +CAPITAL ASSOCIATES <CAII.O> TO TRADE ON NASDAQ + COLORADO SPRINGS, Colo., April 21 - Capital Associates Inc +said its common stock will be included in NASDAQ's national +market system, starting today. + Capital Associates is an equipment leasing and financial +service company with headquarters in Colorado Springs, Colo. + Reuter + + + +21-APR-1987 11:52:37.63 +copper +usa + + + + + +C M +f1486reute +u f BC-/MINT-REVIEWS-OFFERS 04-21 0105 + +MINT REVIEWS OFFERS ON 3,701,000 LBS COPPER + WASHINGTON, April 21 - The U.S. Mint received 17 offers +from seven firms at prices ranging from 0.66845-0.6840 dlrs per +lb for payment by standard check and 0.66695-0.68 dlrs per lb +for wire transfer payment in a review of offers on 3,701,000 +lbs of electrolytic copper it is seeking to purchase. + Philipp Brothers, N.Y., led with the lowest offers of +0.66695 for wire transfer payment and 0.66845 dlrs per lb to be +paid by check, followed by Cerro Sales Corp, N.Y., with 0.6684 +dlrs per lb on one mln lbs for wire payment, and 0.6713 dlrs +per lb on one mln lbs for standard payment. + Firms, in submitting offers, elect to be paid by standard +check or wire transfer, with awards based on whichever of the +two methods is more cost advantageous at that time. + Cerro Sales also offered prices for wire payment of 0.6689 +dlrs per lb on one mln lbs and 0.6693 dlrs per lb on 1,701,000 +lbs. Cerro's standard payment offers included 0.6719 dlrs per +lb on one mln lbs and 0.6723 dlrs per lb on 1,701,000 lbs. + Cargill Metals, Minneapolis, offered 0.67025 dlrs per lb +for wire payment and 0.67275 dlrs per lb for standard payment, +while Elders Raw Materials, Darien, Ct., offered 0.6718 dlrs +per lb for wire payment and 0.6735 dlrs per lb for standard +payment on increments of 950,000 lbs each. + Other offers for wire transfer payment include 0.6759 dlrs +per lb on 380,000 lbs, submitted by Deak International, N.Y., +0.6789 dlrs per lb on the entire quantity by Diversified Metals +Corp, St. Louis, and 0.68 dlrs per lb by Gerald Metals, +Stamford, Ct. + Other standard payment offers include 0.6819 dlrs per lb on +950,000 lbs by Diversified Metals, and 0.6840 dlrs per lb on +the entire quantity by Gerald Metals. + The Mint said the copper is for delivery the week of May 11 +to Olin Corp, East Alton, Ill. + The offers have a minimum acceptance period of three +calendar days, it said. + Reuter + + + +21-APR-1987 11:55:33.03 + +canada + + + + + +E F +f1500reute +r f BC-ahed-<aHM.TO>-may-iss 04-21 0076 + +AHED <AHM.TO> MAY ISSUE ONE MLN SHARES + Toronto, April 21 - Ahed Corp said it began discussions +with an investment dealer about issuing an additional one mln +treasury shares in the near future. + Ahed also said it believes recent increases in its stock +price could be attributable to a published report describing +the activities of the company. + Ahed said no other events are known to have taken place +which would cause these recent price increases. + Reuter + + + +21-APR-1987 11:55:57.82 + +usa + + + + + +F +f1503reute +r f BC-U.S.-WEST-<USW>-INTRO 04-21 0082 + +U.S. WEST <USW> INTRODUCES DATA NETWORK PRODUCT + NEW YORK, April 21 - U.S. WEST INC said it introduced its +first product for managing data networks, called the NETCENTER +graphic network monitor. + The product was developed by U.S. WEST Network Systems Inc, +a subsidiary of U.S. WEST INC, it said. It will be distributed +in the third quarter of 1987. + The company said the product is aimed at companies with IBM +SNA networks, and will allow customers control over their own +networks. + + The initial license fee for a typical configuration will be +in the 100,000 dlr to 300,000 dlr range, depending on the size +of the network, the company said. + Reuter + + + +21-APR-1987 12:04:11.03 +grainwheatbarleyoilseedrapeseed +france + + + + + +C G +f1537reute +u f BC-FRENCH-WINTER-CEREAL 04-21 0106 + +FRENCH WINTER CEREAL SOWING SEEN LITTLE CHANGED + PARIS, April 21 - The Ministry of Agriculture left its +estimates of French winter cereal sowings for the 1986/87 +campaign barely changed at 6.606 mln hectares compared with its +previous forecast of 6.601 mln. + This compared with the 6.41 mln ha of winter cereals +harvested in the 1985/86 campaign. + Winter soft wheat sowings were put at 4.647 mln ha compared +with its previous estimate of 4.651 mln and 4.57 mln ha +harvested last campaign. Winter barley plantings were forecast +at 1.46 mln ha, unchanged from its previous estimate and +compared with 1.41 mln harvested last season. + The ministry put hard winter wheat sowings at 246,000 ha +versus a February 1 estimate of 236,000 and actual area +harvested last campaign of 217,000. + Winter rape plantings were forecast at 627,000 ha against a +previous estimate of 621,000 and 375,000 rpt 375,000 harvested +in 1985/86. + Reuter + + + +21-APR-1987 12:11:18.43 +gold +canada + + + + + +F +f1591reute +r f BC-ENERGEX-MINERALS-<EGX 04-21 0101 + +ENERGEX MINERALS <EGX> MAY RUN UP TO THREE PITS + VANCOUVER, British Columbia, April 21 - Energex Minerals +Ltd said economic evaluation of reserves indicates high-grade +operation from three open pits may be feasable based on +five-year operation at 100 tons a day, a payback of less than +1-1/2 years. + An increase in the project's life, profitability and scale +is anticipated as additional reserves are developed in 1987, +the company said. + Current reserves are one mln long tons at 0.20 ounce gold +per ton, all categories; proven-probable 262,242 long tons at +0.25 ounce gold per ton, the company said. + Reuter + + + +21-APR-1987 12:13:27.73 +acq +canada + + + + + +E F Y +f1605reute +r f BC-dome-<dmp>-executives 04-21 0083 + +TURNER TO MEET WITH DOME <DMP> EXECUTIVES + Ottawa, April 21 - Liberal Party leader John Turner said he +will meet with senior executives of Dome Petroleum Ltd in +Calgary tomorrow to discuss the proposed sale of Dome. + Turner's office said he will hold a news conference +tomorrow at 1400 MDT (1600 EDT) in Calgary. + Turner, who is opposition leader in Parliament, has +criticized Dome's acceptance of a 5.1 billion dlr takeover bid +from Amoco Corp <AN> as a sell-out of Canada's oil industry. + Reuter + + + +21-APR-1987 12:13:34.25 + +usa + + + + + +F +f1606reute +r f BC-NEW-YORK-TIMES-<NYT> 04-21 0079 + +NEW YORK TIMES <NYT> SEES UNEVEN GAINS IN 1987 + HUNTSVILLE, Ala., April 21 - The New York Times Co said +that if prevailing business conditions continue, the company +sees "another outstanding year, although the remaining quarters +of 1987 will probably not show uniform gains." + The company's first quarter earnings rose 21 pct to 41.1 +mln dlrs or 50 cts a share compared to 33.9 mln dlrs or 42 cts +a share in the year-ago quarter restated for a two-for-one +stock split. + + The company also said its newspaper division, which +includes the New York Times and 32 regional newspapers, had a +first quarter operating profit of 69.8 mln dlrs compared with +60.7 mln dlrs in the year-ago first quarter mainly due to +advertising volume and rate increases. + The company's magazine division, which includes "Family +Circle," had a first quarter profit of 9.7 mln dlrs compared to +7.4 mln dlrs in the year ago quarter. + The company's broadcasting and cable tv group reported an +operating profit of 2.9 mln dlrs compared to 2.6 mln dlrs in +the year-ago first quarter. + Reuter + + + +21-APR-1987 12:14:27.18 + +usa + + + + + +F A RM +f1611reute +u f BC-BANKERS-TRUST-<BT>-TI 04-21 0115 + +BANKERS TRUST <BT> TIES NET TO CURRENCY EARNINGS + NEW YORK, April 21 - Bankers Trust New York Corp said its +first quarter foreign exchange trading income rose to 82.8 mln +dlrs from 20.9 mln dlrs in the first qtr of 1986, offsetting +the bank's 7.4 mln dlr loss incurred from placing 540 mln dlrs +of Brazilian loans on a non-accrual status. + Earlier, the bank reported that first quarter net income +increased to 124.2 mln dlrs, or 1.77 dlrs a share, from 115.9 +mln dlrs, or 1.64 dlrs a share, a year ago. + Bankers Trust chairman Alfred Brittain III said increased +non-interest income, a lower provision for loan-losses and +increased net interest income also helped first quarter net. + + Bankers Trust previously announced that the 540 mln dlrs in +non-accruable Brazilian loans would cut its first quarter +earnings by 7.4 mln dlrs, and could slice about 30 mln dlrs +from the full year's net. + Bankers Trust said non-interest income in the first quarter +equaled 275.4 mln dlrs, up 37.1 mln dlrs from a year ago. + Loan losses fell in the quarter to 22 mln dlrs, versus 40 +mln dlrs a year ago while taxable net interest income remained +flat at 266 mln dlrs, the bank said. + Reuter + + + +21-APR-1987 12:15:12.80 +acq +usa + + + + + +F Y +f1618reute +r f BC-ALTEX-<AII>-TO-SELL-O 04-21 0072 + +ALTEX <AII> TO SELL OILFIELD SERVICES ASSETS + DENVER, April 21 - Altex Industries Inc said it agreed to +sell the assets of its wholly-owned oilfield service +subsidiary, Parrish Oil Tools Inc. + The price and buyer were not disclosed. + Altex said Parrish had a loss from operations of 428,000 +dlrs on revenues of 881,000 dlrs in fiscal 1986 and a loss from +operations of 48,000 dlrs on revenues of two mln dlrs in fiscal +1985. + Reuter + + + +21-APR-1987 12:17:02.35 + +usa + + + + + +F +f1633reute +r f BC-IMARK-INDS-<IMAR.O>-V 04-21 0041 + +IMARK INDS <IMAR.O> VOTES ANNUAL 25 CT DIVIDEND + GENESEO, ILL., April 21 - Imark Industries Inc said its +directors approved payment of an annual dividend of 25 cts on +May 21, record May seven. + The company paid the same dividend last year. + Reuter + + + +21-APR-1987 12:17:09.99 + +usa + + + + + +F +f1634reute +r f BC-DUQUESNE-LIGHT-<DQU> 04-21 0083 + +DUQUESNE LIGHT <DQU> HURT BY LEGISLATION + PITTSBURGH, APril 21 - Duquesne Light Co president Wesley +von Schack told shareholders that current state law and +regulatory policies will result in higher capital rates and +higher rates for customers. + "Pennsylvania's recently enacted excess capacity +legislation denies shareholders the opportunity to earn a fair +return on their investment and undermines economic development +in Pennsylvania," von Schack told shareholders at the annual +meeting. + + Von Schack said two major bond rating agencies have recently +downgraded Duquesne's credit rating due to regulatory +uncertainty. The action will result in higher capital rates and +higher rates for customers, he said. + He said the Pennsylvania Utility commission indicated in +its most recent rate case decision that even if newly +constructed Perry No. 1 nuclear plant was in commercial +operation, shareholders would be denied a return on their +investment in the plant. Von Schack called on shareholders to +join it and certain legislators' efforts to create a +partnership to fight these issues and resolve these problems. + + Reuter + + + +21-APR-1987 12:17:49.31 +interestmoney-fxgnp +kuwait + + + + + +RM +f1638reute +r f BC-CREATIVE-MONETARY-POL 04-21 0109 + +CREATIVE MONETARY POLICY TO SPUR KUWAITI ECONOMY + By Rory Channing, Reuters + KUWAIT, April 21 - Kuwait, a major oil producer hit by last +year's price slump, is leaning towards a more creative monetary +policy to help spur its economy, banking sources said. + "There is a clear emphasis on encouraging the use of money +in productive ventures, rather than having it all tied up in +interest bearing investments which have no direct productive +outlet," one banker said. + Kuwait's Central Bank yesterday cut one key money market +rate and abandoned another which had been used since February +1986 to direct inter-bank borrowing and lending costs. + The bank reduced to six pct from 6-1/2 pct the rate at +which it will offer funds of one month to one year in the +inter-bank market. This, in turn, affected retail rates. + The cut, the third this year, followed a major overhaul of +interest rate policy last month which Central Bank Governor +Sheikh Salem Abdul-Aziz al-Sabah said was designed to revive +the economy. + One banker said "There is growing flexibility, creativity, +in interest rate policy, amid an awareness of the need to +diversify the economy by stimulating the non-oil sector." + For the first time in nearly three years domestic interest +rates are now significantly below those for the U.S. Dollar, a +favourite haven for Gulf speculative and investor funds in the +past, banking sources said. + Despite uncertainties generated by the 6-1/2 year old Iran- +Iraq war on Kuwait's northern doorstep, bankers play down the +prospect of any significant capital flight. + The Kuwaiti dinar, whose value is set by the Central Bank +and was fixed today at 0.27095/129 to the dollar, is stronger +now than for several years. + Fears that the dollar may fall further will prompt second +thoughts among Kuwaiti investors prepared to consider switching +funds into the U.S. Currency, the sources said. + "There is a distinct exchange rate risk," they added. + Bankers said the dollar slump hurt many investors behind +the last major capital outflow in 1984, encouraged then by 18 +pct U.S. Interest rates and the start of Iranian attacks on +neutral shipping in the Gulf. + The Central Bank calculates its dinar exchange rate against +a basket of currencies. Bankers do not know the basket's exact +make-up but say it is weighted heavily in favour of the dollar. + Some bankers believe any strengthening of the dinar beyond +0.27000 to the dollar might provoke investors into shifting +funds into the U.S. Currency. "They may ask:When will the dollar +be so cheap again?" one said. + And with dinar interest rates now roughly one pct below +those for the dollar, they say the Central Bank faces a +delicate balancing role requiring further flexibility. + Bankers said the current, expansionary interest rate policy +is only part of a broader attempt to encourage local investment +and strengthen the backbone of the economy. + They estimate the economy, measured in terms of GDP and +allowing for inflation, shrank 19 pct in 1986 after an 8.1 pct +contraction the previous year. + Bankers also noted recent measures to stimulate stock +market activity, capped today by sharp cuts in brokerage fees +to make it cheaper for investors to trade. + REUTER + + + +21-APR-1987 12:23:33.91 + +usa + + + + + +F +f1672reute +r f BC-CSX-<CSX>-UNIT-CHAIRM 04-21 0065 + +CSX <CSX> UNIT CHAIRMAN RETIRES + WHITE SULPHUR SPRINGS, W. Va., April 21 - CSX Corp said +that Joseph Abely, chairman and chief executive officer of +CSX's Sea-Land Corp unit, will retire by the end of the month. + The company said he will be replaced by Robert Hintz, +executive vice president of CSX and president and chief +executive officer of the company's energy and properties +groups. + Reuter + + + +21-APR-1987 12:28:08.02 + +brazil + + + + + +F +f1702reute +d f BC-BRAZIL-FUND-SHOULD-ST 04-21 0095 + +BRAZIL FUND SHOULD START OPERATING SOON + SAO PAULO, April 21 - A Brazil Fund through which foreign +investors will be able to buy stocks in Brazilian companies +should start operating in about two months, the Securities and +Exchange Commission said. + A spokesman told Reuters that four institutions in the +United States were interested in participating in the Fund -- +Merrill Lynch and Co Inc, Salomon Brothers Inc, the IFC and the +First Boston Corp. + The spokesman said the Fund, approved last December, was +expected to attract about 100 mln dlrs of investments. + Reuter + + + +21-APR-1987 12:36:27.62 +oilseedrapeseed +japancanada + + + + + +C G +f1756reute +u f BC-JAPAN-BUYS-4,000-TONN 04-21 0043 + +JAPAN BUYS 4,000 TONNES OF CANADIAN RAPESEED + WINNIPEG, April 21 - Japan bought 4,000 tonnes of Canadian +rapeseed for last-half May/first-half June shipment, nearly +completing buying for May needs, trade sources said. + Price details were not available. + + Reuter + + + +21-APR-1987 12:39:08.68 +grainwheat +south-koreacanada + + + + + +C G +f1763reute +u f BC-SOUTH-KOREA-BUYS-50,0 04-21 0038 + +SOUTH KOREA BUYS 50,000 TONNES CANADIAN WHEAT + WINNIPEG, April 21 - South Korea yesterday bought 50,000 +tonnes of Canadian feed wheat for late June/early July shipment +at 95.00 dlrs per tonne FOB Vancouver, trade sources said. + Reuter + + + +21-APR-1987 12:39:55.30 +trade +usa +reagan + + + + +RM A +f1766reute +r f BC-WASHINGTON-BUDGET 04-21 0106 + +SENATE PREPARING FOR NEW U.S. BUDGET BATTLE + By Michael Posner, Reuters + WASHINGTON, April 21 - Congress returned from its Easter +recess ready for the annual Spring budget battle that promises +to be a partisan dispute. + The budget fight pitting Democrats against President Reagan +and Republicans is expected to get underway this week in the +Senate late this week and last at least another week. It is +taking on new prominence because of current trade woes. + That is because the budget problems and its associated huge +deficits are said to be at the root of related international +trade friction currently worrying financiers. + As the dollar slides downward on global markets and stock +exchanges gyrate wildly, the trade dispute involving the United +States and Japan once again is spreading fears of a major trade +war between the two trading giants for the first time since +World War II. + Ostensibly that dispute is over U.S. charges that Japan is +refusing to open its markets to semi-conductor chips and the +resulting U.S. tariffs doubling prices of Japanese televisions +and small computers. + Behind the elements of a brewing trade war which neither +side wants, is the dilemma of the U.S. budget and its deficit. + Some analysts say the financial markets may be waking up to +the economic realities that the huge debt cannot continue to +grow without repercussions. + A large portion of the U.S. debt has been financed by +foreigners from their accumulated trade surpluses. But if they +withdraw this support the result can only be further problems, +including higher interest rates for Americans. + In a nutshell, the U.S. budget process has now moved to the +showdown stages in Congress. Reagan's own trillion dollar +spending budget for the government year 1988, starting Oct. 1, +was trounced badly in the House on April 9. + The Senate takes up a plan similar to one that passed the +House, calling for slashing the deficit from its estimated 171 +billion dlr level next year to about 134 billion dlrs, through +defense and domestic spending cuts and about 18.5 billion dlrs +in new, unspecified, taxes. As the Senate prepares to take up +its own budget plan, majority Democrats predict there will be +passage of a bill, only after a protracted partisan battle. + In the House, not one Republican voted for the budget, +which passed by 230 to 192. In the Senate, none of Reagan's +Republicans voted for the budget as it passed out of the Senate +Budget Committee for full Senate consideration. + A key Senate Budget Committee source told Reuters he +believes this very unusual unanimous opposition was by design +among congressional Republicans, perhaps with the tacit +approval of the White House. + "Republicans want Democrats to take the heat for any tax +hikes and defense cuts," he said. + In the coming weeks, the source said, Democrats will press +for a bipartisan budget and seek a negotiated budget with +Reagan -- who already is opposed to the idea. But "it is not +clear how the Republicans will act," he added. + He said Republicans may propose their own plan for lower +taxes and more defense spending, which they did not offer after +Reagan's budget was clobbered in an early vote in the House. + When Reagan entered the White House in 1981, he inherited +what was labelled a huge deficit from Jimmy Carter that wound +up to be nearly 79 billion dlrs that year. + Despite Reagan's promise to balance the budget by 1983, +critics note that his administration's record of accumulated +debt is estimated over one trillion dlrs, or 1,100 billion +dlrs. + That is money the government must borrow, and pay back, and +many analysts say it is what kept the dollar high and caused +the worst U.S. trade deficit ever. + Last year the United States bought goods from the world +worth 169.8 billion dlrs more than what it sold, including +purchases of 58.6 billion dlrs in Japanese goods. + While Congress is trying to attack the trade deficit on one +front through a get-tough trade bill promising retaliatory +measures unless all markets are opened, its success so far +against the budget deficit has been marked by limited progress. + Congress, which controls the pursestrings, has put the +deficit on a downward path from its record high of 220.7 +billion dlrs accumulated in fiscal 1986, which ended Sept. 30. + Because of the Gramm-Rudman-Hollings balanced budget law +enacted in late 1985, there has been pressure on Congress to do +more than talk about deficits. + That law, named after Republican Senators Phil Gramm of +Texas, Warren Rudman of New Hampshire and Democrat Ernest +Hollings of South Carolina, calls for a balanced budget by 1991 +through a series of set deficit targets that Congress must meet. + The law has been followed, even though an enforcement +mechanism to mandate automatic across-the-board cuts if +Congress misses its goal was stricken by the Supreme Court. + The legislators have followed the targets -- on paper. But +in reality, the goal has actually been missed. For example, +Congress last year approved legislation to meet the 1987 target +of a 144 billion dlr deficit. But even after approving the +numbers, the deficit for 1987 is estimated at over 170 billion +dlrs -- far off the target. + This year the target is 108 billion dlrs and that goal is +expected to be missed widely. + Reuter + + + +21-APR-1987 12:42:37.02 + +usa + + + + + +A RM +f1778reute +r f BC-COMMONWEALTH-EDISON-< 04-21 0112 + +COMMONWEALTH EDISON <CWE> SELLS MORTGAGE BONDS + NEW YORK, April 21 - Commonwealth Edison Co is raising 360 +mln dlrs via a two-tranche offering of first and refunding +mortgage bonds, said lead manager Morgan Stanley and Co Inc. + A 200 mln dlr issue of bonds due 1990 has an 8-1/8 pct +coupon and was priced at 99.775 to yield 8.21 pct, or 65 basis +points over comparable Treasury securities. + A 160 mln dlr offering of bonds due 1992 has an 8-5/8 pct +coupon and was priced at 99.85 to yield 8.661 pct, or 78 basis +points more than Treasuries. Both tranches are non-callable for +life and rated A-3 by Moody's and A by S and P. Salomon +Brothers Inc co-managed the deal. + Reuter + + + +21-APR-1987 12:47:33.66 +acq +usa + + + + + +F +f1796reute +r f BC-ROYAL-RESOURCES 04-21 0058 + +BUSINESSMAN HAS ROYAL RESOURCES <RRCO.O> STAKE + WASHINGTON, April 21 - James Stuckert, a Louisville, Ky., +businessman, told the Securities and Exchange Commission he has +acquired 380,000 shares of Royal Resources Corp, or 5.7 pct of +the total outstanding common stock. + Stuckert said he bought the stake for 600,000 dlrs solely as +an investment. + Reuter + + + +21-APR-1987 12:48:28.99 + +usa + + + + + +F +f1800reute +d f BC-ATT-<T>-LAUNCHES-SYST 04-21 0091 + +ATT <T> LAUNCHES SYSTEMS FOR SMALL BUSINESSES + NEW YORK, April 21 - American Telephone and Telegraph Co +introduced two communications systems, Spirit and Merlin, and +other products, in a bid to strengthen its position with small +businesses, the company said. + The Spirit system, with a basic price tag of 1,500 dlrs, +can handle up to six lines and 16 telephones and a more +advanced line which can handle up to 24 lines and 48 +tlelphones. + ATT said the Merlin line, which starts at 2,500 dlrs, can +handle up to 32 lines and 72 telephones. + ATT said the new products will eventually replace the +current Merlin product family. Some of the systems will be +available in May and others in the third quarter. + ATT also introduced software enhancements for the System +25, for business that require PBX voice and data communications +and need up to 150 phones. These and other enhancements will be +available in the third quarter, the company said. + Reuter + + + +21-APR-1987 12:53:58.04 +cpi +spain + + + + + +RM +f1823reute +r f BC-SPAIN-MAINTAINS-FIVE 04-21 0091 + +SPAIN MAINTAINS FIVE PCT INFLATION TARGET + MADRID, April 21 - Spanish Secretary of State for the +economy Guillermo de la Dehesa said the government maintained +its five pct inflation target for this year although a 0.6 pct +increase in March pushed the rise in the year on year consumer +price index to 6.3 pct. + De la Dehesa said the March rise, announced today by the +National Statistics Institute, was not entirely satisfactory +but acceptable. + The year on year rate at the end of February was six pct. +Prices rose 8.3 pct last year. + The March rise included a 0.05 pct increase correcting an +error in last January's consumer price index. Economists had +earlier said the error could have been as high as 0.2 pct. + De la Dehesa said seasonal increases in food prices pushed +the index up in March and he expected the rate to be lower in +April. + The Communist-led Workers Commissions union said the March +price rise showed inflation was going up again and the +government looked increasingly unlikely to meet its five pct +target. + The Workers Commissions said the inflation trend fuelled +unions's claims to wage increases beyond the government's +recomendation to limit wage rises at around five pct. + Spain is being affected by a two-month-old wave of strikes +for wage rises. Government officials note wage settlements so +far this year have yielded average increases upwards of six +pct, while unions say the figure is higher then seven pct. + REUTER + + + +21-APR-1987 13:00:06.84 +crude +usa + + + + + +Y +f1842reute +u f BC-API-SAID-STATISTICS-T 04-21 0036 + +API SAID STATISTICS TO BE RELEASED TONIGHT + NEW YORK, April 21 - The American Petroleum Institute said +it plans to release its weekly report on U.S. oil inventories +tonight, even though last Friday was a holiday. + Reuter + + + +23-APR-1987 18:32:18.42 + +usa + + + + + + +F +f3036reute +r f BC-GCA-<GCA>-COMPLETES-F 04-23 0102 + +GCA <GCA> COMPLETES FINANCIAL RESTRUCTURING + ANDOVER, Mass., April 23 - GCA Corp said it completed its +previously announced plan of financial restructuring under +which Hallwood Group Inc <HWG> took a 14 pct interest in the +company, a maker of semiconductor manufacturing equipment. + The company said it also implemented a one-for-50 reverse +stock split. + Under terms of the plan, the company exchanged about 109 +mln dlrs in debt to creditors and suppliers for 43 mln dlrs in +cash, and warrants to purchase 2.2 mln shares of its common +stock. GCA also raised 71.7 mln dlrs through the sale of common +stock. + Reuter + + + +23-APR-1987 18:34:33.58 + +usa + + + + + + +F +f3040reute +u f BC-SEC 04-23 0098 + +SEC WARNS SECURITIES DEALERS ON HIGH MARK-UPS + WASHINGTON, April 23 - The Securities and Exchange +Commission reminded securities dealers that its mark-up +disclosure requirements also applies to transactions on +zero-coupon securities. + Dealers and brokers are required by U.S. securities law to +disclose their mark-ups if they are excessive, the SEC said in +a public notice. + Further, excessive mark-ups on securities transactions, +whether disclosed or not, violate the rules of the national +Association of Securities Dealers Inc and Municipal Securities +Rulemaking Board, it said. + In a separate action, the SEC filed a friend-of-the-court +brief in a private civil case involving a complaint against +Merrill Lynch over excessive mark-ups on zero-coupon bonds. The +case is being appealed to the U.S. Appeals Court. + The lower court dismissed the complaint, finding antifraud +provisions of securities laws do not prohibit undisclosed +excessive mark-ups on securities transactions. + The SEC is urging the appeals court to reverse the +decision, citing its nearly 50 year-old position that +undisclosed excessive mark-ups by securities dealers violate +the general antifraud provisions of securities laws. + Reuter + + + +23-APR-1987 18:37:03.79 +earn +canada + + + + + + +E F +f3044reute +u f BC-SOUTHAM-INC-<STM.TO> 04-23 0043 + +SOUTHAM INC <STM.TO> 1ST QTR NET + TORONTO, April 23 - + Oper shr 32 cts vs 37 cts + Oper net 18.9 mln vs 21.6 mln + Revs 352.1 mln vs 323.0 mln + Note: 1987 net excludes extraordinary gain of 2.8 mln dlrs +or five cts shr from sale of surplus property. + Reuter + + + +23-APR-1987 18:45:40.42 +earn +usa + + + + + + +F +f3052reute +r f BC-LOCTITE-CORP-<LOC>-3R 04-23 0044 + +LOCTITE CORP <LOC> 3RD QTR MARCH 31 NET + NEWINGTON, Conn., April 23 - + Shr 96 cts vs 53 cts + Net 8,663,000 vs 4,798,000 + Revs 89.7 m ln vs 66.8 mln + Nine mths + Shr 2.33 dlrs vs 1.67 dlrs + Net 21.1 mln vs 15.1 mln + Revs 241.3 mln vs 192.8 mln + Reuter + + + +23-APR-1987 18:56:03.00 + +usajapan + + + + + + +RM V +f3056reute +u f BC-U.S.-CONGRESS-STILL-A 04-23 0104 + +U.S. CONGRESS STILL ANGRY WITH JAPAN - ABE + NEW YORK, April 23 - Special Japanese envoy Shintaro Abe +said in a brief interview with Reuters that the feeling in the +U.S. congress is "very severe" against Japan. + However, Abe said he believed that neither Congress nor the +Reagan administration wants to undermine relations with Japan. + He said the Reagan administration showed "relative +understanding" of how Japan is trying to alleviate its U.S. +trade imbalance. Abe said he was convinced "Congress and the +administration had the same view that the relationship between +Tokyo and Washington should not be undermined." + Reuter + + + +23-APR-1987 18:59:23.50 +earn +usa + + + + + + +F +f3060reute +u f BC-GLENFED-INC-<GLN>-3RD 04-23 0070 + +GLENFED INC <GLN> 3RD QTR MARCH 31 NET + GLENDALE, Calif., April 23 - + Oper shr 1.54 dlrs vs 82 cts + Oper net 33.7 mln vs 17.66 mln + Revs 473.1 mln vs 419.0 mln + Nine mths + Oper shr 4.60 dlrs vs 2.39 dlrs + Oper net 100.4 mln vs 51.0 mln + Revs 1.38 billion vs 1.21 billion + Assets 18.5 billion vs 15.5 billion + Deposits 13.00 billion vs 11.29 billion + Loans 15.04 billion vs 12.56 billion + Note: Oper net excludes extraordinary loss 6,636,000 and +11.9 mln for 1987 qtr and nine mths on prepayment of borrowings +from the Federal Home Loan Bank Board. + Oper also excludes tax credits of 15.8 mln vs 5,954,000 for +qtr and 17.8 mln vs 11.6 mln for nine mths. + + Reuter + + + +23-APR-1987 19:00:51.40 +earn +usa + + + + + + +F +f3062reute +r f BC-HORIZON-INDUSTRIES-IN 04-23 0053 + +HORIZON INDUSTRIES INC <HRZN> 2ND QTR NET + CALHOUN, Ga., April 23 - Qtr ended April four + Shr profit eight cts vs loss 22 cts + Net profit 341,000 vs loss 903,000 + Revs 58.4 mln vs 46.3 mln + Six mths + Shr profit 35 cts vs loss 19 cts + Net profit 1,466,000 vs loss 767,000 + Revs 121.4 ln vs 95.9 mln + Reuter + + + +23-APR-1987 19:02:27.01 +money-supply +usa + + + + + + +RM V +f3063reute +u f BC-/FED-DATA-PROVIDE-NEW 04-23 0097 + +FED DATA PROVIDE NEW EVIDENCE OF TIGHTER POLICY + By Alan Wheatley, Reuters + NEW YORK, April 23 - U.S. banking data released today are +too distorted to draw sweeping conclusions about monetary +policy, but they do support the market's assumption that the +Federal Reserve has started to tighten its grip on credit, +economists said. + "It's clear that the Fed has firmed somewhat. Discount +window borrowings, net free reserves, the Fed funds rate +average and the pattern of reserve additions are all consistent +with a modest tightening," said Dana Johnson of First Chicago +Corp. + Johnson, and several other economists, now estimate that +the Fed funds rate should trade between 6-1/4 and 6-3/8 pct. + Discount window borrowings in the week to Wednesday were +935 mln dlrs a day, producing a daily average for the two-week +statement period of 689 mln dlrs, the highest since the week of +December 31, 1986, and up from 393 mln dlrs previously. + Moreover, banks were forced to borrow a huge 5.2 billion +dlrs from the Fed on Wednesday - the highest daily total this +year - even though unexpectedly low Treasury balances at the +Fed that day left banks with over two billion dlrs more in +reserves than the Fed had anticipated. + However, economists said it is almost certain that the Fed +is aiming for much lower discount window borrowings than +witnessed this week. They pointed to two factors that may have +forced banks to scramble for reserves at the end of the week. + First, economists now expect M-1 money supply for the week +ended April 29 to rise by a staggering 15 to 20 billion dlrs, +partly reflecting the parking in checking accounts of the +proceeds from stock market sales and mutual fund redemptions to +pay annual income taxes. + As banks' checking-account liabilities rise, so do the +reserves that they are required to hold on deposit at the Fed. + Required reserves did indeed rise sharply by 2.5 billion +dlrs a day in the two weeks ended Wednesday, but economists +said the Fed may not have believed in the magnitude of the +projected M-1 surge until late in the week and so started to +add reserves too late. + Second, an apparent shortage of Treasury bills apparently +left Wall Street dealers with too little collateral with which +to enagage in repurchase agreements with the Fed, economists +said. Thus, although there were 10.3 billion dlrs of repos +outstanding on Wednesday night, the Fed may have wanted to add +even more reserves but was prevented from doing so. + "It's not at all inconceivable that the Fed didn't add as +much as they wanted to because of the shortage of collateral," +said Ward McCarthy of Merrill Lynch Economics Inc. + McCarthy estimated that the Fed is now targetting +discount-window borrowings of about 400 mln dlrs a day, +equivalent to a Fed funds rate of around 6-3/8 pct. + After citing the reasons why the Fed probably has not +tightened credit to the degree suggested by the data, +economists said the fact that the Fed delayed arranging +overnight injections of reserves until the last day of the +statement period was a good sign of a more restrictive policy. + Jeffrey Leeds of Chemical Bank had not been convinced that +the Fed was tightening policy. But after reviewing today's +figures, he said, "It's fair to say that the Fed may be moving +toward a slightly less accommodative reserve posture." + Leeds expects Fed funds to trade between 6-1/4 and 6-3/8 +pct and said the Fed is unlikely to raise the discount rate +unless the dollar's fall gathers pace. + Johnson at First Chicago agreed, citing political +opposition in Washington to a dollar-defense package at a time +when Congress sees further dollar depreciation as the key to +reducing the U.S. trade surplus with Japan. + Reuter + + + +23-APR-1987 19:08:09.42 +earn +usa + + + + + + +F +f3066reute +r f BC-RORER-GROUP-INC-<ROR> 04-23 0072 + +RORER GROUP INC <ROR> 1ST QTR NET + FORT WASHINGTON, Pa., April 23 - + Oper shr profit 34 cts vs loss 78 cts + Oper net profit 7,434,000 vs loss 17.0 mln + Revs 201.2 mln vs 171.7 mln + Note: Year-ago oper exludes gain on sale of businesses of +139.6 mln. + Year-ago oper includes charges of 27.8 mln resulting from +allocation of the purchase price of Revlon's businesses to +inventory and 7.1 mln for restructuring costs. + Reuter + + + +23-APR-1987 19:36:56.77 +coffee +costa-ricaguatemala + +ico-coffee + + + + +T +f3073reute +u f AM-centam-coffee 04-23 0088 + +MILD COFFEE GROWERS TO MEET IN GUATEMALA + SAN JOSE, April 23 - A large group of "other milds" +coffee-growing nations will hold talks in Guatemala next month +to map their strategy for next September's meeting of the +International Coffee Organisation (ICO). + Mario Fernandez, executive director of the Costa Rican +coffee institute, said delegates from Mexico, the Dominican +Republic, Peru, Ecuador, India, Papua New Guinea and five +central american nations will participate in the two-day +strategy session beginning May 4. + The main topic will be reform of what many producing +countries perceive as the ICO's unfair distribution of export +quotas, Fernandez said. + He said Costa Rica would press for quotas "based on the +real production and export potential of each country in the +past few years" and to distribute quotas based on "historic" +production levels rather than recent harvests and crop +estimates. + Reuter + + + +23-APR-1987 19:48:08.94 +acq +usa + + + + + + +F +f3076reute +u f AM-COMSAT 04-23 0107 + +US STUDY DISCUSSES DROPPED COMSAT-CONTEL MERGER + WASHINGTON, April 23 - A congressional study today said the +proposed, but now apparently abandoned, merger of the +Communications Satellite Corp <CQ> and Contel Corp <CTC> +would technically be legal but could violate the spirt of the +law setting up COMSAT. + Two weeks ago before the study was completed, Contel +announced it would seek to terminate the proposed merger. + The study by the non partisan Congressional Research +Service (CRS) said "the proposed merger appears to comply, +technically, with the mandates or letter of statutes, if may +nevertheless violate the spirit of the law." + Comsat, created by a 1962 act of Congress, and Contel, a +corporation of local telephone and communications firms, filed +with the Federal Communications Commission last November 3 an +application for merger. Several firms had protested the +proposed merger. + In an analysis of the law, the research service issued +several critical comments about the structure of the new firm +and said apparent domination by Contel of a restructured COMSAT +would have broken the spirit of the law setting up +COMSAT.COMSAT is the U.S. arm of Intelstat, the international +satellite communications firm. + +Reuter...^M + + + +23-APR-1987 19:48:47.25 + +japanusa +nakasone + + + + + +C +f3077reute +u f BC-JAPANESE-PARLIAMENT-P 04-23 0138 + +SETBACK SEEN FOR NAKASONE IN JAPANESE PARLIAMENT + TOKYO, April 24 - Japan's Lower House passed the 1987 +budget after the ruling Liberal Democratic Party agreed to a +mediation proposal that could kill its plan to introduce a +controversial sales tax, political analysts said. + The move was seen as a major blow to Prime Minister +Yasuhiro Nakasone, the leading advocate of the five pct tax. + Some analysts predicted Nakasone might be forced to step +down just after the June summit of leaders from major +industrial democracies, well before his one-year term is due to +expire at the end of October. + The ruling party though was anxious to pass the budget +before Nakasone leaves next week for the U.S. so that he could +tell Washington the Japanese government was doing its utmost to +boost the sagging economy and imports. + Reuter + + + +23-APR-1987 20:21:46.09 +money-fxdlr + + + + + + + +RM +f3091reute +b f BC-BANK-OF-JAPAN-INTERVE 04-23 0086 + +BANK OF JAPAN INTERVENES IN TOKYO MARKET + TOKYO, April 24 - The Bank of Japan intervened just after +the Tokyo market opened to support the dollar from falling +below 140.00 yen, dealers said. + The central bank bought a moderate amount of dollars to +prevent its decline amid bearish sentiment for the U.S. +Currency, they said. + The dollar opened at a record Tokyo low of 140.00 yen +against 140.70/80 in New York and 141.15 at the close here +yesterday. The previous Tokyo low was 140.55 yen set on April +15. + REUTER + + + +23-APR-1987 20:24:10.50 +money-supply +australia + + + + + + +RM +f3092reute +b f BC-AUSTRALIA'S-M-3-MONEY 04-23 0101 + +AUSTRALIA'S M-3 MONEY SUPPLY RISE 1.5 PCT IN MARCH + SYDNEY, April 24 - Australia's M-3 money supply growth was +1.5 pct in March and 11.3 pct in the 12 months to March, the +Reserve Bank said. + This compared with a revised rise of 0.5 pct in February +and 11.1 pct in the year to end-February. + The Reserve Bank said the M-3 data for March was affected +by the start of the operations of <National Mutual Royal +Savings Bank Ltd>, which has resulted in the transfer of +deposits (equivalent to around 1.5 pct of m-3) from the United +Permanent Building Society to National Mutual Royal Savings +Bank Ltd. + The Reserve Bank said M-3 money supply in March was 110.77 +billion Australian dlrs compared with a revised 109.11 billion +in February and 99.48 billion in March, 1986. + M-3 is deposits of the private sector held by trading and +savings banks plus holdings of notes and coins. + REUTER + + + +23-APR-1987 20:30:17.87 + +japan + + + + + + +RM +f3094reute +b f BC-JAPANESE-PARLIAMENT-P 04-23 0111 + +JAPANESE PARLIAMENT PASSES 1987 BUDGET + TOKYO, April 24 - Parliament's Lower House passed the 1987 +budget shortly before midnight local time, official +parliamentary sources said. + The move followed agreement by the ruling Liberal +Democratic Party to a proposal that could kill its plan to +introduce a controversial sales tax, political analysts said. +The move was seen as a major blow to Prime Minister Yasuhiro +Nakasone, the leading advocate of the five pct tax, they said. + Some analysts said Nakasone may be forced to step down +after the June summit of heads of major industrial democracies +and before his one-year term is due to expire at end-October. + Under the compromise agreed by the LDP and opposition +parties, Lower House Speaker Kenzaburo Hara will take charge of +the sales tax bill, appoint a ruling/opposition party council +to debate it and allow opposition leaders to review the present +tax system, analysts said. + Hara also verbally agreed to scrap the sales tax plan +entirely if the joint council fails to reach agreement on how +to handle the tax. + The opposition parties, who have been vociferously +attacking the sales tax plan for months, hailed the decision as +a great victory. + The opposition parties had already delayed passage of the +budget for three weeks after the April 1 start of the fiscal +year by intermittent parliamentary boycotts. + Although the LDP had more than enough votes to ram the +budget through parliament, it had been reluctant to do so for +fear of a backlash of public opinion, especially after its +setback in recent local elections due to the sales tax issue. + The ruling party though was anxious to pass the budget +before Nakasone leaves next week for the U.S. So that he could +tell Washington the Japanese government was doing its utmost to +boost the sagging economy and imports. + According to Kyodo News Service, Nakasone told reporters he +did not think the sales tax was dead. + If the sales tax is dropped, it could prove a major boost +to the economy because it would increase the government budget +deficit, economists said. + The sales tax was originally scheduled to be introduced +next January to help offset the loss of government revenues +stemming from a cut in income and corporate taxes due to go +into effect this month. + REUTER + + + +23-APR-1987 20:35:24.14 +money-fxdlr +usajapan + + + + + + +RM +f3095reute +f f BC-Dollar-trades-at-post 04-23 0011 + +******Dollar trades at post-war low of 139.50 yen in Tokyo - brokers +Blah blah blah. + + + + + +23-APR-1987 21:19:18.12 +dlr + + + + + + + +RM +f3111reute +f f BC-Many-major-nations-ye 04-23 0012 + +******Many major nations yesterday intervened heavily to aid dlr - Miyazawa +Blah blah blah. + + + + + +23-APR-1987 21:25:22.52 +acq +uk + + + + + + +F +f3114reute +f f BC-STANDARD-OIL-SAYS-BRI 04-23 0012 + +******STANDARD OIL SAYS BRITISH PETROLEUM SHARE TENDER EXTENDED UNTIL MAY 4 +Blah blah blah. + + + + + +23-APR-1987 21:28:14.05 +money-fxdlr +usajapan +miyazawa + + + + + +RM +f3115reute +b f BC-JAPAN-HAS-NO-PLANS-FO 04-23 0110 + +JAPAN HAS NO PLANS FOR NEW MEASURES TO AID DLR + TOKYO, April 24 - Finance Minister Kiichi Miyazawa said +Japan has no plans to take new emergency measures to support +the dollar, other than foreign exchange intervention. + He also told reporters that many major nations yesterday +intervened heavily to support the dollar against the yen. + Yesterday's intervention was large in terms of the +countries involved and the amounts expended, he said. + With the continued fall of the dollar against the yen, +0speculation had arisen in currency markets here that Japan +might take new measures to support the U.S. Currency, such as +curbing capital outflows. + Miyazawa said that yesterday's news of a 4.3 pct rise in +U.S. Gnp in the first quarter had been expected. Although the +growth looks robust on the surface, the figures in reality are +not that good, he said. + He said the ruling Liberal Democratic Party (LDP) is +expected to come up with a final set of recommendations of ways +to stimulate the Japanese economy before Prime Minister +Yasuhiro Nakasone leaves for Washington next week. + Commenting on yesterday's report on economic restructuring +by a high-level advisory panel to Nakasone, Miyazawa said it +was important to put the panel's recommendations into effect. + REUTER + + + +23-APR-1987 21:34:36.89 +acq +usauk + + + + + + +F +f3117reute +b f BC-STANDARD-OIL-SAYS-BP 04-23 0082 + +STANDARD OIL SAYS BP EXTENDS TENDER + NEW YORK, April 23 - Standard Oil Co <SRD> said in a brief +announcement issued after a meeting of its board of directors +that British Petroleum Co PLC <BP.L> (BP) has extended its 70 +dlr per share tender offer until midnight May 4. + The offer for the 45 pct of Standard shares not owned by BP +had been due to expire midnight April 28. + Standard Oil said discussions with BP concerning the tender +were continuing but provided no further details. + "So long as those discussions continue, no recommendation +will be made to Standard Oil shareholders regarding the offer," +Standard said. + Standard directors met at the company's Cleveland +headquarters on Thursday in a regularly scheduled meeting. The +spokesman was unable to say if the meeting would continue on +Friday. + A committee of independent directors previously obtained an +opinion from First Boston Corp that the Standard shares were +worth 85 dlrs each, 15 dlrs more than the BP offer. + REUTER + + + +23-APR-1987 21:38:26.85 + +usa + + + + + + +F +f3120reute +u f BC-QANTAS-TO-BUY-EXTENDE 04-23 0104 + +QANTAS TO BUY EXTENDED RANGE BOEING 767 AIRCRAFT + SYDNEY, April 24 - State-owned <Qantas Airways Ltd> said it +has placed a firm order for a single Boeing Co <BA.N> 767-300ER +(extended range) aircraft for delivery in August 1988 at a cost +of 150 mln Australian dlrs, including spares. + A statement said it also has options to buy six more and +will decide in mid-1987 whether to use engines made by United +Technologies Corp <UTX> unit Pratt and Whitney or General +Electric Co <GE>. + The 767-300ER can carry more cargo and passengers and is +more fuel-efficient than the 767-200, six of which Qantas has +in service. + REUTER + + + +23-APR-1987 21:40:47.37 + +usajapan + + + + + + +RM +f3123reute +u f BC-JAPAN-AGENCY-URGES-WA 04-23 0115 + +JAPAN AGENCY URGES WATCH ON YEN RISE EFFECTS + TOKYO, April 24 - Japan should look out for possible +effects of the yen's recent sharp rise on Japan's economy as +growth remains slow, the government's Economic Planning Agency +said in a monthly report submitted to cabinet ministers. + EPA officials told reporters the underlying trend of the +economy is firm but growth is slow due to sluggish exports. + Customs-cleared exports by volume fell 4.9 pct +month-on-month in February after a 2.8 pct fall in March. + The government must take adequate economic measures to +expand domestic demand and stabilise exchange rates in a bid to +ensure sustained econonic growth, the report said. + The report made a special reference to the yen's renewed +rise and its effect on the economy, the officials said, adding +the agency's judgement of current economic conditions has not +changed since last month. + The EPA said last month Japan's economy is beginning to +show signs of bottoming out, conditional upon exchange rates. + The dollar fell below 139 yen in early trading today - a +post-war low. + REUTER + + + +23-APR-1987 22:03:13.44 +money-supplyinterest +japan + + + + + + +RM +f3135reute +b f BC-JAPAN-DOES-NOT-INTEND 04-23 0108 + +JAPAN DOES NOT INTEND TO EASE CREDIT - OFFICIALS + TOKYO, April 24 - The Bank of Japan does not intend to ease +credit policy further, bank officials told Reuters. + They were responding to rumours in the Japanese bond market +that the central bank was planning to cut its 2.5 pct discount +rate soon, possibly before Prime Minister Yasuhiro Nakasone +leaves for Washington on April 29. + Bank of Japan governor Satoshi Sumita will be in Osaka, +western Japan on April 27 and 28 for the annual meeting of the +Asian Development Bank, making a rate cut announcement early +next week a virtual impossibility, they said. April 29 is a +holiday here. + REUTER + + + +23-APR-1987 22:49:55.57 +interest +australia + + + + + + +RM +f3162reute +u f BC-NATIONAL-MUTUAL-CUTS 04-23 0068 + +NATIONAL MUTUAL CUTS AUSTRALIAN PRIME TO 17.75 PCT + MELBOURNE, April 24 - National Mutual Royal Bank Ltd said +it would cut its prime rate to 17.75 pct from 18.25, effective +April 27. + The cut follows a trend toward lower rates started last +month and accelerated by Westpac Banking Corp, which yesterday +cut its prime to 17.50 pct from 18.25 pct. Westpac's 17.50 pct +is the lowest prevailing rate. + REUTER + + + +23-APR-1987 23:12:19.63 +acq +australiacanada + + + + + + +F +f3171reute +u f BC-ELDERS-PURCHASE-OF-CA 04-23 0102 + +ELDERS PURCHASE OF CANADIAN BREWER APPROVED + SYDNEY, April 24 - Elders IXL Ltd <ELXA.S> said the +Canadian government approved its bid for <Carling O'Keefe Ltd>. + Elders earlier announced it was buying 10.9 mln shares, or +50.1 pct of Carling, from the Canadian subsidiary of Rothmans +International Plc <ROT.L> for 18 Canadian dlrs each. + Elders chairman John Elliott said in a statement when the +offer for the ordinary shares closed on April 23, that +acceptances representing over 93 pct of outstanding shares had +been received. <IXL Holdings> would proceed to acquire the rest +compulsorily, he said. + REUTER + + + +23-APR-1987 23:51:21.93 +crude +ecuadorcolombia + +opec + + + + +RM +f3186reute +u f BC-ECUADOR-TO-USE-COLOMB 04-23 0106 + +ECUADOR TO USE COLOMBIA OIL LINK FOR FIVE YEARS + BOGOTA, April 23 - Ecuador will use a new pipeline link +with Colombia to export crude oil for the next five years, +Colombian mines and energy minister Guillermo Perry said. + The link will be inaugurated on May 8. It was built to +allow Ecuador to resume exports of crude oil halted on March 5 +by earthquake damage to its Lago Agrio to Balao pipeline, + Once that pipeline is repaired, Ecuador will exceed its +OPEC quota in order to offset lost income and pay debts +contracted with Venezuela and Nigeria since the quake, Ecuador +mines and energy minister Javier Espinosa said. + The two ministers were speaking at a news conference after +signing an agreement for joint oil exploration and exploitation +of the jungle border zone between the two nations. Drilling +will begin in September. + "The agreement to transport Ecuadorean crude oil is not only +for this emergency period but for the next five years, with +possibility of an extension. Between 20,000 and 50,000 barrels +per day (bpd) will be pumped along it," Perry said. + Espinosa said Ecuador planned to pump 35 mln barrels +through the link in the next five years, at a cost of 75 cents +per barrel during the first year. + The 43-km link, with a maximum capacity of 50,000 bpd, will +run from Lago Agrio, the centre of of Ecuador's jungle +oilfields, to an existing Colombian pipeline that runs to the +Pacific port of Tumaco. + Espinosa said the 32-km stretch of the link built on the +Ecuadorean side cost 10.5 mln dlrs. Perry gave no figures for +Colombia's 11 km segment but said it was "insignificant compared +with what we are going to earn." + OPEC member Ecuador was pumping around 250,000 bpd before +the quake. Lost exports of 185,000 bpd are costing it 90 mln +dlrs per month, Espinosa said. + REUTER + + + +23-APR-1987 23:57:39.18 + +indonesia + + + + + + +RM +f0001reute +u f BC-SUHARTO-PARTY-SET-FOR 04-23 0107 + +SUHARTO PARTY SET FOR EASY WIN IN INDONESIA POLLS + JAKARTA, April 24 - President Suharto's ruling Golkar party +appears to have made substantial gains with over 75 pct of the +votes counted in Indonesia's national elections. + Figures released by the election commission showed Golkar +on target to take 70 pct of the vote. + Provisional figures indicate that with results of 68.9 mln +ballots announced, Golkar had won 50.29 mln, the Moslem-based +United Development Party 10.93 mln and the nationalist +Democratic Party 7.69 mln. + The total electorate is 94 mln and officials said they +thought about 90 pct of the votes had been counted. + + + +24-APR-1987 06:10:35.04 + +denmark + + +zse + + +F +f0368reute +r f BC-DENMARK'S-NOVO-INDUST 04-24 0108 + +DENMARK'S NOVO INDUSTRI GETS SWISS SHARE LISTING + COPENHAGEN, April 24 - Danish-based insulin and enzymes +producer Novo Industri A/S <NVO.CO> said in a statement that +its "B" shares would be listed on stock exchanges in Zurich, +Basel and Geneva from May 4. + The aim is to create broader European interest in Novo +stock, currently listed in Copenhagen, London and New York, +said the statement issued after yesterday's ordinary general +meeting. + Novo said more than 50 pct of its B shares were owned by +U.S. Investors. The new listings, the first by a Danish company +on the Swiss exchanges, will not involve issuing of new share +capital. + REUTER + + + +24-APR-1987 06:16:49.25 +graincorn +taiwanusa + + + + + +G C +f0376reute +u f BC-TAIWAN-TO-TENDER-UP-T 04-24 0088 + +TAIWAN TO TENDER UP TO 87,000 TONNES OF U.S. MAIZE + TAIPEI, April 24 - The joint committee of Taiwan's maize +importers will tender on April 29 for two cargoes of U.S. +Maize, totalling between 54,000 and 87,000 tonnes for delivery +between May 21 and June 25, a committee spokesman told Reuters. + Taiwan has set a calendar 1987 import target of 2.92 mln +tonnes compared with imports of 3.05 mln in 1986. About 80 pct +of the imports are expected to come from the U.S. And the rest +from South Africa, the spokesman said. + REUTER + + + +24-APR-1987 06:18:18.37 +money-fx +switzerland +languetin + + + + +RM +f0379reute +u f BC-SWISS-COMMITTED-TO-JO 04-24 0106 + +SWISS COMMITTED TO JOINT CURRENCY INTERVENTION + BERNE, April 24 - The Swiss National Bank will continue to +take part in concerted intervention on currency markets as +necessary, president Pierre Languetin told the bank's annual +meeting. + He said the dollar had on occasion hit highs or lows which +bore no relation to economic fundamentals and cooperation +between all monetary authorities was necessary to prevent it +breaching thresholds that would damage everyone. + "We are resolved -- as we have done in the past -- to take +part in concerted intervention to the extent that this is +possible and desirable," Languetin said. + Languetin said Switzerland had noted with satisfaction the +six nation Paris accord on currency stabilisation measures in +February, adding that it had anchored the principle of +strengthened international cooperation. + He said measures such as recent concerted intervention were +useful in the short term. + But he added, "The (Paris) Louvre accord can produce no +lasting effects without a correction of the fundamental +imbalances, without a reduction of the American budget deficit +and without stronger growth in Europe and Japan." + Languetin said certain changes would probably be necessary +in the "too expansive" monetary policy of the United States, +adding that there was a prevailing view that U.S. Money supply +was expanding too strongly. + "If this should last long the dollar could only be +stabilised at the cost of a substantial easing in monetary +policy on the part of the other central banks, which would in +turn create the basis for a new wave of world-wide inflation," +he said. One positive factor was that monetary authorities in +the most important countries had not relinquished their +anti-inflation policies. + REUTER + + + +24-APR-1987 06:34:22.72 +sugar +japancuba + + + + + +C T +f0409reute +u f BC-JAPANESE-BUYERS-ACCEP 04-24 0103 + +JAPANESE BUYERS ACCEPT CUBA SUGAR DELAY - TRADERS + TOKYO, April 24 - Several Japanese buyers have accepted +postponement of between 150,000 and 200,000 tonnes of Cuban raw +sugar scheduled for delivery in calendar 1987 until next year +following a request from Cuba, trade sources said. + Cuba had sought delays for some 300,000 tonnes of +deliveries, they said. It made a similar request in January +when Japanese buyers agreed to postpone some 200,000 tonnes of +sugar deliveries for 1987 until 1988. + Some buyers rejected the Cuban request because they have +already sold the sugar on to refiners, they added. + Japanese buyers are believed to have contracts to buy some +950,000 tonnes of raw sugar from Cuba for 1987 shipment. + But Japan's actual raw sugar imports from Cuba are likely +to total only some 400,000 to 450,000 tonnes this year, against +576,990 in 1986, reflecting both the postponements and sales +earlier this year by Japanese traders of an estimated 150,000 +tonnes of Cuban sugar to the USSR for 1987 shipment, they said. + They estimated Japan's total sugar imports this year at 1.8 +mln tonnes, against 1.81 mln in 1986, of which Australia is +expected to supply 550,000, against 470,000, South Africa +350,000, against 331,866, and Thailand 400,000, after 390,776. + REUTER + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-018.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-018.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-018.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-018.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2004 @@ + + + 2-JUN-1987 10:04:07.81 +cpi +brazil +sarney + + + + +C +f1027reute +u f BC-BRAZIL'S-SARNEY-DECLA 06-02 0092 + +BRAZIL'S SARNEY RENEWS CALL FOR WAR ON INFLATION + BRASILIA, June 2 - President Jose Sarney today declared "a +war without quarter" on inflation and said the government would +watch every cent of public expenditure. + Sarney, addressing his cabinet live on television, also +reiterated that he intended to remain in power for five years, +until 1990. There has been a long-running political debate +about how long his mandate should be. + Brazil is currently suffering from the worst inflation of +its history. In April monthly inflation reached 21 pct. + Reuter + + + + 2-JUN-1987 10:04:26.11 + + +reaganvolckergreenspan + + + + +V RM +f1030reute +f f BC-******REAGAN-SAYS-VOL 06-02 0014 + +******REAGAN SAYS VOLCKER WILL NOT ACCEPT 3rd TERM AS FED CHAIRMAN, NOMINATES GREENSPAN +Blah blah blah. + + + + + + 2-JUN-1987 10:05:19.67 + +usa + + + + + +V RM +f1034reute +b f BC-/U.S.-HOME-SALES-ROSE 06-02 0079 + +U.S. HOME SALES ROSE 7.6 PCT IN APRIL + WASHINGTON, June 2 - Sales of new, single-family homes rose +7.6 pct in April from March to a seasonally adjusted annual +rate of 777,000 units, the Commerce Department said. + The department revised March sales to show a 2.7 pct +decrease from the previous month to 722,000 units instead of +the previously reported 3.6 pct drop in March. + The April increase brought home sales 12.0 pct below the +April, 1986, level of 883,000 units. + The April increase brought home sales to the highest level +since last April's 883,000 units. + The Commerce Department said that before seasonal +adjustment, the number of homes actually sold in April was +76,000, up from 71,000 in March but down from 84,000 in April, +1986. + The average price was 118,800 dlrs in April, down from +121,200 dlrs in March but up from 110,300 dlrs a year ago. + The median price was unchanged from March at 99,000 dlrs +but up from 92,500 dlrs in April, 1986, the department said. + Reuter + + + + 2-JUN-1987 10:06:06.42 + +uk + + + + + +RM +f1036reute +b f BC-BRIXTON-ESTATE-LAUNCH 06-02 0075 + +BRIXTON ESTATE LAUNCHES UNLIMITED STG CP PROGRAM + LONDON, June 2 - Brixton Estate Plc is establishing a +sterling commercial paper program for an unlimited amount, J. +Henry Schroder Wagg and Co Ltd said as arranger. + Dealers will be Schroder Wagg, S.G. Warburg and Co Ltd and +County Natwest Capital Markets Ltd. + The paper will be issued in denominations of 500,000 and +one mln stg and will have maturities between seven and 364 +days. + REUTER + + + + 2-JUN-1987 10:06:53.99 + +usa +reaganvolckergreenspanjames-baker + + + + +V RM +f1037reute +b f BC-REAGAN-FED 06-02 0043 + +REAGAN SAYS VOLCKER WILL NOT SERVE NEW TERM + WASHINGTON, June 2 - President Reagan said Paul Volcker has +declined to serve another term as chairman of the Federal +Reserve Board, the U.S. central bank. Reagan +nominated economist Alan Greenspan in his place. + Volcker's term expires in August. + Reagan, in a brief announcement in the White House briefing +room, said he accepted Volcker's decision "with great reluctance +and regret." + Volcker, first appointed to the Fed post by President Jimmy +Carter in 1979, said "there is a time to leave and a time to +come ... I have no feeling I was being pushed." + Volcker, appearing with Reagan, Greenspan, and Treasury +Secretary James Baker in the briefing room, said he will remain +on the job until Greenspan's nomination is approved by the +Senate. + In a tribute to a smiling Volcker standing beside him, +Greenspan told reporters that one of the departing chairman's +greatest achievements was reducing inflation. + "It will be up to those of us who follow him to be certain +that those very hard won gains will not be lost. Assuring that +will be one of my primary goals," Greenspan said. + Financial markets reacted with dismay at the departure of +Volcker, who has been widely credited with holding the line on +inflation and seeking to maintain stability in currency values. + Immediately following Reagan's announcement, the U.S. +dollar weakened sharply against all major currencies and both +the bond and stock markets declined. + But Greenspan told reporters he thought the dollar, which +has fallen sharply over the past year, has reached its low +point. + + "There certainly is evidence in that direction," Greenspan +said when reporters asked if the dollar has bottomed out. + The market reaction was probably exaggerated by surprise +because the announcement followed a number of published reports +that the White House had decided to reappoint Volcker. + Volcker's tenure at the Fed began under the cloud of major +inflation under Carter with consumer prices rising more than 10 +per cent annually and the prime interest rate exceeding 20 per +cent. + + With Reagan's backing, Volcker pursued a tight money policy +that cut inflation to about three per cent annually and reduced +interest rates to their lowest level in nearly a decade. + The tight money policies were also blamed for producing +a deep recession in 1981 and 1982 that caused major political +problems for Reagan. + Reagan reappointed Volcker to the chairmanship in 1983. + + Greenspan, who heads his own Wall Street consulting firm, +was chairman of President Ford's Council of Economic Advisers +from September 1974 until January 1977. + Greenspan, a Republican, is considered a traditional +conservative economist and has been an adviser to several +presidents. + Reuter + + + + 2-JUN-1987 10:11:04.12 + +belgium + + + + + +RM +f1051reute +u f BC-BELGIAN-PUBLIC-SPENDI 06-02 0106 + +BELGIAN PUBLIC SPENDING DEFICIT FALLS IN MAY + BRUSSELS, June 2 - Belgium's public expenditure deficit +fell sharply to 59.5 billion francs in May from 96.7 billion in +the same month last year, the first major sign of the effects +of the government's public spending curbs, the Budget Ministry +said. + During the first five months of this year, the net +government financing requirement was down by 44.1 billion +francs from year ago levels at 345.8 billion francs, it said in +a statement. + The government is aiming to cut this year's financing +requirement to below 420 billion francs this year from around +560 billion in 1986. + The Ministry said it was expected that more than half the +projected cut should have been achieved by the end of July. + Ministry sources noted that for technical reasons, the +financing requirement is always highest in the early months of +the year. + REUTER + + + + 2-JUN-1987 10:11:37.96 + +switzerland + + + + + +RM +f1055reute +u f BC-CHRISTIANIA-RAISES-AM 06-02 0091 + +CHRISTIANIA RAISES AMOUNT OF GOLD LINKED BOND + ZURICH, June 2 - Norway's Christiania Bank <CHBO.OL> is +increasing the size of its 2-1/2 pct seven year bond issue with +gold call and put warrants to 75 mln Swiss francs from 50 mln, +lead manager Bank Gutzwiller, Kurz, Bungener Ltd said. + The issue is priced at par. + Each 5,000 franc bond carries three 18 month call warrants +with a strike price of 490 dlrs and four three year put +warrants with a strike price of 420 dlrs. + Subscriptions close on June 22 and payment date is July 8. + REUTER + + + + 2-JUN-1987 10:13:22.63 + +usa + + + + + +V RM +f1060reute +b f BC-/U.S.-FACTORY-ORDERS 06-02 0107 + +U.S. FACTORY ORDERS ROSE 0.2 PCT IN APRIL + WASHINGTON, June 2 - New orders for manufactured goods rose +401 mln dlrs, or 0.2 pct, in April to a seasonally adjusted +199.8 billion dlrs, the Commerce Department said. + The slight April gain followed a revised orders increase in +March of 2.6 pct. The department originally reported a March +increase of 2.3 pct. Excluding defense, factory orders fell 0.2 +pct in April after rising 1.1 pct in March. + Orders for durable goods were virtually unchanged in April, +up only 13 mln dlrs to 106.2 billion dlrs. The department had +estimated on May 22 that April durable goods orders rose 0.1 +pct. + The department said defense capital goods orders were up +808 mln dlrs, or 8.1 pct, in April to 10.8 billion dlrs. +Defense orders had risen 43.2 pct in March. + New orders for non-durable goods were up 388 mln dlrs, or +0.4 pct, in April to 93.6 billion dlrs. + These figures compared with a March increase of 4.2 pct in +durables orders and a 0.8 pct rise in non-durables orders. + Orders for non-defense capital goods were up 0.8 pct in +April after rising 2.0 pct in March. + Within major industry categories orders for transportation +equipment fell 7.6 pct in April after rising 10.8 pct in March. + Primary metals gained 5.4 pct in April after a 6.8 pct +March orders increase. + Orders for non-electrical machinery were down 0.9 pct in +April after rising 2.3 pct in March. Electrical machinery +orders rose during April by 19.3 pct after falling in March by +3.4 pct. + Reuter + + + + 2-JUN-1987 10:13:44.37 +gnp +pakistan + + + + + +RM +f1062reute +r f BC-PAKISTAN-SAYS-GOOD-EC 06-02 0107 + +PAKISTAN SAYS GOOD ECONOMIC GROWTH CONTINUES + ISLAMABAD, June 2 - Pakistan says its economy has continued +its recent outstanding performance during the financial year +1986/87 ending on June 30 but areas like balance of payments, +investments and energy were causing concern. + GDP grew in line with the average growth rate since 1980 +and the inflation rate was the lowest since 1969/70, according +to a government economic survey. + The reform of economic regulation had gathered momentum +and there was an impressive performance in a five point +government program for rural uplift, education and poverty +alleviation, said the survey. + Ministry Economic Adviser Qazi Alimullah told a news +conference that before recent unseasonal rains and hailstorms +damaged the wheat crop, GDP growth was calculated at 7.04 pct +compared to 7.25 pct in 1985/86.He said the figure might now +slide down a little to around 6.8 or 6.9 pct. + The survey said monetary expansion was estimated to be nine +pct to date but might rise to around 12 pct by the year-end. + Alimullah said exports rose 18 pct to 3.5 billion dlrs from +2.9 billion dlrs in 1985/86. But the at the same time, home +remittances by Pakistanis abroad dropped to 2.3 billion dlrs +from the 1985/86 level of 2.595 billion. + More exports and an improvement in the balance of payments +situation will be required to overcome this declining trend in +home remittances, he said. + The survey said the trade deficit was expected to fall to +2.4 billion dlrs from three billion dlrs in 1985/86 because of +the boost in exports. + He said national investment continued to be small because +of a poor rate of savings, about 14 pct of GDP. He said more +savings were required to maintain or possibly step up the +present growth rate and to finance the country's seventh +five-year development plan to be launched in July 1988. + REUTER + + + + 2-JUN-1987 10:18:10.62 +money-fxdlr + +greenspan + + + + +V RM +f1077reute +f f BC-******GREENSPAN-SAYS 06-02 0010 + +******GREENSPAN SAYS THERE IS EVIDENCE DOLLAR HAS BOTTOMED OUT +Blah blah blah. + + + + + + 2-JUN-1987 10:20:19.41 +interest + + + + + + +RM +f1084reute +f f BC-BANK-OF-FRANCE-LEAVES 06-02 0013 + +******BANK OF FRANCE LEAVES INTERVENTION RATE UNCHANGED AT 7-3/4 PCT - OFFICIAL +Blah blah blah. + + + + + + 2-JUN-1987 10:21:40.24 +money-fxdlr +usa +greenspan + + + + +V RM +f1090reute +u f BC-/GREENSPAN-SEES-EVIDE 06-02 0060 + +GREENSPAN SEES EVIDENCE DOLLAR FALL OVER + WASHINGTON, June 2 - Newly-nominated Federal Reserve Board +chairman Alan Greenspan said there was evidence the dollar +finally had bottomed out. + In a White House briefing Greenspan was asked by reporters +if he thought the dollar had bottomed out. + "There certainly is evidence in that direction," he replied. + Reuter + + + + 2-JUN-1987 10:22:29.78 +goldsilverplatinum + +volcker + + + + +V RM +f1091reute +f f BC-******U.S.-GOLD,-SILV 06-02 0012 + +******U.S. GOLD, SILVER, PLATINUM SOAR ON VOLCKER REJECTION OF 3RD TERM +Blah blah blah. + + + + + + 2-JUN-1987 10:25:00.56 +cocoa +uk + +icco + + + +C T +f1106reute +b f BC-ICCO-BUYS-5,000-TONNE 06-02 0063 + +ICCO BUYS 5,000 TONNES COCOA FOR BUFFER STOCK + LONDON, June 2 - The International Cocoa Organization +(ICCO) buffer stock manager bought 5,000 tonnes of cocoa today +for the buffer stock, traders said. + The cocoa is believed to have been entirely made up of +second hand material, they added. + Such a purchase would bring cumulative buffer stock +purchases to 26,000 tonnes. + Reuter + + + + 2-JUN-1987 10:27:58.21 + +usa + + + + + +F +f1123reute +u f BC-YANKEE-COS-<YNK>-SEEK 06-02 0063 + +YANKEE COS <YNK> SEEKS DEBT RESTRUCTURING + COHASSET, Mass., June 2 - Yankee Cos Inc said it will be +working with the holders of substantially all of its 12-5/8 pct +senior secured notres due 1996 to develop and overall debt and +asset restructuring program, and as a first step, the +noteholder has agreed to the deferral of the June One interest +payment on the notes until June 30. + Yankee said interest was paid to other noteholders +yesterday. + The company said it plans to meet and work with all +interest parties, including the holders of its three debt +issues and federal banking authorities, over the next several +weeks to formulate and implement a restructuring plan. + Reuter + + + + 2-JUN-1987 10:29:27.94 + +usa + + + + + +F +f1132reute +u f BC-Q-MED-<QEKG.O>-SEES-S 06-02 0106 + +Q-MED <QEKG.O> SEES SHARPLY HIGHER REVENUES + CLARK, N.J., June 2 - Q-Med Inc said preliminary results +show its second quarter, ended May 31, revenues exceeded 4.2 +mln dlrs. A year earlier revenues were nearly 1.4 mln dlrs. + The company also said it had appointed Coopers and Lybrand +as its auditors. Chairman Michael Cox declined any comment on +this appointment. + The company said its preliminary second quarter revenues +are consistent with management's expectations and represent a +greater than 40 pct increase in sales over those reported for +the first quarter. Earnings should show a similar growth +pattern, the company added. + Reuter + + + + 2-JUN-1987 10:29:31.47 +acq +usa + + + + + +F +f1133reute +u f BC-ACME-PRECISION-<ACL> 06-02 0028 + +ACME PRECISION <ACL> BUYOUT BID DROPPED + DETROIT, June 2 - Acme Precision Products Inc said a +management group has withdrawn a six dlr per share leveraged +buyout offer. + Acme said the management group dropped its bid due to +continued weakness in the machine tool industry and in Acme +Precision's operating results and to the inability of the +management group to obtain modifications to terms of its +financing commitment. + It said, "The effect of these factors led the management +group to conclude that the six dlr per share price was +excessive under current conditions." + Reuter + + + + 2-JUN-1987 10:29:53.30 + +usa + + + + + +A RM +f1136reute +r f BC-DOMINION-<D>-UNIT-SEL 06-02 0111 + +DOMINION <D> UNIT SELLS 30-YEAR BONDS + NEW YORK, June 2 - Virginia Electric and Power Co, a unit +of Dominion Resources Inc, is raising 100 mln dlrs via an +offering of first and refunding mortgage bonds due 2017 +yielding 9.89 pct, said sole manager E.F. Hutton and Co Inc. + Hutton led a group that won the bonds in competitive +bidding. It bid them at 99.376, representing a net interest +charge to the company of 9.94 pct. + The underwriter set a 9-7/8 pct coupon and reoffering price +of 99.85 to yield 123 basis points more than comparable +Treasury securities. Non-refundable for five years, the bonds +are rated A-1 by Moody's and A-plus by Standard and Poor's. + The gross spread is four dlrs and the reallowance is 2.50 +dlrs, bookrunner Hutton said of the Virginia Electric deal. + Virginia Electric last visited the domestic debt market in +October 1986 when it sold 100 mln dlrs of same-rated, +same-maturity 9-1/4 pct bonds. That issue was priced to yield +9.27 pct, or 141 basis points over Treasuries. + Reuter + + + + 2-JUN-1987 10:30:02.50 + +usa + + + + + +F +f1137reute +r f BC-GENERAL-SIGNAL-<GSX> 06-02 0073 + +GENERAL SIGNAL <GSX> LOW BIDDER ON RADIO JOB + STAMFORD, Conn., June 2 - General Signal Corp said its +General Railway Signal Co unit is the apparent low bidder at +32.5 mln dlrs on a transit radio system contract for the +Southern California Rapid Transit District in Los Angeles. + The company also said its General Farebox Inc subsidiary +received a 3.1 mln dlr farebox system contract from the Greater +Cleveland Regional Transit Authority. + Reuter + + + + 2-JUN-1987 10:30:24.62 + +usa + + + + + +F +f1141reute +r f BC-WILLIAMS-<WMB>-REINCO 06-02 0034 + +WILLIAMS <WMB> REINCORPORATES IN DELAWARE + TULSA, June 2- Williams Cos said it has been reincorporated +in Delaware as Williams Cos Inc following approval by +shareholders at the annual meeting last month. + Reuter + + + + 2-JUN-1987 10:30:58.70 + +usa + + + + + +A RM +f1142reute +r f BC-NOBLE-AFFILIATES-<NBL 06-02 0112 + +NOBLE AFFILIATES <NBL> SELLS CONVERTIBLE DEBT + NEW YORK, June 2 - Noble Affiliates Inc is raising 100 mln +dlrs via an offering of convertible subordinated debentures due +2012 with a 7-1/4 pct coupon and par pricing, said lead +underwriter Morgan Stanley and Co Inc. + The debentures can be converted into the company's common +stock at 19.625 dlrs per share, representing a premium of 25.6 +pct over the stock price when terms on the debt were set. + Non-callable for three years, the issue is rated Baa-3 by +Moody's and BBB-plus by Standard and Poor's. Noble Affiliates +is also offering 125 mln dlrs of 10-1/8 pct notes due 1997 +through a group led by Morgan Stanley. + Reuter + + + + 2-JUN-1987 10:31:26.20 + +usa + + +nasdaq + + +F +f1146reute +r f BC-MERIDIAN-INSURANCE-<M 06-02 0033 + +MERIDIAN INSURANCE <MIGI.O> IN NASDAQ EXPANSION + INDIANAPOLIS, June 2 - Meridian Insurance Group Inc said +its common stock has been included in the NASDAQ National +Market System, effective today. + Reuter + + + + 2-JUN-1987 10:33:30.27 + +uk + + + + + +RM +f1161reute +b f BC-CANON-SALES-ISSUES-10 06-02 0104 + +CANON SALES ISSUES 100 MLN DLR WARRANT BOND + LONDON, June 2 - Canon Sales Co Inc is issuing a 100 mln +dlr equity warrant bond due June 30, 1992 with an indicated +coupon of 1-5/8 pct and par pricing, lead manager Yamaichi +International (Europe) Ltd said. + The issue is guaranteed by Fuji Bank Ltd and final terms +will be set on June 9. The selling concession is 1-1/2 pct +while management and underwriting combined pays 3/4 pct. The +deal is available in denominations of 5,000 dlrs and will be +listed in Luxembourg. + The warrants are exercisable from July 15, until June 23, +1992. The payment date is June 30. + REUTER + + + + 2-JUN-1987 10:35:06.58 +grainbarley +italy + + + + + +G +f1173reute +d f BC-ITALIAN-BARLEY-CROP-R 06-02 0085 + +ITALIAN BARLEY CROP REPORTED IN GOOD CONDITION + ROME, June 2 - Italy's barley crop is generally in good +condition and harvesting is expected to begin shortly, the +agricultural marketing information and research board Irvam +said. + First consignments were expected to be available around +mid-June. + Excellent weather, characterised by alternating periods of +sunshine and rain, has encouraged growth except in Sardinia, +which was expected to lose a large part of its barley crop +because of extreme dryness. + Irvam said yields are expected higher than last year's low +levels if favourable weather continues in the next few weeks. + Given an average yield of 3.5 tonnes per hectare, national +production would be around two pct higher than in the previous +season at just above 1.6 mln tonnes, it said. + If yields reach the record 3.78 tonnes per hectare achieved +in 1984, production would be around 1.75 mln tonnes, an +increase of 11 pct compared to 1986. + Reuter + + + + 2-JUN-1987 10:35:41.13 + +uk + + + + + +RM +f1176reute +b f BC-ASIAN-DEVELOPMENT-BAN 06-02 0082 + +ASIAN DEVELOPMENT BANK ISSUES 50 MLN STG EUROBOND + LONDON, June 2 - The Asian Development Bank is issuing a 50 +mln stg eurobond due July 1, 1997 paying 9-1/2 pct and priced +at 101-7/8 pct, lead manager County Natwest Capital Markets Ltd +said. + The non-callable bond is available in denominations of +1,000 and 10,000 stg and will be listed in Luxembourg. + The selling concession is 1-3/8 pct while management and +underwriting combined pays 5/8 pct. + Payment date is July 1. + REUTER + + + + 2-JUN-1987 10:38:09.89 + +usa + + + + + +F +f1191reute +r f BC-DATA-GENERAL-<DGN>-OF 06-02 0095 + +DATA GENERAL <DGN> OFFERS NEW NETWORK PRODUCTS + NEW YORK, June 2 - Data General Corp said it introduced +several new hardware and software products that link +International Business Machines Corp <IBM> and IBM-compatible +personal computers into mainframe and minicomputer systems. + Data General said the products include three local area +networks that conform to industry standards. It said it is now +offering a Starlan network, which was originally introduced by +American telephone and Telegraph Co <t>, a thin Ethernet and a +PC interface for the standard Ethernet. + + In addition, Data General said it will offer several +software packages for PC networks, including MS Net, a product +developed by Microsoft Corp <MSFT.O> that allows PCs to share +printers, data files and other peripherals. + The company said it also introduced a PC version of its +popular CEO office automation software. + Data General said the new products allow computer users to +divide work among a collection of PCs and larger computers. + + "Data General is the first vendor to offer three different +local area networks for personal computer integration," said +Colin Crook, senior vice president of the company's +communications systems group. + "We're really giving users freedom of choice with industry +standard products," added J. David Lyons, vice president of +group marketing. + In addition to the new products, which were expected, Data +General announced a joint product development agreement with +<Gold Hill Computers>, a Cambridge, Mass.,-based artificial +intelligence software company. + + The company also announced the formation of a new network +services group that will help customers plan and design +computer networks. + The group will also provide service and maintenance for +Data General and other vendors' equipment, the company said. + Reuter + + + + 2-JUN-1987 10:38:33.20 + +usa + + + + + +F +f1194reute +r f BC-PERPETUAL-SAVINGS-<PA 06-02 0067 + +PERPETUAL SAVINGS <PASB.O> SETS HOLDING COMPANY + ALEXANDRIA, Va., June 2 - Perpetual Savings Bank said its +board has approved formation of a holding company to be +incorporated in Virginia, subject to Federal Home Loan Bank +Board and shareholder approval. + It said its common and prefered shares would be exchanged +on a one-for-one basis for shares of the holding company, +Perpetual Financial corp. + Reuter + + + + 2-JUN-1987 10:39:23.41 +earn +usa + + + + + +F +f1200reute +u f BC-PEP-BOYS---MANNY,-MOE 06-02 0046 + +PEP BOYS - MANNY, MOE AND JACK INC <PBY> 1ST QTR + PHILADELPHIA, June 2 - May Two net + Shr 11 cts vs eight cts + Net 5,895,000 vs 3,896,000 + Sales 127.3 mln vs 110.5 mln + NOTE: Share adjusted for three-for-one stock split payable +July 27 to holders of record July One. + Reuter + + + + 2-JUN-1987 10:40:26.29 +acq +canada + + + + + +E F +f1202reute +r f BC-elders-says-bid-made 06-02 0100 + +ELDERS HAPPY TO LEAVE CARLING SHARES OUTSTANDING + TORONTO, June 2 - Elders IXL Ltd <ELXA.S> says it is happy +to leave preferences shares of brewer Carling O'Keefe Ltd +outstanding after an undisclosed bidder made an offer to +acquire all of Carling's outstanding preferred stock. + Elders, which owns 100 pct of Carling's outstanding common +shares, previously proposed to redeem the 433,745 Carling +series A preferred shares at 33.50 Canadian dlrs each and +redeem the 386,662 series B preferreds at 40 dlrs a share. + The series A and B preferred shares carry no vote while +dividends are paid. + + Elders says neither it nor Carling knows the identity of +the bidder for Carling's preferred shares. + On May 29, the bidder offered to acquire the Carling +preferred for 36 dlrs for each series A and 40.50 dlrs for each +series B share. + Elders said leaving the Carling preferred shares +outstanding will not affect ongoing plans of the company. + Series B preferred shareholders had previously rejected +Carling's proposal to redeem the shares and a series A +preferred shareholders meeting was adjourned to June 12. + Reuter + + + + 2-JUN-1987 10:40:39.77 + +belgium + +ec + + + +C G T +f1203reute +r f BC-EC-FARM-MINISTERS-DIS 06-02 0116 + +EC FARM MINISTERS DISAGREE ON DIRECT INCOME AIDS + GENVAL, Belgium, June 2 - Plans to provide direct income +aids for European Community (EC) small farmers to help them +face deep cuts in guaranteed crop prices received a mixed +reception from EC agriculture ministers, EC officials said. + The plans were discussed at an informal meeting of the +ministers hosted in the village of Genval by the Council of +Ministers' current chairman, Belgium's Paul de Keersmaeker. + The EC Executive Commission has proposed that the richer +member states be allowed to make direct payments to their +farmers in special difficulties, while the EC itself would +finance a similar scheme in the poorer EC countries. + However, EC officials said only the Netherlands and +Luxembourg supported this idea at today's meeting, and France, +Denmark and Belgium showed marked hostility to it. + French minister Francois Guillaume told reporters, "Farmers +should not become recipients of public assistance -- their +survival should be assured by price mechanisms and the market." + The officials said the ministers had not sought to resolve +their more urgent differences over guaranteed farm prices for +1987/88 at this meeting. + The ministers will resume talks on the price fixing issue +in Luxembourg on June 15. + Reuter + + + + 2-JUN-1987 10:44:13.90 + +usa + + + + + +F +f1226reute +d f BC-ONE-OF-TWO-SARA-LEE-< 06-02 0098 + +ONE OF TWO SARA LEE <SLE> STRIKES SETTLED + DEERFIELD, ILL., June 2 - Sara Lee Corp said 500 workers at +its Kitchens of Sara Lee bakery operation in Deerfield, Ill., +have returned to work this week after ratifying a contract. + A company spokesman said members of Local Two of the +Bakery, Confectionery and Tobacco Workers, who had walked out +May 10, reached "mutually agreeable terms" in a new two-year +contract. + Meanwhile, about 100 Teamster drivers and warehouse +employees, whose contract expired May 16, remained out, the +company said. No new talks were scheduled, Sara Lee said. + Details of the new contract were not immediately available, +but a company spokesman said it "maintained benefits and called +for no sacrifices from current employees." + Union sources reported that the contract freezes wages and +introduces a sharply lower starting rate for new hires. They +said it also gives Sara Lee concessions on a workplace issue +involving excused absences. + Reuter + + + + 2-JUN-1987 10:44:26.34 + +usa + + + + + +F +f1228reute +d f BC-CRAY-<CYR>-GETS-3.6-M 06-02 0051 + +CRAY <CYR> GETS 3.6 MLN DLR COMPUTER ORDER + MINNEAPOLIS, June 2 - Cray Research Inc said Aerospatiale, +a French aerospace company, ordered a Cray X-MP/14se computer +system valued at about 3.6 mln dlrs. + It said the leased system will be installed in the fourth +quarter, pending export license approval. + Reuter + + + + 2-JUN-1987 10:48:49.65 + +portugal + + + + + +RM +f1246reute +u f BC-PORTUGAL-CONTRACTS-FO 06-02 0105 + +PORTUGAL CONTRACTS FOR 150 MLN ECU LOAN + LISBON, June 2 - Portugal has contracted a six-year, 150 +mln ECU loan from a group of foreign banks led by Daiwa Europe +Ltd to finance investment projects, the finance ministry said. + Interest of 7.75 pct is to be paid in annual instalments +starting in 1988, ministry spokesman Luis Vilhena de Cunha +said. + The loan will first be in the form of a temporary global +note and be replaced later by subscriptions of 1,000 and 10,000 +ECUs. The issue price was set at 101.75 pct. + Banque Generale du Luxembourg SA will act as listing agent +and fiscal agent, the spokesman added. + REUTER + + + + 2-JUN-1987 10:50:08.18 +carcass +usa + + + + + +C G L +f1251reute +b f BC-CHICKEN-NOT-MAIN-SALM 06-02 0140 + +CHICKEN NOT MAIN SALMONELLA CAUSE, OFFICIAL SAYS + WASHINGTON, June 2 - A representative of the poultry +industry said statistics showed that chicken is less frequently +the cause of salmonella poisoning than beef, dairy products or +salads and other mixed foods. + Kenneth May, President of Holly Farms Poultry Industries +and a director of the National Broiler Council, told a House +Agriculture subcommittee the incidence of salmonella in chicken +has not increased in recent years and that chicken is neither +the major source of the bacterial poisoning nor the cause of an +increase in outbreaks of the disease. + May said the Center for Disease Control figures showed that +between 1978 and 1982, chicken was involved in four pct of all +U.S. salmonellosis outbreaks, while beef accounted for ten pct +of outbreaks and dairy products six pct. + May said the remaining outbreaks were caused by salads and +mixed food, turkey, seafood, pork, eggs and other foods. + May said the chicken industry favored moving away from +bird-by-bird inspection procedures to a risk assessment system +better able to identify microbial and bacterial contamination +of poultry. + However, Ellen Haas, executive director of Public Voice for +Food and Health Policy, said bird-by-bird inspection should be +retained and labels should be attached to each ready-to-cook +chicken to remind consumers about preparation procedures +necessary to avoid illness. + Haas also called for a review of present chicken industry +inspection methods that she said can worsen poultry hazards. + Reuter + + + + 2-JUN-1987 10:51:10.96 +graincorn +usa + + + + + +C G +f1254reute +u f BC-/U.S.-HOUSE-PANEL-VOT 06-02 0110 + +U.S. HOUSE PANEL VOTES TO SPEED UP CORN PAYMENTS + WASHINGTON, June 2 - The House Agriculture Committee voted +to make approximately 2.8 billion dlrs of feedgrains deficiency +payments immediately instead of in the late fall. + A similar measure was decisively defeated on the Senate +floor last week. + The bill, which passed by a voice vote, would allow +so-called Findley payments to be made immediately rather than +late this year. Payments for 1987-90 feedgrains crops would not +be changed. + Because the bill would move 2.8 billion dlrs of spending +into fiscal 1987 from fiscal 1988, the measure is expected to +meet stiff resistance in the full House. + + Reuter + + + + 2-JUN-1987 10:51:16.67 +acq +usa + + + + + +F +f1255reute +u f BC-JONES-AND-VINING-<JNS 06-02 0031 + +JONES AND VINING <JNSV.O> STARTS BID FOR SHARES + BRAINTREE, Mass., June 2 - Jones and Vining Inc said it has +started a tender offer for all of its own shares at five dlrs +per share. + The company said it will hold a special meeting on July 10 +for a vote on approval of a merger at the tender price. + It said the price to be paid in the tender and merger could +be reduced by any fees and expenses the court may award to +counsel for the plaintiffs in the class action suit brought +against it in Delaware Chancery Court by Ronda Inc. The +plaintfiffs' counsel are seeking fees of up to 10 cts per +share, Jones and Vining said. + The company said the court has scheduled a hearing on the +proposed settlement of the suit for July Eight. + The company said the start of the tender offer and the +calling of the special meeting are conditions of the +settlement, and completion of the tender and merger are +conditioned on final approval of the settlement. + Reuter + + + + 2-JUN-1987 10:51:48.40 +acq +usa + + + + + +F +f1258reute +d f BC-HEALTHSOUTH-<HSRC.O> 06-02 0064 + +HEALTHSOUTH <HSRC.O> MAKES ACQUISITION + BIRMINGHAM, Ala., June 2 - HEALTHSOUTH Rehabilitation Corp +said it has acquired Pine Island Sports Medicine Center in Fort +Lauderdale, Fla., and will incorporate the facility into its +HEALTHSOUTH Rehabilitation Center of Fort Lauderdale, which is +now under construction and should be in operation by +mid-summer. + Terms were not disclosed. + Reuter + + + + 2-JUN-1987 10:51:55.69 +acq +usa + + + + + +F +f1259reute +d f BC-BANC-ONE-<ONE>-MAKES 06-02 0033 + +BANC ONE <ONE> MAKES INDIANA ACQUISITION + COLUMBUS, Ohio, June 2 - Banc One Corp said it has +completed the acquisition of First National Bank of +Bloomington, Ind, which has assets of 271 mln dlrs. + Reuter + + + + 2-JUN-1987 10:53:42.76 + +usa + + + + + +F +f1265reute +r f BC-PENTLAND-INDUSTRIES-P 06-02 0062 + +PENTLAND INDUSTRIES PLC HOLDERS APPROVE SPLIT + NEW YORK, June 2 - Pentland Industries PLC said +shareholders at the annual meeting approved an increase in +authorized share capital to 36 mln stg to 12 mln stg by +creation of another 240 mln ordinary shares, allowing for a +three-for-one stock split. + It said dealings in the new shares are expected to start on +June 15. + Reuter + + + + 2-JUN-1987 10:54:40.06 +acq +usa + + + + + +F +f1270reute +d f BC-ORION-BROADCAST-<OBGI 06-02 0079 + +ORION BROADCAST <OBGI.O> BUYS FORD <F> UNIT + DENVER, June 2 - Orion Broadcast Group Inc said its +majority-owned Orion Financial Services Corp subsidiary has +agreed to purchase FN Realty Services Inc from Ford Motor Co +for 1,200,000 to 1,500,000 dlrs in cash and notes. + It said closing is expected within 45 days after receipt of +regulatory approvals. + FN provides loan collection, accounting, data processing +and administrative services to the real estate industry. + Reuter + + + + 2-JUN-1987 10:54:52.48 + +luxembourg + +ec + + + +C G T +f1271reute +r f BC-EC-BUDGET-MINISTERS-S 06-02 0100 + +EC BUDGET MINISTERS SET TO REFUSE PLEA FOR CASH + LUXEMBOURG, June 2 - A plea for extra cash to bail the +European Community (EC) out of its latest financial crisis was +likely to be rejected at a meeting today of EC budget +ministers, diplomats said. + The ministers were meeting for the first time since the EC +Executive Commission unveiled an emergency budget for 1987 +aimed at plugging a deficit caused by soaring farm spending and +falling revenues. + The emergency package includes a demand for member states +to pay an extra 1.5 billion European currency units (Ecus) to +help meet the deficit. + Officials said Britain and West Germany were expected to +lead opposition to contributing any extra cash, with the U.K +insisting instead on a clampdown on runaway farm spending. + The Commission says there will be a shortfall of at least +five billion Ecus this year, more than 1/8 of total spending. + It hopes to make up much of the shortfall in a one-time +accounting exercise by paying member states in arrears rather +than in advance for their spending on Community farm policies. + But if member states do not make up the rest of the gap, +the Commission has warned that spending on regional and social +projects could be slashed by half. + Reuter + + + + 2-JUN-1987 10:55:50.84 + +usa + + + + + +F +f1273reute +h f BC-ORBIT-<ORBT.O>-UNIT-I 06-02 0083 + +ORBIT <ORBT.O> UNIT INCREASES BACKLOG + HAUPPAUGE, N.Y., June 2 - Orbit Instrument Corp said its +unit, Orbit Semiconductor Inc, has received orders totalling +about 2.5 mln dlrs which puts its backlog at a record level of +about 4.7 mln dlrs. + Additionally, the company said it will now offer two Micron +CMOS processes that can withstand Megarad total dose radiation. + Applications for the processes include products +manufactured for military, medical and power industry market, +the company said. + Reuter + + + + 2-JUN-1987 10:57:14.48 + +south-africa + + + + + +C M +f1281reute +u f BC-SOUTH-AFRICA-NAMES-1, 06-02 0100 + +SOUTH AFRICA SAYS 1,500 STILL DETAINEES + CAPE TOWN, June 2 - South Africa said the number of people +it was detaining without trial has dropped to 1,500, far fewer +than previous official figures during the past year of +emergency rule. + A government spokesman said the latest set of names, +presented to parliament, included all current detainees who had +been held for over a month. Previous lists have named up to +8,500 people. + The official figure was supported by civil rights groups +who said many detainees had been freed in recent weeks, +possibly to empty cells for a new government crackdown. + Reuter + + + + 2-JUN-1987 11:02:51.01 + +japan + + + + + +C G T +f1297reute +d f BC-JAPANESE-FARMERS-MARC 06-02 0098 + +JAPANESE FARMERS PROTEST OPENING MARKETS + TOKYO, June 2 - Thousands of farmers gathered in central +Tokyo to urge the government to stand firm against foreign +pressure for further opening up of Japan's markets to foreign +agricultural products, union officials said. + Officials of the Central Union of Agricultural Cooperatives +said about 5,000 representatives from 4,200 farming groups +joined the demonstration. + The organisers said the farmers demanded that the +government should avoid easy compromises on liberalising +agricultural imports at next week's economic summit in Venice. + The United States and the European Community want Japan to +remove tariffs and quotas to help cut their trade deficits with +Japan. + Under a banner reading "The government and parliament must +not sacrifice farmers," the demonstrators adopted a declaration +saying they would fight any unreasonable moves to open Japanese +markets to foreign agricultural products. + An agriculture ministry official said Japan and the United +States were expected to hold talks on Japanese import ceilings +for U.S. Beef and citrus fruit in September. + Reuter + + + + 2-JUN-1987 11:04:44.51 + + + + + + + +RM C G L M T F +f1303reute +b f BC-LONDON-GOLD-1500-FIX 06-02 0008 + +******LONDON GOLD 1500 FIX - JUNE 2 - 455.00 DLRS +Blah blah blah. + + + + + + 2-JUN-1987 11:07:06.07 + +norway +de-clercq +ec + + + +C G L M T +f1316reute +d f BC-FRESH-DEBATE-ON-NORWA 06-02 0091 + +FRESH DEBATE ON NORWAY'S EC MEMBERSHIP WELCOMED + OSLO, June 2 - European Community officials welcomed +Norway's recent move to renew a public debate on Community +membership but said Norway should not expect special trade +advantages as long as it stays outside the EC. + Belgian Willy de Clercq, EC Commissioner on external +affairs and trade policy, said high level talks this week with +Norway's minority Labour government had helped clarify several +misconceptions that led to Norway's narrow rejection of EC +membership in a 1972 referendum. + "But you (Norway) cannot be in the club and remain outside +the club. You can expect equal footing in the club, but not out +of it," de Clercq added, referring to Norway's attempts to adapt +its EC trade ties in the face of Community moves to launch an +internal trade market from 1992. + The government, worried that the internal market will +hamper trade with the EC, which takes about two-thirds of +Norway's exports, last month sent a report to parliament asking +political parties and the public to reassess the country's +relationship to the EC. + Reuter + + + + 2-JUN-1987 11:08:09.27 + + + + + + + +F +f1321reute +f f BC-******GULF-AND-WESTER 06-02 0009 + +******GULF AND WESTERN INC 2ND QTR SHR 86 CTS VS 73 CTS +Blah blah blah. + + + + + + 2-JUN-1987 11:08:48.90 +earn +usa + + + + + +F +f1325reute +u f BC-PHH-GROUP-INC-<PHH>-4 06-02 0057 + +PHH GROUP INC <PHH> 4TH QTR APRIL 30 NET + HUNT VALLEY, Md., June 2 - + Shr 71 cts vs 47 cts + Net 12.1 mln vs 7.8 mln + Revs 369.8 mln vs 307.9 mln + 12 mths + Shr 2.35 dlrs vs 2.33 dlrs + Net 39.5 mln vs 39 mln + Revs 1.36 billion vs 1.24 billion + NOTE: Prior year restated to reflect results from current +year acquisitions. + + Reuter + + + + 2-JUN-1987 11:10:13.59 + +usa +volcker + + + + +V RM +f1330reute +u f AM-VOLCKER-TEXT 06-02 0062 + +VOLCKER IN LETTER DECLINES NEW FED TERM + WASHINGTON, June 2 - Following is the full text of Federal +Reserve Board Chairman Paul Volcker's letter to President +Reagan declining reappointment to the Fed: + Dear Mr. President, + As the end of my term as chairman of the Federal Reserve +Board approaches, you naturally have to consider an appropriate +new appointment. + + In that connection, you will recall that, upon my +reappointment as chairman in 1983, I felt unable to make a firm +commitment to you or to the Congress to remain in office for a +second full four-year term. Despite my reservations at the +time, that term is in fact now almost finished. However, I do +think, after eight years as chairman, a natural time has now +come for me to return to private life as soon as reasonably +convenient and consistent with an orderly transition. +Consequently, I do not desire reappointment as chairman and I +plan to resign as governor when a new chairman is prepared to +assume office. + + I will be leaving with a sense of great appreciation for +your unfailing courtesy to me personally. More broadly, your +consistent support of the work of the Federal Reserve during a +particularly challenging period for it, for the financial +system, and for the economy has been critical to whatever +success we have had. + + Without doubt, strong challenges remain for all of those +involved in economic policy. In that effort, I believe the +nation will continue to be well served by a strong Federal +Reserve System -- a system firmly dedicated to fostering +economic and financial strength and stability and able to bring +to that effort a combination of sound and independent +professional judgement and continuity beyond any partisan +considerations. + + May I add, too, my personal best wishes for the remainder +of your own term in office during which you have done so much +to restore a sense of confidence and self-reliance among the +American people. + Faithfully yours, + Paul A Volcker + Reuter + + + + 2-JUN-1987 11:18:53.04 +money-fx +uk +lawson + + + + +RM +f1373reute +u f BC-LAWSON-CALLS-INTERVEN 06-02 0120 + +LAWSON CALLS INTERVENTION PROOF OF STABILITY GOAL + LONDON, June 2 - The scale of foreign exchange intervention +the Bank of England has carried out recently is clear proof of +Britain's determination to stabilise exchange rates as agreed +between the Group of Seven industrialised countries in Paris in +February, Chancellor of the Exchequer Nigel Lawson said. + Saying he was "content" with sterling's current value, Lawson +told reporters he wanted "to maintain the exchange rate +stability we have all signed up for." He declined to say if he +favoured a rise or a fall from present sterling levels. + May currency reserves, out today, showed a record 4.8 billion +stg rise, pointing to massive currency intervention. + In April, reserves rose a hefty 2.9 billion stg. + Pointing to the reserves data, Lawson said, "We have been +playing a very full part ourselves" in meeting our commitments +toward exchange rate stability as agreed in Paris. + "We wish to see it (stability) continuing," he added. + Asked which techniques were available to preserve +stability, Lawson said both central bank intervention and +interest rate changes could be used to tackle "the market +pressures there are from time to time." + "Interest rate stability is not an objective in that +sense...Rates have to be moved up and down at times," he added. + Lawson said he expected intervention to be "sterilised" by +draining excess sterling liquidity from the market through new +issues of government securities and foreign currency sales, +when the market allowed. + This would limit the inflationary impact of intervention, +he said. + "Sterilisation will be dictated by market tactics...Not +necessarily in the month in which intervention occurs," Lawson +said. "I am confident that we can sterilise on this scale." + REUTER + + + + 2-JUN-1987 11:19:19.10 +money-fxinterest +usa + + + + + +V RM +f1376reute +b f BC-/-FED-NOT-EXPECTED-TO 06-02 0071 + +FED NOT EXPECTED TO TAKE MONEY MARKET ACTION + NEW YORK, June 2 - The Federal Reserve is not expected to +intervene in the government securities market to add or drain +reserves at its usual intervention time this morning, +economists said. + With the Federal funds rate trading comfortably at 6-9/16 +pct, down from yesterday's 6.74 pct average, economists said +the Fed did not need to take reserve management action today. + Reuter + + + + 2-JUN-1987 11:19:50.44 +earn +usa + + + + + +F +f1379reute +b f BC-******GULF-AND-WESTER 06-02 0044 + +GULF AND WESTERN INC <GW> 2ND QTR APRIL 30 NET + NEW YORK, June 2 - + Shr 86 cts vs 73 cts + Net 52.7 mln vs 45.7 mln + Revs 989.9 mln vs 863.9 mln + Six mths + Shr 1.97 dlrs vs 1.28 dlrs + Net 122 mln vs 79.9 mln + Revs 2.078 billion vs 1.726 billion + Reuter + + + + 2-JUN-1987 11:20:12.43 + + + + + + + +F E +f1382reute +b f BC-******ALLEGIS-SAID-IT 06-02 0014 + +******ALLEGIS SAID IT IS CREATING A LIMITED PARTNERSHIP TO SELL SOME CANADIAN HOTELS +Blah blah blah. + + + + + + 2-JUN-1987 11:22:06.08 + + + + + + + +F +f1395reute +b f BC-******BROWN-GROUP-INC 06-02 0008 + +******BROWN GROUP INC 1ST QTR SHR 56 CTS VS 42 CTS +Blah blah blah. + + + + + + 2-JUN-1987 11:22:55.99 + + + + + + + +F E +f1402reute +b f BC-******ALLEGIS-SAID-IT 06-02 0013 + +******ALLEGIS SAID IT SEES PROCEEDS OF 350 MLN CANADIAN DLRS WHEN HOTELS ARE SOLD +Blah blah blah. + + + + + + 2-JUN-1987 11:23:12.29 + + + +icco + + + +T +f1404reute +f f BC-ICCO-BUFFER-STOCK-MAN 06-02 0010 + +******ICCO BUFFER STOCK MANAGER BUYS 5,000 TONNES - OFFICIAL +Blah blah blah. + + + + + + 2-JUN-1987 11:24:34.77 + +switzerland +volckergreenspan + + + + +RM +f1415reute +u f BC-CSFB-ECONOMIST-SAYS-V 06-02 0104 + +CSFB ECONOMIST SAYS VOCLKER'S RESIGNATION A SHOCK + ZURICH, June 2 - The decision by Paul Volcker not to serve +a third term as chairman of the U.S. Federal Reserve Board is a +shock for financial markets and the world economy, Hans Mast, +senior economic adviser to Credit Suisse First Boston, said. + "The markets will believe there will be pressure for a more +expansive policy (in the United States)," he said. + "I would say this is quite a shock for the world economy," he +added. "He always stood for an anti-inflationary policy and +tight fiscal discipline. He was one of the best central bankers +America has had." + Mast said the markets would now be trying to assess what +sort of direction the Fed would be taking under Alan Greenspan, +designated to succeed Volcker. + "Greenspan is more of a politician than an academician, but +the most important thing is that he has little experience in +banking," Mast said. + Greenspan's first comments on being named were that the +dollar appeared to have bottomed out but Mast said that +conviction would have to be backed by policy. "How can you say +the dollar has bottomed out with the present level of current +account deficits?" he said. "I would be sceptical." + REUTER + + + + 2-JUN-1987 11:24:48.49 + +usa +volcker + + + + +A RM +f1417reute +u f BC-SHEARSON-ECONOMIST-SA 06-02 0109 + +SHEARSON ECONOMIST SAYS VOLCKER EFFECT SHORT-TERM + NEW YORK, June 2 - Alan Sinai, chief economist of Shearson +Lehman Brothers Inc, said news that Federal Reserve Chairman +Paul Volcker declined to accept reappointment would have only a +short-term effect on financial markets. + "The markets should not go into a panic," Sinai told a +fixed-income conference in New York sponsored by the Institute +for International Research. + Sinai said he thought that Volcker was one of the best Fed +governors in the country's history. Still, he predicted that +the markets would calm after today's tremors. + Alan Greenspan has been nominated to replace Volcker. + Reuter + + + + 2-JUN-1987 11:25:21.16 + +usa + + + + + +F +f1421reute +r f BC-PERRY-DRUG-STORES-<PD 06-02 0068 + +PERRY DRUG STORES <PDS> NAMES NEW PRESIDENT + PONTIAC, Mich., June 2 - Perry Drug Stores Inc said it has +elected David Schwartz as president and chief executive +officer, effective immediately. + Perry said Schwartz, who will also serve on the board, +replaced Donald Fox, who resigned January 12. + Previously, Schwartz was vice president of drug and general +merchandise for Kroger Co <KR>, Perry said. + Reuter + + + + 2-JUN-1987 11:25:35.88 + +usa + + + + + +F +f1423reute +r f BC-MICRO-D-<MCRD.O>-IN-A 06-02 0088 + +MICRO D <MCRD.O> IN AGREEMENT WITH ZENITH <ZE> + GLENVIEW, ILL., June 2 - Zenith Electronics Corp said its +computer subsidiary signed an agreement under which Micro D Inc +will market the new Zenith Data Systems monitor, which uses the +flat tension mask color video display. + The monitor offers more than 50 pct greater brightness and +contrast performance than conventional high-revolution computer +monitors, Zenith said. It is compatible with the new IBM +Personal System/2 computers and will be available later this +summer. + Reuter + + + + 2-JUN-1987 11:25:47.87 +trade +turkey + + + + + +RM +f1425reute +r f BC-TURKISH-TRADE-DEFICIT 06-02 0083 + +TURKISH TRADE DEFICIT WIDENS IN APRIL + ANKARA, June 2 - Turkey's trade deficit widened to 382 mln +dlrs in April from 275 mln in March and 273 mln in April 1986, +the State Statistics Institute said. + The deficit for the first quarter of 1987 widened to 1.23 +billion dlrs from 1.20 billion a year earlier. + April exports totalled 702 mln dlrs compared with imports +of 1.08 billion. + Exports in the first four months were worth 2.69 billion +dlrs compared with imports of 3.92 billion. + REUTER + + + + 2-JUN-1987 11:25:57.77 +earn +usa + + + + + +F +f1427reute +r f BC-UNITED-FINANCIAL-BANK 06-02 0039 + +UNITED FINANCIAL BANKING <UFBC.O> 1ST QTR NET + VIENNA, Va., June 2 - + Shr four cts vs 21 cts + Net 29,862 vs 152,826 + NOTE: Full name is United Financial Banking Cos Inc. Net +includes loan loss provision nil vs 40,000 dlrs. + Reuter + + + + 2-JUN-1987 11:26:37.03 + +usa + + + + + +F +f1432reute +d f BC-DREYFUS-<DRY>-INTRODU 06-02 0099 + +DREYFUS <DRY> INTRODUCES STOCK INDEX FUND + NEW YORK, June 2 - Dreyfus Corp said it introduced a stock +index mutual fund designed primarily for use by bank trust +departments in managing their corporate pension accounts. + Dreyfus said the fund is keyed to matching the performance +of Standard and Poor's 500 Composite Stock Price Index, and in +addition to purchasing stock of the S and P index, the fund may +also deal in index futures. + The company said the fund will be managed by <Wells Fargo +Investment Advisors>. + Minimum investment requirement is one mln dlrs, the company +said. + Reuter + + + + 2-JUN-1987 11:27:37.15 + +usa +greenspanvolcker + + + + +A RM +f1437reute +u f BC-SEN-DOLE-SAYS-GREENSP 06-02 0113 + +SEN DOLE SAYS GREENSPAN WILL BE GOOD FED CHAIRMAN + WASHINGTON, June 2 - Senate Republican Leader Robert Dole +of Kansas said Alan Greenspan would be a good replacement for +Paul Volcker as Federal Reserve Chairman. + "While Paul Volcker's retirement is a real loss, this +country is very fortunate to have a man of Alan Greenspan's +caliber to take his place," Dole said in a statement. + "Alan's knowledge of the economy, coupled with his +experience at the top levels of government, means that the +leadership of the Federal Reserve Board will be in good hands. +Alan, literally, has some big shoes to fill. But I haven't any +doubts he's more than equal to the task," Dole said. + Reuter + + + + 2-JUN-1987 11:27:45.10 +earn +usa + + + + + +F +f1438reute +u f BC-BROWN-GROUP-INC-<BG> 06-02 0032 + +BROWN GROUP INC <BG> 1ST QTR MAY 2 NET + ST. LOUIS, Junee 2 - + Shr 56 cts vs 42 cts + Net 10,030,000 vs 7,833,000 + Sales 392.1 mln vs 339.6 mln + Avg shrs 17,966,000 vs 18,709,000 + Reuter + + + + 2-JUN-1987 11:28:11.97 +crude +usa + + + + + +C +f1439reute +d f BC-U.S.-ENERGY-SECRETARY 06-02 0141 + +U.S. ENERGY SECRETARY SEES HIGHER OIL PRICES + WASHINGTON, June 2 - Energy Secretary Donald Hodel said he +expects oil prices to rise significantly by the year 2000, +probably to around 33 dlrs a barrel in current dollars. + "I do anticipate a significant increase (by 2000). +Thirty-three dlrs a barrel is not unreasonable," Hodel told the +Senate Energy Committee. + Hodel said the loss of some domestic oil production through +the shutdown of stripper (10 barrels a day or less) wells +because of low prices was probably permanent. He said he was +also concerned by the decline in domestic oil exploration. + Hodel urged Congress to approve oil exploration in section +1002 of the Arctic National Wildlife Refuge in Alaska. He said +geologic condtions in the area were favorable for the discovery +of oil fields equal to those in nearby Prudhoe Bay. + Reuter + + + + 2-JUN-1987 11:28:46.97 + +usa + + + + + +F +f1444reute +s f BC-MUTUAL-OF-OMAHA-INTER 06-02 0024 + +MUTUAL OF OMAHA INTEREST SHARES INC <MUO> PAYOUT + OMAHA, Neb., June 2 - + Qtly div 36 cts vs 36 cts prior + Payable July 1 + Record June 12 + Reuter + + + + 2-JUN-1987 11:29:35.72 +earn +usa + + + + + +F +f1445reute +r f BC-NORTHWEST-TELEPRODUCT 06-02 0043 + +NORTHWEST TELEPRODUCTIONS <NWTL.O> 4TH QTR NET + MINNEAPOLIS, MINN., June 2 - + Shr 15 cts vs 16 cts + Net 239,034 vs 264,485 + Sales 2,932,782 vs 2,664,853 + Year + Shr 57 cts vs 45 cts + Net 929,524 vs 741,121 + Sales 10.9 mln vs 9,708,792 + + Reuter + + + + 2-JUN-1987 11:31:07.63 + + + + + + + +F +f1451reute +b f BC-******U.S.-JUDGE-SAYS 06-02 0014 + +******U.S. JUDGE SAYS TO DECIDE BURLINGTON REQUEST FOR SAMJENS INJUNCTION IN "FEW DAYS" +Blah blah blah. + + + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-019.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-019.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-019.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-019.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2013 @@ + + +18-JUN-1987 18:46:13.14 + +usa + + + + + +F +f4966reute +u f BC-BEVERLY-HILLS-COP-II 06-18 0074 + +BEVERLY HILLS COP II TOPS 100 MLN AT BOX OFFICE + NEW YORK, June 18 - Gulf and Western Inc's <GW> Paramount +Pictures Corp division said its movie "Beverly Hills Cop II" +has topped the 100 mln dlr mark at the box office on the 29th +day of its North American release. + Paramount said the the movie has become the fastest movie +to hit the 100 mln dlr mark with an "R" rating, which means +that anyone under 17 must be accompanied by their parents. + Reuter + + + +18-JUN-1987 18:46:33.73 + +usa + + + + + +F +f4968reute +s f BC-TRANSAMERICA-CORP-<TA 06-18 0022 + +TRANSAMERICA CORP <TA> QUARTERLY DIVIDEND + SAN FRANCISCO, June 18 - + Qtly div 44 cts vs 44 cts + Pay July 31 + Record July 3 + Reuter + + + +18-JUN-1987 18:48:35.56 + +usajapan + + + + + +F A +f4972reute +d f AM-POLICY 06-18 0078 + +U.S. HOUSE CALLS HIGHER JAPAN DEFENSE SPENDING + WASHINGTON, June 18 - The House today supported a call for +Japan to boost its defense spending to help share the burden of +protecting Western interests in sensitive areas around the +world, including in the Gulf. + House member approved a measure that would require +Secretary of State George Shultz to enter into talks with Japan +on increasing Japanese defense spending to at least 3 pct of +its gross national product. + The measure, passed during consideration of the 1988-89 +State Department funding bill would not require an increase, +but legislators called on Japan to spend more on defense. The +Senate must approve the measure before it becomes law. + "We don't have to bash the Japanese. We have to show them +how to share the burden of the defense of the free world," said +Rep. Robert Dornan, a California Republican. + The amendment calls on Shultz to enter into talks with +Japan with the aim of reaching agreement on one of two +alternatives: either Japan can spend 3 pct of its GNP on +defense by itself or give the equivalent amount of money to the +United States as a kind of security fee. + Reuter + + + +18-JUN-1987 18:55:48.68 +gnp + + +oecd + + + +RM +f4988reute +f f BC-OECD-SEES-1.5-PCT-WES 06-18 0010 + +****** OECD SEES 1.5 PCT WEST GERMAN REAL GNP GROWTH IN 1987 + + + + + +18-JUN-1987 18:56:07.09 +gnpcpibop +franceaustralia + +oecd + + + +RM +f4990reute +u f BC-AUSTRALIA-SET-TO-GROW 06-18 0117 + +AUSTRALIA SET TO GROW, BUT UNEMPLOYMENT MAY RISE + PARIS, June 19 - Australia's economy should manage modest +growth over the next two years after a sharp slowdown but +unemployment could still edge upwards, the Organisation for +Economic Cooperation and Development (OECD) said. + The organisation's latest half-yearly report says Gross +Domestic Product will grow by 2.5 pct this year and by 2.75 pct +in 1988 compared with only 1.4 pct in 1986. The growth will be +helped by higher stockbuilding and stronger domestic demand +following tax cuts and higher real wages, it added. + The report forecasts a decline in inflation, with consumer +prices increasing by 8.5 pct this year and 6.25 pct in 1988. + The current account deficit shows signs of easing slightly +and could narrow to 12 billion dlrs by the end of 1988. + While predicting slightly stronger growth than last year, +however, the report revises downwards the OECD's earlier growth +forecast for 1987 of 3.75 pct. + The OECD predicts a similar combination of modest economic +growth and rising unemployment for New Zealand, which is +struggling to recover from a major economic crisis. + The country's GDP, which contracted by 0.6 pct last year, +should again show growth over the next two years, rising by +0.25 pct this year and a more substantial 2.75 pct in 1988. + Reuter + + + +18-JUN-1987 19:03:26.58 +acq +usa + + + + + +F +f4996reute +u f BC-/SQUIBB-<SQB>-SAID-NO 06-18 0104 + +SQUIBB <SQB> SAID NOT INTERESTED IN BUYING CETUS + BY MARJORIE SHAFFER, REUTERS + NEW YORK, June 18 - Robert Fildes, president and chief +executive of Cetus Corp <CTUS.O>, told Reuters that Squibb Corp +is not interested in buying Cetus. + Earlier the companies said Squibb would buy from Cetus a +five pct equity postion in Cetus for about 40 mln dlrs. + "This is not an attempt by Squibb to become a major +majority holder in Cetus," Fildes told Reuters in an interview. +"Squibb has not approached us with any indication that they +want to acquire us and we wouldn't be interested in that kind +of arrangement," said Fildes. + Squibb could not be reached to comment on the late comments +by Fildes. + Squibb is Cetus' first pharmaceutical partner and the only +one to own an equity position in Cetus. Eastman Kodak Co <EK> +and W.R. Grace <WR> both have joint ventures with Cetus, but +neither owns an equity position in the company, said Fildes. + Cetus has a venture with Kodak to develp diagnostic +products and with Grace to develop agricultural products. + Earlier, Squibb and Cetus announced in a joint statement +an agreement in principle to form a joint venture to develop +new biotechnology products in several fields. + + As part of the deal Squibb will license several of Cetus' +anticancer agents, including interleukin-2, in development. +Squibb will sell the drugs only in Japan and other markets but +not in North American and Western Europe. + "We wouldn't have done this deal had it not been understood +that Cetus wants to build its own fully integrated business in +North America and Europe," said Fildes. + He said Squibb was the good partner because Squibb has a +major joint venture in Japan and has sales capabilities of its +own in that market. + + Fildes said Cetus has shunned licensing arrangements with +pharmaceutical companies because it wanted to build its own +business. Many large corporations have invested in small +biotech firms. + But Squibb's investment in Cetus is the first it has made +in biotechnology. Fildes said that was attractive to Cetus +because it wanted a partner that didn't have a relationship +with a large number of other biotechnology companies." + + Fildes said his strategy was to have partners in non drug +areas like diagnostics and agriculture, but to "keep the +biggest developments in anticancer drugs to ourselves." + Fildes said the partnership with Squibb would be used to +broaden the company's reach in such big money making areas +as the cardiovascular, anti-infective and the anti-inflammatory +markets. + Squibb is also investming 75 mln dlrs in Cetus' research +over the next five years. + + "Squibb is putting up over 75 mln dlrs in research and +development to make it happen, while the equity position part +of the package is simply to demonstrate the seriousness of this +partnership," said Fildes. + Reuter + + + +18-JUN-1987 19:44:15.31 + +usa + + + + + +F +f5022reute +b f BC-NBC-SAYS-IT-WILL-IMPL 06-18 0116 + +NBC SAYS IT WILL IMPLEMENT CONTRACT JUNE 29 + NEW YORK, June 29 - The National Broadcasting Co, a unit of +General Electric Co <GE>, said it intends to implement on June +29 a labor contract rejected by union represenatives. + A spokesman for the National Association of Broadcast +Employees and Technicians, represening 2,800 workers, said its +negotiating committee adopted a formal resolution today stating +it will inform NBC it will strike upon implementation. + "The union will have to decide what action it thinks is +appropriate," said Day Krolik, NBC's vice president for labor +relations. A union spokesman said NBC has until the day of +implemetation to peacefully negotiate a contract. + Reuter + + + +18-JUN-1987 19:50:03.10 + +usa + + + + + +F +f5025reute +u f BC-FORMER-SHEARSON-<SHE> 06-18 0099 + +FORMER SHEARSON <SHE> OFFICIAL PLEADS GUILTY + NEW YORK, June 18 - Mark Stahl, 45, who was a former senior +vice president of Shearson Lehman Brothers, until his +suspension on April 16, today admitted in U.S. District court +here, embezzling almost 19 mln dlrs from his firm over the past +year. + He entered a guilty plea before United States District +Court Judge Vincent Broderick to four specific charges totaling +1,031,000 dlrs on wire fraud. + Stahl, who was a senior vice president for finance, told +the judge that the total embezzlement amounted to "a little +less than" 19 mln dlrs. + + Through an attorney, Stahl agreed to make restitution to +Shearson Lehman of all the embezzled funds if possible. However +his guilty pleas today to the four counts will cover all +criminal liability of the embezzlement that occurred between +April 1986 to last April. + Judge Broderick scheduled sentencing for December nine. + Stahl faces a maximum sentence of 20 years in jail and one +mln dlrs in fines, or both. + Reuter + + + +18-JUN-1987 19:53:55.04 +earn +usa + + + + + +F +f5027reute +u f BC-TRI-STAR-PICTURES-INC 06-18 0083 + +TRI-STAR PICTURES INC <TRSP.O> 1ST QTR MAY 31 + NEW YORK, June 18 - + Shr four cts vs four cts + Net 1,180,000 vs 902,000 + Revs 146.9 mln vs 37.0 mln + Avg shrs 33 mln vs 23.9 mln + NOTE: Company changed its fiscal year from December 31 to +the last day of February, thus results of operations for the +year-ago period have been restated to reflect this change. + Current first quarter includes results of operations of +Loews Theatre Management Corp which Tri-Star acquired December +31. + Reuter + + + +18-JUN-1987 20:07:05.93 + + + + + + + +E F RM +f5035reute +f f BC-CANADA-BUDGET-DEFICIT 06-18 0013 + +******CANADA BUDGET DEFICIT DECLINE TO SLOW IN LATE 1980S - +OFFICIAL + Reuter + + + + + +18-JUN-1987 20:07:10.18 + + + + + + + +V RM E +f5036reute +f f BC-CANADA-UPS-CORPORATE 06-18 0014 + +******CANADA LIFTS CORPORATE TAX REVENUES BY FIVE BILLION DLRS +OVER FIVE YEARS - OFFICIAL + + + + + +18-JUN-1987 20:07:45.08 + + +wilson + + + + +E F RM +f5037reute +f f BC-WILSON-CUTS-PERSONAL 06-18 0011 + +******WILSON CUTS PERSONAL TAX RATES, LIMITS CAPITAL GAINS +EXEMPTIONS + Reuter + + + + + +18-JUN-1987 20:08:00.01 + + + + + + + +V RM E +f5038reute +f f BC-CANADA-UPS-FINANCIAL 06-18 0015 + +******CANADA LIFTS FINANCIAL INSTITUTION AVERAGE TAX RATE TO +21.3 PCT FROM 14.5 PCT - OFFICIAL + + + + + +18-JUN-1987 20:12:23.11 + +canada +wilson + + + + +V E RM +f5040reute +u f BC-WILSON-TO-HIKE-CORPOR 06-18 0085 + +CANADA TO INCREASE CORPORATE TAX REVENUES + OTTAWA, June 18 - Canada will increase corporate tax +revenues by about five billion dlrs over the next five years by +broadening the tax base and allowing fewer exemptions, finance +minister Michael Wilson said. + As Wilson previously promised, he said corporations will +bear an increased tax burden, despite new measures to lower +overall tax rates. + Increased corporate revenues will result from broadening +the tax base and eliminating special tax exemptions. + "The jobs of many Canadians depend on a corporate income +tax system that is competitive with other countries, +particularly the United States," Wilson said in a prepared +speech to the House of Commons. + "And it (tax reform) will ensure that profitable +corporations carry a bigger share of the total tax burden," he +added. + Federal tax revenue from corporations will increase by 470 +mln dlrs in the fiscal year ending March 31, 1988, 410 mln dlrs +in fiscal 1989 and 1.19 billion dlrs in fiscal 1990, according +to documents tabled with Wilson's speech. + Reuter + + + +18-JUN-1987 20:15:24.21 + +canada +wilson + + + + +V E RM +f5041reute +u f BC-CANADA-FINANCIAL-TAX 06-18 0074 + +CANADA FINANCIAL TAX RATE INCREASED + OTTAWA, June 18 - The average tax rate for Canadian +financial insitutions will increase to 21.3 pct from 14.5 pct +under the new tax reform package, the federal finance +department said. + The amount of financial institutions' income that is taxed +will also increase to 74.0 pct from 48.7 pct, it said in +documents tabled with finance minister Michael Wilson's +prepared speech to the House of Commons. + Under Wilson's plan, the federal government will collect +1.36 billion dlrs more over the next five years from financial +insitutions, including banks, trust mortgage and life insurance +companies, according to finance department documents. + Financial institutions "are going to complain, but we +believe the changes are appropriate and affordable," said one +finance department official who asked not to be identified. + Ottawa will collect more revenue from financial +institutions by reducing the amount of reserves they can deduct +from taxes, which "will broaden the tax base for this low tax +paying sector," the finance department said. + Among the changes, chartered banks will no longer be able +to use a five-year averaging formula to calculate loan losses +that may be deducted for tax purposes. + Effective June 17, 1987, banks will deduct bad or doubtful +loans during the year they are incurred. + The finance department said the impact of the new +provisions will be cushioned over a period of five years. + The changes are needed to ensure that all financial +companies are taxed fairly under deregulation of the financial +services industry. + "It would be inconsistent for the tax system to continue +to provide different reserves for tax purposes for institutions +competing in the same marketplace," the finance department +said. + Reuter + + + +18-JUN-1987 20:20:39.69 + +canada +wilson + + + + +V E RM +f5048reute +u f BC-OTTAWA-WIDENS-SALES-T 06-18 0089 + +OTTAWA WIDENS SALES TAX, STUDIES REPLACEMENT + OTTAWA, June 18 - Canada will broaden a federal sales tax +levied on manufacturers before scrapping the system in favor of +a broad based, multi-staged sales tax, finance minister Michael +Wilson said. + As expected, Wilson did not include a new sales tax system +as part of his wide-ranging tax reforms tabled in the House of +Commons today. + Instead, the federal government will make interim changes +to the existing sales tax to make it more fair for low and +middle income Canadians. + "The present (sales) tax is fundamentally flawed. It is a +hidden, arbitrary and capricious tax," Wilson told the House of +Commons. + The existing federal sales tax system hurts the Canadian +economy by putting more tax on Canadian produced goods than +imported goods and adding a hidden tax on Canadian exports that +makes them less competitive, Wilson said. + Interim changes effective January 1, 1988 will include: + -- applying the federal sales tax to marketing companies +related to manufacturers + -- levying the tax at the wholesale level instead of the +manufacturer for a selected range of products + -- applying a 10 pct sales tax to telecommunication +services, except for residential telephone lines + -- quicker collection of federal sales taxes. + To offset these changes for low income Canadians, +refundable tax credits will be increased to 70 dlrs from 50 +dlrs for adults and to 35 dlrs from 25 dlrs for children, the +finance department said. + Ottawa is considering three alternative forms for a new +sales tax, including a goods and services tax, a value added +tax and a national sales tax that would combine existing +federal and provincial levies into one system, Wilson told the +House of Commons. + He said the federal government will explore the +possibility of one national sales tax with Canada's 10 +provincial governments. All provinces except Albeta now levy a +provincial sales of tax of varying amounts. + Wilson said one joint system would be simpler for +taxpayers and maximize economic benefits of tax reform. + If Ottawa and the provinces can't agree on a national +sales tax system, Wilson said the federal government will +consider either a goods and services tax or a value-added tax. + A goods and services tax would apply at one rate to +virtually all goods and services in Canada and would include +further increases in refundable tax credits for low and middle +income Canadians, the finance department said in documents +accompanying Wilson's speech. + A federal value-added tax, similar to European tax +systems, would also be broad based but would allow more +flexibility to exempt selected goods and services, the +department said. The finance deparment said the main drawback +of a value added tax is that it would be more complex and +costly to implement than the other two proposals. + Reuter + + + +18-JUN-1987 20:28:39.01 +gnp +canada +wilson + + + + +V E RM +f5055reute +u f BC-CANADIAN-BUDGET-DEFIC 06-18 0088 + +FALL IN CANADIAN BUDGET DEFICIT TO SLOW + OTTAWA, June 18 - Finance Minister Michael Wilson said tax +reform will not affect his determination to reign in +expenditures, but his forecasts show a slowing of the decline +in the budget deficit in the late 1980s. + "Responsible tax reform must be fiscally responsible," +Wilson said in a speech prepared for the House of Commons. + Wilson estimated the deficit will fall to 29.3 billion dlrs +in the year ending March 31, 1988, the same level as he +forecast in the February budget. + And in the year ended this past March, the deficit was +expected to have been one billion dlrs lower than the 32 +billion dlr shortfall originally forecast, Wilson said. + Wilson said in the current 1988 fiscal year +higher-than-anticipated spending, particularly in farm income +support programs, will be offset by higher-than-anticipated +revenues. + But finance department documents show the pace of deficit +reduction was expected to slow temporarily in fiscal 1989 and +1990 as a result of lower oil and grain prices and the +transition to the reformed taxation system. + The deficit is expected to total 28.9 billion dlrs in +fiscal 1989 and 28.6 billion dlrs in 1989 and then fall to 26.1 +billion dlrs in 1991. + Wilson was optimistic about the outlook for the Canadian +economy, forcasting gross domestic product would expand 2.8 pct +this year and 3.0 pct in 1988. In 1986 the economy grew by an +actual 3.1 pct. + Inflation, meanwhile, is expected to stabilize at around +the current four pct level over the next two years. + Reuter + + + +18-JUN-1987 20:33:47.78 + +canada +wilson + + + + +V E RM +f5060reute +u f BC-CANADA'S-WILSON-SETS 06-18 0106 + +CANADA'S WILSON SETS NEW PREFERRED SHARE TAX + OTTAWA, June 18 - Finance Minister Michael Wilson tabled a +ways and means motion to immediately impose a special tax on +preferred share dividends to eliminate a significant loss of +corporate tax revenue. + Under the motion, which is used to introduce most financial +tax changes, dividends on all preferred shares issued after +June 18 will be taxable. + The issuing corporation will be able to choose between two +forms of tax, one that imposes a 25 pct tax on dividends with a +subsequent additional 10 pct tax paid by the shareholder, and +one that imposes a flat 40 pct tax on dividends. + "Measures to reduce the tax advantages of after-tax +financing arrangements using preferred shares are a critical +step in achieving the broadened corporate tax base required to +fund personal income tax reductions," Wilson explained. + The minister said many profitable corporations, using +various deductions built up over the years, pay no taxes, +although they are in a position to pay dividends out of their +profits. + Reuter + + + +18-JUN-1987 20:35:36.77 + +canada +wilson + + + + +V E RM +f5063reute +u f BC-CANADA-SETS-WIDE-RANG 06-18 0089 + +CANADA SETS WIDE-RANGING PERSONAL TAX CHANGES + OTTAWA, June 18 - Finance Minister Michael Wilson unveiled +a wide-ranging reform of the personal tax system that includes +limiting the capital gains exemption and a sharp cut in the +dividend tax credit. + With most changes effective at the first of next year, +Wilson also announced he was cutting the number of tax brackets +from 10 to three. + He said the changes will cut personal tax revenues by two +billion dlrs in 1988 and by more than 11 billion dlrs over the +next five years. + "Most Canadians will pay lower taxes because of two +far-reaching changes. A new structure of federal income tax +rates and the conversion of exemptions and deductions to tax +credits," Wilson told the House of Commons. + The new tax brackets will be 17 pct on the first 27,500 +dlrs of taxable income, 26 pct on the next 27,500 dlrs and 29 +pct on taxable income in excess of 55,000 dlrs. The maximum tax +rate is 34 pct under the current system. + In a major reversal of his own initiative, Wilson said the +controversial 500,000 dlrs capital gains exemption will be +reduced to 100,000 dlrs over an investors' lifetime. + Wilson introduced the exemption shortly after taking office +in 1984 as a a way of stimulating investment, but it was +sharply criticized by the opposition as over-generous to +wealthy investors. + The 500,000 dlr lifetime exemption will be kept on the +sale of farm land and for small businesess, however. + Also, the taxable portion of a capital gain will increase +from 50 pct currently to 66-2/3 pct in 1988 and 75 pct in 1990. + The dividend tax credit will be reduced from 33-1/3 pct to +25 pct and the deduction for up to 1,000 dlrs of interest and +dividend income will be eliminated in 1988. + Wilson said tax treatment for registered retirement savings +plan contributions will be maintained but the phase in of the +increase in the maximum limit to 15,500 dlrs will be delayed +four years to 1994. + Reuter + + + +18-JUN-1987 20:48:32.87 +interest + + + + + + +RM +f5072reute +f f BC-ANZ-BANKING-GROUP-SAY 06-18 0014 + +******ANZ BANKING GROUP SAYS IT WILL CUT PRIME RATE TO 16.00 +PCT FROM 16.50 ON JUNE 22 + + + + + +18-JUN-1987 21:07:33.30 +money-fxdlr + +miyazawa + + + + +RM AI +f5083reute +f f BC-Japan-still-asking-in 06-18 0013 + +******Japan still asking institutions to limit speculative dlr +deals - Miyazawa + + + + + +18-JUN-1987 21:09:30.49 +interest +australia + + + + + +RM AI +f5084reute +b f BC-ANZ-BANKING-GROUP-CUT 06-18 0092 + +ANZ BANKING GROUP CUTS PRIME RATE TO 16.00 PCT + MELBOURNE, June 19 - The Australia and New Zealand Banking +Group Ltd <ANZA.S> said it will cut its prime rate to 16.00 pct +from 16.50, effective June 22. + The cut takes the ANZ's prime to the lower end of the range +of prime rates being offered by Australian trading banks. The +highest rate is 17.50 pct. + The cut follows announcements of cuts yesterday by +<Citibank Ltd> to 16.00 pct from 16.5, effective today, and +<Commonwealth Bank of Australia> to 15.75 pct from 16.25, +effective June 24. + REUTER + + + +18-JUN-1987 21:15:11.47 +money-fxdlr +japan +miyazawa + + + + +RM AI +f5087reute +b f BC-JAPAN-STILL-WANTS-SPE 06-18 0069 + +JAPAN STILL WANTS SPECULATIVE DLR DEALS LIMITED + TOKYO, June 19 - The Finance Ministry is still asking +financial institutions to limit speculative dollar dealings, +Finance Minister Kiichi Miyazawa told reporters. + He was responding to rumours in the New York currency +market overnight that the Ministry was reducing its pressure on +institutions to refrain from excessively speculative dollar +dealings. + REUTER + + + +18-JUN-1987 21:32:28.55 + +india +gandhi + + + + +RM V +f5094reute +u f BC-GANDHI-PARTY-BADLY-DE 06-18 0108 + +GANDHI PARTY BADLY DEFEATED IN INDIA STATE POLL + NEW DELHI, June 19 - Prime Minister Rajiv Gandhi's Congress +(I) party was swept from power in the northern state of Haryana +by an opposition landslide. + The loss was a major personal setback for Gandhi whose +vote-winning ability was on trial after political scandals in +Delhi and a string of electoral losses since he took command of +the party in 1984. + With 53 results in for Haryana's 90-seat assembly, Congress +had won only two seats against 63 previously. Before the poll, +Congress politicians in Delhi said privately that a loss in +Haryana could open a party leadership debate. + REUTER + + + +18-JUN-1987 21:34:55.99 + +south-korea + + + + + +RM V +f5096reute +u f BC-SOUTH-KOREA-THREATENS 06-18 0107 + +SOUTH KOREA THREATENS EMERGENCY MEASURES + SEOUL, June 19 - The government will take emergency +measures if the present wave of violent protest demonstrations +continues, state radio said. + The radio, which did not specify the measures, said the +decision was taken today at a meeting of top ministers and +security officials attended by Prime Minister Lee Han-key. It +said a special statement would be made shortly. + Thousands of demonstrators took to the streets of Seoul and +other cities yesterday, battling riot police and demanding the +resignation of President Chun Doo Hwan. It was the ninth +successive day of violent protests. + REUTER + + + +18-JUN-1987 21:56:40.46 + +usa + + + + + +F +f5107reute +r f BC-COURT-ORDERS-INT'L-ME 06-18 0107 + +COURT ORDERS INT'L MEDICAL INSURER TO SHOW CAUSE + TALLAHASSEE, Fla., June 18 - A Circuit Court judge ordered +the company that insured the solvency of International Medical +Centres Inc to show cause why it should not honour its contract +with International, according to Florida's Department of +Insurance, which had filed a petition on the matter. + As previously reported, International, the largest health +maintenance organisation in Florida was declared insolvent on +May 14. Federal regulators had also told the company its +Medicare contract would be terminated on July 31 because of the +company's financial and management problems. + Michelle McLawhorn, Florida Department spokeswoman, said +International's insurer, State Mutual Life Assurance Co of +America, had made clear it would fight activation of the policy +because International did not provide it with accurate +financial records. State Mutual could not be reached for +comment. + McLawhorn said it was not yet known how many creditors +International had or how big its debt was. The court gave State +Mutual 20 days to show why it should not be obliged to pay +claims against the solvency policy. + REUTER + + + +18-JUN-1987 22:26:37.58 + +brazil +sarney + + + + +RM AI +f5137reute +u f BC-BRAZIL-RULING-PARTY-T 06-18 0101 + +BRAZIL RULING PARTY TO DECIDE ON PRESIDENTIAL TERM + BRASILIA, June 18 - The ruling Brazilian Democratic +Movement Party (PMDB) will hold a national convention on July +18 and 19 to discuss the length of the Presidential term, a +PMDB spokesman said. + Although the country's constitution allows for a six-year +term, Sarney said he would remain only five years after he came +to power in 1984. + The Constituent Assembly is drawing up a new constitution +and severe economic problems have increased the pressure on it +to call early elections. A faction of the PMDB favours a poll +in November next year. + REUTER + + + +18-JUN-1987 22:33:01.85 +money-supplymoney-fxdlr +usa + + + + + +RM AI +f5141reute +u f BC-FED-DATA-SUGGEST-NO-C 06-18 0086 + +FED DATA SUGGEST NO CHANGE IN MONETARY POLICY + By Kathleen Hays, Reuters + NEW YORK, June 18 - New U.S. Banking data suggest the +Federal Reserve is guiding monetary policy along a steady path +and is not signalling any imminent change of course, economists +said. + But they also said that if money supply growth remains +weak, as this week's unexpected eight billion dlr M-1 decline +suggests it may, this could influence the Fed to loosen its +credit reins and move toward a more accommodative monetary +policy. + A Reuter survey of 17 money market economists produced a +forecast of a 600 mln dlr M-1 decline for the week ended June +8, with estimates ranging from a gain of one billion dlrs to a +decline of four billion. Instead, M-1 fell eight billion dlrs +to 745.7 billion dlrs at a seasonally adjusted annual rate. + Coming on the heels of a 4.3 billion decrease in M-1 for +the week ended June 1, this means the nation's money supply has +fallen more than 12 billion dlrs in the past two weeks, +economists said. + "M-1 has hit an air pocket of weakness," said Bill Sullivan +of Dean Witter Reynolds Inc. + While M-1 may have lost its significance as an indicator of +economic growth, Sullivan said Fed officials might be concerned +the latest drop in M-1 means another month of sluggish growth +in the broader monetary aggregates, M-2 and M-3, which are seen +as better gauges of economic growth. + Latest monthly M-2 and M-3 data showed that as of May, both +measures were growing at rates below the bottom of the Fed's +5-1/2 to 8-1/2 pct target ranges. + If money growth does not accelerate, Fed officials, +concerned that this indicates economic growth is flagging, +could turn toward easier monetary policy, economists said. + "Does this mean that the Fed abandons its current open +market position? No," Sullivan said. "But does this mean the end +of tightening for the time being? Definitely yes." + Economists said average adjusted discount window borrowings +of 385 mln dlrs for the latest two-week bank statement period +were lower than they had expected. Most believed the Fed had +targetted a two-week borrowings average of around 500 mln dlrs. + But they said that if it had not been for a large one-day +net miss in the Fed's reserve projections, the higher +borrowings target would probably have been reached. + A drop in May U.S. Housing starts and continued weakness in +auto sales show key sectors of the U.S. Economy are lagging, +while a recent modest 0.3 pct gain in May producer prices has +helped dispel inflation fears, Slifer said. + "If this continues, we can entertain the notion of Fed +easing at some point," he said. + Other economists said the Fed would probably pay little +attention to weak money supply growth. "It has been a number of +years since M-1 has given good signs of what's going on in the +economy," one said. "I don't think M-1 shows that the economy is +falling apart and the Fed should ease." + Economists agreed a stable dollar will continue to be a +prerequisite for any move by the Fed toward easier monetary +policy. + They said the Fed is reluctant to lower short-term rates +for fear this would spur expectations of a weaker dollar and +higher inflation which would push up long-term yields and choke +off econmomic growth. + But Sullivan said the dollar has been steady since late +April. "The Fed has to determine if this represents a +fundamental change for the dollar. If it does, then this gives +them more room to ease," he said. + REUTER + + + +18-JUN-1987 22:34:58.79 +earn +usa + + + + + +F +f5142reute +b f BC-NATIONAL-SEMICONDUCTO 06-18 0067 + +NATIONAL SEMICONDUCTOR CORP <NSM> FOURTH QUARTER + SANTA CLARA, Calif., June 18 - + Shr profit six cents vs loss 10 + Net profit 8.1 mln dlrs vs loss 7.1 mln + Sales 511.9 mln vs 397.8 mln + Avg shrs 97.0 mln vs 90.5 mln + YEAR + Shr loss 38 cents vs loss 1.10 dlrs + Net loss 24.6 mln dlrs vs loss 91.5 mln + Sales 1.87 billion vs 1.48 billion + Avg shrs 91.7 mln vs 89.8 mln + NOTE - Current year figure includes previously announced 15 +mln dlr restructuring charge. + Figures include extraordinary credit from tax benefit of +4.2 mln dlrs in quarter vs 2.3 mln a year earlier and 4.2 mln +for year vs 5.6 mln year earlier. + The 1986 year net reflects 51.2 mln dlr gain from +cumulative effect of accounting change. + REUTER + + + +18-JUN-1987 23:12:09.91 + +usa + + + + + +F +f5168reute +u f BC-NATIONAL-SEMICONDUCTO 06-18 0104 + +NATIONAL SEMICONDUCTOR <NSM> SEES IMPROVED YEAR + SANTA CLARA, Calif., June 18 - National SemiConductor Corp, +which earlier reported a profitable fiscal fourth quarter after +a year ago loss, said it expects improved financial performance +during its new fiscal year. + The company reported a profit of 8.1 mln dlrs in the +quarter ended May 31, after a loss of 7.1 mln dlrs in the year +ago period. + The company said orders for its core businesses have +improved, adding "Our strong balance sheet and the improved +business environment should enable us to improve our financial +performance during our new fiscal year." + The company said that during the fourth quarter both its +semiconductor group and its information systems group had +higher sales and improved operating performance than in the +prior quarter and the year-earlier quarter. + REUTER + + + +18-JUN-1987 23:19:19.77 + +usa + + + + + +RM AI +f5172reute +u f BC-OKLAHOMA-THRIFT-PLACE 06-18 0117 + +OKLAHOMA THRIFT PLACED UNDER RECEIVERSHIP + WASHINGTON, June 18 - The Federal Home Loan Bank Board +(FHLBB) today placed <Investors Federal Bank> of El Reno, +Oklahoma under receivership and transferred its 97.8 mln dlrs +in assets to the <Investors Savings and Loan Association>. + An FHLBB statement said the thrift was insolvent and "had +substantially dissipated its assets," mainly by participating in +large commercial real estate developments. It said it violated +federal laws and regulations on loan documentation, loans to +directors and conflict of interest. The sucessor organisation +is a federal savings and loan to be managed under contract by +Sunwood Management Corp of Parker, Colorado. + REUTER + + + +18-JUN-1987 23:26:43.72 + +japanusa + + + + + +F +f5175reute +u f BC-MITSUBISHI-ELECTRIC-T 06-18 0114 + +MITSUBISHI ELECTRIC TO ASSEMBLE PC'S IN U.S. + TOKYO, June 19 - Mitsubishi Electric Corp <MIET.T> plans to +assemble personal computers in the U.S. To counteract the +imposition of a 100 pct import tax in April and a drop in +profits due to the yen's appreciation against the dollar, a +company spokesman told Reuters. + It will assemble 16-bit MP-286 and 32-bit MP-386 desk-top +computers at its wholly-owned computer and computer-related +equipment sales unit <Mitsubishi Electronics America Inc> in +Torrance, California at a rate if 10,000 a month, he said. This +will include 2,000 TO 3,000 to be sold in the U.S. Under the +Mitsubishi name, he said without giving more details. + REUTER + + + +18-JUN-1987 23:30:02.35 +trade +usasingaporebruneiindonesiamalaysiaphilippinesthailand + + + + + +RM V +f5177reute +u f BC-SHULTZ-WARNS-ASEAN-OF 06-18 0100 + +SHULTZ WARNS ASEAN OF LOOMING TRADE PROBLEM + SINGAPORE, June 19 - U.S. Secretary of State George Shultz +warned members of the Association of Southeast Asian Nations +(ASEAN) they could no longer rely on increased exports to the +U.S. For growth. + "Given the importance of exports, particularly export +manufactures, to all of your countries, you are going to have +to work hard to diversify your markets," he said. + "While you may be able to maintain your current market share +in the U.S., You clearly will not be able to look to the U.S. +To take major increases in your exports," he added. + Shultz told the foreign ministers of Brunei, Indonesia, +Malaysia, the Philippines, Singapore and Thailand the U.S. +Would cut its huge foreign trade deficit more rapidly than many +now believed. + He said ASEAN's looming trade problems would not +necessarily stem from protectionist legislation now being +contemplated by Congress, "but simply because of the adjustments +the U.S. Economy will have to make in order to service our +large and growing external debt." + Shultz said the U.S. Deficit had resulted not from falling +exports but from higher imports that had fuelled world growth. + REUTER + + + +18-JUN-1987 23:52:30.35 + +australia +keatinghawke + + + + +RM AI +f5192reute +u f BC-AUSTRALIA'S-OPPOSITIO 06-18 0107 + +AUSTRALIA'S OPPOSITION FACES SETBACK ON TAX PLAN + By Francis Daniel, Reuters + SYDNEY, June 19 - The conservative opposition, already +fighting an uphill election battle, now faces controversy in +its own ranks over a possible error in its major tax cutting +program, economists said. + Professor Michael Porter, architect of the tax plan, +declined to refute Treasurer Paul Keating's charge that the +opposition miscalculated tax and expenditure cuts by several +billion dollars. Economists said the opposition, trailing +behind Labour in opinion polls, would find its chances further +diminished if its tax policy was a miscalculation. + The tax plan, unveiled by opposition leader John Howard +last week, is the cornerstone of the Liberal Party's economic +strategy to oust the Labour Party in the July 11 poll. + Keating has said the Howard tax plan would sharply increase +the budget deficit to more than nine billion dlrs and severely +damage Australia's economy, already overburdened with balance +of payments and foreign debt problems. + In his mini-budget on May 13, Keating said the budget +deficit for the year ending June 1988 would be between two and +three billion dlrs. + Porter, a key member of the opposition economic think tank, +said he played a leading role in formulating the tax plan but +not Howard's proposed expenditure savings, which Keating +claimed were distorted through double counting. + Some opposition members said there appeared to be errors, +but a Liberal Party spokesman refused comment, saying the +package was being reexamined. + "The whole thing is so deceitful," Prime Minister Bob Hawke +said in a radio interview. "Howard has made a mess of it. If +they can't govern themselves, how can they expect to govern the +country?" + Hawke, who is seeking a third term, said the opposition had +made the election one of the easiest for him. + "I've never felt more physically and mentally relaxed +(during an election). We've no problems at all," he said. + The latest public opinion poll, published in the Melbourne +Sun newspaper, showed Labour was leading the opposition by 12 +points, indicating a 66-seat majority for Hawke in parliament. + The Election Commission announced last night that 613 +candidates would contest the 148-seat House of Representatives, +while 255 candidates would fight for the 76 Senate seats. + REUTER + + + +18-JUN-1987 23:58:21.89 + +japan + + + + + +F +f0001reute +u f BC-FUJITSU,-FUJIAN-PROVI 06-18 0108 + +FUJITSU, FUJIAN PROVINCE FORM JOINT VENTURE + TOKYO, June 19 - Fujitsu Ltd <ITSU.T> said it signed a +joint venture agreement with the Post and Telecommunication +Administration Bureau of Fujian Province (PTABF), China to +develop and sell software for the Fujitsu-designed digital +telephone switching machine FETEX-150. + It said in a statement the joint company, <Fujian Fujitsu +Communications Software Ltd> located in Fuzhou city, was +capitalised at about 10 mln yuan and was owned 51 pct by PTABF +and 49 pct by Fujitsu. + It would create about 20 local jobs and has a target of +annual software sales of 330 mln yen in 1992, Fujitsu said. + REUTER + + + +18-JUN-1987 23:59:08.26 + +japan + + + + + +F +f0002reute +u f BC-MITSUI,-ALLIANCE-IN-F 06-18 0116 + +MITSUI, ALLIANCE IN FUND MANAGEMENT TIE-UP + TOKYO, June 19 - <Mitsui Investment Management Co Ltd> +(MIMCL) and <Alliance Capital Management International Inc> +(ACMII) will sign an agreement late this month to cooperate in +international fund management, a ACMII spokesman said. + MIMCL, 55-pct controlled by affiliated companies of Mitsui +Bank Ltd <MIBT.T>, will reconsign some of its foreign +securities investment orders to ACMII, he told Reuters. + ACMII, the London-based 100 pct-owned subsidiary of +<Alliance Capital Management Corp> of New York, will reconsign +some of its foreign orders to MIMCL and instruct MIMCL in +international fund management techniques, the spokesman said. + Both firms were among 56 investment advisory companies +granted Japanese government approval for discretionary fund +management on June 10, the Mitsui spokesman said. + Alliance Capital Management Corp is the world's biggest +firm devoted exclusively to fund management and has 35 billion +dlrs in funds, he said. + Mitsui Investment Co Ltd, established two years ago, +controls about 800 mln dlrs, 80 pct of which is invested in +Japanese equities. + REUTER + + + +19-JUN-1987 00:05:03.32 +alum +indonesia + + + + + +F M C +f0006reute +u f BC-INDONESIA-RAISES-STAK 06-19 0107 + +INDONESIA RAISES STAKE IN ALUMINIUM PLANT + JAKARTA, June 19 - Indonesia has increased its share in a +434-billion-yen aluminium smelter joint venture with Japan from +25 to 37 pct, Asahan Project Authority director A.R. Suhud +said. + The Japanese Export-Import Bank said Indonesia had raised +its share of (P.T. Indonesia Asahan Aluminium) company, +capitalised in 1975 at 91 billion, by swapping 32 billion yen +in government loans to the company for an equity stake. + The Japanese shareholders, the Overseas Economic +Cooperation Fund and 12 companies, are to invest another 24 +billion yen raising capitalisation to 147 billion yen. + Asahan reported total losses of 97.6 billion rupiah between +1982 and 1985. Suhud said much of the company's 320 billion yen +debt had been caused by falling tin prices and the appreciation +of the yen against the U.S. Dollar. Aluminium is sold in +dollars. + Prices improved from 1,150 dlrs a tonne six months ago to +about 1,450 dlrs today. The plant is supposed to break even if +prices stay at 1,500 dlrs a tonne. + Sahud said the plant, with a capacity of 220,000 tonnes a +year, would probably lose money again in 1987. The plant, +situated in North Sumatra, produces mostly for Japan. + REUTER + + + +19-JUN-1987 00:12:36.11 + +philippines + + + + + +F +f0010reute +u f BC-PHILIPPINE-STOCKS-SOA 06-19 0094 + +PHILIPPINE STOCKS SOAR TO NEW HIGHS, RECORD VOLUME + By Greg Hutchinson, Reuters + MANILA, June 19 - Investors on Philippine stock markets +have shrugged off growing communist activity in the cities to +push share prices to all-time highs on record turnover, brokers +said. + Regularly heavy trading of more than one billion shares a +day has sent the Manila exchange's composite index soaring to +775.9 from 577.2 points in just over three weeks. + Brokers described recent trading as "frantic" and "hectic" as +trading records were smashed day after day. + A total 2.6 billion shares worth 259.4 million pesos +changed hands on the main Manila and the less important Makati +exchanges yesterday, with much of the activity among centavo +priced stocks, brokers said. The turnover was more than double +the record of 1.1 billion shares worth 118.1 million pesos set +on Wednesday. + Brokers said rising gold prices caused mining shares to +shoot up three weeks ago, and other sectors followed. Share +prices continued their rise even when the gold price fell back +to 450 dlrs an ounce, due to rising confidence in President +Corazon Aquino's handling of the economy, they said. + Brokers said Aquino's handling of the 18-year-old communist +insurgency and the maintenance of relatively low interest rates +also contributed to the rise. + Blue chip stocks, such as those of San Miguel Corp and +Philippine Long Distance Telephone Co (PLDT), have risen 25 pct +in three weeks, and the trend is upward in the medium term +although a temporary correction is overdue, they said. + Since the surge began on May 26, Manila's Mining index has +risen to 5,700.4 points from 4,042.4, its commercial and +industrial index has shot up to 881.0 from 694.9 points, and +the oils indicator has increased to 4.1 from 2.9 points. + Market activity has been rising in spurts since Ferdinand +Marcos was replaced by Aquino 16 months ago. + One broker said he thought the Philippine stock market "may +at last have come of age." + Wilson Sy, president of Prudential Securities, a local +stockbroking firm with Hong Kong affiliations, told Reuters, +"Barring any unforeseen political events you can bet on the +Philippine market. It has shrugged off the communist inroads +into Manila." + Assassins have killed 52 policemen, soldiers and security +guards in the capital this year. + Communist hitmen known as sparrows have claimed they killed +22 of them. + Sy said Philippine stocks were undervalued in world terms +with price-earnings ratios often half those in Hong Kong and +one-sixth those in Japan. He said PLDT, which is also U.S. +Listed, has a price-earnings ratio of about nine. + Sy predicted Manila's composite index would rise beyond +1,000 points from its current 775.9 mark by year-end. + Other brokers were more cautious, saying Aquino had to +improve peace and order before investors could treat the +Philippines as they would Hong Kong or Tokyo. + One broker said he believed about 30 pct of the money going +into stocks was now foreign, much of it from fund managers and +their agents based in Hong Kong and New York. + Manila Stock Exchange chairman Robert Coyuito told Reuters, +"If the peace and order situation really improved the market +could move beyond a price-earnings ratio of 20 times." + "But all depends on how Congress performs and the local +elections go," he said. + A new two-chamber legislature was elected last month and is +due to sit on July 27. Local elections are scheduled for +November. + PLDT shares closed at 630 pesos a share yesterday, 30 pesos +above Wednesday's record close. PLDT share prices have risen +about nine-fold in 18 months. + San Miguel shares closed at 190 pesos, also a historic +high, brokers said. + REUTER + + + +19-JUN-1987 01:04:05.45 + +canada + + + + + +RM AI +f0043reute +u f BC-CANADIAN-TAX-REFORM-C 06-19 0103 + +CANADIAN TAX REFORM CALLED AN IMPORTANT STEP + By Larry Welsh, Reuters + OTTAWA, June 18 - Canada's sweeping tax reform package, +announced today, is an important step towards a fairer system, +but is not as bold a revamp of the tax structure as some had +expected, economists and business leaders said. + "It's the biggest step towards tax reform we've taken in a +great many years," Merrill Lynch Canada Inc chief economist +Michael Manford told Reuters. + "But the system is the same old system with a lot of +important changes, as opposed to a brand new system," he added. +(See spotlight index page on ECRA) + Manford said changes introduced by Finance Minister Michael +Wilson did not go far enough in simplifying the federal tax +system. They represent evolutionary rather than revolutionary +reform. + "Overall, I thought that it was a more timid step than we +were led to believe," he said. + Wilson's move to increase money collected from corporations +while cutting individual taxes "is probably an acceptable shift," +said Bill James, president of Falconbridge Ltd, an +international mining company. + Wilson spread corporate tax increases fairly evenly across +the corporate sector, James said. "So it's not going to hit +anyone too hard and we will remain competitive." + Wilson said in his speech to the House of Commons that +Canada's tax system needed to be changed to compete with +sweeping reforms in the United States last year. + "The critical thing on the corporate side is that Wilson +moved most of the taxes much closer to the U.S. System," Manford +said. + The federal government increased taxes paid by corporations +by about five billion dlrs over the next five years, but +lowered personal taxes by 11 billion dlrs in the same period. + Despite collecting more corporate taxes, Wilson was able to +lower the tax rate on individual companies by removing many +special tax exemptions and broadening the tax base. + Wilson's plan also reduced the capital cost allowance, used +by companies to write off major investments, which some +business spokesmen said will hurt business in the long run. + "That will affect some investment decisions negatively," said +Laurent Thiebeault, Canadian Manufacturers Association +president. + Tax analysts said for some industries it will take several +days to assess the impact of the capital cost allowance +reductions that will be made over a number of years. + As anticipated, Canada's opposition parties signalled they +intend to fight the new tax measures as they are introduced in +Parliament over the next few months. + "It's not tax reform, it's a tax grab," said Liberal leader +John Turner. + Turner labelled changes to the federal sales tax "a money +machine for the minister of finance." + Wilson broadened the federal sales tax to include +additional products and also promised to introduce a +broad-based, multi-staged sales tax. + "It's not at all a fair package and Canadians are going to +see that very quickly," New Democratic Party leader Ed Broadbent +said. + However, economist Manford said Wilson acted wisely to +protect lower income Canadians by providing tax credits that +will cut 850,000 people from the tax rolls. + REUTER + + + +19-JUN-1987 01:07:20.73 +money-fxreserves +taiwan + + + + + +RM AI +f0050reute +u f BC-TAIWAN-DOLLAR-AND-RES 06-19 0086 + +TAIWAN DOLLAR AND RESERVES SEEN RISING MORE SLOWLY + By Chen Chien-Kuo, Reuters + TAIPEI, June 19 - Recent government moves to curb capital +inflow have temporarily helped to slow the rise of Taiwan's +foreign exchange reserves and to stabilise the local dollar +against the U.S. Currency, officials and bankers said. + Central bank governor Chang Chi-Cheng told reporters the +reserves rose only about 500 mln U.S. Dlrs in the past two +weeks and the local dollar appreciated more slowly against the +U.S. Dollar. + Chang said, "The pace of increase in our reserves is much +slower now than before and our currency is getting more stable." +He said the reserves, mainly the result of the trade surplus +with the U.S., Rose at the rate of two to three billion U.S. +Dlrs a month between January and May. + The reserves, the world's third largest after Japan and +West Germany, now total well over 60 billion U.S. Dlrs. + On June 2 the central bank froze overseas borrowings of +local and foreign banks and cut the limit on central bank +purchases of forward U.S. Dollars from banks to 40 pct from 90 +pct of the value of a contract. + Local and foreign bankers said the June 2 measures had +drastically limited their ability to lend foreign exchange to +importers and exporters. + They said their overseas borrowings and forward dollar +transactions showed a drastic decline with some banks +registering a fall of up to 30 pct. + Bank dealers said the Taiwan dollar has stabilised against +the U.S. Currency this week after rising two to five Taiwanese +cents a day between June 2 and 13 compared with a rise of five +to eight cents in May. + The bank dealers said the central bank, which had +previously bought U.S. Dollars heavily, sold at least 1.1 +billion U.S. Dlrs in the past two weeks to meet commercial +demand. + They said they expected the government to keep the local +dollar stable in the near term to give breathing space to +businesses experiencing slower exports because of the rise of +more than 23 pct in the value of the Taiwan dollar since +September 1985. + The Taiwan dollar opened at 31.09 to the U.S. Dollar today, +unchanged from yesterday. + Keh Fei-Lo, vice president of First Commercial Bank, said, +"It appears the central bank's move to curb the capital inflow +is quite successful." + Vice economic minister Wang Chien-Shien said the slower +rise in foreign exchange reserves would help ease pressure from +Washington over the large U.S. Trade deficit with Taiwan. + Over the past year Taiwanese businessmen have delayed +imports of machinery and production equipment because of +exchange rate uncertainty, he said. The stable exchange rate +would help boost imports, particularly from the United States. + REUTER + + + +19-JUN-1987 01:23:58.25 +alum +japanindonesiabrazil + + + + + +RM AI +f0063reute +u f BC-JAPAN-APPROVES-AID-FO 06-19 0112 + +JAPAN APPROVES AID FOR INDONESIA, BRAZIL ALUMINIUM + TOKYO, June 19 - Japan's cabinet approved a plan to help +financially-troubled aluminium ventures in Indonesia and +Brazil, an official at the Ministry of International and Trade +Industry (MITI) said. + Japan will invest 24 billion yen in <PT Indonesia Asahan +Aluminium> in addition to the 68.3 billion yen already invested +in the company. The government and private interests will +equally share the additional investment, he said. + They will also provide equal shares in 6.3 billion yen in +new investment in the Albras Amazon aluminium project in +Brazil, in addition to the 45.7 billion yen already invested. + The Japan Export-Import Bank will cut its rates on loans to +Asahan and Albras to about five pct from about seven pct, the +official said. + Interest rates on loans by Japan's private banks to the two +projects are expected to be reduced to around five pct from the +current seven to eight pct, but an agreement has yet to be +reached, industry sources said. + Under the rescue scheme for Asahan, in which 91.1 billion +yen has been invested, Indonesia will also extend another 32 +billion yen to the company. This will raise Indonesia's +investment ratio to about 40 pct from the current 25 pct. + The Brazilian government has already agreed to invest an +additional 6.5 billion yen in Albras, in which investment now +totals 93.2 billion yen, but its stake will not change from 51 +pct, the official said. + The sources said the rescue programs for the two projects +were larger than earlier expected, reflecting Japan's desire to +help develop the economies of Indonesia and Brazil and to +stabilise sources of aluminium. + Japan depends on imports for more than 90 pct of its +aluminium demand, which totals some 1.8 mln tonnes a year, they +said. + REUTER + + + +19-JUN-1987 01:38:31.06 +acq +japanusa + + + + + +F +f0069reute +u f BC-MITSUI-BUYS-FIVE-PCT 06-19 0104 + +MITSUI BUYS FIVE PCT STAKE IN U.S. CHIP MAKER + TOKYO, June 19 - Mitsui and Co Ltd <MITS.T> paid 1.5 mln +dlrs in early May for a five pct stake in <Zoran Corp>, a +California-based maker of large scale integrated circuits (LSI) +with computer graphic, communications and medical applications, +a Mitsui spokesman told Reuters. + He said the two firms will form a marketing company in +Japan as early as next year, although details of the joint +venture are not yet fixed. Mitsui expects last year's 10 +billion yen Japanese LSI market to grow quickly. + Zoran was founded in 1981 and now has about 100 employees, +he said. + REUTER + + + +19-JUN-1987 01:59:21.71 + +japan + + + + + +F +f0081reute +u f BC-JAPAN-REPORT-SAYS-FAU 06-19 0100 + +JAPAN REPORT SAYS FAULTY REPAIRS CAUSED JAL CRASH + TOKYO, June 19 - Faulty repairs and inadequate inspection +caused the 1985 crash of a Japan Airlines Co Ltd <JAPN.T> (JAL) +Boeing 747 which killed 520 people, the Japanese government +said in a final official report. + The clear cause of the crash was faulty repair work by the +Boeing Co <BA>, said Shun Takeda, the ministry of transport +official leading the accident investigation committee. + But the report also criticised the ministry's inspectors +for failing to carry out a full check of the repairs before +signing the clearance sheet. + The aircraft hit Mount Osutaka, north of Tokyo, on August +12, 1985, after a bulkhead separating the pressurised cabin +from the unpressurised tail suddenly burst, fracturing key +navigation systems. Only four people survived. + A Japan Air Lines spokesman declined comment on the report. +Boeing is expected to release a statement later today. + The report cleared the JAL crew of all responsibility. + In a separate set of recommendations, the investigators +said large aircraft operating in Japan should have fail-safe +systems, but did not say how this should be done. + A press statement by a group of lawyers representing +victims of the crash criticised the report for not dealing in +greater depth with the fail-safe aspect. + The lawyers said Boeing had showed it believed the crash +was due to design defects by specifying two design +modifications to prevent a recurrence in a memorandum filed in +King County, Washington, Superior Court last March 24. + They said similar official recommendations for fail-safe +systems following two air disasters involving DC-10 aircraft, +near Paris in 1974 and at Chicago in 1979, had been rejected +after objections from aircraft manufacturers. + The government investigators asked the ministry to +formulate concrete guidelines for its inspectors. An internal +ministry memo earlier this year complained that inspectors were +left too much on their own when making aircraft checks. + A Boeing team made repairs to the aircraft's aft bulkhead +under JAL supervision, and Transport Ministry inspectors +approved the repairs without actually seeing them, today's +report said. + The inspectors were unable to check Boeing's work because +the part repaired had been covered by a seal, the report said. + Over time, cabin pressurisation speeded up the process of +metal fatigue in the repaired bulkhead. + Boeing issued an official statement on September 6, 1985, +saying the 1978 repairs it had carried out were faulty. It did +not link them with the crash. + REUTER + + + +19-JUN-1987 02:05:48.53 +trade +japan + + + + + +RM AI +f0088reute +u f BC-JAPAN'S-JUNE-INTERIM 06-19 0095 + +JAPAN'S JUNE INTERIM TRADE SURPLUS NARROWS + TOKYO, June 19 - Japan's custom-cleared trade surplus +narrowed to 1.61 billion dlrs in the first 10 days of June from +1.97 billion a year earlier, the Finance Ministry said. + The June interim surplus compares with a 1.76 billion dlr +surplus in the same May period. + FOB exports in the first 10 days of June rose 17.6 pct from +a year earlier to 6.05 billion dlrs while CIF imports rose 39.6 +pct to 4.44 billion. + The average yen/dollar rate used for the figures was 141.04 +yen against 169.03 a year earlier. + REUTER + + + +19-JUN-1987 02:45:16.79 +earn +japan + + + + + +F +f0106reute +u f BC-C.-ITOH-AND-CO-LTD-<C 06-19 0046 + +C. ITOH AND CO LTD <CITT.T> + TOKYO, June 19 - Year ended March 31 + Group shr 18.83 yen vs 18.73 + Net 20.07 billion vs 18.47 billion + Pretax 22.14 billion vs 25.36 billion + Operating 37.57 billion vs 51.57 billion + Sales 14,762 billion vs 15,900 billion + REUTER + + + +19-JUN-1987 03:01:42.04 + +japan + + + + + +RM AI +f0119reute +u f BC-JAPAN-MACHINERY-ORDER 06-19 0103 + +JAPAN MACHINERY ORDERS FALL IN APRIL + TOKYO, June 19 - Japan's private sector machinery orders, +excluding shipbuilding, fell 10.4 pct in April from March to a +seasonally adjusted 663.8 billion yen, after rising 17.6 pct in +March, the government's Economic Planning Agency said. + April orders rose 2.0 pct from a year earlier after a 22.6 +pct year-on-year rise in March, an agency spokesman told +Reuters. + Seasonally adjusted private sector orders, excluding those +for shipbuilding and electric power firms, fell 7.5 pct in +April from March to 517.4 billion yen, after a 5.7 pct rise in +March from February. + April orders fell 1.3 pct from a year earlier after being +unchanged in March. + The April drop was due mainly to a 12.9 pct decrease in +orders from machine tool industries and a 15.3 pct drop in +orders from car makers, the spokesman said. + REUTER + + + +19-JUN-1987 03:53:39.82 + +japanusa + + + + + +RM AI +f0189reute +u f BC-U.S.-SEEKS-JAPAN-HELP 06-19 0090 + +U.S. SEEKS JAPAN HELP IN EVENT OF 1988 RECESSION + By Rich Miller, Reuters + TOKYO, June 19 - Senior U.S. Officials are looking to Japan +for help in buttressing the world economy in the event of an +American recession next year, Japanese government sources said. + During a visit to the U.S. Earlier this month, Economic +Planning Minister Tetsuo Kondo was asked by both U.S. Federal +Reserve chairman Paul Volcker and Council of Economic Advisers +chairman Beryl Sprinkel what Japan could do if the U.S. Enters +recession next year. + Although Sprinkel indicated that he personally did not +expect a recession next year, Volcker seemed to acknowledge +that an economic downturn was at least a possibility, the +sources said. + Faced with with a huge budget deficit, the U.S. Has little +room to manoeuvre on fiscal policy to counteract any downturn +that might occur in 1988. + It is also hamstrung as far as monetary policy is concerned +because U.S. Inflation is already showing some signs of picking +up, one source said. + But Japan is also limited in what action it could take to +help counteract a U.S. Recession without running the risk of +overstimulating its domestic economy and pushing up inflation, +the sources said. + Money supply growth is accelerating and interest rates are +at record low levels. In May, M-2 money supply plus +certificates of deposit grew at a year-on-year rate of 10.2 +pct, well above nominal GNP growth of four to five pct. + Some government sources are also worried that the recently +announced 6,000 billion yen emergency economic package could +push up land prices and the construction sector's inflation. + Public investment spending grew at a year-on-year rate of +about 10 pct in April, but that could accelerate to 20 pct +later this year under the impact of the emergency package, one +source said. + The 6,000 billion yen package was generally well received +in the U.S., Although U.S. Congressmen and businessmen told +Kondo they wanted the measures implemented quickly, sources +said. + The Japanese minister explained that the acceleration of +public works spending in the package was taking place +immediately, they said. + U.S. Congressmen were particularly interested in how much +impact the package would have on reducing the bilateral trade +imbalance, a question which Kondo was unable to answer clearly, +given the many economic uncertainties involved, the sources +said. + While recognizing that Japan's trade surplus is falling in +terms of volume, some Congressmen expressed concern that it was +not falling fast enough. + But the sources said no one pressed Kondo for a further +rise of the yen as a solution to correcting the bilateral trade +imbalance. + REUTER + + + +19-JUN-1987 03:59:02.90 +acq + + + + + + +F +f0194reute +f f BC-Sainsbury's-says-it-t 06-19 0013 + +******Sainsbury's says it taking control of Shaw's Supermarkets +for 30 dlrs a share + + + + + +19-JUN-1987 04:08:37.39 + +japanindonesiabolivia + + + + + +RM AI +f0206reute +u f BC-JAPAN-TO-MAKE-LOANS-T 06-19 0085 + +JAPAN TO MAKE LOANS TO INDONESIA AND BOLIVIA + TOKYO, June 19 - Japan will lend 27.17 billion yen to +Indonesia and will share equally with the World Bank a 7.25 +billion yen loan to Bolivia as part of its efforts to help +Third World countries, a Foreign Ministry spokesman said. + The lending is in line with Japan's plan to contribute 20 +billion dlrs over the next three years to developing countries. + Both loans will be used for development, the spokesman told +Reuters. He declined to name terms. + REUTER + + + +19-JUN-1987 04:11:27.72 +acq +uk + + + + + +F +f0207reute +b f BC-SAINSBURY'S-TAKING-CO 06-19 0104 + +SAINSBURY'S TAKING CONTROL OF SHAW'S SUPERMARKETS + LONDON, June 19 - J Sainsbury Plc<SNB.L> said it agreed to +take control of the U.S. Shaw's Supermarkets Inc through a +combination of share purchases and a tender offer at 30 dlrs a +share. + Sainsbury bought about 21 pct of the stock in 1983. It said +its U.S. Subsidiary, Chene Investments Inc, bought 2.55 mln +common shares from the controlling Davis family yesterday at 30 +dlrs a share for 76.5 mln dlrs, lifting its stake to 49.4 pct. + A tender offer for the outstanding shares will be launched, +also at 30 dlrs a share for a maximum further cost of 184.4 +mln. + The Shaw's Board and the Davis family has agreed to accept +the offer, thus assuring Sainsbury's a total holding of 74.0 +pct. + The company had allotted 20.18 mln new ordinary shares to +<Warburg Securities Ltd> which it said would be sufficient to +finance about 188 mln dlrs of the maximum 261 mln dlrs payable. + Shaw's operates a chain of 49 supermarkets in +Massachusetts, Maine and New Hampshire which in 1986 produced +sales of 1.1 billiob dlrs and pretax profit of 31.1 mln. At the +end of 1986 it had net assets of 88 mln dlrs. + Last September, Sainsbury's increased its stake in Shaw's +to 28.5 pct. In the year to March 21, it reported a rise in +pretax profit to 246.9 mln stg from 192.7 mln on sales that +increased to 4.04 billion from 3.58 billion. + Sainsbury shares had fallen five pence before the +announcement to 590p from last night's close but were unmoved +by news of the deal. + REUTER + + + +19-JUN-1987 04:20:47.11 + +japan + + + + + +F +f0223reute +u f BC-C.-ITOH-SEES-NO-GROWT 06-19 0108 + +C. ITOH SEES NO GROWTH IN 1987/88 GROUP PROFIT + TOKYO, June 19 - C. Itoh and Co Ltd <CITT.T> said its group +net profit in the year ending March 31, 1988, is expected to be +unchanged from a year earlier. + The prediction assumes a yen/dollar rate of 140 yen and a +crude oil price of 18 dlrs a barrel, a company spokesman told +Reuters. Sales in 1987/88 are estimated at 15,100 billion yen, +up 2.3 pct from a year earlier. + The company earlier reported group net profit of 20.07 +billion yen in the year ended March 31, 1987, up 8.6 pct from a +year earlier, helped by a drop in sales and administration +costs and reduced interest charges. + REUTER + + + +19-JUN-1987 04:25:32.92 + +uk + + + + + +F +f0231reute +r f BC-UBS-TO-SELL-25,000-SA 06-19 0065 + +UBS TO SELL 25,000 SANDOZ SHARES + LONDON, June 19 - Union Bank of Switzerland (Securities) +Ltd said it is lead managing the sale of 25,000 new bearer +shares of Sandoz Ltd. + The shares closed in Zurich yesterday at 12,100 Swiss +francs each. Final terms will be set on, or before, June 25. + The selling concession is two pct while management and +underwriting each pays 3/4 pct. + REUTER + + + +19-JUN-1987 04:25:41.52 +earn +japan + + + + + +F +f0232reute +u f BC-ISUZU-MOTORS-LTD-<ISU 06-19 0066 + +ISUZU MOTORS LTD <ISUM.T> SIX MONTHS TO APRIL 30 + TOKYO, June 19 - + Parent shr loss 15.85 yen vs profit 2.02 + Interim div nil vs nil + Net loss 12.92 billion vs profit 1.65 billion + Current loss 12.52 billion vs profit 4.44 billion + Operating loss 8.76 billion vs profit 6.52 billion + Sales 443.90 billion vs 528.03 billion + Outstanding shrs 815.10 mln vs 814.97 mln + REUTER + + + +19-JUN-1987 04:31:03.46 + +japan + + + + + +F +f0237reute +u f BC-ISUZU-DENIES-PLANS-TO 06-19 0091 + +ISUZU DENIES PLANS TO IMPORT GM CARS TO JAPAN + TOKYO, June 19 - Isuzu Motors Ltd <ISUM.T> has no plans to +import cars made by General Motors Corp <GM.N> to Japan, an +Isuzu spokesman told Reuters. + The Japanese daily Yomiuri Shimbun reported that Isuzu had +decided to import cars directly from GM. + Each month Isuzu's domestic distributors sell five to 10 +cars from GM's Buick, Chevrolet, and Oldsmobile range. + The cars are supplied by Yanase and Co Ltd, a Japanese +importer and distributor. + Isuzu is owned 38.6 pct by GM. + REUTER + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-020.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-020.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-020.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-020.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2041 @@ + + +19-OCT-1987 23:49:31.45 +money-fx +japanusa + + + + + +RM AI +f0001reute +u f BC-IF-DOLLAR-FOLLOWS-WAL 10-19 0105 + +IF DOLLAR FOLLOWS WALL STREET JAPANESE WILL DIVEST + By Yoshiko Mori + TOKYO, Oct 20 - If the dollar goes the way of Wall Street, +Japanese will finally move out of dollar investments in a +serious way, Japan investment managers say. + The Japanese, the dominant foreign investors in U.S. Dollar +securities, have already sold U.S. Equities. + But "if the dollar falls steeply, which did not happen +yesterday, Japanese investors will definitely try to withdraw +significant funds from U.S. Shares," said Akira Kawakami, deputy +manager of Nomura Investment Trust and Management Co Ltd's +international investment department. + An unstable, lower dollar would also affect Japanese +investment in U.S. Bonds. "Japan-U.S. Interest rate +differentials, which currently look wide enough, mean nothing +in the absence of dollar stability," said Kawakami. + U.S. Bonds could benefit due to a gloomy economic picture +following the estimated huge losses in stocks by major U.S. +Institutional and individual investors, he said. The effect +should be to rule out any U.S. Interest rate rise. + But most Japanese investors in U.S. Bonds are still wiating +to see if the dollar really is stable, he said. The dollar was +holding firm at above 142 yen on Tuesday morning. + "Although Japanese investors sold huge amounts of stocks in +New York yesterday, most are still looking for chances to +lighten their U.S. Stock inventories," Hiromitsu Sunada, manager +of Meiji Mutual Life Insurance Co's international investment +department said. + Their sales helped send Wall Street stocks down 508 points +to 1,738, the market's biggest percentage drop since 1914. + "Investment in U.S. Stocks and bonds is difficult, +considering the dangers," said Katsuhiko Okiyama, deputy general +manager and chief adviser of Yamaichi Securities Co Ltd's fixed +income securities marketing group. + Japanese investment at home could start to pick up once +markets have stopped reacting to Wall Street, the managers +said. The Tokyo yen bond market is likely to stabilise in one +or two weeks, which is what investors have been waiting for. +The bottom for yen bonds should be around a 6.3 pct yield for +the 5.1 pct 89th bond, they said. + "The basic background which has supported the stocks and +bonds markets has not changed," said Norio Okutsu, assistant +general manager of Nikko Securities' bond department. "But new +outflows of funds to the U.S. Will be decreasing." However, +this was already evident three months ago, he said. + REUTER + + + +19-OCT-1987 23:58:39.11 + +japanfrance + + + + + +F +f0012reute +u f BC-NEC-TO-SUPPLY-CHIP-TE 10-19 0085 + +NEC TO SUPPLY CHIP TECHNOLOGY TO FRANCE + TOKYO, Oct 20 - NEC Corp <NIPN.T> will supply <Matra-Harris +Semiconducteurs SA(A)> (MHS) of France with manufacturing +technology for 16-bit microchips used in microcomputers, an NEC +spokesman said. + MHS, a joint venture between France's MATRA <MATR.PA> and +Harris Corp <HRS> of the U.S., Will manufacture and market +globally a microcomputer based on NEC's Micron PD 78312 and +Micron PD78310 chips. + MHS will pay NEC an undisclosed sum for the technology. + REUTER + + + +19-OCT-1987 23:59:09.79 + +japan + + +tse + + +RM AI +f0013reute +b f BC-JAPAN-TAKES-WAIT-AND- 10-19 0107 + +JAPAN TAKES WAIT-AND-SEE STANCE ON STOCKS-OFFICIAL + TOKYO, Oct 20 - The Finance Ministry will take a +wait-and-see stance on Tokyo Stock Exchange movement, although +it is gravely concerned about the sharp fall in stock prices, a +senior Ministry official said. + The official, who declined to be identified, told reporters +the 7.3 pct drop in Tokyo stock prices this morning was caused +primarily by psychological factors following the 22.5 pct fall +in New York stock prices overnight. + He said the Ministry is in close contact with the Tokyo +Stock Exchange, but has no plans yet to take any specific +measures regarding the fall. + REUTER + + + +20-OCT-1987 00:08:10.16 + +mexico + + + + + +RM +f0017reute +u f BC-MEXICAN-STOCKMARKET-H 10-20 0112 + +MEXICAN STOCKMARKET HEAD SEES NO CRISIS AFTER FALL + MEXICO CITY, Oct 19 - The outlook for Mexico's economy and +stockmarket remains optimistic despite the market's worst-ever +fall of 52,671.56 points on Monday, the president of the +Mexican stock exchange, Manuel Somoza, said. + He said the 16.51 pct drop in the exchange's index +reflected a "totally emotional" reaction to Monday's fall on the +New York stock exchange and was not a reflection of a new +crisis for the Mexican economy or the stockmarket." + He was speaking at a news conference here on Monday. + "We think that after the psycological effect the market will +tend to stabilize itself," Somoza said. + Somoza said he based his optimism on the relatively bright +outlook of the Mexican economy due to increased income from oil +and non-petroleum exports, record high foreign reserves and +government efforts to promote a modernization of the industrial +sector. + "The U.S. Economy is not the same as the Mexican," he said. +He did not say when he thought the market would stabilize. + He said traders had originally expected the market to level +out on Monday after last week's profit taking pulled the index +down 44,207 points. + News of the "enormous problems" in New York, which reached +Mexico City before the local market opened, caused a flurry of +selling on the Mexican exchange, Somoza said. + The stockmarket had risen 629 pct over the year by the end +of September. + Somoza said Monday's light volume of 15.3 mln shares +compared to an average of 53 mln was an indication the day's +drop was not a sign of a major collapse. + He also denied rumours that the day's loss was the result +of government and brokerage house manipulation. + REUTER + + + +20-OCT-1987 00:15:04.00 +cocoa +indonesiaukmalaysiausapapua-new-guineawest-germanynetherlands + + + + + +T +f0021reute +u f BC-ASIAN-COCOA-PRODUCERS 10-20 0097 + +ASIAN COCOA PRODUCERS EXPAND DESPITE CRITICS + By Jeremy Clift + JAKARTA, Oct 20 - Asian cocoa producers are expanding +output despite depressed world prices and they dismiss +suggestions in the London market that their cocoa is inferior. + "Leading cocoa producers are trying to protect their market +from our product," said a spokesman for Indonesia's directorate +general of plantations. "We're happy about our long-term future." + Malaysian growers said they would try to expand sales in +Asia and the United States if Malaysian cocoa was not suitable +for European tastes. + They were responding to comments by London traders that +large tonnages of unwanted cocoa beans from Malaysia, Indonesia +and Papua New Guinea (PNG) were helping to depress cocoa +prices. + London traders said the Asian cocoa was considered +unsuitable for western palates because of an acrid odour and a +high level of free fatty acids. + Ng Siew Kee, the chairman of Malaysia's Cocoa Growers' +Council, said Malaysia should expand its sales to Asia and the +United States if it did not produce a type suitable for Western +Europe. + A spokesman for the PNG Cocoa Industry Board said the +London market was mistaken if it linked PNG cocoa with +high-acid Malaysian and Indonesian beans. + "When the market is declining, buyers seize on anything to +talk down prices," the spokesman said. + He said that PNG could sell whatever cocoa it produces. + PNG exported 33,000 tonnes of cocoa in the 1986/87 cocoa +year ending September 30, of which nearly 50 pct was exported +to West Germany, 16 pct to the U.S. And the rest to the +Netherlands and Britain. + The Indonesia spokesman, an Agriculture Ministry official +who wished not to be identified, said Indonesia had no problem +with quality and would continue to expand sales. He described +criticism of the quality of Indonesian beans as "trade politics" +and said Jakarta's traditional links with Dutch buyers meant it +did not have any difficulty with exports. + Indonesia and Malaysia, Asia's two biggest commodity +producers, are expanding cocoa output and are both outside the +International Cocoa Organization (ICCO). + Officials have said Malaysian production is expected to +total 150,000 to 155,000 tonnes in calendar 1987. + This is up from 131,000 tonnes in 1986, partly because of +the end of a three-year drought in Sabah, the country's largest +cocoa growing area. + Production of Indonesian cocoa beans tripled to 31,600 +tonnes in calendar 1986 from 10,284 tonnes in 1980. Output is +projected to rise to 50,000 tonnes in 1988 from 38,000 tonnes +this year as young trees mature. + Both Malaysia and Indonesia are low cost producers and +traders said they could last out low prices longer than West +African countries. + According to one Kuala Lumpur trader, world prices would +have to fall another 1,000 ringgit per tonne (about 250 stg) to +make cocoa production in Malaysia uneconomic. + Some traders believe the main quality problem is with +harvesting and fermentation techniques. + One trader said Malaysian cocoa is virtually +indistinguishable from West African output if treated in the +same way but this is not possible on the larger Malaysian +estates. + REUTER + + + +20-OCT-1987 00:20:44.23 + + + + +tse + + +RM AI +f0029reute +f f BC-Tokyo-stock-index-dow 10-20 0012 + +******Tokyo stock index down 2,210.19 points to 23,536.37 in early afternoon +Blah blah blah. + + + + + +20-OCT-1987 00:30:35.73 + +japan +nakasone + + + + +RM AI +f0036reute +b f BC-JAPANESE-PREMIER-SAYS 10-20 0110 + +JAPANESE PREMIER SAYS HE WATCHING STOCK SITUATION + TOKYO, Oct 20 - Japanese Prime Minister Yasuhiro Nakasone +was quoted by Kyodo News Service as saying he was watching the +stock market situation. + "We must watch things a little longer. New York is down 22 +pct, London 10 pct, while compared to this Japan is seven pct +down," Kyodo quoted him as telling reporters. + Asked if he agreed with analysts who called the stock +sell-off "Black Monday," Nakasone said: "Compared with times past, +economics have changed completely." He rejected a comparison +between the present situation and the stock market collapse of +1929 and the recession which followed. + REUTER + + + +20-OCT-1987 00:48:57.47 +crude +malaysia + +opec + + + +Y +f0049reute +u f BC-MALAYSIA-ADVISED-TO-R 10-20 0116 + +MALAYSIA ADVISED TO RAISE CRUDE OIL OUTPUT IN 1988 + KUALA LUMPUR, Oct 20 - Malaysia's national oil company, +Petronas, has advised the government to raise crude oil output +to 540,000 barrels a day (bpd) in 1988 from a current 500,000 +bpd, a senior company official said. + "We have the capacity to produce the amount," Rastam Hadi, +Petronas's Vice-President for Upstream Sector said. + The government will announce its decision on Friday when it +unveils the country's budget. Malaysia raised output this month +to current levels from 420,000 bpd after reviewing the world +oil market. In May, Malaysia cut output to 420,000 bpd from +459,000 in response to a call by OPEC to boost prices. + REUTER + + + +20-OCT-1987 02:15:10.98 +money-fx +usawest-germany +sumita + + + + +RM AI +f0103reute +f f BC-Sumita-welcomes-U.S.- 10-20 0012 + +******Sumita welcomes U.S.-West German joint confirmation of Louvre accord +Blah blah blah. + + + + + +20-OCT-1987 02:18:33.93 + + + + +tse + + +RM AI +f0105reute +f f BC-Tokyo-stock-index-slu 10-20 0010 + +******Tokyo stock index slumps 14.9 pct to close at 21,910.08 +Blah blah blah. + + + + + +20-OCT-1987 02:20:31.11 + + +sumita + + + + +RM AI +f0106reute +f f BC-Sumita-says-world-sto 10-20 0013 + +******Sumita says world stockmarkets excessively concerned about economic future +Blah blah blah. + + + + + +20-OCT-1987 02:29:24.58 +money-fx +japanusawest-germany +sumita + + + + +RM AI +f0111reute +b f BC-SUMITA-WELCOMES-U.S.- 10-20 0109 + +SUMITA WELCOMES U.S.-JAPAN AGREEMENT ON LOUVRE + TOKYO, Oct 20 - Bank of Japan governor Satoshi Sumita said +he welcomed Monday's U.S. And West German joint confirmation of +their commitment to the Louvre accord. + Sumita said in a statement that world stockmarkets were +excessively concerned about the economic future. + The Bank of Japan will continue to adhere to a system of +policy coordination based upon the Louvre accord of February, +he said. The accord called for stability in foreign exchange +rates. Exchange rates generally are regaining stability and the +economies of industrialised nations are heading for a steady +recovery, he said. + REUTER + + + +20-OCT-1987 02:31:05.43 +money-fx +new-zealand + + + + + +RM +f0112reute +u f BC-NEW-ZEALAND-WILL-CONT 10-20 0074 + +NEW ZEALAND WILL CONTINUE FIRM MONETARY POLICY + WELLINGTON, Oct 20 - The Reserve Bank of New Zealand said +there was no evidence to suggest the fall in share prices had +affected financial stability and it would maintain its firm +monetary policy. + Governor Spencer Russell said in a statement the central +bank did not accept arguments that the battle against inflation +should now take a low second priority after the sharemarket's +plunge. + Russell said the bank had two statutory responsibilities -- +to implement the government's monetary policy to bring down +inflation, and to ensure the financial sector's stability. + "Unless the bank is directed otherwise, the firm monetary +policy will continue because it is very much in the national +interest that it do so," he said. + "And there is yet no evidence available to the bank to +suggest that the fall in share prices has affected the +stability of the financial sector." + The Barclays share index fell a record 504.75 points to +2,925,26 on Tuesday, a decline of 14.7 pct. + REUTER + + + +20-OCT-1987 02:51:54.24 + + + + +tse + + +RM AI +f0126reute +f f BC-Tokyo-Stock-Exchange 10-20 0013 + +******Tokyo Stock Exchange has no plan to suspend trading on Wednesday-president +Blah blah blah. + + + + + +20-OCT-1987 02:52:04.37 + + + + +tse + + +F +f0127reute +f f BC-Tokyo-Stock-Exchange 10-20 0013 + +******Tokyo Stock Exchange to ease margin requirements, exchange president says +Blah blah blah. + + + + + +20-OCT-1987 03:02:08.52 +money-supply +japan + + + + + +RM AI +f0132reute +f f BC-Japan-September-M-2-p 10-20 0014 + +******Japan September M-2 plus CD money supply rises 11.1 pct year on year (Aug 11.0) +Blah blah blah. + + + + + +20-OCT-1987 03:12:36.51 + + +james-baker + + + + +RM V +f0146reute +f f BC-BAKER-HEADS-HOME-AFTE 10-20 0013 + +******BAKER HEADS HOME AFTER CUTTING SHORT EUROPE TRIP - SWEDISH FINANCE MINISTRY +Blah blah blah. + + + + + +20-OCT-1987 03:14:08.12 +graincorn +tanzaniamalawimozambiquezaire + + + + + +G +f0147reute +u f BC-TANZANIA-SELLS-MAIZE 10-20 0075 + +TANZANIA SELLS MAIZE TO MALAWI, MOZAMBIQUE, ZAIRE + DAR ES SALAAM, Oct 20 - Tanzania has arranged to sell +53,000 tonnes of maize to Malawi, Mozambique and Zaire, radio +Tanzania said. + The radio said the grain would be delivered soon, but gave +no details about the value of the sales. + Tanzania is expecting a record maize harvest of 2.3 mln +tonnes in the 1987/88 financial year ending June, up from a +bumper crop of 2.1 mln in 1986/87. + REUTER + + + +20-OCT-1987 03:14:33.15 +cotton +tanzania + + + + + +G +f0148reute +u f BC-TANZANIAN-COTTON-THRE 10-20 0100 + +TANZANIAN COTTON THREATENED BY LACK OF STORAGE + DAR ES SALAAM, Oct 20 - About 60,000 tonnes of harvested +raw cotton may be spoiled by rain in Tanzania's northern +Shinyanga region because it is stored in the open or in crude +village sheds, radio Tanzania reported. + The cotton, worth one billion shillings, cannot be moved to +ginneries in the region because most mill warehouses are full. +Many mills are not working because of a lack of spare parts, it +added. + Agriculture Ministry officials have forecast a 1987/88 +cotton harvest of about 200,000 tonnes, down from 215,000 in +1986/87. + REUTER + + + +20-OCT-1987 03:17:41.87 + +japan + + +tse + + +RM AI +f0153reute +b f BC-TOKYO-STOCK-EXCHANGE 10-20 0082 + +TOKYO STOCK EXCHANGE WILL NOT SUSPEND TRADING + TOKYO, Oct 20 - Tokyo Stock Exchange president Michio +Takeuchi said the exchange has no immediate plans to suspend +trading to cool off panic stock selling. + However, he said Tokyo may consider such a measure if the +London and New York exchanges are closed overnight. + "I don't think it will happen," he added. + He also told reporters the exchange will relax margin +requirements effective on Wednesday to encourage stock buying. + Takeuchi said the sharp fall in stock prices was mostly due +to psychological factors. + "We need to keep close watch on market movement but we +expect the market will stabilise soon," he said, adding that +individual investors should remain calm. "It is advisable to +wait for an autonomous recovery of the market," he said. + The margin requirement in cash will be reduced to 50 pct +from 70 pct while the margin collateral requirement in equity +will rise to 70 pct from 60 pct, effective on Wednesday, he +said. + Takeuchi also said the exchange has no specific plan to +take coordinated action with the New York and London exchanges +to help stabilise stock prices. + The drop on Wall Street was caused by various factors but +was primarily the result of a correction of overvalued share +prices, he said. The current stock price plunge cannot compare +with the Great Depression as the economic environment is very +different, he added. + The exchange has not changed plans to introduce stock +futures trading next year despite press reports that the Wall +Street fall was linked with futures trading, he said. + REUTER + + + +20-OCT-1987 03:26:57.39 +interest +philippines + + + + + +RM +f0166reute +u f BC-AQUINO-SAYS-MANILA-WA 10-20 0111 + +AQUINO SAYS MANILA WATCHING INTEREST RATES CLOSELY + MANILA, Oct 20 - President Corazon Aquino said the +Philippines was closely monitoring interest rates in the wake +of Monday's record drop on Wall Street and steep declines in +Manila and other Asian stock markets. + "We will monitor these developments closely and will +continue to hope that they do not precipitate large declines in +economic activity around the world," Aquino told a meeting of 13 +major Philippine business groups. + "The Philippines, as a trading country in the world economy, +depends on the continued health and growth of both the world +economy and the world trading system," she said. + The Manila Stock Exchange composite index plunged 105.49 +points or 11.79 pct by the midday close to 789.54, depressed by +the record 508 point fall of the Dow Jones industrial average +on Monday. + "The Philippines, in addition, as a large borrower nation, +is affected by developments in interest rate levels around the +world and will carefully monitor the impact of these +developments on interest rates, on gold and on commodity +prices," Aquino said. + "We welcome the statements from world leaders that urge calm +in the present difficult situation," she added. + REUTER + + + +20-OCT-1987 03:36:58.94 + +japan + + + + + +F +f0181reute +u f BC-NISSAN-STARTS-TO-MARK 10-20 0101 + +NISSAN STARTS TO MARKET REMODELLED 4WD VEHICLES + TOKYO, Oct 20 - Nissan Motor Co Ltd <NSAN.T> said it has +started to market a remodelled version of its four wheel drive +(4WD) Safari vehicle in Japan. + Nissan said in a statement it hopes to sell 250 vehicles a +month in Japan. + It also plans soon to start exporting 3,400 vehicles a +month to the Australian, Middle East and Asian markets under +the name Patrol, a spokesman said. + It will sell the vehicle in Europe sometime in the future, +with shipments from <Motor Iberica S.A.>, its Spanish unit. The +volume for Europe will be set later. + REUTER + + + +20-OCT-1987 03:38:14.97 + +japan + + + + + +RM +f0182reute +u f BC-JAPAN-TO-SCRUTINISE-L 10-20 0113 + +JAPAN TO SCRUTINISE LIFE INSURERS' CAPITAL GAINS + TOKYO, Oct 20 - The Finance Ministry plans to examine how +life insurance companies realised capital gains through +transactions undertaken in June, just before the yen bond +market began to fall sharply, a senior Ministry official said. + The move is aimed at cooling fierce competition in the +field and will pave the way for a Ministry system to check that +insurers do not inflate investment returns on the accounts to +attract investors, he said. + Some insurers transfer part of their unrealised gains from +general accounts to the variable life accounts, violating their +internal regulations, industry sources said. + The eight major local life-insurers which offer variable +life policies here realised an average return of 21.01 pct on +such policies in the year ended September. + The Ministry will scrutinise the policies of 17 local and +foreign life insurers which offer the variable life schemes. + Japan has 23 major local life insurers, none of which is +listed on the stock market. + REUTER + + + +20-OCT-1987 04:03:13.28 + + + + +lse + + +RM V +f0211reute +f f BC-FTSE-100-share-index 10-20 0013 + +******FTSE 100 share index opens 186.0 down at 1,866.3 - London Stock Exchange +Blah blah blah. + + + + + +20-OCT-1987 04:10:11.01 +money-supply +japan + + + + + +RM AI +f0223reute +b f BC-JAPAN-MONEY-GROWTH-TO 10-20 0110 + +JAPAN MONEY GROWTH TO STAY AT 11-12 PCT - OFFICIAL + TOKYO, Oct 20 - Growth in Japan's M-2 plus certificates of +deposit (CD) money supply in the October to December period is +not expected to accelerate, but will remain at high levels +between 11 and 12 pct, a senior Bank of Japan official said. + The central bank will keep a watch on high growth in +liquidity because this is a factor that may cause rises in +prices of goods, he said. + The September growth of 11.1 pct year on year announced +earlier today should not be taken as implying that the money +supply has started to expand very rapidly, he said. In August +the rate of increase was 11.0 pct. + REUTER + + + +20-OCT-1987 04:11:39.73 + +west-germany + + + + + +F +f0225reute +u f BC-W.GERMAN-CAR-OUTPUT, 10-20 0093 + +W.GERMAN CAR OUTPUT, EXPORTS RISES IN SEPTEMBER + FRANKFURT, Oct 20 - West German car and van production rose +in September to 407,600 from 386,000 in September 1986, while +exports climbed to 226,300 from 218,200, the German Automobile +Industry Association VDA said. + The association added that incoming domestic orders in +September were above, and foreign orders roughly equal, to +those in September last year. + Car and van production rose in the first nine months of the +year to 3.25 mln from 3.19 mln. But exports fell to 1.80 mln +from 1.85 mln + Output of light trucks fell in September to 13,200 from +14,700, while heavy truck production was unchanged at 10,100. + Over the nine month period, light truck production fell to +109,300 from 129,200, while heavy truck production dipped to +83,800 from 84,700. + Exports of light trucks fell in September to 7,800 from +9,000 and to 66,600 from 84,300 in the first nine months. + Exports of heavy trucks rose to 5,500 in September from +4,600 in September last year and to 47,800 from 45,300 in the +first nine months. + REUTER + + + +20-OCT-1987 04:19:37.24 + +new-zealand +douglas + + + + +RM +f0240reute +u f BC-DOUGLAS-SAYS-N.Z.-NOT 10-20 0099 + +DOUGLAS SAYS N.Z. NOT ISOLATED FROM WORLD MARKETS + WELLINGTON, Oct 20 - Finance Minister Roger Douglas said +the fall in share prices on local and world markets +demonstrated that New Zealand could not be isolated from global +trends. + "We can't expect to isolate ourselves from developments +around the world," Douglas told reporters. + "I think above all what today's problems illustrate is that +the sort of policies that we have been putting in place the +last three years are absolutely essential so that New Zealand's +economic performance improves, relative to the rest of the +world." + The New Zealand share market fell 14.7 pct on Tuesday in a +record one-day fall. + Douglas told a news conference, at which the government +announced plans to sell its 89 pct stake in <New Zealand Steel +Ltd>, that the sharemarket fall would not affect plans to sell +parts of state-owned corporations such as <Air New Zealand>, +<DFC New Zealand Ltd> and <Petroleum Corp of New Zealand Ltd>. +Asked if the government considered acting to close the +sharemarket for a period, Douglas said: "No. I'm not sure it +would have been my job to do so." + REUTER + + + +20-OCT-1987 04:21:55.55 + +japanusa + + + + + +RM V +f0243reute +u f BC-WILL-WORLD-RECESSION 10-20 0086 + +WILL WORLD RECESSION FOLLOW STOCK MARKET PLUNGE? + By Linda Sieg + TOKYO, Oct 20 - Some economists fear a world recession if +stock exchanges continue to plunge. Others are more sanguine. + The pessimists say the stocks shakeout is destroying +personal assets and dampening consumption. + "The real economic effects can be significant -- the +destruction of wealth and a deflationary impact on the economy," +said an economist at a U.S. Securities house. + But other economists said such fears were overblown. + "Because of lower appreciation of corporate or personal +assets, that much negative impact could be observed (in the +U.S.)," said Keikichi Honda, general manager of economic +research at the Bank of Tokyo Ltd. + "But the appreciation of stock prices has not been playing +such a major role in the entire U.S. Gross national product +(GNP)," Honda said. + The pessimists noted that the record fall on Wall Street on +Monday was sparked by fears the U.S. Economy is heading for a +recession or serious slowdown much earlier than expected. + But the optimists said a dampening effect on consumption +due to stock market losses was less likely in Japan. + "In Japan the weight of stocks in individuals' total assets +is less than in the U.S., And the total weight of individuals' +holdings in the stock market is less, so there will be less +damage than in the U.S.," said an economist at one of Japan's +major brokerage houses. + "Japan is taking strong measures to stimulate domestic +demand, so while there could be some impact from the reduction +of assets value, it would not be a major impact," said the Bank +of Tokyo's Honda. + Optimists also pointed to incipient declines in U.S. +Interest rates as a positive sign for the U.S. Economy. + "U.S. Interest rates are coming down so there is a feeling +that interest rates have hit their ceiling, and the U.S. +Economy is strong, so there should be no direct impact from the +collapse of share prices," said Toshiaki Kakimoto, Sumitomo Bank +Ltd chief economist. + Some economists suggested that should markets continue to +slump, the major industrial nations may have to discuss +possible joint lowering of official discount rates. + "Until last week, a discussion of lower rates was +unthinkable, now it's not," said the Japanese brokerage house +economist. + "There has been a move from the purely rational to the +emotional -- it's a central bankers' nightmare," said the +foreign economist. "It will require strong global leadership by +politicians to snuff out," he said. + However, "previously, the stocks correction was due to fears +of higher interest rates, a possible resurgence of inflation +and the depreciation of the dollar," said Nobuyuki Ueda, senior +economist at the Long-Term Credit Bank Ltd. + "Now some people have an uneasy feeling about the outlook of +the U.S. Economy," Ueda said. + "If the stock market is a leading indicator of the future +movement of the economy, this decline will have very +significant implications for the U.S. Economy," he said. + "If the low levels hold, those who were keeping consumption +high because of unrealised gains could curb consumption," said +Salomon Brothers (Asia) Ltd economist Ron Napier. "If the paper +gains aren't there, people won't spend." + A U.S. Recession could then trigger similar declines in +other economies, some economists said. + "I don't know if a possible recession in the U.S. Would +trigger a world recession because other nations, such as Japan, +are showing good economic performance," LTCB's Ueda said. "But we +can't rule out the possibility because the U.S. Is still +playing a very dominant role in the world economy." + REUTER + + + +20-OCT-1987 04:25:26.49 + +japan +nakasonemiyazawa + +tse + + +RM V +f0246reute +u f BC-JAPAN-TRIES-TO-STEM-S 10-20 0097 + +JAPAN TRIES TO STEM STOCKS DIVE + By Linda Sieg + TOKYO, Oct 20 - Government and monetary authorities today +staged a concerted effort to calm spreading panic on Japanese +stock exchanges but market analysts said there were limits to +their ability to succeed. + "The ability of the Big Four (Japanese securities houses) +and the Finance Ministry is limited," said Barclays de Zoete +Wedd economist Peter Morgan. + Finance Ministry officials asked the big four securities +companies this afternoon to help calm panic selling on the +Tokyo Stock Exchange, ministry officials said. + Prime Minister Yasuhiro Nakasone was quoted by Kyodo News +Service as saying he was watching the stock market situation. + But he rejected comparisons with the 1929 stock market +collapse and subsequent recession. + Finance Minister Kiichi Miyazawa said the Tokyo stock +market should not be gravely affected by downturns in New York +and London because there are clear signs of a Japanese economic +recovery and exchange rate stability. + Bank of Japan Governor Satoshi Sumita also tried to calm +the panic, saying in a statement that world stock markets were +excessively concerned about the economic future. + Traditionally, the four big houses -- Nomura Securities Co +Ltd, Yamaichi Securities Co Ltd, Daiwa Securities Co Ltd, and +Nikko Securities Co Ltd -- have influenced the market because +of their sheer size and overwhelming market share. + This strength has in the past made it possible for the +brokerages to calm down markets under guidance from the Finance +Ministry, analysts said. + But the analysts questioned whether the brokerages, which +have already suffered heavy losses from falling bond markets +over the past year, would have the strength this time to turn +things around. + "The question is, are the Japanese brokerages strong enough +to force investors to buy," said Johsen Takahashi, research +director at the Mitsubishi Research Institute. + "If we consider that they have suffered serious losses in +the bond markets and in their U.S. Investments, it is debatable +whether they they could support buying," he said. + "We can support things to some extent, but we can't +completely suppress selling," said one Japanese broker. + Some analysts said the high percentage of shares cross-held +by financial institutions and other corporations could have a +stabilising effect on the market. + Some 80 pct of shares are held by corporate shareholders, +said Keikichi Honda, general manager of the Bank of Tokyo Ltd's +economic research division. "This is a tightly woven textile. In +its own way it is stronger than Wall Street." + But other analysts expressed doubt about this argument. + "If a high percent of shares is cross held, everything +happens at the edges and the relative moves can be larger," said +Kleinwort Benson Ltd financial analyst Simon Smithson. "Selling +will drive prices down an enormous distance because of no +liquidity." + "You don't need big volume to get big declines in the market +-- you just need a huge imbalance between sellers and buyers," +said Barclay's Morgan. + Shares held by what are termed "stable shareholders," or +banks and other companies with which a firm does business, +might also find their way onto the market if the outlook gets +bad enough, some analsyst said. + "Closely held shares could become unclosely held," said +Morgan. But he said such a prospect is unlikely right now +because companies, with their improved earnings prospects, do +not need to sell shares for cash flow reasons. + REUTER + + + +20-OCT-1987 04:30:24.90 +crudeship +indonesia +subroto +opec + + + +RM V Y +f0257reute +u f BC-WORLD-COULD-COPE-WITH 10-20 0105 + +WORLD COULD COPE WITH HORMUZ CLOSURE, SUBROTO SAYS + JAKARTA, Oct 20 - Oil prices would skyrocket for a time if +conflict in the Gulf closed the Strait of Hormuz, but oil +supplies could be adjusted to take care of world demand, +Indonesian Energy Minister Subroto said. + He made no explicit reference to the latest U.S. Military +action in the Gulf. + But in an address to a conference of the Indonesian +Petroleum Association, he said, "If worst comes to worst and say +the flow of oil through the Straits of Hormuz is completely +shut off, I believe the world oil supply, given time to adjust, +can take care of the situation." + "But this is not to say that prices, at least for a short +duration, will not skyrocket as speculators take advantage of +the situation," he declared. + Tensions in the Gulf, however, usually had a relatively +short-term impact on prices, he added. + Assessing future price trends, he said, "Short-term spot +prices will probably still fluctuate, but they will most likely +hover around the official Opec price basket of 18 dlrs per +barrel. + "The upward deviations, however, are likely to be greater +than the downward ones." + "The balance between supply and demand in the short term +will still be delicate," he added. "Non-Opec production may still +go up, competing with Opec for the expected additional increase +in world demand." + Subroto, a member of Opec's three-man quota committee which +has been touring cartel members, said speculation may play +havoc with spot prices, but Opec was trying to stabilize the +situation by urging cooperation by non-Opec producers. + In the medium term, non-Opec production would reach a +plateau in the early 1990s, leaving Opec much stronger, he +said. + REUTER + + + +20-OCT-1987 04:34:41.19 +jet +bangladesh + + + + + +Y +f0264reute +u f BC-BANGLADESH-TENDERS-FO 10-20 0059 + +BANGLADESH TENDERS FOR TWO MLN BARRELS PETROLEUM + DHAKA, Oct 20 - Bangladesh Petroleum Corp said it floated +an international tender for imports of two mln barrels of Jet +Kero, Superior Kero and High Speed Diesel for shipment during +January-June 1988. + It said the offer for the petroleum products would be open +until 0600 gmt on November 19. + REUTER + + + +20-OCT-1987 04:48:51.01 +interest + +poehl + + + + +RM V +f0286reute +f f BC-Poehl-says-German-and 10-20 0014 + +****** Poehl says German and international interest rate rises are cause for concern +Blah blah blah. + + + + + +20-OCT-1987 04:49:48.44 + + +poehl + + + + +RM V +f0287reute +f f BC-Bundesbank-has-no-int 10-20 0012 + +****** Bundesbank has no interest in higher capital market rates - Poehl +Blah blah blah. + + + + + +20-OCT-1987 04:53:02.87 +ship +bahrainiran + + + + + +Y +f0289reute +u f BC-IRANIAN-TANKER-REPORT 10-20 0079 + +IRANIAN TANKER REPORTS SIGHTING MINE IN GULF + BAHRAIN, Oct 20 - An Iranian shuttle tanker reported +spotting a floating mine in the central Gulf on Tuesday about +50 miles west of Lavan Island, regional shipping sources said. + The Khark III, owned by the National Iranian Tanker Co, +gave the position of the mine as 27 degrees 14 minutes north, +52.06 east. + There was no indication of measures being taken against the +mine, which is in Iranian territorial waters. + REUTER + + + +20-OCT-1987 04:54:40.64 +acq +uk + + + + + +F +f0290reute +r f BC-FABER-OPEN-FOR-OFFERS 10-20 0093 + +FABER OPEN FOR OFFERS ON MORGAN GRENFELL STAKE + LONDON, Oct 20 - Willis Faber Plc <WIFL.L> chairman and +chief executive David Palmer said the company would consider +any bid for its 20.8 pct shareholding in Morgan Grenfell Group +Plc <MGFL.L> but had not yet received any offers. + "We will entertain any approaches," he told Reuters in reply +to questions, following U.K. Press speculation. + In an earlier statement, Faber said that if an offer were +to be received for its stake in the merchant banking group, "it +would be considered on its merits." + REUTER + + + +20-OCT-1987 04:58:56.26 + + +poehl + + + + +RM V +f0293reute +f f BC-Inflationary-fears-ar 10-20 0011 + +****** Inflationary fears are unjustified and exaggerated, Poehl says +Blah blah blah. + + + + + +20-OCT-1987 04:59:07.79 +acq +ukcanada + + + + + +F +f0294reute +u f BC-CORBY-DISTILLERIES-TO 10-20 0107 + +CORBY DISTILLERIES TO EXPAND IN CANADA + LONDON, Oct 20 - <Corby Distilleries Ltd>, 52 pct owned by +Allied Lyons Plc <ALLD.L> subsidiary <Hiram Walker-Goodman & +Worts> is to buy the spirits business of <McGuinness Distillers +Ltd> of Toronto for 45 mln Canadian dlrs. + McGuinness is a producer and marketer of spirits and also +has exclusive agencies for some imported wines and spirits. + The sale is subject to the approval of the Bureau of +Competition Policy. Michael Jackaman, president and chief +executive officer of Hiram Walker and Allied Vintners, said, +"The acquisition is an excellent one both commercially and +financially." + REUTER + + + +20-OCT-1987 04:59:48.03 +interest +west-germany +poehljames-bakerstoltenberg + + + + +RM V +f0295reute +b f BC-POEHL-SAYS-RATE-RISES 10-20 0088 + +POEHL SAYS RATE RISES ARE CAUSE FOR CONCERN + FRANKFURT, Oct 20 - Rises in West German and international +interest rates are a cause for concern and the Bundesbank has +no interest in higher capital market rates, Bundesbank +President Karl Otto Poehl said. + "We consider the interest rate increase that has occurred +here and internationally to be a problem and cause for concern," +Poehl told an investment conference. + "I would like to stress that the Bundesbank has no interest +in higher capital market rates," he said. + Shortly after Poehl spoke, the Bundesbank announced a +tender for a securities repurchase pact at a fixed rate of 3.80 +pct. + Previous tenders over the last month by interest rate have +seen the allocation rate on these facilities rise to 3.85 pct +at last week's pact from 3.60 on the last fixed-rate tender in +late September. + The Bundesbank's reduction of the key allocation rate to +3.80 from 3.85 pct was heralded Monday by repeated injections +of money market liquidity at between 3.70 and 3.80 pct. + These moves to cap interest rates followed a meeting +between Poehl, Finance Minister Gerhard Stoltenberg and U.S. +Treasury Secretary James Baker Monday in Frankfurt. + Officials said afterwards the three men had reaffirmed +their commitment to the Louvre accord on currency stability. + Over the weekend, criticism by Baker of the tightening in +West German monetary policy had prompted a sharp fall of the +dollar on speculation that Louvre cooperation had ended. + But the dollar rallied on news of Monday's meeting in +nervous trading to trade above 1.79 marks Tuesday. + Poehl said that the recent rise in interest rates was not +due to central bank policy, but to markets' expectations, and +currency developments. + Commenting on the inflationary expectations, Poehl said "You +have to get to the root of the problem, you have to pursue a +policy which reveals that there are no grounds for such fears." + The inflationary fears were unjustified and exaggerated, he +said. + Poehl rebuffed recent U.S. Criticism of West Germany, +saying the Bundesbank had made a substantial contribution to +international cooperation in interest and monetary policy. + The Bundesbank has tolerated an overshooting of its money +supply target, arousing criticism from other quarters, he said. + "Today we still have lower interest rates than at the end of +1986... Quite the contrary of other countries, where interest +rates have risen substantially more," Poehl said. + This had to be taken into account when considering recent +rises in repurchase pact allocation rates, which were due to +rising international money market rates that had spilled over +into the German market, he said. + Poehl expressed surprise that financial markets had so far +ignored improvements in the U.S. Deficits. + "The adjustment process in the U.S. Trade balance is +definitely underway," he said, noting that this was not so +noticeable in absolute figures. + The spectacular improvement in the budget deficit had also +attracted little attention, he said. + REUTER + + + +20-OCT-1987 05:00:49.66 +acq +uk +lawson + + + + +RM +f0296reute +b f BC-LAWSON-SAYS-BP-SHARE 10-20 0108 + +LAWSON SAYS BP SHARE OFFER GOING AHEAD + LONDON, Oct 20 - U.K. Chancellor of the Exchequer Nigel +Lawson said the Government was going ahead with this month's +flotation of British Petroleum Co Plc <BP.L> shares despite the +collapse on international stock markets. + "We are going ahead because the whole issue has been +underwritten - we had it underwritten because there is always a +risk of this sort of thing happening," Lawson said in a BBC +radio interview. + Lawson's remarks came as renewed selling on the London +stock market took BP shares down a further 33p to 283, well +below the 330p price set for the around seven billion stg +issue. + Lawson said the U.K. Economy is fundamentally sound and +added that stock markets had reflected that recently. + "I profoundly believe in the market system as the best way +for securing economic prosperity (but) that does not mean to +say the markets are infallible." + "My advice to small investors...Is to remain calm. There is +absolutely no reason not to do so," Lawson said. + REUTER + + + +20-OCT-1987 05:01:49.86 + + + + + + + +RM +f0300reute +f f BC- 10-20 0014 + +****** Bundesbank sets 35-day securities repurchase tender at fixed rpt fixed 3.80 pct +Blah blah blah. + + + + + +20-OCT-1987 05:03:42.33 + + + + +pse + + +F +f0303reute +f f BC-Paris-share-price-ind 10-20 0010 + +******Paris share price indicator opens 2.31 pct down - official +Blah blah blah. + + + + + +20-OCT-1987 05:05:18.65 + +ukusa +lawson + +lse + + +F +f0305reute +u f BC-LAWSON-CALLS-DEGREE-O 10-20 0114 + +LAWSON CALLS DEGREE OF SHARE FALL ABSURD + LONDON, Oct 20 - U.K. Chancellor of the Exchequer Nigel +Lawson said the severity of the current rout on world stock +markets was an absurd over-reaction sparked on Wall Street by a +spreading lack of confidence in the U.S. Economy. + Lawson said in a BBC radio interview, "This began on Wall +Street. It has a lot to do with the American stock market (and) +a lack of confidence in the U.S. - and some careless talk by +those who should have known better." + In a further wave of selling this morning in London, the +FTSE 100 index had lost a further 233.2 points only 50 minutes +after the official 0800 GMT opening to stand at 1,819.1. + Lawson said a correction on world stock markets was to have +been expected after the bull markets of recent years. "What was +not expected was the severity of the downturn, which quite +frankly is rather absurd." + He said he saw no fundamental signs why the U.S. Economy +should go into recession, adding, "Indeed the possibility of +higher (U.S.) interest rates would certainly in my judgment not +lead the American economy into a recession." + "The only way in which the American economy would go into +recession was if it actually talks itself into recession," he +said. + REUTER + + + +20-OCT-1987 05:06:25.13 + +japan + + + + + +RM AI +f0308reute +u f BC-BANK-OF-JAPAN-SEES-ST 10-20 0114 + +BANK OF JAPAN SEES STEADY ECONOMIC RECOVERY + TOKYO, Oct 20 - The Japanese economy is firmly on the +recovery path, supported by robust domestic demand, the Bank of +Japan said in a regular monthly report. + The report said industrial production is strengthening as +manufacturing companies have almost completed adjustments of +their plant and equipment investment while non-manufacturing +firms have continued to be positive in their capital spending. + Strong domestic demand, such as consumer spending and +housing investment, will more than offset declining exports, +the central bank report said. It also noted the continued rise +in domestic wholesale prices and money supply. + REUTER + + + +20-OCT-1987 05:07:16.01 + + + + +lse + + +RM V +f0311reute +f f BC-London's-FTSE-100-sha 10-20 0011 + +******London's FTSE 100 share index falls below 1,800 - Stock Exchange +Blah blah blah. + + + + + +20-OCT-1987 05:08:54.04 +coconut +philippinesusa + + + + + +G +f0315reute +u f BC-PHILIPPINES-APPLAUDS 10-20 0108 + +PHILIPPINES APPLAUDS DEFEAT OF U.S. LABELLING BILL + By Diane Stormont + MANILA, Oct 20 - The Philippine coconut industry has +greeted with relief the defeat in the U.S. Senate of a bill +requiring some edible oils to be labelled as saturated fats. + The bill, which was defeated by the Senate Agriculture +Committee on Monday, could have cost about 60 mln dlrs a year +in lost exports, the Philippine Coconut Authority (PCA) said. + "Naturally, we welcomed the defeat but there is a chance the +bill will be resurrected and attached as a rider to another +Senate bill," a spokesman for the United Coconut Association of +the Philippines (UCAP). + PCA chairman Jose Romero noted the vote was close, with +eight senators voting for it, 10 against and one abstaining. + The UCAP spokesman said the American Soybean Association +(ASA) had spent about 25 mln dlrs lobbying for the bill. + He said the ASA also had obscured the health issue during +the debate. + "Coconut oil is high in saturated fats, but unlike saturated +animal fats, they do not enter the blood and lymph systems +leaving fatty deposits connected to heart disease," he said. + U.S. Soybean and cottonseed producers had argued that +saturated fats cause heart disease and that the labels would +discourage consumption by health conscious consumers in favour +of domestic unsaturated alternatives. + Opponents of the bill said the proposal discriminated +against imports and would damage the Philippines, Malaysia and +Indonesia. + The Philippines earned 488 mln dlrs from coconut products +in 1986, up from 477 mln in 1985, UCAP figures show. + Exports to the United States for edible and non-edible use +account for about half of that total, PCA's Romero said. + REUTER + + + +20-OCT-1987 05:17:40.79 + +thailand + + + + + +F +f0331reute +u f BC-THAI-STOCKS-PLUNGE-IN 10-20 0091 + +THAI STOCKS PLUNGE IN REACTION TO WORLDWIDE TREND + By Vithoon Amorn + BANGKOK, Oct 20 - Thai stock prices plunged on Tuesday as +nervous investors unloaded shares on reports of steep declines +on major world stock markets. + Brokers said the Securities Exchange of Thailand Index fell +a record 36.64 points, or nearly eight pct, to close at 422.37. + "It's impossible to halt the slide in this situation. The +market just doesn't behave logically," said Sirivat +Voravetvuthikun, executive vice president of Asian Securities +Trading Co Ltd. + But Sirivat said he did not believe the fall would mark the +end of the SET's 16 month bull run, which has accelerated +during the last two months. He expected Thai stocks to +fluctuate widely in the next few weeks. + The slide on Tuesday followed a 13.85 point decline of the +97-stock index on Monday when it closed at 459.01. + Brokers said they were flooded with sell orders when the +market opened this morning and a SET announcement urging +investors not to panic was ignored. + The index reached a record 472.86 last Friday, up 57.7 pct +from end-June and 128.2 pct higher than last December. + SET officials said 77 issues were traded on Tuesday, of +which all but two declined. Of the losers, 68 plummeted the +daily maximum 10 pct allowed by the exchange. Prices on the +special foreign column also fell sharply. + SET vice president Suthichai Chitvanich told reporters the +10 pct floor serves as a restraint, making it unnecessary to +suspend trading should the panic continue. + The Thai exchange has lately been gaining on its own +strength with most buying coming from local investors. + Investors should not be unduly influenced by foreign market +reports, he added. + Suthichai said sound local fundamentals, including low +interest rates and promising economic growth, favoured +investment in the stock market. + The SET also announced it would release third quarter +corporate earnings earlier than expected as part of efforts to +shore up public confidence. + REUTER + + + +20-OCT-1987 05:28:05.60 + + + + +mise + + +F +f0355reute +f f BC-Milan-bourse-opening 10-20 0011 + +******Milan bourse opening delayed one hour to 1200 GMT - official +Blah blah blah. + + + + + +20-OCT-1987 05:31:21.81 +interest +japan + + + + + +RM V +f0357reute +u f BC-TOKYO-STOCK-PLUNGE-CO 10-20 0106 + +TOKYO STOCK PLUNGE COULD FORCE EASIER MONEY POLICY + By Rich Miller + TOKYO, Oct 20 - Plunging Tokyo stock prices will prevent +the Bank of Japan from raising its discount rate and could even +force it to ease monetary policy if the collapse continues, +government and private economists said. + A rise in interest rates now would only serve to spark +further selling of shares that could ultimately have a major +deflationary impact on the real economy, they said. + Although Bank of Japan officials have consistently +maintained that they had no plans to raise the 2.5 pct discount +rate, many in the markets have thought otherwise. + Fears of a rise in the discount rate were fanned by the +central bank's apparent decision last week to countenance +higher rates on commercial bills, dealers said. + But today's stock market collapse -- prices fell nearly 15 +pct -- means that the Bank of Japan would be hard pressed to +raise the discount rate now, despite its concerns about a +renewed outbreak of inflation, dealers and economists said. + Japanese government bond prices rose sharply today as the +markets concluded that the stock market's collapse precluded +the central bank from carrying out the widely-rumoured discount +rate increase. + A senior government economist suggested that both the U.S. +And Japan needed to ease monetary policy now to prevent a +further drop in New York and Tokyo stock prices. "They need to +support the stock and security markets," he said. + But Bank of Japan officials said they saw no need to change +policy for the moment, although one admitted that the central +bank may have to rethink its strategy if Tokyo stock prices +continue to plunge during the rest of the week. + Both government and Bank of Japan economists agreed the +economy is better placed now to cope with the deflationary +impact of plunging stock prices than it was a few months ago. + With the economy recovering strongly, the steep drop in +stock prices is not likely to put a major dent in consumer and +business confidence, one government economist said. + "There will be some impact on the real economy, but it won't +be that big," said another. + Individuals are not heavily invested in stocks on their +own, although they do participate through trust funds and other +investment vehicles. And while many manufacturing firms turned +to financial market investments for profits during last year's +economic downturn, the recent rebound has allowed them to +refocus their attention on their core businesses, he said. + Paradoxically, it is the pick-up in the economy that is +partly to blame for the stock market collapse as companies have +shifted funds away from financial investments to increase +inventories and step up capital spending, one government +economist said. + In deciding what response to make to the steep stock price +drop, the Bank of Japan must first determine whether prices +will continue to fall further and then decide if they pose a +greater economic danger than the threat of higher inflation, +one central bank official said. "That will at least take a +couple of days, if not weeks," he said. + REUTER + + + +20-OCT-1987 05:34:04.54 + + + + +mise + + +F +f0363reute +f f BC-CORRECTED-Milan-Bours 10-20 0014 + +******CORRECTED-Milan Bourse opening delayed an hour to 1000 GMT (NOT 1200 GMT)-official +Blah blah blah. + + + + + +20-OCT-1987 05:43:10.09 + +philippines +aquino + + + + +RM AI +f0379reute +u f BC-AQUINO-SAYS-GROWTH-HA 10-20 0098 + +AQUINO SAYS GROWTH HAS PRIORITY OVER DEBT PAYMENTS + MANILA, Oct 20 - President Corazon Aquino said economic +growth took priority over debt repayments but she sought to +dispel fears that the Philippines would not honour a July +agreement rescheduling 13.2 billion dlrs of debt. + In a speech to 13 major business groups, Aquino said, "Our +policy has been very clear fm the start -- growth must take +priority, for the plain and simple reason that if we have no +money to pay, we can't. And if we starve the nation of +essential services, there may be no one around to honour the +debt." + Aquino said her officials would try to get all 483 creditor +banks to sign the debt rescheduling pact by the November 15 +effective date. + "That should end speculation and remove at least one excuse +for hoarding dollars," Aquino said. + Violent fluctuations in the peso's exchange rate and the +end of a 17-month bull run in local stock markets have +triggered dollar-hoarding. + Aquino said the country's foreign debt, which rose to +nearly 29 billion dlrs in April, was growing even without fresh +borrowing. + Debt servicing took up 40 pct of the budget and 45 pct of +export earnings, Aquino said. Over the next six years, the +Philippines would be paying its creditors 20 billion dlrs while +getting only four billion dlrs in new loans. + Aquino acknowledged there were grave doubts about her +government's ambitious privatisation program. + "There is always an excuse for government not to sell," she +said, but she added: "I want government to get out of business." +She said non-performing assets would be sold in open bidding +and Filipinos and foreigners would compete on equal terms. + REUTER + + + +20-OCT-1987 05:43:53.22 + +ukusa + + + + + +RM +f0380reute +b f BC-E.F.-HUTTON-DENIES-RU 10-20 0113 + +E.F. HUTTON DENIES RUMOURED SOLVENCY PROBLEMS + LONDON, Oct 20 - Brokerage firm E.F. Hutton Group Inc <EFH> +is not facing liquidity problems as a result of the fall on +Wall Street, nor is the firm on the brink of insolvency, London +joint managing director Harry Romney said. + He was replying to Reuter questions about market rumours +that Hutton could be in financial difficulties. + Romney noted the New York-based firm employs 16,000 to +17,000 people worldwide. Questioned on whether Hutton might be +considering cutbacks in line with some other big U.S. +Securities houses, he said Hutton's operations were under +contuous review, but no announcements were imminent. + REUTER + + + +20-OCT-1987 05:46:18.76 +grainrice +philippines + + + + + +G +f0386reute +u f BC-RICE-RESEARCH-INSTITU 10-20 0100 + +RICE RESEARCH INSTITUTE NAMES NEW HEAD + MANILA, Oct 20 - The Manila-based International Rice +Research Institute (IRRI) said West German agricultural +scientist Klaus Lampe will take over as its director-general in +early 1988, succeeding M.S. Swaminathan. + An IRRI statement said Lampe, 56, is currently senior +adviser to the German Agency for Technical Cooperation at +Eschborn and was a former head of the agriculture section of +the Federal Ministry for Economic Cooperation. + It said Swaminathan, who has headed IRRI since 1982, will +concentrate on environmental and agricultural issues. + REUTER + + + +20-OCT-1987 05:46:54.39 + + + + +mise + + +F +f0392reute +b f BC-CONSOB-DELAYS-MILAN-B 10-20 0089 + +CONSOB DELAYS MILAN BOURSE OPENING ONE HOUR + MILAN, Oct 20 - The opening of the Milan bourse and Italy's +nine other stock exchanges has been delayed one hour to 1000 +GMT by stock market regulatory agency Consob. + A Consob spokesman told Reuters the action was taken "to +give operators time to reflect on the agreement between +Treasury Secretary James Baker and West German officials on the +Louvre accord." He did not elaborate. + The Milan Stock Index (MIB), base January 2 equals 1000, +closed down 6.26 pct yesterday. + REUTER + + + +20-OCT-1987 06:07:59.83 + +uk + + +lse + + +RM V +f0436reute +b f BC-STOCK-EXCHAGE-SAYS-NO 10-20 0093 + +STOCK EXCHAGE SAYS NO QUESTION OF HALTING TRADING + LONDON, Oct 20 - A spokeswoman for the London Stock +Exchange said there was no question of trading being suspended +because of the unprecedented three-day drop in prices, which +has seen almost 23 pct wiped off share values. + Trading on the Hong Kong market has been called off until +Monday because of the steep slide on Wall Street amid panic +selling on all the world's stock exchanges. + The Tokyo market was 14.9 pct off last night after a huge +508 point (22.5 pct) fall on Wall Street yesterday. + The Stock Exchange said although the Stock Exchange +Automated Quotation (SEAQ) system was working perfectly, "fast +market" conditions may pevail periodically. + A "fast market" indicator is displayed at the bottom of the +SEAQ screen when the huge volume of activity is delaying prices +from entering the system, making screen prices lag behind the +prevailing market. + Such conditions are reviewed every 30 minutes and at 1000 +GMT were withdrawn and all on screen prices became firm. + The Exchange said the mandatory quote period will still end +at 1600 GMT but depending upon trading activity the market +indices may again be calculated up to 1630 GMT instead of the +usual 1600 GMT. + At 0945 GMT the FTSE 100 share index was down 259.1 points +at 1,793.2, 12.6 pct lower so far today. + REUTER + + + +20-OCT-1987 06:12:19.69 +alum + + + + + + +C M +f0446reute +f f BC-Sept-daily-ave-primar 10-20 0013 + +****** Sept daily ave primary aluminium output 34,900 tonnes, up 400 tonnes, IPAI. +Blah blah blah. + + + + + +20-OCT-1987 06:14:40.08 + + + + + + + +F +f0447reute +f f BC-Blue-Arrow-says-Conse 10-20 0012 + +******Blue Arrow says Conservative Party Chairman Norman Tebbit to join board +Blah blah blah. + + + + + +20-OCT-1987 06:18:31.24 + +south-korea + + + + + +RM +f0462reute +u f BC-SAMSUNG-BOND-GOES-CON 10-20 0118 + +SAMSUNG BOND GOES CONVERTIBLE BUT NO SHARE DEMAND + SEOUL, Oct 20 - The first convertible bond issued by a +South Korean firm overseas -- by Samsung Electronics Co Ltd +<SAMS.SE> -- became eligible for conversion but there was no +demand for shares as the government still bans direct share +ownership by foreigners, a Samsung official said. + "There was no demand from holders, so the lead managers made +no approach to us to issue shares," the official said. + The five pct bond, co-lead managed by S.G. Warburg and +Goldman Sachs Co, raised 20 mln dlrs when issued in 1985. The +only other Korean convertible bonds were issued by Daewoo Heavy +Industries Ltd <DAEW.SE> and <Yukong Ltd>, both in 1986. + REUTER + + + +20-OCT-1987 06:20:40.59 +alum +ukbrazilcuba + + + + + +M +f0470reute +r f BC-GROUNDED-BRITISH-BAUX 10-20 0060 + +GROUNDED BRITISH BAUXITE VESSEL REFLOATED IN ORINOCO + LONDON, Oct 20 - The British bulk carrier Envoy, which ran +aground in the Orinoco river on October 16, was refloated +without lightening on October 19, Lloyds Shipping Intelligence +service said. + The Envoy, 75,453 tonnes dw, was carrying a cargo of 50,000 +tonnes of bauxite from Brazil to Cuba. + REUTER + + + +20-OCT-1987 06:21:43.60 + + + + +zse + + +F +f0472reute +f f BC-Swiss-Stock-Index-fal 10-20 0013 + +******Swiss Stock Index falls 3.7 pct or 38.4 points at opening to 989.5 - official +Blah blah blah. + + + + + +20-OCT-1987 06:27:57.36 + +austriausaussrjapan + +ec + + + +Y +f0483reute +u f BC-EAST,-WEST-APPROVE-NU 10-20 0118 + +EAST, WEST APPROVE NUCLEAR FUSION ENERGY PROJECT + VIENNA, Oct 20 - East and West on Monday decided to go +ahead with an ambitious nuclear fusion project billed as +possibly providing an inexhaustible source of energy, the +International Atomic Energy Agency (IAEA) said. + Representatives of the U.S., The Soviet Union, the European +Community and Japan agreed to develop plans for a revolutionary +thermonuclear reactor, to produce energy not from splitting +atoms as in today's nuclear plants, but by joining them. + Work is due to begin next year at the Institute for Plasma +Physics at the Max Planck Foundation near Munich, West Germany, +and is scheduled for completion by 1990, an IAEA statement +said. + Research into fusion's scientific feasibility has been +under way for many years but the project approved on Monday, +known as International Thremonuclear Experimental Reactor +(ITER) will study if an actual plant could be built. + The project represents an unprecedented display of +East-West scientific cooperation, but a decision will not be +made until its completion on whether an actual reactor would be +jointly constructed or by individual participant countries. + Dieter Sigmar, a leading U.S. Fusion researcher, said last +month that the development of a demonstration plant would cost +several billion dlrs and need at least another 10 years. + Fusion plants would produce little radioactive waste. + While today's nuclear power plants need uranium, mined in +only a few countries and producing dangerous waste, fusion +plants would eventually run only on deuterium, an element +related to hydrogen and available from almost limitless +supplies of sea water, according to experts. + REUTER + + + +20-OCT-1987 06:28:03.88 + +japan +takeshita + + + + +RM +f0484reute +u f BC-TAKESHITA-FACES-TOUGH 10-20 0098 + +TAKESHITA FACES TOUGH ECONOMIC MANAGEMENT JOB + By Tsukasa Maekawa + TOKYO, Oct 20 - Former Finance Minister Noboru Takeshita, +chosen on Monday to be Japan's next prime minister, will face a +tough test in managing Japan's economy from the very start of +his two-year term, economists and businessmen said. + Takeshita told a news conference on Tuesday that he would +do his best to continue the domestic reforms and external +policies of Prime Minister Yasuhiro Nakasone. + However, leading Japanese businessmen called on Takeshita +to outdo Nakasone by showing stronger leadership. + "Takeshita should not merely follow the Nakasone policies +but should cope with mounting economic issues with a new vision +and policies," Takashi Ishihara, chairman of the Japan Committee +for Economic Development, said in a statement. + Economists generally agreed that there will be no major +changes in Japan's economic policies under a new leader. + However, expectations are high among major industries for +new initiatives by Takeshita for immediate and effective +measures to solve economic problems such as trade friction with +the U.S., Administrative and tax reforms, and soaring land +prices. + Eishiro Saito, chairman of the Federation of Economic +Organisations (Keidanren), urged Takeshita to succeed in +unifying the ruling Liberal Democratic Party as soon as +possible to tackle difficult tasks. + Regarding foreign economic polices, Yoshitoki Chino, +chairman of the Japan Securities Dealers Association, said +Takeshita should come up with economic measures well before +economic issues develop into problems. + Behind those calls on Takeshita for prompt action are +doubts about his capability in handling international issues +due to his lack of experience in diplomacy, economists said. + Economists said foreign countries should be patient with +Takeshita, who is widely known as an ultra-cautious politician. + Takeshita has repeatedly said, "There should be consensus +before taking action." + Takeshita has so far failed to unveil specific measures to +reduce Japan's huge trade surplus, economists said. + He has said Japan will continue to stimulate the economy +and to open the market wider to foreign products. + REUTER + + + + diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-021.sgm clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-021.sgm --- clucene-core-0.9.21b/src/test/data/reuters-21578/reut2-021.sgm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578/reut2-021.sgm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,2002 @@ + + +19-OCT-1987 15:37:46.03 + + + + + + + +F +f2882reute +f f BC-CITYFED-FINANCI 10-19 0013 + +******CITYFED FINANCIAL CORP SAYS IT CUT QTRLY DIVIDEND TO ONE CENT FROM 10 CTS/SHR +Blah blah blah. + + + + + +19-OCT-1987 15:35:53.55 +crudeship +bahrainiranusa + + + + + +Y +f2873reute +r f AM-GULF-PLATFORM 10-19 0101 + +HUGE OIL PLATFORMS DOT GULF LIKE BEACONS + By ASHRAF FOUAD + BAHRAIN, Oct 19 - Huge oil platforms dot the Gulf like +beacons -- usually lit up like Christmas trees at night. + One of them, sitting astride the Rostam offshore oilfield, +was all but blown out of the water by U.S. Warships on Monday. + The Iranian platform, an unsightly mass of steel and +concrete, was a three-tier structure rising 200 feet (60 +metres) above the warm waters of the Gulf until four U.S. +Destroyers pumped some 1,000 shells into it. + The U.S. Defense Department said just 10 pct of one section +of the structure remained. + U.S. helicopters destroyed three Iranian gunboats after an +American helicopter came under fire earlier this month and U.S. +forces attacked, seized, and sank an Iranian ship they said had +been caught laying mines. + But Iran was not deterred, according to U.S. defense +officials, who said Iranian forces used Chinese-made Silkworm +missiles to hit a U.S.-owned Liberian-flagged ship on Thursday +and the Sea Isle City on Friday. + Both ships were hit in the territorial waters of Kuwait, a +key backer of Iraq in its war with Iran. + Henry Schuler, a former U.S. diplomat in the Middle East +now with CSIS said Washington had agreed to escort Kuwaiti +tankers in order to deter Iranian attacks on shipping. + But he said the deterrence policy had failed and the level +of violence and threats to shipping had increased as a result +of U.S. intervention and Iran's response. + The attack on the oil platform was the latest example of a +U.S. "tit-for-tat" policy that gave Iran the initiative, said +Harlan Ullman, an ex-career naval officer now with CSIS. + He said with this appraoch America would suffer "the death +of one thousand cuts." + But for the United States to grab the initiative +militarily, it must take warlike steps such as mining Iran's +harbors or blockading the mouth of the Gulf through which its +shipping must pass, Schuler said. + He was among those advocating mining as a means of bringing +Iran to the neogtiating table. If vital supplies were cut off, +Tehran could not continue the war with Iraq. + Ullman said Washington should join Moscow in a diplomatic +initiative to end the war and the superpowers should impose an +arms embargo against Tehran if it refused to negotiate. + He said the United States should also threaten to mine and +blockade Iran if it continued fighting and must press Iraq to +acknowledge responsibility for starting the war as part of a +settlement. + Iranian and Western diplomats say Iraq started the war by +invading Iran's territory in 1980. Iraq blames Iran for the +outbreak of hostilities, which have entailed World War I-style +infantry attacks resulting in horrific casualties. + Each side has attacked the others' shipping. + Reuter + + + +19-OCT-1987 15:34:40.05 +acq + + + + + + +F +f2863reute +b f BC-CCR-VIDEO-SAYS 10-19 0015 + +******CCR VIDEO SAYST RECEIVED OFFER TO NEGOTIATE A TAKEOVER BY INTERCEP INVESTMENT CORP +Blah blah blah. + + + + + +19-OCT-1987 15:32:25.38 + +canada + + + + + +E F +f2855reute +b f BC-GM-<GM>-CANADA-UNIT-M 10-19 0096 + +GM <GM> CANADA UNIT MAJOR OFFER ACCEPTED BY UNION + TORONTO, Oct 19 - The Canadian Auto Workers' Union said it +accepted an economic offer from the Canadian division of +General Motors Corp <GM> in contract negotiations. + But union president Bob White said many local issues at the +11 plants in Ontario and Quebec still remained unresolved ahead +of Thursday's deadline for a strike by 40,000 workers. + "It minimizes the possibility of a strike," White told +reporters. + However, "if we don't have local agreements settled by +Thursday, there will be a strike," he said. + The local issues still unresolved involved health care, +skilled trades and job classifications, White said. + GM Canada negotiator Rick Curd said he believed a strike +would be avoided. + "Even though there are some tough issues to be resolved +we're on the right schedule to meet the target," Curd said. + "I'm very pleased with the state of the negotiations," he +said. + Union membership meetings have been scheduled for the +weekend in case a tentative settlement, said White. + White said the union has also received assurances that a +job protection pact negotiated with GM workers in the U.S. does +not threaten Canadian jobs. + The economic offer for a three-year pact largely matches +agreements at Ford <F> and Chrysler <C> in Canada, which +include inflation-indexed payments for future retirees and +fixed annual payments for current retirees. + It also gives workers wage increases of three pct +immediately and 1.5 pct in each of the second and third years. + Reuter + + + +19-OCT-1987 15:32:11.59 + +canada + + + + + +E F +f2854reute +u f BC-CANADA-DEVELOPMENT-UN 10-19 0092 + +CANADA DEVELOPMENT UNIT <CDC.TO> REFINANCES + SARNIA, Ontario, Oct 19 - Canada Development Corp said its +<Polysar Ltd> unit completed a refinancing package worth about +830 mln Canadian dlrs. + The company said the financing, which involves 24 banks +and four syndicated loans, consists of a 380 mln Canadian dlr +revolver, a 200 mln Canadian dlr European medium term loan, a +149 mln Canadian dlr revolver and a 100 mln Canadian dlr +operating loan. + The company said the refinancing will reduce borrowing +costs, in addition to having other benefits. + Reuter + + + +19-OCT-1987 15:31:35.28 +crudeship +bahrainusairan + + + + + +C +f2849reute +u f BC-/DIPLOMATS-CALL-U.S. 10-19 0110 + +DIPLOMATS CALL U.S. ATTACK ON OIL RIG RESTRAINED + By Ian MacKenzie + BAHRAIN, Oct 19 - A U.S. attack on an Iranian oil platform +in the Gulf on Monday appeared to be a tit-for-tat raid +carefully orchestrated not to be too provocative or upset Arab +allies, Western diplomats in the region said. + U.S. Defence Secretary Caspar Weinberger said Monday that +U.S. Warships destroyed the oil platform in the southern Gulf +in response to a missile strike on the American-registered +Kuwaiti tanker Sea Isle City in Kuwaiti waters on Friday. + "We consider the matter closed," he said, a signal the U.S. +administration did not want the Gulf crisis to escalate. + Iran had warned the United States earlier in the day +against exacerbating the Gulf crisis, saying military action +would endanger American interests. + Following the raid, a okesman for Tehran's War +Information Headquarters vowed to avenge the attack with a +"crushing blow." + "The United States has entered a swamp from which it can in +no way get out safely," Tehran Radio quoted him as saying. + Diplomats noted, however, Iran was also seeking to avoid +ostracism by Arab states due to meet at a summit in Amman on +November 8 and discuss the Iran-Iraq war. + Iranian Prime Minister Mir-Hossein Mousavi is currently in +Damascus, and diplomats said he would seek Syrian help in +preventing a total Arab breach with Tehran. + Further escalation of the war threatening the Gulf Arab +states could work against Tehran at the Amman gathering, they +said. + "The ball is in Iran's court now. It's up to Tehran to +respond one way or the other," a diplomat said. + President Ronald Reagan warned Iran of stronger American +countermeasures if the military escalation continued. + Western diplomats and military sources in the area said +shelling the platform appeared to be the least provocative act +the United States could have taken once it had decided to +retaliate for the tanker attack, blamed by both the Americans +and Kuwaitis on Iran. + "It's interesting that they chose something in international +waters because it doesn't implicate any other nation," one +diplomat said. "This was better for U.S. Relations with the Gulf +Arab states, particularly Kuwait." + Commented another diplomat: "Kuwait must be happy that the +U.S. Has done something, but relieved that Faw was not attacked +on its doorstep." + One source said of the attack on the oil platform: "They +managed to warn off the crew and hit something that was the +least nuisance to everybody." + A diplomat commented: "They were very clever in the place +they chose. It gets attention, but it hasn't devastated +anything because it wasn't working in the first place." + A senior Arab banker in the area said after the news broke: +"This was a good, measured response without risking a flare-up +... It is a face-saving response (for the Americans)." + Reuter + + + +19-OCT-1987 15:30:22.56 +acq +usafrance + + + + + +F +f2842reute +r f BC-BROWN-DISC-TO-BUY-RHO 10-19 0076 + +BROWN DISC TO BUY RHONE-POULENC <RHON.PA> UNIT + COLORADO SPRINGS, Colo., Oct 19 - Brown Disc Products Co +Inc, a unit fo Genevar Enterprises Inc, said it has purchased +the ongoing business, trademarks and certain assets of +Rhone-Poulenc's Brown Disc Manufacturing unit, for undisclosed +terms. + Rhone-Poulenc is a French-based chemical company. + Under the agreement, Rhone-Poulenc will supply magnetic +tape and media products to Brown Disc Products. + Reuter + + + +19-OCT-1987 15:28:27.68 + + + + + + + +V RM +f2834reute +f f BC-DOW-SINKS-TO-LO 10-19 0011 + +******DOW SINKS TO LOWEST LEVEL OF THE YEAR, DOWN 370 POINTS TO 1876 +Blah blah blah. + + + + + +19-OCT-1987 15:27:23.12 + +usa + + + + + +F +f2832reute +h f BC-LANE-TELECOMMUNICATIO 10-19 0080 + +LANE TELECOMMUNICATIONS PRESIDENT RESIGNS + HOUSTON, Oct 19 - Lane Telecommunications Inc <LNTL.O> said +Richard Lane, its president and chief operating officer, +resigned effective Oct 23. + Lane founded the company in 1976 and has been its president +since its inception, the company said. + He said he resigned to pursue other business interests. + Kirk Weaver, chairman and chief executive officer, said +Lane's resignation was amicable. + No replacement has been named. + Reuter + + + +19-OCT-1987 15:24:34.02 + +usa + + + + + +F +f2824reute +d f BC-PERKIN-ELMER-<PKN>-WI 10-19 0072 + +PERKIN-ELMER <PKN> WINS EPA CONTRACT + NORWALK, Conn., Oct 19 - Perkin-Elmer Corp said it won a +contract to provide laboratory information management systems +to the Enviromental Protection Agency's 10 regional +laboratories. + The value and the exact duration of the contract was not +disclosed. + The company said the contract will include hardware, +software, installation, support services, and software analyst +consultations. + Reuter + + + +19-OCT-1987 15:23:44.84 + +usa + + + + + +F +f2822reute +s f BC-WHIRLPOOL-CORP-<WHR> 10-19 0026 + +WHIRLPOOL CORP <WHR> REG QTLY DIV + BENTON HARBOR, MICH., Oct 19 - + Qtly div 27-1/2 cts vs 27-1/2 cts prior + Pay December 31 + Record December Four + Reuter + + + +19-OCT-1987 15:23:41.70 +earn +usa + + + + + +F +f2821reute +d f BC-CONSOLIDATED-FREIGHTW 10-19 0045 + +CONSOLIDATED FREIGHTWAYS INC <CNF> 3RD QTR NET + PALO ALTO, Calif., Oct 19 - + Shr 43 cts vs 63 cts + Net 16,362,000 vs 24,325,000 + Revs 589.3 mln vs 549.1 mln + Nine Mths + Shr 1.40 dlrs vs 1.73 dlrs + Net 54,011,000 66,591,000 + Revs 1.68 1.58 billion + Reuter + + + +19-OCT-1987 15:23:36.33 +crudeship +usairaniraqkuwait + + + + + +Y RM +f2820reute +u f AM-GULF-FUTURE 10-19 0081 + +LATEST ATTACK SEEN POINTING UP DILEMMAS FOR US + By CHRISTOPHER HANSON + WASHINGTON, Oct 19 - Military experts say the United States +faces a dilemma in the Gulf following U.S. destruction of an +Iranian oil platform in retaliation for an attack on a +U.S.-flagged tanker. + The experts told Reuters Tehran holds the initiative and is +likely to control the tempo and direction of the conflict as +long as America simply reacts to Iranian attacks by launching +limited retaliatory strikes. + But if Washington seizes the initiative with bolder steps +-- such as mining Iran's harbors, blockading its shipping, or +destroying key bases -- it could find itself in a major war. + "Iran is in the driver's seat in an absolute sense as the +cycle of attack and retaliation continues," said Fred Axelgard, +a Gulf War expert with the private Center for Strategic and +International Studies (CSIS). + "It's like a Greek tragedy," said retired Adm. Eugene Carroll +of Washington's private Center for Defense Information (CDI) +think tank. + Some Middle East experts say the only way out is for +Washington to join forces with Moscow in pressing for an end to +the war between Iran and Iraq. + They say it is not feasible for America to withdraw its +30-ship force from the Gulf area, where the Navy began +escorting U.S.-flagged Kuwaiti tankers in July. Withdrawal +would give the appearance of being chased away by Iran, which +President Reagan could never accept. + U.S. Defense Secretary Caspar Weinberger told a Pentagon +news conference the destroyers Kidd, Young, Leftwich and Hoel +fired about 1,000 rounds of five-inch shells at Iran's Rostam +oil rig 120 miles east of Bahrain beginning at about 1400 Gulf +time (0700 EDT) on Monday. + Weinberger said the platform had been used as a military +base by Iran and that the attack responded to an Iranian +Silkworm missile strike on the U.S.-flagged Kuwaiti tanker Sea +Isle City on Friday. + Iranians manning the platform were warned in advance and +allowed to escape. + "We do not seek further confrontation with Iran, but we will +be prepared to meet any escalation of military action by Iran +with stronger countermeasures," Weinberger said. + "We consider this matter closed," he said. + Analysts ranging from the liberal CDI to conservatives +agreed the U.S. reaction was measured, reasonable and did not +escalate the conflict unduly. But they said the question was +whether Iran would consider the matter closed. It had not taken +this view after earlier clashes. + Reuter + + + +19-OCT-1987 15:23:02.47 +earn +usa + + + + + +F +f2817reute +d f BC-ROCHESTER-TELEPHONE-C 10-19 0044 + +ROCHESTER TELEPHONE CORP <RTC> 3RD QTR NET + ROCHESTER, N.Y., Oct 19 - + Shr 96 cts vs 87 cts + Net 10.8 mln vs 9,671,000 + Revs 103.9 mln vs 97.5 mln + Nine mths + Shr 2.73 dlrs vs 2.62 dlrs + Net 30.7 mln vs 29.3 mln + Revs 325.7 mln vs 302.8 mln + Reuter + + + +19-OCT-1987 15:21:54.33 + +usa + + + + + +F +f2815reute +h f BC-NATIONAL-CITY-<NCTY.O 10-19 0106 + +NATIONAL CITY <NCTY.O> UNIT BEGINS NEW SERVICE + CLEVELAND, Oct 19 - National City Corp's National City Bank +unit said it has begun a personal computer-based financial +management service for small businesses. + The service, the InTouch Financial Manager, is based on a +personal computer system develoed by <Harbinger Comput +Services> of Atlanta, and is licensed in Ohio by <Money Station +Inc>, an electronic funds transfer network. + National City said the service will allow businesses to use +a personal computer and a local telephone call to communicate +with their bank to initiate transactions and to receive data +anmessages. + Reuter + + + +19-OCT-1987 15:20:42.71 +earn +usa + + + + + +F +f2813reute +r f BC-SOUTH-CAROLINA-NATION 10-19 0054 + +SOUTH CAROLINA NATIONAL CORP <SCNC.O> 3RD QTR + COLUMBIA, S.C., Oct 19 - + Shr 64 cts vs 55 cts + Net 14.0 mln vs 11.8 mln + Nine mths + Shr 1.83 dlrs vs 1.53 dlrs + Net 39.7 mln vs 32.7 mln + Assets 4.65 billion vs 4.53 billion + Loans 3.24 billion vs 2.92 billion + Deposits 3.32 billion vs 3.15 billion + Reuter + + + +19-OCT-1987 15:19:34.63 +earn +usa + + + + + +F +f2809reute +u f BC-MARINE-CORP-<MCOR.O> 10-19 0056 + +MARINE CORP <MCOR.O> 3RD QTR NET + SPRINGFIELD, Ill., Oct 19 - + Shr 30 cts vs 30 cts + Net 1,804,000 vs 1,800,000 + Nine mths + Shr 89 cts vs 79 cts + Net 5,334,00 vs 4,496,000 + NOTE: Earnings per share reflect initial public offering of +534,750 common shares in March 1986 and 2-for-1 stock splits in +January and June 1986. + Reuter + + + +19-OCT-1987 15:18:52.46 +crude +uknorway + + + + + +F Y +f2807reute +r f BC-STATOIL-AWARDS-VESLEF 10-19 0110 + +STATOIL AWARDS VESLEFRIKK OIL FIELD CONTRACTS + LONDON, Oct 19 - Norwegian state oil company Den Norske +Stats Oljeselskap (Statoil) signed contracts worth a total of +1.5 billion Norwegian crowns in connection with the development +of the Veslefrikk oil field, Statoil said. + Moss Rosenberg Verft of Stavanger has been awarded a +contract to convert the the drilling platform West Vision to a +floating production platform. The work is to be completed in +the summer of 1989. + Aker Verdal has been awarded a contract for the +engineering, purchasing and construction of the steel jacket +for the wellhead platform, also to be completed in 1989, +Statoil said. + Reuter + + + +19-OCT-1987 15:17:20.73 +acq +uk + + + + + +F Y +f2798reute +h f BC-U.K.-TREASURY-CONFIRM 10-19 0106 + +U.K. TREASURY CONFIRMS BP SALE TO GO AHEAD + LONDON, Oct 19 - The British Treasury confirmed that the +sale of British Petroleum Co Plc will go ahead as planned, +despite Monday's stock market crash which forced BP below the +330p a share set for the 7.2 billion stg issue. + "The government are not considering terminating the BP +offer. The offer has been fully underwritten," a Treasury +spokesman said. + The issue, which remains open until October 28, was fully +underwritten last week when the issue price was set. + BP shares closed down 33p at 317p as the FT-SE 100 share +index crashed a record 249.6 points, more than 10 pct. + Reuter + + + +19-OCT-1987 15:14:42.04 + +ugandaegypt + + + + + +RM +f2787reute +r f AM-UGANDA-EGYPT 10-19 0108 + +EGYPT TO BUILD HOUSING ESTATES AND ROADS FOR UGANDA + KAMPALA, Oct 19 - Egypt has agreed to build two housing +estates and two new roads in Uganda worth a total of 295 +million dollars, Egyptian commercial attache Muhammud el Tahan +said. + He said Egyptian companies will build 8,000 housing units +in Kampala and reconstruct the roads between Fort Portal and +Bundibugyo near the Zaire border in western Uganda and between +Kapchorwa and Swam near Mount Elgon in the east of the country. +Uganda would repay 70 per cent of the Egyptian Government +credit to finance the projects in the form of barter goods and +30 per cent in hard currency, Tahan said. + Reuter + + + +19-OCT-1987 15:12:27.51 + + + + + + + +E F +f2781reute +f f BC-UNION-ACCEPTS-G 10-19 0013 + +******UNION ACCEPTS GM CANADA'S ECONOMIC OFFER - MANY LOCAL ISSUES UNRESOLVED +Blah blah blah. + + + + + +19-OCT-1987 15:10:34.40 +earn +usa + + + + + +F +f2773reute +d f BC-HARMAN-INTERNATIONAL 10-19 0044 + +HARMAN INTERNATIONAL <HIII.O> 1ST QTR SEPT 30 + WASHINGTON, Oct 19 - + Shr 30 cts vs 26 cts + Net 2,534,000 vs 1,695,000 + Revs 98.8 mln vs 67.1 mln + Avg shrs 8,447,000 vs 6,563,000 + NOTE: full name of company is harman international +industries inc. + Reuter + + + +19-OCT-1987 15:10:11.16 +money-fx +west-germany + + + + + +RM A +f2771reute +u f BC-GERMAN-BANKER-CALLS-F 10-19 0107 + +GERMAN BANKER CALLS FOR SPECIAL MONETARY MEETING + BONN, Oct 19 - Finance ministers from major industrial +nations should hold a special meeting to deal with the U.S. +Dollar's sharp decline, Helmut Geiger, president of the West +German savings bank association, said. + Geiger told Reuters: "Finance ministers should meet soon to +take confidence-building measures to limit the damage caused by +the dollar's fall." + Separately, Geiger told Bild newspaper in an interview +released ahead of publication on Tuesday that the lower dollar, +which had been artificially talked down by U.S. officials, +would damage West German exports and cost jobs. + Reuter + + + +19-OCT-1987 15:07:16.28 + +usa + + + + + +F A RM +f2754reute +r f BC-FIRST-BOSTON-<FBC>-ST 10-19 0092 + +FIRST BOSTON <FBC> STRATEGIC REVIEW IS UNDERWAY + NEW YORK, Oct 19 - First Boston Inc said it is conducting a +strategic review of its operations as part of a general policy +to periodically evaluate its business plans. + The company said it is too early to predict the outcome of +the review, although it does not expect radical changes in its +organization. + Salomon Inc <SB> last week completed a strategic review +that resulted in substantial layoffs. + Other brokerage firms are either engaged in reviews or have +made major personnel cutbacks. + Reuter + + + +19-OCT-1987 15:07:01.53 + + + + +nyse + + +V RM +f2752reute +f f BC-NYSE-TRADES-MOR 10-19 0010 + +******NYSE TRADES MORE THAN 500 MLN SHARES IN RECORD VOLUME +Blah blah blah. + + + + + +19-OCT-1987 15:06:04.62 + +usa + + + + + +F +f2750reute +s f BC-FEDERAL-SIGNAL-CORP-< 10-19 0025 + +FEDERAL SIGNAL CORP <FSS> REG QTLY DIV + OAK BROOK, ILL., Oct 19 - + Qtly div 20 cts vs 20 cts prior + Pay January Seven + Record December 17 + Reuter + + + +19-OCT-1987 15:06:01.13 + +usa + + + + + +F +f2749reute +d f BC-ENTERTAINMENT-MARKETI 10-19 0061 + +ENTERTAINMENT MARKETING <EM> HEAD TO BUY SHARES + HOUSTON, Oct 19 - Elias Zinn, chairman and chief executive +of Entertainment Marketing Inc, said he planned to personally +purchase up to 500,000 shares of Entertaiment Marketing common +stock from time to time in the open market. + Zinn said his purchases would be subject to availability +and acceptable price levels. + Reuter + + + +19-OCT-1987 15:05:55.95 +earn +usa + + + + + +F +f2748reute +r f BC-THE-BANKING-CENTER-<T 10-19 0053 + +THE BANKING CENTER <TBCX.O> 3RD QTR NET + WATERBURY, Conn., Oct 19 - + Shr 25 cts + Net 3,081,000 vs 2,063,000 + Nine months + Shr 86 cts + Net 10.5 mln vs 6,966,000 + Assets 1.43 billion vs 1.30 billion + Deposits 912.5 mln vs 875.8 mln + NOTE: Company converted to a stock savings bank on Aug 13, +1986. + 1986 results include operations of Realtech Realtors, which +was acquired in 1986. + 1987 results include operations of Burgdorff Realtors, +acquired in December 1986; Cornerstone Mortgage Co, acquired in +July 1987; Centerbank Mortgage Co, acquired in July 1987; and +Center Capital Corp, formed in August 1987. + Reuter + + + +19-OCT-1987 15:05:50.99 + +usa + + + + + +F +f2747reute +r f BC-ROTO-ROOTER-<ROTO.O> 10-19 0072 + +ROTO-ROOTER <ROTO.O> SEES IMPROVED 4TH QTR NET + CINCINNATI, Ohio, Oct 16 - Roto-Rooter Inc said it expects +fourth quarter profits to exceed the 22 cts a share reported +for the final quarter of 1986 and the 23 cts earned in 1987's +third quarter. + It reported the third quarter profit was up pct from the +20 cts a share earned during the quarter in 1986. Nine month +profits were up 23 pct to 64 cts a share from 52 cts last year. + Reuter + + + +19-OCT-1987 15:05:42.30 +acq +usa + + + + + +F +f2745reute +u f BC-CALMAT-<CZM>-SUES-IND 10-19 0082 + +CALMAT <CZM> SUES INDUSTRIAL EQUITY + LOS ANGELES, Oct 19 - CalMat Co said it filed suit in Los +Angeles Superior Court against Industrial Equity (Pacific) Ltd, +against certain of its affiliates and against Ronald Langley, +president of Industrial Equity's North American operations. + The company said its sut charges that Langley +missapropriated material non-public information acquired in his +capacity as a CalMat director and used the information for the +benefit of Industrial Equity. + According to its more recent amendment to its Schedule 13D, +Industrial Equity owned about 19.17 pct of CalMat's stock at +October 14, CalMat said. + It said Industrial has also stated that it intends to +pursue a possible business combination in the near future. + Reuter + + + +19-OCT-1987 15:05:31.45 +trade +usaussr +reaganverity + + + + +F A RM +f2743reute +r f AM-REAGAN-VERITY 10-19 0104 + +REAGAN CALLS FOR VIGILANCE ON CERTAIN EXPORTS + WASHINGTON, Oct 19 - President Reagan said the Commerce +Department should be vigilant in preventing the flow of +strategic technology from reaching the the Soviet Union and +other communist countries. + He was speaking at the swearing in of C. William Verity as +Secretary of the Commerce Department. + Verity said the U.S. should make certain that militarily +sensitive high technology does not wind up in communist +nations. But he also said the U.S. must reduce the list of +products of a nontechnological nature, thereby allowing +manufacturers to increase exports and jobs. + Reuter + + + +19-OCT-1987 15:02:51.54 +earn +usa + + + + + +F +f2726reute +d f BC-WATTS-INDUSTRIES-INC 10-19 0032 + +WATTS INDUSTRIES INC <WATTA.O> 1ST QTR SEPT 27 + ANDOVER, Mass., Oct 19 - + Shr 36 cts vs 27 cts + Net 4,538,000 vs 3,160,000 + Sales 41.8 mln vs 32.8 mln + Avg shrs 12.6 mln vs 11.9 mln + Reuter + + + +19-OCT-1987 15:01:06.27 + +usa + + + + + +F +f2712reute +h f BC-WHIRLPOOL-<WHR>-NAMES 10-19 0070 + +WHIRLPOOL <WHR> NAMES NEW CHAIRMAN + BENTON HARBOR, MICH., Oct 19 - Whirlpool Corp said it named +David Whitwam to the additional position of chairman, effective +December One, replacing Jack Sparks, who retires November 30. + It said Whitwam was elected president and chief executive +officer effective July One. + Sparks will continue to serve on Whirlpool's board of +directors as chairman of the finance committee. + Reuter + + + +19-OCT-1987 14:59:03.82 +earn +usa + + + + + +F +f2706reute +h f BC-MONITERM-CORP-<MTRM.O 10-19 0084 + +MONITERM CORP <MTRM.O> 3RD QTR OPER NET + MINNETONKA, MINN., Oct 19 - + Oper shr profit 13 cts vs nil + Oper net profit 612,806 vs profit 2,363 + Sales 8,317,933 vs 2,823,243 + Nine mths + Oper shr profit 32 cts vs loss four cts + Oper net profit 1,464,338 vs loss 161,315 + Sales 20.3 mln vs 8,241,463 + NOTE: 1987 earnings exclude gains from utilization of tax +loss carryforwards of 321,980 dlrs, or seven cts a share in the +quarter and 772,285 dlrs, or 17 cts a share for the nine months + Reuter + + + +19-OCT-1987 14:57:51.62 + +usa + + + + + +F +f2700reute +h f BC-SEEQ-<SEEQD.O>,-NATIO 10-19 0082 + +SEEQ <SEEQD.O>, NATIONAL SEMI <NSM> IN ACCORD + SANTA CLARA, Calif., Oct 19 - Seeq Technology Corp and +National Semiconductor Corp said they signed a four-year +exclusive technology licensing and manufacturing agreement. + The agreement allows the two companies to share technology +and marketing rights to Seeq's 512-kilobit and one-megabit +semiconductors and for National Semiconductor's 256-Kb FLASH +EEPROMs, the companies said. + Financial terms of the arrangement were not disclosed. + Reuter + + + +19-OCT-1987 14:57:12.59 +earn +usa + + + + + +F +f2697reute +d f BC-ERIE-LACKAWANNA-INC-< 10-19 0047 + +ERIE LACKAWANNA INC <ERIE.O> 3RD QTR NET + CLEVELAND, Oct 19 - + Shr 1.32 dlrs vs 1.59 dlrs + Net 1,217,649 vs 1,471,824 + Total income 1,896,018 vs 2,278,642 + Nine mths + Shr 4.92 dlrs vs 5.38 dlrs + Net 4,553,380 vs 4,979,626 + Total income 6,918,266 vs 8,134,313 + Reuter + + + +19-OCT-1987 14:56:58.45 +earn +usa + + + + + +F +f2696reute +h f BC-QUANTUM-CORP-<QNTM.O> 10-19 0043 + +QUANTUM CORP <QNTM.O> 2ND QTR SEPT 27 NET + MILPITAS, Calif., Oct 19 - + Shr 44 cts vs 30 cts + Net 4,057,000 vs 2,716,000 + Sales 49.5 mln vs 29.6 mln + Six Mths + Shr six cts vs 55 cts + Net 518,000 vs 5,167,000 + Sales 89.7 mln vs 54.9 mln + Reuter + + + +19-OCT-1987 14:56:46.00 +earn +usa + + + + + +F +f2695reute +w f BC-TERMIFLEX-CORP-<TFLX. 10-19 0038 + +TERMIFLEX CORP <TFLX.O> 1ST QTR SEPT 30 NET + MERRIMACK, N.H., Oct 19 - + Shr five cts vs seven cts + Net 64,652 vs 96,157 + Sales 1,205,321 vs 1,499,591 + NOTE: Backlog three mln dlrs vs 2,600,000 as of June 30, +1987. + Reuter + + + +19-OCT-1987 14:56:31.92 +acq +usa + + + + + +F +f2692reute +s f BC-DURAKON-<DRKN.O>-TO-M 10-19 0050 + +DURAKON <DRKN.O> TO MAKE ACQUISITION + LAPEER, Mich., Oct 19 - Durakon Industries Inc said it has +entered into a definitive agreement to acquire DFM Corp, a +maker of bug and gravel protective shields for trucks and cars, +for an undisclosed amount of cash and debentures, retroactive +to September One. + Reuter + + + +19-OCT-1987 14:56:25.95 +acq +usa + + + + + +F +f2691reute +r f BC-CHARTER-CRELLIN 10-19 0089 + +ATLANTIS <AGH> MAY BID FOR CHARTER-CRELLIN<CRTR.O> + WASHINGTON, Oct 19 - Atlantis Group Inc said it bought +100,000 shares of Charter-Crellin Inc common stock, or 6.3 pct +of the total outstanding, and may seek control in a negotiated +transaction. + In a filing with the Securities and Exchange Commission, +Atlantis said it has informally discussed a business +combination with Charter-Crellin management. + But the company said it has not held negotiations with +Charter-Crellin and does not intend to initiate further +discussions. + Pending development of specific proposals, Atlantis said it +will continue to purchase additional Charter-Crellin shares in +private or open market transactions depending on a range of +factors including the market price of the stock. + Atlantis said it bought its Charter-Crellin common stock in +open market transactions between September 22 and October 7 at +14.91 dlrs to 15.62 dlrs a share, or for a total of about 1.51 +mln dlrs. + Reuter + + + +19-OCT-1987 14:56:02.82 +acq +usa + + + + + +F +f2690reute +s f BC-ALLWASTE-<ALWS.O>-TO 10-19 0066 + +ALLWASTE <ALWS.O> TO MAKE ACQUISITION + HOUSTON, Oct 19 - Allwaste Inc said it has agreed in +principle to acquire a privately-held firm that performs +interior cleaning services for tank-trailers for 1,300,000 +common shares. + It said the firm, which it did not name, earned about +1,500,000 dlrs pretax for the first nine mons of 1987. + The company said closing is expected by October 31. + Reuter + + + +19-OCT-1987 14:55:53.51 +earn +usa + + + + + +F +f2689reute +d f BC-TRAVELERS-REAL-ESTATE 10-19 0051 + +TRAVELERS REAL ESTATE <TRAT.O> 3RD QTR NET + BOSTON, Oct 19 - + Shr 18 cts vs 27 cts + Net 444,387 vs 676,593 + Revs 549,437 vs 764,901 + Nine mths + Shr 67 cts vs 81 cts + Net 1,690,670 vs 2,031,937 + Revs 1,986,938 vs 2,302,278 + NOTE: Full name is Travelers Real Estate Investment Trust + Reuter + + + +19-OCT-1987 14:55:34.56 + +usa + + + + + +F +f2687reute +d f BC-SAFEGUARD-<SFGD.O>-TO 10-19 0070 + +SAFEGUARD <SFGD.O> TO BUY BACK MORE SHARES + ANAHEIM, Calif., Oct 19 - Safeguard Health Enterprises Inc +said its board authorized management to step up its stock +repurchase program by doubling the repurchase ceiling to 1.6 +mln shares. + The company also said it has already purchased 691,000 +shares through September 30 under the previous authorization to +buy 800,000 shares, or 10 pct of the stock then outstanding. + Reuter + + + +19-OCT-1987 14:55:26.31 +earn +usa + + + + + +F +f2686reute +u f BC-NEW-YORK-TIMES-CO-<NY 10-19 0042 + +NEW YORK TIMES CO <NYT> 3RD QTR NET + NEW YORK, Oct 19 - + Shr 40 cts vs 33 cts + Net 32.6 mln vs 26.7 mln + Revs 406.5 mln vs 370.1 mln + Nine months + Shr 1.44 dlrs vs 1.20 dls + Net 117.8 mln vs 97.5 mln + Revs 1.2 billion vs 1.1 billion + Reuter + + + +19-OCT-1987 14:55:10.41 +earn +usa + + + + + +F +f2685reute +d f BC-SAFEGUARD-HEALTH-<SFG 10-19 0051 + +SAFEGUARD HEALTH <SFGD.O> 3RD QTR NET + ANAHEIM, Calif., Oct 19 - + Shr 11 cts vs five cts + Net 806,000 vs 384,000 + Revs 18.0 mln vs 15.6 mln + Nine Mths + Shr 28 cts vs 17 cts + Net 2,105,000 vs 1,320,000 + Revs 51.9 mln vs 46.1 mln + Note: Full name Safeguard Health Enterprises Inc. + Reuter + + + +19-OCT-1987 14:55:01.65 +acq +usa + + + + + +F +f2684reute +u f BC-HENLEY-<HENG.O>-ENDS 10-19 0084 + +HENLEY <HENG.O> ENDS TALKS WITH SANTE FE + LA JOLLA, Calif., Oct 19 - Henley Group Inc said it ended +talks with Sante Fe Southern Pacific Corp concerning the +possible acquisition of Sante Fe's Southern Pacific +Transportation Co subsidiary. + The company also said it is reviewing its investment in +Santa Fe Southern Pacific in light of Sante Fe's announcement +that it recieved several bids ranging from 750 mln dlrs to more +than one billion dlrs for its Southern Pafific Transportation +subsidiary. + + Henley said it held discussions with Sante Fe concerning +the acquisition by Henley of Bankers Leasing and Financial Corp +and certain Sante Fe transportation and real estate assets. + Henley said it began talks with Sante Fe after it announced +its restructuring program in August 1987. + As previously disclosed, Henley made necessary filings +under the Hart-Scott-Rodino Antitrust Improvement Acts to +permit Henley to increase its investment in Sante Fe to 24.9 +pct of the outstanding common stock from 5.03 pct. + + Henley said that depending on prevailing conditions, +including price and availability of Sante Fe stock, substantial +developments affecting Sante Fe, other investment and business +opportunities available to Henley, Henley may additional Sante +Fe shares, or sell all or part of its investment in Sante Fe. + Reuter + + + +19-OCT-1987 14:54:15.03 +earn +usa + + + + + +F +f2683reute +d f BC-MERCURY-SAVINGS-AND-L 10-19 0053 + +MERCURY SAVINGS AND LOAN <MSL> 3RD QTR LOSS + HUNTINGTON BEACH, Calif., Oct 19 - + Shr loss 39 cts vs profit 44 cts + Net loss 2,169,000 vs profit 2,417,000 + Nine Mths + Shr profit 56 cts vs profit 1.68 dlrs + Net profit 3,111,000 vs profit 9,317,000 + Note: Full name Mercury Savings and Loan Association +' + Reuter + + + +19-OCT-1987 14:53:33.35 + +usa + + + + + +F +f2679reute +a f BC-CARMIKE-<CMIKA.O>-OPE 10-19 0028 + +CARMIKE <CMIKA.O> OPENS SIX-SCREEN THEATER + COLUMBUS, Ga., Oct 19 - Carmike Cinemas Inc said it has +opened a six-screen theter called Carmike Six in Milledgeville, +Ga. + Reuter + + + +19-OCT-1987 14:53:09.31 +earn +usa + + + + + +F +f2677reute +d f BC-BURNHAM-SERVICE-CORP 10-19 0043 + +BURNHAM SERVICE CORP <BSCO.O> 3RD QTR NET + COLUMBUS, Ga., Oct 19 - + Shr 45 cts vs 36 cts + Net 2,554,000 vs 1,954,000 + Revs 44.4 mln vs 32.5 mln + Nine mths + Shr 1.00 dlrs vs 75 cts + Net 5,461,000 vs 3,756,000 + Revs 109.5 mln vs 89.9 mln + Reuter + + + +19-OCT-1987 14:52:58.11 +acq +usa + + + + + +F +f2676reute +d f BC-TEXAS-AMERICAN-BANCSH 10-19 0087 + +TEXAS AMERICAN BANCSHARES <TXA> TO SELL UNIT + FORT WORTH, Texas, Oct 19 - Texas American Bancshares Inc +said it agreed to sell its Texas American Bank/Levelland unit +to <First American Bancorp Inc> for about 12 mln dlrs in cash. + Texas American said regulatory approval ofthe transaction +is expected in December, and the sale will close shortly +thereafter. + Once the sale is completed, the unit's name will change to +First American Bank of Texas. The unit reported total assets of +196.7 mln dlrs on Juen 30, 1987. + Reuter + + + +19-OCT-1987 14:52:34.06 +acq +usa + + + + + +F +f2675reute +d f BC-SUPERMARKETS-GENERAL 10-19 0113 + +SUPERMARKETS GENERAL <SGL> SELLS 11 DRUG STORES + CARTERET, N.J., Oct 19 - Supermarkets General Corp said it +agreed to sell 11 super drug stores to <F and M Distributors>. + The nine existing and two unopened stores are located in +Maryland, Virginia and upstate New York and are operated under +the Pathmark Super Drug trade name, the company said. + Terms of the transaction were not disclosed. + The nine existing stores generated approximately 34.8 mln +dlrs of Supermarkets General's total sales of 2.9 billion +during the six-month period ended Aug One, 1987. + F and M Distributors operates 42 discount drug stores in +Michigan, Ohio, Illinois, Indiana and Wisconsin. + Reuter + + + +19-OCT-1987 14:51:53.39 + +usa + + + + + +F +f2673reute +r f BC-TRAVELERS-REAL-ESTATE 10-19 0077 + +TRAVELERS REAL ESTATE <TRAT.O> PAYOUT CUT + BOSTON, Oct 19 - Travelers Real Estate Investment Trust + Qtly div 17 cts vs 23 cts in prior qtr + Payable November 25 + Record October 30 + It said the lower dividend reflects the reduction in cash +flow from a mortgage secured by a motel in Covington, La. + The trust said an appraisal is being made of the Covington +property to determine whether an increase in loss reserve will +be required at year end. + + Travelers REIT said its investment adviser, Keystone Realty +Advisers has committed to lend the trust up to 500,000 dlrs for +a term of two years to cover past due payables and capital +improvements on the Covington motel. + Keystone Realty is an affiliate of the Keystone Group, a +Traverlers Corp <TIC> subsidiary. + Reuter + + + +19-OCT-1987 14:51:34.80 +earn +usa + + + + + +F +f2671reute +r f BC-ERC-INTERNATIONAL-INC 10-19 0070 + +ERC INTERNATIONAL INC <ERC> 3RD QTR NET + FAIRFAX, Va., Oct 19 - + Shr 31 cts vs nine cts + Net 1,345,000 vs 368,000 + Revs 31.9 mln vs 26.4 mln + Nine mths + Shr 91 cts vs 40 cts + Net 3,890,000 vs 3,556,000 + Revs 89.3 mln vs 71.7 mln + NOTE: 1986 qtr and nine mths include loss 831,000 dlrs, or +19 cts per share, and loss 1,872,000 dlrs, or 44 cts per share, +respectively, from discontinued operations. + Reuter + + + +19-OCT-1987 14:51:26.65 + +usa + + + + + +F +f2670reute +r f BC-KING-WORLD-<KWP>-SAYS 10-19 0049 + +KING WORLD <KWP> SAYS SHOW EXTENDED + NEW YORK, Oct 19 - King World Productions Inc said its +syndicated television series "The Oprah Winfrey Show" has been +extended through the 1989-90 broadcast season. + It said six of the top 10 markets have renewed the series +through the end of the decade. + Reuter + + + +19-OCT-1987 14:50:41.28 +earn +usa + + + + + +F +f2666reute +u f BC-/PAINEWEBBER-GROUP-IN 10-19 0056 + +PAINEWEBBER GROUP INC <PWG> 3RD QTR NET + NEW YORK, Oct 19 - + Shr 44 cts vs 71 cts + Net 14.8 mln vs 21.1 mln + Revs 628.6 mln vs 605.6 mln + Avg shrs 30,743,000 vs 26,969,000 + Nine mths + Shr 2.01 dlrs vs 1.93 dlrs + Net 65.0 mln vs 57.4 mln + Revs 1.89 billion vs 1.81 billion + Avg shrs 30,782,000 vs 26,619,000 + Reuter + + + +19-OCT-1987 14:49:20.85 + + + + + + + +E RM +f2661reute +f f BC-CANADA-JUNE-BUDGET-DE 10-19 0016 + +*****CANADA JUNE BUDGET DEFICIT 2.66 BILLION DLRS VS YEAR AGO 2.80 BILLION DLRS - OFFICIAL +Blah blah blah. + + + + + +19-OCT-1987 14:47:08.40 + +usa + + + + + +F +f2647reute +d f BC-COUNTRYWIDE-<CCR>-SEE 10-19 0106 + +COUNTRYWIDE <CCR> SEES 3RD QTR NET OF 20 CTS + NEW YORK, Oct 19 - Countrywide Credit Industries Inc said +it expects fiscal third quarter earnings of 20 or 21 cents per +fully diluted share, based on 18 mln shares outstanding. + The company posted net income of 31 cents per fully diluted +share in the previous third quarter ended November 30 last +year, based on 12 mln shares outstanding. + Angelo Mozilo, vice chairman and executive vice president, +also told security analysts that that company should have a +total loan servicing portfolio of 11 billion or 12 billion dlrs +by the end of the current fiscal year, in February 1988. + Countrywide Credit, a financial service company primarily +involved in mortgage banking, reported 4.5 billion dlrs in its +loan servicing portfolio for the last fiscal year. + In addition, Mozilo said the company was continuing to +reduce expenses by one mln dlrs a month and should bring total +costs down by three mln dlrs at the end of the quarter. + He said about 55 pct of the cost cuts were in personnel, +and that the company had reduced the number of its offices +nationwide by 11 in recent months. + Reuter + + + +19-OCT-1987 14:45:58.06 +crude +venezuela + +opec + + + +Y +f2641reute +u f BC-VENEZUELA-SAYS-OPEC-O 10-19 0105 + +VENEZUELA SAYS OPEC OIL OUTPUT 0VER 18 MLN BPD CARACAS, Oct 19 +- The current OPEC oil production is above 18 mln barrels per +day (bpd) and this level threatens the precarious equilibrium +of the of oil market, Venezuelan Energy and Mines Minister +Arturo Hernandez Grisanti said on Monday. + He told reporters three or four countries out of OPEC's 13 +members were mainly responsible for the overproduction, but +declined to identify them. + OPEC's production ceiling for the second half of 1987 is +16.6 mln bpd. The Venezuelan minister said OPEC's production +reached a peak this year when it went over 19 mln bpd in +August. + Hernandez Grisanti, together with the oil ministers of +Nigeria and Indonesia, met the heads of state of six Mideast +Gulf countries earlier this month to urge OPEC members to +comply with assigned production quotas. + He said some of the countries which were complying as +Venezuela, Indonesia, Libya, Algeria, Ecuador, Saudi Arabia and +Iran. + Hernandez declined to say whether the three or four +countries he said were overproducing bordered the Mideast Gulf. + REUTER + + + + + +19-OCT-1987 14:45:13.72 +acq +usa + + + + + +F +f2638reute +b f BC-ATLANTIS-GROUP 10-19 0013 + +****ATLANTIS GROUP TELLS SEC IT SEEKS NEGOTIATED PURCHASE OF CHARTER-CRELLIN +Blah blah blah. + + + + + +19-OCT-1987 14:44:27.84 +acq +usa + + + + + +F +f2634reute +d f BC-DYNASCAN-<DYNA.O>-COM 10-19 0109 + +DYNASCAN <DYNA.O> COMPLETES MANAGEMENT BUYOUT + CHICAGO, Oct 19 - Dynascan Corp said it completed the sale +of its industrial electronic products group and expects to +recognize about a 3.0 mln dlr pretax gain on the transaction in +the fourth quarter. + It said the group was sold October 15 for 13.5 mln dlrs to +Maxtec International Corp, a privately held company created by +the company's management team. + It said the purchase price was 12 mln dlrs in cash and 1.5 +mln dlrs in five-year notes plus warrants to buy 7.0 pct of the +stock of Maxtec. + Dynascan said the group was projected to provide about 12 +pct of its consolidated sales in 1987. + Reuter + + + +19-OCT-1987 14:43:45.78 +acq + + + + + + +F +f2633reute +f f BC-HENLEY-GROUP-RE 10-19 0011 + +******HENLEY GROUP REVIEWING INVESTMENT IN SANTA FE SOUTHERN PACIFIC +Blah blah blah. + + + + + +19-OCT-1987 14:43:38.56 + +usa + + + + + +F +f2632reute +s f BC-PALL-CORP-<PLL>-SETS 10-19 0022 + +PALL CORP <PLL> SETS QUARTERLY + GLEN COVE, N.Y., Oct 19 - + Qtly div 8-1/2 cts vs 8-1/2 cts prior + Pay Nov 13 + Record Oct 30 + Reuter + + + +19-OCT-1987 14:42:48.01 +acq + + + + + + +F +f2628reute +f f BC-HENLEY-GROUP-SA 10-19 0015 + +******HENLEY GROUP SAID IT ENDED TALKS ON BUYING SOUTHERN PACIFIC FROM SANTA FE SOUTHERN +Blah blah blah. + + + + + +19-OCT-1987 14:42:12.65 + + + + + + + +F +f2627reute +f f BC-PAINEWEBBER-GRO 10-19 0009 + +******PAINEWEBBER GROUP INC 3RD QTR SHARE 44 CTS VS 71 CTS +Blah blah blah. + + + + + +19-OCT-1987 14:42:08.28 +acq +spainukusa + + + + + +F +f2626reute +r f BC-RENTA-INMOBILIARIA-SE 10-19 0099 + +RENTA INMOBILIARIA SEEKS CANNON GROUP <CAN> ASSETS + MADRID, Oct 19 - Spanish property firm <Renta Inmobiliaria +SA> is negotiating to buy the property assets of U.S. media +company Cannon Group Inc <CAN>, Renta's finance director Jose +Luis Sanchez said. + Sanchez told Reuters that Renta's chairman Juan Antonio +Robles was currently in the U.S. to negotiate the deal but +declined to give other details. + Interpart, a Luxembourg-based holding company chaired by +Italian financier Giancarlo Paretti, payed around 12.2 billion +pesetas in July to acquire a 63.5 pct stake in Renta +Inmobiliaria. + The Spanish daily newspaper El Pais said the Cannon +property assets sought by Renta included the Elstree film +studios in Britain and a chain of movie-theaters in Europe and +the U.S. + + Reuter + + + +19-OCT-1987 14:41:38.02 + +usa + + + + + +F +f2625reute +r f BC-STOP-AND-SHOP-<SHP>-T 10-19 0035 + +STOP AND SHOP <SHP> TO REPURCHASE SHARES + BOSTON, Oct 19 - Stop and Shop Cos Inc said its board has +authorized the repurchase of up to five pct of its common +shares from time to time at prevailing market prices. + Reuter + + + +19-OCT-1987 14:41:28.16 +crude +usa + + + + + +F Y +f2623reute +u f BC-SOUTHLAND-<SLC>-UNIT 10-19 0078 + +SOUTHLAND <SLC> UNIT RAISES CRUDE OIL PRICES + New York, Oct 19 - Citgo Petroleum Corp, a subsidiary of +Southland Corp, said it raised the contract price it will pay +for all grades of crude oil by 50 cts a barrel, effective Oct +16 + The increase brings Citgo's postings for the West Texas +Intermediate and West Texas Sour grades to 19.00 dlrs/barrel, +while Light Louisiana SWeet is now priced at 19.35 dlrs. + Citgo last changed it crude oil postings on Sept 9. + Reuter + + + +19-OCT-1987 14:41:09.93 + + + + + + + +F +f2621reute +f f BC-NEW-YORK-TIMES 10-19 0008 + +******NEW YORK TIMES CO 3RD QTR SHR 40 CTS VS 33 CTS +Blah blah blah. + + + + + +19-OCT-1987 14:40:54.90 + +usa + + + + + +F +f2619reute +d f BC-<THERMASCAN-INC>-RECE 10-19 0110 + +<THERMASCAN INC> RECEIVES FDA APPROVAL ON DRUG + NEW YORK, Oct 19 - Thermascan Inc said the U.S. Food and +Drug Administration has approved clinical trials of a new, +advanced AIDS confirmation test developed by the company. + Thermascan said that about 10,000 trials will be taken on +the the new test, called Fluorognost in the next three months +through blood banks, hospitals and health centers as well as by +individual physicians. + The trials will be conducted in New York at the Beth Israel +Medical Centre, the Sacremento Medical foundation Blood Center, +the Karolinska Institute, Stockholm, and the Institute of +Hygiene at the University of Innspruck. + Reuter + + + +19-OCT-1987 14:40:47.20 + +usa + + + + + +F +f2618reute +d f BC-GOTTSCHALKS-<GOT>-TO 10-19 0061 + +GOTTSCHALKS <GOT> TO BUY BACK STOCK + FRESCalif., Oct 19 - Gottschalks Inc said its board +authorized management to purchase up to 300,000 of the +company's outstanding shares, or about 3.5 pct of the stock +outstanding, because the company believes its shares are +currently undervalued. + It said the purchases will be made from time to time on the +open market. + Reuter + + + +19-OCT-1987 14:40:42.14 +acq +usa + + + + + +F +f2617reute +r f BC-CCX-INC 10-19 0083 + +GROUP SELLS MOST OF STAKE IN CCX INC <CCX> + WASHINGTON, Oct 19 - A shareholder group including Far +Hills, N.J. attorney Natalie Koether said it reduced its stake +in CCX Inc common stock to 10,000 shares, or less than one pct +of the company's common stock outstanding, from a previous +stake of about ten pct. + In a filing with the Securities and Exchange Commission, +the group said it sold 380,000 CCX common shares on October 15 +at four dlrs a share. + The group gave no reason for the sales. + Reuter + + + +19-OCT-1987 14:40:07.34 + +usa + + + + + +A RM +f2612reute +d f BC-LEISURE-AND-TECHNOLOG 10-19 0070 + +LEISURE AND TECHNOLOGY <LVX> SELLS NOTES + NEW YORK, Oct 19 - Leisure and Technology In is raising +40 mln dlrs through an offering of notes due 1999, said sole +manager Merrill Lynch Capital Markets. + The notes have a 15-3/4 pct coupon and were priced at par. + Non-callable for three years and non-refundable for five +years, the issue is rated B-2 by Moody's Investors Service Inc +and B by Standard and Poor's Corp. + Reuter + + + +19-OCT-1987 14:39:55.20 +acq +usa + + + + + +F +f2611reute +r f BC-TWIN-DISC 10-19 0106 + +ORION <OC> HAS 5.2 PCT TWIN DISC <TDI> STAKE + WASHINGTON, Oct 19 - Orion Capital Corp said it acquired +163,000 shares of Twin Disc Inc common stock, or 5.2 pct of the +company's common stock outstanding. + In a filing with the Securities and Exchange Commission, +Orion Capital said the stock represents "a favorable investment +opportunity at current market prices." + In open market transactions between August 21 and October +16, an Orion Capital subsidiary bought 56,200 Twin Disc common +shares at 21.06 dlrs to 22.43 dlrs a share. The entire 5.2 pct +stake was purchased at a cost of 3.2 mln dlrs, Orion Capital +told the SEC. + + Reuter + + + + Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/test/data/reuters-21578-index/deletable and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/test/data/reuters-21578-index/deletable differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/test/data/reuters-21578-index/segments and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/test/data/reuters-21578-index/segments differ diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.f0 clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.f0 --- clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.f0 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.f0 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1 @@ +qpjlldalbaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.f1 clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.f1 --- clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.f1 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.f1 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1 @@ +||||||||||||||||||||||||||||||| \ No newline at end of file Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.fdt and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.fdt differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.fdx and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.fdx differ diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.fnm clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.fnm --- clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.fnm 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.fnm 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1 @@ +contentspath \ No newline at end of file diff -Nru clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.frq clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.frq --- clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.frq 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.frq 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,1047 @@ +  -  + + ( /Mƒ '1       %    N !';19 !1    )    !   9;  )9 ;    +%               + X      ;; ; 5'   '! 9%          + +  #   !%# P P %  57 = 1  ! 3/ 8       9  7   79  R 9     ) )    $ "  + ( !        #   )  P P  ;   P7;=   0    #    =   Z   ;  ''   9     39 N     9!         # [)   +     ;  ;       + 2   9   51    R ! 9  /+59          ' !; ;   3      87- #       #  V'-      ; * #  ;      =   =    5    5          + =    ;;   /      6  *     J3   )  ;9+ ! # +  1      !-  5     '  2    5    1  3   3      1   ' +     '                  )   73       +   3   = )+ 3  %#+ '      3+; % 3           /1 # $% +   3   9              #       9  5      ! 5 1 3        %          +  '       17       #%9 !  /      %          3 7 3  +   *       %3 + #    '  %             '     ;    #) ! 5!)        % !-  +    '  1      -      ;%  73      -       3 3   +  =   ;   ;  #   -1     !  '   7*  -&  999%;%;;;9;99;;;;%;;;;;;;;;;;%;;;%;;;; ' ;'; '    ;'!     !!! !  !!  ! !!!!!!!!!!!!!!!!!!!!!!!!!! 7777711117111171171711177111711777/ //77/// ////////////1/ ////////// //1/////////////7////// // 7////////1/////// /7///1171777771177177+++171177+ ++1+ +1+++++1+1111+++111+1++77++7+7+++ 5+7+7+75+ + ++++++ ++ ++++5++++5++555555555555------5------'''''----'5'5'''-''-5'''-5'-5-------'-''---'''5--''--'''-'''---''-'''''''''''''''''''''')))))))))))))))))))))))))))))))))))))))))))%%%%%%)%%)%%%%%%%)))%)%%)%))%%%%#%%##%%##%##%#%##%%####%%#%%%####%%%%%###%##%###%%%#%###%%%##=##===###===##==##3#3#=3=33 ====3 3 ========3 33 =3 =3==33=333 =====3 3=333=3=333=33=333 333=3=3==33 33==3 3 3=3=333333 3======55555555555555555559999999999999999999999999999999999/;9"'9>.,76812G=4/:(0Dÿ /:9!&9=.+65701G=3.9(/Dü _  + “- x& '%&+" ' +8í- . +. ) +   ¾.  + /; +%(1$6'1'%(%='54(/),;$113(,--&!&!9+02+00!;8 3!) /%03&0(%%,,))**= +% 1% 5<'$ <=*$-)71&&<2=)-(,()5++'4 5#6<31991;6*&0;6&25(4+<<31##4 (7=0/=#" "<11,, 5-! 0(,=) -!9'%$4" !"&4  +-&"+6!&$)7%+0)1=1-(/;56!)=%;$ %33421&398'77''0%0<33""=40*%1) 1;*3<+&(;997#$' 1#'7=,)"(< 1,)%;%-'%99=;/)1)1/6<(2*%%;$;$833=)4 53!-)6#.&66(7077,6/<<(''%=31;=)$6,<)&+*3-+)(=&"4<-35+$=2!%=1.=#=<2=<(,8&&)#$ 0)""+)'''38 %4##0! '#  8=1<*=++)<,$(%*2= ()3' 1*)1)4%%*##'1%!#+=1$1<;(60#29/# '1 +& "353511)7=& +-'=  5 1#  )1)   ; =   ! 9 + 4  9 %;;+ / + ! +  - %%=' ' ! 5 ' = '%  + / ) !*    , 1 %  3 - $   !1 %3 ! ) !  *  1  % %3 9  7 +5 1 + + ;  + +)/  % ; 9 - 3 + + + !  %  ! +7 + ! +    + 9 ; #99; / ! 9=    +  ' % !)3+ +=   #;!     !$   ;;/#;!#951= + " 7+%! 397'9'+ +    /= + i 6-! %7#+'$'% %76/3-#17%1  '!/'  !<%-60 %58&(//5*.&8,+/!8ç/;:"'9>.,76812G>4/:)0D 3hcsSPg~U\ea_eXvedcRkw¯0;:"'9>.,76812G>4/:)0D¥ -70!&59&)006+/&8-+0! 8ù=/;:"'9>.,76812G>4/:)0D 571-5/;:"'9>.,76812G>4/:)0D =0;:"'9>.,76812G>4/:)0DŸ 0;:"'9>.,76812G>4/:)0DŸ /:9!&8=.+65701G=3.9(/D› +9/:9!&9=.+65701G=3.9(/Dš /;9"'9>-+76810(<2.:(0C¢ 0;:"'9>.,76812G>4/:)0D¡ +/;:"'9>.,76812G=4/:(0D   +    + N" +Ÿ)  +%/#2> ,-7"! #3%7÷/6      + 30+! +    %  !  6     &  +   !  #     +  +  + !'  +               +  !         !  +        +   9;9;;;;2%    ,-  )     + '  # '/"  +)% #'3)%'999/: #'#;;;;;;;v;"(9>/-8696Í) +'+;;;;;;;;12H>51Õ/39)! ;;;;;;;;;;;;;;;< =//;;;;;;;;;; ;(';%='/ '#!!!!!!!!!!!!!!!!K3+3!!!!!!!!!!!!!!!!!>';!)-!!!!!  !!!!!!"5'#. =8/(,(#231O%%"& 2Ê/9 +Œ// &+ + +      +6Lõ/ Ž //% %/    /// / /777771111711711177117111777711717777711771717111711711117117717711117777177177771711y +    Ä / . /# /# !/- + /" #  .1./7///+///+71//+/////////////7/////7//7/+++///+/.//7///+//1/+++/1/1///+////////1111/11 111+1//1/1//7//7///+/+7+/7//+7+7+7++77+++++++++5++++++5+5+++++55++++5++555      +  Õ  % /  /  // -  //55'55'55'55'5''''''5''''5'''''5'''55''''''--5'-'''5-5''-''''---5----'1¬ +Å -/   -  +  + '5''-----'''''''''-'--'-----'-------------------------=!    ‡/ ! 5././    ))))))))))))))))===)====))====)))=)========)============== +      ï  A) + - //3# /////)=)=====)==)=====+))=))==))=)=)====))))==))==== === ) )))))))%) %!! Œ  //////...//.//.+   %))%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%333%##%%3·.É %  // $-%#%##%%3%3%##3##3###3#33#3#3######33#3#33#33##333####333#3#3#3#33  +`k   !; =##3#333##33##3#3#33333353533353359999595Š Åó ! ; /:  -- !+7/%*7-79%  %7 9!         + ô   =9E@B1AH28@9B57MA;:=-1N¦ +#= !< +N +! +      + "5595595599 /#%$ „ •-///‰ +  zµ/`#!11'%-';!999999955959599ZN )   /'/999555999 ^ +!// - +999 1<-/1  # '''39999;99;9;¡î  ' 1 +/)5/)/     Æ &- +1/0  1 ŽŸ†5..5  V)55'%1  . . s!/'+' /# C)    9  ‰r +ô #/. +   +¨ ã+ N /7-     +Ä  -  1 /=!!//!#+%1 +A) &#/)!4!9/ >)()!)       +     Ï  I5%/=5)-) '% //=!' !) !;+ 3# #2/ % +3-A5=# + +N / /54)5455F=5 555 55 5 5-//5#%5 -4/"- 1 =.//!= /.% #! +   z  ¯ 5!I5 .4/--#)317,1/ ') ='-+ [   /!3 !! +/ 1 ! 4 ! )5!   + + =;; + # / 3      ˆ + ‹@/ .) +7)!/  ;3+//=/=////1/ / !+%  + % N-')/'/3;)!& + &  ' #5'6 ) +'&;!  D  + + +  l  ¬ 7H / 9.5/)../).//.// /.% +.// / .#3 +1))//.*//./;/.//////:-///////////.///35'=/  ) %9//' / 2 )   +#/!= /=-  E&)    Ñ_ +_ + +3 + + +3  + +         ™ ./!  / 5);7=&= 681   1)  ./  +  +! *" +$./:/ (6(% !   .; +  #% .#  ;5 8 +   %3/33 .% +, ## )68*-1+)4=$ 9./ 4)/ + + +, (72& 5  * 5 3)  3 (89 /  :(&%17 *12U>4/..//./+ +/# + : 3/7 ---%0 2  089)= 6 &2%9 !1#+ 1%% 3  $<0) $"3 42(. / ) .4 ;00%00"<(/ + 4 5 +  #%6  +/= 7=  % -/1## 7 +61 +  3 + +   ! +  = + +d !4 + ) +2 + + 2=-);3' +  1  91 5  +6 3. *+  4599/ -'/  ' + +   +‰ =, <' ;) +    +  ' & !  =!!3   )5 )5  31!)+ ()'    /3KF/Ë7+ .8 2   + $)1   #  #  2=3 +80 ) +  +; + 9'; !!  + + O! +7% 2 # +!<1 +3-3(.+ &  +  * '1% !'0!  1= 5 Y # !&  #78) %    +%*(! 76-++; 0  <"%( 1 $//;1(&5/.' :%,;:!9>-*66710F=2-9(0@Ö   + = ..0*$  " + ./ $% , < )0* /  +7  + !  &7 )0#'$ -70!&59&)008+/&8-+0! 8«3,3% !  +- 21/  + 796(= '7 * %  +6511,  + 6' 6 $#(% # # 6%  $ +'  , < ') 559 .9  + /.// +  +' %% +   +7   +#    7!   ; +0    +   + ò  +=   + ((  4;!  / 0)('! #'  '%27  5   6+/), !)  --1 1 *)= $( &''1*  + j"  +1#)79 +# -%   +!  !+     $$'    +   +,!   !!0 *  57!9 118 7%#, 3   9 ! "( +   + +!1% + + #=7 =,)')   ˆ1C1$% B   2  5 9<$) ( + #(#+=6,+)) # */7<"')=#1' +  +$ +-  -  < #=. +< 7=/9&&$0;:"'9>/,76812G>4:)0D¦  5$./  /*!'$  +/ 6) 3 #6=,# 3 & /$,   <0%   *1/ +!;.;+# 7&  11 /'  +  + ##$ ,5 ##=.%/$ 41 1./;:"';>.,77812G>4/:)0DÔ 1%  ,   4$" +;'(7=   /)) . 2;07 +' + 1%8:,  : +    s98$/ ! + ' 1 < =,  )) .16!74$#/<= ;;61*  ('6<455 +' ) % #"  #  !  <=G + #% $7 #) C"  +  F8" <7,  ' +1*'5 +  + 66 +- <  ##'115 33.1*% &  .  +! ),= +%  9!451  80 +  #)  +7$!5 -   $+ 3!  " %9 % +   .()& +  ! !;)7= &"  #9 =& = %#, %& #   ,33';          +ü   +2) +  : + + +  , + % !$  - !3!9= + + +! + s + 4 3 +   % 8#  + + + + '  + +,!/=75  + 17 +/ ' - )& &7 +  39' ' + "#' + 77+9 , +  ) /0= +       +ó )1   %4  + +  3' + 1< <79'6"  ,<; &7  ) 1 #4 +3 )7< '1%#+ ' +icsSPg€U]ga_eXwedcRkwÌ '  +$-- 0;:"':>/,76812I>4/:)0DÖ-70!&59&)006+/&8-+0! 8¨55    +591 6# 3 ..9137#  7!9- 9 + #:)* 9/2#! (   7 1-/=;*1 -./00==/ %7713%'*&#5,#%%:*#;; 7// "0$5 0=%$")/.5 !*#&/4<"<% 7-!=5   !+5/,, + + * + %+ *5 + + 7    .// c27% 9;94   +/8-- #! '! 3+ !22  ! '#%'h)- #; +)   =+/ 11  + + 3 ,+1 ;#)!;001* +'= + + +<29);+  < + !'4   ))  & + +  +=845#' 520 +939  .  ')''  +#+ & %( 55=1   # < #-   ,+ %& "$"$   ,,###' 6 96 74#. 5 $*=" + #1 7/"-1"< !/)#'! +4 +.' &/2) &0=- *#+.  1$ (" $='. .  *)//!3 &  )75   /;:"'9>.,76813G>4/:)0Dˆ59+&':+%+   ##) !  )#%   + + +      %" +! +   ' #%1   +' #  < 9) 5.  +7)# # + 3==)&#7&==1 9 5 +'  + % '==01=*1*;<= /# + 5 0 ,  )=# +   + K% )7  +  ‹) +   &-   ++ !    +}  :%' 6 &4 -2 "   01$ 1  $,(10 ./   %   //* 9$/  +  (0=  +' ++=1-1 --   ./* 0, 6,.) 3'3!//6 +;:_; ''  =9)#  ! '* 33==  6.4)- ++* 88 3 != :& 4 4 /27"9%  717=( +)55    +¡ + $7 + + [' // 9"   /% *  & ( 1/#8 - +. +} 17  #- - -. 9  + + :*3 7  + 1 ' '/ +&     1 ) + ! 11   + '   @# / )%*!  9  -  +* + # % # + 9 `/  8$( %% /  /$& 5&7 +  + #  -54   +2 +!8=7; &6&& $.,$ 3 61) ; + +D85& "%  +" 9 + +$ )2 3,  /9 3$ -  1 #*<$ +  +c!=7)  + + %  +  +   , =)# '!-#13!1 " + /+;2  ) & &1&  +"- #3+! 7 3! , 639%'#" !   +Q ;# $% 1+  /" 3 !5 $   2 + 7& + )(  ( %0=7 <*(+   '+  -!:6110&)#% . 1 0  !  $. 3 1 . + +;3.+ + 3! =  , 7=5//1 1-, "( ! %!  ) 9)   4%= 3   5 (189= % . + +9-     Ô +=  '//30 & ++"(  '!$ " & . 7 '5;;#   ' = / + '!  547  . + :/ + 3)     k /   9C=2 - 99! + +C;% 4 , 6  *  3 : 5  - 05 4 32  ''999 %&   +Ÿ  +  »)+) )1"  1  + ()-+ )$3,3!! .#4!- +3#   $<3)// 9;-- 0'=,91%  + 575%54-# 3 -- /2() $   2 7' + ; ' 5  +  !6  +  1 7%; +          5!12! =#     Ã=  +  á +  ! %3 +     # .#    + /   + +#: + +  $< + + ;7 51 +)&' 32320  +   Œ=  1 !    & ' '  6-  + #    A <   +       ‹3 + !      +U7"% 9, )./   -1/7 $ =&  0/..6:)./7  ;! + + ; + 1##  /#'+ +¢5  +  { !  }  ( +*#5. +'#  1  5  + % ;   %! + + '3 !83=../// +@<-L5/ -3+ + +  Ÿ*%  '   +. +<   + $; +5)+;' =  =,  ) +9;& 1:= .9;79:2)  15: 0< +; =  % '  ) =7 ;231 &     ' +       '"039 + +12 /- 7-44= 5  +L +%/;,;<3("-< ) =/, .,   +.53"4! $(7  *" 5 ! '=$0>4:)0E0;:"'9>/,76812G 2    .81' "''79 +) 7 /!!72/" / %&#.=-!  =(4.. 0,9%  1." ;.  += +/ .;, ;  -*%  -'  / 3"3 + ! <= <  '#1) + 69 ;    ;)#*  #%1 + 4 =3   3 "& + + +)4 =2  , +  ./%  # "'$)*#(-! 9/& 19! '9%1# + +  X+   /)% 5"  + :4 + + +  +} +  +1#3 +  +7   7  `    ** 3#3 5 $641 +  %  1: 7!7))!6*=;;"'9>/-768./7"&9. ==0/ ;* ..0 $ -59& + $) 0-, /4%  '&'- <1 6=3 $.(.:  33:1%  #*%$0.-5 !8+ +! ( '';  +'=5".!  "8.  a% ' 6 / <$)- ""1 3=#  0 . )" + "#'/% 137-7.  )/*(=" '  '$% +!)$  9)-;9 : 0    = # 8  '8 ,- '  !/   ?2#&C=*2F1@ + +Œ#9/  31 + +  !-  +33$'= - 6) *+ '<     r/../5 #4"%%);/837  '0% !197; %),) + '+ '4   %4(% 0 )1  +  5  9!;7-' <$+ +.  + 01;=  ++ * +!1  + Ý/ 7 #' 4 3 13-3" '' 3# + + +# + +  $)  . +  +2      ;(!3'# 33#  =/   $ %'' 3! <' +##$ =  3 5- - )"1  V#5 - +  2)//3# +5$+ ==2" #  9 ;' 2%"== 2€25 '   +        +  + +  ñ3''''''''''''''''''''''''''''''''''''''''''''''''''''''))))))))))))))))))))))))))))))))))))))))))))))))))))))))+++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------///////////////////////////////////////////////////////////////////////11111111111111111111111111111111111111111111111111111111111111333333333333333333333333333333333333333333333333333355555555555555555555555555555555555555555555555777777777777777777777777777777777777777777777777777777777799999999999999999999999999999999999999999;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;====================================================================!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!############################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5-(++1#%% " $: +6.7 /-  /$ 7! 7% j #- .! 33$"1 +.,(  +  ,33 ;  $1 0' +M + +% + #!  + ($  )) #&+ 2    +Û3 + #  + +Ž#7(  ; +33    " ,! +   6 ;!  )+!,0;=  ! % - 6 2'/ ) $ % &  % 0 +7 '' .+#0D./*  9  f&   '' & + *1 + @35' 3/' /+ 7*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!############################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%''''''''''''''''''''''''''''''''''''''''''''''''''''''5555555555555555555))))))))))))))))))))))))))))))))))))))))))))))))))))))))--------------------------------------------------====================================================================;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5555555555555555555555555555+++++++++++++++++++++++++++++++++++++++++++++++++///////////////////////////////////////////////////////////////////////111111111111111111111111111111111111111111111111111111111111113333333333333333333333333333333333333333333333333333999999999999999999999999999999999999999997777777777777777777777777777777777777777777777777777777777 %K = <, #!(5%1' 99-&'    6 /;:"'9>.,76812G>4/:)0Dˆ6# 7' 7&  '/  3).(. #    </   ) + '  +  $3;' ;5= =/  :; +  / ;=; +#  + + 6#3% - 5'0 + ':"91.(0  !  )  <&6 < / + =, 1.'0  4 283#32235&.0  %5 +! ;; h- +;;1 6 0;:"'9>.,76812G>4/:)0D/6 /!<6$8  3%618:  0/ *8)5 $-3 #' 0;:"'9>.,76812G>4/:)0D) - 1+== - 8#91 :; 8:/"&==5 !)9& $-!6 ! =6)) ):5   ',/**()% # 7&)()%   +3173$2--), 94)9#.&9'%$&%%.  /= / = ( -7# / ; 0' 11581 1=  9 & 54- ' +9 +&'-- ; +0"     ) 3' & += =(7   +  =5 5   " +   $)) +  6 ;;% +%) 15 $1  -+ %  !!7) +) ++ 3.  ;  + )   ') + ! ! / =#) !  !25%/ #% "=7 % !77-3 1 +.| /  37 +) +%)'1  ! 2"! +    = .  - +1 )!')1)9#' + !/  )3 %  + +  «=*1 (&/*1 7# + + )-%;    %2% + !9/9 +   * !2 / ';0'  '##/2 9 :. ; ' $(=+) ) - -7&,. (77=7! 5%.;**7<%))9-  7 * +3 - 3%  -+=/5&% %%5! + É0;:"'9>/,76812I>4/:*0EÞ++ '= *)#==$ ,=# .   +91  +‰=%"3&1  <4   +<1./&  +& )5 = 3 '-1 / 7+;  " 5 2 ,10   ! =*09';')  (//-!((" !96-- 3 %%9<<% -   &33 5 + +    + +1+ !!# ,,)"63 )-)5$,!4-&&8„ +6  ¬  +-!*5+  +   +  + ¿()2# )" 5 5 % +  -'=-   ! #  1;+ +  *& =5 !"# 01# +0#  7 =5 /) +<=31 ! '2 +'  + (  5*  0  +%$#1 3;!2!Ú!-  +;3<3& $    77(  + # = "6= #  +   _= $0'' +=: $,"  !  ++< ;7.!%82-(  #!..<;%7  )0;:"'9>/,76812G>4:)0D¦ ;567%- /  +//9  +#   / 7&<*  49-) ;- ++ 7 # /<.; )!'89. 597 .  "(4 5( + 4 +<$ 5/ + $)/4 9='/ !   1.-.=4 59,- /2%! %# + +% "$+, &4<;/;/ :9/ , 4 :-- ) " +' &!9+;'11 % 8##5: +%"1 0" +  $ 3";&% .;% =! 55 1 +;<,, 9 1      ! <+  <  0" 7! , 5 ' + +/1 $4 =03 )6<05   +"&!-"-1- + O #; +`1  ==9;2=5 9. +///## 85    +2 !    ! +&&9-5; )' !;=    +  ñ*-(:2;6< /  1'6 2 +  +  % : 393)  &;"3 % !  + /93 &$ B:#0(%4 +#)3 0+  +  # 1)$  + # !&" ' +<2   5*; 14/ /55 8 9" 8,53 + & %7 3 + # P7 = <==// +/*   % #- +  %  /' ;.*1;;  + +; 14- +#   0#"   + # 81 "83"9 ' +%3 1;%9 ';- % )&' : !=   +  8 32=     +[ - +&% +")% +    9:3: $! !5++ !3;  ,( #=#-=)( : 32,11*<-% 3 $///;:"'9>.,76812G=4/;(0DÖ(%-: ='  =!/7/"+);#;8 8)!5!*5.5*34 /;9"'9>-+76810(<2/:(0CÍ       ª   3) 45/7%+ 00;:"'9>.,76812G>4/:)0DÂ:  + $¾  '#)'&$",+ )Ï9 * '*&/( #8(<)   ;$$,: *#0!+' 12-- / + /5'    + l + #2 + +< + 9%; :%3) ; ;) +#1  !! 7+-9-)&=!9 1,-      3,11' #   )(#: + #  + +/+D->25+G:+.2786==>72à9!   1  99#  h/  71 #!- .3 + !  7 / ) ;/- 1++5.. 9.;** +   +/+ -( + T(%/ ;()6!1 +  <= /5 + H%$-/10' %   )  45 ! !% #+"/.. +*  +2"ÿ &: $   ! . .! 9! !1 5*  +$ _1 1/;:"'9>.,76812G>4/:)0DÌ*7=5.//j(''#$ % #   +$'*+ +     + :$< /)-+ 1  ! +c1 1  '5)+;  //)    !! ;)  =$== + + =6% +"77$ +0, - 7$01  !0 1 3  +7 % = = 2$1=)    ! 71 96;$ 6);% 3!  + + 6%!' *+;&  + + :;" +/   )(,%  )' ®:= < $10$0 7::9  6     7<* =/8#68)) ' ( 21 %%5 31- 1!3) ;% ()#6   +  /!5' )#(/<!# 5#    ! = /;0! 9*1 +*"19)5 +    i/ !  +)  ) !1  == < )2 :   $;1 -)  8 = 42&&/! =7  )' + ! + + +F ;*      ]"' #_9 + '$   + +  ¾! 7-" "  / % + k;   +  +*:$ &: 2 $    +!;+3  <% ;# #                                             $                                                                   # 5 + +Ulti¬‘bP Œrqu‹}/r\n{z_!½ /# )9  +  + #      +  +  +™  A ;7;33;! &7!;#   ' '+  #+ + '+   151)#-9!#$ 79 ;+ + — :-# J1 +;   +" P 9 '       -7  + t::5  3+  # )7;- +  $ + #    %9/ !-  + ;; ; -%  +4'=7    991*) 9%   + +   + Ì 1 5 + “  +-  %+ 9  +K7I) + +  Ž +  # 5   7  % +/3,-)%1#-    +­3% #)573 +15'1  8  *    &C +  + +  +   + +  +ß 72 9) 09 + +(!=E%  1     ¯;   c3)#3) +BÑ€‚qt ˆvu‡›yzqs‰Kg˜€†‘oh%õ  ,' =U9# + P! ;!3 8#   -,%4'! + u3!8' !   ! ' +)) )   "%6''=9 31+  @ D5+ -.; 5!99# 9   +    + ê   ;  %;-;;')  Q;   #$, 3' *0   # ! Ë - 5  28)    7  T% ;! -  3 #!3'= +! .-$#%#&)!÷=)- &5+  !  !( + +1 -#33/! 4+ %%/  ! $ +    + ) 7)3;'  N=B#'# #' +5   +  +  …15=-% 561 57% 7  + 5+    +5 + ¡'% #  !' + ‘ 7 + 0 '   ''  './= `=91    #Q55'9 !-*")/# /"1#1'! ‹ = :  ) !%  |  +1  -  +   +          +ó"  M. # ;   N9   +   #3   ,  ).//'  / 7 9  ”    '  +  +         +  11% $"7   +%  + +3 +  A24   ' (  )  9'56  +!  +  + £= 1++  =$ #!'% + 1 )   y13!9= --  +327 +  ) '=%4))    + K '68:*!5-,! 9  +/ + /* 756   +  =88!+ ! =!%:  + +3Y 6=    :-/ ;'/3! !-#&'9  m   -3    +    +ôH   )  #<'!/(!(*!"+)0! 2!2 2 5!3  S        +d#  i1#!+ 0!"           a9!)%59  + ' +-+; *& #/   +/ ;     k 3 '*''  +8'5  )     3#  - .!!  731 + +59 + / +/   $5 3H6%  + += +  +^777 9/    )7   %%   =  -4  -39%)33%. +91/<#%+%%  +    77=  =!13=53=   ##'5I# +  7,/#   1#3 + 2   + %5'"  -!89'&!0'-- ' +'" ! ! #/)+=   F#  ' +'  )    +   ²-#/=  8 `   % ÁN+  +h  +3# 3   +)  B' " =  *%)  7/  3  -  %  +2##+  1!1     ' +54!   5% *# )5# + 3; ;%  !   1 %  7+5;%  %! -%,#5+ /' %+ 7  + #3   !  )  79#+9-+# #G  7' c !# ;%  # 9 6) ) +9'9+  =  '!77%; -;  + +   ,  +  9 0  &51</   3)   +   +­! + +6! % +#+< #/#9 e D +99/ 1 +*  7   1   7/  =   !55' 7   "" +  ! 5  +      *  + +b3) 3   + #+#%Aé$ +   #1  G\ #9* +   b!=  /=!    +  ‚ '  !    '1+:--3; TQ+1 J# N+>!#*,A    =;+ -   +  +É/ 7#9% -@  !'%RB + + %89 9-    7)    + )  +h7 '  :'; ! 1/+*  %5/    #7 4 1 +7#7%  5))  +   %97 + +-7/ '  # +  -)    #; +  1+-+!%7 !%9 !  &=;;567=# %==!= +    +G#93 & (9 +9-)+ 7R#%$';1%2!1!5  -94$'<==# +   )  ; 210 )-##!+2  +   #%  +;1-2) ;%  +     1)7;/#9%)% %9;) 55  +  + + 13 & 5 ) ')'%    ' +       ÊC4>B++WC99H8>P/6'Ü=#. ',T3 )3 + 3    +‚ 5  3': 5 + + + +$5 +7= 3   7;d #3% !;! 3$ +7  #"#' !%'1  +  =7   +1 17  ! #"%!6 ' +\ %  ]'3  n +]- +  +  ­  %Y  /  +9 +  9 +   +n!;  +     +  V +! ;&%%+ >*! + '  # 3 7 =  +7    +9 9# -++ )# +%) 39 )$  =+*989!  +; +2'#&   # % ' 45       …+3m  , % =/'' 1+4-;!   ='  + +'' 92  !%% 1)  #)53 5=#  + +  A  %/4)1<<===%   ) +  %! ;8  3) )!% 1%5'  =/  + 1 9%=%  7 )   +   +# %; ' 3+9 c9%' -  %71- D88   %  +5  !!4     +   ?3)! !*')'&' ""   ##-    W +    / ]         6  - 1% % +0?@#(<C6-<::63IA72@0@MÌ   /   "*  9 /  '  #&  92%  / % ;/7 +   +   1! 9- :1 7 +   591 5# +/2 !&   .  1  +    g ;  %%   . '  3!  /!  +@) + J' + =#%6!#7 G )    o'/)52 -9.+S-*  ) +  + + + +¥  +Z9      +  ¡<9!= 9  +/% ; ;1 '  + =' 9 9    +   )  7 +5C9<IUH&2PH/>@M?GHE7/,Ø 9 + + 3% + ,%    ™!3!  )+   1     !/79/  +  =' + † +   % ;   77  7)"37 5%5-! + + '-6"!-%%41 *,³ * #      +#5 '@  ) 9    ! +W1@  KB' 9% 5     & +$659 +  -& W-  9 '&'  +#%; 5..!;  -;;;) # # +   + 3 B + #- 8!    +Ÿ +19  +,   X    !  #5 3 1:   2;  +5      k   " +` ! 9% #  95)=+5# 1     + +   +³#71 # #7 !/%3 + % ; 1< ! =1/ +05  &"  + ”=-   +     !Û5   + ;57   / á"   1-   +$+ +0)##  003#%.)> ==U  &';  +'.!8  K +l . 1  +( %+7   +x'*9/   .5%   43 ) +  !=% '#=7%1 #   + ;* #;D. 1% + +9/ 4     3'     –! +  73);!%"  ))   ++ 01#'!*  -59=   ; !    !  +=  +#! ! 7!   %;  +odri²vUp³resX_eRssl{—’h Ä /   *  =%1;)' +`9 Pb    N*;59# )  + + + +• \  #5  1;-# %3  ! )#    !! 1;' +5:%% F'%   +   n -';%#9;#9;% 6 : 3%'= ) 1-  <  1+3,/# %738!!- +)-3 ) 7  - -  99- ,  :9;  7#  + -*%   4       +  ¹#   #7&+ =915 Q)#% % + +  +u7=     % +  +[ 9  J9% #%, )    !#  +3 +*,&"-))+0.+!%. +42.=Ø'';;5  Z@  +.?)C#),%B"?4613'!.ú    */'"&#0!E71$3$!” -= %2I#15  -%  '#% 7( , # &* 5*     1-1%4 3=$- 3 -' %   / (5  =   9   -1 /  0  +   -1          £3;    #     ,'- 3    + + U%  +# '5/! %! K !  +  !  +559 -   !3 F!3 3- J )  9- 9  =*7! +  +  !) +8/#   +;#3%.3% 1(%   :* + + + +  +1-/  + +   + + '   '    &4=  !! !/)!   ##' ;V       9!9 + ;- " .  ú  /   M #, '    ) ! !;0   +  #3    ' +2+ ) 7   ## +  Š *O     ; 531      _7'   5 + - 1 %=   ;6   '  Q5 '#  % % +  + .ƒ! ); #9 +  v!+# + '$*=     %;! ) # 9  + x  (%0  /')     "## +#5'   + t+=11 +  --9' 3&1'# ;9         & %=    !";;#  /* //'3C'# 5  1< +1    -)  + --     +!971=   + +  /  7 # "+997-;3#/ =45 + + );.-ID^H8LRW3>:8:Y/N)(J¤ +1' $ 3 )'#"7/1 1// +   w5 +=   +’#   “3   +  +   Ð  ,   +] <$'' # /3=)I       +85 +J ++/9  ) . '-   3!-    9%   1 = 2  - +# +   9-'      +% +#!=(    +   ™3  !)  5 +    +       + ð  )5  + +  p  &  1;5A)9 '   ›  6 V  ! ''%'=  -%' +  1 &    'Ä#  ]77  #;55'97 +t + = + `   5.)'  %  %5# !;1*    +) + #&+;  +G8¿©«ŸÓÓ™˜ÇÄÀ±ÎÉ­O¯ž» Ã®~)— H +  +  +” h "     + T& s +#!  =-   +º +    #=  / /#%3 +3.-?2)$-8,'!8,#:5!1Cç          è-# e;/1 + +# ) ') 1 + +ˆ .   3  +3#      ,;          +à  = -7 + !  ) 97    +=  +   Ô =  /U97! s-;6 +5;!))     +   +&g!      +½ 1;93(9 % == + #2);;  !@G    0   /3 /   H -1;   1'/7 + %5   95 +4W' % ) $!  " +)  +)       +  3: 3*/0/;@=5%=1#   +0! + 9(M&1d3/.8(=4)½89 / 3 -##    +)' '/   +  +    +*/! 31' +l=-7!!    )#%# -7 $ ## = : %3% ! & )&  +#5'93 !)'   /.5  +'!, 7) d-% + F A1;)1 +  & ;*< == //+ !+79/#*7;:  9 +   8 6!9  D3,#79%; + '7,  3     +  9   Q- +   $% 9 5    7 #+  1=! ';+! +   )+%&'77-7  - '' 5 3#9  7U  7 ;   03)1 3%  +IF      ¡    +  +%   + 13N! !  +S  11)5 + 6;  $ %    "      + +     +u  1.   +` G &0 +  ß    9;W1%     '! + 5! 96!538,) + !3 37 '   -1! #N#-! +  ;    #'5! + ) A     18"   %"+ ( ;!'; _' 3    + #; =*P) 5++   5!#" 7# +/ + %+-%  #  +q7# # + 9 .!   .  +  ¿+   # < & % 1      / 5+#  !   +/   9-  #       ž"   W  7 + )!!1  /   ; = +7 ,  ''"% +7! ' 775 !!70+)+)#  1 +?9!D!5 +=!+1 #5 & + (8=+  [ / +#% +"#11-  '- 5+>    *9 #7 ! ) ++%1 + +   +   3!    +!  99'9,'5! +!59#!)) '5' #/ + 7+  &%#   9*++7&)%9 ''*  + ! )     -9 33337=3*   +!  75016!;#'9!***%%7 + %)! +   )! !% #    o h   199  -    +        #-3#$   + ' +     J./ ! "!9 / )% +) #%   #   ;%   93+- +/%   %H    O  !-,,;;  1%) + 2  +!   < =#11$ /-! +%9!;  3  +! +  3 9#+ +19<(%'* /  /7-';=  + %3 391w    += %  '/+/; " ##  9 +5 x1  ='; %5   5%%!  7   17   /77- 4%#twh±{z‚‘ˆ’n…7exlw‡–o%þ!  6! ^   + ·%67  !S) + ;=3' + : 1    @ +  +93+ '/' + : ;/-559 %+;&7 + ) /    + +"#1+  T ; #  ! +X   <)),3    +3;==)    G  &   $- 3) #*D-  !9   "  + 9 +% '  ! h# , "!L!? 5:- ');#!;  + +   + î 3 J;1:;    +   + ÿ   ;;'=< %=3'1;   + +   +" 9 '- +Z ) 3 '     ]- 1 #%85  89   +;    !  92       % 99"#h3  #.!   =9+1f  .# +)=1   :- 75/.5 5! ! ! !!;!!/3;  1 99 7'#-'+; +O'%  % + `9 13#-2!8,   §#  +# #) 1 +    - + +\ ' 140 +  //+ %  !93 ;1  -3  !%; 1 ' ;/++:5+ -;; q9   '.  9;  55+9#  !..' !##!   8)5!E%* ! %%0  1E +%N     5 #  5,% !7  +/  + :;/./!     +77  /; !:#! ;    +   +* Ž 99 /:: 3  3 / +;3'    3 +9 '''   # '!  +F -    %+)% = !  %! 5#5"711 ) d   !%)    !9  C !#3 :!  +  + +13 1 % $##" - +# + ) 011 7==!0#/# 35    +  +N K))/9;' +1'' /  +"' ( 1  33==39%=!3#"9' #% +!%'# {!! % - 8'+-57- %V --  -- U  9;3 +3$ '%  !)!95    + +;== _£"8  3 ! 4 !39  4 5' =-' + ;# / + 7k;''="H';3  +      3   +    +Ð9 7 'C,7"!)$$/>9/*)/«3# + +§˜õû°ì€·š¸®•Ÿ˜ôÈÙðÕéè+ê=    ºO'* 113 ~' a=  + +    Ý7   +  ?    +$    +  + ã L  5+ <! =%!  +²!  #    2$ # # /;     +r/3 + 9! + 1 /=+35 ]©ˆ•½ìžˆ¸¢«¥«Ä^¡¤§Á²m+‰    +   %   + +Ä;"-%+ +;  e +     7  59+1  |#   +  &;    # +  Õ  =  4 m ==9'' + '!7 #   ! (## 9  ; ! "7% 7;:/,#;- ! '52 + +!--  + +:1 / !  25   +  µ%#  5  +      1  ¤% { % 1'5%5! - /;   µ%#  #- 5#-  + ')    +$3 );'95 7  *-5 , ' 5k& #):3%* !7;);=#+ :7'<!;7/=) );;;F%  -;;+        +ÿ-)#%'9%4=="5%3"   *)#-. +"/%1#$'+3èR j' +  % '" #=41 13R +  + +   3"    !3      +    7-7  +5-933% +// ! =#749!! ="/   '- 55' -/" ! +. 330 =75G==.-/)e#) !% %/ 5- #  ++ + %7;%=1 *= '  ' !% # (,(""" *€!7'/  % %; #  + s  ) ;+ #1' +    + + ­  / !': ==         + + ð  +  ?+  +    ;'n/+     +    + ~ !  }  +   ;     /-)5+ "&&'40.2 :#ï4 4 ;-!9- 4+'1;7!# 0 ' &/2-   "Ò+-  )%3755)'#       # 7 ))!0   2* 57# +' ! à 5'  -" %  '   5"-# ## Õ&-  + ‰5  )9 +   + +%7 9%  ( + +   !#%')+-/13579;= \ No newline at end of file Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.prx and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.prx differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.tii and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.tii differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/src/test/data/reuters-21578-index/_z.tis and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/src/test/data/reuters-21578-index/_z.tis differ diff -Nru clucene-core-0.9.21b/src/test/data/StopWords.test clucene-core-2.3.3.4/src/test/data/StopWords.test --- clucene-core-0.9.21b/src/test/data/StopWords.test 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/StopWords.test 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,12 @@ +a +an +and +are +as +at +be +but +such +these +will +with diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/arabic_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/arabic_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/arabic_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/arabic_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,15 @@ +ﻞﻴﻤﻳﺭ + +استبعدت تونس كابتن منتخبها القومي خالد بدرة من المجموعة الخامسة ÙÙŠ كأس العالم أمام ملاوي ÙÙŠ 26 مارس/ آذار. + +وكان كابتن المنتخب القومي روجر ليمير قد استبعد بدرة، 32 عاما، والذي قاد Ùريق بلاده ÙÙŠ كأس الأمم الإÙريقية، من الÙريق الذي يضم 23 لاعبا يوم الثلاثاء. + +وقد تم استبدال بدرة بالمهاجم علاء الدين يحيى المعار حاليا إلى Ùريق سان اتيان الÙرنسي من Ùريقه الإنجليزي ساوثامبتون. + +كما سيلعب منتخب تونس المعرو٠باسم نسور قرطاج دون لاعب الوسط عادل شيلدي الذي أوق٠عن اللعب. + +ومن المقرر أن تمثل المباراة Ùرصة لتونس لاستعادة اللاعب الÙرنسي المولد حامد ناموتشي. + +وكان ناموتشي، 20 عاما، لاعب الوسط والذي يلعب لصالح الÙريق الاسكتلندي رينجرز يلعب مع الÙريق القومي ÙÙŠ Ùبراير/ شباط ÙÙŠ المباراة الودية أمام تركيا غير أن المباراة ألغيت بسبب سوء الأحوال الجوية. + +ووÙقا لقوانين الاتحاد الدولي لكرة القدم (الÙÙŠÙا) يسمح للاعب كرة القدم تمثيل دولة أخرى طالما يحمل جنسية مزدوجة ويطلب تغيير الجنسية قبل سن 21. diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/chinese_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/chinese_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/chinese_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/chinese_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,32 @@ +啤酒 +é…’ +é’島啤酒與美國釀酒商åˆä½œ + + + +百å¨å•¤é…’是安海斯-布希公å¸ç”¢å“之一 +中國é’島啤酒集團和世界最大釀酒商美國安海斯-布希公å¸(Anheuser-Busch)é”æˆå”議,組æˆå•†æ¥­ç­–ç•¥è¯ç›Ÿã€‚ + +安海斯-布希公å¸æ˜¯ç”Ÿç”¢ç™¾å¨å•¤é…’(Budweiser Beer)çš„å…¬å¸ã€‚ + +安海斯-布希和é’島兩家公å¸å°‡çµåˆé›™æ–¹çš„資æºï¼Œé€²ä¸€æ­¥æ‹“展中國的市場。 + +é’島啤酒表示,兩家公å¸åˆè³‡çš„詳情ä»æœ‰å¾…商討。 + +安海斯-布希已經æŒæœ‰é’島4.5%的股權。 + +é’島å°å®‰æµ·æ–¯-布希來說,å¸å¼•åŠ›éžå¸¸å¤§ï¼Œä¸»è¦æ˜¯ç”±æ–¼é’島éåŠé¾å¤§ä¸­åœ‹å¸‚å ´çš„æ¯å€‹è§’è½ã€‚ + +é’島一直收購å°åž‹é‡€é…’商,æ高其市場佔有率。é’島目å‰çš„市場佔有率是11%。該公å¸è¡¨ç¤ºï¼Œå¸‚場佔有率æ¯å¹´å¢žé•·6%。 + +é æ–™è©²å…¬å¸åœ¨2002å¹´1月到6月的盈利增長了50%,å³è¶…éŽ1億元人民幣。 + +世界上30多個國家å‡æœ‰å‡ºå”®é’島啤酒。 + +æ¥ +《译员》下月将全çƒåŒæ­¥ä¸Šæ˜  妮å¯å°†æœ‰æœ›æ¥åŽ + +æ›´æ–° æ¥æºï¼šåƒé¾™æ–°é—»ç½‘ 第1页/å…±1页 << 上一页 | 下一页 + +因为将å‚演王家å«çš„《从上海æ¥çš„女人》,好莱åžè‘—å女星妮å¯Â·åŸºå¾·æ›¼åœ¨ä¸­å›½å†…地的人气激增。记者昨天了解到,由她主演的好莱åžå¤§ç‰‡ã€Šå›½å®¶ç¿»è¯‘员》作为今年内地首部全çƒåŒæ­¥å¼•è¿›å¤§ç‰‡ï¼Œå°†äºŽ4月22日公映,而妮å¯æœ¬äººå°†æœ‰æœ›æ¥åŽå‚加该片的宣传活动 + diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/czech_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/czech_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/czech_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/czech_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,78 @@ +BudÄ›jovický +Základní +informace NaÅ¡e mise + +Tradice: PÅ™i výrobÄ› originálního budÄ›jovického ležáku Budweiser Budvar používáme tradiÄní postupy a stavíme na znalostech a vÄ›domostech, které nám zanechaly generace sládků. + +Kvalita: NaÅ¡e pivo vaříme z nejkvalitnÄ›jších surovin, žateckého chmelu, moravského sladu a vody z naÅ¡ich vlastních artéských studní. + +JedineÄnost:Díky lahodné chuti a jedineÄnému složení a charakteru vyhledávají náš ležák tisíce milovníků kvalitních piv prakticky po celém svÄ›tÄ›. + +Originalita: Kdekoli na svÄ›tÄ› si koupíte Budweiser Budvar, můžete si být jisti, že byl vyroben v místÄ› svého původu ÄŒeských BudÄ›jovicích (dříve Budweis). Proto se můžeme v rámci přístupu ÄŒeské republiky do Evropské unie pyÅ¡nit "ochranou podle místa původu" pro naÅ¡e výrobky. + +Pivovar BudÄ›jovický Budvar + +Kvalita a vÄ›hlas budÄ›jovického piva, jehož historie sahá až do 13. století, vedly k tomu, že originální receptura i jeho jméno byly Äasto pÅ™edmÄ›tem napodobování a kopírování. + +Pivovar BudÄ›jovický Budvar je dlouhodobÄ› jedním z nejúspěšnÄ›jších potravinářských podniků v ÄŒeské republice. Téměř polovina produkce je úspěšnÄ› prodávána ve více než 60 zemích celého svÄ›ta. + +Novodobá historie pivovaru se datuje do roku 1967, kdy Ministerstvo zemÄ›dÄ›lství ÄŒeské republiky založilo národní podnik BudÄ›jovický Budvar jako přímého nástupce ÄŒeského akciového pivovaru, který vaÅ™il pivo v ÄŒeských BudÄ›jovicích již od roku 1895. Ten byl založen Äeskými právováreÄníky, kteří navázali na více než 700 let starou historii vaÅ™ení piva v ÄŒeských BudÄ›jovicích (dříve Budweis). + +BudÄ›jovický Budvar vlastní cenné duÅ¡evní vlastnictví v podobÄ› více než 380 ochranných známek registrovaných ve 101 zemích svÄ›ta. Mezi nejznámÄ›jší patří Budweiser, Budvar, Budweiser Budvar, Bud, BudÄ›jovický Budvar a Czechvar. Toto ohromné duÅ¡evní bohatství souvisí s místem svého původu, mÄ›stem ÄŒeské BudÄ›jovice, dříve Budiwoyz Äi Budweis. + +Postupnou a cílevÄ›domou expanzí na zahraniÄní trhy a posilováním prodejů doma dosáhl BudÄ›jovický Budvar pozice klíÄového hráÄe na trhu piva nejen v ÄŒeské republice. Objem exportovaného výstavu Å™adí prémiový originální ležák Budweiser Budvar k jedné z nejexportovanÄ›jších pivních znaÄek ÄŒeské republiky. V BudÄ›jovickém Budvaru, n. p., dnes pracuje pÅ™es 670 zamÄ›stnanců. + +Hlavní pÅ™edstavitelé pivovaru + +Ing. Jiří BoÄek – Å™editel +Ing. Josef Tolar – sládek +Ing. Petr Jánský – finanÄní a ekonomický manager +Ing. Robert Chrt – obchodní manager +Äesky english deutsche Úvod Mapa stránek + +Katalog výrobků +Katalog výrobků +To nejvzácnÄ›jší, co máme … + +NaÅ¡e vlastní vyÅ¡lechtÄ›ná kultura kvasinek (Saccharomyces cerevisiae subsp. uvarum), která dozrává pod peÄlivým dohledem sládků, otváří tu nejjemnÄ›jší souÄást lahodné chuti naÅ¡eho piva. + +K výrobÄ› naÅ¡eho piva jsou použity jen ty nejkvalitnÄ›jší suroviny a každá z nich je pro jeho unikátní chuÅ¥ neménÄ› důležitá. + +Panensky Äistá přírodní voda, která Äekala téměř 10 000 let na vysvobození z naÅ¡ich 300 m hlubokých artéských studní, dotváří jeho nezamÄ›nitelnou lahodnou chuÅ¥, kterou oceníte pokaždé, když se napijete. + +NaÅ¡e pivo vyniká dokonalou harmonickou chutí. Její základ tvoří kombinace tÄ›ch nejkvalitnÄ›jších domácích surovin a dlouholetá +zkuÅ¡enost generací sládků. + +K výrobÄ› jsou použity jen ty nejmodernÄ›jší technologie, zároveň se vÅ¡ak úzkostlivÄ› dbá na dodržování tradiÄních výrobních postupů, aby byla zachována stále stejná, vysoká kvalita. Velký důraz je kladen na zrání („ležení“) piva, které u prémiového originálního ležáku dosahuje minimálnÄ› 90 dní, u speciálního piva Bud Super Strong až 200 dní. + +SamiÄí hlávky vysoce kvalitního žateckého chmele (Humulus lupulus) dÄ›lají z naÅ¡eho piva opravdovou vzácnost. Dodávají mu totiž jeho nenapodobitelný, vysoce cenÄ›ný, jemný chmelový charakter. + +Zrnka unikátní odrůdy moravského jeÄmene (Hordeum vulgaris), která každoroÄnÄ› pÅ™ednostnÄ› vybíráme z prvotřídních sklizní, dodávají naÅ¡emu pivu jeho nenapodobitelnou zlatavou barvu. + + + +Seznam produktů + + + +Budweiser Budvar prémiový ležák + + +Budweiser Budvar prémiový ležák + + +BudÄ›jovický Budvar svÄ›tlé výÄepní pivo + + +Bud Super Strong + + +Budweiser Budvar Free nealkoholické pivo + + +Budweiser Budvar Free nealkoholické pivo + + +Budweiser Budvar tmavý ležák + +© 2003 VÅ¡echna práva vyhrazena, BudÄ›jovický Budvar n.p. Maintenance by ÄŒeský Web, a.s. diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/english_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/english_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/english_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/english_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,70 @@ +MSN vs. Google and Yahoo, Round 3 +Published: March 15, 2005, 7:41 PM PST +By Stefanie Olsen +Staff Writer, CNET News.com + +TrackBack +Print +E-mail +TalkBack + +Microsoft CEO Steve Ballmer is expected to show off a new paid-search service +on Wednesday that will eventually go toe-to-toe with rival Google and supplant +partner Yahoo's advertising. + +As previously reported, Microsoft's Internet group is developing a +pay-per-click ad-bidding system that pairs search results with sponsored text +messages from advertisers. Yahoo's Overture Services currently supplies MSN +with sponsored search links, which complement MSN-sold "featured sites." + +But the new MSN service, called AdCenter and set to roll out in Singapore and +France in the coming months, will bump Overture ads in the long run and let MSN +own a major source of its advertising revenue. (Microsoft splits fees collected +from marketers with Overture.) + +News.context + +What's new: +MSN is set to show off its version of a system for selling text ads linked to +search queries and results, a direct challenge to market leaders Google and +Yahoo. + +Bottom line: + +Microsoft's Internet group is hungry for a bigger piece of the +multibillion-dollar ad business related to search, and the new service will +eventually allow it to jettison a deal with Yahoo's Overture Services. That +agreement provides ad revenue but requires MSN to split the money with Yahoo. + +More stories on this topic +Microsoft does not have a specific date for a U.S. launch, but it envisions +operating the ad network globally, said Adam Sohn, an MSN spokesman. + +"Call this the third leg of the search stool," said Sohn. "First, we introduced +algorithmic search, then desktop (search), which is still in beta, and now the +advertising platform." + +With the product, Microsoft will move into the mother lode of a +multibillion-dollar ad business dominated by Google and Yahoo. Search-engine +marketing is expected to be worth as much as $5 billion this year, and nearly +$9 billion annually within four years, according to Jupiter Research. +Microsoft's piece of the pie is smaller than the shares enjoyed by market +leaders Yahoo and Google, and the software giant is hungry for more. + +Google fields 35.1 percent of the searches online, followed by Yahoo at 31.8 +percent and MSN at 16 percent, according to ComScore QSearch. If the number of +searches translates to the percentage of the ad market, MSN generates roughly +$1.6 billion annually from search, minus the portion shared with Overture. + +MSN's product is far from fully baked, according to Sohn, but it could +eventually crowd rivals, search engine watchers say. Given that there is a +finite number of searches conducted on the Internet, and hence a limited number +of opportunities to display search-related ads, MSN will grab ad dollars away +from Yahoo and Google, they say. According to data from ComScore QSearch, there +were roughly 4.9 billion search queries in the United States during the month +of January. + +"The big pie of searches out there isn't getting any bigger" because of MSN's +ad platform, said industry expert Danny Sullivan. "All that's + +Continued ... diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/french_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/french_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/french_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/french_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,30 @@ +réputé +comédie +Hitch - expert en séduction + +Alex Hitchens est un entremetteur (marieur) professionnel qui utilise des moyens peu orthodoxes pour coacher ses clients et jouer avec le destin. Il réussit ainsi avec succès à unir des hommes ordinaires avec des femmes extraordinaires. Malgré tout cela, Hitch ne croit pas en l'amour. +Pourtant sa rencontre avec Sara, une jeune journaliste sexy qui partage les mêmes points de vue cyniques sur les relations amoureuses va les amener sur un territoire inconnu... + + Vidéos : bande annonce + +Interviews + +Amber Valletta +Kevin James +Eva Mendes +Andy Tennant + +À propos du film +Notes de production : + +WILL SMITH COMME JAMAIS… + +Will Smith est l’une des plus célèbres stars de Hollywood. Héros d’action réputé pour son charme et son humour, il n’avait cependant encore jamais joué dans une comédie romantique. James Lassiter, producteur de HITCH et associé de Will Smith dans leur société de production, Overbrook Entertainment, explique : « Cela faisait des années que nous cherchions un bon scénario de comédie romantique pour Will. Ce n’est pas aussi facile que ça en a l’air. Ce genre de scénario est finalement assez rare, et les bons le sont encore plus ! » +James Lassiter et Teddy Zee ont été séduits par le scénario de Kevin Bisch, qui semblait fait pour Smith. Un « conseiller en séduction », un homme cool et sûr de lui aide, contre un peu d’argent, des hommes timides et qui ne brillent pas en société à gagner le cÅ“ur de n’importe quelle femme. James Lassiter explique : « C’est la légende urbaine parfaite : l’histoire d’un homme si charismatique qu’il peut enseigner aux autres comment s’y prendre pour séduire. + +« Selon la philosophie de Hitch, poursuit-il, trois jours suffisent pour mettre en lumière le « vrai vous » et conquérir la femme de vos rêves. » Teddy Zee, également producteur chez Overbrook, a lui aussi vu tout de suite le potentiel de l’histoire. « Il y a à la fois quelque chose de très urbain et de très raffiné dans ce scénario ; c’est contemporain, chic et très humain. Il faut aussi noter que l’histoire est racontée du point de vue masculin, ce qui est extrêmement rare dans les comédies romantiques. » + +Le scénariste Kevin Bisch a puisé son inspiration dans ses expériences personnelles à l’université. Après une suite de rendez-vous plus ou moins réussis avec différentes jeunes filles, il a réalisé qu’il finissait généralement assis au bord du lit avec elles, à feuilleter longuement des albums photos… « J’ai eu une révélation, confie-t-il en souriant. Comment avais-je pu être aussi bête ? Elles ne faisaient que tuer le temps en attendant que je les embrasse. Après ça, je me suis intéressé de près à la mécanique et au timing des débuts d’une relation avec une femme, et aux petits détails infimes… » + + + diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/german_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/german_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/german_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/german_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,20 @@ +Damit +können +führt + +Damit Sie sich aus allgemein zugänglichen Quellen ungehindert "unterrichten" können und tagesaktuell informiert sind, bieten wir Ihnen in Zusammenarbeit mit nationalen und internationalen Redaktionen einen Schlagzeilenservice der Sie direkt zum jeweiligen Artikel des Herausgeber führt. + +Grundgesetz der Bundesrepublik Deutschland +Artikel 5 +Meinungs-, Informations-, Pressefreiheit; Kunst und Wissenschaft +(1) Jeder hat das Recht, seine Meinung in Wort, Schrift und Bild frei zu äußern und zu verbreiten und sich aus allgemein zugänglichen Quellen ungehindert zu unterrichten. Die Pressefreiheit und die Freiheit der Berichterstattung durch Rundfunk und Film werden gewährleistet. Eine Zensur findet nicht statt. + +(2) Diese Rechte finden ihre Schranken in den Vorschriften der allgemeinen Gesetze, den gesetzlichen Bestimmungen zum Schutze der Jugend und in dem Recht der persönlichen Ehre. + +(3) Kunst und Wissenschaft, Forschung und Lehre sind frei. Die Freiheit der Lehre entbindet nicht von der Treue zur Verfassung. + + +Anmerkung: Jeder veröffentlichte Artikel wird von Journalisten mehr oder weniger gut recherchiert. Kein Journalist ist frei von Fehlern und frei von Subjektivität seine eigene Sicht zum jeweiligen Thema darzustellen. Aus diesem Grund sollten Sie zur Meinungsbildung immer mehrere Medien nutzen. Wir hoffen Ihnen mit diesem Service dabei helfen zu können. + +Auf die Auswahl der Schlagzeilen hat die German News Redaktion keinen Einfluss. Alle publizierten Schlagzeilen und Einführungstexte (teaser) geben nicht unbedingt die Meinung der German News Redaktion wieder. Eine weitere Verwendung der Schlagzeilen aus German News ist nicht gestattet und kann nur durch Einwilligung des jeweiligen Herausgeber erfolgen. Die Zuordnung zur Themenauswahl erfolgt frei. + diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/greek_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/greek_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/greek_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/greek_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,14 @@ +στείλτε + + +Ελληνικό Yahoo!: ΕÏγαλεία Επικοινωνίας + Yahoo! Mail - Διαβάστε και στείλτε emails από οπουδήποτε στον κόσμο με το Yahoo! Mail. ΜποÏείτε να έχετε Ï€Ïόσβαση ακόμα και στον POP3 mail λογαÏιασμό σας, μέσω του Web. + Yahoo! ΗμεÏολόγιο - Κάνει εÏκολη την οÏγάνωση της ημέÏας σας με τις υπενθυμίσεις, τις e-mail Ï€Ïοσκλήσεις, και τη λίστα εκκÏεμοτήτων. + Yahoo! Ατζέντα - ΟÏγανώστε τις διευθÏνσεις των φίλων σας. ΜποÏείτε να μεταφέÏετε όλες τις πληÏοφοÏίες για τους φίλους σας από το Microsoft Outlook, από το Netscape Address Book ή από το Palmtop σας. + Yahoo! Messenger - Στείλτε άμεσα μηνÏματα στους φίλους σας ή στους συνεÏγάτες σας. Σας στέλνει υπενθυμίσεις σε συνεÏγασία με το Yahoo! ΗμεÏολόγιο, ώστε να μη χάνετε κανένα σημαντικό ÏαντεβοÏ. + Yahoo! Σημειώσεις - ΑποθηκεÏστε όλες τις σημειώσεις σας στο Web. ΤώÏα μποÏείτε να έχετε Ï€Ïόσβαση στις σημειώσεις σας από οπουδήποτε, οποιαδήποτε στιγμή. + + + +ΤώÏα στο Ελληνικό Yahoo! όλα αυτά τα εÏγαλεία είναι εντελώς δωÏεάν. Και μποÏείτε να τα έχετε για πάντα! + diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/hebrew_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/hebrew_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/hebrew_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/hebrew_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,408 @@ +ב×רצות +Ale + + + בירה נפוצה מ×ד בעיקר ב×רצות ×נגלוסקסיות, צבעה ×›×”×” ולייצורה ×ž×©×ª×ž×©×™× ×‘×©×ž×¨×™ תסיסה עילית. בירה קילקני ×”×™× ×‘×™×¨×” מסוג ×–×”. + + + +CO2 + + + ×’×– פחמן דו חמצני הנוצר על ידי ×”×©×ž×¨×™× ×‘×ª×”×œ×™×š התסיסה. זהו ×”×’×– ×ותו ×נו ×—×©×™× ×‘×¢×ª שתיית הבירה. + + + +Lager + + + + הבירה הנפוצה ביותר בעול×, צבעה בהיר, קלה לשתיה, בעלת ×רומה קלה ונעימה, ידועה ×’× ×‘×©× Pilsner על-×©× ×”×‘×™×¨×” הצ'כית המפורסמת ולייצורה ×ž×©×ª×ž×©×™× ×‘×©×ž×¨×™ תסיסה תחתית. קרלסברג, טובורג רד וטובורג גרין הן בירה מסוג ×–×”. + + + +Stout + + + צבעה ×›×”×” ולייצורה ×ž×©×ª×ž×©×™× ×‘×©×ž×¨×™ תסיסה עילית. בירה גינס ×”×™× ×‘×™×¨×” מסוג ×–×”. + + Widget + + + התקן מיוחד שהינו למעשה מיכלון קטן המכיל ×’×– חנקן ומוחדר בעת המילוי לבקבוק ×ו לפחית של גינס Draught. ×›×©×¤×•×ª×—×™× ×ת הבקבוק ×ו הפחית, המיכלון מתבקע ומשחרר ×ת החנקן היוצר ×ת הקצף העשיר והסמיך המיוחד של גינס. + + + +×לכוהול + + + ×תנול, ×ו כוהל ×תילי. נוצר בזמן התסיסה של השמרי×. + + + + +ב×לטיקה + + + ב×לטיקה ×”×™× ×” המבשלה הגדולה ביותר לייצור בירה ברוסיה ו×חת מהמובילות ב×ירופה. + +למבשלות בירה ב×לטיקה ×¡×•×’×™× ×¨×‘×™× ×•×ž×’×•×•× ×™× ×©×œ בירה ×›×שר העיקרון המנחה ×ת המבשלה ×”×•× ×‘×™×©×•×œ בירה המבוססת על ×ž×¨×›×™×‘×™× ××™×›×•×ª×™×™× ×‘×™×•×ª×¨. + +מבשלות בירה ישר×ל משווקת בקבוקי ב×לטיקה 0.5 ליטר מספר 3, 4, 6 ו-9 ופחיות 0.5 ליטר מספר 5 ו-7. + + + +בירה + + + הבירה ×”×™× ×” משקה מוגז בדרך-כלל ×לכוהולי עשוי ×ž×“×’× ×™× ×©×•× ×™×. במשך ×לפי שנות קיומה הבירה פשטה ולבשה טעמי×, ריחות ×•×¦×‘×¢×™× ×‘×”×ª×× ×œ×ž×¡×•×¨×•×ª, יכולות טכנולוגיות והתקדמות מדעית. הבירה נחשבת למשקה פופולרי בכל היבשות ובקרב כל העמי×. + + + +בירה ×œ×œ× ×לכוהול +בירה שתססה בתהליך רגיל ×ך ×”×לכוהול הורחק ממנה בתהליכי זיקוק ×ו בעזרת ממברנות דוגמת Reverse Osmosis. + + בירה מ×לט + + + בירה ×œ× ×›×•×”×œ×™×ª המכילה כמות של ×¡×•×›×¨×™× ×•×¢×œ כן מתוקה. הבירה יכולה לתסוס זמן קצר על מנת לסלק ×˜×¢×ž×™× ×•×¨×™×—×•×ª ××•×¤×™×™× ×™×™× ×œ×ª×™×¨×•×©. הבירה ×›×”×” לרוב בגין הוספת כמות נכבדת של לתת קלוי ×›×”×” מ×ד. + + + + +בירה מתסיסה פר×ית + + +בירה ש××™× ×” מוססת על ידי זן ×©×ž×¨×™× ×ž×•×’×“×¨ ××œ× ×¢×œ ידי ×©×ž×¨×™× ×”× ×ž×¦××™× ×‘×ווירת המבשלה. זוהי תסיסה ספונטנית המקובלת בעיקר בבלגיה. + + + + +גינס + + +בירה מסוג Stout, ×יכותית ביותר. בעלת צבע ×›×”×” מ×ד שמקורו בלתת קלוי היטב. בירה מרירה מ×ד ובעלת קצף מיוחד ועשיר הנובע מהתערובת הייחודית של חנקן ו-CO2. גינס ייחודית בבקבוק מהפכני. ב×מצעות התקן מיוחד בתוך הבקבוק ×ž×©×ª×—×¨×¨×™× ×”×’×–×™× ×¢× ×”×¤×ª×™×—×” וכך נוצר קצף עשיר וסמיך ×•×˜×¢× ×”×–×”×™× ×œ×‘×™×¨×” הנמזגת מהחבית. + + + +די×ט מ×לטי + בירה שחורה די×ט מ×לטי בה הוחלף חלק גדול ×ž×”×¡×•×›×¨×™× ×©×‘×” ×‘×ž×ž×ª×™×§×™× ×ž×œ××›×•×ª×™×™× ×›×š שכמות הקלוריות בה ×”×™× ×” כמחצית מכמות הקלוריות של בירה מ×לטי רגילה ובכל מקרה ×œ× ×™×•×ª×¨ מ 20 קלוריות ל 100 מ"ל. + + + +הלתתה + + + תהליך יצור לתת במהלכו השעורה עוברת הנבטה בתהליך מבוקר של רטיבות וטמפרטורה. תוך כדי נביטת הגרעין ×ž×™×•×¦×¨×™× ×‘×•, מסונתזי×, ×× ×–×™×ž×™× ×”×ž×¡×™×™×¢×™× ×œ×¤×¨×§ ×ת מ×גר ×”×נרגיה שבו, ×”×¢×ž×™×œ× ×™× ×”× ×ž×¦××™× ×‘×נדוספר×. + + +בשלב ר×שון ×ž×¡×•× ×ª×–×™× ×”×× ×–×™×ž×™× ×”×ž××¤×©×¨×™× ×’×™×©×” לתוך ת××™ העמילן ×•×”× ×ž×¤×¨×§×™× ×ת דופן הת××™× ×”×ž×›×™×œ×™× ×¢×ž×™×œ×Ÿ. בשלב שני ×ž×¡×•× ×ª×–×™× ×× ×–×™×ž×™× ×”×ž×¡×™×™×¢×™× ×œ×¤×¨×§ ×ת ×”×¢×ž×™×œ× ×™× ×¢×¦×ž×, ×× ×–×™×ž×™× ×¢×ž×™×œ×•×œ×™×˜×™×™×. + +בשלב ×–×” מופסקת הנביטה בתהליך קלייה. תהליך ×–×” מייבש ×ת הגרעין ו"מקפי×" למעשה ×ת ×ž×¦×‘× ×©×œ ×”×נזימי×. למרות ×”×—×•× ×”×¨×‘ ×ליו נחשף הגרעין בתהליך הייבוש, חיוניות ×”×× ×–×™×ž×™× × ×©×ž×¨×ª ×ך ×”× ××™× × ×¤×¢×™×œ×™×. +×× ×–×™×ž×™× ×לה ×ž×©×ž×©×™× ×ותנו בתהליך בתחילת תהליך מיצוי ×”×¡×•×›×¨×™× ×‘×‘×™×ª הבישול במבשלת הבירה. + +בתחילת תהליך ×–×” ×נו ×’×•×¨×¡×™× ×”×œ×ª×ª ×•×ž×¨×˜×™×‘×™× ×ת הלתת ×‘×ž×™× ×—×ž×™×ž×™×. ×ª×”×œ×™×›×™× ×לו ×ž×¢×•×¨×¨×™× ×ת ×”×× ×–×™×ž×™× ×œ×¤×¢×•×œ×” ×•×”× ×ž×ª×—×™×œ×™× ×‘×ª×”×œ×™×›×™ פירוק ×”×¢×ž×™×œ× ×™× ×œ×¡×•×›×¨×™×. ×¡×•×›×¨×™× ×לו ישמשו ×ת שמרי הבירה במהלך תסיסתה. + +×ž×©×˜×¨×™× ×©×•× ×™× ×©×œ הנבטה וקליה ×™×•×¦×¨×™× ×¡×•×’×™× ×©×•× ×™× ×©×œ לתת ×”× ×‘×“×œ×™× ×‘×¦×‘×¢× ×•×‘×˜×¢×ž× ×•×ž××¤×©×¨×™× ×œ×™×¦×•×¨ מגוון של בירות. + + + +ווינשטפן + + +מבשלה ×‘×“×¨×•× ×ž×–×¨×— גרמניה הנחשבת למבשלה העתיקה ×‘×¢×•×œ× ×שר החלה לייצר בירה בשנת 1040. + +הבירה עשויה מתערובת של לתת שעורה ולתת חיטה. הבירה קלה חמצמצה ו×רומטית. + + + +בירת חיטה ×”×™× ×” בירה שבתהליך הבישול המיוחד שלה ×ž×•×¡×™×¤×™× ×œ×” חיטה ×•×©×ž×¨×™× ×‘×יכות הטובה ביותר ×•×ž×‘×“×œ×™× ×ת הבירה בתכונות הסנסוריות שלה ש×ותן ×ž×–×”×™× ×“×¨×š החושי×: + +×˜×¢× ×ž×™×•×—×“ ×¢× ×רומות וניחוחות ×¤×™×¨×•×ª×™×™× +ר×ש קצף ×חיד ומיוחד +בירה לבנה ומעוננת בעלת עכירות טבעית +×חוז ×לכוהול גבוה יחסית, 5.4% + + + +חבית + + + למה בירה מהחבית? + +בגלל הטע×: החשיפה הקצרה ×œ×—×•× ×‘×ª×”×œ×™×š הפסטור מש×ירה ×ת ×˜×¢× ×”×‘×™×¨×” קרוב מ×ד לטעמה המקורי. בנוסף, כתוצ××” מהמזיגה נוזל הבירה משחרר CO2 המשביח ×ת ×˜×¢× ×”×‘×™×¨×”. ×”×˜×¢× ×¤×—×•×ª מריר, יותר קליל ופחות מוגז. בירה מהחבית תמיד מוגשת בטמפרטורה הנכונה + +בגלל הטריות: מחזור החביות בשוק קצר ביותר ומרבית החביות נמזגות בתוך ×©×‘×•×¢×™×™× ×¢×“ חודש ×ž×™×•× ×”×ž×™×œ×•×™ כך שהבירה טרייה מ×ד. + + + +חומרי ×’×œ× + +חומרי ×”×’×œ× ×”×ž×©×ž×©×™× ×œ×™×™×¦×•×¨ בירה כוללי×: מי×, לתת, לתת קלוי, ×—×•×ž×¨×™× ×¢×ž×™×œ× ×™×™×, סוכר (לעתי×), כשות, שמרי×, חו×, CO2. + + + +×—×•×ž×¨×™× ×¢×ž×™×œ× ×™×™× ×•×¡×•×›×¨ + +עמילן ממקורות ×¦×ž×—×™×™× ××—×¨×™× ×ž×©×ž×© כחומר ×’×œ× × ×•×¡×£ לייצור בירה יחד ×¢× ×”×œ×ª×ª. במערב ×ירופה ×ž×©×ª×ž×©×™× ×‘×ª×™×¨×¡, במזרח ×ירופה נעשה שימוש בתירס ובניגריה ×•×‘×ž×¦×¨×™×™× ×¡×•×¨×’×•× ×”×•× ×”×¢×ž×™×œ×Ÿ שבשימוש. + +×‘×¡×•×’×™× ×ž×™×•×—×“×™× ×©×œ בירה ×ž×©×ª×ž×©×™× ×‘×—×™×˜×” (דוגמת בירה ווינשטפן). החיטה תורמת סמיכות וקצף בעיקר בבירות מסוג Ale. ניתן להוסיף סוכר ממקורות ×©×•× ×™× ×ך סוכר ×–×” ×ינו ×ª×•×¨× ×˜×¢× ×•×¦×‘×¢. תירס ו×ורז ×ž×©×ž×©×™× ×‘×™×™×¦×•×¨ בירות ×יכותיות, קלות וחזקות בעיקר מסוג Lager. + +חוק טוהר הבירה הגרמני משנת 1564 ×œ× ×ž×¨×©×” שימוש ×‘×—×•×ž×¨×™× ××—×¨×™× ×–×•×œ×ª לתת שעורה. ××•×œ× ×—×•×§ ×–×” ×ינו מחייב במדינות ×חרות. + + + +×—×™×™ מדף + + + ×—×™×™ מדף של בירה מתחלק לשלוש ×”×ריזות הקיימות בשוק. + +חבית: שישה ×—×•×“×©×™× ×ž×™×•× ×”×ž×™×œ×•×™ + +בקבוק: ×©× ×™× ×¢×©×¨ ×—×•×“×©×™× ×ž×™×•× ×”×ž×™×œ×•×™ + +פחית: ×©× ×™× ×¢×©×¨ ×—×•×“×©×™× ×ž×™×•× ×”×ž×™×œ×•×™ + + + +טובורג רד + + +בירה ×›×”×” מסוג בירה Lager. הבירה מכילה 5.2% ×לכוהול, צבעה עמוק וטעמה עשיר. + + + +טובורג גרין + +בירה בהירה, עדינה וטעימה מסוג בירה Lager. הבירה מכילה 4.6% ×לכוהול. + + + +טעימות בירה + ×ת הבירות ×˜×•×¢×ž×™× ×‘×˜×ž×¤×¨×˜×•×¨×” של 15 מע"צ ובטמפרטורה המומלצת שלהן ×›×שר כוס הטעימה שקופה ונקייה ובדומה לכוס היין, ×’× ×ž×¢×˜ מעוגלת בכדי שה×רומה ×œ× ×ª×‘×¨×—. + + + +טעימת בירה מזכירה במקצת טעימת יין: + +התרשמות ויזו×לית: ×ž×ª×‘×•× × ×™× ×‘×‘×™×¨×” ×•×‘×•×—× ×™× ×ת צבע, השקיפות, המר××” והקצף. + +הרחה: ×ž×¨×™×—×™× ×•×ž×ª×¨×©×ž×™× ×ž×”×רומות השונות. + +לגימה: ×˜×•×¢×ž×™× ×•×ž×’×œ×’×œ×™× ×ת הבירה בחלל הפה ×•×ž× ×™×—×™× ×œ×œ×©×•×Ÿ ×œ×˜×¢×•× ×ת קשת ×”×˜×¢×ž×™× ×ª×•×š כדי בליעתה. + + + +כוהל בנפח + + + ×חוז הכוהל בבירה ×ž×‘×•×˜× ×‘×™×—×™×“×•×ª נפח (מ"ל לליטר) + + + +כשות (Hops) + + + כשות הינו צמח מטפס הגדל ב×ירופה וזקוק לקור. בן דודו גדל ב×רץ כמטפס טפיל. ב×ירופה ב×רה"ב ובמדינות נוספות ×ž×’×“×œ×™× ×ותו במיוחד כחומר חשוב ליצור בירה. לכשות תפרחת קטנה בצבע ירוק ובצורת חרוט. בתחתית עלי הכותרת ×”×™×¨×•×§×™× ×ž×¦×•×™×•×ª בלוטות קטנות המייצרות חומצת ××œ×¤× ×”×™× ×”×—×•×ž×¨ הנותן ×ת ×”×˜×¢× ×”×ž×¨ לבירה, ×•×’× ×©×ž× ×™× ××ª×¨×™×™× ××¨×•×ž×˜×™×™× ×”×ª×•×¨×ž×™× ×’× ×רומה לבירה. + + + +×§×™×™×ž×™× ×–× ×™× ×©×•× ×™× ×©×œ כשות ולכל ×חד הריחות ×•×”×˜×¢×ž×™× ×©×œ×•. הברומ×סטר בוחר ×ת הכשות שמת×ימה לבירה שברצונו לייצר. + +לבד מ×רומה לכשות תכונה המעכבת גידול של חיידקי×. + +בעבר הוסיפו ×ת שיחי הכשות למיכל ההרתחה ××•×œ× ×›×™×•× ×¢× ×”×ª×¤×ª×—×•×ª התעשייה ×ž×•×¡×™×¤×™× ×›×•×¤×ª×™×•×ª העשויות מהתפרחת ×ו מיצוי מרוכז שלהן. + + + +לתת (Malt) + + + גרעיני שעורה שעברו תהליך הלתתה בבתי הלתתה מיוחדי×. העמילן שבלתת קל לפירוק לסוכר הדרוש ×œ×©×ž×¨×™× ×œ×ª×¡×™×¡×”. שלבי ייצור הלתת: השריית השעורה במי×, נביטה, קלייה וייבוש, ניפוי ו×חסון. + + + +לתת קלוי + + + לתת שתהליך הקלייה הסופי שלו מתבצע בטמפרטורה גבוהה במיוחד הגורמת להיווצרות צבע ×›×”×” ×•×˜×¢× ×§×œ×™×™×” ×ופייני. + + + +מ×לטי + + + בירה שחורה ×œ×œ× ×לכוהול. מיוצרת מלתת קלוי המקנה לה ×ת צבעה השחור ו×ת טעמה המיוחד. ××™× ×” מכילה ×לכוהול בזכות תהליך ייצור מיוחד השונה מייצור בירה רגילה. למ×לטי תכונות ברי×ותיות רבות ומגוונות: מ×לטי ×”×•× ×ž×©×§×” ×יזוטוני הנספג במהירות במערכת העיכול ונוזלי הגוף, מ×לטי מעשיר ×ת הגוף במגוון ×¡×•×›×¨×™× ×”×ž×ª×¤×¨×§×™× ×œ×ורך זמן וכן מכילה ×•×™×˜×ž×™× ×™× ×•×ž×™× ×¨×œ×™× ×”×ž×¡×™×™×¢×™× ×œ×ª×¤×§×•×“ מערכות הגוף. + + + +מילוי ×ספטי + + + + תהליך מילוי ייחודי של משקה לתוך ×”×ריזה בצורה המונעת ×–×™×”×•× ×”×ž×©×§×” ×”×ריזה ×ו הפקק, לקבלת ×ריזה סטרילית. + + + +מילוי קר + + + מילוי של משק×ות לתוך ××¨×™×–×ª× ×‘×˜×ž×¤×¨×˜×•×¨×” נמוכה. משק×ות ×ž×•×’×–×™× ×—×™×™×‘×™× ×œ×ž×œ× ×‘×˜×ž×¤×¨×˜×•×¨×” נמוכה כדי למנוע "בריחת" ×”×’×– במהלך המילוי. + + + +×ž×™× + + + ×ž×™× ×”× ×œ×›×ורה חומר ×’×œ× ×¤×©×•×˜ ביותר ×ך ×œ× ×›×š הדבר. יש חשיבות להרכב ×”×ž×™× ×•×œ×ž×•×ž×¡×™× ×”×ž×¦×•×™×™× ×‘×”×. + +×ž×™× ×¨×›×™×, ×”×ž×›×™×œ×™× ×›×ž×•×ª קטנה של סידן מת××™×ž×™× ×œ×™×¦×•×¨ בירות מסוג Lager ו-Pilsner (בירות של תסיסה עילית). העיר פילזן שבצ'×›×™×” ידועה בכל ×”×¢×•×œ× ×‘×ž×™× ×”×˜×•×‘×™× ×©×œ×” המת××™×ž×™× ×ž×ד ליצור בירות מסוג ×–×” (ומכ×ן ×’× ×”×©× Pilsner). + +×ž×™× ×§×©×™×, ×”×ž×›×™×œ×™× ×”×¨×‘×” סידן מת××™×ž×™× ×œ×™×¦×•×¨ הבירות מסוג Ale ו-Stout (בירות של תסיסה עילית הנפוצות ב××™×™× ×”×‘×¨×™×˜×™×™×). + + + +ערך ברי×ותי + לבירה ערך ברי×ותי בשני ×ª×—×•×ž×™× ×—×©×•×‘×™×: + +1. זירוז פעילות מערכת השתן והכליות בגוף ×”×ד×. + +2. מניעת מחלות בכל ×”×“× ×•×”×œ×‘. + + + +ערך קלורי + + + + בירה ××™× ×” משמינה יותר ממשקה קל רגיל וברוב ×”×ž×§×¨×™× ××£ מכילה פחות קלוריות. + + + +השוו×ת ערך קלורי של משק×ות ל-100 מ"ל משקה: + +בירה קרלסברג: 43 + +בירה טובורג גרין: 39 + +בירה מ×לטי: 35 + +בירה מ×לטי די×ט: 18 + +חלב 1% שומן: 41 + +חלב 3% שומן: 57 + +משק×ות ×§×œ×™× ×•×ž×™×¦×™×: 40-50 + +× ×§×˜×¨×™× ×©×•× ×™×: 45-55 + + + + + +ערך תזונתי + + + + בירה מיוצרת ×ž×—×•×ž×¨×™× ×˜×‘×¢×™×™× ×‘×œ×‘×“! ×ין בה ×—×•×ž×¨×™× ×ž×œ××›×•×ª×™×™× ×•×—×•×ž×¨×™× ×ž×©×ž×¨×™×. בירה מכילה ×ž×™× ×¨×œ×™× ×•×•×™×˜×ž×™× ×™× ×¨×‘×™× ×›×’×•×Ÿ ×שלגן, סידן ×ž×’× ×–×™×•× ×•×–×¨×—×Ÿ. ×›×•×œ× ×—×•×ž×¨×™× ×—×™×•× ×™×™× ×œ×’×•×£ ×”×ד×. + + + +הרכב תזונתי ל-100 מ"ל בירה + +קלוריות: 43 + +שומני×: 0 + +×—×œ×‘×•× ×™× (גר×): 0.1 + +פחמימות (גר×): 4 + +×לכוהול (גר×): 3.9 + + + +פסטור + + פסטור בירה ×‘×‘×§×‘×•×§×™× ×•×‘×¤×—×™×•×ª נועד לשמר ×ת הבירה לתקופת ×—×™×™ המדף שלה על-ידי השמדת כל המיקרו××•×¨×’× ×™×–×ž×™× ×”× ×ž×¦××™× ×‘×ריזה. תהליך הפסטור ×”×•×ž×¦× ×¢×œ-ידי לו××™ פסטר ועיקרו ×—×™×ž×•× ×”×‘×™×¨×” לטמפרטורה של 60-70 מעלות צלזיוס למשך מספר דקות. מכיוון ×©×—×•× ×¤×•×’×¢ ×‘×˜×¢× ×”×‘×™×¨×”, על ×”×—×™×ž×•× ×œ×”×™×•×ª קצר ככל ×”×פשר. + +פסטור בירה בבקבוקי×/פחיות מתבצע במנהרת פסטור מיוחדת על-ידי התזת ×ž×™× ×—×ž×™× ×¢×œ ×”×ריזות ל×חר המילוי והפיקוק. ×”×ž×™× ×ž×—×ž×ž×™× ×ת הבירה עד לפסטורה ול×חר מכן ×ž×§×¨×¨×™× ×ותה על-ידי התזת ×ž×™× ×§×¨×™×. + + + +פרוקטוז + + + +סוכר פירות + + + +צלילות + + + שקיפות הבירה. בגמר תהליך התסיסה הבירה עכורה בשל ×”×©×ž×¨×™× ×©×‘×”. ×”×©×ž×¨×™× ×ž×•×¤×¨×“×™× ×œ×§×‘×œ×ª בירה צלולה. + + + +קילקני + + + +בירה ×ירית מסוג Ale, עדינה מ×ד וקלה לשתיה. מבית גינס העולמית. צבעה ××“×•× ×¢×ž×•×§ ×•×”×™× ×ž×™×•×¦×¨×ª מ-100% מ×לט ×ירי משובח. טמפרטורת ההגשה שלה נמוכה (4-6 מעלות). מ×פייני הבירה ×”× ×ž×–×™×’×ª×” הייחודית ושילוב ×”×’×–×™×, חנקן ו-CO2 מעניק לבירה ר×ש קצף עדין הנשמר ל×ורך זמן. + + + +קצף +הקצף הינו תכונה חשובה של הבירה ×•×ª×•×¨× ×œ×ž×¨××” ולהנ××” ממנה. הקצף נוצר על ידי ×”×—×œ×‘×•× ×™× ×©×‘×‘×™×¨×” וגז ×”-CO2. + + + +קרלסברג +בירה בהירה ומשובחת ביותר מסוג בירה Lager. בעלת ×˜×¢× ×•×יכות ×ž×™×•×—×“×™× ×©×”×§× ×• לה ×©× ×¢×•×œ×ž×™ בשוק הבירות. מיוצרת עפ"×™ המסורת הדנית הידועה ומכילה 5.0% ×לכוהול. + + + +קרמל + + + סוכר שרוף המקנה למשק×ות צבע ×›×”×” ×•×˜×¢× ×™×™×—×•×“×™ (קרמלי) + + + +שמרי בירה + + + +×”×©×ž×¨×™× ×”× ××•×ª× ×ž×™×§×¨×•××•×¨×’× ×™×–×ž×™× ×”×ž×¡×•×’×œ×™× ×œ×”×ª×¡×™×¡ סוכר לגז ול×לכוהול. + +×”×©×ž×¨×™× ×ž×ª×¡×™×¡×™× ×ת הסוכר לצורך הפקת ×נרגיה ×œ×’×“×™×œ×ª× ×•×”×ª×¨×‘×•×ª×. ××•×œ× ×ª×•×š כדי תהליך התסיסה ×”× ×’× ×ž×™×™×¦×¨×™× ×•×ž×¤×¨×™×©×™× ×ž×ות רבות של ×—×•×ž×¨×™× ×”× ×•×ª× ×™× ×‘×™×—×“ ×ת ×”×˜×¢× ×”×ופייני לבירה. + +×™×©× × ×–× ×™× ×©×•× ×™× ×•×¨×‘×™× ×©×œ שמרי×. לכל מבשלה ×”×©×ž×¨×™× ×”×ž×™×•×—×“×™× ×©×œ×”. כל ×”×©×ž×¨×™× ×ž×©×ª×™×™×›×™× ×œ×ž×©×¤×—×ª ×©×ž×¨×™× ×”× ×§×¨×ת Saccharomyces על ×©×•× ×™×›×•×œ×ª× ×œ×”×ª×¡×™×¡ סוכר. + + + +במבשלות קרלסברג שבקופנהגן, דנמרק, פותחה לר×שונה בעול×, לפני ×› 150 שנה, שיטת "התרבית הנקיה" (Pure Culture) ×©×”×™× ×בן יסוד למיקרוביולוגיה המודרנית. השמר הר×שון שבודד בשיטה זו × ×§×¨× ×¢×œ כן Saccharomyces Carlsbergnesis ×•×”×•× ×”×©×ž×¨ המשמש עד ×”×™×•× ×œ×™×¦×•×¨ בירה קרלסברג ×‘×¢×•×œ× ×›×•×œ×• ×•×’× ×‘×ž×‘×©×œ×•×ª בירה ישר×ל בע"מ שב×שקלון. + + + +שעורה + +סוג של דגן ממנו ×¢×•×©×™× ×œ×ª×ª המשמש לייצור בירה. + + + +תסיסה עילית + +בסוג תסיסה ×–×” ×”×©×ž×¨×™× ×¢×•×œ×™× ×œ×¨×ש מיכל התסיסה בגמר התהליך. טמפרטורת התסיסה גבוהה בין 15-22 מעלות, משך התסיסה קצר בין 3-8 ×™×ž×™× ×•×רומת הבירה ×”×™× ×©×œ פירות. הבירות ממשפחה זו ×ž×§×•×¨× ×‘××™×™× ×”×‘×¨×™×˜×™×, ×נגליה, ×ירלנד וסקוטלנד וכן בירות מיוחדות מבלגיה, הולנד וגרמניה. סוגי בירות ×לו נקר××™× Ale ו-Stout. גינס וקילקני נמנות על הבירות המיוצרות מסוג תסיסה ×–×”. + + + +תסיסה תחתית + + + +בסוג תסיסה ×–×” ×”×©×ž×¨×™× ×©×•×§×¢×™× ×œ×ª×—×ª×™×ª מיכל התסיסה בגמר התהליך. טמפרטורת התסיסה נמוכה בין 5-15 מעלות, משך התסיסה ×רוך בין 2-12 שבועות ו×רומת הבירה ×”×™× ×©×œ פרחי×. בירות ×לה נפוצות ×‘×¢×•×œ× ×•×ž×§×•×¨×Ÿ בצ'×›×™×”, גרמניה, דנמרק והולנד. הבירות הנפוצות ממשפחה זו הן בירה ×”-Lager וה-Pilsner. בירות בהירות, קלות לשתיה ובעלות ×רומה קלה ונעימה. קרלסברג, טובורג רד וטובורג גרין נמנות על הבירות המיוצרות מסוג תסיסה ×–×”. + + diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/japanese_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/japanese_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/japanese_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/japanese_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +見学 +1 ページ / 2 ページ +次㸠+ + 7月22・23日を利用ã—ã¦ï¼ŒPlzen ã«ã„ã£ã¦ãã¾ã—ãŸï¼Žãƒ¡ã‚¤ãƒ³ã¯ã“ã®ãƒ“ールåšç‰©é¤¨ï¼†å·¥å ´è¦‹å­¦ï¼Žã¤ã„ã§ã«å‘³è¦‹ã‚‚.ã¨ã¦ã‚‚興味深ã„日をéŽã”ã™ã“ã¨ãŒå‡ºæ¥ã¾ã—ãŸï¼Ž + + 多ãã®æ–¹ãŒã”å­˜ã˜ã¨æ€ã„ã¾ã™ãŒï¼Œã“ã®Plzensky Prazdroj (プルゼーニュスキー・プラズドロイ)ã¯ï¼Œãƒ‰ã‚¤ãƒ„・ミュンヘンã‹ã‚‰ï¼‘842年ã«å°Žå…¥ã•ã‚ŒãŸä½Žæ¸©ä¸‹ã«ãŠã‘る「下é¢ç™ºé…µã€ã¨ã„ã†é†¸é€ æŠ€è¡“ãŒï¼Œã“ã®åœŸåœ°ã®éº¦ãƒ»ãƒ›ãƒƒãƒ—・水・風土ã¨ã†ã¾ã調和ã—,ã¾ãŸäººã€…ã®å¤§ããªåŠªåŠ›ã«ã‚ˆã£ã¦ã¾ã•ã«èŠ±é–‹ã„ãŸãã®å…ƒç¥–ã®ãƒ“ールã§ã™ï¼Žä»Šæ—¥ã€Œãƒ”ルスナービールã€ã¨å‘¼ã°ã‚Œã‚‹ãƒ“ールãŒï¼Œä¸–ç•Œã®å¤§ããªå‹¢åŠ›ã¨ãªã£ã¦ã„ã¾ã™ãŒï¼Œãã®ã€Œãƒ”ルスナーã€ã¨ã¯ã“ã®Plzen(プルゼーニュ)ã¨ã„ã†è¡—ã®ãƒ‰ã‚¤ãƒ„å,Pilsen(ピルゼン)ã®ï¼Œã¨ã„ã†æ„味ã§ã™ï¼Ž + + ãã®é‡åŽšãªï¼Œã—ã‹ã—爽やã‹ã§é£²ã¿è¶Šã—ã®ã„ã„ビールã¯ï¼Œé£²ã‚“ã äººã™ã¹ã¦ãŒä¸–界最高ã®ãƒ“ールã§ã‚ã‚‹ã¨ã„ã†ã§ã—ょã†ï¼Žéº¦ã¨æ°´ã¨ãƒ›ãƒƒãƒ—ã ã‘ã‹ã‚‰ç¹°ã‚Šå‡ºã•ã‚Œã‚‹ã“ã®å‘³ã¯æœ¬å½“ã«å¿˜ã‚Œã‚‰ã‚Œãªã„ã‚‚ã®ã§ã™ï¼Ž + + ã¡ãªã¿ã«ï¼Œã“ã®ãƒ“ール,特ã«ãƒãƒªãƒ³ã‚°åº¦ï¼ˆæœ€åˆã«ãƒ¢ãƒ«ãƒˆã‹ã‚‰ã¨ã‚‹éº¦æ±ã‚’æ°´ã§ã‚ã£ãŸã¨ãã®éº¦æ±æ¿ƒåº¦ï¼‰ãŒï¼‘ï¼’ï¼…ã®ã‚‚ã®ï¼ˆPrazdroj ã§ã¯ãã®ä¸‹ã¯ï¼‘ï¼ï¼…,一般ã«ï¼‘2%を越ãˆã‚‹ã‚‚ã®ã¯å°‘ãªã„)ã¯ï¼Œã®ã©ãŒæ¸‡ã„ãŸã‹ã‚‰ä¸€æ°—ã«é£²ã‚€ï¼Œã¨ã„ã†ã‚ˆã†ãªé£²ã¿æ–¹ã¯ã‚‚ã¯ã‚„出æ¥ãšï¼Œã‚€ã—ã‚パンã®ä»£ã‚ã‚Šã«å°‘ã—ãšã¤ã”ãã”ã飲む,ã¨ã„ã†ã®ãŒã¡ã‚‡ã†ã©ã„ã„よã†ã§ã™ï¼ŽãŸãã•ã‚“飲むã¨ã‚‚ã®ã™ã”ãã®ã©ãŒæ¸‡ãã®ã§ï¼Œã®ã©ã‚’潤ã™ã«ã¯ã‚€ã—ã‚良ããªã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.ã—ã‹ã—æ­´å²çš„ã«è¦‹ã‚‹ã¨ï¼Œã‚­ãƒªã‚¹ãƒˆæ•™ã§ã¯ã€Œãƒ“ールã¯æ¶²ä½“ã®ãƒ‘ンã€ã¨ã—ã¦é‡è¦ãªå½¹å‰²ã‚’ã—ã¦ã„ã¾ã™ï¼Žãƒ¯ã‚¤ãƒ³ã¯ã‚­ãƒªã‚¹ãƒˆã®è¡€ï¼Œãƒ‘ンã¯ã‚­ãƒªã‚¹ãƒˆã®è‚‰ï¼Œãƒ“ールã¯æ¶²ä½“ã®ãƒ‘ン,ã§ã™ï¼Žå®Ÿéš›ï¼Œä¿®é“院ãªã©ã§ã¯æ–­é£ŸæœŸé–“ã«æ°´ã®ä»£ã‚ã‚Šã®ãƒ“ールã§æ „養を補給ã—ã¦ã„ãŸã¨ã„ã†è©±ã‚‚ã‚り,時代ã«ã‚ˆã£ã¦ã¯é†¸é€ ã®è¨±å¯ãŒæ•™ä¼šé–¢ä¿‚ã ã‘ã«ä¸Žãˆã‚‰ã‚Œã¦ã„ãŸã‚Šï¼Œã¾ãŸæ•™ä¼šãŒå…許ã®äº¤ä»˜æ¨©ã‚’æŒã£ã¦ã„ãŸã‚Šï¼Œã¨ã„ã†ã‚‚ã‚ã‚Šã¾ã—ãŸï¼Ž + + 工場ã«è¡Œã£ã¦ã¿ã‚‹ã¨ï¼Œä¸€é¢ãƒ¢ãƒ«ãƒˆã‚’煮出ã—ã¦ã„る匂ã„ãŒã—ã¦ï¼Œã‚~ã‚,麦ã ã,ã¨ã„ã†æ„Ÿã˜ãŒã—ã¾ã™ï¼Žä¸–界中ã‹ã‚‰å¹´é–“5万人もã®äººãŒè¨ªã‚Œã‚‹ã¨ã„ã†ã“ã®ãƒ“ールåšç‰©é¤¨å…±ã€…,我々ビールã®ã¿ã«ã‚‚,ã¾ãŸãã†ã§ãªã„人ã«ã¨ã£ã¦ã‚‚大変興味深ã„ã‚‚ã®ã ã¨æ€ã„ã¾ã™ï¼Ž + +  + +ã“ã®ãƒšãƒ¼ã‚¸ã®å†™çœŸã‚‚,クリックã™ã‚‹ã¨å¤§ããªåŽŸç‰ˆãŒè¦‹ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ï¼Žã‚‚ã®ã™ã”ã大ãã„ã§ã™ãŒï¼Œè‰¯ã‹ã£ãŸã‚‰ãã¡ã‚‰ã‚‚ã”覧下ã•ã„. + + + + +ã“れ㌠Plzen 旧市街ã«ã‚る「ビール醸造åšç‰©é¤¨ã€ã§ã™ï¼Žæ˜”実際ã«ãƒ“ールã®é†¸é€ æ‰€ã§ã‚り,パブã¨ã—ã¦ä½¿ã‚ã‚ŒãŸã“ã¨ã‚‚ã‚る建物ã§ï¼Œãƒ“ールã®é†¸é€ ã®é“å…·ã‹ã‚‰æ˜”ã®è¡£è£…,ビアホールã®å†…装,ã¾ãŸåœ°ä¸‹ã«ã¯ãã®æ˜”氷を入れã¦å†·è”µåº«ã«ã—ã¦ã„ãŸè²¯è”µå€‰ã‚‚ã‚り,ã¨ã«ã‹ã見るã¨ã“ã‚ã¯ãŸãã•ã‚“ã‚ã‚Šã¾ã™ï¼Ž ã“れ㯠Plzensky Prazdroj (Pilsner Urquell) ã®ä¼šç¤¾ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã§é‹å–¶ã•ã‚Œã¦ã„ã¾ã™ï¼Žä¸­ã«ã¯ã„ã‚‹ã¨è§£èª¬æ›¸ã‚’貸ã—ã¦ãã‚Œã¾ã™ï¼Žæ—¥æœ¬èªžã®è§£èª¬æ›¸ã‚‚ã‚ã‚Šã¾ã™ï¼Ž + +ã“ã®å…¥ã‚Šå£ã‚’見るã¨ï¼Œã„ã‹ã«ã‚‚醸造所ã‹ãƒ‘ブã§ã™ã­ï¼Žä¸­ã«ã¯ Urquell ã®æ—¥æœ¬ã§ã®åºƒå‘Šã‚‚ã‚ã‚Šã¾ã™ï¼Žã¯ã£ãã‚Šã¯ã‚ã‹ã‚Šã¾ã›ã‚“ãŒï¼Œå°åˆ·ã®æ„Ÿã˜ã‹ã‚‰ã™ã‚‹ã¨ï¼‘96ï¼å¹´ä»£ã§ã¯ãªã„ã‹ã¨æ€ã„ã¾ã™ï¼Žæ—¥æœ¬ã§ã®å•†æ¨™ç™»éŒ²è¨¼ã¨ã„ã†ã“ã¨ã§ Urquell ã®å•†æ¨™ç™»éŒ²ã®è¨¼æ›¸ãŒã‚ã‚‹ã®ã§ã™ãŒï¼Œã¡ã‚‡ã£ã¨æ„味ã®åˆ†ã‹ã‚‰ãªã„ã¨ã“ã‚ãŒã‚ã£ã¦ï¼Œè‹¥å¹²è¬Žã§ã™ï¼Ž 残念ï¼ã€€Plzensky Prazdroj ã®å·¥å ´ã®æ­£é–€ï¼ˆHistorical gate)ã§ã™ï¼Žã¡ã‚‡ã†ã©æ”¹è£…工事中ã§è‚è…Žã®æ‰€ãŒè¦‹ã‚‰ã‚Œã¾ã›ã‚“ã§ã—ãŸï¼Žæ—§å¸‚è¡—ã®ä¸­å¿ƒã‹ã‚‰ï¼•åˆ†ãらã„ã®ã¨ã“ã‚ã§ã™ï¼Ž + +ã“ã® Gate ãŒå£ç”»ã«ã—ã¦ã‚ã‚Šã¾ã—ãŸï¼Ž ã“ã‚ŒãŒã‚ã®å·¥å ´ã§ã™ï¼Žå¤§ããªå†™çœŸã‚’ã”覧下ã•ã‚Œã°ï¼Œå·¦ã®æ–¹ã«ã€€Prazdroj ã¨æ›¸ã„ã¦ã‚ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ï¼Ž + +ã“ã‚Œã¯å‰ã®å†™çœŸã®å³å´ã«å½“ãŸã‚‹ã¨ã“ã‚ã§ã™ï¼Žä»Šã¯ä½¿ã£ã¦ã„ã‚‹ã®ã‹ã©ã†ã‹ã‚ã‹ã‚Šã¾ã›ã‚“ãŒï¼ŒGate を通ã£ã¦ã“ã®å±‹æ ¹ã®ä¸‹ã¾ã§é‰„é“ã®ç·šè·¯ãŒå¼•ã‹ã‚Œã¦ãŠã‚Šï¼Œæ˜”ã¯ãれを使ã£ã¦å„地ã¸è¼¸é€ã—ã¦ã„ãŸã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ï¼Ž 12時åŠé›†åˆã§ï¼Œãƒ“デオ上映ã®å¾Œå·¥å ´å†…ã®è¦‹å­¦ãƒ„アーãŒã‚ã‚Šã¾ã™ï¼Žæœ€åˆã«å¤§ããªãƒœãƒ¼ãƒ‰ã§ Prazdroj ã®è£½æ³•ã«ã¤ã„ã¦èª¬æ˜ŽãŒã‚り,ãã®å¾Œå·¥å ´å†…ã®è¦‹å­¦ï¼Œã¤ã„ã§åœ°ä¸‹ã®ç™ºé…µè²¯è”µç”¨ã®å€‰ã‚’見学ã§ã™ï¼Žã¨ã¦ã‚‚寒ã‹ã£ãŸï¼Žã§ã‚‚ãã®æ¸©åº¦ã®ä¸‹ã§ã‚ã®ã‚ˆã†ãªãƒªãƒƒãƒãªãƒ“ールãŒã§ãã‚ãŒã‚‹ã®ã§ã™ï¼Žã¾ã•ã‹ã„ã„ã¨ã„ã‚れるã¨ã¯æ€ã‚ãªã‹ã£ãŸã®ã§ï¼Œå…¨ç„¶å†™çœŸã‚’撮りã¾ã›ã‚“ã§ã—ãŸãŒï¼Œä»–ã®äººãŒèžã„ãŸã‚‰OKãŒå‡ºãŸã®ã§ã¤ã„ã§ã«ã¨ã£ã¦è¦‹ã¾ã—ãŸï¼Žã“ã®ä¸­ã§ã¡ã‚‡ã†ã©ãƒ“ールãŒç™ºé…µä¸­ã§ã™ï¼Žï¼Ž diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/korean_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/korean_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/korean_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/korean_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,51 @@ +10 ì¼ë¶€í„° 7ì¼ê°„ ë…ì¼ +금 +융 +í¬ +커스 + + +세계를 정복할 한국기업 + + + +세계ì¼ë¥˜ë¥¼ 꿈꾸는 ì‚¼ì„±ì „ìž + +삼성전ìžëŠ” 1988 ë…„ 하드디스í¬ë“œë¼ì´ë¸Œ(HDD) ì‚¬ì—…ì„ ì‹œìž‘í•œ ì´ëž˜ 지난해 처ìŒìœ¼ë¡œ.. + + '세빗2005' 한국관 중소업체 눈부신 성과- 머니투ë°ì´ 03/16 16:07 + '세빗 2005' 한국공ë™ê´€ì— 참가한 ì¤‘ì†Œì—…ì²´ë“¤ì´ ì„ ì „ì„ ê±°ë’€ë‹¤. 지난 + 10 ì¼ë¶€í„° 7ì¼ê°„ ë…ì¼ + + + 하노버 '세빗 2005' ì—ì„œ í•œêµ­ê´€ì— ì°¸ê°€í•œ 중소 IT ë²¤ì²˜ì—…ì²´ë“¤ì€ ìž ì • 집계 ê²°ê³¼, 수출ìƒë‹´ì•¡ì€ 12 ì–µ 5000 만달러, ê³„ì•½ê¸ˆì•¡ì€ 2 ì–µ5000 만달러를 ë„˜ì€ ê²ƒìœ¼ë¡œ ... + + [세빗 2005] ê±°ì›ì‹œìŠ¤í…œ, 유럽 MP3 공략 본격화- ì•„ì´ë‰´ìŠ¤ 03/16 13:20 + <ì•„ì´ë‰´ìŠ¤24> ê±°ì›ì‹œìŠ¤í…œì´ 유럽 MP3 기기 시장 ê³µëžµì„ ë³¸ê²©í™”í•œë‹¤. 박남규 ê±°ì›ì‹œìŠ¤í…œ ì‚¬ìž¥ì€ 15ì¼(현지시간) ë…ì¼ í•˜ë…¸ë²„ì—ì„œ 열리고 있는 세빗 2005 전시회ì—ì„œ "ì´ë²ˆì²˜ëŸ¼ ì„¸ë¹—ì— ëŒ€í˜• 부스를 마련하기는 처ìŒ"ì´ë¼ë©° "ìœ ëŸ½ì— ì§€ì‚¬ë¥¼ 설립, ... + + LS그룹 "세계 ì¼ë¥˜ê¸°ì—… ë°œë‹ì›€"- 디지탈타임즈 03/15 11:07 + CIì„ í¬ì‹ 가져… 국내외 브랜드 í™ë³´ ì ê·¹ 나서 LS그룹(회장 구ìží™ã†êµ¬ LG전선그룹)ì€ 14ì¼ ê·¸ëžœë“œì¸í„°ì½˜í‹°ë„¨íƒˆí˜¸í…”ì—ì„œ 가진 CI(통합기업ì´ë¯¸ì§€)ì„ í¬ì‹ì„ 통해 LS브랜드를 ëŒ€ë‚´ì™¸ì— ê³µí¬í•˜ê³ , ì‚°ì—…ìš© 전기ã†ì „ìžã†ì†Œìž¬ë¶„ì•¼ì˜ ì„¸ê³„ì¼ë¥˜ê·¸ë£¹ìœ¼ë¡œ ë„... + + [세빗2005]ë ˆì¸ì½¤ã†ì‚¼ì„±ì „ìž, MP3P시장 넘버3 ê²½ìŸ- 디지탈타임즈 03/15 03:57 + 대형 단ë…부스 설치 ê³µê²©ì  ë§ˆì¼€íŒ… 올 íŒë§¤ëª©í‘œ ìƒí–¥â€¦ 수성ã†íƒˆí™˜ ì´ë ¥ì „ ë ˆì¸ì½¤ê³¼ 삼성전ìžê°€ MP3플레ì´ì–´ 세계시장 3위ìžë¦¬ë¥¼ 놓고 격ëŒí•œë‹¤.애플과 í¬ë¦¬ì—ì´í‹°ë¸Œê°€ 1, 2위를 차지하고 있는 ê°€ìš´ë° ë‘ íšŒì‚¬ëŠ” 올해 íŒë§¤ëŒ€ìˆ˜ 목표를 ëŒ€í­ ìƒí–¥ì¡°... + + 세빗ì—ì„œ 확ì¸í•œ 양극화- ì´ë°ì¼ë¦¬ 03/14 16:56 + 세계 최대 ê·œëª¨ì˜ ì •ë³´í†µì‹  ë°•ëžŒíšŒì¸ `세빗(CeBIT)2005` ê°€ 지난주부터 ë…ì¼ í•˜ë…¸ë²„ì—ì„œ 열리고 있습니다. 지난 1ì›” 미국 ë¼ìŠ¤ë² ê°€ìŠ¤ì—ì„œ 열린 CESì— ì´ì–´ ìš°ë¦¬ë‚˜ë¼ ê¸°ì—…ë“¤ì´ ì„¸ê³„ì¸ì˜ ì£¼ëª©ì„ ë°›ì•„ ITê°•êµ­ì˜ ìœ„ìƒì„ 재차 확ì¸í•˜ëŠ” ìžë¦¬ì˜€ìŠµë‹ˆë‹¤. 하... + + + + + LGì „ìž "2010ë…„ 세계톱3 기필코 달성"- 머니투ë°ì´ 03/14 15:41 + "올해 ë§¤ì¶œì„ 30ì¡°ì›ìœ¼ë¡œ 늘려 글로벌 톱5 ê¸°ì—…ì— ë“¤ê³  ì´ë¥¼ 바탕으로 2010ë…„ì—는 글로벌 톱3ê°€ ëœë‹¤" LGì „ìžì˜ 중장기 비젼ì´ë‹¤.막연하게 1등 ê¸°ì—…ì´ ë˜ê² ë‹¤ëŠ” ì„ ì–¸ì— ê·¸ì¹˜ëŠ” 게 ì•„ë‹ˆë¼ êµ¬ì²´ì ì¸ 시기와 목표를 제시하고 있다. ë„ì „ ì—­ì‹œ 만만치 ... + + ITì‚°ì—… 미래는 한국ì´ë‹¤ <美ì¼ê°„지>- 연합뉴스 03/14 09:38 + =실리콘 밸리 "í•œêµ­ì€ ë¯¸ëž˜ë¡œ 가는 타임머신" 워싱턴 박노황 íŠ¹íŒŒì› = ë¯¸êµ­ì˜ ì¼ê°„ 샌프란시스코 í¬ë¡œë‹ˆí´ì€ 13ì¼ '미래는 한국'ì´ë¼ëŠ” ì œí•˜ì˜ ê¸°ì‚¬ë¥¼ 통해 세계 ì œì¼ì˜ 광대역 ì¸í„°ë„·ë§ë° 휴대 ì „í™” ë³´ê¸‰ë¥ ì„ ëˆ„ë¦¬ê³  있는 IT ê°•êµ­ í•œêµ­ì˜ í˜„í™©ì„ ... + + ìžê¸°ë§Œì¡±ì— 빠진 소니, ì‚¼ì„±ì— íŒ¨ë°°- ë™ì•„ì¼ë³´ 03/12 09:09 + ‘한국 삼성전ìžì™€ ì¼ë³¸ 소니(Sony)ì˜ ì—­ì „.’ 뉴욕타임스는 10ì¼ 1997ë…„ ì´í›„ 7ë…„ ë§Œì— ì‚¼ì„±ì „ìžì™€ ì†Œë‹ˆì˜ ìœ„ìƒì´ 뒤바뀌었다고 전했다.1997ë…„ì€ ì‚¼ì„±ì „ìžê°€ í•œêµ­ì— ëª°ì•„ë‹¥ì¹œ 외환위기ì—ì„œ 벗어나기 위해 사투를 벌ì´ë˜ ë•Œì´ìž 7ì¼ ì†Œë‹ˆ 최고경ì˜... + + [기íšíŠ¹ì§‘ - 글로벌 리ë”기업Ⅲ]LG필립스LCD- 헤럴드경제 03/11 11:41 + ì•žì„  투ìžã†ê¸°ìˆ â€¦LCD 최강ìžë¡œ 지난 2004ë…„ 7ì›”, LG필립스LCD는 한국 기업으로는 최초로 한국과 미국 ì¦ì‹œ ë™ì‹œ ìƒìž¥ì— 성공했다.ì´ëŠ” 남들보다 한발 ì•žì„  ì ê¸° 투ìžì™€ 기술개발로 세계 TFT-LCD 업계를 ì´ëŒì–´ì˜¨ 리ë”ë¡œì„œì˜ ê¸°ì—…ê°€ì¹˜ë¥¼ 다시 한번 ... + + [기íšíŠ¹ì§‘ - 글로벌 리ë”기업Ⅰ] ì¼ë“±ë§Œì´ 산다- 헤럴드경제 03/11 11:41 + 세계 ì´ˆì¼ë¥˜ ê¸°ì—…ìœ¼ë¡œì˜ ë„ì•½ì„ ìœ„í•œ 글로벌 ê²½ì˜ì€ ì´ë¯¸ ëŒ€ê¸°ì—…ë“¤ì˜ ì„ íƒì´ ì•„ë‹Œ 필수로 ìžë¦¬ìž¡ì•˜ë‹¤.êµ­ë‚´ ëŒ€ê¸°ì—…ë“¤ë„ ê¸€ë¡œë²Œ ê²½ì˜ì— 박차를 가해 ì´ì   글로벌 ë¦¬ë” ê¸°ì—…ìœ¼ë¡œ ìžë¦¬ë§¤ê¹€í•˜ê³  있거나 ìžë¦¬ë¥¼ 굳혀가고 있는 ê¸°ì—…ë“¤ì´ ìƒë‹¹ìˆ˜ì— ì´ë¥¸ë‹¤.... diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/polish_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/polish_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/polish_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/polish_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,65 @@ +spółka +Fermentacja to proces, w wyniku którego wytworzona w warzelni brzeczka staje siÄ™ piwem. Do ochÅ‚odzonej brzeczki dodawane sÄ… drożdże, które zamieniajÄ… cukier w dwutlenek wÄ™gla i alkohol. Oprócz tego drożdże formujÄ… tysiÄ…ce innych komponentów, które podczas fermentacji nadajÄ… piwu okreÅ›lony smak. + + +Proces fermentacji prowadzimy w ogromnych, cylindrycznych, nowoczesnych zbiornikach fermentacyjnych zwanych tankofermentorami. NajwiÄ™ksze z nich mogÄ… pomieÅ›cić po 3 600 hektolitrów piwa czyli 720 000 półlitrowych butelek np. piwa Frater. + +W celu zapewnienia optymalnych temperatur dla procesu fermentacji tanki muszÄ… być chÅ‚odzone. Po procesie fermentacji piwo zwane "piwem mÅ‚odym" musi otrzymać swój peÅ‚ny smak. Odbywa siÄ™ to podczas nastÄ™pnego cyklu produkcyjnego, jakim jest leżakowanie (dojrzewanie) w temperaturach minusowych. + +CaÅ‚y proces fermentacji i dojrzewania zajmuje okoÅ‚o dwóch - trzech tygodni. + + + + +drożdży +spółka + +3 marca 2004 roku Browar Belgia i spółka Dominium, reprezentujÄ…ca Opactwo o.o. Cystersów w Szczyrzycu, podpisali kontrakt na produkcjÄ™ piwa. Umowa jest zwieÅ„czeniem kilkuletnich dziaÅ‚aÅ„ obu stron, zmierzajÄ…cych do wykorzystania unikalnej receptury. Wprowadzenie piwa Frater, warzonego wedÅ‚ug starego przepisu oznacza kontynuacjÄ™ kulturowego dziedzictwa klasztoru. Tradycyjna, wielowiekowa receptura dajÄ…ca podstawy unikalnego piwa, zostaÅ‚a poÅ‚Ä…czona z nowoczesnÄ… technologiÄ…. + + + + + + + +Piwo warzone przez cystersów ze Szczyrzyca ma wielowiekowÄ… tradycjÄ™. Lata praktyki i wnikliwych obserwacji pozwoliÅ‚y zakonnikom stworzyć niepowtarzalnÄ… recepturÄ™, bÄ™dÄ…cÄ… idealnym poÅ‚Ä…czeniem czterech skÅ‚adników (sÅ‚odu, wody, chmielu i drożdży). ZostaÅ‚a ona przywrócona do życia w postaci Fratera, a poprzez wykorzystani + + + + + + +Jak wskazujÄ… zachowane dokumenty, browar w Szczyrzycu powstaÅ‚ w 1623 roku i jest jednym z najstarszych browarów w Polsce. Wedle starych kronik od poczÄ…tku XVII wieku mnisi w Szczyrzycu produkowali napój nazywany "cerewizjÄ…", robiony z palonego ziarna, cykorii, wody i chmielu. Cerewizja zawieraÅ‚a do 1 % alkoholu i byÅ‚a pita zamiast kawy i herbaty, chÅ‚odzÄ…c gardÅ‚a spragnionych rolników i mnichów pracujÄ…cych na terenach należących do opactwa. Mury w klasztorze postawiono w 1824 r., wczeÅ›niej zabudowania byÅ‚y drewniane. + + +Do 1948 r. caÅ‚a produkcja prowadzona byÅ‚a rÄ™cznie, co pozwalaÅ‚o rozlewać rocznie 250 tys. hektolitrów zÅ‚ocistego napoju. Przez ponad sto lat piwo leżakujÄ…ce w beczkach chÅ‚odzono potężnymi blokami lodowymi wycinanymi zimÄ… z pobliskiego stawu. Lód nie roztapiaÅ‚ siÄ™ nawet latem, bo w podziemiach browaru przez caÅ‚y rok temperatura nie przekraczaÅ‚a 2 stopni C. + +Najlepsze czasy browaru przypadajÄ… na okres miÄ™dzy 1925 a 1945 rokiem. W 1925 roku Eugeniusz Czerny wydzierżawiÅ‚ browar. Warzono wówczas piwo "ZÅ‚oty zdrój" sÅ‚ynÄ…ce z wyjÄ…tkowego smaku i rozsÅ‚awione sloganem "Mocne jak gÅ‚os kuryera, sÅ‚odkie jak gÅ‚os Kiepury". ZachowaÅ‚o siÄ™ wiele pamiÄ…tek z tego okresu jak specjalne kufle z pokrywkami i etykiety. Można je obejrzeć w przyklasztornym muzeum. Czerny kontynuowaÅ‚ produkcjÄ™ do koÅ„ca II wojny Å›wiatowej. W 1939 r. zakÅ‚ad przejÄ™li Niemcy, pozwalajÄ…c na kontynuowanie nadal produkcji pod okiem Czernego. +W 1951 roku wiÄ™kszość majÄ…tku browaru przejęło paÅ„stwo. Wówczas byÅ‚ to jedyny klasztorny browar miÄ™dzy ÅabÄ… a WÅ‚adywostokiem. + + +W latach powojennych browar podupadÅ‚. Piwo, sprzedawane pod najróżniejszymi wymyÅ›lnymi nazwami ("Czarny Mnich", "Pils Klasztorny", "Eliksir", "Dama Pik", "Gryf"), nie cieszyÅ‚o siÄ™ uznaniem smakoszy. Piwo produkowane w Szczyrzycu, można byÅ‚o kupić tylko w okolicznych miejscowoÅ›ciach: Limanowej, MyÅ›lenicach, Rabce. W 1993 r. Opactwo Ojców Cystersów odzyskaÅ‚o browar i kontynuowaÅ‚o produkcjÄ™ piwa. Pomieszczenia zakÅ‚adu, choć nie byÅ‚y zdewastowane, wymagaÅ‚y gruntownego remontu. Podobnie jak i urzÄ…dzenia. Nie daÅ‚o siÄ™ na nich produkować dobrej jakoÅ›ci piwa, a szczególnie tego, jakie byÅ‚o warzone w przeszÅ‚oÅ›ci. Opactwo, nie chcÄ…c firmować swoim wizerunkiem tak zÅ‚ej jakoÅ›ci produktu, nie posiadajÄ…c Å›rodków na remont urzÄ…dzeÅ„ i obiektu, postanowiÅ‚o zaprzestać produkcji. W 1996 r. browar, po 373 (!) latach nieprzerwanej pracy, zakoÅ„czyÅ‚ produkcjÄ™ piwa, a wkrótce potem zostaÅ‚ zamkniÄ™ty. + + + + + + +Piwo jest jednym z najstarszych napojów znanych ludzkoÅ›ci. Warzono je już w starożytnym Egipcie. Pierwsze piwa o niewielkiej zawartoÅ›ci alkoholu przyrzÄ…dzano z wieloma dodatkami, a ich głównym przeznaczeniem byÅ‚o gaszenie pragnienia. +Napój ten nierozerwalnie wiąże siÄ™ z tradycjami religijnymi. W starożytnym Egipcie byÅ‚ warzony przez kapÅ‚anów, a w Å›redniowiecznej Europie przez mnichów zakonnych. Od XI wieku piwo byÅ‚o warzone przez setki mnichów z caÅ‚ego Å›wiata. W Polsce warzelnictwo na dużą skalÄ™ zapoczÄ…tkowali cystersi w XIII w. +W Europie wielkim powodzeniem cieszÄ… siÄ™ od dziesiÄ™cioleci tzw. piwa klasztorne. W wielu zakonach zaÅ‚ożonych w Å›redniowieczu mnisi instalowali warzelnie, w których produkowali piwo wedÅ‚ug wÅ‚asnych receptur cieszÄ…ce siÄ™ powodzeniem. Niektóre po wielu latach dziaÅ‚ania z powodu problemów finansowych oddawaÅ‚y licencjÄ™ innym, nie klasztornym browarom, i w ten sposób "religijne" piwo trafiÅ‚o na komercyjny rynek. +Najbardziej znane marki klasztorne to Leffe, Grimbergen i Steenbrugge (współpracujÄ…cy z Palm Breweries). + + + + + + + + +Chwila, na którÄ… czekasz przez caÅ‚y dzieÅ„. Ciche westchnienie, towarzyszÄ…ce otwarciu chÅ‚odnej butelki. GÅ‚Ä™boki, zÅ‚ocisty kolor, przyjemny, naturalny aromat, a już po chwili lekki, szlachetny smak. Na tÄ™ chwilÄ™ warto byÅ‚o czekać. + +Frater. Piwo, którego duch wywodzi siÄ™ z gÅ‚Ä™bi cysterskich manuskryptów, a charakter nadaje mu współczesne pojmowanie szlachetnej sztuki warzenia. +W poczÄ…tkach minionego milennium na ziemie polskie przybyli z zachodu pierwsi mnisi. WÅ›ród rozlicznych praktykowanych w zakonach nauk i sztuk poczesne miejsce zajmowaÅ‚a sztuka warzenia piwa. Wraz z zakapturzonymi braćmi przybyÅ‚ do Polski ten znakomity, zÅ‚ocisty napój oraz pnÄ…ce siÄ™ po zakonnych murach szlachetne odmiany chmielu. +W XIII wieku w malowniczej podbeskidzkiej miejscowoÅ›ci Szczyrzyc powstaÅ‚o cysterskie opactwo. Zgodnie z reguÅ‚Ä… część czasu mnisi poÅ›wiÄ™cali na wytężonÄ… pracÄ™, której efektem byÅ‚o sÅ‚ynÄ…ce z niezrównanego smaku, starannie warzone zÅ‚ociste piwo. MÄ…drość gromadzona przez stulecia pozwoliÅ‚a stworzyć szlachetny, zÅ‚ocisty napój, który prócz barwy, smaku iaromatu prawdziwego pilsnera, ma również duszÄ™. TajemnicÄ™, którÄ… odkrywasz z każdym jego Å‚ykiem. Spróbuj w peÅ‚ni docenić tÄ™ chwilÄ™ prawdziwej, peÅ‚nej, gÅ‚Ä™bokiej przyjemnoÅ›ci. + diff -Nru clucene-core-0.9.21b/src/test/data/utf8text/russian_utf8.txt clucene-core-2.3.3.4/src/test/data/utf8text/russian_utf8.txt --- clucene-core-0.9.21b/src/test/data/utf8text/russian_utf8.txt 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/data/utf8text/russian_utf8.txt 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,11 @@ +Великие + +тайны наших любимцев + +ИÑточник: ПРÐВДÐ.Ру +ПоÑтоÑнный адреÑ: http://www.pravda.ru/science/2004/6/20/55/18599_animals.html + +ЧудÑÑ‚ не только люди, но и домашние питомцы. Мы решили пополнить «каталог иÑторий» о Ñтранных выходках кошек, Ñобак, птичек и другой живноÑти, обитающей по ÑоÑедÑтву Ñ Ñ‡ÐµÐ»Ð¾Ð²ÐµÑ‡ÐµÑтвом + +Когда зоопÑихологов проÑÑÑ‚ объÑÑнить ÑтранноÑти в поведении животных или их неожиданно фантаÑтичеÑкую прозорливоÑÑ‚ÑŒ, они чеÑтно признаютÑÑ, что не в Ñилах дать разумное иÑтолкование даже Ñравнительно чаÑто вÑтречающимÑÑ Ð¸ опиÑанным в ÑоответÑтвующей литературе отклонениÑм в поведении домашних животных. + diff -Nru clucene-core-0.9.21b/src/test/debug/TestError.cpp clucene-core-2.3.3.4/src/test/debug/TestError.cpp --- clucene-core-0.9.21b/src/test/debug/TestError.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/debug/TestError.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +//#include "CLucene/util/_ThreadLocal.h" +#include "CLucene/util/Equators.h" + +void testError ( CuTest *tc ) +{ + const char* msg = "test"; + CLuceneError err ( 0,msg,false ); + CLuceneError err2 = err; + CuAssert ( tc,_T ( "Error did not copy properly" ),err.what() !=err2.what() ); + CuAssert ( tc,_T ( "Error values did not correspond" ),strcmp ( err.what(),err2.what() ) ==0 ); + + IndexReader* reader = NULL; + try + { + RAMDirectory dir; _CL_LDECREF(& dir); + reader = IndexReader::open ( &dir,true ); + } + catch ( CLuceneError& ) + { + _CLDELETE ( reader ); + } + catch ( ... ) + { + _CLDELETE ( reader ); + CuAssert ( tc,_T ( "Error did not catch properly" ),false ); + } +} + +/* +typedef CL_NS(util)::ThreadLocal tlTest; +struct Data{ + tlTest* tl; + CuTest *tc; +}; +_LUCENE_THREAD_FUNC ( threadLocalTest, arg ) +{ + Data* data = (Data*)arg; + CuTest *tc = data->tc; + tlTest* tl = data->tl; + + char* val = tl->get(); + + CLUCENE_ASSERT(val == NULL); + + tl->set(STRDUP_AtoA("test")); + tl->setNull(); + + val = _CL_NEWARRAY(char, 50); + _snprintf(val, 50, "hello from thread %d", (int)_LUCENE_CURRTHREADID); + + tl->set(val); + + CLUCENE_ASSERT(tl->get() != NULL); + + //wait a bit until thread local deleted our data... + Misc::sleep(1000); + + CLUCENE_ASSERT(tl->get() == NULL); +} +void testThreadLocal ( CuTest *tc ) +{ + + const int threadsCount = 10; + + //read using multiple threads... + _LUCENE_THREADID_TYPE threads[threadsCount]; + + Data data; + data.tc = tc; + data.tl = _CLNEW tlTest; + + int i; + for ( i=0;i= 0 ) + this->len = length; + else + this->len = strlen(value); + this->pos = 0; + this->value = _CL_NEWARRAY(signed char, this->len); + memcpy(this->value, value, this->len); + } + virtual ~MemReader(){ + _CLDELETE_ARRAY(this->value); + } + + int32_t read(const signed char*& start, int32_t min, int32_t max){ + start = this->value + pos; + int32_t r = max>min?max:min; + if ( len-pos < r ) + r = len-pos; + pos += r; + return r; + } + int64_t position(){ + return pos; + } + int64_t skip(int64_t ntoskip){ + int64_t s = ntoskip; + if ( len-pos < s ) + s = len-pos; + + this->pos += s; + return s; + } + size_t size(){ + return len; + } +}; + + void TestFields(CuTest *tc){ + Field *f = _CLNEW Field(_T("test"), _T("value"), Field::INDEX_TOKENIZED); + CLUCENE_ASSERT(f->isIndexed() && f->isTokenized()); + CLUCENE_ASSERT(!f->isStored() && !f->isBinary() && !f->getOmitNorms()); + _CLDELETE(f); + + f = _CLNEW Field(_T("test"), _T("value"), Field::STORE_YES | Field::INDEX_NONORMS); + CLUCENE_ASSERT(f->isIndexed()); + CLUCENE_ASSERT(!f->isTokenized()); + CLUCENE_ASSERT(f->getOmitNorms()); + CLUCENE_ASSERT(f->isStored() && !f->isBinary()); + _CLDELETE(f); + + Document doc; + doc.add(*_CLNEW Field(_T("f1"), _T("value"), Field::INDEX_TOKENIZED)); + doc.add(*_CLNEW Field(_T("f2"), _T("value"), Field::INDEX_TOKENIZED)); + doc.add(*_CLNEW Field(_T("f3"), _T("value1"), Field::INDEX_TOKENIZED)); + doc.add(*_CLNEW Field(_T("f3"), _T("value2"), Field::INDEX_TOKENIZED)); + doc.add(*_CLNEW Field(_T("f4"), _T("value"), Field::INDEX_TOKENIZED)); + CLUCENE_ASSERT( doc.getFields()->size() == 5); + + _CLLDELETE(doc.fields());//just fetch the fields (to test deprecated loads) + + doc.removeField(_T("f3")); + CLUCENE_ASSERT( doc.getFields()->size() == 4); + + //test deprecated enumerator + DocumentFieldEnumeration* e = doc.fields(); + int count = 0; + while ( e->hasMoreElements() ) { + Field* field4 = e->nextElement(); + CLUCENE_ASSERT(field4!=NULL); + count++; + } + CLUCENE_ASSERT(count==4); + _CLDELETE(e); + + doc.add(*_CLNEW Field(_T("f3"), _T("value3"), Field::INDEX_TOKENIZED)); + CLUCENE_ASSERT( doc.getFields()->size() == 5); + + //test deprecated enumerator + e = doc.fields(); + count = 0; + while ( e->hasMoreElements() ) { + Field* field5 = e->nextElement(); + CLUCENE_ASSERT(field5!=NULL); + count++; + } + CLUCENE_ASSERT(count==5); + _CLDELETE(e); + + doc.removeFields(_T("f3")); + CLUCENE_ASSERT( doc.getFields()->size() == 3); + + doc.removeFields(_T("f4")); + CLUCENE_ASSERT( doc.getFields()->size() == 2); + + doc.removeFields(_T("f1")); + CLUCENE_ASSERT( doc.getFields()->size() == 1); + + doc.removeFields(_T("f2")); + CLUCENE_ASSERT( doc.getFields()->size() == 0); + } + + /* + void TestDateTools(CuTest *tc) { + TCHAR* t = CL_NS(document)::DateTools::timeToString( Misc::currentTimeMillis() , CL_NS(document)::DateTools::MILLISECOND_FORMAT); + _CLDELETE_ARRAY(t); + + TCHAR buf[30]; + const TCHAR* xpt = _T("19700112102054321"); + int64_t vv = (int64_t)987654321; + CL_NS(document)::DateTools::timeToString( vv , CL_NS(document)::DateTools::MILLISECOND_FORMAT, buf, 30); + + if ( _tcscmp(buf,xpt) != 0 ) { + CuFail(tc, _T("timeToString failed\n"), buf, xpt); + } + _CLDELETE_ARRAY(t); + } + */ + + void TestFieldSelectors(CuTest *tc){ + RAMDirectory dir; + const TCHAR* longStrValue = _T("too long a field..."); + { + WhitespaceAnalyzer a; + IndexWriter w(&dir,&a,true); + for (int i=0;i<3;i++){ + Document doc; + doc.add(*_CLNEW Field(_T("f1"), _T("value1"), Field::STORE_YES)); + doc.add(*_CLNEW Field(_T("f2"), _T("value2"), Field::STORE_YES)); + doc.add(*_CLNEW Field(_T("f3"), _T("value3"), Field::STORE_YES)); + doc.add(*_CLNEW Field(_T("f4"), _T("value4"), Field::STORE_YES)); + doc.add(*_CLNEW Field(_T("f5"), longStrValue, Field::STORE_YES)); + + w.addDocument(&doc); + } + w.flush(); + } + + IndexReader* reader = IndexReader::open(&dir); + MapFieldSelector fieldsToLoad; + fieldsToLoad.add(_T("f2"), FieldSelector::LOAD ); + fieldsToLoad.add(_T("f3"), FieldSelector::LAZY_LOAD ); + fieldsToLoad.add(_T("f5"), FieldSelector::SIZE ); + Document doc; + CLUCENE_ASSERT(reader->document(0,doc,&fieldsToLoad)); + CLUCENE_ASSERT(doc.getFields()->size()==3); + CuAssertStrEquals(tc,_T("check f2"), _T("value2"), doc.get(_T("f2")) ); + CuAssertStrEquals(tc,_T("check f3"), _T("value3"), doc.get(_T("f3")) ); + + Field* byteField = doc.getField(_T("f5")); + const ValueArray& bytes = *byteField->binaryValue(); + uint32_t shouldBeInt = 2 * _tcslen(longStrValue); + ValueArray shouldBe(4); + shouldBe[0] = (uint8_t) (shouldBeInt>>24); + shouldBe[1] = (uint8_t) (shouldBeInt>>16); + shouldBe[2] = (uint8_t) (shouldBeInt>> 8); + shouldBe[3] = (uint8_t) shouldBeInt ; + CLUCENE_ASSERT(byteField!=NULL); + CLUCENE_ASSERT(memcmp(shouldBe.values,bytes.values,4)==0); + + _CLDELETE(reader); + _CL_LDECREF(&dir); //derefence since we are on the stack... + } + + void _TestDocumentWithOptions(CuTest *tc, int storeBit, FieldSelector::FieldSelectorResult fieldSelectorBit){ + char factbook[1024]; + strcpy(factbook, clucene_data_location); + strcat(factbook, "/reuters-21578/feldman-cia-worldfactbook-data.txt"); + CuAssert(tc,_T("Factbook file does not exist"),Misc::dir_Exists(factbook)); + + Document doc; + Field* f; + const TCHAR *_ts, *_ts2; + const ValueArray* strm; + RAMDirectory ram; + + const char* areaderString = "a binary field"; + const TCHAR* treaderString = _T("a string reader field"); + size_t readerStringLen = strlen(areaderString); + + SimpleAnalyzer an; + IndexWriter writer(&ram,&an,true); //no analyzer needed since we are not indexing... + + ValueArray b( (uint8_t*)strdup(areaderString), strlen(areaderString) ); + //use binary utf8 + doc.add( *_CLNEW Field(_T("binaryField"), &b, + Field::TERMVECTOR_NO | storeBit | Field::INDEX_NO,true) ); + writer.addDocument(&doc); + doc.clear(); + + //use reader + doc.add( *_CLNEW Field(_T("readerField"),_CLNEW StringReader (treaderString), + Field::TERMVECTOR_NO | storeBit | Field::INDEX_NO) ); + writer.addDocument(&doc); + doc.clear(); + + //done adding a few documents, now try and add a few more... + writer.optimize(); + + //use big file + doc.add( *_CLNEW Field(_T("fileField"), + _CLNEW FileReader(factbook, SimpleInputStreamReader::ASCII), + Field::TERMVECTOR_NO | storeBit | Field::INDEX_NO) ); + writer.addDocument(&doc); + doc.clear(); + + //another optimise... + writer.optimize(); + writer.close(); + + IndexReader* reader = IndexReader::open(&ram); + + MapFieldSelector fieldsToLoad; + fieldsToLoad.add(_T("fileField"), fieldSelectorBit ); + fieldsToLoad.add(_T("readerField"), fieldSelectorBit ); + fieldsToLoad.add(_T("binaryField"), fieldSelectorBit ); + + //now check binary field + reader->document(0, doc); + f = doc.getField(_T("binaryField")); + strm = f->binaryValue(); + + CuAssertIntEquals(tc, _T("Check binary length is correct"), readerStringLen, b.length); + for ( size_t i=0;idocument(1, doc); + f = doc.getField(_T("readerField")); + _ts = f->stringValue(); + CuAssertStrEquals( tc, _T("Check readerField length is correct"), treaderString, _ts); + doc.clear(); + + //now check the large field field + reader->document(2, doc); + f = doc.getField(_T("fileField")); + _ts = f->stringValue(); + FileReader fbStream(factbook, FileReader::ASCII); + + int i=0; + _ts2 = NULL; + do{ + int32_t rd = fbStream.read(_ts2,1,1); + if ( rd == -1 ) + break; + CLUCENE_ASSERT(rd==1); + CLUCENE_ASSERT(_ts[i]==*_ts2); + i++; + }while(true); + CLUCENE_ASSERT(i == _tcslen(_ts)); + doc.clear(); + + reader->close(); + _CLDELETE(reader); + _CL_LDECREF(&ram); //this is in the stack... + } + + + void TestBinaryDocument(CuTest *tc){ + _TestDocumentWithOptions(tc, Field::STORE_YES, FieldSelector::LOAD); + } + void TestCompressedDocument(CuTest *tc){ + _TestDocumentWithOptions(tc, Field::STORE_COMPRESS, FieldSelector::LOAD); + } + void TestLazyBinaryDocument(CuTest *tc){ + _TestDocumentWithOptions(tc, Field::STORE_YES, FieldSelector::LAZY_LOAD); + } + void TestLazyCompressedDocument(CuTest *tc){ + _TestDocumentWithOptions(tc, Field::STORE_COMPRESS, FieldSelector::LAZY_LOAD); + } + + + +CuSuite *testdocument(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Document Test")); + + SUITE_ADD_TEST(suite, TestCompressedDocument); + SUITE_ADD_TEST(suite, TestBinaryDocument); + SUITE_ADD_TEST(suite, TestLazyCompressedDocument); + SUITE_ADD_TEST(suite, TestLazyBinaryDocument); + SUITE_ADD_TEST(suite, TestFieldSelectors); + SUITE_ADD_TEST(suite, TestFields); + //SUITE_ADD_TEST(suite, TestDateTools); + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/document/TestField.cpp clucene-core-2.3.3.4/src/test/document/TestField.cpp --- clucene-core-0.9.21b/src/test/document/TestField.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/document/TestField.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,35 @@ +#include "test.h" +#include "CLucene/_SharedHeader.h" + +CL_NS_USE(document); + + void testFieldConfig(CuTest* tc) { + Field termVector(_T("name"), _T("value"), Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES); + Field termVectorPositions(_T("name"), _T("value"), Field::INDEX_TOKENIZED | Field::TERMVECTOR_WITH_POSITIONS); + Field termVectorOffsets(_T("name"), _T("value"), Field::INDEX_TOKENIZED | Field::TERMVECTOR_WITH_OFFSETS); + Field termVectorPositionsOffsets(_T("name"), _T("value"), Field::INDEX_TOKENIZED | Field::TERMVECTOR_WITH_POSITIONS_OFFSETS); + + CuAssertTrue(tc, termVector.isTermVectorStored(), _T("Term vector is not stored!")); + CuAssertTrue(tc, !termVector.isStoreOffsetWithTermVector(), _T("Term vector with offset is stored!")); + CuAssertTrue(tc, !termVector.isStorePositionWithTermVector(), _T("Term vector with position is stored!")); + + CuAssertTrue(tc, termVectorPositions.isTermVectorStored(), _T("Term vector is not stored!")); + CuAssertTrue(tc, !termVectorPositions.isStoreOffsetWithTermVector(), _T("Term vector with offset is stored!")); + CuAssertTrue(tc, termVectorPositions.isStorePositionWithTermVector(), _T("Term vector with position is not stored!")); + + CuAssertTrue(tc, termVectorOffsets.isTermVectorStored(), _T("Term vector is not stored!")); + CuAssertTrue(tc, termVectorOffsets.isStoreOffsetWithTermVector(), _T("Term vector with offset is not stored!")); + CuAssertTrue(tc, !termVectorOffsets.isStorePositionWithTermVector(), _T("Term vector with position is stored!")); + + CuAssertTrue(tc, termVectorPositionsOffsets.isTermVectorStored(), _T("Term vector is not stored!")); + CuAssertTrue(tc, termVectorPositionsOffsets.isStoreOffsetWithTermVector(), _T("Term vector with offset is not stored!")); + CuAssertTrue(tc, termVectorPositionsOffsets.isStorePositionWithTermVector(), _T("Term vector with position is not stored!")); + } + +CuSuite *testField(void) { + CuSuite *suite = CuSuiteNew(_T("CLucene Field Test")); + + SUITE_ADD_TEST(suite, testFieldConfig); + + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/document/TestNumberTools.cpp clucene-core-2.3.3.4/src/test/document/TestNumberTools.cpp --- clucene-core-0.9.21b/src/test/document/TestNumberTools.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/document/TestNumberTools.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,80 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + + void subtestTwoLongs(CuTest *tc, int64_t i, int64_t j) { + // convert to strings + TCHAR* a = NumberTools::longToString(i); + TCHAR* b = NumberTools::longToString(j); + + // are they the right length? + CuAssertTrue(tc, NumberTools::STR_SIZE == _tcslen(a)); + CuAssertTrue(tc, NumberTools::STR_SIZE == _tcslen(b)); + + // are they the right order? + if (i < j) { + CuAssertTrue(tc, _tcscmp(a,b) < 0); + } else if (i > j) { + CuAssertTrue(tc, _tcscmp(a,b) > 0); + } else { + CuAssertTrue(tc, _tcscmp(a,b) == 0); + } + + // can we convert them back to longs? + int64_t i2 = NumberTools::stringToLong(a); + int64_t j2 = NumberTools::stringToLong(b); + + CuAssertTrue(tc, i == i2); + CuAssertTrue(tc, j == j2); + + _CLDELETE_CARRAY(a); + _CLDELETE_CARRAY(b); + } + + void testNearZero(CuTest *tc) { + for (int32_t i = -100; i <= 100; i++) { + for (int32_t j = -100; j <= 100; j++) { + subtestTwoLongs(tc, i, j); + } + } + } + + void testMin(CuTest *tc) { + // make sure the constants convert to their equivelents + CuAssertTrue(tc, LUCENE_INT64_MIN_SHOULDBE == NumberTools::stringToLong(const_cast(NumberTools::MIN_STRING_VALUE))); + TCHAR* actual = NumberTools::longToString(LUCENE_INT64_MIN_SHOULDBE); + CuAssertStrEquals(tc, _T("Min value"), NumberTools::MIN_STRING_VALUE, actual); + _CLDELETE_LCARRAY(actual); + + // test near MIN, too + for (int64_t l = LUCENE_INT64_MIN_SHOULDBE; l < LUCENE_INT64_MIN_SHOULDBE + 10000; l++) { + subtestTwoLongs(tc,l, l + 1); + } + } + + void testMax(CuTest *tc) { + // make sure the constants convert to their equivelents + CuAssertTrue(tc, LUCENE_INT64_MAX_SHOULDBE == NumberTools::stringToLong(const_cast(NumberTools::MAX_STRING_VALUE))); + TCHAR* actual = NumberTools::longToString(LUCENE_INT64_MAX_SHOULDBE); + CuAssertStrEquals(tc, _T("Max value"), NumberTools::MAX_STRING_VALUE, actual); + _CLDELETE_LCARRAY(actual); + + // test near MAX, too + for (int64_t l = LUCENE_INT64_MAX_SHOULDBE; l > LUCENE_INT64_MAX_SHOULDBE - 10000; l--) { + subtestTwoLongs(tc,l, l - 1); + } + } + +CuSuite *testNumberTools(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Number Tools Test")); + + SUITE_ADD_TEST(suite, testNearZero); + SUITE_ADD_TEST(suite, testMin); + SUITE_ADD_TEST(suite, testMax); + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/index/IndexWriter4Test.cpp clucene-core-2.3.3.4/src/test/index/IndexWriter4Test.cpp --- clucene-core-0.9.21b/src/test/index/IndexWriter4Test.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/IndexWriter4Test.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,44 @@ +#include "CLucene/_ApiHeader.h" +#include "IndexWriter4Test.h" +#include "CLucene/index/_SegmentInfos.h" + +CL_NS_DEF(index) + +IndexWriter4Test::IndexWriter4Test(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, const bool create) : + IndexWriter(d, a, create) +{ +} + +IndexWriter4Test::IndexWriter4Test(CL_NS(store)::Directory* d, bool autoCommit, CL_NS(analysis)::Analyzer* a, const bool create) : + IndexWriter(d, autoCommit, a, create) +{ +} + +// for test purpose +int32_t IndexWriter4Test::getDocCount(int32_t i) { + return IndexWriter::getDocCount(i); +} + +// for test purpose +int32_t IndexWriter4Test::getNumBufferedDocuments(){ + return IndexWriter::getNumBufferedDocuments(); +} + +// for test purpose +int32_t IndexWriter4Test::getSegmentCount(){ + return IndexWriter::getSegmentCount(); +} + +int32_t IndexWriter4Test::getBufferedDeleteTermsSize() { + return IndexWriter::getBufferedDeleteTermsSize(); +} + +int32_t IndexWriter4Test::getNumBufferedDeleteTerms() { + return IndexWriter::getNumBufferedDeleteTerms(); +} + +SegmentInfo* IndexWriter4Test::newestSegment() { + return IndexWriter::newestSegment(); +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/test/index/IndexWriter4Test.h clucene-core-2.3.3.4/src/test/index/IndexWriter4Test.h --- clucene-core-0.9.21b/src/test/index/IndexWriter4Test.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/IndexWriter4Test.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,35 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2010 Borivoj Kostka and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_test_index_IndexWriter4Test_ +#define _lucene_test_index_IndexWriter4Test_ + +#include "CLucene/index/IndexWriter.h" + +CL_NS_DEF(index) + +/* + * Derived from IndexWriter, contains methods used only for testing purposes. + * + */ +class IndexWriter4Test : public IndexWriter { + +public: + + IndexWriter4Test(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, const bool create); + IndexWriter4Test(CL_NS(store)::Directory* d, bool autocommit, CL_NS(analysis)::Analyzer* a, const bool create); + + int32_t getDocCount(int32_t i); + int32_t getNumBufferedDocuments(); + int32_t getSegmentCount(); + int32_t getBufferedDeleteTermsSize(); + int32_t getNumBufferedDeleteTerms(); + SegmentInfo* newestSegment(); + +}; + +CL_NS_END +#endif diff -Nru clucene-core-0.9.21b/src/test/index/TestAddIndexesNoOptimize.cpp clucene-core-2.3.3.4/src/test/index/TestAddIndexesNoOptimize.cpp --- clucene-core-0.9.21b/src/test/index/TestAddIndexesNoOptimize.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/TestAddIndexesNoOptimize.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,592 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2010 Borivoj Kostka and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/RAMDirectory.h" +#include "CLucene/index/MergeScheduler.h" +#include "../store/MockRAMDirectory.h" +#include "IndexWriter4Test.h" + +CL_NS_USE(store) +CL_NS_USE(index) +CL_NS_USE(document) +CL_NS_USE2(analysis,standard) + +static IndexWriter4Test * newWriter(Directory * dir, WhitespaceAnalyzer * analyzer, bool create) { + + IndexWriter4Test * writer = _CLNEW IndexWriter4Test(dir, analyzer, create); + writer->setMergePolicy(_CLNEW LogDocMergePolicy()); + return writer; +} + +static void addDocs(IndexWriter4Test * writer, int numDocs) { + + for (int i = 0; i < numDocs; i++) { + Document doc; + doc.add(* _CLNEW Field(_T("content"), _T("aaa"), Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(&doc); + } +} + +static void addDocs2(IndexWriter4Test * writer, int numDocs) { + + for (int i = 0; i < numDocs; i++) { + Document doc; + doc.add(* _CLNEW Field(_T("content"), _T("bbb"), Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(&doc); + } +} + +static void verifyNumDocs(CuTest *tc, Directory * dir, int numDocs) { + + IndexReader * reader = IndexReader::open(dir); + assertEquals(numDocs, reader->maxDoc()); + assertEquals(numDocs, reader->numDocs()); + reader->close(); + _CLLDELETE(reader); +} + +static void verifyTermDocs(CuTest *tc, Directory * dir, Term * term, int numDocs) { + + IndexReader * reader = IndexReader::open(dir); + TermDocs * termDocs = reader->termDocs(term); + int count = 0; + while (termDocs->next()) + count++; + assertEquals(numDocs, count); + termDocs->close(); + _CLLDELETE(termDocs); + reader->close(); + _CLLDELETE(reader); +} + +void setUpDirs(CuTest *tc, Directory * dir, Directory * aux) { + + IndexWriter4Test * writer = NULL; + WhitespaceAnalyzer analyzer; + + writer = newWriter(dir, &analyzer, true); + writer->setMaxBufferedDocs(1000); + // add 1000 documents in 1 segment + addDocs(writer, 1000); + assertEquals(1000, writer->docCount()); + assertEquals(1, writer->getSegmentCount()); + writer->close(); + _CLLDELETE(writer); + + writer = newWriter(aux, &analyzer, true); + writer->setUseCompoundFile(false); // use one without a compound file + writer->setMaxBufferedDocs(100); + writer->setMergeFactor(10); + // add 30 documents in 3 segments + for (int i = 0; i < 3; i++) { + addDocs(writer, 10); + writer->close(); + _CLLDELETE(writer); + writer = newWriter(aux, &analyzer, false); + writer->setUseCompoundFile(false); // use one without a compound file + writer->setMaxBufferedDocs(100); + writer->setMergeFactor(10); + } + assertEquals(30, writer->docCount()); + assertEquals(3, writer->getSegmentCount()); + writer->close(); + _CLLDELETE(writer); +} + +void testSimpleCase(CuTest *tc) { + + // main directory + Directory * dir = _CLNEW RAMDirectory(); + // two auxiliary directories + Directory * aux = _CLNEW RAMDirectory(); + Directory * aux2 = _CLNEW RAMDirectory(); + + IndexWriter4Test * writer = NULL; + + WhitespaceAnalyzer analyzer; + + writer = newWriter(dir, &analyzer, true); + + // add 100 documents + addDocs(writer, 100); + assertEquals(100, writer->docCount()); + writer->close(); + _CLLDELETE(writer); + + writer = newWriter(aux, &analyzer, true); + writer->setUseCompoundFile(false); // use one without a compound file + // add 40 documents in separate files + addDocs(writer, 40); + assertEquals(40, writer->docCount()); + writer->close(); + _CLLDELETE(writer); + + writer = newWriter(aux2, &analyzer, true); + // add 40 documents in compound files + addDocs2(writer, 50); + assertEquals(50, writer->docCount()); + writer->close(); + _CLLDELETE(writer); + + // test doc count before segments are merged + writer = newWriter(dir, &analyzer, false); + assertEquals(100, writer->docCount()); + { + ValueArray dirs(2); + dirs[0] = aux; + dirs[1] = aux2; + writer->addIndexesNoOptimize( dirs ); + } + assertEquals(190, writer->docCount()); + writer->close(); + _CLLDELETE(writer); + + // make sure the old index is correct + verifyNumDocs(tc, aux, 40); + + // make sure the new index is correct + verifyNumDocs(tc, dir, 190); + + // now add another set in. + Directory * aux3 = _CLNEW RAMDirectory(); + writer = newWriter(aux3, &analyzer, true); + // add 40 documents + addDocs(writer, 40); + assertEquals(40, writer->docCount()); + writer->close(); + _CLLDELETE(writer); + + // test doc count before segments are merged/index is optimized + writer = newWriter(dir, &analyzer, false); + assertEquals(190, writer->docCount()); + { + ValueArray dirs(1); + dirs[0] = aux3; + writer->addIndexesNoOptimize( dirs ); + } + assertEquals(230, writer->docCount()); + writer->close(); + _CLLDELETE(writer); + + // make sure the new index is correct + verifyNumDocs(tc, dir, 230); + + Term t1(_T("content"), _T("aaa")); + Term t2(_T("content"), _T("bbb")); + + verifyTermDocs(tc, dir, &t1, 180); + verifyTermDocs(tc, dir, &t2, 50); + + // now optimize it. + writer = newWriter(dir, &analyzer, false); + writer->optimize(); + writer->close(); + _CLLDELETE(writer); + + // make sure the new index is correct + verifyNumDocs(tc, dir, 230); + + verifyTermDocs(tc, dir, &t1, 180); + verifyTermDocs(tc, dir, &t2, 50); + + // now add a single document + Directory * aux4 = _CLNEW RAMDirectory(); + writer = newWriter(aux4, &analyzer, true); + addDocs2(writer, 1); + writer->close(); + _CLLDELETE(writer); + + writer = newWriter(dir, &analyzer, false); + assertEquals(230, writer->docCount()); + + { + ValueArray dirs(1); + dirs[0] = aux4; + writer->addIndexesNoOptimize( dirs ); + } + + assertEquals(231, writer->docCount()); + writer->close(); + _CLLDELETE(writer); + + verifyNumDocs(tc, dir, 231); + + verifyTermDocs(tc, dir, &t2, 51); + + dir->close(); + _CLLDELETE(dir); + aux->close(); + _CLLDELETE(aux); + aux2->close(); + _CLLDELETE(aux2); + aux3->close(); + _CLLDELETE(aux3); + aux4->close(); + _CLLDELETE(aux4); +} + +// case 0: add self or exceed maxMergeDocs, expect exception +void testAddSelf(CuTest * tc) { + + // main directory + Directory * dir = _CLNEW RAMDirectory(); + // auxiliary directory + Directory * aux = _CLNEW RAMDirectory(); + + IndexWriter4Test * writer = NULL; + WhitespaceAnalyzer analyzer; + + writer = newWriter(dir, &analyzer, true); + // add 100 documents + addDocs(writer, 100); + assertEquals(100, writer->docCount()); + writer->close(); + _CLLDELETE(writer); + + writer = newWriter(aux, &analyzer, true); + writer->setUseCompoundFile(false); // use one without a compound file + writer->setMaxBufferedDocs(1000); + // add 140 documents in separate files + addDocs(writer, 40); + writer->close(); + _CLLDELETE(writer); + + writer = newWriter(aux, &analyzer, true); + writer->setUseCompoundFile(false); // use one without a compound file + writer->setMaxBufferedDocs(1000); + addDocs(writer, 100); + writer->close(); + _CLLDELETE(writer); + + writer = newWriter(dir, &analyzer, false); + try { + // cannot add self + ValueArray dirs(2); + dirs[0] = aux; + dirs[1] = dir; + writer->addIndexesNoOptimize( dirs ); + assertTrue(false); + } + catch (CLuceneError&) { + assertEquals(100, writer->docCount()); + } + writer->close(); + _CLLDELETE(writer); + + // make sure the index is correct + verifyNumDocs(tc, dir, 100); + + dir->close(); + _CLLDELETE(dir); + + aux->close(); + _CLLDELETE(aux); +} + + // in all the remaining tests, make the doc count of the oldest segment + // in dir large so that it is never merged in addIndexesNoOptimize() + // case 1: no tail segments +void testNoTailSegments(CuTest * tc) { + + // main directory + Directory *dir = _CLNEW RAMDirectory(); + // auxiliary directory + Directory *aux = _CLNEW RAMDirectory(); + + WhitespaceAnalyzer analyzer; + + setUpDirs(tc, dir, aux); + + IndexWriter4Test * writer = newWriter(dir, &analyzer, false); + writer->setMaxBufferedDocs(10); + writer->setMergeFactor(4); + addDocs(writer, 10); + + ValueArray dirs(1); + dirs[0] = aux; + writer->addIndexesNoOptimize(dirs); + + assertEquals(1040, writer->docCount()); + assertEquals(2, writer->getSegmentCount()); + assertEquals(1000, writer->getDocCount(0)); + writer->close(); + _CLLDELETE(writer); + + // make sure the index is correct + verifyNumDocs(tc, dir, 1040); + + dir->close(); + _CLLDELETE(dir); + + aux->close(); + _CLLDELETE(aux); +} + +// case 2: tail segments, invariants hold, no copy +void testNoCopySegments(CuTest * tc) { + + // main directory + Directory * dir = _CLNEW RAMDirectory(); + // auxiliary directory + Directory * aux = _CLNEW RAMDirectory(); + + WhitespaceAnalyzer an; + + setUpDirs(tc, dir, aux); + + IndexWriter4Test * writer = newWriter(dir, &an, false); + writer->setMaxBufferedDocs(9); + writer->setMergeFactor(4); + addDocs(writer, 2); + + ValueArray dirs(1); + dirs[0] = aux; + writer->addIndexesNoOptimize(dirs); + + assertEquals(1032, writer->docCount()); + assertEquals(2, writer->getSegmentCount()); + assertEquals(1000, writer->getDocCount(0)); + writer->close(); + _CLLDELETE(writer); + + // make sure the index is correct + verifyNumDocs(tc, dir, 1032); + + dir->close(); + _CLLDELETE(dir); + + aux->close(); + _CLLDELETE(aux); +} + +// case 3: tail segments, invariants hold, copy, invariants hold +void testNoMergeAfterCopy(CuTest * tc) { + + // main directory + Directory * dir = _CLNEW RAMDirectory(); + // auxiliary directory + Directory * aux = _CLNEW RAMDirectory(); + + WhitespaceAnalyzer an; + + setUpDirs(tc, dir, aux); + + IndexWriter4Test * writer = newWriter(dir, &an, false); + writer->setMaxBufferedDocs(10); + writer->setMergeFactor(4); + + ValueArray dirs(2); + dirs[0] = aux; + dirs[1] = aux; + writer->addIndexesNoOptimize(dirs); + + assertEquals(1060, writer->docCount()); + assertEquals(1000, writer->getDocCount(0)); + writer->close(); + _CLLDELETE(writer); + + // make sure the index is correct + verifyNumDocs(tc, dir, 1060); + + dir->close(); + _CLLDELETE(dir); + + aux->close(); + _CLLDELETE(aux); +} + +// case 4: tail segments, invariants hold, copy, invariants not hold +void testMergeAfterCopy(CuTest * tc) { + + // main directory + Directory * dir = _CLNEW RAMDirectory(); + // auxiliary directory + Directory * aux = _CLNEW RAMDirectory(); + + WhitespaceAnalyzer an; + + setUpDirs(tc, dir, aux); + + IndexReader * reader = IndexReader::open(aux); + for (int i = 0; i < 20; i++) { + reader->deleteDocument(i); + } + assertEquals(10, reader->numDocs()); + reader->close(); + _CLLDELETE(reader); + + IndexWriter4Test * writer = newWriter(dir, &an, false); + writer->setMaxBufferedDocs(4); + writer->setMergeFactor(4); + + ValueArray dirs(2); + dirs[0] = aux; + dirs[1] = aux; + writer->addIndexesNoOptimize(dirs); + + assertEquals(1020, writer->docCount()); + assertEquals(1000, writer->getDocCount(0)); + writer->close(); + _CLLDELETE(writer); + + // make sure the index is correct + verifyNumDocs(tc, dir, 1020); + + dir->close(); + _CLLDELETE(dir); + + aux->close(); + _CLLDELETE(aux); +} + +// case 5: tail segments, invariants not hold +void testMoreMerges(CuTest * tc) { + + // main directory + Directory * dir = _CLNEW RAMDirectory(); + // auxiliary directory + Directory * aux = _CLNEW RAMDirectory(); + Directory * aux2 = _CLNEW RAMDirectory(); + + WhitespaceAnalyzer an; + + setUpDirs(tc, dir, aux); + + IndexWriter4Test * writer = newWriter(aux2, &an, true); + writer->setMaxBufferedDocs(100); + writer->setMergeFactor(10); + + ValueArray dirs(1); + dirs[0] = aux; + writer->addIndexesNoOptimize(dirs); + + assertEquals(30, writer->docCount()); + assertEquals(3, writer->getSegmentCount()); + writer->close(); + _CLLDELETE(writer); + + IndexReader * reader = IndexReader::open(aux); + for (int i = 0; i < 27; i++) { + reader->deleteDocument(i); + } + assertEquals(3, reader->numDocs()); + reader->close(); + _CLLDELETE(reader); + + reader = IndexReader::open(aux2); + for (int i = 0; i < 8; i++) { + reader->deleteDocument(i); + } + assertEquals(22, reader->numDocs()); + reader->close(); + _CLLDELETE( reader ); + + writer = newWriter(dir, &an, false); + writer->setMaxBufferedDocs(6); + writer->setMergeFactor(4); + + ValueArray dirs2(2); + dirs2[0] = aux; + dirs2[1] = aux2; + writer->addIndexesNoOptimize(dirs2); + + assertEquals(1025, writer->docCount()); + assertEquals(1000, writer->getDocCount(0)); + writer->close(); + _CLLDELETE( writer ); + + // make sure the index is correct + verifyNumDocs(tc, dir, 1025); + + dir->close(); + _CLLDELETE(dir); + + aux->close(); + _CLLDELETE(aux); + + aux2->close(); + _CLLDELETE(aux2); +} + +// LUCENE-1270 +void testHangOnClose(CuTest * tc) { + + WhitespaceAnalyzer an; + MockRAMDirectory * dir = _CLNEW MockRAMDirectory(); + dir->setRandomIOExceptionRate(0.0, 0); + IndexWriter4Test * writer = _CLNEW IndexWriter4Test(dir, false, &an, true); + writer->setMergePolicy(_CLNEW LogByteSizeMergePolicy()); + writer->setMaxBufferedDocs(5); + writer->setUseCompoundFile(false); + writer->setMergeFactor(100); + + Document doc; + doc.add(* _CLNEW Field(_T("content"), _T("aaa bbb ccc ddd eee fff ggg hhh iii"), + Field::STORE_YES | Field::INDEX_TOKENIZED | Field::TERMVECTOR_WITH_POSITIONS_OFFSETS)); + for(int i=0;i<60;i++) + writer->addDocument(&doc); + writer->setMaxBufferedDocs(200); + Document doc2; + doc2.add(* _CLNEW Field(_T("content"), _T("aaa bbb ccc ddd eee fff ggg hhh iii"), + Field::STORE_YES | Field::INDEX_NO)); + doc2.add(* _CLNEW Field(_T("content"), _T("aaa bbb ccc ddd eee fff ggg hhh iii"), + Field::STORE_YES | Field::INDEX_NO)); + doc2.add(* _CLNEW Field(_T("content"), _T("aaa bbb ccc ddd eee fff ggg hhh iii"), + Field::STORE_YES | Field::INDEX_NO)); + doc2.add(* _CLNEW Field(_T("content"), _T("aaa bbb ccc ddd eee fff ggg hhh iii"), + Field::STORE_YES | Field::INDEX_NO)); + for(int i=0;i<10;i++) + writer->addDocument(&doc2); + writer->close(); + _CLLDELETE(writer); + + MockRAMDirectory * dir2 = _CLNEW MockRAMDirectory(); + dir2->setRandomIOExceptionRate(0.0, 0); + writer = _CLNEW IndexWriter4Test(dir2, false, &an, true); + + LogByteSizeMergePolicy * lmp = _CLNEW LogByteSizeMergePolicy(); + lmp->setMinMergeMB(0.0001); + writer->setMergePolicy(lmp); + writer->setMergeFactor(4); + writer->setUseCompoundFile(false); + writer->setMergeScheduler(_CLNEW SerialMergeScheduler()); + + + ValueArray dirs(1); + dirs[0] = dir; + writer->addIndexesNoOptimize(dirs); + + writer->close(); + _CLLDELETE(writer); + + dir->close(); + _CLLDELETE(dir); + + dir2->close(); + _CLLDELETE(dir2); + +} + +CuSuite *testAddIndexesNoOptimize(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene AddIndexesNoOptimize Test")); + SUITE_ADD_TEST(suite, testSimpleCase); + SUITE_ADD_TEST(suite, testAddSelf); + SUITE_ADD_TEST(suite, testNoTailSegments); + SUITE_ADD_TEST(suite, testNoCopySegments); + SUITE_ADD_TEST(suite, testNoMergeAfterCopy); + SUITE_ADD_TEST(suite, testMergeAfterCopy); + SUITE_ADD_TEST(suite, testMoreMerges); + SUITE_ADD_TEST(suite, testHangOnClose); + + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/index/TestHighFreqTerms.cpp clucene-core-2.3.3.4/src/test/index/TestHighFreqTerms.cpp --- clucene-core-0.9.21b/src/test/index/TestHighFreqTerms.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/TestHighFreqTerms.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,86 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + + class TestTermInfo: LUCENE_BASE { + public: + int32_t docFreq; + Term* term; + + TestTermInfo(Term* t, int32_t df) { + term = _CL_POINTER(t); + docFreq = df; + } + ~TestTermInfo(){ + _CLDECDELETE(term); + } + }; + + class TermInfoQueue: public PriorityQueue > { + public: + TermInfoQueue(int32_t size) { + initialize(size,true); + } + bool lessThan(TestTermInfo* A, TestTermInfo* B) { + return A->docFreq < B->docFreq; + + } + }; + + void _TestHighFreqTerms(const char* index, size_t numTerms) { + + IndexReader* reader = IndexReader::open(index); + + TermInfoQueue* tiq = _CLNEW TermInfoQueue(100); + TermEnum* terms = reader->terms(); + int32_t c=0; + int32_t minFreq = 0; + while (terms->next()) { + if (terms->docFreq() > minFreq) { + Term* term = terms->term(false); + tiq->put(_CLNEW TestTermInfo(term, terms->docFreq())); + c++; + if (tiq->size() >= numTerms) { // if tiq overfull + TestTermInfo* tti=tiq->pop(); + _CLLDELETE(tti); // remove lowest in tiq + c--; + minFreq = ((TestTermInfo*)tiq->top())->docFreq; // reset minFreq + } + } + } + + while (tiq->size() != 0) { + TestTermInfo* termInfo = (TestTermInfo*)tiq->pop(); + _CLLDELETE(termInfo); + c--; + } + + terms->close(); + _CLDELETE(terms); + _CLDELETE(tiq); + + reader->close(); + _CLDELETE( reader ); + + //CuMessageA(tc,"%d milliseconds\n",(int32_t)(Misc::currentTimeMillis()-start)); + } + void TestHighFreqTerms(CuTest *tc){ + char loc[1024]; + strcpy(loc, clucene_data_location); + strcat(loc, "/reuters-21578-index"); + + CuAssert(tc,_T("Index does not exist"),Misc::dir_Exists(loc)); + _TestHighFreqTerms(loc,100); + } + +CuSuite *testhighfreq(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene High Frequencies Test")); + + SUITE_ADD_TEST(suite, TestHighFreqTerms); + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/index/TestIndexModifier.cpp clucene-core-2.3.3.4/src/test/index/TestIndexModifier.cpp --- clucene-core-0.9.21b/src/test/index/TestIndexModifier.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/TestIndexModifier.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,215 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/index/IndexModifier.h" +#include + +CL_NS_USE(store) +CL_NS_USE(index) +CL_NS_USE(document) +CL_NS_USE2(analysis,standard) + +void IndexModifierExceptionTest(CuTest *tc) +{ + class LockedLock : public LuceneLock + { + public: + LockedLock() : LuceneLock() {}; + virtual bool obtain() {return obtain(0);}; + virtual void release() {}; + virtual bool isLocked() {return true;}; + bool obtain(int64_t lockWaitTimeout) {return false;}; + virtual std::string toString() {return "LockedLock";}; + virtual const char* getObjectName() const {return "LockedLock";}; + }; + + class LockedDirectory : public RAMDirectory + { + public: + bool errOn; + + LockedDirectory() : RAMDirectory(), errOn(false) {}; + + // this simulates locking problem, only if errOn is true + LuceneLock* makeLock(const char* name) { + if (errOn) + return _CLNEW LockedLock(); + else + return RAMDirectory::makeLock(name); + }; + }; + + LockedDirectory directory; + StandardAnalyzer analyzer; + Document doc; + IndexModifier * pIm = NULL; + + try + { + doc.add(* _CLNEW Field(_T("text"), _T("Document content"), Field::STORE_YES | Field::INDEX_TOKENIZED)); + pIm = _CLNEW IndexModifier(&directory, &analyzer, true); + + pIm->addDocument(&doc); + pIm->deleteDocument(0); + } + catch (CLuceneError & err) + { + CuFail(tc, _T("Exception thrown upon startup")); + return; + } + + try + { + // switch on locking timeout simulation + directory.errOn = true; + + // throws lock timeout exception + pIm->addDocument(&doc); + CuFail(tc, _T("Exception was not thrown during addDocument")); + } + catch (CLuceneError & err) + { + } + + // this produces Access Violation exception + try { + _CLLDELETE(pIm); + } catch (...) + { + CuFail(tc, _T("Exception thrown upon deletion")); + } +} + +class bulk_modification { +public: + void modify_index(CuTest *tc, IndexModifier& ndx); +}; + +class incremental_modification { +public: + void modify_index(CuTest *tc, IndexModifier& ndx); +}; + +template +class IMinsertDelete_tester : public modification { +public: + void invoke(Directory& storage, CuTest *tc); +}; + +void bulk_modification::modify_index(CuTest *tc, IndexModifier& ndx){ + std::basic_stringstream field; + for ( int i=0;i<1000;i++ ){ + field.str(_T("")); + field << _T("fielddata") << i; + + Document doc; + + doc.add ( + *_CLNEW Field( + _T("field0"), + field.str().c_str(), + Field::STORE_YES | Field::INDEX_UNTOKENIZED + ) + ); + ndx.addDocument(&doc); + } + for ( int i=0;i<1000;i+=2 ){ + field.str(_T("")); + field << _T("fielddata") << i; + + Term deleted( + _T("field0"), + field.str().c_str(), + true + ); + CLUCENE_ASSERT(ndx.deleteDocuments(&deleted) > 0); + } +} + +void incremental_modification::modify_index(CuTest *tc, IndexModifier& ndx){ + std::basic_stringstream field; + for ( int i=0;i<1000;i++ ){ + field.str(_T("")); + field << _T("fielddata") << i; + + Document doc; + + doc.add ( + *_CLNEW Field( + _T("field0"), + field.str().c_str(), + Field::STORE_YES | Field::INDEX_UNTOKENIZED + ) + ); + ndx.addDocument(&doc); + if ( 0 == i % 2 ) { + Term deleted( + _T("field0"), + field.str().c_str(), + true + ); + CLUCENE_ASSERT(ndx.deleteDocuments(&deleted) > 0); + } + } +} + +template +void IMinsertDelete_tester::invoke( + Directory& storage, + CuTest *tc +){ + SimpleAnalyzer a; + + IndexModifier ndx2(&storage,&a,true); + ndx2.close(); + IndexModifier ndx(&storage,&a,false); + + ndx.setUseCompoundFile(false); + ndx.setMergeFactor(2); + + this->modify_index(tc, ndx); + + ndx.optimize(); + ndx.close(); + + //test the ram loading + RAMDirectory ram2(&storage); + IndexReader* reader2 = IndexReader::open(&ram2); + Term* term = _CLNEW Term(_T("field0"),_T("fielddata1")); + TermDocs* en = reader2->termDocs(term); + CLUCENE_ASSERT(en->next()); + _CLDELETE(en); + _CLDECDELETE(term); + term = _CLNEW Term(_T("field0"),_T("fielddata0")); + en = reader2->termDocs(term); + CLUCENE_ASSERT(!en->next()); + _CLDELETE(en); + _CLDECDELETE(term); + _CLDELETE(reader2); +} + +void testIMinsertDelete(CuTest *tc){ + char fsdir[CL_MAX_PATH]; + _snprintf(fsdir,CL_MAX_PATH,"%s/%s",cl_tempDir, "test.search"); + RAMDirectory ram; + FSDirectory* disk = FSDirectory::getDirectory(fsdir); + IMinsertDelete_tester().invoke(ram, tc); + IMinsertDelete_tester().invoke(ram, tc); + IMinsertDelete_tester().invoke(*disk, tc); + IMinsertDelete_tester().invoke(*disk, tc); + disk->close(); + _CLDECDELETE(disk); +} + +CuSuite *testIndexModifier(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene IndexModifier Test")); + SUITE_ADD_TEST(suite, IndexModifierExceptionTest); + SUITE_ADD_TEST(suite, testIMinsertDelete); + + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/index/TestIndexReader.cpp clucene-core-2.3.3.4/src/test/index/TestIndexReader.cpp --- clucene-core-0.9.21b/src/test/index/TestIndexReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/TestIndexReader.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,309 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include +#include "CLucene/index/_SegmentHeader.h" +#include "CLucene/index/_MultiSegmentReader.h" +#include "CLucene/index/MultiReader.h" + +typedef IndexReader* (*TestIRModifyIndex)(CuTest* tc, IndexReader* reader, int modify); +DEFINE_MUTEX(createReaderMutex) + + +void createDocument(Document& doc, int n, int numFields) { + doc.clear(); + StringBuffer sb; + sb.append( _T("a")); + sb.appendInt(n); + doc.add(* _CLNEW Field( _T("field1"), sb.getBuffer(), Field::STORE_YES | Field::INDEX_TOKENIZED)); + sb.append(_T(" b")); + sb.appendInt(n); + for (int i = 1; i < numFields; i++) { + TCHAR buf[10]; + _sntprintf(buf,10,_T("field%d"), i+1); + doc.add(* _CLNEW Field(buf, sb.getBuffer(), Field::STORE_YES | Field::INDEX_TOKENIZED)); + } +} + +void createIndex(CuTest* tc, Directory* dir, bool multiSegment) { + WhitespaceAnalyzer whitespaceAnalyzer; + IndexWriter w(dir, &whitespaceAnalyzer, true); + + w.setMergePolicy(_CLNEW LogDocMergePolicy()); + Document doc; + for (int i = 0; i < 100; i++) { + createDocument(doc, i, 4); + w.addDocument(&doc); + if (multiSegment && (i % 10) == 0) { + w.flush(); + } + } + + if (!multiSegment) { + w.optimize(); + } + + w.close(); + + IndexReader* r = IndexReader::open(dir); + if (multiSegment) { + CuAssert(tc,_T("check is multi"), strcmp(r->getObjectName(),"MultiSegmentReader")==0); + } else { + CuAssert(tc,_T("check is segment"), strcmp(r->getObjectName(),"SegmentReader")==0); + } + r->close(); + _CLDELETE(r); +} + +struct ReaderCouple{ + IndexReader* newReader; + IndexReader* refreshedReader; +}; + +void assertReaderClosed(CuTest* tc, IndexReader* reader, bool checkSubReaders, bool checkNormsClosed) { + //TODO: CuAssertIntEquals(tc, _T("Check refcount is zero"), 0, reader->getRefCount()); + +/* can't test internal... if (checkNormsClosed && reader->instanceOf(SegmentReader::getClassName())) { + CuAssertTrue(tc, ((SegmentReader*) reader)->normsClosed()); + }*/ + + if (checkSubReaders) { + /* can't test internal... + if (reader->instanceOf(MultiSegmentReader::getClassName())) { + const CL_NS(util)::ArrayBase& subReaders = *((MultiSegmentReader*) reader)->getSubReaders(); + for (int i = 0; i < subReaders.length; i++) { + assertReaderClosed(tc, subReaders[i], checkSubReaders, checkNormsClosed); + } + }*/ + + if (reader != NULL && reader->instanceOf(MultiReader::getClassName())) { + const CL_NS(util)::ArrayBase& subReaders = *((MultiReader*) reader)->getSubReaders(); + for (size_t i = 0; i < subReaders.length; i++) { + assertReaderClosed(tc, subReaders[i], checkSubReaders, checkNormsClosed); + } + } + } +} + +void assertReaderOpen(CuTest* /*tc*/, IndexReader* reader) { + Document doc; + reader->document(0, doc);//hack to call ensureOpen... + +/* can't test internal... if (reader->instanceOf(MultiSegmentReader::getClassName())) { + const CL_NS(util)::ArrayBase& subReaders = *((MultiSegmentReader*) reader)->getSubReaders(); + for (int i = 0; i < subReaders.length; i++) { + assertReaderOpen(tc, subReaders[i]); + } + }*/ +} + +Directory* defaultModifyIndexTestDir1 = NULL; +IndexReader* defaultModifyIndexTest(CuTest* /*tc*/, IndexReader* reader, int i){ + WhitespaceAnalyzer whitespaceAnalyzer; + switch (i) { + case 0: { + IndexWriter w(defaultModifyIndexTestDir1, &whitespaceAnalyzer, false); + Term* t1 = _CLNEW Term(_T("field2"), _T("a11")); + w.deleteDocuments(t1); + Term* t2 = _CLNEW Term(_T("field2"), _T("b30")); + w.deleteDocuments(t2); + _CLDECDELETE(t1); + _CLDECDELETE(t2); + w.close(); + break; + } + case 1: { + IndexReader* reader = IndexReader::open(defaultModifyIndexTestDir1); + reader->setNorm(4, _T("field1"), (uint8_t)123); + reader->setNorm(44, _T("field2"), (uint8_t)222); + reader->setNorm(44, _T("field4"), (uint8_t)22); + reader->close(); + _CLDELETE(reader); + break; + } + case 2: { + IndexWriter w(defaultModifyIndexTestDir1, &whitespaceAnalyzer, false); + w.optimize(); + w.close(); + break; + } + case 3: { + IndexWriter w(defaultModifyIndexTestDir1, &whitespaceAnalyzer, false); + Document doc; + createDocument(doc, 101, 4); + w.addDocument(&doc); + w.optimize(); + createDocument(doc,102, 4); + w.addDocument(&doc); + createDocument(doc,103, 4); + w.addDocument(&doc); + w.close(); + break; + } + case 4: { + IndexReader* reader = IndexReader::open(defaultModifyIndexTestDir1); + reader->setNorm(5, _T("field1"), (uint8_t)123); + reader->setNorm(55, _T("field2"), (uint8_t)222); + reader->close(); + _CLDELETE(reader); + break; + } + + } + return IndexReader::open(defaultModifyIndexTestDir1); +} + + +Directory* defaultModifyIndexTestDir2 = NULL; +IndexReader* defaultModifyIndexTestMulti(CuTest* tc, IndexReader* reader, int i){ + IndexReader* x = defaultModifyIndexTest(tc,reader,i); //call main test + _CLDELETE(x); + + + Directory* tmp = defaultModifyIndexTestDir1; + defaultModifyIndexTestDir1 = defaultModifyIndexTestDir2; + x = defaultModifyIndexTest(tc,reader,i); //call main test + _CLDELETE(x); + defaultModifyIndexTestDir1 = tmp; + + ValueArray readers(2); + readers[0] = IndexReader::open(defaultModifyIndexTestDir1); + readers[1] = IndexReader::open(defaultModifyIndexTestDir2); + return _CLNEW MultiReader(&readers, true); +} + +ReaderCouple refreshReader(CuTest* tc, IndexReader* reader, TestIRModifyIndex test, int modify, bool hasChanges) { + SCOPED_LOCK_MUTEX(createReaderMutex) + + IndexReader* r = NULL; + if (test != NULL) { + r = (*test)(tc, reader, modify); + } + + IndexReader* refreshed = reader->reopen(); + if (hasChanges) { + CuAssert(tc, _T("No new IndexReader instance created during refresh."), refreshed != reader ); + } else { + CuAssert(tc, _T("New IndexReader instance created during refresh even though index had no changes."), refreshed == reader); + } + + ReaderCouple ret = {r, refreshed}; + return ret; +} +ReaderCouple refreshReader(CuTest* tc, IndexReader* reader, bool hasChanges) { + return refreshReader(tc,reader, NULL, -1, hasChanges); +} +void performDefaultIRTests(CuTest *tc, IndexReader* index1, IndexReader* index2, IndexReader* index2B, TestIRModifyIndex test){ + TestAssertIndexReaderEquals(tc, index1, index2); + + // verify that reopen() does not return a new reader instance + // in case the index has no changes + ReaderCouple couple = refreshReader(tc, index2, false); + CuAssertTrue(tc, couple.refreshedReader == index2); + + couple = refreshReader(tc, index2, test, 0, true); + index1 = couple.newReader; + IndexReader* index2_refreshed = couple.refreshedReader; + index2->close(); + assertReaderClosed(tc, index2, true, true); + if ( index2_refreshed != index2 ){ + _CLDELETE(index2); + } + + // test if refreshed reader and newly opened reader return equal results + TestAssertIndexReaderEquals(tc, index1, index2_refreshed); + + index1->close(); + _CLDELETE(index1); + index2_refreshed->close(); + assertReaderClosed(tc, index2_refreshed, true, true); + _CLDELETE(index2_refreshed); + + index2 = index2B; + + for (int i = 1; i < 4; i++) { + couple = refreshReader(tc, index2, test, i, true); + // refresh IndexReader + index2->close(); + if ( couple.refreshedReader != index2 ){ + _CLDELETE(index2); + } + + index2 = couple.refreshedReader; + index1 = couple.newReader; + TestAssertIndexReaderEquals(tc, index1, index2); + index1->close(); + assertReaderClosed(tc, index1, true, true); + _CLDELETE(index1); + } + + index2->close(); + assertReaderClosed(tc, index2, true, true); + _CLDELETE(index2); +} + + + +void testIndexReaderReopen(CuTest *tc){ + RAMDirectory dir; + createIndex(tc, &dir, false); + IndexReader* index1 = IndexReader::open(&dir); + IndexReader* index2 = IndexReader::open(&dir); + IndexReader* index2B = IndexReader::open(&dir); + + defaultModifyIndexTestDir1 = &dir; + performDefaultIRTests(tc, index1, index2, index2B, defaultModifyIndexTest); + defaultModifyIndexTestDir1 = NULL; + + index1->close(); + _CLDELETE(index1); + //_CLDELETE(index2);this one gets deleted... + //_CLDELETE(index2B); +} + + +void testMultiReaderReopen(CuTest *tc){ + RAMDirectory dir1; + createIndex(tc, &dir1, true); + RAMDirectory dir2 ; + createIndex(tc, &dir2, true); + + ValueArray readers1(2); + readers1[0] = IndexReader::open(&dir1); + readers1[1] = IndexReader::open(&dir2); + IndexReader* index1 = _CLNEW MultiReader(&readers1, true); + + ValueArray readers2(2); + readers2[0] = IndexReader::open(&dir1); + readers2[1] = IndexReader::open(&dir2); + IndexReader* index2 = _CLNEW MultiReader(&readers2, true); + + ValueArray readers2b(2); + readers2b[0] = IndexReader::open(&dir1); + readers2b[1] = IndexReader::open(&dir2); + IndexReader* index2b = _CLNEW MultiReader(&readers2b, true); + + defaultModifyIndexTestDir1 = &dir1; + defaultModifyIndexTestDir2 = &dir2; + performDefaultIRTests(tc, index1, index2, index2b, defaultModifyIndexTestMulti); + defaultModifyIndexTestDir1 = NULL; + defaultModifyIndexTestDir2 = NULL; + + _CLDELETE(index1); + //_CLDELETE(index2);this one gets deleted... + //_CLDELETE(index2B); +} + +CuSuite *testindexreader(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene IndexReader Test")); + SUITE_ADD_TEST(suite, testIndexReaderReopen); + SUITE_ADD_TEST(suite, testMultiReaderReopen); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/index/TestIndexWriter.cpp clucene-core-2.3.3.4/src/test/index/TestIndexWriter.cpp --- clucene-core-0.9.21b/src/test/index/TestIndexWriter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/TestIndexWriter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,668 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include +#include + +//checks if a merged index finds phrases correctly +void testIWmergePhraseSegments(CuTest *tc){ + char fsdir[CL_MAX_PATH]; + _snprintf(fsdir, CL_MAX_PATH, "%s/%s",cl_tempDir, "test.indexwriter"); + SimpleAnalyzer a; + Directory* dir = FSDirectory::getDirectory(fsdir); + + IndexWriter ndx2(dir,&a,true); + ndx2.setUseCompoundFile(false); + Document doc0; + doc0.add( + *_CLNEW Field( + _T("field0"), + _T("value0 value1"), + Field::STORE_YES | Field::INDEX_TOKENIZED + ) + ); + ndx2.addDocument(&doc0); + ndx2.optimize(); + ndx2.close(); + + IndexWriter ndx(fsdir,&a,false); + ndx.setUseCompoundFile(false); + Document doc1; + doc1.add( + *_CLNEW Field( + _T("field0"), + _T("value1 value0"), + Field::STORE_YES | Field::INDEX_TOKENIZED + ) + ); + ndx.addDocument(&doc1); + ndx.optimize(); + ndx.close(); + + //test the index querying + IndexSearcher searcher(fsdir); + Query* query0 = QueryParser::parse( + _T("\"value0 value1\""), + _T("field0"), + &a + ); + Hits* hits0 = searcher.search(query0); + CLUCENE_ASSERT(hits0->length() > 0); + Query* query1 = QueryParser::parse( + _T("\"value1 value0\""), + _T("field0"), + &a + ); + Hits* hits1 = searcher.search(query1); + CLUCENE_ASSERT(hits1->length() > 0); + _CLDELETE(query0); + _CLDELETE(query1); + _CLDELETE(hits0); + _CLDELETE(hits1); + _CLDECDELETE(dir); +} + +//checks that adding more than the min_merge value goes ok... +//checks for a mem leak that used to occur +void testIWmergeSegments1(CuTest *tc){ + RAMDirectory ram; + SimpleAnalyzer a; + + IndexWriter ndx2(&ram,&a,true); + ndx2.close(); //test immediate closing bug reported + + IndexWriter ndx(&ram,&a,true); //set create to false + + ndx.setUseCompoundFile(false); + ndx.setMergeFactor(2); + TCHAR fld[1000]; + for ( int i=0;i<1000;i++ ){ + English::IntToEnglish(i,fld,1000); + + Document doc; + + doc.add ( *_CLNEW Field(_T("field0"),fld,Field::STORE_YES | Field::INDEX_TOKENIZED) ); + doc.add ( *_CLNEW Field(_T("field1"),fld,Field::STORE_YES | Field::INDEX_TOKENIZED) ); + doc.add ( *_CLNEW Field(_T("field2"),fld,Field::STORE_YES | Field::INDEX_TOKENIZED) ); + doc.add ( *_CLNEW Field(_T("field3"),fld,Field::STORE_YES | Field::INDEX_TOKENIZED) ); + ndx.addDocument(&doc); + } + //ndx.optimize(); //optimize so we can read terminfosreader with segmentreader + ndx.close(); + + //test the ram loading + RAMDirectory ram2(&ram); + IndexReader* reader2 = IndexReader::open(&ram2); + Term* term = _CLNEW Term(_T("field0"),fld); + TermEnum* en = reader2->terms(term); + CLUCENE_ASSERT(en->next()); + _CLDELETE(en); + _CLDECDELETE(term); + _CLDELETE(reader2); +} + +//checks if appending to an index works correctly +void testIWmergeSegments2(CuTest *tc){ + char fsdir[CL_MAX_PATH]; + _snprintf(fsdir, CL_MAX_PATH, "%s/%s",cl_tempDir, "test.indexwriter"); + SimpleAnalyzer a; + Directory* dir = FSDirectory::getDirectory(fsdir); + + IndexWriter ndx2(dir,&a,true); + ndx2.setUseCompoundFile(false); + Document doc0; + doc0.add( + *_CLNEW Field( + _T("field0"), + _T("value0"), + Field::STORE_YES | Field::INDEX_TOKENIZED + ) + ); + ndx2.addDocument(&doc0); + ndx2.optimize(); + ndx2.close(); + + IndexWriter ndx(fsdir,&a,false); + ndx.setUseCompoundFile(false); + Document doc1; + doc1.add( + *_CLNEW Field( + _T("field0"), + _T("value1"), + Field::STORE_YES | Field::INDEX_TOKENIZED + ) + ); + ndx.addDocument(&doc1); + ndx.optimize(); + ndx.close(); + + //test the ram querying + IndexSearcher searcher(fsdir); + Term* term0 = _CLNEW Term(_T("field0"),_T("value1")); + Query* query0 = QueryParser::parse(_T("value0"),_T("field0"),&a); + Hits* hits0 = searcher.search(query0); + CLUCENE_ASSERT(hits0->length() > 0); + Term* term1 = _CLNEW Term(_T("field0"),_T("value0")); + Query* query1 = QueryParser::parse(_T("value1"),_T("field0"),&a); + Hits* hits1 = searcher.search(query1); + CLUCENE_ASSERT(hits1->length() > 0); + _CLDELETE(query0); + _CLDELETE(query1); + _CLDELETE(hits0); + _CLDELETE(hits1); + _CLDECDELETE(term0); + _CLDECDELETE(term1); + dir->close(); + _CLDECDELETE(dir); +} + +void testAddIndexes(CuTest *tc){ + char reuters_origdirectory[1024]; + strcpy(reuters_origdirectory, clucene_data_location); + strcat(reuters_origdirectory, "/reuters-21578-index"); + + { + RAMDirectory dir; + WhitespaceAnalyzer a; + IndexWriter w(&dir, &a, true); + ValueArray dirs(2); + dirs[0] = FSDirectory::getDirectory(reuters_origdirectory); + dirs[1] = FSDirectory::getDirectory(reuters_origdirectory); + w.addIndexesNoOptimize(dirs); + w.flush(); + CLUCENE_ASSERT(w.docCount()==62); //31 docs in reuters... + + // TODO: Currently there is a double ref-counting mechanism in place for Directory objects, + // so we need to dec them both + dirs[1]->close();_CLDECDELETE(dirs[1]); + dirs[0]->close();_CLDECDELETE(dirs[0]); + } + { + RAMDirectory dir; + WhitespaceAnalyzer a; + IndexWriter w(&dir, &a, true); + ValueArray dirs(2); + dirs[0] = FSDirectory::getDirectory(reuters_origdirectory); + dirs[1] = FSDirectory::getDirectory(reuters_origdirectory); + w.addIndexes(dirs); + w.flush(); + CLUCENE_ASSERT(w.docCount()==62); //31 docs in reuters... + + // TODO: Currently there is a double ref-counting mechanism in place for Directory objects, + // so we need to dec them both + dirs[1]->close();_CLDECDELETE(dirs[1]); + dirs[0]->close();_CLDECDELETE(dirs[0]); + } +} + +void testHashingBug(CuTest* /*tc*/){ + //Manuel Freiholz's indexing bug + + CL_NS(document)::Document doc; + CL_NS(document)::Field* field; + CL_NS(analysis::standard)::StandardAnalyzer analyzer; + CL_NS(store)::RAMDirectory dir; + CL_NS(index)::IndexWriter writer(&dir, &analyzer, true, true ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VERSION"), _T("1"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_PID"), _T("5"), CL_NS(document)::Field::STORE_YES | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_DATE"), _T("20090722"), CL_NS(document)::Field::STORE_YES | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_SEARCHDATA"), _T("all kind of data"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_TOKENIZED ); + doc.add( (*field) ); + + writer.addDocument( &doc ); // ADDING FIRST DOCUMENT. -> this works! + + doc.clear(); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VERSION"), _T("1"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_PID"), _T("5"), CL_NS(document)::Field::STORE_YES | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_LINEID"), _T("20"), CL_NS(document)::Field::STORE_YES | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VT_ORDER"), _T("456033000"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VN_H"), _T("456033000"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VN_HF"), _T("456033000"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VN_D"), _T("456033000"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VN_OD"), _T("456033000"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VN_P1"), _T("456033000"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); + + field = _CLNEW CL_NS(document)::Field( _T("CNS_VN_H1"), _T("456033000"), CL_NS(document)::Field::STORE_NO | CL_NS(document)::Field::INDEX_UNTOKENIZED ); + doc.add( (*field) ); // the problematic field! + + writer.addDocument( &doc ); // ADDING SECOND DOCUMENT - will never return from this function + writer.optimize(); // stucks in line 222-223 + writer.close(); + _CL_LDECREF(&dir); +} + +class IWlargeScaleCorrectness_tester { +public: + void invoke(Directory& storage, CuTest *tc); +}; + +void IWlargeScaleCorrectness_tester::invoke( + Directory& storage, + CuTest *tc +){ + SimpleAnalyzer a; + + IndexWriter* ndx = _CLNEW IndexWriter(&storage,&a,true); + + ndx->setUseCompoundFile(false); + + const long documents = 200; + const long step = 23; + const long inverted_step = 113; + const long repetitions = 5; + + CLUCENE_ASSERT(0 == (step * inverted_step + 1) % documents); + + long value0; + long value1 = 0; + + long block_size = 1; + long reopen = 1; + + for (value0 = 0; value0 < documents * repetitions; value0++) { + if (reopen == value0) { + ndx->optimize(); + ndx->close(); + _CLDELETE(ndx); + ndx = _CLNEW IndexWriter(&storage,&a,false); + ndx->setUseCompoundFile(false); + reopen += block_size; + block_size++; + } + + TCHAR* value0_string = NumberTools::longToString(value0 % documents); + TCHAR* value1_string = NumberTools::longToString(value1); + + Document doc; + + doc.add ( + *_CLNEW Field( + _T("field0"), + value0_string, + Field::STORE_YES | Field::INDEX_UNTOKENIZED + ) + ); + doc.add ( + *_CLNEW Field( + _T("field1"), + value1_string, + Field::STORE_YES | Field::INDEX_UNTOKENIZED + ) + ); + ndx->addDocument(&doc); + + _CLDELETE_ARRAY(value0_string); + _CLDELETE_ARRAY(value1_string); + value1 = (value1 + step) % documents; + } + + ndx->optimize(); + ndx->close(); + + IndexSearcher searcher(&storage); + Query* query0 = _CLNEW MatchAllDocsQuery; + Sort by_value1( + _CLNEW SortField( + _T("field1"), + SortField::STRING, + true + ) + ); + Hits* hits0 = searcher.search(query0, &by_value1); + long last = 0; + for (long i = 0; i < hits0->length(); i++) { + Document& retrieved = hits0->doc(i); + TCHAR const* value = retrieved.get(_T("field0")); + long current = NumberTools::stringToLong(value); + long delta = (current + documents - last) % documents; + if (0 == (i % repetitions)) { + CLUCENE_ASSERT(inverted_step == delta); + } else { + CLUCENE_ASSERT(0 == delta); + } + last = current; + } + _CLDELETE(query0); + _CLDELETE(hits0); + _CLDELETE(ndx); +} + +void testIWlargeScaleCorrectness(CuTest *tc){ + char fsdir[CL_MAX_PATH]; + _snprintf(fsdir,CL_MAX_PATH,"%s/%s",cl_tempDir, "test.search"); + RAMDirectory ram; + FSDirectory* disk = FSDirectory::getDirectory(fsdir); + IWlargeScaleCorrectness_tester().invoke(ram, tc); + IWlargeScaleCorrectness_tester().invoke(*disk, tc); + disk->close(); + _CLDECDELETE(disk); +} + +void testExceptionFromTokenStream(CuTest *tc) { + + class TokenFilterWithException : public TokenFilter + { + private: + int count; + + public: + TokenFilterWithException(TokenStream * in) : + TokenFilter(in, true), count(0) {}; + + Token* next(Token * pToken) { + if (count++ == 5) { + _CLTHROWA(CL_ERR_IO, "TokenFilterWithException testing IO exception"); + } + return input->next(pToken); + }; + }; + + class AnalyzerWithException : public Analyzer + { + TokenStream* lastStream; + public: + AnalyzerWithException() { lastStream = NULL; } + virtual ~AnalyzerWithException() { _CLDELETE( lastStream ); } + TokenStream* tokenStream(const TCHAR * fieldName, Reader * reader) { + return _CLNEW TokenFilterWithException(_CLNEW WhitespaceTokenizer(reader)); + }; + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) + { + _CLDELETE( lastStream ); + lastStream = _CLNEW TokenFilterWithException(_CLNEW WhitespaceTokenizer(reader)); + return lastStream; + } + }; + + RAMDirectory * dir = _CLNEW RAMDirectory(); + AnalyzerWithException a; + IndexWriter * writer = _CLNEW IndexWriter(dir, &a, true); + + Document* doc = _CLNEW Document(); + doc->add(* _CLNEW Field(_T("content"), _T("aa bb cc dd ee ff gg hh ii"), + Field::STORE_NO | Field::INDEX_TOKENIZED)); + try { + writer->addDocument(doc); + CuFail(tc, _T("did not hit expected exception")); + } catch (CLuceneError&) { + } + _CLLDELETE(doc); + + // Make sure we can add another normal document + doc = _CLNEW Document(); + doc->add(* _CLNEW Field(_T("content"), _T("aa bb cc dd"), Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLLDELETE(doc); + + // Make sure we can add another normal document + doc = _CLNEW Document(); + doc->add(* _CLNEW Field(_T("content"), _T("aa bb cc dd"), Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLLDELETE(doc); + + writer->close(); + _CLLDELETE(writer); + + IndexReader* reader = IndexReader::open(dir); + Term* t = _CLNEW Term(_T("content"), _T("aa")); + assertEquals(reader->docFreq(t), 3); + + // Make sure the doc that hit the exception was marked + // as deleted: + TermDocs* tdocs = reader->termDocs(t); + int count = 0; + while(tdocs->next()) { + count++; + } + _CLLDELETE(tdocs); + assertEquals(2, count); + + t->set(_T("content"), _T("gg")); + assertEquals(reader->docFreq(t), 0); + _CLDECDELETE(t); + + reader->close(); + _CLLDELETE(reader); + + dir->close(); + _CLDECDELETE(dir); +} + +/** +* Make sure we skip wicked long terms. +*/ +void testWickedLongTerm(CuTest *tc) { + RAMDirectory* dir = _CLNEW RAMDirectory(); + StandardAnalyzer a; + IndexWriter* writer = _CLNEW IndexWriter(dir, &a, true); + + TCHAR bigTerm[16383]; + for (int i=0; i<16383; i++) + bigTerm[i]=_T('x'); + bigTerm[16382] = 0; + + Document* doc = _CLNEW Document(); + + // Max length term is 16383, so this contents produces + // a too-long term: + TCHAR* contents = _CL_NEWARRAY(TCHAR, 17000); + _tcscpy(contents, _T("abc xyz x")); + _tcscat(contents, bigTerm); + _tcscat(contents, _T(" another term")); + doc->add(* _CLNEW Field(_T("content"), contents, Field::STORE_NO | Field::INDEX_TOKENIZED)); + _CLDELETE_CARRAY(contents); + writer->addDocument(doc); + _CLLDELETE(doc); + + // Make sure we can add another normal document + doc = _CLNEW Document(); + doc->add(* _CLNEW Field(_T("content"), _T("abc bbb ccc"), Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLLDELETE(doc); + writer->close(); + _CLDELETE(writer); + + IndexReader* reader = IndexReader::open(dir); + + // Make sure all terms < max size were indexed + Term* t = _CLNEW Term(_T("content"), _T("abc"), true); + assertEquals(2, reader->docFreq(t)); + t->set(_T("content"), _T("bbb"), true); + assertEquals(1, reader->docFreq(t)); + t->set(_T("content"), _T("term"), true); + assertEquals(1, reader->docFreq(t)); + t->set(_T("content"), _T("another"), true); + assertEquals(1, reader->docFreq(t)); + + // Make sure position is still incremented when + // massive term is skipped: + t->set(_T("content"), _T("another"), true); + TermPositions* tps = reader->termPositions(t); + assertTrue(tps->next()); + assertEquals(1, tps->freq()); + assertEquals(3, tps->nextPosition()); + _CLLDELETE(tps); + + // Make sure the doc that has the massive term is in + // the index: + assertEqualsMsg(_T("document with wicked long term should is not in the index!"), 1, reader->numDocs()); + + reader->close(); + _CLLDELETE(reader); + + // Make sure we can add a document with exactly the + // maximum length term, and search on that term: + doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("content"), bigTerm, Field::STORE_NO | Field::INDEX_TOKENIZED)); + StandardAnalyzer sa; + sa.setMaxTokenLength(100000); + writer = _CLNEW IndexWriter(dir, &sa, true); + writer->addDocument(doc); + _CLLDELETE(doc); + writer->close(); + reader = IndexReader::open(dir); + t->set(_T("content"), bigTerm); + assertEquals(1, reader->docFreq(t)); + reader->close(); + + _CLDECDELETE(t); + + _CLLDELETE(writer); + _CLLDELETE(reader); + + dir->close(); + _CLDECDELETE(dir); +} + + +void testDeleteDocument(CuTest* tc) { + const int size = 205; + RAMDirectory* dir = _CLNEW RAMDirectory(); + StandardAnalyzer a; + IndexWriter* writer = _CLNEW IndexWriter(dir, &a, true); + + // build an index that is big enough that a deletion files is written + // in the DGaps format + for (int i = 0; i < size; i++) { + Document* doc = _CLNEW Document(); + TCHAR* contents = _CL_NEWARRAY(TCHAR, (size / 10) + 1); + _i64tot(i, contents, 10); + doc->add(* _CLNEW Field(_T("content"), contents, Field::STORE_NO | Field::INDEX_TOKENIZED)); + _CLDELETE_CARRAY(contents); + writer->addDocument(doc); + _CLDELETE_ARRAY( contents ); + _CLLDELETE(doc); + } + + // assure that the index has only one segment + writer->optimize(); + // close and flush index + writer->close(); + _CLLDELETE( writer ); + + // reopen the index and delete the document next to last + writer = _CLNEW IndexWriter(dir, &a, false); + TCHAR* contents = _CL_NEWARRAY(TCHAR, (size / 10) + 1); + _i64tot(size - 2, contents, 10); + Term* t = _CLNEW Term(_T("content"), contents); + _CLDELETE_LARRAY( contents ); + writer->deleteDocuments(t); + writer->close(); + + // now the index has a deletion file in the DGaps format + + _CLLDELETE(writer); + _CLDECDELETE(t); + + // open this index with a searcher to read the deletions file again + IndexReader* reader = IndexReader::open(dir); + IndexSearcher* searcher = _CLNEW IndexSearcher(reader); + searcher->close(); + reader->close(); + _CLLDELETE(searcher); + _CLLDELETE(reader); + + dir->close(); + _CLLDELETE( dir ); +} + +void testMergeIndex(CuTest* tc) { + + // A crash depends on the following: + // - The first document needs two differently named fields that set TERMVECTOR_YES. + // - The IndexWriter needs to reopen an existing index. + // - The reopened IndexWriter needs to call optimize() to force a merge + // on term vectors. This merging causes the crash. + // Submitted by McCann + + RAMDirectory* dir = _CLNEW RAMDirectory(); + + // open a new lucene index + SimpleAnalyzer a; + IndexWriter* writer = _CLNEW IndexWriter( dir, false, &a, true ); + writer->setUseCompoundFile( false ); + + // add two fields to document + Document* doc = _CLNEW Document(); + doc->add ( *_CLNEW Field(_T("field0"), _T("value0"), Field::STORE_NO | Field::TERMVECTOR_YES | Field::INDEX_TOKENIZED) ); + doc->add ( *_CLNEW Field(_T("field1"), _T("value1"), Field::STORE_NO | Field::TERMVECTOR_YES | Field::INDEX_TOKENIZED) ); + writer->addDocument(doc); + _CLLDELETE(doc); + + // close and flush index + writer->close(); + _CLLDELETE( writer ); + + // open the previous lucene index + writer = _CLNEW IndexWriter( dir, false, &a, false ); + writer->setUseCompoundFile( false ); + + // add a field to document + // note: the settings on this field don't seem to affect the crash + doc = _CLNEW Document(); + doc->add ( *_CLNEW Field(_T("field"), _T("value"), Field::STORE_NO | Field::TERMVECTOR_YES | Field::INDEX_TOKENIZED) ); + writer->addDocument(doc); + _CLLDELETE(doc); + + // optimize index to force a merge + writer->optimize(); + // close and flush index + writer->close(); + _CLLDELETE( writer ); + + // Close directory + dir->close(); + _CLLDELETE( dir ); +} + +CuSuite *testindexwriter(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene IndexWriter Test")); + SUITE_ADD_TEST(suite, testHashingBug); + SUITE_ADD_TEST(suite, testAddIndexes); + SUITE_ADD_TEST(suite, testIWmergeSegments1); + SUITE_ADD_TEST(suite, testIWmergeSegments2); + SUITE_ADD_TEST(suite, testIWmergePhraseSegments); + SUITE_ADD_TEST(suite, testIWlargeScaleCorrectness); + + // TODO: This test fails due to differences between CLucene's StandardTokenizer and JLucene's; this test + // should work when the tokenizer will be brought up-to-date, + //SUITE_ADD_TEST(suite, testWickedLongTerm); + + SUITE_ADD_TEST(suite, testExceptionFromTokenStream); + SUITE_ADD_TEST(suite, testDeleteDocument); + SUITE_ADD_TEST(suite, testMergeIndex); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/index/TestReuters.cpp clucene-core-2.3.3.4/src/test/index/TestReuters.cpp --- clucene-core-0.9.21b/src/test/index/TestReuters.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/TestReuters.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,234 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/util/dirent.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/LuceneThreads.h" +#include "CLucene/search/Explanation.h" +CL_NS_USE(search) + +#ifdef _CL_HAVE_SYS_STAT_H +#include +#endif +#include +#include +using namespace std; + +CL_NS_USE(util) + + //an extremelly simple analyser. this eliminates differences + //caused by differences in character classifications functions + class ReutersTokenizer:public CharTokenizer { + public: + // Construct a new LetterTokenizer. + ReutersTokenizer(CL_NS(util)::Reader* in): + CharTokenizer(in) {} + + ~ReutersTokenizer(){} + protected: + bool isTokenChar(const TCHAR c) const{ + if ( c == ' ' || c == '\t' || + c == '-' || c == '.' || + c == '\n' || c == '\r' || + c == ',' || c == '<' || + c == '>' || c<=9){ + return false; + }else + return true; + } + TCHAR normalize(const TCHAR c) const{ + return c; + } + }; + + class ReutersAnalyzer: public Analyzer { + public: + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader){ + return _CLNEW ReutersTokenizer(reader); + } + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) + { + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW ReutersTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; + } + virtual ~ReutersAnalyzer(){} + }; + + bool stringLowercaseCompare( const string &left, const string &right ){ + for( string::const_iterator lit = left.begin(), rit = right.begin(); lit != left.end() && rit != right.end(); ++lit, ++rit ) + if( tolower( *lit ) < tolower( *rit ) ) + return true; + else if( tolower( *lit ) > tolower( *rit ) ) + return false; + if( left.size() < right.size() ) + return true; + return false; + } + + + + +char reuters_fsdirectory[CL_MAX_PATH]; +bool reuters_ready = false; + +char reuters_srcdirectory[1024]; +char reuters_origdirectory[1024]; + +//indexes the reuters-21578 data. +void testReuters(CuTest *tc) { + strcpy(reuters_srcdirectory, clucene_data_location); + strcat(reuters_srcdirectory, "/reuters-21578"); + CuAssert(tc,_T("Data does not exist"),Misc::dir_Exists(reuters_srcdirectory)); + + strcpy(reuters_origdirectory, clucene_data_location); + strcat(reuters_origdirectory, "/reuters-21578-index"); + CuAssert(tc,_T("Index does not exist"),Misc::dir_Exists(reuters_origdirectory)); + + FSDirectory* fsdir = FSDirectory::getDirectory(reuters_fsdirectory); + ReutersAnalyzer a; + + IndexWriter writer(fsdir,&a,true); + writer.setUseCompoundFile(false); + //NOTE: when comparing against indexes created <~= 1.9, there was always 1 more field + //added then the actual limit... + writer.setMaxFieldLength(10001); + + vector files; + CuAssertTrue(tc, Misc::listFiles(reuters_srcdirectory, files,false)); + sort(files.begin(), files.end(), stringLowercaseCompare); + + char tmppath[CL_MAX_DIR]; + strncpy(tmppath,reuters_srcdirectory,CL_MAX_DIR); + strcat(tmppath,"/"); + char* tmppathP = tmppath + strlen(tmppath); + TCHAR tpath[CL_MAX_PATH]; + struct cl_stat_t buf; + + vector::iterator fl = files.begin(); + while ( fl != files.end() ){ + strcpy(tmppathP,fl->c_str()); + STRCPY_AtoT(tpath,fl->c_str(),CL_MAX_PATH); + fileStat(tmppath,&buf); + if ( buf.st_mode & S_IFREG){ + Document* doc = _CLNEW Document; + doc->add(*_CLNEW Field(_T("path"),tpath,Field::INDEX_UNTOKENIZED | Field::STORE_YES)); + doc->add(*_CLNEW Field(_T("contents"), _CLNEW FileReader(tmppath, "ASCII"),Field::INDEX_TOKENIZED)); + + writer.addDocument( doc ); + _CLDELETE(doc); + + } + fl++; + } + + writer.close(); + fsdir->close(); + _CLDECDELETE(fsdir); + + //note: for those comparing 0.9.16 to later, the optimize() has been removed so + //we can do certain tests with the multi-* classes (reader,etc) + //performance will naturally be worse + + reuters_ready = true; +} + +void testBySection(CuTest* tc){ + IndexReader* reader1 = IndexReader::open(reuters_origdirectory); + IndexReader* reader2 = IndexReader::open(reuters_fsdirectory); + + TestAssertIndexReaderEquals(tc,reader1,reader2); + reader1->close(); + reader2->close(); + _CLDELETE(reader1); + _CLDELETE(reader2); +} + +#define threadsCount 10 + +void threadSearch(IndexSearcher* searcher, const TCHAR* qry, StandardAnalyzer* threadAnalyzer){ + Query* q = NULL; + Hits* h = NULL; + try{ + q = QueryParser::parse(qry , _T("contents"), threadAnalyzer); + if ( q != NULL ){ + h = searcher->search( q ); + + if ( h->length() > 0 ){ + //check for explanation memory leaks... + CL_NS(search)::Explanation expl1; + searcher->explain(q, h->id(0), &expl1); + TCHAR* tmp = expl1.toString(); + _CLDELETE_CARRAY(tmp); + if ( h->length() > 1 ){ //do a second one just in case + CL_NS(search)::Explanation expl2; + searcher->explain(q, h->id(1), &expl2); + tmp = expl2.toString(); + _CLDELETE_CARRAY(tmp); + } + } + } + }_CLFINALLY( + _CLDELETE(h); + _CLDELETE(q); + ); +} +_LUCENE_THREAD_FUNC(threadedSearcherTest, arg){ + IndexSearcher* searcher = (IndexSearcher*)(((void**)arg)[0]); + StandardAnalyzer* threadAnalyzer = (StandardAnalyzer*)(((void**)arg)[1]); + + for ( int i=0;i<100;i++ ){ + threadSearch(searcher, _T("test"), threadAnalyzer ); + threadSearch(searcher, _T("reuters"), threadAnalyzer ); + threadSearch(searcher, _T("data"), threadAnalyzer ); + } + _LUCENE_THREAD_FUNC_RETURN(0); +} + +void testThreaded(CuTest* tc){ + CLUCENE_ASSERT(reuters_ready); + IndexSearcher searcher(reuters_origdirectory); + + //read using multiple threads... + _LUCENE_THREADID_TYPE threads[threadsCount]; + + int i; + StandardAnalyzer threadAnalyzer; + void* args[2]; + args[0] = &searcher; + args[1] = &threadAnalyzer; + + for ( i=0;i +#include + +CL_NS_USE(analysis); +CL_NS_USE(index); +CL_NS_USE(util); + + //Must be lexicographically sorted, will do in setup, versus trying to maintain here + const TCHAR* testFields_values[] = {_T("f1"), _T("f2"), _T("f3"), _T("f4")}; + const bool testFieldsStorePos_values[] = {true, false, true, false}; + const bool testFieldsStoreOff_values[] = {true, false, false, true}; + const TCHAR* testTerms_values[] = {_T("this"), _T("is"), _T("a"), _T("test")}; + + CL_NS(store)::MockRAMDirectory dir; + std::string seg; + FieldInfos *fieldInfos = NULL; + const int TERM_FREQ = 3; + + struct TestToken { + const TCHAR* text; + int pos; + int startOffset; + int endOffset; + }; + + std::vector testFields(testFields_values, testFields_values + sizeof(testFields_values) / sizeof(TCHAR*)); + std::vector testTerms(testTerms_values, testTerms_values + sizeof(testTerms_values) / sizeof(TCHAR*)); + std::vector testFieldsStorePos(testFieldsStorePos_values, testFieldsStorePos_values + sizeof(testFieldsStorePos_values) / sizeof(bool)); + std::vector testFieldsStoreOff(testFieldsStoreOff_values, testFieldsStoreOff_values + sizeof(testFieldsStoreOff_values) / sizeof(bool)); + std::vector tokens; + std::vector< std::vector > positions(4); + std::vector< std::vector > offsets(4); + + class MyTokenStream : public TokenStream { + private: + std::vector::size_type tokenUpto; + public: + MyTokenStream() : + tokenUpto(0) + { + } + virtual Token* next(Token *token) { + if (tokenUpto >= tokens.size()) + return NULL; + else { + if (token == NULL) { + token = _CLNEW Token(); + } + const TestToken* testToken = tokens[tokenUpto++]; + token->setText(testToken->text); + if (tokenUpto > 1) + token->setPositionIncrement(testToken->pos - tokens[tokenUpto-2]->pos); + else + token->setPositionIncrement(testToken->pos+1); + token->setStartOffset(testToken->startOffset); + token->setEndOffset(testToken->endOffset); + return token; + } + } + virtual void close() { + } + }; + + class MyAnalyzer : public CL_NS(analysis)::Analyzer { + public: + virtual TokenStream* tokenStream(const TCHAR* fieldName, Reader* reader) { + return _CLNEW MyTokenStream(); + } + }; + + class MyIndexWriter : public IndexWriter { + public: + MyIndexWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, const bool create) : + IndexWriter(d, a, create) { + } + virtual SegmentInfo* newestSegment() { + return IndexWriter::newestSegment(); + } + }; + + struct MyTCharCompare : + public std::binary_function + { + bool operator () (const TCHAR* v1, const TCHAR* v2) const { + return _tcscmp(v1, v2) < 0; + } + }; + + struct TestTokenCompare : + public std::binary_function + { + bool operator () (const TestToken* t1, const TestToken* t2) const { + return t1->pos < t2->pos; + } + }; + + void setUp() { + + tokens.clear(); + std::sort(testTerms.begin(), testTerms.end(), MyTCharCompare()); + int tokenUpto = 0; + for (std::vector::size_type i = 0; i < testTerms.size(); i++) { + positions[i] = std::vector(TERM_FREQ); + offsets[i] = std::vector(TERM_FREQ); + // first position must be 0 + for (int j = 0; j < TERM_FREQ; j++) { + // positions are always sorted in increasing order + positions[i][j] = (int) (j * 10 + (rand() % 10)); + // offsets are always sorted in increasing order + offsets[i][j] = _CLNEW TermVectorOffsetInfo(j * 10, j * 10 + _tcslen(testTerms[i])); + TestToken* token = _CLNEW TestToken(); + tokens.push_back(token); + tokenUpto++; + token->text = testTerms[i]; + token->pos = positions[i][j]; + token->startOffset = offsets[i][j]->getStartOffset(); + token->endOffset = offsets[i][j]->getEndOffset(); + } + } + + std::sort(tokens.begin(), tokens.end(), TestTokenCompare()); + + MyAnalyzer analyzer; + MyIndexWriter writer(&dir, &analyzer, true); + writer.setUseCompoundFile(false); + Document* doc = _CLNEW Document(); + for(std::vector::size_type i=0;iadd(* _CLNEW Field(testFields[i], _T(""), Field::STORE_NO | Field::INDEX_TOKENIZED | tv)); + } + + //Create 5 documents for testing, they all have the same + //terms + for(int j=0;j<5;j++) + writer.addDocument(doc); + _CLLDELETE(doc); + writer.flush(); + seg = writer.newestSegment()->name; + writer.close(); + + std::string tmp = seg; + tmp.append("."); + tmp.append(IndexFileNames::FIELD_INFOS_EXTENSION); + fieldInfos = _CLNEW FieldInfos(&dir, tmp.c_str()); + } + + + void test(CuTest* tc) { + //Check to see the files were created properly in setup + std::string tmp = seg; + tmp.append("."); + tmp.append(IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + CuAssertTrue(tc, dir.fileExists(tmp.c_str()), _T("Missing file!")); + + tmp = seg; + tmp.append("."); + tmp.append(IndexFileNames::VECTORS_INDEX_EXTENSION); + CuAssertTrue(tc, dir.fileExists(tmp.c_str()), _T("Missing file!")); + } + + void testTermVectorsReader(CuTest* tc) { + TermVectorsReader reader(&dir, seg.c_str(), fieldInfos); + for (int j = 0; j < 5; j++) { + TermFreqVector* vector = reader.get(j, testFields[0]); + CuAssertTrue(tc, vector != NULL, _T("Expected term frequency vector!")); + const ArrayBase* terms = vector->getTerms(); + CuAssertTrue(tc, terms != NULL, _T("Array of terms expected!")); + CuAssertTrue(tc, terms->length == testTerms.size()); + for (int i = 0; i < terms->length; i++) { + const TCHAR* term = (*terms)[i]; + CuAssertStrEquals(tc, _T(""), testTerms[i], (TCHAR*)term, false); + } + } + } + + void testPositionReader(CuTest* tc) { + TermVectorsReader reader(&dir, seg.c_str(), fieldInfos); + TermPositionVector* vector; + const ArrayBase* terms; + vector = dynamic_cast(reader.get(0, testFields[0])); + CuAssertTrue(tc, vector != NULL, _T("Term position vector expected!")); + terms = vector->getTerms(); + CuAssertTrue(tc, terms != NULL, _T("Terms expected!")); + CuAssertTrue(tc, terms->length == testTerms.size(), _T("Unexpected number of terms!")); + for (int i = 0; i < terms->length; i++) { + const TCHAR* term = (*terms)[i]; + CuAssertStrEquals(tc, _T(""), testTerms[i], (TCHAR*)term, false); + const ArrayBase* termPositions = vector->getTermPositions(i); + CuAssertTrue(tc, termPositions != NULL, _T("Term positions expected!")); + CuAssertTrue(tc, termPositions->length == positions[i].size(), _T("Unexpected number of term positions!")); + for (int j = 0; j < termPositions->length; j++) { + int position = (*termPositions)[j]; + CuAssertTrue(tc, position == positions[i][j], _T("Postion not equal!")); + } + const ArrayBase* termOffset = vector->getOffsets(i); + CuAssertTrue(tc, termOffset != NULL, _T("Term vector offset info expected!")); + CuAssertTrue(tc, termOffset->length == offsets[i].size(), _T("Unexpected length of term positions!")); + for (int j = 0; j < termOffset->length; j++) { + TermVectorOffsetInfo* termVectorOffsetInfo = (*termOffset)[j]; + CuAssertTrue(tc, termVectorOffsetInfo->equals(offsets[i][j]), _T("Term vector offset info not equal!")); + } + } + + TermFreqVector* freqVector = reader.get(0, testFields[1]); //no pos, no offset + CuAssertTrue(tc, freqVector != NULL, _T("Term frequency vector expected!")); + CuAssertTrue(tc, dynamic_cast(freqVector) == NULL, _T("Unepexcted term position vector!")); + terms = freqVector->getTerms(); + CuAssertTrue(tc, terms != NULL, _T("Terms expected!")); + CuAssertTrue(tc, terms->length == testTerms.size(), _T("Unexpected length of term positions!")); + for (int i = 0; i < terms->length; i++) { + const TCHAR* term = (*terms)[i]; + CuAssertStrEquals(tc, _T(""), testTerms[i], (TCHAR*)term, false); + } + } + + class DocNumAwareMapper : public TermVectorMapper { + private: + + int documentNumber; + + public: + + DocNumAwareMapper() : documentNumber(-1) { + } + + virtual ~DocNumAwareMapper() { + } + + virtual void setExpectations(const TCHAR* _field, const int32_t numTerms, const bool storeOffsets, const bool storePositions) { + if (documentNumber == -1) { + _CLTHROWA(CL_ERR_Runtime, "Documentnumber should be set at this point!"); + } + } + + virtual void map(const TCHAR* term, const int32_t termLen, const int32_t frequency, CL_NS(util)::ArrayBase* offsets, CL_NS(util)::ArrayBase* positions) { + if (documentNumber == -1) { + _CLTHROWA(CL_ERR_Runtime, "Documentnumber should be set at this point!"); + } + } + + int getDocumentNumber() const { + return documentNumber; + } + + virtual void setDocumentNumber(const int32_t documentNumber) { + this->documentNumber = documentNumber; + } + }; + + void testOffsetReader(CuTest* tc) { + TermVectorsReader reader(&dir, seg.c_str(), fieldInfos); + TermPositionVector* vector = dynamic_cast(reader.get(0, testFields[0])); + CuAssertTrue(tc, vector != NULL, _T("Term position vector expected!")); + const CL_NS(util)::ArrayBase* terms = vector->getTerms(); + CuAssertTrue(tc, terms != NULL, _T("Terms expected")); + CuAssertTrue(tc, terms->length == testTerms.size(), _T("Unexpected number of terms!")); + for (int i = 0; i < terms->length; i++) { + const TCHAR* term = (*terms)[i]; + CuAssertStrEquals(tc, _T(""), testTerms[i], (TCHAR*)term, false); + const ArrayBase* termPositions = vector->getTermPositions(i); + CuAssertTrue(tc, termPositions != NULL, _T("Term positions expected!")); + CuAssertTrue(tc, termPositions->length == positions[i].size()); + for (int j = 0; j < termPositions->length; j++) { + int position = (*termPositions)[j]; + CuAssertTrue(tc, position == positions[i][j], _T("Unexpected position!")); + } + const ArrayBase* termOffset = vector->getOffsets(i); + CuAssertTrue(tc, termOffset != NULL, _T("Term vector offset info expected!")); + CuAssertTrue(tc, termOffset->length == offsets[i].size(), _T("Unexpected number of term positions!")); + for (int j = 0; j < termOffset->length; j++) { + TermVectorOffsetInfo* termVectorOffsetInfo = (*termOffset)[j]; + CuAssertTrue(tc, termVectorOffsetInfo->equals(offsets[i][j]), _T("Term vector offset info not equal!")); + } + } + } + + //void testMapper(CuTest* tc) { + // TermVectorsReader reader(&dir, seg, fieldInfos); + // SortedTermVectorMapper mapper = new SortedTermVectorMapper(new TermVectorEntryFreqSortedComparator()); + // reader.get(0, mapper); + // SortedSet set = mapper.getTermVectorEntrySet(); + // CuAssertTrue(tc, set != NULL, "set is null and it shouldn't be"); + // //three fields, 4 terms, all terms are the same + // CuAssertTrue(set.size() == 4, _T("set Size: " + set.size() + " is not: 4"); + // //Check offsets and positions + // for (Iterator iterator = set.iterator(); iterator.hasNext();) { + // TermVectorEntry* tve = (TermVectorEntry) iterator.next(); + // CuAssertTrue(tc, tve != NULL, _T("tve is null and it shouldn't be")); + // CuAssertTrue(tc, tve->getOffsets() != NULL, _T("tve.getOffsets() is null and it shouldn't be")); + // CuAssertTrue(tc, tve->getPositions() != NULL, _T("tve.getPositions() is null and it shouldn't be")); + // } + + // mapper = new SortedTermVectorMapper(new TermVectorEntryFreqSortedComparator()); + // reader.get(1, mapper); + // set = mapper.getTermVectorEntrySet(); + // assertTrue("set is null and it shouldn't be", set != null); + // //three fields, 4 terms, all terms are the same + // assertTrue("set Size: " + set.size() + " is not: " + 4, set.size() == 4); + // //Should have offsets and positions b/c we are munging all the fields together + // for (Iterator iterator = set.iterator(); iterator.hasNext();) { + // TermVectorEntry tve = (TermVectorEntry) iterator.next(); + // assertTrue("tve is null and it shouldn't be", tve != null); + // assertTrue("tve.getOffsets() is null and it shouldn't be", tve.getOffsets() != null); + // assertTrue("tve.getPositions() is null and it shouldn't be", tve.getPositions() != null); + + // } + + + // FieldSortedTermVectorMapper fsMapper = new FieldSortedTermVectorMapper(new TermVectorEntryFreqSortedComparator()); + // reader.get(0, fsMapper); + // Map map = fsMapper.getFieldToTerms(); + // assertTrue("map Size: " + map.size() + " is not: " + testFields.length, map.size() == testFields.length); + // for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) { + // Map.Entry entry = (Map.Entry) iterator.next(); + // SortedSet sortedSet = (SortedSet) entry.getValue(); + // assertTrue("sortedSet Size: " + sortedSet.size() + " is not: " + 4, sortedSet.size() == 4); + // for (Iterator inner = sortedSet.iterator(); inner.hasNext();) { + // TermVectorEntry tve = (TermVectorEntry) inner.next(); + // assertTrue("tve is null and it shouldn't be", tve != null); + // //Check offsets and positions. + // assertTrue("tve is null and it shouldn't be", tve != null); + // String field = tve.getField(); + // if (field.equals(testFields[0])) { + // //should have offsets + + // assertTrue("tve.getOffsets() is null and it shouldn't be", tve.getOffsets() != null); + // assertTrue("tve.getPositions() is null and it shouldn't be", tve.getPositions() != null); + // } + // else if (field.equals(testFields[1])) { + // //should not have offsets + + // assertTrue("tve.getOffsets() is not null and it shouldn't be", tve.getOffsets() == null); + // assertTrue("tve.getPositions() is not null and it shouldn't be", tve.getPositions() == null); + // } + // } + // } + // //Try mapper that ignores offs and positions + // fsMapper = new FieldSortedTermVectorMapper(true, true, new TermVectorEntryFreqSortedComparator()); + // reader.get(0, fsMapper); + // map = fsMapper.getFieldToTerms(); + // assertTrue("map Size: " + map.size() + " is not: " + testFields.length, map.size() == testFields.length); + // for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) { + // Map.Entry entry = (Map.Entry) iterator.next(); + // SortedSet sortedSet = (SortedSet) entry.getValue(); + // assertTrue("sortedSet Size: " + sortedSet.size() + " is not: " + 4, sortedSet.size() == 4); + // for (Iterator inner = sortedSet.iterator(); inner.hasNext();) { + // TermVectorEntry tve = (TermVectorEntry) inner.next(); + // assertTrue("tve is null and it shouldn't be", tve != null); + // //Check offsets and positions. + // assertTrue("tve is null and it shouldn't be", tve != null); + // String field = tve.getField(); + // if (field.equals(testFields[0])) { + // //should have offsets + + // assertTrue("tve.getOffsets() is null and it shouldn't be", tve.getOffsets() == null); + // assertTrue("tve.getPositions() is null and it shouldn't be", tve.getPositions() == null); + // } + // else if (field.equals(testFields[1])) { + // //should not have offsets + + // assertTrue("tve.getOffsets() is not null and it shouldn't be", tve.getOffsets() == null); + // assertTrue("tve.getPositions() is not null and it shouldn't be", tve.getPositions() == null); + // } + // } + // } + + // // test setDocumentNumber() + // IndexReader ir = IndexReader.open(&dir); + // DocNumAwareMapper docNumAwareMapper = new DocNumAwareMapper(); + // assertEquals(-1, docNumAwareMapper.getDocumentNumber()); + + // ir.getTermFreqVector(0, docNumAwareMapper); + // assertEquals(0, docNumAwareMapper.getDocumentNumber()); + // docNumAwareMapper.setDocumentNumber(-1); + + // ir.getTermFreqVector(1, docNumAwareMapper); + // assertEquals(1, docNumAwareMapper.getDocumentNumber()); + // docNumAwareMapper.setDocumentNumber(-1); + + // ir.getTermFreqVector(0, "f1", docNumAwareMapper); + // assertEquals(0, docNumAwareMapper.getDocumentNumber()); + // docNumAwareMapper.setDocumentNumber(-1); + + // ir.getTermFreqVector(1, "f2", docNumAwareMapper); + // assertEquals(1, docNumAwareMapper.getDocumentNumber()); + // docNumAwareMapper.setDocumentNumber(-1); + + // ir.getTermFreqVector(0, "f1", docNumAwareMapper); + // assertEquals(0, docNumAwareMapper.getDocumentNumber()); + + // ir.close(); + + //} + + /** + * Make sure exceptions and bad params are handled appropriately + */ + void testBadParams(CuTest* tc) { + try { + TermVectorsReader reader(&dir, seg.c_str(), fieldInfos); + //Bad document number, good field number + reader.get(50, testFields[0]); + CuFail(tc, _T("Expected an IO exception!")); + } catch (CLuceneError& e) { + if (e.number() != CL_ERR_IO) { + CuFail(tc, e.twhat()); + } + } + try { + TermVectorsReader reader(&dir, seg.c_str(), fieldInfos); + //Bad document number, no field + reader.get(50); + CuFail(tc, _T("")); + } catch (CLuceneError& e) { + if (e.number() != CL_ERR_IO) { + CuFail(tc, e.twhat()); + } + } + try { + TermVectorsReader reader(&dir, seg.c_str(), fieldInfos); + //good document number, bad field number + TermFreqVector* vector = reader.get(0, _T("f50")); + CuAssertTrue(tc, vector == NULL, _T("")); + } catch (CLuceneError& e) { + CuFail(tc, e.twhat()); + } + } + + +CuSuite *testTermVectorsReader(void) { + CuSuite *suite = CuSuiteNew(_T("CLucene TermVectorsReader Test")); + + setUp(); + + SUITE_ADD_TEST(suite, test); + SUITE_ADD_TEST(suite, testTermVectorsReader); + SUITE_ADD_TEST(suite, testPositionReader); + SUITE_ADD_TEST(suite, testOffsetReader); + //SUITE_ADD_TEST(suite, testMapper); + SUITE_ADD_TEST(suite, testBadParams); + + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/index/TestThreading.cpp clucene-core-2.3.3.4/src/test/index/TestThreading.cpp --- clucene-core-0.9.21b/src/test/index/TestThreading.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/TestThreading.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,161 @@ +/*------------------------------------------------------------------------------ + * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team + * + * Distributable under the terms of either the Apache License (Version 2.0) or + * the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include +#include "CLucene/index/_SegmentHeader.h" +#include "CLucene/index/_MultiSegmentReader.h" +#include "CLucene/index/MultiReader.h" +#include + + +_LUCENE_THREADID_TYPE* atomicSearchThreads = NULL; +bool atomicSearchFailed = false; +#define ATOMIC_SEARCH_RUN_TIME_SEC 3 +_LUCENE_THREAD_FUNC(atomicIndexTest, _writer){ + IndexWriter* writer= (IndexWriter*)_writer; + uint64_t stopTime = Misc::currentTimeMillis() + 1000*ATOMIC_SEARCH_RUN_TIME_SEC; + int count = 0; + try { + while(Misc::currentTimeMillis() < stopTime && !atomicSearchFailed) { + // Update all 100 docs... + TCHAR buf[30]; + StringBuffer sb; + for(int i=0; i<100; i++) { + Document d; + _i64tot(rand(), buf, 10); + + sb.clear(); + English::IntToEnglish(i+10*count, &sb); + d.add(*_CLNEW Field(_T("contents"), sb.getBuffer() , Field::STORE_NO | Field::INDEX_TOKENIZED)); + + _i64tot(i,buf,10); + d.add(*_CLNEW Field(_T("id"), buf, Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + Term* t = _CLNEW Term(_T("id"), buf); + writer->updateDocument(t, &d); + _CLDECDELETE(t); + } + + count++; + } + } catch (CLuceneError& e) { + fprintf(stderr, "err 1: #%d: %s\n", e.number(), e.what()); + atomicSearchFailed = true; + } + + _LUCENE_THREAD_FUNC_RETURN(0); +} + +_LUCENE_THREAD_FUNC(atomicSearchTest, _directory){ + Directory* directory = (Directory*)_directory; + + uint64_t stopTime = Misc::currentTimeMillis() + 1000*ATOMIC_SEARCH_RUN_TIME_SEC; + int count = 0; + try { + while(Misc::currentTimeMillis() < stopTime && !atomicSearchFailed) { + IndexReader* r = IndexReader::open(directory); + + try { + if ( 100 != r->numDocs() ){ + fprintf(stderr, "err 2: 100 != %d \n", r->numDocs()); + atomicSearchFailed = true; + } + } catch (CLuceneError& e) { + fprintf(stderr, "err 3: %d:%s\n", e.number(), e.what()); + atomicSearchFailed = true; + break; + } + r->close(); + _CLDELETE(r); + + count++; + } + } catch (CLuceneError& e) { + fprintf(stderr, "err 4: #%d: %s\n", e.number(), e.what()); + atomicSearchFailed = true; + } + + _LUCENE_THREAD_FUNC_RETURN(0); +} + +/* + Run one indexer and 2 searchers against single index as + stress test. + */ +void runThreadingTests(CuTest* tc, Directory& directory){ + + SimpleAnalyzer ANALYZER; + IndexWriter writer(&directory, &ANALYZER, true); + + // Establish a base index of 100 docs: + StringBuffer sb; + TCHAR buf[10]; + for(int i=0;i<100;i++) { + Document d; + _i64tot(i,buf,10); + d.add(*_CLNEW Field(_T("id"), buf, Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + + sb.clear(); + English::IntToEnglish(i, &sb); + d.add(*_CLNEW Field(_T("contents"), sb.getBuffer(), Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer.addDocument(&d); + } + writer.flush(); + + //read using multiple threads... + atomicSearchThreads = _CL_NEWARRAY(_LUCENE_THREADID_TYPE, 4); + atomicSearchThreads[0] = _LUCENE_THREAD_CREATE(&atomicIndexTest, &writer); + atomicSearchThreads[1] = _LUCENE_THREAD_CREATE(&atomicIndexTest, &writer); + atomicSearchThreads[2] = _LUCENE_THREAD_CREATE(&atomicSearchTest, &directory); + atomicSearchThreads[3] = _LUCENE_THREAD_CREATE(&atomicSearchTest, &directory); + + for ( int i=0;i<4;i++ ){ + _LUCENE_THREAD_JOIN(atomicSearchThreads[i]); + } + _CLDELETE_ARRAY(atomicSearchThreads); + + writer.close(); + + CuAssert(tc, _T("hit unexpected exception in one of the threads\n"), !atomicSearchFailed); +} + +/* + Run above stress test against RAMDirectory and then + FSDirectory. + */ +void testRAMThreading(CuTest *tc){ + // First in a RAM directory: + RAMDirectory directory; //todo: use MockRAMDirectory? + runThreadingTests(tc,directory); + directory.close(); +} + +/* + Run above stress test against FSDirectory. + */ +void testFSThreading(CuTest *tc){ + //setup some variables + char tmpfsdirectory[1024]; + strcpy(tmpfsdirectory,cl_tempDir); + strcat(tmpfsdirectory,"/threading-index"); + + // Second in an FSDirectory: + Directory* directory = FSDirectory::getDirectory(tmpfsdirectory); + runThreadingTests(tc,*directory); + directory->close(); + _CLDECDELETE(directory); +} + +CuSuite *testatomicupdates(void) +{ + srand ( (unsigned int)Misc::currentTimeMillis() ); + CuSuite *suite = CuSuiteNew(_T("CLucene Atomic Updates Test")); + SUITE_ADD_TEST(suite, testRAMThreading); + SUITE_ADD_TEST(suite, testFSThreading); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/index/TestUtf8.cpp clucene-core-2.3.3.4/src/test/index/TestUtf8.cpp --- clucene-core-0.9.21b/src/test/index/TestUtf8.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/index/TestUtf8.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,189 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/util/dirent.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_USE(util) + +#ifdef _UCS2 + void _Index(CuTest *tc, IndexWriter* ndx, const char* file){ + char path[CL_MAX_PATH]; + TCHAR tlang[20]; + + strcpy(path,clucene_data_location); + strcat(path,"/utf8text"); + CuAssert(tc,_T("Utf8 directory does not exist"),Misc::dir_Exists(path)); + strcat(path,"/"); + strcat(path,file); + strcat(path,"_utf8.txt"); + CuAssert(tc,_T("Language file does not exist"),Misc::dir_Exists(path)); + + STRCPY_AtoT(tlang,file,CL_MAX_PATH); + + Document doc; + doc.add(* _CLNEW Field(_T("language"),tlang,Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + + doc.add(* _CLNEW Field(_T("contents"),_CLNEW FileReader(path, "UTF-8",1024), Field::INDEX_TOKENIZED)); + + ndx->addDocument(&doc); + } + void _Search(CuTest *tc, IndexSearcher* srch, Analyzer* analyzer, const char* file, const char* query){ + TCHAR tlang[20]; + STRCPY_AtoT(tlang,file,CL_MAX_PATH); + + TCHAR tquery[80]; + lucene_utf8towcs(tquery,query,80); + + Query* q = QueryParser::parse(tquery,_T("contents"), analyzer); + Hits* h = srch->search(q); + CLUCENE_ASSERT( h->length() == 1 ); + + Document& doc = h->doc(0); + CLUCENE_ASSERT( _tcscmp(doc.get(_T("language")), tlang)==0 ); + + _CLDELETE(q); + _CLDELETE(h); + } + + void testUTF8(CuTest *tc) { + RAMDirectory ram; + StandardAnalyzer a; + IndexWriter ndx(&ram,&a,true); + _Index(tc, &ndx,"arabic"); + _Index(tc, &ndx,"chinese"); + _Index(tc, &ndx,"czech"); + _Index(tc, &ndx,"english"); + _Index(tc, &ndx,"french"); + _Index(tc, &ndx,"german"); + _Index(tc, &ndx,"greek"); + _Index(tc, &ndx,"hebrew"); + _Index(tc, &ndx,"japanese"); + _Index(tc, &ndx,"korean"); + _Index(tc, &ndx,"polish"); + _Index(tc, &ndx,"russian"); + ndx.close(); + + IndexSearcher srch(&ram); + _Search(tc,&srch,&a,"arabic", "\xef\xbb\x9e\xef\xbb\xb4\xef\xbb\xa4\xef\xbb\xb3\xef\xba\xad"); //????? - arabic + _Search(tc,&srch,&a,"chinese", "\xe5\x95\xa4\xe9\x85\x92"); //?? - chinese + _Search(tc,&srch,&a,"czech", "Bud\xc4\x9bjovick\xc3\xbd" ); //Budejovick� - czech + + _Search(tc,&srch,&a,"english", "google"); //English - google + _Search(tc,&srch,&a,"french", "r\xc3\xa9put\xc3\xa9"); //r�put� - french + _Search(tc,&srch,&a,"german", "k\xc3\xb6nnen"); //k�nnen - german + _Search(tc,&srch,&a,"greek", "\xcf\x83\xcf\x84\xce\xb5\xce\xaf\xce\xbb\xcf\x84\xce\xb5"); //ste??te - greek + _Search(tc,&srch,&a,"hebrew", "\xd7\x91\xd7\x90\xd7\xa8\xd7\xa6\xd7\x95\xd7\xaa" ); //?????? - hebrew + _Search(tc,&srch,&a,"japanese", "\xe8\xa6\x8b\xe5\xad\xa6" ); //?? - japanese + _Search(tc,&srch,&a,"korean", "\xea\xb8\x88" ); //? - korean + _Search(tc,&srch,&a,"polish", "sp\xc3\xb3\xc5\x82ka"); ;//sp�lka - polish + _Search(tc,&srch,&a,"russian", "\xd0\x92\xd0\xb5\xd0\xbb\xd0\xb8\xd0\xba\xd0\xb8\xd0\xb5\x20"); //??????? - russian + + srch.close(); + } + + void readBuffered(CuTest* tc, Reader& utf8, Reader& unicode, int readLen){ + const TCHAR* buf1; + const TCHAR* buf2; + int32_t s; + size_t p, p1, p2; + p = p1 = p2 = 0; + while(true){ + s = utf8.read(buf1, 1, readLen); + if ( s == -1 ) + break; + p1+=s; + + s = unicode.read(buf2, 1, readLen); + if (s == -1) + break; + p2+=s; + + CLUCENE_ASSERT(p1==p2); //make sure both readers read the same amount. todo: i guess this is not strictly required... + for ( int32_t i=0;iset( _T("phrase2"), savedStart, savedEnd); + return token; + }else{ + while( input->next(token) ){ + if ( _tcscmp(token->termBuffer(), _T("phrase")) == 0 ) { + inPhrase = true; + savedStart = token->startOffset(); + savedEnd = token->endOffset(); + token->set( _T("phrase1"), savedStart, savedEnd); + return token; + }else if ( _tcscmp(token->termBuffer(), _T("stop") ) !=0 ){ + return token; + } + } + } + return NULL; + } +}; + +class MQPTestAnalyzer: public Analyzer { +public: + MQPTestAnalyzer() { + } + + /** Filters LowerCaseTokenizer with StopFilter. */ + TokenStream* tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW MQPTestFilter(_CLNEW LowerCaseTokenizer(reader)); + } +}; + +void assertQueryEquals(CuTest *tc,const TCHAR* result, Query* q) { + if ( q == NULL ) + return; + + TCHAR* s = q->toString(); + int ret = _tcscmp(s,result); + _CLDELETE(q); + if ( ret != 0 ) { + TCHAR buf[HUGE_STRING_LEN]; + _sntprintf(buf, HUGE_STRING_LEN, _T("FAILED Query yielded /%s/, expecting /%s/\n"), s, result); + _CLDELETE_LCARRAY(s); + CuFail(tc, buf); + return; + } + _CLDELETE_LCARRAY(s); +} + +// verify parsing of query using a stopping analyzer +void assertStopQueryEquals(CuTest *tc, const TCHAR* qtxt, const TCHAR* expectedRes) { + const TCHAR* fields[] = {_T("b"), _T("t"), NULL }; + const uint8_t occur[] = {BooleanClause::SHOULD, BooleanClause::SHOULD, NULL}; + MQPTestAnalyzer *a = _CLNEW MQPTestAnalyzer(); + MultiFieldQueryParser mfqp(fields, a); + + Query *q = mfqp.parse(qtxt); + assertQueryEquals(tc, expectedRes, q); + + q = MultiFieldQueryParser::parse(qtxt, reinterpret_cast(&fields), + reinterpret_cast(&occur), a); + assertQueryEquals(tc, expectedRes, q); + _CLDELETE(a); +} + +/** test stop words arsing for both the non static form, and for the +* corresponding static form (qtxt, fields[]). */ +void tesStopwordsParsing(CuTest *tc) { + assertStopQueryEquals(tc, _T("one"), _T("b:one t:one")); + assertStopQueryEquals(tc, _T("one stop"), _T("b:one t:one")); + assertStopQueryEquals(tc, _T("one (stop)"), _T("b:one t:one")); + assertStopQueryEquals(tc, _T("one ((stop))"), _T("b:one t:one")); + assertStopQueryEquals(tc, _T("stop"), _T("")); + assertStopQueryEquals(tc, _T("(stop)"), _T("")); + assertStopQueryEquals(tc, _T("((stop))"), _T("")); +} + +void testMFQPSimple(CuTest *tc) { + const TCHAR* fields[] = {_T("b"), _T("t"), NULL}; + Analyzer* a = _CLNEW StandardAnalyzer(); + MultiFieldQueryParser mfqp(fields, a); + + Query *q = mfqp.parse(_T("one")); + assertQueryEquals(tc, _T("b:one t:one"), q); + + q = mfqp.parse(_T("one two")); + assertQueryEquals(tc, _T("(b:one t:one) (b:two t:two)"),q); + + q = mfqp.parse(_T("+one +two")); + assertQueryEquals(tc, _T("+(b:one t:one) +(b:two t:two)"), q); + + q = mfqp.parse(_T("+one -two -three")); + assertQueryEquals(tc, _T("+(b:one t:one) -(b:two t:two) -(b:three t:three)"), q); + + q = mfqp.parse(_T("one^2 two")); + assertQueryEquals(tc, _T("((b:one t:one)^2.0) (b:two t:two)"), q); + + q = mfqp.parse(_T("one~ two")); + assertQueryEquals(tc, _T("(b:one~0.5 t:one~0.5) (b:two t:two)"), q); + + q = mfqp.parse(_T("one~0.8 two^2")); + assertQueryEquals(tc, _T("(b:one~0.8 t:one~0.8) ((b:two t:two)^2.0)"), q); + + q = mfqp.parse(_T("one* two*")); + assertQueryEquals(tc, _T("(b:one* t:one*) (b:two* t:two*)"), q); + + q = mfqp.parse(_T("[a TO c] two")); + assertQueryEquals(tc, _T("(b:[a TO c] t:[a TO c]) (b:two t:two)"), q); + + q = mfqp.parse(_T("w?ldcard")); + assertQueryEquals(tc, _T("b:w?ldcard t:w?ldcard"), q); + + q = mfqp.parse(_T("\"foo bar\"")); + assertQueryEquals(tc, _T("b:\"foo bar\" t:\"foo bar\""), q); + + q = mfqp.parse(_T("\"aa bb cc\" \"dd ee\"")); + assertQueryEquals(tc, _T("(b:\"aa bb cc\" t:\"aa bb cc\") (b:\"dd ee\" t:\"dd ee\")"), q); + + q = mfqp.parse(_T("\"foo bar\"~4")); + assertQueryEquals(tc, _T("b:\"foo bar\"~4 t:\"foo bar\"~4"), q); + + // make sure that terms which have a field are not touched: + q = mfqp.parse(_T("one f:two")); + assertQueryEquals(tc, _T("(b:one t:one) f:two"), q); + + // AND mode: + mfqp.setDefaultOperator(QueryParser::AND_OPERATOR); + q = mfqp.parse(_T("one two")); + assertQueryEquals(tc, _T("+(b:one t:one) +(b:two t:two)"), q); + q = mfqp.parse(_T("\"aa bb cc\" \"dd ee\"")); + assertQueryEquals(tc, _T("+(b:\"aa bb cc\" t:\"aa bb cc\") +(b:\"dd ee\" t:\"dd ee\")"), q); + + _CLDELETE(a); +} + +CuSuite *testMultiFieldQueryParser(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Multi-Field QP Test")); + + SUITE_ADD_TEST(suite, tesStopwordsParsing); + SUITE_ADD_TEST(suite, testMFQPSimple); + + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/queryParser/TestQueryParser.cpp clucene-core-2.3.3.4/src/test/queryParser/TestQueryParser.cpp --- clucene-core-0.9.21b/src/test/queryParser/TestQueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/queryParser/TestQueryParser.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,885 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + + +/// Java QueryParser tests +/// Helper functions and classes + +class QPTestFilter: public TokenFilter { +public: + + bool inPhrase; + int32_t savedStart, savedEnd; + + /** + * Filter which discards the token 'stop' and which expands the + * token 'phrase' into 'phrase1 phrase2' + */ + QPTestFilter(TokenStream* in): + TokenFilter(in,true), + inPhrase(false), + savedStart(0), + savedEnd(0) + { + } + + CL_NS(analysis)::Token* next(CL_NS(analysis)::Token* token) { + if (inPhrase) { + inPhrase = false; + token->set( _T("phrase2"), savedStart, savedEnd); + return token; + }else{ + while( input->next(token) != NULL ){ + if ( _tcscmp(token->termBuffer(), _T("phrase")) == 0 ) { + inPhrase = true; + savedStart = token->startOffset(); + savedEnd = token->endOffset(); + token->set( _T("phrase1"), savedStart, savedEnd); + return token; + }else if ( _tcscmp(token->termBuffer(), _T("stop") ) !=0 ){ + return token; + } + } + } + return NULL; + } +}; + +class QPTestAnalyzer: public Analyzer { +public: + QPTestAnalyzer() { + } + + /** Filters LowerCaseTokenizer with StopFilter. */ + TokenStream* tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW QPTestFilter(_CLNEW LowerCaseTokenizer(reader)); + } +}; + +class QPTestParser : public QueryParser { +public: + QPTestParser(TCHAR* f, Analyzer* a) : QueryParser(f, a){ + } + virtual ~QPTestParser(){ + } + +protected: + Query* getFuzzyQuery(TCHAR* /*field*/, TCHAR* /*termStr*/, float_t /*minSimilarity*/) { + _CLTHROWA(CL_ERR_Parse,"Fuzzy queries not allowed"); + } + + Query* getWildcardQuery(TCHAR* /*field*/, TCHAR* /*termStr*/) { + _CLTHROWA(CL_ERR_Parse,"Wildcard queries not allowed"); + } +}; + +QueryParser* getParser(Analyzer* a) { + if (a == NULL) + return NULL; + QueryParser* qp = _CLNEW QueryParser(_T("field"), a); + qp->setDefaultOperator(QueryParser::OR_OPERATOR); + return qp; +} + +Query* getQuery(CuTest *tc,const TCHAR* query, Analyzer* a, int ignoreCLError=0) { + bool del = (a==NULL); + QueryParser* qp = NULL; + try{ + if (a == NULL) + a = _CLNEW SimpleAnalyzer(); + + qp = getParser(a); + Query* ret = qp->parse(query); + + _CLLDELETE(qp); + if ( del ) + _CLLDELETE(a); + return ret; + }catch(CLuceneError& e){ + _CLLDELETE(qp); + if ( del ) _CLLDELETE(a); + if (ignoreCLError != e.number()) + CuFail(tc,e); + else + throw e; + return NULL; + }catch(...){ + _CLLDELETE(qp); + if ( del ) _CLLDELETE(a); + CuFail(tc,_T("/%s/ threw an error.\n"),query); + return NULL; + } +} + +void assertQueryEquals(CuTest* tc, QueryParser* qp, const TCHAR* field, const TCHAR* query, const TCHAR* result) { + Query* q = qp->parse(query); + TCHAR* s = q->toString(field); + _CLLDELETE(q); + if (_tcscmp(s,result)!=0){ + TCHAR str[CL_MAX_PATH]; + _tcscpy(str,s); + _CLDELETE_LCARRAY(s); + _CLLDELETE(qp); + CuFail(tc, _T("Query /%s/ yielded /%s/, expecting /%s/\n"), query, str, result); + return; + } + _CLDELETE_LCARRAY(s); +} + +void assertQueryEquals(CuTest *tc,const TCHAR* query, Analyzer* a, const TCHAR* result) { + + Query* q = getQuery(tc,query, a); + if ( q == NULL ){ + CuFail(tc, _T("getQuery returned NULL unexpectedly for query /%s/\n"), query); + return; + } + + TCHAR* s = q->toString(_T("field")); + int ret = _tcscmp(s,result); + _CLDELETE(q); + if ( ret != 0 ) { + TCHAR str[CL_MAX_PATH]; + _tcscpy(str,s); + _CLDELETE_LCARRAY(s); + CuFail(tc, _T("FAILED Query /%s/ yielded /%s/, expecting /%s/\n"), query, str, result); + } + _CLDELETE_CARRAY(s); +} + +void assertWildcardQueryEquals(CuTest *tc, const TCHAR* query, bool lowercase, const TCHAR* result, bool allowLeadingWildcard=false){ + SimpleAnalyzer a; + QueryParser* qp = getParser(&a); + qp->setLowercaseExpandedTerms(lowercase); + qp->setAllowLeadingWildcard(allowLeadingWildcard); + Query* q = qp->parse(query); + _CLLDELETE(qp); + + TCHAR* s = q->toString(_T("field")); + _CLLDELETE(q); + if (_tcscmp(s,result) != 0) { + TCHAR str[CL_MAX_PATH]; + _tcscpy(str,s); + _CLDELETE_CARRAY(s); + CuFail(tc,_T("WildcardQuery /%s/ yielded /%s/, expecting /%s/"),query, str, result); + } + _CLDELETE_CARRAY(s); +} + +void assertCorrectQuery(CuTest *tc,const TCHAR* query, Analyzer* a, const char* inst, const TCHAR* msg){ + Query* q = getQuery(tc,query,a); + bool success = q->instanceOf(inst); + _CLDELETE(q); + CuAssert(tc,msg,success); +} + +void assertCorrectQuery(CuTest *tc,Query* q, const char* inst, bool bDeleteQuery = false){ + bool ret = q->instanceOf(inst); + if (bDeleteQuery) _CLLDELETE(q); + CuAssertTrue(tc,ret); +} + +void assertParseException(CuTest *tc,const TCHAR* queryString) { + try { + getQuery(tc,queryString, NULL, CL_ERR_Parse); + } catch (CLuceneError&){ + return; + } + CuFail(tc,_T("ParseException expected, not thrown")); +} + +void assertEscapedQueryEquals(CuTest *tc,const TCHAR* query, Analyzer* a, const TCHAR* result){ + TCHAR* escapedQuery = QueryParser::escape(query); + if (_tcscmp(escapedQuery, result) != 0) { + TCHAR str[CL_MAX_PATH]; + _tcscpy(str,escapedQuery); + _CLDELETE_LCARRAY(escapedQuery); + CuFail(tc, _T("Query /%s/ yielded /%s/, expecting /%s/\n"), query, escapedQuery, result); + } + _CLDELETE_LCARRAY(escapedQuery); +} + +Query* getQueryDOA(const TCHAR* query, Analyzer* a=NULL) { + bool bOwnsAnalyzer=false; + if (a == NULL){ + a = _CLNEW SimpleAnalyzer(); + bOwnsAnalyzer=true; + } + QueryParser* qp = _CLNEW QueryParser(_T("field"), a); + qp->setDefaultOperator(QueryParser::AND_OPERATOR); + Query* q = qp->parse(query); + _CLLDELETE(qp); + if (bOwnsAnalyzer) _CLLDELETE(a); + return q; +} + +void assertQueryEqualsDOA(CuTest *tc,const TCHAR* query, Analyzer* a, const TCHAR* result){ + Query* q = getQueryDOA(query, a); + TCHAR* s = q->toString(_T("field")); + _CLLDELETE(q); + if (_tcscmp(s,result)!=0) { + TCHAR str[CL_MAX_PATH]; + _tcscpy(str,s); + _CLDELETE_LCARRAY(s); + CuFail(tc,_T("Query /%s/ yielded /%s/, expecting /%s/"),query, str, result); + } + _CLDELETE_LCARRAY(s); +} + +/// END Helper functions and classes + +void testSimple(CuTest *tc) { + StandardAnalyzer a; + KeywordAnalyzer b; + assertQueryEquals(tc,_T("term term term"), NULL, _T("term term term")); + +#ifdef _UCS2 + TCHAR tmp1[100]; + + lucene_utf8towcs(tmp1,"t\xc3\xbcrm term term",100); + assertQueryEquals(tc,tmp1, NULL, tmp1); + assertQueryEquals(tc,tmp1, &a, tmp1); + + lucene_utf8towcs(tmp1,"\xc3\xbcmlaut",100); + assertQueryEquals(tc,tmp1, NULL, tmp1); + assertQueryEquals(tc,tmp1, &a, tmp1); +#endif + + assertQueryEquals(tc, _T("\"\""), &b, _T("")); + assertQueryEquals(tc, _T("foo:\"\""), &b, _T("foo:")); + + assertQueryEquals(tc,_T("a AND b"), NULL, _T("+a +b")); + assertQueryEquals(tc,_T("(a AND b)"), NULL, _T("+a +b")); + assertQueryEquals(tc,_T("c OR (a AND b)"), NULL, _T("c (+a +b)")); + assertQueryEquals(tc,_T("a AND NOT b"), NULL, _T("+a -b")); + assertQueryEquals(tc,_T("a AND -b"), NULL, _T("+a -b")); + assertQueryEquals(tc,_T("a AND !b"), NULL, _T("+a -b")); + assertQueryEquals(tc,_T("a && b"), NULL, _T("+a +b")); + assertQueryEquals(tc,_T("a && ! b"), NULL, _T("+a -b")); + + assertQueryEquals(tc,_T("a OR b"), NULL, _T("a b")); + assertQueryEquals(tc,_T("a || b"), NULL, _T("a b")); + assertQueryEquals(tc,_T("a OR !b"), NULL, _T("a -b")); + assertQueryEquals(tc,_T("a OR ! b"), NULL, _T("a -b")); + assertQueryEquals(tc,_T("a OR -b"), NULL, _T("a -b")); + + assertQueryEquals(tc,_T("+term -term term"), NULL, _T("+term -term term")); + assertQueryEquals(tc,_T("foo:term AND field:anotherTerm"), NULL, + _T("+foo:term +anotherterm")); + assertQueryEquals(tc,_T("term AND \"phrase phrase\""), NULL, + _T("+term +\"phrase phrase\"") ); + assertQueryEquals(tc,_T("\"hello there\""), NULL, _T("\"hello there\"") ); + + assertCorrectQuery(tc, _T("a AND b"), NULL,"BooleanQuery",_T("a AND b") ); + assertCorrectQuery(tc, _T("hello"), NULL,"TermQuery", _T("hello")); + assertCorrectQuery(tc, _T("\"hello there\""), NULL,"PhraseQuery", _T("\"hello there\"")); + + assertQueryEquals(tc,_T("germ term^2.0"), NULL, _T("germ term^2.0")); + assertQueryEquals(tc,_T("(term)^2.0"), NULL, _T("term^2.0")); + assertQueryEquals(tc,_T("(germ term)^2.0"), NULL, _T("(germ term)^2.0")); + assertQueryEquals(tc,_T("term^2.0"), NULL, _T("term^2.0")); + assertQueryEquals(tc,_T("term^2"), NULL, _T("term^2.0")); + assertQueryEquals(tc,_T("term^2.3"), NULL, _T("term^2.3")); + assertQueryEquals(tc,_T("\"germ term\"^2.0"), NULL, _T("\"germ term\"^2.0")); + assertQueryEquals(tc,_T("\"germ term\"^2.02"), NULL, _T("\"germ term\"^2.0")); + assertQueryEquals(tc,_T("\"term germ\"^2"), NULL, _T("\"term germ\"^2.0") ); + + assertQueryEquals(tc,_T("(foo OR bar) AND (baz OR boo)"), NULL, + _T("+(foo bar) +(baz boo)")); + assertQueryEquals(tc,_T("((a OR b) AND NOT c) OR d"), NULL, + _T("(+(a b) -c) d")); + assertQueryEquals(tc,_T("+(apple \"steve jobs\") -(foo bar baz)"), NULL, + _T("+(apple \"steve jobs\") -(foo bar baz)") ); + assertQueryEquals(tc,_T("+title:(dog OR cat) -author:\"bob dole\""), NULL, + _T("+(title:dog title:cat) -author:\"bob dole\"") ); + + QueryParser* qp = _CLNEW QueryParser(_T("field"), &a); + // make sure OR is the default: + CLUCENE_ASSERT(QueryParser::OR_OPERATOR == qp->getDefaultOperator()); + qp->setDefaultOperator(QueryParser::AND_OPERATOR); + CLUCENE_ASSERT(QueryParser::AND_OPERATOR == qp->getDefaultOperator()); + + // try creating a query and make sure it uses AND + Query* bq = qp->parse(_T("term1 term2")); + CLUCENE_ASSERT( bq != NULL ); + TCHAR* s = bq->toString(_T("field")); + if ( _tcscmp(s,_T("+term1 +term2")) != 0 ) { + CuFail(tc, _T("FAILED Query /term1 term2/ yielded /%s/, expecting +term1 +term2\n"), s); + } + _CLDELETE_CARRAY(s); + _CLDELETE(bq); + + qp->setDefaultOperator(QueryParser::OR_OPERATOR); + CLUCENE_ASSERT(QueryParser::OR_OPERATOR == qp->getDefaultOperator()); + _CLDELETE(qp); +} + +void testPunct(CuTest *tc) { + WhitespaceAnalyzer a; + assertQueryEquals(tc,_T("a&b"), &a, _T("a&b")); + assertQueryEquals(tc,_T("a&&b"), &a, _T("a&&b")); + assertQueryEquals(tc,_T(".NET"), &a, _T(".NET")); +} + +void testSlop(CuTest *tc) { + assertQueryEquals(tc,_T("\"term germ\"~2"), NULL, _T("\"term germ\"~2") ); + assertQueryEquals(tc,_T("\"term germ\"~2 flork"), NULL, _T("\"term germ\"~2 flork") ); + assertQueryEquals(tc,_T("\"term\"~2"), NULL, _T("term")); + assertQueryEquals(tc,_T("\" \"~2 germ"), NULL, _T("germ")); + assertQueryEquals(tc,_T("\"term germ\"~2^2"), NULL, _T("\"term germ\"~2^2.0") ); + + /* + ### These do not work anymore with the new QP, and they do not exist in the official Java tests + assertQueryEquals(tc,_T("term~2"), NULL, _T("term")); + assertQueryEquals(tc,_T("term~0.5"), NULL, _T("term")); + assertQueryEquals(tc,_T("term~0.6"), NULL, _T("term")); + */ +} + +void testNumber(CuTest *tc) { + // The numbers go away because SimpleAnalzyer ignores them + assertQueryEquals(tc,_T("3"), NULL, _T("")); + assertQueryEquals(tc,_T("term 1.0 1 2"), NULL, _T("term")); + assertQueryEquals(tc,_T("term term1 term2"), NULL, _T("term term term")); + + StandardAnalyzer a; + assertQueryEquals(tc,_T("3"), &a, _T("3")); + assertQueryEquals(tc,_T("term 1.0 1 2"), &a, _T("term 1.0 1 2")); + assertQueryEquals(tc,_T("term term1 term2"), &a, _T("term term1 term2")); +} + +void testWildcard(CuTest *tc) +{ + assertQueryEquals(tc,_T("term*"), NULL, _T("term*")); + assertQueryEquals(tc,_T("term*^2"), NULL, _T("term*^2.0")); + assertQueryEquals(tc,_T("term~"), NULL, _T("term~0.5")); + assertQueryEquals(tc,_T("term~0.7"), NULL, _T("term~0.7")); + assertQueryEquals(tc,_T("term~^2"), NULL, _T("term~0.5^2.0")); + assertQueryEquals(tc,_T("term^2~"), NULL, _T("term~0.5^2.0")); + assertQueryEquals(tc,_T("term*germ"), NULL, _T("term*germ")); + assertQueryEquals(tc,_T("term*germ^3"), NULL, _T("term*germ^3.0")); + + assertCorrectQuery(tc, _T("term*"), NULL,"PrefixQuery", _T("term*")); + assertCorrectQuery(tc, _T("term*^2"), NULL,"PrefixQuery", _T("term*^2.0")); + assertCorrectQuery(tc, _T("term~"), NULL,"FuzzyQuery", _T("term~0.5")); + assertCorrectQuery(tc, _T("term~0.7"), NULL,"FuzzyQuery", _T("term~0.7")); + assertCorrectQuery(tc, _T("t*"), NULL,"PrefixQuery", _T("t*")); + + FuzzyQuery* fq = (FuzzyQuery*)getQuery(tc,_T("term~0.7"), NULL); + float_t simDiff = fq->getMinSimilarity() - 0.7; + if ( simDiff < 0 ) simDiff *= -1; + CuAssertTrue(tc, simDiff < 0.1); + CuAssertTrue(tc, FuzzyQuery::defaultPrefixLength == fq->getPrefixLength()); + _CLLDELETE(fq); + fq = (FuzzyQuery*)getQuery(tc, _T("term~"), NULL); + + simDiff = fq->getMinSimilarity() - 0.5; + if ( simDiff < 0 ) simDiff *= -1; + CuAssertTrue(tc, simDiff < 0.1); + CuAssertTrue(tc, FuzzyQuery::defaultPrefixLength == fq->getPrefixLength()); + _CLDELETE(fq); + + assertParseException(tc,_T("term~1.1")); // value > 1, throws exception + + assertCorrectQuery(tc, _T("term*germ"), NULL,"WildcardQuery", _T("term*germ")); + + /* Tests to see that wild card terms are (or are not) properly + * lower-cased with propery parser configuration + */ + // First prefix queries: + // by default, convert to lowercase: + assertWildcardQueryEquals(tc,_T("Term*"), true, _T("term*")); + // explicitly set lowercase: + assertWildcardQueryEquals(tc,_T("term*"), true, _T("term*")); + assertWildcardQueryEquals(tc,_T("Term*"), true, _T("term*")); + assertWildcardQueryEquals(tc,_T("TERM*"), true, _T("term*")); + // explicitly disable lowercase conversion: + assertWildcardQueryEquals(tc,_T("term*"), false, _T("term*")); + assertWildcardQueryEquals(tc,_T("Term*"), false, _T("Term*")); + assertWildcardQueryEquals(tc,_T("TERM*"), false, _T("TERM*")); + // Then 'full' wildcard queries: + // by default, convert to lowercase: + assertQueryEquals(tc,_T("Te?m"), NULL,_T("te?m")); + // explicitly set lowercase: + assertWildcardQueryEquals(tc,_T("te?m"), true, _T("te?m")); + assertWildcardQueryEquals(tc,_T("Te?m"), true, _T("te?m")); + assertWildcardQueryEquals(tc,_T("TE?M"), true, _T("te?m")); + assertWildcardQueryEquals(tc,_T("Te?m*gerM"), true, _T("te?m*germ")); + // explicitly disable lowercase conversion: + assertWildcardQueryEquals(tc,_T("te?m"), false, _T("te?m")); + assertWildcardQueryEquals(tc,_T("Te?m"), false, _T("Te?m")); + assertWildcardQueryEquals(tc,_T("TE?M"), false, _T("TE?M")); + assertWildcardQueryEquals(tc,_T("Te?m*gerM"), false, _T("Te?m*gerM")); + // Fuzzy queries: + assertQueryEquals(tc,_T("Term~"), NULL,_T("term~0.5")); + assertWildcardQueryEquals(tc,_T("Term~"), true, _T("term~0.5")); + assertWildcardQueryEquals(tc,_T("Term~"), false, _T("Term~0.5")); + // Range queries: + assertQueryEquals(tc,_T("[A TO C]"), NULL,_T("[a TO c]")); + assertWildcardQueryEquals(tc,_T("[A TO C]"), true, _T("[a TO c]")); + assertWildcardQueryEquals(tc,_T("[A TO C]"), false, _T("[A TO C]")); + // Test suffix queries: first disallow + assertParseException(tc,_T("*Term")); + assertParseException(tc,_T("?Term")); + + // Test suffix queries: then allow + assertWildcardQueryEquals(tc,_T("*Term"), true, _T("*term"), true); + assertWildcardQueryEquals(tc,_T("?Term"), true, _T("?term"), true); + + // ### not in the Java tests + // assertQueryEquals(tc,_T("term~0.5"), NULL, _T("term")); +} + +void testLeadingWildcardType(CuTest *tc) { + SimpleAnalyzer a; + QueryParser* qp = getParser(&a); + qp->setAllowLeadingWildcard(true); + assertCorrectQuery(tc, qp->parse(_T("t*erm*")), WildcardQuery::getClassName(), true); + assertCorrectQuery(tc, qp->parse(_T("?t*erm*")), WildcardQuery::getClassName(), true); // should not throw an exception + assertCorrectQuery(tc, qp->parse(_T("*t*erm*")), WildcardQuery::getClassName(), true); + _CLLDELETE(qp); +} + +void testQPA(CuTest *tc) { + QPTestAnalyzer qpAnalyzer; + assertQueryEquals(tc,_T("term term^3.0 term"), &qpAnalyzer, _T("term term^3.0 term") ); + assertQueryEquals(tc,_T("term stop^3.0 term"), &qpAnalyzer, _T("term term") ); + + assertQueryEquals(tc,_T("term term term"), &qpAnalyzer, _T("term term term") ); + assertQueryEquals(tc,_T("term +stop term"), &qpAnalyzer, _T("term term") ); + assertQueryEquals(tc,_T("term -stop term"), &qpAnalyzer, _T("term term") ); + + assertQueryEquals(tc,_T("drop AND (stop) AND roll"), &qpAnalyzer, _T("+drop +roll") ); + assertQueryEquals(tc,_T("term +(stop) term"), &qpAnalyzer, _T("term term") ); + assertQueryEquals(tc,_T("term -(stop) term"), &qpAnalyzer, _T("term term") ); + + assertQueryEquals(tc,_T("drop AND stop AND roll"), &qpAnalyzer, _T("+drop +roll") ); + assertQueryEquals(tc,_T("term phrase term"), &qpAnalyzer, + _T("term \"phrase1 phrase2\" term") ); + assertQueryEquals(tc,_T("term AND NOT phrase term"), &qpAnalyzer, + _T("+term -\"phrase1 phrase2\" term") ); + assertQueryEquals(tc,_T("stop^3"), &qpAnalyzer, _T("") ); + assertQueryEquals(tc,_T("stop"), &qpAnalyzer, _T("") ); + assertQueryEquals(tc,_T("(stop)^3"), &qpAnalyzer, _T("") ); + assertQueryEquals(tc,_T("((stop))^3"), &qpAnalyzer, _T("") ); + assertQueryEquals(tc,_T("(stop^3)"), &qpAnalyzer, _T("") ); + assertQueryEquals(tc,_T("((stop)^3)"), &qpAnalyzer, _T("") ); + assertQueryEquals(tc,_T("(stop)"), &qpAnalyzer, _T("") ); + assertQueryEquals(tc,_T("((stop))"), &qpAnalyzer, _T("") ); + assertCorrectQuery(tc, _T("term term term"), &qpAnalyzer,"BooleanQuery", _T("term term term")); + assertCorrectQuery(tc, _T("term +stop"), &qpAnalyzer,"TermQuery", _T("term +stop")); +} + +void testRange(CuTest *tc) { + StandardAnalyzer a; + + assertQueryEquals(tc, _T("[ a TO z]"), NULL, _T("[a TO z]")); + assertCorrectQuery(tc, _T("[ a TO z]"), NULL, "ConstantScoreRangeQuery", _T("[a TO z]")); + + QueryParser* qp = _CLNEW QueryParser(_T("field"), &a); + qp->setUseOldRangeQuery(true); + Query* q = qp->parse(_T("[ a TO z]")); + _CLLDELETE(qp); + CLUCENE_ASSERT(q->instanceOf("RangeQuery")); + _CLLDELETE(q); + + assertQueryEquals(tc, _T("[ a TO z ]"), NULL, _T("[a TO z]")); + assertQueryEquals(tc, _T("{ a TO z}"), NULL, _T("{a TO z}")); + assertQueryEquals(tc, _T("{ a TO z }"), NULL, _T("{a TO z}")); + assertQueryEquals(tc, _T("{ a TO z }^2.0"), NULL, _T("{a TO z}^2.0")); + assertQueryEquals(tc, _T("[ a TO z] OR bar"), NULL, _T("[a TO z] bar")); + assertQueryEquals(tc, _T("[ a TO z] AND bar"), NULL, _T("+[a TO z] +bar")); + assertQueryEquals(tc, _T("( bar blar { a TO z}) "), NULL, _T("bar blar {a TO z}")); + assertQueryEquals(tc, _T("gack ( bar blar { a TO z}) "), NULL, _T("gack (bar blar {a TO z})")); + + // Old CLucene tests - check this is working without TO as well + assertQueryEquals(tc,_T("[ a z]"), NULL, _T("[a TO z]")); + assertCorrectQuery(tc, _T("[ a z]"), NULL, "ConstantScoreRangeQuery", _T("[ a z]") ); + assertQueryEquals(tc,_T("[ a z ]"), NULL, _T("[a TO z]")); + assertQueryEquals(tc,_T("{ a z}"), NULL, _T("{a TO z}")); + assertQueryEquals(tc,_T("{ a z }"), NULL, _T("{a TO z}")); + assertQueryEquals(tc,_T("{ a z }^2.0"), NULL, _T("{a TO z}^2.0")); + assertQueryEquals(tc,_T("[ a z] OR bar"), NULL, _T("[a TO z] bar")); + assertQueryEquals(tc,_T("[ a z] AND bar"), NULL, _T("+[a TO z] +bar")); + assertQueryEquals(tc,_T("( bar blar { a z}) "), NULL, _T("bar blar {a TO z}")); + assertQueryEquals(tc,_T("gack ( bar blar { a z}) "), NULL, _T("gack (bar blar {a TO z})")); + + // ### Incompatiable with new QP, and does not appear in the Java tests; use the format below instead + // assertQueryEquals(tc,_T("[050-070]"), &a, _T("[050 TO -070]")); + assertQueryEquals(tc,_T("[050 -070]"), &a, _T("[050 TO -070]")); +} + +/// TODO: Complete missing date tests here + +/** for testing DateTools support */ +TCHAR* getDate(int64_t d, DateTools::Resolution resolution) { + if (resolution == DateTools::NO_RESOLUTION) { + return DateField::timeToString(d); + } else { + return DateTools::timeToString(d, resolution); + } +} + +/** for testing DateTools support */ +TCHAR* getDate(const TCHAR* s, DateTools::Resolution resolution) { + return getDate(DateTools::stringToTime(s), resolution); +} + +void assertDateRangeQueryEquals(CuTest* tc, QueryParser* qp, const TCHAR* field, + const TCHAR* startDate, const TCHAR* endDate, + int64_t endDateInclusive, DateTools::Resolution resolution) +{ + StringBuffer query; + query.append(field); + query.append(_T(":[")); + query.append(startDate); + query.append(_T(" TO ")); + query.append(endDate); + query.appendChar(_T(']')); + + StringBuffer result; + result.appendChar(_T('[')); + TCHAR* tmp = getDate(startDate, resolution); + result.append(tmp); + _CLDELETE_LCARRAY(tmp); + result.append(_T(" TO ")); + tmp = getDate(endDateInclusive, resolution); + result.append(tmp); + _CLDELETE_LCARRAY(tmp); + result.appendChar(_T(']')); + + assertQueryEquals(tc, qp, field, query.getBuffer(), result.getBuffer()); + + query.clear(); + result.clear(); + + query.append(field); + query.append(_T(":{")); + query.append(startDate); + query.append(_T(" TO ")); + query.append(endDate); + query.appendChar(_T('}')); + + result.appendChar(_T('{')); + tmp = getDate(startDate, resolution); + result.append(tmp); + _CLDELETE_LCARRAY(tmp); + result.append(_T(" TO ")); + tmp = getDate(endDate, resolution); + result.append(tmp); + _CLDELETE_LCARRAY(tmp); + result.appendChar(_T('}')); + + assertQueryEquals(tc, qp, field, query.getBuffer(), result.getBuffer()); +} + +TCHAR* getLocalizedDate(int32_t year, int32_t month, int32_t day, bool extendLastDate) { + if (extendLastDate) + return CL_NS(document)::DateTools::getISOFormat(year, month, day, 11, 59, 59, 999); + else + return CL_NS(document)::DateTools::getISOFormat(year, month, day); + +} + +void testDateRange(CuTest* tc) { + + TCHAR* startDate = getLocalizedDate(2002, 1, 1, false); + TCHAR* endDate = getLocalizedDate(2002, 1, 4, false); + const int64_t endDateExpected = CL_NS(document)::DateTools::getTime(2002,1,4,23,59,59,999); + const TCHAR* defaultField = _T("default"); + const TCHAR* monthField = _T("month"); + const TCHAR* hourField = _T("hour"); + + SimpleAnalyzer a; + QueryParser* qp = _CLNEW QueryParser(_T("field"), &a); + + // Don't set any date resolution and verify if DateField is used + assertDateRangeQueryEquals(tc, qp, defaultField, startDate, endDate, + endDateExpected, DateTools::NO_RESOLUTION); + + // set a field specific date resolution + qp->setDateResolution(monthField, DateTools::MONTH_FORMAT); + + // DateField should still be used for defaultField + assertDateRangeQueryEquals(tc, qp, defaultField, startDate, endDate, + endDateExpected, DateTools::NO_RESOLUTION); + + // set default date resolution to MILLISECOND + qp->setDateResolution(DateTools::MILLISECOND_FORMAT); + + // set second field specific date resolution + qp->setDateResolution(hourField, DateTools::HOUR_FORMAT); + + // for this field no field specific date resolution has been set, + // so verify if the default resolution is used + assertDateRangeQueryEquals(tc, qp, defaultField, startDate, endDate, + endDateExpected, DateTools::MILLISECOND_FORMAT); + + // verify if field specific date resolutions are used for these two fields + assertDateRangeQueryEquals(tc, qp, monthField, startDate, endDate, + endDateExpected, DateTools::MONTH_FORMAT); + + assertDateRangeQueryEquals(tc, qp, hourField, startDate, endDate, + endDateExpected, DateTools::HOUR_FORMAT); + + _CLDELETE_LCARRAY(startDate); + _CLDELETE_LCARRAY(endDate); +} + +void testEscaped(CuTest *tc) { + WhitespaceAnalyzer a; + /*assertQueryEquals(tc, _T("\\[brackets"), &a, _T("[brackets") ); + assertQueryEquals(tc, _T("\\\\\\[brackets"), &a, _T("\\[brackets") ); + assertQueryEquals(tc,_T("\\[brackets"), NULL, _T("brackets") );*/ + + assertQueryEquals(tc,_T("\\a"), &a, _T("a") ); + + assertQueryEquals(tc,_T("a\\-b:c"), &a, _T("a-b:c") ); + assertQueryEquals(tc,_T("a\\+b:c"), &a, _T("a+b:c") ); + assertQueryEquals(tc,_T("a\\:b:c"), &a, _T("a:b:c") ); + assertQueryEquals(tc,_T("a\\\\b:c"), &a, _T("a\\b:c") ); + + assertQueryEquals(tc,_T("a:b\\-c"), &a, _T("a:b-c") ); + assertQueryEquals(tc,_T("a:b\\+c"), &a, _T("a:b+c") ); + assertQueryEquals(tc,_T("a:b\\:c"), &a, _T("a:b:c") ); + assertQueryEquals(tc,_T("a:b\\\\c"), &a, _T("a:b\\c") ); + + assertQueryEquals(tc,_T("a:b\\-c*"), &a, _T("a:b-c*") ); + assertQueryEquals(tc,_T("a:b\\+c*"), &a, _T("a:b+c*") ); + assertQueryEquals(tc,_T("a:b\\:c*"), &a, _T("a:b:c*") ); + + assertQueryEquals(tc,_T("a:b\\\\c*"), &a, _T("a:b\\c*") ); + + assertQueryEquals(tc,_T("a:b\\-?c"), &a, _T("a:b-?c") ); + assertQueryEquals(tc,_T("a:b\\+?c"), &a, _T("a:b+?c") ); + assertQueryEquals(tc,_T("a:b\\:?c"), &a, _T("a:b:?c") ); + + assertQueryEquals(tc,_T("a:b\\\\?c"), &a, _T("a:b\\?c") ); + + assertQueryEquals(tc,_T("a:b\\-c~"), &a, _T("a:b-c~0.5") ); + assertQueryEquals(tc,_T("a:b\\+c~"), &a, _T("a:b+c~0.5") ); + assertQueryEquals(tc,_T("a:b\\:c~"), &a, _T("a:b:c~0.5") ); + assertQueryEquals(tc,_T("a:b\\\\c~"), &a, _T("a:b\\c~0.5") ); + + assertQueryEquals(tc,_T("[ a\\- TO a\\+ ]"), &a, _T("[a- TO a+]") ); + assertQueryEquals(tc,_T("[ a\\: TO a\\~ ]"), &a, _T("[a: TO a~]") ); + assertQueryEquals(tc,_T("[ a\\\\ TO a\\* ]"), &a, _T("[a\\ TO a*]") ); + + assertQueryEquals(tc, _T("[\"c\\:\\\\temp\\\\\\~foo0.txt\" TO \"c\\:\\\\temp\\\\\\~foo9.txt\"]"), &a, + _T("[c:\\temp\\~foo0.txt TO c:\\temp\\~foo9.txt]")); + + assertQueryEquals(tc, _T("a\\\\\\+b"), &a, _T("a\\+b")); + + assertQueryEquals(tc, _T("a \\\"b c\\\" d"), &a, _T("a \"b c\" d")); + assertQueryEquals(tc, _T("\"a \\\"b c\\\" d\""), &a, _T("\"a \"b c\" d\"")); + assertQueryEquals(tc, _T("\"a \\+b c d\""), &a, _T("\"a +b c d\"")); + + assertQueryEquals(tc, _T("c\\:\\\\temp\\\\\\~foo.txt"), &a, _T("c:\\temp\\~foo.txt")); + + assertParseException(tc, _T("XY\\")); // there must be a character after the escape char + + // test unicode escaping + assertQueryEquals(tc,_T("a\\u0062c"), &a, _T("abc")); + assertQueryEquals(tc,_T("XY\\u005a"), &a, _T("XYZ")); + assertQueryEquals(tc,_T("XY\\u005A"), &a, _T("XYZ")); + assertQueryEquals(tc,_T("\"a \\\\\\u0028\\u0062\\\" c\""), &a, _T("\"a \\(b\" c\"")); + + assertParseException(tc,_T("XY\\u005G")); // test non-hex character in escaped unicode sequence + assertParseException(tc,_T("XY\\u005")); // test incomplete escaped unicode sequence + + // Tests bug LUCENE-800 + assertQueryEquals(tc,_T("(item:\\\\ item:ABCD\\\\)"), &a, _T("item:\\ item:ABCD\\")); + assertParseException(tc,_T("(item:\\\\ item:ABCD\\\\))")); // unmatched closing paranthesis + assertQueryEquals(tc,_T("\\*"), &a, _T("*")); + assertQueryEquals(tc,_T("\\\\"), &a, _T("\\")); // escaped backslash + + assertParseException(tc,_T("\\")); // a backslash must always be escaped +} + +void testQueryStringEscaping(CuTest *tc) { + WhitespaceAnalyzer a; + + assertEscapedQueryEquals(tc, _T("a-b:c"), &a, _T("a\\-b\\:c")); + assertEscapedQueryEquals(tc,_T("a+b:c"), &a, _T("a\\+b\\:c")); + assertEscapedQueryEquals(tc, _T("a:b:c"), &a, _T("a\\:b\\:c")); + assertEscapedQueryEquals(tc, _T("a\\b:c"), &a, _T("a\\\\b\\:c")); + + assertEscapedQueryEquals(tc,_T("a:b-c"), &a, _T("a\\:b\\-c")); + assertEscapedQueryEquals(tc,_T("a:b+c"), &a, _T("a\\:b\\+c")); + assertEscapedQueryEquals(tc,_T("a:b:c"), &a, _T("a\\:b\\:c")); + assertEscapedQueryEquals(tc,_T("a:b\\c"), &a, _T("a\\:b\\\\c")); + + assertEscapedQueryEquals(tc,_T("a:b-c*"), &a, _T("a\\:b\\-c\\*")); + assertEscapedQueryEquals(tc,_T("a:b+c*"), &a, _T("a\\:b\\+c\\*")); + assertEscapedQueryEquals(tc,_T("a:b:c*"), &a, _T("a\\:b\\:c\\*")); + + assertEscapedQueryEquals(tc,_T("a:b\\\\c*"), &a, _T("a\\:b\\\\\\\\c\\*")); + + assertEscapedQueryEquals(tc,_T("a:b-?c"), &a, _T("a\\:b\\-\\?c")); + assertEscapedQueryEquals(tc,_T("a:b+?c"), &a, _T("a\\:b\\+\\?c")); + assertEscapedQueryEquals(tc,_T("a:b:?c"), &a, _T("a\\:b\\:\\?c")); + + assertEscapedQueryEquals(tc,_T("a:b?c"), &a, _T("a\\:b\\?c")); + + assertEscapedQueryEquals(tc,_T("a:b-c~"), &a, _T("a\\:b\\-c\\~")); + assertEscapedQueryEquals(tc,_T("a:b+c~"), &a, _T("a\\:b\\+c\\~")); + assertEscapedQueryEquals(tc,_T("a:b:c~"), &a, _T("a\\:b\\:c\\~")); + assertEscapedQueryEquals(tc,_T("a:b\\c~"), &a, _T("a\\:b\\\\c\\~")); + + assertEscapedQueryEquals(tc,_T("[ a - TO a+ ]"), NULL, _T("\\[ a \\- TO a\\+ \\]")); + assertEscapedQueryEquals(tc,_T("[ a : TO a~ ]"), NULL, _T("\\[ a \\: TO a\\~ \\]")); + assertEscapedQueryEquals(tc,_T("[ a\\ TO a* ]"), NULL, _T("\\[ a\\\\ TO a\\* \\]")); + + // LUCENE-881 + assertEscapedQueryEquals(tc,_T("|| abc ||"), &a, _T("\\|\\| abc \\|\\|")); + assertEscapedQueryEquals(tc,_T("&& abc &&"), &a, _T("\\&\\& abc \\&\\&")); +} + +void testTabNewlineCarriageReturn(CuTest *tc){ + assertQueryEqualsDOA(tc,_T("+weltbank +worlbank"), NULL, + _T("+weltbank +worlbank")); + + assertQueryEqualsDOA(tc,_T("+weltbank\n+worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \n+worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \n +worlbank"), NULL, + _T("+weltbank +worlbank")); + + assertQueryEqualsDOA(tc,_T("+weltbank\r+worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \r+worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \r +worlbank"), NULL, + _T("+weltbank +worlbank")); + + assertQueryEqualsDOA(tc,_T("+weltbank\r\n+worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \r\n+worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \r\n +worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \r \n +worlbank"), NULL, + _T("+weltbank +worlbank")); + + assertQueryEqualsDOA(tc,_T("+weltbank\t+worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \t+worlbank"), NULL, + _T("+weltbank +worlbank")); + assertQueryEqualsDOA(tc,_T("weltbank \t +worlbank"), NULL, + _T("+weltbank +worlbank")); +} + +void testSimpleDAO(CuTest *tc){ + assertQueryEqualsDOA(tc,_T("term term term"), NULL, _T("+term +term +term")); + assertQueryEqualsDOA(tc,_T("term +term term"), NULL, _T("+term +term +term")); + assertQueryEqualsDOA(tc,_T("term term +term"), NULL, _T("+term +term +term")); + assertQueryEqualsDOA(tc,_T("term +term +term"), NULL, _T("+term +term +term")); + assertQueryEqualsDOA(tc,_T("-term term term"), NULL, _T("-term +term +term")); +} + +void testBoost(CuTest *tc){ + const TCHAR* stopWords[] = {_T("on"), NULL}; + StandardAnalyzer* oneStopAnalyzer = _CLNEW StandardAnalyzer(reinterpret_cast(&stopWords)); + QueryParser* qp = _CLNEW QueryParser(_T("field"), oneStopAnalyzer); + Query* q = qp->parse(_T("on^1.0")); + CLUCENE_ASSERT(q != NULL); + _CLLDELETE(q); + q = qp->parse(_T("\"hello\"^2.0")); + CLUCENE_ASSERT(q != NULL); + CLUCENE_ASSERT(q->getBoost() == 2.0f); + _CLLDELETE(q); + q = qp->parse(_T("hello^2.0")); + CLUCENE_ASSERT(q != NULL); + CLUCENE_ASSERT(q->getBoost() == 2.0f); + _CLLDELETE(q); + q = qp->parse(_T("\"on\"^1.0")); + CLUCENE_ASSERT(q != NULL); + _CLLDELETE(q); + _CLLDELETE(qp); + _CLLDELETE(oneStopAnalyzer); + + StandardAnalyzer a; + QueryParser* qp2 = _CLNEW QueryParser(_T("field"), &a); + q = qp2->parse(_T("the^3")); + // "the" is a stop word so the result is an empty query: + CLUCENE_ASSERT(q != NULL); + TCHAR* tmp = q->toString(); + CLUCENE_ASSERT( _tcscmp(tmp, _T("")) == 0 ); + _CLDELETE_LCARRAY(tmp); + CLUCENE_ASSERT(1.0f == q->getBoost()); + _CLLDELETE(q); + _CLLDELETE(qp2); +} + +/// TODO: Port tests starting from assertParseException + +void testMatchAllDocs(CuTest *tc) { + WhitespaceAnalyzer a; + QueryParser* qp = _CLNEW QueryParser(_T("field"), &a); + assertCorrectQuery(tc,qp->parse(_T("*:*")),"MatchAllDocsQuery",true); + assertCorrectQuery(tc,qp->parse(_T("(*:*)")),"MatchAllDocsQuery",true); + + BooleanQuery* bq = (BooleanQuery*)qp->parse(_T("+*:* -*:*")); + BooleanClause** clauses = _CL_NEWARRAY(BooleanClause*, bq->getClauseCount() + 1); + bq->getClauses(clauses); + assertCorrectQuery(tc, clauses[0]->getQuery(), "MatchAllDocsQuery"); + assertCorrectQuery(tc, clauses[1]->getQuery(), "MatchAllDocsQuery"); + _CLDELETE_LARRAY(clauses); + _CLLDELETE(bq); + _CLLDELETE(qp); +} + +// Tracker Bug ID 2870826 by Veit Jahns +void testDefaultField(CuTest* tc){ + WhitespaceAnalyzer a; + QueryParser* qp = _CLNEW QueryParser(_T("field"), &a); + Query* bq = qp->parse(_T("term1 author:term2 term3")); + CLUCENE_ASSERT( bq != NULL ); + TCHAR* s = bq->toString(_T("field")); + _CLLDELETE(bq); + if ( _tcscmp(s,_T("term1 author:term2 term3")) != 0 ) + CuFail(tc, _T("FAILED Query /term1 author:term2 term3/ yielded /%s/, expecting term1 author:term2 term3\n"), s); + _CLDELETE_LCARRAY(s); + + bq = qp->parse(_T("term1 *:term2 term3")); + s = bq->toString(_T("field")); + if ( _tcscmp(s,_T("term1 *:term2 term3")) != 0 ) + CuFail(tc, _T("FAILED Query /term1 *:term2 term3/ yielded /%s/, expecting term1 *:term2 term3\n"), s); + + _CLDELETE_LCARRAY(s); + _CLLDELETE(bq); + + _CLLDELETE(qp); +} + +CuSuite *testQueryParser(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Query Parser Test")); + + SUITE_ADD_TEST(suite, testSimple); + SUITE_ADD_TEST(suite, testPunct); + SUITE_ADD_TEST(suite, testSlop); + SUITE_ADD_TEST(suite, testNumber); + SUITE_ADD_TEST(suite, testWildcard); + SUITE_ADD_TEST(suite, testLeadingWildcardType); + SUITE_ADD_TEST(suite, testQPA); + SUITE_ADD_TEST(suite, testRange); + //SUITE_ADD_TEST(suite, testDateRange); + SUITE_ADD_TEST(suite, testEscaped); + SUITE_ADD_TEST(suite, testQueryStringEscaping); + SUITE_ADD_TEST(suite, testTabNewlineCarriageReturn); + SUITE_ADD_TEST(suite, testSimpleDAO); + SUITE_ADD_TEST(suite, testBoost); + + SUITE_ADD_TEST(suite, testMatchAllDocs); + + SUITE_ADD_TEST(suite, testDefaultField); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/README clucene-core-2.3.3.4/src/test/README --- clucene-core-0.9.21b/src/test/README 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/README 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,239 @@ +Writing CLucene tests + +The Full Suite +-------------- + +/* The driver function. This must return a CuSuite variable, which will + * then be used to actually run the tests. Essentially, all Suites are a + * collection of tests. The driver will take each Suite, and put it in a + * SuiteList, which is a collection of Suites. + */ +CuSuite *testtime(void) +{ + /* The actual suite, this must be created for each test program. Please + * give it a useful name, that will inform the user of the feature being + * tested. + */ + CuSuite *suite = CuSuiteNew("Test Time"); + + /* Each function must be added to the suite. Each function represents + * a single test. It is possible to test multiple features in a single + * function, although no tests currently do that. + */ + SUITE_ADD_TEST(suite, test_now); + SUITE_ADD_TEST(suite, test_gmtstr); + SUITE_ADD_TEST(suite, test_localstr); + SUITE_ADD_TEST(suite, test_exp_get_gmt); + SUITE_ADD_TEST(suite, test_exp_get_lt); + SUITE_ADD_TEST(suite, test_imp_gmt); + SUITE_ADD_TEST(suite, test_rfcstr); + SUITE_ADD_TEST(suite, test_ctime); + SUITE_ADD_TEST(suite, test_strftime); + SUITE_ADD_TEST(suite, test_strftimesmall); + SUITE_ADD_TEST(suite, test_exp_tz); + SUITE_ADD_TEST(suite, test_strftimeoffset); + + /* You must return the suite so that the driver knows which suites to + * run. + */ + return suite; +} + +Building the full driver +------------------------ + +All you need to do to build the full driver is run: + + make testall + +To run it, run: + + ./testall + +Caveats +------- + +Currently, some tests are known to fail in certain circumstances: + + * 'testpoll' opens 64 sockets concurrently; ensure that resource +limits are high enough to allow this (using ulimit or limit); for +instance, Solaris <=2.7 and HP-UX 11.00 both set the limit to <=64 by +default + + * 'testipsub' will tickle the Solaris 8 getaddrinfo() IPv6 +bug, causing the test to hang. Configure with --disable-ipv6 if using +an unpatched Solaris 8 installation. + + * The 'testdso' tests will not work if configured with +--disable-shared since the loadable modules cannot be built. + +Running individual tests +--------------------------------- + +It is not possible to build individual tests, however it is possible to +run individual tests. When running the test suite, specify the name of the +tests that you want to run on the command line. For example: + + ./testall teststr testrand + +Will run the Strings and Random generator tests. + +Reading the test suite output +----------------------------- + +Once you run the test suite, you will get output like: + +All APR Tests: + Test Strings: .... + Test Time: ............ + +16 tests run: 16 passed, 0 failed, 0 not implemented. + +There are a couple of things to look at with this. First, if you look at the +first function in this document, you should notice that the string passed to +the CuSuiteNew function is in the output. That is why the string should +explain the feature you are testing. + +Second, this test passed completely. This is obvious in two ways. First, and +most obvious, the summary line tells you that 16 tests were run and 16 tests +passed. However, the results can also be found in the lines above. Every +'.' in the output represents a passed test. + +If a test fails, the output will look like: + +All APR Tests: + Test Strings: .... + Test Time: ..F......... + +16 tests run: 15 passed, 1 failed, 0 not implemented. + +This is not very useful, because you don't know which test failed. However, +once you know that a test failed, you can run the suite again, with the +-v option. If you do this, you will get something like: + +All APR Tests: + Test Strings: .... + Test Time: ..F......... + +16 tests run: 15 passed, 1 failed, 0 not implemented. +Failed tests: +1) test_localstr: assert failed + +In this case, we know the test_localstr function failed, and there is an +Assert in this that failed (I modified the test to fail for this document). +Now, you can look at what that test does, and why it would have failed. + +There is one other possible output for the test suite (run with -v): + +All APR Tests: + Test Strings: .... + Test Time: ..N......... + +16 tests run: 15 passed, 0 failed, 1 not implemented. + +Not Implemented tests: + +Not Implemented tests: +1) test_localstr: apr_time_exp_lt not implemented on this platform + +The 'N' means that a function has returned APR_ENOTIMPL. This should be +treated as an error, and the function should be implemented as soon as +possible. + +Adding New test Suites to the full driver +------------------------------------------- + +To add a new Suite to the full driver, you must make a couple of modifications. + +1) Edit test_apr.h, and add the prototype for the function. +2) Edit testall.c, and add the function and name to the tests array. +3) Edit Makefile.in, and add the .lo file to the testall target. + +Once those four things are done, your tests will automatically be added +to the suite. + +Writing tests +------------- + +There are a couple of rules for writing good tests for the test suite. + +1) All tests can determine for themselves if it passed or not. This means +that there is no reason for the person running the test suite to interpret +the results of the tests. +2) Never use printf to add to the output of the test suite. The suite +library should be able to print all of the information required to debug +a problem. +3) Functions should be tested with both positive and negative tests. This +means that you should test things that should both succeed and fail. +4) Just checking the return code does _NOT_ make a useful test. You must +check to determine that the test actually did what you expected it to do. + +An example test +--------------- + +Finally, we will look at a quick test: + +/* All tests are passed a CuTest variable. This is how the suite determines + * if the test succeeded or failed. + */ +static void test_localstr(CuTest *tc) +{ + apr_status_t rv; + apr_time_exp_t xt; + time_t os_now; + + rv = apr_time_exp_lt(&xt, now); + os_now = now / APR_USEC_PER_SEC; + + /* If the function can return APR_ENOTIMPL, then you should check for it. + * This allows platform implementors to know if they have to implement + * the function. + */ + if (rv == APR_ENOTIMPL) { + CuNotImpl(tc, "apr_time_exp_lt"); + } + + /* It often helps to ensure that the return code was APR_SUCESS. If it + * wasn't, then we know the test failed. + */ + CuAssertTrue(tc, rv == APR_SUCCESS); + + /* Now that we know APR thinks it worked properly, we need to check the + * output to ensure that we got what we expected. + */ + CuAssertStrEquals(tc, "2002-08-14 12:05:36.186711 -25200 [257 Sat] DST", + print_time(p, &xt)); +} + +Notice, the same test can fail for any of a number of reasons. The first +test to fail ends the test. + +CuTest +------ + +CuTest is an open source test suite written by Asim Jalis. It has been +released under the zlib/libpng license. That license can be found in the +CuTest.c and CuTest.h files. + +The version of CuTest that is included in the APR test suite has been modified +from the original distribution in the following ways: + +1) The original distribution does not have a -v flag, the details are always +printed. +2) The NotImplemented result does not exist. +3) SuiteLists do not exist. In the original distribution, you can add suites +to suites, but it just adds the tests in the first suite to the list of tests +in the original suite. The output wasn't as detailed as I wanted, so I created +SuiteLists. + +The first two modifications have been sent to the original author of CuTest, +but they have not been integrated into the base distribution. The SuiteList +changes will be sent to the original author soon. + +The modified version of CuTest is not currently in any CVS or Subversion +server. In time, it will be hosted at rkbloom.net. + +There are currently no docs for how to write tests, but the teststr and +testtime programs should give an idea of how it is done. In time, a document +should be written to define how tests are written. + diff -Nru clucene-core-0.9.21b/src/test/search/BaseTestRangeFilter.cpp clucene-core-2.3.3.4/src/test/search/BaseTestRangeFilter.cpp --- clucene-core-0.9.21b/src/test/search/BaseTestRangeFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/BaseTestRangeFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,115 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "BaseTestRangeFilter.h" + +#include + +static const size_t getMaxIntLength() +{ + TCHAR buf[40]; + _itot(std::numeric_limits::max(), buf, 10); + return _tcslen(buf); +} + +BaseTestRangeFilter::BaseTestRangeFilter(CuTest* _tc) + : index(new RAMDirectory()) + , maxR(std::numeric_limits::min()), minR(std::numeric_limits::max()) + , minId(0), maxId(10000), intLength(getMaxIntLength()) + , tc(_tc) +{ + srand ( 101 ); // use a set seed to test is deterministic + build(); +} + +BaseTestRangeFilter::~BaseTestRangeFilter() +{ + index->close(); + _CLLDECDELETE(index); +} + +std::tstring BaseTestRangeFilter::pad(int n) +{ + std::tstring b; + if (n < 0) { + b = _T("-"); + n = std::numeric_limits::max() + n + 1; + } + else + b = _T("0"); + + TCHAR buf[40]; + _itot(n, buf, 10); + for (size_t i = _tcslen(buf); i <= intLength; i++) { + b += _T("0"); + } + b += buf; + + return b; +} + +void BaseTestRangeFilter::build() +{ + try + { + /* build an index */ + SimpleAnalyzer a; + IndexWriter* writer = _CLNEW IndexWriter(index, + &a, T); + + for (int32_t d = minId; d <= maxId; d++) { + Document doc; + std::tstring paddedD = pad(d); + doc.add(* _CLNEW Field(_T("id"),paddedD.c_str(), Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + int r= rand(); + if (maxR < r) { + maxR = r; + } + if (r < minR) { + minR = r; + } + std::tstring paddedR = pad(r); + doc.add( * _CLNEW Field(_T("rand"),paddedR.c_str(), Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + doc.add( * _CLNEW Field(_T("body"),_T("body"), Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + writer->addDocument(&doc); + } + + writer->optimize(); + writer->close(); + _CLLDELETE(writer); + } catch (CLuceneError&) { + _CLTHROWA(CL_ERR_Runtime, "can't build index"); + } +} + +void BaseTestRangeFilter::testPad() +{ + const int32_t tests[] = { + -9999999, -99560, -100, -3, -1, 0, 3, 9, 10, 1000, 999999999 + }; + const size_t testsLen = 11; + + for (size_t i = 0; i < testsLen - 1; i++) { + const int32_t a = tests[i]; + const int32_t b = tests[i+1]; + const TCHAR* aa = pad(a).c_str(); + const TCHAR* bb = pad(b).c_str(); + + StringBuffer label(50); + label << a << _T(':') << aa << _T(" vs ") << b << _T(':') << bb; + + std::tstring tmp(_T("length of ")); + tmp += label.getBuffer(); + assertEqualsMsg(tmp.c_str(), _tcslen(aa), _tcslen(bb)); + + tmp = _T("compare less than "); + tmp += label.getBuffer(); + assertTrueMsg(tmp.c_str(), _tcscmp(aa, bb) < 0); + } +} + +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/BaseTestRangeFilter.h clucene-core-2.3.3.4/src/test/search/BaseTestRangeFilter.h --- clucene-core-0.9.21b/src/test/search/BaseTestRangeFilter.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/BaseTestRangeFilter.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,47 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_BaseTestRangeFilter +#define _lucene_search_BaseTestRangeFilter + +#include "test.h" + +class BaseTestRangeFilter +{ +public: + static const bool F = false; + static const bool T = true; + + RAMDirectory* index; + + int32_t maxR; + int32_t minR; + + int32_t minId; + int32_t maxId; + + const size_t intLength; + + CuTest* tc; + + BaseTestRangeFilter(CuTest* _tc); + virtual ~BaseTestRangeFilter(); + + /** + * a simple padding function that should work with any int + */ + std::tstring pad(int32_t n); + +private: + void build(); + +public: + void testPad(); +}; + + +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/CheckHits.cpp clucene-core-2.3.3.4/src/test/search/CheckHits.cpp --- clucene-core-0.9.21b/src/test/search/CheckHits.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/CheckHits.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,542 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "CheckHits.h" +#include "QueryUtils.h" + + +///////////////////////////////////////////////////////////////////////////// +float_t CheckHits::EXPLAIN_SCORE_TOLERANCE_DELTA = 0.00005f; + + +///////////////////////////////////////////////////////////////////////////// +/** +* Asserts that the score explanation for every document matching a +* query corresponds with the true score. +* +* NOTE: this HitCollector should only be used with the Query and Searcher +* specified at when it is constructed. +* +* @see CheckHits#verifyExplanation +*/ +class ExplanationAsserter : public HitCollector +{ +private: + Query * q; + Searcher * s; + TCHAR * d; + bool deep; + CuTest * tc; + +public: + /** Constructs an instance which does shallow tests on the Explanation */ + ExplanationAsserter( Query * q, const TCHAR * defaultFieldName, Searcher * s, CuTest * tc ) + { + this->q = q; + this->s = s; + this->d = q->toString( defaultFieldName ); + this->deep = false; + this->tc = tc; + } + + ExplanationAsserter( Query * q, const TCHAR * defaultFieldName, Searcher * s, bool deep, CuTest * tc ) + { + this->q = q; + this->s = s; + this->d = q->toString( defaultFieldName ); + this->deep = deep; + this->tc = tc; + } + + virtual ~ExplanationAsserter() + { + _CLDELETE_LARRAY( d ); + } + + void collect( const int32_t doc, const float_t score ) + { + Explanation exp; + s->explain( q, doc, &exp ); + + if( exp.getDetailsLength() == 0 ) // ToDo: Fix IndexSearcher::explain() method + { + StringBuffer buffer; + buffer.append( _T( "Explanation of [[" )); + buffer.append( d ); + buffer.append( _T( "]] for #" )); + buffer.appendInt( doc ); + buffer.append( _T( " is null" )); + assertTrueMsg( buffer.getBuffer(), false ); + } + + assertTrue( exp.getDetailsLength() == 1 ); + CheckHits::verifyExplanation( tc, d, doc, score, deep, exp.getDetail( 0 ) ); // ToDo: Fix IndexSearcher::explain() method + } +}; + +///////////////////////////////////////////////////////////////////////////// +/** +* an IndexSearcher that implicitly checks hte explanation of every match +* whenever it executes a search. +* +* @see ExplanationAsserter +*/ +class ExplanationAssertingSearcher : public CL_NS(search)::IndexSearcher +{ +private: + CuTest * tc; +public: + ExplanationAssertingSearcher( Directory * d, CuTest * tc ) : IndexSearcher( d ) { this->tc = tc; } + ExplanationAssertingSearcher( IndexReader * r, CuTest * tc ) : IndexSearcher( r ) { this->tc = tc; } + virtual ~ExplanationAssertingSearcher() {} + + Hits * search( Query * query, Filter * filter ) + { checkExplanations( query ); return IndexSearcher::search( query, filter ); } + + Hits * search( Query * query, Sort * sort ) + { checkExplanations( query ); return IndexSearcher::search( query, sort ); } + + Hits * search( Query * query, Filter * filter, Sort * sort ) + { checkExplanations( query ); return IndexSearcher::search( query, filter, sort ); } + + TopFieldDocs * _search( Query * query, Filter * filter, int32_t n, Sort * sort ) + { checkExplanations( query ); return IndexSearcher::_search( query, filter, n, sort ); } + + void _search( Query * query, HitCollector * results ) + { checkExplanations( query ); IndexSearcher::_search( query, NULL, results ); } + + void _search( Query * query, Filter * filter, HitCollector * results ) + { checkExplanations( query ); IndexSearcher::_search( query, filter, results ); } + + TopDocs * search_( Query * query, Filter * filter, int32_t n ) + { checkExplanations( query ); return IndexSearcher::_search( query, filter, n ); } + +protected: + void checkExplanations( Query * q ) + { IndexSearcher::_search( q, NULL, _CLNEW ExplanationAsserter( q, NULL, this, tc )); } +}; + +///////////////////////////////////////////////////////////////////////////// +class HitSetCollector : public HitCollector +{ +public: + set actual; + +public: + HitSetCollector() : HitCollector() {}; + virtual ~HitSetCollector() {}; + + virtual void collect( const int32_t doc, const float_t score ) { actual.insert( doc ); } +}; + + +///////////////////////////////////////////////////////////////////////////// +bool CheckHits::setEquals( set& s1, set& s2 ) +{ + bool bEquals = ( s1.size() == s2.size() ); + + set::iterator iS1 = s1.begin(); + set::iterator iS2 = s2.begin(); + for( ; bEquals && ( iS1 != s1.end() ); iS1++, iS2++ ) + bEquals = ( *iS1 == *iS2 ); + + return bEquals; +} + +bool CheckHits::stringEndsWith( const TCHAR* tszStr, const TCHAR * tszEnd ) +{ + if( ! tszStr || ! tszEnd ) + return false; + + size_t lenStr = _tcslen( tszStr ); + size_t lenEnd = _tcslen( tszEnd ); + if( lenEnd > lenStr ) + return false; + + const TCHAR * tszReadEnd = tszEnd + lenEnd; + const TCHAR * tszReadStr = tszStr + lenStr; + while( tszEnd != tszReadEnd ) + { + if( *tszReadEnd-- != *tszReadStr-- ) + return false; + } + + return true; +} + +void CheckHits::checkNoMatchExplanations( CuTest* tc, Query * q, const TCHAR * defaultFieldName, Searcher * searcher, int32_t * results, size_t resultsCount ) +{ + TCHAR * d = q->toString( defaultFieldName ); + + set ignore; + for( size_t i = 0; i < resultsCount; i++ ) + ignore.insert( results[ i ] ); + + int32_t maxDoc = searcher->maxDoc(); + for( int32_t doc = 0; doc < maxDoc; doc++ ) + { + if( ignore.find( doc ) != ignore.end() ) + continue; + + Explanation exp; + searcher->explain( q, doc, &exp ); + + if( 0.0f != exp.getValue() ) + { + StringBuffer buffer; + TCHAR * tszExp = exp.toString(); + + buffer.append( _T( "Explanation of [[" )); + buffer.append( d ); + buffer.append( _T( "]] for #" )); + buffer.appendInt( doc ); + buffer.append( _T( " doesn't indicate non-match: " )); + + buffer.append( tszExp ); + _CLDELETE_LARRAY( tszExp ); + + assertTrueMsg( buffer.getBuffer(), false ); + } + } + + _CLDELETE_LARRAY( d ); +} + +void CheckHits::checkHitCollector( CuTest* tc, Query * query, const TCHAR * defaultFieldName, Searcher * searcher, int32_t * results, size_t resultsCount ) +{ + set correct; + for( size_t i = 0; i < resultsCount; i++ ) + correct.insert( results[ i ] ); + + HitSetCollector hitSet; + searcher->_search( query, &hitSet ); + + if( ! setEquals( correct, hitSet.actual )) + { + TCHAR * tszQry = query->toString( defaultFieldName ); + assertTrueMsg( tszQry, false ); + _CLDELETE_LARRAY( tszQry ); + } + + QueryUtils::check( tc, query, searcher ); +} + +///////////////////////////////////////////////////////////////////////////// +void CheckHits::checkHits( CuTest* tc, Query * query, const TCHAR * defaultFieldName, Searcher * searcher, int32_t * results, size_t resultsCount ) +{ + if( searcher->getObjectName() == IndexSearcher::getClassName() ) + QueryUtils::check( tc, query, (IndexSearcher *) searcher ); + +// Hits * hits = searcher->search( query ); +// +// set correct; +// for( size_t i = 0; i < resultsCount; i++ ) +// correct.insert( results[ i ] ); +// +// set actual; +// for( size_t i = 0; i < hits->length(); i++ ) +// actual.insert( hits->id( i )); +// +// _CLLDELETE( hits ); +// +// if( ! setEquals( correct, actual )) +// { +// TCHAR * tszQry = query->toString( defaultFieldName ); +// assertTrueMsg( tszQry, false ); +// _CLDELETE_LARRAY( tszQry ); +// } +// +// QueryUtils::check( tc, query, searcher ); +} + +void CheckHits::checkDocIds( CuTest* tc, const TCHAR * mes, int32_t * results, size_t resultsCount, Hits * hits ) +{ + StringBuffer buffer; + + if( resultsCount != hits->length() ) + { + buffer.append( mes ); + buffer.append( _T( " nr of hits" )); + assertTrueMsg( buffer.getBuffer(), false ); + } + + for( size_t i = 0; i < resultsCount; i++ ) + { + if( results[ i ] != hits->id( i )) + { + buffer.clear(); + buffer.append( mes ); + buffer.append( _T( " doc nrs for hit " )); + buffer.appendInt( i ); + assertTrueMsg( buffer.getBuffer(), false ); + } + } +} + +void CheckHits::checkHitsQuery( CuTest* tc, Query * query, Hits * hits1, Hits * hits2, int32_t * results, size_t resultsCount ) +{ + checkDocIds( tc, _T( "hits1" ), results, resultsCount, hits1 ); + checkDocIds( tc, _T( "hits2" ), results, resultsCount, hits2 ); + checkEqual( tc, query, hits1, hits2 ); +} + +void CheckHits::checkEqual( CuTest* tc, Query * query, Hits * hits1, Hits * hits2 ) +{ + float_t scoreTolerance = 1.0e-6f; + assertTrueMsg( _T( "Unequal lengths of supplied hits." ), hits1->length() == hits2->length() ); + + for( size_t i = 0; i < hits1->length(); i++ ) + { + if( hits1->id( i ) != hits2->id( i )) + { + StringBuffer buffer; + buffer.append( _T( "Hit " )); + buffer.appendInt( i ); + buffer.append( _T( " docnumbers don't match\n" )); + appendHits( buffer, hits1, hits2, 0, 0 ); + buffer.append( _T( "for query:" )); + TCHAR * tszQry = query->toString(); + buffer.append( tszQry ); + _CLDELETE_LARRAY( tszQry ); + + assertTrueMsg( buffer.getBuffer(), false ); + } + + float_t sd = hits1->score( i ) - hits2->score( i ); + if ( sd < 0 ) sd *= -1; + + if(( hits1->id( i ) != hits2->id( i )) + || sd > scoreTolerance ) + { + StringBuffer buffer; + buffer.append( _T( "Hit " )); + buffer.appendInt( i ); + buffer.append( _T( ", doc nrs " )); + buffer.appendInt( hits1->id( i )); + buffer.append( _T( " and " )); + buffer.appendInt( hits2->id( i )); + buffer.append( _T( "\nunequal : " )); + buffer.appendFloat( hits1->score( i ), 2 ); + buffer.append( _T( "\n and: " )); + buffer.appendFloat( hits2->score( i ), 2 ); + buffer.append( _T( "\nfor query:" )); + TCHAR *tszQry = query->toString(); + buffer.append( tszQry ); + _CLDELETE_LARRAY( tszQry ); + + assertTrueMsg( buffer.getBuffer(), false ); + } + } +} + +void CheckHits::appendHits( StringBuffer& buffer, Hits * hits1, Hits * hits2, size_t start, size_t end ) +{ + size_t len1 = hits1 ? hits1->length() : 0; + size_t len2 = hits2 ? hits2->length() : 0; + if( end <= 0 ) + end = len1 < len2 ? len2 : len1; // max + + buffer.append( _T( "Hits length1=" )); + buffer.appendInt( len1 ); + buffer.append( _T( "\tlength2=" )); + buffer.appendInt( len2 ); + + buffer.append( _T( "\n" )); + for( size_t i = start; i < end; i++ ) + { + buffer.append( _T( "hit=" )); + buffer.appendInt( i ); + buffer.append( _T( ":" )); + if( i < len1 ) + { + buffer.append( _T( " doc" )); + buffer.appendInt( hits1->id( i ) ); + buffer.append( _T( "=" )); + buffer.appendFloat( hits1->score( i ), 2); + } + else + { + buffer.append( _T( " " )); + } + + buffer.append( _T( ",\t" )); + if( i < len2 ) + { + buffer.append( _T( " doc" )); + buffer.appendInt( hits2->id( i )); + buffer.append( _T( "= ")); + buffer.appendFloat( hits2->score( i ), 2 ); + } + + buffer.append( _T( "\n" )); + } +} + +void CheckHits::appendTopdocs( StringBuffer& buffer, TopDocs * docs, size_t start, size_t end ) +{ + buffer.append( _T( "TopDocs totalHits=" )); + buffer.appendInt( docs->totalHits ); + buffer.append( _T( " top=" )); + buffer.appendInt( docs->scoreDocsLength ); + buffer.append( _T( "\n" )); + if( end <= 0 ) + end = docs->scoreDocsLength; + else + end = end < (size_t)docs->scoreDocsLength ? end : (size_t)docs->scoreDocsLength; // min + + for( size_t i = start; i < end; i++ ) + { + buffer.append( _T( "\t" )); + buffer.appendInt( i ); + buffer.append( _T( ") doc=" )); + buffer.appendInt( docs->scoreDocs[ i ].doc ); + buffer.append( _T( "\tscore=" )); + buffer.appendFloat( docs->scoreDocs[ i ].score, 2 ); + buffer.append( _T( "\n" )); + } +} + +void CheckHits::checkExplanations( CuTest* tc, Query * query, const TCHAR * defaultFieldName, Searcher * searcher ) +{ + checkExplanations( tc, query, defaultFieldName, searcher, false ); +} + +void CheckHits::checkExplanations( CuTest* tc, Query * query, const TCHAR * defaultFieldName, Searcher * searcher, bool deep ) +{ + ExplanationAsserter asserter( query, defaultFieldName, searcher, deep, tc ); + searcher->_search( query, &asserter ); +} + + +void CheckHits::verifyExplanation( CuTest* tc, const TCHAR * q, int32_t doc, float_t score, bool deep, Explanation * expl ) +{ + StringBuffer buffer; + TCHAR * tmp; + + float_t value = expl->getValue(); + + if( ( score > value ? score - value : value - score ) > EXPLAIN_SCORE_TOLERANCE_DELTA ) + { + buffer.append( q ); + buffer.append( _T( ": score(doc=" )); + buffer.appendInt( doc ); + buffer.append( _T( ")=" )); + buffer.appendFloat( score, 2 ); + buffer.append( _T( " != explanationScore=" )); + buffer.appendFloat( value, 2 ); + buffer.append( _T( " Explanation: " )); + tmp = expl->toString(); + buffer.append( tmp ); + _CLDELETE_LARRAY( tmp ); + + assertTrueMsg( buffer.getBuffer(), false ); + } + + if( ! deep ) + return; + + Explanation ** detail = _CL_NEWARRAY( Explanation *, expl->getDetailsLength() + 1 ); + expl->getDetails( detail ); + if( expl->getDetailsLength() > 0 ) + { + if( expl->getDetailsLength() == 1 ) + { + // simple containment, no matter what the description says, + // just verify contained expl has same score + verifyExplanation( tc, q, doc, score, deep, detail[ 0 ] ); + } + else + { + // explanation must either: + // - end with one of: "product of:", "sum of:", "max of:", or + // - have "max plus times others" (where is float). + float_t x = 0; + const TCHAR* descr = expl->getDescription(); + TCHAR* descrLwr = STRDUP_TtoT( descr ); + _tcslwr( descrLwr ); + + bool productOf = stringEndsWith( descr, _T( "product of:" )); + bool sumOf = stringEndsWith( descr, _T( "sum of:" )); + bool maxOf = stringEndsWith( descr, _T( "max of:" )); + bool maxTimesOthers = false; + if( ! ( productOf || sumOf || maxOf )) + { + // maybe 'max plus x times others' + const TCHAR * k1 = _tcsstr( descr, _T( "max plus " )); + if( k1 ) + { + k1 += 9; // "max plus ".length(); + const TCHAR * k2 = _tcsstr( k1, _T( " " )); + + x = _tcstod( k1, NULL ); // Float::parseFloat( descr.substring(k1,k2).trim()); + + if( k2 && 0 == _tcscmp( k2, _T( " times others of:" ))) + maxTimesOthers = true; + } + } + + if( ! ( productOf || sumOf || maxOf || maxTimesOthers )) + { + buffer.clear(); + buffer.append( q ); + buffer.append( _T( ": multi valued explanation description=\"" )); + buffer.append( descrLwr ); + buffer.append( _T( "\" must be 'max of plus x times others' or end with 'product of' or 'sum of:' or 'max of:' - " )); + tmp = expl->toString(); + buffer.append( tmp ); + _CLDELETE_LARRAY( tmp ); + + assertTrueMsg( buffer.getBuffer(), false ); + } + + float_t sum = 0; + float_t product = 1; + float_t max = 0; + for( size_t i = 0; i < expl->getDetailsLength(); i++ ) + { + float_t dval = detail[ i ]->getValue(); + verifyExplanation( tc, q, doc, dval, deep, detail[ i ] ); + product *= dval; + sum += dval; + max = max > dval ? max : dval; // max + } + float_t combined = 0; + + if( productOf ) + combined = product; + else if( sumOf ) + combined = sum; + else if( maxOf ) + combined = max; + else if( maxTimesOthers ) + combined = max + x * (sum - max); + else + { + assertTrueMsg( _T( "should never get here!" ), false ); + } + + if( ( combined > value ? combined - value : value - combined ) > EXPLAIN_SCORE_TOLERANCE_DELTA ) + { + buffer.clear(); + buffer.append( q ); + buffer.append( _T( ": actual subDetails combined==" )); + buffer.appendFloat( combined, 2 ); + buffer.append( _T( " != value=" )); + buffer.appendFloat( value, 2 ); + buffer.append( _T( " Explanation: " )); + tmp = expl->toString(); + buffer.append( tmp ); + _CLDELETE_LARRAY( tmp ); + + assertTrueMsg( buffer.getBuffer(), false ); + } + + _CLDELETE_LARRAY( descrLwr ); + } + } + + _CLDELETE_ARRAY_ALL( detail ); +} diff -Nru clucene-core-0.9.21b/src/test/search/CheckHits.h clucene-core-2.3.3.4/src/test/search/CheckHits.h --- clucene-core-0.9.21b/src/test/search/CheckHits.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/CheckHits.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,120 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_CheckHits +#define _lucene_search_CheckHits + +#include "test.h" + +class CheckHits +{ +public: + /** + * Some explains methods calculate their values though a slightly + * different order of operations from the actaul scoring method ... + * this allows for a small amount of variation + */ + static float_t EXPLAIN_SCORE_TOLERANCE_DELTA; + +public: + /** + * Tests that all documents up to maxDoc which are *not* in the + * expected result set, have an explanation which indicates no match + * (ie: Explanation value of 0.0f) + */ + static void checkNoMatchExplanations( CuTest* tc, Query * q, const TCHAR * defaultFieldName, Searcher * searcher, int32_t * results, size_t resultsCount ); + + /** + * Tests that a query matches the an expected set of documents using a + * HitCollector. + * + *

+ * Note that when using the HitCollector API, documents will be collected + * if they "match" regardless of what their score is. + *

+ * @param query the query to test + * @param searcher the searcher to test the query against + * @param defaultFieldName used for displaing the query in assertion messages + * @param results a list of documentIds that must match the query + * @see Searcher#search(Query,HitCollector) + * @see #checkHits + */ + static void checkHitCollector( CuTest* tc, Query * query, const TCHAR * defaultFieldName, Searcher * searcher, int32_t * results, size_t resultsCount ); + + /** + * Tests that a query matches the an expected set of documents using Hits. + * + *

+ * Note that when using the Hits API, documents will only be returned + * if they have a positive normalized score. + *

+ * @param query the query to test + * @param searcher the searcher to test the query against + * @param defaultFieldName used for displaing the query in assertion messages + * @param results a list of documentIds that must match the query + * @see Searcher#search(Query) + * @see #checkHitCollector + */ + static void checkHits( CuTest* tc, Query * query, const TCHAR * defaultFieldName, Searcher * searcher, int32_t * results, size_t resultsCount ); + + /** Tests that a Hits has an expected order of documents */ + static void checkDocIds( CuTest* tc, const TCHAR * mes, int32_t * results, size_t resultsCount, Hits * hits ); + + /** Tests that two queries have an expected order of documents, + * and that the two queries have the same score values. + */ + static void checkHitsQuery( CuTest* tc, Query * query, Hits * hits1, Hits * hits2, int32_t * results, size_t resultsCount ); + + static void checkEqual( CuTest* tc, Query * query, Hits * hits1, Hits * hits2 ); + static void appendHits( StringBuffer& buffer, Hits * hits1, Hits * hits2, size_t start, size_t end ); + static void appendTopdocs( StringBuffer& buffer, TopDocs * docs, size_t start, size_t end ); + + /** + * Asserts that the explanation value for every document matching a + * query corresponds with the true score. + * + * @see ExplanationAsserter + * @see #checkExplanations(Query, String, Searcher, boolean) for a + * "deep" testing of the explanation details. + * + * @param query the query to test + * @param searcher the searcher to test the query against + * @param defaultFieldName used for displaing the query in assertion messages + */ + static void checkExplanations( CuTest* tc, Query * query, const TCHAR * defaultFieldName, Searcher * searcher ); + + /** + * Asserts that the explanation value for every document matching a + * query corresponds with the true score. Optionally does "deep" + * testing of the explanation details. + * + * @see ExplanationAsserter + * @param query the query to test + * @param searcher the searcher to test the query against + * @param defaultFieldName used for displayng the query in assertion messages + * @param deep indicates whether a deep comparison of sub-Explanation details should be executed + */ + static void checkExplanations( CuTest* tc, Query * query, const TCHAR * defaultFieldName, Searcher * searcher, bool deep ); + + /** + * Assert that an explanation has the expected score, and optionally that its + * sub-details max/sum/factor match to that score. + * + * @param q String representation of the query for assertion messages + * @param doc Document ID for assertion messages + * @param score Real score value of doc with query q + * @param deep indicates whether a deep comparison of sub-Explanation details should be executed + * @param expl The Explanation to match against score + */ + static void verifyExplanation( CuTest* tc, const TCHAR * q, int32_t doc, float_t score, bool deep, Explanation * expl ); + + static bool setEquals( set& s1, set& s2 ); + static bool stringEndsWith( const TCHAR* tszStr, const TCHAR * tszEnd ); + +}; + +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/MockHitCollector.h clucene-core-2.3.3.4/src/test/search/MockHitCollector.h --- clucene-core-0.9.21b/src/test/search/MockHitCollector.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/MockHitCollector.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2011 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#ifndef _lucene_search_MockHitCollector +#define _lucene_search_MockHitCollector + +#include "CLucene/search/SearchHeader.h" + +CL_NS_DEF(search) + +class MockHitCollector : public HitCollector +{ +public: + + MockHitCollector() : HitCollector(), collectCalls(0) {} + + virtual ~MockHitCollector() {} + + virtual void collect(const int32_t doc, const float_t score) + { + collectCalls++; + } + + int32_t getCollectCalls() const + { + return collectCalls; + } + +private: + + int32_t collectCalls; +}; + +CL_NS_END + +#endif // _lucene_search_MockHitCollector diff -Nru clucene-core-0.9.21b/src/test/search/MockScorer.h clucene-core-2.3.3.4/src/test/search/MockScorer.h --- clucene-core-0.9.21b/src/test/search/MockScorer.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/MockScorer.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,93 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2011 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#ifndef _lucene_search_MockScorer +#define _lucene_search_MockScorer + +#include "CLucene/search/Scorer.h" + +CL_NS_DEF(search) + +class MockScorer : public Scorer +{ +public: + + MockScorer(Similarity* similarity) : + Scorer(similarity), nextCalls(0), skipToCalls(0), scoreHitCollectorCalls(0), scoreCalls(0) + { + /* empty */ + } + + virtual bool next() + { + nextCalls++; + return false; + } + + virtual int32_t doc() const + { + return 0; + } + + virtual bool skipTo(int32_t target) + { + skipToCalls++; + return true; + } + + virtual Explanation* explain(int32_t doc) + { + return NULL; + } + + virtual TCHAR* toString() + { + return NULL; + } + + virtual float_t score() + { + scoreCalls++; + return 0; + } + + virtual void score(HitCollector* hc) + { + scoreHitCollectorCalls++; + } + + int32_t getNextCalls() const + { + return nextCalls; + } + + int32_t getSkipToCalls() const + { + return skipToCalls; + } + + int32_t getScoreCalls() const + { + return scoreCalls; + } + + int32_t getScoreHitCollectorCalls() const + { + return scoreHitCollectorCalls; + } + +private: + + int32_t nextCalls; + int32_t skipToCalls; + int32_t scoreHitCollectorCalls; + int32_t scoreCalls; +}; + +CL_NS_END + +#endif // _lucene_search_MockScorer diff -Nru clucene-core-0.9.21b/src/test/search/QueryUtils.cpp clucene-core-2.3.3.4/src/test/search/QueryUtils.cpp --- clucene-core-0.9.21b/src/test/search/QueryUtils.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/QueryUtils.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,376 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "QueryUtils.h" +#include "CLucene/search/Scorer.h" +#include "CheckHits.h" + +///////////////////////////////////////////////////////////////////////////// +int32_t QueryUtils::skip_op = 0; +int32_t QueryUtils::next_op = 1; +float_t QueryUtils::maxDiff = 1e-5f; + + +///////////////////////////////////////////////////////////////////////////// +class WhackyQuery : public CL_NS(search)::Query +{ +public: + WhackyQuery() {}; + virtual ~WhackyQuery() {} + + Query * clone() const + { + return _CLNEW WhackyQuery(); + } + + static const char * getClassName() + { + return "WhackyQuery"; + } + + const char * getObjectName() const + { + return getClassName(); + } + + TCHAR* toString(const TCHAR* field) const + { + return STRDUP_TtoT( _T( "My Whacky Query" )); + } + + bool equals(Query* other) const + { + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( WhackyQuery::getClassName() ))) + return false; + + return true; + } + + size_t hashCode() const + { + size_t result = Similarity::floatToByte( getBoost() ) ^ 0x97AF937F; + return result; + } +}; + +///////////////////////////////////////////////////////////////////////////// +class QueryUtilsHitCollector1 : public CL_NS(search)::HitCollector +{ +public: + int32_t * order; + int32_t * opidx; + int32_t orderLength; + int32_t * sdoc; + Scorer * scorer; + Query * q; + CuTest * tc; + +public: + void collect( const int32_t doc, const float_t score ) + { + int32_t op = order[ (opidx[ 0 ]++ ) % orderLength ]; + bool more = ( op == QueryUtils::skip_op ) ? scorer->skipTo( sdoc[ 0 ] + 1 ) : scorer->next(); + sdoc[ 0 ] = scorer->doc(); + float_t scorerScore = scorer->score(); + float_t scorerScore2 = scorer->score(); + float_t scoreDiff = score > scorerScore ? score - scorerScore : scorerScore - score; + float_t scorerDiff = scorerScore2 > scorerScore2 ? scorerScore2 - scorerScore : scorerScore - scorerScore2; + if( ! more || doc != sdoc[ 0 ] || scoreDiff > QueryUtils::maxDiff || scorerDiff > QueryUtils::maxDiff ) + { + StringBuffer buffer; + buffer.append( _T( "ERROR matching docs:\n\t" )); + + buffer.append( doc != sdoc[ 0 ] ? _T( "--> doc=" ) : _T( "doc=" )); + buffer.appendInt( sdoc[ 0 ] ); + + buffer.append( ! more ? _T( "\n\t--> tscorer.more=" ) : _T( "\n\ttscorer.more=" )); + buffer.appendBool( more ); + + buffer.append( scoreDiff > QueryUtils::maxDiff ? _T( "\n\t--> scorerScore=" ) : _T( "\n\tscorerScore=" )); + buffer.appendFloat( scorerScore, 2 ); + buffer.append( _T( " scoreDiff=" )); + buffer.appendFloat( scoreDiff, 2 ); + buffer.append( _T( " maxDiff=" )); + buffer.appendFloat( QueryUtils::maxDiff, 2 ); + + buffer.append( scorerDiff > QueryUtils::maxDiff ? _T( "\n\t--> scorerScore2=" ) : _T( "\n\tscorerScore2=" )); + buffer.appendFloat( scorerScore2, 2 ); + buffer.append( _T( " scorerDiff=" )); + buffer.appendFloat( scorerDiff, 2 ); + + buffer.append( _T( "\n\thitCollector.doc=" )); + buffer.appendInt( doc ); + buffer.append( _T( " score=" )); + buffer.appendFloat( score, 2 ); + + buffer.append( _T( "\n\t Scorer=" )); + TCHAR * tmp = scorer->toString(); + buffer.append( tmp ); + _CLDELETE_LARRAY( tmp ); + + buffer.append( _T( "\n\t Query=" )); + tmp = q->toString(); + buffer.append( tmp ); + _CLDELETE_ARRAY( tmp ); + + buffer.append( _T( "\n\t Order=" )); + for( int32_t i = 0; i < orderLength; i++) + buffer.append( order[ i ] == QueryUtils::skip_op ? _T( " skip()" ): _T( " next()" )); + + buffer.append( _T( "\n\t Op=" )); + buffer.append( op == QueryUtils::skip_op ? _T( " skip()" ) : _T( " next()" )); + + assertTrueMsg( buffer.getBuffer(), false ); + } + } +}; + +///////////////////////////////////////////////////////////////////////////// +class QueryUtilsHitCollector2 : public CL_NS(search)::HitCollector +{ +public: + int32_t * lastDoc; + Query * q; + IndexSearcher * s; + CuTest * tc; + +public: + void collect( const int32_t doc, const float_t score ) + { + for( int32_t i = lastDoc[ 0 ] + 1; i <= doc; i++ ) + { + Weight * w = q->weight( s ); + Scorer * scorer = w->scorer( s->getReader() ); + + if( ! scorer->skipTo( i ) ) + { + StringBuffer buffer; + buffer.append( _T( "query collected " )); + buffer.appendInt( doc ); + buffer.append( _T( " but skipTo(" )); + buffer.appendInt( i ); + buffer.append( _T( ") says no more docs!" )); + assertTrueMsg( buffer.getBuffer(), false ); + } + + if( doc != scorer->doc() ) + { + StringBuffer buffer; + buffer.append( _T( "query collected " )); + buffer.appendInt( doc ); + buffer.append( _T( " but skipTo(" )); + buffer.appendInt( i ); + buffer.append( _T( ") got to " )); + buffer.appendInt( scorer->doc() ); + assertTrueMsg( buffer.getBuffer(), false ); + } + + float_t skipToScore = scorer->score(); + float_t sd = skipToScore - scorer->score(); + if( ( sd < 0 ? sd * -1 : sd ) > QueryUtils::maxDiff ) + { + StringBuffer buffer; + buffer.append( _T( "unstable skipTo(" )); + buffer.appendInt( i ); + buffer.append( _T( ") score: " )); + buffer.appendFloat( skipToScore, 2 ); + buffer.append( _T( "/") ); + buffer.appendFloat( QueryUtils::maxDiff, 2 ); + assertTrueMsg( buffer.getBuffer(), false ); + } + + if( ( skipToScore > score ? skipToScore - score : score - skipToScore ) > QueryUtils::maxDiff ) + { + StringBuffer buffer; + buffer.append( _T( "query assigned doc " )); + buffer.appendInt( doc ); + buffer.append( _T( " a score of <" )); + buffer.appendFloat( score, 2 ); + buffer.append( _T( "> but skipTo(" )); + buffer.appendInt( i ); + buffer.append( _T( ") has <" )); + buffer.appendFloat( skipToScore, 2 ); + buffer.append( _T( ">!" )); + assertTrueMsg( buffer.getBuffer(), false ); + } + + _CLLDELETE( scorer ); + _CLLDELETE( w ); + } + lastDoc[ 0 ] = doc; + } +}; + +///////////////////////////////////////////////////////////////////////////// +void QueryUtils::check( CuTest* tc, Query * q ) +{ + checkHashEquals( tc, q ); +} + +void QueryUtils::checkHashEquals( CuTest* tc, Query * q ) +{ + Query * q2 = q->clone(); + checkEqual( tc, q, q2 ); + + Query * q3 = q->clone(); + q3->setBoost( 7.21792348f ); + checkUnequal( tc, q, q3 ); + + // test that a class check is done so that no exception is thrown + // in the implementation of equals() + Query * whacky = _CLNEW WhackyQuery(); + whacky->setBoost( q->getBoost() ); + checkUnequal( tc, q, whacky ); + + _CLLDELETE( q2 ); + _CLLDELETE( q3 ); + _CLLDELETE( whacky ); +} + +void QueryUtils::checkEqual( CuTest* tc, Query * q1, Query * q2 ) +{ + assertTrue( q1->equals( q2 )); + assertTrue( q2->equals( q1 )); + assertTrue( q1->hashCode() == q2->hashCode() ); +} + +void QueryUtils::checkUnequal( CuTest* tc, Query * q1, Query * q2 ) +{ + assertTrue( ! q1->equals( q2 )); + assertTrue( ! q2->equals( q1 )); + + // possible this test can fail on a hash collision... if that + // happens, please change test to use a different example. + assertTrue( q1->hashCode() != q2->hashCode()); +} + +void QueryUtils::checkExplanations( CuTest* tc, Query * q, Searcher * s ) +{ + CheckHits::checkExplanations( tc, q, NULL, s, true ); +} + +void QueryUtils::check( CuTest* tc, Query * q1, Searcher * s ) +{ + check( tc, q1 ); + if( s ) + { + if( s->getObjectName() == IndexSearcher::getClassName()) + { + IndexSearcher * is = (IndexSearcher*) s; + checkFirstSkipTo( tc, q1, is ); + checkSkipTo( tc, q1, is ); + } + + checkExplanations( tc, q1, s ); + checkSerialization( tc, q1, s ); + } +} + +void QueryUtils::checkSerialization( CuTest* tc, Query * q, Searcher * s ) +{ + Weight * w = q->weight( s ); + // TODO: Port this test +// try { +// ByteArrayOutputStream bos = new ByteArrayOutputStream(); +// ObjectOutputStream oos = new ObjectOutputStream(bos); +// oos.writeObject(w.); +// oos.close(); +// ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray())); +// ois.readObject(); +// ois.close(); +// +// //skip rquals() test for now - most weights don't overide equals() and we won't add this just for the tests. +// //TestCase.assertEquals("writeObject(w) != w. ("+w+")",w2,w); +// +// } catch (Exception e) { +// IOException e2 = new IOException("Serialization failed for "+w); +// e2.initCause(e); +// throw e2; +// } + _CLLDELETE( w ); +} + +void QueryUtils::checkSkipTo( CuTest* tc, Query * q, IndexSearcher * s ) +{ + if( BooleanQuery::getAllowDocsOutOfOrder()) + return; // in this case order of skipTo() might differ from that of next(). + + int32_t order0[] = {next_op}; + int32_t order1[] = {skip_op}; + int32_t order2[] = {skip_op, next_op}; + int32_t order3[] = {next_op, skip_op}; + int32_t order4[] = {skip_op, skip_op, next_op, next_op}; + int32_t order5[] = {next_op, next_op, skip_op, skip_op}; + int32_t order6[] = {skip_op, skip_op, skip_op, next_op, next_op}; + int32_t ordersLength[] = { 1, 1, 2, 2, 4, 4, 5 }; + int32_t * orders[] = { order0, order1, order2, order3, order4, order5, order6 }; + size_t ordersCount = 7; + + for( size_t k = 0; k < ordersCount; k++ ) + { + int32_t * order = orders[ k ]; + int32_t opidx[] = { 0 }; + + Weight * w = q->weight( s ); + Scorer * scorer = w->scorer( s->getReader() ); + + // FUTURE: ensure scorer.doc()==-1 + + int32_t * sdoc = _CL_NEWARRAY( int32_t, 1 ); + sdoc[ 0 ] = -1; + + QueryUtilsHitCollector1 hitCollector; + hitCollector.order = order; + hitCollector.opidx = opidx; + hitCollector.orderLength = ordersLength[ k ]; + hitCollector.sdoc = sdoc; + hitCollector.scorer = scorer; + hitCollector.q = q; + hitCollector.tc = tc; + + s->_search( q, NULL, &hitCollector ); + + // make sure next call to scorer is false. + int32_t op = order[ (opidx[ 0 ]++ ) % ordersLength[ k ] ]; + bool more = ( op == skip_op ) ? scorer->skipTo( sdoc[ 0 ] + 1 ) : scorer->next(); + assertTrue( ! more ); + + _CLDELETE_LARRAY( sdoc ); + _CLLDELETE( scorer ); + _CLLDELETE( w ); + } +} + +void QueryUtils::checkFirstSkipTo( CuTest* tc, Query * q, IndexSearcher * s ) +{ + int32_t lastDoc[] = {-1}; + QueryUtilsHitCollector2 hitCollector; + hitCollector.lastDoc = lastDoc; + hitCollector.q = q; + hitCollector.s = s; + hitCollector.tc = tc; + + s->_search( q, NULL, &hitCollector ); + + Weight * w = q->weight( s ); + Scorer * scorer = w->scorer( s->getReader() ); + bool more = scorer->skipTo( lastDoc[ 0 ] + 1 ); + if( more ) + { + StringBuffer buffer; + buffer.append( _T( "query's last doc was " )); + buffer.appendInt( lastDoc[ 0 ] ); + buffer.append( _T( " but skipTo(" )); + buffer.appendInt( lastDoc[ 0 ] + 1 ); + buffer.append( _T( ") got to " )); + buffer.appendInt( scorer->doc() ); + assertTrueMsg( buffer.getBuffer(), false ); + } + + _CLLDELETE( scorer ); + _CLLDELETE( w ); +} diff -Nru clucene-core-0.9.21b/src/test/search/QueryUtils.h clucene-core-2.3.3.4/src/test/search/QueryUtils.h --- clucene-core-0.9.21b/src/test/search/QueryUtils.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/QueryUtils.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_QueryUtils +#define _lucene_search_QueryUtils + +#include "test.h" + +class QueryUtils +{ +public: + static int32_t skip_op; + static int32_t next_op; + static float_t maxDiff; + +public: + /** Check the types of things query objects should be able to do. */ + static void check( CuTest* tc, Query * q ); + + /** check very basic hashCode and equals */ + static void checkHashEquals( CuTest* tc, Query * q ); + static void checkEqual( CuTest* tc, Query * q1, Query * q2 ); + static void checkUnequal( CuTest* tc, Query * q1, Query * q2); + + /** deep check that explanations of a query 'score' correctly */ + static void checkExplanations( CuTest* tc, Query * q, Searcher * s ); + + /** + * various query sanity checks on a searcher, including explanation checks. + * @see #checkExplanations + * @see #checkSkipTo + * @see #check(Query) + */ + static void check( CuTest* tc, Query * q1, Searcher * s ); + + /** alternate scorer skipTo(),skipTo(),next(),next(),skipTo(),skipTo(), etc + * and ensure a hitcollector receives same docs and scores + */ + static void checkSkipTo( CuTest* tc, Query * q, IndexSearcher * s ); + +private: + /** check that the query weight is serializable. + * @throws IOException if serialization check fail. + */ + static void checkSerialization( CuTest* tc, Query * q, Searcher * s ); + + // check that first skip on just created scorers always goes to the right doc + static void checkFirstSkipTo( CuTest* tc, Query * q, IndexSearcher * s ); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestBasics.cpp clucene-core-2.3.3.4/src/test/search/spans/TestBasics.cpp --- clucene-core-0.9.21b/src/test/search/spans/TestBasics.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestBasics.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,588 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "../QueryUtils.h" +#include "../CheckHits.h" +#include "TestBasics.h" +#include "CLucene/search/spans/SpanQuery.h" +#include "CLucene/search/spans/SpanTermQuery.h" +#include "CLucene/search/spans/SpanNearQuery.h" +#include "CLucene/search/spans/SpanNotQuery.h" +#include "CLucene/search/spans/SpanOrQuery.h" +#include "CLucene/search/spans/SpanFirstQuery.h" + +CL_NS_USE2(search,spans); + +TestBasics::TestBasics( CuTest* tc ) +{ + this->tc = tc; + this->searcher = NULL; + this->directory = NULL; +} + +TestBasics::~TestBasics() +{ + if( searcher ) + { + searcher->close(); + _CLDELETE( searcher ); + } + + if( directory ) + { + directory->close(); + _CLDELETE( directory ); + } +} + +void TestBasics::setUp() +{ + directory = _CLNEW RAMDirectory(); + Analyzer * analyzer = _CLNEW SimpleAnalyzer(); + IndexWriter * writer = _CLNEW IndexWriter( directory, analyzer, true ); + TCHAR buffer[ 200 ]; + + for( int32_t i = 0; i < 1000; i++ ) + { + Document doc; + English::IntToEnglish( i, buffer, 200 ); + doc.add( * _CLNEW Field( _T( "field" ), buffer, Field::STORE_YES | Field::INDEX_TOKENIZED )); + writer->addDocument( &doc ); + } + + writer->close(); + _CLDELETE( writer ); + _CLDELETE( analyzer ); + + searcher = _CLNEW IndexSearcher( directory ); +} + +void TestBasics::testTerm() +{ + int32_t expectedDocs[] = + { + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 570, 571, 572, 573, 574, 575, 576, 577, + 578, 579, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979 + }; + + Term * term = _CLNEW Term( _T( "field" ), _T( "seventy" )); + Query * query = new TermQuery( term ); + _CLLDECDELETE( term ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + _CLLDELETE( query ); +} + +void TestBasics::testTerm2() +{ + Term * term = _CLNEW Term( _T( "field" ), _T( "seventish" )); + Query * query = new TermQuery( term ); + _CLLDECDELETE( term ); + + checkHits( query, NULL, 0 ); + _CLLDELETE( query ); +} + +void TestBasics::testPhrase() +{ + int32_t expectedDocs[] = { 77, 177, 277, 377, 477, 577, 677, 777, 877, 977 }; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "seventy" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "seven" )); + + PhraseQuery * query = _CLNEW PhraseQuery(); + query->add( term1 ); + query->add( term2 ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + _CLLDELETE( query ); +} + +void TestBasics::testPhrase2() +{ + Term * term1 = _CLNEW Term( _T( "field" ), _T( "seventish" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "sevenon" )); + + PhraseQuery * query = _CLNEW PhraseQuery(); + query->add( term1 ); + query->add( term2 ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + + checkHits( query, NULL, 0 ); + _CLLDELETE( query ); +} + +void TestBasics::testBoolean() +{ + int32_t expectedDocs[] = {77, 777, 177, 277, 377, 477, 577, 677, 770, 771, 772, 773, 774, 775, 776, 778, 779, 877, 977}; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "seventy" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "seven" )); + + BooleanQuery * query = _CLNEW BooleanQuery(); + query->add( _CLNEW TermQuery( term1 ), true, BooleanClause::MUST ); + query->add( _CLNEW TermQuery( term2 ), true, BooleanClause::MUST ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + _CLLDELETE( query ); +} + +void TestBasics::testBoolean2() +{ + Term * term1 = _CLNEW Term( _T( "field" ), _T( "sevento" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "sevenly" )); + + BooleanQuery * query = _CLNEW BooleanQuery(); + query->add( _CLNEW TermQuery( term1 ), true, BooleanClause::MUST ); + query->add( _CLNEW TermQuery( term2 ), true, BooleanClause::MUST ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + + checkHits( query, NULL, 0 ); + _CLLDELETE( query ); +} + +void TestBasics::testSpanNearExact() +{ + int32_t expectedDocs[] = {77, 177, 277, 377, 477, 577, 677, 777, 877, 977}; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "seventy" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "seven" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * query = _CLNEW SpanNearQuery( clauses, clauses+2, 0, true, true ); + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + Explanation explanation1; + searcher->explain( query, 77, &explanation1 ); + assertTrue( explanation1.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + Explanation explanation2; + searcher->explain( query, 977, &explanation2 ); + assertTrue( explanation2.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + QueryUtils::check( tc, clauses[ 0 ] ); + QueryUtils::check( tc, clauses[ 1 ] ); + QueryUtils::checkUnequal( tc, clauses[ 0 ], clauses[ 1 ] ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + _CLLDELETE( query ); +} + +void TestBasics::testSpanNearUnordered() +{ + int32_t expectedDocs[] = {609, 629, 639, 649, 659, 669, 679, 689, 699, 906, 926, 936, 946, 956, 966, 976, 986, 996}; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "nine" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "six" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * query = _CLNEW SpanNearQuery( clauses, clauses+2, 4, false, true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + _CLLDELETE( query ); +} + +void TestBasics::testSpanNearOrdered() +{ + int32_t expectedDocs[] = {906, 926, 936, 946, 956, 966, 976, 986, 996}; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "nine" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "six" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * query = _CLNEW SpanNearQuery( clauses, clauses+2, 4, true, true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + _CLLDELETE( query ); +} + +void TestBasics::testSpanNot() +{ + int32_t expectedDocs[] = {801, 821, 831, 851, 861, 871, 881, 891}; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "eight" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "one" )); + Term * term3 = _CLNEW Term( _T( "field" ), _T( "forty" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * near = _CLNEW SpanNearQuery( clauses, clauses+2, 4, true, true ); + + SpanNotQuery * query = _CLNEW SpanNotQuery( near, _CLNEW SpanTermQuery( term3 ), true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + _CLLDECDELETE( term3 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + Explanation explanation1; + searcher->explain( query, 801, &explanation1 ); + assertTrue( explanation1.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + Explanation explanation2; + searcher->explain( query, 891, &explanation2 ); + assertTrue( explanation2.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + _CLLDELETE( query ); +} + +void TestBasics::testSpanWithMultipleNotSingle() +{ + int32_t expectedDocs[] = {801, 821, 831, 851, 861, 871, 881, 891}; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "eight" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "one" )); + Term * term3 = _CLNEW Term( _T( "field" ), _T( "forty" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * near = _CLNEW SpanNearQuery( clauses, clauses+2, 4, true, true ); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term3 ); + SpanOrQuery * orQuery = _CLNEW SpanOrQuery( clauses, clauses+1, true ); + + SpanNotQuery * query = _CLNEW SpanNotQuery( near, orQuery, true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + _CLLDECDELETE( term3 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + Explanation explanation1; + searcher->explain( query, 801, &explanation1 ); + assertTrue( explanation1.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + Explanation explanation2; + searcher->explain( query, 891, &explanation2 ); + assertTrue( explanation2.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + _CLLDELETE( query ); +} + +void TestBasics::testSpanWithMultipleNotMany() +{ + int32_t expectedDocs[] = {801, 821, 831, 851, 871, 891}; + SpanQuery * clauses[ 3 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "eight" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "one" )); + Term * term3 = _CLNEW Term( _T( "field" ), _T( "forty" )); + Term * term4 = _CLNEW Term( _T( "field" ), _T( "sixty" )); + Term * term5 = _CLNEW Term( _T( "field" ), _T( "eighty" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * near = _CLNEW SpanNearQuery( clauses, clauses+2, 4, true, true ); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term3 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term4 ); + clauses[ 2 ] = _CLNEW SpanTermQuery( term5 ); + SpanOrQuery * orQuery = _CLNEW SpanOrQuery( clauses, clauses+3, true ); + + SpanNotQuery * query = _CLNEW SpanNotQuery( near, orQuery, true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + _CLLDECDELETE( term3 ); + _CLLDECDELETE( term4 ); + _CLLDECDELETE( term5 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + Explanation explanation1; + searcher->explain( query, 801, &explanation1 ); + assertTrue( explanation1.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + Explanation explanation2; + searcher->explain( query, 891, &explanation2 ); + assertTrue( explanation2.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + _CLLDELETE( query ); +} + +void TestBasics::testNpeInSpanNearWithSpanNot() +{ + int32_t expectedDocs[] = {801, 821, 831, 851, 861, 871, 881, 891}; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "eight" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "one" )); + Term * hun = _CLNEW Term( _T( "field" ), _T( "hundred" )); + Term * term3 = _CLNEW Term( _T( "field" ), _T( "forty" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * near = _CLNEW SpanNearQuery( clauses, clauses+2, 4, true, true ); + + clauses[ 0 ] = _CLNEW SpanTermQuery( hun ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term3 ); + SpanNearQuery * exclude = _CLNEW SpanNearQuery( clauses, clauses+2, 1, true, true ); + + SpanNotQuery * query = _CLNEW SpanNotQuery( near, exclude, true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + _CLLDECDELETE( hun ); + _CLLDECDELETE( term3 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + Explanation explanation1; + searcher->explain( query, 801, &explanation1 ); + assertTrue( explanation1.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + Explanation explanation2; + searcher->explain( query, 891, &explanation2 ); + assertTrue( explanation2.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + _CLLDELETE( query ); +} + +void TestBasics::testNpeInSpanNearInSpanFirstInSpanNot() +{ + int32_t expectedDocs[] = {40,41,42,43,44,45,46,47,48,49}; + SpanQuery * clauses[ 2 ]; + int32_t n = 5; + + Term * hun = _CLNEW Term( _T( "field" ), _T( "hundred" )); + Term * term40 = _CLNEW Term( _T( "field" ), _T( "forty" )); + + SpanTermQuery * termQry40 = _CLNEW SpanTermQuery( term40 ); + clauses[ 0 ] = _CLNEW SpanTermQuery( hun ); + clauses[ 1 ] = (SpanTermQuery *) termQry40->clone(); + + SpanFirstQuery * include = _CLNEW SpanFirstQuery( termQry40, n, true ); + SpanNearQuery * near = _CLNEW SpanNearQuery( clauses, clauses+2, n-1, true, true ); + SpanFirstQuery * exclude = _CLNEW SpanFirstQuery( near, n-1, true ); + SpanNotQuery * q = _CLNEW SpanNotQuery( include, exclude, true ); + + _CLLDECDELETE( hun ); + _CLLDECDELETE( term40 ); + + checkHits( q, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + _CLLDELETE( q ); +} + +void TestBasics::testSpanFirst() +{ + int32_t expectedDocs[] = + { + 5, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599 + }; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "five" )); + SpanFirstQuery * query = _CLNEW SpanFirstQuery( _CLNEW SpanTermQuery( term1 ), 1, true ); + _CLLDECDELETE( term1 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + Explanation explanation1; + searcher->explain( query, 5, &explanation1 ); + assertTrue( explanation1.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + Explanation explanation2; + searcher->explain( query, 599, &explanation2 ); + assertTrue( explanation2.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + _CLLDELETE( query ); +} + +void TestBasics::testSpanOr() +{ + int32_t expectedDocs[] = {33, 47, 133, 147, 233, 247, 333, 347, 433, 447, 533, 547, 633, 647, 733, 747, 833, 847, 933, 947}; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "thirty" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "three" )); + Term * term3 = _CLNEW Term( _T( "field" ), _T( "forty" )); + Term * term4 = _CLNEW Term( _T( "field" ), _T( "seven" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * near1 = _CLNEW SpanNearQuery( clauses, clauses+2, 0, true, true ); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term3 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term4 ); + SpanNearQuery * near2 = _CLNEW SpanNearQuery( clauses, clauses+2, 0, true, true ); + + clauses[ 0 ] = near1; + clauses[ 1 ] = near2; + SpanOrQuery * query = _CLNEW SpanOrQuery( clauses, clauses+2, true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + _CLLDECDELETE( term3 ); + _CLLDECDELETE( term4 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + Explanation explanation1; + searcher->explain( query, 33, &explanation1 ); + assertTrue( explanation1.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + Explanation explanation2; + searcher->explain( query, 947, &explanation2 ); + assertTrue( explanation2.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + _CLLDELETE( query ); +} + +void TestBasics::testSpanExactNested() +{ + int32_t expectedDocs[] = {333}; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "three" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "hundred" )); + Term * term3 = _CLNEW Term( _T( "field" ), _T( "thirty" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanNearQuery * near1 = _CLNEW SpanNearQuery( clauses, clauses+2, 0, true, true ); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term3 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term1 ); + SpanNearQuery * near2 = _CLNEW SpanNearQuery( clauses, clauses+2, 0, true, true ); + + clauses[ 0 ] = near1; + clauses[ 1 ] = near2; + SpanNearQuery * query = _CLNEW SpanNearQuery( clauses, clauses+2, 0, true, true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + _CLLDECDELETE( term3 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + Explanation explanation1; + searcher->explain( query, 333, &explanation1 ); + assertTrue( explanation1.getDetail( 0 )->getValue() > 0.0f ); // ToDo: Fix IndexSearcher::explain() method + + _CLLDELETE( query ); +} + +void TestBasics::testSpanNearOr() +{ + int32_t expectedDocs[] = + { + 606, 607, 626, 627, 636, 637, 646, 647, + 656, 657, 666, 667, 676, 677, 686, 687, 696, 697, + 706, 707, 726, 727, 736, 737, 746, 747, + 756, 757, 766, 767, 776, 777, 786, 787, 796, 797 + }; + SpanQuery * clauses[ 2 ]; + + Term * term1 = _CLNEW Term( _T( "field" ), _T( "six" )); + Term * term2 = _CLNEW Term( _T( "field" ), _T( "seven" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term2 ); + SpanOrQuery * to1 = _CLNEW SpanOrQuery( clauses, clauses+2, true ); + + clauses[ 0 ] = _CLNEW SpanTermQuery( term2 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( term1 ); + SpanOrQuery * to2 = _CLNEW SpanOrQuery( clauses, clauses+2, true ); + + clauses[ 0 ] = to1; + clauses[ 1 ] = to2; + SpanNearQuery * query = _CLNEW SpanNearQuery( clauses, clauses+2, 10, true, true ); + + _CLLDECDELETE( term1 ); + _CLLDECDELETE( term2 ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + _CLLDELETE( query ); +} + +void TestBasics::testSpanComplex1() +{ + int32_t expectedDocs[] = + { + 606, 607, 626, 627, 636, 637, 646, 647, + 656, 657, 666, 667, 676, 677, 686, 687, 696, 697, + 706, 707, 726, 727, 736, 737, 746, 747, + 756, 757, 766, 767, 776, 777, 786, 787, 796, 797 + }; + SpanQuery * clauses[ 2 ]; + + Term * termSix = _CLNEW Term( _T( "field" ), _T( "six" )); + Term * termHun = _CLNEW Term( _T( "field" ), _T( "hundred" )); + Term * termSev = _CLNEW Term( _T( "field" ), _T( "seven" )); + + clauses[ 0 ] = _CLNEW SpanTermQuery( termSix ); + clauses[ 1 ] = _CLNEW SpanTermQuery( termHun ); + SpanNearQuery * tt1 = _CLNEW SpanNearQuery( clauses, clauses+2, 0, true, true ); + + clauses[ 0 ] = _CLNEW SpanTermQuery( termSev ); + clauses[ 1 ] = _CLNEW SpanTermQuery( termHun ); + SpanNearQuery * tt2 = _CLNEW SpanNearQuery( clauses, clauses+2, 0, true, true ); + + clauses[ 0 ] = tt1; + clauses[ 1 ] = tt2; + SpanOrQuery * to1 = _CLNEW SpanOrQuery( clauses, clauses+2, true ); + + clauses[ 0 ] = _CLNEW SpanTermQuery( termSev ); + clauses[ 1 ] = _CLNEW SpanTermQuery( termSix ); + SpanOrQuery * to2 = _CLNEW SpanOrQuery( clauses, clauses+2, true ); + + clauses[ 0 ] = to1; + clauses[ 1 ] = to2; + SpanNearQuery * query = _CLNEW SpanNearQuery( clauses, clauses+2, 100, true, true ); + + _CLLDECDELETE( termSix ); + _CLLDECDELETE( termHun ); + _CLLDECDELETE( termSev ); + + checkHits( query, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + + _CLLDELETE( query ); +} + +void TestBasics::checkHits( Query * query, int32_t * results, size_t resultsCount ) +{ + CheckHits::checkHits( tc, query, _T( "field" ), searcher, results, resultsCount ); +} diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestBasics.h clucene-core-2.3.3.4/src/test/search/spans/TestBasics.h --- clucene-core-0.9.21b/src/test/search/spans/TestBasics.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestBasics.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,64 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_TestBasics +#define _lucene_search_spans_TestBasics + +#include "test.h" + +/** + * Tests basic search capabilities. + * + *

Uses a collection of 1000 documents, each the english rendition of their + * document number. For example, the document numbered 333 has text "three + * hundred thirty three". + * + *

Tests are each a single query, and its hits are checked to ensure that + * all and only the correct documents are returned, thus providing end-to-end + * testing of the indexing and search code. + * + * @author Doug Cutting + */ +class TestBasics +{ +private: + CL_NS(search)::IndexSearcher * searcher; + CL_NS(store)::RAMDirectory * directory; + +public: + CuTest * tc; + +public: + TestBasics( CuTest* tc ); + virtual ~TestBasics(); + + void setUp(); + + void testTerm(); + void testTerm2(); + void testPhrase(); + void testPhrase2(); + void testBoolean(); + void testBoolean2(); + void testSpanNearExact(); + void testSpanNearUnordered(); + void testSpanNearOrdered(); + void testSpanNot(); + void testSpanWithMultipleNotSingle(); + void testSpanWithMultipleNotMany(); + void testNpeInSpanNearWithSpanNot(); + void testNpeInSpanNearInSpanFirstInSpanNot(); + void testSpanFirst(); + void testSpanOr(); + void testSpanExactNested(); + void testSpanNearOr(); + void testSpanComplex1(); + +private: + void checkHits( Query * query, int32_t * results, size_t resultsCount ); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestNearSpansOrdered.cpp clucene-core-2.3.3.4/src/test/search/spans/TestNearSpansOrdered.cpp --- clucene-core-0.9.21b/src/test/search/spans/TestNearSpansOrdered.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestNearSpansOrdered.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,221 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "TestNearSpansOrdered.h" +#include "../CheckHits.h" +#include "CLucene/search/spans/SpanQuery.h" +#include "CLucene/search/spans/SpanTermQuery.h" +#include "CLucene/search/spans/SpanNearQuery.h" +#include "CLucene/search/spans/Spans.h" +#include "CLucene/search/Scorer.h" + +CL_NS_USE2(search,spans); +CL_NS_USE(search); + +const TCHAR * TestNearSpansOrdered::field = _T( "field" ); +const TCHAR * TestNearSpansOrdered::docFields[] = +{ + _T( "w1 w2 w3 w4 w5" ), + _T( "w1 w3 w2 w3 zz" ), + _T( "w1 xx w2 yy w3" ), + _T( "w1 w3 xx w2 yy w3 zz" ) +}; + + +TestNearSpansOrdered::TestNearSpansOrdered( CuTest* tc ) +{ + this->tc = tc; + this->searcher = NULL; + this->directory = NULL; +} + +TestNearSpansOrdered::~TestNearSpansOrdered() +{ + if( searcher ) + { + searcher->close(); + _CLDELETE( searcher ); + } + + if( directory ) + { + directory->close(); + _CLDELETE( directory ); + } +} + +void TestNearSpansOrdered::setUp() +{ + directory = _CLNEW RAMDirectory(); + Analyzer * analyzer = _CLNEW WhitespaceAnalyzer(); + IndexWriter * writer= _CLNEW IndexWriter( directory, analyzer, true ); + + for( size_t i = 0; i < sizeof( docFields ) / sizeof( docFields[0] ); i++ ) + { + Document doc; + doc.add( * _CLNEW Field( field, docFields[ i ], Field::STORE_NO | Field::INDEX_TOKENIZED )); + writer->addDocument( &doc ); + } + + writer->close(); + _CLDELETE( writer ); + _CLDELETE( analyzer ); + + searcher = _CLNEW IndexSearcher( directory ); +} + +SpanNearQuery * TestNearSpansOrdered::makeQuery( const TCHAR * s1, const TCHAR * s2, const TCHAR * s3, int32_t slop, bool inOrder ) +{ + SpanTermQuery * clauses[ 3 ]; + Term * t1 = _CLNEW Term( field, s1 ); + Term * t2 = _CLNEW Term( field, s2 ); + Term * t3 = _CLNEW Term( field, s3 ); + clauses[ 0 ] = _CLNEW SpanTermQuery( t1 ); + clauses[ 1 ] = _CLNEW SpanTermQuery( t2 ); + clauses[ 2 ] = _CLNEW SpanTermQuery( t3 ); + _CLLDECDELETE( t1 ); + _CLLDECDELETE( t2 ); + _CLLDECDELETE( t3 ); + return _CLNEW SpanNearQuery( clauses, clauses+3, slop, inOrder, true ); +} + +SpanNearQuery * TestNearSpansOrdered::makeQuery() +{ + return makeQuery( _T( "w1" ), _T( "w2" ), _T( "w3" ), 1, true ); +} + +bool TestNearSpansOrdered::checkSpans( CL_NS2(search,spans)::Spans * spans, int32_t doc, int32_t start, int32_t end ) +{ + return spans && spans->doc() == doc && spans->end() == end && spans->start() == start; +} + +void TestNearSpansOrdered::testSpanNearQuery() +{ + int32_t expectedDocs[] = {0,1}; + + SpanNearQuery * q = makeQuery(); + CheckHits::checkHits( tc, q, field, searcher, expectedDocs, sizeof( expectedDocs ) / sizeof( expectedDocs[ 0 ] )); + _CLLDELETE( q ); +} + +void TestNearSpansOrdered::testNearSpansNext() +{ + SpanNearQuery * q = makeQuery(); + Spans * spans = q->getSpans( searcher->getReader() ); + assertTrue( spans->next()); + assertTrue( checkSpans( spans, 0, 0 ,3 )); + assertTrue( spans->next() ); + assertTrue( checkSpans( spans, 1, 0, 4 )); + assertTrue( ! spans->next() ); + _CLLDELETE( spans ); + _CLLDELETE( q ); +} + +/** + * test does not imply that skipTo(doc+1) should work exactly the + * same as next -- it's only applicable in this case since we know doc + * does not contain more than one spans + */ +void TestNearSpansOrdered::testNearSpansSkipToLikeNext() +{ + SpanNearQuery * q = makeQuery(); + Spans * spans = q->getSpans( searcher->getReader() ); + assertTrue( spans->skipTo(0) ); + assertTrue( checkSpans( spans, 0, 0, 3 )); + assertTrue( spans->skipTo(1) ); + assertTrue( checkSpans( spans, 1, 0, 4 )); + assertTrue( ! spans->skipTo(2) ); + _CLLDELETE( spans ); + _CLLDELETE( q ); +} + +void TestNearSpansOrdered::testNearSpansNextThenSkipTo() +{ + SpanNearQuery * q = makeQuery(); + Spans * spans = q->getSpans( searcher->getReader() ); + assertTrue( spans->next() ); + assertTrue( checkSpans( spans, 0, 0, 3 )); + assertTrue( spans->skipTo( 1 )); + assertTrue( checkSpans( spans, 1, 0, 4 )); + assertTrue( ! spans->next() ); + _CLLDELETE( spans ); + _CLLDELETE( q ); +} + +void TestNearSpansOrdered::testNearSpansNextThenSkipPast() +{ + SpanNearQuery * q = makeQuery(); + Spans * spans = q->getSpans( searcher->getReader() ); + assertTrue( spans->next() ); + assertTrue( checkSpans( spans, 0, 0, 3 )); + assertTrue( ! spans->skipTo( 2 )); + _CLLDELETE( spans ); + _CLLDELETE( q ); +} + +void TestNearSpansOrdered::testNearSpansSkipPast() +{ + SpanNearQuery * q = makeQuery(); + Spans * spans = q->getSpans( searcher->getReader() ); + assertTrue( ! spans->skipTo( 2 )); + _CLLDELETE( spans ); + _CLLDELETE( q ); +} + +void TestNearSpansOrdered::testNearSpansSkipTo0() +{ + SpanNearQuery * q = makeQuery(); + Spans * spans = q->getSpans( searcher->getReader() ); + assertTrue( spans->skipTo( 0 )); + assertTrue( checkSpans( spans, 0, 0, 3 )); + _CLLDELETE( spans ); + _CLLDELETE( q ); +} + +void TestNearSpansOrdered::testNearSpansSkipTo1() +{ + SpanNearQuery * q = makeQuery(); + Spans * spans = q->getSpans( searcher->getReader() ); + assertTrue( spans->skipTo(1) ); + assertTrue( checkSpans( spans, 1, 0, 4 )); + _CLLDELETE( spans ); + _CLLDELETE( q ); +} + +/** + * not a direct test of NearSpans, but a demonstration of how/when + * this causes problems + */ +void TestNearSpansOrdered::testSpanNearScorerSkipTo1() +{ + SpanNearQuery * q = makeQuery(); + Weight * w = q->_createWeight( searcher ); + Scorer * s = w->scorer( searcher->getReader() ); + assertTrue( s->skipTo( 1 )); + assertTrue( 1 == s->doc()); + _CLLDELETE( s ); + _CLLDELETE( w ); + _CLLDELETE( q ); +} + +/** + * not a direct test of NearSpans, but a demonstration of how/when + * this causes problems + */ +void TestNearSpansOrdered::testSpanNearScorerExplain() +{ + SpanNearQuery * q = makeQuery(); + Weight * w = q->_createWeight( searcher ); + Scorer * s = w->scorer( searcher->getReader() ); + Explanation * e = s->explain( 1 ); + + assertTrueMsg( _T( "Scorer explanation value for doc#1 isn't positive." ), 0.0f < e->getValue() ); + + _CLLDELETE( e ); + _CLLDELETE( s ); + _CLLDELETE( w ); + _CLLDELETE( q ); +} diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestNearSpansOrdered.h clucene-core-2.3.3.4/src/test/search/spans/TestNearSpansOrdered.h --- clucene-core-0.9.21b/src/test/search/spans/TestNearSpansOrdered.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestNearSpansOrdered.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,50 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_TestNearSpansOrdered +#define _lucene_search_spans_TestNearSpansOrdered + +#include "test.h" + +CL_CLASS_DEF2(search,spans,SpanNearQuery); +CL_CLASS_DEF2(search,spans,Spans); + +class TestNearSpansOrdered +{ +private: + CL_NS(search)::IndexSearcher * searcher; + CL_NS(store)::RAMDirectory * directory; + static const TCHAR * docFields[]; + static const TCHAR * field; + +public: + CuTest * tc; + +public: + TestNearSpansOrdered( CuTest* tc ); + virtual ~TestNearSpansOrdered(); + + void setUp(); + + void testSpanNearQuery(); + void testNearSpansNext(); + void testNearSpansSkipToLikeNext(); + void testNearSpansNextThenSkipTo(); + void testNearSpansNextThenSkipPast(); + void testNearSpansSkipPast(); + void testNearSpansSkipTo0(); + void testNearSpansSkipTo1(); + void testSpanNearScorerSkipTo1(); + void testSpanNearScorerExplain(); + +private: + CL_NS2(search,spans)::SpanNearQuery * makeQuery( const TCHAR * s1, const TCHAR * s2, const TCHAR * s3, int32_t slop, bool inOrder ); + CL_NS2(search,spans)::SpanNearQuery * makeQuery(); + + bool checkSpans( CL_NS2(search,spans)::Spans * spans, int32_t doc, int32_t start, int32_t end ); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpanExplanations.cpp clucene-core-2.3.3.4/src/test/search/spans/TestSpanExplanations.cpp --- clucene-core-0.9.21b/src/test/search/spans/TestSpanExplanations.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpanExplanations.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,269 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "TestSpanExplanations.h" +#include "CLucene/search/spans/SpanQuery.h" +#include "CLucene/search/spans/SpanOrQuery.h" +#include "CLucene/search/spans/SpanTermQuery.h" +#include "CLucene/search/spans/SpanNotQuery.h" +#include "CLucene/search/spans/SpanNearQuery.h" +#include "CLucene/search/spans/SpanFirstQuery.h" + +TestSpanExplanations::TestSpanExplanations( CuTest * tc ) +: TestExplanations( tc ) +{ +} + +TestSpanExplanations::~TestSpanExplanations() +{ +} + +void TestSpanExplanations::testST1() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = st( _T( "w1" )); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testST2() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = st( _T( "w1" )); + q->setBoost(1000); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testST4() +{ + int32_t expDocs[] = {2,3}; + SpanQuery * q = st( _T( "xx" )); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testST5() +{ + int32_t expDocs[] = {2,3}; + SpanQuery * q = st( _T( "xx" )); + q->setBoost(1000); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSF1() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = sf(( _T( "w1" )),1); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSF2() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = sf(( _T( "w1" )),1); + q->setBoost(1000); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSF4() +{ + int32_t expDocs[] = {2}; + SpanQuery * q = sf(( _T( "xx" )),2); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSF5() +{ + SpanQuery * q = sf(( _T( "yy" )),2); + qtest( q, NULL, 0 ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSF6() +{ + int32_t expDocs[] = {2}; + SpanQuery * q = sf(( _T( "yy" )),4); + q->setBoost(1000); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSO1() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = sor( _T( "w1" ), _T( "QQ" )); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSO2() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = sor( _T( "w1" ), _T( "w3" ), _T( "zz" )); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSO3() +{ + int32_t expDocs[] = {0,2,3}; + SpanQuery * q = sor( _T( "w5" ), _T( "QQ" ), _T( "yy" )); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSO4() +{ + int32_t expDocs[] = {0,2,3}; + SpanQuery * q = sor( _T( "w5" ), _T( "QQ" ), _T( "yy" )); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear1() +{ + SpanQuery * q = snear( _T( "w1" ), _T( "QQ" ),100,true); + qtest( q, NULL, 0 ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear2() +{ + int32_t expDocs[] = {2,3}; + SpanQuery * q = snear( _T( "w1" ), _T( "xx" ),100,true); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear3() +{ + int32_t expDocs[] = {2}; + SpanQuery * q = snear( _T( "w1" ), _T( "xx" ),0,true); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear4() +{ + int32_t expDocs[] = {2,3}; + SpanQuery * q = snear( _T( "w1" ), _T( "xx" ),1,true); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear5() +{ + int32_t expDocs[] = {2}; + SpanQuery * q = snear( _T( "xx" ), _T( "w1" ),0,false); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear6() +{ + SpanQuery * q = snear( _T( "w1" ), _T( "w2" ), _T( "QQ" ),100,true); + qtest( q, NULL, 0 ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear7() +{ + int32_t expDocs[] = {2,3}; + SpanQuery * q = snear( _T( "w1" ), _T( "xx" ), _T( "w2" ),100,true); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear8() +{ + int32_t expDocs[] = {2}; + SpanQuery * q = snear( _T( "w1" ), _T( "xx" ), _T( "w2" ),0,true); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear9() +{ + int32_t expDocs[] = {2,3}; + SpanQuery * q = snear( _T( "w1" ), _T( "xx" ), _T( "w2" ),1,true); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear10() +{ + int32_t expDocs[] = {2}; + SpanQuery * q = snear( _T( "xx" ), _T( "w1" ), _T( "w2" ),0,false); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNear11() +{ + int32_t expDocs[] = {0,1}; + SpanQuery * q = snear( _T( "w1" ), _T( "w2" ), _T( "w3" ),1,true); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNot1() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = snot(sf( _T( "w1" ),10),st( _T( "QQ" ))); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNot2() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = snot(sf( _T( "w1" ),10),st( _T( "QQ" ))); + q->setBoost(1000); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNot4() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = snot(sf( _T( "w1" ),10),st( _T( "xx" ))); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNot5() +{ + int32_t expDocs[] = {0,1,2,3}; + SpanQuery * q = snot(sf( _T( "w1" ),10),st( _T( "xx" ))); + q->setBoost(1000); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNot7() +{ + int32_t expDocs[] = {0,1,3}; + SpanQuery * f = snear( _T( "w1" ), _T( "w3" ),10,true); + f->setBoost(1000); + SpanQuery * q = snot(f, st( _T( "xx" ))); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} + +void TestSpanExplanations::testSNot10() +{ + int32_t expDocs[] = {0,1,3}; + SpanQuery * t = st( _T( "xx" )); + t->setBoost(10000); + SpanQuery * q = snot(snear( _T( "w1" ), _T( "w3" ),10,true), t); + qtest( q, expDocs, sizeof(expDocs)/sizeof(expDocs[0]) ); + _CLLDELETE( q ); +} diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpanExplanations.h clucene-core-2.3.3.4/src/test/search/spans/TestSpanExplanations.h --- clucene-core-0.9.21b/src/test/search/spans/TestSpanExplanations.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpanExplanations.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,57 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_TestSpanExplanations +#define _lucene_search_spans_TestSpanExplanations + +#include "../TestExplanations.h" + +/** + * TestExplanations subclass focusing on span queries + */ +class TestSpanExplanations : public TestExplanations +{ +public: + TestSpanExplanations( CuTest * tc ); + virtual ~TestSpanExplanations(); + + void testST1(); + void testST2(); + void testST4(); + void testST5(); + + void testSF1(); + void testSF2(); + void testSF4(); + void testSF5(); + void testSF6(); + + void testSO1(); + void testSO2(); + void testSO3(); + void testSO4(); + + void testSNear1(); + void testSNear2(); + void testSNear3(); + void testSNear4(); + void testSNear5(); + void testSNear6(); + void testSNear7(); + void testSNear8(); + void testSNear9(); + void testSNear10(); + void testSNear11(); + + void testSNot1(); + void testSNot2(); + void testSNot4(); + void testSNot5(); + void testSNot7(); + void testSNot10(); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpanExplanationsOfNonMatches.cpp clucene-core-2.3.3.4/src/test/search/spans/TestSpanExplanationsOfNonMatches.cpp --- clucene-core-0.9.21b/src/test/search/spans/TestSpanExplanationsOfNonMatches.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpanExplanationsOfNonMatches.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,22 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "TestSpanExplanationsOfNonMatches.h" +#include "../CheckHits.h" + +TestSpanExplanationsOfNonMatches::TestSpanExplanationsOfNonMatches( CuTest * tc ) +: TestSpanExplanations( tc ) +{ +} + +TestSpanExplanationsOfNonMatches::~TestSpanExplanationsOfNonMatches() +{ +} + +void TestSpanExplanationsOfNonMatches::qtest( Query * q, int32_t * expDocNrs, size_t expDocNrsCount ) +{ + CheckHits::checkNoMatchExplanations( tc, q, field, searcher, expDocNrs, expDocNrsCount ); +} diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpanExplanationsOfNonMatches.h clucene-core-2.3.3.4/src/test/search/spans/TestSpanExplanationsOfNonMatches.h --- clucene-core-0.9.21b/src/test/search/spans/TestSpanExplanationsOfNonMatches.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpanExplanationsOfNonMatches.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,28 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_TestSpanExplanationsOfNonMatches +#define _lucene_search_spans_TestSpanExplanationsOfNonMatches + +#include "TestSpanExplanations.h" + +/** + * subclass of TestSimpleExplanations that verifies non matches. + */ +class TestSpanExplanationsOfNonMatches : public TestSpanExplanations +{ +public: + TestSpanExplanationsOfNonMatches( CuTest * tc ); + virtual ~TestSpanExplanationsOfNonMatches(); + + /** + * Overrides superclass to ignore matches and focus on non-matches + * @see CheckHits#checkNoMatchExplanations + */ + virtual void qtest( Query * q, int32_t * expDocNrs, size_t expDocNrsCount ); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpanQueries.cpp clucene-core-2.3.3.4/src/test/search/spans/TestSpanQueries.cpp --- clucene-core-0.9.21b/src/test/search/spans/TestSpanQueries.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpanQueries.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,186 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "TestBasics.h" +#include "TestSpans.h" +#include "TestNearSpansOrdered.h" +#include "TestSpansAdvanced2.h" +#include "TestSpanExplanationsOfNonMatches.h" + +///////////////////////////////////////////////////////////////////////////// +void testBasics( CuTest * tc ) +{ + TestBasics basicsTest( tc ); + basicsTest.setUp(); + basicsTest.testTerm(); + basicsTest.testTerm2(); + basicsTest.testPhrase(); + basicsTest.testPhrase2(); + basicsTest.testBoolean(); + basicsTest.testBoolean2(); + basicsTest.testSpanNearExact(); + basicsTest.testSpanNearUnordered(); + basicsTest.testSpanNearOrdered(); + basicsTest.testSpanNot(); + basicsTest.testSpanWithMultipleNotSingle(); + basicsTest.testSpanWithMultipleNotMany(); + basicsTest.testNpeInSpanNearWithSpanNot(); + basicsTest.testNpeInSpanNearInSpanFirstInSpanNot(); + basicsTest.testSpanFirst(); + basicsTest.testSpanOr(); + basicsTest.testSpanExactNested(); + basicsTest.testSpanNearOr(); + basicsTest.testSpanComplex1(); +} + +///////////////////////////////////////////////////////////////////////////// +void testSpans( CuTest * tc ) +{ + TestSpans spansTest( tc ); + spansTest.setUp(); + spansTest.testSpanNearOrdered(); + spansTest.testSpanNearOrderedEqual(); + spansTest.testSpanNearOrderedEqual1(); + spansTest.testSpanNearOrderedOverlap(); + + // CLucene specific: SpanOr query with no clauses are not allowed + // spansTest.testSpanOrEmpty(); + + spansTest.testSpanOrSingle(); + spansTest.testSpanOrDouble(); + spansTest.testSpanOrDoubleSkip(); + spansTest.testSpanOrUnused(); + spansTest.testSpanOrTripleSameDoc(); +} + +///////////////////////////////////////////////////////////////////////////// +void testNearSpansOrdered( CuTest * tc ) +{ + TestNearSpansOrdered test( tc ); + test.setUp(); + test.testSpanNearQuery(); + test.testNearSpansNext(); + test.testNearSpansSkipToLikeNext(); + test.testNearSpansNextThenSkipTo(); + test.testNearSpansNextThenSkipPast(); + test.testNearSpansSkipPast(); + test.testNearSpansSkipTo0(); + test.testNearSpansSkipTo1(); + test.testSpanNearScorerSkipTo1(); + test.testSpanNearScorerExplain(); +} + +///////////////////////////////////////////////////////////////////////////// +void testSpansAdvanced( CuTest * tc ) +{ + TestSpansAdvanced test( tc ); + test.setUp(); + test.testBooleanQueryWithSpanQueries(); +} + +///////////////////////////////////////////////////////////////////////////// +void testSpansAdvanced2( CuTest * tc ) +{ + TestSpansAdvanced2 test( tc ); + test.setUp(); + test.testVerifyIndex(); + test.testSingleSpanQuery(); + test.testMultipleDifferentSpanQueries(); + test.testBooleanQueryWithSpanQueries(); +} + +///////////////////////////////////////////////////////////////////////////// +void testSpanExplanations( CuTest * tc ) +{ + TestSpanExplanations test( tc ); + test.setUp(); + test.testST1(); + test.testST2(); + test.testST4(); + test.testST5(); + test.testSF1(); + test.testSF2(); + test.testSF4(); + test.testSF5(); + test.testSF6(); + test.testSO1(); + test.testSO2(); + test.testSO3(); + test.testSO4(); + test.testSNear1(); + test.testSNear2(); + test.testSNear3(); + test.testSNear4(); + test.testSNear5(); + test.testSNear6(); + test.testSNear7(); + test.testSNear8(); + test.testSNear9(); + test.testSNear10(); + test.testSNear11(); + test.testSNot1(); + test.testSNot2(); + test.testSNot4(); + test.testSNot5(); + test.testSNot7(); + test.testSNot10(); +} + +///////////////////////////////////////////////////////////////////////////// +void testSpanExplanationsOfNonMatches( CuTest * tc ) +{ + TestSpanExplanationsOfNonMatches test( tc ); + test.setUp(); + test.testST1(); + test.testST2(); + test.testST4(); + test.testST5(); + test.testSF1(); + test.testSF2(); + test.testSF4(); + test.testSF5(); + test.testSF6(); + test.testSO1(); + test.testSO2(); + test.testSO3(); + test.testSO4(); + test.testSNear1(); + test.testSNear2(); + test.testSNear3(); + test.testSNear4(); + test.testSNear5(); + test.testSNear6(); + test.testSNear7(); + test.testSNear8(); + test.testSNear9(); + test.testSNear10(); + test.testSNear11(); + test.testSNot1(); + test.testSNot2(); + test.testSNot4(); + test.testSNot5(); + test.testSNot7(); + test.testSNot10(); +} + + +///////////////////////////////////////////////////////////////////////////// +// Test suite for all tests of span queries +CuSuite *testSpanQueries(void) +{ + CuSuite *suite = CuSuiteNew( _T( "CLucene SpanQuery Tests" )); + + SUITE_ADD_TEST( suite, testBasics ); + SUITE_ADD_TEST( suite, testSpans ); + SUITE_ADD_TEST( suite, testNearSpansOrdered ); + SUITE_ADD_TEST( suite, testSpansAdvanced ); + SUITE_ADD_TEST( suite, testSpansAdvanced2 ); + SUITE_ADD_TEST( suite, testSpanExplanations ); + SUITE_ADD_TEST( suite, testSpanExplanationsOfNonMatches ); + + return suite; +} + diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpansAdvanced2.cpp clucene-core-2.3.3.4/src/test/search/spans/TestSpansAdvanced2.cpp --- clucene-core-0.9.21b/src/test/search/spans/TestSpansAdvanced2.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpansAdvanced2.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,85 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "TestSpansAdvanced2.h" +#include "CLucene/search/spans/SpanTermQuery.h" + +CL_NS_USE2(search, spans); +CL_NS_USE(search); + +TestSpansAdvanced2::TestSpansAdvanced2( CuTest* tc ) : TestSpansAdvanced( tc ) +{ +} + +TestSpansAdvanced2::~TestSpansAdvanced2() +{ +} + +void TestSpansAdvanced2::addDocuments( IndexWriter * writer ) +{ + TestSpansAdvanced::addDocuments( writer ); + addDocument( writer, _T( "A" ), _T( "Should we, could we, would we?" )); + addDocument( writer, _T( "B" ), _T( "It should. Should it?" )); + addDocument( writer, _T( "C" ), _T( "It shouldn't." )); + addDocument( writer, _T( "D" ), _T( "Should we, should we, should we." )); +} + +/** + * Verifies that the index has the correct number of documents. + */ +void TestSpansAdvanced2::testVerifyIndex() +{ + IndexReader * reader = IndexReader::open( directory ); + assertEquals( 8, reader->numDocs() ); + reader->close(); + _CLDELETE( reader ); +} + +/** + * Tests a single span query that matches multiple documents. + */ +void TestSpansAdvanced2::testSingleSpanQuery() +{ + Term * t1 = _CLNEW Term( field_text, _T( "should" )); + Query * spanQuery = _CLNEW SpanTermQuery( t1 ); + const TCHAR * expectedIds[] = { _T( "B" ), _T( "D" ), _T( "1" ), _T( "2" ), _T( "3" ), _T( "4" ), _T( "A" ) }; + float_t expectedScores[] = { 0.625f, 0.45927936f, 0.35355338f, 0.35355338f, 0.35355338f, 0.35355338f, 0.26516503f, }; + assertHits( spanQuery, _T( "single span query" ), expectedIds, expectedScores, 7 ); + _CLLDELETE( spanQuery ); + _CLLDECDELETE( t1 ); +} + +/** + * Tests a single span query that matches multiple documents. + */ +void TestSpansAdvanced2::testMultipleDifferentSpanQueries() +{ + Term * t1 = _CLNEW Term( field_text, _T( "should" )); + Term * t2 = _CLNEW Term( field_text, _T( "we" )); + Query * spanQuery1 = _CLNEW SpanTermQuery( t1 ); + Query * spanQuery2 = _CLNEW SpanTermQuery( t2 ); + BooleanQuery * query = _CLNEW BooleanQuery(); + query->add( spanQuery1, true, BooleanClause::MUST ); + query->add( spanQuery2, true, BooleanClause::MUST ); + + const TCHAR * expectedIds[] = { _T( "D" ), _T( "A" ) }; + // these values were pre LUCENE-413 + // final float[] expectedScores = new float[] { 0.93163157f, 0.20698164f }; + float_t expectedScores[] = { 1.0191123f, 0.93163157f }; + assertHits( query, _T( "multiple different span queries" ), expectedIds, expectedScores, 2 ); + + _CLDELETE( query ); + _CLLDECDELETE( t1 ); + _CLLDECDELETE( t2 ); +} + +/** + * Tests two span queries. + */ +void TestSpansAdvanced2::testBooleanQueryWithSpanQueries() +{ + doTestBooleanQueryWithSpanQueries( 0.73500174f ); +} diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpansAdvanced2.h clucene-core-2.3.3.4/src/test/search/spans/TestSpansAdvanced2.h --- clucene-core-0.9.21b/src/test/search/spans/TestSpansAdvanced2.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpansAdvanced2.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_TestSpansAdvanced2 +#define _lucene_search_spans_TestSpansAdvanced2 + +#include "TestSpansAdvanced.h" + +/******************************************************************************* + * Some expanded tests to make sure my patch doesn't break other SpanTermQuery + * functionality. + * + * @author Reece Wilton + */ +class TestSpansAdvanced2 : public TestSpansAdvanced +{ +public: + TestSpansAdvanced2( CuTest* tc ); + virtual ~TestSpansAdvanced2(); + + void testVerifyIndex(); + void testSingleSpanQuery(); + void testMultipleDifferentSpanQueries(); + void testBooleanQueryWithSpanQueries(); + +protected: + virtual void addDocuments( IndexWriter * writer ); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpansAdvanced.cpp clucene-core-2.3.3.4/src/test/search/spans/TestSpansAdvanced.cpp --- clucene-core-0.9.21b/src/test/search/spans/TestSpansAdvanced.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpansAdvanced.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,136 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "TestSpansAdvanced.h" +#include "../QueryUtils.h" +#include "CLucene/search/spans/SpanTermQuery.h" + +CL_NS_USE2(search,spans); +CL_NS_USE(search); + +const TCHAR * TestSpansAdvanced::field_id = _T( "ID" ); +const TCHAR * TestSpansAdvanced::field_text = _T( "TEXT" ); + +TestSpansAdvanced::TestSpansAdvanced( CuTest* tc ) +{ + this->tc = tc; + this->searcher = NULL; + this->directory = NULL; +} + +TestSpansAdvanced::~TestSpansAdvanced() +{ + if( searcher ) + { + searcher->close(); + _CLDELETE( searcher ); + } + + if( directory ) + { + directory->close(); + _CLDELETE( directory ); + } +} + +void TestSpansAdvanced::setUp() +{ + directory = _CLNEW RAMDirectory(); + Analyzer * analyzer = _CLNEW StandardAnalyzer(); + IndexWriter * writer = _CLNEW IndexWriter( directory, analyzer, true ); + + addDocuments( writer ); + + writer->close(); + _CLDELETE( writer ); + _CLDELETE( analyzer ); + + searcher = _CLNEW IndexSearcher( directory ); +} + +void TestSpansAdvanced::addDocuments( IndexWriter * writer ) +{ + addDocument( writer, _T( "1" ), _T( "I think it should work." )); + addDocument( writer, _T( "2" ), _T( "I think it should work." )); + addDocument( writer, _T( "3" ), _T( "I think it should work." )); + addDocument( writer, _T( "4" ), _T( "I think it should work." )); +} + + +void TestSpansAdvanced::addDocument( IndexWriter * writer, const TCHAR * id, const TCHAR * text ) +{ + Document document; + document.add( * _CLNEW Field( field_id, id, Field::STORE_YES | Field::INDEX_UNTOKENIZED )); + document.add( * _CLNEW Field( field_text, text, Field::STORE_YES | Field::INDEX_TOKENIZED )); + writer->addDocument( &document ); +} + +void TestSpansAdvanced::testBooleanQueryWithSpanQueries() +{ + doTestBooleanQueryWithSpanQueries( 0.3884282f ); +} + +void TestSpansAdvanced::doTestBooleanQueryWithSpanQueries( const float_t expectedScore ) +{ + Term * t1 = _CLNEW Term( field_text, _T( "work" )); + Query * spanQuery = _CLNEW SpanTermQuery( t1 ); + BooleanQuery * query = _CLNEW BooleanQuery(); + + query->add( spanQuery, false, BooleanClause::MUST ); + query->add( spanQuery, false, BooleanClause::MUST ); + + const TCHAR * expectedIds[] = { _T( "1" ), _T( "2" ), _T( "3" ), _T( "4" ) }; + float_t expectedScores[] = { expectedScore, expectedScore, expectedScore, expectedScore }; + + assertHits( query, _T( "two span queries" ), expectedIds, expectedScores, 4 ); + + _CLLDECDELETE( t1 ); + _CLLDELETE( spanQuery ); + _CLLDELETE( query ); +} + +void TestSpansAdvanced::assertHits( Query * query, const TCHAR * description, const TCHAR ** expectedIds, float_t * expectedScores, size_t expectedCount ) +{ + float_t tolerance = 1e-5f; + + QueryUtils::check( tc, query, searcher ); + + // Hits hits = searcher.search(query); + // hits normalizes and throws things off if one score is greater than 1.0 + TopDocs * topdocs = searcher->_search( query, NULL, 10000 ); + + /***** + // display the hits + System.out.println(hits.length() + " hits for search: \"" + description + '\"'); + for (int i = 0; i < hits.length(); i++) { + System.out.println(" " + FIELD_ID + ':' + hits.doc(i).get(FIELD_ID) + " (score:" + hits.score(i) + ')'); + } + *****/ + + // did we get the hits we expected + assertEquals( expectedCount, topdocs->totalHits ); + for( size_t i = 0; i < expectedCount; i++ ) + { + //System.out.println(i + " exp: " + expectedIds[i]); + //System.out.println(i + " field: " + hits.doc(i).get(FIELD_ID)); + + int32_t id = topdocs->scoreDocs[ i ].doc; + float_t score = topdocs->scoreDocs[ i ].score; + Document doc; + searcher->doc( id, doc ); + assertTrueMsg( _T( "actual document does not match the expected one" ), 0 == _tcscmp( expectedIds[ i ], doc.get( field_id ))); + assertTrueMsg( _T( "score does not match" ), ( expectedScores[ i ] > score ? expectedScores[ i ] - score : score - expectedScores[ i ] ) < tolerance ); + + Explanation exp; + searcher->explain( query, id, &exp ); + + float_t sd = exp.getDetail( 0 )->getValue() - score; + if ( sd < 0 ) sd *= -1; + assertTrueMsg( _T( "explained score does not match" ), sd < tolerance ); + } + + _CLLDELETE( topdocs ); +} diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpansAdvanced.h clucene-core-2.3.3.4/src/test/search/spans/TestSpansAdvanced.h --- clucene-core-0.9.21b/src/test/search/spans/TestSpansAdvanced.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpansAdvanced.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,59 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_TestSpansAdvanced +#define _lucene_search_spans_TestSpansAdvanced + +#include "test.h" + +/******************************************************************************* + * Tests the span query bug in Lucene. It demonstrates that SpanTermQuerys don't + * work correctly in a BooleanQuery. + * + * @author Reece Wilton + */ +class TestSpansAdvanced +{ +protected: + CL_NS(search)::IndexSearcher * searcher; + CL_NS(store)::RAMDirectory * directory; + + static const TCHAR * field_id; + static const TCHAR * field_text; + +public: + CuTest * tc; + +public: + TestSpansAdvanced( CuTest* tc ); + virtual ~TestSpansAdvanced(); + + void setUp(); + void testBooleanQueryWithSpanQueries(); + +protected: + virtual void addDocuments( IndexWriter * writer ); + void addDocument( IndexWriter * writer, const TCHAR * id, const TCHAR * text ); + + /** + * Tests two span queries. + */ + void doTestBooleanQueryWithSpanQueries( const float_t expectedScore ); + + /** + * Checks to see if the hits are what we expected. + * + * @param query the query to execute + * @param description the description of the search + * @param expectedIds the expected document ids of the hits + * @param expectedScores the expected scores of the hits + * + * @throws IOException + */ + void assertHits( Query * query, const TCHAR * description, const TCHAR ** expectedIds, float_t * expectedScores, size_t expectedCount ); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpans.cpp clucene-core-2.3.3.4/src/test/search/spans/TestSpans.cpp --- clucene-core-0.9.21b/src/test/search/spans/TestSpans.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpans.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,300 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "../CheckHits.h" +#include "TestSpans.h" +#include "CLucene/search/spans/Spans.h" +#include "CLucene/search/spans/SpanNearQuery.h" +#include "CLucene/search/spans/SpanOrQuery.h" + +const TCHAR * TestSpans::field = _T( "field" ); +const TCHAR * TestSpans::docFields[] = +{ + _T( "w1 w2 w3 w4 w5" ), + _T( "w1 w3 w2 w3" ), + _T( "w1 xx w2 yy w3" ), + _T( "w1 w3 xx w2 yy w3" ), + _T( "u2 u2 u1" ), + _T( "u2 xx u2 u1" ), + _T( "u2 u2 xx u1" ), + _T( "u2 xx u2 yy u1" ), + _T( "u2 xx u1 u2" ), + _T( "u2 u1 xx u2" ), + _T( "u1 u2 xx u2" ), + _T( "t1 t2 t1 t3 t2 t3" ) +}; + +TestSpans::TestSpans( CuTest* tc ) +{ + this->tc = tc; + this->searcher = NULL; + this->directory = NULL; +} + +TestSpans::~TestSpans() +{ + if( searcher ) + { + searcher->close(); + _CLDELETE( searcher ); + } + + if( directory ) + { + directory->close(); + _CLDELETE( directory ); + } +} + +void TestSpans::setUp() +{ + directory = _CLNEW RAMDirectory(); + Analyzer * analyzer = _CLNEW WhitespaceAnalyzer(); + IndexWriter * writer = _CLNEW IndexWriter( directory, analyzer, true ); + + for( size_t i = 0; i < sizeof( docFields ) / sizeof( docFields[0] ); i++ ) + { + Document doc; + doc.add( * _CLNEW Field( field, docFields[ i ], Field::STORE_YES | Field::INDEX_TOKENIZED )); + writer->addDocument( &doc ); + } + + writer->close(); + _CLDELETE( writer ); + _CLDELETE( analyzer ); + + searcher = _CLNEW IndexSearcher( directory ); +} + +SpanTermQuery * TestSpans::makeSpanTermQuery( const TCHAR * text ) +{ + Term * term = _CLNEW Term( field, text ); + SpanTermQuery * query = _CLNEW SpanTermQuery( term ); + _CLDECDELETE( term ); + return query; +} + +void TestSpans::checkHits( Query * query, int32_t * results, size_t resultsCount ) +{ + CheckHits::checkHits( tc, query, field, searcher, results, resultsCount ); +} + +void TestSpans::orderedSlopTest3SQ( SpanQuery * q1, SpanQuery * q2, SpanQuery * q3, int32_t slop, int32_t * expectedDocs, size_t expectedDocsCount ) +{ + bool ordered = true; + SpanQuery ** clauses = _CL_NEWARRAY( SpanQuery *, 3 ); + clauses[ 0 ] = q1; + clauses[ 1 ] = q2; + clauses[ 2 ] = q3; + + SpanNearQuery * snq = _CLNEW SpanNearQuery( clauses, clauses+3, slop, ordered, true ); + checkHits( snq, expectedDocs, expectedDocsCount ); + + _CLLDELETE( snq ); + _CLDELETE_LARRAY( clauses ); +} + +void TestSpans::orderedSlopTest3( int32_t slop, int32_t * expectedDocs, size_t expectedDocsCount ) +{ + orderedSlopTest3SQ( + makeSpanTermQuery( _T( "w1" )), + makeSpanTermQuery( _T( "w2" )), + makeSpanTermQuery( _T( "w3" )), + slop, + expectedDocs, + expectedDocsCount ); +} + +void TestSpans::orderedSlopTest3Equal( int32_t slop, int32_t * expectedDocs, size_t expectedDocsCount ) +{ + orderedSlopTest3SQ( + makeSpanTermQuery( _T( "w1" )), + makeSpanTermQuery( _T( "w3" )), + makeSpanTermQuery( _T( "w3" )), + slop, + expectedDocs, + expectedDocsCount ); +} + +void TestSpans::orderedSlopTest1Equal( int32_t slop, int32_t * expectedDocs, size_t expectedDocsCount ) +{ + orderedSlopTest3SQ( + makeSpanTermQuery( _T( "u2" )), + makeSpanTermQuery( _T( "u2" )), + makeSpanTermQuery( _T( "u1" )), + slop, + expectedDocs, + expectedDocsCount ); +} + +void TestSpans::testSpanNearOrdered() +{ + int32_t expectedDocs[] = { 0, 1, 2, 3 }; + + orderedSlopTest3( 0, expectedDocs, 1 ); + orderedSlopTest3( 1, expectedDocs, 2 ); + orderedSlopTest3( 2, expectedDocs, 3 ); + orderedSlopTest3( 3, expectedDocs, 4 ); + orderedSlopTest3( 4, expectedDocs, 4 ); +} + +void TestSpans::testSpanNearOrderedEqual() +{ + int32_t expectedDocs[] = { 1, 3 }; + + orderedSlopTest3Equal( 0, expectedDocs, 0 ); + orderedSlopTest3Equal( 1, expectedDocs, 1 ); + orderedSlopTest3Equal( 2, expectedDocs, 1 ); + orderedSlopTest3Equal( 3, expectedDocs, 2 ); +} + +void TestSpans::testSpanNearOrderedEqual1() +{ + int32_t expectedDocs[] = { 4, 5, 6, 7 }; + + orderedSlopTest1Equal( 0, expectedDocs, 1 ); + orderedSlopTest1Equal( 0, expectedDocs, 1 ); + orderedSlopTest1Equal( 1, expectedDocs, 3 ); + orderedSlopTest1Equal( 2, expectedDocs, 4 ); + orderedSlopTest1Equal( 3, expectedDocs, 4 ); +} + +void TestSpans::testSpanNearOrderedOverlap() +{ + bool ordered = true; + int32_t slop = 1; + + SpanQuery ** clauses = _CL_NEWARRAY( SpanQuery *, 3 ); + clauses[ 0 ] = makeSpanTermQuery( _T( "t1" )); + clauses[ 1 ] = makeSpanTermQuery( _T( "t2" )); + clauses[ 2 ] = makeSpanTermQuery( _T( "t3" )); + + SpanNearQuery * snq = _CLNEW SpanNearQuery( clauses, clauses+3, slop, ordered, true ); + Spans * spans = snq->getSpans( searcher->getReader() ); + + assertTrueMsg( _T( "first range" ), spans->next() ); + assertEqualsMsg( _T( "first doc" ), 11, spans->doc()); + assertEqualsMsg( _T( "first start" ), 0, spans->start()); + assertEqualsMsg( _T( "first end" ), 4, spans->end()); + + assertTrueMsg( _T( "second range" ), spans->next()); + assertEqualsMsg( _T( "second doc" ), 11, spans->doc()); + assertEqualsMsg( _T( "second start" ), 2, spans->start()); + assertEqualsMsg( _T( "second end" ), 6, spans->end()); + + assertTrueMsg( _T( "third range" ), ! spans->next()); + + _CLLDELETE( spans ); + _CLLDELETE( snq ); + _CLDELETE_LARRAY( clauses ); +} + +void TestSpans::orSpans( const TCHAR ** terms, size_t termsCount, Spans *& spans, Query *& query ) +{ + SpanQuery ** clauses = _CL_NEWARRAY( SpanQuery *, termsCount ); + + for( size_t i = 0; i < termsCount; i++ ) + clauses[ i ] = makeSpanTermQuery( terms[ i ]); + + SpanOrQuery * soq = _CLNEW SpanOrQuery( clauses, clauses + termsCount, true ); + _CLDELETE_LARRAY( clauses ); + + spans = soq->getSpans( searcher->getReader() ); + query = soq; +} + +void TestSpans::tstNextSpans( Spans * spans, int32_t doc, int32_t start, int32_t end ) +{ + assertTrueMsg( _T( "next" ), spans->next()); + assertEqualsMsg( _T( "doc" ), doc, spans->doc()); + assertEqualsMsg( _T( "start" ), start, spans->start()); + assertEqualsMsg( _T( "end" ), end, spans->end()); +} + +void TestSpans::testSpanOrEmpty() +{ + Spans * spans; + Query * query; + orSpans( NULL, 0, spans, query ); + assertTrueMsg( _T( "empty next" ), ! spans->next()); + _CLLDELETE( spans ); + _CLLDELETE( query ); +} + +void TestSpans::testSpanOrSingle() +{ + Spans * spans; + Query * query; + const TCHAR* terms[] = { _T( "w5" ) }; + orSpans( terms, 1, spans, query ); + tstNextSpans( spans, 0, 4, 5 ); + assertTrueMsg( _T( "final next" ), ! spans->next()); + _CLLDELETE( spans ); + _CLLDELETE( query ); +} + +void TestSpans::testSpanOrDouble() +{ + Spans * spans; + Query * query; + const TCHAR* terms[] = { _T( "w5" ), _T( "yy" ) }; + orSpans( terms, 2, spans, query ); + tstNextSpans( spans, 0, 4, 5 ); + tstNextSpans( spans, 2, 3, 4 ); + tstNextSpans( spans, 3, 4, 5 ); + tstNextSpans( spans, 7, 3, 4 ); + assertTrueMsg( _T( "final next" ), ! spans->next()); + _CLLDELETE( spans ); + _CLLDELETE( query ); +} + +void TestSpans::testSpanOrDoubleSkip() +{ + Spans * spans; + Query * query; + const TCHAR* terms[] = { _T( "w5" ), _T( "yy" ) }; + orSpans( terms, 2, spans, query ); + assertTrueMsg( _T( "initial skipTo" ), spans->skipTo( 3 )); + assertEqualsMsg( _T( "doc" ), 3, spans->doc() ); + assertEqualsMsg( _T( "start" ), 4, spans->start() ); + assertEqualsMsg( _T( "end" ), 5, spans->end() ); + tstNextSpans( spans, 7, 3, 4 ); + assertTrueMsg( _T( "final next" ), ! spans->next() ); + _CLLDELETE( spans ); + _CLLDELETE( query ); +} + +void TestSpans::testSpanOrUnused() +{ + Spans * spans; + Query * query; + const TCHAR* terms[] = { _T( "w5" ), _T( "unusedTerm" ), _T( "yy" ) }; + orSpans( terms, 3, spans, query ); + tstNextSpans( spans, 0, 4, 5 ); + tstNextSpans( spans, 2, 3, 4 ); + tstNextSpans( spans, 3, 4, 5 ); + tstNextSpans( spans, 7, 3, 4 ); + assertTrueMsg( _T( "final next" ), ! spans->next()); + _CLLDELETE( spans ); + _CLLDELETE( query ); +} + +void TestSpans::testSpanOrTripleSameDoc() +{ + Spans * spans; + Query * query; + const TCHAR* terms[] = { _T( "t1" ), _T( "t2" ), _T( "t3" ) }; + orSpans( terms, 3, spans, query ); + tstNextSpans( spans, 11, 0, 1 ); + tstNextSpans( spans, 11, 1, 2 ); + tstNextSpans( spans, 11, 2, 3 ); + tstNextSpans( spans, 11, 3, 4 ); + tstNextSpans( spans, 11, 4, 5 ); + tstNextSpans( spans, 11, 5, 6 ); + assertTrueMsg( _T( "final next" ), ! spans->next()); + _CLLDELETE( spans ); + _CLLDELETE( query ); +} diff -Nru clucene-core-0.9.21b/src/test/search/spans/TestSpans.h clucene-core-2.3.3.4/src/test/search/spans/TestSpans.h --- clucene-core-0.9.21b/src/test/search/spans/TestSpans.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/spans/TestSpans.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,60 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_TestSpans +#define _lucene_search_spans_TestSpans + +#include "test.h" + +#include "CLucene/search/spans/SpanTermQuery.h" +CL_NS_USE2(search,spans) + +class TestSpans +{ +private: + CL_NS(search)::IndexSearcher * searcher; + CL_NS(store)::RAMDirectory * directory; + + static const TCHAR * docFields[]; + +public: + static const TCHAR * field; + CuTest * tc; + + +public: + TestSpans( CuTest* tc ); + virtual ~TestSpans(); + + void setUp(); + SpanTermQuery * makeSpanTermQuery( const TCHAR* text ); + + void orderedSlopTest3( int32_t slop, int32_t * expectedDocs, size_t expectedDocsCount ); + void orderedSlopTest3Equal( int32_t slop, int32_t * expectedDocs, size_t expectedDocsCount ); + void orderedSlopTest1Equal( int32_t slop, int32_t * expectedDocs, size_t expectedDocsCount ); + + void testSpanNearOrdered(); + void testSpanNearOrderedEqual(); + void testSpanNearOrderedEqual1(); + + void testSpanNearOrderedOverlap(); + + void testSpanOrEmpty(); + void testSpanOrSingle(); + void testSpanOrDouble(); + void testSpanOrDoubleSkip(); + void testSpanOrUnused(); + void testSpanOrTripleSameDoc(); + +private: + void checkHits( Query * query, int32_t * results, size_t resultsCount ); + void orderedSlopTest3SQ( SpanQuery * q1, SpanQuery * q2, SpanQuery * q3, int32_t slop, int32_t * expectedDocs, size_t expectedDocCount ); + + void orSpans( const TCHAR ** terms, size_t termsCount, Spans *& spans, Query *& query ); + void tstNextSpans( Spans * spans, int32_t doc, int32_t start, int32_t end ); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/TestBoolean.cpp clucene-core-2.3.3.4/src/test/search/TestBoolean.cpp --- clucene-core-0.9.21b/src/test/search/TestBoolean.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestBoolean.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,197 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/search/_BooleanScorer2.h" +#include "CLucene/search/Similarity.h" +#include "MockScorer.h" +#include "MockHitCollector.h" + +/// TestBooleanQuery.java, ported 5/9/2009 +void testEquality(CuTest *tc) { + BooleanQuery* bq1 = _CLNEW BooleanQuery(); + Term* t = _CLNEW Term(_T("field"), _T("value1")); + bq1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + t = _CLNEW Term(_T("field"), _T("value2")); + bq1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + BooleanQuery* nested1 = _CLNEW BooleanQuery(); + t = _CLNEW Term(_T("field"), _T("nestedvalue1")); + nested1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + t = _CLNEW Term(_T("field"), _T("nestedvalue2")); + nested1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + bq1->add(nested1, true, BooleanClause::SHOULD); + + BooleanQuery* bq2 = _CLNEW BooleanQuery(); + t = _CLNEW Term(_T("field"), _T("value1")); + bq2->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + t = _CLNEW Term(_T("field"), _T("value2")); + bq2->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + BooleanQuery* nested2 = _CLNEW BooleanQuery(); + t = _CLNEW Term(_T("field"), _T("nestedvalue1")); + nested2->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + t = _CLNEW Term(_T("field"), _T("nestedvalue2")); + nested2->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + bq2->add(nested2, true, BooleanClause::SHOULD); + + CLUCENE_ASSERT(bq1->equals(bq2)); + + _CLLDELETE(bq1); + _CLLDELETE(bq2); +} +void testException(CuTest *tc) { + try { + BooleanQuery::setMaxClauseCount(0); + CuFail(tc, _T("setMaxClauseCount(0) did not throw an exception")); + } catch (CLuceneError&) { + // okay + } +} + +/// TestBooleanScorer.java, ported 5/9/2009 +void testBooleanScorer(CuTest *tc) { + const TCHAR* FIELD = _T("category"); + RAMDirectory directory; + + const TCHAR* values[] = { _T("1"), _T("2"), _T("3"), _T("4"), NULL}; + + try { + WhitespaceAnalyzer a; + IndexWriter* writer = _CLNEW IndexWriter(&directory, &a, true); + for (size_t i = 0; values[i]!=NULL; i++) { + Document* doc = _CLNEW Document(); + doc->add(*_CLNEW Field(FIELD, values[i], Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLLDELETE(doc); + } + writer->close(); + _CLLDELETE(writer); + + BooleanQuery* booleanQuery1 = _CLNEW BooleanQuery(); + Term *t = _CLNEW Term(FIELD, _T("1")); + booleanQuery1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + t = _CLNEW Term(FIELD, _T("2")); + booleanQuery1->add(_CLNEW TermQuery(t), true, BooleanClause::SHOULD); + _CLDECDELETE(t); + + BooleanQuery* query = _CLNEW BooleanQuery(); + query->add(booleanQuery1, true, BooleanClause::MUST); + t = _CLNEW Term(FIELD, _T("9")); + query->add(_CLNEW TermQuery(t), true, BooleanClause::MUST_NOT); + _CLDECDELETE(t); + + IndexSearcher *indexSearcher = _CLNEW IndexSearcher(&directory); + Hits *hits = indexSearcher->search(query); + CLUCENE_ASSERT(2 == hits->length()); // Number of matched documents + _CLLDELETE(hits); + _CLLDELETE(indexSearcher); + + _CLLDELETE(query); + } + catch (CLuceneError& e) { + CuFail(tc, e.twhat()); + } +} + +/// TestBooleanPrefixQuery.java, ported 5/9/2009 +void testBooleanPrefixQuery(CuTest* tc) { + RAMDirectory directory; + WhitespaceAnalyzer a; + + const TCHAR* categories[] = {_T("food"), _T("foodanddrink"), + _T("foodanddrinkandgoodtimes"), _T("food and drink"), NULL}; + + Query* rw1 = NULL; + Query* rw2 = NULL; + try { + IndexWriter* writer = _CLNEW IndexWriter(&directory, &a, true); + for (size_t i = 0; categories[i]!=NULL; i++) { + Document* doc = new Document(); + doc->add(*_CLNEW Field(_T("category"), categories[i], Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + writer->addDocument(doc); + _CLLDELETE(doc); + } + writer->close(); + _CLLDELETE(writer); + + IndexReader* reader = IndexReader::open(&directory); + Term* t = _CLNEW Term(_T("category"), _T("foo")); + PrefixQuery* query = _CLNEW PrefixQuery(t); + _CLDECDELETE(t); + + rw1 = query->rewrite(reader); + + BooleanQuery* bq = _CLNEW BooleanQuery(); + bq->add(query, true, BooleanClause::MUST); + + rw2 = bq->rewrite(reader); + + reader->close(); // TODO: check necessity (_CLLDELETE(reader) alone will not do the same cleanup) + + _CLLDELETE(reader); + _CLLDELETE(bq); + } catch (CLuceneError& e) { + CuFail(tc, e.twhat()); + } + + BooleanQuery* bq1 = NULL; + if (rw1->instanceOf(BooleanQuery::getClassName())) { + bq1 = (BooleanQuery*) rw1; + } + + BooleanQuery* bq2 = NULL; + if (rw2->instanceOf(BooleanQuery::getClassName())) { + bq2 = (BooleanQuery*) rw2; + } else { + CuFail(tc, _T("Rewrite")); + } + + bool bClausesMatch = bq1->getClauseCount() == bq2->getClauseCount(); + + _CLLDELETE(rw1); + _CLLDELETE(rw2); + + if (!bClausesMatch) { + CuFail(tc, _T("Number of Clauses Mismatch")); + } +} + +void testBooleanScorer2WithProhibitedScorer(CuTest* tc) { + CL_NS(search)::DefaultSimilarity similarity; + BooleanScorer2 scorer(&similarity, 0, true); + MockScorer prohibitedScorer(&similarity); + scorer.add(&prohibitedScorer, false, true); + CL_NS(search)::MockHitCollector collector; + scorer.score(&collector); + + CuAssertIntEquals(tc, _T("Unexpected calls of next()!"), 1, prohibitedScorer.getNextCalls()); +} + +CuSuite *testBoolean(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Boolean Tests")); + + SUITE_ADD_TEST(suite, testEquality); + SUITE_ADD_TEST(suite, testException); + + SUITE_ADD_TEST(suite, testBooleanScorer); + + SUITE_ADD_TEST(suite, testBooleanPrefixQuery); + SUITE_ADD_TEST(suite, testBooleanScorer2WithProhibitedScorer); + + //_CrtSetBreakAlloc(1179); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestConstantScoreRangeQuery.cpp clucene-core-2.3.3.4/src/test/search/TestConstantScoreRangeQuery.cpp --- clucene-core-0.9.21b/src/test/search/TestConstantScoreRangeQuery.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestConstantScoreRangeQuery.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,533 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +* +------------------------------------------------------------------------------*/ + +#include "test.h" + +#include "QueryUtils.h" +#include "BaseTestRangeFilter.h" +#include "CLucene/search/ConstantScoreQuery.h" + + +/*------------------------------------------------------------------------------ +* Test based on JLucene-2.3.2 (06/08/2010) +------------------------------------------------------------------------------*/ +class TestConstantScoreRangeQuery : public BaseTestRangeFilter +{ +private: + Directory * m_pSmall; + +public: + TestConstantScoreRangeQuery( CuTest * _tc ) : BaseTestRangeFilter( _tc ), m_pSmall( NULL ) {} + ~TestConstantScoreRangeQuery() + { + if( m_pSmall ) + { + m_pSmall->close(); + _CLLDECDELETE( m_pSmall ); + } + } + + ///////////////////////////////////////////////////////////////////////////// + void setUp() + { + TCHAR tbuffer[16]; + const TCHAR* data[] = + { + _T( "A 1 2 3 4 5 6" ), + _T( "Z 4 5 6" ), + NULL, + _T( "B 2 4 5 6" ), + _T( "Y 3 5 6" ), + NULL, + _T( "C 3 6" ), + _T( "X 4 5 6" ) + }; + + m_pSmall = _CLNEW RAMDirectory(); + Analyzer * pAnalyzer = _CLNEW WhitespaceAnalyzer(); + IndexWriter * pWriter = _CLNEW IndexWriter( m_pSmall, pAnalyzer, true ); + + for( size_t i = 0; i < sizeof( data ) / sizeof( data[0] ); i++ ) + { + _itot( i, tbuffer, 10 ); + Document doc; + doc.add( * _CLNEW Field( _T( "id" ), tbuffer, Field::STORE_YES | Field::INDEX_UNTOKENIZED )); + doc.add( * _CLNEW Field( _T( "all" ), _T( "all" ), Field::STORE_YES | Field::INDEX_UNTOKENIZED )); + if( data[ i ] ) + doc.add( * _CLNEW Field( _T( "data" ), data[ i ], Field::STORE_YES | Field::INDEX_TOKENIZED )); + + pWriter->addDocument( &doc ); + } + + pWriter->optimize(); + pWriter->close(); + _CLDELETE( pWriter ); + _CLDELETE( pAnalyzer ); + } + + + ///////////////////////////////////////////////////////////////////////////// + Query * csrq(const TCHAR* f, const TCHAR* l, const TCHAR* h, bool il, bool ih) + { + return _CLNEW ConstantScoreRangeQuery( f, l, h, il, ih ); + } + + + ///////////////////////////////////////////////////////////////////////////// + void testBasics() + { + Query * q1 = csrq( _T( "data" ), _T( "1" ), _T( "6" ), true, true ); + Query * q2 = csrq( _T( "data" ), _T( "A" ) ,_T( "Z" ), true, true ); + QueryUtils::check( tc, q1 ); + QueryUtils::check( tc, q2 ); + QueryUtils::checkUnequal( tc, q1, q2 ); + _CLLDELETE( q2 ); + _CLLDELETE( q1 ); + } + + ///////////////////////////////////////////////////////////////////////////// + void testEqualScores() + { + // NOTE: uses index build in *this* setUp + + IndexReader * pReader = IndexReader::open( m_pSmall ); + IndexSearcher * pSearch = _CLNEW IndexSearcher( pReader ); + + Hits * pResult; + + // some hits match more terms then others, score should be the same + Query * q = csrq( _T( "data" ), _T( "1" ), _T( "6" ), true, true ); + pResult = pSearch->search( q ); + size_t numHits = pResult->length(); + assertEqualsMsg( _T( "wrong number of results" ), 6, numHits ); + float_t score = pResult->score( 0 ); + for( size_t i = 1; i < numHits; i++ ) + { + assertTrueMsg( _T( "score was not the same" ), score == pResult->score( i )); + } + _CLDELETE( pResult ); + _CLDELETE( q ); + + pSearch->close(); + _CLDELETE( pSearch ); + + pReader->close(); + _CLDELETE( pReader ); + } + + + ///////////////////////////////////////////////////////////////////////////// + void testBoost() + { + // NOTE: uses index build in *this* setUp + + IndexReader * pReader = IndexReader::open( m_pSmall ); + IndexSearcher * pSearch = _CLNEW IndexSearcher( pReader ); + Hits * pResult; + + // test for correct application of query normalization + // must use a non score normalizing method for this. + Query * q = csrq( _T( "data" ), _T( "1" ), _T( "6" ), true, true ); + q->setBoost( 100 ); + pResult = pSearch->search( q ); + for( size_t i = 1; i < pResult->length(); i++ ) + { + assertTrueMsg( _T( "score was not was not correct" ), 1.0f == pResult->score( i )); + } + _CLDELETE( pResult ); + _CLDELETE( q ); + + + // + // Ensure that boosting works to score one clause of a query higher + // than another. + // + Query * q1 = csrq( _T( "data" ), _T( "A" ), _T( "A" ), true, true ); // matches document #0 + q1->setBoost( .1f ); + Query * q2 = csrq( _T( "data" ), _T( "Z" ), _T( "Z" ), true, true ); // matches document #1 + BooleanQuery * bq = _CLNEW BooleanQuery( true ); + bq->add( q1, true, BooleanClause::SHOULD ); + bq->add( q2, true, BooleanClause::SHOULD ); + + pResult = pSearch->search( bq ); + assertEquals( 1, pResult->id( 0 )); + assertEquals( 0, pResult->id( 1 )); + assertTrue( pResult->score( 0 ) > pResult->score( 1 )); + _CLDELETE( pResult ); + _CLDELETE( bq ); + + q1 = csrq( _T( "data" ), _T( "A" ), _T( "A" ), true, true ); // matches document #0 + q1->setBoost( 10.0f ); + q2 = csrq( _T( "data" ), _T( "Z" ), _T( "Z" ), true, true ); // matches document #1 + bq = _CLNEW BooleanQuery( true ); + bq->add( q1, true, BooleanClause::SHOULD ); + bq->add( q2, true, BooleanClause::SHOULD ); + + pResult = pSearch->search( bq ); + assertEquals( 0, pResult->id( 0 )); + assertEquals( 1, pResult->id( 1 )); + assertTrue( pResult->score( 0 ) > pResult->score( 1 )); + _CLDELETE( pResult ); + _CLDELETE( bq ); + + pSearch->close(); + _CLDELETE( pSearch ); + + pReader->close(); + _CLDELETE( pReader ); + } + + + ///////////////////////////////////////////////////////////////////////////// + void testBooleanOrderUnAffected() + { + // NOTE: uses index build in *this* setUp + + IndexReader * pReader = IndexReader::open( m_pSmall ); + IndexSearcher * pSearch = _CLNEW IndexSearcher( pReader ); + + // first do a regular RangeQuery which uses term expansion so + // docs with more terms in range get higher scores + Term * pLower = _CLNEW Term( _T( "data" ), _T( "1" )); + Term * pUpper = _CLNEW Term( _T( "data" ), _T( "4" )); + Query * rq = _CLNEW RangeQuery( pLower, pUpper, true ); + _CLLDECDELETE( pUpper ); + _CLLDECDELETE( pLower ); + + Hits * pExpected = pSearch->search( rq ); + size_t numHits = pExpected->length(); + + // now do a boolean where which also contains a + // ConstantScoreRangeQuery and make sure the order is the same + + BooleanQuery * q = _CLNEW BooleanQuery(); + q->add( rq, true, BooleanClause::MUST ); + q->add( csrq( _T( "data" ), _T( "1" ), _T( "6" ), true, true ), true, BooleanClause::MUST ); + + Hits * pActual = pSearch->search( q ); + assertEqualsMsg( _T( "wrong number of hits" ), numHits, pActual->length() ); + for( size_t i = 0; i < numHits; i++ ) + { + assertEqualsMsg( _T( "mismatch in docid for a hit" ), pExpected->id( i ), pActual->id( i )); + } + _CLDELETE( pActual ); + _CLDELETE( pExpected ); + _CLDELETE( q ); + + pSearch->close(); + _CLDELETE( pSearch ); + + pReader->close(); + _CLDELETE( pReader ); + } + + ///////////////////////////////////////////////////////////////////////////// + void testRangeQueryId() + { + // NOTE: uses index build in *super* setUp + + IndexReader * pReader = IndexReader::open( index ); + IndexSearcher * pSearch = _CLNEW IndexSearcher( pReader ); + + int32_t medId = ((maxId - minId) / 2); + + std::tstring sMinIP = pad(minId); + std::tstring sMaxIP = pad(maxId); + std::tstring sMedIP = pad(medId); + const TCHAR* minIP = sMinIP.c_str(); + const TCHAR* maxIP = sMaxIP.c_str(); + const TCHAR* medIP = sMedIP.c_str(); + + size_t numDocs = static_cast( pReader->numDocs() ); + assertEqualsMsg( _T("num of docs"), numDocs, static_cast(1+ maxId - minId)); + + Hits * pResult; + Query * q; + // test id, bounded on both ends + + q = csrq( _T( "id" ), minIP, maxIP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "find all" ), numDocs, pResult->length() ); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), minIP, maxIP, true, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "all but last" ), numDocs-1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), minIP, maxIP, false, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "all but first" ), numDocs-1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), minIP, maxIP, false,false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "all but ends" ), numDocs-2, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), medIP, maxIP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "med and up" ), 1+maxId-medId, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), minIP, medIP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "up to med" ), 1+medId-minId, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + // unbounded id + + q = csrq( _T( "id" ), minIP, NULL, true, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "min and up" ), numDocs, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), NULL, maxIP, false, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "max and down" ), numDocs, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), minIP, NULL, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "not min, but up" ), numDocs-1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), NULL, maxIP, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "not max, but down" ), numDocs-1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), medIP, maxIP, true, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "med and up, not max" ), maxId-medId, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), minIP, medIP, false,true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "not min, up to med" ), medId-minId, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + // very small sets + + q = csrq( _T( "id" ), minIP, minIP, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "min,min,F,F" ), 0, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), medIP, medIP, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "med,med,F,F" ), 0, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id") , maxIP, maxIP, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "max,max,F,F" ), 0, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), minIP, minIP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "min,min,T,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), NULL, minIP, false, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "nul,min,F,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), maxIP, maxIP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "max,max,T,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), maxIP, NULL, true, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "max,nul,T,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "id" ), medIP, medIP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "med,med,T,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + pSearch->close(); + _CLDELETE( pSearch ); + + pReader->close(); + _CLDELETE( pReader ); + } + + + ///////////////////////////////////////////////////////////////////////////// + void testRangeQueryRand() + { + // NOTE: uses index build in *super* setUp + + IndexReader * pReader = IndexReader::open( index ); + IndexSearcher * pSearch = _CLNEW IndexSearcher( pReader ); + + std::tstring sMinRP = pad(minR); + std::tstring sMaxRP = pad(maxR); + const TCHAR* minRP = sMinRP.c_str(); + const TCHAR* maxRP = sMaxRP.c_str(); + + size_t numDocs = static_cast( pReader->numDocs() ); + assertEqualsMsg( _T("num of docs"), numDocs, static_cast(1+ maxId - minId)); + + Hits * pResult; + Query * q; + + // test extremes, bounded on both ends + + q = csrq( _T( "rand" ), minRP, maxRP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "find all" ), numDocs, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), minRP, maxRP, true, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "all but biggest" ), numDocs-1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), minRP, maxRP, false, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "all but smallest" ), numDocs-1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), minRP, maxRP, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "all but extremes" ), numDocs-2, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + // unbounded + + q = csrq( _T( "rand" ), minRP, NULL, true, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "smallest and up" ), numDocs, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), NULL, maxRP, false, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "biggest and down" ), numDocs, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), minRP, NULL, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "not smallest, but up" ), numDocs-1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), NULL, maxRP, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "not biggest, but down" ), numDocs-1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + // very small sets + + q = csrq( _T( "rand" ), minRP, minRP, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "min,min,F,F" ), 0, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), maxRP, maxRP, false, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "max,max,F,F" ), 0, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), minRP, minRP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "min,min,T,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), NULL, minRP, false, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "nul,min,F,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), maxRP, maxRP, true, true ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "max,max,T,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + q = csrq( _T( "rand" ), maxRP, NULL, true, false ); + pResult = pSearch->search( q ); + assertEqualsMsg( _T( "max,nul,T,T" ), 1, pResult->length()); + _CLDELETE( pResult ); _CLDELETE( q ); + + pSearch->close(); + _CLDELETE( pSearch ); + + pReader->close(); + _CLDELETE( pReader ); + } + + + ///////////////////////////////////////////////////////////////////////////// + // CLucene specific + // Visual Studio 2005 shows memory leaks for this test, but some other + // tools do not detect any memory leaks. So what is right? + // IN VC80 shows memory leaks ONLY if both sub-queries are added as + // MUST BooleanClauses. + void testBooleanMemLeaks() + { + IndexReader * pReader = IndexReader::open( m_pSmall ); + IndexSearcher * pSearch = _CLNEW IndexSearcher( pReader ); + + Query * q1 = csrq( _T( "data" ), _T( "A" ), _T( "A" ), true, true ); // matches document #0 + Query * q2 = csrq( _T( "data" ), _T( "Z" ), _T( "Z" ), true, true ); // matches document #1 + BooleanQuery * bq = _CLNEW BooleanQuery( true ); + bq->add( q1, true, BooleanClause::MUST ); + bq->add( q2, true, BooleanClause::MUST ); + + Hits * pResult = pSearch->search( bq ); + + _CLDELETE( pResult ); + _CLDELETE( bq ); + + pSearch->close(); + _CLDELETE( pSearch ); + + pReader->close(); + _CLDELETE( pReader ); + } + + + ///////////////////////////////////////////////////////////////////////////// + void runTests() + { + setUp(); + testBasics(); + testEqualScores(); + testBoost(); + testBooleanOrderUnAffected(); + testRangeQueryId(); + testRangeQueryRand(); + testBooleanMemLeaks(); + } +}; + + +///////////////////////////////////////////////////////////////////////////// +void testConstantScoreRangeQuery( CuTest * pTc ) +{ + /// Run Java Lucene tests + TestConstantScoreRangeQuery tester( pTc ); + tester.runTests(); +} + + +///////////////////////////////////////////////////////////////////////////// +CuSuite *testConstantScoreQueries(void) +{ + CuSuite *suite = CuSuiteNew( _T( "CLucene ConstScoreQuery Test" )); + + SUITE_ADD_TEST(suite, testConstantScoreRangeQuery); + + return suite; +} + + +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestDateFilter.cpp clucene-core-2.3.3.4/src/test/search/TestDateFilter.cpp --- clucene-core-0.9.21b/src/test/search/TestDateFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestDateFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,201 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + + void testBefore(CuTest *tc) { + // create an index + char fsdir[CL_MAX_PATH]; + _snprintf(fsdir,CL_MAX_PATH,"%s/%s",cl_tempDir, "dfindex"); + + FSDirectory* indexStore = FSDirectory::getDirectory( fsdir); + Analyzer* a = _CLNEW SimpleAnalyzer(); + IndexWriter* writer = _CLNEW IndexWriter(indexStore, a, true); + int64_t now = Misc::currentTimeMillis()/1000; + + Document doc; + // add time that is in the past + TCHAR* tn = DateField::timeToString(now - 1000); + doc.add(*_CLNEW Field(_T("datefield"), tn,Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + _CLDELETE_CARRAY(tn); + doc.add(*_CLNEW Field(_T("body"), _T("Today is a very sunny day in New York City"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(&doc); + writer->close(); + _CLDELETE( writer ); + + IndexReader* reader = IndexReader::open(indexStore); + IndexSearcher* searcher = _CLNEW IndexSearcher(reader); + + // filter that should preserve matches + DateFilter* df1 = DateFilter::Before(_T("datefield"), now); + + // filter that should discard matches + DateFilter* df2 = DateFilter::Before(_T("datefield"), now - 999999); + + // search something that doesn't exist with DateFilter + Term* term = _CLNEW Term(_T("body"), _T("NoMatchForThis")); + Query* query1 = _CLNEW TermQuery(term); + _CLDECDELETE(term); + + // search for something that does exists + term=_CLNEW Term(_T("body"), _T("sunny")); + Query* query2 = _CLNEW TermQuery(term); + _CLDECDELETE(term); + + Hits* result = NULL; + + // ensure that queries return expected results without DateFilter first + result = searcher->search(query1); + CLUCENE_ASSERT(0 == result->length()); + _CLDELETE(result); + + result = searcher->search(query2); + CLUCENE_ASSERT(1 == result->length()); + _CLDELETE(result); + + // run queries with DateFilter + result = searcher->search(query1, df1); + CLUCENE_ASSERT(0 == result->length()); + _CLDELETE(result); + + result = searcher->search(query1, df2); + CLUCENE_ASSERT(0 == result->length()); + _CLDELETE(result); + + result = searcher->search(query2, df1); + CLUCENE_ASSERT(1 == result->length()); + _CLDELETE(result); + + result = searcher->search(query2, df2); + CLUCENE_ASSERT(0 == result->length()); + _CLDELETE(result); + + reader->close(); + searcher->close(); + _CLDELETE(a) + _CLDELETE(reader); + _CLDELETE(searcher); + _CLDELETE(query1); + _CLDELETE(query2); + _CLDELETE(df1); + _CLDELETE(df2); + + indexStore->close(); + _CLDECDELETE(indexStore); + } + + void testAfter(CuTest *tc) { + // create an index + RAMDirectory* indexStore = _CLNEW RAMDirectory; + Analyzer* a = _CLNEW SimpleAnalyzer(); + IndexWriter* writer = _CLNEW IndexWriter(indexStore, a, true); + int64_t now = Misc::currentTimeMillis()/1000; + + // add time that is in the future + TCHAR* tf = DateField::timeToString(now + 888888); + + Document* doc = _CLNEW Document; + doc->add(*_CLNEW Field(_T("datefield"), tf,Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + _CLDELETE_CARRAY(tf); + + doc->add(*_CLNEW Field(_T("body"), _T("Today is a very sunny day in New York City"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLDELETE(doc); + + writer->close(); + _CLDELETE( writer ); + + //read the index + IndexReader* reader = IndexReader::open(indexStore); + IndexSearcher* searcher = _CLNEW IndexSearcher(reader); + + // filter that should preserve matches + DateFilter* df1 = DateFilter::After(_T("datefield"), now); + + // filter that should discard matches + DateFilter* df2 = DateFilter::After(_T("datefield"), now + 999999); + + // search something that doesn't exist with DateFilter + Term* term = _CLNEW Term(_T("body"), _T("NoMatchForThis")); + Query* query1 = _CLNEW TermQuery(term); + _CLDECDELETE(term); + + // search for something that does exists + term=_CLNEW Term(_T("body"), _T("sunny")); + Query* query2 = _CLNEW TermQuery(term); + _CLDECDELETE(term); + + Hits* result = NULL; + + // ensure that queries return expected results without DateFilter first + result = searcher->search(query1); + CLUCENE_ASSERT(0 == result->length()); + _CLDELETE(result); + + result = searcher->search(query2); + CLUCENE_ASSERT(1 == result->length()); + _CLDELETE(result); + + // run queries with DateFilter + result = searcher->search(query1, df1); + CLUCENE_ASSERT(0 == result->length()); + _CLDELETE(result); + + result = searcher->search(query1, df2); + CLUCENE_ASSERT(0 == result->length()); + _CLDELETE(result); + + result = searcher->search(query2, df1); + CLUCENE_ASSERT(1 == result->length()); + _CLDELETE(result); + + result = searcher->search(query2, df2); + CLUCENE_ASSERT(0 == result->length()); + _CLDELETE(result); + + reader->close(); + searcher->close(); + + _CLDELETE(query1); + _CLDELETE(query2); + _CLDELETE(df1); + _CLDELETE(df2); + _CLDELETE(reader); + _CLDELETE(searcher); + _CLDELETE(a); + indexStore->close(); + _CLDECDELETE(indexStore); + } + + void testDateFilterDestructor(CuTest *tc){ + char loc[1024]; + strcpy(loc, clucene_data_location); + strcat(loc, "/reuters-21578-index"); + + CuAssert(tc,_T("Index does not exist"),Misc::dir_Exists(loc)); + IndexReader* reader = IndexReader::open(loc); + int64_t now = Misc::currentTimeMillis()/1000; + DateFilter* df1 = DateFilter::After(_T("datefield"), now); + BitSet* bs = df1->bits(reader); + _CLDELETE(bs); + _CLDELETE(df1); + + reader->close(); + _CLDELETE(reader); + } + + +CuSuite *testdatefilter(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene DateFilter Test")); + + SUITE_ADD_TEST(suite, testDateFilterDestructor); + SUITE_ADD_TEST(suite, testBefore); + SUITE_ADD_TEST(suite, testAfter); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestExplanations.cpp clucene-core-2.3.3.4/src/test/search/TestExplanations.cpp --- clucene-core-0.9.21b/src/test/search/TestExplanations.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestExplanations.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,237 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "TestExplanations.h" +#include "CheckHits.h" +#include "CLucene/search/spans/SpanQuery.h" +#include "CLucene/search/spans/SpanOrQuery.h" +#include "CLucene/search/spans/SpanTermQuery.h" +#include "CLucene/search/spans/SpanNotQuery.h" +#include "CLucene/search/spans/SpanNearQuery.h" +#include "CLucene/search/spans/SpanFirstQuery.h" + + +///////////////////////////////////////////////////////////////////////////// +const TCHAR * TestExplanations::field = _T( "field" ); +const TCHAR * TestExplanations::docFields[] = +{ + _T( "w1 w2 w3 w4 w5" ), + _T( "w1 w3 w2 w3 zz" ), + _T( "w1 xx w2 yy w3" ), + _T( "w1 w3 xx w2 yy w3 zz" ) +}; + + +///////////////////////////////////////////////////////////////////////////// +TestExplanations::ItemizedFilter::ItemizedFilter( int32_t * docs, size_t docsCount ) +{ + this->docs = _CL_NEWARRAY( int32_t, docsCount ); + memcpy( this->docs, docs, docsCount * sizeof( int32_t )); + this->docsCount = docsCount; +} +TestExplanations::ItemizedFilter::~ItemizedFilter() +{ + _CLDELETE_LARRAY( docs ); + docsCount = 0; +} + +CL_NS(util)::BitSet * TestExplanations::ItemizedFilter::bits( CL_NS(index)::IndexReader * r ) +{ + CL_NS(util)::BitSet * b = _CLNEW CL_NS(util)::BitSet( r->maxDoc() ); + for( size_t i = 0; i < docsCount; i++ ) + b->set( docs[ i ] ); + return b; +} + +///////////////////////////////////////////////////////////////////////////// +TestExplanations::TestExplanations( CuTest* tc ) +{ + this->searcher = NULL; + this->directory = NULL; + this->qp = NULL; + this->qpAnalyzer = NULL; + this->tc = tc; +} + +TestExplanations::~TestExplanations() +{ + if( searcher ) + { + searcher->close(); + _CLDELETE( searcher ); + } + + if( directory ) + { + directory->close(); + _CLDELETE( directory ); + } + + if( qp ) + { + _CLDELETE( qp ); + } + + if( qpAnalyzer ) + { + _CLDELETE( qpAnalyzer ); + } +} + +void TestExplanations::setUp() +{ + directory = _CLNEW RAMDirectory(); + qpAnalyzer = _CLNEW WhitespaceAnalyzer(); + qp = _CLNEW QueryParser( field, qpAnalyzer ); + + IndexWriter * writer= _CLNEW IndexWriter( directory, qpAnalyzer, true ); + for( size_t i = 0; i < sizeof( docFields ) / sizeof( docFields[0] ); i++ ) + { + Document doc; + doc.add( * _CLNEW Field( field, docFields[ i ], Field::STORE_NO | Field::INDEX_TOKENIZED )); + writer->addDocument( &doc ); + } + writer->close(); + _CLDELETE( writer ); + + searcher = _CLNEW IndexSearcher( directory ); +} + +Query * TestExplanations::makeQuery( const TCHAR * queryText ) +{ + return qp->parse( queryText ); +} + +void TestExplanations::qtest( const TCHAR * queryText, int32_t * expDocNrs, size_t expDocNrsCount ) +{ + Query * q = makeQuery( queryText ); + qtest( q , expDocNrs, expDocNrsCount ); + _CLLDELETE( q ); +} + +void TestExplanations::qtest( Query * q, int32_t * expDocNrs, size_t expDocNrsCount ) +{ + CheckHits::checkHitCollector( tc, q, field, searcher, expDocNrs, expDocNrsCount ); +} + +void TestExplanations::bqtest( Query * q, int32_t * expDocNrs, size_t expDocNrsCount ) +{ + qtest( reqB( q ), expDocNrs, expDocNrsCount ); + qtest( optB( q ), expDocNrs, expDocNrsCount ); +} + +void TestExplanations::bqtest( const TCHAR * queryText, int32_t * expDocNrs, size_t expDocNrsCount ) +{ + Query * q = makeQuery( queryText ); + bqtest( q, expDocNrs, expDocNrsCount ); + _CLLDELETE( q ); +} + +Term ** TestExplanations::ta( const TCHAR ** s, size_t count ) +{ + Term ** t = _CL_NEWARRAY( Term *, count ); + for( size_t i = 0; i < count; i++ ) + t[ i ] = _CLNEW Term( field, s[ i ] ); + + return t; +} + +SpanTermQuery * TestExplanations::st( const TCHAR * s ) +{ + Term * t = _CLNEW Term( field, s ); + SpanTermQuery * q = _CLNEW SpanTermQuery( t ); + _CLLDECDELETE( t ); + return q; +} + +SpanNotQuery * TestExplanations::snot( SpanQuery * i, SpanQuery * e ) +{ + return _CLNEW SpanNotQuery( i, e, true ); +} + +SpanOrQuery * TestExplanations::sor( const TCHAR * s, const TCHAR * e ) +{ + return sor( st( s ), st( e )); +} + +SpanOrQuery * TestExplanations::sor( SpanQuery * s, SpanQuery * e ) +{ + SpanQuery * clauses[] = { s, e }; + return _CLNEW SpanOrQuery( clauses, clauses+2, true ); +} + +SpanOrQuery * TestExplanations::sor( const TCHAR * s, const TCHAR * m, const TCHAR * e) +{ + return sor(st(s), st(m), st(e)); +} + +SpanOrQuery * TestExplanations::sor( SpanQuery * s, SpanQuery * m, SpanQuery * e ) +{ + SpanQuery * clauses[] = { s, m, e }; + return _CLNEW SpanOrQuery( clauses, clauses+3, true ); +} + +SpanNearQuery * TestExplanations::snear( const TCHAR * s, const TCHAR * e, int32_t slop, bool inOrder ) +{ + return snear( st(s), st(e), slop, inOrder ); +} + +SpanNearQuery * TestExplanations::snear( SpanQuery * s, SpanQuery * e, int32_t slop, bool inOrder ) +{ + SpanQuery * clauses[] = { s, e }; + return _CLNEW SpanNearQuery( clauses, clauses+2, slop, inOrder, true ); +} + +SpanNearQuery * TestExplanations::snear( const TCHAR * s, const TCHAR * m, const TCHAR * e, int32_t slop, bool inOrder ) +{ + return snear( st( s ), st( m ), st( e ), slop, inOrder ); +} + +SpanNearQuery * TestExplanations::snear( SpanQuery * s, SpanQuery * m, SpanQuery * e, int32_t slop, bool inOrder ) +{ + SpanQuery * clauses[] = { s, m, e }; + return _CLNEW SpanNearQuery( clauses, clauses+3, slop, inOrder, true ); +} + +SpanFirstQuery * TestExplanations::sf( const TCHAR * s, int32_t b ) +{ + return _CLNEW SpanFirstQuery( st( s ), b, true ); +} + +Query * TestExplanations::optB( const TCHAR * q ) +{ + return optB( makeQuery( q )); +} + +Query * TestExplanations::optB( Query * q ) +{ + Term * t = _CLNEW Term( _T( "NEVER" ), _T( "MATCH" )); + TermQuery * tq = _CLNEW TermQuery( t ); + _CLLDECDELETE( t ); + + BooleanQuery * bq = _CLNEW BooleanQuery( true ); + bq->add( q, true, BooleanClause::SHOULD ); + bq->add( tq, true, BooleanClause::MUST_NOT ); + return bq; +} + +Query * TestExplanations::reqB( const TCHAR * q ) +{ + return reqB( makeQuery( q )); +} + +Query * TestExplanations::reqB( Query * q ) +{ + Term * t = _CLNEW Term( field, _T( "w1" )); + TermQuery * tq = _CLNEW TermQuery( t ); + _CLLDECDELETE( t ); + + BooleanQuery * bq = _CLNEW BooleanQuery( true ); + bq->add( q, BooleanClause::MUST ); + bq->add( tq, BooleanClause::SHOULD ); + return bq; +} + diff -Nru clucene-core-0.9.21b/src/test/search/TestExplanations.h clucene-core-2.3.3.4/src/test/search/TestExplanations.h --- clucene-core-0.9.21b/src/test/search/TestExplanations.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestExplanations.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,151 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_TestExplanations +#define _lucene_search_TestExplanations + +#include "test.h" + +CL_CLASS_DEF2(search,spans,SpanQuery); +CL_CLASS_DEF2(search,spans,SpanOrQuery); +CL_CLASS_DEF2(search,spans,SpanTermQuery); +CL_CLASS_DEF2(search,spans,SpanNotQuery); +CL_CLASS_DEF2(search,spans,SpanNearQuery); +CL_CLASS_DEF2(search,spans,SpanFirstQuery); + +CL_NS_USE2(search,spans); + +/** + * Tests primative queries (ie: that rewrite to themselves) to + * insure they match the expected set of docs, and that the score of each + * match is equal to the value of the scores explanation. + * + *

+ * The assumption is that if all of the "primative" queries work well, + * then anythingthat rewrites to a primative will work well also. + *

+ * + * @see "Subclasses for actual tests" + */ +class TestExplanations +{ +public: + /** A filter that only lets the specified document numbers pass */ + class ItemizedFilter : public CL_NS(search)::Filter + { + public: + int32_t * docs; + size_t docsCount; + + public: + ItemizedFilter( int32_t * docs, size_t docsCount ); + virtual ~ItemizedFilter(); + CL_NS(util)::BitSet * bits( CL_NS(index)::IndexReader * r ); + }; + +protected: + CL_NS(search)::IndexSearcher * searcher; + CL_NS(store)::RAMDirectory * directory; + CL_NS(queryParser)::QueryParser * qp; + CL_NS(analysis)::Analyzer * qpAnalyzer; + + static const TCHAR * docFields[]; + static const TCHAR * field; + + CuTest * tc; + +public: + TestExplanations( CuTest* tc ); + virtual ~TestExplanations(); + + void setUp(); + + Query * makeQuery( const TCHAR * queryText ); + + /** check the expDocNrs first, then check the query (and the explanations) */ + virtual void qtest( const TCHAR * queryText, int32_t * expDocNrs, size_t expDocNrsCount ); + + /** check the expDocNrs first, then check the query (and the explanations) */ + virtual void qtest( Query * q, int32_t * expDocNrs, size_t expDocNrsCount ); + + /** + * Tests a query using qtest after wrapping it with both optB and reqB + * @see #qtest + * @see #reqB + * @see #optB + */ + virtual void bqtest( Query * q, int32_t * expDocNrs, size_t expDocNrsCount ); + + /** + * Tests a query using qtest after wrapping it with both optB and reqB + * @see #qtest + * @see #reqB + * @see #optB + */ + virtual void bqtest( const TCHAR * queryText, int32_t * expDocNrs, size_t expDocNrsCount ); + + /** helper for generating MultiPhraseQueries */ + static Term ** ta( const TCHAR ** s, size_t count ); + + /** MACRO for SpanTermQuery */ + CL_NS2(search,spans)::SpanTermQuery * st( const TCHAR * s); + + /** MACRO for SpanNotQuery */ + SpanNotQuery * snot( SpanQuery * i, SpanQuery * e); + + /** MACRO for SpanOrQuery containing two SpanTerm queries */ + SpanOrQuery * sor( const TCHAR * s, const TCHAR * e ); + + /** MACRO for SpanOrQuery containing two SpanQueries */ + SpanOrQuery * sor( SpanQuery * s, SpanQuery * e ); + + /** MACRO for SpanOrQuery containing three SpanTerm queries */ + SpanOrQuery * sor( const TCHAR * s, const TCHAR * m, const TCHAR * e ); + + /** MACRO for SpanOrQuery containing two SpanQueries */ + SpanOrQuery * sor( SpanQuery * s, SpanQuery * m, SpanQuery * e ); + + /** MACRO for SpanNearQuery containing two SpanTerm queries */ + SpanNearQuery * snear( const TCHAR * s, const TCHAR * e, int32_t slop, bool inOrder ); + + /** MACRO for SpanNearQuery containing two SpanQueries */ + SpanNearQuery * snear( SpanQuery * s, SpanQuery * e, int32_t slop, bool inOrder ); + + /** MACRO for SpanNearQuery containing three SpanTerm queries */ + SpanNearQuery * snear( const TCHAR * s, const TCHAR * m, const TCHAR * e, int32_t slop, bool inOrder ); + + /** MACRO for SpanNearQuery containing three SpanQueries */ + SpanNearQuery * snear( SpanQuery * s, SpanQuery * m, SpanQuery * e, int32_t slop, bool inOrder ); + + /** MACRO for SpanFirst(SpanTermQuery) */ + SpanFirstQuery * sf( const TCHAR * s, int32_t b ); + + /** + * MACRO: Wraps a Query in a BooleanQuery so that it is optional, along + * with a second prohibited clause which will never match anything + */ + Query * optB( const TCHAR * q ); + + /** + * MACRO: Wraps a Query in a BooleanQuery so that it is optional, along + * with a second prohibited clause which will never match anything + */ + Query * optB( Query * q ); + + /** + * MACRO: Wraps a Query in a BooleanQuery so that it is required, along + * with a second optional clause which will match everything + */ + Query * reqB( const TCHAR * q ); + + /** + * MACRO: Wraps a Query in a BooleanQuery so that it is required, along + * with a second optional clause which will match everything + */ + Query * reqB( Query * q ); +}; +#endif + diff -Nru clucene-core-0.9.21b/src/test/search/TestExtractTerms.cpp clucene-core-2.3.3.4/src/test/search/TestExtractTerms.cpp --- clucene-core-0.9.21b/src/test/search/TestExtractTerms.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestExtractTerms.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,309 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Jiri Splichal and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + + +///////////////////////////////////////////////////////////////////////////// +Directory * setUpIndex() +{ + TCHAR tbuffer[16]; + const TCHAR* data[] = + { + _T( "aaaaa aaaab aaabb aabbb abbbb bbbbb" ), + _T( "aaaaa aaaac aaacc aaccc acccc ccccc" ) + }; + + RAMDirectory * pDirectory = _CLNEW RAMDirectory(); + WhitespaceAnalyzer analyzer; + IndexWriter writer( pDirectory, &analyzer, true ); + for( int i = 0; i < sizeof( data ) / sizeof( data[0] ); i++ ) + { + _itot( i, tbuffer, 10 ); + Document doc; + doc.add( * _CLNEW Field( _T( "id" ), tbuffer, Field::STORE_YES | Field::INDEX_UNTOKENIZED )); + doc.add( * _CLNEW Field( _T( "data" ), data[ i ], Field::STORE_YES | Field::INDEX_TOKENIZED )); + writer.addDocument( &doc ); + } + + writer.optimize(); + writer.close(); + return pDirectory; +} + + +///////////////////////////////////////////////////////////////////////////// +void closeIndex( Directory * pDirectory ) +{ + if( pDirectory ) + { + pDirectory->close(); + _CLLDECDELETE( pDirectory ); + } +} + + +///////////////////////////////////////////////////////////////////////////// +void clearTermSet( TermSet& termSet ) +{ + for( TermSet::iterator itTerms = termSet.begin(); itTerms != termSet.end(); itTerms++ ) + { + Term * pTerm = *itTerms; + _CLLDECDELETE( pTerm ); + } + termSet.clear(); +} + + +///////////////////////////////////////////////////////////////////////////// +void testExtractFromTermQuery( CuTest * tc ) +{ + Directory * pIndex = setUpIndex(); + IndexReader * pReader = IndexReader::open( pIndex ); + TermSet termSet; + + Term * t1 = _CLNEW Term( _T("data"), _T("aaaaa") ); + Term * t2 = _CLNEW Term( _T("data"), _T("bbbbb") ); + Query * q1 = _CLNEW TermQuery( t1 ); + Query * q2 = _CLNEW TermQuery( t2 ); + Query * rewrite1 = q1->rewrite( pReader ); + Query * rewrite2 = q2->rewrite( pReader ); + + rewrite1->extractTerms( &termSet ); + assertEqualsMsg( _T( "wrong number of terms" ), 1, termSet.size() ); + assertEqualsMsg( _T( "wrong term" ), 0, t1->compareTo( *(termSet.begin())) ); + clearTermSet( termSet ); + + rewrite2->extractTerms( &termSet ); + assertEqualsMsg( _T( "wrong number of terms" ), 1, termSet.size() ); + assertEqualsMsg( _T( "wrong term" ), 0, t2->compareTo( *(termSet.begin())) ); + clearTermSet( termSet ); + + _CLLDECDELETE( t1 ); + _CLLDECDELETE( t2 ); + + if( q1 != rewrite1 ) + _CLDELETE( rewrite1 ); + _CLDELETE( q1 ); + + if( q2 != rewrite2 ) + _CLDELETE( rewrite2 ); + _CLDELETE( q2 ); + + pReader->close(); + _CLDELETE( pReader ); + + closeIndex( pIndex ); + pIndex = NULL; +} + + +///////////////////////////////////////////////////////////////////////////// +void testExtractFromPhraseQuery( CuTest * tc ) +{ + Directory * pIndex = setUpIndex(); + IndexReader * pReader = IndexReader::open( pIndex ); + TermSet termSet; + + Term * t1 = _CLNEW Term( _T("data"), _T("aaaab") ); + Term * t2 = _CLNEW Term( _T("data"), _T("ccccc") ); + Term * t3 = _CLNEW Term( _T("data"), _T("aaaab") ); + PhraseQuery * phrase = _CLNEW PhraseQuery(); + phrase->add( t1 ); + phrase->add( t2 ); + phrase->add( t3 ); + + Query * rewrite = phrase->rewrite( pReader ); + + rewrite->extractTerms( &termSet ); + assertEqualsMsg( _T( "wrong number of terms" ), 2, termSet.size() ); + for( TermSet::iterator itTerms = termSet.begin(); itTerms != termSet.end(); itTerms++ ) + { + Term * pTerm = *itTerms; + assertTrueMsg( _T( "wrong term" ), ( 0 == t1->compareTo( pTerm ) || 0 == t2->compareTo( pTerm ))); + } + clearTermSet( termSet ); + + _CLLDECDELETE( t1 ); + _CLLDECDELETE( t2 ); + _CLLDECDELETE( t3 ); + + if( rewrite != phrase ) + _CLDELETE( rewrite ); + _CLDELETE( phrase ); + + pReader->close(); + _CLDELETE( pReader ); + + closeIndex( pIndex ); + pIndex = NULL; +} + + +///////////////////////////////////////////////////////////////////////////// +void testExtractFromBooleanQuery( CuTest * tc ) +{ + Directory * pIndex = setUpIndex(); + IndexReader * pReader = IndexReader::open( pIndex ); + TermSet termSet; + + Term * t1 = _CLNEW Term( _T("data"), _T("aaaab") ); + Term * t2 = _CLNEW Term( _T("data"), _T("aaabb") ); + Term * t3 = _CLNEW Term( _T("data"), _T("aaabb") ); + BooleanQuery * bq = _CLNEW BooleanQuery(); + bq->add( _CLNEW TermQuery( t1 ), true, BooleanClause::SHOULD ); + bq->add( _CLNEW TermQuery( t2 ), true, BooleanClause::SHOULD ); + bq->add( _CLNEW TermQuery( t3 ), true, BooleanClause::SHOULD ); + + Query * rewrite = bq->rewrite( pReader ); + + rewrite->extractTerms( &termSet ); + assertEqualsMsg( _T( "wrong number of terms" ), 2, termSet.size() ); + for( TermSet::iterator itTerms = termSet.begin(); itTerms != termSet.end(); itTerms++ ) + { + Term * pTerm = *itTerms; + assertTrueMsg( _T( "wrong term" ), ( 0 == t1->compareTo( pTerm ) || 0 == t2->compareTo( pTerm ))); + } + clearTermSet( termSet ); + + _CLLDECDELETE( t1 ); + _CLLDECDELETE( t2 ); + _CLLDECDELETE( t3 ); + + if( rewrite != bq ) + _CLDELETE( rewrite ); + _CLDELETE( bq ); + + pReader->close(); + _CLDELETE( pReader ); + + closeIndex( pIndex ); + pIndex = NULL; +} + + +///////////////////////////////////////////////////////////////////////////// +void testExtractFromWildcardQuery( CuTest * tc ) +{ + Directory * pIndex = setUpIndex(); + IndexReader * pReader = IndexReader::open( pIndex ); + TermSet termSet; + WildcardQuery * wildcard; + Term * t1; + Query * rewrite; + + + t1 = _CLNEW Term( _T("data"), _T("aaaa?") ); + wildcard = _CLNEW WildcardQuery( t1 ); + rewrite = wildcard->rewrite( pReader ); + rewrite->extractTerms( &termSet ); + _CLLDECDELETE( t1 ); + + assertEqualsMsg( _T( "wrong number of terms" ), 3, termSet.size() ); + for( TermSet::iterator itTerms = termSet.begin(); itTerms != termSet.end(); itTerms++ ) + { + Term * pTerm = *itTerms; + if( 0 != _tcscmp( _T( "aaaaa" ), pTerm->text()) + && 0 != _tcscmp( _T( "aaaab" ), pTerm->text()) + && 0 != _tcscmp( _T( "aaaac" ), pTerm->text())) + { + assertTrueMsg( _T( "wrong term" ), false ); + } + } + + clearTermSet( termSet ); + if( rewrite != wildcard ) + _CLDELETE( rewrite ); + _CLDELETE( wildcard ); + + + t1 = _CLNEW Term( _T("data"), _T("aaa*") ); + wildcard = _CLNEW WildcardQuery( t1 ); + rewrite = wildcard->rewrite( pReader ); + rewrite->extractTerms( &termSet ); + _CLLDECDELETE( t1 ); + + assertEqualsMsg( _T( "wrong number of terms" ), 5, termSet.size() ); + for( TermSet::iterator itTerms = termSet.begin(); itTerms != termSet.end(); itTerms++ ) + { + Term * pTerm = *itTerms; + assertTrueMsg( _T( "wrong term" ), ( 0 == _tcsncmp( _T( "aaa" ), pTerm->text(), 3 ))); + } + + clearTermSet( termSet ); + if( rewrite != wildcard ) + _CLDELETE( rewrite ); + _CLDELETE( wildcard ); + + + pReader->close(); + _CLDELETE( pReader ); + + closeIndex( pIndex ); + pIndex = NULL; +} + + +///////////////////////////////////////////////////////////////////////////// +void testExtractFromFuzzyQuery( CuTest * tc ) +{ + Directory * pIndex = setUpIndex(); + IndexReader * pReader = IndexReader::open( pIndex ); + TermSet termSet; + FuzzyQuery * fuzzy; + Term * t1; + Query * rewrite; + + + t1 = _CLNEW Term( _T("data"), _T("aaaab") ); + fuzzy = _CLNEW FuzzyQuery( t1, 0.7f ); + rewrite = fuzzy->rewrite( pReader ); + rewrite->extractTerms( &termSet ); + _CLLDECDELETE( t1 ); + + assertEqualsMsg( _T( "wrong number of terms" ), 4, termSet.size() ); + for( TermSet::iterator itTerms = termSet.begin(); itTerms != termSet.end(); itTerms++ ) + { + Term * pTerm = *itTerms; + if( 0 != _tcscmp( _T( "aaaaa" ), pTerm->text()) + && 0 != _tcscmp( _T( "aaaab" ), pTerm->text()) + && 0 != _tcscmp( _T( "aaabb" ), pTerm->text()) + && 0 != _tcscmp( _T( "aaaac" ), pTerm->text())) + { + assertTrueMsg( _T( "wrong term" ), false ); + } + } + + clearTermSet( termSet ); + if( rewrite != fuzzy ) + _CLDELETE( rewrite ); + _CLDELETE( fuzzy ); + + pReader->close(); + _CLDELETE( pReader ); + + closeIndex( pIndex ); + pIndex = NULL; +} + + +///////////////////////////////////////////////////////////////////////////// +// Custom CLucene tests +CuSuite *testExtractTerms(void) +{ + CuSuite *suite = CuSuiteNew( _T( "CLucene ExtractTerms Test" )); + + SUITE_ADD_TEST( suite, testExtractFromTermQuery ); + SUITE_ADD_TEST( suite, testExtractFromPhraseQuery ); + SUITE_ADD_TEST( suite, testExtractFromBooleanQuery ); + SUITE_ADD_TEST( suite, testExtractFromWildcardQuery ); + SUITE_ADD_TEST( suite, testExtractFromFuzzyQuery ); + + return suite; +} + + +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestForDuplicates.cpp clucene-core-2.3.3.4/src/test/search/TestForDuplicates.cpp --- clucene-core-0.9.21b/src/test/search/TestForDuplicates.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestForDuplicates.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,164 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + + static void print_tHits( CuTest *tc, Hits* hits ) { + CuMessageA(tc,"%d total results\n\n", hits->length()); + for (size_t i = 0 ; i < hits->length(); i++) { + if ( i < 10 || (i > 94 && i < 105) ) { + const Document& d = hits->doc(i); + CuMessage(tc, _T("%d %s\n"), i, d.get(_T("id")) ); + } + } + } + void testSearchTestForDuplicatesRaw(CuTest *tc){ + const int MAX_DOCS=1500; + const char *strBody[10] = {"test", "value", "why not", "computer", "clucene", + "sun", "program", "main", "database", "code"}; + RAMDirectory ram; + + //--- + WhitespaceAnalyzer an; + IndexWriter* writer = _CLNEW IndexWriter(&ram, &an, true); + Document *doc = 0; + + //--- + TCHAR strDb[1024]; + //printf("Indexing, please wait...\n"); + for (int32_t i = 0; i < MAX_DOCS; i++) { + //**** + //printf("%d/%d=%s\n", i, MAX_DOCS,strBody[i%10]); + doc = _CLNEW Document(); + + //--- + _sntprintf(strDb, 1024, _T("%d"), i); + doc->add( *_CLNEW Field(_T("id"), strDb,Field::STORE_YES | Field::INDEX_UNTOKENIZED) ); + + STRCPY_AtoT(strDb, strBody[i%10], 1022); + + doc->add(*_CLNEW Field(_T("body"), strDb,Field::STORE_NO | Field::INDEX_TOKENIZED) ); + //--- + writer->addDocument(doc); + _CLDELETE(doc); + //**** + } + //printf("\nDone.\n"); + + //--- + writer->close(); + _CLDELETE(writer); + + + + IndexSearcher searcher(&ram); + //--- + int32_t dupl = 0; + Query* query = QueryParser::parse(_T("test"), _T("body"), &an); + Hits* result = searcher.search(query); + + CLUCENE_ASSERT(result->length()==((int)MAX_DOCS/10)); + + //printf("Building result map...\n"); + std::map resMap; + int32_t id; + for (size_t j = 0; j < result->length(); j++) { + doc = &result->doc(j); + + id = _ttoi(doc->get(_T("id"))); + if ( resMap.find(id) ==resMap.end() ) { + resMap.insert( std::pair(id, 1)); + //printf("Inserted $d\n",id); + } else { + TCHAR tmp[2048]; + _sntprintf(tmp,2048,_T("Duplicated result found - Id: %d\n"), id); + CuAssert(tc,tmp,false); + dupl++; + } + } + //printf("Total duplicated found: %d\n", dupl); + + //--- + _CLDELETE(result); + _CLDELETE(query); + searcher.close(); + ram.close(); + } + + void testSearchTestForDuplicates(CuTest *tc) { + RAMDirectory directory; + SimpleAnalyzer analyzer; + IndexWriter* writer = _CLNEW IndexWriter(&directory, &analyzer, true); + const int32_t MAX_DOCS = 255; + + for (int32_t j = 0; j < MAX_DOCS; j++) { + Document* d = _CLNEW Document(); + d->add(*_CLNEW Field(_T("priority"), _T("high"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + TCHAR buf[80]; + _i64tot(j,buf,10); + + d->add(*_CLNEW Field(_T("id"), buf,Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(d); + + _CLDELETE(d); + } + writer->close(); + _CLDELETE(writer); + + // try a search without OR + Searcher* searcher = _CLNEW IndexSearcher( &directory ); + QueryParser* parser = _CLNEW QueryParser(_T("priority"), &analyzer); + Hits* hits = NULL; + + Query* query = parser->parse(_T("high")); + TCHAR* tmp = query->toString(_T("priority")); + CuMessage(tc, _T("Query: %s\n"), tmp ); + _CLDELETE_CARRAY(tmp); + + hits = searcher->search(query); + print_tHits(tc, hits); + _CLDELETE(hits); + _CLDELETE(query); + _CLDELETE(parser); + + searcher->close(); + _CLDELETE(searcher); + + + + // try a new search with OR + searcher = _CLNEW IndexSearcher( &directory ); + parser = _CLNEW QueryParser(_T("priority"), &analyzer); + hits = NULL; + + query = parser->parse(_T("high OR medium")); + tmp = query->toString(_T("priority")); + CuMessage(tc, _T("Query: %s\n"), tmp ); + _CLDELETE_CARRAY(tmp); + + hits = searcher->search(query); + print_tHits(tc, hits); + _CLDELETE(hits); + _CLDELETE(query); + _CLDELETE(parser); + + searcher->close(); + _CLDELETE(searcher); + + directory.close(); + } + + + CuSuite *testduplicates(void) + { + CuSuite *suite = CuSuiteNew(_T("CLucene Duplicates Test")); + + SUITE_ADD_TEST(suite, testSearchTestForDuplicates); + SUITE_ADD_TEST(suite, testSearchTestForDuplicatesRaw); + + return suite; + } +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestIndexSearcher.cpp clucene-core-2.3.3.4/src/test/search/TestIndexSearcher.cpp --- clucene-core-0.9.21b/src/test/search/TestIndexSearcher.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestIndexSearcher.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,99 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2010 the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + +DEFINE_MUTEX(searchMutex); +DEFINE_CONDITION(searchCondition); + +DEFINE_MUTEX(deleteMutex); +DEFINE_CONDITION(deleteCondition); + +_LUCENE_THREAD_FUNC(searchDocs, _searcher) { + + WhitespaceAnalyzer an; + IndexSearcher * searcher = (IndexSearcher *)_searcher; + Query * query = QueryParser::parse(_T("one"), _T("content"), &an); + Hits * hits = searcher->search(query); + + usleep(9999); //make sure that searchMutex is being waited on... + + CONDITION_NOTIFYALL(searchCondition); + SCOPED_LOCK_MUTEX(deleteMutex); + + _CLLDELETE(hits); + _CLLDELETE(query); + + CONDITION_WAIT(deleteMutex, deleteCondition); + _LUCENE_THREAD_FUNC_RETURN(0); +} + +void testEndThreadException(CuTest *tc) { + + const int MAX_DOCS=1500; + RAMDirectory ram; + WhitespaceAnalyzer an; + IndexWriter* writer = _CLNEW IndexWriter(&ram, &an, true); + + // add some documents + Document doc; + for (int i = 0; i < MAX_DOCS; i++) { + TCHAR * tmp = English::IntToEnglish(i); + doc.add(* new Field(_T("content"), tmp, Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + writer->addDocument(&doc); + doc.clear(); + _CLDELETE_ARRAY( tmp ); + } + + CuAssertEquals(tc, MAX_DOCS, writer->docCount()); + + writer->close(); + _CLLDELETE(writer); + + // this sequence is OK: delete searcher after search thread finish + { + IndexSearcher * searcher = _CLNEW IndexSearcher(&ram); + _LUCENE_THREADID_TYPE thread = _LUCENE_THREAD_CREATE(&searchDocs, searcher); + SCOPED_LOCK_MUTEX(searchMutex); + + CONDITION_WAIT(searchMutex, searchCondition); + usleep(9999); //make sure that deleteMutex is being waited on... + CONDITION_NOTIFYALL(deleteCondition); + + _LUCENE_THREAD_JOIN(thread); + + searcher->close(); + _CLLDELETE(searcher); + } + + // this produces memory exception: delete searcher after search finish but before thread finish + { + IndexSearcher * searcher = _CLNEW IndexSearcher(&ram); + _LUCENE_THREADID_TYPE thread = _LUCENE_THREAD_CREATE(&searchDocs, searcher); + SCOPED_LOCK_MUTEX(searchMutex); + + CONDITION_WAIT(searchMutex, searchCondition); + searcher->close(); + _CLLDELETE(searcher); + CONDITION_NOTIFYALL(deleteCondition); + + _LUCENE_THREAD_JOIN(thread); + } + + + ram.close(); +} + + +CuSuite *testIndexSearcher(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene IndexSearcher Test")); + + SUITE_ADD_TEST(suite, testEndThreadException); + + return suite; + } +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestQueries.cpp clucene-core-2.3.3.4/src/test/search/TestQueries.cpp --- clucene-core-0.9.21b/src/test/search/TestQueries.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestQueries.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,384 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/search/MultiPhraseQuery.h" +#include "QueryUtils.h" + +/// Java PrefixQuery test, 2009-06-02 +void testPrefixQuery(CuTest *tc){ + WhitespaceAnalyzer analyzer; + RAMDirectory directory; + const TCHAR* categories[] = {_T("/Computers"), _T("/Computers/Mac"), _T("/Computers/Windows")}; + + IndexWriter writer( &directory, &analyzer, true); + for (int i = 0; i < 3; i++) { + Document *doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("category"), categories[i], Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + writer.addDocument(doc); + _CLDELETE(doc); + } + writer.close(); + + Term* t = _CLNEW Term(_T("category"), _T("/Computers")); + PrefixQuery *query = _CLNEW PrefixQuery(t); + IndexSearcher searcher(&directory); + Hits *hits = searcher.search(query); + CLUCENE_ASSERT(3 == hits->length()); // All documents in /Computers category and below + _CLDELETE(query); + _CLDELETE(t); + _CLDELETE(hits); + + t = _CLNEW Term(_T("category"), _T("/Computers/Mac")); + query = _CLNEW PrefixQuery(t); + hits = searcher.search(query); + CLUCENE_ASSERT(1 == hits->length()); // One in /Computers/Mac + _CLDELETE(query); + _CLDELETE(t); + _CLDELETE(hits); +} + +#ifndef NO_FUZZY_QUERY + +/// Java FuzzyQuery test, 2009-06-02 +class TestFuzzyQuery { +private: + CuTest *tc; + + void addDoc(const TCHAR* text, IndexWriter* writer) { + Document* doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("field"), text, Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLLDELETE(doc); + } + + Hits* searchQuery(IndexSearcher* searcher, const TCHAR* field, const TCHAR* text, + float_t minSimilarity=FuzzyQuery::defaultMinSimilarity, size_t prefixLen=0){ + + Term* t = _CLNEW Term(field, text); + FuzzyQuery* query = _CLNEW FuzzyQuery(t, minSimilarity, prefixLen); + Hits* hits = searcher->search(query); + _CLLDELETE(query); + _CLLDECDELETE(t); + return hits; + } + + size_t getHitsLength(IndexSearcher* searcher, const TCHAR* field, const TCHAR* text, + float_t minSimilarity=FuzzyQuery::defaultMinSimilarity, size_t prefixLen=0){ + + Hits* hits = searchQuery(searcher, field, text, minSimilarity, prefixLen); + size_t ret = hits->length(); + _CLLDELETE(hits); + return ret; + } +public: + TestFuzzyQuery(CuTest *_tc):tc(_tc){ + } + ~TestFuzzyQuery(){ + } + + void testFuzziness() { + RAMDirectory directory; + WhitespaceAnalyzer a; + IndexWriter writer(&directory, &a, true); + addDoc(_T("aaaaa"), &writer); + addDoc(_T("aaaab"), &writer); + addDoc(_T("aaabb"), &writer); + addDoc(_T("aabbb"), &writer); + addDoc(_T("abbbb"), &writer); + addDoc(_T("bbbbb"), &writer); + addDoc(_T("ddddd"), &writer); + writer.optimize(); + writer.close(); + IndexSearcher searcher(&directory); + + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaaaa")) == 3); + + // same with prefix + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaaaa"),FuzzyQuery::defaultMinSimilarity,1) == 3); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaaaa"),FuzzyQuery::defaultMinSimilarity,2) == 3); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaaaa"),FuzzyQuery::defaultMinSimilarity,3) == 3); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaaaa"),FuzzyQuery::defaultMinSimilarity,4) == 2); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaaaa"),FuzzyQuery::defaultMinSimilarity,5) == 1); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaaaa"),FuzzyQuery::defaultMinSimilarity,6) == 1); + + // not similar enough: + CuAssertTrue(tc, getHitsLength(&searcher, _T("field"), _T("xxxxx")) == 0); + CuAssertTrue(tc, getHitsLength(&searcher, _T("field"), _T("aaccc")) == 0); // edit distance to "aaaaa" = 3 + + // query identical to a word in the index: + Hits* hits = searchQuery(&searcher, _T("field"), _T("aaaaa")); + CLUCENE_ASSERT( hits->length() == 3); + CuAssertStrEquals(tc, NULL, _T("aaaaa"), hits->doc(0).get(_T("field"))); + // default allows for up to two edits: + CuAssertStrEquals(tc, NULL, _T("aaaab"), hits->doc(1).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaabb"), hits->doc(2).get(_T("field"))); + _CLLDELETE(hits); + + // query similar to a word in the index: + hits = searchQuery(&searcher, _T("field"), _T("aaaac")); + CLUCENE_ASSERT( hits->length() == 3); + CuAssertStrEquals(tc, NULL, _T("aaaaa"), hits->doc(0).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaaab"), hits->doc(1).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaabb"), hits->doc(2).get(_T("field"))); + _CLLDELETE(hits); + + // now with prefix + hits = searchQuery(&searcher, _T("field"), _T("aaaac"), FuzzyQuery::defaultMinSimilarity, 1); + CLUCENE_ASSERT( hits->length() == 3); + CuAssertStrEquals(tc, NULL, _T("aaaaa"), hits->doc(0).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaaab"), hits->doc(1).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaabb"), hits->doc(2).get(_T("field"))); + _CLLDELETE(hits); + + hits = searchQuery(&searcher, _T("field"), _T("aaaac"), FuzzyQuery::defaultMinSimilarity, 2); + CLUCENE_ASSERT( hits->length() == 3); + CuAssertStrEquals(tc, NULL, _T("aaaaa"), hits->doc(0).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaaab"), hits->doc(1).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaabb"), hits->doc(2).get(_T("field"))); + _CLLDELETE(hits); + + hits = searchQuery(&searcher, _T("field"), _T("aaaac"), FuzzyQuery::defaultMinSimilarity, 3); + CLUCENE_ASSERT( hits->length() == 3); + CuAssertStrEquals(tc, NULL, _T("aaaaa"), hits->doc(0).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaaab"), hits->doc(1).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaabb"), hits->doc(2).get(_T("field"))); + _CLLDELETE(hits); + + hits = searchQuery(&searcher, _T("field"), _T("aaaac"), FuzzyQuery::defaultMinSimilarity, 4); + CLUCENE_ASSERT( hits->length() == 2); + CuAssertStrEquals(tc, NULL, _T("aaaaa"), hits->doc(0).get(_T("field"))); + CuAssertStrEquals(tc, NULL, _T("aaaab"), hits->doc(1).get(_T("field"))); + _CLLDELETE(hits); + + hits = searchQuery(&searcher, _T("field"), _T("aaaac"), FuzzyQuery::defaultMinSimilarity, 5); + CLUCENE_ASSERT( hits->length() == 0); + _CLLDELETE(hits); + + + hits = searchQuery(&searcher, _T("field"), _T("ddddX")); + CLUCENE_ASSERT( hits->length() == 1); + CuAssertStrEquals(tc, NULL, _T("ddddd"), hits->doc(0).get(_T("field"))); + _CLLDELETE(hits); + + // now with prefix + hits = searchQuery(&searcher, _T("field"), _T("ddddX"), FuzzyQuery::defaultMinSimilarity, 1); + CLUCENE_ASSERT( hits->length() == 1); + CuAssertStrEquals(tc, NULL, _T("ddddd"), hits->doc(0).get(_T("field"))); + _CLLDELETE(hits); + + hits = searchQuery(&searcher, _T("field"), _T("ddddX"), FuzzyQuery::defaultMinSimilarity, 2); + CLUCENE_ASSERT( hits->length() == 1); + CuAssertStrEquals(tc, NULL, _T("ddddd"), hits->doc(0).get(_T("field"))); + _CLLDELETE(hits); + + hits = searchQuery(&searcher, _T("field"), _T("ddddX"), FuzzyQuery::defaultMinSimilarity, 3); + CLUCENE_ASSERT( hits->length() == 1); + CuAssertStrEquals(tc, NULL, _T("ddddd"), hits->doc(0).get(_T("field"))); + _CLLDELETE(hits); + + hits = searchQuery(&searcher, _T("field"), _T("ddddX"), FuzzyQuery::defaultMinSimilarity, 4); + CLUCENE_ASSERT( hits->length() == 1); + CuAssertStrEquals(tc, NULL, _T("ddddd"), hits->doc(0).get(_T("field"))); + _CLLDELETE(hits); + + hits = searchQuery(&searcher, _T("field"), _T("ddddX"), FuzzyQuery::defaultMinSimilarity, 5); + CLUCENE_ASSERT( hits->length() == 0); + _CLLDELETE(hits); + + // different field = no match: + hits = searchQuery(&searcher, _T("anotherfield"), _T("ddddX")); + CLUCENE_ASSERT( hits->length() == 0); + _CLLDELETE(hits); + + searcher.close(); + directory.close(); + } + + void testFuzzinessLong() { + RAMDirectory directory; + WhitespaceAnalyzer a; + IndexWriter writer(&directory, &a, true); + addDoc(_T("aaaaaaa"), &writer); + addDoc(_T("segment"), &writer); + writer.optimize(); + writer.close(); + IndexSearcher searcher(&directory); + + // not similar enough: + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("xxxxx")) == 0); + + // edit distance to "aaaaaaa" = 3, this matches because the string is longer than + // in testDefaultFuzziness so a bigger difference is allowed: + Hits* hits = searchQuery(&searcher, _T("field"), _T("aaaaccc")); + CLUCENE_ASSERT( hits->length() == 1); + CuAssertStrEquals(tc, NULL, _T("aaaaaaa"), hits->doc(0).get(_T("field"))); + _CLLDELETE(hits); + + // now with prefix + hits = searchQuery(&searcher, _T("field"), _T("aaaaccc"), FuzzyQuery::defaultMinSimilarity, 1); + CLUCENE_ASSERT( hits->length() == 1); + CuAssertStrEquals(tc, NULL, _T("aaaaaaa"), hits->doc(0).get(_T("field"))); + _CLLDELETE(hits); + hits = searchQuery(&searcher, _T("field"), _T("aaaaccc"), FuzzyQuery::defaultMinSimilarity, 4); + CLUCENE_ASSERT( hits->length() == 1); + CuAssertStrEquals(tc, NULL, _T("aaaaaaa"), hits->doc(0).get(_T("field"))); + _CLLDELETE(hits); + hits = searchQuery(&searcher, _T("field"), _T("aaaaccc"), FuzzyQuery::defaultMinSimilarity, 5); + CLUCENE_ASSERT( hits->length() == 0); + _CLLDELETE(hits); + + // no match, more than half of the characters is wrong: + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaacccc")) == 0); + + // now with prefix + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("aaacccc"), FuzzyQuery::defaultMinSimilarity, 2) == 0); + + // "student" and "stellent" are indeed similar to "segment" by default: + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("student")) == 1); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("stellent")) == 1); + + // now with prefix + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("student"), FuzzyQuery::defaultMinSimilarity, 1) == 1); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("stellent"), FuzzyQuery::defaultMinSimilarity, 1) == 1); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("student"), FuzzyQuery::defaultMinSimilarity, 2) == 0); + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("stellent"), FuzzyQuery::defaultMinSimilarity, 2) == 0); + + // "student" doesn't match anymore thanks to increased minimum similarity: + CLUCENE_ASSERT( getHitsLength(&searcher, _T("field"), _T("student"), 0.6f, 0) == 0); + + try { + new FuzzyQuery(_CLNEW Term(_T("field"), _T("student")), 1.1f); + CuFail(tc, _T("Expected IllegalArgumentException")); + } catch (CLuceneError& /*e*/) { + // expecting exception + } + try { + new FuzzyQuery(_CLNEW Term(_T("field"), _T("student")), -0.1f); + CuFail(tc, _T("Expected IllegalArgumentException")); + } catch (CLuceneError& /*e*/) { + // expecting exception + } + + searcher.close(); + directory.close(); + } +}; + +void testFuzzyQuery(CuTest *tc){ + + /// Run Java Lucene tests + TestFuzzyQuery tester(tc); + tester.testFuzziness(); + + /// Legacy CLucene tests + RAMDirectory ram; + + //--- + WhitespaceAnalyzer an; + IndexWriter* writer = _CLNEW IndexWriter(&ram, &an, true); + + //--- + Document *doc = 0; + //**** + doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("body"),_T("test"),Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLDELETE(doc); + //**** + doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("body"),_T("home"),Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLDELETE(doc); + //**** + doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("body"), _T("pc linux"),Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLDELETE(doc); + //**** + doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("body"), _T("tested"),Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLDELETE(doc); + //**** + doc = _CLNEW Document(); + doc->add(*_CLNEW Field(_T("body"), _T("source"),Field::STORE_NO | Field::INDEX_TOKENIZED)); + writer->addDocument(doc); + _CLDELETE(doc); + + //--- + writer->close(); + _CLDELETE(writer); + + //--- + IndexSearcher searcher (&ram); + + //--- + Term* term = _CLNEW Term(_T("body"), _T("test~")); + Query* query = _CLNEW FuzzyQuery(term); + Hits* result = searcher.search(query); + + CLUCENE_ASSERT(result && result->length() > 0); + + //--- + _CLDELETE(result); + _CLDELETE(query); + _CLDECDELETE(term); + searcher.close(); + ram.close(); +} +#else + void _NO_FUZZY_QUERY(CuTest *tc){ + CuNotImpl(tc,_T("Fuzzy")); + } +#endif + +void testMultiPhraseQuery( CuTest * tc ) +{ + MultiPhraseQuery * pQuery = _CLNEW MultiPhraseQuery(); + + Term * t1 = _CLNEW Term( _T( "field" ), _T( "t1" )); + Term * t2 = _CLNEW Term( _T( "field" ), _T( "t2" )); + Term * t3 = _CLNEW Term( _T( "field" ), _T( "t3" )); + Term * t4 = _CLNEW Term( _T( "field" ), _T( "t4" )); + + CL_NS(util)::ValueArray terms( 3 ); + terms[ 0 ] = t2; + terms[ 1 ] = t3; + terms[ 2 ] = t4; + + pQuery->add( t1 ); + pQuery->add( &terms ); + + Query * pClone = pQuery->clone(); + + QueryUtils::checkEqual( tc, pQuery, pClone ); + + _CLLDECDELETE( t1 ); + _CLLDECDELETE( t2 ); + _CLLDECDELETE( t3 ); + _CLLDECDELETE( t4 ); + _CLLDELETE( pQuery ); + _CLLDELETE( pClone ); +} + +CuSuite *testqueries(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Queries Test")); + + SUITE_ADD_TEST(suite, testPrefixQuery); + SUITE_ADD_TEST(suite, testMultiPhraseQuery); + #ifndef NO_FUZZY_QUERY + SUITE_ADD_TEST(suite, testFuzzyQuery); + #else + SUITE_ADD_TEST(suite, _NO_FUZZY_QUERY); + #endif + + + return suite; +} +//EOF + diff -Nru clucene-core-0.9.21b/src/test/search/TestRangeFilter.cpp clucene-core-2.3.3.4/src/test/search/TestRangeFilter.cpp --- clucene-core-0.9.21b/src/test/search/TestRangeFilter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestRangeFilter.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,342 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + +#include "CLucene/search/RangeFilter.h" +#include "BaseTestRangeFilter.h" + + +class TestRangeFilter : BaseTestRangeFilter { +public: + TestRangeFilter(CuTest* _tc) + : BaseTestRangeFilter(_tc) + { + } + + void testRangeFilterId() { + + IndexReader* reader = IndexReader::open(index); + IndexSearcher* search = new IndexSearcher(reader); + + int medId = ((maxId - minId) / 2); + + std::tstring minIPstr = pad(minId); + const TCHAR* minIP = minIPstr.c_str(); + + std::tstring maxIPstr = pad(maxId); + const TCHAR* maxIP = maxIPstr.c_str(); + + std::tstring medIPstr = pad(medId); + const TCHAR* medIP = medIPstr.c_str(); + + size_t numDocs = static_cast(reader->numDocs()); + + assertEqualsMsg(_T("num of docs"), numDocs, static_cast(1+ maxId - minId)); + + Hits* result; + Term* term = _CLNEW Term(_T("body"),_T("body")); + Query* q = _CLNEW TermQuery(term); + _CLDECDELETE(term); + + // test id, bounded on both ends + + Filter* f = _CLNEW RangeFilter(_T("id"),minIP,maxIP,T,T); + result = search->search(q, f); + assertEqualsMsg(_T("find all"), numDocs, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),minIP,maxIP,T,F); + result = search->search(q,f); + assertEqualsMsg(_T("all but last"), numDocs-1, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f =_CLNEW RangeFilter(_T("id"),minIP,maxIP,F,T); + result = search->search(q,f); + assertEqualsMsg(_T("all but first"), numDocs-1, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),minIP,maxIP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("all but ends"), numDocs-2, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),medIP,maxIP,T,T); + result = search->search(q,f); + assertEqualsMsg(_T("med and up"), 1+ maxId-medId, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),minIP,medIP,T,T); + result = search->search(q,f); + assertEqualsMsg(_T("up to med"), 1+ medId-minId, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + // unbounded id + + f=_CLNEW RangeFilter(_T("id"),minIP,NULL,T,F); + result = search->search(q,f); + assertEqualsMsg(_T("min and up"), numDocs, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),NULL,maxIP,F,T); + result = search->search(q,f); + assertEqualsMsg(_T("max and down"), numDocs, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),minIP,NULL,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("not min, but up"), numDocs-1, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),NULL,maxIP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("not max, but down"), numDocs-1, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),medIP,maxIP,T,F); + result = search->search(q,f); + assertEqualsMsg(_T("med and up, not max"), maxId-medId, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),minIP,medIP,F,T); + result = search->search(q,f); + assertEqualsMsg(_T("not min, up to med"), medId-minId, result->length()); + _CLLDELETE(result); + _CLLDELETE(f); + + // very small sets + + f=_CLNEW RangeFilter(_T("id"),minIP,minIP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("min,min,F,F"), 0, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + f=_CLNEW RangeFilter(_T("id"),medIP,medIP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("med,med,F,F"), 0, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + f=_CLNEW RangeFilter(_T("id"),maxIP,maxIP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("max,max,F,F"), 0, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),minIP,minIP,T,T); + result = search->search(q,f); + assertEqualsMsg(_T("min,min,T,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + f=_CLNEW RangeFilter(_T("id"),NULL,minIP,F,T); + result = search->search(q,f); + assertEqualsMsg(_T("nul,min,F,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),maxIP,maxIP,T,T); + result = search->search(q,f); + assertEqualsMsg(_T("max,max,T,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + f=_CLNEW RangeFilter(_T("id"),maxIP,NULL,T,F); + result = search->search(q,f); + assertEqualsMsg(_T("max,nul,T,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("id"),medIP,medIP,T,T); + result = search->search(q,f); + assertEqualsMsg(_T("med,med,T,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + search->close(); + _CLLDELETE(search); + + reader->close(); + _CLLDELETE(reader); + + _CLLDELETE(q); + } + + void testRangeFilterRand() + { + IndexReader* reader = IndexReader::open(index); + IndexSearcher* search = _CLNEW IndexSearcher(reader); + + std::tstring minRPstr = pad(minR); + const TCHAR* minRP = minRPstr.c_str(); + + std::tstring maxRPstr = pad(maxR); + const TCHAR* maxRP = maxRPstr.c_str(); + + size_t numDocs = static_cast(reader->numDocs()); + + assertEqualsMsg(_T("num of docs"), numDocs, 1+ maxId - minId); + + Hits* result; + Term* term = _CLNEW Term(_T("body"),_T("body")); + Query* q = _CLNEW TermQuery(term); + _CLDECDELETE(term); + + // test extremes, bounded on both ends + + Filter* f = _CLNEW RangeFilter(_T("rand"),minRP,maxRP,T,T); + result = search->search(q,f); + assertEqualsMsg(_T("find all"), numDocs, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("rand"),minRP,maxRP,T,F); + result = search->search(q,f); + assertEqualsMsg(_T("all but biggest"), numDocs-1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("rand"),minRP,maxRP,F,T); + result = search->search(q,f); + assertEqualsMsg(_T("all but smallest"), numDocs-1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("rand"),minRP,maxRP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("all but extremes"), numDocs-2, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + // unbounded + + f=_CLNEW RangeFilter(_T("rand"),minRP,NULL,T,F); + result = search->search(q,f); + assertEqualsMsg(_T("smallest and up"), numDocs, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("rand"),NULL,maxRP,F,T); + result = search->search(q,f); + assertEqualsMsg(_T("biggest and down"), numDocs, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("rand"),minRP,NULL,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("not smallest, but up"), numDocs-1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("rand"),NULL,maxRP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("not biggest, but down"), numDocs-1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + // very small sets + + f=_CLNEW RangeFilter(_T("rand"),minRP,minRP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("min,min,F,F"), 0, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + f=_CLNEW RangeFilter(_T("rand"),maxRP,maxRP,F,F); + result = search->search(q,f); + assertEqualsMsg(_T("max,max,F,F"), 0, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("rand"),minRP,minRP,T,T); + result = search->search(q,f); + assertEqualsMsg(_T("min,min,T,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + f=_CLNEW RangeFilter(_T("rand"),NULL,minRP,F,T); + result = search->search(q,f); + assertEqualsMsg(_T("nul,min,F,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + f=_CLNEW RangeFilter(_T("rand"),maxRP,maxRP,T,T); + result = search->search(q,f); + assertEqualsMsg(_T("max,max,T,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + f=_CLNEW RangeFilter(_T("rand"),maxRP,NULL,T,F); + result = search->search(q,f); + assertEqualsMsg(_T("max,nul,T,T"), 1, result->length()); + _CLLDELETE(result); _CLLDELETE(f); + + search->close(); + _CLLDELETE(search); + + reader->close(); + _CLLDELETE(reader); + + _CLLDELETE(q); + } +}; + +void testRangeFilterTrigger(CuTest* tc) +{ + TestRangeFilter trf(tc); + trf.testRangeFilterId(); + trf.testRangeFilterRand(); +} + +void testIncludeLowerTrue(CuTest* tc) +{ + WhitespaceAnalyzer a; + RAMDirectory* index = _CLNEW RAMDirectory(); + IndexWriter* writer = _CLNEW IndexWriter(index, + &a, true); + + Document doc; + doc.add(*_CLNEW Field(_T("Category"), _T("a 1"), Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(&doc); doc.clear(); + + doc.add(*_CLNEW Field(_T("Category"), _T("a 2"), Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(&doc); doc.clear(); + + doc.add(*_CLNEW Field(_T("Category"), _T("a 3"), Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(&doc); doc.clear(); + + writer->close(); + _CLLDELETE(writer); + + IndexSearcher* s = _CLNEW IndexSearcher(index); + Filter* f = _CLNEW RangeFilter(_T("Category"), _T("3"), _T("3"), true, true); + + Term* t = _CLNEW Term(_T("Category"), _T("a")); + Query* q1 = _CLNEW TermQuery(t); + _CLLDECDELETE(t); + + t = _CLNEW Term(_T("Category"), _T("3")); + Query* q2 = _CLNEW TermQuery(t); + _CLLDECDELETE(t); + + Hits* h = s->search(q1); + assertTrue(h->length() == 3); + _CLLDELETE(h); + + h = s->search(q2); + assertTrue(h->length() == 1); + _CLLDELETE(h); + + h = s->search(q1, f); + assertTrue(h->length() == 1); + _CLLDELETE(h); + + s->close(); + _CLLDELETE(s); + _CLLDELETE(q1); + _CLLDELETE(q2); + _CLLDELETE(f); + + index->close(); + _CLLDECDELETE(index); +} + +CuSuite *testRangeFilter(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene RangeFilter Test")); + + SUITE_ADD_TEST(suite, testRangeFilterTrigger); + SUITE_ADD_TEST(suite, testIncludeLowerTrue); + + return suite; +} + + +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestSearch.cpp clucene-core-2.3.3.4/src/test/search/TestSearch.cpp --- clucene-core-0.9.21b/src/test/search/TestSearch.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestSearch.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,483 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include +#include "test.h" +#include + +#include "CLucene/search/MultiPhraseQuery.h" + + SimpleAnalyzer a; + StandardAnalyzer aStd; + WhitespaceAnalyzer aWS; + IndexSearcher* s=NULL; + + void _TestSearchesRun(CuTest *tc, Analyzer* analyzer, Searcher* search, const TCHAR* qry){ + Query* q = NULL; + Hits* h = NULL; + try{ + q = QueryParser::parse(qry , _T("contents"), analyzer); + if ( q != NULL ){ + h = search->search( q ); + + if ( h->length() > 0 ){ + //check for explanation memory leaks... + CL_NS(search)::Explanation expl1; + search->explain(q, h->id(0), &expl1); + TCHAR* tmp = expl1.toString(); + _CLDELETE_CARRAY(tmp); + if ( h->length() > 1 ){ //do a second one just in case + CL_NS(search)::Explanation expl2; + search->explain(q, h->id(1), &expl2); + tmp = expl2.toString(); + _CLDELETE_CARRAY(tmp); + } + } + } + }catch(CLuceneError& err){ + CuFail(tc,_T("Error: %s\n"), err.twhat()); + }catch(...){ + CuFail(tc,_T("Error: unknown\n")); + } + _CLDELETE(h); + _CLDELETE(q); + } + + void testSrchOpenIndex(CuTest *tc ){ + char loc[1024]; + strcpy(loc, clucene_data_location); + strcat(loc, "/reuters-21578-index"); + + CuAssert(tc,_T("Index does not exist"), Misc::dir_Exists(loc)); + s=_CLNEW IndexSearcher(loc); + } + void testSrchCloseIndex(CuTest* /*tc*/ ){ + if ( s!=NULL ){ + s->close(); + _CLDELETE(s); + } + } + + void testSrchPunctuation(CuTest *tc ){ + CuAssert(tc,_T("Searcher was not open"),s!=NULL); + + //test punctuation + _TestSearchesRun(tc, &a,s, _T("a&b") ); + _TestSearchesRun(tc, &a,s, _T("a&&b") ); + _TestSearchesRun(tc, &a,s, _T(".NET") ); + } + + void testSrchSlop(CuTest *tc ){ +#ifdef NO_FUZZY_QUERY + CuNotImpl(tc,_T("Fuzzy")); +#else + CuAssert(tc,_T("Searcher was not open"),s!=NULL); + //test slop + _TestSearchesRun(tc, &a,s, _T("\"term germ\"~2") ); + _TestSearchesRun(tc, &a,s, _T("\"term germ\"~2 flork") ); + _TestSearchesRun(tc, &a,s, _T("\"term\"~2") ); + _TestSearchesRun(tc, &a,s, _T("\" \"~2 germ") ); + _TestSearchesRun(tc, &a,s, _T("\"term germ\"~2^2") ); +#endif + } + + void testSrchNumbers(CuTest *tc ){ + CuAssert(tc,_T("Searcher was not open"),s!=NULL); + + // The numbers go away because SimpleAnalzyer ignores them + _TestSearchesRun(tc, &a,s, _T("3") ); + _TestSearchesRun(tc, &a,s, _T("term 1.0 1 2") ); + _TestSearchesRun(tc, &a,s, _T("term term1 term2") ); + + _TestSearchesRun(tc, &aStd,s, _T("3") ); + _TestSearchesRun(tc, &aStd,s, _T("term 1.0 1 2") ); + _TestSearchesRun(tc, &aStd,s, _T("term term1 term2") ); + } + + void testSrchWildcard(CuTest *tc ){ +#ifdef NO_WILDCARD_QUERY + CuNotImpl(tc,_T("Wildcard")); +#else + CuAssert(tc,_T("Searcher was not open"),s!=NULL); + //testWildcard + _TestSearchesRun(tc, &a,s, _T("term*") ); + _TestSearchesRun(tc, &a,s, _T("term*^2") ); + _TestSearchesRun(tc, &a,s, _T("term~") ); + _TestSearchesRun(tc, &a,s, _T("term^2~") ); + _TestSearchesRun(tc, &a,s, _T("term~^2") ); + _TestSearchesRun(tc, &a,s, _T("term*germ") ); + _TestSearchesRun(tc, &a,s, _T("term*germ^3") ); + + //test problem reported by Gary Mangum + BooleanQuery* bq = _CLNEW BooleanQuery(); + Term* upper = _CLNEW Term(_T("contents"),_T("0105")); + Term* lower = _CLNEW Term(_T("contents"),_T("0105")); + RangeQuery* rq=_CLNEW RangeQuery(lower,upper,true); + bq->add(rq,true,true,false); + _CLDECDELETE(upper); + _CLDECDELETE(lower); + + Term* prefix = _CLNEW Term(_T("contents"),_T("reuters21578")); + PrefixQuery* pq = _CLNEW PrefixQuery(prefix); + _CLDECDELETE(prefix); + bq->add(pq,true,true,false); + + Hits* h = NULL; + try{ + h = s->search( bq ); + }_CLFINALLY( + _CLDELETE(h); + _CLDELETE(bq); + ); +#endif + } + + void testSrchEscapes(CuTest *tc ){ + CuAssert(tc,_T("Searcher was not open"),s!=NULL); + //testEscaped + _TestSearchesRun(tc, &aWS,s, _T("\\[brackets") ); + _TestSearchesRun(tc, &a,s, _T("\\[brackets") ); + _TestSearchesRun(tc, &aWS,s, _T("\\\\") ); + _TestSearchesRun(tc, &aWS,s, _T("\\+blah") ); + _TestSearchesRun(tc, &aWS,s, _T("\\(blah") ); + } + + void testSrchRange(CuTest *tc ){ +#ifdef NO_RANGE_QUERY + CuNotImpl(tc,_T("Range")); +#else + CuAssert(tc,_T("Searcher was not open"),s!=NULL); + //testRange + _TestSearchesRun(tc, &a,s, _T("[ j m]") ); + _TestSearchesRun(tc, &a,s, _T("[ j m ]") ); + _TestSearchesRun(tc, &a,s, _T("{ j m}") ); + _TestSearchesRun(tc, &a,s, _T("{ j m }") ); + _TestSearchesRun(tc, &a,s, _T("{a TO b}") ); + _TestSearchesRun(tc, &a,s, _T("{ j m }^2.0") ); + _TestSearchesRun(tc, &a,s, _T("[ j m] OR bar") ); + _TestSearchesRun(tc, &a,s, _T("[ j m] AND bar") ); + _TestSearchesRun(tc, &a,s, _T("( bar blar { j m}) ") ); + _TestSearchesRun(tc, &a,s, _T("gack ( bar blar { j m}) ") ); +#endif + } + + void testSrchSimple(CuTest *tc ){ + CuAssert(tc,_T("Searcher was not open"),s!=NULL); + //simple tests + _TestSearchesRun(tc, &a,s, _T("a AND b") ); + + _TestSearchesRun(tc, &a,s, _T("term term term") ); + +#ifdef _UCS2 + TCHAR tmp1[100]; + lucene_utf8towcs(tmp1,"t\xc3\xbcrm term term",100); + _TestSearchesRun(tc, &a,s, tmp1 ); + + lucene_utf8towcs(tmp1,"\xc3\xbcmlaut",100); + _TestSearchesRun(tc, &a,s, tmp1 ); +#endif + + _TestSearchesRun(tc, &a,s, _T("(a AND b)") ); + _TestSearchesRun(tc, &a,s, _T("c OR (a AND b)") ); + _TestSearchesRun(tc, &a,s, _T("a AND NOT b") ); + _TestSearchesRun(tc, &a,s, _T("a AND -b") ); + _TestSearchesRun(tc, &a,s, _T("a AND !b") ); + _TestSearchesRun(tc, &a,s, _T("a && b") ); + _TestSearchesRun(tc, &a,s, _T("a && ! b") ); + + _TestSearchesRun(tc, &a,s, _T("a OR b") ); + _TestSearchesRun(tc, &a,s, _T("a || b") ); + _TestSearchesRun(tc, &a,s, _T("a OR !b") ); + _TestSearchesRun(tc, &a,s, _T("a OR ! b") ); + _TestSearchesRun(tc, &a,s, _T("a OR -b") ); + + _TestSearchesRun(tc, &a,s, _T("+term -term term") ); + _TestSearchesRun(tc, &a,s, _T("foo:term AND field:anotherTerm") ); + _TestSearchesRun(tc, &a,s, _T("term AND \"phrase phrase\"") ); + _TestSearchesRun(tc, &a,s, _T("search AND \"meaningful direction\"") ); + _TestSearchesRun(tc, &a,s, _T("\"hello there\"") ); + + _TestSearchesRun(tc, &a,s, _T("a AND b") ); + _TestSearchesRun(tc, &a,s, _T("hello") ); + _TestSearchesRun(tc, &a,s, _T("\"hello there\"") ); + + _TestSearchesRun(tc, &a,s, _T("germ term^2.0") ); + _TestSearchesRun(tc, &a,s, _T("term^2.0") ); + _TestSearchesRun(tc, &a,s, _T("term^2") ); + _TestSearchesRun(tc, &a,s, _T("term^2.3") ); + _TestSearchesRun(tc, &a,s, _T("\"germ term\"^2.0") ); + _TestSearchesRun(tc, &a,s, _T("\"term germ\"^2") ); + + _TestSearchesRun(tc, &a,s, _T("(foo OR bar) AND (baz OR boo)") ); + _TestSearchesRun(tc, &a,s, _T("((a OR b) AND NOT c) OR d") ); + _TestSearchesRun(tc, &a,s, _T("+(apple \"steve jobs\") -(foo bar baz)") ); + + _TestSearchesRun(tc, &a,s, _T("+title:(dog OR cat) -author:\"bob dole\"") ); + + + _TestSearchesRun(tc, &a,s, _T(".*") ); + _TestSearchesRun(tc, &a,s, _T("<*") ); + _TestSearchesRun(tc, &a,s, _T("/*") ); + _TestSearchesRun(tc, &a,s, _T(";*") ); + } + +void SearchTest(CuTest *tc, bool bram) { + uint64_t start = Misc::currentTimeMillis(); + + SimpleAnalyzer analyzer; + + char fsdir[CL_MAX_PATH]; + _snprintf(fsdir,CL_MAX_PATH,"%s/%s",cl_tempDir, "test.search"); + Directory* ram = (bram?(Directory*)_CLNEW RAMDirectory():(Directory*)FSDirectory::getDirectory(fsdir) ); + + IndexWriter writer( ram, &analyzer, true); + writer.setUseCompoundFile(false); + writer.setMaxBufferedDocs(3); + + const TCHAR* docs[] = { _T("a b c d e asdf"), + _T("a b c d e a b c d e asdg"), + _T("a b c d e f g h i j"), + _T("a c e"), + _T("e c a"), + _T("a c e a c e asef"), + _T("a c e a b c") + }; + + for (int j = 0; j < 7; j++) { + Document* d = _CLNEW Document(); + //no need to delete fields... document takes ownership + d->add(*_CLNEW Field(_T("contents"),docs[j],Field::STORE_YES | Field::INDEX_TOKENIZED)); + + writer.addDocument(d); + _CLDELETE(d); + } + writer.close(); + + if (!bram){ + ram->close(); + _CLDECDELETE(ram); + ram = (Directory*)FSDirectory::getDirectory(fsdir); + } + + IndexReader* reader = IndexReader::open(ram); + IndexSearcher searcher(reader); + + const TCHAR* queries[] = { + _T("a AND NOT b"), + _T("+a -b"), + _T("\"a b\""), + _T("\"a b c\""), + _T("a AND b"), + _T("a c"), + _T("\"a c\""), + _T("\"a c e\"") + }; + int shouldbe[] = {3,3,4,4,4,7,3,3}; + Hits* hits = NULL; + QueryParser parser(_T("contents"), &analyzer); + + for (int k = 0; k < 8; k++) { + Query* query = parser.parse(queries[k]); + + TCHAR* qryInfo = query->toString(_T("contents")); + hits = searcher.search(query); + CLUCENE_ASSERT( hits->length() == shouldbe[k] ); + _CLDELETE_CARRAY(qryInfo); + _CLDELETE(hits); + _CLDELETE(query); + } + + //test MultiPositionQuery... + { + MultiPhraseQuery* query = _CLNEW MultiPhraseQuery(); + RefCountArray terms(3); + Term* termE = _CLNEW Term(_T("contents"), _T("e")); + terms[0] = _CLNEW Term(_T("contents"), _T("asdf")); + terms[1] = _CLNEW Term(_T("contents"), _T("asdg")); + terms[2] = _CLNEW Term(_T("contents"), _T("asef")); + + query->add(termE); + _CLDECDELETE(termE); + + query->add(&terms); + terms.deleteValues(); + + TCHAR* qryInfo = query->toString(_T("contents")); + hits = searcher.search(query); + CLUCENE_ASSERT( hits->length() == 3 ); + _CLDELETE_CARRAY(qryInfo); + _CLDELETE(hits); + _CLDELETE(query); + } + + searcher.close(); + reader->close(); + _CLDELETE( reader ); + + ram->close(); + _CLDECDELETE(ram); + + CuMessageA (tc,"took %d milliseconds\n", (int32_t)(Misc::currentTimeMillis()-start)); +} + +void testNormEncoding(CuTest *tc) { + //just a quick test of the default similarity + CLUCENE_ASSERT(CL_NS(search)::Similarity::getDefault()->queryNorm(1)==1.0); + + float_t f = CL_NS(search)::Similarity::getDefault()->queryNorm(9); + f -= (1.0/3.0); + if ( f < 0 ) + f *= -1; + CLUCENE_ASSERT(f < 0.1); + + //test that div by zero is handled + float_t tmp = CL_NS(search)::Similarity::getDefault()->lengthNorm(_T("test"),0); + tmp = CL_NS(search)::Similarity::getDefault()->queryNorm(0); + + //test that norm encoding is working properly + CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(-1)==0 ); + CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(0)==0 ); + CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(1)==124 ); + CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(1)==124 ); + CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(7516192768.0 )==255); + + + CLUCENE_ASSERT( CL_NS(search)::Similarity::decodeNorm(124)==1 ); + CLUCENE_ASSERT( CL_NS(search)::Similarity::decodeNorm(255)==7516192768.0 ); + + //well know value: + CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(0.5f) == 120 ); + + //can decode self + CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(CL_NS(search)::Similarity::decodeNorm(57)) == 57 ); +} + +void testSrchManyHits(CuTest* /*tc*/) { + SimpleAnalyzer analyzer; + RAMDirectory ram; + IndexWriter writer( &ram, &analyzer, true); + + const TCHAR* docs[] = { _T("a b c d e"), + _T("a b c d e a b c d e"), + _T("a b c d e f g h i j"), + _T("a c e"), + _T("e c a"), + _T("a c e a c e"), + _T("a c e a b c") + }; + + for (int j = 0; j < 140; j++) { + Document* d = _CLNEW Document(); + //no need to delete fields... document takes ownership + int x = j%7; + d->add(*_CLNEW Field(_T("contents"),docs[x],Field::STORE_YES | Field::INDEX_TOKENIZED)); + + writer.addDocument(d); + _CLDELETE(d); + } + writer.close(); + + IndexSearcher searcher(&ram); + + BooleanQuery query; + Term* t = _CLNEW Term(_T("contents"), _T("a")); + query.add(_CLNEW TermQuery(t),true,false, false); + _CLDECDELETE(t); + Hits* hits = searcher.search(&query); + for ( size_t x=0;xlength();x++ ){ + hits->doc(x); + } + _CLDELETE(hits); + searcher.close(); +} + +void testSrchMulti(CuTest *tc) { + SimpleAnalyzer analyzer; + RAMDirectory ram0; + IndexWriter writer0( &ram0, &analyzer, true); + + const TCHAR* docs0[] = { + _T("a") + }; + + Document* d = _CLNEW Document(); + //no need to delete fields... document takes ownership + d->add(*_CLNEW Field(_T("contents"),docs0[0],Field::STORE_YES | Field::INDEX_TOKENIZED)); + + writer0.addDocument(d); + _CLDELETE(d); + writer0.close(); + + RAMDirectory ram1; + IndexWriter writer1( &ram1, &analyzer, true); + + const TCHAR* docs1[] = { + _T("e") + }; + + d = _CLNEW Document(); + //no need to delete fields... document takes ownership + d->add(*_CLNEW Field(_T("contents"),docs1[0],Field::STORE_YES | Field::INDEX_TOKENIZED)); + + writer1.addDocument(d); + _CLDELETE(d); + writer1.close(); + + IndexSearcher searcher0(&ram0); + IndexSearcher searcher1(&ram1); + + Searchable* searchers[3]; + + searchers[0] = &searcher0; + searchers[1] = &searcher1; + searchers[2] = NULL; + + MultiSearcher searcher(searchers); + + Term* termA = _CLNEW Term(_T("contents"), _T("a")); + Term* termC = _CLNEW Term(_T("contents"), _T("c")); + RangeQuery query(termA, termC, true); + _CLDECDELETE(termA); + _CLDECDELETE(termC); + + Query* rewritten = searcher.rewrite(&query); + Hits* hits = searcher.search(rewritten); + for ( size_t x=0;xlength();x++ ){ + hits->doc(x); + } + CLUCENE_ASSERT(hits->length() == 1); + if (&query != rewritten) { + _CLDELETE(rewritten); + } + _CLDELETE(hits); + searcher.close(); +} + +void ramSearchTest(CuTest *tc) { SearchTest(tc, true); } +void fsSearchTest(CuTest *tc) { SearchTest(tc, false); } + +CuSuite *testsearch(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Search Test")); + SUITE_ADD_TEST(suite, ramSearchTest); + SUITE_ADD_TEST(suite, fsSearchTest); + + SUITE_ADD_TEST(suite, testNormEncoding); + SUITE_ADD_TEST(suite, testSrchManyHits); + SUITE_ADD_TEST(suite, testSrchMulti); + SUITE_ADD_TEST(suite, testSrchOpenIndex); + SUITE_ADD_TEST(suite, testSrchPunctuation); + SUITE_ADD_TEST(suite, testSrchSlop); + SUITE_ADD_TEST(suite, testSrchNumbers); + SUITE_ADD_TEST(suite, testSrchWildcard); + SUITE_ADD_TEST(suite, testSrchEscapes); + SUITE_ADD_TEST(suite, testSrchRange); + SUITE_ADD_TEST(suite, testSrchSimple); + SUITE_ADD_TEST(suite, testSrchCloseIndex); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestSort.cpp clucene-core-2.3.3.4/src/test/search/TestSort.cpp --- clucene-core-0.9.21b/src/test/search/TestSort.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestSort.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,547 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +/** + * Unit tests for sorting code. + * + */ + +Searcher* sort_full; +Searcher* sort_searchX; +Searcher* sort_searchY; +Query* sort_queryX; +Query* sort_queryY; +Query* sort_queryA; +Query* sort_queryF; +Sort* _sort; +SimpleAnalyzer sort_analyser; + +typedef StringMap sortScores; +typedef std::pair scorePair; + +// document data: +// the tracer field is used to determine which document was hit +// the contents field is used to search and _sort by relevance +// the int field to _sort by int +// the float field to _sort by float +// the string field to _sort by string +const TCHAR* data[11][6] = { + // tracer contents int float string custom + { _T("A"), _T("x a"), _T("5"), _T("4f"), _T("c"), _T("A-3") }, + { _T("B"), _T("y a"), _T("5"), _T("3.4028235E38"), _T("i"), _T("B-10") }, + { _T("C"), _T("x a b c"), _T("2147483647"), _T("1.0"), _T("j"), _T("A-2") }, + { _T("D"), _T("y a b c"), _T("-1"), _T("0.0f"), _T("a"), _T("C-0") }, + { _T("E"), _T("x a b c d"), _T("5"), _T("2f"), _T("h"), _T("B-8") }, + { _T("F"), _T("y a b c d"), _T("2"), _T("3.14159f"), _T("g"), _T("B-1") }, + { _T("G"), _T("x a b c d"), _T("3"), _T("-1.0"), _T("f"), _T("C-100") }, + { _T("H"), _T("y a b c d"), _T("0"), _T("1.4E-45"), _T("e"), _T("C-88") }, + { _T("I"), _T("x a b c d e f"), _T("-2147483648"), _T("1.0e+0"), _T("d"), _T("A-10") }, + { _T("J"), _T("y a b c d e f"), _T("4"), _T(".5"), _T("b"), _T("C-7") }, + { _T("Z"), _T("f"), NULL, NULL, NULL, NULL } + }; + +Searcher* sort_getIndex (bool even, bool odd){ + RAMDirectory* indexStore = _CLNEW RAMDirectory; + IndexWriter writer(indexStore, &sort_analyser, true); + for (int i=0; i<11; ++i) { + if (((i%2)==0 && even) || ((i%2)==1 && odd)) { + Document doc; + doc.add (*_CLNEW Field ( _T("tracer"), data[i][0], Field::STORE_YES)); + doc.add (*_CLNEW Field ( _T("contents"), data[i][1], Field::INDEX_TOKENIZED)); + if (data[i][2] != NULL) + doc.add (*_CLNEW Field (_T("int"), data[i][2], Field::INDEX_UNTOKENIZED)); + if (data[i][3] != NULL) + doc.add (*_CLNEW Field (_T("float"), data[i][3], Field::INDEX_UNTOKENIZED)); + if (data[i][4] != NULL) + doc.add (*_CLNEW Field (_T("string"), data[i][4], Field::INDEX_UNTOKENIZED)); + if (data[i][5] != NULL) + doc.add (*_CLNEW Field (_T("custom"), data[i][5], Field::INDEX_UNTOKENIZED)); + writer.addDocument (&doc); + } + } + writer.close (); + IndexSearcher* res = _CLNEW IndexSearcher(indexStore); + _CLDECDELETE(indexStore); + return res; +} + +void testSortSetup(CuTest* /*tc*/) { + sort_full = sort_getIndex (true, true); + sort_searchX = sort_getIndex (true, false); + sort_searchY = sort_getIndex (false, true); + + Term* tmp; + + tmp = _CLNEW Term (_T("contents"), _T("x")); + sort_queryX = _CLNEW TermQuery (tmp); + _CLDECDELETE(tmp); + + tmp = _CLNEW Term (_T("contents"), _T("y")); + sort_queryY = _CLNEW TermQuery (tmp); + _CLDECDELETE(tmp); + + tmp = _CLNEW Term (_T("contents"), _T("a")); + sort_queryA = _CLNEW TermQuery (tmp); + _CLDECDELETE(tmp); + + tmp = _CLNEW Term (_T("contents"), _T("f")); + sort_queryF = _CLNEW TermQuery (tmp); + _CLDECDELETE(tmp); + + _sort = _CLNEW Sort(); +} + +void testSortCleanup(CuTest* /*tc*/) { + _CLDELETE(sort_full); + _CLDELETE(sort_searchX); + _CLDELETE(sort_searchY); + _CLDELETE(sort_queryX); + _CLDELETE(sort_queryY); + _CLDELETE(sort_queryA); + _CLDELETE(sort_queryF); + _CLDELETE(_sort); +} + +// make sure the documents returned by the search match the expected list +void sortMatches (CuTest *tc, Searcher* searcher, Query* query, Sort* sort, const TCHAR* expectedResult){ + Hits* result = searcher->search (query, sort); + StringBuffer buff(10); + int32_t n = result->length(); + for (int i=0; idoc(i); + TCHAR** v = doc.getValues(_T("tracer")); //todo: should be const??? + for (int j=0; v[j]!=NULL; ++j) { + buff.append (v[j]); + } + _CLDELETE_CARRAY_ALL(v); + } + CuAssertStrEquals (tc, _T("tracer value"), expectedResult, buff.getBuffer()); + + _CLDELETE(result); +} +void sortSameValues (CuTest* tc, sortScores* m1, sortScores* m2, bool deleteM1=false, bool deleteM2=true) { + CuAssertIntEquals (tc, _T("sortScores size not equal"),m1->size(), m2->size()); + sortScores::iterator iter = m1->begin(); + float_t m=pow(10.0,-8); + while (iter != m1->end()) { + TCHAR* key = iter->first; + + sortScores::iterator i1 = m1->find(key); + sortScores::iterator i2 = m2->find(key); + + float_t f1 = i1->second; + float_t f2 = i2->second; + + float_t diff = f1-f2; + if ( diff < 0 ) + diff *= -1; + if ( diff>m ) + CuAssert(tc,_T("sortSameValue f1!=f2"),false); + iter++; + } + + if ( deleteM1 ) + _CLDELETE(m1); + if ( deleteM2 ) + _CLDELETE(m2); +} +// make sure the documents returned by the search match the expected list pattern +void sortMatchesPattern (CuTest* tc, Searcher* searcher, Query* query, Sort* sort, const TCHAR* pattern){ + Hits* result = searcher->search (query, sort); + int32_t n = result->length(); + StringBuffer buff; + for (int i=0; idoc(i); + TCHAR** v = doc.getValues(_T("tracer")); + for (int j=0; v[j]!=NULL; ++j) { + buff.append (v[j]); + } + _CLDELETE_CARRAY_ALL(v); + } + + //todo:need to actually test these matches... don't have regexp... + CuMessage(tc,_T("\nmatching \"%s\" against pattern \"%s\""),buff.getBuffer(),pattern); + // System.out.println ("matching \""+buff+"\" against pattern \""+pattern+"\""); + //assertTrue (Pattern.compile(pattern).matcher(buff.toString()).matches()); + + _CLDELETE(result); +} + +// runs a variety of sorts useful for multisearchers +void sort_runMultiSorts (CuTest* tc, Searcher* multi) { + _sort->setSort (SortField::FIELD_DOC()); + sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("[AB]{2}[CD]{2}[EF]{2}[GH]{2}[IJ]{2}")); + + _sort->setSort (_CLNEW SortField (_T("int"), SortField::INT, false)); + sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("IDHFGJ[ABE]{3}C")); + + SortField* sorts1[3]= {_CLNEW SortField (_T("int"), SortField::INT, false), SortField::FIELD_DOC(), NULL}; + _sort->setSort ( sorts1 ); + sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("IDHFGJ[AB]{2}EC")); + + _sort->setSort (_T("int")); + sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("IDHFGJ[AB]{2}EC")); + + SortField* sorts2[3] = { _CLNEW SortField (_T("float"), SortField::FLOAT, false), SortField::FIELD_DOC(), NULL}; + _sort->setSort (sorts2); + sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("GDHJ[CI]{2}EFAB")); + + _sort->setSort (_T("float")); + sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("GDHJ[CI]{2}EFAB")); + + _sort->setSort (_T("string")); + sortMatches (tc, multi, sort_queryA, _sort, _T("DJAIHGFEBC")); + + _sort->setSort (_T("int"), true); + sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("C[AB]{2}EJGFHDI")); + + _sort->setSort (_T("float"), true); + sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("BAFE[IC]{2}JHDG")); + + _sort->setSort (_T("string"), true); + sortMatches (tc, multi, sort_queryA, _sort, _T("CBEFGHIAJD")); + + //_sort->setSort (_CLNEW SortField[] { _CLNEW SortField (_T("string"), Locale.US) }); + //sortMatches (tc, multi, sort_queryA, _sort, _T("DJAIHGFEBC")); + + //_sort->setSort (_CLNEW SortField[] { _CLNEW SortField (_T("string"), Locale.US, true) }); + //sortMatches (tc, multi, sort_queryA, _sort, _T("CBEFGHIAJD")); + + const TCHAR* sorts3[3] = {_T("int"),_T("float"),NULL}; + _sort->setSort ( sorts3 ); + sortMatches (tc, multi, sort_queryA, _sort, _T("IDHFGJEABC")); + + const TCHAR* sorts4[3] = {_T("float"),_T("string"),NULL}; + _sort->setSort (sorts4); + sortMatches (tc, multi, sort_queryA, _sort, _T("GDHJICEFAB")); + + _sort->setSort (_T("int")); + sortMatches (tc, multi, sort_queryF, _sort, _T("IZJ")); + + _sort->setSort (_T("int"), true); + sortMatches (tc, multi, sort_queryF, _sort, _T("JZI")); + + _sort->setSort (_T("float")); + sortMatches (tc, multi, sort_queryF, _sort, _T("ZJI")); + + _sort->setSort (_T("string")); + sortMatches (tc, multi, sort_queryF, _sort, _T("ZJI")); + + _sort->setSort (_T("string"), true); + sortMatches (tc, multi, sort_queryF, _sort, _T("IJZ")); +} + + sortScores* sort_getScores (CuTest* tc, Hits* hits, bool deleteHits=true){ + sortScores* scoreMap = _CLNEW sortScores(true); + int n = hits->length(); + float_t m=pow(10.0,-8); + + for (int i=0; idoc(i); + TCHAR** v = doc.getValues( _T("tracer")); + + int vLength=0; + while(v[vLength]!=NULL) + vLength++; + + CuAssertIntEquals (tc, _T("tracer values"), vLength, 1); + + if ( scoreMap->find(v[0]) != scoreMap->end () ){ + //this (should) be a multi search... the document will be double, so here we check that + //the existing value is the same as this value... and then delete and ignore it. + float_t diff = scoreMap->find(v[0])->second - hits->score(i); + if ( diff < 0 ) + diff *= -1; + if ( diff>m ) + CuAssert(tc,_T("sort_getScores(multi or incorrect) f1!=f2"),false); + + _CLDELETE_CARRAY_ALL(v); + }else{ + scoreMap->insert ( scorePair(v[0], hits->score(i)) ); + _CLDELETE_ARRAY(v); + } + } + if ( deleteHits ) + _CLDELETE(hits); + return scoreMap; +} + + + +////////////////////////////////////////////////////////////////////// +// The actual tests +////////////////////////////////////////////////////////////////////// +void testBuiltInSorts(CuTest *tc) { + _CLDELETE(_sort); + _sort = _CLNEW Sort(); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("ACEGI")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("BDFHJ")); + + _sort->setSort(SortField::FIELD_DOC()); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("ACEGI")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("BDFHJ")); +} + +// test sorts where the type of field is specified +void testTypedSort(CuTest *tc){ + SortField* sorts1[3] = { _CLNEW SortField (_T("int"), SortField::INT,false), SortField::FIELD_DOC(), NULL }; + _sort->setSort (sorts1); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("IGAEC")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("DHFJB")); + + SortField* sorts2[3] = { _CLNEW SortField (_T("float"), SortField::FLOAT,false), SortField::FIELD_DOC(), NULL }; + _sort->setSort (sorts2); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("GCIEA")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("DHJFB")); + + SortField* sorts3[3] = { _CLNEW SortField (_T("string"), SortField::STRING,false), SortField::FIELD_DOC(), NULL }; + _sort->setSort (sorts3); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("AIGEC")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("DJHFB")); +} + +// test sorts when there's nothing in the index +void testEmptyIndex(CuTest *tc) { + Searcher* empty = sort_getIndex(false,false); + + _CLDELETE(_sort); + _sort = _CLNEW Sort(); + sortMatches (tc, empty, sort_queryX, _sort, _T("")); + + _sort->setSort(SortField::FIELD_DOC()); + sortMatches (tc, empty, sort_queryX, _sort, _T("")); + + SortField* sorts1[3] = { _CLNEW SortField (_T("int"), SortField::INT,false), SortField::FIELD_DOC(), NULL }; + _sort->setSort (sorts1); + sortMatches (tc, empty, sort_queryX, _sort, _T("")); + + SortField* sorts3[3] = { _CLNEW SortField (_T("string"), SortField::STRING,false), SortField::FIELD_DOC(), NULL }; + _sort->setSort (sorts3); + sortMatches (tc, empty, sort_queryX, _sort, _T("")); + + SortField* sorts2[3] = { _CLNEW SortField (_T("float"), SortField::FLOAT,false), SortField::FIELD_DOC(), NULL }; + _sort->setSort (sorts2); + sortMatches (tc, empty, sort_queryX, _sort, _T("")); + + _CLDELETE(empty); +} + +// test sorts where the type of field is determined dynamically +void testAutoSort(CuTest *tc) { + _sort->setSort(_T("int")); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("IGAEC")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("DHFJB")); + + _sort->setSort(_T("float")); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("GCIEA")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("DHJFB")); + + _sort->setSort(_T("string")); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("AIGEC")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("DJHFB")); +} + +// test sorts in reverse +void testReverseSort(CuTest *tc){ + /*SortField* sorts[3] = { _CLNEW SortField (NULL, SortField::INT,true), SortField::FIELD_DOC, NULL }; + _sort->setSort (sorts); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("IEGCA")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("JFHDB"));*/ + + _sort->setSort (_CLNEW SortField (NULL, SortField::DOC, true)); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("IGECA")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("JHFDB")); + + _sort->setSort (_T("int"), true); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("CAEGI")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("BJFHD")); + + _sort->setSort (_T("float"), true); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("AECIG")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("BFJHD")); + + _sort->setSort (_T("string"), true); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("CEGIA")); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("BFHJD")); +} + +void testEmptyFieldSort(CuTest *tc) { + _sort->setSort ( _T("string")); + sortMatches (tc, sort_full, sort_queryF, _sort, _T("ZJI")); + + _sort->setSort ( _T("string"), true); + sortMatches (tc, sort_full, sort_queryF, _sort, _T("IJZ")); + + _sort->setSort ( _T("int")); + sortMatches (tc, sort_full, sort_queryF, _sort, _T("IZJ")); + + _sort->setSort ( _T("int"), true); + sortMatches (tc, sort_full, sort_queryF, _sort, _T("JZI")); + + _sort->setSort ( _T("float")); + sortMatches (tc, sort_full, sort_queryF, _sort, _T("ZJI")); + + _sort->setSort ( _T("float"), true); + sortMatches (tc, sort_full, sort_queryF, _sort, _T("IJZ")); +} + + +// test sorts using a series of fields +void testSortCombos(CuTest *tc) { + const TCHAR* sorts1[3]= {_T("int"),_T("float"), NULL}; + _sort->setSort ( sorts1 ); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("IGEAC")); + + SortField* sorts2[3] = { _CLNEW SortField (_T("int"), SortField::AUTO, true), + _CLNEW SortField (NULL, SortField::DOC, true), NULL }; + _sort->setSort ( sorts2); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("CEAGI")); + + const TCHAR* sorts3[3]= {_T("float"),_T("string"), NULL}; + _sort->setSort (sorts3); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("GICEA")); +} + +// test a custom _sort function +/*void testCustomSorts(CuTest *tc) { + _sort->setSort (_CLNEW SortField (_T("custom"), SampleComparable.getComparatorSource())); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("CAIEG")); + + _sort->setSort (_CLNEW SortField (_T("custom"), SampleComparable.getComparatorSource(), true)); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("HJDBF")); + + SortComparator custom = SampleComparable.getComparator(); + _sort->setSort (_CLNEW SortField (_T("custom"), custom)); + sortMatches (tc, sort_full, sort_queryX, _sort, _T("CAIEG")); + + _sort->setSort (_CLNEW SortField (_T("custom"), custom, true)); + sortMatches (tc, sort_full, sort_queryY, _sort, _T("HJDBF")); +}*/ + +// test a variety of sorts using more than one searcher +void testMultiSort(CuTest *tc) { + Searchable* searchables[3] ={ sort_searchX, sort_searchY, NULL }; + MultiSearcher searcher(searchables); + + sort_runMultiSorts (tc, &searcher); + searcher.close(); +} + + +// test that the relevancy scores are the same even if +// hits are sorted +void testNormalizedScores(CuTest *tc) { + + // capture relevancy scores + sortScores* scoresX = sort_getScores (tc, sort_full->search (sort_queryX)); + sortScores* scoresY = sort_getScores (tc, sort_full->search (sort_queryY)); + sortScores* scoresA = sort_getScores (tc, sort_full->search (sort_queryA)); + + // we'll test searching locally, remote and multi + // note: the multi test depends on each separate index containing + // the same documents as our local index, so the computed normalization + // will be the same. so we make a multi searcher over two equal document + // sets - not realistic, but necessary for testing. + //MultiSearcher remote(_CLNEW Searchable[] { getRemote() }); + Searchable* searchables[3] = { sort_full, sort_full,NULL }; + MultiSearcher multi( searchables ); + + // change sorting and make sure relevancy stays the same + + _CLDELETE(_sort); + _sort = _CLNEW Sort(); + sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); + sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); + + _sort->setSort(SortField::FIELD_DOC()); + sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); + sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); + + _sort->setSort (_T("int")); + sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); + sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); + + _sort->setSort (_T("float")); + sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); + sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); + + _sort->setSort (_T("string")); + sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); + sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); + + const TCHAR* sorts1[3] = { _T("int"),_T("float"),NULL}; + _sort->setSort ( sorts1 ); + sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); + sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); + + SortField* sorts2[3] = { _CLNEW SortField (_T("int"), SortField::AUTO, true), _CLNEW SortField (NULL, SortField::DOC, true), NULL }; + _sort->setSort ( sorts2 ); + sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); + sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); + + const TCHAR* sorts3[3] = { _T("float"),_T("string"),NULL}; + _sort->setSort (sorts3); + sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); + sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); + sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); + sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); + + _CLDELETE(scoresX); + _CLDELETE(scoresY); + _CLDELETE(scoresA); +} + +CuSuite *testsort(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Sort Test")); + SUITE_ADD_TEST(suite, testSortSetup); + + SUITE_ADD_TEST(suite, testBuiltInSorts); + SUITE_ADD_TEST(suite, testTypedSort); + SUITE_ADD_TEST(suite, testEmptyIndex); + SUITE_ADD_TEST(suite, testAutoSort); + SUITE_ADD_TEST(suite, testEmptyFieldSort); + SUITE_ADD_TEST(suite, testSortCombos); + //SUITE_ADD_TEST(suite, testCustomSorts); + SUITE_ADD_TEST(suite, testMultiSort); + SUITE_ADD_TEST(suite, testNormalizedScores); + SUITE_ADD_TEST(suite, testReverseSort); + + SUITE_ADD_TEST(suite, testSortCleanup); + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestTermVector.cpp clucene-core-2.3.3.4/src/test/search/TestTermVector.cpp --- clucene-core-0.9.21b/src/test/search/TestTermVector.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestTermVector.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,272 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + +IndexSearcher* tv_searcher = NULL; +RAMDirectory* tv_directory = NULL; + +void testTermPositionVectors(CuTest *tc) { + CLUCENE_ASSERT(tv_searcher!=NULL); + + Term* term = _CLNEW Term(_T("field"), _T("fifty")); + TermQuery query(term); + _CLDECDELETE(term); + try { + Hits* hits = tv_searcher->search(&query); + CuAssert (tc,_T("hits.length != 100"), 100 == hits->length()); + + for (size_t i = 0; i < hits->length(); i++) + { + ArrayBase* vector = tv_searcher->getReader()->getTermFreqVectors(hits->id(i)); + CLUCENE_ASSERT(vector != NULL); + CLUCENE_ASSERT(vector->length== 1); + vector->deleteValues(); + _CLLDELETE(vector); + } + + _CLDELETE(hits); + } catch (CLuceneError& e) { + if ( e.number() == CL_ERR_IO ) + CuAssert(tc, _T("IO Error"),false); + + throw e; + } +} +void testTermVectors(CuTest *tc) { + CLUCENE_ASSERT(tv_searcher!=NULL); + + Term* term = _CLNEW Term(_T("field"), _T("seventy")); + TermQuery query(term); + _CLDECDELETE(term); + + try { + Hits* hits = tv_searcher->search(&query); + CuAssertIntEquals(tc,_T("hits!=100"), 100, hits->length()); + + for (size_t i = 0; i < hits->length(); i++) + { + ArrayBase* vector = tv_searcher->getReader()->getTermFreqVectors(hits->id(i)); + CLUCENE_ASSERT(vector != NULL); + CLUCENE_ASSERT(vector->length == 1); + vector->deleteValues(); + _CLLDELETE(vector); + } + + //test mem leaks with vectors + CL_NS(search)::Explanation expl; + tv_searcher->explain(&query, hits->id(50), &expl); + TCHAR* tmp = expl.toString(); + _CLDELETE_CARRAY(tmp); + + _CLDELETE(hits); + + } catch (CLuceneError& e) { + if ( e.number() == CL_ERR_IO ) + CuAssert(tc,_T("IO Exception"),false); + else + throw e; + } +} + +void testTVSetup(CuTest* /*tc*/) { + SimpleAnalyzer a; + tv_directory = _CLNEW RAMDirectory(); + IndexWriter writer(tv_directory, &a, true); + writer.setUseCompoundFile(false); + + TCHAR buf[200]; + for (int32_t i = 0; i < 1000; i++) { + Document doc; + English::IntToEnglish(i,buf,200); + + int mod3 = i % 3; + int mod2 = i % 2; + int termVector = 0; + if (mod2 == 0 && mod3 == 0) + termVector = Field::TERMVECTOR_WITH_POSITIONS_OFFSETS; + else if (mod2 == 0) + termVector = Field::TERMVECTOR_WITH_POSITIONS; + else if (mod3 == 0) + termVector = Field::TERMVECTOR_WITH_OFFSETS; + else + termVector = Field::TERMVECTOR_YES; + + doc.add(*new Field(_T("field"), buf, Field::STORE_YES | Field::INDEX_TOKENIZED | termVector )); + writer.addDocument(&doc); + } + writer.close(); + tv_searcher = _CLNEW IndexSearcher(tv_directory); +} +void testTVCleanup(CuTest* /*tc*/) { + _CLDELETE(tv_searcher); + tv_directory->close(); + _CLDELETE(tv_directory); +} + +void setupDoc(Document& doc, const TCHAR* text) +{ + doc.add(*new Field(_T("field"), text, Field::STORE_YES | + Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES)); +} +struct __TCharCompare +{ + bool operator()(const TCHAR* s1, const TCHAR* s2) const + { + return _tcscmp(s1, s2) < 0; + } +}; + +void testKnownSetOfDocuments(CuTest *tc) { + const TCHAR* test1 = _T("eating chocolate in a computer lab"); //6 terms + const TCHAR* test2 = _T("computer in a computer lab"); //5 terms + const TCHAR* test3 = _T("a chocolate lab grows old"); //5 terms + const TCHAR* test4 = _T("eating chocolate with a chocolate lab in an old chocolate colored computer lab"); //13 terms + + typedef std::map test4MapType; + test4MapType test4Map; + test4Map.insert( std::pair(_T("chocolate"), 3) ); + test4Map.insert( std::pair(_T("lab"), 2) ); + test4Map.insert( std::pair(_T("eating"), 1) ); + test4Map.insert( std::pair(_T("computer"), 1) ); + test4Map.insert( std::pair(_T("with"), 1) ); + test4Map.insert( std::pair(_T("a"), 1) ); + test4Map.insert( std::pair(_T("colored"), 1) ); + test4Map.insert( std::pair(_T("in"), 1) ); + test4Map.insert( std::pair(_T("an"), 1) ); + test4Map.insert( std::pair(_T("computer"), 1) ); + test4Map.insert( std::pair(_T("old"), 1) ); + + Document testDoc1; + setupDoc(testDoc1, test1); + Document testDoc2; + setupDoc(testDoc2, test2); + Document testDoc3; + setupDoc(testDoc3, test3); + Document testDoc4; + setupDoc(testDoc4, test4); + + RAMDirectory dir; + + try { + SimpleAnalyzer a; + IndexWriter writer(&dir, &a, true); + + writer.addDocument(&testDoc1); + writer.addDocument(&testDoc2); + writer.addDocument(&testDoc3); + writer.addDocument(&testDoc4); + writer.close(); + + IndexSearcher knownSearcher(&dir); + TermEnum* termEnum = knownSearcher.getReader()->terms(); + TermDocs* termDocs = knownSearcher.getReader()->termDocs(); + + CL_NS(search)::Similarity* sim = knownSearcher.getSimilarity(); + while (termEnum->next() == true) + { + Term* term = termEnum->term(true); + //System.out.println("Term: " + term); + termDocs->seek(term); + + while (termDocs->next()) + { + int32_t docId = termDocs->doc(); + int32_t freq = termDocs->freq(); + //System.out.println("Doc Id: " + docId + " freq " + freq); + TermFreqVector* vector = knownSearcher.getReader()->getTermFreqVector(docId, _T("field")); + float_t tf = sim->tf(freq); + float_t idf = sim->idf(term, &knownSearcher); + //float_t qNorm = sim.queryNorm() + idf += tf; //remove warning + + const ArrayBase* terms = vector->getTerms(); + CLUCENE_ASSERT(vector != NULL); + int termsCount=terms != NULL ? terms->length : 0; + + //This is fine since we don't have stop words + float_t lNorm = sim->lengthNorm(_T("field"), termsCount); + lNorm ++;//remove warning + + //float_t coord = sim.coord() + //System.out.println("TF: " + tf + " IDF: " + idf + " LenNorm: " + lNorm); + const ArrayBase* vTerms = vector->getTerms(); + const ArrayBase* freqs = vector->getTermFrequencies(); + size_t i=0; + while ( vTerms && i < vTerms->length ) + { + if ( _tcscmp(term->text(), vTerms->values[i]) == 0 ) + { + CLUCENE_ASSERT((*freqs)[i] == freq); + } + i++; + } + + _CLDELETE(vector); + } + _CLDECDELETE(term); + //System.out.println("--------"); + } + _CLDELETE(termEnum); + _CLDELETE(termDocs); + + + Term* tqTerm = _CLNEW Term(_T("field"), _T("chocolate")); + TermQuery query(tqTerm); + _CLDECDELETE(tqTerm); + + Hits* hits = knownSearcher.search(&query); + //doc 3 should be the first hit b/c it is the shortest match + CLUCENE_ASSERT(hits->length() == 3); + float_t score = hits->score(0); + score++; + + CLUCENE_ASSERT(2==hits->id(0) ); + CLUCENE_ASSERT(3==hits->id(1) ); + CLUCENE_ASSERT(0==hits->id(2) ); + + TermFreqVector* vector = knownSearcher.getReader()->getTermFreqVector(hits->id(1), _T("field")); + CLUCENE_ASSERT(vector != NULL); + //_tprintf(_T("Vector: %s\n"),vector); + const ArrayBase* terms = vector->getTerms(); + const ArrayBase* freqs = vector->getTermFrequencies(); + CLUCENE_ASSERT(terms != NULL); + + int termsLength = terms->length; + CLUCENE_ASSERT(termsLength == 10); + + for (int32_t i = 0; i < termsLength; i++) { + const TCHAR* term = terms->values[i]; + //_tprintf(_T("Term: %s, test4map.size()=%d\n"),term, test4Map.size()); + int32_t freq = (*freqs)[i]; + CLUCENE_ASSERT( _tcsstr(test4,term) != NULL ); + test4MapType::const_iterator itr = test4Map.find(term); + CLUCENE_ASSERT( itr != test4Map.end() ); + int32_t freqInt = itr->second; + CLUCENE_ASSERT(freqInt == freq); + } + _CLDELETE(vector); + _CLDELETE(hits); + knownSearcher.close(); + + } catch (CLuceneError& e) { + CuAssert(tc, e.twhat(),false); + } +} + +CuSuite *testtermvector(void) +{ + tv_searcher = NULL; + CuSuite *suite = CuSuiteNew(_T("CLucene Term Vector Test")); + SUITE_ADD_TEST(suite, testTVSetup); + SUITE_ADD_TEST(suite, testKnownSetOfDocuments); + SUITE_ADD_TEST(suite, testTermVectors); + SUITE_ADD_TEST(suite, testTermPositionVectors); + SUITE_ADD_TEST(suite, testTVCleanup); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/search/TestWildcard.cpp clucene-core-2.3.3.4/src/test/search/TestWildcard.cpp --- clucene-core-0.9.21b/src/test/search/TestWildcard.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/search/TestWildcard.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,132 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + +#ifndef NO_WILDCARD_QUERY + +void _testWildcard(CuTest* tc, IndexSearcher* searcher, const TCHAR* qt, int expectedLen){ + Term* term = _CLNEW Term(_T("body"), qt); + Query* query = _CLNEW WildcardQuery(term); + + //test the wildcardquery + Hits* result = searcher->search(query); + CLUCENE_ASSERT(expectedLen == result->length()); + _CLDELETE(result); + _CLDELETE(query); + + + //now test wildcardfilter + Filter* filter = _CLNEW WildcardFilter(term); + BitSet* bits = filter->bits(searcher->getReader()); + CLUCENE_ASSERT(expectedLen == bits->count()); + _CLDELETE(filter); + _CLDELETE(bits); + + _CLDECDELETE(term); +} + + + + + void testAsterisk(CuTest *tc){ + RAMDirectory indexStore; + SimpleAnalyzer an; + IndexWriter* writer = _CLNEW IndexWriter(&indexStore, &an, true); + Document doc1; + Document doc2; + doc1.add(*_CLNEW Field(_T("body"), _T("metal"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + doc2.add(*_CLNEW Field(_T("body"), _T("metals"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + + writer->addDocument(&doc1); + writer->addDocument(&doc2); + writer->close(); + _CLDELETE(writer); + ////////////////////////////////////////////////// + + IndexReader* reader = IndexReader::open(&indexStore); + IndexSearcher* searcher = _CLNEW IndexSearcher(reader); + + _testWildcard(tc, searcher, _T("metal*"), 2); + _testWildcard(tc, searcher, _T("m*tal"), 1); + _testWildcard(tc, searcher, _T("m*tal*"), 2); + + + Term* term = _CLNEW Term(_T("body"), _T("metal")); + Query* query1 = _CLNEW TermQuery(term); + _CLDECDELETE(term); + + Hits* result = searcher->search(query1); + CLUCENE_ASSERT(1 == result->length()); + _CLDELETE(result); + _CLDELETE(query1); + + + indexStore.close(); + searcher->close(); + reader->close(); + _CLDELETE(reader); + _CLDELETE(searcher); + } + + void testQuestionmark(CuTest *tc){ + RAMDirectory indexStore; + SimpleAnalyzer an; + IndexWriter* writer = _CLNEW IndexWriter(&indexStore, &an, true); + Document doc1; + Document doc2; + Document doc3; + Document doc4; + doc1.add(*_CLNEW Field(_T("body"), _T("metal"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + doc2.add(*_CLNEW Field(_T("body"), _T("metals"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + doc3.add(*_CLNEW Field(_T("body"), _T("mXtals"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + doc4.add(*_CLNEW Field(_T("body"), _T("mXtXls"),Field::STORE_YES | Field::INDEX_TOKENIZED)); + writer->addDocument(&doc1); + writer->addDocument(&doc2); + writer->addDocument(&doc3); + writer->addDocument(&doc4); + writer->close(); + _CLDELETE(writer); + ////////////////////////////////////////////////////// + + IndexReader* reader = IndexReader::open(&indexStore); + IndexSearcher* searcher = _CLNEW IndexSearcher(reader); + + + _testWildcard(tc, searcher, _T("m?tal"), 1); + _testWildcard(tc, searcher, _T("metal?"), 1); + _testWildcard(tc, searcher, _T("metal??"), 0); + _testWildcard(tc, searcher, _T("meta??"), 1); //metals + _testWildcard(tc, searcher, _T("metals?"), 0); + _testWildcard(tc, searcher, _T("m?t?ls"), 3); + + indexStore.close(); + reader->close(); + searcher->close(); + _CLDELETE(reader); + _CLDELETE(searcher); + } +#else + void _NO_WILDCARD_QUERY(CuTest *tc){ + CuNotImpl(tc,_T("Wildcard")); + } +#endif + + +CuSuite *testwildcard(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Wildcard Test")); + + #ifndef NO_WILDCARD_QUERY + SUITE_ADD_TEST(suite, testQuestionmark); + SUITE_ADD_TEST(suite, testAsterisk); + #else + SUITE_ADD_TEST(suite, _NO_WILDCARD_QUERY); + #endif + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/store/MockRAMDirectory.cpp clucene-core-2.3.3.4/src/test/store/MockRAMDirectory.cpp --- clucene-core-0.9.21b/src/test/store/MockRAMDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/store/MockRAMDirectory.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,326 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "MockRAMDirectory.h" + +#include +#include +#include "CLucene/_ApiHeader.h" + +CL_NS_DEF(store) + +MockRAMDirectory::MockRAMDirectory() : + RAMDirectory(), + noDeleteOpenFile(true), maxSize(0) { + // empty +} + +MockRAMDirectory::MockRAMDirectory(const char* dir) : + RAMDirectory(dir), + noDeleteOpenFile(true), maxSize(0) { + // empty +} + +MockRAMDirectory::MockRAMDirectory(Directory* dir) : + RAMDirectory(dir), + noDeleteOpenFile(true), maxSize(0) { + // empty +} + +MockRAMDirectory::~MockRAMDirectory() { + while (!failures.empty()) { + delete failures.back(); + failures.pop_back(); + } +} + +IndexOutput* MockRAMDirectory::createOutput(const char* name) { + MockRAMFile* file = new MockRAMFile(this); + + { + SCOPED_LOCK_MUTEX(openFiles_mutex); + + if (noDeleteOpenFile && openFiles.find(name) != openFiles.end()) { + char buffer[200]; + _snprintf(buffer, 200, "MockRAMDirectory: file %s is still open: cannot overwrite", name); + _CLTHROWA(CL_ERR_IO, buffer); + } + } + + SCOPED_LOCK_MUTEX(files_mutex); + + MockRAMFile* existing = static_cast(files->get((char*)name)); + + if (existing != NULL && strcmp(name, "segments.gen") != 0) { + char buffer[200]; + _snprintf(buffer, 200, "MockRAMDirectory: file %s already exist", name); + _CLTHROWA(CL_ERR_IO, buffer); + } else { + if (existing != NULL) { + SCOPED_LOCK_MUTEX(THIS_LOCK); + sizeInBytes -= existing->getSizeInBytes(); + existing->setDirectory(NULL); + } + + files->put(STRDUP_AtoA(name), file); + } + + return _CLNEW MockRAMOutputStream(this, file); +} + +bool MockRAMDirectory::openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t buffferSize) { + SCOPED_LOCK_MUTEX(files_mutex); + MockRAMFile* file = static_cast(files->get((char*)name)); + + if (file == NULL) { + char buffer[200]; + _snprintf(buffer, 200, "MockRAMDirectory: file %s not found", name); + error.set(CL_ERR_IO, buffer); + return false; + } else { + SCOPED_LOCK_MUTEX(openFiles_mutex); + + if (openFiles.find(name) != openFiles.end()) { + ++openFiles[name]; + } else { + openFiles.insert(std::make_pair(name, 1)); + } + } + + ret = _CLNEW MockRAMInputStream(this, name, file); + return true; +} + +void MockRAMDirectory::close() { + SCOPED_LOCK_MUTEX(openFiles_mutex); + if (noDeleteOpenFile && !openFiles.empty()) { + char buffer[200]; + _snprintf(buffer, 200, "MockRAMDirectory: cannot close: there are still open files: %d", (int)openFiles.size()); + _CLTHROWA(CL_ERR_IO, buffer); + } +} + +bool MockRAMDirectory::deleteFile(const char* name, const bool throwError) { + SCOPED_LOCK_MUTEX(openFiles_mutex); + if (noDeleteOpenFile && openFiles.find(name) != openFiles.end() && throwError) { + char buffer[200]; + _snprintf(buffer, 200, "MockRAMDirectory: file %s is still open: cannot delete", name); + _CLTHROWA(CL_ERR_IO, buffer); + } + + return RAMDirectory::deleteFile(name, throwError); +} + +void MockRAMDirectory::setNoDeleteOpenFile(bool value) { + noDeleteOpenFile = value; +} + +void MockRAMDirectory::setMaxUsedSize(int64_t value) { + maxUsedSize = value; +} + +int64_t MockRAMDirectory::getMaxUsedSize(void) const { + return maxUsedSize; +} + +void MockRAMDirectory::resetMaxUsedSize(void) { + maxUsedSize = getRecomputedActualSizeInBytes(); +} + +void MockRAMDirectory::setMaxSizeInBytes(int64_t value) { + maxSize = value; +} + +int64_t MockRAMDirectory::getMaxSizeInBytes() const { + return maxSize; +} + +void MockRAMDirectory::setRandomIOExceptionRate(float_t rate, int32_t seed) { + srand(seed); + randomIOExceptionRate = rate; +} + +float_t MockRAMDirectory::getRandomIOExceptionRate(void) const { + return randomIOExceptionRate; +} + +bool MockRAMDirectory::getNoDeleteOpenFile() const { + return noDeleteOpenFile; +} + +std::map& MockRAMDirectory::getOpenFiles() { + return openFiles; +} + +void MockRAMDirectory::maybeThrowIOException(void) { + if (randomIOExceptionRate > 0.0) { + // don't use low bits from rand() + // (see http://en.wikipedia.org/wiki/Linear_congruential_generator#Advantages_and_disadvantages_of_LCGs) + int32_t number = ((rand() >> 4) % 1000); + if (number < randomIOExceptionRate * 1000) { + char buffer[200]; + _snprintf(buffer, 200, "MockRAMDirectory: a random IOException"); + _CLTHROWA(CL_ERR_IO, buffer); + } + } +} + +int64_t MockRAMDirectory::getRecomputedSizeInBytes(void) { + SCOPED_LOCK_MUTEX(files_mutex); + int64_t size = 0; + RAMDirectory::FileMap::iterator it = files->begin(); + + while (it != files->end()) { + size += (*it).second->getSizeInBytes(); + it++; + } + + return size; +} + +int64_t MockRAMDirectory::getRecomputedActualSizeInBytes(void) { + SCOPED_LOCK_MUTEX(files_mutex); + int64_t size = 0; + RAMDirectory::FileMap::iterator it = files->begin(); + + while (it != files->end()) { + size += (*it).second->getLength(); + it++; + } + + return size; +} + +void MockRAMDirectory::failOn(Failure* fail) { + failures.push_back(fail); +} + +void MockRAMDirectory::maybeThrowDeterministicException(void) { + std::vector::iterator it = failures.begin(); + + while (it != failures.end()) { + (*it)->eval(this); + it++; + } +} + +// +// MockRAMOutputStream +// + +MockRAMOutputStream::MockRAMOutputStream() : + RAMOutputStream(), + dir(NULL), + first(true) { + // empty +} + +MockRAMOutputStream::MockRAMOutputStream(MockRAMDirectory* d, MockRAMFile* f) : + RAMOutputStream(f), + dir(d), + first(true) { + // empty +} + +void MockRAMOutputStream::close() { + RAMOutputStream::close(); + + int64_t size = dir->getRecomputedActualSizeInBytes(); + + if (size > dir->getMaxUsedSize()) { + dir->setMaxUsedSize(size); + } +} + +void MockRAMOutputStream::flush() { + dir->maybeThrowDeterministicException(); + RAMOutputStream::flush(); +} + +void MockRAMOutputStream::writeByte(const uint8_t b) { + singleByte[0] = b; + writeBytes(singleByte, 1); +} + +void MockRAMOutputStream::writeBytes(const uint8_t* b, const int32_t length) { + int64_t freeSpace = dir->getMaxSizeInBytes() - dir->sizeInBytes; + int64_t realUsage = 0; + + // Enforce disk full + if (dir->getMaxSizeInBytes() != 0 && freeSpace < length) { + // Compute the real disk free. This will greatly slow + // down our test but makes it more accurate: + realUsage = dir->getRecomputedActualSizeInBytes(); + freeSpace = dir->getMaxSizeInBytes() - realUsage; + } + + if (dir->getMaxSizeInBytes() != 0 && freeSpace <= length) { + if (freeSpace > 0 && freeSpace < length) { + realUsage += freeSpace; + RAMOutputStream::writeBytes(b, freeSpace); + } + + if (realUsage > dir->getMaxUsedSize()) { + dir->setMaxUsedSize(realUsage); + } + + char buffer[200]; + _snprintf(buffer, 200, "MockRAMOutputStream: fake disk full at %d bytes", (int)dir->getRecomputedActualSizeInBytes()); + _CLTHROWA(CL_ERR_IO, buffer); + } else { + RAMOutputStream::writeBytes(b, length); + } + + dir->maybeThrowDeterministicException(); + + if (first) { + // Maybe throw random exception; only do this on first + // write to a new file: + first = false; + dir->maybeThrowIOException(); + } +} + +int64_t MockRAMOutputStream::length() const { + return RAMOutputStream::length(); +} + +// +// MockRAMInputStream +// + +MockRAMInputStream::MockRAMInputStream(const MockRAMInputStream& clone) : + RAMInputStream(clone), + isClone(true) { + dir = clone.dir; + name = clone.name; +} + +MockRAMInputStream::MockRAMInputStream(MockRAMDirectory* d, const char* n, MockRAMFile* f) : + RAMInputStream(f), + dir(d), + name(n), + isClone(false) { + // empty +} + +void MockRAMInputStream::close() { + RAMInputStream::close(); + + if (!isClone) { + SCOPED_LOCK_MUTEX(openFiles_mutex); + int v = dir->getOpenFiles()[name.c_str()]; + + if (v == 1) { + dir->getOpenFiles().erase(name.c_str()); + } else { + --dir->getOpenFiles()[name.c_str()]; + } + } +} + +CL_NS_END diff -Nru clucene-core-0.9.21b/src/test/store/MockRAMDirectory.h clucene-core-2.3.3.4/src/test/store/MockRAMDirectory.h --- clucene-core-0.9.21b/src/test/store/MockRAMDirectory.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/store/MockRAMDirectory.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#ifndef _lucene_store_MockRAMDirectory_ +#define _lucene_store_MockRAMDirectory_ + +#include "CLucene.h" +#include "CLucene/_clucene-config.h" +#include +#include +#include + +#include "CLucene/store/RAMDirectory.h" +#include "CLucene/store/_RAMDirectory.h" + +CL_NS_DEF(store) + +/** + * This is a subclass of RAMDirectory that adds methods + * intented to be used only by unit tests. + */ +class MockRAMDirectory : public RAMDirectory { +public: + + /** + * Objects that represent fail-able conditions. Objects of a derived + * class are created and registered with the mock directory. After + * register, each object will be invoked once for each first write + * of a file, giving the object a chance to throw an IOException. + */ + class Failure { + public: + Failure() { doFail = false; } + + void eval(MockRAMDirectory* dir) {} + /** + * reset should set the state of the failure to its default + * (freshly constructed) state. Reset is convenient for tests + * that want to create one failure object and then reuse it in + * multiple cases. This, combined with the fact that Failure + * subclasses are often anonymous classes makes reset difficult to + * do otherwise. + * + * A typical example of use is + * Failure* failure = new Failure(); + * ... + * mock.failOn(failure->reset()) + */ + Failure* reset() { return this; } + void setDoFail() { doFail = true; }; + void clearDoFail() { doFail = false; } + + private: + bool doFail; + }; + + MockRAMDirectory(); + MockRAMDirectory(const char* dir); + MockRAMDirectory(Directory* dir); + virtual ~MockRAMDirectory(); + virtual IndexOutput* createOutput(const char* name); + virtual bool openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t bufferSize = -1); + virtual void close(); + virtual bool deleteFile(const char* name, const bool throwError=true); + + /** + * Emulate windows whereby deleting an open file is not + * allowed (raise IOException). + */ + void setNoDeleteOpenFile(bool value); + bool getNoDeleteOpenFile() const; + + void setMaxUsedSize(int64_t value); + int64_t getMaxUsedSize() const; + void resetMaxUsedSize(); + + void setMaxSizeInBytes(int64_t value); + int64_t getMaxSizeInBytes() const; + + /** + * If 0.0, no exceptions will be thrown. Else this should + * be a double 0.0 - 1.0. We will randomly throw an + * IOException on the first write to an OutputStream based + * on this probability. + */ + void setRandomIOExceptionRate(float_t rate, int32_t seed); + float_t getRandomIOExceptionRate() const; + + void maybeThrowIOException(); + + /** Provided for testing purposes. Use sizeInBytes() instead. */ + int64_t getRecomputedSizeInBytes(); + /** + * Like getRecomputedSizeInBytes(), but, uses actual file + * lengths rather than buffer allocations (which are + * quantized up to nearest + * RAMOutputStream.BUFFER_SIZE (now 1024) bytes. + */ + int64_t getRecomputedActualSizeInBytes(); + + void failOn(Failure* fail); + void maybeThrowDeterministicException(); + + std::map& getOpenFiles(); + + DEFINE_MUTABLE_MUTEX(openFiles_mutex); + +private: + std::map openFiles; + std::vector failures; + bool noDeleteOpenFile; + int64_t maxUsedSize; + int64_t maxSize; + float_t randomIOExceptionRate; +}; + +/** + * Subclass of RAMFile to access RAMFile::directory without making it public in RAMFile. + */ +class MockRAMFile : public RAMFile { + +public: + + MockRAMFile(RAMDirectory* directory) : RAMFile(directory) { + // empty + } + + virtual ~MockRAMFile() { + // empty + } + + void setDirectory(RAMDirectory* value) { + directory = value; + } +}; + +class MockRAMOutputStream : public RAMOutputStream { + +public: + MockRAMOutputStream(); + MockRAMOutputStream(MockRAMDirectory* d, MockRAMFile* f); + virtual void close(void); + virtual void flush(void); + virtual void writeByte(const uint8_t b); + virtual void writeBytes(const uint8_t* b, const int32_t length); + virtual int64_t length() const; + +private: + MockRAMDirectory* dir; + bool first; + uint8_t singleByte[1]; +}; + +class MockRAMInputStream : public RAMInputStream { + +public: + MockRAMInputStream(const MockRAMInputStream& clone); + MockRAMInputStream(MockRAMDirectory* d, const char* n, MockRAMFile* f); + void close(void); + + DEFINE_MUTABLE_MUTEX(openFiles_mutex); + +private: + MockRAMDirectory* dir; + std::string name; + bool isClone; +}; + + +CL_NS_END + +#endif // _lucene_store_MockRAMDirectory_ diff -Nru clucene-core-0.9.21b/src/test/store/TestRAMDirectory.cpp clucene-core-2.3.3.4/src/test/store/TestRAMDirectory.cpp --- clucene-core-0.9.21b/src/test/store/TestRAMDirectory.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/store/TestRAMDirectory.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,218 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2010 Borivoj Kostka and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include +#include + +#include "CLucene.h" +#include "CLucene/_clucene-config.h" + +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/IndexWriter.h" +#include "CLucene/search/IndexSearcher.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/store/RAMDirectory.h" +#include "MockRAMDirectory.h" + +/** + * JUnit testcase to test RAMDirectory. RAMDirectory itself is used in many testcases, + * but not one of them uses an different constructor other than the default constructor. + * + * @author Bernhard Messer + * + * @version $Id: RAMDirectory.java 150537 2004-09-28 22:45:26 +0200 (Di, 28 Sep 2004) cutting $ + */ + +static int docsToAdd = 500; +static char indexDir[CL_MAX_PATH] = ""; + +struct ThreadData +{ + MockRAMDirectory * dir; + IndexWriter * writer; + int num; + CuTest * tc; +}; + +// setup the index +void testRAMDirectorySetUp (CuTest *tc) { + + if (strlen(cl_tempDir) + 13 > CL_MAX_PATH) + CuFail(tc, _T("Not enough space in indexDir buffer")); + + sprintf(indexDir, "%s/RAMDirIndex", cl_tempDir); + WhitespaceAnalyzer analyzer; + IndexWriter * writer = new IndexWriter(indexDir, &analyzer, true); + + // add some documents + TCHAR * text; + for (int i = 0; i < docsToAdd; i++) { + Document doc; + text = English::IntToEnglish(i); + doc.add(* new Field(_T("content"), text, Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + writer->addDocument(&doc); + _CLDELETE_ARRAY(text); + } + + CuAssertEquals(tc, docsToAdd, writer->docCount(), _T("document count")); + writer->close(); + _CLDELETE( writer ); +} + +// BK> all test functions are the same except RAMDirectory constructor, so shared code moved here +void checkDir(CuTest *tc, MockRAMDirectory * ramDir) { + + // Check size + CuAssertTrue(tc, ramDir->sizeInBytes == ramDir->getRecomputedSizeInBytes(), _T("RAMDir size")); + + // open reader to test document count + IndexReader * reader = IndexReader::open(ramDir); + CuAssertEquals(tc, docsToAdd, reader->numDocs(), _T("document count")); + + // open search to check if all doc's are there + IndexSearcher * searcher = _CLNEW IndexSearcher(reader); + + // search for all documents + Document doc; + for (int i = 0; i < docsToAdd; i++) { + searcher->doc(i, doc); + CuAssertTrue(tc, doc.getField(_T("content")) != NULL, _T("content is NULL")); + } + + // cleanup + reader->close(); + searcher->close(); + _CLLDELETE(reader); + _CLLDELETE(searcher); +} + +void testRAMDirectory (CuTest *tc) { + + Directory * dir = FSDirectory::getDirectory(indexDir); + MockRAMDirectory * ramDir = _CLNEW MockRAMDirectory(dir); + + // close the underlaying directory + dir->close(); + _CLDELETE( dir ); + + checkDir(tc, ramDir); + + ramDir->close(); + _CLLDELETE(ramDir); +} + +void testRAMDirectoryString (CuTest *tc) { + + MockRAMDirectory * ramDir = _CLNEW MockRAMDirectory(indexDir); + + checkDir(tc, ramDir); + + ramDir->close(); + _CLLDELETE(ramDir); +} + +static int numThreads = 50; +static int docsPerThread = 40; + +_LUCENE_THREAD_FUNC(indexDocs, _data) { + + ThreadData * data = (ThreadData *)_data; + int cnt = 0; + TCHAR * text; + for (int j=1; jnum*docsPerThread+j); + doc.add(*new Field(_T("sizeContent"), text, Field::STORE_YES | Field::INDEX_UNTOKENIZED)); + data->writer->addDocument(&doc); + _CLDELETE_ARRAY(text); + { + SCOPED_LOCK_MUTEX(data->dir->THIS_LOCK); + CuAssertTrue(data->tc, data->dir->sizeInBytes == data->dir->getRecomputedSizeInBytes()); + } + } + _LUCENE_THREAD_FUNC_RETURN( 0 ); +} + +void testRAMDirectorySize(CuTest * tc) { + + MockRAMDirectory * ramDir = _CLNEW MockRAMDirectory(indexDir); + WhitespaceAnalyzer analyzer; + IndexWriter * writer = _CLNEW IndexWriter(ramDir, &analyzer, false); + writer->optimize(); + + CuAssertTrue(tc, ramDir->sizeInBytes == ramDir->getRecomputedSizeInBytes(), _T("RAMDir size")); + + _LUCENE_THREADID_TYPE* threads = _CL_NEWARRAY(_LUCENE_THREADID_TYPE, numThreads); + ThreadData * tdata = _CL_NEWARRAY(ThreadData, numThreads); + + for (int i=0; ioptimize(); + CuAssertTrue(tc, ramDir->sizeInBytes == ramDir->getRecomputedSizeInBytes(), _T("RAMDir size")); + + CuAssertEquals(tc, docsToAdd + (numThreads * (docsPerThread-1)), writer->docCount(), _T("document count")); + + writer->close(); + _CLLDELETE(writer); + + ramDir->close(); + _CLLDELETE(ramDir); +} + +#if 0 + public void testSerializable() throws IOException { + Directory dir = new RAMDirectory(); + ByteArrayOutputStream bos = new ByteArrayOutputStream(1024); + assertEquals("initially empty", 0, bos.size()); + ObjectOutput out = new ObjectOutputStream(bos); + int headerSize = bos.size(); + out.writeObject(dir); + out.close(); + assertTrue("contains more then just header", headerSize < bos.size()); + } +#endif + +void testRAMDirectoryTearDown(CuTest * tc) { + // cleanup + if (*indexDir) { + // delete index dir + all files in it (portable way!) + } + +} + +CuSuite *testRAMDirectory(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene RAMDirectory Test")); + + SUITE_ADD_TEST(suite, testRAMDirectorySetUp); + + SUITE_ADD_TEST(suite, testRAMDirectory); + SUITE_ADD_TEST(suite, testRAMDirectoryString); + SUITE_ADD_TEST(suite, testRAMDirectorySize); + + SUITE_ADD_TEST(suite, testRAMDirectoryTearDown); + + return suite; +} + diff -Nru clucene-core-0.9.21b/src/test/store/TestStore.cpp clucene-core-2.3.3.4/src/test/store/TestStore.cpp --- clucene-core-0.9.21b/src/test/store/TestStore.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/store/TestStore.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,123 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include + + +void StoreTest(CuTest *tc,int32_t count, int mode){ + srand(1251971); + int32_t i; + + uint64_t veryStart = Misc::currentTimeMillis(); + uint64_t start = Misc::currentTimeMillis(); + + char fsdir[CL_MAX_PATH]; + _snprintf(fsdir, CL_MAX_PATH, "%s/%s",cl_tempDir, "test.store"); + Directory* store = NULL; + if ( mode == 1 ) + store = _CLNEW RAMDirectory(); + else{ + store = (Directory*)FSDirectory::getDirectory(fsdir); + ((FSDirectory*)store)->setUseMMap(mode == 3); + } + int32_t LENGTH_MASK = 0xFFF; + char name[260]; + + for (i = 0; i < count; i++) { + _snprintf(name,260,"%d.dat",i); + + int32_t length = rand() & LENGTH_MASK; + uint8_t b = (uint8_t)(rand() & 0x7F); + + IndexOutput* file = store->createOutput(name); + + for (int32_t j = 0; j < length; j++) + file->writeByte(b); + + file->close(); + _CLDELETE(file); + } + CuMessageA(tc, "%d total milliseconds to create\n", (int32_t)(Misc::currentTimeMillis() - start)); + + if (mode != 1){ + store->close(); + _CLDECDELETE(store); + store = (Directory*)FSDirectory::getDirectory(fsdir); + }else{ + CuMessageA(tc, "Memory used at end: %l", ((RAMDirectory*)store)->sizeInBytes); + } + + srand(1251971); + start = Misc::currentTimeMillis(); + + for (i = 0; i < count; i++) { + _snprintf(name,260,"%d.dat",i); + size_t length = rand() & LENGTH_MASK; + uint8_t b = (uint8_t)(rand() & 0x7F); + IndexInput* file = store->openInput(name); + + if (file->length() != length) + _CLTHROWA(CL_ERR_Runtime, "length incorrect" ); + + for (size_t j = 0; j < length; j++){ + if (file->readByte() != b){ + TCHAR buf[100]; + _tprintf(buf,_T("contents incorrect in file %d.dat"),i); + _CLTHROWT(CL_ERR_Runtime, buf); + } + } + + file->close(); + _CLDELETE(file); + } + + CuMessageA(tc,"%d total milliseconds to read\n", (int32_t)(Misc::currentTimeMillis() - start)); + + srand(1251971); + start = Misc::currentTimeMillis(); + + for (i = 0; i < count; i++) { + _snprintf(name,260,"%d.dat",i); + store->deleteFile(name); + } + + CuMessageA(tc, "%d total milliseconds to delete\n",(int32_t)(Misc::currentTimeMillis() - start)); + CuMessageA(tc, "%d total milliseconds \n", (int32_t)(Misc::currentTimeMillis() - veryStart)); + + //test makeLock::toString + CL_NS(store)::LuceneLock* lf = store->makeLock("testlock"); + std::string ts = lf->toString(); + CLUCENE_ASSERT( ts.compare("fail") != 0 ); + _CLDELETE(lf); + + store->close(); + _CLDECDELETE(store); +} + +void ramtest(CuTest *tc){ + StoreTest(tc,1000,1); +} +void fstest(CuTest *tc){ + StoreTest(tc,100,2); +} +void mmaptest(CuTest *tc){ + StoreTest(tc,100,3); +} + +CuSuite *teststore(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Store Test")); + + SUITE_ADD_TEST(suite, ramtest); + SUITE_ADD_TEST(suite, fstest); + SUITE_ADD_TEST(suite, mmaptest); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/testall.cpp clucene-core-2.3.3.4/src/test/testall.cpp --- clucene-core-0.9.21b/src/test/testall.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/testall.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,345 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +//msvc test for memory leaks: +#ifdef _MSC_VER + #ifdef _DEBUG + #define _CRTDBG_MAP_ALLOC + #include + #include + #endif +#endif + +#include "test.h" +#include +#include + +#include +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_IO_H + #include +#endif + +std::string cl_tempDirS; +const char* cl_tempDir; +bool cl_quiet; +char clucene_data_location[1024]; + +int main(int argc, char *argv[]) +{ + #ifdef _MSC_VER + #ifdef _DEBUG + _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); // | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF + _crtBreakAlloc=-1; + #endif + #endif + + #ifdef DMALLOC + if ( getenv("DMALLOC_OPTIONS") == NULL ){ + dmalloc_debug_setup("low,log=dmalloc.log.txt"); + }else{ + //apparently cygwin has to have this code.... + dmalloc_debug_setup(getenv("DMALLOC_OPTIONS")); + } + #endif + + + int ret_result = 0; + int i=0; + int exclude = 0; + int list_provided = 0; + CuSuiteList *alltests = NULL; + CuString *output = CuStringNew(); + bool silent = false; + bool verbose = false; + bool times = true; + uint64_t startTime=0; + + if ( Misc::dir_Exists("/tmp") ) + cl_tempDirS = "/tmp"; + if ( getenv("TEMP") != NULL ) + cl_tempDirS = getenv("TEMP"); + else if ( getenv("TMP") != NULL ) + cl_tempDirS = getenv("TMP"); + + if ( Misc::dir_Exists( (cl_tempDirS + "/clucene").c_str() ) ) + cl_tempDirS += "/clucene"; + cl_tempDir = cl_tempDirS.c_str(); + + clucene_data_location[0]=0; + if ( CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION1 "/reuters-21578-index/segments") ) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION1); + else if ( CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION2 "/reuters-21578-index/segments") ) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION2); + else if ( CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION3 "/reuters-21578-index/segments") ) + strcpy(clucene_data_location, CLUCENE_DATA_LOCATION3); + else if ( getenv(CLUCENE_DATA_LOCATIONENV) != NULL ){ + strcpy(clucene_data_location,getenv(CLUCENE_DATA_LOCATIONENV)); + strcat(clucene_data_location,"/data/reuters-21578-index/segments"); + if ( CL_NS(util)::Misc::dir_Exists( clucene_data_location ) ){ + strcpy(clucene_data_location, getenv(CLUCENE_DATA_LOCATIONENV)); + strcat(clucene_data_location, "/data"); + }else + clucene_data_location[0]=0; + } + + /* first check that we are running the test for the correct position */ + //todo: make this configurable + if ( !*clucene_data_location ){ + fprintf(stderr,"%s must be run from a subdirectory of the application's root directory\n",argv[0]); + fprintf(stderr,"ensure that the test data exists in %s or %s or %s\n",CLUCENE_DATA_LOCATION1, CLUCENE_DATA_LOCATION2, CLUCENE_DATA_LOCATION3); + if ( getenv(CLUCENE_DATA_LOCATIONENV) != NULL ) + fprintf(stderr,"%s/data was also checked because of the " CLUCENE_DATA_LOCATIONENV " environment variable", getenv(CLUCENE_DATA_LOCATIONENV)); + ret_result = 1; + goto exit_point; + } + + CuInit(argc, argv); + + /* see if we're in exclude mode, see if list of testcases provided */ + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i],"-h") || !strcmp(argv[i],"--help") || !strcmp(argv[i],"/?")){ + printf("%s [-l list] [-q quiet] [-v verbose] [-t show times] [-p printf messages immediatelly] [-x exclude] [tests...]\n",argv[0]); + goto exit_point; + } + if (!strcmp(argv[i], "-v")) { + verbose = true; + continue; + } + if (!strcmp(argv[i], "-p")) { //used in CuInit + continue; + } + if (!strcmp(argv[i], "-q")) { + silent = true; + continue; + } + if (!strcmp(argv[i], "-x")) { + exclude = 1; + continue; + } + if (!strcmp(argv[i], "-t")) { + times = true; + continue; + } + if (!strcmp(argv[i], "-l")) { + for (i = 0; tests[i].func != NULL; i++) { + printf("%s\n", tests[i].testname); + } + ret_result = 0; + goto exit_point; + } + if (argv[i][0] == '-') { + fprintf(stderr, "invalid option: `%s'\n", argv[i]); + ret_result = 1; + goto exit_point; + } + list_provided = 1; + } + + if (!list_provided) { + /* add everything */ + alltests = CuSuiteListNew(_T("All CLucene Tests")); + for (i = 0; tests[i].func != NULL; i++) { + CuSuiteListAdd(alltests, tests[i].func()); + } + } + else if (exclude) { + /* add everything but the tests listed */ + alltests = CuSuiteListNew(_T("Partial CLucene Tests")); + for (i = 0; tests[i].func != NULL; i++) { + int this_test_excluded = 0; + int j; + + for (j = 1; j < argc && !this_test_excluded; j++) { + if (!strcmp(argv[j], tests[i].testname)) { + this_test_excluded = 1; + } + } + if (!this_test_excluded) { + CuSuiteListAdd(alltests, tests[i].func()); + } + } + } + else { + /* add only the tests listed */ + alltests = CuSuiteListNew(_T("Partial CLucene Tests")); + for (i = 1; i < argc; i++) { + int j; + int found = 0; + + if (argv[i][0] == '-') { + continue; + } + for (j = 0; tests[j].func != NULL; j++) { + if (!strcmp(argv[i], tests[j].testname)) { + CuSuiteListAdd(alltests, tests[j].func()); + found = 1; + } + } + if (!found) { + fprintf(stderr, "invalid test name: `%s'\n", argv[i]); + ret_result = 1; + goto exit_point; + } + } + } + + startTime = Misc::currentTimeMillis(); + + printf("Key: .= pass N=not implemented F=fail\n"); + if ( silent ) + CuSuiteListRun(alltests); + else + CuSuiteListRunWithSummary(alltests,verbose,times); + i = CuSuiteListDetails(alltests, output); + _tprintf(_T("%s\n"), output->buffer); + + if ( times ) + printf("Tests run in %dms\n\n", (int32_t)(CL_NS(util)::Misc::currentTimeMillis()-startTime)); + +exit_point: + if ( alltests != NULL ) + CuSuiteListDelete(alltests); + CuStringFree(output); + + _lucene_shutdown(); //clears all static memory + + if ( ret_result != 0 ) + return ret_result; + else + return i > 0 ? 1 : 0; + + //Debuggin techniques: + //For msvc, use this for breaking on memory leaks: + // _crtBreakAlloc + //for linux, use valgrind +} + + +void TestAssertIndexReaderEquals(CuTest *tc, IndexReader* index1, IndexReader* index2){ + const Document::FieldsType* fields1, *fields2; + Document::FieldsType::const_iterator it1, it2; + + CuAssertPtrNotNull(tc, _T("check index1!=null"), index1); + CuAssertPtrNotNull(tc, _T("check index1!=null"), index2); + + //misc + CuAssertIntEquals(tc,_T("IndexReaders have different values for numDocs"), index1->numDocs(), index2->numDocs()); + CuAssertIntEquals(tc,_T("IndexReaders have different values for maxDoc"), index1->maxDoc(), index2->maxDoc()); + CuAssertIntEquals(tc,_T("Only one IndexReader has deletions"), index1->hasDeletions(), index2->hasDeletions()); + CuAssertIntEquals(tc,_T("Only one IndexReader is optimized"), index1->isOptimized(), index2->isOptimized()); + + //test field names + StringArrayWithDeletor fn1; + StringArrayWithDeletor fn2; + index1->getFieldNames(IndexReader::ALL, fn1); + index2->getFieldNames(IndexReader::ALL, fn2); + + //make sure field length is the same + int fn1count = fn1.size(); + int fn2count = fn2.size(); + CuAssertIntEquals(tc, _T("reader fieldnames count not equal"), fn1count, fn2count ); + for (int n=0;nnorms(fn1[n]); + uint8_t* norms2 = index2->norms(fn1[n]); + if ( norms1 != NULL ){ + CLUCENE_ASSERT(norms2 != NULL); + for ( int i=0;imaxDoc();i++ ){ + int diff = norms1[i]-norms2[i]; + if ( diff < 0 ) + diff *= -1; + if ( diff > 16 ){ + TCHAR tmp[1024]; + _sntprintf(tmp,1024,_T("Norms are off by more than the threshold! %d, should be %d"), (int32_t)norms2[i], (int32_t)norms1[i]); + CuAssert(tc,tmp,false); + } + } + }else + CLUCENE_ASSERT(norms2 == NULL); + //////////////////// + } + fn1.clear(); //save memory + fn2.clear(); //save memory + + + // check deletions + for (int i = 0; i < index1->maxDoc(); i++) { + CuAssertIntEquals( tc, _T("only deleted in one index."), index1->isDeleted(i), index2->isDeleted(i)); + } + + + // check stored fields + Document doc1; + Document doc2; + for (int i = 0; i < index1->maxDoc(); i++) { + if (!index1->isDeleted(i)) { + doc1.clear(); doc2.clear(); + index1->document(i, doc1); + index2->document(i, doc2); + fields1 = doc1.getFields(); + fields2 = doc2.getFields(); + CuAssertIntEquals(tc, _T("Different numbers of fields for doc "), fields1->size(), fields2->size()); + it1 = fields1->begin(); + it2 = fields2->begin(); + while ( it1 != fields1->end() ) { + Field* curField1 = *it1; + Field* curField2 = *it2; + CuAssertStrEquals( tc, _T("Different fields names for doc "), curField1->name(), curField2->name()); + CuAssertStrEquals( tc, _T("Different field values for doc "), curField1->stringValue(), curField2->stringValue()); + it1++; + it2++; + } + } + } + + + // check dictionary and posting lists + TermEnum* enum1 = index1->terms(); + TermEnum* enum2 = index2->terms(); + TermPositions* tp1 = index1->termPositions(); + TermPositions* tp2 = index2->termPositions(); + while(enum1->next()) { + + CuAssertTrue(tc,enum2->next()); + CuAssertStrEquals(tc, _T("Different term field in dictionary."), enum1->term(false)->field(), enum2->term(false)->field() ); + CuAssertStrEquals(tc, _T("Different term field in dictionary."), enum1->term(false)->text(), enum2->term(false)->text() ); + CuAssert(tc, _T("Different term in dictionary."), enum1->term(false)->equals(enum2->term(false)) ); + + tp1->seek(enum1->term(false)); + tp2->seek(enum1->term(false)); + while(tp1->next()) { + CuAssertTrue(tc, tp2->next()); + CuAssertIntEquals(tc,_T("Different doc id in postinglist of term"), tp1->doc(), tp2->doc()); + CuAssertIntEquals(tc,_T("Different term frequence in postinglist of term"), tp1->freq(), tp2->freq()); + for (int i = 0; i < tp1->freq(); i++) { + CuAssertIntEquals(tc,_T("Different positions in postinglist of term"), tp1->nextPosition(), tp2->nextPosition()); + } + } + } + _CLDELETE(enum1); + _CLDELETE(enum2); + _CLDELETE(tp1); + _CLDELETE(tp2); +} + diff -Nru clucene-core-0.9.21b/src/test/test.h clucene-core-2.3.3.4/src/test/test.h --- clucene-core-0.9.21b/src/test/test.h 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/test.h 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,157 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#ifndef TEST_H +#define TEST_H +#include "CLucene.h" +#include "CLucene/_clucene-config.h" +#include "CLucene/config/repl_tchar.h" +#include "CLucene/config/repl_wchar.h" +#include "CLucene/debug/_condition.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/Misc.h" + +#include "CLucene/store/RAMDirectory.h" +#include "CLucene/store/Lock.h" +#include "CLucene/index/TermVector.h" +#include "CLucene/queryParser/MultiFieldQueryParser.h" + +#include +#include +#include +#include + +using namespace std; + +#define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF) +#define LUCENE_INT64_MIN_SHOULDBE (-LUCENE_INT64_MAX_SHOULDBE - _ILONGLONG(1) ) + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(search) +CL_NS_USE(document) +CL_NS_USE(queryParser) +CL_NS_USE(analysis) +CL_NS_USE2(analysis,standard) + +#include "CuTest.h" + +CuSuite *testatomicupdates(void); +CuSuite *testRAMDirectory(void); +CuSuite *testindexwriter(void); +CuSuite *testIndexModifier(void); +CuSuite *testindexreader(void); +CuSuite *testIndexSearcher(void); +CuSuite *testAddIndexesNoOptimize(void); +CuSuite *teststore(void); +CuSuite *testanalysis(void); +CuSuite *testanalyzers(void); +CuSuite *testhighfreq(void); +CuSuite *testhighlight(void); +CuSuite *testpriorityqueue(void); +CuSuite *testQueryParser(void); +CuSuite *testMultiFieldQueryParser(void); +CuSuite *testqueries(void); +CuSuite *testConstantScoreQueries(void); +CuSuite *testsearch(void); +CuSuite *testtermvector(void); +CuSuite *testsort(void); +CuSuite *testduplicates(void); +CuSuite *testRangeFilter(void); +CuSuite *testdatefilter(void); +CuSuite *testwildcard(void); +CuSuite *testdebug(void); +CuSuite *testutf8(void); +CuSuite *testreuters(void); +CuSuite *testdocument(void); +CuSuite *testField(void); +CuSuite *testNumberTools(void); +CuSuite *testDateTools(void); +CuSuite *testBoolean(void); +CuSuite *testBitSet(void); +CuSuite *testExtractTerms(void); +CuSuite *testSpanQueries(void); +CuSuite *testStringBuffer(void); +CuSuite *testTermVectorsReader(void); + +#ifdef TEST_CONTRIB_LIBS +CuSuite *testGermanAnalyzer(void); +#endif + +class English{ +public: + static void IntToEnglish(int32_t i, CL_NS(util)::StringBuffer* result); + static TCHAR* IntToEnglish(int32_t i); + static void IntToEnglish(int32_t i, TCHAR* buf, int32_t buflen); +}; + + +class TCharCompare{ +public: + bool operator()( const TCHAR* val1, const TCHAR* val2 ) const{ + if ( val1==val2) + return false; + bool ret = (_tcscmp( val1,val2 ) < 0); + return ret; + } +}; +class CharCompare{ +public: + bool operator()( const char* val1, const char* val2 ) const{ + if ( val1==val2) + return false; + bool ret = (strcmp( val1,val2 ) < 0); + return ret; + } +}; + +template +class StringMap : public std::map<_K,_T,_Comparator>{ + bool delKey; +public: + StringMap(bool delKey){ + this->delKey = delKey; + } + + void remove(_K val){ + std::iterator<_K,_T,_Comparator> itr; + itr = this->find(val); + if ( itr == this->end() ) + return; + _K v = itr->first; + this->erase(itr); + if ( delKey ){ + _CLDELETE_CARRAY(v); + } + } + virtual ~StringMap(){ + while ( this->begin() != this->end() ){ + _K v = this->begin()->first; + this->erase(this->begin()); + if ( delKey ){ + _CLDELETE_CARRAY(v); + } + } + } + void add(_K k, _T v){ + this->insert ( std::pair<_K,_T>(k,v) ); + } +}; + +void TestAssertIndexReaderEquals(CuTest *tc, IndexReader* reader1, IndexReader* reader2); + + +extern unittest tests[]; + +#define CLUCENE_DATA_LOCATION1 "../../src/test/data/" +#define CLUCENE_DATA_LOCATION2 "../src/test/data/" +#define CLUCENE_DATA_LOCATION3 "../../../src/test/data/" +#define CLUCENE_DATA_LOCATIONENV "srcdir" + +extern const char* cl_tempDir; + +#endif diff -Nru clucene-core-0.9.21b/src/test/tests.cpp clucene-core-2.3.3.4/src/test/tests.cpp --- clucene-core-0.9.21b/src/test/tests.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/tests.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,50 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" + +unittest tests[] = { + {"threads", testatomicupdates}, + {"indexreader", testindexreader}, + {"indexsearcher", testIndexSearcher}, + {"reuters", testreuters}, + {"analysis", testanalysis}, + {"analyzers", testanalyzers}, + {"document", testdocument}, + {"field", testField}, + {"numbertools", testNumberTools}, + {"debug", testdebug}, + {"ramdirectory", testRAMDirectory}, + {"indexwriter", testindexwriter}, + {"indexmodifier", testIndexModifier}, + {"addIndexesNoOptimize", testAddIndexesNoOptimize}, + {"highfreq", testhighfreq}, + {"priorityqueue", testpriorityqueue}, + {"datetools", testDateTools}, + {"queryparser", testQueryParser}, + {"mfqueryparser", testMultiFieldQueryParser}, + {"boolean", testBoolean}, + {"search", testsearch}, + {"rangefilter", testRangeFilter}, + {"queries", testqueries}, + {"csrqueries", testConstantScoreQueries}, + {"termvector",testtermvector}, + {"sort",testsort}, + {"duplicates", testduplicates}, + {"datefilter", testdatefilter}, + {"wildcard", testwildcard}, + {"store", teststore}, + {"utf8", testutf8}, + {"bitset", testBitSet}, + {"extractterms",testExtractTerms}, + {"spanqueries",testSpanQueries}, + {"stringbuffer", testStringBuffer}, + {"termvectorsreader",testTermVectorsReader}, +#ifdef TEST_CONTRIB_LIBS + {"germananalyzer", testGermanAnalyzer}, +#endif + {"LastTest", NULL} +}; diff -Nru clucene-core-0.9.21b/src/test/util/English.cpp clucene-core-2.3.3.4/src/test/util/English.cpp --- clucene-core-0.9.21b/src/test/util/English.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/util/English.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,134 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +CL_NS_USE(util) + +void English::IntToEnglish(int32_t i, StringBuffer* result) +{ + if (i == 0) + { + result->append(_T("zero")); + return ; + } + if (i < 0) + { + result->append(_T("minus ")); + i = - i; + } + if (i >= 1000000000) + { + // billions + IntToEnglish(i / 1000000000, result); + result->append(_T("billion, ")); + i = i % 1000000000; + } + if (i >= 1000000) + { + // millions + IntToEnglish(i / 1000000, result); + result->append(_T("million, ")); + i = i % 1000000; + } + if (i >= 1000) + { + // thousands + IntToEnglish(i / 1000, result); + result->append(_T("thousand, ")); + i = i % 1000; + } + if (i >= 100) + { + // hundreds + IntToEnglish(i / 100, result); + result->append(_T("hundred ")); + i = i % 100; + } + if (i >= 20) + { + switch (i / 10) + { + + case 9: result->append(_T("ninety")); break; + + case 8: result->append(_T("eighty")); break; + + case 7: result->append(_T("seventy")); break; + + case 6: result->append(_T("sixty")); break; + + case 5: result->append(_T("fifty")); break; + + case 4: result->append(_T("forty")); break; + + case 3: result->append(_T("thirty")); break; + + case 2: result->append(_T("twenty")); break; + } + i = i % 10; + if (i == 0) + result->append(_T(" ")); + else + result->append(_T("-")); + } + switch (i) + { + + case 19: result->append(_T("nineteen ")); break; + + case 18: result->append(_T("eighteen ")); break; + + case 17: result->append(_T("seventeen ")); break; + + case 16: result->append(_T("sixteen ")); break; + + case 15: result->append(_T("fifteen ")); break; + + case 14: result->append(_T("fourteen ")); break; + + case 13: result->append(_T("thirteen ")); break; + + case 12: result->append(_T("twelve ")); break; + + case 11: result->append(_T("eleven ")); break; + + case 10: result->append(_T("ten ")); break; + + case 9: result->append(_T("nine ")); break; + + case 8: result->append(_T("eight ")); break; + + case 7: result->append(_T("seven ")); break; + + case 6: result->append(_T("six ")); break; + + case 5: result->append(_T("five ")); break; + + case 4: result->append(_T("four ")); break; + + case 3: result->append(_T("three ")); break; + + case 2: result->append(_T("two ")); break; + + case 1: result->append(_T("one ")); break; + + case 0: result->append(_T("")); break; + } +} + +TCHAR* English::IntToEnglish(int32_t i) +{ + StringBuffer result; + IntToEnglish(i, &result); + return result.toString(); +} +void English::IntToEnglish(int32_t i, TCHAR* buf, int32_t buflen) +{ + StringBuffer result; + IntToEnglish(i, &result); + _tcsncpy(buf,result.getBuffer(),buflen); +} + diff -Nru clucene-core-0.9.21b/src/test/util/TestBitSet.cpp clucene-core-2.3.3.4/src/test/util/TestBitSet.cpp --- clucene-core-0.9.21b/src/test/util/TestBitSet.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/util/TestBitSet.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,265 @@ +#include "test.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/util/BitSet.h" + +CL_NS_USE(util) +CL_NS_USE(store) + +/** + * Compare two BitVectors. + * This should really be an equals method on the BitVector itself. + * @param bv One bit vector + * @param compare The second to compare + */ +bool doCompare(BitSet& bv, BitSet& compare) { + bool equal = true; + for(int i=0;isize();i++) { + CLUCENE_ASSERT(!bv->get(i)); + CLUCENE_ASSERT(i==bv->count()); + bv->set(i); + CLUCENE_ASSERT(bv->get(i)); + CLUCENE_ASSERT(i+1==bv->count()); + } + + _CLLDELETE(bv); + bv = _CLNEW BitSet(n); + // test count when setting then clearing bits + for(int i=0;isize();i++) { + CLUCENE_ASSERT(!bv->get(i)); + CLUCENE_ASSERT(0==bv->count()); + bv->set(i, true); + CLUCENE_ASSERT(bv->get(i)); + CLUCENE_ASSERT(1==bv->count()); + bv->set(i, false); + CLUCENE_ASSERT(!bv->get(i)); + CLUCENE_ASSERT(0==bv->count()); + } + + _CLLDELETE(bv); +} + +/** + * Test the count() method on BitVectors of various sizes. + * @throws Exception + */ +void testCount(CuTest* tc) { + doTestCountVectorOfSize(tc, 8); + doTestCountVectorOfSize(tc, 20); + doTestCountVectorOfSize(tc, 100); + doTestCountVectorOfSize(tc, 1000); +} + +void doTestWriteRead(CuTest* tc, int n) { + Directory* d = new RAMDirectory(); + + BitSet bv(n); + // test count when incrementally setting bits + for(int i=0;iset(i); + CLUCENE_ASSERT(i+1==bv->count()); + } + bv->write(d, "TESTBV"); + // gradually increase number of set bits + for (int i=count1; iset(i, true); + CLUCENE_ASSERT(i+1==bv->count()); + bv->write(d, "TESTBV"); + } + // now start decreasing number of set bits + for (int i=count2-1; i>=count1; i--) { + BitVector* bv2 = _CLNEW BitSet(d, "TESTBV"); + CLUCENE_ASSERT(doCompare(*bv,*bv2)); + _CLLDELETE(bv); + bv = bv2; + bv->set(i, false); + CLUCENE_ASSERT(i==bv->count()); + bv->write(d, "TESTBV"); + } + _CLLDELETE(bv); + _CLLDECDELETE( d ); +} + +/** + * Test r/w when size/count cause switching between bit-set and d-gaps file formats. + * @throws Exception + */ +void testDgaps(CuTest* tc) { + doTestDgaps(tc, 1,0,1); + doTestDgaps(tc, 10,0,1); + doTestDgaps(tc, 100,0,1); + doTestDgaps(tc, 202,0,1); + doTestDgaps(tc, 1000,4,7); + doTestDgaps(tc, 10000,40,43); + doTestDgaps(tc, 100000,415,418); + doTestDgaps(tc, 1000000,3123,3126); +} + +void doTestBitAtEndOfBitSet(CuTest* tc, int size, int pos) { + Directory* d = _CLNEW RAMDirectory(); + BitSet* bv = _CLNEW BitSet(size); + + bv->set(pos, true); + bv->write(d, "TESTBV"); + _CLLDELETE(bv); + bv = _CLNEW BitSet(d, "TESTBV"); + CLUCENE_ASSERT(bv->get(pos)); + _CLLDELETE( bv ); + _CLLDECDELETE( d ); +} + +void testBitAtEndOfBitSet(CuTest* tc) { + doTestBitAtEndOfBitSet(tc, 202, 200); +} + +void doTestNextSetBit(CuTest* tc, int nSize) +{ + BitSet bv( nSize ); + int nIdx; + int nExpectedIdx; + + // initialize bit set by setting every second bit starting with 0 + for( int32_t i = 0; i < bv.size(); i+=2 ) + bv.set(i); + + // iterate the bits + nIdx = 0; + nExpectedIdx = 0; + while( (nIdx = bv.nextSetBit( nIdx )) != -1 ) + { + assertEquals( nExpectedIdx, nIdx ); + nExpectedIdx += 2; + nIdx++; + } +} + +/** + * Test the nextSetBit() method on BitVectors of various sizes. + * CLucene specific + * @throws Exception + */ +void testNextSetBit(CuTest* tc) +{ + doTestNextSetBit(tc, 8); + doTestNextSetBit(tc, 20); + doTestNextSetBit(tc, 100); +} + +CuSuite *testBitSet(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene BitSet Test")); + + SUITE_ADD_TEST(suite, testConstructSize); + SUITE_ADD_TEST(suite, testGetSet); + SUITE_ADD_TEST(suite, testClear); + SUITE_ADD_TEST(suite, testCount); + SUITE_ADD_TEST(suite, testWriteRead); + SUITE_ADD_TEST(suite, testDgaps); + SUITE_ADD_TEST(suite, testBitAtEndOfBitSet); + + SUITE_ADD_TEST(suite, testNextSetBit); + + return suite; +} diff -Nru clucene-core-0.9.21b/src/test/util/TestPriorityQueue.cpp clucene-core-2.3.3.4/src/test/util/TestPriorityQueue.cpp --- clucene-core-0.9.21b/src/test/util/TestPriorityQueue.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/util/TestPriorityQueue.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,77 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ +#include "test.h" +#include +#include + + //test string buffer + //StringBuffer sb; + //sb.appendFloat(0.02f,2); + //CuAssertStrEquals(tc, _T("appendFloat failed"), _T("0.02"), sb.getBuffer()); + + + class integerQueue: public CL_NS(util)::PriorityQueue{ + public: + integerQueue(int32_t count) + { + initialize(count,false); + } + protected: + bool lessThan(int32_t a, int32_t b) { + return (a < b); + } + }; + + void _test_PriorityQueue(CuTest *tc,int32_t count){ + integerQueue pq(count); + srand ( (unsigned)time(NULL) ); + int32_t sum = 0, sum2 = 0; + + uint64_t start = CL_NS(util)::Misc::currentTimeMillis(); + + for (int32_t i = 0; i < count; i++) { + int32_t next = -rand(); + //int32_t next = (count+1)-i; + sum += next; + pq.put( next ); + } + CuMessageA(tc,"%d milliseconds/", (int32_t)(CL_NS(util)::Misc::currentTimeMillis()-start)); + CuMessageA(tc,"%d puts\n",count); + start = CL_NS(util)::Misc::currentTimeMillis(); + + int32_t last = -0x7FFFFFFF; + for (int32_t j = 0; j < count; j++) { + int32_t next = pq.pop(); + + if ( next < last ){ + TCHAR buf[1024]; + _sntprintf(buf,1024,_T("next < last at %d (last: %d, next: %d)"),j,last,next); + CuAssert(tc,buf,false); + } + last = next; + sum2 += last; + } + + CuMessageA(tc,"%d milliseconds", (int32_t)(CL_NS(util)::Misc::currentTimeMillis()-start)); + CuMessageA(tc,"/%d pops\n",count); + + CLUCENE_ASSERT(sum == sum); + } + void testPriorityQueue(CuTest *tc){ + _test_PriorityQueue(tc,100000); + } + + +CuSuite *testpriorityqueue(void) +{ + CuSuite *suite = CuSuiteNew(_T("CLucene Priority Queue Test")); + + SUITE_ADD_TEST(suite, testPriorityQueue); + + return suite; +} +// EOF diff -Nru clucene-core-0.9.21b/src/test/util/TestStringBuffer.cpp clucene-core-2.3.3.4/src/test/util/TestStringBuffer.cpp --- clucene-core-0.9.21b/src/test/util/TestStringBuffer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ clucene-core-2.3.3.4/src/test/util/TestStringBuffer.cpp 2011-03-17 00:21:07.000000000 +0000 @@ -0,0 +1,116 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 Ben van Klinken and the CLucene Team +* +* Distributable under the terms of either the Apache License (Version 2.0) or +* the GNU Lesser General Public License, as specified in the COPYING file. +------------------------------------------------------------------------------*/ + +#include "test.h" +#include "CLucene/util/StringBuffer.h" +#include + +CL_NS_USE(util) + +void testStringBufferConstruct(CuTest *tc) { + StringBuffer sb; + CuAssertEquals(tc, 0, sb.length()); + + StringBuffer sb1(10); + CuAssertEquals(tc, 0, sb1.length()); + + StringBuffer sb2(_T("test")); + CuAssertEquals(tc, 4, sb2.length()); + CuAssertStrEquals(tc, _T(""), _T("test"), sb2.getBuffer()); +} + +void testStringBufferCharAt(CuTest *tc) { + StringBuffer sb(_T("test abcd")); + + CuAssertTrue(tc, sb.charAt(0) == _T('t'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(1) == _T('e'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(2) == _T('s'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(3) == _T('t'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(4) == _T(' '), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(5) == _T('a'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(6) == _T('b'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(7) == _T('c'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(8) == _T('d'), _T("unexpected character")); + + sb.setCharAt(4, _T('-')); + + CuAssertTrue(tc, sb.charAt(0) == _T('t'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(1) == _T('e'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(2) == _T('s'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(3) == _T('t'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(4) == _T('-'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(5) == _T('a'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(6) == _T('b'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(7) == _T('c'), _T("unexpected character")); + CuAssertTrue(tc, sb.charAt(8) == _T('d'), _T("unexpected character")); +} + +void testStringBufferClear(CuTest *tc) { + StringBuffer sb(_T("test abcd wxyz")); + sb.clear(); + CuAssertEquals(tc, 0, sb.length()); + CuAssertStrEquals(tc, _T(""), _T("\0"), sb.getBuffer()); +} + +void testStringBufferInsert(CuTest *tc) { + StringBuffer sb(_T("test abcd")); + + sb.insert(5, _T('X')); + CuAssertStrEquals(tc, _T(""), _T("test Xabcd"), sb.getBuffer()); + + sb.insert(7, _T("YY")); + CuAssertStrEquals(tc, _T(""), _T("test XaYYbcd"), sb.getBuffer()); + + sb.insert(7, _T("")); + CuAssertStrEquals(tc, _T(""), _T("test XaYYbcd"), sb.getBuffer()); + + sb.insert(12, _T("ZZZ")); + CuAssertStrEquals(tc, _T(""), _T("test XaYYbcdZZZ"), sb.getBuffer()); + + sb.insert(15, _T('_')); + CuAssertStrEquals(tc, _T(""), _T("test XaYYbcdZZZ_"), sb.getBuffer()); + + sb.insert(0, _T('_')); + CuAssertStrEquals(tc, _T(""), _T("_test XaYYbcdZZZ_"), sb.getBuffer()); + + sb.insert(0, _T("123")); + CuAssertStrEquals(tc, _T(""), _T("123_test XaYYbcdZZZ_"), sb.getBuffer()); +} + +void testStringBufferDelete(CuTest *tc) { + StringBuffer sb(_T("test abcd")); + + sb.deleteCharAt(4); + CuAssertStrEquals(tc, _T(""), _T("testabcd"), sb.getBuffer()); + + sb.deleteChars(4, 7); + CuAssertStrEquals(tc, _T(""), _T("testd"), sb.getBuffer()); + + sb.deleteChars(3, 3); + CuAssertStrEquals(tc, _T(""), _T("testd"), sb.getBuffer()); +} + +void testSubstringEquals(CuTest *tc) { + StringBuffer sb(_T("test abcd")); + + CuAssertTrue(tc, sb.substringEquals(3, 6, _T("t a"))); + CuAssertTrue(tc, sb.substringEquals(3, 6, _T("t a"), 3)); + CuAssertTrue(tc, !sb.substringEquals(3, 6, _T("t-a"), 3)); +} + +CuSuite *testStringBuffer(void) { + CuSuite *suite = CuSuiteNew(_T("CLucene StringBuffer Test")); + + SUITE_ADD_TEST(suite, testStringBufferConstruct); + SUITE_ADD_TEST(suite, testStringBufferCharAt); + SUITE_ADD_TEST(suite, testStringBufferClear); + SUITE_ADD_TEST(suite, testStringBufferInsert); + SUITE_ADD_TEST(suite, testStringBufferDelete); + SUITE_ADD_TEST(suite, testSubstringEquals); + + return suite; +} diff -Nru clucene-core-0.9.21b/test/analysis/Makefile.am clucene-core-2.3.3.4/test/analysis/Makefile.am --- clucene-core-0.9.21b/test/analysis/Makefile.am 2008-10-23 17:44:28.000000000 +0000 +++ clucene-core-2.3.3.4/test/analysis/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -test_analysisdir = $(tstsrcdir)/analysis - -cl_test_SOURCES += $(test_analysisdir)/TestAnalysis.cpp -cl_test_SOURCES += $(test_analysisdir)/TestAnalyzers.cpp diff -Nru clucene-core-0.9.21b/test/analysis/TestAnalysis.cpp clucene-core-2.3.3.4/test/analysis/TestAnalysis.cpp --- clucene-core-0.9.21b/test/analysis/TestAnalysis.cpp 2008-10-23 17:44:28.000000000 +0000 +++ clucene-core-2.3.3.4/test/analysis/TestAnalysis.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - - void test(CuTest *tc,Reader* reader, bool verbose, int64_t bytes) { - StandardAnalyzer analyzer; - TokenStream* stream = analyzer.tokenStream(NULL, reader); - - uint64_t start = Misc::currentTimeMillis(); - - int32_t count = 0; - Token t; - for (; stream->next(&t);) { - if (verbose) { - CuMessage(tc, _T("Text=%s start=%d end=%d\n"), t.termText(), t.startOffset(), t.endOffset() ); - } - // _CLDELETE(t); - count++; - } - - uint64_t end = Misc::currentTimeMillis(); - int64_t time = end - start; - CuMessageA (tc,"%d milliseconds to extract ",time); - CuMessageA (tc,"%d tokens\n", count); - CuMessageA (tc,"%f microseconds/token\n",(time*1000.0)/count ); - CuMessageA (tc,"%f megabytes/hour\n", (bytes * 1000.0 * 60.0 * 60.0)/(time * 1000000.0) ); - - _CLDELETE(stream); - } - -/*todo: move this to contribs because we have no filereader - void _testFile(CuTest *tc,const char* fname, bool verbose) { - struct fileStat buf; - fileStat(fname,&buf); - - int64_t bytes = buf.st_size; - - CuMessageA(tc," Reading test file containing %d bytes.\n", bytes ); - FileReader fr (fname); - const TCHAR *start; - size_t total = 0; - do { - size_t numRead = fr.read(start, numRead); - total += numRead; - } while (numRead >= 0); - test(tc,&fr, verbose, total); - fr.close(); - }*/ - - void _testText(CuTest *tc,const TCHAR* text, bool verbose) { - CuMessage(tc, _T(" Tokenizing string: %s\n"), text ); - StringReader reader(text); - test(tc, &reader, verbose, _tcslen(text)); - } - - void testText(CuTest *tc){ - _testText(tc,_T("This is a test"),true); - } - /* void testFile(CuTest *tc){ - CuAssert(tc,_T("words.txt does not exist"),Misc::dir_Exists(CLUCENE_LOCATION "reuters-21578/feldman-cia-worldfactbook-data.txt")); - _testFile(tc,CLUCENE_LOCATION "reuters-21578/feldman-cia-worldfactbook-data.txt",false); - }*/ - -CuSuite *testanalysis(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Analysis Test")); - - // SUITE_ADD_TEST(suite, testFile); - SUITE_ADD_TEST(suite, testText); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/analysis/TestAnalyzers.cpp clucene-core-2.3.3.4/test/analysis/TestAnalyzers.cpp --- clucene-core-0.9.21b/test/analysis/TestAnalyzers.cpp 2008-10-23 17:44:28.000000000 +0000 +++ clucene-core-2.3.3.4/test/analysis/TestAnalyzers.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,218 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - - void assertAnalyzersTo(CuTest *tc,Analyzer* a, const TCHAR* input, TCHAR* output){ - Reader* reader = _CLNEW StringReader(input); - TokenStream* ts = a->tokenStream(_T("dummy"), reader ); - - int32_t i = 0; - const TCHAR* pos = output; - TCHAR buffer[80]; - const TCHAR* last = output; - Token t; - while( (pos = _tcsstr(pos+1, _T(";"))) != NULL ) { - int32_t len = (int32_t)(pos-last); - _tcsncpy(buffer,last,len); - buffer[len]=0; - - CLUCENE_ASSERT(ts->next(&t)); - CLUCENE_ASSERT(_tcscmp( t.termText(),buffer) == 0 ); - - last = pos+1; - } - CLUCENE_ASSERT(!ts->next(&t)); //Test failed, more fields than expected. - - ts->close(); - _CLDELETE(reader); - _CLDELETE(ts); - } - - void testSimpleAnalyzer(CuTest *tc){ - Analyzer* a = _CLNEW SimpleAnalyzer(); - assertAnalyzersTo(tc,a, _T("foo bar FOO BAR"), _T("foo;bar;foo;bar;") ); - assertAnalyzersTo(tc,a, _T("foo bar . FOO <> BAR"), _T("foo;bar;foo;bar;")); - assertAnalyzersTo(tc,a, _T("foo.bar.FOO.BAR"), _T("foo;bar;foo;bar;")); - assertAnalyzersTo(tc,a, _T("U.S.A."), _T("u;s;a;") ); - assertAnalyzersTo(tc,a, _T("C++"), _T("c;") ); - assertAnalyzersTo(tc,a, _T("B2B"), _T("b;b;")); - assertAnalyzersTo(tc,a, _T("2B"), _T("b;")); - assertAnalyzersTo(tc,a, _T("\"QUOTED\" word"), _T("quoted;word;")); - - _CLDELETE(a); - } - - void testStandardAnalyzer(CuTest *tc){ - Analyzer* a = _CLNEW StandardAnalyzer(); - - //todo: check this - assertAnalyzersTo(tc,a, _T("[050-070]"), _T("050;-070;") ); - - _CLDELETE(a); - } - - - void testPerFieldAnalzyerWrapper(CuTest *tc){ - const TCHAR* text = _T("Qwerty"); - PerFieldAnalyzerWrapper analyzer(_CLNEW WhitespaceAnalyzer()); - - analyzer.addAnalyzer(_T("special"), _CLNEW SimpleAnalyzer()); - - StringReader reader(text); - TokenStream* tokenStream = analyzer.tokenStream( _T("field"), &reader); - Token token; - - CLUCENE_ASSERT( tokenStream->next(&token) ); - CuAssertStrEquals(tc,_T("token.termText()"), _T("Qwerty"), - token.termText()); - _CLDELETE(tokenStream); - - StringReader reader2(text); - tokenStream = analyzer.tokenStream(_T("special"), &reader2); - CLUCENE_ASSERT( tokenStream->next(&token) ); - CuAssertStrEquals(tc, _T("token.termText()"), _T("qwerty"), - token.termText()); - _CLDELETE(tokenStream); - } - - void testNullAnalyzer(CuTest *tc){ - Analyzer* a = _CLNEW WhitespaceAnalyzer(); - assertAnalyzersTo(tc,a, _T("foo bar FOO BAR"), _T("foo;bar;FOO;BAR;")); - assertAnalyzersTo(tc,a, _T("foo bar . FOO <> BAR"), _T("foo;bar;.;FOO;<>;BAR;")); - assertAnalyzersTo(tc,a, _T("foo.bar.FOO.BAR"), _T("foo.bar.FOO.BAR;")); - assertAnalyzersTo(tc,a, _T("U.S.A."), _T("U.S.A.;")); - assertAnalyzersTo(tc,a, _T("C++"), _T("C++;")); - assertAnalyzersTo(tc,a, _T("B2B"), _T("B2B;")); - assertAnalyzersTo(tc,a, _T("2B"), _T("2B;")); - assertAnalyzersTo(tc,a, _T("\"QUOTED\" word"), _T("\"QUOTED\";word;") ); - - _CLDELETE(a); - } - - void testStopAnalyzer(CuTest *tc){ - Analyzer* a = _CLNEW StopAnalyzer(); - assertAnalyzersTo(tc,a, _T("foo bar FOO BAR"), _T("foo;bar;foo;bar;")); - assertAnalyzersTo(tc,a, _T("foo a bar such FOO THESE BAR"), _T("foo;bar;foo;bar;")); - - _CLDELETE(a); - } - - void testISOLatin1AccentFilter(CuTest *tc){ - TCHAR str[200]; - _tcscpy(str, _T("Des mot cl\xe9s \xc0 LA CHA\xceNE \xc0 \xc1 \xc2 ") //Des mot clés À LA CHAÎNE À Á  - _T("\xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf") //Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï - _T(" \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd8 \xde \xd9 \xda \xdb") //Ð Ñ Ò Ó Ô Õ Ö Ø Œ Þ Ù Ú Û - _T(" \xdc \xdd \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 ") //Ü Ý à á â ã ä å ç è é - _T("\xea \xeb \xec \xed \xee \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 ") //ê ë ì í î ï ð ñ ò ó ô õ ö - _T("\xf8 \xdf \xfe \xf9 \xfa \xfb \xfc \xfd \xff") //ø ß þ ù ú û ü ý ÿ - _T(" ") ); //room for extra latin stuff - #ifdef _UCS2 - int p = _tcslen(str)-6; - str[p+1] = 0x152;// œ - str[p+3] = 0x153;// æ - str[p+5] = 0x178;//Ÿ - #endif - - StringReader reader(str); - WhitespaceTokenizer ws(&reader); - ISOLatin1AccentFilter filter(&ws,false); - Token token; - - - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("Des"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("mot"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("cles"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("LA"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("CHAINE"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("A"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("AE"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("C"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("E"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("E"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("E"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("E"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("I"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("I"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("I"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("I"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("D"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("N"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("O"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("TH"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("U"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("U"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("U"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("U"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("Y"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("a"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("ae"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("c"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("e"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("e"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("e"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("e"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("i"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("i"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("i"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("i"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("d"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("n"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("o"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("ss"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("th"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("u"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("u"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("u"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("u"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("y"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("y"), token.termText()); - - #ifdef _UCS2 - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("OE"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("oe"), token.termText()); - CLUCENE_ASSERT(filter.next(&token)); CuAssertStrEquals(tc, _T("Token compare"), _T("Y"), token.termText()); - #endif - - - CLUCENE_ASSERT(filter.next(&token)==false); - } - - - -CuSuite *testanalyzers(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Analyzers Test")); - - SUITE_ADD_TEST(suite, testISOLatin1AccentFilter); - SUITE_ADD_TEST(suite, testStopAnalyzer); - SUITE_ADD_TEST(suite, testNullAnalyzer); - SUITE_ADD_TEST(suite, testSimpleAnalyzer); - SUITE_ADD_TEST(suite, testPerFieldAnalzyerWrapper); - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/CLMonolithic_Test.cpp clucene-core-2.3.3.4/test/CLMonolithic_Test.cpp --- clucene-core-0.9.21b/test/CLMonolithic_Test.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/CLMonolithic_Test.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -/* -* this is a monolithic file that can be used to compile clucene tests using one source file. -* -* note: when creating a project add either this file, or all the other .cpp files, not both! -*/ - -#include "CuTest.cpp" -#include "testall.cpp" -#include "tests.cpp" - -#include "analysis/TestAnalysis.cpp" -#include "analysis/TestAnalyzers.cpp" -#include "index/TestHighFreqTerms.cpp" -#include "index/TestIndexWriter.cpp" -#include "index/TestReuters.cpp" -#include "index/TestUtf8.cpp" -#include "util/TestPriorityQueue.cpp" -#include "util/English.cpp" -#include "debug/TestError.cpp" -#include "document/TestDocument.cpp" -#include "queryParser/TestQueryParser.cpp" -#include "search/TestSearch.cpp" -#include "search/TestSort.cpp" -#include "search/TestTermVector.cpp" -#include "search/TestForDuplicates.cpp" -#include "search/TestDateFilter.cpp" -#include "search/TestWildcard.cpp" -#include "store/TestStore.cpp" diff -Nru clucene-core-0.9.21b/test/CMakeLists.txt clucene-core-2.3.3.4/test/CMakeLists.txt --- clucene-core-0.9.21b/test/CMakeLists.txt 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -PROJECT(clucene-test) - -INCLUDE_DIRECTORIES( ${clucene-test_SOURCE_DIR} ) - -SOURCE_GROUP("unit_testing" ./*.cpp) -SOURCE_GROUP("analysis" ./analysis/*) -SOURCE_GROUP("debug" ./debug/*) -SOURCE_GROUP("document" ./document/*) -SOURCE_GROUP("index" ./index/*) -SOURCE_GROUP("queryParser" ./queryParser/*) -SOURCE_GROUP("search" ./search/*) -SOURCE_GROUP("store" ./store/*) -SOURCE_GROUP("util" ./util/*) - -ADD_EXECUTABLE(cl_test -./queryParser/TestQueryParser.cpp -./analysis/TestAnalysis.cpp -./analysis/TestAnalyzers.cpp -./debug/TestError.cpp -./document/TestDocument.cpp -./store/TestStore.cpp -./search/TestDateFilter.cpp -./search/TestForDuplicates.cpp -./search/TestSearch.cpp -./search/TestSort.cpp -./search/TestWildcard.cpp -./search/TestTermVector.cpp -./index/TestIndexWriter.cpp -./index/TestUtf8.cpp -./index/TestHighFreqTerms.cpp -./index/TestReuters.cpp -./util/TestPriorityQueue.cpp -./util/English.cpp -./tests.cpp -./CuTest.cpp -./testall.cpp -) -TARGET_LINK_LIBRARIES(cl_test clucene-core) diff -Nru clucene-core-0.9.21b/test/CuTest.cpp clucene-core-2.3.3.4/test/CuTest.cpp --- clucene-core-0.9.21b/test/CuTest.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/CuTest.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,583 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" -#include "CuTest.h" -#include - -static int verbose = 0; -static int messyPrinting = 0; - -void CuInit(int argc, char *argv[]) -{ - int i; - - for (i = 0; i < argc; i++) { - if (!strcmp(argv[i], "-v")) { - verbose = 1; - } - if (!strcmp(argv[i], "-p")) { - messyPrinting = 1; - } - } -} - -/*-------------------------------------------------------------------------* - * CuTcs - *-------------------------------------------------------------------------*/ -TCHAR* CuStrAlloc(int size) -{ - TCHAR* n = (TCHAR*) malloc( sizeof(TCHAR) * (size) ); - return n; -} - -TCHAR* CuTcsCopy(TCHAR* old) -{ - int len = _tcslen(old); - TCHAR* n = CuStrAlloc(len + 1); - _tcscpy(n, old); - return n; -} -TCHAR* CuTcsCat(TCHAR* orig, TCHAR* add) -{ - int len = _tcslen(orig) + _tcslen(add); - TCHAR* n = CuStrAlloc(len + 1); - _tcscpy(n, orig); - _tcscat(n, add); - return n; -} - -/*-------------------------------------------------------------------------* - * CuString - *-------------------------------------------------------------------------*/ - -TCHAR* CuTcsAlloc(int size) -{ - TCHAR* n = (TCHAR*) malloc( sizeof(TCHAR) * (size) ); - return n; -} - -TCHAR* CuTcsCopy(const TCHAR* old) -{ - int len = _tcslen(old); - TCHAR* n = CuTcsAlloc(len + 1); - _tcscpy(n, old); - return n; -} - -/*-------------------------------------------------------------------------* - * CuString - *-------------------------------------------------------------------------*/ - -void CuStringInit(CuString* str) -{ - str->length = 0; - str->size = STRING_MAX; - str->buffer = (TCHAR*) malloc(sizeof(TCHAR) * str->size); - str->buffer[0] = '\0'; -} - -CuString* CuStringNew(void) -{ - CuString* str = (CuString*) malloc(sizeof(CuString)); - str->length = 0; - str->size = STRING_MAX; - str->buffer = (TCHAR*) malloc(sizeof(TCHAR) * str->size); - str->buffer[0] = '\0'; - return str; -} - -void CuStringFree(CuString* str){ - free(str->buffer); - free(str); -} - -void CuStringResize(CuString* str, int newSize) -{ - str->buffer = (TCHAR*) realloc(str->buffer, sizeof(TCHAR) * newSize); - str->size = newSize; -} - -void CuStringAppend(CuString* str, const TCHAR* text) -{ - int length = _tcslen(text); - if (str->length + length + 1 >= str->size) - CuStringResize(str, str->length + length + 1 + STRING_INC); - str->length += length; - _tcscat(str->buffer, text); -} - -void CuStringAppendChar(CuString* str, TCHAR ch) -{ - TCHAR text[2]; - text[0] = ch; - text[1] = '\0'; - CuStringAppend(str, text); -} - -void CuStringAppendFormat(CuString* str, const TCHAR* format, ...) -{ - TCHAR buf[HUGE_STRING_LEN]; - va_list argp; - va_start(argp, format); - _vsntprintf(buf, HUGE_STRING_LEN,format, argp); - va_end(argp); - CuStringAppend(str, buf); -} - -void CuStringRead(CuString *str, TCHAR *path) -{ - path = NULL; - CU_TDUP(path,str->buffer); -} - -/*-------------------------------------------------------------------------* - * CuTest - *-------------------------------------------------------------------------*/ - -void CuTestInit(CuTest* t, TCHAR* name, TestFunction function) -{ - t->name = CuTcsCopy(name); - t->notimpl = 0; - t->failed = 0; - t->ran = 0; - t->message = NULL; - t->function = function; -// t->jumpBuf = NULL; -} - -CuTest* CuTestNew(TCHAR* name, TestFunction function) -{ - CuTest* tc = CU_ALLOC(CuTest); - CuTestInit(tc, name, function); - return tc; -} - -void CuTestDelete(CuTest* tst){ - free(tst->name); - if ( tst->message != NULL ) - free(tst->message); - free(tst); -} - -void CuNotImpl(CuTest* tc, const TCHAR* message) -{ - CuString* newstr = CuStringNew(); - CuStringAppend(newstr, message); - CuStringAppend(newstr, _T(" not implemented on this platform")); - tc->notimpl = 1; - CuMessage(tc,newstr->buffer); - CuStringFree(newstr); -// if (tc->jumpBuf != 0) longjmp(*(tc->jumpBuf), 0); -} - -void CuFail(CuTest* tc, const TCHAR* format, ...) -{ - tc->failed = 1; - - TCHAR buf[HUGE_STRING_LEN]; - va_list argp; - va_start(argp, format); - _vsntprintf(buf, HUGE_STRING_LEN, format, argp); - va_end(argp); - -// CuMessage(tc,buf); - _CLTHROWT(CL_ERR_Runtime, buf); -} - -void CuMessageV(CuTest* tc, const TCHAR* format, va_list& argp){ - TCHAR buf[HUGE_STRING_LEN]; - _vsntprintf(buf, HUGE_STRING_LEN, format, argp); - - TCHAR* old = tc->message; - if ( messyPrinting ){ - _tprintf(_T("%s"),buf); - }else{ - if ( old == NULL ){ - tc->message = CuTcsCopy(buf); - }else{ - tc->message = CuTcsCat(old,buf); - free(old); - } - } -} -void CuMessage(CuTest* tc, const TCHAR* format, ...){ - va_list argp; - va_start(argp, format); - CuMessageV(tc,format,argp); - va_end(argp); -} -void CuMessageA(CuTest* tc, const char* format, ...){ - va_list argp; - char buf[HUGE_STRING_LEN]; - TCHAR tbuf[HUGE_STRING_LEN]; - va_start(argp, format); - vsprintf(buf, format, argp); - va_end(argp); - - TCHAR* old = tc->message; - STRCPY_AtoT(tbuf,buf,HUGE_STRING_LEN); - if ( messyPrinting ){ - _tprintf(_T("%s"),buf); - }else{ - if ( old == NULL ){ - tc->message = CuTcsCopy(tbuf); - }else{ - tc->message = CuTcsCat(old,tbuf); - free(old); - } - } -} - -void CuAssert(CuTest* tc, const TCHAR* message, int condition) -{ - if (condition) return; - CuFail(tc, message); -} - -void CuAssertTrue(CuTest* tc, int condition) -{ - if (condition) return; - CuFail(tc, _T("assert failed")); -} - -void CuAssertStrEquals(CuTest* tc, const TCHAR* preMessage, const TCHAR* expected, const TCHAR* actual) -{ - CuString* message; - if (_tcscmp(expected, actual) == 0) return; - message = CuStringNew(); - CuStringAppend(message, preMessage); - CuStringAppend(message, _T(" : ") ); - CuStringAppend(message, _T("expected\n---->\n")); - CuStringAppend(message, expected); - CuStringAppend(message, _T("\n<----\nbut saw\n---->\n")); - CuStringAppend(message, actual); - CuStringAppend(message, _T("\n<----")); - CuFail(tc, message->buffer); - CuStringFree(message); -} - -void CuAssertIntEquals(CuTest* tc, const TCHAR* preMessage, int expected, int actual) -{ - TCHAR buf[STRING_MAX]; - if (expected == actual) return; - _sntprintf(buf, STRING_MAX, _T("%s : expected <%d> but was <%d>"), preMessage, expected, actual); - CuFail(tc, buf); -} - -void CuAssertPtrEquals(CuTest* tc, const TCHAR* preMessage, const void* expected, const void* actual) -{ - TCHAR buf[STRING_MAX]; - if (expected == actual) return; - _sntprintf(buf, STRING_MAX,_T("%s : expected pointer <%p> but was <%p>"), preMessage, expected, actual); - CuFail(tc, buf); -} - -void CuAssertPtrNotNull(CuTest* tc, const TCHAR* preMessage, const void* pointer) -{ - TCHAR buf[STRING_MAX]; - if (pointer != NULL ) return; - _sntprintf(buf,STRING_MAX, _T("%s : null pointer unexpected, but was <%p>"), preMessage, pointer); - CuFail(tc, buf); -} - -void CuTestRun(CuTest* tc) -{ -// jmp_buf buf; -// tc->jumpBuf = &buf; -// if (setjmp(buf) == 0) -// { - tc->ran = 1; - (tc->function)(tc); -// } -// tc->jumpBuf = 0; -} - -/*-------------------------------------------------------------------------* - * CuSuite - *-------------------------------------------------------------------------*/ - -void CuSuiteInit(CuSuite* testSuite, TCHAR *name) -{ - testSuite->name = NULL; - CU_TDUP(testSuite->name,name); - testSuite->count = 0; - testSuite->failCount = 0; - testSuite->notimplCount = 0; - testSuite->timeTaken = 0; -} - -CuSuite* CuSuiteNew(TCHAR *name) -{ - CuSuite* testSuite = CU_ALLOC(CuSuite); - CuSuiteInit(testSuite, name); - return testSuite; -} - -void CuSuiteDelete(CuSuite* suite){ - free(suite->name); - for ( int i=0;icount;i++ ){ - CuTestDelete(suite->list[i]); - } - free(suite); -} - -void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase) -{ - assert(testSuite->count < MAX_TEST_CASES); - testSuite->list[testSuite->count] = testCase; - testSuite->count++; -} - -void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2) -{ - int i; - for (i = 0 ; i < testSuite2->count ; ++i) - { - CuTest* testCase = testSuite2->list[i]; - CuSuiteAdd(testSuite, testCase); - } -} - -void CuSuiteRun(CuSuite* testSuite) -{ - int i; - uint64_t start = Misc::currentTimeMillis(); - for (i = 0 ; i < testSuite->count ; ++i) - { - CuTest* testCase = testSuite->list[i]; - try{ - CuTestRun(testCase); - }catch(CLuceneError& err){ - testCase->failed=1; - CuMessage(testCase,err.twhat()); - } - testSuite->timeTaken = Misc::currentTimeMillis() - start; - if (testCase->failed) { testSuite->failCount += 1; } - if (testCase->notimpl) { testSuite->notimplCount += 1; } - } -} - -void CuSuiteSummary(CuSuite* testSuite, CuString* summary, bool times) -{ - int i; - for (i = 0 ; i < testSuite->count ; ++i) - { - CuTest* testCase = testSuite->list[i]; - CuStringAppend(summary, testCase->failed ? _T("F") : - testCase->notimpl ? _T("N"): _T(".")); - } - if ( times ){ - int bufferLen = 25-summary->length-10; - for (int i=0;itimeTaken); - } - CuStringAppend(summary, _T("\n")); -} - -void CuSuiteOverView(CuSuite* testSuite, CuString* details) -{ - CuStringAppendFormat(details, _T("%d %s run: %d passed, %d failed, ") - _T("%d not implemented.\n"), - testSuite->count, - testSuite->count == 1 ? "test" : "tests", - testSuite->count - testSuite->failCount - - testSuite->notimplCount, - testSuite->failCount, testSuite->notimplCount); -} - -void CuSuiteDetails(CuSuite* testSuite, CuString* details) -{ - int i; - int failCount = 0; - - if (testSuite->failCount != 0 && verbose) - { - CuStringAppendFormat(details, _T("\nFailed tests in %s:\n"), testSuite->name); - for (i = 0 ; i < testSuite->count ; ++i) - { - CuTest* testCase = testSuite->list[i]; - if (testCase->failed) - { - failCount++; - CuStringAppendFormat(details, _T("%d) %s: %s\n"), - failCount, testCase->name, testCase->message); - } - } - } - if (testSuite->notimplCount != 0 && verbose) - { - CuStringAppendFormat(details, _T("\nNot Implemented tests in %s:\n"), testSuite->name); - for (i = 0 ; i < testSuite->count ; ++i) - { - CuTest* testCase = testSuite->list[i]; - if (testCase->notimpl) - { - failCount++; - CuStringAppendFormat(details, _T("%d) %s: %s\n"), - failCount, testCase->name, testCase->message); - } - } - } -} - -/*-------------------------------------------------------------------------* - * CuSuiteList - *-------------------------------------------------------------------------*/ - -CuSuiteList* CuSuiteListNew(TCHAR *name) -{ - CuSuiteList* testSuite = CU_ALLOC(CuSuiteList); - testSuite->name = NULL; - CU_TDUP(testSuite->name,name); - testSuite->count = 0; - return testSuite; -} -void CuSuiteListDelete(CuSuiteList* lst){ - free(lst->name); - for ( int i=0;icount;i++ ){ - CuSuiteDelete(lst->list[i]); - } - free(lst); -} - -void CuSuiteListAdd(CuSuiteList *suites, CuSuite *origsuite) -{ - assert(suites->count < MAX_TEST_CASES); - suites->list[suites->count] = origsuite; - suites->count++; -} - -void CuSuiteListRun(CuSuiteList* testSuite) -{ - int i; - for (i = 0 ; i < testSuite->count ; ++i) - { - CuSuite* testCase = testSuite->list[i]; - CuSuiteRun(testCase); - } -} - -static const TCHAR *genspaces(int i) -{ - TCHAR *str = (TCHAR*)malloc((i + 1) * sizeof(TCHAR)); - for ( int j=0;jname); - for (i = 0 ; i < testSuite->count ; ++i) - { - bool hasprinted=false; - CuSuite* testCase = testSuite->list[i]; - CuString *str = CuStringNew(); - - size_t len = _tcslen(testCase->name); - const TCHAR* spaces = len>31?NULL:genspaces(31 - len); - _tprintf(_T(" %s:%s"), testCase->name, len>31?_T(""):spaces); - free((void*)spaces); - fflush(stdout); - - CuSuiteRun(testCase); - if ( verbose ){ - for ( int i=0;icount;i++ ){ - if ( testCase->list[i]->ran ){ - if ( testCase->list[i]->message != NULL ){ - if ( !hasprinted ) - printf("\n"); - _tprintf(_T(" %s:\n"),testCase->list[i]->name); - - TCHAR* msg = testCase->list[i]->message; - bool nl = true; - //write out message, indenting on new lines - while ( *msg != '\0' ){ - if ( nl ){ - printf(" "); - nl=false; - } - if ( *msg == '\n' ) - nl = true; - putc(*msg,stdout); - - msg++; - } - - if ( testCase->list[i]->message[_tcslen(testCase->list[i]->message)-1] != '\n' ) - printf("\n"); - hasprinted=true; - } - } - } - } - CuSuiteSummary(testCase, str, times); - if ( hasprinted ) - _tprintf(_T(" Result: %s\n"), str->buffer); - else - _tprintf(_T(" %s"), str->buffer); - - CuStringFree(str); - } - _tprintf(_T("\n")); -} - -int CuSuiteListDetails(CuSuiteList* testSuite, CuString* details) -{ - int i; - int failCount = 0; - int notImplCount = 0; - int count = 0; - - for (i = 0 ; i < testSuite->count ; ++i) - { - failCount += testSuite->list[i]->failCount; - notImplCount += testSuite->list[i]->notimplCount; - count += testSuite->list[i]->count; - } - CuStringAppendFormat(details, _T("%d %s run: %d passed, %d failed, ") - _T("%d not implemented.\n"), - count, - count == 1 ? _T("test") : _T("tests"), - count - failCount - notImplCount, - failCount, notImplCount); - - if (failCount != 0 && verbose) - { - for (i = 0 ; i < testSuite->count ; ++i) - { - CuString *str = CuStringNew(); - CuSuite* testCase = testSuite->list[i]; - if (testCase->failCount) - { - CuSuiteDetails(testCase, str); - CuStringAppend(details, str->buffer); - } - CuStringFree(str); - } - } - if (notImplCount != 0 && verbose) - { - for (i = 0 ; i < testSuite->count ; ++i) - { - CuString *str = CuStringNew(); - CuSuite* testCase = testSuite->list[i]; - if (testCase->notimplCount) - { - CuSuiteDetails(testCase, str); - CuStringAppend(details, str->buffer); - } - CuStringFree(str); - } - } - return failCount; -} - diff -Nru clucene-core-0.9.21b/test/CuTest.h clucene-core-2.3.3.4/test/CuTest.h --- clucene-core-0.9.21b/test/CuTest.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/CuTest.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,127 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef CU_TEST_H -#define CU_TEST_H - -/* CuString */ - -TCHAR* CuWstrAlloc(int size); -TCHAR* CuWstrCopy(const TCHAR* old); - -#define CU_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE))) -#define CU_TDUP(dest,src) dest=((TCHAR*)malloc(sizeof(TCHAR)*_tcslen(src)+sizeof(TCHAR)));_tcscpy(dest,src); - -#define HUGE_STRING_LEN 8192 -#define STRING_MAX 256 -#define STRING_INC 256 - -#define CLUCENE_ASSERT(x) CuAssert(tc,_T("Assert Failed: ") _T(#x),x) - -typedef struct -{ - int length; - int size; - TCHAR* buffer; -} CuString; - -void CuStringInit(CuString* str); -CuString* CuStringNew(void); -void CuStringFree(CuString* str); -void CuStringRead(CuString* str, TCHAR* path); -void CuStringAppend(CuString* str, const TCHAR* text); -void CuStringAppendChar(CuString* str, TCHAR ch); -void CuStringAppendFormat(CuString* str, const TCHAR* format, ...); -void CuStringResize(CuString* str, int newSize); - -/* CuTest */ - -typedef struct CuTest CuTest; - -typedef void (*TestFunction)(CuTest *); - -struct CuTest -{ - TCHAR* name; - TestFunction function; - int notimpl; - int failed; - int ran; - TCHAR* message; -// jmp_buf *jumpBuf; -}; - - -void CuInit(int argc, char *argv[]); -void CuTestInit(CuTest* t, TCHAR* name, TestFunction function); -CuTest* CuTestNew(TCHAR* name, TestFunction function); -void CuTestDelete(CuTest* tst); -void CuFail(CuTest* tc, const TCHAR* format, ...); -void CuMessage(CuTest* tc, const TCHAR* message,...); -void CuMessageV(CuTest* tc, const TCHAR* format, va_list& argp); -void CuMessageA(CuTest* tc, const char* format, ...); -void CuNotImpl(CuTest* tc, const TCHAR* message); -void CuAssert(CuTest* tc, const TCHAR* message, int condition); -void CuAssertTrue(CuTest* tc, int condition); -void CuAssertStrEquals(CuTest* tc, const TCHAR* preMessage, const TCHAR* expected, const TCHAR* actual); -void CuAssertIntEquals(CuTest* tc, const TCHAR* preMessage, int expected, int actual); -void CuAssertPtrEquals(CuTest* tc, const TCHAR* preMessage, const void* expected, const void* actual); -void CuAssertPtrNotNull(CuTest* tc, const TCHAR* preMessage, const void* pointer); - -void CuTestRun(CuTest* tc); - -/* CuSuite */ - -#define MAX_TEST_CASES 1024 - -#define SUITE_ADD_TEST(SUITE,TEST) CuSuiteAdd(SUITE, CuTestNew(_T(#TEST), TEST)) - -extern char clucene_data_location[1024]; - -typedef struct -{ - TCHAR *name; - int count; - CuTest* list[MAX_TEST_CASES]; - int failCount; - int notimplCount; - uint64_t timeTaken; -} CuSuite; - - -void CuSuiteInit(CuSuite* testSuite, TCHAR* name); -CuSuite* CuSuiteNew(TCHAR* name); -void CuSuiteDelete(CuSuite* suite); -void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase); -void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2); -void CuSuiteRun(CuSuite* testSuite); -void CuSuiteSummary(CuSuite* testSuite, CuString* summary, bool times); -void CuSuiteOverView(CuSuite* testSuite, CuString* details); -void CuSuiteDetails(CuSuite* testSuite, CuString* details); - -typedef struct -{ - TCHAR *name; - int count; - CuSuite* list[MAX_TEST_CASES]; -} CuSuiteList; - - -struct unittest { - const char *testname; - CuSuite *(*func)(void); -}; - -CuSuiteList* CuSuiteListNew(TCHAR* name); -void CuSuiteListDelete(CuSuiteList* lst); -void CuSuiteListAdd(CuSuiteList* testSuite, CuSuite *testCase); -void CuSuiteListRun(CuSuiteList* testSuite); -void CuSuiteListRunWithSummary(CuSuiteList* testSuite, bool verbose, bool times); -//void CuSuiteListSummary(CuSuiteList* testSuite, CuString* summary); -/* Print details of test suite results; returns total number of - * tests which failed. */ -int CuSuiteListDetails(CuSuiteList* testSuite, CuString* details); -#endif /* CU_TEST_H */ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/test/data/french_unicode.bin and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/test/data/french_unicode.bin differ diff -Nru clucene-core-0.9.21b/test/data/Makefile.am clucene-core-2.3.3.4/test/data/Makefile.am --- clucene-core-0.9.21b/test/data/Makefile.am 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -EXTRA_DIST = reuters-21578 \ - reuters-21578-index \ - utf8text \ - french_unicode.bin \ - readme.txt - -MAINTAINERCLEANFILES = Makefile.in diff -Nru clucene-core-0.9.21b/test/data/Makefile.in clucene-core-2.3.3.4/test/data/Makefile.in --- clucene-core-0.9.21b/test/data/Makefile.in 2008-10-23 18:18:26.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,347 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = test/data -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_cxx_have_std.m4 \ - $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ - $(top_srcdir)/m4/ac_cxx_have_wctype_h.m4 \ - $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ - $(top_srcdir)/m4/ac_define_integer_bits.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/ax_config_feature.m4 \ - $(top_srcdir)/m4/ax_prefix_config_h.m4 \ - $(top_srcdir)/m4/dps_float_byte.m4 \ - $(top_srcdir)/m4/dps_snprintf_oflow.m4 \ - $(top_srcdir)/m4/dps_static_const_type.m4 \ - $(top_srcdir)/m4/dps_swprintf_works.m4 \ - $(top_srcdir)/m4/mdl_cxx_function_try_blocks.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h.tmp -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLLIB_VERSION = @CLLIB_VERSION@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GREP = @GREP@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -acx_pthread_config = @acx_pthread_config@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_doxygen = @enable_doxygen@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -EXTRA_DIST = reuters-21578 \ - reuters-21578-index \ - utf8text \ - french_unicode.bin \ - readme.txt - -MAINTAINERCLEANFILES = Makefile.in -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/data/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu test/data/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru clucene-core-0.9.21b/test/data/readme.txt clucene-core-2.3.3.4/test/data/readme.txt --- clucene-core-0.9.21b/test/data/readme.txt 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/readme.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -Reuters-21578 is the data set we use to test for index compatibility. - -Retuers-21578-index directory contains an index created using java lucene -version 1.4.3. The following changes were made to the java demo to create -this index: - -* The FileDocument is using f.getName() instead of f.getPath() for the path field. -* The modified field was removed -* Used a special analyser instead of StandardAnalyzer. This is because the text - classification of java differs to that of clucene. See the TestReuters.cpp code - for implementation. Java version used exactly the same implementation. diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/all-exchanges-strings.lc.txt clucene-core-2.3.3.4/test/data/reuters-21578/all-exchanges-strings.lc.txt --- clucene-core-0.9.21b/test/data/reuters-21578/all-exchanges-strings.lc.txt 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/all-exchanges-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -amex -ase -asx -biffex -bse -cboe -cbt -cme -comex -cse -fox -fse -hkse -ipe -jse -klce -klse -liffe -lme -lse -mase -mise -mnse -mose -nasdaq -nyce -nycsce -nymex -nyse -ose -pse -set -simex -sse -stse -tose -tse -wce -zse diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/all-orgs-strings.lc.txt clucene-core-2.3.3.4/test/data/reuters-21578/all-orgs-strings.lc.txt --- clucene-core-0.9.21b/test/data/reuters-21578/all-orgs-strings.lc.txt 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/all-orgs-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -adb-africa -adb-asia -aibd -aid -anrpc -asean -atpc -bis -cipec -comecon -ec -eca -ecafe -ece -ecla -ecsc -ecwa -efta -eib -emcf -escap -euratom -fao -gatt -gcc -geplacea -iaea -iata -icco -ico-coffee -ico-islam -ida -iea -iisi -ilo -ilzsg -imco -imf -inro -irsg -isa -itc -iwc-whale -iwc-wheat -iwcc -iws -iwto -lafta -mfa -oapec -oecd -opec -un -unctad -who -worldbank diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/all-people-strings.lc.txt clucene-core-2.3.3.4/test/data/reuters-21578/all-people-strings.lc.txt --- clucene-core-0.9.21b/test/data/reuters-21578/all-people-strings.lc.txt 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/all-people-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,267 +0,0 @@ -abdel-hadi-kandeel -alfonsin -alhaji-abdul-ahmed -alptemocin -amato -andersen -andriessen -aqazadeh -aquino -arafat -babangida -balladur -bangemann -barreto -berge -beteta -blix -boesky -bond -botha -bouey -braks -bresser-pereira -brodersohn -brundtland -camdessus -carlsson -caro -castelo-branco -castro -cavaco-silva -chaves -chen-muhua -chiang-ching-kuo -chien -chirac -ciampi -colombo -conable -concepcion -corrigan -cossiga -crow -dadzie -dauster -de-clercq -de-kock -de-korte -de-la-madrid -de-larosiere -del-mazo -delamuraz -delors -dementsev -deng-xiaoping -dennis -dhillon -dominguez -douglas -du-plessis -duisenberg -dunkel -edelman -enggaard -eser -evren -eyskens -feldt -fernandez -ferrari -finnbogadottir -friedman -fujioka -gaddafi -gandhi -garcia -gava -godeaux -gonzalez -gorbachev -goria -gostyev -graf -greenspan -gromyko -grosz -guillaume -halikias -hamad-saud-al-sayyari -hannibalsson -haughey -hawke -he-kang -herrington -hillery -hisham-nazer -hoefner -hoffmeyer -holberg -holkeri -honecker -hovmand -howard-baker -husak -icahn -james-baker -james-miller -jaruzelski -jayme -johnston -kaminsky -kaufman -keating -khameini -khomeini -kiechle -king-fahd -kohl -koivisto -kondo -koren -kullberg -lacina -lange -languetin -lawson -lee-ta-hai -lee-teng-hui -leenanon -leigh-pemberton -leitz -li-peng -li-xiannian -liikanen -lubbers -lukman -lyng -machinea -macsharry -malhotra -mancera-aguayo -martens -martin -masse -maxwell -maystadt -medgyessy -messner -mikulic -milliet -mitterrand -miyazawa -mohammad-ibrahim-jaffrey-baluch -mohammad-khan-junejo -mohammad-yasin-khan-wattoo -mohammed-ahmed-al-razaz -mohammed-ali-abal-khail -mohammed-salaheddin-hamid -morales-bermudez -mousavi -moyle -mubarak -mulroney -murdoch -mustapha -nakao -nakasone -nasko -nemeth -nobrega -o-cofaigh -o-kennedy -oeien -okongwu -ongpin -ortega -ozal -palsson -pandolfi -papandreou -parkinson -paye -perez-de-cuellar -petricioli -pickens -poehl -pottakis -prawiro -qassemi -rafnar -rafsanjani -reagan -rezende -riberio-cadilhe -rich -rikanovic -rojas -romero -roumeliotis -rowland -rubio -ruder -ruding -russell -ryzhkov -saberbein -salinas -samojlik -santer -saracoglu -sarney -sartzetakis -sathe -schlueter -sedki -simitis -simonsen -singhasaneh -siregar -skaanland -soares -solchaga -sourrouille -sprinkel -steeg -stich -stoltenberg -stoph -strougal -subroto -suharto -sumita -suominen -takeshita -tamura -tavares-moreia -thatcher -timar -tinsulanonda -tiwari -toernaes -toman -tsovolas -vancsa -venkataraman -vera-la-rosa -verity -villanyi -vlatkovic -volcker -von-weizsaecker -vranitzky -waldheim -wali -walsh -wang-bingqian -wardhana -wasim-aun-jaffrey -wilson -wise -yeutter -young -yu-kuo-hua -zak -zhao-ziyang -zheng-tuobin -zia-ul-haq diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/all-places-strings.lc.txt clucene-core-2.3.3.4/test/data/reuters-21578/all-places-strings.lc.txt --- clucene-core-0.9.21b/test/data/reuters-21578/all-places-strings.lc.txt 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/all-places-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,175 +0,0 @@ -afghanistan -albania -algeria -american-samoa -andorra -angola -anguilla -antigua -argentina -aruba -australia -austria -bahamas -bahrain -bangladesh -barbados -belgium -belize -benin -bermuda -bhutan -bolivia -botswana -brazil -british-virgin-islands -brunei -bulgaria -burkina-faso -burma -burundi -cameroon -canada -cape-verde -cayman-islands -central-african-republic -chad -chile -china -colombia -congo -costa-rica -cuba -cyprus -czechoslovakia -denmark -djibouti -dominica -dominican-republic -east-germany -ecuador -egypt -el-salvador -equatorial-guinea -ethiopia -fiji -finland -france -french-guiana -gabon -gambia -ghana -gibraltar -greece -grenada -guadeloupe -guam -guatemala -guinea -guinea-bissau -guyana -haiti -honduras -hong-kong -hungary -iceland -india -indonesia -iran -iraq -ireland -israel -italy -ivory-coast -jamaica -japan -jordan -kampuchea -kenya -kuwait -laos -lebanon -lesotho -liberia -libya -liechtenstein -luxembourg -macao -madagascar -malawi -malaysia -mali -malta -martinique -mauritania -mauritius -mexico -monaco -morocco -mozambique -namibia -nepal -netherlands -netherlands-antilles -new-caledonia -new-zealand -nicaragua -niger -nigeria -north-korea -norway -oman -pakistan -panama -papua-new-guinea -paraguay -peru -philippines -poland -portugal -qatar -romania -rwanda -saudi-arabia -senegal -seychelles -sierra-leone -singapore -somalia -south-africa -south-korea -spain -sri-lanka -sudan -suriname -swaziland -sweden -switzerland -syria -taiwan -tanzania -thailand -togo -tonga -trinidad-tobago -tunisia -turkey -uae -uganda -uk -uruguay -us-virgin-islands -usa -ussr -vanuatu -vatican -venezuela -vietnam -west-germany -western-samoa -yemen-arab-republic -yemen-demo-republic -yugoslavia -zaire -zambia -zimbabwe diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/all-topics-strings.lc.txt clucene-core-2.3.3.4/test/data/reuters-21578/all-topics-strings.lc.txt --- clucene-core-0.9.21b/test/data/reuters-21578/all-topics-strings.lc.txt 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/all-topics-strings.lc.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,135 +0,0 @@ -acq -alum -austdlr -austral -barley -bfr -bop -can -carcass -castor-meal -castor-oil -castorseed -citruspulp -cocoa -coconut -coconut-oil -coffee -copper -copra-cake -corn -corn-oil -cornglutenfeed -cotton -cotton-meal -cotton-oil -cottonseed -cpi -cpu -crude -cruzado -dfl -dkr -dlr -dmk -drachma -earn -escudo -f-cattle -ffr -fishmeal -flaxseed -fuel -gas -gnp -gold -grain -groundnut -groundnut-meal -groundnut-oil -heat -hk -hog -housing -income -instal-debt -interest -inventories -ipi -iron-steel -jet -jobs -l-cattle -lead -lei -lin-meal -lin-oil -linseed -lit -livestock -lumber -lupin -meal-feed -mexpeso -money-fx -money-supply -naphtha -nat-gas -nickel -nkr -nzdlr -oat -oilseed -orange -palladium -palm-meal -palm-oil -palmkernel -peseta -pet-chem -platinum -plywood -pork-belly -potato -propane -rand -rape-meal -rape-oil -rapeseed -red-bean -reserves -retail -rice -ringgit -rubber -rupiah -rye -saudriyal -sfr -ship -silk -silver -singdlr -skr -sorghum -soy-meal -soy-oil -soybean -stg -strategic-metal -sugar -sun-meal -sun-oil -sunseed -tapioca -tea -tin -trade -tung -tung-oil -veg-oil -wheat -wool -wpi -yen -zinc diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/cat-descriptions_120396.txt clucene-core-2.3.3.4/test/data/reuters-21578/cat-descriptions_120396.txt --- clucene-core-0.9.21b/test/data/reuters-21578/cat-descriptions_120396.txt 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/cat-descriptions_120396.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,1203 +0,0 @@ - -Some notes on the Reuters Categories -David D. Lewis -3-Dec-96 - - The letter W. Bruce Croft received from Phil Hayes (March 9, 1990) -gave a list of 135 TOPICS categories, which were used in HAYES89. I -reproduce this list below. - - The email message David D. Lewis received (Nov. 26, 1990) from Phil -Hayes gave lists (which I reproduce below) for categories in these -fields: - - number stated number actually - at top of list on list - ORGS 56 56 - EXCHANGES 39 39 - PLACES (i.e. COUNTRIES) 176 175 - PEOPLE 269 267 - - Total 540 537 - Total stated in IEEE paper: 539 - - The total 674 categories mentioned in HAYES90b is the sum of 135 and -539. So the published numbers are a little off. For the purposes of -Reuters-21578 we have taken as ground truth the actual lists of -category names, and the number of items on those lists. - -********************************************************************* - -****Subject Codes (135) - -Money/Foreign Exchange (MONEY-FX) -Shipping (SHIP) -Interest Rates (INTEREST) - -**Economic Indicator Codes (16) - -Balance of Payments (BOP) -Trade (TRADE) -Consumer Price Index (CPI) -Wholesale Price Index (WPI) -Unemployment (JOBS) -Industrial Production Index (IPI) -Capacity Utilisation (CPU) -Gross National/Domestic Product (GNP) -Money Supply (MONEY-SUPPLY) -Reserves (RESERVES) -Leading Economic Indicators (LEI) -Housing Starts (HOUSING) -Personal Income (INCOME) -Inventories (INVENTORIES) -Instalment Debt/Consumer Credit (INSTAL-DEBT) -Retail Sales (RETAIL) - -**Currency Codes (27) - -U.S. Dollar (DLR) -Australian Dollar (AUSTDLR) -Hong Kong Dollar (HK) -Singapore Dollar (SINGDLR) -New Zealand Dollar (NZDLR) -Canadian Dollar (CAN) -Sterling (STG) -D-Mark (DMK) -Japanese Yen (YEN) -Swiss Franc (SFR) -French Franc (FFR) -Belgian Franc (BFR) -Netherlands Guilder/Florin (DFL) -Italian Lira (LIT) -Danish Krone/Crown (DKR) -Norwegian Krone/Crown (NKR) -Swedish Krona/Crown (SKR) -Mexican Peso (MEXPESO) -Brazilian Cruzado (CRUZADO) -Argentine Austral (AUSTRAL) -Saudi Arabian Riyal (SAUDRIYAL) -South African Rand (RAND) -Indonesian Rupiah (RUPIAH) -Malaysian Ringitt (RINGGIT) -Portuguese Escudo (ESCUDO) -Spanish Peseta (PESETA) -Greek Drachma (DRACHMA) - -**Corporate Codes (2) - -Mergers/Acquisitions (ACQ) -Earnings and Earnings Forecasts (EARN) - -**Commodity Codes (78) - -ALUM -BARLEY -CARCASS -CASTOR-MEAL -CASTOR-OIL -CASTORSEED -CITRUSPULP -COCOA -COCONUT-OIL -COCONUT -COFFEE -COPPER -COPRA-CAKE -CORN-OIL -CORN -CORNGLUTENFEED -COTTON -COTTON-MEAL -COTTON-OIL -COTTONSEED -F-CATTLE -FISHMEAL -FLAXSEED -GOLD -GRAIN -GROUNDNUT -GROUNDNUT-MEAL -GROUNDNUT-OIL -IRON-STEEL -LEAD -LIN-MEAL -LIN-OIL -LINSEED -LIVESTOCK -L-CATTLE -HOG -LUMBER -LUPIN -MEAL-FEED -NICKEL -OAT -OILSEED -ORANGE -PALLADIUM -PALM-MEAL -PALM-OIL -PALMKERNEL -PLATINUM -PLYWOOD -PORK-BELLY -POTATO -RAPE-MEAL -RAPE-OIL -RAPESEED -RED-BEAN -RICE -RUBBER -RYE -SILK -SILVER -SORGHUM -SOY-MEAL -SOY-OIL -SOYBEAN -STRATEGIC-METAL -SUGAR -SUN-MEAL -SUN-OIL -SUNSEED -TAPIOCA -TEA -TIN -TUNG-OIL -TUNG -VEG-OIL -WHEAT -WOOL -ZINC - -**Energy Codes (9) - -Crude Oil (CRUDE) -Heating Oil/Gas Oil (HEAT) -Fuel Oil (FUEL) -Gasoline (GAS) -Natural Gas (NAT-GAS) -Petro-Chemicals (PET-CHEM) -Propane (PROPANE) -Jet and Kerosene (JET) -Naphtha (NAPHTHA) - -________________________________________________________________ - -@heading[Organization Codes (56)] -@begin[format] -African Development Bank (ADB-AFRICA)@* -Agency for International Development (AID)@* -Asian Development Bank (ADB-ASIA)@* -Association of International Bond Dealers (AIBD)@* -Association of Natural Rubber Producing Countries (ANRPC)@* -Association of South East Asian Nations (ASEAN)@* -Association of Tin Producing Countries (ATPC)@* -Bank for International Settlements (BIS)@* -Council for Mutual Economic Assistance (COMECON)@* -Economic Commission for Africa (ECA)@* -Economic Commission for Asia and the Far East (ECAFE)@* -Economic Commission for Europe (ECE)@* -Economic Commission for Latin America and The Caribbean (ECLA)@* -Economic Commission for West Asia (ECWA)@* -Economic and Social Commission for Asia and the Pacific (ESCAP)@* -European Atomic Energy Community (EURATOM)@* -European Coal and Steel Community (ECSC)@* -European Community (EC)@* -European Free Trade Association (EFTA)@* -European Investment Bank (EIB)@* -European Monetary Cooperation Fund (EMCF)@* -Food and Agriculture Organisation (FAO)@* -General Agreement on Tariffs and Trade (GATT)@* -Grupo de Paises Latinoamericanos y del Caribe Exportadores de Azucar -[Group of Latin American and Caribbean Sugar Exporting Countries] -(GEPLACEA)@* -Gulf Cooperation Council (GCC)@* -Inter-Government Council of Copper Exporting Countries (CIPEC)@* -Inter-Governmental Maritime Consultative Organisation (IMCO)@* -International Air Transport Association (IATA)@* -International Atomic Energy Authority (IAEA)@* -International Bank for Reconstruction and Development (WORLDBANK)@* -International Cocoa Organisation (ICCO)@* -International Coffee Organisation (ICO-COFFEE)@* -International Development Association (IDA)@* -International Energy Agency (IEA)@* -International Iron and Steel Institute (IISI)@* -International Labour Organisation (ILO)@* -International Lead and Zinc Study Group (ILZSG)@* -International Monetary Fund (IMF)@* -International Natural Rubber Organisation (INRO)@* -International Rubber Study Group (IRSG)@* -International Sugar Agreement (ISA)@* -International Tin Council (ITC)@* -International Whaling Commission (IWC-WHALE)@* -International Wheat Council (IWC-WHEAT)@* -International Wool Secretariat (IWS)@* -International Wool Textile Organisation (IWTO)@* -International Wrought Copper Council (IWCC)@* -Islamic Conference Organisation (ICO-ISLAM)@* -Latin American Free Trade Association (LAFTA)@* -Multi-Fibres Arrangement (MFA)@* -Organisation for Economic Cooperation and Development (OECD)@* -Organisation of Arab Petroleum Exporting Countries (OAPEC)@* -Organisation of Petroleum Exporting Countries (OPEC)@* -United Nations (UN)@* -United Nations Conference on Trade and Development (UNCTAD)@* -World Health Organisation (WHO)@* -@end[format] -@blankspace[3 lines] -________________________________________________________________ -@heading[Exchange Codes (39)] -@begin[format] -American Stock Exchange (AMEX)@* -Amsterdam Stock Exchange/Bourse (ASE)@* -Australian Stock Exchange (ASX)@* -Baltic International Freight Futures Exchange (BIFFEX)@* -Brussels Stock Exchange/Bourse (BSE)@* -Chicago Board of Trade (CBT)@* -Chicago Board of Trade Options Exchange (CBOE)@* -Chicago Mercantile Exchange (CME)@* -Copenhagen Stock Exchange/Bourse (CSE)@* -Frankfurt Stock Exchange/Bourse (FSE)@* -Hong Kong Stock Exchange (HKSE)@* -International Petroleum Exchange (IPE)@* -Johannesburg Stock Exchange (JSE)@* -Kuala Lumpur Commodity Exchange (KLCE)@* -Kuala Lumpur Stock Exchange (KLSE)@* -London Futures and Options Exchange (FOX)@* -London International Financial Futures Exchange (LIFFE)@* -London Metal Exchange (LME)@* -London Stock Exchange (LSE)@* -Madrid Stock Exchange (MASE)@* -Manila Stock Exchange (MNSE)@* -Milan Stock Exchange/Bourse (MISE)@* -Montreal Stock Exchange (MOSE)@* -National Association of Securities Dealers Automated Quotation System (NASDAQ)@* -New York Coffee, Sugar and Cocoa Exchange (NYCSCE)@* -New York Commodity Exchange (COMEX)@* -New York Cotton Exchange (NYCE)@* -New York Mercantile Exchange (NYMEX)@* -New York Stock Exchange (NYSE)@* -Oslo Stock Exchange/Bourse (OSE)@* -Paris Stock Exchange/Bourse (PSE)@* -Securities Exchange of Thailand (SET)@* -Singapore International Monetary Exchange (SIMEX)@* -Singapore Stock Exchange (SSE)@* -Stockholm Stock Exchange/Bourse (STSE)@* -Tokyo Stock Exchange (TSE)@* -Toronto Stock Exchange (TOSE)@* -Winnipeg Commodity Exchange (WCE)@* -Zurich Stock Exchange/Bourse (ZSE)@* -@end[format] -@blankspace[3 lines] -________________________________________________________________ -@heading[Country Codes (176)] -@begin[format] -AFGHANISTAN@* -ALBANIA @* -ALGERIA @* -AMERICAN-SAMOA@* -ANDORRA @* -ANGOLA @* -ANGUILLA@* -ANTIGUA @* -ARGENTINA @* -ARUBA@* -AUSTRALIA @* -AUSTRIA @* -BAHAMAS @* -BAHRAIN @* -BANGLADESH @* -BARBADOS@* -BELGIUM @* -BELIZE @* -BENIN@* -BERMUDA @* -BHUTAN @* -BOLIVIA @* -BOTSWANA@* -BRAZIL @* -BRITISH-VIRGIN-ISLANDS@* -BRUNEI @* -BULGARIA@* -BURKINA-FASO@* -BURMA@* -BURUNDI @* -CAMEROON@* -CANADA @* -CAPE-VERDE @* -CAYMAN-ISLANDS@* -CENTRAL-AFRICAN-REPUBLIC@* -CHAD @* -CHILE@* -CHINA@* -COLOMBIA@* -CONGO@* -COSTA-RICA @* -CUBA @* -CYPRUS @* -CZECHOSLOVAKIA@* -DENMARK@* -DJIBOUTI@* -DOMINICA@* -DOMINICAN-REPUBLIC@* -EAST-GERMANY@* -ECUADOR @* -EGYPT@* -EL-SALVADOR@* -EQUATORIAL-GUINEA@* -ETHIOPIA@* -FIJI @* -FINLAND @* -FRANCE @* -FRENCH-GUIANA@* -GABON@* -GAMBIA @* -GHANA@* -GIBRALTAR @* -GREECE @* -GRENADA @* -GUADELOUPE @* -GUAM @* -GUATEMALA @* -GUINEA-BISSAU@* -GUINEA @* -GUYANA @* -HAITI@* -HONDURAS@* -HONG-KONG @* -HUNGARY @* -ICELAND @* -INDIA@* -INDONESIA @* -IRAN @* -IRAQ @* -IRELAND @* -ISRAEL @* -ITALY@* -IVORY-COAST@* -JAMAICA @* -JAPAN@* -JORDAN @* -KAMPUCHEA @* -KENYA@* -KUWAIT @* -LAOS @* -LEBANON @* -LESOTHO @* -LIBERIA @* -LIBYA@* -LIECHTENSTEIN@* -LUXEMBOURG @* -MACAO@* -MADAGASCAR @* -MALAWI @* -MALAYSIA@* -MALI @* -MALTA@* -MARTINIQUE @* -MAURITANIA @* -MAURITIUS @* -MEXICO @* -MONACO @* -MOROCCO @* -MOZAMBIQUE @* -NAMIBIA @* -NEPAL@* -NETHERLANDS@* -NETHERLANDS-ANTILLES@* -NEW-CALEDONIA@* -NEW-ZEALAND@* -NICARAGUA @* -NIGER@* -NIGERIA @* -NORTH-KOREA@* -NORWAY @* -OMAN @* -PAKISTAN@* -PANAMA @* -PAPUA-NEW-GUINEA@* -PARAGUAY@* -PERU @* -PHILIPPINES@* -POLAND @* -PORTUGAL@* -QATAR@* -ROMANIA @* -RWANDA @* -SAUDI-ARABIA@* -SENEGAL @* -SEYCHELLES @* -SIERRA-LEONE@* -SINGAPORE @* -SOMALIA @* -SOUTH-AFRICA@* -SOUTH-KOREA@* -SPAIN@* -SRI-LANKA @* -SUDAN@* -SURINAME@* -SWAZILAND @* -SWEDEN @* -SWITZERLAND@* -SYRIA@* -TAIWAN @* -TANZANIA@* -THAILAND@* -TOGO @* -TONGA@* -TRINIDAD-TOBAGO@* -TUNISIA @* -TURKEY @* -UAE @* -UGANDA @* -UK@* -URUGUAY @* -USA@* -USSR@* -US-VIRGIN-ISLANDS@* -VANUATU @* -VATICAN @* -VENEZUELA @* -VIETNAM @* -WEST-GERMANY@* -WESTERN-SAMOA@* -YEMEN-ARAB-REPUBLIC@* -YEMEN-DEMO-REPUBLIC@* -YUGOSLAVIA @* -ZAIRE@* -ZAMBIA @* -ZIMBABWE@* -@end[format] -@blankspace[3 lines] -________________________________________________________________ -@heading[People Codes (269)] -@begin[itemize] -Argentina -@begin[itemize] - President Raul Alfonsin (ALFONSIN) - - Economy Minister Juan Sourrouille (SOURROUILLE) - - Finance Secretary Mario Brodersohn (BRODERSOHN) - - Central Bank Governor Jose Luis Machinea (MACHINEA) -@end[itemize] - -Australia -@begin[itemize] - Prime Minister Robert (Bob) Hawke (HAWKE) - - Federal Treasurer Paul Keating (KEATING) - - Finance Minister Peter Walsh (WALSH) - - Central Bank (Reserve Bank) Governor Bob Johnston (JOHNSTON) -@end[itemize] - -Austria -@begin[itemize] - President Kurt Waldheim (WALDHEIM) - - Chancellor Franz Vranitzky (VRANITZKY) - - Finance Minister Ferdinand Lacina (LACINA) - - Economy Minister Robert Graf (GRAF) - - Central Bank President Stephan Koren (KOREN) -@end[itemize] - -Belgium -@begin[itemize] - Prime Minister Wilfried Martens (MARTENS) - - Deputy Prime Minister and Economy Minister Philippe Maystadt (MAYSTADT) - - Finance Minister Mark Eyskens (EYSKENS) - - Central Bank (National Bank) Governor Jean Godeaux (GODEAUX) -@end[itemize] - -Brazil -@begin[itemize] - President Jose Sarney (SARNEY) - - Finance Minister Mailson Nobrega (NOBREGA) - - (former) Finance Minister Luiz Carlos Bresser Pereira (BRESSER-PEREIRA) - - Industry and Trade Minister Jose Hugo Castelo Branco (CASTELO-BRANCO) - - Agriculture Minister Iris Rezende (REZENDE) - - Mines and Energy Minister Aureliano Chaves (CHAVES) - - Central Bank President Fernando Milliet (MILLIET) -@end[itemize] - -Canada -@begin[itemize] - Prime Minister Brian Mulroney (MULRONEY) - - Agriculture Minister John Wise (WISE) - - Finance Minister Michael Wilson (WILSON) - - Energy Minister Marcel Masse (MASSE) - - (former) Central Bank (Bank of Canada) Governor Gerald K. Bouey (BOUEY) - - Central Bank (Bank of Canada) Governor John Crow (CROW) -@end[itemize] - -China -@begin[itemize] - President Li Xiannian (LI-XIANNIAN) - - Prime Minister Zhao Ziyang (ZHAO-ZIYANG) - - Premier Li Peng (LI-PENG) - - Elder Statesman (a member of the Standing Committee of the - Communist Party Politburo) Deng Xiaoping (DENG-XIAOPING) - - Finance Minister Wang Bingqian (WANG-BINGQIAN) - - Foreign Economic Relations and Trade Minister Zheng Tuobin (ZHENG-TUOBIN) - - Agriculture Minister He Kang (HE-KANG) - - President of the People's Bank of China and Head of National - Treasury Mrs Chen Muhua (CHEN-MUHUA) -@end[itemize] - -Cuba -@begin[itemize] -Fidel Castro, President of Cuba (CASTRO) -@end[itemize] - -Czechoslovakia -@begin[itemize] - President Gustav Husak (HUSAK) - - Prime Minister Lubomir Strougal (STROUGAL) - - Deputy Minister and Minister of Agriculture and Food - Miroslav Toman (TOMAN) - - Finance Minister Jaromir Zak (ZAK) -@end[itemize] - -Denmark -@begin[itemize] - Prime Minister Poul Schlueter (SCHLUETER) - - Finance Minister Palle Simonsen (SIMONSEN) - - (former) Economy Minister Anders Andersen (ANDERSEN) - - Economy Minister Knud Enggaard (ENGGAARD) - - Energy Minister Svend Erik Hovmand (HOVMAND) - - (former) Agriculture Minister Mrs Britta Schall Holberg (HOLBERG) - - Agriculture Minister Laurits Toernaes (TOERNAES) - - Central Bank Governor Erik Hoffmeyer (HOFFMEYER) -@end[itemize] - -East Germany -@begin[itemize] -Head of State and Chairman of Council of State Erich Honecker, who is also -General Secretary of the Socialist Unity Party (HONECKER) - - Prime Minister Willi Stoph (STOPH) - - Finance Minister Ernst Hoefner (HOEFNER) - - Agriculture, Forestry and Food Minister Bruno Leitz (LEITZ) - - State Bank President Horst Kaminsky (KAMINSKY) -@end[itemize] - -Egypt -@begin[itemize] - President Hosni Mubarak (MUBARAK) - - Prime Minister Atef Sedki (SEDKI) - - (former) Economy Minister Youssri Wali (WALI) - - Economy Minister Youssri mustapha (MUSTAPHA) - - Finance Minister Mohammed Ahmed al-Razaz (MOHAMMED-AHMED-AL-RAZAZ) - - Oil and Mineral Wealth Minister Abdel-Hadi Kandeel (ABDEL-HADI-KANDEEL) - - Central Bank Governor Mohammed Salaheddin Hamid (MOHAMMED-SALAHEDDIN-HAMID) -@end[itemize] - -Finland -@begin[itemize] - President Mauno Koivisto (KOIVISTO) - - Prime Minister Harri Holkeri (HOLKERI) - - Finance Minister Erkki Liikanen (LIIKANEN) - - Trade and Industry Minister Ilkka Suominen (SUOMINEN) - - Central Bank Governor Rolf Kullberg (KULLBERG) -@end[itemize] - - -France -@begin[itemize] - President Francois Mitterrand (MITTERRAND) - - Prime Minister Jacques Chirac (CHIRAC) - - Minister of State for Economy, Finance and Privatisation - Edouard Balladur (BALLADUR) - - Agriculture Minister Francois Guillaume (GUILLAUME) - - Central Bank (Bank of France) Governor Jacques de Larosiere - (DE-LAROSIERE) -@end[itemize] - -Greece -@begin[itemize] - President Christos Sartzetakis (SARTZETAKIS) - - Prime Minister Andreas Papandreou (PAPANDREOU) - - Economy Minister Panayotis Roumeliotis (ROUMELIOTIS) - - (former) Economy Minister Kostas Simitis (SIMITIS) - - Finance Minister Dimitris Tsovolas (TSOVOLAS) - - Agriculture Minister Yannis Pottakis (POTTAKIS) - - Central Bank Governor Dimitris Halikias (HALIKIAS) -@end[itemize] - -Hungary -@begin[itemize] - Head of State and President of Presidential Council Karoly Nemeth (NEMETH) - - Prime Minister Karoly Grosz (GROSZ) - - Finance Minister Miklos Villanyi (VILLANYI) - - (former) Finance Minister Peter Medgyessy (MEDGYESSY) - - Agriculture and Food Minister Jenoe Vancsa (VANCSA) - - Central Bank President Dr Matyas Timar (TIMAR) -@end[itemize] - -Iceland -@begin[itemize] - President Mrs Vigdis Finnbogadottir (FINNBOGADOTTIR) - - Prime Minister Thorsteinn Palsson (PALSSON) - - Finance Minister Jon Baldvin Hannibalsson (HANNIBALSSON) - - Central Bank Chairman Jonas G. Rafnar (RAFNAR) -@end[itemize] - -India -@begin[itemize] - President Ramaswamy Venkataraman (VENKATARAMAN) - - Prime Minister Rajiv Gandhi (GANDHI) - - Finance and Commerce Minister Narain Dutt Tiwari (TIWARI) - - Energy Minister Vasant Sathe (SATHE) - - Agriculture and Rural Development Minister Gurdial Singh Dhillon - (DHILLON) - - Central Bank (Reserve Bank) Governor R.N. Malhotra (MALHOTRA) -@end[itemize] - -Indonesia -@begin[itemize] - President General Suharto (SUHARTO) - - Economy Minister Ali Wardhana (WARDHANA) - - Finance Minister Radius Prawiro (PRAWIRO) - - Mining and Energy Minister Subroto (SUBROTO) - - Central Bank Governor Arifin Siregar (SIREGAR) -@end[itemize] - -Iran -@begin[itemize] - Revolutionary Leader Ayatollah Ruhollah Khomeini (KHOMEINI) - - President Hojatoleslam Ali Khameini (KHAMEINI) - - Prime Minister Mir-Hossein Mousavi (MOUSAVI) - - Oil Minister Gholamreza Aqazadeh (AQAZADEH) - - Central Bank Governor Majid Qassemi (QASSEMI) - - Speaker of the Majlis (Parliament) Hojatoleslam Ali Hashemi Rafsanjani - (RAFSANJANI) -@end[itemize] - -Ireland -@begin[itemize] - President Patrick Hillery (HILLERY) - - Prime Minister Charles Haughey (HAUGHEY) - - Finance Minister Ray MacSharry (MACSHARRY) - - Agriculture Minister Michael O'Kennedy (O-KENNEDY) - - Central Bank Governor Tomas O'Cofaigh (O-COFAIGH) -@end[itemize] - -Italy -@begin[itemize] - President Francesco Cossiga (COSSIGA) - - Prime Minister Giovanni Goria (GORIA) - - Deputy Prime Minister and Treasury Minister Guiliano Amato (AMATO) - - Finance Minister Antonio Gava (GAVA) - - Budget and Planning Minister Emilio Colombo (COLOMBO) - - Agriculture and Forestry Minister Filippo Maria Pandolfi (PANDOLFI) - - Central Bank (Bank of Italy) Governor Carlo Ciampi (CIAMPI) -@end[itemize] - - - -Japan -@begin[itemize] - Prime Minister Noboru Takeshita (TAKESHITA) - - (former) Prime Minister Yasuhiro Nakasone (NAKASONE) - - Finance Minister Kiichi Miyazawa (MIYAZAWA) - - International Trade and Industry Minister Hajime Tamura (TAMURA) - - Director-General of Economic Planning Agency Eiichi Nakao (NAKAO) - - (former) Director-General of Economic Planning Agency Tetsuo Kondo (KONDO) - - Central Bank (Bank of Japan) Governor Satoshi Sumita (SUMITA) -@end[itemize] - -Libya -@begin[itemize] -Muammar Gaddafi, Libyan leader (GADDAFI) -@end[itemize] - - -Luxembourg -@begin[itemize] - Prime Minister (who is also Minister of Communications, of Finance, - of Planning and of Posts, Telephone and Telegraph) - Jacques Santer (SANTER) -@end[itemize] - -Mexico -@begin[itemize] - President Miguel de la Madrid (DE-LA-MADRID) - - Finance Minister Gustavo Petricioli (PETRICIOLI) - - Oil, Mines and Parastatal Industry Minister Alfredo Del Mazo (DEL-MAZO) - - (former) Director-General of Pemex (State Oil Company) Ramon Beteta (BETETA) - - Director-General of Pemex (State Oil Company) francisco Rojas (ROJAS) - - Central Bank President Miguel Mancera Aguayo (MANCERA-AGUAYO) -@end[itemize] - - -The Netherlands -@begin[itemize] - Prime Minister Ruud Lubbers (LUBBERS) - - Deputy Prime Minister and Minister for Economic Affairs - Rudolf De Korte (DE-KORTE) - - Finance Minister Onno Ruding (RUDING) - - Agriculture Minister Gerrit Braks (BRAKS) - - Central Bank Governor Wim Duisenberg (DUISENBERG) -@end[itemize] - - -New Zealand -@begin[itemize] - Prime Minister David Lange (LANGE) - - Finance Minister Roger Douglas (DOUGLAS) - - Agriculture Minister Colin Moyle (MOYLE) - - Central Bank (Reserve Bank) Governor Spencer Russell (RUSSELL) -@end[itemize] - -Nicaragua -@begin[itemize] -Daniel Ortega, President of Nicaragua (ORTEGA) -@end[itemize] - -Nigeria -@begin[itemize] - President General Ibrahim Babangida (BABANGIDA) - - Agriculture Minister Major-General Mohammed Gado Nasko (NASKO) - - Finance Minister Chu Okongwu (OKONGWU) - - Petroleum Resources (Oil) Minister Rilwanu Lukman (LUKMAN) - - Central Bank Governor Alhaji Abdul Ahmed (ALHAJI-ABDUL-AHMED) -@end[itemize] - -Norway -@begin[itemize] - Prime Minister Mrs Gro Harlem Brundtland (BRUNDTLAND) - - Finance Minister Gunnar Berge (BERGE) - - Oil and Energy Minister Arne Oeien (OEIEN) - - Central Bank Governor Hermud Skaanland (SKAANLAND) -@end[itemize] - - -Pakistan -@begin[itemize] - President General Zia-ul-Haq (ZIA-UL-HAQ) - - Prime Minister Mohammad Khan Junejo (MOHAMMAD-KHAN-JUNEJO) - - Finance and Economic Affairs, Petroleum and Natural Resources - Minister Mohammad Yasin Khan Wattoo - (MOHAMMAD-YASIN-KHAN-WATTOO) - - Agriculture Minister Mohammad Ibrahim Jaffrey Baluch - (MOHAMMAD-IBRAHIM-JAFFREY-BALUCH) - - Central Bank (State Bank) Governor Wasim Aun Jaffrey (WASIM-AUN-JAFFREY) -@end[itemize] - -Peru -@begin[itemize] - President Alan Garcia (GARCIA) - - Economy and Finance Minister Gustavo Saberbein Chevalier (SABERBEIN) - - (former) Trade and Industry Minister Manuel Romero Caro (CARO) - - Industry and Trade Minister Alberto Vera La Rose (VERA-LA-ROSA) - - Energy Minister Abel Salinas (SALINAS) - - Agriculture Minister Remigio Morales Bermudez (MORALES-BERMUDEZ) - - Central Bank President Cesar Ferrari (FERRARI) -@end[itemize] - -Philippines -@begin[itemize] - President Mrs Corazon Aquino (AQUINO) - - (former) Finance Minister Jaime Ongpin (ONGPIN) - - Finance Minister Vicente Jayme (JAYME) - - Agriculture Minister Carlos Dominguez (DOMINGUEZ) - - Trade and Industry Minister Jose Concepcion (CONCEPCION) - - Central Bank Governor Jose Fernandez (FERNANDEZ) -@end[itemize] - -Poland -@begin[itemize] -Head of State and Chairman of Council of State (who is also First Secretary -of Polish United Workers (Communist) Party) General Wojciech Jaruzelski -(JARUZELSKI) - - Prime Minister Zbigniew Messner (MESSNER) - - Finance Minister Bazyli Samojlik (SAMOJLIK) -@end[itemize] - - - - -Portugal -@begin[itemize] - President Mario Soares (SOARES) - - Prime Minister Anibal Cavaco Silva (CAVACO-SILVA) - - Finance Minister Miguel Riberio Cadilhe (RIBERIO-CADILHE) - - Agriculture, Fisheries and Food Minister Alvaro Barreto (BARRETO) - - Central Bank Governor Jose Tavares Moreia (TAVARES-MOREIA) -@end[itemize] - - -Saudi Arabia -@begin[itemize] - Head of State and also Prime Minister King Fahd (Ibn Abdulaziz) - (KING-FAHD) - - Finance and National Economy Minister Sheikh Mohammed Ali Abal-Khail - (MOHAMMED-ALI-ABAL-KHAIL) - - Petroleum/Oil Minister Hisham Nazer (HISHAM-NAZER) - - Governor of the Saudi Arabian Monetary Agency Hamad Saud al-Sayyari - (HAMAD-SAUD-AL-SAYYARI) -@end[itemize] - -South Africa -@begin[itemize] - President P.W. Botha (BOTHA) - - Finance Minister Barend du Plessis (DU-PLESSIS) - - Central Bank (Reserve Bank) Governor Gerhard de Kock (DE-KOCK) -@end[itemize] - -Spain -@begin[itemize] - Prime Minister Felipe Gonzalez (GONZALEZ) - - Economy, Trade and Finance Minister Carlos Solchaga (SOLCHAGA) - - Agriculture Minister Carlos Romero (ROMERO) - - Central Bank Governor Mariano Rubio (RUBIO) -@end[itemize] - - -Sweden -@begin[itemize] - Prime Minister Ingvar Carlsson (CARLSSON) - - Finance Minister Kjell-Olof Feldt (FELDT) - - Central Bank Governor Bengt Dennis (DENNIS) -@end[itemize] - -Switzerland -@begin[itemize] - Economy Minister Jean-Pascal Delamuraz (DELAMURAZ) - - Finance Minister Otto Stich (STICH) - - Central Bank President Pierre Languetin (LANGUETIN) -@end[itemize] - -Taiwan -@begin[itemize] - President Lee Teng-hui (LEE-TENG-HUI) - - (former) President Chiang Ching-kuo (CHIANG-CHING-KUO) - - Prime Minister Yu Kuo-hua (YU-KUO-HUA) - - Economy Minister Lee Ta-hai (LEE-TA-HAI) - - Finance Minister Robert Chien (CHIEN) -@end[itemize] - -Thailand -@begin[itemize] - President General Prem Tinsulanonda (TINSULANONDA) - - Finance Minister Suthee Singhasaneh (SINGHASANEH) - - Agriculture Minister General Harn Leenanon (LEENANON) -@end[itemize] - -Turkey -@begin[itemize] - President Kenan Evren (EVREN) - - Prime Minister Turgut Ozal (OZAL) - - Finance Minister Ahmet Kurtcebe Alptemocin (ALPTEMOCIN) - - Central Bank Governor Rusdu Saracoglu (SARACOGLU) -@end[itemize] - - -United Kingdom -@begin[itemize] - Prime Minister Margaret Thatcher (THATCHER) - - Chancellor of the Exchequer (Finance Minister) Nigel Lawson (LAWSON) - - Energy Secretary Cecil Parkinson (PARKINSON) - - Trade and Industry Secretary Lord Young (YOUNG) - - Central Bank (Bank of England) Governor Robin Leigh-Pemberton - (LEIGH-PEMBERTON) -@end[itemize] - - -United States -@begin[itemize] - President Ronald Reagan (REAGAN) - - Treasury Secretary James Baker (JAMES-BAKER) - - Commerce Secretary C. William Verity (VERITY) - - Energy Secretary John Herrington (HERRINGTON) - - Agriculture Secretary Richard Lyng (LYNG) - - White House Chief of Staff Howard Baker (HOWARD-BAKER) - - Representative for Trade Negotiations Clayton Yeutter (YEUTTER) - - Director of Management and Budget Office James Miller (JAMES-MILLER) - - Chairman of Federal Reserve Board Alan Greenspan (GREENSPAN) - - President of New York Federal Reserve Bank E. Gerald Corrigan - (CORRIGAN) -@end[itemize] - -USSR (Soviet Union) -@begin[itemize] - President Andrei Gromyko (GROMYKO) - - General Secretary of the Communist Party Mikhail Gorbachev (GORBACHEV) - - Prime Minister Nikolai Ryzhkov (RYZHKOV) - - Finance Minister Boris Gostyev (GOSTYEV) - - State Bank Board Chairman Viktor Dementsev (DEMENTSEV) -@end[itemize] - -West Germany -@begin[itemize] - President Richard Von Weizsaecker (VON-WEIZSAECKER) - - Chancellor Helmut Kohl (KOHL) - - Finance Minister Gerhard Stoltenberg (STOLTENBERG) - - Economy Minister Martin Bangemann (BANGEMANN) - - Agriculture, Food and Forestry Minister Ignaz Kiechle (KIECHLE) - - Central Bank (Bundesbank) President Karl Otto Poehl (POEHL) -@end[itemize] - -Yugoslavia -@begin[itemize] - Prime Minister Branko Mikulic (MIKULIC) - - Finance Minister Svetozar Rikanovic (RIKANOVIC) - - Central Bank (National Bank) Governor Dusan Vlatkovic (VLATKOVIC) -@end[itemize] - -European Community Commission -@begin[itemize] - President Jacques Delors (DELORS) - - Commissioner for Agriculture and Forestry Frans Andriessen (ANDRIESSEN) - - Commissioner for Trade Policy Willy de Clercq (DE-CLERCQ) -@end[itemize] - -International Monetary Fund Managing Director Michel Camdessus (CAMDESSUS) - -World Bank President Barber Conable (CONABLE) - -International Atomic Energy Agency Director-General Hans Blix (BLIX) - -International Energy Agency Executive Director Helga Steeg (STEEG) - -Asian Development Bank President Masao Fujioka (FUJIOKA) - -United Nations Secretary-General Javier Perez de Cuellar (PEREZ-DE-CUELLAR) - -UNCTAD (United Nations Conference on Trade and Development) - Secretary-General Kenneth Dadzie (DADZIE) - -Organisation for Economic Cooperation and Development - Secretary-General Jean-Claude Paye (PAYE) - -International Air Transport Association Director General - Guenter Eser (ESER) - -Securities and Exchange Commission Chairman David S. Ruder (RUDER) - -General Agreement on Tariffs and Trade Director-General - Arthur Dunkel (DUNKEL) - -Milton Friedman, economist (FRIEDMAN) - -Henry Kaufman, economist with Salomon Bros. (KAUFMAN) - -Ivan Boesky (BOESKY) - -Carl Icahn (ICAHN) - -T. Boone Pickens (PICKENS) - -Rupert Murdoch, publisher and chairman of News Corp Ltd (MURDOCH) - -Robert Maxwell, publisher and chairman of Mirror Group of newspapers (MAXWELL) - -Roland (Tiny) Rowland, chairman of Lonrho Plc (ROWLAND) - -Asher Edelman (EDELMAN) - -Marc Rich (RICH) - -Alan Bond, chairman of Bond Corp Ltd (BOND) - -Jorio Dauster, President of The Brazilian Coffee Institute (DAUSTER) - -Beryl Sprinkel, Chairman of Council of Economic Advisers (SPRINKEL) - -Yasser Arafat, Chairman of Palestine Liberation Organisation (ARAFAT) - -Paul Volcker, economist (VOLCKER) - -Preston Martin, member of Federal Reserve Board (MARTIN) -@end[itemize] - - - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/feldman-cia-worldfactbook-data.txt clucene-core-2.3.3.4/test/data/reuters-21578/feldman-cia-worldfactbook-data.txt --- clucene-core-0.9.21b/test/data/reuters-21578/feldman-cia-worldfactbook-data.txt 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/feldman-cia-worldfactbook-data.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,5199 +0,0 @@ -This is a set of Prolog assertions for facts about countries, kindly -made available by Ronen Feldman of Bar-Ilan University. It was -extracted by Ronen Feldman and Amir Zilberstein from "The Project -Gutenberg Etext of the 1994 CIA World Factbook", available at a -variety of locations on the Web. --David D. Lewis, 9-Dec-96 - -pred_type("LandBounderies","countries","countries"). -pred_type("NaturalResources","countries","topics"). -pred_type("Population","countries","countries"). -pred_type("Capital","countries","countries"). -pred_type("MemberOf","countries","countries"). -pred_type("ExportCommodities","countries","topics"). -pred_type("ExportPartners","countries","countries"). -pred_type("ImportCommodities","countries","topics"). -pred_type("ImportPartners","countries","countries"). -pred_type("Industries","countries","topics"). -pred_type("Agriculture","countries","topics"). -bgfact("Afghanistan","LandBounderies",["China","Iran","Pakistan","Tajikis= -tan","Turkmenistan","Uzbekistan"]). -bgfact("Afghanistan","NaturalResources",["natural = -gas","petroleum","coal","copper","talc","barites","sulphur","lead","zinc"= -,"iron ore","salt","precious and semiprecious stones"]). -bgfact("Afghanistan","Population",["16903400"]). -bgfact("Afghanistan","Capital",["Kabul"]). -bgfact("Afghanistan","MemberOf",["AsDB","CP","ECO","ESCAP","FAO","G-77","= -IAEA","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","INTELSAT","IOC"= -,"ITU","LORCS","NAM","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","W= -HO","WMO","WTO"]). -bgfact("Afghanistan","ExportCommodities",["fruits and nuts","handwoven = -carpets","wool","cotton","hides and pelts","precious and semi-precious = -gems"]). -bgfact("Afghanistan","ExportPartners",["FSU = -countries","Pakistan","Iran","Germany","India","UK","Belgium","Luxembourg= -","Czechoslovakia"]). -bgfact("Afghanistan","ImportCommodities",["most consumer goods"]). -bgfact("Afghanistan","ImportPartners",["FSU = -countries","Pakistan","Iran","Japan","Singapore","India","South = -Korea","Germany"]). -bgfact("Afghanistan","Industries",["textiles","soap","furniture","shoes",= -"fertilizer","natural gas","oil","coal","copper"]). -bgfact("Afghanistan","Agriculture",["wheat","fruits","nuts","karakul = -pelts","wool","mutton"]). -bgfact("Albania","LandBounderies",["Greece","The Former Yugoslav = -Republic of Macedonia","Serbia and Montenegro"]). -bgfact("Albania","NaturalResources",["petroleum","natural = -gas","coal","chromium","copper","timber","nickel"]). -bgfact("Albania","Population",["3374085"]). -bgfact("Albania","Capital",["Tirane"]). -bgfact("Albania","MemberOf",["BSEC","CCC","CE","ISO","ITU","LORCS","NACC"= -,"OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WIPO","WMO"]). -bgfact("Albania","ExportCommodities",["asphalt","metals and metallic = -ores","electricity","crude","vegetables","fruits","tobacco"]). -bgfact("Albania","ExportPartners",["Italy","The Former Yugoslav Republic = -of = -Macedonia","Germany","Greece","Czechoslovakia","Poland","Romania","Bulgar= -ia","Hungary"]). -bgfact("Albania","ImportCommodities",["machinery","consumer = -goods","grains"]). -bgfact("Albania","ImportPartners",["Italy","The Former Yugoslav Republic = -of = -Macedonia","Germany","Czechoslovakia","Romania","Poland","Hungary","Bulga= -ria","Greece"]). -bgfact("Albania","Industries",["food processing","textiles and = -clothing","lumber","oil","cement","chemicals","mining","basic = -metals","hydropower"]). -bgfact("Albania","Agriculture",["produces wide range of temperate-zone = -crops and livestock"]). -bgfact("Algeria","LandBounderies",["Libya","Mali","Mauritania","Morocco",= -"Niger","Tunisia","Western Sahara"]). -bgfact("Algeria","NaturalResources",["petroleum","natural gas","iron = -ore","phosphates","uranium","lead","zinc"]). -bgfact("Algeria","Population",["27895068"]). -bgfact("Algeria","Capital",["Algiers"]). -bgfact("Algeria","MemberOf",["ABEDA","AfDB","AFESD","AL","AMF","AMU","CCC= -","ECA","FAO","G-15","G-19","G-24","G-77","IAEA","IBRD","ICAO","IDA","IDB= -","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","= -ISO","ITU","LORCS","NAM","OAPEC","OAS","OAU","OIC","OPEC","UN","UNAVEM = -II","UNCTAD","UNESCO","UNHCR","UNIDO","UNTAC","UPU","WCL","WHO","WIPO","W= -MO","WTO"]). -bgfact("Algeria","ExportCommodities",["petroleum and natural gas"]). -bgfact("Algeria","ExportPartners",["Italy","France","US","Germany","Spain= -"]). -bgfact("Algeria","ImportCommodities",["Capital goods","food and = -beverages","consumer goods"]). -bgfact("Algeria","ImportPartners",["France","Italy","Spain","US","Germany= -"]). -bgfact("Algeria","Industries",["petroleum","light Industries","natural = -gas","mining","electrical","petrochemical","food processing"]). -bgfact("Algeria","Agriculture",["wheat","barley","oats","grapes","olives"= -,"citrus","fruits","sheep","net importer of food - grain","vegetable = -oil","sugar"]). -bgfact("American Samoa","LandBounderies",[]). -bgfact("American Samoa","NaturalResources",["pumice","pumicite"]). -bgfact("American Samoa","Population",["55223"]). -bgfact("American Samoa","Capital",["Pago Pago"]). -bgfact("American Samoa","MemberOf",["ESCAP","IOC","SPC"]). -bgfact("American Samoa","ExportCommodities",["canned tuna"]). -bgfact("American Samoa","ExportPartners",["US"]). -bgfact("American Samoa","ImportCommodities",["materials for = -canneries","food","petroleum products","machinery and parts"]). -bgfact("American = -Samoa","ImportPartners",["US","Japan","NZ","Australia","Fiji"]). -bgfact("American Samoa","Industries",["tuna canneries","meat = -canning","handicrafts"]). -bgfact("American = -Samoa","Agriculture",["bananas","coconuts","vegetables","taro","breadfrui= -t","yams","copra","pineapples","papayas","dairy farming"]). -bgfact("Andorra","LandBounderies",["France","Spain"]). -bgfact("Andorra","NaturalResources",["hydropower","mineral = -water","timber","iron ore","lead"]). -bgfact("Andorra","Population",["63930"]). -bgfact("Andorra","Capital",["Andorra la Vella"]). -bgfact("Andorra","MemberOf",["ECE","INTERPOL","IOC","UN"]). -bgfact("Andorra","ExportCommodities",["electricity","tobacco = -products","furniture"]). -bgfact("Andorra","ExportPartners",["France","Spain"]). -bgfact("Andorra","ImportCommodities",["consumer goods","food"]). -bgfact("Andorra","ImportPartners",["France","Spain"]). -bgfact("Andorra","Industries",["tourism","sheep","timber","tobacco","bank= -ing"]). -bgfact("Andorra","Agriculture",["small quantities of = -tobacco","rye","wheat","barley","oats"]). -bgfact("Angola","LandBounderies",["Congo","Namibia","Zaire","Zambia"]). -bgfact("Angola","NaturalResources",["petroleum","diamonds","iron = -ore","phosphates","copper","feldspar","gold","bauxite","uranium"]). -bgfact("Angola","Population",["9803576"]). -bgfact("Angola","Capital",["Luanda"]). -bgfact("Angola","MemberOf",["ACP","AfDB","CCC","CEEAC","OAU","SADC","UN",= -"UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Angola","ExportCommodities",["oil","diamonds","refined petroleum = -products","gas","coffee","sisal","fish and fish = -products","timber","cotton"]). -bgfact("Angola","ExportPartners",["US","France","Germany","Netherlands","= -Brazil"]). -bgfact("Angola","ImportCommodities",["Capital = -equipment","food","vehicles and spare parts","textiles and = -clothing","substantial military deliveries"]). -bgfact("Angola","ImportPartners",["Portugal","Brazil","US","France","Spai= -n"]). -bgfact("Angola","Industries",["mining - diamonds","iron = -ore","phosphates","feldspar","bauxite","uranium","basic metal = -products"]). -bgfact("Angola","Agriculture",["bananas","sugar = -cane","coffee","sisal","corn","cotton","cane","manioc","food = -cassava","corn","vegetables","livestock production accounts = -for","fishing","disruptions caused by civil war"]). -bgfact("Anguilla","LandBounderies",[]). -bgfact("Anguilla","NaturalResources",["salt","fish","lobster"]). -bgfact("Anguilla","Population",["7052"]). -bgfact("Anguilla","Capital",["The Valley"]). -bgfact("Anguilla","MemberOf",["CARICOM"]). -bgfact("Anguilla","ExportCommodities",["lobster and salt"]). -bgfact("Anguilla","ExportPartners",["NA"]). -bgfact("Anguilla","ImportCommodities",["NA"]). -bgfact("Anguilla","ImportPartners",["NA"]). -bgfact("Anguilla","Industries",["tourism","boat building","salt"]). -bgfact("Anguilla","Agriculture",["pigeon peas","corn","sweet = -potatoes","sheep","goats","pigs","cattle","poultry","fishing"]). -bgfact("Antarctica","LandBounderies",["none","but see entry on = -International disputes"]). -bgfact("Antarctica","NaturalResources",["iron = -ore","chromium","copper","gold","nickel","uncommercial quantities"]). -bgfact("Antigua and Barbuda","LandBounderies",[]). -bgfact("Antigua and Barbuda","NaturalResources",["pleasant climate = -fosters tourism"]). -bgfact("Antigua and Barbuda","Population",["64762"]). -bgfact("Antigua and Barbuda","Capital",["Saint John's"]). -bgfact("Antigua and = -Barbuda","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-77","GATT= -","IBRD","ICAO","ICFTU","IFAD","IFC","ILO","IMF","IMO","INTELSAT","OAS","= -OECS","OPANAL","UN","UNCTAD","UNESCO","WCL","WHO","WMO"]). -bgfact("Antigua and Barbuda","ExportCommodities",["petroleum = -products","manubgfactures","food and live animals","machinery and = -transport equipment"]). -bgfact("Antigua and = -Barbuda","ExportPartners",["OECS","Barbados","Guyana","Trinidad and = -Tobago","US"]). -bgfact("Antigua and Barbuda","ImportCommodities",["food and live = -animals","machinery and transport = -equipment","manubgfactures","chemicals","oil"]). -bgfact("Antigua and = -Barbuda","ImportPartners",["US","UK","Canada","OECS"]). -bgfact("Antigua and = -Barbuda","Industries",["tourism","construction","light = -manubgfacturing"]). -bgfact("Antigua and Barbuda","Agriculture",["expanding output of = -cotton","fruits","vegetables","coconuts","cucumbers","mangoes","not = -self-sufficient in food"]). -bgfact("Arctic Ocean","NaturalResources",["sand and gravel = -aggregates","placer deposits","polymetallic nodules","oil and gas = -fields","fish","marine mammals"]). -bgfact("Argentina","LandBounderies",["Bolivia","Brazil","Chile","Paraguay= -","Uruguay"]). -bgfact("Argentina","NaturalResources",["fertile plains of the = -pampas","lead","zinc","tin","copper","iron = -ore","manganese","petroleum","uranium"]). -bgfact("Argentina","Population",["33912994"]). -bgfact("Argentina","Capital",["Buenos Aires"]). -bgfact("Argentina","MemberOf",["AG","Australia = -Group","BCIE","CCC","ECLAC","FAO","G-6","G-11","G-15","G-19","G-24","AfDB= -","G-77","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","I= -FC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO",= -"ITU","LAES","LAIA","LORCS","MERCOSUR","MINURSO","MTCR","OAS","PCA","RG",= -"UN","UNAVEM = -II","UNCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UNOMOZ","UNOSOM","UNPROFO= -R","UNTAC","UNTSO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Argentina","ExportCommodities",["meat","wheat","corn","oilseed","= -hides","wool"]). -bgfact("Argentina","ExportPartners",["US","Brazil","Italy","Japan","Nethe= -rlands"]). -bgfact("Argentina","ImportCommodities",["machinery and = -equipment","chemicals","metals","fuels and lubricants","agricultural = -products"]). -bgfact("Argentina","ImportPartners",["US","Brazil","Germany","Bolivia","J= -apan","Italy","Netherlands"]). -bgfact("Argentina","Industries",["food processing","motor = -vehicles","consumer durables","textiles","chemicals and = -petrochemicals","printing","metallurgy","steel"]). -bgfact("Argentina","Agriculture",["principal = -wheat","corn","sorghum","soybeans","sugar beets"]). -bgfact("Armenia","LandBounderies",["Azerbaijan","Georgia","Iran","Turkey"= -]). -bgfact("Armenia","NaturalResources",["small deposits of = -gold","copper","molybdenum","zinc","alumina"]). -bgfact("Armenia","Population",["3521517"]). -bgfact("Armenia","Capital",["Yerevan"]). -bgfact("Armenia","MemberOf",["BSEC","CCC","CIS","CSCE","EBRD","ECE","IAEA= -","IBRD","ICAO","IDA","IFAD","ILO","IMF","INTELSAT","INTERPOL","IOC","ITU= -","NACC","NAM","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]).= - -bgfact("Armenia","ExportCommodities",["machinery and transport = -equipment","light industrial products","processed food items","alcoholic = -products"]). -bgfact("Armenia","ExportPartners",["NA"]). -bgfact("Armenia","ImportCommodities",["grain","fuel"]). -bgfact("Armenia","ImportPartners",["Russia","US","EC"]). -bgfact("Armenia","Industries",["traditionally diverse","currently","much = -of industry is shut down"]). -bgfact("Armenia","Agriculture",["fruits and vegetable farming"]). -bgfact("Aruba","LandBounderies",[]). -bgfact("Aruba","NaturalResources",["white sandy beaches"]). -bgfact("Aruba","Population",["65545"]). -bgfact("Aruba","Capital",["Oranjestad"]). -bgfact("Aruba","ExportCommodities",["mostly petroleum products"]). -bgfact("Aruba","ExportPartners",["US","EC"]). -bgfact("Aruba","ImportCommodities",["food","consumer = -goods","manubgfactures","petroleum products"]). -bgfact("Aruba","ImportPartners",["US","EC"]). -bgfact("Aruba","Industries",["tourism","transshipment facilities","oil = -refining"]). -bgfact("Aruba","Agriculture",["poor quality soils and low rainfall limit = -agricultural activity to the cultivation of aloes","some livestock"]). -bgfact("Ashmore and Cartier Islands","LandBounderies",[]). -bgfact("Ashmore and Cartier Islands","NaturalResources",["fish"]). -bgfact("Ashmore and Cartier Islands","Capital",["none; administered from = -Canberra, Australia"]). -bgfact("Atlantic Ocean","NaturalResources",["oil and gas = -fields","fish","marine mammals","sand and gravel aggregates","placer = -deposits","polymetallic nodules","precious stones"]). -bgfact("Australia","LandBounderies",[]). -bgfact("Australia","NaturalResources",["bauxite","coal","iron = -ore","copper","tin","silver","uranium","nickel","tungsten","mineral = -sands","lead","zinc","diamonds","natural gas","petroleum"]). -bgfact("Australia","Population",["18077419"]). -bgfact("Australia","Capital",["Canberra"]). -bgfact("Australia","MemberOf",["AfDB","AG","NEA","NSG","OECD","PCA","SPAR= -TECA","SPC","SPF","UN","UNCTAD","UNESCO","UNFICYP","UNHCR","UNIDO","UNOSO= -M","UNPROFOR","UNTAC","UNTSO","UPU","WFTU","WHO","WIPO","WMO","ZC"]). -bgfact("Australia","ExportCommodities",["coal","gold","meat","wool","alum= -ina","wheat","machinery and transport equipment"]). -bgfact("Australia","ExportPartners",["Japan","US","South = -Korea","NZ","UK","Taiwan","Singapore","Hong Kong"]). -bgfact("Australia","ImportCommodities",["machinery and transport = -equipment","computers and office machines","crude and petroleum = -products"]). -bgfact("Australia","ImportPartners",["US","Japan","UK","Germany","NZ"]). -bgfact("Australia","Industries",["mining","industrial and transportation = -equipment","food processing","chemicals","steel"]). -bgfact("Australia","Agriculture",["world's largest exporter of beef and = -wool","second-largest for mutton","major = -wheat","barley","sugarcane","livestock - cattle","sheep","poultry"]). -bgfact("Austria","LandBounderies",["Czech = -Republic","Germany","Hungary","Italy","Liechtenstein","Slovakia","Sloveni= -a","Switzerland"]). -bgfact("Austria","NaturalResources",["iron = -ore","petroleum","timber","magnesite","aluminum","lead","coal","lignite",= -"copper","hydropower"]). -bgfact("Austria","Population",["7954974"]). -bgfact("Austria","Capital",["Vienna"]). -bgfact("Austria","MemberOf",["AfDB","AG","OECD","ONUSAL","PCA","UN","UNCT= -AD","UNESCO","UNDOF","UNFICYP","UNHCR","UNIDO","UNIKOM","UNOMIG","UNTAC",= -"UNTSO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Austria","ExportCommodities",["machinery and equipment","iron = -and steel","lumber","textiles","paper products","chemicals"]). -bgfact("Austria","ExportPartners",["EC"]). -bgfact("Austria","ImportCommodities",["petroleum","foodstuffs","machinery= - and equipment","vehicles","chemicals","textiles and = -clothing","pharmaceuticals"]). -bgfact("Austria","ImportPartners",["EC"]). -bgfact("Austria","Industries",["foods","iron","steel","machines","textile= -s","chemicals","electrical","paper and pulp","tourism","mining","motor = -vehicles"]). -bgfact("Austria","Agriculture",["grains","fruit","potatoes","sugar = -beets","sawn wood","cattle","pigs","-90% self-sufficient in food"]). -bgfact("Azerbaijan","LandBounderies",["Armenia","Russia","Turkey"]). -bgfact("Azerbaijan","NaturalResources",["petroleum","natural gas","iron = -ore","nonferrous metals","alumina"]). -bgfact("Azerbaijan","Population",["7684456"]). -bgfact("Azerbaijan","Capital",["Baku"]). -bgfact("Azerbaijan","MemberOf",["BSEC","CCC","CIS","CSCE","EBRD","ECE","E= -CO","ESCAP","IBRD","ICAO","IDB","ILO","IMF","INTELSAT","INTERPOL","IOC","= -ITU","NACC","OIC","UN","UNCTAD","UNESCO","UPU","WHO"]). -bgfact("Azerbaijan","ExportCommodities",["oil","gas","chemicals","oilfiel= -d equipment","textiles","cotton"]). -bgfact("Azerbaijan","ExportPartners",["mostly CIS and European = -countries"]). -bgfact("Azerbaijan","ImportCommodities",["machinery and parts","consumer = -durables","foodstuffs","textiles"]). -bgfact("Azerbaijan","ImportPartners",["European countries"]). -bgfact("Azerbaijan","Industries",["petroleum","natural gas","petroleum = -products","steel","iron ore","textiles"]). -bgfact("The Bahamas","LandBounderies",[]). -bgfact("The Bahamas","NaturalResources",["salt","aragonite","timber"]). -bgfact("The Bahamas","Population",["273055"]). -bgfact("The Bahamas","Capital",["Nassau"]). -bgfact("The = -Bahamas","MemberOf",["ACP","C","CCC","CARICOM","CDB","ECLAC","FAO","G-77"= -,"IADB","IBRD","ICAO","ICFTU","IFC","ILO","IMF","IMO","INTELSAT","INTERPO= -L","IOC","ITU","LORCS","NAM","OAS","OPANAL","UN","UNCTAD","UNESCO","UNIDO= -","UPU","WHO","WIPO","WMO"]). -bgfact("The = -Bahamas","ExportCommodities",["pharmaceuticals","cement","rum","crawfish"= -]). -bgfact("The = -Bahamas","ExportPartners",["US","UK","Norway","France","Italy"]). -bgfact("The Bahamas","ImportCommodities",["foodstuffs","manubgfactured = -goods","mineral fuels","crude"]). -bgfact("The = -Bahamas","ImportPartners",["US","Japan","Nigeria","Denmark","Norway"]). -bgfact("The Bahamas","Industries",["tourism","banking","cement","oil = -refining and transshipment","salt = -production","rum","aragonite","pharmaceuticals","spiral welded steel = -pipe"]). -bgfact("The Bahamas","Agriculture",["citrus","vegetables","large net = -importer of food"]). -bgfact("Bahrain","LandBounderies",[]). -bgfact("Bahrain","NaturalResources",["oil","associated and nonassociated = -natural gas","fish"]). -bgfact("Bahrain","Population",["585683"]). -bgfact("Bahrain","Capital",["Manama"]). -bgfact("Bahrain","MemberOf",["ABEDA","AFESD","AL","AMF","ESCWA","FAO","G-= -77","GATT","GCC","IBRD","ICAO","IDB","ILO","IMF","IMO","INMARSAT","INTELS= -AT","ITU","LORCS","NAM","OAPEC","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU= -","WFTU","WHO","WMO"]). -bgfact("Bahrain","ExportCommodities",["petroleum and petroleum = -products","aluminum"]). -bgfact("Bahrain","ExportPartners",["Japan","UAE","India","Pakistan","Sing= -apore"]). -bgfact("Bahrain","ImportCommodities",["nonoil","crude"]). -bgfact("Bahrain","ImportPartners",["Saudi = -Arabia","US","UK","Japan","Germany"]). -bgfact("Bahrain","Industries",["petroleum processing and = -refining","aluminum smelting","offshore banking","ship repairing"]). -bgfact("Bahrain","Agriculture",["including fishing","heavily subsidized = -sector produces fruit","vegetables","poultry","dairy = -products","shrimp","fish"]). -bgfact("Baker Island","LandBounderies",[]). -bgfact("Baker Island","Population",["1942"]). -bgfact("Baker Island","Capital",["none; administered from Washington, = -DC"]). -bgfact("Bangladesh","LandBounderies",["Burma","India"]). -bgfact("Bangladesh","NaturalResources",["natural gas","arable = -land","timber"]). -bgfact("Bangladesh","Population",["125149469"]). -bgfact("Bangladesh","Capital",["Dhaka"]). -bgfact("Bangladesh","MemberOf",["AsDB","C","CCC","CP","ESCAP","FAO","G-77= -","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","IFC","ILO","IMF= -","IMO","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","MINURSO","= -NAM","OIC","SAARC","UN","UNCTAD","UNESCO","UNIDO","UNIKOM","UNOMIG","UNOM= -OZ","UNOMUR","UNOSOM","UNPROFOR","UNTAC","UPU","WCL","WHO","WFTU","WIPO",= -"WMO","WTO"]). -bgfact("Bangladesh","ExportCommodities",["garments","jute and jute = -goods","leather","shrimp"]). -bgfact("Bangladesh","ExportPartners",["US","Western Europe"]). -bgfact("Bangladesh","ImportCommodities",["Capital = -goods","petroleum","food","textiles"]). -bgfact("Bangladesh","ImportPartners",["Hong = -Kong","Singapore","China","Japan"]). -bgfact("Bangladesh","Industries",["jute manubgfacturing","cotton = -textiles","food processing","steel","fertilizer"]). -bgfact("Bangladesh","Agriculture",["accounts for of GDP","of = -employment","commercial = -jute","rice","wheat","tea","sugarcane","potatoes","beef","milk","shortage= -s include wheat","vegetable oils","cotton"]). -bgfact("Barbados","LandBounderies",[]). -bgfact("Barbados","NaturalResources",["petroleum","fishing","natural = -gas"]). -bgfact("Barbados","Population",["255827"]). -bgfact("Barbados","Capital",["Bridgetown"]). -bgfact("Barbados","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-= -77","GATT","IADB","IBRD","ICAO","ICFTU","IFAD","IFC","ILO","IMF","IMO","I= -NTELSAT","INTERPOL","IOC","ISO","ITU","LAES","LORCS","NAM","OAS","OPANAL"= -,"UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). -bgfact("Barbados","ExportCommodities",["sugar and = -molasses","rum","chemicals","electrical components","clothing"]). -bgfact("Barbados","ExportPartners",["US","UK","Trinidad and = -Tobago","Windward Islands"]). -bgfact("Barbados","ImportCommodities",["machinery","foodstuffs","construc= -tion materials","chemicals","fuel","electrical components"]). -bgfact("Barbados","ImportPartners",["US","UK","Trinidad and = -Tobago","Japan"]). -bgfact("Barbados","Industries",["tourism","sugar","light = -manubgfacturing","component assembly for export","petroleum"]). -bgfact("Barbados","Agriculture",["not self-sufficient in food"]). -bgfact("Bassas da India","LandBounderies",[]). -bgfact("Bassas da India","NaturalResources",["none"]). -bgfact("Bassas da India","Capital",["none; administered by France from = -Reunion"]). -bgfact("Belarus","LandBounderies",["Latvia","Lithuania","Poland","Russia"= -,"Ukraine"]). -bgfact("Belarus","NaturalResources",["forest land","peat deposits"]). -bgfact("Belarus","Population",["10404862"]). -bgfact("Belarus","Capital",["Minsk"]). -bgfact("Belarus","MemberOf",["CBSS","IOC","ITU","NACC","PCA","UN","UNCTAD= -","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). -bgfact("Belarus","ExportCommodities",["machinery and transport = -equipment","chemicals","foodstuffs"]). -bgfact("Belarus","ExportPartners",["Russia","Ukraine","Poland","Bulgaria"= -]). -bgfact("Belarus","ImportCommodities",["fuel","industrial raw = -materials","textiles","sugar"]). -bgfact("Belarus","ImportPartners",["Russia","Ukraine","Poland"]). -bgfact("Belarus","Industries",[]). -bgfact("Belarus","Agriculture",["net exporter of = -meat","milk","eggs","flour","potatoes"]). -bgfact("Belgium","LandBounderies",["France","Germany","Luxembourg","Nethe= -rlands"]). -bgfact("Belgium","NaturalResources",["coal","natural gas"]). -bgfact("Belgium","Population",["10062836"]). -bgfact("Belgium","Capital",["Brussels"]). -bgfact("Belgium","MemberOf",["AG","OECD","PCA","UN","UNCTAD","UNESCO","UN= -HCR","UNIDO","UNMOGIP","UNOSOM","UNPROFOR","UNRWA","UNTAC","UNTSO","UPU",= -"WCL","WEU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Belgium","ExportCommodities",["iron and steel","transportation = -equipment","tractors","diamonds","petroleum products"]). -bgfact("Belgium","ExportPartners",["EC","US","former Communist = -countries"]). -bgfact("Belgium","ImportCommodities",["fuels","grains","chemicals","foods= -tuffs"]). -bgfact("Belgium","ImportPartners",["EC","US","oil-exporting less = -developed countries","former Communist countries"]). -bgfact("Belgium","Industries",["engineering and metal products","motor = -vehicle assembly","processed food and beverages","chemicals","basic = -metals","textiles","glass","petroleum","coal"]). -bgfact("Belgium","Agriculture",["emphasis on livestock production - = -beef","veal","pork","major crops are sugar beets","fresh = -vegetables","fruits","grain","net importer of farm products"]). -bgfact("Belize","LandBounderies",["Guatemala","Mexico"]). -bgfact("Belize","NaturalResources",["arable land = -potential","timber","fish"]). -bgfact("Belize","Population",["208949"]). -bgfact("Belize","Capital",["Belmopan"]). -bgfact("Belize","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-77= -","GATT","IADB","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO= -","INTELSAT","ITU","LAES","LORCS","NAM","OAS","UN","UNCTAD","UNESCO","UNI= -DO","UPU","WCL","WHO","WMO"]). -bgfact("Belize","ExportCommodities",["sugar","citrus","clothing","fish = -products","bananas","molasses","wood"]). -bgfact("Belize","ExportPartners",["US","UK"]). -bgfact("Belize","ImportCommodities",["machinery and transportation = -equipment","food","manubgfactured = -goods","fuels","chemicals","pharmaceuticals"]). -bgfact("Belize","ImportPartners",["US","UK","Mexico"]). -bgfact("Belize","Industries",["garment production","citrus = -concentrates","sugar refining","rum","beverages","tourism"]). -bgfact("Belize","Agriculture",["commercial crops include sugar = -cane","bananas","coca","net importer of basic foods"]). -bgfact("Benin","LandBounderies",["Burkina","Niger","Nigeria","Togo"]). -bgfact("Benin","NaturalResources",["small offshore oil = -deposits","limestone","marble","timber"]). -bgfact("Benin","Population",["5341710"]). -bgfact("Benin","Capital",["Porto-Novo"]). -bgfact("Benin","MemberOf",["ACCT","ACP","AfDB","CEAO","ECA","ECOWAS","Ent= -ente","FAO","FZ","G-77","GATT","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","= -IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","O= -AU","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WFTU","WHO",= -"WIPO","WMO","WTO"]). -bgfact("Benin","ExportCommodities",["crude","cotton","palm = -products","cocoa"]). -bgfact("Benin","ExportPartners",["FRG","France","Spain","Italy","UK"]). -bgfact("Benin","ImportCommodities",["foodstuffs","beverages","tobacco","p= -etroleum products","intermediate goods","Capital goods","light = -consumer goods"]). -bgfact("Benin","ImportPartners",["France","Thailand","Netherlands","US"])= -. -bgfact("Benin","Industries",["textiles","cigarettes","construction = -materials","beverages","food production","petroleum"]). -bgfact("Benin","Agriculture",["production is dominated by food = -corn","sorghum","cassava","beans","crops include cotton","palm = -oil","poultry and livestock output has not kept up with consumption"]). -bgfact("Bermuda","LandBounderies",[]). -bgfact("Bermuda","NaturalResources",["limestone","pleasant climate = -fostering tourism"]). -bgfact("Bermuda","Population",["61158"]). -bgfact("Bermuda","Capital",["Hamilton"]). -bgfact("Bermuda","MemberOf",["CARICOM","IOC"]). -bgfact("Bermuda","ExportCommodities",["semitropical produce","light = -manubgfactures","re-exports of pharmaceuticals"]). -bgfact("Bermuda","ExportPartners",["US","UK","Canada"]). -bgfact("Bermuda","ImportCommodities",["fuel","foodstuffs","machinery"]). -bgfact("Bermuda","ImportPartners",["US","UK","Venezuela","Canada","Japan"= -]). -bgfact("Bermuda","Industries",["tourism","finance","structural concrete = -products","paints","pharmaceuticals","ship repairing"]). -bgfact("Bermuda","Agriculture",["produces bananas","vegetables","citrus = -fruits","flowers","dairy products"]). -bgfact("Bhutan","LandBounderies",["China","India"]). -bgfact("Bhutan","NaturalResources",["timber","hydropower","gypsum","calci= -um carbide"]). -bgfact("Bhutan","Population",["716380"]). -bgfact("Bhutan","Capital",["Thimphu"]). -bgfact("Bhutan","MemberOf",["AsDB","CP","ESCAP","FAO","G-77","IBRD","ICAO= -","IDA","IFAD","IMF","INTELSAT","IOC","ITU","NAM","SAARC","UN","UNCTAD","= -UNESCO","UNIDO","UPU","WHO"]). -bgfact("Bhutan","ExportCommodities",["cardamon","gypsum","timber","handic= -rafts","cement","fruit","electricity","precious stones","spices"]). -bgfact("Bhutan","ExportPartners",["India","Bangladesh","Singapore"]). -bgfact("Bhutan","ImportCommodities",["fuel and = -lubricants","grain","machinery and parts","vehicles","fabrics"]). -bgfact("Bhutan","ImportPartners",["India","Japan","Germany","US","UK"]). -bgfact("Bhutan","Industries",["cement","wood products","processed = -fruits","alcoholic beverages","calcium carbide"]). -bgfact("Bhutan","Agriculture",["corn","root crops","citrus fruit","dairy = -products","eggs"]). -bgfact("Bolivia","LandBounderies",["Argentina","Brazil","Chile","Paraguay= -","Peru"]). -bgfact("Bolivia","NaturalResources",["tin","natural = -gas","petroleum","zinc","tungsten","antimony","silver","iron = -ore","lead","gold","timber"]). -bgfact("Bolivia","Population",["7719445"]). -bgfact("Bolivia","Capital",["La Paz"]). -bgfact("Bolivia","MemberOf",["AG","ECLAC","FAO","GATT","G-11","G-77","IAD= -B","IAEA","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","= -INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","NAM","OAS","OPANAL","P= -CA","RG","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","= -WMO","WTO"]). -bgfact("Bolivia","ExportCommodities",["metals","natural gas"]). -bgfact("Bolivia","ExportPartners",["US","Argentina"]). -bgfact("Bolivia","ImportCommodities",["food","petroleum","consumer = -goods","Capital goods"]). -bgfact("Bolivia","ImportPartners",["US"]). -bgfact("Bolivia","Industries",["mining","smelting","petroleum","food and = -beverage","tobacco","handicrafts","illicit drug industry reportedly = -produces of its revenues"]). -bgfact("Bolivia","Agriculture",["principal commodities - = -coffee","coca","cotton","corn","sugarcane","rice","potatoes","self-suffic= -ient in food"]). -bgfact("Bosnia and Herzegovina","LandBounderies",["Croatia","Serbia and = -Montenegro"]). -bgfact("Bosnia and = -Herzegovina","NaturalResources",["coal","iron","bauxite","manganese","tim= -ber","wood products","copper","chromium","lead","zinc"]). -bgfact("Bosnia and Herzegovina","Population",["4651485"]). -bgfact("Bosnia and Herzegovina","Capital",["Sarajevo"]). -bgfact("Bosnia and = -Herzegovina","MemberOf",["CEI","CSCE","ECE","ICAO","ILO","IMO","INTELSAT"= -,"UN","UNCTAD","UNESCO","UNIDO","UPU","WHO"]). -bgfact("Bosnia and Herzegovina","ExportCommodities",["NA"]). -bgfact("Bosnia and Herzegovina","ExportPartners",["NA"]). -bgfact("Bosnia and Herzegovina","ImportCommodities",["NA"]). -bgfact("Bosnia and Herzegovina","ImportPartners",["NA"]). -bgfact("Bosnia and Herzegovina","Industries",["steel = -production","mining"]). -bgfact("Bosnia and Herzegovina","Agriculture",["the foothills of = -northern Bosnia support orchards","vineyards","livestock","farms are = -mostly privately held","small"]). -bgfact("Botswana","LandBounderies",["Namibia","South = -Africa","Zimbabwe"]). -bgfact("Botswana","NaturalResources",["diamonds","copper","nickel","salt"= -,"soda ash","potash","coal","iron ore","silver"]). -bgfact("Botswana","Population",["1359352"]). -bgfact("Botswana","Capital",["Gaborone"]). -bgfact("Botswana","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","FLS","G= --77","GATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","INTELSA= -T","INTERPOL","IOC","ITU","LORCS","NAM","OAU","SACU","SADC","UN","UNCTAD"= -,"UNESCO","UNIDO","UNOMOZ","UNOMUR","UNOSOM","UPU","WCL","WHO","WMO"]). -bgfact("Botswana","ExportCommodities",["diamonds","copper and = -nickel","meat"]). -bgfact("Botswana","ExportPartners",["Switzerland","UK","SACU"]). -bgfact("Botswana","ImportCommodities",["foodstuffs","vehicles and = -transport equipment","textiles","petroleum products"]). -bgfact("Botswana","ImportPartners",["Switzerland","SACU","UK","US"]). -bgfact("Botswana","Industries",["mining of = -diamonds","copper","nickel","coal","salt","soda ash","livestock = -processing"]). -bgfact("Botswana","Agriculture",["must import up to of of food = -needs"]). -bgfact("Bouvet Island","LandBounderies",[]). -bgfact("Bouvet Island","NaturalResources",["none"]). -bgfact("Bouvet Island","Capital",["none; administered from Oslo, = -Norway"]). -bgfact("Brazil","LandBounderies",["Argentina","Bolivia","Colombia","Frenc= -h Guiana","Guyana","Paraguay","Peru","Suriname","Uruguay","Venezuela"]). -bgfact("Brazil","NaturalResources",["iron = -ore","manganese","bauxite","nickel","uranium","phosphates","tin","hydropo= -wer","gold","platinum","petroleum","timber"]). -bgfact("Brazil","Population",["158739257"]). -bgfact("Brazil","Capital",["Brasilia"]). -bgfact("Brazil","MemberOf",["AfDB","AG","OAS","ONUSAL","OPANAL","PCA","RG= -","UN","UNAVEM = -II","UNCTAD","UNESCO","UNHCR","UNIDO","UNOMOZ","UNOMUR","UNPROFOR","UPU",= -"WCL","WHO","WFTU","WIPO","WMO","WTO"]). -bgfact("Brazil","ExportCommodities",["iron ore","soybean bran","orange = -juice","footwear","coffee","motor vehicle parts"]). -bgfact("Brazil","ExportPartners",["EC","Latin America","US","Japan"]). -bgfact("Brazil","ImportCommodities",["crude","Capital goods","chemical = -products","foodstuffs","coal"]). -bgfact("Brazil","ImportPartners",["US","EC","Middle East","Latin = -America","Japan"]). -bgfact("Brazil","Industries",["shoes","chemicals","cement","lumber","iron= - ore","steel","motor vehicles and auto parts","metalworking","Capital = -goods","tin"]). -bgfact("Brazil","Agriculture",["corn","sugarcane","cocoa","self-sufficien= -t in food","except for wheat"]). -bgfact("British Indian Ocean Territory","LandBounderies",[]). -bgfact("British Indian Ocean = -Territory","NaturalResources",["coconuts","fish"]). -bgfact("British Indian Ocean Territory","Capital",["none"]). -bgfact("British Virgin Islands","LandBounderies",[]). -bgfact("British Virgin Islands","NaturalResources",["negligible"]). -bgfact("British Virgin Islands","Population",["12864"]). -bgfact("British Virgin Islands","Capital",["Road Town"]). -bgfact("British Virgin Islands","MemberOf",["CARICOM"]). -bgfact("British Virgin Islands","ExportCommodities",["rum","fresh = -fish","gravel","sand","fruits","animals"]). -bgfact("British Virgin Islands","ExportPartners",["Virgin = -Islands","Puerto Rico","US"]). -bgfact("British Virgin Islands","ImportCommodities",["building = -materials","automobiles","foodstuffs","machinery"]). -bgfact("British Virgin Islands","ImportPartners",["Virgin = -Islands","Puerto Rico","US"]). -bgfact("British Virgin Islands","Industries",["tourism","light = -industry","construction","rum","concrete block","offshore financial = -center"]). -bgfact("British Virgin = -Islands","Agriculture",["livestock","fish","fruit","vegetables"]). -bgfact("Brunei","LandBounderies",["Malysia"]). -bgfact("Brunei","NaturalResources",["petroleum","natural = -gas","timber"]). -bgfact("Brunei","Population",["284653"]). -bgfact("Brunei","Capital",["Bandar Seri Begawan"]). -bgfact("Brunei","MemberOf",["APEC","ASEAN","C","ESCAP","FAO","G-77","GATT= -","ICAO","IDB","IMO","INTELSAT","ITU","NAM","OIC","UN","UNCTAD","UPU","UN= -TAC","WHO","WMO"]). -bgfact("Brunei","ExportCommodities",["crude","liquefied natural = -gas","petroleum products"]). -bgfact("Brunei","ExportPartners",["Japan","UK","South = -Korea","Thailand","Singapore"]). -bgfact("Brunei","ImportCommodities",["machinery and transport = -equipment","manubgfactured goods","food","chemicals"]). -bgfact("Brunei","ImportPartners",["Singapore","UK","Switzerland","US","Ja= -pan"]). -bgfact("Brunei","Industries",["petroleum","petroleum = -refining","liquefied natural gas","construction"]). -bgfact("Brunei","Agriculture",["principal crops and livestock include = -rice","cassava","bananas","buffaloes"]). -bgfact("Bulgaria","LandBounderies",["Greece","The Former Yugoslav = -Republic of Macedonia","Romania","Serbia and Montenegro","Turkey"]). -bgfact("Bulgaria","NaturalResources",["bauxite","copper","lead","zinc","c= -oal","timber","arable land"]). -bgfact("Bulgaria","Population",["8799986"]). -bgfact("Bulgaria","Capital",["Sofia"]). -bgfact("Bulgaria","MemberOf",["ACCT","NSG","PCA","UN","UNCTAD","UNESCO","= -UNIDO","UNTAC","UPU","WFTU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Bulgaria","ExportCommodities",["fuels","minerals","raw = -materials"]). -bgfact("Bulgaria","ExportPartners",["former CEMA countries"]). -bgfact("Bulgaria","ImportCommodities",["fuels","minerals"]). -bgfact("Bulgaria","ImportPartners",["former CEMA countries"]). -bgfact("Bulgaria","Industries",["machine building and metal = -working","food processing","chemicals","textiles","building = -materials","ferrous and nonferrous metals"]). -bgfact("Bulgaria","Agriculture",["climate and soil conditions support = -livestock raising and the growing of various grain = -crops","oilseeds","vegetables","fruits","surplus food producer"]). -bgfact("Burkina","LandBounderies",["Benin","Ghana","Cote = -d'Ivoire","Mali","Niger","Togo"]). -bgfact("Burkina","NaturalResources",["manganese","limestone","small = -deposits of = -gold","antimony","copper","nickel","bauxite","lead","phosphates","zinc","= -silver"]). -bgfact("Burkina","Population",["10134661"]). -bgfact("Burkina","Capital",["Ouagadougou"]). -bgfact("Burkina","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOW= -AS","Entente","FAO","FZ","G-77","GATT","IBRD","ICAO","ICC","ICFTU","IDA",= -"IDB","IFAD","IFC","ILO","IMF","INTELSAT","INTERPOL","IOC","ITU","LORCS",= -"NAM","OAU","OIC","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL"= -,"WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Burkina","ExportCommodities",["cotton","gold","animal = -products"]). -bgfact("Burkina","ExportPartners",["EC","Cote d'Ivoire","Taiwan"]). -bgfact("Burkina","ImportCommodities",["machinery","food = -products","petroleum"]). -bgfact("Burkina","ImportPartners",["EC","Africa","Japan"]). -bgfact("Burkina","Industries",["cotton lint","beverages","agricultural = -processing","soap","cigarettes","textiles","gold mining and = -extraction"]). -bgfact("Burkina","Agriculture",["peanuts","shea nuts","sesame","food = -sorghum","millet","corn","not self-sufficient in food grains"]). -bgfact("Burma","LandBounderies",["Bangladesh","China","India","Laos","Tha= -iland"]). -bgfact("Burma","NaturalResources",["petroleum","timber","tin","antimony",= -"zinc","copper","tungsten","lead","coal","some = -marble","limestone","precious stones","natural gas"]). -bgfact("Burma","Population",["44277014"]). -bgfact("Burma","Capital",["Rangoon"]). -bgfact("Burma","MemberOf",["AsDB","CCC","CP","ESCAP","FAO","G-77","GATT",= -"IAEA","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INT= -ERPOL","IOC","ITU","LORCS","NAM","UN","UNCTAD","UNESCO","UNIDO","UPU","WH= -O","WMO"]). -bgfact("Burma","ExportCommodities",["pulses and = -beans","teak","rice","hardwood"]). -bgfact("Burma","ExportPartners",["Singapore","China","Thailand","India","= -Hong Kong"]). -bgfact("Burma","ImportCommodities",["machinery","transport = -equipment","chemicals","food products"]). -bgfact("Burma","ImportPartners",["Japan","China","Thailand","Singapore","= -Malaysia"]). -bgfact("Burma","Industries",["mining of = -copper","tin","tungsten","fertilizer"]). -bgfact("Burma","Agriculture",["principal paddy = -rice","corn","oilseed","sugarcane","rice and timber account for of = -export revenues"]). -bgfact("Burundi","LandBounderies",["Rwanda","Tanzania","Zaire"]). -bgfact("Burundi","NaturalResources",["nickel","uranium","rare earth = -oxide","peat","cobalt","copper","platinum","vanadium"]). -bgfact("Burundi","Population",["6124747"]). -bgfact("Burundi","Capital",["Bujumbura"]). -bgfact("Burundi","MemberOf",["ACCT","ACP","AfDB","CCC","CEEAC","CEPGL","E= -CA","FAO","G-77","GATT","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","INT= -ELSAT","INTERPOL","ITU","LORCS","NAM","OAU","UN","UNCTAD","UNESCO","UNIDO= -","UPU","WHO","WIPO","WMO","WTO"]). -bgfact("Burundi","ExportCommodities",["coffee","tea","cotton","hides"]). -bgfact("Burundi","ExportPartners",["EC","US","Asia"]). -bgfact("Burundi","ImportCommodities",["Capital goods","petroleum = -products","foodstuffs","consumer goods"]). -bgfact("Burundi","ImportPartners",["EC","Asia","US"]). -bgfact("Burundi","Industries",["light consumer goods such as = -blankets","shoes","food processing"]). -bgfact("Burundi","Agriculture",["coffee","cotton","food = -corn","sorghum","sweet potatoes","bananas","livestock - = -meat","milk","hides and skins"]). -bgfact("Cambodia","LandBounderies",["Laos","Thailand","Vietnam"]). -bgfact("Cambodia","NaturalResources",["timber","gemstones","some iron = -ore","manganese","phosphates","hydropower potential"]). -bgfact("Cambodia","Population",["10264628"]). -bgfact("Cambodia","Capital",["Phnom Penh"]). -bgfact("Cambodia","MemberOf",["ACCT","INTERPOL","ITU","LORCS","NAM","PCA"= -,"UN","UNCTAD","UNESCO","UPU","WFTU","WHO","WMO","WTO"]). -bgfact("Cambodia","ExportCommodities",["natural = -rubber","rice","pepper","raw timber"]). -bgfact("Cambodia","ExportPartners",["Thailand","Japan","India","Singapore= -","Malaysia","China","Vietnam"]). -bgfact("Cambodia","ImportCommodities",["fuels","consumer = -goods","machinery"]). -bgfact("Cambodia","ImportPartners",["Japan","India","Singapore","Malaysia= -","Thailand","China","Vietnam"]). -bgfact("Cambodia","Industries",["rice milling","fishing","wood and wood = -products","rubber","cement","gem mining"]). -bgfact("Cambodia","Agriculture",["main rice","rubber","food shortages - = -rice","meat","vegetables","dairy products","sugar","flour"]). -bgfact("Cameroon","LandBounderies",["Central African = -Republic","Chad","Congo","Equatorial Guinea","Gabon","Nigeria"]). -bgfact("Cameroon","NaturalResources",["petroleum","bauxite","iron = -ore","timber","hydropower potential"]). -bgfact("Cameroon","Population",["13132191"]). -bgfact("Cameroon","Capital",["Yaounde"]). -bgfact("Cameroon","MemberOf",["ACCT","ACP","AfDB","BDEAC","CCC","CEEAC","= -ECA","FAO","FZ","G-19","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","= -IDA","IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL= -","IOC","ITU","LORCS","NAM","OAU","OIC","PCA","UDEAC","UN","UNCTAD","UNES= -CO","UNIDO","UNTAC","UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Cameroon","ExportCommodities",["petroleum = -products","coffee","beans","cocoa","aluminum products","timber"]). -bgfact("Cameroon","ExportPartners",["EC about","US","African = -countries"]). -bgfact("Cameroon","ImportCommodities",["machines and electrical = -equipment","food","consumer goods","transport equipment"]). -bgfact("Cameroon","ImportPartners",["EC about","African = -countries","Japan","US"]). -bgfact("Cameroon","Industries",["petroleum production and = -refining","food processing","light consumer = -goods","textiles","sawmills"]). -bgfact("Cameroon","Agriculture",["the Agriculture and forestry sectors = -provide employment for the majority of the Population","commercial and = -food crops include = -coffee","cocoa","timber","cotton","rubber","bananas","oilseed","grains","= -livestock","root starches"]). -bgfact("Canada","LandBounderies",["US"]). -bgfact("Canada","NaturalResources",["nickel","zinc","copper","gold","lead= -","molybdenum","potash","silver","fish","timber","wildlife","coal","petro= -leum","natural gas"]). -bgfact("Canada","Population",["28113997"]). -bgfact("Canada","Capital",["Ottawa"]). -bgfact("Canada","MemberOf",["ACCT","AfDB","AG","NATO","NEA","NSG","OAS","= -OECD","ONUSAL","PCA","UN","UNAVEM = -II","UNCTAD","UNDOF","UNESCO","UNFICYP","UNHCR","UNIDO","UNIKOM","UNOMOZ"= -,"UNOMUR","UNPROFOR","UNTAC","UNTSO","UPU","WCL","WHO","WMO","WIPO","WTO"= -,"ZC"]). -bgfact("Canada","ExportCommodities",["newsprint","wood = -pulp","timber","crude petroleum","machinery","natural = -gas","aluminum","telecommunications equipment"]). -bgfact("Canada","ExportPartners",["US","Japan","UK","Germany","South = -Korea","Netherlands","China"]). -bgfact("Canada","ImportCommodities",["crude","chemicals","motor vehicles = -and parts","durable consumer goods","telecommunications equipment and = -parts"]). -bgfact("Canada","ImportPartners",["US","Japan","UK","Germany","France","M= -exico","Taiwan","South Korea"]). -bgfact("Canada","Industries",["processed and unprocessed minerals","food = -products","wood and paper products","transportation = -equipment","chemicals","fish products","petroleum and natural gas"]). -bgfact("Canada","Agriculture",["commercial fisheries provide annual = -catch of million metric tons","of which is exported"]). -bgfact("Cape Verde","LandBounderies",[]). -bgfact("Cape Verde","NaturalResources",["salt","basalt = -rock","pozzolana","limestone","kaolin","fish"]). -bgfact("Cape Verde","Population",["423120"]). -bgfact("Cape Verde","Capital",["Praia"]). -bgfact("Cape = -Verde","MemberOf",["ACP","AfDB","CCC","ECA","ECOWAS","FAO","G-77","IBRD",= -"ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL"= -,"IOM","UNCTAD","UNESCO","UNIDO","UNOMOZ","UPU","WCL","WHO","WMO"]). -bgfact("Cape Verde","ExportCommodities",["fish","bananas","hides and = -skins"]). -bgfact("Cape = -Verde","ExportPartners",["Portugal","Algeria","Angola","Netherlands"]). -bgfact("Cape Verde","ImportCommodities",["foodstuffs","consumer = -goods","industrial products","transport equipment"]). -bgfact("Cape = -Verde","ImportPartners",["Sweden","Spain","Germany","Portugal","France","= -Netherlands","US"]). -bgfact("Cape Verde","Industries",["fish processing","salt = -mining","clothing bgfactories","ship repair","construction = -materials","food and beverage production"]). -bgfact("Cape Verde","Agriculture",["beans","sweet potatoes","fish catch = -provides for both domestic consumption and small exports"]). -bgfact("Cayman Islands","LandBounderies",[]). -bgfact("Cayman Islands","NaturalResources",["fish","climate and beaches = -that foster tourism"]). -bgfact("Cayman Islands","Population",["31790"]). -bgfact("Cayman Islands","Capital",["George Town"]). -bgfact("Cayman Islands","MemberOf",["CARICOM","IOC"]). -bgfact("Cayman Islands","ExportCommodities",["turtle = -products","manubgfactured consumer goods"]). -bgfact("Cayman Islands","ExportPartners",["mostly US"]). -bgfact("Cayman = -Islands","ImportCommodities",["foodstuffs","manubgfactured goods"]). -bgfact("Cayman Islands","ImportPartners",["US","Trinidad and = -Tobago","UK","Netherlands Antilles","Japan"]). -bgfact("Cayman Islands","Industries",["tourism","banking","insurance and = -finance","construction","building materials","furniture making"]). -bgfact("Cayman Islands","Agriculture",["minor production of = -vegetables","fruit","turtle farming"]). -bgfact("Central African = -Republic","LandBounderies",["Cameroon","Chad","Congo","Sudan","Zaire"]). -bgfact("Central African = -Republic","NaturalResources",["diamonds","uranium","timber","gold","oil"]= -). -bgfact("Central African Republic","Population",["3142182"]). -bgfact("Central African Republic","Capital",["Bangui"]). -bgfact("Central African = -Republic","MemberOf",["ACCT","ACP","AfDB","BDEAC","CCC","CEEAC","ECA","FA= -O","FZ","G-77","GATT","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","INTEL= -SAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","UDEAC","UN","UNCTAD","UN= -ESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO"]). -bgfact("Central African = -Republic","ExportCommodities",["diamonds","cotton","coffee","timber","tob= -acco"]). -bgfact("Central African = -Republic","ExportPartners",["France","Belgium","Italy","Japan","US"]). -bgfact("Central African = -Republic","ImportCommodities",["food","textiles","petroleum = -products","machinery","electrical equipment","motor = -vehicles","chemicals","pharmaceuticals","consumer goods","industrial = -products"]). -bgfact("Central African = -Republic","ImportPartners",["France","Japan","Algeria"]). -bgfact("Central African Republic","Industries",["diamond = -mining","sawmills","breweries","textiles","footwear","assembly of = -bicycles and motorcycles"]). -bgfact("Central African Republic","Agriculture",["commercial = -cotton","coffee","tobacco","food crops - = -manioc","yams","millet","corn","bananas"]). -bgfact("Chad","LandBounderies",["Cameroon","Central African = -Republic","Libya","Niger","Nigeria","Sudan"]). -bgfact("Chad","NaturalResources",["petroleum"]). -bgfact("Chad","Population",["5466771"]). -bgfact("Chad","Capital",["N'Djamena"]). -bgfact("Chad","MemberOf",["ACCT","ACP","AfDB","BDEAC","CEEAC","ECA","FAO"= -,"FZ","G-77","GATT","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","ILO","IMF",= -"INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","UDEAC","UN",= -"UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Chad","ExportCommodities",["cotton","cattle","textiles","fish"]).= - -bgfact("Chad","ExportPartners",["France","Nigeria","Cameroon"]). -bgfact("Chad","ImportCommodities",["machinery and transportation = -equipment","industrial goods","petroleum products","note - excludes = -military equipment"]). -bgfact("Chad","ImportPartners",["US","France","Nigeria","Cameroon"]). -bgfact("Chad","Industries",["cotton textile = -mills","slaughterhouses","brewery","natron","soap","cigarettes"]). -bgfact("Chad","Agriculture",["food crops include = -sorghum","millet","peanuts","rice","potatoes","livestock - = -cattle","sheep","goats","self-sufficient in food in years of adequate = -rainfall"]). -bgfact("Chile","LandBounderies",["Argentina","Bolivia","Peru"]). -bgfact("Chile","NaturalResources",["copper","timber","iron = -ore","nitrates","precious metals","molybdenum"]). -bgfact("Chile","Population",["13950557"]). -bgfact("Chile","Capital",["Santiago"]). -bgfact("Chile","MemberOf",["CCC","ECLAC","FAO","G-11","G-77","GATT","IADB= -","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INMA= -RSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LAES","LAIA","LORCS"= -,"NAM","OAS","ONUSAL","OPANAL","PCA","RG","UN","UNCTAD","UNESCO","UNIDO",= -"UNMOGIP","UNTAC","UNTSO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Chile","ExportCommodities",["copper","wood products","fish and = -fishmeal","fruits"]). -bgfact("Chile","ExportPartners",["EC","Japan","US","Argentina","Brazil"])= -. -bgfact("Chile","ImportCommodities",["Capital goods","spare parts","raw = -materials","petroleum","foodstuffs"]). -bgfact("Chile","ImportPartners",["EC","US","Brazil","Japan"]). -bgfact("Chile","Industries",["copper","foodstuffs","fish = -processing","iron and steel","wood and wood products","transport = -equipment","cement","textiles"]). -bgfact("Chile","Agriculture",["major exporter of fruit","fish","major = -wheat","corn","grapes","beans","sugar beets","potatoes","livestock = -beef","poultry","net agricultural importer"]). -bgfact("China","LandBounderies",["Afghanistan","Bhutan","Burma","Hong = -Kong","India","Kazakhstan","North = -Korea","Kyrgyzstan","Laos","Macau","Mongolia","Nepal","Pakistan","Russia"= -,"Tajikistan","Vietnam"]). -bgfact("China","NaturalResources",["coal","iron = -ore","petroleum","mercury","tin","tungsten","antimony","manganese","molyb= -denum","vanadium","magnetite","aluminum","lead","zinc","uranium","hydropo= -wer potential"]). -bgfact("China","Population",["1190431106"]). -bgfact("China","Capital",["Beijing"]). -bgfact("China","MemberOf",["AfDB","APEC","AsDB","CCC","ESCAP","FAO","IAEA= -","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INMARSAT","= -INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","MINURSO","NAM","PCA","UN"= -,"UNCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UN Security = -Council","UNTAC","UNTSO","UN Trusteeship = -Council","UPU","WHO","WIPO","WMO","WTO"]). -bgfact("China","ExportCommodities",["textiles","garments","footwear","toy= -s","crude"]). -bgfact("China","ExportPartners",["Hong = -Kong","US","Japan","Germany","South Korea","Russia"]). -bgfact("China","ImportCommodities",["rolled steel","motor = -vehicles","textile machinery","oil products"]). -bgfact("China","ImportPartners",["Japan","Taiwan","US","Hong = -Kong","Germany","South Korea"]). -bgfact("China","Industries",["iron and steel","coal","machine = -building","armaments","textiles","petroleum","cement","chemical = -fertilizers","consumer durables","food processing"]). -bgfact("China","Agriculture",["among the world's largest producers of = -rice","potatoes","sorghum","peanuts","tea","millet","barley","commercial = - crops include cotton","fish catch of million metric tons"]). -bgfact("Christmas Island","LandBounderies",[]). -bgfact("Christmas Island","NaturalResources",["phosphate"]). -bgfact("Christmas Island","Population",["973"]). -bgfact("Christmas Island","Capital",["The Settlement"]). -bgfact("Christmas Island","MemberOf",["none"]). -bgfact("Christmas Island","ExportCommodities",["phosphate"]). -bgfact("Christmas Island","ExportPartners",["Australia","NZ"]). -bgfact("Christmas Island","ImportCommodities",["consumer goods"]). -bgfact("Christmas Island","ImportPartners",["principally Australia"]). -bgfact("Christmas Island","Industries",["phosphate extraction"]). -bgfact("Christmas Island","Agriculture",["NA"]). -bgfact("Clipperton Island","LandBounderies",[]). -bgfact("Clipperton Island","NaturalResources",["none"]). -bgfact("Clipperton Island","Capital",["none; administered by France from = -French Polynesia"]). -bgfact("Cocos (Keeling) Islands","LandBounderies",[]). -bgfact("Cocos (Keeling) Islands","NaturalResources",["fish"]). -bgfact("Cocos (Keeling) Islands","Population",["598"]). -bgfact("Cocos (Keeling) Islands","Capital",["West Island"]). -bgfact("Cocos (Keeling) Islands","MemberOf",["none"]). -bgfact("Cocos (Keeling) Islands","ExportCommodities",["copra"]). -bgfact("Cocos (Keeling) Islands","ExportPartners",["Australia"]). -bgfact("Cocos (Keeling) Islands","ImportCommodities",["foodstuffs"]). -bgfact("Cocos (Keeling) Islands","ImportPartners",["Australia"]). -bgfact("Cocos (Keeling) Islands","Industries",["copra products"]). -bgfact("Cocos (Keeling) Islands","Agriculture",["gardens provide = -vegetables","bananas","pawpaws","coconuts"]). -bgfact("Colombia","LandBounderies",["Brazil","Ecuador","Panama","Peru","V= -enezuela"]). -bgfact("Colombia","NaturalResources",["petroleum","natural = -gas","coal","iron ore","nickel","gold","copper","emeralds"]). -bgfact("Colombia","Population",["35577556"]). -bgfact("Colombia","Capital",["Bogota"]). -bgfact("Colombia","MemberOf",["AG","CDB","CG","ECLAC","FAO","G-3","G-11",= -"G-24","G-77","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFA= -D","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","= -ISO","ITU","LAES","LAIA","LORCS","NAM","OAS","ONUSAL","OPANAL","PCA","RG"= -,"UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNPROFOR","UNTAC","UPU","WCL","W= -FTU","WHO","WIPO","WMO","WTO"]). -bgfact("Colombia","ExportCommodities",["petroleum","coffee","coal","banan= -as","fresh cut flowers"]). -bgfact("Colombia","ExportPartners",["US","EC","Japan","Venezuela"]). -bgfact("Colombia","ImportCommodities",["industrial = -equipment","transportation equipment","consumer = -goods","chemicals","paper products"]). -bgfact("Colombia","ImportPartners",["US","EC","Brazil","Venezuela","Japan= -"]). -bgfact("Colombia","Industries",["textiles","food = -processing","oil","clothing and footwear","beverages","chemicals","metal = -products","mining - = -gold","coal","emeralds","iron","nickel","silver","salt"]). -bgfact("Colombia","Agriculture",["climate and soils permit a wide = -variety of crops","such as = -coffee","rice","tobacco","corn","sugarcane","cocoa = -beans","oilseeds","forest products and shrimp farming are becoming more = -important"]). -bgfact("Comoros","LandBounderies",[]). -bgfact("Comoros","NaturalResources",["negligible"]). -bgfact("Comoros","Population",["530136"]). -bgfact("Comoros","Capital",["Moroni"]). -bgfact("Comoros","MemberOf",["ACCT","ACP","AfDB","ECA","FAO","FZ","G-77",= -"IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","INTELSAT","ITU","NAM"= -,"OAU","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WMO"]). -bgfact("Comoros","ExportCommodities",["vanilla","cloves","perfume = -oil","copra","ylang-ylang"]). -bgfact("Comoros","ExportPartners",["US","France","Africa","FRG"]). -bgfact("Comoros","ImportCommodities",["cement","petroleum = -products","consumer goods"]). -bgfact("Comoros","ImportPartners",["Europe"]). -bgfact("Comoros","Industries",["perfume = -distillation","textiles","furniture","jewelry","construction = -materials","soft drinks"]). -bgfact("Comoros","Agriculture",["plantations produce crops for export - = -vanilla","cloves","perfume essences","principal food = -coconuts","bananas","large net food importer"]). -bgfact("Congo","LandBounderies",["Angola","Cameroon","Central African = -Republic","Gabon","Zaire"]). -bgfact("Congo","NaturalResources",["petroleum","timber","potash","lead","= -zinc","uranium","copper","phosphates","natural gas"]). -bgfact("Congo","Population",["2446902"]). -bgfact("Congo","Capital",["Brazzaville"]). -bgfact("Congo","MemberOf",["ACCT","ACP","AfDB","BDEAC","CCC","CEEAC","ECA= -","FAO","FZ","G-77","GATT","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","= -IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","UDEAC","UN","= -UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Congo","ExportCommodities",["crude","lumber","plywood","coffee","= -cocoa","sugar","diamonds"]). -bgfact("Congo","ExportPartners",["US","France"]). -bgfact("Congo","ImportCommodities",["foodstuffs","consumer = -goods","intermediate manubgfactures","Capital equipment"]). -bgfact("Congo","ImportPartners",["France","Germany","Italy","Spain","US",= -"Japan","Brazil"]). -bgfact("Congo","Industries",["petroleum","cement","lumbering","brewing","= -sugar milling","palm oil","soap","cigarette"]). -bgfact("Congo","Agriculture",["corn","peanuts","imports over of food = -needs"]). -bgfact("Cook Islands","LandBounderies",[]). -bgfact("Cook Islands","NaturalResources",["negligible"]). -bgfact("Cook Islands","Population",["19124"]). -bgfact("Cook Islands","Capital",["Avarua"]). -bgfact("Cook = -Islands","MemberOf",["AsDB","ESCAP","IOC","SPARTECA","SPC","SPF","UNESCO"= -,"WHO"]). -bgfact("Cook Islands","ExportCommodities",["copra","fresh and canned = -fruit","clothing"]). -bgfact("Cook Islands","ExportPartners",["NZ","Japan"]). -bgfact("Cook = -Islands","ImportCommodities",["foodstuffs","textiles","fuels","timber"]).= - -bgfact("Cook Islands","ImportPartners",["NZ","Japan","Australia","US"]). -bgfact("Cook Islands","Industries",["fruit processing","tourism"]). -bgfact("Cook Islands","Agriculture",["accounts for of GDP","export = -copra","citrus fruits","pineapples","tomatoes","subsistence = -yams","taro"]). -bgfact("Coral Sea Islands","LandBounderies",[]). -bgfact("Coral Sea Islands","NaturalResources",["negligible"]). -bgfact("Coral Sea Islands","Population",["3"]). -bgfact("Coral Sea Islands","Capital",["none; administered from Canberra, = -Australia"]). -bgfact("Costa Rica","LandBounderies",["Nicaragua","Panama"]). -bgfact("Costa Rica","NaturalResources",["hydropower potential"]). -bgfact("Costa Rica","Population",["3342154"]). -bgfact("Costa Rica","Capital",["San Jose"]). -bgfact("Costa = -Rica","MemberOf",["AG","OAS","OPANAL","UN","UNCTAD","UNESCO","UNIDO","UPU= -","WCL","WFTU","WHO","WIPO","WMO"]). -bgfact("Costa = -Rica","ExportCommodities",["coffee","bananas","textiles","sugar"]). -bgfact("Costa = -Rica","ExportPartners",["US","Germany","Italy","Guatemala","El = -Salvador","Netherlands","UK","France"]). -bgfact("Costa Rica","ImportCommodities",["raw materials","consumer = -goods","Capital equipment","petroleum"]). -bgfact("Costa = -Rica","ImportPartners",["US","Japan","Mexico","Guatemala","Venezuela","Ge= -rmany"]). -bgfact("Costa Rica","Industries",["food processing","textiles and = -clothing","construction materials","fertilizer","plastic products"]). -bgfact("Costa Rica","Agriculture",["commodities - = -coffee","beef","bananas","rice","beans","depletion of forest resources = -resulting in lower timber output"]). -bgfact("Cote = -d'Ivoire","LandBounderies",["Burkina","Ghana","Guinea","Liberia","Mali"])= -. -bgfact("Cote = -d'Ivoire","NaturalResources",["petroleum","diamonds","manganese","iron = -ore","cobalt","bauxite","copper"]). -bgfact("Cote d'Ivoire","Population",["14295501"]). -bgfact("Cote d'Ivoire","Capital",["Yamoussoukro"]). -bgfact("Cote = -d'Ivoire","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWAS","En= -tente","FAO","FZ","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","IDA","= -IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","= -NAM","OAU","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WHO","WIPO"= -,"WMO","WTO"]). -bgfact("Cote d'Ivoire","ExportCommodities",["cocoa","coffee","tropical = -woods","petroleum","cotton","bananas","pineapples","palm = -oil","cotton"]). -bgfact("Cote = -d'Ivoire","ExportPartners",["France","FRG","Netherlands","US","Belgium","= -Spain"]). -bgfact("Cote d'Ivoire","ImportCommodities",["food","Capital = -goods","consumer goods","fuel"]). -bgfact("Cote = -d'Ivoire","ImportPartners",["France","Nigeria","US","Japan"]). -bgfact("Cote d'Ivoire","Industries",["foodstuffs","wood processing","oil = -refinery","automobile assembly","textiles","fertilizer","beverage"]). -bgfact("Cote d'Ivoire","Agriculture",["most important sector","crops = -include coffee","cocoa beans","timber","bananas","palm kernels","food = -corn","rice","manioc","not self-sufficient in bread grain and dairy = -products"]). -bgfact("Croatia","LandBounderies",["Bosnia and = -Herzegovina","Hungary","Serbia and Montenegro","Slovenia"]). -bgfact("Croatia","NaturalResources",["oil","some = -coal","bauxite","low-grade iron ore","calcium","natural = -asphalt","silica","mica","clays","salt"]). -bgfact("Croatia","Population",["4697614"]). -bgfact("Croatia","Capital",["Zagreb"]). -bgfact("Croatia","MemberOf",["CE","UN","UNCTAD","UNESCO","UNIDO","UPU","W= -HO","WIPO","WMO"]). -bgfact("Croatia","ExportCommodities",["machinery and transport = -equipment","chemicals","food and live animals","raw materials","fuels = -and lubricants"]). -bgfact("Croatia","ExportPartners",["EC countries","Slovenia"]). -bgfact("Croatia","ImportCommodities",["machinery and transport = -equipment","fuels and lubricants","food and live = -animals","chemicals","manubgfactured goods","miscellaneous = -manubgfactured articles","raw materials","beverages and tobacco"]). -bgfact("Croatia","ImportPartners",["EC countries","Slovenia","FSU = -countries"]). -bgfact("Croatia","Industries",["chemicals and plastics","machine = -tools","fabricated metal","electronics","pig iron and rolled steel = -products","aluminum reduction","paper","wood = -products","textiles","shipbuilding","petroleum and petroleum = -refining","food processing and beverages"]). -bgfact("Croatia","Agriculture",["wheat","corn","sugar = -beets","sunflowers","alfalfa","central Croatian highlands are less = -fertile but support cereal production","orchards","vineyards","livestock = - breeding","coastal areas and offshore islands grow olives","citrus = -fruits"]). -bgfact("Cuba","LandBounderies",["US Naval Base at Guantanamo Bay"]). -bgfact("Cuba","NaturalResources",["cobalt","nickel","iron = -ore","copper","manganese","salt","timber","silica","petroleum"]). -bgfact("Cuba","Population",["11064344"]). -bgfact("Cuba","Capital",["Havana"]). -bgfact("Cuba","MemberOf",["CCC","ECLAC","FAO","G-77","GATT","IAEA","ICAO"= -,"IFAD","ILO","IMO","INMARSAT","INTELSAT","PCA","UN","UNCTAD","UNESCO","U= -NIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Cuba","ExportCommodities",["sugar","nickel","shellfish","tobacco"= -,"medical products","citrus","coffee"]). -bgfact("Cuba","ExportPartners",["Russia","Canada","China","Ukraine","Japa= -n","Spain"]). -bgfact("Cuba","ImportCommodities",["petroleum","food","machinery","chemic= -als"]). -bgfact("Cuba","ImportPartners",["Venezuela","China","Spain","Mexico","Ita= -ly","Canada","France"]). -bgfact("Cuba","Industries",["sugar milling and refining","petroleum = -refining","food and tobacco processing","textiles","chemicals","paper = -and wood products","metals","cement","fertilizers","consumer = -goods","agricultural machinery"]). -bgfact("Cuba","Agriculture",["sector hurt by growing shortages of fuels = -and parts"]). -bgfact("Cyprus","LandBounderies",[]). -bgfact("Cyprus","NaturalResources",["copper","pyrites","asbestos","gypsum= -","timber","salt","marble","clay earth pigment"]). -bgfact("Cyprus","Population",["730084"]). -bgfact("Cyprus","Capital",["Nicosia"]). -bgfact("Cyprus","MemberOf",["C","CCC","CE","CSCE","EBRD","ECE","FAO","G-7= -7","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","IFC","ILO","IM= -F","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","NAM","= -OAS","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO"= -,"WTO"]). -bgfact("Cyprus","ExportCommodities",["citrus","potatoes","grapes","wine",= -"cement","clothing and shoes"]). -bgfact("Cyprus","ExportPartners",["UK","Greece","Lebanon","Egypt"]). -bgfact("Cyprus","ImportCommodities",["consumer goods","petroleum and = -lubricants","food and feed grains","machinery"]). -bgfact("Cyprus","ImportPartners",["UK","Japan","Italy","Germany","US"]). -bgfact("Cyprus","Industries",["food","beverages","textiles","chemicals","= -metal products","tourism","wood products"]). -bgfact("Cyprus","Agriculture",["major = -potatoes","vegetables","barley","grapes","olives","vegetables and fruit = -provide of export revenues"]). -bgfact("Czech = -Republic","LandBounderies",["Austria","Germany","Poland","Slovakia"]). -bgfact("Czech Republic","NaturalResources",["hard coal","soft = -coal","kaolin","clay","graphite"]). -bgfact("Czech Republic","Population",["10408280"]). -bgfact("Czech Republic","Capital",["Prague"]). -bgfact("Czech Republic","MemberOf",["BIS","CCC","CE","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNOMIG","UNOMOZ","UNPROFOR","UPU","WFTU","= -WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Czech Republic","ExportCommodities",["manubgfactured = -goods","machinery and transport = -equipment","chemicals","fuels","minerals"]). -bgfact("Czech = -Republic","ExportPartners",["Germany","Slovakia","Poland","Austria","Hung= -ary","Italy","France","US","UK","CIS republics"]). -bgfact("Czech Republic","ImportCommodities",["machinery and transport = -equipment","fuels and lubricants","manbgfactured goods","raw = -materials","chemicals","agricultural products"]). -bgfact("Czech Republic","ImportPartners",["Slovakia","CIS = -republics","Germany","Austria","Poland","Switzerland","Hungary","UK","Ita= -ly"]). -bgfact("Czech Republic","Industries",["fuels","ferrous = -metallurgy","machinery and equipment","coal","motor = -vehicles","glass","armaments"]). -bgfact("Czech Republic","Agriculture",["diversified crop and livestock = -production","including grains","potatoes","sugar = -beets","hops","fruit","hogs","cattle","exporter of forest products"]). -bgfact("Denmark","LandBounderies",["Germany"]). -bgfact("Denmark","NaturalResources",["petroleum","natural = -gas","fish","salt","limestone"]). -bgfact("Denmark","Population",["5187821"]). -bgfact("Denmark","Capital",["Copenhagen"]). -bgfact("Denmark","MemberOf",["AfDB","AG","AsDB","Australia = -Group","BIS","CBSS","CCC","CE","CERN","COCOM","CSCE","EBRD","EC","ECE","E= -IB","ESA","FAO","G-9","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","I= -DA","IEA","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL"= -,"IOC","IOM","ISO","ITU","LORCS","MTCR","NACC","NATO","NC","NEA","NIB","N= -SG","OECD","PCA","UN","UNCTAD","UNESCO","UNFICYP","UNHCR","UNIDO","UNIKOM= -","UNOMIG","UNMOGIP","UNPROFOR","UNTSO","UPU","WEU","WFTU","WHO","WIPO","= -WMO","ZC"]). -bgfact("Denmark","ExportCommodities",["meat and meat products","dairy = -products","transport equipment","fish","chemicals","industrial = -machinery"]). -bgfact("Denmark","ExportPartners",["EC"]). -bgfact("Denmark","ImportCommodities",["petroleum","machinery and = -equipment","chemicals","grain and foodstuffs","textiles","paper"]). -bgfact("Denmark","ImportPartners",["EC"]). -bgfact("Denmark","Industries",["food processing","machinery and = -equipment","textiles and clothing","chemical = -products","electronics","construction","furniture","shipbuilding"]). -bgfact("Denmark","Agriculture",["principal = -meat","dairy","grain","potatoes","rape","sugar beets","self-sufficient = -in food production"]). -bgfact("Djibouti","LandBounderies",["Eritrea","Ethiopia","Somalia"]). -bgfact("Djibouti","NaturalResources",[]). -bgfact("Djibouti","Population",["412599"]). -bgfact("Djibouti","Capital",["Djibouti"]). -bgfact("Djibouti","MemberOf",["ACCT","ACP","AfDB","AFESD","AL","ECA","FAO= -","G-77","IBRD","ICAO","IDA","IDB","IFAD","IFC","IGADD","ILO","IMF","IMO"= -,"INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","UN","UNESCO= -","UNCTAD","UNIDO","UPU","WHO","WMO"]). -bgfact("Djibouti","ExportCommodities",["hides and skins","coffee"]). -bgfact("Djibouti","ExportPartners",["Africa","Middle East","Western = -Europe"]). -bgfact("Djibouti","ImportCommodities",["foods","beverages","transport = -equipment","chemicals","petroleum products"]). -bgfact("Djibouti","ImportPartners",["Western Europe","Asia","Africa"]). -bgfact("Djibouti","Industries",["limited to a few small-scale = -enterprises","such as dairy products and mineral-water bottling"]). -bgfact("Djibouti","Agriculture",["half of Population pastoral nomads = -herding goats","sheep","imports bulk of food needs"]). -bgfact("Dominica","LandBounderies",[]). -bgfact("Dominica","NaturalResources",["timber"]). -bgfact("Dominica","Population",["87696"]). -bgfact("Dominica","Capital",["Roseau"]). -bgfact("Dominica","MemberOf",["ACCT","ACP","C","CARICOM","CDB","ECLAC","F= -AO","G-77","GATT","IBRD","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","IN= -TERPOL","LORCS","NAM","OAS","OECS","UN","UNCTAD","UNESCO","UNIDO","UPU","= -WCL","WHO","WMO"]). -bgfact("Dominica","ExportCommodities",["bananas","soap","bay = -oil","vegetables","grapefruit","oranges"]). -bgfact("Dominica","ExportPartners",["UK","CARICOM = -countries","Italy","US"]). -bgfact("Dominica","ImportCommodities",["manubgfactured goods","machinery = -and equipment","food","chemicals"]). -bgfact("Dominica","ImportPartners",["US","CARICOM","UK","Canada"]). -bgfact("Dominica","Industries",["soap","coconut = -oil","tourism","copra","furniture","cement blocks","shoes"]). -bgfact("Dominica","Agriculture",["principal = -bananas","citrus","mangoes","root crops","forestry and fisheries = -potential not exploited"]). -bgfact("Dominican Republic","LandBounderies",["Haiti"]). -bgfact("Dominican = -Republic","NaturalResources",["nickel","bauxite","gold","silver"]). -bgfact("Dominican Republic","Population",["7826075"]). -bgfact("Dominican Republic","Capital",["Santo Domingo"]). -bgfact("Dominican = -Republic","MemberOf",["ACP","CARICOM","OAS","OPANAL","PCA","UN","UNCTAD",= -"UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WMO","WTO"]). -bgfact("Dominican = -Republic","ExportCommodities",["ferronickel","sugar","gold","coffee","coc= -oa"]). -bgfact("Dominican Republic","ExportPartners",["US","EC","Puerto Rico"]). -bgfact("Dominican = -Republic","ImportCommodities",["foodstuffs","petroleum","cotton and = -fabrics","chemicals and pharmaceuticals"]). -bgfact("Dominican Republic","ImportPartners",["US"]). -bgfact("Dominican Republic","Industries",["tourism","sugar = -processing","ferronickel and gold = -mining","textiles","cement","tobacco"]). -bgfact("Dominican Republic","Agriculture",["sugarcane is the most = -important commercial crop","followed by coffee","cotton","cocoa","food = -rice","beans","potatoes","corn","animal output - cattle","hogs","dairy = -products","meat","not self-sufficient in food"]). -bgfact("Ecuador","LandBounderies",["Colombia","Peru"]). -bgfact("Ecuador","NaturalResources",["petroleum","fish","timber"]). -bgfact("Ecuador","Population",["10677067"]). -bgfact("Ecuador","Capital",["Quito"]). -bgfact("Ecuador","MemberOf",["AG","ECLAC","FAO","G-11","G-77","IADB","IAE= -A","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTE= -LSAT","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","NAM","OAS","ONU= -SAL","OPANAL","PCA","RG","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU= -","WHO","WIPO","WMO","WTO"]). -bgfact("Ecuador","ExportCommodities",["petroleum","bananas","shrimp","coc= -oa","coffee"]). -bgfact("Ecuador","ExportPartners",["US","Latin America","Caribbean","EC = -countries"]). -bgfact("Ecuador","ImportCommodities",["transport = -equipment","vehicles","machinery","chemicals"]). -bgfact("Ecuador","ImportPartners",["US","Latin America","Caribbean","EC = -countries","Japan"]). -bgfact("Ecuador","Industries",["petroleum","food = -processing","textiles","metal works","paper products","wood = -products","chemicals","plastics","fishing","timber"]). -bgfact("Ecuador","Agriculture",["cocoa","fish","crop production - = -rice","potatoes","manioc","plantains","livestock sector - = -cattle","sheep","hogs","beef","pork","net importer of foodgrains","dairy = -products"]). -bgfact("Egypt","LandBounderies",["Gaza = -Strip","Israel","Libya","Sudan"]). -bgfact("Egypt","NaturalResources",["petroleum","natural gas","iron = -ore","phosphates","manganese","limestone","gypsum","talc","asbestos","lea= -d","zinc"]). -bgfact("Egypt","Population",["60765028"]). -bgfact("Egypt","Capital",["Cairo"]). -bgfact("Egypt","MemberOf",["ABEDA","ACC","ACCT","OAU","OIC","PCA","UN","U= -NAVEM = -II","UNCTAD","UNESCO","UNIDO","UNOMOZ","UNOSOM","UNPROFOR","UNTAC","UPU",= -"UNRWA","WHO","WIPO","WMO","WTO"]). -bgfact("Egypt","ExportCommodities",["crude and petroleum = -products","cotton yarn","raw cotton","textiles","metal = -products","chemicals"]). -bgfact("Egypt","ExportPartners",["EC","Eastern Europe","US","Japan"]). -bgfact("Egypt","ImportCommodities",["machinery and = -equipment","foods","fertilizers","wood products","durable consumer = -goods","Capital goods"]). -bgfact("Egypt","ImportPartners",["EC","US","Japan","Eastern Europe"]). -bgfact("Egypt","Industries",["textiles","food = -processing","tourism","chemicals","petroleum","construction","cement","me= -tals"]). -bgfact("Egypt","Agriculture",["corn","wheat","beans","fruit","livestock = -- cattle","water buffalo","sheep","annual fish catch about"]). -bgfact("El Salvador","LandBounderies",["Guatemala","Honduras"]). -bgfact("El Salvador","NaturalResources",["hydropower","petroleum"]). -bgfact("El Salvador","Population",["5752511"]). -bgfact("El Salvador","Capital",["San Salvador"]). -bgfact("El = -Salvador","MemberOf",["BCIE","CACM","ECLAC","FAO","G-77","GATT","IADB","I= -AEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT= -","IOC","IOM","ITU","LAES","LAIA","OAS","OPANAL","PCA","UN","UNCTAD","UNE= -SCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO"]). -bgfact("El = -Salvador","ExportCommodities",["coffee","sugarcane","shrimp"]). -bgfact("El Salvador","ExportPartners",["US","Guatemala","Costa = -Rica","Germany"]). -bgfact("El Salvador","ImportCommodities",["raw materials","consumer = -goods","Capital goods"]). -bgfact("El = -Salvador","ImportPartners",["US","Guatemala","Mexico","Venezuela","German= -y"]). -bgfact("El Salvador","Industries",["food = -processing","beverages","petroleum","nonmetallic = -products","tobacco","chemicals","textiles","furniture"]). -bgfact("El = -Salvador","Agriculture",["corn","rice","beans","oilseeds","beef","dairy = -products","not self-sufficient in food"]). -bgfact("Equatorial Guinea","LandBounderies",["Cameroon","Gabon"]). -bgfact("Equatorial = -Guinea","NaturalResources",["timber","petroleum","small unexploited = -deposits of gold","manganese","uranium"]). -bgfact("Equatorial Guinea","Population",["409550"]). -bgfact("Equatorial Guinea","Capital",["Malabo"]). -bgfact("Equatorial = -Guinea","MemberOf",["ACCT","ACP","AfDB","BDEAC","CEEAC","ECA","FAO","FZ",= -"G-77","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","OAU= -","UDEAC","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO"]). -bgfact("Equatorial Guinea","ExportCommodities",["coffee","timber","cocoa = -beans"]). -bgfact("Equatorial = -Guinea","ExportPartners",["Spain","Nigeria","Cameroon"]). -bgfact("Equatorial = -Guinea","ImportCommodities",["petroleum","food","beverages","clothing","m= -achinery"]). -bgfact("Equatorial = -Guinea","ImportPartners",["Cameroon","Spain","France","US"]). -bgfact("Equatorial Guinea","Industries",["fishing","sawmilling"]). -bgfact("Equatorial Guinea","Agriculture",["accounts for almost of = -GDP","timber and coffee from Rio Muni","food = -rice","yams","cassava","bananas","oil palm nuts","manioc","livestock"]). -bgfact("Eritrea","LandBounderies",["Djibouti","Ethiopia","Sudan"]). -bgfact("Eritrea","NaturalResources",["gold","potash","zinc","copper","sal= -t","probably oil","fish"]). -bgfact("Eritrea","Population",["3782543"]). -bgfact("Eritrea","Capital",["Asmara"]). -bgfact("Eritrea","MemberOf",["OAU","ACP","AfDB","ECA","ILO","IMO","INTELS= -AT","ITU","UN","UNCTAD","UNESCO","UPU","WMO"]). -bgfact("Eritrea","ExportCommodities",["NA"]). -bgfact("Eritrea","ExportPartners",["NA"]). -bgfact("Eritrea","ImportCommodities",["NA"]). -bgfact("Eritrea","ImportPartners",["NA"]). -bgfact("Eritrea","Industries",["food processing","beverages","clothing = -and textiles"]). -bgfact("Eritrea","Agriculture",["sorghum","livestock"]). -bgfact("Estonia","LandBounderies",["Latvia","Russia"]). -bgfact("Estonia","NaturalResources",["shale = -oil","peat","phosphorite","amber"]). -bgfact("Estonia","Population",["1616882"]). -bgfact("Estonia","Capital",["Tallinn"]). -bgfact("Estonia","MemberOf",["BIS","CBSS","CCC","CE","CSCE","EBRD","ECE",= -"FAO","IAEA","IBRD","ICAO","ICFTU","IFC","ILO","IMF","IMO","INTERPOL","IO= -C","ISO","ITU","NACC","UN","UNCTAD","UNESCO","UPU","WHO","WMO"]). -bgfact("Estonia","ExportCommodities",["textile","food = -products","vehicles","metals"]). -bgfact("Estonia","ExportPartners",["Russia","Finland","Latvia","Germany",= -"Ukraine"]). -bgfact("Estonia","ImportCommodities",["machinery","fuels","vehicles","tex= -tiles"]). -bgfact("Estonia","ImportPartners",["Finland","Russia","Sweden","Germany",= -"Netherlands"]). -bgfact("Estonia","Industries",["oil = -shale","shipbuilding","phosphates","electric = -motors","excavators","cement","furniture","clothing","textiles","paper","= -shoes","apparel"]). -bgfact("Estonia","Agriculture",["net exports of meat","fish","dairy = -products","fruits and vegetables"]). -bgfact("Ethiopia","LandBounderies",["Djibouti","Eritrea","Kenya","Somalia= -","Sudan"]). -bgfact("Ethiopia","NaturalResources",["small reserves of = -gold","platinum","copper","potash"]). -bgfact("Ethiopia","Population",["54927108"]). -bgfact("Ethiopia","Capital",["Addis Ababa"]). -bgfact("Ethiopia","MemberOf",["ACP","AfDB","CCC","ECA","FAO","G-24","G-77= -","IAEA","IBRD","ICAO","IDA","IFAD","IFC","IGADD","ILO","IMF","IMO","INTE= -LSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","OAU","UN","UNCTAD","UNE= -SCO","UNHCR","UNIDO","UPU","WFTU","WHO","WMO","WTO"]). -bgfact("Ethiopia","ExportCommodities",["coffee","leather = -products","gold","petroleum products"]). -bgfact("Ethiopia","ExportPartners",["Germany","Japan","Saudi = -Arabia","France","Italy"]). -bgfact("Ethiopia","ImportCommodities",["Capital goods","consumer = -goods","fuel"]). -bgfact("Ethiopia","ImportPartners",["US","Germany","Italy","Saudi = -Arabia","Japan"]). -bgfact("Ethiopia","Industries",["food = -processing","beverages","textiles","chemicals","metals = -processing","cement"]). -bgfact("Ethiopia","Agriculture",["principal crops and livestock - = -cereals","pulses","coffee","oilseeds","sugarcane","hides and = -skins","cattle","sheep","goats"]). -bgfact("Europa Island","LandBounderies",[]). -bgfact("Europa Island","NaturalResources",["negligible"]). -bgfact("Europa Island","Capital",["none; administered by France from = -Reunion"]). -bgfact("Falkland Islands (Islas Malvinas)","LandBounderies",[]). -bgfact("Falkland Islands (Islas = -Malvinas)","NaturalResources",["fish","wildlife"]). -bgfact("Falkland Islands (Islas Malvinas)","Population",["2261"]). -bgfact("Falkland Islands (Islas Malvinas)","Capital",["Stanley"]). -bgfact("Falkland Islands (Islas Malvinas)","MemberOf",["ICFTU"]). -bgfact("Falkland Islands (Islas = -Malvinas)","ExportCommodities",["wool","hides and skins"]). -bgfact("Falkland Islands (Islas = -Malvinas)","ExportPartners",["UK","Netherlands","Japan"]). -bgfact("Falkland Islands (Islas = -Malvinas)","ImportCommodities",["food","clothing","fuels"]). -bgfact("Falkland Islands (Islas = -Malvinas)","ImportPartners",["UK","Netherlands Antilles"]). -bgfact("Falkland Islands (Islas Malvinas)","Industries",["wool and fish = -processing"]). -bgfact("Falkland Islands (Islas Malvinas)","Agriculture",["some fodder = -and vegetable crops"]). -bgfact("Faroe Islands","LandBounderies",[]). -bgfact("Faroe Islands","NaturalResources",["fish"]). -bgfact("Faroe Islands","Population",["48427"]). -bgfact("Faroe Islands","Capital",["Torshavn"]). -bgfact("Faroe Islands","MemberOf",["none"]). -bgfact("Faroe Islands","ExportCommodities",["fish and fish = -products","animal feedstuffs","transport equipment"]). -bgfact("Faroe = -Islands","ExportPartners",["Denmark","Germany","UK","France","Spain","US"= -]). -bgfact("Faroe Islands","ImportCommodities",["machinery and transport = -equipment","manubgfactures","food and livestock","fuels","chemicals"]). -bgfact("Faroe = -Islands","ImportPartners",["Denmark","Norway","Sweden","Germany","US"]). -bgfact("Faroe = -Islands","Industries",["fishing","shipbuilding","handicrafts"]). -bgfact("Faroe Islands","Agriculture",["annual fish catch about"]). -bgfact("Fiji","LandBounderies",[]). -bgfact("Fiji","NaturalResources",["timber","fish","gold","copper","offsho= -re oil potential"]). -bgfact("Fiji","Population",["764382"]). -bgfact("Fiji","Capital",["Suva"]). -bgfact("Fiji","MemberOf",["ACP","AsDB","CP","ESCAP","FAO","G-77","GATT","= -IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INT= -ERPOL","IOC","ITU","LORCS","PCA","SPARTECA","SPC","SPF","UN","UNCTAD","UN= -ESCO","UNIDO","UNIFIL","UNIKOM","UNOMUR","UNTAC","UPU","WHO","WIPO","WMO"= -]). -bgfact("Fiji","ExportCommodities",["sugar","clothing","processed = -fish","gold","lumber"]). -bgfact("Fiji","ExportPartners",["EC","Australia","Pacific = -Islands","Japan"]). -bgfact("Fiji","ImportCommodities",["machinery and transport = -equipment","petroleum products","food","consumer goods","chemicals"]). -bgfact("Fiji","ImportPartners",["Australia","NZ","Japan","EC","US"]). -bgfact("Fiji","Industries",["sugar","tourism","copra","gold","silver","cl= -othing","lumber","small cottage Industries"]). -bgfact("Fiji","Agriculture",["coconuts","cassava","rice","sweet = -potatoes","small livestock sector includes = -cattle","pigs","horses","fish catch nearly"]). -bgfact("Finland","LandBounderies",["Norway","Sweden","Russia"]). -bgfact("Finland","NaturalResources",["timber","copper","zinc","iron = -ore","silver"]). -bgfact("Finland","Population",["5068931"]). -bgfact("Finland","Capital",["Helsinki"]). -bgfact("Finland","MemberOf",["AfDB","AG","OECD","PCA","UN","UNCTAD","UNDO= -F","UNESCO","UNFICYP","UNHCR","UNIDO","UNIFIL","UNIKOM","UNMOGIP","UNPROF= -OR","UNTSO","UPU","WFTU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Finland","ExportCommodities",["timber","paper and = -pulp","ships","machinery","clothing and footwear"]). -bgfact("Finland","ExportPartners",["EC"]). -bgfact("Finland","ImportCommodities",["foodstuffs","petroleum and = -petroleum products","chemicals","transport equipment","iron and = -steel","machinery","textile yarn and fabrics","fodder grains"]). -bgfact("Finland","ImportPartners",["EC"]). -bgfact("Finland","Industries",["metal products","shipbuilding","forestry = -and wood processing","copper = -refining","foodstuffs","chemicals","textiles","clothing"]). -bgfact("Finland","Agriculture",["livestock production","especially dairy = -cattle","main crops - cereals","sugar beets","self-sufficient","annual = -fish catch about"]). -bgfact("France","LandBounderies",["Andorra","Belgium","Germany","Italy","= -Luxembourg","Monaco","Spain","Switzerland"]). -bgfact("France","NaturalResources",["coal","iron = -ore","bauxite","fish","timber","zinc","potash"]). -bgfact("France","Population",["57840445"]). -bgfact("France","Capital",["Paris"]). -bgfact("France","MemberOf",["ACCT","AfDB","AG","OECD","ONUSAL","PCA","SPC= -","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNIFIL","UNIKOM","UNOSOM","UNPR= -OFOR","UNRWA","UN Security Council","UNTAC","UN Trusteeship = -Council","UNTSO","UPU","WCL","WEU","WFTU","WHO","WIPO","WMO","WTO","ZC"])= -. -bgfact("France","ExportCommodities",["machinery and transportation = -equipment","chemicals","foodstuffs","agricultural products","iron and = -steel products","textiles and clothing"]). -bgfact("France","ExportPartners",["Germany","Italy","Spain","Belgium-Luxe= -mbourg","UK","Netherlands","US","Japan","former USSR"]). -bgfact("France","ImportCommodities",["crude","machinery and = -equipment","agricultural products","chemicals","iron and steel = -products"]). -bgfact("France","ImportPartners",["Germany","Italy","US","Netherlands","S= -pain","Belgium-Luxembourg","UK","Japan","former USSR"]). -bgfact("France","Industries",["steel","machinery","chemicals","automobile= -s","metallurgy","aircraft","electronics","mining","textiles","food = -processing","tourism"]). -bgfact("France","Agriculture",["dairy products","cereals","sugar = -beets","potatoes","shortages include fats and oils and tropical = -produce","fish catch of"]). -bgfact("French Guiana","LandBounderies",["Brazil","Suriname"]). -bgfact("French = -Guiana","NaturalResources",["bauxite","timber","gold","cinnabar","kaolin"= -,"fish"]). -bgfact("French Guiana","Population",["139299"]). -bgfact("French Guiana","Capital",["Cayenne"]). -bgfact("French Guiana","MemberOf",["FZ","WCL"]). -bgfact("French = -Guiana","ExportCommodities",["shrimp","timber","rum","rosewood = -essence"]). -bgfact("French Guiana","ExportPartners",["France","Spain","US"]). -bgfact("French Guiana","ImportCommodities",["food","producer = -goods","petroleum"]). -bgfact("French Guiana","ImportPartners",["France","Germany","US"]). -bgfact("French Guiana","Industries",["construction","shrimp = -processing","forestry products","rum","gold mining"]). -bgfact("French = -Guiana","Agriculture",["rice","corn","manioc","cocoa","bananas","livestoc= -k - cattle","pigs","poultry"]). -bgfact("French Polynesia","LandBounderies",[]). -bgfact("French = -Polynesia","NaturalResources",["timber","fish","cobalt"]). -bgfact("French Polynesia","Population",["215129"]). -bgfact("French Polynesia","Capital",["Papeete"]). -bgfact("French = -Polynesia","MemberOf",["ESCAP","FZ","ICFTU","SPC","WMO"]). -bgfact("French Polynesia","ExportCommodities",["coconut = -products","vanilla","shark meat"]). -bgfact("French Polynesia","ExportPartners",["France","US","Japan"]). -bgfact("French = -Polynesia","ImportCommodities",["fuels","foodstuffs","equipment"]). -bgfact("French = -Polynesia","ImportPartners",["France","US","Australia","NZ"]). -bgfact("French Polynesia","Industries",["tourism","pearls","agricultural = -processing","handicrafts"]). -bgfact("French Polynesia","Agriculture",["poultry","beef","dairy = -products"]). -bgfact("French Southern and Antarctic Lands","LandBounderies",[]). -bgfact("French Southern and Antarctic = -Lands","NaturalResources",["fish","crayfish"]). -bgfact("French Southern and Antarctic Lands","Capital",["none; = -administered from Paris, France"]). -bgfact("Gabon","LandBounderies",["Cameroon","Congo","Equatorial = -Guinea"]). -bgfact("Gabon","NaturalResources",["petroleum","manganese","uranium","gol= -d","timber","iron ore"]). -bgfact("Gabon","Population",["1139006"]). -bgfact("Gabon","Capital",["Libreville"]). -bgfact("Gabon","MemberOf",["ACCT","ACP","AfDB","BDEAC","CCC","CEEAC","ECA= -","FAO","FZ","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA= -","IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","= -IOC","ITU","LORCS","NAM","OAU","OIC","OPEC","UDEAC","UN","UNCTAD","UNESCO= -","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Gabon","ExportCommodities",["crude","timber","manganese","uranium= -"]). -bgfact("Gabon","ExportPartners",["France","US","Germany","Japan"]). -bgfact("Gabon","ImportCommodities",["foodstuffs","chemical = -products","petroleum products","construction = -materials","manubgfactures","machinery"]). -bgfact("Gabon","ImportPartners",["France","African = -countries","US","Japan"]). -bgfact("Gabon","Industries",["petroleum","food and beverages","lumbering = -and plywood","textiles","mining - = -manganese","uranium","gold","cement"]). -bgfact("Gabon","Agriculture",["accounts for of GDP is the most important = -timber product"]). -bgfact("The Gambia","LandBounderies",["Senegal"]). -bgfact("The Gambia","NaturalResources",["fish"]). -bgfact("The Gambia","Population",["959300"]). -bgfact("The Gambia","Capital",["Banjul"]). -bgfact("The = -Gambia","MemberOf",["ACP","AfDB","C","CCC","ECA","ECOWAS","FAO","G-77","G= -ATT","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","IFC","IMF","IMO","INTELSAT= -","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","UN","UNCTAD","UNESCO"= -,"UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("The Gambia","ExportCommodities",["peanuts and peanut = -products","fish","cotton lint","palm kernels"]). -bgfact("The Gambia","ExportPartners",["Japan","Europe","Africa","US"]). -bgfact("The = -Gambia","ImportCommodities",["foodstuffs","manubgfactures","raw = -materials","fuel","machinery and transport equipment"]). -bgfact("The Gambia","ImportPartners",["Europe","Asia","USSR and Eastern = -Europe","US"]). -bgfact("The Gambia","Industries",["peanut = -processing","tourism","beverages","agricultural machinery = -assembly","woodworking","metalworking","clothing"]). -bgfact("The = -Gambia","Agriculture",["sorghum","rice","corn","cassava","livestock - = -cattle","sheep","forestry and fishing resources not fully exploited"]). -bgfact("Gaza Strip","LandBounderies",["Egypt","Israel"]). -bgfact("Gaza Strip","NaturalResources",["negligible"]). -bgfact("Gaza Strip","Population",["731296"]). -bgfact("Gaza Strip","ExportCommodities",["citrus"]). -bgfact("Gaza Strip","ExportPartners",["Israel","Egypt"]). -bgfact("Gaza Strip","ImportCommodities",["food","consumer = -goods","construction materials"]). -bgfact("Gaza Strip","ImportPartners",["Israel","Egypt"]). -bgfact("Gaza Strip","Industries",["generally small family businesses = -that produce textiles","soap","olive-wood carvings","the Israelis have = -established some small-scale modern Industries in an industrial = -center"]). -bgfact("Gaza Strip","Agriculture",["olives","vegetables","beef","dairy = -products"]). -bgfact("Georgia","LandBounderies",["Armenia","Azerbaijan","Russia","Turke= -y"]). -bgfact("Georgia","NaturalResources",["forest = -lands","hydropower","manganese deposits","iron ores","copper","coastal = -climate and soils allow for important tea and citrus growth"]). -bgfact("Georgia","Population",["5681025"]). -bgfact("Georgia","Capital",["T'bilisi"]). -bgfact("Georgia","MemberOf",["BSEC","CIS","CSCE","EBRD","ECE","IBRD","IDA= -","ILO","IMF","IMO","INMARSAT","IOC","ITU","NACC","UN","UNCTAD","UNESCO",= -"UNIDO","UPU","WHO"]). -bgfact("Georgia","ExportCommodities",["citrus fruits","tea","wine","fuel = - re-exports"]). -bgfact("Georgia","ExportPartners",["Russia","Turkey","Armenia","Azerbaija= -n"]). -bgfact("Georgia","ImportCommodities",["fuel","machinery and = -parts","transport equipment"]). -bgfact("Georgia","ImportPartners",["Russia","Azerbaijan","Turkey"]). -bgfact("Georgia","Industries",["heavy industrial products include raw = -steel","rolled steel","machine tools","foundry equipment","electric = -locomotives","tower cranes","electric welding equipment","machinery for = -food preparation and meat packing","electric motors","process control = -equipment","trucks","tractors","light industrial products","including = -cloth","hosiery","the most important food industry is wine"]). -bgfact("Georgia","Agriculture",["dependent on imports for grain","dairy = -products","small livestock sector"]). -bgfact("Germany","LandBounderies",["Austria","Belgium","Czech = -Republic","Denmark","France","Luxembourg","Netherlands","Poland","Switzer= -land"]). -bgfact("Germany","NaturalResources",["iron = -ore","coal","potash","timber","lignite","uranium","copper","natural = -gas","salt","nickel"]). -bgfact("Germany","Population",["81087506"]). -bgfact("Germany","Capital",["Berlin"]). -bgfact("Germany","MemberOf",["AfDB","AG","OECD","PCA","UN","UNCTAD","UNES= -CO","UNIDO","UNHCR","UNOMIG","UNOSOM","UNTAC","UPU","WEU","WHO","WIPO","W= -MO","WTO","ZC"]). -bgfact("Germany","ExportCommodities",["manubgfactures"]). -bgfact("Germany","ExportPartners",["EC"]). -bgfact("Germany","ImportCommodities",["manubgfactures","agricultural = -products","fuels","raw materials"]). -bgfact("Germany","ImportPartners",["EC"]). -bgfact("Germany","Industries",[]). -bgfact("Germany","Agriculture",[]). -bgfact("Ghana","LandBounderies",["Burkina","Cote d'Ivoire","Togo"]). -bgfact("Ghana","NaturalResources",["gold","timber","industrial = -diamonds","bauxite","manganese","fish","rubber"]). -bgfact("Ghana","Population",["17225185"]). -bgfact("Ghana","Capital",["Accra"]). -bgfact("Ghana","MemberOf",["ACP","AfDB","C","CCC","ECA","ECOWAS","FAO","G= --24","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO",= -"IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","MINURS= -O","NAM","OAU","UN","UNCTAD","UNESCO","UNIDO","UNIFIL","UNIKOM","UNPROFOR= -","UNTAC","UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Ghana","ExportCommodities",["cocoa","gold","timber","tuna","bauxi= -te"]). -bgfact("Ghana","ExportPartners",["Germany","US","UK","Netherlands","Japan= -"]). -bgfact("Ghana","ImportCommodities",["petroleum","consumer = -goods","foods","intermediate goods","Capital equipment"]). -bgfact("Ghana","ImportPartners",["UK","US","Germany","Japan"]). -bgfact("Ghana","Industries",["mining","lumbering","light = -manubgfacturing","aluminum","food processing"]). -bgfact("Ghana","Agriculture",["coffee","cassava","peanuts","corn","shea = -nuts","normally self-sufficient in food"]). -bgfact("Gibraltar","LandBounderies",["Spain"]). -bgfact("Gibraltar","NaturalResources",["negligible"]). -bgfact("Gibraltar","Population",["31684"]). -bgfact("Gibraltar","Capital",["Gilbraltar"]). -bgfact("Gibraltar","MemberOf",["INTERPOL"]). -bgfact("Gibraltar","ExportCommodities",["petroleum","manubgfactured = -goods"]). -bgfact("Gibraltar","ExportPartners",["UK","Morocco","Portugal","Netherlan= -ds","Spain","US","FRG"]). -bgfact("Gibraltar","ImportCommodities",["fuels","manubgfactured = -goods"]). -bgfact("Gibraltar","ImportPartners",["UK","Spain","Japan","Netherlands"])= -. -bgfact("Gibraltar","Industries",["tourism","banking and = -finance","construction","light manubgfacturing of tobacco","roasted = -coffee","ice","mineral waters","candy","beer"]). -bgfact("Gibraltar","Agriculture",["none"]). -bgfact("Glorioso Islands","LandBounderies",[]). -bgfact("Glorioso Islands","NaturalResources",["guano","coconuts"]). -bgfact("Glorioso Islands","Capital",["none; administered by France from = -Reunion"]). -bgfact("Greece","LandBounderies",["Albania","Bulgaria","Turkey","The = -Former Yugoslav Republic of Macedonia"]). -bgfact("Greece","NaturalResources",["bauxite","lignite","magnesite","petr= -oleum","marble"]). -bgfact("Greece","Population",["10564630"]). -bgfact("Greece","Capital",["Athens"]). -bgfact("Greece","MemberOf",["Australian = -Group","BIS","BSEC","CCC","CE","CERN","COCOM","CSCE","EBRD","EC","ECE","E= -IB","FAO","G-6","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IEA","IF= -AD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM",= -"ISO","ITU","LORCS","MINURSO","MTCR","NACC","NAM","WFTU","WHO","WIPO","WM= -O","WTO","ZC"]). -bgfact("Greece","ExportCommodities",["manubgfactured = -goods","foodstuffs","fuels"]). -bgfact("Greece","ExportPartners",["Germany","Italy","France","UK","US"]).= - -bgfact("Greece","ImportCommodities",["manubgfactured = -goods","foodstuffs","fuels"]). -bgfact("Greece","ImportPartners",["Germany","Italy","France","Netherlands= -","Japan"]). -bgfact("Greece","Industries",["food and tobacco = -processing","textiles","chemicals","metal = -products","tourism","mining","petroleum"]). -bgfact("Greece","Agriculture",["including fishing and = -forestry","principal wheat","corn","barley","sugar = -beets","olives","tomatoes","wine","tobacco","self-sufficient in food = -except meat","dairy products"]). -bgfact("Greenland","LandBounderies",[]). -bgfact("Greenland","NaturalResources",["zinc","lead","iron = -ore","coal","molybdenum","cryolite","uranium","fish"]). -bgfact("Greenland","Population",["57040"]). -bgfact("Greenland","Capital",["Nuuk"]). -bgfact("Greenland","ExportCommodities",["fish and fish products"]). -bgfact("Greenland","ExportPartners",["Denmark","Benelux","Germany"]). -bgfact("Greenland","ImportCommodities",["manubgfactured = -goods","machinery and transport equipment","food and live = -animals","petroleum products"]). -bgfact("Greenland","ImportPartners",["Denmark","Norway","US","Germany","J= -apan","Sweden"]). -bgfact("Greenland","Industries",["fish processing","lead and zinc = -mining","handicrafts","some small shipyards","potential for platinum and = -gold mining"]). -bgfact("Greenland","Agriculture",["fish catch of"]). -bgfact("Grenada","LandBounderies",[]). -bgfact("Grenada","NaturalResources",["timber","tropical = -fruit","deepwater harbors"]). -bgfact("Grenada","Population",["94109"]). -bgfact("Grenada","Capital",["Saint George's"]). -bgfact("Grenada","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-7= -7","GATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","INTERPOL"= -,"IOC","ITU","LAES","LORCS","NAM","OAS","OECS","OPANAL","UN","UNCTAD","UN= -ESCO","UNIDO","UPU","WCL","WHO","WTO"]). -bgfact("Grenada","ExportCommodities",["bananas","cocoa","nutmeg","fruit = -and vegetables","clothing","mace"]). -bgfact("Grenada","ExportPartners",["Netherlands","UK","Trinidad and = -Tobago","United States"]). -bgfact("Grenada","ImportCommodities",["food","manubgfactured = -goods","machinery","chemicals","fuel"]). -bgfact("Grenada","ImportPartners",["US","UK","Trinidad and = -Tobago","Japan","Canada"]). -bgfact("Grenada","Industries",["food and beverage","textile","light = -assembly operations","tourism","construction"]). -bgfact("Grenada","Agriculture",["bananas","cocoa","nutmeg","small-size = -farms predominate","growing a variety of citrus = -fruits","avocados","root crops","sugarcane","corn"]). -bgfact("Guadeloupe","LandBounderies",[]). -bgfact("Guadeloupe","NaturalResources",["cultivable land","beaches and = -climate that foster tourism"]). -bgfact("Guadeloupe","Population",["428947"]). -bgfact("Guadeloupe","Capital",["Basse-Terre"]). -bgfact("Guadeloupe","MemberOf",["FZ","WCL","WFTU"]). -bgfact("Guadeloupe","ExportCommodities",["bananas","sugar","rum"]). -bgfact("Guadeloupe","ExportPartners",["France","Martinique"]). -bgfact("Guadeloupe","ImportCommodities",["vehicles","foodstuffs","constru= -ction materials","petroleum products"]). -bgfact("Guadeloupe","ImportPartners",["France","Italy","FRG","US"]). -bgfact("Guadeloupe","Industries",["construction","cement","rum","sugar","= -tourism"]). -bgfact("Guadeloupe","Agriculture",["bananas","livestock - = -cattle","pigs","not self-sufficient in food"]). -bgfact("Guam","LandBounderies",[]). -bgfact("Guam","NaturalResources",["fishing"]). -bgfact("Guam","Population",["149620"]). -bgfact("Guam","Capital",["Agana"]). -bgfact("Guam","MemberOf",["ESCAP","IOC","SPC"]). -bgfact("Guam","ExportCommodities",["mostly transshipments of refined = -petroleum products","construction materials","fish","food and beverage = -products"]). -bgfact("Guam","ExportPartners",["US","Trust Territory of the Pacific = -Islands"]). -bgfact("Guam","ImportCommodities",["petroleum and petroleum = -products","food","manubgfactured goods"]). -bgfact("Guam","ImportPartners",["US","Japan"]). -bgfact("Guam","Industries",["US = -military","tourism","construction","transshipment services","concrete = -products","printing and publishing","food processing","textiles"]). -bgfact("Guam","Agriculture",["fruits","vegetables","eggs","pork","poultry= -","beef","copra"]). -bgfact("Guatemala","LandBounderies",["Belize","El = -Salvador","Honduras","Mexico"]). -bgfact("Guatemala","NaturalResources",["petroleum","nickel","rare = -woods","fish","chicle"]). -bgfact("Guatemala","Population",["10721387"]). -bgfact("Guatemala","Capital",["Guatemala"]). -bgfact("Guatemala","MemberOf",["BCIE","CACM","CCC","ECLAC","FAO","G-24","= -G-77","GATT","IADB","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO"= -,"IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS= -","NAM","OAS","OPANAL","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","= -WFTU","WHO","WIPO","WMO"]). -bgfact("Guatemala","ExportCommodities",["coffee","sugar","bananas","carda= -mon","beef"]). -bgfact("Guatemala","ExportPartners",["US","El Salvador","Costa = -Rica","Germany","Honduras"]). -bgfact("Guatemala","ImportCommodities",["fuel and petroleum = -products","machinery","grain","fertilizers","motor vehicles"]). -bgfact("Guatemala","ImportPartners",["US","Mexico","Venezuela","Japan","G= -ermany"]). -bgfact("Guatemala","Industries",["sugar","textiles and = -clothing","furniture","chemicals","petroleum","metals","rubber","tourism"= -]). -bgfact("Guatemala","Agriculture",["principal = -sugarcane","corn","bananas","coffee","beans","livestock - = -cattle","sheep","pigs","food importer"]). -bgfact("Guernsey","LandBounderies",[]). -bgfact("Guernsey","NaturalResources",["cropland"]). -bgfact("Guernsey","Population",["63719"]). -bgfact("Guernsey","Capital",["Saint Peter Port"]). -bgfact("Guernsey","MemberOf",["none"]). -bgfact("Guernsey","ExportCommodities",["tomatoes","flowers and = -ferns","sweet peppers","eggplant"]). -bgfact("Guernsey","ExportPartners",["UK"]). -bgfact("Guernsey","ImportCommodities",["coal","gasoline"]). -bgfact("Guernsey","ImportPartners",["UK"]). -bgfact("Guernsey","Industries",["tourism","banking"]). -bgfact("Guernsey","Agriculture",["tomatoes","flowers","sweet = -peppers","eggplant","Guernsey cattle"]). -bgfact("Guinea","LandBounderies",["Guinea-Bissau","Cote = -d'Ivoire","Liberia","Mali","Senegal","Sierra Leone"]). -bgfact("Guinea","NaturalResources",["bauxite","iron = -ore","diamonds","gold","uranium","hydropower","fish"]). -bgfact("Guinea","Population",["6391536"]). -bgfact("Guinea","Capital",["Conakry"]). -bgfact("Guinea","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWA= -S","FAO","G-77","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IMO",= -"INTELSAT","INTERPOL","IOC","ITU","LORCS","MINURSO","NAM","OAU","OIC","UN= -","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Guinea","ExportCommodities",["bauxite","alumina","diamonds","gold= -","coffee","pineapples","bananas","palm kernels"]). -bgfact("Guinea","ExportPartners",["US","Belgium","Ireland","Spain"]). -bgfact("Guinea","ImportCommodities",["petroleum = -products","metals","machinery","transport = -equipment","foodstuffs","textiles"]). -bgfact("Guinea","ImportPartners",["France","Cote d'Ivoire","Hong = -Kong","Germany"]). -bgfact("Guinea","Industries",["bauxite mining","alumina","gold","diamond = -mining","light manubgfacturing and agricultural processing = -Industries"]). -bgfact("Guinea","Agriculture",["principal = -rice","coffee","pineapples","palm kernels","cassava","bananas","sweet = -potatoes","livestock - cattle","not self-sufficient in food grains"]). -bgfact("Guinea-Bissau","LandBounderies",["Guinea","Senegal"]). -bgfact("Guinea-Bissau","NaturalResources",["unexploited deposits of = -petroleum","bauxite","phosphates","fish","timber"]). -bgfact("Guinea-Bissau","Population",["1098231"]). -bgfact("Guinea-Bissau","Capital",["Bissau"]). -bgfact("Guinea-Bissau","MemberOf",["ACCT","ITU","LORCS","NAM","OAU","OIC"= -,"UN","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNOMOZ","UPU","WFTU","WHO","WIPO","WMO","W= -TO"]). -bgfact("Guinea-Bissau","ExportCommodities",["cashews","fish","peanuts","p= -alm kernels"]). -bgfact("Guinea-Bissau","ExportPartners",["Portugal","Spain","Senegal","In= -dia","Nigeria"]). -bgfact("Guinea-Bissau","ImportCommodities",["foodstuffs","transport = -equipment","petroleum products","machinery and equipment"]). -bgfact("Guinea-Bissau","ImportPartners",["Portugal","Netherlands","China"= -,"Germany","Senegal"]). -bgfact("Guinea-Bissau","Industries",["agricultural = -processing","beer","soft drinks"]). -bgfact("Guinea-Bissau","Agriculture",["accounts for over of GDP","nearly = -of exports","beans","cassava","cashew nuts","peanuts","palm = -kernels","fishing and forestry potential not fully exploited"]). -bgfact("Guyana","LandBounderies",["Brazil","Suriname","Venezuela"]). -bgfact("Guyana","NaturalResources",["bauxite","gold","diamonds","hardwood= - timber","shrimp","fish"]). -bgfact("Guyana","Population",["729425"]). -bgfact("Guyana","Capital",["Georgetown"]). -bgfact("Guyana","MemberOf",["ACP","C","CARICOM","CCC","CDB","ECLAC","FAO"= -,"G-77","GATT","IADB","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF= -","IMO","INTELSAT","INTERPOL","IOC","ITU","LAES","LORCS","NAM","OAS","ONU= -SAL","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WMO"]). -bgfact("Guyana","ExportCommodities",["sugar","bauxite/alumina","rice","sh= -rimp","molasses"]). -bgfact("Guyana","ExportPartners",["UK","US","Canada","France","Japan"]). -bgfact("Guyana","ImportCommodities",["manubgfactures","machinery","petrol= -eum","food"]). -bgfact("Guyana","ImportPartners",["US","Trinidad and = -Tobago","UK","Italy","Japan"]). -bgfact("Guyana","Industries",["bauxite mining","sugar","rice = -milling","timber","fishing","textiles","gold mining"]). -bgfact("Guyana","Agriculture",["most important sector","not = -self-sufficient in food","especially wheat","vegetable oils"]). -bgfact("Haiti","LandBounderies",["Dominican Republic"]). -bgfact("Haiti","NaturalResources",["bauxite"]). -bgfact("Haiti","Population",["6491450"]). -bgfact("Haiti","Capital",["Port-au-Prince"]). -bgfact("Haiti","MemberOf",["ACCT","ACP","CARICOM","CCC","ECLAC","FAO","G-= -77","GATT","IADB","IAEA","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","IM= -O","INTELSAT","INTERPOL","IOC","ITU","LAES","LORCS","OAS","OPANAL","PCA",= -"UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO= -"]). -bgfact("Haiti","ExportCommodities",["light manubgfactures","coffee"]). -bgfact("Haiti","ExportPartners",["US","Italy","France","less developed = -countries"]). -bgfact("Haiti","ImportCommodities",["machines and manubgfactures","food = -and beverages","petroleum products","chemicals","fats and oils"]). -bgfact("Haiti","ImportPartners",["US","Netherlands = -Antilles","Japan","France","Canada","Germany"]). -bgfact("Haiti","Industries",["sugar refining","textiles","flour = -milling","cement manubgfacturing","tourism","light assembly Industries = -based on imported parts"]). -bgfact("Haiti","Agriculture",["commercial = -coffee","mangoes","sugarcane","staple rice","corn","shortage of wheat = -flour"]). -bgfact("Heard Island and McDonald Islands","LandBounderies",[]). -bgfact("Heard Island and McDonald Islands","NaturalResources",["none"]). -bgfact("Heard Island and McDonald Islands","Capital",["none; = -administered from Canberra, Australia"]). -bgfact("Holy See (Vatican City)","LandBounderies",["Italy"]). -bgfact("Holy See (Vatican City)","NaturalResources",["none"]). -bgfact("Holy See (Vatican City)","Population",["821"]). -bgfact("Holy See (Vatican City)","Capital",["Vatican City"]). -bgfact("Holy See (Vatican = -City)","MemberOf",["CSCE","IAEA","ICFTU","IMF"]). -bgfact("Holy See (Vatican City)","Industries",["worldwide banking and = -financial activities"]). -bgfact("Honduras","LandBounderies",["Guatemala","El = -Salvador","Nicaragua"]). -bgfact("Honduras","NaturalResources",["timber","gold","silver","copper","= -lead","zinc","iron ore","antimony","coal","fish"]). -bgfact("Honduras","Population",["5314794"]). -bgfact("Honduras","Capital",["Tegucigalpa"]). -bgfact("Honduras","MemberOf",["BCIE","CACM","ECLAC","FAO","G-77","GATT","= -IADB","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSA= -T","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","MINURSO","OAS","OP= -ANAL","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO= -","WMO"]). -bgfact("Honduras","ExportCommodities",["bananas","coffee","shrimp","lobst= -er","minerals","meat","lumber"]). -bgfact("Honduras","ExportPartners",["US","Germany","Belgium","UK"]). -bgfact("Honduras","ImportCommodities",["machinery and transport = -equipment","chemical products","manubgfactured goods","fuel and = -oil","foodstuffs"]). -bgfact("Honduras","ImportPartners",["US","Mexico","Guatemala"]). -bgfact("Honduras","Industries",["agricultural = -processing","textiles","clothing","wood products"]). -bgfact("Honduras","Agriculture",["most important sector","accounting for = -more than of GDP","more than of the labor force","principal products = -include bananas","coffee","timber","beef","citrus fruit","importer of = -wheat"]). -bgfact("Hong Kong","LandBounderies",["China"]). -bgfact("Hong Kong","NaturalResources",["outstanding deepwater = -harbor","feldspar"]). -bgfact("Hong Kong","Population",["5548754"]). -bgfact("Hong Kong","Capital",["Victoria"]). -bgfact("Hong Kong","MemberOf",["COCOM","WCL","WMO"]). -bgfact("Hong Kong","ExportCommodities",["clothing","textiles","yarn and = -fabric","footwear","electrical appliances","watches and = -clocks","toys"]). -bgfact("Hong = -Kong","ExportPartners",["China","US","Germany","Japan","UK"]). -bgfact("Hong Kong","ImportCommodities",["foodstuffs","transport = -equipment","raw materials","semimanubgfactures","petroleum"]). -bgfact("Hong Kong","ImportPartners",["China","Japan","Taiwan","US"]). -bgfact("Hong = -Kong","Industries",["textiles","clothing","tourism","electronics","plasti= -cs","toys","watches","clocks"]). -bgfact("Hong Kong","Agriculture",["local farmers produce fresh = -vegetables","of land area suitable for farming"]). -bgfact("Howland Island","LandBounderies",[]). -bgfact("Howland Island","NaturalResources",["guano"]). -bgfact("Howland Island","Population",["1942"]). -bgfact("Howland Island","Capital",["none; administered from Washington, = -DC"]). -bgfact("Hungary","LandBounderies",["Austria","Croatia","Romania","Serbia = - and Montenegro","Slovakia","Slovenia","Ukraine"]). -bgfact("Hungary","NaturalResources",["bauxite","coal","natural = -gas","fertile soils"]). -bgfact("Hungary","Population",["10319113"]). -bgfact("Hungary","Capital",["Budapest"]). -bgfact("Hungary","MemberOf",["Australian = -Group","BIS","CCC","CE","CEI","CERN","COCOM","PCA","UN","UNAVEM = -II","UNCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UNOMOZ","UNOMUR","UNOSOM"= -,"UNTAC","UPU","WFTU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Hungary","ExportCommodities",["raw materials","semi-finished = -goods","chemicals","machinery","consumer goods","food and = -Agriculture","fuels and energy"]). -bgfact("Hungary","ExportPartners",["EC"]). -bgfact("Hungary","ImportCommodities",["fuels and energy","raw = -materials","semi-finished goods","chemicals","machinery","consumer = -goods","food and Agriculture"]). -bgfact("Hungary","ImportPartners",["EC","Austria","the FSU","Eastern = -Europe"]). -bgfact("Hungary","Industries",["mining","metallurgy","construction = -materials","processed = -foods","textiles","chemicals","buses","automobiles"]). -bgfact("Hungary","Agriculture",["including forestry","principal = -wheat","corn","sunflowers","potatoes","livestock - = -hogs","cattle","poultry","self-sufficient in food output"]). -bgfact("Iceland","LandBounderies",[]). -bgfact("Iceland","NaturalResources",["fish","hydropower","diatomite"]). -bgfact("Iceland","Population",["263599"]). -bgfact("Iceland","Capital",["Reykjavik"]). -bgfact("Iceland","MemberOf",["Australian = -Group","BIS","CCC","CE","CSCE","EBRD","ECE","EFTA","FAO","GATT","IAEA","I= -BRD","ICAO","ICC","ICFTU","IDA","IFC","ILO","IMF","IMO","INMARSAT","INTEL= -SAT","INTERPOL","IOC","ISO","ITU","LORCS","MTCR","NACC","NATO","NC","NEA"= -,"NIB","OECD","PCA","UN","UNCTAD","UNESCO","UPU","WEU","WHO","WIPO","WMO"= -]). -bgfact("Iceland","ExportCommodities",["fish and fish products","animal = -products","aluminum","ferrosilicon","diatomite"]). -bgfact("Iceland","ExportPartners",["EC"]). -bgfact("Iceland","ImportCommodities",["machinery and transportation = -equipment","petroleum products","foodstuffs","textiles"]). -bgfact("Iceland","ImportPartners",["EC"]). -bgfact("Iceland","Industries",["fish processing","aluminum = -smelting","ferro-silicon production"]). -bgfact("Iceland","Agriculture",["fishing is most important economic = -activity","principal crops - potatoes","livestock - cattle","fish catch = -of about million metric tons in"]). -bgfact("India","LandBounderies",["Bangladesh","Bhutan","Burma","China","N= -epal","Pakistan"]). -bgfact("India","NaturalResources",["coal","iron = -ore","manganese","mica","bauxite","titanium ore","chromite","natural = -gas","diamonds","petroleum","limestone"]). -bgfact("India","Population",["919903056"]). -bgfact("India","Capital",["New Delhi"]). -bgfact("India","MemberOf",["AG","ONUSAL","PCA","SAARC","UN","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNIKOM","UNOMOZ","UNOSOM","UNPROFOR","UNTA= -C","UPU","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("India","ExportCommodities",["gems and = -jewelry","clothing","engineering goods","chemicals","leather = -manubgfactures","cotton yarn"]). -bgfact("India","ExportPartners",["US","Germany","Italy"]). -bgfact("India","ImportCommodities",["crude and petroleum = -products","gems","fertilizer","chemicals","machinery"]). -bgfact("India","ImportPartners",["US","Belgium","Germany"]). -bgfact("India","Industries",["textiles","chemicals","food = -processing","steel","transportation = -equipment","cement","mining","petroleum","machinery"]). -bgfact("India","Agriculture",["principal = -rice","wheat","oilseeds","cotton","jute","tea","sugarcane","livestock - = -cattle","buffaloes","sheep","goats","fish catch of about million metric = -tons ranks India among the world's top fishing nations"]). -bgfact("Indian Ocean","NaturalResources",["oil and gas = -fields","fish","shrimp","sand and gravel aggregates","placer = -deposits","polymetallic nodules"]). -bgfact("Indian Ocean","Industries",["based on exploitation of natural = -resources","particularly fish","minerals","oil and gas","fishing","sand = -and gravel"]). -bgfact("Indonesia","LandBounderies",["Malaysia","Papua New Guinea"]). -bgfact("Indonesia","NaturalResources",["petroleum","tin","natural = -gas","nickel","timber","bauxite","copper","fertile = -soils","coal","gold","silver"]). -bgfact("Indonesia","Population",["200409741"]). -bgfact("Indonesia","Capital",["Jakarta"]). -bgfact("Indonesia","MemberOf",["APEC","AsDB","ASEAN","CCC","CP","ESCAP","= -FAO","G-15","G-19","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA"= -,"IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","I= -OC","IOM","ISO","ITU","LORCS","NAM","OIC","OPEC","UN","UNCTAD","UNESCO","= -UNIDO","UNIKOM","UNOSOM","UNTAC","UPU","WCL","WFTU","WHO","WIPO","WMO","W= -TO"]). -bgfact("Indonesia","ExportCommodities",["petroleum and gas","clothing = -and fabrics","plywood","footwear"]). -bgfact("Indonesia","ExportPartners",["Japan","US","Singapore","South = -Korea"]). -bgfact("Indonesia","ImportCommodities",["machinery","semi-finished = -goods","chemicals","raw materials","transport equipment","food = -stuffs","petroleum products","consumer goods"]). -bgfact("Indonesia","ImportPartners",["Japan","US","Germany","South = -Korea","Singapore","Australia","Taiwan"]). -bgfact("Indonesia","Industries",["petroleum and natural = -gas","textiles","mining","cement","chemical = -fertilizers","plywood","food","rubber"]). -bgfact("Indonesia","Agriculture",["main products are = -rice","cassava","peanuts","rubber","cocoa","coffee","palm = -oil","copra","poultry","beef","pork","eggs"]). -bgfact("Iran","LandBounderies",["Afghanistan","Armenia","Azerbaijan","Ira= -q","Pakistan","Turkey","Turkmenistan"]). -bgfact("Iran","NaturalResources",["petroleum","natural = -gas","coal","chromium","copper","iron = -ore","lead","manganese","zinc","sulfur"]). -bgfact("Iran","Population",["65615474"]). -bgfact("Iran","Capital",["Tehran"]). -bgfact("Iran","MemberOf",["CCC","CP","ESCAP","ECO","FAO","G-19","G-24","G= --77","IAEA","IBRD","ICAO","ICC","IDA","IDB","IFAD","IFC","ILO","IMF","IMO= -","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","OIC",= -"OPEC","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WFTU","W= -HO","WIPO","WMO","WTO"]). -bgfact("Iran","ExportCommodities",["petroleum","carpets","fruits","nuts",= -"hides"]). -bgfact("Iran","ExportPartners",["Japan","Italy","France","Netherlands","B= -elgium/Luxembourg","Spain"]). -bgfact("Iran","ImportCommodities",["machinery","military = -supplies","metal works","foodstuffs","pharmaceuticals","technical = -services","refined oil products"]). -bgfact("Iran","ImportPartners",["Germany","Japan","Italy","UK","France"])= -. -bgfact("Iran","Industries",["petroleum","petrochemicals","textiles","food= - processing","metal fabricating"]). -bgfact("Iran","Agriculture",["principal wheat","rice","sugar = -beets","fruits","nuts","cotton","dairy products","wool","not = -self-sufficient in food"]). -bgfact("Iraq","LandBounderies",["Iran","Jordan","Kuwait","Saudi = -Arabia","Syria","Turkey"]). -bgfact("Iraq","NaturalResources",["petroleum","natural = -gas","phosphates","sulfur"]). -bgfact("Iraq","Population",["19889666"]). -bgfact("Iraq","Capital",["Baghdad"]). -bgfact("Iraq","MemberOf",["ABEDA","ACC","AFESD","AL","AMF","CAEU","CCC","= -ESCWA","FAO","G-19","G-77","IAEA","IBRD","ICAO","IDA","IDB","IFAD","IFC",= -"ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LOR= -CS","NAM","OAPEC","OIC","OPEC","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU"= -,"WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Iraq","ExportCommodities",["crude and refined = -products","fertilizer","sulfur"]). -bgfact("Iraq","ExportPartners",["US","Brazil","Turkey","Japan","Netherlan= -ds","Spain"]). -bgfact("Iraq","ImportCommodities",["manubgfactures","food"]). -bgfact("Iraq","ImportPartners",["Germany","US","Turkey","France","UK"]). -bgfact("Iraq","Industries",["petroleum production and = -refining","chemicals","textiles","construction materials","food = -processing"]). -bgfact("Iraq","Agriculture",["principal = -wheat","barley","rice","vegetables","dates","cotton","livestock - = -cattle","not self-sufficient in food output"]). -bgfact("Ireland","LandBounderies",["UK"]). -bgfact("Ireland","NaturalResources",["zinc","lead","natural = -gas","petroleum","barite","copper","gypsum","limestone","dolomite","peat"= -,"silver"]). -bgfact("Ireland","Population",["3539296"]). -bgfact("Ireland","Capital",["Dublin"]). -bgfact("Ireland","MemberOf",["Australian = -Group","BIS","CCC","CE","COCOM","WHO","WIPO","WMO","ZC"]). -bgfact("Ireland","ExportCommodities",["chemicals","data processing = -equipment","industrial machinery","live animals","animal products"]). -bgfact("Ireland","ExportPartners",["EC","US"]). -bgfact("Ireland","ImportCommodities",["food","animal feed","data = -processing equipment","petroleum and petroleum = -products","machinery","textiles","clothing"]). -bgfact("Ireland","ImportPartners",["EC","US"]). -bgfact("Ireland","Industries",["food = -products","brewing","textiles","clothing","chemicals","pharmaceuticals","= -machinery","transportation equipment","glass and crystal"]). -bgfact("Ireland","Agriculture",["principal = -turnips","barley","potatoes","sugar beets","food shortages include = -bread grain","fruits","vegetables"]). -bgfact("Israel","LandBounderies",["Egypt","Gaza = -Strip","Jordan","Lebanon","Syria","West Bank"]). -bgfact("Israel","NaturalResources",["copper","phosphates","bromide","pota= -sh","clay","sand","sulfur","asphalt","manganese","small amounts of = -natural gas and crude"]). -bgfact("Israel","Population",["5050850"]). -bgfact("Israel","Capital",["Jerusalem"]). -bgfact("Israel","MemberOf",["AG","PCA","UN","UNCTAD","UNESCO","UNHCR","UN= -IDO","UPU","WHO","WIPO","WMO","WTO"]). -bgfact("Israel","ExportCommodities",["machinery and equipment","cut = -diamonds","chemicals","textiles and apparel","agricultural = -products","metals"]). -bgfact("Israel","ExportPartners",["US","EC","Japan"]). -bgfact("Israel","ImportCommodities",["military equipment","investment = -goods","rough diamonds","oil","consumer goods"]). -bgfact("Israel","ImportPartners",["US","EC"]). -bgfact("Israel","Industries",["food processing","diamond cutting and = -polishing","textiles and apparel","chemicals","metal products","military = -equipment","transport equipment","electrical equipment","miscellaneous = -machinery","potash mining","high-technology electronics","tourism"]). -bgfact("Israel","Agriculture",["largely self-sufficient in food = -production","vegetables","livestock beef","dairy","poultry"]). -bgfact("Italy","LandBounderies",["Austria","France","Holy See","San = -Marino","Slovenia","Switzerland"]). -bgfact("Italy","NaturalResources",["mercury","potash","marble","sulfur","= -dwindling natural gas and crude reserves","fish","coal"]). -bgfact("Italy","Population",["58138394"]). -bgfact("Italy","Capital",["Rome"]). -bgfact("Italy","MemberOf",["AfDB","AG","OECD","ONUSAL","PCA","UN","UNCTAD= -","UNESCO","UNHCR","UNIDO","UNIFIL","UNIKOM","UNMOGIP","UNOSOM","UNTAC","= -UNTSO","UPU","WCL","WEU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Italy","ExportCommodities",["metals","textiles and = -clothing","production machinery","motor vehicles","transportation = -equipment","chemicals"]). -bgfact("Italy","ExportPartners",["EC","US","OPEC"]). -bgfact("Italy","ImportCommodities",["industrial = -machinery","chemicals","transport = -equipment","petroleum","metals","food","agricultural products"]). -bgfact("Italy","ImportPartners",["EC","OPEC","US"]). -bgfact("Italy","Industries",["machinery","iron and = -steel","chemicals","food processing","textiles","motor = -vehicles","clothing","footwear","ceramics"]). -bgfact("Italy","Agriculture",["dairy products","principal = -fruits","vegetables","grapes","potatoes","sugar = -beets","soybeans","grain","fish catch of"]). -bgfact("Jamaica","LandBounderies",[]). -bgfact("Jamaica","NaturalResources",["bauxite","gypsum","limestone"]). -bgfact("Jamaica","Population",["2555064"]). -bgfact("Jamaica","Capital",["Kingston"]). -bgfact("Jamaica","MemberOf",["ACP","C","CARICOM","CCC","CDB","ECLAC","FAO= -","G-19","G-77","GATT","G-15","IADB","IAEA","IBRD","ICAO","ICFTU","IFAD",= -"IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LAES","L= -ORCS","NAM","OAS","OPANAL","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WF= -TU","WHO","WIPO","WMO","WTO"]). -bgfact("Jamaica","ExportCommodities",["alumina","bauxite","sugar","banana= -s","rum"]). -bgfact("Jamaica","ExportPartners",["US","UK","Germany","Canada","Norway"]= -). -bgfact("Jamaica","ImportCommodities",["fuel","construction = -materials","food","transport equipment"]). -bgfact("Jamaica","ImportPartners",["US","UK","Venezuela","Germany","Japan= -"]). -bgfact("Jamaica","Industries",["tourism","bauxite = -mining","textiles","food processing","light manubgfactures"]). -bgfact("Jamaica","Agriculture",["accounts for about of GDP","of work = -force","commercial = -sugarcane","bananas","coffee","citrus","potatoes","livestock and = -livestock products include poultry","goats","not self-sufficient in = -grain","meat"]). -bgfact("Jan Mayen","LandBounderies",[]). -bgfact("Jan Mayen","NaturalResources",["none"]). -bgfact("Jan Mayen","Capital",["none"]). -bgfact("Japan","LandBounderies",[]). -bgfact("Japan","NaturalResources",["negligible mineral = -resources","fish"]). -bgfact("Japan","Population",["125106937"]). -bgfact("Japan","Capital",["Tokyo"]). -bgfact("Japan","MemberOf",["AfDB","AG","OECD","PCA","UN","UNCTAD","UNESCO= -","UNHCR","UNIDO","UNRWA","UNTAC","UPU","WFTU","WHO","WIPO","WMO","WTO","= -ZC"]). -bgfact("Japan","ExportCommodities",["manubgfactures"]). -bgfact("Japan","ExportPartners",["Southeast Asia","US","Western = -Europe","China"]). -bgfact("Japan","ImportCommodities",["manubgfactures","fossil = -fuels","foodstuffs and raw materials"]). -bgfact("Japan","ImportPartners",["Southeast Asia","US","Western = -Europe","China"]). -bgfact("Japan","Industries",["steel and non-ferrous metallurgy","heavy = -electrical equipment","construction and mining equipment","motor = -vehicles and parts","electronic and telecommunication equipment and = -components","machine tools and automated production = -systems","locomotives and railroad rolling = -stock","shipbuilding","chemicals","textiles","food processing"]). -bgfact("Japan","Agriculture",["highly subsidized and protected = -sector","principal rice","sugar beets","vegetables","animal products = -include pork","poultry","shortages of wheat","corn","world's largest = -fish catch of million metric tons in"]). -bgfact("Jarvis Island","LandBounderies",[]). -bgfact("Jarvis Island","NaturalResources",["guano"]). -bgfact("Jarvis Island","Capital",["none; administered from Washington, = -DC"]). -bgfact("Jersey","LandBounderies",[]). -bgfact("Jersey","NaturalResources",["agricultural land"]). -bgfact("Jersey","Population",["86048"]). -bgfact("Jersey","Capital",["Saint Helier"]). -bgfact("Jersey","MemberOf",["none"]). -bgfact("Jersey","ExportCommodities",["light industrial and electrical = -goods","foodstuffs","textiles"]). -bgfact("Jersey","ExportPartners",["UK"]). -bgfact("Jersey","ImportCommodities",["machinery and transport = -equipment","manubgfactured goods","foodstuffs","mineral = -fuels","chemicals"]). -bgfact("Jersey","ImportPartners",["UK"]). -bgfact("Jersey","Industries",["tourism","banking and finance","dairy"]). -bgfact("Jersey","Agriculture",["potatoes","cauliflowers","dairy and = -cattle farming"]). -bgfact("Johnston Atoll","LandBounderies",[]). -bgfact("Johnston Atoll","NaturalResources",["guano"]). -bgfact("Johnston Atoll","Population",["327"]). -bgfact("Johnston Atoll","Capital",["none; administered from Washington, = -DC"]). -bgfact("Jordan","LandBounderies",["Iraq","Israel","Saudi = -Arabia","Syria","West Bank"]). -bgfact("Jordan","NaturalResources",["phosphates","potash","shale oil"]). -bgfact("Jordan","Population",["3961194"]). -bgfact("Jordan","Capital",["Amman"]). -bgfact("Jordan","MemberOf",["ABEDA","ACC","AFESD","AL","AMF","CAEU","CCC"= -,"ESCWA","FAO","G-77","IAEA","IBRD","ICAO","ICC","IDA","IDB","IFAD","IFC"= -,"ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ITU","LORCS","NAM",= -"OIC","PCA","UN","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNOSOM","UNRWA","UNPROFOR","UNTAC","UPU","= -WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Jordan","ExportCommodities",["phosphates","fertilizers","potash",= -"agricultural products","manubgfactures"]). -bgfact("Jordan","ExportPartners",["India","Iraq","Saudi = -Arabia","EC","Indonesia","UAE"]). -bgfact("Jordan","ImportCommodities",["crude","machinery","transport = -equipment","food","live animals","manubgfactured goods"]). -bgfact("Jordan","ImportPartners",["EC","US","Iraq","Japan","Turkey"]). -bgfact("Jordan","Industries",["phosphate mining","petroleum = -refining","cement","potash","light manubgfacturing"]). -bgfact("Jordan","Agriculture",["principal products are = -wheat","barley","citrus fruit","tomatoes","melons","livestock - = -sheep","goats","large net importer of food"]). -bgfact("Juan de Nova Island","LandBounderies",[]). -bgfact("Juan de Nova Island","NaturalResources",[]). -bgfact("Juan de Nova Island","Capital",["none; administered by France = ->from Reunion"]). -bgfact("Kazakhstan","LandBounderies",["China","Kyrgyzstan","Russia","Turk= -menistan","Uzbekistan"]). -bgfact("Kazakhstan","NaturalResources",["major deposits of = -petroleum","coal","iron ore","manganese","chrome = -ore","nickel","cobalt","copper","molybdenum","lead","zinc","bauxite","gol= -d","uranium"]). -bgfact("Kazakhstan","Population",["17267554"]). -bgfact("Kazakhstan","Capital",["Almaty"]). -bgfact("Kazakhstan","MemberOf",["CCC","CIS","CSCE","EBRD","ECO","ESCAP","= -IBRD","ICAO","IDA","IFC","ILO","IMF","INTELSAT","UN","UNCTAD","UNESCO","U= -PU","WHO","WMO"]). -bgfact("Kazakhstan","ExportCommodities",["oil","ferrous and nonferrous = -metals","chemicals","grain","wool","meat"]). -bgfact("Kazakhstan","ExportPartners",["Russia","Ukraine","Uzbekistan"]). -bgfact("Kazakhstan","ImportCommodities",["machinery and = -parts","industrial materials","oil and gas"]). -bgfact("Kazakhstan","ImportPartners",["China"]). -bgfact("Kazakhstan","Industries",["extractive Industries","iron and = -steel","nonferrous metal","electric motors","construction materials"]). -bgfact("Kazakhstan","Agriculture",["grain","meat","cotton","wool"]). -bgfact("Kenya","LandBounderies",["Ethiopia","Somalia","Sudan","Tanzania",= -"Uganda"]). -bgfact("Kenya","NaturalResources",["gold","limestone","soda ash","salt = -barytes","rubies","fluorspar","garnets","wildlife"]). -bgfact("Kenya","Population",["28240658"]). -bgfact("Kenya","Capital",["Nairobi"]). -bgfact("Kenya","MemberOf",["ACP","AfDB","C","CCC","EADB","ECA","FAO","G-7= -7","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","IGADD","ILO","= -IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","MINURSO= -","NAM","OAU","UN","UNCTAD","UNESCO","UNIDO","UNIKOM","UNPROFOR","UNTAC",= -"UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Kenya","ExportCommodities",["tea","coffee","petroleum = -products"]). -bgfact("Kenya","ExportPartners",["EC","Africa","Asia","US","Middle = -East"]). -bgfact("Kenya","ImportCommodities",["machinery and transportation = -equipment","petroleum and petroleum products","iron and steel","raw = -materials","food and consumer goods"]). -bgfact("Kenya","ImportPartners",["EC","Asia","Middle East","US"]). -bgfact("Kenya","Industries",["small-scale consumer goods","agricultural = -processing","oil refining","cement","tourism"]). -bgfact("Kenya","Agriculture",["most important = -sector","coffee","tea","sisal","food = -corn","wheat","sugarcane","fruit","vegetables","dairy = -products","beef","pork","poultry","food output not keeping pace with = -Population growth"]). -bgfact("Kingman Reef","LandBounderies",[]). -bgfact("Kingman Reef","NaturalResources",["none"]). -bgfact("Kingman Reef","Capital",["none; administered from Washington, = -DC"]). -bgfact("Kiribati","LandBounderies",[]). -bgfact("Kiribati","NaturalResources",["phosphate"]). -bgfact("Kiribati","Population",["77853"]). -bgfact("Kiribati","Capital",["Tarawa"]). -bgfact("Kiribati","MemberOf",["ACP","AsDB","C","ESCAP","IBRD","ICAO","ICF= -TU","IDA","IFC","IMF","INTELSAT","INTERPOL","ITU","SPARTECA","SPC","SPF",= -"UNESCO","UPU","WHO"]). -bgfact("Kiribati","ExportCommodities",["copra","seaweed","fish"]). -bgfact("Kiribati","ExportPartners",["Denmark","Fiji","US"]). -bgfact("Kiribati","ImportCommodities",["foodstuffs","machinery and = -equipment","miscellaneous manubgfactured goods","fuel"]). -bgfact("Kiribati","ImportPartners",["Australia","Japan","Fiji","NZ","US"]= -). -bgfact("Kiribati","Industries",["fishing","handicrafts"]). -bgfact("Kiribati","Agriculture",["food taro","breadfruit","sweet = -potatoes","not self-sufficient in food"]). -bgfact("Korea, North","LandBounderies",["China","South = -Korea","Russia"]). -bgfact("Korea, = -North","NaturalResources",["coal","lead","tungsten","zinc","graphite","ma= -gnesite","iron = -ore","copper","gold","pyrites","salt","fluorspar","hydropower"]). -bgfact("Korea, North","Population",["23066573"]). -bgfact("Korea, North","Capital",["P'yongyang"]). -bgfact("Korea, = -North","MemberOf",["ESCAP","FAO","G-77","ICAO","IFAD","IMF","IOC","ISO","= -ITU","LORCS","NAM","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WIP= -O","WMO","WTO"]). -bgfact("Korea, North","ExportCommodities",["minerals","metallurgical = -products","agricultural and fishery products","manubgfactures"]). -bgfact("Korea, North","ExportPartners",["China","Japan","Russia","South = -Korea","Germany","Hong Kong","Mexico"]). -bgfact("Korea, North","ImportCommodities",["petroleum","grain","coking = -coal","machinery and equipment","consumer goods"]). -bgfact("Korea, North","ImportPartners",["China","Russia","Japan","Hong = -Kong","Germany","Singapore"]). -bgfact("Korea, North","Industries",["machine building","military = -products","electric = -power","chemicals","mining","metallurgy","textiles","food processing"]). -bgfact("Korea, North","Agriculture",["principal = -rice","corn","potatoes","soybeans","livestock and livestock = -cattle","hogs","pork","not self-sufficient in grain"]). -bgfact("Korea, South","LandBounderies",["North Korea"]). -bgfact("Korea, = -South","NaturalResources",["coal","tungsten","graphite","molybdenum","lea= -d","hydropower"]). -bgfact("Korea, South","Population",["45082880"]). -bgfact("Korea, South","Capital",["Seoul"]). -bgfact("Korea, = -South","MemberOf",["AfDB","APEC","AsDB","CCC","COCOM","UN","UNCTAD","UNES= -CO","UNIDO","UNOSOM","UPU","WHO","WIPO","WMO","WTO"]). -bgfact("Korea, South","ExportCommodities",["electronic and electrical = -equipment","machinery","steel","automobiles","ships","textiles","clothing= -","footwear","fish"]). -bgfact("Korea, South","ExportPartners",["US","Japan","EC"]). -bgfact("Korea, South","ImportCommodities",["machinery","electronics and = -electronic equipment","oil","steel","transport = -equipment","textiles","organic chemicals","grains"]). -bgfact("Korea, South","ImportPartners",["Japan","US","EC"]). -bgfact("Korea, South","Industries",["electronics","automobile = -production","chemicals","shipbuilding","steel","textiles","clothing","foo= -twear","food processing"]). -bgfact("Korea, South","Agriculture",["principal rice","root = -crops","barley","vegetables","livestock and livestock = -cattle","hogs","chickens","milk","self-sufficient in food","fish catch = -of million metric tons","seventh-largest in world"]). -bgfact("Kuwait","LandBounderies",["Iraq","Saudi Arabia"]). -bgfact("Kuwait","NaturalResources",["petroleum","fish","shrimp","natural = -gas"]). -bgfact("Kuwait","Population",["1819322"]). -bgfact("Kuwait","Capital",["Kuwait"]). -bgfact("Kuwait","MemberOf",["ABEDA","AfDB","AFESD","AL","AMF","BDEAC","CA= -EU","ESCWA","FAO","G-77","GATT","GCC","IAEA","IBRD","ICAO","ICC","IDA","I= -DB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC"= -,"ISO","ITU","LORCS","NAM","OAPEC","OIC","OPEC","UN","UNCTAD","UNESCO","U= -NIDO","UPU","WFTU","WHO","WMO","WTO"]). -bgfact("Kuwait","ExportCommodities",["oil"]). -bgfact("Kuwait","ExportPartners",["France","Italy","Japan","UK"]). -bgfact("Kuwait","ImportCommodities",["food","construction = -materials","vehicles and parts","clothing"]). -bgfact("Kuwait","ImportPartners",["US","Japan","UK","Canada"]). -bgfact("Kuwait","Industries",["petroleum","petrochemicals","desalination"= -,"food processing","building materials","salt","construction"]). -bgfact("Kuwait","Agriculture",["about of potable water must be = -distilled or imported"]). -bgfact("Kyrgyzstan","LandBounderies",["China","Kazakhstan","Tajikistan","= -Uzbekistan"]). -bgfact("Kyrgyzstan","NaturalResources",["locally exploitable = -coal","mercury","bismuth","lead","natural gas","oil","nepheline","rare = -earth metals","mercury","bismuth","gold","lead","zinc","hydroelectric = -power"]). -bgfact("Kyrgyzstan","Population",["4698108"]). -bgfact("Kyrgyzstan","Capital",["Bishkek"]). -bgfact("Kyrgyzstan","MemberOf",["CIS","CSCE","EBRD","ECE","ECO","ESCAP","= -IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IOC","NACC","OIC","PCA= -","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO"]). -bgfact("Kyrgyzstan","ExportCommodities",["wool","chemicals","cotton","fer= -rous and nonferrous metals","shoes","machinery","tobacco"]). -bgfact("Kyrgyzstan","ExportPartners",["Russia","Ukraine","Uzbekistan","Ka= -zakhstan"]). -bgfact("Kyrgyzstan","ImportCommodities",["grain","lumber","industrial = -products","ferrous metals","fuel","machinery","textiles","footwear"]). -bgfact("Kyrgyzstan","ImportPartners",[]). -bgfact("Kyrgyzstan","Industries",["small = -machinery","textiles","food-processing = -Industries","cement","shoes","sawn = -logs","refrigerators","furniture","electric motors","gold"]). -bgfact("Kyrgyzstan","Agriculture",["wool","tobacco","cotton","livestock",= -"vegetables","meat","grapes","fruits and = -berries","eggs","milk","potatoes"]). -bgfact("Laos","LandBounderies",["Burma","Cambodia","China","Thailand","Vi= -etnam"]). -bgfact("Laos","NaturalResources",["timber","hydropower","gypsum","tin","g= -old","gemstones"]). -bgfact("Laos","Population",["4701654"]). -bgfact("Laos","Capital",["Vientiane"]). -bgfact("Laos","MemberOf",["ACCT","AsDB","ASEAN","INTERPOL","IOC","ITU","L= -ORCS","NAM","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WMO"= -,"WTO"]). -bgfact("Laos","ExportCommodities",["electricity","wood = -products","coffee","tin"]). -bgfact("Laos","ExportPartners",["Thailand","Malaysia","Vietnam","FSU","US= -","China"]). -bgfact("Laos","ImportCommodities",["food","fuel oil","consumer = -goods","manubgfactures"]). -bgfact("Laos","ImportPartners",["Thailand","FSU","Japan","France","Vietna= -m","China"]). -bgfact("Laos","Industries",["tin and gypsum mining","timber","electric = -power","agricultural processing","construction"]). -bgfact("Laos","Agriculture",["principal rice","sweet = -potatoes","vegetables","corn","coffee","sugarcane","livestock - = -buffaloes","hogs","cattle","poultry"]). -bgfact("Latvia","LandBounderies",["Belarus","Estonia","Lithuania","Russia= -"]). -bgfact("Latvia","NaturalResources",["amber","peat","limestone","dolomite"= -]). -bgfact("Latvia","Population",["2749211"]). -bgfact("Latvia","Capital",["Riga"]). -bgfact("Latvia","MemberOf",["BIS","CBSS","CCC","CE","ITU","LORCS","NACC",= -"UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). -bgfact("Latvia","ExportCommodities",["oil products","timber","ferrous = -metals","dairy products","furniture","textiles"]). -bgfact("Latvia","ExportPartners",["Russia","Western Europe"]). -bgfact("Latvia","ImportCommodities",["fuels","cars","ferrous = -metals","chemicals"]). -bgfact("Latvia","ImportPartners",["Russia","Western Europe"]). -bgfact("Latvia","Industries",["dependent on imports for energy","raw = -materials","produces buses","vans","street and railroad cars","synthetic = -fibers","agricultural machinery","fertilizers","washing = -machines","radios","electronics","pharmaceuticals","processed = -foods","textiles"]). -bgfact("Latvia","Agriculture",["meat","milk","eggs","grain","sugar = -beets","potatoes","fishing and fish packing"]). -bgfact("Lebanon","LandBounderies",["Israel","Syria"]). -bgfact("Lebanon","NaturalResources",["limestone","iron = -ore","salt","water-surplus state in a water-deficit region"]). -bgfact("Lebanon","Population",["3620395"]). -bgfact("Lebanon","Capital",["Beirut"]). -bgfact("Lebanon","MemberOf",["ABEDA","ACCT","AFESD","AL","AMF","CCC","ESC= -WA","FAO","G-24","G-77","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IDB","I= -FAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","N= -AM","OIC","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNRWA","UPU","WFT= -U","WHO","WIPO","WMO","WTO"]). -bgfact("Lebanon","ExportCommodities",["agricultural = -products","chemicals","textiles","precious and semiprecious metals and = -jewelry","metals and metal products"]). -bgfact("Lebanon","ExportPartners",["Saudi = -Arabia","Switzerland","Jordan","Kuwait","US"]). -bgfact("Lebanon","ImportCommodities",["Consumer goods","machinery and = -transport equipment","petroleum products"]). -bgfact("Lebanon","ImportPartners",["Italy","France","US","Turkey","Saudi = -Arabia"]). -bgfact("Lebanon","Industries",["banking","food = -processing","textiles","cement","oil = -refining","chemicals","jewelry","some metal fabricating"]). -bgfact("Lebanon","Agriculture",["principal citrus = -fruits","vegetables","potatoes","olives","tobacco","hemp","sheep","not = -self-sufficient in grain"]). -bgfact("Lesotho","LandBounderies",["South Africa"]). -bgfact("Lesotho","NaturalResources",["water","agricultural and grazing = -land"]). -bgfact("Lesotho","Population",["1944493"]). -bgfact("Lesotho","Capital",["Maseru"]). -bgfact("Lesotho","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","G-77","G= -ATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","INTELSAT","INT= -ERPOL","IOC","ITU","LORCS","NAM","OAU","SACU","SADC","UN","UNCTAD","UNESC= -O","UNHCR","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Lesotho","ExportCommodities",["wool","mohair","wheat","cattle","p= -eas","beans","corn","hides","skins","baskets"]). -bgfact("Lesotho","ExportPartners",["South Africa","EC","North and South = -America"]). -bgfact("Lesotho","ImportCommodities",["mainly corn","building = -materials","clothing","vehicles","machinery","medicines","petroleum"]). -bgfact("Lesotho","ImportPartners",["South Africa","Asia","EC"]). -bgfact("Lesotho","Industries",["food","beverages","textiles","handicrafts= -","tourism"]). -bgfact("Lesotho","Agriculture",["exceedingly primitive","principal crops = -corn","wheat","pulses","sorghum","barley"]). -bgfact("Liberia","LandBounderies",["Guinea","Cote d'Ivoire","Sierra = -Leone"]). -bgfact("Liberia","NaturalResources",["iron = -ore","timber","diamonds","gold"]). -bgfact("Liberia","Population",["2972766"]). -bgfact("Liberia","Capital",["Monrovia"]). -bgfact("Liberia","MemberOf",["ACP","AfDB","CCC","ECA","ECOWAS","FAO","G-7= -7","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INM= -ARSAT","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","UN","UNCTAD= -","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO"]). -bgfact("Liberia","ExportCommodities",["iron = -ore","rubber","timber","coffee"]). -bgfact("Liberia","ExportPartners",["US","EC","Netherlands"]). -bgfact("Liberia","ImportCommodities",["rice","mineral = -fuels","chemicals","machinery","transportation equipment"]). -bgfact("Liberia","ImportPartners",["US","EC","Japan","China","Netherlands= -","ECOWAS"]). -bgfact("Liberia","Industries",["rubber processing","food = -processing","construction materials","furniture","palm oil = -processing","mining"]). -bgfact("Liberia","Agriculture",["principal = -rubber","timber","coffee","cocoa","rice","cassava","palm = -oil","sugarcane","bananas","sheep","not self-sufficient in = -food","imports of rice consumption"]). -bgfact("Libya","LandBounderies",["Algeria","Chad","Egypt","Niger","Sudan"= -,"Tunisia"]). -bgfact("Libya","NaturalResources",["petroleum","natural gas","gypsum"]). -bgfact("Libya","Population",["5057392"]). -bgfact("Libya","Capital",["Tripoli"]). -bgfact("Libya","MemberOf",["ABEDA","AfDB","AFESD","AL","AMF","AMU","CAEU"= -,"CCC","ECA","FAO","G-77","IAEA","IBRD","ICAO","IDA","IDB","IFAD","IFC","= -ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","O= -APEC","OAU","OIC","OPEC","UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO= -","WMO","WTO"]). -bgfact("Libya","ExportCommodities",["crude","refined petroleum = -products","natural gas"]). -bgfact("Libya","ExportPartners",["Italy","Germany","Spain","France","UK",= -"Turkey","Greece","Egypt"]). -bgfact("Libya","ImportCommodities",["machinery","transport = -equipment","food","manubgfactured goods"]). -bgfact("Libya","ImportPartners",["Italy","Germany","UK","France","Spain",= -"Turkey","Tunisia","Eastern Europe"]). -bgfact("Libya","Industries",["petroleum","food = -processing","textiles","handicrafts","cement"]). -bgfact("Libya","Agriculture",["wheat","barley","olives","dates","citrus = -fruits","of food is imported"]). -bgfact("Liechtenstein","LandBounderies",["Austria","Switzerland"]). -bgfact("Liechtenstein","NaturalResources",["hydroelectric potential"]). -bgfact("Liechtenstein","Population",["30281"]). -bgfact("Liechtenstein","Capital",["Vaduz"]). -bgfact("Liechtenstein","MemberOf",["CE","CSCE","EBRD","ECE","EFTA","IAEA"= -,"INTELSAT","INTERPOL","IOC","ITU","LORCS","UN","UNCTAD","UPU","WCL","WIP= -O"]). -bgfact("Liechtenstein","ExportCommodities",["small specialty = -machinery","dental products","stamps","hardware","pottery"]). -bgfact("Liechtenstein","ExportPartners",["EFTA countries"]). -bgfact("Liechtenstein","ImportCommodities",["machinery","metal = -goods","textiles","foodstuffs","motor vehicles"]). -bgfact("Liechtenstein","ImportPartners",["NA"]). -bgfact("Liechtenstein","Industries",["electronics","metal = -manubgfacturing","textiles","ceramics","pharmaceuticals","food = -products","precision instruments","tourism"]). -bgfact("Liechtenstein","Agriculture",["livestock","vegetables","corn","wh= -eat","potatoes","grapes"]). -bgfact("Lithuania","LandBounderies",["Belarus","Latvia","Poland","Russia"= -]). -bgfact("Lithuania","NaturalResources",["peat"]). -bgfact("Lithuania","Population",["3848389"]). -bgfact("Lithuania","Capital",["Vilnius"]). -bgfact("Lithuania","MemberOf",["BIS","CBSS","CCC","CE","CSCE","EBRD","ECE= -","FAO","IBRD","ICAO","ILO","IMF","INTELSAT","ITU","LORCS","NACC","UN","U= -NCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). -bgfact("Lithuania","ExportCommodities",["electronics","petroleum = -products","food","chemicals"]). -bgfact("Lithuania","ExportPartners",["Russia","Ukraine","West"]). -bgfact("Lithuania","ImportCommodities",["oil","machinery","chemicals","gr= -ain NA%"]). -bgfact("Lithuania","ImportPartners",["Russia","Belarus","West"]). -bgfact("Lithuania","Industries",["shipbuilding","furniture = -making","textiles","food processing","fertilizers","agricultural = -machinery","optical equipment","electronic components","computers"]). -bgfact("Lithuania","Agriculture",["sugar","grain","potatoes","sugar = -beets","vegetables","meat","milk","dairy products","eggs","most = -developed are the livestock and dairy branches","net exporter of = -meat","milk"]). -bgfact("Luxembourg","LandBounderies",["Belgium","France","Germany"]). -bgfact("Luxembourg","NaturalResources",["iron ore"]). -bgfact("Luxembourg","Population",["401900"]). -bgfact("Luxembourg","Capital",["Luxembourg"]). -bgfact("Luxembourg","MemberOf",["ACCT","Australia = -Group","Benelux","CCC","CE","COCOM","CSCE","EBRD","EC","ECE","EIB","FAO",= -"GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IEA","IFAD","IFC","ILO",= -"IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ITU","LORCS","MTCR","NACC"= -,"NATO","NEA","NSG","OECD","PCA","UN","UNCTAD","UNESCO","UNIDO","UNPROFOR= -","UPU","WCL","WEU","WHO","WIPO","WMO","ZC"]). -bgfact("Luxembourg","ExportCommodities",["finished steel = -products","chemicals","rubber products","glass","aluminum"]). -bgfact("Luxembourg","ExportPartners",["EC","US"]). -bgfact("Luxembourg","ImportCommodities",["minerals","metals","foodstuffs"= -,"quality consumer goods"]). -bgfact("Luxembourg","ImportPartners",["Belgium","FRG","France","US"]). -bgfact("Luxembourg","Industries",["banking","iron and steel","food = -processing","chemicals","metal = -products","engineering","tires","glass","aluminum"]). -bgfact("Luxembourg","Agriculture",["principal = -barley","oats","potatoes","wheat","fruits","cattle raising = -widespread"]). -bgfact("Macau","LandBounderies",["China"]). -bgfact("Macau","NaturalResources",["negligible"]). -bgfact("Macau","Population",["484557"]). -bgfact("Macau","Capital",["Macau"]). -bgfact("Macau","MemberOf",["ESCAP"]). -bgfact("Macau","ExportCommodities",["textiles","clothing","toys"]). -bgfact("Macau","ExportPartners",["US","Hong = -Kong","Germany","China","France"]). -bgfact("Macau","ImportCommodities",["raw = -materials","foodstuffs","Capital goods"]). -bgfact("Macau","ImportPartners",["Hong Kong","China","Japan"]). -bgfact("Macau","Industries",["clothing","textiles","toys","plastic = -products","furniture","tourism"]). -bgfact("Macau","Agriculture",["rice","food shortages - = -rice","vegetables","depends mostly on imports for food requirements"]). -bgfact("Madagascar","LandBounderies",[]). -bgfact("Madagascar","NaturalResources",["graphite","chromite","coal","bau= -xite","salt","quartz","tar sands","semiprecious stones","mica","fish"]). -bgfact("Madagascar","Population",["13427758"]). -bgfact("Madagascar","Capital",["Antananarivo"]). -bgfact("Madagascar","MemberOf",["ACCT","ACP","AfDB","CCC","ECA","FAO","G-= -77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","IFC","ILO","I= -MF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","OAU","UN= -","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO"= -,"WTO"]). -bgfact("Madagascar","ExportCommodities",["coffee","vanilla","cloves","she= -llfish","sugar","petroleum products"]). -bgfact("Madagascar","ExportPartners",["France","Japan","Italy","Germany",= -"US"]). -bgfact("Madagascar","ImportCommodities",["intermediate = -manubgfactures","Capital goods","petroleum","consumer goods","food"]). -bgfact("Madagascar","ImportPartners",["France","Germany","UK","US"]). -bgfact("Madagascar","Industries",["agricultural = -processing","cement","automobile assembly plant","paper","petroleum"]). -bgfact("Madagascar","Agriculture",["coffee","vanilla","sugarcane","cloves= -","food rice","cassava","beans","bananas","almost self-sufficient in = -rice"]). -bgfact("Malawi","LandBounderies",["Mozambique","Tanzania","Zambia"]). -bgfact("Malawi","NaturalResources",["limestone","unexploited deposits of = -uranium","coal"]). -bgfact("Malawi","Population",["9732409"]). -bgfact("Malawi","Capital",["Lilongwe"]). -bgfact("Malawi","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","G-77","GA= -TT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT"= -,"INTERPOL","IOC","ISO","ITU","LORCS","NAM","OAU","SADC","UN","UNCTAD","U= -NESCO","UNIDO","UPU","WHO","WIPO","WMO","WTO"]). -bgfact("Malawi","ExportCommodities",["tobacco","tea","sugar","coffee","pe= -anuts","wood products"]). -bgfact("Malawi","ExportPartners",["US","UK","Zambia","South = -Africa","Germany"]). -bgfact("Malawi","ImportCommodities",["food","petroleum = -products","semimanubgfactures","consumer goods","transportation = -equipment"]). -bgfact("Malawi","ImportPartners",["South = -Africa","Japan","US","UK","Zimbabwe"]). -bgfact("Malawi","Industries",["agricultural = -processing","sawmilling","cement","consumer goods"]). -bgfact("Malawi","Agriculture",["tobacco","sugarcane","cotton","tea","subs= -istence potatoes","cassava","sorghum","livestock - cattle","goats"]). -bgfact("Malaysia","LandBounderies",["Brunei","Indonesia","Thailand"]). -bgfact("Malaysia","NaturalResources",["tin","petroleum","timber","copper"= -,"iron ore","natural gas","bauxite"]). -bgfact("Malaysia","Population",["19283157"]). -bgfact("Malaysia","Capital",["Kuala Lumpur"]). -bgfact("Malaysia","MemberOf",["APEC","AsDB","ASEAN","C","CCC","CP","ESCAP= -","FAO","G-15","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IF= -AD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO",= -"ITU","LORCS","MINURSO","NAM","OIC","UN","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNIKOM","UNOMOZ","UNOSOM","UNTAC","UPU","W= -CL","WHO","WIPO","WMO","WTO"]). -bgfact("Malaysia","ExportCommodities",["electronic equipment","petroleum = -and petroleum products","palm oil","wood and wood = -products","rubber","textiles"]). -bgfact("Malaysia","ExportPartners",["Singapore","US","Japan","UK","German= -y","Thailand"]). -bgfact("Malaysia","ImportCommodities",["machinery and = -equipment","chemicals","food","petroleum products"]). -bgfact("Malaysia","ImportPartners",["Japan","Singapore","US","Taiwan","Ge= -rmany","UK","Australia"]). -bgfact("Malaysia","Industries",[]). -bgfact("Malaysia","Agriculture",["accounts for of GDP"]). -bgfact("Maldives","LandBounderies",[]). -bgfact("Maldives","NaturalResources",["fish"]). -bgfact("Maldives","Population",["252077"]). -bgfact("Maldives","Capital",["Male"]). -bgfact("Maldives","MemberOf",["AsDB","C","CP","ESCAP","FAO","G-77","GATT"= -,"IBRD","ICAO","IDA","IDB","IFAD","IFC","IMF","IMO","INTELSAT","INTERPOL"= -,"IOC","ITU","NAM","OIC","SAARC","UN","UNCTAD","UNESCO","UNIDO","UPU","WH= -O","WIPO","WMO","WTO"]). -bgfact("Maldives","ExportCommodities",["fish","clothing"]). -bgfact("Maldives","ExportPartners",["US","UK","Sri Lanka"]). -bgfact("Maldives","ImportCommodities",["consumer goods","intermediate = -and Capital goods","petroleum products"]). -bgfact("Maldives","ImportPartners",["Singapore","Germany","Sri = -Lanka","India"]). -bgfact("Maldives","Industries",["fishing and fish = -processing","tourism","shipping","boat building","some coconut = -processing","garments","woven mats","coir","handicrafts"]). -bgfact("Maldives","Agriculture",["accounts for almost of GDP"]). -bgfact("Mali","LandBounderies",["Algeria","Burkina","Guinea","Cote = -d'Ivoire","Mauritania","Niger","Senegal"]). -bgfact("Mali","NaturalResources",["gold","phosphates","kaolin","salt","li= -mestone","uranium","bauxite","iron ore","manganese","tin"]). -bgfact("Mali","Population",["9112950"]). -bgfact("Mali","Capital",["Bamako"]). -bgfact("Mali","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWAS"= -,"FAO","FZ","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IFAD"= -,"IFC","ILO","IMF","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM",= -"OAU","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WHO","WIPO= -","WMO","WTO"]). -bgfact("Mali","ExportCommodities",["cotton","livestock","gold"]). -bgfact("Mali","ExportPartners",["mostly franc zone and Western = -Europe"]). -bgfact("Mali","ImportCommodities",["machinery and = -equipment","foodstuffs","construction = -materials","petroleum","textiles"]). -bgfact("Mali","ImportPartners",["mostly franc zone and Western = -Europe"]). -bgfact("Mali","Industries",["small local consumer goods and = -processing","construction","phosphate","gold","fishing"]). -bgfact("Mali","Agriculture",["rice","corn","vegetables","livestock - = -cattle","sheep","goats"]). -bgfact("Malta","LandBounderies",[]). -bgfact("Malta","NaturalResources",["limestone","salt"]). -bgfact("Malta","Population",["366767"]). -bgfact("Malta","Capital",["Valletta"]). -bgfact("Malta","MemberOf",["C","CCC","CE","CSCE","EBRD","ECE","FAO","G-77= -","GATT","IBRD","ICAO","ICFTU","IFAD","ILO","IMF","IMO","INMARSAT","INTEL= -SAT","ITU","NAM","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","= -WIPO","WMO","WTO"]). -bgfact("Malta","ExportCommodities",["machinery and transport = -equipment","clothing and footware","printed matter"]). -bgfact("Malta","ExportPartners",["Italy","Germany","UK"]). -bgfact("Malta","ImportCommodities",["food","petroleum","machinery and = -semimanubgfactured goods"]). -bgfact("Malta","ImportPartners",["Italy","UK","Germany","US"]). -bgfact("Malta","Industries",["tourism","electronics","ship repair = -yard","construction","food = -manubgfacturing","textiles","footwear","clothing","beverages","tobacco"])= -. -bgfact("Malta","Agriculture",["overall","main = -potatoes","cauliflower","grapes","wheat","barley","tomatoes","citrus","cu= -t flowers","green peppers","hogs","poultry","generally adequate supplies = -of vegetables","poultry","milk","seasonal or periodic shortages in = -grain","animal fodder","fruits"]). -bgfact("Man, Isle of","LandBounderies",[]). -bgfact("Man, Isle of","NaturalResources",["lead","iron ore"]). -bgfact("Man, Isle of","Population",["72017"]). -bgfact("Man, Isle of","Capital",["Douglas"]). -bgfact("Man, Isle of","MemberOf",["none"]). -bgfact("Man, Isle of","ExportCommodities",["tweeds","herring","processed = -shellfish","meat"]). -bgfact("Man, Isle of","ExportPartners",["UK"]). -bgfact("Man, Isle = -of","ImportCommodities",["timber","fertilizers","fish"]). -bgfact("Man, Isle of","ImportPartners",["UK"]). -bgfact("Man, Isle of","Industries",["financial services","light = -manubgfacturing","tourism"]). -bgfact("Man, Isle = -of","Agriculture",["cattle","sheep","pigs","poultry"]). -bgfact("Marshall Islands","LandBounderies",[]). -bgfact("Marshall Islands","NaturalResources",["phosphate = -deposits","marine products","deep seabed minerals"]). -bgfact("Marshall Islands","Population",["54031"]). -bgfact("Marshall Islands","Capital",["Majuro"]). -bgfact("Marshall = -Islands","MemberOf",["AsDB","ESCAP","IBRD","ICAO","IDA","IFC","IMF","INTE= -LSAT","INTERPOL","SPARTECA","SPC","SPF","UN","UNCTAD","WHO"]). -bgfact("Marshall Islands","ExportCommodities",["coconut = -oil","fish","live animals","trichus shells"]). -bgfact("Marshall Islands","ExportPartners",["US","Japan","Australia"]). -bgfact("Marshall Islands","ImportCommodities",["foodstuffs","machinery = -and equipment","beverages and tobacco","fuels"]). -bgfact("Marshall Islands","ImportPartners",["US","Japan","Australia"]). -bgfact("Marshall Islands","Industries",["copra","fish","craft items from = -shell","wood","offshore banking"]). -bgfact("Marshall = -Islands","Agriculture",["coconuts","cacao","taro","breadfruit","fruits","= -pigs","chickens"]). -bgfact("Martinique","LandBounderies",[]). -bgfact("Martinique","NaturalResources",["coastal scenery and = -beaches","cultivable land"]). -bgfact("Martinique","Population",["392362"]). -bgfact("Martinique","Capital",["Fort-de-France"]). -bgfact("Martinique","MemberOf",["FZ","WCL","WFTU"]). -bgfact("Martinique","ExportCommodities",["refined petroleum = -products","bananas","rum","pineapples"]). -bgfact("Martinique","ExportPartners",["France","Guadeloupe","French = -Guiana"]). -bgfact("Martinique","ImportCommodities",["petroleum = -products","crude","foodstuffs","construction materials","vehicles"]). -bgfact("Martinique","ImportPartners",["France","UK","Italy","Germany","Ja= -pan","US"]). -bgfact("Martinique","Industries",["construction","rum","cement","oil = -refining","sugar","tourism"]). -bgfact("Martinique","Agriculture",["including fishing and = -forestry","principal = -pineapples","avocados","bananas","flowers","vegetables","dependent on = -imported food","particularly meat and vegetables"]). -bgfact("Mauritania","LandBounderies",["Algeria","Mali","Senegal","Western= - Sahara"]). -bgfact("Mauritania","NaturalResources",["iron = -ore","gypsum","fish","copper","phosphate"]). -bgfact("Mauritania","Population",["2192777"]). -bgfact("Mauritania","Capital",["Nouakchott"]). -bgfact("Mauritania","MemberOf",["ABEDA","ACCT","ACP","AfDB","AFESD","AL",= -"AMF","AMU","CAEU","CCC","CEAO","ECA","ECOWAS","FAO","G-77","GATT","IBRD"= -,"ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL",= -"IOC","ITU","LORCS","NAM","OAU","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU= -","WHO","WIPO","WMO","WTO"]). -bgfact("Mauritania","ExportCommodities",["iron ore","fish and fish = -products"]). -bgfact("Mauritania","ExportPartners",["Japan","Italy","Belgium","Luxembou= -rg"]). -bgfact("Mauritania","ImportCommodities",["foodstuffs","consumer = -goods","petroleum products","Capital goods"]). -bgfact("Mauritania","ImportPartners",["Algeria","China","US","France","Ge= -rmany","Spain","Italy"]). -bgfact("Mauritania","Industries",["fish processing","mining of iron ore = -and gypsum"]). -bgfact("Mauritania","Agriculture",["dates","millet","sorghum","large = -food deficit in years of drought"]). -bgfact("Mauritius","LandBounderies",[]). -bgfact("Mauritius","NaturalResources",["arable land","fish"]). -bgfact("Mauritius","Population",["1116923"]). -bgfact("Mauritius","Capital",["Port Louis"]). -bgfact("Mauritius","MemberOf",["ACCT","ACP","AfDB","C","CCC","ECA","FAO",= -"G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF"= -,"INMARSAT","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","= -OAU","PCA","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO"= -,"WMO","WTO"]). -bgfact("Mauritius","ExportCommodities",["textiles","sugar","light = -manubgfactures"]). -bgfact("Mauritius","ExportPartners",["EC and US have preferential = -treatment","EU","US"]). -bgfact("Mauritius","ImportCommodities",["manubgfactured goods","Capital = -equipment","foodstuffs","petroleum products","chemicals"]). -bgfact("Mauritius","ImportPartners",["EC","US","South Africa","Japan"]). -bgfact("Mauritius","Industries",["food processing","textiles","wearing = -apparel","chemicals","metal products","transport = -equipment","nonelectrical machinery","tourism"]). -bgfact("Mauritius","Agriculture",["corn","potatoes","bananas","pulses","c= -attle","goats","net food importer","especially rice and fish"]). -bgfact("Mayotte","LandBounderies",[]). -bgfact("Mayotte","NaturalResources",["negligible"]). -bgfact("Mayotte","Population",["93468"]). -bgfact("Mayotte","Capital",["Mamoutzou"]). -bgfact("Mayotte","MemberOf",["FZ"]). -bgfact("Mayotte","ExportCommodities",["ylang-ylang","vanilla"]). -bgfact("Mayotte","ExportPartners",["France","Comoros","Reunion"]). -bgfact("Mayotte","ImportCommodities",["building = -materials","transportation equipment","rice","clothing","flour"]). -bgfact("Mayotte","ImportPartners",["France","Kenya","South = -Africa","Pakistan"]). -bgfact("Mayotte","Industries",["newly created lobster and shrimp = -industry"]). -bgfact("Mayotte","Agriculture",["vanilla","ylang-ylang","coffee","imports= - major share of food needs"]). -bgfact("Mexico","LandBounderies",["Belize","Guatemala","US"]). -bgfact("Mexico","NaturalResources",["petroleum","silver","copper","gold",= -"lead","zinc","natural gas","timber"]). -bgfact("Mexico","Population",["92202199"]). -bgfact("Mexico","Capital",["Mexico"]). -bgfact("Mexico","MemberOf",["AG","OAS","OECD","ONUSAL","OPANAL","PCA","RG= -","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTI","WHO","WIPO","WMO","W= -TO"]). -bgfact("Mexico","ExportCommodities",["crude","oil = -products","coffee","silver","engines","motor = -vehicles","cotton","consumer electronics"]). -bgfact("Mexico","ExportPartners",["US","Japan","EC"]). -bgfact("Mexico","ImportCommodities",["metal-working machines","steel = -mill products","agricultural machinery","electrical equipment","car = -parts for assembly","repair parts for motor vehicles","aircraft"]). -bgfact("Mexico","ImportPartners",["US","Japan","EC"]). -bgfact("Mexico","Industries",["food and = -beverages","tobacco","chemicals","iron and = -steel","petroleum","mining","textiles","clothing","motor = -vehicles","consumer durables","tourism"]). -bgfact("Mexico","Agriculture",["major food = -corn","wheat","rice","cotton","coffee","fruit","tomatoes"]). -bgfact("Micronesia, Federated States of","LandBounderies",[]). -bgfact("Micronesia, Federated States = -of","NaturalResources",["forests","marine products","deep-seabed = -minerals"]). -bgfact("Micronesia, Federated States of","Population",["120347"]). -bgfact("Micronesia, Federated States of","Capital",["Kolonia"]). -bgfact("Micronesia, Federated States = -of","MemberOf",["AsDB","ESCAP","IBRD","ICAO","IDA","IFC","IMF","ITU","SPA= -RTECA","SPC","SPF","UN","UNCTAD","WHO"]). -bgfact("Micronesia, Federated States of","ExportCommodities",["copra"]). -bgfact("Micronesia, Federated States of","ExportPartners",["NA"]). -bgfact("Micronesia, Federated States of","ImportCommodities",["NA"]). -bgfact("Micronesia, Federated States of","ImportPartners",["NA"]). -bgfact("Micronesia, Federated States = -of","Industries",["tourism","construction","fish processing","craft = -items from shell","wood"]). -bgfact("Micronesia, Federated States of","Agriculture",["tropical fruits = -and vegetables","coconuts","cassava","sweet = -potatoes","pigs","chickens"]). -bgfact("Midway Islands","LandBounderies",[]). -bgfact("Midway Islands","NaturalResources",["fish","wildlife"]). -bgfact("Midway Islands","Population",["453"]). -bgfact("Midway Islands","Capital",["none; administered from Washington, = -DC"]). -bgfact("Moldova","LandBounderies",["Romania","Ukraine"]). -bgfact("Moldova","NaturalResources",["lignite","phosphorites","gypsum"]).= - -bgfact("Moldova","Population",["4473033"]). -bgfact("Moldova","Capital",["Chisinau"]). -bgfact("Moldova","MemberOf",["BSEC","CE","IOC","ITU","NACC","UN","UNCTAD"= -,"UNESCO","UNIDO","UPU","WHO","WIPO"]). -bgfact("Moldova","ExportCommodities",["foodstuffs","wine","tobacco","text= -iles and footwear","machinery","chemicals"]). -bgfact("Moldova","ExportPartners",["Russia","Kazakhstan","Ukraine","Roman= -ia","Germany"]). -bgfact("Moldova","ImportCommodities",["oil","gas","coal","steel = -machinery","foodstuffs","automobiles"]). -bgfact("Moldova","ImportPartners",["Russia","Ukraine","Uzbekistan","Roman= -ia","Germany"]). -bgfact("Moldova","Industries",["key products are canned = -food","agricultural machinery","foundry equipment","refrigerators and = -freezers","washing machines","hosiery","refined sugar","vegetable = -oil","shoes","textiles"]). -bgfact("Moldova","Agriculture",["products are = -vegetables","fruits","wine","grain","sugar beets","sunflower = -seed","meat","milk","tobacco"]). -bgfact("Monaco","LandBounderies",["France"]). -bgfact("Monaco","NaturalResources",["none"]). -bgfact("Monaco","Population",["31278"]). -bgfact("Monaco","Capital",["Monaco"]). -bgfact("Monaco","MemberOf",["ACCT","CSCE","ECE","IAEA","ICAO","IMF","IMO"= -,"INMARSAT","INTELSAT","INTERPOL","IOC","ITU","LORCS","UN","UNCTAD","UNES= -CO","UPU","WHO","WIPO"]). -bgfact("Monaco","Agriculture",["none"]). -bgfact("Mongolia","LandBounderies",["China","Russia"]). -bgfact("Mongolia","NaturalResources",["oil","coal","copper","molybdenum",= -"tungsten","phosphates","tin","nickel","zinc","wolfram","fluorspar","gold= -"]). -bgfact("Mongolia","Population",["2429762"]). -bgfact("Mongolia","Capital",["Ulaanbaatar"]). -bgfact("Mongolia","MemberOf",["AsDB","CCC","ESCAP","FAO","G-77","IAEA","I= -BRD","ICAO","IDA","IFC","ILO","IMF","INTELSAT","UN","UNCTAD","UNESCO","UN= -IDO","UPU","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Mongolia","ExportCommodities",["copper","livestock","animal = -products","cashmere","wool","hides","fluorspar"]). -bgfact("Mongolia","ExportPartners",["former CMEA = -countries","China","EC"]). -bgfact("Mongolia","ImportCommodities",["machinery and = -equipment","fuels","food products","industrial consumer = -goods","chemicals","building materials","sugar","tea"]). -bgfact("Mongolia","ImportPartners",["USSR","Austria","China"]). -bgfact("Mongolia","Industries",["copper","processing of animal = -products","building materials","food and beverage","mining"]). -bgfact("Mongolia","Agriculture",["wheat","barley","potatoes","forage"]). -bgfact("Montserrat","LandBounderies",[]). -bgfact("Montserrat","NaturalResources",["negligible"]). -bgfact("Montserrat","Population",["12701"]). -bgfact("Montserrat","Capital",["Plymouth"]). -bgfact("Montserrat","MemberOf",["CARICOM","CDB","ECLAC","OECS","WCL"]). -bgfact("Montserrat","ExportCommodities",["electronic parts","plastic = -bags","apparel","hot peppers","live plants","cattle"]). -bgfact("Montserrat","ExportPartners",["NA"]). -bgfact("Montserrat","ImportCommodities",["machinery and transportation = -equipment","foodstuffs","manubgfactured goods","fuels","lubricants"]). -bgfact("Montserrat","ImportPartners",["NA"]). -bgfact("Montserrat","Industries",["light manubgfacturing - = -rum","textiles","electronic appliances"]). -bgfact("Montserrat","Agriculture",["food tomatoes","onions","not = -self-sufficient in food","especially livestock products"]). -bgfact("Morocco","LandBounderies",["Algeria","Western Sahara"]). -bgfact("Morocco","NaturalResources",["phosphates","iron = -ore","manganese","lead","zinc","fish","salt"]). -bgfact("Morocco","Population",["28558635"]). -bgfact("Morocco","Capital",["Rabat"]). -bgfact("Morocco","MemberOf",["ABEDA","ACCT","NAM","OIC","UN","UNAVEM = -II","UNCTAD","UNESCO","UNHCR","UNIDO","UNOSOM","UNTAC","UPU","WHO","WIPO"= -,"WMO","WTO"]). -bgfact("Morocco","ExportCommodities",["food and = -beverages","semiprocessed goods","consumer goods","phosphates"]). -bgfact("Morocco","ExportPartners",["EC","India","Japan","US"]). -bgfact("Morocco","ImportCommodities",["Capital goods","semiprocessed = -goods","raw materials","fuel and lubricants","food and = -beverages","consumer goods"]). -bgfact("Morocco","ImportPartners",["EC","US","Saudi = -Arabia","FSU","Japan"]). -bgfact("Morocco","Industries",["phosphate rock mining and = -processing","food processing","leather = -goods","textiles","construction","tourism"]). -bgfact("Morocco","Agriculture",["accounts for of GDP","of = -employment","barley","wheat","citrus = -fruit","wine","vegetables","olives"]). -bgfact("Mozambique","LandBounderies",["Malawi","South = -Africa","Swaziland","Tanzania","Zambia","Zimbabwe"]). -bgfact("Mozambique","NaturalResources",["coal","titanium"]). -bgfact("Mozambique","Population",["17346280"]). -bgfact("Mozambique","Capital",["Maputo"]). -bgfact("Mozambique","MemberOf",["ACP","AfDB","CCC","ECA","FAO","FLS","G-7= -7","GATT","IBRD","ICAO","IDA","IFAD","IFC","ILO","IMF","INMARSAT","IMO","= -INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","SADC","UN","U= -NCTAD","UNESCO","UNIDO","UPU","WHO","WMO"]). -bgfact("Mozambique","ExportCommodities",["shrimp","cashews","sugar","copr= -a","citrus"]). -bgfact("Mozambique","ExportPartners",["US","Western = -Europe","Germany","Japan"]). -bgfact("Mozambique","ImportCommodities",["food","clothing","farm = -equipment","petroleum"]). -bgfact("Mozambique","ImportPartners",["US","Western Europe","USSR"]). -bgfact("Mozambique","Industries",["food","beverages","chemicals","tobacco= -"]). -bgfact("Mozambique","Agriculture",["cotton","cashew = -nuts","sugarcane","tea","corn","rice","not self-sufficient in food"]). -bgfact("Namibia","LandBounderies",["Angola","Botswana","South = -Africa","Zambia"]). -bgfact("Namibia","NaturalResources",["diamonds","copper","uranium","gold"= -,"lead","tin","lithium","cadmium","zinc","salt","vanadium","natural = -gas","suspected deposits of oil","natural gas","coal","iron ore"]). -bgfact("Namibia","Population",["1595567"]). -bgfact("Namibia","Capital",["Windhoek"]). -bgfact("Namibia","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","FLS","G-= -77","GATT","IAEA","IBRD","ICAO","IFAD","IFC","ILO","IMF","INTELSAT","ITU"= -,"NAM","OAU","SACU","SADC","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","= -WCL","WFTU","WHO","WIPO","WMO"]). -bgfact("Namibia","ExportCommodities",["diamonds","copper","gold","zinc","= -lead","uranium","cattle","processed fish","karakul skins"]). -bgfact("Namibia","ExportPartners",["Switzerland","South = -Africa","Germany","Japan"]). -bgfact("Namibia","ImportCommodities",["foodstuffs","petroleum products = -and fuel","machinery and equipment"]). -bgfact("Namibia","ImportPartners",["South = -Africa","Germany","US","Switzerland"]). -bgfact("Namibia","Industries",["meatpacking","fish processing","dairy = -products","mining"]). -bgfact("Namibia","Agriculture",["millet","sorghum","fish catch = -potential of over million metric tons not being fulfilled","catch = -reaching only","not self-sufficient in food"]). -bgfact("Nauru","LandBounderies",[]). -bgfact("Nauru","NaturalResources",["phosphates"]). -bgfact("Nauru","Population",["10019"]). -bgfact("Nauru","Capital",["Yaren District"]). -bgfact("Nauru","MemberOf",["AsDB","C","INTERPOL","ITU","SPARTECA","SPC","= -SPF","UPU"]). -bgfact("Nauru","ExportCommodities",["phosphates"]). -bgfact("Nauru","ExportPartners",["Australia","NZ"]). -bgfact("Nauru","ImportCommodities",["food","fuel","manubgfactures","build= -ing materials","machinery"]). -bgfact("Nauru","ImportPartners",["Australia","UK","NZ","Japan"]). -bgfact("Nauru","Industries",["phosphate mining","financial = -services","coconut products"]). -bgfact("Nauru","Agriculture",["almost completely dependent on imports = -for food and water"]). -bgfact("Navassa Island","LandBounderies",[]). -bgfact("Navassa Island","NaturalResources",["guano"]). -bgfact("Navassa Island","Capital",["none; administered from Washington, = -DC"]). -bgfact("Nepal","LandBounderies",["China","India"]). -bgfact("Nepal","NaturalResources",["quartz","water","timber","hydroelectr= -ic potential","scenic beauty","small deposits of = -lignite","copper","cobalt","iron ore"]). -bgfact("Nepal","Population",["21041527"]). -bgfact("Nepal","Capital",["Kathmandu"]). -bgfact("Nepal","MemberOf",["AsDB","CCC","CP","ESCAP","FAO","G-77","IBRD",= -"ICAO","IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","= -ISO","ITU","LORCS","NAM","SAARC","UN","UNCTAD","UNESCO","UNIDO","UNIFIL",= -"UNPROFOR","UNTAC","UPU","WFTU","WHO","WMO","WTO"]). -bgfact("Nepal","ExportCommodities",["carpets","clothing","leather = -goods","jute goods","grain"]). -bgfact("Nepal","ExportPartners",["US","Germany","India","UK"]). -bgfact("Nepal","ImportCommodities",["petroleum = -products","fertilizer","machinery"]). -bgfact("Nepal","ImportPartners",["India","Singapore","Japan","Germany"]).= - -bgfact("Nepal","Industries",["small = -rice","jute","sugar","cigarette","textile","carpet","cement","tourism"]).= - -bgfact("Nepal","Agriculture",["farm = -rice","corn","wheat","sugarcane","root crops","milk","not = -self-sufficient in food","particularly in drought years"]). -bgfact("Netherlands","LandBounderies",["Belgium","Germany"]). -bgfact("Netherlands","NaturalResources",["natural = -gas","petroleum","fertile soil"]). -bgfact("Netherlands","Population",["15367928"]). -bgfact("Netherlands","Capital",["Amsterdam; The Hague is the seat of = -government"]). -bgfact("Netherlands","MemberOf",["AfDB","AG","OECD","PCA","UN","UNAVEM = -II","UNCTAD","UNESCO","UNHCR","UNIDO","UNOMUR","UNPROFOR","UNTAC","UNTSO"= -,"UPU","WCL","WEU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Netherlands","ExportCommodities",["metal = -products","chemicals","processed food and tobacco","agricultural = -products"]). -bgfact("Netherlands","ExportPartners",["EC"]). -bgfact("Netherlands","ImportCommodities",["raw materials and = -semifinished products","consumer goods","transportation = -equipment","crude","food products"]). -bgfact("Netherlands","ImportPartners",["EC"]). -bgfact("Netherlands","Industries",["agro Industries","metal and = -engineering products","electrical machinery and = -equipment","chemicals","petroleum","fishing","construction","microelectro= -nics"]). -bgfact("Netherlands","Agriculture",["grains","potatoes","sugar = -beets","fruits","shortages of grain","fats"]). -bgfact("Netherlands Antilles","LandBounderies",[]). -bgfact("Netherlands Antilles","NaturalResources",["phosphates"]). -bgfact("Netherlands Antilles","Population",["185790"]). -bgfact("Netherlands Antilles","Capital",["Willemstad"]). -bgfact("Netherlands Antilles","MemberOf",["CARICOM"]). -bgfact("Netherlands Antilles","ExportCommodities",["petroleum = -products"]). -bgfact("Netherlands = -Antilles","ExportPartners",["US","Brazil","Colombia"]). -bgfact("Netherlands Antilles","ImportCommodities",["crude = -petroleum","food","manubgfactures"]). -bgfact("Netherlands = -Antilles","ImportPartners",["Venezuela","US","Colombia","Netherlands","Ja= -pan"]). -bgfact("Netherlands Antilles","Industries",["tourism"]). -bgfact("Netherlands Antilles","Agriculture",["chief = -aloes","sorghum","peanuts","fresh vegetables","not self-sufficient in = -food"]). -bgfact("New Caledonia","LandBounderies",[]). -bgfact("New = -Caledonia","NaturalResources",["nickel","chrome","iron","cobalt","mangane= -se","silver","gold","lead","copper"]). -bgfact("New Caledonia","Population",["181309"]). -bgfact("New Caledonia","Capital",["Noumea"]). -bgfact("New = -Caledonia","MemberOf",["ESCAP","FZ","ICFTU","SPC","WFTU","WMO"]). -bgfact("New Caledonia","ExportCommodities",["nickel metal","nickel = -ore"]). -bgfact("New Caledonia","ExportPartners",["France","Japan","US"]). -bgfact("New = -Caledonia","ImportCommodities",["foods","fuels","minerals","machines","el= -ectrical equipment"]). -bgfact("New Caledonia","ImportPartners",["France","US","Australia"]). -bgfact("New Caledonia","Industries",["nickel mining and smelting"]). -bgfact("New = -Caledonia","Agriculture",["coffee","corn","wheat","self-sufficient in = -beef"]). -bgfact("New Zealand","LandBounderies",[]). -bgfact("New Zealand","NaturalResources",["natural gas","iron = -ore","sand","coal","timber","hydropower","gold","limestone"]). -bgfact("New Zealand","Population",["3388737"]). -bgfact("New Zealand","Capital",["Wellington"]). -bgfact("New = -Zealand","MemberOf",["ANZUS","OECD","PCA","SPARTECA","SPC","SPF","UN","UN= -AVEM = -II","UNCTAD","UNESCO","UNIDO","UNOSOM","UNPROFOR","UNTAC","UNTSO","UPU","= -WHO","WIPO","WMO"]). -bgfact("New = -Zealand","ExportCommodities",["wool","lamb","mutton","beef","fruit","fish= -","cheese","manubgfactures","chemicals","forestry products"]). -bgfact("New Zealand","ExportPartners",["Australia","Japan","US","South = -Korea"]). -bgfact("New Zealand","ImportCommodities",["petroleum","consumer = -goods","motor vehicles","industrial equipment"]). -bgfact("New = -Zealand","ImportPartners",["Australia","US","Japan","UK","Germany"]). -bgfact("New Zealand","Industries",["food processing","wood and paper = -products","textiles","machinery","transportation equipment","banking and = -insurance","tourism","mining"]). -bgfact("New Zealand","Agriculture",["livestock predominates - = -wool","meat","wheat","barley","potatoes","pulses","fruits","fish catch = -reached a record"]). -bgfact("Nicaragua","LandBounderies",["Costa Rica","Honduras"]). -bgfact("Nicaragua","NaturalResources",["gold","silver","copper","tungsten= -","lead","zinc","timber","fish"]). -bgfact("Nicaragua","Population",["4096689"]). -bgfact("Nicaragua","Capital",["Managua"]). -bgfact("Nicaragua","MemberOf",["BCIE","CACM","ECLAC","FAO","G-77","GATT",= -"IADB","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO",= -"INTELSAT","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","NAM","OAS"= -,"OPANAL","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WFTU"= -,"WHO","WIPO","WMO","WTO"]). -bgfact("Nicaragua","ExportCommodities",["foodstuffs","cotton","coffee","c= -hemicals"]). -bgfact("Nicaragua","ExportPartners",["EC","US","Japan","Costa Rica","El = -Salvador","Mexico"]). -bgfact("Nicaragua","ImportCommodities",["petroleum","food","chemicals","m= -achinery","clothing"]). -bgfact("Nicaragua","ImportPartners",["US","Venezuela","Costa = -Rica","EC","Guatemala"]). -bgfact("Nicaragua","Industries",["food processing","chemicals","metal = -products","textiles","clothing","petroleum refining and = -distribution","beverages","footwear"]). -bgfact("Nicaragua","Agriculture",["export = -coffee","bananas","sugarcane","food rice","corn","cassava","citrus = -fruit","also produces a variety of animal = -beef","veal","pork","poultry","normally self-sufficient in food"]). -bgfact("Niger","LandBounderies",["Algeria","Benin","Burkina","Chad","Liby= -a","Mali","Nigeria"]). -bgfact("Niger","NaturalResources",["uranium","coal","iron = -ore","tin","phosphates"]). -bgfact("Niger","Population",["8971605"]). -bgfact("Niger","Capital",["Niamey"]). -bgfact("Niger","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWAS= -","Entente","FAO","FZ","G-77","GATT","IAEA","IBRD","ICAO","IDA","IDB","IF= -AD","IFC","ILO","IMF","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OA= -U","OIC","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WHO","WIPO","= -WMO","WTO"]). -bgfact("Niger","ExportCommodities",["uranium ore","livestock = -products","cowpeas","onions"]). -bgfact("Niger","ExportPartners",["France","Nigeria","Cote = -d'Ivoire","Italy"]). -bgfact("Niger","ImportCommodities",["primary = -materials","machinery","vehicles and parts","electronic = -equipment","cereals","petroleum products","pharmaceuticals","chemical = -products","foodstuffs"]). -bgfact("Niger","ImportPartners",["Germany","Cote = -d'Ivoire","France","Italy","Nigeria"]). -bgfact("Niger","Industries",["cement","brick","textiles","food = -processing","chemicals","slaughterhouses","uranium mining began in"]). -bgfact("Niger","Agriculture",["cowpeas","cotton","food = -millet","sorghum","cassava","livestock - = -cattle","sheep","self-sufficient in food except in drought years"]). -bgfact("Nigeria","LandBounderies",["Benin","Cameroon","Chad","Niger"]). -bgfact("Nigeria","NaturalResources",["petroleum","tin","columbite","iron = -ore","coal","limestone","lead","zinc","natural gas"]). -bgfact("Nigeria","Population",["98091097"]). -bgfact("Nigeria","Capital",["Abuja"]). -bgfact("Nigeria","MemberOf",["ACP","AfDB","C","CCC","ECA","ECOWAS","FAO",= -"G-15","G-19","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","IDA","IFAD= -","IFC","ILO","IMO","IMF","INMARSAT","INTELSAT","INTERPOL","IOC","ITU","L= -ORCS","MINURSO","NAM","OAU","OIC","OPEC","PCA","UN","UNAVEM","UNCTAD","UN= -ESCO","UNHCR","UNIDO","UNIKOM","UNPROFOR","UNTAC","UPU","WCL","WHO","WMO"= -,"WTO"]). -bgfact("Nigeria","ExportCommodities",["oil","cocoa","rubber"]). -bgfact("Nigeria","ExportPartners",["US","EC"]). -bgfact("Nigeria","ImportCommodities",["machinery and = -equipment","manubgfactured goods","food and animals"]). -bgfact("Nigeria","ImportPartners",["EC","US","Japan"]). -bgfact("Nigeria","Industries",["crude","coal","tin","palm = -oil","peanut","cotton","rubber","wood","textiles","cement","building = -materials","food = -products","footwear","chemical","printing","ceramics","steel"]). -bgfact("Nigeria","Agriculture",["cocoa","peanuts","palm = -oil","corn","rice","sorghum","millet","cassava","livestock - = -cattle","sheep","goats","fishing and forestry resources extensively = -exploited"]). -bgfact("Niue","LandBounderies",[]). -bgfact("Niue","NaturalResources",["fish","arable land"]). -bgfact("Niue","Population",["1906"]). -bgfact("Niue","Capital",["Alofi"]). -bgfact("Niue","MemberOf",["ESCAP","SPARTECA","SPC","SPF"]). -bgfact("Niue","ExportCommodities",["canned coconut = -cream","copra","honey","passion fruit products","pawpaw","root = -crops","limes","footballs","stamps","handicrafts"]). -bgfact("Niue","ExportPartners",["NZ","Fiji","Cook = -Islands","Australia"]). -bgfact("Niue","ImportCommodities",["food","live animals","manubgfactured = -goods","machinery","fuels","lubricants","chemicals","drugs"]). -bgfact("Niue","ImportPartners",["NZ","Fiji","Japan","Western = -Samoa","Australia","US"]). -bgfact("Niue","Industries",["tourist","handicrafts","coconut = -products"]). -bgfact("Niue","Agriculture",["coconuts","passion = -fruit","honey","subsistence = -taro","yams","cassava","pigs","poultry","beef cattle"]). -bgfact("Norfolk Island","LandBounderies",[]). -bgfact("Norfolk Island","NaturalResources",["fish"]). -bgfact("Norfolk Island","Population",["2710"]). -bgfact("Norfolk Island","Capital",["Kingston"]). -bgfact("Norfolk Island","MemberOf",["none"]). -bgfact("Norfolk Island","ExportCommodities",["postage stamps","seeds of = -the Norfolk Island pine and Kentia palm","small quantities of = -avocados"]). -bgfact("Norfolk Island","ExportPartners",["Australia","Pacific = -Islands","NZ","Asia","Europe"]). -bgfact("Norfolk Island","ImportCommodities",["NA"]). -bgfact("Norfolk Island","ImportPartners",["Australia","Pacific = -Islands","NZ","Asia","Europe"]). -bgfact("Norfolk Island","Industries",["tourism"]). -bgfact("Norfolk Island","Agriculture",["Norfolk Island pine = -seed","Kentia palm = -seed","cereals","vegetables","fruit","cattle","poultry"]). -bgfact("Northern Mariana Islands","LandBounderies",[]). -bgfact("Northern Mariana Islands","NaturalResources",["arable = -land","fish"]). -bgfact("Northern Mariana Islands","Population",["49799"]). -bgfact("Northern Mariana Islands","Capital",["Saipan"]). -bgfact("Northern Mariana Islands","MemberOf",["ESCAP","SPC"]). -bgfact("Northern Mariana Islands","ExportCommodities",["manubgfactured = -goods","garments","bread","pastries","concrete blocks","light iron = -work"]). -bgfact("Northern Mariana Islands","ExportPartners",["NA"]). -bgfact("Northern Mariana = -Islands","ImportCommodities",["food","construction","equipment","material= -s"]). -bgfact("Northern Mariana Islands","ImportPartners",["NA"]). -bgfact("Northern Mariana = -Islands","Industries",["tourism","construction","light = -industry","handicrafts"]). -bgfact("Northern Mariana = -Islands","Agriculture",["coconuts","fruits","cattle","vegetables"]). -bgfact("Norway","LandBounderies",["Finland","Sweden","Russia"]). -bgfact("Norway","NaturalResources",["petroleum","copper","natural = -gas","pyrites","nickel","iron = -ore","zinc","lead","fish","timber","hydropower"]). -bgfact("Norway","Population",["4314604"]). -bgfact("Norway","Capital",["Oslo"]). -bgfact("Norway","MemberOf",["AfDB","AsDB","Australia = -Group","BIS","CBSS","CCC","CE","CERN","COCOM","CSCE","EBRD","ECE","EFTA",= -"ESA","FAO","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IEA",= -"IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IO= -M","ISO","ITU","LORCS","MTCR","NACC","NAM","WHO","WIPO","WMO","ZC"]). -bgfact("Norway","ExportCommodities",["petroleum and petroleum = -products","metals and products","fish and fish = -products","chemicals","natural gas","ships"]). -bgfact("Norway","ExportPartners",["EC","Nordic countries","developing = -countries","US","Japan"]). -bgfact("Norway","ImportCommodities",["machinery and = -equipment","manubgfactured consumer goods","foodstuffs"]). -bgfact("Norway","ImportPartners",["EC","Nordic countries","developing = -countries","US","Japan"]). -bgfact("Norway","Industries",["petroleum and gas","food = -processing","shipbuilding","pulp and paper = -products","metals","chemicals","timber","mining","textiles","fishing"]). -bgfact("Norway","Agriculture",["fish catch of million metric tons in"]). -bgfact("Oman","LandBounderies",["Saudi Arabia","UAE","Yemen"]). -bgfact("Oman","NaturalResources",["petroleum","copper","asbestos","some = -marble","limestone","chromium","gypsum","natural gas"]). -bgfact("Oman","Population",["1701470"]). -bgfact("Oman","Capital",["Muscat"]). -bgfact("Oman","MemberOf",["ABEDA","AFESD","AL","AMF","ESCWA","FAO","G-77"= -,"GCC","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT= -","INTELSAT","INTERPOL","IOC","ISO","ITU","NAM","OIC","UN","UNCTAD","UNES= -CO","UNIDO","UPU","WFTU","WHO","WMO"]). -bgfact("Oman","ExportCommodities",["petroleum","re-exports","fish","proce= -ssed copper","textiles"]). -bgfact("Oman","ExportPartners",["UAE","Japan","South = -Korea","Singapore"]). -bgfact("Oman","ImportCommodities",["machinery","transportation = -equipment","manubgfactured goods","food","livestock","lubricants"]). -bgfact("Oman","ImportPartners",["Japan","UAE","UK","US"]). -bgfact("Oman","Industries",["crude production and refining","natural gas = -production","construction","cement","copper"]). -bgfact("Oman","Agriculture",["annual fish catch averages"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","LandBounderies",[]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","NaturalResources",["forests","minerals","marine = -products","deep-seabed minerals"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","Population",["16366"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","Capital",["Koror"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","MemberOf",["ESCAP"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","ExportCommodities",["trochus","tuna","copra","handicrafts"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","ExportPartners",["US","Japan"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","ImportCommodities",["NA"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","ImportPartners",["US"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","Industries",["tourism","craft items","Agriculture"]). -bgfact("Pacific Islands (Palau), Trust Territory of = -the","Agriculture",["coconut","copra","cassava","sweet potatoes"]). -bgfact("Pacific Ocean","NaturalResources",["oil and gas = -fields","polymetallic nodules","sand and gravel aggregates","placer = -deposits","fish"]). -bgfact("Pacific Ocean","Industries",["fishing","oil and gas = -production"]). -bgfact("Pakistan","LandBounderies",["Afghanistan","China","India","Iran"]= -). -bgfact("Pakistan","NaturalResources",["land","extensive natural gas = -reserves","limited petroleum","poor quality coal","iron = -ore","copper","salt","limestone"]). -bgfact("Pakistan","Population",["128855965"]). -bgfact("Pakistan","Capital",["Islamabad"]). -bgfact("Pakistan","MemberOf",["AsDB","C","CCC","CP","ECO","ESCAP","FAO","= -G-19","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IDB"= -,"IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","I= -OM","ISO","ITU","LORCS","MINURSO","NAM","OAS","OIC","PCA","SAARC","UN","U= -NCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UNOSOM","UNTAC","UPU","WCL","WF= -TU","WHO","WIPO","WMO","WTO"]). -bgfact("Pakistan","ExportCommodities",["cotton","textiles","clothing","ri= -ce","leather","carpets"]). -bgfact("Pakistan","ExportPartners",["US","Japan","Hong = -Kong","Germany","UK"]). -bgfact("Pakistan","ImportCommodities",["petroleum","petroleum = -products","machinery","transportation equipment","vegetable = -oils","animal fats","chemicals"]). -bgfact("Pakistan","ImportPartners",["Japan","US","Germany","UK","Saudi = -Arabia"]). -bgfact("Pakistan","Industries",["textiles","food = -processing","beverages","construction materials","clothing","paper = -products","shrimp"]). -bgfact("Pakistan","Agriculture",["of GDP","major = -cotton","wheat","rice","sugarcane","fruits","livestock = -milk","beef","mutton","self-sufficient in food grain"]). -bgfact("Palmyra Atoll","LandBounderies",[]). -bgfact("Palmyra Atoll","NaturalResources",["none"]). -bgfact("Palmyra Atoll","Capital",["none; administered from Washington, = -DC"]). -bgfact("Panama","LandBounderies",["Colombia","Costa Rica"]). -bgfact("Panama","NaturalResources",["copper","mahogany = -forests","shrimp"]). -bgfact("Panama","Population",["63"]). -bgfact("Panama","Capital",["Panama"]). -bgfact("Panama","MemberOf",["AG","LORCS","NAM","OAS","OPANAL","PCA","UN",= -"UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Panama","ExportCommodities",["bananas","shrimp","sugar","clothing= -","coffee"]). -bgfact("Panama","ExportPartners",["US","EC","Central America and = -Caribbean"]). -bgfact("Panama","ImportCommodities",["Capital = -goods","crude","foodstuffs","consumer goods","chemicals"]). -bgfact("Panama","ImportPartners",["US","EC","Central America and = -Caribbean","Japan"]). -bgfact("Panama","Industries",["manubgfacturing and construction = -activities","petroleum refining","brewing","sugar milling"]). -bgfact("Panama","Agriculture",["crops - = -bananas","rice","corn","coffee","importer of food = -grain","vegetables"]). -bgfact("Papua New Guinea","LandBounderies",["Indonesia"]). -bgfact("Papua New = -Guinea","NaturalResources",["gold","copper","silver","natural = -gas","timber","oil potential"]). -bgfact("Papua New Guinea","Population",["4196806"]). -bgfact("Papua New Guinea","Capital",["Port Moresby"]). -bgfact("Papua New = -Guinea","MemberOf",["ACP","APEC","AsDB","ASEAN","ITU","LORCS","NAM","SPAR= -TECA","SPC","SPF","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WMO"= -]). -bgfact("Papua New Guinea","ExportCommodities",["gold","copper = -ore","oil","logs","palm oil","coffee","cocoa","lobster"]). -bgfact("Papua New Guinea","ExportPartners",["Australia","Japan","South = -Korea","UK","US"]). -bgfact("Papua New Guinea","ImportCommodities",["machinery and transport = -equipment","manubgfactured goods","food","fuels","chemicals"]). -bgfact("Papua New = -Guinea","ImportPartners",["Australia","Japan","US","Singapore","New = -Zealand","UK"]). -bgfact("Papua New Guinea","Industries",["copra crushing","palm oil = -processing","plywood production","wood chip production","mining of = -gold","silver","construction","tourism"]). -bgfact("Papua New = -Guinea","Agriculture",["coffee","cocoa","coconuts","rubber","sweet = -potatoes","fruit","vegetables","poultry","net importer of food for urban = -centers"]). -bgfact("Paracel Islands","LandBounderies",[]). -bgfact("Paracel Islands","NaturalResources",["none"]). -bgfact("Paraguay","LandBounderies",["Argentina","Bolivia","Brazil"]). -bgfact("Paraguay","NaturalResources",["hydropower","timber","iron = -ore","manganese","limestone"]). -bgfact("Paraguay","Population",["5213772"]). -bgfact("Paraguay","Capital",["Asuncion"]). -bgfact("Paraguay","MemberOf",["AG","CCC","ECLAC","FAO","G-77","GATT","IAD= -B","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO","INT= -ELSAT","INTERPOL","IOC","IOM","ITU","LAES","LAIA","LORCS","MERCOSUR","OAS= -","OPANAL","PCA","RG","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","W= -IPO","WMO","WTO"]). -bgfact("Paraguay","ExportCommodities",["cotton","soybean","timber","veget= -able oils","meat products","coffee","tung oil"]). -bgfact("Paraguay","ExportPartners",["EC","Brazil","Argentina","Chile","US= -"]). -bgfact("Paraguay","ImportCommodities",["Capital = -goods","foodstuffs","consumer goods","raw materials","fuels"]). -bgfact("Paraguay","ImportPartners",["Brazil","EC","US","Argentina","Japan= -"]). -bgfact("Paraguay","Industries",["meat packing","oilseed = -crushing","milling","brewing","textiles","cement","construction"]). -bgfact("Paraguay","Agriculture",["cotton","sugarcane","wheat","tobacco","= -cassava","fruits","animal beef","pork","eggs","self-sufficient in most = -foods"]). -bgfact("Peru","LandBounderies",["Bolivia","Brazil","Chile","Colombia","Ec= -uador"]). -bgfact("Peru","NaturalResources",["copper","silver","gold","petroleum","t= -imber","fish","iron ore","coal","phosphate","potash"]). -bgfact("Peru","Population",["23650671"]). -bgfact("Peru","Capital",["Lima"]). -bgfact("Peru","MemberOf",["AG","CCC","ECLAC","FAO","G-11","G-15","G-19","= -G-24","G-77","GATT","IADB","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC= -","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","U= -N","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]= -). -bgfact("Peru","ExportCommodities",["copper","zinc","fishmeal","crude = -petroleum and byproducts","lead","refined silver","coffee","cotton"]). -bgfact("Peru","ExportPartners",["US","Japan","Italy","Germany"]). -bgfact("Peru","ImportCommodities",["machinery","transport = -equipment","foodstuffs","petroleum","iron and = -steel","chemicals","pharmaceuticals"]). -bgfact("Peru","ImportPartners",["US","Colombia","Argentina","Japan","Germ= -any","Brazil"]). -bgfact("Peru","Industries",["mining of = -metals","petroleum","fishing","textiles","clothing","food = -processing","cement","auto assembly","steel","shipbuilding","metal = -fabrication"]). -bgfact("Peru","Agriculture",["accounts for of GDP","commercial = -coffee","cotton","wheat","potatoes","plantains","animal poultry","red = -meats","dairy","fish catch of million metric tons"]). -bgfact("Philippines","LandBounderies",[]). -bgfact("Philippines","NaturalResources",["timber","petroleum","nickel","c= -obalt","silver","gold","salt","copper"]). -bgfact("Philippines","Population",["69808930"]). -bgfact("Philippines","Capital",["Manila"]). -bgfact("Philippines","MemberOf",["APEC","AsDB","ASEAN","CCC","CP","ESCAP"= -,"FAO","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IF= -C","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","= -ITU","LORCS","NAM","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNTAC","UPU","= -WCL","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Philippines","ExportCommodities",["electronics","textiles","cocon= -ut products","cooper","fish"]). -bgfact("Philippines","ExportPartners",["US","Japan","Germany","UK","Hong = -Kong"]). -bgfact("Philippines","ImportCommodities",["raw materials","Capital = -goods","petroleum products"]). -bgfact("Philippines","ImportPartners",["Japan","US","Taiwan","Saudi = -Arabia","Hong Kong","South Korea"]). -bgfact("Philippines","Industries",["textiles","pharmaceuticals","chemical= -s","wood products","food processing","electronics assembly","petroleum = -refining","fishing"]). -bgfact("Philippines","Agriculture",["major = -rice","coconuts","corn","sugarcane","bananas","pineapples","animal = -pork","eggs","fish catch of million metric tons annually"]). -bgfact("Pitcairn Islands","LandBounderies",[]). -bgfact("Pitcairn Islands","NaturalResources",["miro trees","fish"]). -bgfact("Pitcairn Islands","Population",["71"]). -bgfact("Pitcairn Islands","Capital",["Adamstown"]). -bgfact("Pitcairn Islands","MemberOf",["SPC"]). -bgfact("Pitcairn = -Islands","ExportCommodities",["fruits","vegetables","curios"]). -bgfact("Pitcairn Islands","ExportPartners",["NA"]). -bgfact("Pitcairn Islands","ImportCommodities",["fuel = -oil","machinery","building materials","flour","sugar"]). -bgfact("Pitcairn Islands","ImportPartners",["NA"]). -bgfact("Pitcairn Islands","Industries",["postage stamp = -sales","handicrafts"]). -bgfact("Pitcairn Islands","Agriculture",["must import grain products"]). -bgfact("Poland","LandBounderies",["Belarus","Czech = -Republic","Germany","Lithuania","Russia","Slovakia","Ukraine"]). -bgfact("Poland","NaturalResources",["coal","sulfur","copper","natural = -gas","silver","lead","salt"]). -bgfact("Poland","Population",["38654561"]). -bgfact("Poland","Capital",["Warsaw"]). -bgfact("Poland","MemberOf",["BIS","BSEC","PCA","UN","UNCTAD","UNESCO","UN= -DOF","UNIDO","UNIFIL","UNIKOM","UNOMIG","UNPROFOR","UNTAC","UPU","WCL","W= -FTU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Poland","ExportCommodities",["machinery","metals","chemicals","fu= -els and power","food"]). -bgfact("Poland","ExportPartners",["Germany","Netherlands","Italy","Russia= -"]). -bgfact("Poland","ImportCommodities",["fuels and = -power","machinery","chemicals","food"]). -bgfact("Poland","ImportPartners",["Germany","Russia","Italy","UK"]). -bgfact("Poland","Industries",["machine building","iron and = -steel","extractive Industries","chemicals","shipbuilding","food = -processing","glass","beverages","textiles"]). -bgfact("Poland","Agriculture",["of output from private farms","leading = -European producer of rye","rapeseed","normally self-sufficient in = -food"]). -bgfact("Portugal","LandBounderies",["Spain"]). -bgfact("Portugal","NaturalResources",["fish","forests","tungsten","iron = -ore","uranium ore","marble"]). -bgfact("Portugal","Population",["10524210"]). -bgfact("Portugal","Capital",["Lisbon"]). -bgfact("Portugal","MemberOf",["AfDB","Australian = -Group","BIS","CCC","CE","CERN","COCOM","CSCE","EBRD","EC","ECE","ECLAC","= -EIB","FAO","GATT","IADB","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IEA","= -IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","IOM= -","ISO","ITU","LAIA","OECD","PCA","UN","UNCTAD","UNESCO","UNIDO","UNOMOZ"= -,"UNPROFOR","UPU","WCL","WEU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Portugal","ExportCommodities",["cotton textiles","cork and paper = -products","canned fish","wine","timber and timber = -products","resin","machinery","appliances"]). -bgfact("Portugal","ExportPartners",["EC","US"]). -bgfact("Portugal","ImportCommodities",["machinery and transport = -equipment","agricultural products","chemicals","petroleum","textiles"]). -bgfact("Portugal","ImportPartners",["EC","US"]). -bgfact("Portugal","Industries",["wood pulp","paper","tourism"]). -bgfact("Portugal","Agriculture",["small","major = -grain","potatoes","olives","livestock sector - = -sheep","cattle","goats","poultry","meat","dairy products"]). -bgfact("Puerto Rico","LandBounderies",[]). -bgfact("Puerto Rico","NaturalResources",["some copper and = -nickel","potential for onshore and offshore crude"]). -bgfact("Puerto Rico","Population",["3801977"]). -bgfact("Puerto Rico","Capital",["San Juan"]). -bgfact("Puerto Rico","MemberOf",["CARICOM"]). -bgfact("Puerto = -Rico","ExportCommodities",["pharmaceuticals","electronics","apparel","can= -ned tuna","rum","beverage concentrates","medical = -equipment","instruments"]). -bgfact("Puerto Rico","ExportPartners",["US"]). -bgfact("Puerto = -Rico","ImportCommodities",["chemicals","clothing","food","fish","petroleu= -m products"]). -bgfact("Puerto Rico","ImportPartners",["US"]). -bgfact("Puerto Rico","Industries",["manubgfacturing accounts for of GDP: = -manubgfacturing of pharmaceuticals","electronics","apparel","food = -products","tourism"]). -bgfact("Puerto Rico","Agriculture",["accounts for only of labor force = -and less than of GDP: = -sugarcane","coffee","pineapples","plantains","livestock - = -cattle","imports a large share of food needs"]). -bgfact("Qatar","LandBounderies",["Saudi Arabia"]). -bgfact("Qatar","NaturalResources",["petroleum","natural gas","fish"]). -bgfact("Qatar","Population",["512779"]). -bgfact("Qatar","Capital",["Doha"]). -bgfact("Qatar","MemberOf",["ABEDA","AFESD","AL","AMF","CCC","ESCWA","FAO"= -,"G-77","GCC","IAEA","IBRD","ICAO","IDB","IFAD","ILO","IMF","IMO","INMARS= -AT","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAPEC","OIC","OPEC",= -"UN","UNCTAD","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). -bgfact("Qatar","ExportCommodities",["petroleum = -products","steel","fertilizers"]). -bgfact("Qatar","ExportPartners",["Japan","Brazil","South = -Korea","UAE","Singapore"]). -bgfact("Qatar","ImportCommodities",["machinery and equipment","consumer = -goods","food","chemicals"]). -bgfact("Qatar","ImportPartners",["Japan","UK","US","Germany","France"]). -bgfact("Qatar","Industries",["crude production and = -refining","fertilizers","petrochemicals","steel","cement"]). -bgfact("Qatar","Agriculture",["farming and grazing on small scale","most = -food imported"]). -bgfact("Reunion","LandBounderies",[]). -bgfact("Reunion","NaturalResources",["fish","arable land"]). -bgfact("Reunion","Population",["652857"]). -bgfact("Reunion","Capital",["Saint-Denis"]). -bgfact("Reunion","MemberOf",["FZ","WFTU"]). -bgfact("Reunion","ExportCommodities",["sugar","rum and = -molasses","perfume essences","lobster","vanilla and tea"]). -bgfact("Reunion","ExportPartners",["France","Mauritius","Bahrain","South = -Africa","Italy"]). -bgfact("Reunion","ImportCommodities",["manubgfactured = -goods","food","beverages","tobacco","machinery and transportation = -equipment","raw materials"]). -bgfact("Reunion","ImportPartners",["France","Mauritius","Bahrain","South = -Africa","Italy"]). -bgfact("Reunion","Industries",["sugar","rum","cigarettes","several small = -shops producing handicraft items"]). -bgfact("Reunion","Agriculture",["sugarcane","vanilla","food tropical = -fruits","vegetables","imports large share of food needs"]). -bgfact("Romania","LandBounderies",["Bulgaria","Hungary","Moldova","Serbia= - and Montenegro"]). -bgfact("Romania","NaturalResources",["petroleum","timber","natural = -gas","coal","iron ore","salt"]). -bgfact("Romania","Population",["23181415"]). -bgfact("Romania","Capital",["Bucharest"]). -bgfact("Romania","MemberOf",["ACCT","PCA","UN","UNCTAD","UNESCO","UNIDO",= -"UNIKOM","UNOSOM","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Romania","ExportCommodities",["metals and metal = -products","mineral products","textiles","electric machines and = -equipment","transport materials"]). -bgfact("Romania","ExportPartners",["EC","developing countries","East and = -Central Europe","EFTA","Russia","Japan","US"]). -bgfact("Romania","ImportCommodities",["minerals","machinery and = -equipment","textiles","agricultural goods"]). -bgfact("Romania","ImportPartners",["EC","East and Central = -Europe","developing countries","Russia","EFTA","US","Japan"]). -bgfact("Romania","Industries",["mining","timber","construction = -materials","metallurgy","chemicals","machine building","food = -processing","petroleum production and refining"]). -bgfact("Romania","Agriculture",["sunflower = -seed","potatoes","milk","eggs","meat","grapes"]). -bgfact("Russia","LandBounderies",["Azerbaijan","Belarus","China","Ukraine= -"]). -bgfact("Russia","NaturalResources",["wide natural resource base = -including major deposits of oil","natural gas","coal","timber"]). -bgfact("Russia","Population",["149608953"]). -bgfact("Russia","Capital",["Moscow"]). -bgfact("Russia","MemberOf",["BSEC","CBSS","CCC","CE","PCA","UN","UNCTAD",= -"UNESCO","UNIDO","UNIKOM","UNOMOZ","UNPROFOR","UN Security = -Council","UNTAC","UN Trusteeship = -Council","UNTSO","UPU","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("Russia","ExportCommodities",["petroleum and petroleum = -products","natural gas","wood and wood products","metals","chemicals"]). -bgfact("Russia","ExportPartners",["Europe","North = -America","Japan","Third World countries","Cuba"]). -bgfact("Russia","ImportCommodities",["machinery and = -equipment","chemicals","consumer = -goods","grain","meat","sugar","semifinished metal products"]). -bgfact("Russia","ImportPartners",["Europe","North = -America","Japan","Third World countries","Cuba"]). -bgfact("Russia","Industries",["coal","oil","gas","chemicals","agricultura= -l machinery","tractors","consumer durables"]). -bgfact("Russia","Agriculture",["grain","sugar beet","sunflower = -seeds","meat","milk","vegetables","cotton","tea"]). -bgfact("Rwanda","LandBounderies",["Burundi","Tanzania","Uganda","Zaire"])= -. -bgfact("Rwanda","NaturalResources",["gold","cassiterite","natural = -gas","hydropower"]). -bgfact("Rwanda","Population",["8373963"]). -bgfact("Rwanda","Capital",["Kigali"]). -bgfact("Rwanda","MemberOf",["ACCT","ACP","AfDB","ECA","CCC","CEEAC","CEPG= -L","FAO","G-77","GATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IM= -F","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","UN","UNCTAD","U= -NESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Rwanda","ExportCommodities",["coffee","tea","cassiterite","wolfra= -mite","pyrethrum"]). -bgfact("Rwanda","ExportPartners",["Germany","Belgium","Italy","Uganda","U= -K","France","US"]). -bgfact("Rwanda","ImportCommodities",["textiles","foodstuffs","machines = -and equipment","Capital goods","steel","petroleum products","cement and = -construction material"]). -bgfact("Rwanda","ImportPartners",["US","Belgium","Germany","Kenya","Japan= -"]). -bgfact("Rwanda","Industries",["mining of = -cassiterite","tin","cement","agricultural processing","small-scale = -beverage production","soap","furniture","shoes","plastic = -goods","textiles","cigarettes"]). -bgfact("Rwanda","Agriculture",["coffee","tea","bananas","beans","sorghum"= -]). -bgfact("Saint Helena","LandBounderies",[]). -bgfact("Saint Helena","NaturalResources",["no minerals"]). -bgfact("Saint Helena","Population",["6741"]). -bgfact("Saint Helena","Capital",["Jamestown"]). -bgfact("Saint Helena","MemberOf",["ICFTU"]). -bgfact("Saint Helena","ExportCommodities",["fish","handicrafts"]). -bgfact("Saint Helena","ExportPartners",["South Africa","UK"]). -bgfact("Saint = -Helena","ImportCommodities",["food","beverages","tobacco","fuel = -oils","animal feed","building materials","motor vehicles and = -parts","machinery and parts"]). -bgfact("Saint Helena","ImportPartners",["UK","South Africa"]). -bgfact("Saint Helena","Industries",["crafts","fishing"]). -bgfact("Saint Helena","Agriculture",["maize","potatoes","crawfishing on = -Tristan da Cunha"]). -bgfact("Saint Kitts and Nevis","LandBounderies",[]). -bgfact("Saint Kitts and Nevis","NaturalResources",["negligible"]). -bgfact("Saint Kitts and Nevis","Population",["40671"]). -bgfact("Saint Kitts and Nevis","Capital",["Basseterre"]). -bgfact("Saint Kitts and = -Nevis","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-77","IBRD",= -"ICFTU","IDA","IFAD","IMF","INTERPOL","LORCS","OAS","OECS","UN","UNCTAD",= -"UNESCO","UNIDO","UPU","WCL","WHO"]). -bgfact("Saint Kitts and = -Nevis","ExportCommodities",["sugar","clothing","electronics","postage = -stamps"]). -bgfact("Saint Kitts and Nevis","ExportPartners",["US","UK","Trinidad and = -Tobago","OECS"]). -bgfact("Saint Kitts and = -Nevis","ImportCommodities",["foodstuffs","intermediate = -manubgfactures","machinery","fuels"]). -bgfact("Saint Kitts and Nevis","ImportPartners",["US","UK","Trinidad and = -Tobago","Canada","Japan","OECS"]). -bgfact("Saint Kitts and Nevis","Industries",["sugar = -processing","tourism","cotton","salt","copra","clothing","footwear","beve= -rages"]). -bgfact("Saint Kitts and Nevis","Agriculture",["subsistence = -rice","yams","vegetables","most food imported"]). -bgfact("Saint Lucia","LandBounderies",[]). -bgfact("Saint Lucia","NaturalResources",["forests","sandy = -beaches","minerals","mineral springs"]). -bgfact("Saint Lucia","Population",["145090"]). -bgfact("Saint Lucia","Capital",["Castries"]). -bgfact("Saint = -Lucia","MemberOf",["ACCT","INTERPOL","LORCS","NAM","OAS","OECS","UN","UNC= -TAD","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","WMO"]). -bgfact("Saint = -Lucia","ExportCommodities",["bananas","clothing","cocoa","vegetables","fr= -uits","coconut oil"]). -bgfact("Saint Lucia","ExportPartners",["UK","US","CARICOM"]). -bgfact("Saint Lucia","ImportCommodities",["manubgfactured = -goods","machinery and transportation equipment","food and live = -animals","chemicals","fuels"]). -bgfact("Saint = -Lucia","ImportPartners",["US","CARICOM","UK","Japan","Canada"]). -bgfact("Saint Lucia","Industries",["clothing","assembly of electronic = -components","beverages","corrugated cardboard boxes","tourism","lime = -processing","coconut processing"]). -bgfact("Saint = -Lucia","Agriculture",["bananas","coconuts","vegetables","citrus = -fruit","root crops","imports food for the tourist industry"]). -bgfact("Saint Pierre and Miquelon","LandBounderies",[]). -bgfact("Saint Pierre and Miquelon","NaturalResources",["fish","deepwater = -ports"]). -bgfact("Saint Pierre and Miquelon","Population",["6704"]). -bgfact("Saint Pierre and Miquelon","Capital",["Saint-Pierre"]). -bgfact("Saint Pierre and Miquelon","MemberOf",["FZ","WFTU"]). -bgfact("Saint Pierre and Miquelon","ExportCommodities",["fish and fish = -products","fox and mink pelts"]). -bgfact("Saint Pierre and = -Miquelon","ExportPartners",["US","France","UK","Canada","Portugal"]). -bgfact("Saint Pierre and = -Miquelon","ImportCommodities",["meat","clothing","fuel","electrical = -equipment","machinery","building materials"]). -bgfact("Saint Pierre and = -Miquelon","ImportPartners",["Canada","France","US","Netherlands","UK"]). -bgfact("Saint Pierre and Miquelon","Industries",["tourism"]). -bgfact("Saint Pierre and = -Miquelon","Agriculture",["vegetables","cattle","sheep","fish catch = -of"]). -bgfact("Saint Vincent and the Grenadines","LandBounderies",[]). -bgfact("Saint Vincent and the = -Grenadines","NaturalResources",["negligible"]). -bgfact("Saint Vincent and the Grenadines","Population",["115437"]). -bgfact("Saint Vincent and the Grenadines","Capital",["Kingstown"]). -bgfact("Saint Vincent and the = -Grenadines","MemberOf",["ACP","C","CARICOM","CDB","ECLAC","FAO","G-77","G= -ATT","IBRD","ICAO","ICFTU","IDA","IFAD","IMF","IMO","INTELSAT","INTERPOL"= -,"IOC","ITU","LORCS","OAS","OECS","OPANAL","UN","UNCTAD","UNESCO","UNIDO"= -,"UPU","WCL","WFTU","WHO"]). -bgfact("Saint Vincent and the = -Grenadines","ExportCommodities",["bananas","eddoes and = -dasheen","arrowroot starch","tennis racquets"]). -bgfact("Saint Vincent and the = -Grenadines","ExportPartners",["UK","CARICOM","US"]). -bgfact("Saint Vincent and the = -Grenadines","ImportCommodities",["foodstuffs","machinery and = -equipment","chemicals and fertilizers","minerals and fuels"]). -bgfact("Saint Vincent and the = -Grenadines","ImportPartners",["US","CARICOM","UK","Trinidad and = -Tobago"]). -bgfact("Saint Vincent and the Grenadines","Industries",["food = -processing","cement","furniture","clothing","starch"]). -bgfact("Saint Vincent and the = -Grenadines","Agriculture",["bananas","coconuts","sweet potatoes","small = -numbers of cattle","sheep","hogs","small fish catch used locally"]). -bgfact("San Marino","LandBounderies",["Italy"]). -bgfact("San Marino","NaturalResources",["building stone"]). -bgfact("San Marino","Population",["24091"]). -bgfact("San Marino","Capital",["San Marino"]). -bgfact("San = -Marino","MemberOf",["CE","CSCE","ECE","ICAO","ICFTU","ILO","IMF","IOC","I= -OM","UN","UNCTAD","UNESCO","UPU","WHO","WIPO","WTO"]). -bgfact("San Marino","Industries",["wine","olive = -oil","cement","leather","textile","tourism"]). -bgfact("San = -Marino","Agriculture",["wheat","grapes","maize","olives","meat","cheese",= -"small numbers of cattle","pigs","depends on Italy for food imports"]). -bgfact("Sao Tome and Principe","LandBounderies",[]). -bgfact("Sao Tome and Principe","NaturalResources",["fish"]). -bgfact("Sao Tome and Principe","Population",["136780"]). -bgfact("Sao Tome and Principe","Capital",["Sao Tome"]). -bgfact("Sao Tome and = -Principe","MemberOf",["ACP","AfDB","CEEAC","ECA","FAO","G-77","IBRD","ICA= -O","IDA","IFAD","ILO","IMF","IMO","INTELSAT","ITU","LORCS","NAM","OAU","U= -N","UNCTAD","UNESCO","UNIDO","UPU","WHO","WMO","WTO"]). -bgfact("Sao Tome and = -Principe","ExportCommodities",["cocoa","copra","coffee","palm oil"]). -bgfact("Sao Tome and = -Principe","ExportPartners",["Netherlands","Germany","China","Portugal"]).= - -bgfact("Sao Tome and Principe","ImportCommodities",["machinery and = -electrical equipment","food products","petroleum"]). -bgfact("Sao Tome and = -Principe","ImportPartners",["Portugal","Japan","Spain","France","Angola"]= -). -bgfact("Sao Tome and Principe","Industries",["light = -construction","shirts","soap","beer","fisheries","shrimp processing"]). -bgfact("Sao Tome and Principe","Agriculture",["dominant sector of = -economy","cocoa","coconuts","palm kernels","food = -bananas","papaya","beans","poultry","not self-sufficient in food grain = -and meat"]). -bgfact("Saudi = -Arabia","LandBounderies",["Iraq","Jordan","Kuwait","Oman","Qatar","UAE","= -Yemen"]). -bgfact("Saudi Arabia","NaturalResources",["petroleum","natural = -gas","iron ore","gold","copper"]). -bgfact("Saudi Arabia","Population",["18196783"]). -bgfact("Saudi Arabia","Capital",["Riyadh"]). -bgfact("Saudi = -Arabia","MemberOf",["ABEDA","AfDB","AFESD","AL","AMF","CCC","ESCWA","FAO"= -,"G-19","G-77","GCC","IAEA","IBRD","ICAO","ICC","IDA","IDB","IFAD","IFC",= -"ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LOR= -CS","NAM","OAPEC","OAS","OIC","OPEC","UN","UNCTAD","UNESCO","UNIDO","UNOS= -OM","UPU","WFTU","WHO","WIPO","WMO"]). -bgfact("Saudi Arabia","ExportCommodities",["petroleum and petroleum = -products"]). -bgfact("Saudi = -Arabia","ExportPartners",["US","Japan","Singapore","France","Korea"]). -bgfact("Saudi Arabia","ImportCommodities",["machinery and = -equipment","chemicals","foodstuffs","motor vehicles","textiles"]). -bgfact("Saudi = -Arabia","ImportPartners",["US","UK","Japan","Germany","France"]). -bgfact("Saudi Arabia","Industries",["crude production","petroleum = -refining","basic petrochemicals","cement","two small steel-rolling = -mills","construction","fertilizer","plastics"]). -bgfact("Saudi Arabia","Agriculture",["accounts for about of = -GDP","wheat","barley","tomatoes","melons","dates","citrus = -fruit","mutton","chickens","eggs","approaching self-sufficiency in = -food"]). -bgfact("Senegal","LandBounderies",["The = -Gambia","Guinea","Guinea-Bissau","Mali","Mauritania"]). -bgfact("Senegal","NaturalResources",["fish","phosphates","iron ore"]). -bgfact("Senegal","Population",["8730508"]). -bgfact("Senegal","Capital",["Dakar"]). -bgfact("Senegal","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOW= -AS","FAO","FZ","G-15","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","I= -DA","IDB","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","IOM= -","ITU","LORCS","NAM","OAU","OIC","PCA","UN","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNIKOM","UNOMUR","UNTAC","UPU","WADB","WCL= -","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Senegal","ExportCommodities",["fish","ground nuts","petroleum = -products","phosphates","cotton"]). -bgfact("Senegal","ExportPartners",["France","Cote d'Ivoire","Mali"]). -bgfact("Senegal","ImportCommodities",["foods and beverages","consumer = -goods","Capital goods","petroleum"]). -bgfact("Senegal","ImportPartners",["France","Nigeria","Cote = -d'Ivoire","Algeria","China","Japan"]). -bgfact("Senegal","Industries",["agricultural and fish = -processing","phosphate mining","petroleum refining","building = -materials"]). -bgfact("Senegal","Agriculture",["major = -peanuts","millet","corn","sorghum","rice","cotton","tomatoes","fish = -catch of"]). -bgfact("Serbia and = -Montenegro","LandBounderies",["Albania","Hungary","The Former Yugoslav = -Republic of Macedonia","Romania"]). -bgfact("Serbia and = -Montenegro","NaturalResources",["oil","gas","coal","antimony","copper","l= -ead","zinc","nickel","gold","pyrite","chrome"]). -bgfact("Serbia and Montenegro","Capital",["Belgrade"]). -bgfact("Serbia and Montenegro","ExportCommodities",["machinery and = -transport equipment","manubgfactured goods","miscellaneous = -manubgfactured articles","chemicals","food and live animals","raw = -materials","fuels and lubricants","beverages and tobacco"]). -bgfact("Serbia and Montenegro","ExportPartners",["Italy","Germany","the = -FSU countries","East European countries","US"]). -bgfact("Serbia and Montenegro","ImportCommodities",["machinery and = -transport equipment","fuels and lubricants","manubgfactured = -goods","chemicals","food and live animals","miscellaneous manubgfactured = -items","raw materials","including coking coal for the steel = -industry","beverages","tobacco"]). -bgfact("Serbia and Montenegro","ImportPartners",["the FSU countries","EC = -countries","East European countries","US"]). -bgfact("Serbia and Montenegro","Industries",["machine = -building","electronics","petroleum products","chemicals"]). -bgfact("Serbia and Montenegro","Agriculture",["the fertile plains of = -Vojvodina produce of the cereal production of the former Yugoslavia and = -most of the cotton","oilseeds","Serbia proper","although = -hilly","produces fruit","grapes","in this area","Kosovo produces = -fruits","vegetables","tobacco","mostly near the coast where a = -Mediterranean climate permits the culture of = -olives","citrus","grapes"]). -bgfact("Seychelles","LandBounderies",[]). -bgfact("Seychelles","NaturalResources",["fish","copra","cinnamon = -trees"]). -bgfact("Seychelles","Population",["72113"]). -bgfact("Seychelles","Capital",["Victoria"]). -bgfact("Seychelles","MemberOf",["ACCT","ACP","AfDB","C","ECA","FAO","G-77= -","IBRD","ICAO","ICFTU","IFAD","IFC","ILO","IMF","IMO","INTELSAT","NAM","= -OAU","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","WMO","WTO"]). -bgfact("Seychelles","ExportCommodities",["fish","copra","cinnamon = -bark","petroleum products"]). -bgfact("Seychelles","ExportPartners",["UK France","Reunion"]). -bgfact("Seychelles","ImportCommodities",["manubgfactured = -goods","food","petroleum products","tobacco","beverages","machinery and = -transportation equipment"]). -bgfact("Seychelles","ImportPartners",["South Africa","Singapore","UK"]). -bgfact("Seychelles","Industries",["tourism","processing of coconut and = -vanilla","fishing","coir rope bgfactory","boat = -building","printing","furniture","beverage"]). -bgfact("Seychelles","Agriculture",["accounts for of = -GDP","coconuts","cinnamon","cassava","expansion of tuna fishing under = -way"]). -bgfact("Sierra Leone","LandBounderies",["Guinea","Liberia"]). -bgfact("Sierra Leone","NaturalResources",["diamonds","titanium = -ore","bauxite","iron ore","gold","chromite"]). -bgfact("Sierra Leone","Population",["4630037"]). -bgfact("Sierra Leone","Capital",["Freetown"]). -bgfact("Sierra = -Leone","MemberOf",["ACP","AfDB","C","CCC","ECA","ECOWAS","FAO","G-77","GA= -TT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","IFC","ILO","IMF","IM= -O","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU","OIC","UN","UNCT= -AD","UNESCO","UNIDO","UNOMIG","UPU","WCL","WHO","WIPO","WMO","WTO"]). -bgfact("Sierra = -Leone","ExportCommodities",["rutile","bauxite","diamonds","coffee"]). -bgfact("Sierra Leone","ExportPartners",["US","UK","Belgium","Germany"]). -bgfact("Sierra Leone","ImportCommodities",["foodstuffs","machinery and = -equipment","fuels"]). -bgfact("Sierra Leone","ImportPartners",["US","EC = -countries","Japan","China","Nigeria"]). -bgfact("Sierra Leone","Industries",["mining","petroleum refinery"]). -bgfact("Sierra Leone","Agriculture",["coffee","cocoa","annual fish = -catch averages"]). -bgfact("Singapore","LandBounderies",[]). -bgfact("Singapore","NaturalResources",["fish","deepwater ports"]). -bgfact("Singapore","Population",["2859142"]). -bgfact("Singapore","Capital",["Singapore"]). -bgfact("Singapore","MemberOf",["APEC","AsDB","ASEAN","C","CCC","COCOM","C= -P","ESCAP","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","IFC","ILO","= -IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NA= -M","UN","UNAVEM = -II","UNCTAD","UNIKOM","UNTAC","UPU","WHO","WIPO","WMO"]). -bgfact("Singapore","ExportCommodities",["computer equipment","rubber and = -rubber products","petroleum products","telecommunications equipment"]). -bgfact("Singapore","ExportPartners",["US","Malaysia","Hong = -Kong","Japan","Thailand"]). -bgfact("Singapore","ImportCommodities",["aircraft","petroleum","chemicals= -","foodstuffs"]). -bgfact("Singapore","ImportPartners",["Japan","US","Malaysia","Saudi = -Arabia","Taiwan"]). -bgfact("Singapore","Industries",["petroleum refining","electronics","oil = -drilling equipment","rubber processing and rubber products","processed = -food and beverages","ship repair","entrepot trade","financial = -services","biotechnology"]). -bgfact("Singapore","Agriculture",["major = -rubber","copra","fruit","vegetables"]). -bgfact("Slovakia","LandBounderies",["Austria","Czech = -Republic","Hungary","Poland","Ukraine"]). -bgfact("Slovakia","NaturalResources",["small amounts of iron = -ore","salt"]). -bgfact("Slovakia","Population",["5403505"]). -bgfact("Slovakia","Capital",["Bratislava"]). -bgfact("Slovakia","MemberOf",["BIS","CCC","CE","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNOMUR","UNPROFOR","UPU","WFTU","WHO","WIP= -O","WMO","WTO","ZC"]). -bgfact("Slovakia","ExportCommodities",["fuels","minerals","agricultural = -products"]). -bgfact("Slovakia","ExportPartners",["Czech Republic","CIS = -republics","Germany","Poland","Austria","Hungary","Italy","France","US","= -UK"]). -bgfact("Slovakia","ImportCommodities",["agricultural products"]). -bgfact("Slovakia","ImportPartners",["Czech Republic","CIS = -republics","Germany","Austria","Poland","Switzerland","Hungary","UK","Ita= -ly"]). -bgfact("Slovakia","Industries",["brown coal = -mining","chemicals","metal-working","consumer = -appliances","fertilizer","plastics","armaments"]). -bgfact("Slovakia","Agriculture",["diversified crop and livestock = -production","including grains","potatoes","sugar = -beets","hops","fruit","hogs","cattle","exporter of forest products"]). -bgfact("Slovenia","LandBounderies",["Austria","Croatia","Italy","Hungary"= -]). -bgfact("Slovenia","NaturalResources",["lignite = -coal","lead","zinc","mercury","uranium","silver"]). -bgfact("Slovenia","Population",["1972227"]). -bgfact("Slovenia","Capital",["Ljubljana"]). -bgfact("Slovenia","MemberOf",["CCC","CE","CEI","CSCE","EBRD","ECE","IAEA"= -,"IBRD","ICAO","IDA","IFC","ILO","IMF","IMO","INTELSAT","UN","UNCTAD","UN= -ESCO","UNIDO","UPU","WHO","WIPO","WMO"]). -bgfact("Slovenia","ExportCommodities",["machinery and transport = -equipment","chemicals","food and live animals","raw = -materials","beverages and tobacco less than"]). -bgfact("Slovenia","ExportPartners",["Germany","Croatia","Italy","France"]= -). -bgfact("Slovenia","ImportCommodities",["machinery and transport = -equipment","chemicals","raw materials","fuels and lubricants","food and = -live animals"]). -bgfact("Slovenia","ImportPartners",["Germany","Croatia","Italy","France",= -"Austria"]). -bgfact("Slovenia","Industries",["ferrous metallurgy and rolling mill = -products","aluminum reduction and rolled products","lead and zinc = -smelting","electronics","trucks","electric power equipment","wood = -products","textiles","chemicals","machine tools"]). -bgfact("Slovenia","Agriculture",["main potatoes","hops","hemp"]). -bgfact("Solomon Islands","LandBounderies",[]). -bgfact("Solomon = -Islands","NaturalResources",["fish","forests","gold","bauxite","phosphate= -s","lead","zinc","nickel"]). -bgfact("Solomon Islands","Population",["385811"]). -bgfact("Solomon Islands","Capital",["Honiara"]). -bgfact("Solomon = -Islands","MemberOf",["ACP","AsDB","C","ESCAP","FAO","G-77","IBRD","ICAO",= -"IDA","IFAD","IFC","ILO","IMF","IMO","INTELSAT","IOC","ITU","LORCS","SPAR= -TECA","SPC","SPF","UN","UNCTAD","UNESCO","UPU","WFTU","WHO","WMO"]). -bgfact("Solomon Islands","ExportCommodities",["fish","timber","palm = -oil","cocoa","copra"]). -bgfact("Solomon = -Islands","ExportPartners",["Japan","UK","Thailand","Australia","US"]). -bgfact("Solomon Islands","ImportCommodities",["plant and machinery = -manubgfactured goods","food and live animals","fuel"]). -bgfact("Solomon = -Islands","ImportPartners",["Australia","Japan","Singapore","NZ"]). -bgfact("Solomon Islands","Industries",["copra","fish"]). -bgfact("Solomon Islands","Agriculture",["including fishing and = -forestry","cocoa","beans","coconuts","palm = -kernels","potatoes","vegetables","fruit","cattle"]). -bgfact("Somalia","LandBounderies",["Djibouti","Ethiopia","Kenya"]). -bgfact("Somalia","NaturalResources",["uranium and largely unexploited = -reserves of iron ore","tin","gypsum","bauxite","copper","salt"]). -bgfact("Somalia","Population",["6666873"]). -bgfact("Somalia","Capital",["Mogadishu"]). -bgfact("Somalia","MemberOf",["ACP","AfDB","AFESD","AL","AMF","CAEU","ECA"= -,"FAO","G-77","IBRD","ICAO","IDA","IDB","IFAD","IFC","IGADD","ILO","IMF",= -"IMO","INTELSAT","INTERPOL","IOC","IOM","ITU","LORCS","NAM","OAU","OIC","= -UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WHO","WIPO","WMO"]). -bgfact("Somalia","ExportCommodities",["bananas","live = -animals","fish","hides"]). -bgfact("Somalia","ExportPartners",["Saudi Arabia","Italy","FRG"]). -bgfact("Somalia","ImportCommodities",["petroleum = -products","foodstuffs","construction materials"]). -bgfact("Somalia","ImportPartners",["US","Italy","FRG","Kenya","UK","Saudi= - Arabia"]). -bgfact("Somalia","Industries",["sugar","textiles"]). -bgfact("Somalia","Agriculture",["dominant = -sector","bananas","sorghum","corn","mangoes","fishing potential largely = -unexploited"]). -bgfact("South = -Africa","LandBounderies",["Botswana","Lesotho","Mozambique","Namibia","Sw= -aziland","Zimbabwe"]). -bgfact("South = -Africa","NaturalResources",["gold","chromium","antimony","coal","iron = -ore","manganese","nickel","phosphates","tin","uranium","gem = -diamonds","platinum","copper","vanadium","salt","natural gas"]). -bgfact("South Africa","Population",["43930631"]). -bgfact("South Africa","Capital",["Pretoria"]). -bgfact("South = -Africa","MemberOf",["BIS","CCC","ECA","GATT","G-77","IAEA","IBRD","ICAO",= -"ZC"]). -bgfact("South Africa","ExportCommodities",["gold","food","chemicals"]). -bgfact("South = -Africa","ExportPartners",["Italy","Japan","US","Germany","UK","Hong = -Kong"]). -bgfact("South Africa","ImportCommodities",["machinery","transport = -equipment","chemicals","oil","textiles","scientific instruments"]). -bgfact("South = -Africa","ImportPartners",["Germany","US","Japan","UK","Italy"]). -bgfact("South Africa","Industries",["mining","automobile = -assembly","metalworking","machinery","textile","iron and = -steel","chemical","fertilizer","foodstuffs"]). -bgfact("South = -Africa","Agriculture",["cattle","poultry","sheep","wool","milk","beef","c= -orn","wheat","sugarcane","fruits","self-sufficient in food"]). -bgfact("South Georgia and the South Sandwich = -Islands","LandBounderies",[]). -bgfact("South Georgia and the South Sandwich = -Islands","NaturalResources",["fish"]). -bgfact("South Georgia and the South Sandwich Islands","Capital",["none; = -Grytviken on South Georgia is the garrison town"]). -bgfact("Spain","LandBounderies",["Andorra","France","Gibraltar","Portugal= -"]). -bgfact("Spain","NaturalResources",["coal","lignite","iron = -ore","uranium","mercury","pyrites","fluorspar","gypsum","zinc","lead","tu= -ngsten","copper","kaolin","potash","hydropower"]). -bgfact("Spain","Population",["39302665"]). -bgfact("Spain","Capital",["Madrid"]). -bgfact("Spain","MemberOf",["AG","OECD","ONUSAL","PCA","UN","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNOMOZ","UNPROFOR","UPU","WCL","WEU","WHO"= -,"WIPO","WMO","WTO","ZC"]). -bgfact("Spain","ExportCommodities",["cars and trucks","semifinished = -manubgfactured goods","foodstuffs","machinery"]). -bgfact("Spain","ExportPartners",["EC","US"]). -bgfact("Spain","ImportCommodities",["machinery","transport = -equipment","fuels","semifinished goods","foodstuffs","consumer = -goods","chemicals"]). -bgfact("Spain","ImportPartners",["EC","US","Middle East"]). -bgfact("Spain","Industries",["textiles and apparel","food and = -beverages","metals and metal = -manubgfactures","chemicals","shipbuilding","automobiles","machine = -tools","tourism"]). -bgfact("Spain","Agriculture",["major grain","vegetables","olives","wine = -grapes","sugar beets","citrus fruit","beef","pork","poultry","fish = -catch of million metric tons is among top nations"]). -bgfact("Spratly Islands","LandBounderies",[]). -bgfact("Spratly = -Islands","NaturalResources",["fish","guano","undetermined oil and = -natural gas potential"]). -bgfact("Spratly Islands","Industries",["none"]). -bgfact("Sri Lanka","LandBounderies",[]). -bgfact("Sri Lanka","NaturalResources",["limestone","graphite","mineral = -sands","gems","phosphates","clay"]). -bgfact("Sri Lanka","Population",["18129850"]). -bgfact("Sri Lanka","Capital",["Colombo"]). -bgfact("Sri = -Lanka","MemberOf",["AsDB","C","CCC","CP","ESCAP","FAO","G-24","G-77","GAT= -T","IAEA","IBRD","ICAO","ICC","ICFTU","IDA","IFAD","IFC","ILO","IMF","IMO= -","INMARSAT","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","NAM",= -"PCA","SAARC","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WI= -PO","WMO","WTO"]). -bgfact("Sri Lanka","ExportCommodities",["garments and = -textiles","teas","gems","petroleum products","coconuts","rubber","marine = -products","graphite"]). -bgfact("Sri = -Lanka","ExportPartners",["US","Germany","UK","Netherlands","Japan","Franc= -e","Singapore"]). -bgfact("Sri Lanka","ImportCommodities",["food and beverages","textiles = -and textile materials","petroleum and petroleum products","machinery = -and equipment"]). -bgfact("Sri = -Lanka","ImportPartners",["Japan","India","US","UK","Singapore","Germany",= -"Hong King","Taiwan","South Korea"]). -bgfact("Sri Lanka","Industries",["processing of = -rubber","tea","coconuts","clothing","cement","petroleum = -refining","textiles","tobacco"]). -bgfact("Sri = -Lanka","Agriculture",["grains","pulses","oilseeds","roots","tea","rubber"= -,"animal milk","eggs","hides","not self-sufficient in rice = -production"]). -bgfact("Sudan","LandBounderies",["Central African = -Republic","Chad","Egypt","Eritrea","Ethiopia","Kenya","Libya","Uganda","Z= -aire"]). -bgfact("Sudan","NaturalResources",["small reserves of petroleum","iron = -ore","copper","chromium ore","zinc","tungsten","mica","silver"]). -bgfact("Sudan","Population",["29419798"]). -bgfact("Sudan","Capital",["Khartoum"]). -bgfact("Sudan","MemberOf",["ABEDA","ACP","AfDB","AFESD","AL","AMF","CAEU"= -,"CCC","ECA","FAO","G-77","IAEA","IBRD","ICAO","IDA","IFAD","IFC","IGADD"= -,"ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM","OAU",= -"PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WFTU","WHO","WIPO","W= -MO","WTO"]). -bgfact("Sudan","ExportCommodities",["cotton","sesame","gum = -arabic","peanuts"]). -bgfact("Sudan","ExportPartners",["Western Europe","Saudi = -Arabia","Eastern Europe","Japan","US"]). -bgfact("Sudan","ImportCommodities",["foodstuffs","petroleum = -products","manubgfactured goods","machinery and equipment","medicines = -and chemicals","textiles"]). -bgfact("Sudan","ImportPartners",["Western Europe","Africa and = -Asia","US","Eastern Europe"]). -bgfact("Sudan","Industries",["cotton = -ginning","textiles","cement","edible oils","sugar","soap = -distilling","shoes","petroleum refining"]). -bgfact("Sudan","Agriculture",["major = -cotton","oilseeds","sorghum","millet","wheat","gum arabic","marginally = -self-sufficient in most foods"]). -bgfact("Suriname","LandBounderies",["Brazil","French Guiana","Guyana"]). -bgfact("Suriname","NaturalResources",["timber","hydropower = -potential","fish","shrimp","bauxite","iron = -ore","copper","platinum","gold"]). -bgfact("Suriname","Population",["422840"]). -bgfact("Suriname","Capital",["Paramaribo"]). -bgfact("Suriname","MemberOf",["ACP","CARICOM","ITU","LAES","LORCS","NAM",= -"OAS","OPANAL","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WHO","WIPO","W= -MO"]). -bgfact("Suriname","ExportCommodities",["alumina","aluminum","shrimp and = -fish","rice","bananas"]). -bgfact("Suriname","ExportPartners",["Norway","Netherlands","US","Japan","= -Brazil","UK"]). -bgfact("Suriname","ImportCommodities",["Capital = -equipment","petroleum","foodstuffs","cotton","consumer goods"]). -bgfact("Suriname","ImportPartners",["US","Netherlands","Trinidad and = -Tobago","Brazil"]). -bgfact("Suriname","Industries",["bauxite mining","alumina and aluminum = -production","lumbering","food processing","fishing"]). -bgfact("Suriname","Agriculture",["palm = -kernels","coconuts","plantains","peanuts","beef","self-sufficient in = -most foods"]). -bgfact("Svalbard","LandBounderies",[]). -bgfact("Svalbard","NaturalResources",["coal","copper","iron = -ore","phosphate","zinc","wildlife","fish"]). -bgfact("Svalbard","Population",["3018"]). -bgfact("Svalbard","Capital",["Longyearbyen"]). -bgfact("Svalbard","MemberOf",["none"]). -bgfact("Swaziland","LandBounderies",["Mozambique","South Africa"]). -bgfact("Swaziland","NaturalResources",["asbestos","coal","clay","cassiter= -ite","hydropower","forests","small gold and diamond deposits","quarry = -stone"]). -bgfact("Swaziland","Population",["936369"]). -bgfact("Swaziland","Capital",["Mbabane"]). -bgfact("Swaziland","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","G-77",= -"GATT","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF","INTELSAT","I= -NTERPOL","IOC","ITU","LORCS","NAM","OAU","PCA","SACU","SADC","UN","UNCTAD= -","UNESCO","UNIDO","UPU","WHO","WIPO","WMO"]). -bgfact("Swaziland","ExportCommodities",["sugar","edible = -concentrates","wood pulp","canned fruit","citrus"]). -bgfact("Swaziland","ExportPartners",["South Africa","EC = -countries","Canada"]). -bgfact("Swaziland","ImportCommodities",["motor = -vehicles","machinery","transport equipment","petroleum = -products","foodstuffs","chemicals"]). -bgfact("Swaziland","ImportPartners",["South = -Africa","Switzerland","UK"]). -bgfact("Swaziland","Industries",["mining","wood pulp","sugar"]). -bgfact("Swaziland","Agriculture",["sugarcane","cotton","maize","tobacco",= -"rice","citrus fruit","sorghum","peanuts","cattle","goats","not = -self-sufficient in grain"]). -bgfact("Sweden","LandBounderies",["Finland","Norway"]). -bgfact("Sweden","NaturalResources",["zinc","iron = -ore","lead","copper","silver","timber","uranium","hydropower = -potential"]). -bgfact("Sweden","Population",["8778461"]). -bgfact("Sweden","Capital",["Stockholm"]). -bgfact("Sweden","MemberOf",["AfDB","AG","NC","NEA","NIB","NSG","OECD","ON= -USAL","PCA","UN","UNAVEM = -II","UNCTAD","UNESCO","UNFICYP","UNHCR","UNIDO","UNIFIL","UNIKOM","UNMOGI= -P","UNOMIG","UNOMOZ","UNOSOM","UNPROFOR","UNTAC","UNTSO","UPU","WFTU","WH= -O","WIPO","WMO","ZC"]). -bgfact("Sweden","ExportCommodities",["machinery","motor vehicles","paper = -products","pulp and wood","iron and steel = -products","chemicals","petroleum and petroleum products"]). -bgfact("Sweden","ExportPartners",["EC"]). -bgfact("Sweden","ImportCommodities",["machinery","petroleum and = -petroleum products","chemicals","motor vehicles","foodstuffs","iron and = -steel","clothing"]). -bgfact("Sweden","ImportPartners",["EC"]). -bgfact("Sweden","Industries",["iron and steel","precision = -equipment","wood pulp and paper products","processed foods","motor = -vehicles"]). -bgfact("Sweden","Agriculture",["animal husbandry predominates","main = -grains","sugar beets","farming accounted for of GDP and of jobs in"]). -bgfact("Switzerland","LandBounderies",["Austria","France","Italy","Liecht= -enstein","Germany"]). -bgfact("Switzerland","NaturalResources",["hydropower = -potential","timber","salt"]). -bgfact("Switzerland","Population",["7040119"]). -bgfact("Switzerland","Capital",["Bern"]). -bgfact("Switzerland","MemberOf",["AfDB","AG","UNCTAD","UNESCO","UNHCR","U= -NIDO","UNOMIG","UNPROFOR","UNTSO","UPU","WCL","WHO","WIPO","WMO","WTO","Z= -C"]). -bgfact("Switzerland","ExportCommodities",["machinery and = -equipment","precision instruments","metal = -products","foodstuffs","textiles and clothing"]). -bgfact("Switzerland","ExportPartners",["Western Europe","US","Japan"]). -bgfact("Switzerland","ImportCommodities",["agricultural = -products","machinery and transportation = -equipment","chemicals","textiles","construction materials"]). -bgfact("Switzerland","ImportPartners",["Western Europe","US"]). -bgfact("Switzerland","Industries",["machinery","chemicals","watches","tex= -tiles","precision instruments"]). -bgfact("Switzerland","Agriculture",["must import fish","refined = -sugar","fats and oils","grains","eggs","fruits","vegetables","meat"]). -bgfact("Syria","LandBounderies",["Iraq","Israel","Jordan","Lebanon","Turk= -ey"]). -bgfact("Syria","NaturalResources",["petroleum","phosphates","chrome and = -manganese ores","asphalt","iron ore","rock salt","marble","gypsum"]). -bgfact("Syria","Population",["14886672"]). -bgfact("Syria","Capital",["Damascus"]). -bgfact("Syria","MemberOf",["ABEDA","AFESD","AL","AMF","CAEU","CCC","ESCWA= -","FAO","G-24","G-77","IAEA","IBRD","ICAO","ICC","IDA","IDB","IFAD","IFC"= -,"ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM",= -"OAPEC","OIC","UN","UNCTAD","UNESCO","UNIDO","UNRWA","UPU","WFTU","WHO","= -WMO","WTO"]). -bgfact("Syria","ExportCommodities",["petroleum","textiles","cotton","frui= -ts and vegetables"]). -bgfact("Syria","ExportPartners",["EC","former CEMA countries","Arab = -countries"]). -bgfact("Syria","ImportCommodities",["foodstuffs","metal = -products","machinery"]). -bgfact("Syria","ImportPartners",["EC","former CEMA countries","US and = -Canada"]). -bgfact("Syria","Industries",["textiles","food = -processing","beverages","tobacco","phosphate rock mining","petroleum"]). -bgfact("Syria","Agriculture",["animal = -beef","lamb","eggs","poultry","not self-sufficient in grain or = -livestock products"]). -bgfact("Taiwan","LandBounderies",[]). -bgfact("Taiwan","NaturalResources",["small deposits of coal","natural = -gas","limestone","marble"]). -bgfact("Taiwan","Population",["21298930"]). -bgfact("Taiwan","Capital",["Taipei"]). -bgfact("Taiwan","MemberOf",["suspended from IAEA in","but still allows = -IAEA controls over extensive atomic = -development","APEC","AsDB","BCIE","ICC","IOC","COCOM","WCL"]). -bgfact("Taiwan","ExportCommodities",["electrical machinery","electronic = -products","textiles","footwear","foodstuffs","plywood and wood = -products"]). -bgfact("Taiwan","ExportPartners",["US","Hong Kong","EC = -countries","Japan"]). -bgfact("Taiwan","ImportCommodities",["machinery and = -equipment","electronic products","chemicals","iron and = -steel","crude","foodstuffs"]). -bgfact("Taiwan","ImportPartners",["Japan","US","EC countries"]). -bgfact("Taiwan","Industries",["electronics","textiles","chemicals","cloth= -ing","food processing","plywood","sugar = -milling","cement","shipbuilding","petroleum refining"]). -bgfact("Taiwan","Agriculture",["major = -vegetables","rice","fruit","livestock - hogs","poultry","beef","not = -self-sufficient in wheat","soybeans","fish catch increasing","reached = -million metric tons in"]). -bgfact("Tajikistan","LandBounderies",["Afghanistan","China","Kyrgyzstan",= -"Uzbekistan"]). -bgfact("Tajikistan","NaturalResources",["significant hydropower = -potential","some petroleum","uranium","mercury","brown = -coal","lead","zinc","antimony","tungsten"]). -bgfact("Tajikistan","Population",["5995469"]). -bgfact("Tajikistan","Capital",["Dushanbe"]). -bgfact("Tajikistan","MemberOf",["CIS","CSCE","EBRD","ECO","ESCAP","IBRD",= -"IDA","IDB","IMF","INTELSAT","IOC","NACC","OIC","UN","UNCTAD","UNESCO","U= -NIDO","WHO","WMO"]). -bgfact("Tajikistan","ExportCommodities",["cotton","aluminum","fruits","ve= -getable oil","textiles"]). -bgfact("Tajikistan","ExportPartners",["Russia","Kazakhstan","Ukraine","Uz= -bekistan","Turkmenistan"]). -bgfact("Tajikistan","ImportCommodities",["fuel","chemicals","machinery = -and transport equipment","textiles","foodstuffs"]). -bgfact("Tajikistan","ImportPartners",["Russia","Uzbekistan","Kazakhstan"]= -). -bgfact("Tajikistan","Industries",["aluminum","zinc","lead","chemicals = -and fertilizers","cement","vegetable oil","metal-cutting machine = -tools","refrigerators and freezers"]). -bgfact("Tajikistan","Agriculture",["cotton","grain","fruits","grapes","ca= -ttle","sheep and goats"]). -bgfact("Tanzania","LandBounderies",["Burundi","Kenya","Malawi","Mozambiqu= -e","Rwanda","Uganda","Zambia"]). -bgfact("Tanzania","NaturalResources",["hydropower = -potential","tin","phosphates","iron = -ore","coal","diamonds","gemstones","gold","natural gas","nickel"]). -bgfact("Tanzania","Population",["27985660"]). -bgfact("Tanzania","Capital",["Dar es Salaam"]). -bgfact("Tanzania","MemberOf",["ACP","AfDB","C","CCC","EADB","ECA","FAO","= -FLS","G-6","G-77","GATT","IAEA","IBRD","ICAO","IDA","IFAD","IFC","ILO","I= -MF","IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS","NAM","OAU","SA= -DC","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WHO","WIPO","WMO"= -,"WTO"]). -bgfact("Tanzania","ExportCommodities",["coffee","cotton","tobacco","tea",= -"cashew nuts","sisal"]). -bgfact("Tanzania","ExportPartners",["FRG","UK","Japan","Netherlands","Ken= -ya","Hong Kong","US"]). -bgfact("Tanzania","ImportCommodities",["manubgfactured goods","machinery = -and transportation equipment","cotton piece = -goods","crude","foodstuffs"]). -bgfact("Tanzania","ImportPartners",["FRG","UK","US","Japan","Italy","Denm= -ark"]). -bgfact("Tanzania","Industries",["primarily agricultural = -processing","diamond and gold mining","oil = -refinery","shoes","cement","textiles","wood products","fertilizer"]). -bgfact("Tanzania","Agriculture",["coffee","sisal","tea","cotton","food = -corn","wheat","cassava","bananas","fruits","small numbers of = -cattle","sheep","not self-sufficient in food grain production"]). -bgfact("Thailand","LandBounderies",["Burma","Cambodia","Laos","Malaysia"]= -). -bgfact("Thailand","NaturalResources",["tin","rubber","natural = -gas","tungsten","tantalum","timber","lead","fish","gypsum","lignite","flu= -orite"]). -bgfact("Thailand","Population",["59510471"]). -bgfact("Thailand","Capital",["Bangkok"]). -bgfact("Thailand","MemberOf",["APEC","AsDB","ASEAN","CCC","CP","ESCAP","F= -AO","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","= -IMF","IMO","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","NAM","P= -CA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNIKOM","UNTAC","UPU","WCL","= -WFTU","WHO","WIPO","WMO"]). -bgfact("Thailand","ExportCommodities",["machinery and = -manubgfactures","agricultural products","fisheries products"]). -bgfact("Thailand","ExportPartners",["US","Japan","Singapore","Hong = -Kong","Germany","Netherlands","UK","Malaysia","France","China"]). -bgfact("Thailand","ImportCommodities",["Capital goods","intermediate = -goods and raw materials","consumer goods","oil"]). -bgfact("Thailand","ImportPartners",["Japan","US","Singapore","Taiwan","Ge= -rmany","South Korea","Malaysia","China","Hong Kong","UK"]). -bgfact("Thailand","Industries",["textiles and garments","agricultural = -processing","beverages","tobacco","cement","light = -manubgfacturing","electric appliances and components","integrated = -circuits","furniture","world's second-largest tungsten producer and = -third-largest tin producer"]). -bgfact("Thailand","Agriculture",["corn","sugarcane","coconuts","except = -for wheat","self-sufficient in food"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","LandBounderies",["Albania","Bulgaria","Greece","Serbia and = -Montenegro"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","NaturalResources",["chromium","lead","zinc","manganese","tung= -sten","nickel","low-grade iron ore","asbestos","sulphur","timber"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","Population",["2213785"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","Capital",["Skopje"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","MemberOf",["CE","ITU","UN","UNCTAD","UNESCO","UNIDO","UPU","W= -HO","WIPO","WMO"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","ExportCommodities",["manubgfactured goods","machinery and = -transport equipment","miscellaneous manubgfactured articles","raw = -materials","food"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","ExportPartners",["Germany","Greece","Albania"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","ImportCommodities",["fuels and lubricants","manubgfactured = -goods","machinery and transport equipment","food and live = -animals","chemicals","raw materials","miscellaneous manubgfactured = -articles","beverages and tobacco"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","ImportPartners",["Greece","Albania","Germany","Bulgaria"]). -bgfact("The Former Yugoslav Republic of Macedonia","Industries",["low = -levels of technology predominate","such as","produces basic liquid = -fuels","coal","metallic chromium","lead","zinc","light industry = -produces basic textiles","wood products"]). -bgfact("The Former Yugoslav Republic of = -Macedonia","Agriculture",["principal crops are = -rice","tobacco","wheat","corn","also grown are = -cotton","sesame","mulberry leaves","citrus fruit","The Former Yugoslav = -Republic of Macedonia is one of the seven legal cultivators of the = -opium poppy for the world pharmaceutical industry","agricultural = -production is highly labor intensive"]). -bgfact("Togo","LandBounderies",["Benin","Burkina","Ghana"]). -bgfact("Togo","NaturalResources",["phosphates","limestone","marble"]). -bgfact("Togo","Population",["4255090"]). -bgfact("Togo","Capital",["Lome"]). -bgfact("Togo","MemberOf",["ACCT","ACP","AfDB","CCC","CEAO","ECA","ECOWAS"= -,"Entente","FAO","FZ","G-77","GATT","IBRD","ICAO","ICC","ICFTU","IDA","IF= -AD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NA= -M","OAU","UN","UNCTAD","UNESCO","UNIDO","UPU","WADB","WCL","WHO","WIPO","= -WMO","WTO"]). -bgfact("Togo","ExportCommodities",["phosphates","cotton","cocoa","coffee"= -]). -bgfact("Togo","ExportPartners",["EC","Africa","US"]). -bgfact("Togo","ImportCommodities",["machinery and equipment","consumer = -goods","food","chemical products"]). -bgfact("Togo","ImportPartners",["EC","Africa","US","Japan"]). -bgfact("Togo","Industries",["phosphate mining","agricultural = -processing","cement","handicrafts","textiles","beverages"]). -bgfact("Togo","Agriculture",["coffee","cocoa","yams","cassava","corn","be= -ans","rice","millet","annual fish catch of"]). -bgfact("Tokelau","LandBounderies",[]). -bgfact("Tokelau","NaturalResources",["negligible"]). -bgfact("Tokelau","Population",["1523"]). -bgfact("Tokelau","Capital",["none; each atoll has its own administrative = -center"]). -bgfact("Tokelau","MemberOf",["SPC","WHO"]). -bgfact("Tokelau","ExportCommodities",["stamps","copra","handicrafts"]). -bgfact("Tokelau","ExportPartners",["NZ"]). -bgfact("Tokelau","ImportCommodities",["foodstuffs","building = -materials","fuel"]). -bgfact("Tokelau","ImportPartners",["NZ"]). -bgfact("Tokelau","Industries",["small-scale enterprises for copra = -production","wood work","stamps","fishing"]). -bgfact("Tokelau","Agriculture",["coconuts","basic subsistence = -breadfruit","papaya","pigs","poultry","goats"]). -bgfact("Tonga","LandBounderies",[]). -bgfact("Tonga","NaturalResources",["fish","fertile soil"]). -bgfact("Tonga","Population",["104778"]). -bgfact("Tonga","Capital",["Nuku'alofa"]). -bgfact("Tonga","MemberOf",["ACP","AsDB","C","ESCAP","FAO","G-77","IBRD","= -ICAO","ICFTU","IDA","IFAD","IFC","IMF","INTELSAT","INTERPOL","IOC","ITU",= -"LORCS","SPARTECA","SPC","SPF","UNCTAD","UNESCO","UNIDO","UPU","WHO"]). -bgfact("Tonga","ExportCommodities",["vanilla","fish","root = -crops","coconut oil","squash"]). -bgfact("Tonga","ExportPartners",["Japan","US","Australia","NZ"]). -bgfact("Tonga","ImportCommodities",["food products","machinery and = -transport equipment","manubgfactures","fuels","chemicals"]). -bgfact("Tonga","ImportPartners",["NZ","Australia","US","Japan"]). -bgfact("Tonga","Industries",["tourism","fishing"]). -bgfact("Tonga","Agriculture",["dominated by coconut","copra","vanilla = -beans","cocoa","coffee","ginger","black pepper"]). -bgfact("Trinidad and Tobago","LandBounderies",[]). -bgfact("Trinidad and Tobago","NaturalResources",["petroleum","natural = -gas","asphalt"]). -bgfact("Trinidad and Tobago","Population",["1328282"]). -bgfact("Trinidad and Tobago","Capital",["Port-of-Spain"]). -bgfact("Trinidad and = -Tobago","MemberOf",["ACP","C","CARICOM","CCC","CDB","ECLAC","FAO","G-24",= -"G-77","GATT","IADB","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO","IMF"= -,"IMO","INTELSAT","INTERPOL","IOC","ISO","ITU","LAES","LORCS","NAM","OAS"= -,"OPANAL","UN","UNCTAD","UNESCO","UNIDO","UPU","WFTU","WHO","WIPO","WMO"]= -). -bgfact("Trinidad and Tobago","ExportCommodities",["petroleum and = -petroleum products","chemicals","steel = -products","fertilizer","sugar","cocoa","coffee","citrus","flowers"]). -bgfact("Trinidad and Tobago","ExportPartners",["US","CARICOM","Latin = -America","EC"]). -bgfact("Trinidad and = -Tobago","ImportCommodities",["machinery","transportation = -equipment","manubgfactured goods","food","live animals"]). -bgfact("Trinidad and Tobago","ImportPartners",["US","Venezuela","UK"]). -bgfact("Trinidad and = -Tobago","Industries",["petroleum","chemicals","tourism","food = -processing","cement","beverage","cotton textiles"]). -bgfact("Trinidad and Tobago","Agriculture",["major cocoa","sugarcane = -acreage is being shifted into rice","citrus","coffee","must import large = -share of food needs"]). -bgfact("Tromelin Island","LandBounderies",[]). -bgfact("Tromelin Island","NaturalResources",["fish"]). -bgfact("Tromelin Island","Capital",["none; administered by France from = -Reunion"]). -bgfact("Tunisia","LandBounderies",["Algeria","Libya"]). -bgfact("Tunisia","NaturalResources",["petroleum","phosphates","iron = -ore","lead","zinc","salt"]). -bgfact("Tunisia","Population",["8726562"]). -bgfact("Tunisia","Capital",["Tunis"]). -bgfact("Tunisia","MemberOf",["ABEDA","ACCT","AfDB","AFESD","AL","AMF","AM= -U","CCC","ECA","FAO","G-77","GATT","IAEA","IBRD","ICAO","ICC","ICFTU","ID= -A","IDB","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT","INTERPOL",= -"IOC","ISO","ITU","LORCS","MINURSO","NAM","OAPEC","OAU","OIC","UN","UNCTA= -D","UNESCO","UNHCR","UNIDO","UNOSOM","UNPROFOR","UNTAC","UPU","WHO","WIPO= -","WMO","WTO"]). -bgfact("Tunisia","ExportCommodities",["hydrocarbons","agricultural = -products","phosphates and chemicals"]). -bgfact("Tunisia","ExportPartners",["EC countries","Middle = -East","Algeria","India","US"]). -bgfact("Tunisia","ImportCommodities",["industrial goods and = -equipment","hydrocarbons","food","consumer goods"]). -bgfact("Tunisia","ImportPartners",["EC countries","US","Middle = -East","Japan","Switzerland","Algeria"]). -bgfact("Tunisia","Industries",["petroleum","mining","tourism","textiles",= -"footwear","food","beverages"]). -bgfact("Tunisia","Agriculture",["export = -olives","dates","oranges","sugar beets","wine = -grapes","poultry","beef","not self-sufficient in food"]). -bgfact("Turkey","LandBounderies",["Armenia","Azerbaijan","Bulgaria","Geor= -gia","Greece","Iran","Iraq","Syria"]). -bgfact("Turkey","NaturalResources",["antimony","coal","chromium","mercury= -","copper","borate","sulphur","iron ore"]). -bgfact("Turkey","Population",["62153898"]). -bgfact("Turkey","Capital",["Ankara"]). -bgfact("Turkey","MemberOf",["AsDB","BIS","BSEC","CCC","CE","CERN","WFTU",= -"WHO","WIPO","WMO","WTO"]). -bgfact("Turkey","ExportCommodities",["manubgfactured = -products","foodstuffs","mining products"]). -bgfact("Turkey","ExportPartners",["EC countries","US","Russia","Saudi = -Arabia"]). -bgfact("Turkey","ImportCommodities",["manubgfactured = -products","fuels","foodstuffs"]). -bgfact("Turkey","ImportPartners",["EC countries","US","Saudi = -Arabia","Russia"]). -bgfact("Turkey","Industries",["textiles","food = -processing","mining","steel","petroleum","construction","lumber","paper"]= -). -bgfact("Turkey","Agriculture",["tobacco","cotton","grain","olives","sugar= - beets","pulses","citrus fruit","self-sufficient in food most years"]). -bgfact("Turkmenistan","LandBounderies",["Afghanistan","Iran","Kazakhstan"= -,"Uzbekistan"]). -bgfact("Turkmenistan","NaturalResources",["petroleum","natural = -gas","coal","sulphur","salt"]). -bgfact("Turkmenistan","Population",["3995122"]). -bgfact("Turkmenistan","Capital",["Ashgabat"]). -bgfact("Turkmenistan","MemberOf",["CIS","CSCE","EBRD","ECE","ECO","ESCAP"= -,"IBRD","ICAO","IDB","ILO","IMF","IMO","INTELSAT","IOC","ITU","NACC","OIC= -","UN","UNCTAD","UNESCO","UPU","WHO","WMO"]). -bgfact("Turkmenistan","ExportCommodities",["natural = -gas","cotton","petroleum products","textiles","carpets"]). -bgfact("Turkmenistan","ExportPartners",["Ukraine","Russia","Kazakhstan","= -Uzbekistan","Georgia","Eastern Europe","Turkey","Argentina"]). -bgfact("Turkmenistan","ImportCommodities",["machinery and parts","grain = -and food","plastics and rubber","consumer durables","textiles"]). -bgfact("Turkmenistan","ImportPartners",["Russia","Azerbaijan","Uzbekistan= -","Kazakhstan","Turkey"]). -bgfact("Turkmenistan","Industries",["natural gas","oil","petroleum = -products","textiles","food processing"]). -bgfact("Turkmenistan","Agriculture",["cotton","grain","animal = -husbandry"]). -bgfact("Turks and Caicos Islands","LandBounderies",[]). -bgfact("Turks and Caicos Islands","NaturalResources",["spiny = -lobster","conch"]). -bgfact("Turks and Caicos Islands","Population",["13552"]). -bgfact("Turks and Caicos Islands","Capital",["Grand Turk"]). -bgfact("Turks and Caicos Islands","MemberOf",["CARICOM"]). -bgfact("Turks and Caicos Islands","ExportCommodities",["lobster","dried = -and fresh conch","conch shells"]). -bgfact("Turks and Caicos Islands","ExportPartners",["US","UK"]). -bgfact("Turks and Caicos Islands","ImportCommodities",["food and = -beverages","tobacco","clothing","manubgfactures","construction = -materials"]). -bgfact("Turks and Caicos Islands","ImportPartners",["US","UK"]). -bgfact("Turks and Caicos = -Islands","Industries",["fishing","tourism","offshore financial = -services"]). -bgfact("Turks and Caicos Islands","Agriculture",["subsistence farming = -prevails","not self-sufficient in food"]). -bgfact("Tuvalu","LandBounderies",[]). -bgfact("Tuvalu","NaturalResources",["fish"]). -bgfact("Tuvalu","Population",["9831"]). -bgfact("Tuvalu","Capital",["Funafuti"]). -bgfact("Tuvalu","MemberOf",["ACP","AsDB","C","ITU","SPARTECA","SPC","SPF"= -,"UNESCO","UPU","WHO"]). -bgfact("Tuvalu","ExportCommodities",["copra"]). -bgfact("Tuvalu","ExportPartners",["Fiji","Australia","NZ"]). -bgfact("Tuvalu","ImportCommodities",["food","animals","mineral = -fuels","machinery","manubgfactured goods"]). -bgfact("Tuvalu","ImportPartners",["Fiji","Australia","NZ"]). -bgfact("Tuvalu","Industries",["fishing","tourism","copra"]). -bgfact("Tuvalu","Agriculture",["coconuts and fish"]). -bgfact("Uganda","LandBounderies",["Kenya","Rwanda","Sudan","Tanzania","Za= -ire"]). -bgfact("Uganda","NaturalResources",["copper","cobalt","limestone","salt"]= -). -bgfact("Uganda","Population",["19121934"]). -bgfact("Uganda","Capital",["Kampala"]). -bgfact("Uganda","MemberOf",["ACP","AfDB","C","CCC","EADB","ECA","FAO","G-= -77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IDB","IFAD","IFC","IGADD",= -"ILO","IMF","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","NAM","= -OAU","OIC","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UNOSOM","UPU","W= -HO","WIPO","WMO","WTO"]). -bgfact("Uganda","ExportCommodities",["coffee","cotton","tea"]). -bgfact("Uganda","ExportPartners",["US","UK","France","Spain"]). -bgfact("Uganda","ImportCommodities",["petroleum = -products","machinery","cotton piece goods","metals","transportation = -equipment","food"]). -bgfact("Uganda","ImportPartners",["Kenya","UK","Italy"]). -bgfact("Uganda","Industries",["sugar","brewing","tobacco","cotton = -textiles","cement"]). -bgfact("Uganda","Agriculture",["coffee","tea","cotton","food = -cassava","potatoes","corn","millet","livestock beef","goat = -meat","milk","self-sufficient in food"]). -bgfact("Ukraine","LandBounderies",["Belarus","Hungary","Moldova","Poland"= -,"Romania","Russia","Slovakia"]). -bgfact("Ukraine","NaturalResources",["iron = -ore","coal","manganese","natural = -gas","oil","salt","sulphur","graphite","titanium","magnesium","kaolin","n= -ickel","mercury","timber"]). -bgfact("Ukraine","Population",["51846958"]). -bgfact("Ukraine","Capital",["Kiev"]). -bgfact("Ukraine","MemberOf",["BSEC","CBSS","INTERPOL","IOC","ITU","NACC",= -"PCA","UN","UNCTAD","UNESCO","UNIDO","UNPROFOR","UPU","WHO","WIPO","WMO"]= -). -bgfact("Ukraine","ExportCommodities",["coal","electric power","ferrous = -and nonferrous metals","chemicals","machinery and transport = -equipment","grain","meat"]). -bgfact("Ukraine","ExportPartners",["FSU = -countries","Germany","China","Austria"]). -bgfact("Ukraine","ImportCommodities",["machinery and = -parts","transportation equipment","chemicals","textiles"]). -bgfact("Ukraine","ImportPartners",["FSU = -countries","Germany","China","Austria"]). -bgfact("Ukraine","Industries",["coal","electric power","ferrous and = -nonferrous metals","machinery and transport = -equipment","chemicals","food-processing"]). -bgfact("Ukraine","Agriculture",["grain","vegetables","meat","milk","sugar= - beets"]). -bgfact("United Arab Emirates","LandBounderies",["Oman","Saudi Arabia"]). -bgfact("United Arab Emirates","NaturalResources",["petroleum","natural = -gas"]). -bgfact("United Arab Emirates","Population",["2791141"]). -bgfact("United Arab Emirates","Capital",["Abu Dhabi"]). -bgfact("United Arab = -Emirates","MemberOf",["ABEDA","AFESD","AL","AMF","CAEU","CCC","ESCWA","FA= -O","G-77","GATT","GCC","IAEA","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO= -","IMF","IMO","INMARSAT","INTELSAT","INTERPOL","IOC","ISO","ITU","LORCS",= -"NAM","OAPEC","OIC","OPEC","UN","UNCTAD","UNESCO","UNIDO","UNOSOM","UPU",= -"WHO","WIPO","WMO","WTO"]). -bgfact("United Arab Emirates","ExportCommodities",["crude","natural = -gas","re-exports","dried fish","dates"]). -bgfact("United Arab = -Emirates","ExportPartners",["Japan","Singapore","Korea","Iran","India"]).= - -bgfact("United Arab Emirates","ImportCommodities",["manubgfactured = -goods","machinery and transport equipment","food"]). -bgfact("United Arab = -Emirates","ImportPartners",["Japan","UK","US","Germany"]). -bgfact("United Arab = -Emirates","Industries",["petroleum","fishing","petrochemicals","construct= -ion materials","some boat building","handicrafts","pearling"]). -bgfact("United Arab Emirates","Agriculture",["food = -vegetables","watermelons","poultry","eggs","dairy","only self-sufficient = -in food"]). -bgfact("United Kingdom","LandBounderies",["Ireland"]). -bgfact("United Kingdom","NaturalResources",["coal","petroleum","natural = -gas","tin","limestone","iron = -ore","salt","clay","chalk","gypsum","lead","silica"]). -bgfact("United Kingdom","Population",["58135110"]). -bgfact("United Kingdom","Capital",["London"]). -bgfact("United = -Kingdom","MemberOf",["AfDB","AG","ISO","ITU","LORCS","MINURSO","MTRC","NA= -CC","NATO","NEA","NSG","OECD","PCA","SPC","UN","UNCTAD","UNFICYP","UNHCR"= -,"UNIDO","UNIKOM","UNPROFOR","UNRWA","UN Security Council","UNTAC","UN = -Trusteeship Council","UPU","WCL","WEU","WHO","WIPO","WMO","ZC"]). -bgfact("United Kingdom","ExportCommodities",["manubgfactured = -goods","machinery","fuels","chemicals","semifinished goods","transport = -equipment"]). -bgfact("United Kingdom","ExportPartners",["EC countries","US"]). -bgfact("United Kingdom","ImportCommodities",["manubgfactured = -goods","machinery","semifinished goods","foodstuffs","consumer goods"]). -bgfact("United Kingdom","ImportPartners",["EC countries","US"]). -bgfact("United Kingdom","Industries",["production machinery including = -machine tools","electric power equipment","equipment for the automation = -of production","railroad equipment","shipbuilding","aircraft","motor = -vehicles and parts","electronics and communications = -equipment","metals","chemicals","coal","petroleum","paper and paper = -products","food processing","textiles","clothing"]). -bgfact("United Kingdom","Agriculture",["about self-sufficient in food = -and feed needs"]). -bgfact("United States","LandBounderies",["Canada","Mexico"]). -bgfact("United = -States","NaturalResources",["coal","copper","lead","molybdenum","phosphat= -es","uranium","bauxite","gold","iron","mercury","nickel","potash","silver= -","tungsten","zinc","petroleum","natural gas","timber"]). -bgfact("United States","Population",["260713585"]). -bgfact("United States","Capital",["Washington, DC"]). -bgfact("United = -States","MemberOf",["AfDB","AG","ANZUS","APEC","AsDB","Australian = -Group","BIS","CCC","COCOM","CP","CSCE","EBRD","ECE","ECLAC","FAO","ESCAP"= -,"G-2","G-5","G-7","G-8","G-10","GATT","IADB","IAEA","IBRD","ICAO","ICC",= -"ICFTU","IDA","IEA","IFAD","IFC","ILO","IMF","IMO","INMARSAT","INTELSAT",= -"INTERPOL","IOC","IOM","ISO","ITU","LORCS","MINURSO","MTCR","NACC","NATO"= -,"NEA","NSG","OAS","OECD","PCA","SPC","UN","UNCTAD","UNHCR","UNIDO","UNIK= -OM","UNOSOM","UNRWA","UN Security Council","UNTAC","UN Trusteeship = -Council","UNTSO","UPU","WCL","WHO","WIPO","WMO","WTO","ZC"]). -bgfact("United States","ExportCommodities",["Capital = -goods","automobiles","industrial supplies and raw materials","consumer = -goods","agricultural products"]). -bgfact("United States","ExportPartners",["Western = -Europe","Canada","Japan"]). -bgfact("United States","ImportCommodities",["crude and refined petroleum = -products","machinery","automobiles","consumer goods","industrial raw = -materials","food and beverages"]). -bgfact("United States","ImportPartners",["Canada","Western = -Europe","Japan"]). -bgfact("United States","Industries",["leading industrial power in the = -world","petroleum","steel","motor = -vehicles","aerospace","telecommunications","chemicals","electronics","foo= -d processing","consumer goods","lumber","mining"]). -bgfact("United States","Agriculture",["fish catch of million metric = -tons"]). -bgfact("Uruguay","LandBounderies",["Argentina","Brazil"]). -bgfact("Uruguay","NaturalResources",["soil","hydropower = -potential","minor minerals"]). -bgfact("Uruguay","Population",["3198910"]). -bgfact("Uruguay","Capital",["Montevideo"]). -bgfact("Uruguay","MemberOf",["AG","OAS","OPANAL","PCA","RG","UN","UNCTAD"= -,"UNESCO","UNIDO","UNIKOM","UNMOGIP","UNOMOZ","UNTAC","UPU","WCL","WFTU",= -"WHO","WIPO","WMO","WTO"]). -bgfact("Uruguay","ExportCommodities",["wool and textile = -manubgfactures","leather","rice"]). -bgfact("Uruguay","ExportPartners",["Brazil","Argentina","US","China","Ita= -ly"]). -bgfact("Uruguay","ImportCommodities",["machinery and = -equipment","vehicles","chemicals","minerals","plastics"]). -bgfact("Uruguay","ImportPartners",["Brazil","Argentina","US","Nigeria"]).= - -bgfact("Uruguay","Industries",["meat processing","wool and = -hides","sugar","textiles","footwear","leather = -apparel","tires","cement","fishing","petroleum refining","wine"]). -bgfact("Uruguay","Agriculture",["wheat","rice","corn","self-sufficient = -in most basic foodstuffs"]). -bgfact("Uzbekistan","LandBounderies",["Afghanistan","Kazakhstan","Kyrgyzs= -tan","Tajikistan","Turkmenistan"]). -bgfact("Uzbekistan","NaturalResources",["natural = -gas","petroleum","coal","gold","uranium","silver","copper","lead and = -zinc","tungsten","molybdenum"]). -bgfact("Uzbekistan","Population",["22608866"]). -bgfact("Uzbekistan","Capital",["Tashkent"]). -bgfact("Uzbekistan","MemberOf",["CCC","CIS","CSCE","EBRD","ECE","ECO","ES= -CAP","IBRD","ICAO","IDA","IFC","ILO","IMF","IOC","ITU","NACC","NAM","UN",= -"UNCTAD","WHO","WMO"]). -bgfact("Uzbekistan","ExportCommodities",["cotton","gold","natural = -gas","mineral fertilizers","ferrous metals","textiles","food = -products"]). -bgfact("Uzbekistan","ExportPartners",["Russia","Ukraine","Eastern = -Europe","US"]). -bgfact("Uzbekistan","ImportCommodities",["grain","machinery and = -parts","consumer durables"]). -bgfact("Uzbekistan","ImportPartners",["Czech Republic"]). -bgfact("Uzbekistan","Industries",["textiles","food processing","machine = -building","metallurgy","natural gas"]). -bgfact("Uzbekistan","Agriculture",["livestock","cotton","vegetables","fru= -its","grain"]). -bgfact("Vanuatu","LandBounderies",[]). -bgfact("Vanuatu","NaturalResources",["manganese","hardwood = -forests","fish"]). -bgfact("Vanuatu","Population",["169776"]). -bgfact("Vanuatu","Capital",["Port-Vila"]). -bgfact("Vanuatu","MemberOf",["ACCT","ACP","AsDB","C","ESCAP","FAO","G-77"= -,"IBRD","ICAO","IDA","IFC","IMF","IMO","INTELSAT","IOC","ITU","NAM","SPAR= -TECA","SPC","SPF","UN","UNCTAD","UNIDO","UPU","WHO","WMO"]). -bgfact("Vanuatu","ExportCommodities",["copra","beef","cocoa","timber","co= -ffee"]). -bgfact("Vanuatu","ExportPartners",["Netherlands","Japan","France","New = -Caledonia","Belgium"]). -bgfact("Vanuatu","ImportCommodities",["machines and vehicles","food and = -beverages","basic manubgfactures","raw materials and = -fuels","chemicals"]). -bgfact("Vanuatu","ImportPartners",["Australia","Japan","NZ","France","Fij= -i"]). -bgfact("Vanuatu","Industries",["food and fish freezing","wood = -processing","meat canning"]). -bgfact("Vanuatu","Agriculture",["export = -coconuts","cocoa","coffee","subsistence = -taro","yams","coconuts","fruits","vegetables"]). -bgfact("Venezuela","LandBounderies",["Brazil","Colombia","Guyana"]). -bgfact("Venezuela","NaturalResources",["petroleum","natural gas","iron = -ore","gold","bauxite","hydropower","diamonds"]). -bgfact("Venezuela","Population",["20562405"]). -bgfact("Venezuela","Capital",["Caracas"]). -bgfact("Venezuela","MemberOf",["AG","BCIE","CARICOM","CDB","CG","ECLAC","= -FAO","G-3","G-11","G-15","G-19","G-24","G-77","GATT","IADB","IAEA","IBRD"= -,"ICAO","ICC","ICFTU","IFAD","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL= -","IOC","IOM","ISO","ITU","LAES","LAIA","LORCS","MINURSO","NAM","OAS","ON= -USAL","OPANAL","OPEC","PCA","RG","UN","UNCTAD","UNESCO","UNHCR","UNIDO","= -UNIKOM","UNPROFOR","UPU","WCL","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Venezuela","ExportCommodities",["petroleum","bauxite and = -aluminum","steel","chemicals","agricultural products","basic = -manubgfactures"]). -bgfact("Venezuela","ExportPartners",["US and Puerto = -Rico","Japan","Netherlands","Italy"]). -bgfact("Venezuela","ImportCommodities",["raw materials","machinery and = -equipment","transport equipment","construction materials"]). -bgfact("Venezuela","ImportPartners",["US","Germany","Japan","Netherlands"= -,"Canada"]). -bgfact("Venezuela","Industries",["petroleum","iron-ore = -mining","construction materials","food = -processing","textiles","steel","aluminum","motor vehicle assembly"]). -bgfact("Venezuela","Agriculture",["corn","sorghum","sugarcane","rice","ba= -nanas","vegetables","coffee","beef","pork","milk","eggs"]). -bgfact("Vietnam","LandBounderies",["Cambodia","China","Laos"]). -bgfact("Vietnam","NaturalResources",["phosphates","coal","manganese","bau= -xite","chromate","offshore oil deposits","forests"]). -bgfact("Vietnam","Population",["73103898"]). -bgfact("Vietnam","Capital",["Hanoi"]). -bgfact("Vietnam","MemberOf",["ACCT","AsDB","ASEAN","ISO","ITU","LORCS","N= -AM","UN","UNCTAD","UNESCO","UNIDO","UPU","WCL","WFTU","WHO","WIPO","WMO",= -"WTO"]). -bgfact("Vietnam","ExportCommodities",["petroleum","rice","agricultural = -products","marine products","coffee"]). -bgfact("Vietnam","ExportPartners",["Japan","Hong = -Kong","Thailand","Germany","Indonesia"]). -bgfact("Vietnam","ImportCommodities",["petroleum products","steel = -products","railroad equipment","chemicals","medicines","raw = -cotton","fertilizer","grain"]). -bgfact("Vietnam","ImportPartners",["Hong = -Kong","Japan","Indonesia","South Korea","Taiwan"]). -bgfact("Vietnam","Industries",["food processing","textiles","machine = -building","mining","cement","chemical = -fertilizer","glass","tires","oil"]). -bgfact("Vietnam","Agriculture",["paddy rice","corn","commercial = -crops"]). -bgfact("Virgin Islands","LandBounderies",[]). -bgfact("Virgin Islands","NaturalResources",["sun","sand","sea","surf"]). -bgfact("Virgin Islands","Population",["97564"]). -bgfact("Virgin Islands","Capital",["Charlotte Amalie"]). -bgfact("Virgin Islands","MemberOf",["ECLAC","IOC"]). -bgfact("Virgin Islands","ExportCommodities",["refined petroleum = -products"]). -bgfact("Virgin Islands","ExportPartners",["US","Puerto Rico"]). -bgfact("Virgin = -Islands","ImportCommodities",["crude","foodstuffs","consumer = -goods","building materials"]). -bgfact("Virgin Islands","ImportPartners",["US","Puerto Rico"]). -bgfact("Virgin Islands","Industries",["tourism","petroleum = -refining","watch assembly","rum = -distilling","construction","pharmaceuticals","textiles","electronics"]). -bgfact("Virgin Islands","Agriculture",["truck gardens","food = -crops","fruit","sorghum","Senepol cattle"]). -bgfact("Wake Island","LandBounderies",[]). -bgfact("Wake Island","NaturalResources",["none"]). -bgfact("Wake Island","Population",["302"]). -bgfact("Wake Island","Capital",["none; administered from Washington, = -DC"]). -bgfact("Wallis and Futuna","LandBounderies",[]). -bgfact("Wallis and Futuna","NaturalResources",["negligible"]). -bgfact("Wallis and Futuna","Population",["14338"]). -bgfact("Wallis and Futuna","Capital",["Mata-Utu"]). -bgfact("Wallis and Futuna","MemberOf",["FZ","SPC"]). -bgfact("Wallis and Futuna","ExportCommodities",["copra","handicrafts"]). -bgfact("Wallis and Futuna","ExportPartners",["NA"]). -bgfact("Wallis and = -Futuna","ImportCommodities",["foodstuffs","manubgfactured = -goods","transportation equipment","fuel"]). -bgfact("Wallis and Futuna","ImportPartners",["France","Australia","New = -Zealand"]). -bgfact("Wallis and = -Futuna","Industries",["copra","handicrafts","fishing","lumber"]). -bgfact("Wallis and Futuna","Agriculture",["dominated by coconut = -production","with subsistence crops of yams","taro","bananas"]). -bgfact("West Bank","LandBounderies",["Israel","Jordan"]). -bgfact("West Bank","NaturalResources",["negligible"]). -bgfact("West Bank","Population",["1443790"]). -bgfact("West Bank","ExportCommodities",["olives","fruit","vegetables"]). -bgfact("West Bank","ExportPartners",["Jordan","Israel"]). -bgfact("West Bank","ImportCommodities",["food","consumer = -goods","construction materials"]). -bgfact("West Bank","ImportPartners",["Jordan","Israel"]). -bgfact("West Bank","Industries",[]). -bgfact("West Bank","Agriculture",["olives","vegetables","beef"]). -bgfact("Western = -Sahara","LandBounderies",["Algeria","Mauritania","Morocco"]). -bgfact("Western Sahara","NaturalResources",["phosphates","iron ore"]). -bgfact("Western Sahara","Population",["211877"]). -bgfact("Western Sahara","Capital",["none"]). -bgfact("Western Sahara","MemberOf",["none"]). -bgfact("Western Sahara","ExportCommodities",["phosphates"]). -bgfact("Western Sahara","ExportPartners",["Morocco claims and = -administers Western Sahara","so trade partners are included in overall = -Moroccan accounts"]). -bgfact("Western Sahara","ImportCommodities",["fuel for fishing = -fleet","foodstuffs"]). -bgfact("Western Sahara","ImportPartners",["Morocco claims and = -administers Western Sahara","so trade partners are included in overall = -Moroccan accounts"]). -bgfact("Western Sahara","Industries",["phosphate = -mining","fishing","handicrafts"]). -bgfact("Western Sahara","Agriculture",["camels","sheep","economy exists = -largely for the garrison forces"]). -bgfact("Western Samoa","LandBounderies",[]). -bgfact("Western Samoa","NaturalResources",["hardwood forests","fish"]). -bgfact("Western Samoa","Population",["204447"]). -bgfact("Western Samoa","Capital",["Apia"]). -bgfact("Western = -Samoa","MemberOf",["ACP","AsDB","C","ESCAP","FAO","G-77","IBRD","ICFTU","= -IDA","IFAD","IFC","IMF","INTELSAT","IOC","ITU","LORCS","SPARTECA","SPC","= -SPF","UN","UNCTAD","UNESCO","UPU","WHO"]). -bgfact("Western Samoa","ExportCommodities",["coconut oil and = -cream","taro","copra","cocoa"]). -bgfact("Western Samoa","ExportPartners",["New Zealand","American = -Samoa","Germany","Australia"]). -bgfact("Western Samoa","ImportCommodities",["intermediate = -goods","food","Capital goods"]). -bgfact("Western Samoa","ImportPartners",["New = -Zealand","Australia","Japan","Fiji"]). -bgfact("Western Samoa","Industries",["timber","tourism","food = -processing","fishing"]). -bgfact("Western Samoa","Agriculture",["coconuts","fruit"]). -bgfact("Yemen","LandBounderies",["Oman","Saudi Arabia"]). -bgfact("Yemen","NaturalResources",["petroleum","fish","rock = -salt","marble","small deposits of coal","gold","lead","nickel","fertile = -soil in west"]). -bgfact("Yemen","Population",["11105202"]). -bgfact("Yemen","Capital",["Sanaa"]). -bgfact("Yemen","MemberOf",["ACC","AFESD","AL","AMF","CAEU","ESCWA","FAO",= -"G-77","IBRD","ICAO","IDA","IDB","IFAD","IFC","ILO","IMF","IMO","INTELSAT= -","INTERPOL","IOC","ITU","LORCS","NAM","OIC","UN","UNCTAD","UNESCO","UNID= -O","UPU","WFTU","WHO","WIPO","WMO","WTO"]). -bgfact("Yemen","ExportCommodities",["crude","cotton","coffee","hides","ve= -getables","dried and salted fish"]). -bgfact("Yemen","ExportPartners",["Italy","US","Jordan"]). -bgfact("Yemen","ImportCommodities",["petroleum = -products","sugar","grain","flour","cement","machinery","chemicals"]). -bgfact("Yemen","ImportPartners",["UAE","Japan","Saudi = -Arabia","Kuwait","US"]). -bgfact("Yemen","Industries",["cement"]). -bgfact("Yemen","Agriculture",["grain","fruits","vegetables","qat","coffee= -","cotton","dairy","poultry","meat","not self-sufficient in grain"]). -bgfact("Zaire","LandBounderies",["Angola","Burundi","Central African = -Republic","Congo","Rwanda","Sudan","Uganda","Zambia"]). -bgfact("Zaire","NaturalResources",["cobalt","copper","cadmium","petroleum= -","industrial and gem = -diamonds","gold","silver","zinc","manganese","tin","germanium","uranium",= -"radium","bauxite","iron ore","coal","hydropower potential"]). -bgfact("Zaire","Population",["42684091"]). -bgfact("Zaire","Capital",["Kinshasa"]). -bgfact("Zaire","MemberOf",["ACCT","ACP","AfDB","CCC","CEEAC","CEPGL","ECA= -","FAO","G-19","G-24","G-77","GATT","IAEA","IBRD","ICAO","ICC","IDA","IFA= -D","IFC","ILO","IMF","IMO","INTELSAT","INTERPOL","IOC","ITU","LORCS","NAM= -","OAU","PCA","UN","UNCTAD","UNESCO","UNHCR","UNIDO","UPU","WCL","WFTU","= -WHO","WIPO","WMO","WTO"]). -bgfact("Zaire","ExportCommodities",["copper","coffee","diamonds","cobalt"= -,"crude"]). -bgfact("Zaire","ExportPartners",["US","Belgium","France","Germany","Italy= -","UK","Japan","South Africa"]). -bgfact("Zaire","ImportCommodities",["consumer = -goods","foodstuffs","transport equipment","fuels"]). -bgfact("Zaire","ImportPartners",["South = -Africa","US","Belgium","France","Germany","Italy","Japan","UK"]). -bgfact("Zaire","Industries",["mining","mineral processing","consumer = -products","processed foods and beverages","cement","diamonds"]). -bgfact("Zaire","Agriculture",["coffee","palm oil","rubber","food = -cassava","bananas","root crops","corn"]). -bgfact("Zambia","LandBounderies",["Angola","Malawi","Mozambique","Namibia= -","Tanzania","Zaire","Zimbabwe"]). -bgfact("Zambia","NaturalResources",["copper","cobalt","zinc","lead","coal= -","emeralds","gold","silver","uranium","hydropower potential"]). -bgfact("Zambia","Population",["9188190"]). -bgfact("Zambia","Capital",["Lusaka"]). -bgfact("Zambia","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","FLS","G-1= -9","G-77","GATT","IAEA","IBRD","ICAO","IDA","IFAD","IFC","IFTU","ILO","IM= -F","INTELSAT","INTERPOL","IOC","IOM","ITU","LORCS","NAM","OAU","SADC","UN= -","UNCTAD","UNESCO","UNIDO","UNOMOZ","UNOSOM","UPU","WCL","WHO","WIPO","W= -MO","WTO"]). -bgfact("Zambia","ExportCommodities",["copper","zinc","cobalt","lead","tob= -acco"]). -bgfact("Zambia","ExportPartners",["EC countries","Japan","South = -Africa","US","India"]). -bgfact("Zambia","ImportCommodities",["machinery","transportation = -equipment","foodstuffs","fuels","manubgfactures"]). -bgfact("Zambia","ImportPartners",["EC countries","Japan","Saudi = -Arabia","South Africa","US"]). -bgfact("Zambia","Industries",["copper mining and = -processing","construction","foodstuffs","beverages","chemicals","textiles= -"]). -bgfact("Zambia","Agriculture",["corn","sorghum","rice","peanuts","sunflow= -er","tobacco","cotton","sugarcane","cattle","goats","beef","eggs"]). -bgfact("Zimbabwe","LandBounderies",["Botswana","Mozambique","South = -Africa","Zambia"]). -bgfact("Zimbabwe","NaturalResources",["coal","chromium = -ore","asbestos","gold","nickel","copper","iron = -ore","vanadium","lithium","tin","platinum group metals"]). -bgfact("Zimbabwe","Population",["10975078"]). -bgfact("Zimbabwe","Capital",["Harare"]). -bgfact("Zimbabwe","MemberOf",["ACP","AfDB","C","CCC","ECA","FAO","FLS","G= --15","G-77","GATT","IAEA","IBRD","ICAO","ICFTU","IDA","IFAD","IFC","ILO",= -"IMF","INTELSAT","INTERPOL","IOC","IOM","ISO","ITU","LORCS","NAM","OAU","= -PCA","SADC","UN","UNAVEM = -II","UNCTAD","UNESCO","UNIDO","UNOMUR","UNOSOM","UPU","WCL","WHO","WIPO",= -"WMO","WTO"]). -bgfact("Zimbabwe","ExportCommodities",["agricultural"]). -bgfact("Zimbabwe","ExportPartners",["UK","Germany","South = -Africa","Japan","US"]). -bgfact("Zimbabwe","ImportCommodities",["machinery and transportation = -equipment","chemicals","fuels"]). -bgfact("Zimbabwe","ImportPartners",["South = -Africa","UK","Germany","US","Japan"]). -bgfact("Zimbabwe","Industries",["mining","steel","clothing and = -footwear","chemicals","foodstuffs","fertilizer","beverage","transportatio= -n equipment","wood products"]). -bgfact("Zimbabwe","Agriculture",["of land area divided = -into","corn","cotton","tobacco","wheat","coffee","sugarcane","livestock = -- cattle","sheep","goats","self-sufficient in food"]). - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/LEWIS.DTD clucene-core-2.3.3.4/test/data/reuters-21578/LEWIS.DTD --- clucene-core-0.9.21b/test/data/reuters-21578/LEWIS.DTD 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/LEWIS.DTD 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/README.TXT clucene-core-2.3.3.4/test/data/reuters-21578/README.TXT --- clucene-core-0.9.21b/test/data/reuters-21578/README.TXT 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/README.TXT 1970-01-01 00:00:00.000000000 +0000 @@ -1,816 +0,0 @@ - - Reuters-21578 text categorization test collection - Distribution 1.0 - README file (v 1.2) - 26 September 1997 - - David D. Lewis - AT&T Labs - Research - lewis@research.att.com - -I. Introduction - - This README describes Distribution 1.0 of the Reuters-21578 text -categorization test collection, a resource for research in information -retrieval, machine learning, and other corpus-based research. - - -II. Copyright & Notification - - The copyright for the text of newswire articles and Reuters -annotations in the Reuters-21578 collection resides with Reuters Ltd. -Reuters Ltd. and Carnegie Group, Inc. have agreed to allow the free -distribution of this data *for research purposes only*. - If you publish results based on this data set, please acknowledge -its use, refer to the data set by the name "Reuters-21578, -Distribution 1.0", and inform your readers of the current location of -the data set (see "Availability & Questions"). - - -III. Availability & Questions - - The Reuters-21578, Distribution 1.0 test collection is available -from David D. Lewis' professional home page, currently: - http://www.research.att.com/~lewis - -Besides this README file, the collection consists of 22 data files, an -SGML DTD file describing the data file format, and six files -describing the categories used to index the data. (See Sections VI -and VII for more details.) Some additional files, which are not part -of the collection but have been contributed by other researchers as -useful resources are also included. All files are available -uncompressed, and in addition a single gzipped Unix tar archive of the -entire distribution is available as reuters21578.tar.gz. - - The text categorization mailing list, DDLBETA, is a good place to -send questions about this collection and other text categorization -issues. You may join the list by writing David Lewis at -lewis@research.att.com. - - -IV. History & Acknowledgements - - The documents in the Reuters-21578 collection appeared on the -Reuters newswire in 1987. The documents were assembled and indexed -with categories by personnel from Reuters Ltd. (Sam Dobbins, Mike -Topliss, Steve Weinstein) and Carnegie Group, Inc. (Peggy Andersen, -Monica Cellio, Phil Hayes, Laura Knecht, Irene Nirenburg) in 1987. - -In 1990, the documents were made available by Reuters and CGI for -research purposes to the Information Retrieval Laboratory (W. Bruce -Croft, Director) of the Computer and Information Science Department at -the University of Massachusetts at Amherst. Formatting of the -documents and production of associated data files was done in 1990 by -David D. Lewis and Stephen Harding at the Information Retrieval -Laboratory. - -Further formatting and data file production was done in 1991 and 1992 -by David D. Lewis and Peter Shoemaker at the Center for Information -and Language Studies, University of Chicago. This version of the data -was made available for anonymous FTP as "Reuters-22173, Distribution -1.0" in January 1993. From 1993 through 1996, Distribution 1.0 was -hosted at a succession of FTP sites maintained by the Center for -Intelligent Information Retrieval (W. Bruce Croft, Director) of the -Computer Science Department at the University of Massachusetts at -Amherst. - -At the ACM SIGIR '96 conference in August, 1996 a group of text -categorization researchers discussed how published results on -Reuters-22173 could be made more comparable across studies. It was -decided that a new version of collection should be produced with less -ambiguous formatting, and including documentation carefully spelling -out standard methods of using the collection. The opportunity would -also be used to correct a variety of typographical and other errors in -the categorization and formatting of the collection. - -Steve Finch and David D. Lewis did this cleanup of the collection -September through November of 1996, relying heavily on Finch's -SGML-tagged version of the collection from an earlier study. One -result of the re-examination of the collection was the removal of 595 -documents which were exact duplicates (based on identity of timestamps -down to the second) of other documents in the collection. The new -collection therefore has only 21,578 documents, and thus is called the -Reuters-21578 collection. This README describes version 1.0 of this -new collection, which we refer to as "Reuters-21578, Distribution -1.0". - -In preparing the collection and documentation we have benefited from -discussions with Eric Brown, William Cohen, Fred Damerau, Yoram -Singer, Amit Singhal, and Yiming Yang, among many others. - -We thank all the people and organizations listed above for their -efforts and support, without which this collection would not exist. - -A variety of other changes were also made in going from Reuters-22173 -to Reuters-21578: - - 1. Documents were marked up with SGML tags, and a corresponding -SGML DTD was produced, so that the boundaries of important sections of -documents (e.g. category fields) are unambiguous. - 2. The set of categories that are legal for each of the five -controlled vocabulary fields was specified. All category names not -legal for a field were corrected to a legal category, moved to their -appropriate field, or removed, as appropriate. - 3. Documents were given new ID numbers, in chronological order, and -are collected 1000 to a file in order by ID (and therefore in order -chronologically). - - -V. What is a Text Categorization Test Collection and Who Cares? - - *Text categorization* is the task of deciding whether a piece of -text belongs to any of a set of prespecified categories. It is a -generic text processing task useful in indexing documents for later -retrieval, as a stage in natural language processing systems, for -content analysis, and in many other roles [LEWIS94d]. - - The use of standard, widely distributed test collections has been a -considerable aid in the development of algorithms for the related task -of *text retrieval* (finding documents that satisfy a particular -user's information need, usually expressed in an textual request). -Text retrieval test collections have allowed the comparison of -algorithms developed by a variety of researchers around the world. -(For more on text retrieval test collections see SPARCKJONES76.) - - Standard test collections have been lacking, however, for text -categorization. Few data sets have been used by more than one -researcher, making results hard to compare. The Reuters-22173 test -collection has been used in a number of published studies since it was -made available, and we believe that the Reuters-21578 collection will -be even more valuable. - - The collection may also be of interest to researchers in machine -learning, as it provides a classification task with challenging -properties. There are multiple categories, the categories are -overlapping and nonexhaustive, and there are relationships among the -categories. There are interesting possibilities for the use of domain -knowledge. There are many possible feature sets that can be extracted -from the text, and most plausible feature/example matrices are large -and sparse. There is even some temporal structure to the data -[LEWIS94b], though problems with the indexing and the uneven -distribution of stories within the timespan covered may make this -collection a poor one to explore temporal issues. - - -VI. Formatting - - The Reuters-21578 collection is distributed in 22 files. Each of -the first 21 files (reut2-000.sgm through reut2-020.sgm) contain 1000 -documents, while the last (reut2-021.sgm) contains 578 documents. - - The files are in SGML format. Rather than going into the details -of the SGML language, we describe here in an informal way how the SGML -tags are used to divide each file, and each document, into sections. -Readers interested in more detail on SGML are encouraged to pursue -one of the many books and web pages on the subject. - - Each of the 22 files begins with a document type declaration line: - - -The DTD file lewis.dtd is included in the distribution. Following the -document type declaration line are individual Reuters articles marked -up with SGML tags, as described below. - - - VI.A. The REUTERS tag: - - Each article starts with an "open tag" of the form - - - -where the ?? are filled in an appropriate fashion. Each article ends -with a "close tag" of the form: - - - -In all cases the and tags are the only items -on their line. - - Each REUTERS tag contains explicit specifications of the values -of five attributes, TOPICS, LEWISSPLIT, CGISPLIT, OLDID, and NEWID. -These attributes are meant to identify documents and groups of -documents, and have the following meanings: - - 1. TOPICS : The possible values are YES, NO, and BYPASS: - a. YES indicates that *in the original data* there was at -least one entry in the TOPICS fields. - b. NO indicates that *in the original data* the story had no -entries in the TOPICS field. - c. BYPASS indicates that *in the original data* the story was -marked with the string "bypass" (or a typographical variant on that -string). - This poorly-named attribute unfortunately is the subject of much -confusion. It is meant to indicate whether or not the document had -TOPICS categories *in the raw Reuters-22173 dataset*. The sole use of -this attribute is to defining training set splits similar to those -used in previous research. (See the section on training set splits.) -The TOPICS attribute does **NOT** indicate anything about whether or -not the Reuters-21578 document has any TOPICS categories. (Version -1.0 of this document was errorful on this point.) That can be -determined by actually looking at the TOPICS field. A story with -TOPICS="YES" can have no TOPICS categories, and a story with -TOPICS="NO" can have TOPICS categories. - Now, a reasonable (though not certain) assumption is that for all -TOPICS="YES" stories the indexer at least thought about whether the -story belonged to a valid TOPICS category. Thus, the TOPICS="YES" -stories with no topics can reasonably be considered negative examples -for all 135 valid TOPICS categories. - TOPICS="NO" stories are more problematic in their interpretation. -Some of them presumedly result because the indexer made an explicit -decision that they did not belong to any of the 135 valid TOPICS -categories. However, there are many cases where it is clear that a -story should belong to one or more TOPICS categories, but for some -reason the category was not assigned. There appear to be certain time -intervals where large numbers of such stories are concentrated, -suggesting that some parts of the data set were simply not indexed, or -not indexed for some categories or category sets. Also, in a few -cases, the indexer clearly meant to assign TOPICS categories, but put -them in the wrong field. These cases have been corrected in the -Reuters-21578 data, yielding stories that have TOPICS categories, but -where TOPICS="NO", because the the category was not assigned in the -raw version of the data. - "BYPASS" stories clearly were not indexed, and so are useful only -for general distributional information on the language used in the -documents. - - 2. LEWISSPLIT : The possible values are TRAINING, TEST, and -NOT-USED. TRAINING indicates it was used in the training set in the -experiments reported in LEWIS91d (Chapters 9 and 10), LEWIS92b, -LEWIS92e, and LEWIS94b. TEST indicates it was used in the test set -for those experiments, and NOT-USED means it was not used in those -experiments. - - 3. CGISPLIT : The possible values are TRAINING-SET and -PUBLISHED-TESTSET indicating whether the document was in the training -set or the test set for the experiments reported in HAYES89 and -HAYES90b. - - 4. OLDID : The identification number (ID) the story had in the -Reuters-22173 collection. - - 5. NEWID : The identification number (ID) the story has in the -Reuters-21578, Distribution 1.0 collection. These IDs are assigned to -the stories in chronological order. - -In addition, some REUTERS tags have a sixth attribute, CSECS, which -can be ignored. - -The use of these attributes is critical to allowing comparability -between different studies with the collection, and is discussed -further in Section VIII. - - - VI.B. Document-Internal Tags - - Just as the and tags serve to delimit -documents within a file, other tags are used to delimit elements -within a document. We discuss these in the order in which they -typically appear, though the exact order should not be relied upon in -processing. In some cases, additional tags occur within an element -delimited by these top level document-internal tags. These are -discussed in this section as well. - - We specify below whether each open/close tag pair is used exactly -once (ONCE) per a story, or a variable (VARIABLE) number of times -(possibly zero). In many cases the start tag of a pair appears only -at the beginning of a line, with the corresponding end tag always -appearing at the end of the same line. When this is the case, we -indicate it with the notation "SAMELINE" below, as an aid to those -processing the files without SGML tools. - - 1. , [ONCE, SAMELINE]: Encloses the date and time -of the document, possibly followed by some non-date noise material. - - 2. , [VARIABLE] : Notes on certain hand -corrections that were done to the original Reuters corpus by Steve -Finch. - - 3. , [ONCE, SAMELINE]: Encloses the list of -TOPICS categories, if any, for the document. If TOPICS categories are -present, each will be delimited by the tags and . - - 4. , [ONCE, SAMELINE]: Same as -but for PLACES categories. - - 5. , [ONCE, SAMELINE]: Same as -but for PEOPLE categories. - - 6. , [ONCE, SAMELINE]: Same as but -for ORGS categories. - - 7. , [ONCE, SAMELINE]: Same as - but for EXCHANGES categories. - - 8. , [ONCE, SAMELINE]: These tags always -appear adjacent to each other, since there are no COMPANIES categories -assigned in the collection. - - 9. , [VARIABLE]: These tags bracket control -characters and other noisy and/or somewhat mysterious material in the -Reuters stories. - - 10. , [ONCE]: We have attempted to delimit all the -textual material of each story between a pair of these tags. Some -control characters and other "junk" material may also be included. -The whitespace structure of the text has been preserved. The -tag has the following attribute: - - a. TYPE: This has one of three values: NORM, BRIEF, and -UNPROC. NORM is the default value and indicates that the text of the -story had a normal structure. In this case the TEXT tag appears simply -as . The tag appears as when the story is a -short one or two line note. The tags appears as -when the format of the story is unusual in some fashion that limited -our ability to further structure it. - -The following tags optionally delimit elements inside the TEXT -element. Not all stories will have these tags: - - a. , : Author of the story. - b. , : Location the story -originated from, and day of the year. - c. , : Title of the story. We have attempted -to capture the text of stories with TYPE="BRIEF" within a -element. - d. <BODY>, </BODY> : The main text of the story. - - -VII. Categories - - A test collection for text categorization contains, at minimum, a -set of texts and, for each text, a specification of what categories -that text belongs to. For the Reuters-21578 collection the documents -are Reuters newswire stories, and the categories are five different -sets of content related categories. For each document, a human -indexer decided which categories from which sets that document -belonged to. The category sets are as follows: - - Number of Number of Categories Number of Categories -Category Set Categories w/ 1+ Occurrences w/ 20+ Occurrences -************ ********** ******************** ******************** -EXCHANGES 39 32 7 -ORGS 56 32 9 -PEOPLE 267 114 15 -PLACES 175 147 60 -TOPICS 135 120 57 - - -The TOPICS categories are economic subject categories. Examples -include "coconut", "gold", "inventories", and "money-supply". This -set of categories is the one that has been used in almost all previous -research with the Reuters data. HAYES90b discusses some examples of -the policies (not always obvious) used by the human indexers in -deciding whether a document belonged to a particular TOPIC category. - -The EXCHANGES, ORGS, PEOPLE, and PLACES categories correspond to named -entities of the specified type. Examples include "nasdaq" -(EXCHANGES), "gatt" (ORGS), "perez-de-cuellar" (PEOPLE), and -"australia" (PLACES). Typically a document assigned to a category from -one of these sets explicitly includes some form of the category name -in the document's text. (Something which is usually not true for -TOPICS categories.) However, not all documents containing a named -entity corresponding to the category name are assigned to these -category, since the entity was required to be a focus of the news -story [HAYES90b]. Thus these proper name categories are not as simple -to assign correctly as might be thought. - -Reuters-21578, Distribution 1.0 includes five files -(all-exchanges-strings.lc.txt, all-orgs-strings.lc.txt, -all-people-strings.lc.txt, all-places-strings.lc.txt, and -all-topics-strings.lc.txt) which list the names of *all* legal -categories in each set. A sixth file, cat-descriptions_120396.txt -gives some additional information on the category sets. - -Note that a sixth category field, COMPANIES, was present in the -original Reuters materials distributed by Carnegie Group, but no -company information was actually included in these fields. In the -Reuters-21578 collection this field is always empty. - -In the table above we note how many categories appear in at least 1 of -the 21,578 documents in the collection, and how many appear at least -20 of the documents. Many categories appear in no documents, but we -encourage researchers to include these categories when evaluating the -effectiveness of their categorization system. - -Additional details of the documents, categories, and corpus -preparation process appear in LEWIS92b, and at greater length in -Section 8.1 of LEWIS91d. - -VIII. Using Reuters-21578 for Text Categorization Research - - In testing a method for text categorization it is important that -knowledge of the nature of the test data not unduly influence the -development of the system, or the performance obtained will be -unrealistically high. One way of dealing with this is to divide a set -of data into two subsets: a training set and a test set. An -experimenter then develops a categorization system by automated -training on the training set only, and/or by human knowledge -engineering based on examination of the training set only. The -categorization system is then tested on the previously unexamined test -set. A number of variations on this basic theme are possible---see -WEISS91 for a good discussion. - - Effectiveness results can only be compared between studies that -the same training and test set (or that use cross-validation -procedures). One problem with the Reuters-22173 collection was that -the ambiguity of formatting and annotation led different researchers -to use different training/test divisions. This was particularly -problematic when researchers attempted to remove documents that "had -no TOPICS", as there were several definitions of what this meant. - - To eliminate these ambiguities from the Reuters-21578 collection -we specify exactly which articles are in each of the recommended -training sets and test sets by specifying the values those articles -will have on the TOPICS, LEWISSPLIT, and CGISPLIT attributes of the -REUTERS tags. We strongly encourage that all studies on Reuters-21578 -use one of the following training test divisions (or use multiple -random splits, e.g. cross-validation): - -VIII.A. The Modified Lewis ("ModLewis") Split: - - Training Set (13,625 docs): LEWISSPLIT="TRAIN"; TOPICS="YES" or "NO" - Test Set (6,188 docs): LEWISSPLIT="TEST"; TOPICS="YES" or "NO" - Unused (1,765): LEWISSPLIT="NOT-USED" or TOPICS="BYPASS" - -This replaces the 14704/6746 split (723 unused) of the Reuters-22173 -collection, which was used in LEWIS91d (Chapters 9 and 10), LEWIS92b, -LEWIS92c, LEWIS92e, and LEWIS94b. Note the following: - - 1. The duplicate documents removed in forming Reuters-21578 are -of course not present. - 2. The documents with TOPICS="BYPASS" are not used, since -subsequent analysis strongly indicates that they were not categorized -by the indexers. - 3. The 1,765 unused documents should not be tested on and should -not be used for supervised learning. However, they may useful as -additional information on the statistical distribution of words, -phrases, and other features that might used to predict categories. - -This split assigns documents from April 7, 1987 and before to the -training set, and documents from April 8, 1987 and after to the test -set. - -WARNING: Given the many changes in going from Reuters-22173 to -Reuters-21578, including correction of many typographical errors in -category labels, results on the ModLewis split cannot be compared -with any published results on the Reuters-22173 collection! - - -VIII.B. The Modified Apte ("ModApte") Split : - - Training Set (9,603 docs): LEWISSPLIT="TRAIN"; TOPICS="YES" - Test Set (3,299 docs): LEWISSPLIT="TEST"; TOPICS="YES" - Unused (8,676 docs): LEWISSPLIT="NOT-USED"; TOPICS="YES" - or TOPICS="NO" - or TOPICS="BYPASS" - -This replaces the 10645/3672 split (7,856 not used) of the -Reuters-22173 collection. These are our best approximation to the -training and test splits used in APTE94 and APTE94b. Note the -following: - - 1. As with the ModLewis, those documents removed in forming -Reuters-21578 are not present, and BYPASS documents are not used. - 2. The intent in APTE94 and APTE94b was to use the Lewis split, -but restrict it to documents with at least one TOPICS categories. -However, but it was not clear exactly what Apte, et al meant by having -at least one TOPICS category (e.g. how was "bypass" treated, whether -this was before or after any fixing of typographical errors, etc.). We -have encoded our interpretation in the TOPICS attribute. ***Note -that, as discussed above, some TOPICS="YES" stories have no TOPICS -categories, and a few TOPICS="NO" stories have TOPICS -categories. These facts are irrelevant to the definition of the -split.*** If you are using a learning algorithm that requires each -training document to have at least TOPICS category, you can screen out -the training documents with no TOPICS categories. Please do NOT screen -out any of the 3,299 documents - that will make your results -incomparable with other studies. - - 3. As with ModLewis, it may be desirable to use the 8,676 Unused -documents for gathering statistical information about feature -distribution. - -As with ModLewis, this split assigns documents from April 7, 1987 and -before to the training set, and documents from April 8, 1987 and after -to the test set. The difference is that only documents with at least -one TOPICS category are used. The rationale for this restriction is -that while some documents lack TOPICS categories because no TOPICS -apply (i.e. the document is a true negative example for all TOPICS -categories), it appears that others simply were never assigned TOPICS -categories by the indexers. (Unfortunately, the amount of time that -has passed since the collection was created has made it difficult to -establish exactly what went on during the indexing.) - -WARNING: Given the many changes in going from Reuters-22173 to -Reuters-21578, including correction of many typographical errors in -category labels, results on the ModApte split cannot be compared -with any published results on the Reuters-22173 collection! - - -VIII.C. The Modified Hayes ("ModHayes") Split: - Training Set (20856 docs): CGISPLIT="TRAINING-SET" - Test Set (722 docs): CGISPLIT="PUBLISHED-TESTSET" - Unused (0 docs) - -This is the best approximation we have to the training and test splits -used in HAYES89, HAYES90b, and Chapter 8 of LEWIS91d. It replaces the -21450/723 split of the Reuters-22173 collection. Note the following: - - 1. As with the other splits, the duplicate documents removed in -forming Reuters-21578 are not present. - - 2. "Training" in HAYES89 and HAYES90b was actually done by human -beings looking at the documents and writing categorization rules. -We can not be sure which of the document files were actually looked -at. - - 3. We specify that the BYPASS stories and the TOPICS=NO stories -are part of the training set, since they were used during manual -knowledge engineering in the original Hayes experiments. That does not -mean researchers are obliged to give these stories to, for instance, a -supervised learning algorithm. As mentioned in the other splits, they -may be more useful for getting distributional information about -features. - -There are a number of problems with the ModHayes split that make it -less than desirable for text categorization research, including -unusual distribution of categories, pairs of near-duplicate documents, -and chronological burstiness. (See [LEWIS90b, Ch. 8] for more -details.) - -Despite these problems, this split is of interest because it provides -the ability to compare results with those of the CONSTRUE system -[HAYES89, HAYES90b]. Comparison of results on the ModHayes split with -previously published results on the original Hayes split in HAYES89 -and HAYES90b (and LEWIS90b, Ch. 8) is possible, though the following -points should be taken into account: - - 1. The testset we provide in the ModHayes split has one fewer -document than the one Hayes used. The document that was removed -(OLDID="22026") was a timestamp duplicate of the document with -OLDID="22027" and NEWID="13234". So in computing effectiveness -measures for comparison with HAYES89/90b, the document with -NEWID="13234" should be counted twice. - - 2. The documents in the Hayes testset had relatively few errors and -anomalies in their categorization. And the errors which we did find -and correct appear unlikely to have affected the original Hayes -results. In particular, it appears that the only errors in the TOPICS -field were the addition of a few invalid categories that were not -evaluated on. However, for completeness we list the changes in the -Hayes testset documents made going from Reuters-22173 to Reuters-21578 -(all documents are referred to by their NEWID): - - Removal of invalid TOPIC "loan" : 13234, 16946, 17111, 17112, 17207, -17217, 17228, 17234, 17271, 17310 - - Removal of invalid TOPIC "gbond" : 17138, 17260 - - Removal of invalid TOPIC "tbill" : 17258 - - Removal of invalid TOPIC "cbond" : 17024 - - Removal of invalid TOPIC "fbond" : 17087 - - Correction of invalid PEOPLE mancera to mancera-aguayo: 17142, -17149, 17154, 17177, 17187 - - Correction of invalid PEOPLE andriesssen to andriessen : 17366 - - Correction of invalid PLACES "ivory" and "coast" to single correct -PLACE "ivory-coast": 18383 - - 3. The effectiveness measures used in HAYES89 and HAYES90b were -somewhat nonstandard. See Ch. 8 of LEWIS91d for a discussion. - - -VIII.D. Other Splits - - We strongly encourage researchers to use one (or more) of the -above splits for their experiments (or use cross-validation on one of -the sets of documents defined in the above splits). We recommend the -Modified Apte ("ModApte") Split for research on predicting the TOPICS -field, since the evidence is that a significant number of documents -that should have TOPICS do not. The ModLewis split can be used if the -researcher has a strong need to test the ability of a system to deal -with examples belonging to no category. While it is likely that some -of these examples should indeed belong to a category, the ModLewis -split is at least better than the corresponding split from -Reuters-22173, in that it eliminates the "bypass" stories. - - We in particular encourage you to resist the following -temptations: - 1. Defining new splits based on whether or not the documents -actually have any TOPICS categories. (See the discussion of the -ModApte split.) - 2. Testing your system only on the "easy" categories. This is a -temptation we have succumbed to in the past, but will resist in the -future. Yes, we know that some of the 135 TOPICS categories have few -or no positive training examples or few or no positive test examples -or both. Yes, purely supervised learning systems will do very badly -on these categories. Knowledge-based systems, on the other hand, -might do well on them, while doing poorly in comparison with -supervised learning on categories with lots of positive -examples. These comparisons are of great interest. Of course, it's of -great interest to *in addition* analyze subsets of categories -(e.g. lots of positive examples vs. few positive examples, etc.). - - Note that one strategy we considered and rejected is to assume -that documents which have no TOPICS but do have categories in other -fields (PLACES, etc.) could be assumed to belong to no TOPICS -categories. This does not appear to be a safe assumption - we have -found a number of examples of documents with PLACES but no TOPICS when -there are TOPICS that clearly apply. - -IX. Feature Sets in Text Categorization - - For many text categorization methods, particularly those using -statistical classification techniques, it is convenient to represent -documents not as a sequence of characters, but rather as a tuple of -numeric or binary feature values. For instance, the value of feature -Fi for a document Dj might be 1 if the string of characters -"financial" occurred in the document with whitespace on either side, -and 0 otherwise. Or the value of Fi for Dj might be the number of -occurrences of "financial" in document Dj. In information retrieval -such features are often called "indexing terms" and one often speaks -of a term being "present" in a document, to mean that the feature -takes on a non-default value. (Usually, but not always, any value but -0 is non-default.) - - Comparisons between text categorization methods that represent -documents as feature tuples are aided by ensuring that the same tuple -representation is used with all methods, thus avoiding conflating -differences in feature extraction with differences in, say, machine -learning methods. For that reason, the Reuters-22173 distribution -included not only the formatted text of the Reuters stories, but also -feature tuple representations of the stories in each of two feature -sets, one based on words and one based on noun phrases. Surprisingly, -almost no use was made of these files by other researchers, so we have -not included files of this sort in the Reuters-21578 distribution. - - However, we are willing to make available as part of the -distribution any tuple representations of this sort that researchers -want to contribute. (Contact lewis@research.att.com if you would like -to do this.) Perhaps the ideal situation would be if someone with a -strong interest in feature set formation produced tuples based on a -high quality set of features which other researchers interested only -in learning algorithms could make use of. - - -X. Bibliography - -[This needs to be updated.] - -@article{APTE94 - ,author = "Chidanand Apt{\'{e}} and Fred Damerau and Sholom M. Weiss" - ,title = "Automated Learning of Decision Rules for Text Categorization" - ,journal = "ACM Transactions on Information Systems" - ,year = 1994 - , note = "To appear." - } - -@inproceedings{APTE94b - ,author = "Chidanand Apt{\'{e}} and Fred Damerau and Sholom M. Weiss" - ,title = "Toward Language Independent Automated Learning of Text Categorization Models" - ,booktitle = sigir94 - ,year = 1994 - ,note = "To appear." - } - -@inproceedings{HAYES89 -,author = "Philip J. Hayes and Peggy M. Anderson and Irene B. Nirenburg and -Linda M. Schmandt" -,title = "{TCS}: A Shell for Content-Based Text Categorization" -,booktitle = "IEEE Conference on Artificial Intelligence Applications" -,year = 1990 -} - -@inproceedings{HAYES90b -,author = "Philip J. Hayes and Steven P. Weinstein" -,title = "{CONSTRUE/TIS:} A System for Content-Based Indexing of a -Database of News Stories" -,booktitle = "Second Annual Conference on Innovative Applications of -Artificial Intelligence" -,year = 1990 -} - -@incollection{HAYES92 - ,author = "Philip J. Hayes" - ,title = "Intelligent High-Volume Text Processing using Shallow, -Domain-Specific Techniques" - ,booktitle = "Text-Based Intelligent Systems" - ,publisher = "Lawrence Erlbaum" - ,address = "Hillsdale, NJ" - ,year = 1992 - ,editor = "Paul S. Jacobs" -} - -@inproceedings{LEWIS91c - ,author = "David D. Lewis" - ,title = "Evaluating Text Categorization" - ,booktitle = "Proceedings of Speech and Natural Language Workshop" - ,year = 1991 - ,month = feb - ,organization = "Defense Advanced Research Projects Agency" - ,publisher = "Morgan Kaufmann" - ,pages = "312--318" - -} - -@phdthesis{LEWIS91d -,author = "David Dolan Lewis" -,title = "Representation and Learning in Information Retrieval" -,school = "Computer Science Dept.; Univ. of Massachusetts; Amherst, MA 01003" -,year = 1992 -,note = "Technical Report 91--93." -} - -@inproceedings{LEWIS91e -,author = "David D. Lewis" -,title = "Data Extraction as Text Categorization: An Experiment with -the {MUC-3} Corpus" -,booktitle = "Proceedings of the Third Message Understanding Evaluation -and Conference" -,year = 1991 -,month = may -,organization = "Defense Advanced Research Projects Agency" -,publisher = "Morgan Kaufmann" -,address = "Los Altos, CA" - -} - -@inproceedings{LEWIS92b - ,author = "David D. Lewis" - ,title = "An Evaluation of Phrasal and Clustered Representations on a Text -Categorization Task" - ,booktitle = "Fifteenth Annual International ACM SIGIR Conference on -Research and Development in Information Retrieval" - ,year = 1992 - ,pages = "37--50" -} - -@inproceedings{LEWIS92d -,author = "David D. Lewis and Richard M. Tong" -,title = "Text Filtering in {MUC-3} and {MUC-4}" -,booktitle = "Proceedings of the Fourth Message Understanding Conference ({MUC-4})" -,year = 1992 -,month = jun -,organization = "Defense Advanced Research Projects Agency" -,publisher = "Morgan Kaufmann" -,address = "Los Altos, CA" -} - -@inproceedings{LEWIS92e -,author = "David D. Lewis" -,title = "Feature Selection and Feature Extraction for Text Categorization" -,booktitle = "Proceedings of Speech and Natural Language Workshop" -,year = 1992 -,month = feb -,organization = "Defense Advanced Research Projects Agency" -,publisher = "Morgan Kaufmann" -,pages = "212--217" -} - -@inproceedings{LEWIS94b - ,author = "David D. Lewis and Marc Ringuette" - ,title = "A Comparison of Two Learning Algorithms for Text Categorization" - ,booktitle = "Symposium on Document Analysis and Information Retrieval" - ,year = 1994 - ,organization = "ISRI; Univ. of Nevada, Las Vegas" - ,address = "Las Vegas, NV" - ,month = apr - ,pages = "81--93" -} - -@article{LEWIS94d -, author = "David D. Lewis and Philip J. Hayes" -, title = "Guest Editorial" -, journal = "ACM Transactions on Information Systems" -, year = 1994 -, volume = 12 -, number = 3 -, pages = "231" -, month = jul -} - -@article{SPARCKJONES76 -,author = "K. {Sparck Jones} and C. J. {van Rijsbergen}" -,title = "Information Retrieval Test Collections" -,journal = "Journal of Documentation" -,year = 1976 -,volume = 32 -,number = 1 -,pages = "59--75" - } - -@book{WEISS91 - ,author = "Sholom M. Weiss and Casimir A. Kulikowski" - ,title = "Computer Systems That Learn" - ,publisher = "Morgan Kaufmann" - ,year = 1991 - ,address = "San Mateo, CA" - } - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-000.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-000.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-000.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-000.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2032 +0,0 @@ -<!DOCTYPE lewis SYSTEM "lewis.dtd"> -<REUTERS TOPICS="YES" LEWISSPLIT="TRAIN" CGISPLIT="TRAINING-SET" OLDID="5544" NEWID="1"> -<DATE>26-FEB-1987 15:01:01.79</DATE> -<TOPICS><D>cocoa</D></TOPICS> -<PLACES><D>el-salvador</D><D>usa</D><D>uruguay</D></PLACES> -<PEOPLE></PEOPLE> -<ORGS></ORGS> -<EXCHANGES></EXCHANGES> -<COMPANIES></COMPANIES> -<UNKNOWN> -C T -f0704reute -u f BC-BAHIA-COCOA-REVIEW 02-26 0105</UNKNOWN> -<TEXT> -<TITLE>BAHIA COCOA REVIEW - SALVADOR, Feb 26 - Showers continued throughout the week in -the Bahia cocoa zone, alleviating the drought since early -January and improving prospects for the coming temporao, -although normal humidity levels have not been restored, -Comissaria Smith said in its weekly review. - The dry period means the temporao will be late this year. - Arrivals for the week ended February 22 were 155,221 bags -of 60 kilos making a cumulative total for the season of 5.93 -mln against 5.81 at the same stage last year. Again it seems -that cocoa delivered earlier on consignment was included in the -arrivals figures. - Comissaria Smith said there is still some doubt as to how -much old crop cocoa is still available as harvesting has -practically come to an end. With total Bahia crop estimates -around 6.4 mln bags and sales standing at almost 6.2 mln there -are a few hundred thousand bags still in the hands of farmers, -middlemen, exporters and processors. - There are doubts as to how much of this cocoa would be fit -for export as shippers are now experiencing dificulties in -obtaining +Bahia superior+ certificates. - In view of the lower quality over recent weeks farmers have -sold a good part of their cocoa held on consignment. - Comissaria Smith said spot bean prices rose to 340 to 350 -cruzados per arroba of 15 kilos. - Bean shippers were reluctant to offer nearby shipment and -only limited sales were booked for March shipment at 1,750 to -1,780 dlrs per tonne to ports to be named. - New crop sales were also light and all to open ports with -June/July going at 1,850 and 1,880 dlrs and at 35 and 45 dlrs -under New York july, Aug/Sept at 1,870, 1,875 and 1,880 dlrs -per tonne FOB. - Routine sales of butter were made. March/April sold at -4,340, 4,345 and 4,350 dlrs. - April/May butter went at 2.27 times New York May, June/July -at 4,400 and 4,415 dlrs, Aug/Sept at 4,351 to 4,450 dlrs and at -2.27 and 2.28 times New York Sept and Oct/Dec at 4,480 dlrs and -2.27 times New York Dec, Comissaria Smith said. - Destinations were the U.S., Covertible currency areas, -Uruguay and open ports. - Cake sales were registered at 785 to 995 dlrs for -March/April, 785 dlrs for May, 753 dlrs for Aug and 0.39 times -New York Dec for Oct/Dec. - Buyers were the U.S., Argentina, Uruguay and convertible -currency areas. - Liquor sales were limited with March/April selling at 2,325 -and 2,380 dlrs, June/July at 2,375 dlrs and at 1.25 times New -York July, Aug/Sept at 2,400 dlrs and at 1.25 times New York -Sept and Oct/Dec at 1.25 times New York Dec, Comissaria Smith -said. - Total Bahia sales are currently estimated at 6.13 mln bags -against the 1986/87 crop and 1.06 mln bags against the 1987/88 -crop. - Final figures for the period to February 28 are expected to -be published by the Brazilian Cocoa Trade Commission after -carnival which ends midday on February 27. - Reuter - - - -26-FEB-1987 15:02:20.00 - -usa - - - - - -F Y -f0708reute -d f BC-STANDARD-OIL-<SRD>-TO 02-26 0082 - -STANDARD OIL <SRD> TO FORM FINANCIAL UNIT - CLEVELAND, Feb 26 - Standard Oil Co and BP North America -Inc said they plan to form a venture to manage the money market -borrowing and investment activities of both companies. - BP North America is a subsidiary of British Petroleum Co -Plc <BP>, which also owns a 55 pct interest in Standard Oil. - The venture will be called BP/Standard Financial Trading -and will be operated by Standard Oil under the oversight of a -joint management committee. - - Reuter - - - -26-FEB-1987 15:03:27.51 - -usa - - - - - -F A -f0714reute -d f BC-TEXAS-COMMERCE-BANCSH 02-26 0064 - -TEXAS COMMERCE BANCSHARES <TCB> FILES PLAN - HOUSTON, Feb 26 - Texas Commerce Bancshares Inc's Texas -Commerce Bank-Houston said it filed an application with the -Comptroller of the Currency in an effort to create the largest -banking network in Harris County. - The bank said the network would link 31 banks having -13.5 billion dlrs in assets and 7.5 billion dlrs in deposits. - - Reuter - - - -26-FEB-1987 15:07:13.72 - -usabrazil - - - - - -F -f0725reute -u f BC-TALKING-POINT/BANKAME 02-26 0105 - -TALKING POINT/BANKAMERICA <BAC> EQUITY OFFER - by Janie Gabbett, Reuters - LOS ANGELES, Feb 26 - BankAmerica Corp is not under -pressure to act quickly on its proposed equity offering and -would do well to delay it because of the stock's recent poor -performance, banking analysts said. - Some analysts said they have recommended BankAmerica delay -its up to one-billion-dlr equity offering, which has yet to be -approved by the Securities and Exchange Commission. - BankAmerica stock fell this week, along with other banking -issues, on the news that Brazil has suspended interest payments -on a large portion of its foreign debt. - The stock traded around 12, down 1/8, this afternoon, -after falling to 11-1/2 earlier this week on the news. - Banking analysts said that with the immediate threat of the -First Interstate Bancorp <I> takeover bid gone, BankAmerica is -under no pressure to sell the securities into a market that -will be nervous on bank stocks in the near term. - BankAmerica filed the offer on January 26. It was seen as -one of the major factors leading the First Interstate -withdrawing its takeover bid on February 9. - A BankAmerica spokesman said SEC approval is taking longer -than expected and market conditions must now be re-evaluated. - "The circumstances at the time will determine what we do," -said Arthur Miller, BankAmerica's Vice President for Financial -Communications, when asked if BankAmerica would proceed with -the offer immediately after it receives SEC approval. - "I'd put it off as long as they conceivably could," said -Lawrence Cohn, analyst with Merrill Lynch, Pierce, Fenner and -Smith. - Cohn said the longer BankAmerica waits, the longer they -have to show the market an improved financial outlook. - Although BankAmerica has yet to specify the types of -equities it would offer, most analysts believed a convertible -preferred stock would encompass at least part of it. - Such an offering at a depressed stock price would mean a -lower conversion price and more dilution to BankAmerica stock -holders, noted Daniel Williams, analyst with Sutro Group. - Several analysts said that while they believe the Brazilian -debt problem will continue to hang over the banking industry -through the quarter, the initial shock reaction is likely to -ease over the coming weeks. - Nevertheless, BankAmerica, which holds about 2.70 billion -dlrs in Brazilian loans, stands to lose 15-20 mln dlrs if the -interest rate is reduced on the debt, and as much as 200 mln -dlrs if Brazil pays no interest for a year, said Joseph -Arsenio, analyst with Birr, Wilson and Co. - He noted, however, that any potential losses would not show -up in the current quarter. - With other major banks standing to lose even more than -BankAmerica if Brazil fails to service its debt, the analysts -said they expect the debt will be restructured, similar to way -Mexico's debt was, minimizing losses to the creditor banks. - Reuter - - - -26-FEB-1987 15:10:44.60 -grainwheatcornbarleyoatsorghum -usa - - - - - -C G -f0738reute -u f BC-average-prices 02-26 0095 - -NATIONAL AVERAGE PRICES FOR FARMER-OWNED RESERVE - WASHINGTON, Feb 26 - The U.S. Agriculture Department -reported the farmer-owned reserve national five-day average -price through February 25 as follows (Dlrs/Bu-Sorghum Cwt) - - Natl Loan Release Call - Avge Rate-X Level Price Price - Wheat 2.55 2.40 IV 4.65 -- - V 4.65 -- - VI 4.45 -- - Corn 1.35 1.92 IV 3.15 3.15 - V 3.25 -- - X - 1986 Rates. - - Natl Loan Release Call - Avge Rate-X Level Price Price - Oats 1.24 0.99 V 1.65 -- - Barley n.a. 1.56 IV 2.55 2.55 - V 2.65 -- - Sorghum 2.34 3.25-Y IV 5.36 5.36 - V 5.54 -- - Reserves I, II and III have matured. Level IV reflects -grain entered after Oct 6, 1981 for feedgrain and after July -23, 1981 for wheat. Level V wheat/barley after 5/14/82, -corn/sorghum after 7/1/82. Level VI covers wheat entered after -January 19, 1984. X-1986 rates. Y-dlrs per CWT (100 lbs). -n.a.-not available. - Reuter - - - -26-FEB-1987 15:14:36.41 -veg-oillinseedlin-oilsoy-oilsun-oilsoybeanoilseedcornsunseedgrainsorghumwheat -argentina - - - - - -G -f0754reute -r f BC-ARGENTINE-1986/87-GRA 02-26 0066 - -ARGENTINE 1986/87 GRAIN/OILSEED REGISTRATIONS - BUENOS AIRES, Feb 26 - Argentine grain board figures show -crop registrations of grains, oilseeds and their products to -February 11, in thousands of tonnes, showing those for futurE -shipments month, 1986/87 total and 1985/86 total to February -12, 1986, in brackets: - Bread wheat prev 1,655.8, Feb 872.0, March 164.6, total -2,692.4 (4,161.0). - Maize Mar 48.0, total 48.0 (nil). - Sorghum nil (nil) - Oilseed export registrations were: - Sunflowerseed total 15.0 (7.9) - Soybean May 20.0, total 20.0 (nil) - The board also detailed export registrations for -subproducts, as follows, - SUBPRODUCTS - Wheat prev 39.9, Feb 48.7, March 13.2, Apr 10.0, total -111.8 (82.7) . - Linseed prev 34.8, Feb 32.9, Mar 6.8, Apr 6.3, total 80.8 -(87.4). - Soybean prev 100.9, Feb 45.1, MAr nil, Apr nil, May 20.0, -total 166.1 (218.5). - Sunflowerseed prev 48.6, Feb 61.5, Mar 25.1, Apr 14.5, -total 149.8 (145.3). - Vegetable oil registrations were : - Sunoil prev 37.4, Feb 107.3, Mar 24.5, Apr 3.2, May nil, -Jun 10.0, total 182.4 (117.6). - Linoil prev 15.9, Feb 23.6, Mar 20.4, Apr 2.0, total 61.8, -(76.1). - Soybean oil prev 3.7, Feb 21.1, Mar nil, Apr 2.0, May 9.0, -Jun 13.0, Jul 7.0, total 55.8 (33.7). REUTER - - - -26-FEB-1987 15:14:42.83 - -usa - - - - - -F -f0755reute -d f BC-RED-LION-INNS-FILES-P 02-26 0082 - -RED LION INNS FILES PLANS OFFERING - PORTLAND, Ore., Feb 26 - Red Lion Inns Limited Partnership -said it filed a registration statement with the Securities and -Exchange Commission covering a proposed offering of 4,790,000 -units of limited partnership interests. - The company said it expects the offering to be priced at 20 -dlrs per unit. - It said proceeds from the offering, along with a 102.5 mln -dlr mortgage loan, will be used to finance its planned -acquisition of 10 Red Lion hotels. - Reuter - - - -26-FEB-1987 15:15:40.12 - -usa - - - - - -F A RM -f0758reute -u f BC-USX-<X>-DEBT-DOWGRADE 02-26 0103 - -USX <X> DEBT DOWGRADED BY MOODY'S - NEW YORK, Feb 26 - Moody's Investors Service Inc said it -lowered the debt and preferred stock ratings of USX Corp and -its units. About seven billion dlrs of securities is affected. - Moody's said Marathon Oil Co's recent establishment of up -to one billion dlrs in production payment facilities on its -prolific Yates Field has significant negative implications for -USX's unsecured creditors. - The company appears to have positioned its steel segment -for a return to profit by late 1987, Moody's added. - Ratings lowered include those on USX's senior debt to BA-1 -from BAA-3. - Reuter - - - -26-FEB-1987 15:17:11.20 -earn -usa - - - - - -F -f0762reute -r f BC-CHAMPION-PRODUCTS-<CH 02-26 0067 - -CHAMPION PRODUCTS <CH> APPROVES STOCK SPLIT - ROCHESTER, N.Y., Feb 26 - Champion Products Inc said its -board of directors approved a two-for-one stock split of its -common shares for shareholders of record as of April 1, 1987. - The company also said its board voted to recommend to -shareholders at the annual meeting April 23 an increase in the -authorized capital stock from five mln to 25 mln shares. - Reuter - - - -26-FEB-1987 15:18:06.67 -acq -usa - - - - - -F -f0767reute -d f BC-COMPUTER-TERMINAL-SYS 02-26 0107 - -COMPUTER TERMINAL SYSTEMS <CPML> COMPLETES SALE - COMMACK, N.Y., Feb 26 - Computer Terminal Systems Inc said -it has completed the sale of 200,000 shares of its common -stock, and warrants to acquire an additional one mln shares, to -<Sedio N.V.> of Lugano, Switzerland for 50,000 dlrs. - The company said the warrants are exercisable for five -years at a purchase price of .125 dlrs per share. - Computer Terminal said Sedio also has the right to buy -additional shares and increase its total holdings up to 40 pct -of the Computer Terminal's outstanding common stock under -certain circumstances involving change of control at the -company. - The company said if the conditions occur the warrants would -be exercisable at a price equal to 75 pct of its common stock's -market price at the time, not to exceed 1.50 dlrs per share. - Computer Terminal also said it sold the technolgy rights to -its Dot Matrix impact technology, including any future -improvements, to <Woodco Inc> of Houston, Tex. for 200,000 -dlrs. But, it said it would continue to be the exclusive -worldwide licensee of the technology for Woodco. - The company said the moves were part of its reorganization -plan and would help pay current operation costs and ensure -product delivery. - Computer Terminal makes computer generated labels, forms, -tags and ticket printers and terminals. - Reuter - - - -26-FEB-1987 15:18:59.34 -earn -usa - - - - - -F -f0772reute -r f BC-COBANCO-INC-<CBCO>-YE 02-26 0058 - -COBANCO INC <CBCO> YEAR NET - SANTA CRUZ, Calif., Feb 26 - - Shr 34 cts vs 1.19 dlrs - Net 807,000 vs 2,858,000 - Assets 510.2 mln vs 479.7 mln - Deposits 472.3 mln vs 440.3 mln - Loans 299.2 mln vs 327.2 mln - Note: 4th qtr not available. Year includes 1985 -extraordinary gain from tax carry forward of 132,000 dlrs, or -five cts per shr. - Reuter - - - -26-FEB-1987 15:19:15.45 -earnacq -usa - - - - - -F -f0773reute -u f BC-OHIO-MATTRESS-<OMT>-M 02-26 0095 - -OHIO MATTRESS <OMT> MAY HAVE LOWER 1ST QTR NET - CLEVELAND, Feb 26 - Ohio Mattress Co said its first -quarter, ending February 28, profits may be below the 2.4 mln -dlrs, or 15 cts a share, earned in the first quarter of fiscal -1986. - The company said any decline would be due to expenses -related to the acquisitions in the middle of the current -quarter of seven licensees of Sealy Inc, as well as 82 pct of -the outstanding capital stock of Sealy. - Because of these acquisitions, it said, first quarter sales -will be substantially higher than last year's 67.1 mln dlrs. - Noting that it typically reports first quarter results in -late march, said the report is likely to be issued in early -April this year. - It said the delay is due to administrative considerations, -including conducting appraisals, in connection with the -acquisitions. - Reuter - - - -26-FEB-1987 15:20:13.09 -earn -usa - - - - - -F -f0775reute -r f BC-AM-INTERNATIONAL-INC 02-26 0065 - -AM INTERNATIONAL INC <AM> 2ND QTR JAN 31 - CHICAGO, Feb 26 - - Oper shr loss two cts vs profit seven cts - Oper shr profit 442,000 vs profit 2,986,000 - Revs 291.8 mln vs 151.1 mln - Avg shrs 51.7 mln vs 43.4 mln - Six mths - Oper shr profit nil vs profit 12 cts - Oper net profit 3,376,000 vs profit 5,086,000 - Revs 569.3 mln vs 298.5 mln - Avg shrs 51.6 mln vs 41.1 mln - NOTE: Per shr calculated after payment of preferred -dividends. - Results exclude credits of 2,227,000 or four cts and -4,841,000 or nine cts for 1986 qtr and six mths vs 2,285,000 or -six cts and 4,104,000 or 11 cts for prior periods from -operating loss carryforwards. - Reuter - - - -26-FEB-1987 15:20:27.17 -earn -usa - - - - - -F -f0776reute -u f BC-BROWN-FORMAN-INC-<BFD 02-26 0043 - -BROWN-FORMAN INC <BFD> 4TH QTR NET - LOUISVILLE, Ky., Feb 26 - - Shr one dlr vs 73 cts - Net 12.6 mln vs 15.8 mln - Revs 337.3 mln vs 315.2 mln - Nine mths - Shr 3.07 dlrs vs 3.08 dlrs - Net 66 mln vs 66.2 mln - Revs 1.59 billion vs 997.1 mln - Reuter - - - -26-FEB-1987 15:20:48.43 - -usa - - - - - -F -f0778reute -r f BC-NATIONAL-INTERGROUP<N 02-26 0047 - -NATIONAL INTERGROUP<NII> TO OFFER PERMIAN UNITS - PITTSBURGH, Feb 26 - National Intergroup Inc said it plans -to file a registration statement with the securities and -exchange commission for an offering of cumulative convertible -preferred partnership units in Permian Partners L.P. - The Permian Partners L.P. was recently formed by National -Intergroup to continue to business of Permian Corp, acquired by -the company in 1985. - The company said Permian will continue to manage the -business as a general partner, retaining a 35 pct stake in the -partnership in the form of common and general partnership -units. - It did not say how many units would be offered or what the -price would be. - Reuter - - - -26-FEB-1987 15:21:16.13 - -usabrazil - - - - - -RM -f0781reute -u f BC--ECONOMIC-SPOTLIGHT-- 02-26 0104 - -ECONOMIC SPOTLIGHT - BANKAMERICA <BAC> - by Janie Gabbett, Reuters - LOS ANGELES, Feb 26 - BankAmerica Corp is not under -pressure to act quickly on its proposed equity offering and -would do well to delay it because of the stock's recent poor -performance, banking analysts said. - Some analysts said they have recommended BankAmerica delay -its up to one-billion-dlr equity offering, which has yet to be -approved by the Securities and Exchange Commission. - BankAmerica stock fell this week, along with other banking -issues, on the news that Brazil has suspended interest payments -on a large portion of its foreign debt. - The stock traded around 12, down 1/8, this afternoon, -after falling to 11-1/2 earlier this week on the news. - Banking analysts said that with the immediate threat of the -First Interstate Bancorp <I> takeover bid gone, BankAmerica is -under no pressure to sell the securities into a market that -will be nervous on bank stocks in the near term. - BankAmerica filed the offer on January 26. It was seen as -one of the major factors leading the First Interstate -withdrawing its takeover bid on February 9. - A BankAmerica spokesman said SEC approval is taking longer -than expected and market conditions must now be re-evaluated. - "The circumstances at the time will determine what we do," -said Arthur Miller, BankAmerica's Vice President for Financial -Communications, when asked if BankAmerica would proceed with -the offer immediately after it receives SEC approval. - "I'd put it off as long as they conceivably could," said -Lawrence Cohn, analyst with Merrill Lynch, Pierce, Fenner and -Smith. - Cohn said the longer BankAmerica waits, the longer they -have to show the market an improved financial outlook. - Although BankAmerica has yet to specify the types of -equities it would offer, most analysts believed a convertible -preferred stock would encompass at least part of it. - Such an offering at a depressed stock price would mean a -lower conversion price and more dilution to BankAmerica stock -holders, noted Daniel Williams, analyst with Sutro Group. - Several analysts said that while they believe the Brazilian -debt problem will continue to hang over the banking industry -through the quarter, the initial shock reaction is likely to -ease over the coming weeks. - Nevertheless, BankAmerica, which holds about 2.70 billion -dlrs in Brazilian loans, stands to lose 15-20 mln dlrs if the -interest rate is reduced on the debt, and as much as 200 mln -dlrs if Brazil pays no interest for a year, said Joseph -Arsenio, analyst with Birr, Wilson and Co. - He noted, however, that any potential losses would not show -up in the current quarter. - With other major banks standing to lose even more than -BankAmerica if Brazil fails to service its debt, the analysts -said they expect the debt will be restructured, similar to way -Mexico's debt was, minimizing losses to the creditor banks. - Reuter - - - -26-FEB-1987 15:24:48.56 - -usa - - - - - -F -f0789reute -d f BC-NATIONAL-HEALTH-ENHAN 02-26 0076 - -NATIONAL HEALTH ENHANCEMENT <NHES> NEW PROGRAM - PHOENIX, Ariz., Feb 26 - National Health Enhancement -Systems Inc said it is offering a new health evaluation system -to its line of fitness assessment programs. - The company said the program, called The Health Test, will -be available in 60 days. - Customers who use the program will receive a -computer-generated report and recommendations for implementing -a program to improve their physical condition. - Reuter - - - -26-FEB-1987 15:26:26.78 -earn -usa - - - - - -F -f0796reute -r f BC-DEAN-FOODS-<DF>-SEES 02-26 0101 - -DEAN FOODS <DF> SEES STRONG 4TH QTR EARNINGS - CHICAGO, Feb 26 - Dean Foods Co expects earnings for the -fourth quarter ending May 30 to exceed those of the same -year-ago period, Chairman Kenneth Douglas told analysts. - In the fiscal 1986 fourth quarter the food processor -reported earnings of 40 cts a share. - Douglas also said the year's sales should exceed 1.4 -billion dlrs, up from 1.27 billion dlrs the prior year. - He repeated an earlier projection that third-quarter -earnings "will probably be off slightly" from last year's 40 -cts a share, falling in the range of 34 cts to 36 cts a share. - Douglas said it was too early to project whether the -anticipated fourth quarter performance would be "enough for us -to exceed the prior year's overall earnings" of 1.53 dlrs a -share. - In 1988, Douglas said Dean should experience "a 20 pct -improvement in our bottom line from effects of the tax reform -act alone." - President Howard Dean said in fiscal 1988 the company will -derive benefits of various dairy and frozen vegetable -acquisitions from Ryan Milk to the Larsen Co. - Dean also said the company will benefit from its -acquisition in late December of Elgin Blenders Inc, West -Chicago. - He said the company is a major shareholder of E.B.I. Foods -Ltd, a United Kingdom blender, and has licensing arrangements -in Australia, Canada, Brazil and Japan. - "It provides ann entry to McDonalds Corp <MCD> we've been -after for years," Douglas told analysts. - Reuter - - - -26-FEB-1987 15:26:54.12 -wheatgrain -yemen-arab-republicusa - - - - - -C G -f0798reute -u f BC-/BONUS-WHEAT-FLOUR-FO 02-26 0096 - -BONUS WHEAT FLOUR FOR NORTH YEMEN -- USDA - WASHINGTON, Feb 26 - The Commodity Credit Corporation, CCC, -has accepted an export bonus offer to cover the sale of 37,000 -long tons of wheat flour to North Yemen, the U.S. Agriculture -Department said. - The wheat four is for shipment March-May and the bonus -awarded was 119.05 dlrs per tonnes and will be paid in the form -of commodities from the CCC inventory. - The bonus was awarded to the Pillsbury Company. - The wheat flour purchases complete the Export Enhancement -Program initiative announced in April, 1986, it said. - Reuter - - - -26-FEB-1987 15:32:03.12 - -usa - - - - - -F A -f0804reute -d f BC-CREDIT-CARD-DISCLOSUR 02-26 0111 - -CREDIT CARD DISCLOSURE BILLS INTRODUCED - WASHINGTON, Feb 26 - Legislation to require disclosure of -credit card fees and interest rates before the cards are issued -have been introduced in the Senate and House. - Sen. Chris Dodd, D-Conn, a co-sponsor of the bill, said -many banks and financial institutions do not disclose all the -information about terms of their cards in promotional material -sent to prospective customers. - "By requiring card issuers to disclose the terms and -conditions of their cards at the time of solicitation, the -legislation is intended to arm consumers with enough -information to shop around for the best deal," Dodd said in a -statement. - Reuter - - - -26-FEB-1987 15:33:23.61 - -usa - - - - - -F -f0809reute -d f BC-HUGHES-CAPITAL-UNIT-S 02-26 0086 - -HUGHES CAPITAL UNIT SIGNS PACT WITH BEAR STEARNS - FORT LAUDERDALE, Fla., Feb 26 - Hughes/Conserdyne Corp, a -unit of <Hughes Capital Corp> said it made Bear Stearns and Co -Inc <BSC> its exclusive investment banker to develop and market -financing for the design and installation of its micro-utility -systems for municipalities. - The company said these systems are self-contained -electrical generating facilities using alternate power sources, -such as photovoltaic cells, to replace public utility power -sources. - Reuter - - - -26-FEB-1987 15:34:07.03 -copper -usa - - - - - -C M F -f0810reute -u f BC-magma-copper-price 02-26 0036 - -MAGMA LOWERS COPPER 0.75 CENT TO 66 CTS - NEW YORK, Feb 26 - Magma Copper Co, a subsidiary of Newmont -Mining Corp, said it is cutting its copper cathode price by -0.75 cent to 66 cents a lb, effective immediately. - Reuter - - - -26-FEB-1987 15:34:16.30 -earn -usa - - - - - -F -f0811reute -u f BC-BROWN-FORMAN-<BFDB>-S 02-26 0053 - -BROWN-FORMAN <BFDB> SETS STOCK SPLIT, UPS PAYOUT - LOUISVILLE, Ky., Feb 26 - Brown-Forman Inc said its board -has approved a three-for-two stock split and a 35 pct increase -in the company cash dividend. - The company cited its improved earnings outlook and -continued strong cash flow as reasons for raising the dividend. - Brown-Forman said the split of its Class A and Class B -common shares would be effective March 13. - The company said directors declared a quarterly cash -dividend on each new share of both classes of 28 cts, payable -April one to holders of record March 20. Prior to the split, -the company had paid 31 cts quarterly. - Brown-Forman today reported a 37 pct increase in third -quarter profits to 21.6 mln dlrs, or 1.00 dlr a share, on a -seven pct increase in sales to a record 337 mln dlrs. - Brown-Forman said nine month profits declined a bit to 66.0 -mln dlrs, or 3.07 dlrs a share, from 66.2 mln dlrs, or 3.08 -dlrs a share, a year earlier due to a second quarter charge of -37 cts a share for restructuring its beverage operations. - The company said lower corporate tax rates and the -restructuring "are expected to substantially improve -Brown-Forman's earnings and cash flow in fiscal 1988." - Reuter - - - -26-FEB-1987 15:35:16.67 -earn -usa - - - - - -F -f0814reute -h f BC-ESQUIRE-RADIO-AND-ELE 02-26 0072 - -ESQUIRE RADIO AND ELECTRONICS INC <EE> 4TH QTR - NEW YORK, Feb 26 - - Shr profit 15 cts vs profit four cts - Annual div 72 cts vs 72 cts prior yr - Net profit 72,000 vs profit 16,000 - Revs 7,075,000 vs 2,330,000 - 12 mths - Shr profit 42 cts vs loss 11 cts - Net profit 203,000 vs loss 55,000 - Revs 16.1 mln vs 3,971,000 - NOTE: annual dividend payable April 10, 1987, to -stockholders of record on March 27, 1987. - Reuter - - - -26-FEB-1987 15:35:39.38 - -usa - - - - - -F -f0815reute -h f BC-SHEARSON-LEHMAN-NAMES 02-26 0061 - -SHEARSON LEHMAN NAMES NEW MANAGING DIRECTOR - NEW YORK, Feb 26 - Shearson Lehman Brothers, a unit of -American Express Co <AXP>, said Robert Stearns has joined the -company as managing director of its merger and acquisition -department. - Shearson said Stearns formerly was part of Merrill Lynch -Pierce, Fenner and Smith Inc's <MER> merger and acquisitions -department. - Reuter - - - -26-FEB-1987 15:36:44.78 - -usabrazilvenezuela - - - - - -V RM -f0817reute -b f BC-/BANKERS-REPORT-BREAK 02-26 0092 - -BANKERS REPORT BREAKTHROUGH ON VENEZUELAN DEBT - NEW YORK, Feb 26 - Venezuela and its bank advisory -committee have agreed in principle on revisions to the terms of -a 21 billion dlr debt-rescheduling package signed last -February, bankers said. - They declined to disclose details because two or three -representatives on the panel have still to obtain the approval -of their senior management for the new terms. - The committee was meeting in New York this afternoon and -could put its final stamp of approval of the deal later today, -the bankers said. - "A number of details have still to be finalized, but the -broad details of the new amortization schedules and interest -rates are in place," one senior banker said. - The interest rate on the rescheduling was originally set at -1-1/8 pct over Eurodollar rates, but Venezuela requested easier -terms because of a 40 pct drop in oil income last year. - It also asked for a reduction in the repayments it was due -to make in 1987, 1988 and 1989 - after an earlier request that -it make no amortizations at all in those years was rebuffed - -and sought a commitment from the banks to finance new -investment in Venezuela. - The breakthrough in the Venezuelan talks, which have been -going on intermittently for several months, follows the -announcement earlier today of a 10.6 billion dlr debt -rescheduling pact between Chile and its bank advisory panel. - And last night Citibank said Mexico's financing package, -including a 7.7 billion dlr loan, will be signed on March 20. - While the sudden progress is to some extent coincidental, -bankers acknowledge a desire to chalk up some quick successes -after the shock of Brazil's unilateral interest suspension last -Friday. By striking swift deals, banks hope to reduce the -incentive for other debtors to emulate Brazil. - Reuter - - - -26-FEB-1987 15:36:53.42 -earn -usa - - - - - -F -f0818reute -d f BC-UNITED-PRESIDENTIAL-C 02-26 0073 - -UNITED PRESIDENTIAL CORP <UPCO> 4TH QTR NET - KOKOMO, Ind., Feb 26 - - Shr 39 cts vs 50 cts - Net 1,545,160 vs 2,188,933 - Revs 25.2 mln vs 19.5 mln - Year - Shr 1.53 dlrs vs 1.21 dlrs - Net 6,635,318 vs 5,050,044 - Revs 92.2 mln vs 77.4 mln - NOTE: Results include adjustment of 848,600 dlrs or 20 cts -shr for 1986 year and both 1985 periods from improvement in -results of its universal life business than first estimated. - Reuter - - - -26-FEB-1987 15:38:26.23 - -usa -reagan - - - - -V RM -f0823reute -r f AM-REAGAN-IMPACT-(NEWS-A NALYSIS) 02-26 0092 - -TOWER REPORT DIMINISHES REAGAN'S HOPES OF REBOUND - By Michael Gelb, Reuters - WASHINGTON, Feb 26 - The Tower Commission report, which -says President Reagan was ignorant about much of the Iran arms -deal, just about ends his prospects of regaining political -dominance in Washington, political analysts said. - "This is certification of incompetence," private political -analyst Stephen Hess told Reuters in commenting on the Tower -report made public today. - "It's as if he went before a professional licensing board -and was denied credentials." - In one of the most direct criticisms, board chairman John -Tower, a longtime Reagan supporter and former Republican -senator from Texas, told a press conference, "The president -clearly did not understand the nature of this operation." - The report, which lent credence to widespread opinion in -Washington that Reagan is not in full command of the -government, was particularly damaging because it was prepared -by a board of the Republican president's own choosing. - The three-member panel made up of Tower, former National -Security Adviser Brent Scowcroft and former Secretary of State -Edmund Muskie, does not carry the partisan taint of criticism -from a Congress controlled by the Democratic party. - "We're falling by our own hand," said one Republican -political strategist. "What can we say except 'we're sorry, we -won't do it again'?" - The strategist, who works for one of his party's top 1988 -presidential contenders and asked not to be identified, said -the report was like "an anvil falling on us." - Hess, with the Brookings Institution public policy study -group, said the report is the final blow to Reagan's hopes of -regaining the upper hand he once had in dealings with Congress, -the press and the Washington bureaucracy. - The report may also undermine the standing of Defense -Secretary Caspar Weinberger and Secretary of State George -Shultz, who the report suggests were more interested in keeping -their own skirts clean than supporting the president. - "They protected the record as to their own positions on this -issue. They were not energetic in attempting to protect the -president from the consequences," it said. - White House chief of staff Donald Regan and former Central -Intelligence Agency Director William Casey also received strong -criticism, but the blows were expected in their cases. - Regan, expected to resign or be fired shortly, was savaged -for allegedly failing both to help Reagan conduct the Iran -initiative and to avoid "chaos" in the disclosure process. - Casey, who underwent surgery for removal of a cancerous -brain tumor in December, had already resigned for health -reasons last month. - "This is a story about people who came up somewhat short of -being heroes," Tower told reporters. - While Reagan retains considerable constitutional powers, -including command of the armed forces and the right to veto -legislation, analysts say it will be difficult for him to -retake control of the country's policy agenda -- particularly -with Congress controlled by the Democrats. - The crucial remaining question, they said, is whether the -man in the street will forsake Reagan over the affair. - Although his job approval rating has fallen as much as -twenty percentage points in some opinion polls since the arms -deal with Iran became public last November, his personal -popularity is still relatively high. - A Los Angeles Times poll released earlier this week showed -that just 37 pct of those surveyed thought Reagan was in -control of the government, but 55 pct still thought he was -doing a good job as president. - American Enterprise Institute analyst William Schneider, a -Democrat, says Reagan's loss of support among Washington power -brokers could be offset by continued backing of the public. - "In the past, he has been able to go around the power elite -by appealing directly to the public," Schneider said. - Reagan will again plead his case that way in a televised -address next week. - But one top Republican strategist warned against expecting -a dramatic turnaround. - "The White House has to avoid building expectations that -cannot be met," said the strategist, who requested anonymity. -"They have to recognize there is no quick fix." - Analysts also point out that Reagan's personal popularity -has not always translated into public backing for his policies. - They note he was dramatically rebuffed in last November's -elections when voters rejected his appeals and restored control -of the Senate to the Democrats. - Reuter - - - -26-FEB-1987 15:39:41.92 -housing -usa - - - - - -F -f0827reute -r f BC-JANUARY-HOUSING-SALES 02-26 0103 - -JANUARY HOUSING SALES DROP, REALTY GROUP SAYS - WASHINGTON, Feb 26 - Sales of previously owned homes -dropped 14.5 pct in January to a seasonally adjusted annual -rate of 3.47 mln units, the National Association of Realtors -(NAR) said. - But the December rate of 4.06 mln units had been the -highest since the record 4.15 mln unit sales rate set in -November 1978, the group said. - "The drop in January is not surprising considering that a -significant portion of December's near-record pace was made up -of sellers seeking to get favorable capital gains treatment -under the old tax laws," said the NAR's John Tuccillo. - Reuter - - - -26-FEB-1987 15:41:56.54 -money-supply - - - - - - -A -f0835reute -f f BC-******ASSETS-OF-MONEY 02-26 0012 - -******ASSETS OF MONEY MARKET MUTUAL FUNDS ROSE 720.4 MLN DLRS IN LATEST WEEK -Blah blah blah. - - - - - -26-FEB-1987 15:43:14.36 - -usa - - - - - -A -f0840reute -b f BC-******U.S.-TAX-WRITER 02-26 0013 - -******U.S. TAX WRITERS SEEK ESTATE TAX CURBS, RAISING 6.7 BILLION DLRS THRU 1991 -Blah blah blah. - - - - - -26-FEB-1987 15:43:59.53 - -usa - - - - - -F -f0842reute -d f BC-SENATORS-INTRODUCE-EX 02-26 0110 - -SENATORS INTRODUCE EXPORT LICENSING REFORM BILL - WASHINGTON, Feb 26 - Sens. Alan Cranston (D-Cal.) and -Daniel Evans (R-Wash.) said they introduced export licensing -reform legislation that could save U.S. companies hundreds of -thousands of dollars annually. - "Our emphasis is two-fold: Decontrol and de-license items -where such actions will not endanger our national security, and -eliminate the Department of Defense's de facto veto authority -over the licensing process," Cranston said. - "Our reforms should reduce licensing requirements by 65 to -70 pct," he told reporters. "I am convinced that a more -rational...licensing process will boost exports." - U.S. export controls are intended to deny Eastern bloc -countries access to technology that could further their -military capabilities. - "By refocusing our control resources on higher levels of -technology, technology that is truly critical, we will do a -better job of preventing diversion of critical technology to -our adversaries while promoting more exports," Cranston said. - "We cannot expect to continue to play a leading role in new -technology development in the future if we unduly restrict the -activities of U.S. firms in the world market-place," Evans told -reporters. - Reuter - - - -26-FEB-1987 15:44:36.04 - -usa - - - - - -F -f0845reute -r f BC-EXCELAN-INC-SETS-INIT 02-26 0061 - -EXCELAN INC SETS INITIAL STOCK OFFER - SAN JOSE, Calif., Feb 26 - Excelan Inc said it is making an -initial public offering of 2,129,300 shares of common stock at -12 dlrs per share. - Excelan said 1.6 mln of the shares are being sold by the -company and 529,300 shares are being sold by stockholders. - Excelan designs and manufactures computer-related products. - Reuter - - - -26-FEB-1987 15:45:19.65 - -usa - - - - - -F -f0847reute -d f BC-CCX-NETWORK-<CCXN>-SE 02-26 0074 - -CCX NETWORK <CCXN> SECONDARY OFFERING UNDERWAY - CONWAY, Ark., Feb 26 - CCX Network Inc said it was offering -220,838 shares of stock at 15.75 dlrs a share though -underwriters Stephens Inc and Cazenove Inc. - The company said it was selling the stock on behalf of some -shareholders, including those who recently received shares -in the company in exchange for their businesses. - The company said it was receiving no proceeds from the -offering. - Reuter - - - -26-FEB-1987 15:45:26.55 - -usa - - - - - -F -f0848reute -r f BC-FIRST-UNION-<FUNC>-FI 02-26 0055 - -FIRST UNION <FUNC> FILES 100 MLN DLR NOTES ISSUE - NEW YORK, Feb 26 - First Union Corp said it has filed with -the Securities and Exchange Commission for a proposed offering -of 100 mln dlrs of fixed rate subordinated notes due 1997. - The notes will be sold nationwide through underwriters -managed by Shearson Lehman Brothers Inc. - Reuter - - - -26-FEB-1987 15:45:35.37 -earn -usa - - - - - -F -f0849reute -r f BC-OWENS-AND-MINOR-INC-< 02-26 0025 - -OWENS AND MINOR INC <OBOD> RAISES QTLY DIVIDEND - RICHMOND, Va. Feb 26 - - Qtly div eights cts vs 7.5 cts prior - Pay March 31 - Record March 13 - Reuter - - - -26-FEB-1987 15:45:39.20 -earn -usa - - - - - -F -f0850reute -r f BC-COMPUTER-LANGUAGE-RES 02-26 0070 - -COMPUTER LANGUAGE RESEARCH IN <CLRI> 4TH QTR - CARROLLTON, Texas, Feb 26 - - Shr loss 22 cts vs loss 18 cts - Net loss 3,035,000 vs loss 2,516,000 - Revs 20.9 mln vs 19.6 mln - Qtly div three cts vs three cts prior - Year - Shr profit two cts vs profit 34 cts - Net profit 215,000 vs profit 4,647,000 - Revs 93.4 mln vs 98.7 mln - NOTE: Dividend payable April one to shareholders of record -March 17. - Reuter - - - -26-FEB-1987 15:45:47.29 -earn -usa - - - - - -E F -f0851reute -d f BC-<CINRAM-LTD>-4TH-QTR 02-26 0051 - -<CINRAM LTD> 4TH QTR NET - Scarborough, Ontario, Feb 26 - - Shr 45 cts vs 58 cts - Net 1.1 mln vs 829,000 - Sales 7.9 mln vs 9.4 mln - Avg shrs 2,332,397 vs 1,428,000 - Year - Shr 1.22 dlrs vs 1.06 dlrs - Net 2.9 mln vs 1.5 mln - Sales 25.7 mln vs 22.2 mln - Avg shrs 2,332,397 vs 1,428,000 - Reuter - - - -26-FEB-1987 15:46:36.16 - -usa - - - - - -F -f0855reute -h f BC-DU-PONT-CO-<DD>-LAUNC 02-26 0105 - -DU PONT CO <DD> LAUNCHES IMPROVED ARAMID FIBERS - WILMINGTON, Del., Feb 26 - The Du Pont Co said it has -devloped a new generation of high-strength aramid fibers which -is stiffer and less absorbant than previous generations. - Du Pont said the new product, Kevlar 149, is up to 40 pct -stiffer than first generation aramids, and absorbs less than -half the moister of other similar aramid fibers. - Kevlar was invented by Du Pont in the late 1960s and is -five times stronger than steel and 10 times stronger than -aluminum on an equal wieght basis, and is used to replace -metals in a variety of products, according to the company. - Reuter - - - -26-FEB-1987 15:47:16.17 -earn -canada - - - - - -E F -f0859reute -r f BC-STANDARD-TRUSTCO-SEES 02-26 0099 - -STANDARD TRUSTCO SEES BETTER YEAR - Toronto, Feb 26 - Standard Trustco said it expects earnings -in 1987 to increase at least 15 to 20 pct from the 9,140,000 -dlrs, or 2.52 dlrs per share, recorded in 1986. - "Stable interest rates and a growing economy are expected to -provide favorable conditions for further growth in 1987," -president Brian O'Malley told shareholders at the annual -meeting. - Standard Trustco previously reported assets of 1.28 billion -dlrs in 1986, up from 1.10 billion dlrs in 1985. Return on -common shareholders' equity was 18.6 pct last year, up from 15 -pct in 1985. - Reuter - - - -26-FEB-1987 15:48:26.92 -earn -usa - - - - - -F -f0865reute -u f BC-HANDY-AND-HARMAN-<HNH 02-26 0068 - -HANDY AND HARMAN <HNH> 4TH QTR LOSS - NEW YORK, Feb 26 - - Shr loss 51 cts vs loss three cts - Net loss 7,041,000 vs loss 467,000 - Rev 138.9 mln vs 131.4 mln - 12 months - Shr loss 64 cts vs profit 46 cts - Net loss 8,843,000 vs profit 6,306,0000 - Rev 558.9 mln vs 556.7 mln - NOTE: Net loss for 4th qtr 1986 includes charge for -restructuring of 2.6 mln dlrs after tax, or 19 cts a share. - 1986 net loss includes after tax special charge of 2.7 mln -dlrs, or 20 cts a share. - - Reuter - - - -26-FEB-1987 15:49:27.16 -coffee -uk - -ico-coffee - - - -C T -f0871reute -b f BC-ICO-PRODUCERS-TO-PRES 02-26 0109 - -ICO PRODUCERS TO PRESENT NEW COFFEE PROPOSAL - LONDON, Feb 26 - International Coffee Organization, ICO, -producing countries will present a proposal for reintroducing -export quotas for 12 months from April 1 with a firm -undertaking to try to negotiate up to September 30 any future -quota distribution on a new basis, ICO delegates said. - Distribution from April 1 would be on an unchanged basis as -in an earlier producer proposal, which includes shortfall -redistributions totalling 1.22 mln bags, they said. - Resumption of an ICO contact group meeting with consumers, -scheduled for this evening, has been postponed until tomorrow, -delegates said. - Reuter - - - -26-FEB-1987 15:49:44.93 - -usairan - - - - - -V RM -f0873reute -u f AM-REAGAN-SHULTZ-1STLD 02-26 0108 - -SHULTZ SAYS NO RESIGNATION OVER IRAN REPORT - ANCHORAGE, Alaska, Feb 26 - Secretary of State George -Shultz acknowledged failings in the Iran arms affair but -declared he would not resign. - His role in the scandal that has scarred the Reagan -administration attracted harsh criticism from the Tower -commission in its report on the affair published today. - Shultz, travelling to China for a week-long visit, refused -to comment directly on the report, published after he had left -Washington. But he repeated -- as he has done since the crisis -broke last November -- that he was not going to resign. - "You can wipe that off your slate," he said. - Reuter - - - -26-FEB-1987 15:49:56.01 -acqship -usa - - - - - -F -f0874reute -r f BC-MCLEAN'S-<MII>-U.S.-L 02-26 0094 - -MCLEAN'S <MII> U.S. LINES SETS ASSET TRANSFER - CRANFORD, N.J., Feb 26 - McLean Industries Inc's United -States Lines Inc subsidiary said it has agreed in principle to -transfer its South American service by arranging for the -transfer of certain charters and assets to <Crowley Mariotime -Corp>'s American Transport Lines Inc subsidiary. - U.S. Lines said negotiations on the contract are expected -to be completed within the next week. Terms and conditions of -the contract would be subject to approval of various regulatory -bodies, including the U.S. Bankruptcy Court. - Reuter - - - -26-FEB-1987 15:51:17.84 -acq -usa - - - - - -F -f0881reute -u f BC-CHEMLAWN-<CHEM>-RISES 02-26 0106 - -CHEMLAWN <CHEM> RISES ON HOPES FOR HIGHER BIDS - By Cal Mankowski, Reuters - NEW YORK, Feb 26 - ChemLawn Corp <CHEM> could attract a -higher bid than the 27 dlrs per share offered by Waste -Management Inc <WNX>, Wall Street arbitrageurs said. - Shares of ChemLawn shot up 11-5/8 to 29-3/8 in -over-the-counter- trading with 3.8 mln of the company's 10.1 -mln shares changing hands by late afternoon. - "This company could go for 10 times cash flow or 30 dlrs, -maybe 32 dollars depending on whether there is a competing -bidder," an arbitrageur said. Waste Management's tender offer, -announced before the opening today, expires March 25. - "This is totally by surprise," said Debra Strohmaier, a -ChemLawn spokeswoman. The company's board held a regularly -scheduled meeting today and was discussing the Waste Management -announcement. She said a statement was expected but it was not -certain when it would be ready. - She was unable to say if there had been any prior contact -between Waste Management and ChemLawn officials. - "I think they will resist it," said Elliott Schlang, -analyst at Prescott, Ball and Turben Inc. "Any company that -doesn't like a surprise attack would." - Arbitrageurs pointed out it is difficult to resist tender -offers for any and all shares for cash. Schlang said ChemLawn -could try to find a white knight if does not want to be -acquired by Waste Management. - Analyst Rosemarie Morbelli of Ingalls and Snyder said -ServiceMaster Companies L.P. <SVM> or Rollins Inc <ROL> were -examples of companies that could be interested. - ChemLawn, with about two mln customers, is the largest U.S. -company involved in application of fertilizers, pesticides and -herbicides on lawns. Waste Management is involved in removal of -wastes. - Schlang said ChemLawn's customer base could be valuable to -another company that wants to capitalize on a strong -residential and commercial distribution system. - Both Schlang and Morbelli noted that high growth rates had -catapulted ChemLawn's share price into the mid-30's in 1983 but -the stock languished as the rate of growth slowed. - Schlang said the company's profits are concentrated in the -fourth quarter. In 1986 ChemLawn earned 1.19 dlrs per share for -the full year, and 2.58 dlrs in the fourth quarter. - Morbelli noted ChemLawn competes with thousands of -individual entrepreuers who offer lawn and garden care sevice. - Reuter - - - -26-FEB-1987 15:51:28.42 -sugar -usa - - - - - -C T -f0882reute -b f BC-sugar-imports 02-26 0120 - -U.S. SUGAR IMPORTS DOWN IN WEEK - USDA - WASHINGTON, Feb 26 - Sugar imports subject to the U.S. -sugar import quota during the week ended January 9, the initial -week of the 1987 sugar quota year, totaled 5,988 short tons -versus 46,254 tons the previous week, the Agriculture -Department said. - The sugar import quota for the 1987 quota year -(January-December) has been set at 1,001,430 short tons -compared with 1,850,000 tons in the 1986 quota year, which was -extended three months to December 31. - The department said the Customs Service has reported that -weekly and cumulative imports are reported on an actual weight -basis and when final polarizations are received, cumulative -import data are adjusted accordingly. - Reuter - - - -26-FEB-1987 15:51:51.24 -trade -brazil - - - - - -C G L M T -f0884reute -d f AM-CRUZADO 02-26 0114 - -BRAZIL ANTI-INFLATION PLAN LIMPS TO ANNIVERSARY - RIO DE JANEIRO, Feb 26 - Brazil's "Cruzado" anti- inflation -plan, initially hailed at home and abroad as the saviour of the -economy, is limping towards its first anniversary amid soaring -prices, widespread shortages and a foreign payments crisis. - Announced last February 28 the plan froze prices, fixed the -value of the new Cruzado currency and ended widespread -indexation of the economy in a bid to halt the country's 250 -pct inflation rate. - But within a year the plan has all but collapsed. - "The situation now is worse than it was. Although there was -inflation, at least the economy worked," a leading bank -economist said. - The crumbling of the plan has been accompanied by a -dramatic reversal in the foreign trade account. In 1984 and -1985 Brazil's annual trade surpluses had been sufficient to -cover the 12 billion dlrs needed to service its 109 billion dlr -foreign debt. - For the first nine months of 1986 all seemed to be on -target for a repeat, with monthly surpluses averaging one -billion dlrs. But as exports were diverted and imports -increased to avoid further domestic shortages the trade surplus -plunged to 211 mln dlrs in October and since then has averaged -under 150 mln. - Reuter - - - -26-FEB-1987 15:52:15.10 -reserves -new-zealand - - - - - -RM -f0886reute -u f BC-N.Z.-OFFICIAL-FOREIGN 02-26 0049 - -N.Z. OFFICIAL FOREIGN RESERVES FALL IN JANUARY - WELLINGTON, Feb 27 - New Zealand's official foreign -reserves fell to 7.15 billion N.Z. Dlrs in January from 7.20 -billion dlrs in December and compared with 3.03 billion a year -ago period, the Reserve Bank said in its weekly statistical -bulletin. - Reuter - - - -26-FEB-1987 15:52:25.60 -ship -usapanama - - - - - -G T M -f0888reute -d f BC-panama-canal-ships 02-26 0071 - -AGENCY REPORTS 39 SHIPS WAITING AT PANAMA CANAL - WASHINGTON, Feb 26 - The Panama Canal Commission, a U.S. -government agency, said in its daily operations report that -there was a backlog of 39 ships waiting to enter the canal -early today. Over the next two days it expects -- - 2/26 2/27 - Due: 27 35 - Scheduled to Transit: 35 41 - End-Day Backlog: 31 25 - Average waiting time tomorrow -- - Super Tankers Regular Vessels - North End: 13 hrs 15 hrs - South End: 4 hrs 26 hrs - Reuter - - - -26-FEB-1987 15:52:33.04 -earn -usa - - - - - -F -f0889reute -d f BC-AMERICA-FIRST-MORTGAG 02-26 0046 - -AMERICA FIRST MORTGAGE SETS SPECIAL PAYOUT - OMAHA, Neb., Feb 26 - <America First Federally Guaranteed -Mortgage Fund Two> said it is making a special distribution of -71.6 cts per exchangeable unit, which includes 67.62 cts from -return on capital and 3.98 cts from income gains. - Reuter - - - -26-FEB-1987 15:52:57.49 - -usa - - - - - -C G -f0894reute -d f BC-REPUBLICANS-EYE-BIGGE 02-26 0112 - -REPUBLICANS EYE BIGGER U.S. CONSERVATION RESERVE - WASHINGTON, Feb 26 - A group of Republican governors and -members of Congress said they intended to explore expanding the -conservation reserve program by up to 20 mln acres. - Under current law, between 40 and 45 mln acres of erodible -land must be enrolled in the program by the end of fiscal 1990. - The Republican Task Force on Farm and Rural America, headed -by Senate Majority Leader Robert Dole (Kan.), said they would -consider drafting legislation to increase the reserve by -between 15 and 20 mln acres. - Sen. Charles Grassley (R-Iowa) told Reuters he would offer -a bill to expand the reserve to 67 mln acres. - Reuter - - - -26-FEB-1987 15:53:05.48 - -usa - - - - - -F -f0895reute -h f BC-ARVIN-INDS-<ARV>-PROM 02-26 0037 - -ARVIN INDS <ARV> PROMOTES EVANS TO PRESIDENT - COLUMBUS, IND., Feb 26 - Arvin Industries Inc said L.K. -Evans has been elected president, succeeding James Baker who -remains chairman. Evans had been executive vice president. - Reuter - - - -26-FEB-1987 15:53:54.56 -earn -usa - - - - - -F -f0899reute -s f BC-EMHART-CORP-<EMH>-QTL 02-26 0024 - -EMHART CORP <EMH> QTLY DIVIDEND - FARMINGTON, Conn., FEb 26 - - Qtly div 35 cts vs 35 cts prior - Payable March 31 - Record March nine - - Reuter - - - -26-FEB-1987 15:54:55.20 - -usa - - - - - -V RM -f0901reute -u f BC-/U.S.-DATA-POINT-TO-C 02-26 0102 - -U.S. DATA POINT TO CAPITAL SPENDING SLOWDOWN - By Kathleen Hays, Reuters - NEW YORK, Feb 26 - A surprise 7.5 pct drop in U.S. January -durable goods orders points to a slowdown in capital spending -that could presage lackluster real growth in the U.S. economy -in the first quarter of 1987, economists said. - With total orders, excluding the volatile defense sector, -falling a record 9.9 pct, economists agreed that the report -painted a bleak picture for the U.S. economy. - But they stressed that the 1987 tax reform laws may be a -primary factor behind the drop in orders for business capital -investment. - "It's a rather gloomy outlook for the economy, said David -Wyss of Data Resources Inc. "I'm particularly impressed by the -19.7 pct drop in non-defense capital goods orders because it -may be a sign that businesses are reacting more adversely to -tax reform than we thought." - The Commerce Department pointed out that a record 14.8 pct -decline in new orders for machinery was led by declines in -office and computing equipment orders. - Economists said the drop in computer orders may have been a -response to the lengthening of depreciation schedules and the -end of the investment tax credit under the new tax laws. - "It's more expensive to invest than it used to be, so -people just aren't doing it as much," Wyss said. - Increases in durable goods orders at year's end reinforced -the view that businesses anticipated the changing tax laws, -economists said. - November durable goods orders rose 5.1 pct and December's -increased 1.5 pct, revised upwards from a previously reported -0.9 pct. - But most acknowledged that the huge January drop was caused -by more than tax reform. - "The wash-out that took place in January was far greater -than the actual gains that took place in November and -December," said Bill Sullivan of Dean Witter Reynolds Inc. "The -economy has a weakening bent to it early in the year." - "The report definitely points to very sluggish capital -spending over the next couple of quarters," said Donald Maude -of Midland Montagu Capital Markets Inc. - Maude pointed to a continuing decline in order backlogs as -evidence that the outlook for new orders is not improving. In -November, order backlogs rose 0.6 pct, but in December they -fell 0.6 pct and in January 0.7 pct, he said. - "It suggests orders in the pipeline are depleting, which -may quickly translate to a drop in production," Midland -Montagu's Maude said. - Wyss cautioned that too much should not be made of -January's report, given that other reports have reflected -strength. - But he acknowledged that the decline occurred despite a 51 -pct rise in defense orders, compared with a 57.7 pct decline in -December. - He also noted that there was a 6.9 pct drop in January -shipments, compared with a 5.4 pct rise in December. - "Given these numbers, there's no reason for the Fed to -tighten," Data Resources' Wyss said. - "But there's no reason to ease unless we see more numbers -like this. The Fed will wait and see," he added. - Sullivan predicted the Fed will ease by Easter. "People -aren't talking recession or Fed easing now, but the Fed will -have to ease to ensure global growth." - Reuter - - - -26-FEB-1987 15:56:00.50 - -usa - - - - - -C -f0903reute -d f BC-SENATORS-INTRODUCE-EX 02-26 0110 - -SENATORS INTRODUCE EXPORT LICENSING REFORM BILL - WASHINGTON, Feb 26 - Sens. Alan Cranston (D-Cal.) and -Daniel Evans (R-Wash.) said they introduced export licensing -reform legislation that could save U.S. companies hundreds of -thousands of dollars annually. - "Our emphasis is two-fold: Decontrol and de-license items -where such actions will not endanger our national security, and -eliminate the Department of Defense's de facto veto authority -over the licensing process," Cranston said. - "Our reforms should reduce licensing requirements by 65 to -70 pct," he told reporters. "I am convinced that a more -rational...licensing process will boost exports." - U.S. export controls are intended to deny Eastern bloc -countries access to technology that could further their -military capabilities. - "By refocusing our control resources on higher levels of -technology, technology that is truly critical, we will do a -better job of preventing diversion of critical technology to -our adversaries while promoting more exports," Cranston said. - "We cannot expect to continue to play a leading role in new -technology development in the future if we unduly restrict the -activities of U.S. firms in the world market-place," Evans told -reporters. - Reuter - - - -26-FEB-1987 15:57:48.22 -earn -usa - - - - - -F -f0906reute -r f BC-AM-INTERNATIONAL-<AM> 02-26 0092 - -AM INTERNATIONAL <AM> CITES STRONG PROSPECTS - CHICAGO, Feb 26 - AM International Inc, reporting an -operating loss for the January 31 second quarter, said -prospects for the balance of the fiscal year remain good. - It said orders at its Harris Graphics subsidiary, acquired -in June 1986, "continue to run at a strong pace." For the six -months, orders rose 35 pct over the corresponding prior-year -period, or on an annualized basis are running at about 630 mln -dlrs. - The backlog at Harris is up 30 pct from the beginning of -the fiscal year, AM said. - AM International said its old division are expected to -benefit from recent new product introductions and the decline -in the value of the dollar. - "Research, development and engineering expenditures in -fiscal 1987 will be in the 45-50 mln dlr range, and the company -said it has allocated another 30-40 mln dlrs for capital -expenditures. - Earlier AM reported a fourth quarter operating loss of two -cts a share compared to profits of seven cts a share a year -ago. Revenues rose to 291.8 mln dlrs from 151.1 mln dlrs. - Reuter - - - -26-FEB-1987 15:58:07.34 -graincorn -usahonduras - - - - - -C G -f0907reute -u f BC-CCC-CREDITS-FOR-HONDU 02-26 0097 - -CCC CREDITS FOR HONDURAS SWITCHED TO WHITE CORN - WASHINGTON, Feb 26 - The Commodity Credit Corporation (CCC) -announced 1.5 mln dlrs in credit guarantees previously -earmarked to cover sales of dry edible beans to Honduras have -been switched to cover sales of white corn, the U.S. -Agriculture Department said. - The department said the action reduces coverage for sales -of dry edible beans to 500,000 dlrs and creates the new line of -1.5 mln dlrs for sales of white corn. - All sales under the credit guarantee line must be -registered and shipped by September 30, 1987, it said. - Reuter - - - -26-FEB-1987 15:58:19.46 -money-supply -usa - - - - - -A RM -f0908reute -u f BC-ASSETS-OF-U.S.-MONEY 02-26 0072 - -ASSETS OF U.S. MONEY FUNDS ROSE IN WEEK - WASHINGTON, Feb 26 - Assets of money market mutual funds -increased 720.4 mln dlrs in the week ended yesterday to 236.90 -billion dlrs, the Investment Company Institute said. - Assets of 91 institutional funds rose 356 mln dlrs to 66.19 -billion dlrs, 198 general purpose funds rose 212.5 mln dlrs to -62.94 billion dlrs and 92 broker-dealer funds rose 151.9 mln -dlrs to 107.77 billion dlrs. - Reuter - - - -26-FEB-1987 15:58:47.73 -ship -usa - - - - - -G C -f0910reute -u f BC-gulf-grain-barge-frgt 02-26 0117 - -GULF BARGE FREIGHT RATES UP FURTHER ON CALL - ST LOUIS, Feb 26 - Gulf barge freight rates firmed again on -the outlook for steady vessel loadings at the Gulf, increasing -the demand for barges to supply those ships, dealers said. - No barges traded today on the St Louis Merchants' Exchange -call session, versus 29 yesterday. - Quotes included - - - Delivery this week on the Illinois River (Joliet) 135 pct of -tariff bid/140 offered, with next week same river (ex Chicago) -quoted the same - both up 2-1/2 percentage points. - - Next week Mississippi River (St Louis) 120 pct bid/127-1/2 -offered - up five points. - - Next week Ohio River (Owensboro/south) 125 pct bid/132-1/2 -offered - up 7-1/2 points. - - On station Illinois River (south Chicago) 135 pct bid/140 -offered - no comparison. - - March Illinois (ex Chicago) 132-1/2 pct bid/140 offered - up -2-1/2 points. - - March Ohio River bid at yesterday's traded level of 125 pct, -offered at 132-1/2. - - March lower Mississippi River (Memphis/Cairo) 112-1/2 pct -bid/120 offered - no comparison. - - May Illinois River (ex Chicago) 100 pct bid/107-1/2 offered -- no comparison. - - Sept/Nov Lower Mississippi River (Memphis/Cairo) 137-1/2 pct -bid/145 offered, with Sept/Dec same section 125 pct bid/135 -offered - no comparison. - Reuter - - - -26-FEB-1987 16:03:15.46 - -argentina - - - - - -C G L M T -f0923reute -u f BC-ARGENTINA-COULD-SUSPE 02-26 0110 - -ARGENTINA COULD SUSPEND DEBT PAYMENTS - DEPUTY - BUENOS AIRES, Feb 26 - Argentina could suspend payments on -its foreign debt if creditor banks reject a 2.15 billion dlr -loan request to meet 1987 growth targets, ruling Radical Party -Deputy Raul Baglini told a local radio station. - "Argentina does not discard the use of (a moratorium) if the -negotiations do not produce a result that guarantees the growth -of the country," he added. - Baglini, an observer at Argentina's negotiations in New -York with the steering committee for its 320 creditors banks, -told the Radio del Plata in a telephone interview that the -banks were divided on the loan request. - Baglini said that as a result, today's scheduled second day -of talks had been postponed. - He said Argentina was prepared to follow the example of -Brazil, which last week declared a moratorium on interest -payments of a large portion of its 108 billion dlr foreign -debt. - Argentina's prime objective in renegotiating the debt was -to maintain growth, which has been targeted at four pct in -1987, Baglini said. - "Debtor nations should not have to take from their own -pockets, that is their commercial balance, to meet interest -payments," he added. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-001.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-001.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-001.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-001.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2010 +0,0 @@ - - - 3-MAR-1987 09:18:21.26 - -usaussr - - - - - -G T -f0288reute -d f BC-SANDOZ-PLANS-WEEDKILL 03-03 0095 - -SANDOZ PLANS WEEDKILLER JOINT VENTURE IN USSR - BASLE, March 3 - Sandoz AG said it planned a joint venture -to produce herbicides in the Soviet Union. - The company said it had signed a letter of intent with the -Soviet Ministry of Fertiliser Production to form the first -foreign joint venture the ministry had undertaken since the -Soviet Union allowed Western firms to enter into joint ventures -two months ago. - The ministry and Sandoz will each have a 50 pct stake, but -a company spokeswoman was unable to give details of the size of -investment or planned output. - Reuter - - - - 3-MAR-1987 09:19:31.96 - -usataiwan - - - - - -G -f0295reute -d f BC-TAIWAN-REJECTS-TEXTIL 03-03 0137 - -TAIWAN REJECTS TEXTILE MAKERS EXCHANGE RATE PLEA - TAIPEI, March 3 - Central bank governor Chang Chi-cheng -rejected a request by textile makers to halt the rise of the -Taiwan dollar against the U.S. Dollar to stop them losing -orders to South Korea, Hong Kong and Singapore, a spokesman for -the Taiwan Textile Federation said. - He quoted Chang as telling representatives of 19 textile -associations last Saturday the government could not fix the -Taiwan dollar exchange rate at 35 to one U.S. Dollar due to -U.S. Pressure for an appreciation of the local currency. - The Federation asked the government on February 19 to hold -the exchange rate at that level. - The federation said in its request that many local textile -exporters were operating without profit and would go out of -business if the rate continued to fall. - Reuter - - - - 3-MAR-1987 09:20:23.32 -earn -usa - - - - - -F -f0296reute -d f BC-NATIONAL-FSI-INC-<NFS 03-03 0080 - -NATIONAL FSI INC <NFSI> 4TH QTR LOSS - DALLAS, March 3 - - Shr loss six cts vs profit 19 cts - Net loss 166,000 vs profit 580,000 - Revs 3,772,000 vs 5,545,000 - Year - Shr loss 13 cts vs profit 52 cts - Net loss 391,000 vs profit 1,425,000 - Revs 15.4 mln vs 16.6 mln - NOTE: 1985 year figures pro forma for purchase accounting -adjustments resulting from March 1985 reeacquisition of company -by its original shareholders before August 1985 initial public -offering. - Reuter - - - - 3-MAR-1987 09:21:39.11 - -usa - - - - - -Y -f0301reute -r f BC-OCCIDENTAL-<OXY>-OFFI 03-03 0049 - -OCCIDENTAL <OXY> OFFICIAL RESIGNS - LOMBARD, Ill., March 3 - MidCon Corp, a subsidiary of -Occidental Petroleum Corp <OXY>, said William C. Terpstra has -resigned as president and chief operating officer and his -reponsibilities will be assumed by MidCon chairman O.C. Davis. - No reason was given. - Reuter - - - - 3-MAR-1987 09:25:48.88 - -italy - - - - - -RM -f0308reute -u f BC-ITALY'S-BNL-TO-ISSUE 03-03 0101 - -ITALY'S BNL TO ISSUE 120 MLN DLR CONVERTIBLE BOND - ROME, March 3 - Italy's state-owned <Banca Nazionale del -Lavoro - BNL> said it would issue 120 mln dlrs of five-year -convertible eurobonds, an operation to be lead-managed by -<Credit Suisse-First Boston Ltd>. - BNL president Nerio Nesi told a news conference that the -issue, to be placed on the main international markets and -listed in Luxembourg, would be the first equity linked issue by -an Italian bank on the Euromarket. - BNL officials said the issue is scheduled for mid-March and -additional financial details were not immediately available. - They said the operation would be through the issue of -depositary receipts by BNL's London branch. They said the bonds -would carry warrants issued by its <Efibanca> subsidiary and -convertible into BNL saving shares within five years. - The officials said a banking consortium led by Credit -Suisse-First Boston would at the same time arrange for the -private placing of an unspecified number of BNL savings shares -with foreign institutional investors. - The operation was to further its aim of obtaining a listing -on foreign stock exchanges with a view to future capital -increases through ordinary share issues, they said. - REUTER - - - - 3-MAR-1987 09:27:51.06 - -usa - - - - - -F -f0313reute -u f BC-GE-<GE>-SAYS-AMR-<AMR 03-03 0076 - -GE <GE> SAYS AMR <AMR> ORDER WORTH 650 MLN DLRS - EVENDALE, Ohio, March 3 - General Electric Co said AMR -Corp's oprder of GE CFG-80C2 engines to power 25 new <Airbus -Industrie> A300-600R and 15 Boeing Co <BA> 767-300ER twinjets -is worth over 650 mln dlrs. - The company said the order is the largest single one it has -ever received for commercial aircraft engines. - AMR announced the order earlier today. - GE said deliveries will start in early 1988. - Reuter - - - - 3-MAR-1987 09:30:07.60 -earn -canada - - - - - -E F -f0314reute -r f BC-precambrian-shield 03-03 0054 - -<PRECAMBRIAN SHIELD RESOURCES LTD> YEAR LOSS - CALGARY, Alberta, March 3 - - Shr loss 1.93 dlrs vs profit 16 cts - Net loss 53,412,000 vs profit 4,479,000 - Revs 24.8 mln vs 32.7 mln - Note: 1986 shr and net include 51,187,000 dlr writedown on -U.S. operations, uneconomic coal operations and other mineral -properties - Reuter - - - - 3-MAR-1987 09:30:48.45 -money-fxinterest -uk - - - - - -RM -f0316reute -b f BC-U.K.-MONEY-MARKET-GIV 03-03 0094 - -U.K. MONEY MARKET GIVEN FURTHER 437 MLN STG HELP - LONDON, March 3 - The Bank of England said it had provided the -money market with a further 437 mln stg assistance in the -afternoon session. This brings the Bank's total help so far -today to 461 mln stg and compares with its revised shortage -forecast of 450 mln stg. - The central bank made purchases of bank bills outright -comprising 120 mln stg in band one at 10-7/8 pct and 315 mln -stg in band two at 10-13/16 pct. - In addition, it also bought two mln stg of treasury bills -in band two at 10-13/16 pct. - REUTER - - - - 3-MAR-1987 09:32:34.04 -earn -usa - - - - - -F -f0323reute -d f BC-GREASE-MONKEY-HOLDING 03-03 0024 - -GREASE MONKEY HOLDING CORP <GMHC> YEAR NOV 30 - DENVER, March 3 - - Shr nil vs nil - Net 130,998 vs 30,732 - Revs 1,568,941 vs 1,0053,234 - Reuter - - - - 3-MAR-1987 09:33:32.98 -earn -usa - - - - - -F -f0331reute -d f BC-ACCEPTANCE-INSURANCE 03-03 0058 - -ACCEPTANCE INSURANCE HOLDINGS INC <ACPT> YEAR - OMAHA, March 3 - - Oper shr profit 1.80 dlrs vs loss 2.28 dlrs - Oper net profit 2,048,0000 vs loss 1,318,000 - Revs 25.4 mln vs 12.3 mln - Avg shrs 1,135,000 vs 576,000 - NOTE: Net excludes realized investment gains of 40,000 dlrs -vs 13,000 dlrs. - 1986 net excludes 729,000 dlr tax credit. - Reuter - - - - 3-MAR-1987 09:35:03.37 -earn -usa - - - - - -F -f0333reute -u f BC-MINSTAR-INC-<MNST>-4T 03-03 0064 - -MINSTAR INC <MNST> 4TH QTR NET - MINNEAPOLIS, MINN., March 3 - - Oper shr loss 31 cts vs loss 30 cts - Oper net loss 5,429,000 vs loss 5,216,000 - Revs 257.5 mln vs 243.6 mln - Avg shrs 17.5 mln vs 13.5 mln - Year - Oper shr loss eight cts vs profit 28 cts - Oper net loss 1,324,000 vs profit 4,067,000 - Revs 989.5 mln vs 747.9 mln - Avg shrs 17.6 mln vs 15.7 mln - - NOTE: 1986 operating net loss excludes income from -discontinued operations equal to 11 cts in the quarter and 66 -cts in the year compared with 1.07 dlrs in the quarter and 1.23 -dlrs in the respective periods of 1985. - 1986 operating net loss also excludes extraordinary charges -of 14 cts in the quarter and 54 cts in the year. - 1985 operating net profit excludes an extraordinary gain of -47 cts. - Reuter - - - - 3-MAR-1987 09:37:19.17 - -switzerland - - - - - -RM -f0338reute -u f BC-DAI-ICHI-HOTEL-SWISS 03-03 0080 - -DAI-ICHI HOTEL SWISS FRANC NOTES COUPON CUT - ZURICH, March 3 - The coupon on Dai-Ichi Hotel Ltd's 50 mln -Swiss franc issue of five-year notes with equity warrants has -been cut to 1-5/8 pct from the indicated 1-7/8 pct, lead -manager Swiss Volksbank said. - The warrants have an exercise price of 1,507 yen per share, -compared with the last traded price of 1,470 yen, it said. - The notes are guarantees by Long-Term Credit Bank of Japan -Ltd. Payment is due on March 25. - REUTER - - - - 3-MAR-1987 09:37:43.02 -earn -canada - - - - - -E F -f0339reute -r f BC-mark-resources-inc 03-03 0044 - -<MARK RESOURCES INC> YEAR LOSS - CALGARY, Alberta, March 3 - - Shr not given - Loss 54.9 mln - Revs 27.2 mln - Note: Prior year results not given. 1986 results include -accounts of 89 pct owned <Precambrian Shield Resources Ltd>, -acquired November 5, 1986 - Reuter - - - - 3-MAR-1987 09:37:53.73 - -uk - - - - - -A -f0340reute -r f BC-SAAB-SCANIA-ISSUES-15 03-03 0078 - -SAAB-SCANIA ISSUES 150 MLN DLR EUROBOND - LONDON, March 3 - Saab-Scania AB is issuing a 150 mln dlr -eurobond due April 2, 1992 paying 7-3/4 pct and priced at -101-3/4 pct, lead manager Morgan Guaranty Ltd said. - The bond is available in denominations of 5,000 and 50,000 -dlrs and will be listed in London. Payment date is April 2, -1992. - Fees comprise 1-1/4 pct selling concession and 5/8 pct -management and underwriting combined, and listing will be in -London. - REUTER - - - - 3-MAR-1987 09:38:16.31 -earn -usa - - - - - -F -f0341reute -d f BC-TRANSFORM-LOGIC-<TOOG 03-03 0133 - -TRANSFORM LOGIC <TOOG> REVISES RESULTS DOWNWARD - SCOTTSDALE, Ariz., March 3 - Transform Logic Corp said it -has revised downward its previously reported fourth quarter and -year, ended October 31, results to reflect compensation expense -for employee stock options. - The company said resolution of this disagreement with its -auditors came as a result of Securities and Exchange Commission -involvement. The company will amend its option-granting -procedure to conform to the SEC decision which will eliminate -future charges, it added. - Transform said its fourth quarter profit was revised to -305,082 dlrs, or two cts a share, from the previously reported -580,955 dlrs, which left the company with a fiscal 1986 loss of -249,814 dlrs, or two cts a share, instead of the reported -26,195 dlrs profit. - Reuter - - - - 3-MAR-1987 09:38:28.76 -earn -usa - - - - - -F -f0342reute -r f BC-AMERICAN-STORES-<ASC> 03-03 0061 - -AMERICAN STORES <ASC> SEES LOWER YEAR NET - SALT LAKE CITY, March 3 - American Stores Co said it -expects to report earnings per share of 3.70 to 3.85 dlrs per -share on sales of slightly over 14 billion dlrs for the year -ended January 31. - The supermarket chain earned 4.11 dlrs per share on sales -of 13.89 billion dlrs last year. - The company did not elaborate. - Reuter - - - - 3-MAR-1987 09:38:33.69 -earn -usa - - - - - -F -f0343reute -r f BC-KASLER-CORP-<KASL>-1S 03-03 0031 - -KASLER CORP <KASL> 1ST QTR JAN 31 NET - SAN BERNARDINO, Calif., March 3 - - Shr profit three cts vs loss seven cts - Net profit 161,000 vs loss 367,000 - Revs 24.3 mln vs 26.5 mln - Reuter - - - - 3-MAR-1987 09:41:45.44 - -usa - - - - - -F -f0346reute -r f BC-CARIBBEAN-SELECT-<CSE 03-03 0091 - -CARIBBEAN SELECT <CSEL> TO REDEEM WARRANTS - TAMPA, Fla., March 3 - Caribbean Select Inc said it has -elected to redeem on April 10 all its Class A warrants and all -Class B warrants at 0.01 ct each. - At the same time, it said its board has decided to reduce -the exercise price of the Class B warrants to 3.50 dlrs per -common share from four dlrs to encourage the exercise of the -warrants. Each Class B warrant allows the purchase of one -common share. - It said each Class A warrant is still exercisable into one -common share at two dlrs each. - Reuter - - - - 3-MAR-1987 09:45:18.22 -earn -uk - - - - - -F -f0356reute -d f BC-UNILEVER-HAS-IMPROVED 03-03 0099 - -UNILEVER HAS IMPROVED MARGINS, VOLUMES IN 1986 - LONDON, MARCH 3 - Unilever Plc <UN.A> and NV group reported -improvements in margins and underlying sales volume growth of -five pct in 1986 after stripping out the effects of falling -prices, disposals and currency movements, Unilever Plc chairman -Michael Angus said. - He told reporters that volumes in North America increased -some 10.5 pct while European consumer goods rose about 2.5 pct -after being flat for some years. - Much of the disposal strategy, aimed at concentrating -activities on core businesses, had now been completed, he -noted. - But the process of acquisitions would go on, with strategic -acquisitions taking place "from time to time," he said. - The company earlier reported a 20 pct rise in pre-tax -profits for 1986 to 1.14 billion stg from 953 mln previously. -In guilder terms, however, profits at the pre-tax level dropped -three pct to 3.69 billion from 3.81 billion. - Angus said the recent purchase of Chesebrough-Pond's Inc -<CBM.N> for 72.50 dlrs a share was unlikely to bring any -earnings dilution. - However, it would not add much to profits, with much of the -company's operating profits paying for the acquisition costs. - Finance director Niall Fitzgerald added that while gearing -- debt to equity plus debt - rose to about 60 pct at end 1986 -from 35 pct last year, this was expected to drop back to about -40 pct by end-1987. - The same divergence was made in full year dividend, with -Unilever NV's rising 3.4 pct to 15.33 guilders and Unilever -Plc's increasing 29.9 pct to 50.17p, approximately in line with -the change in attributable profit. - Angus said the prospectus for the sale of parts of -Chesebrough was due to be published shortly. However, he said -that there was no target date for completing the process. - He also declined to say what sort of sum Unilever hoped to -realise from the operation, beyond noting that Chesebrough had -paid around 1.25 billion dlrs for Stauffer Chemical Co, which -operates outside Unilever's core activities. - In the U.S., Organic growth from the Lipton Foods business, -considerable expansion in the household products business and -in margarine had been behind the overall sales increase. - However, he noted that the U.S. Household products business -had turned in a planned loss, with fourth quarter performance -better than expected despite the anticipated heavy launch costs -of its Surf detergents. - Reuter - - - - 3-MAR-1987 09:45:29.48 -acq -usa - - - - - -F -f0357reute -r f BC-SARA-LEE-<SLE>-TO-BUY 03-03 0096 - -SARA LEE <SLE> TO BUY 34 PCT OF DIM - CHICAGO, March 3 - Sara Lee Corp said it agreed to buy a 34 -pct interest in Paris-based DIM S.A., a subsidiary of BIC S.A., -at a cost of about 84 mln dlrs. - DIM S.A., a hosiery manufacturer, had 1985 sales of about -260 mln dlrs. - The investment includes the purchase of 360,537 newly -issued DIM shares valued at about 51 mln dlrs and a loan of -about 33 mln dlrs, it said. The loan is convertible into an -additional 229,463 DIM shares, it noted. - The proposed agreement is subject to approval by the French -government, it said. - Reuter - - - - 3-MAR-1987 09:45:54.32 - -usa - - - - - -F -f0358reute -r f BC-HOLIDAY-CORP-<HIA>-HO 03-03 0086 - -HOLIDAY CORP <HIA> HOTEL GROUP ADDS PROPERTIES - MEMPHIS, Tenn., March 3 - Holiday Corp's Holiday Inn Hotel -Group said it will add a record 17 hotels with 4,440 rooms to -its international division as part of its plan to double its -presence abroad by 1995. - The company said its international division will reach -50,000 rooms by this spring, classifying it as the eighth -largest hotel chain in the world. Holiday said by the end of -the year, there will be approximately 220 Holiday Inn hotels in -54 countries. - The company said it plans to expand from 28 to 55 hotels in -its Asia/Pacific region and to 192 in its Europe/Middle -East/Africa regionby 1995. - For 1987, the hotel group will focus on expansion on -Western Europe and Asia, citing China as an untapped source for -the international lodging industry. - Holiday also said it will concentrate on city center hotels -in key destination cities in Western Europe, catering primarily -to business travelers. - Some of those cities where Holiday said it will open new -properties this year include Amsterdam, Lyon/Atlas and Lisbon. - Reuter - - - - 3-MAR-1987 09:46:36.82 -trade -usachina - - - - - -G T M C -f0360reute -r f BC-CHINA-CALLS-FOR-BETTE 03-03 0140 - -CHINA CALLS FOR BETTER TRADE DEAL WITH U.S. - PEKING, March 3 - China called on the United States to -remove curbs on its exports, to give it favourable trading -status and ease restrictions on exports of high technology. - But the U.S. Embassy replied that Chinese figures showing -13 years of trade deficits with the U.S. Out of the last 15 are -inaccurate and said Peking itself would have to persuade -Congress to change laws which limit its exports. - The official International Business newspaper today -published China's demands in a editorial to coincide with the -visit of U.S. Secretary of State George Shultz. - "It is extremely important that the U.S. Market reduce its -restrictions on Chinese imports, provide the needed facilities -for them and businessmen from both sides help to expand Chinese -exports," the editorial said. - "The U.S. Should quickly discard its prejudice against -favourable tariff treatment for Chinese goods and admit China -into the Generalised System of Preference (GSP). - "Despite easing of curbs on U.S. Technology exports in -recent years, control of them is still extremely strict and -influences normal trade between the two countries," it added. - The paper also printed an article by China's commercial -counsellor in its Washington embassy, Chen Shibiao, who said -that "all kinds of difficulties and restrictions" were preventing -bilateral trade fulfilling its full potential. - He named them as U.S. Protectionist behaviour, curbs on -technology transfer and out-of-date trade legislation. - Reuter - - - - 3-MAR-1987 09:46:55.59 -lei -usa - - - - - -V RM -f0361reute -u f BC-/U.S.-COMMERCE-SECRET 03-03 0106 - -U.S. COMMERCE SECRETARY SAYS EXPORT RISE NEEDED - WASHINGTON, March 3 - Commerce Secretary Malcolm Baldrige -said after the release of a sharply lower January leading -indicator index that a pickup in exports is needed. - "The best tonic for the economy now would be a pickup in net -exports," he said in a statement after the department reported -the index fell 1.0 pct in January from December, the sharpest -drop since a 1.7 pct fall in July, 1984. - The main reasons for the January decline after a 2.3 pct -December rise were declines in building permits, new orders for -plant and equipment and for consumer and industrial goods. - Reuter - - - - 3-MAR-1987 09:47:47.16 -earn -canada - - - - - -E F -f0366reute -r f BC-precambrian-takes 03-03 0108 - -PRECAMBRIAN SHIELD TAKES 51 MLN DLR WRITEDOWN - CALGARY, Alberta, March 3 - <Precambrian Shield Resources -Ltd>, earlier reporting a large loss against year-ago profit, -said the 1986 loss was mainly due to a 51,187,000 dlr writedown -on its U.S. operations, uneconomic coal and other mineral -properties. - Precambrian, which is 89 pct owned by <Mark Resources Inc>, -said it took the writedown in accordance with new Canadian -Insititute of Chartered Accountants guidelines for full cost -method accounting by oil and gas companies. - Precambrian earlier reported a 1986 loss of 53.4 mln dlrs, -compared to profit of 4.5 mln dlrs in the prior year. - Reuter - - - - 3-MAR-1987 09:48:24.78 - -usa - - -nasdaq - - -F -f0367reute -r f BC-AERO-SERVICES-<AEROE> 03-03 0075 - -AERO SERVICES <AEROE> GETS NASDAQ EXCEPTION - TETERBORO, N.J., March 3 - Aero Services Inc said its -common stock will continue to be included for quotation in the -National Association of Securities Dealers' NASDAQ system due -to an exception from filing requiements, which it failed to -meet as of January 15. - The company said while it believes it can meet conditions -the NASD imposed for the exception, there can be no assurance -that it will do so. - Reuter - - - - 3-MAR-1987 09:49:23.53 -coffeecrude -kenya - - - - - -RM -f0373reute -r f BC-KENYAN-ECONOMY-FACES 03-03 0099 - -KENYAN ECONOMY FACES PROBLEMS, PRESIDENT SAYS - NAIROBI, March 3 - The Kenyan economy is heading for -difficult times after a boom last year, and the country must -tighten its belt to prevent the balance of payments swinging -too far into deficit, President Daniel Arap Moi said. - In a speech at the state opening of parliament, Moi said -high coffee prices and cheap oil in 1986 led to economic growth -of five pct, compared with 4.1 pct in 1985. - The same factors produced a two billion shilling balance of -payments surplus and inflation fell to 5.6 pct from 10.7 pct in -1985, he added. - "But both these factors are no longer in our favour ... As a -result, we cannot expect an increase in foreign exchange -reserves during the year," he said. - The price of coffee, Kenya's main source of foreign -exchange, fell in London today to about 94 cents a pound from a -peak of 2.14 dlrs in January 1986. - Crude oil, which early last year slipped below 10 dlrs a -barrel, has since crept back to over 18 dlrs. - Moi said the price changes, coupled with a general decline -in the flow of capital from the rest of the world, made it more -difficult to finance the government's budget deficit. - Kenya was already spending over 27 pct of its budget on -servicing its debts and last year it was a net exporter of -capital for the first time in its history, he added. - "This is a clear indication that we are entering a difficult -phase as regards our external debts, and it is imperative that -we raise the rate of domestic savings and rely less on foreign -sources to finance our development," he said. - "It will be necessary to maintain strict discipline on -expenditure ... And members of this house will have to take the -lead in encouraging wananchi (ordinary people) to be more -frugal in satisfying immediate needs," the president added. - REUTER - - - - 3-MAR-1987 09:49:45.02 - -usa - - - - - -F -f0375reute -r f BC-TRI-STAR-<TRSP>-CHANG 03-03 0079 - -TRI-STAR <TRSP> CHANGING FISCAL YEAR - NEW YORK, March 3 - Tri-Star Pictures Inc said it is -changing its fiscal year to year ending at the end of February -from a calendar year to reflect the traditional business cycles -of its two principal businesses, motion picture distribution -and motion picture exhibition. - It said it expects to file a report for the two-month -fiscal "year" ended February 28, 1987 by May 28 and to report -earnings for the new first quarter in June. - Reuter - - - - 3-MAR-1987 09:50:34.51 - -usa - - - - - -F -f0378reute -u f BC-LIFETIME-<LFT>-TO-MAK 03-03 0055 - -LIFETIME <LFT> TO MAKE ANNOUNCEMENT - NEW YORK, March 3 - Lifetime Corp said it will make an -announcement this morning between 1000 EST and 1030 EST. - A company spokesman said the company preferred not to -comment until that time. - The American Stock Exchange delayed trading in Lifetime -shares this morning for news pending. - Reuter - - - - 3-MAR-1987 09:53:44.44 -acq -usa - - - - - -E F -f0389reute -r f BC-scott's-hospitality 03-03 0071 - -SCOTT'S HOSPITALITY ACQUIRES CAPITAL FOOD - TORONTO, March 3 - <Scott's Hospitality Inc> said it -acquired all issued shares of Capital Food Services Ltd, of -Ottawa. Terms were not disclosed. - Scott's said Capital Food had 1986 sales of more than 20 -mln dlrs and will continue to operate under its present name -with existing management. - Capital Food provides food services to several Ottawa -institutions, the company said. - Reuter - - - - 3-MAR-1987 09:57:02.21 -coffee -zimbabwe - - - - - -C T -f0399reute -r f BC-ZIMBABWE-COFFEE-OUTPU 03-03 0099 - -ZIMBABWE COFFEE OUTPUT SET TO RISE - HARARE, March 3 - Zimbabwean coffee output will reach -13,000 tonnes this year, up on just over 11,000 tonnes produced -in 1986, the Commercial Coffee Growers Association said. - Administrative Executive Robin Taylor told the domestic -news agency ZIANA that Zimbabwe earned the equivalent of 33 mln -U.S. Dlrs from coffee exports last year. He would not say how -much the country would earn in 1987. - Taylor said the 173 commercial coffee growers under his -association had increased production from 5,632 tonnes in 1980 -to more than 11,000 tonnes in l986. - Reuter - - - - 3-MAR-1987 09:58:00.11 - -usa - - - - - -F -f0401reute -r f BC-YANKEE-<YNK>-SWAPS-ST 03-03 0048 - -YANKEE <YNK> SWAPS STOCK FOR DEBENTURES - COHASSET, Mass., March 3 - Yankee Cos Inc said it has -acquired 3,916,000 dlrs of 7-1/2 pct convertible subordinated -debentures due May 15, 1998 of its YFC International Finance NV -affiliate for 501,807 common shares from an institutional -investor. - Reuter - - - - 3-MAR-1987 10:00:52.96 -acq -usa - - - - - -F -f0408reute -d f BC-VIDEO-DISPLAY-<VIDE> 03-03 0082 - -VIDEO DISPLAY <VIDE> TO SELL CABLE TV UNIT - ATLANTA, March 3 - Video Display Corfp said it has reached -a tentiative agreement to sell its existing cable television -business for undisclosed terms and expects to report a gain on -the transaction. The buyer was not named. - The company said it will redeploy its service assets into -manufacturing and distribution. - It said the operations being sold accounted for about five -pct of revenues for the year ended February 28 and lost money. - Reuter - - - - 3-MAR-1987 10:00:57.16 -earn -usa - - - - - -F -f0409reute -d f BC-INTEK-DIVERSIFIED-COR 03-03 0041 - -INTEK DIVERSIFIED CORP <IDCC> 4TH QTR NET - LOS ANGELES, March 3 - - Shr three cts vs three cts - Net 98,20000 vs 91,898 - Revs 2,843,520 vs 2,372,457 - Year - Shr 13 cts vs 21 cts - Net 401,179 vs 681,374 - Revs 10.5 mln vs 9,699,535 - Reuter - - - - 3-MAR-1987 10:01:14.42 - -usa - - - - - -F -f0410reute -d f BC-BERYLLIUM-INT'L-SIGNS 03-03 0122 - -BERYLLIUM INT'L SIGNS JOINT VENTURE PACT - SALT LAKE CITY, Utah, March 3 - <Beryllium International -Corp> said it has signed a joint venture agreement with Cominco -American Inc, a unit of Cominco Ltd <CLT>, to develop a -beryllium mine and processing plant on Beryllium -International's property in the Topaz Mountains southwest of -Salt Lake City. - Beryllium said as a 49 pct owner of the venture iot would -be contributing the mine while Cominco, as operator and 51 pct -owner, would conduct drilling, metallurgical studies, process -testing and other preliminary work for a feasibility study. - Beryllium said the cost of the preliminary work in 1987, -which will start immediately, should be about 250,000 dlrs to -300,000 dlrs. - Reuter - - - - 3-MAR-1987 10:01:28.07 -housing -usa - - - - - -V RM -f0411reute -f f BC-******U.S.-SINGLE-FAM 03-03 0014 - -******U.S. SINGLE-FAMILY HOME SALES FELL 6.8 PCT IN JAN AFTER REVISED 12.1 PCT DEC GAIN -Blah blah blah. - - - - - - 3-MAR-1987 10:02:11.63 -housing -usa - - - - - -V RM -f0415reute -b f BC-/U.S.-HOME-SALES-FELL 03-03 0079 - -U.S. HOME SALES FELL 6.8 PCT IN JANUARY - WASHINGTON, March 3 - Sales of new single-family homes in -the United States fell 6.8 pct in January from December to a -seasonally adjusted annual rate of 716,000 units, the Commerce -Department said. - The department revised downward December's sales to a 12.1 -pct rise to 768,000 units from the previously reported 12.7 pct -increase. - The January decline in sales was the largest since last -October when sales fell 9.3 pct. - Before seasonal adjustment, the number of homes actually -sold in January was 53,000, up from 49,000 in December but down -from 59,000 in January, 1986. - The January fall brought home sales to a level 1.6 pct -below January, 1986, when they were a seasonally adjusted -728,000 units. - The average price was a record 127,100 dlrs, surpassing the -previous record 119,100 price set in December. - The median price of a home in January reached 100,700 dlrs --- the first time the price has exceeded 100,000 dlrs. That -compared with a median price of 94,600 dlrs in December and -94,000 dlrs in January a year ago. - New homes available on the market in January totaled a -seasonally adjusted 362,000 units, unchanged from December and -equal to a 6.3 months' supply. - The supply in December was 5.9 months. - Reuter - - - - 3-MAR-1987 10:02:22.46 - -usa - - - - - -F -f0416reute -r f BC-DIMIS-<DMS>-EXTENDS-L 03-03 0070 - -DIMIS <DMS> EXTENDS LIFE OF WARRANTS BRIEFLY - EATONTOWN, N.J., March 3 - Dimis Inc said it has extended -by five business days the expiration of its common stock -purchase warrants until March Nine. - It said over one mln have already been exercised. The -warrants became effective February 17. - Holders exercising will receive a new warrant expiring -March 31 allowing the purchase of half a common share at one -dlr. - Reuter - - - - 3-MAR-1987 10:05:32.60 - -canadausa - - - - - -E F -f0441reute -r f BC-american-barrick 03-03 0046 - -AMERICAN BARRICK <ABX> UNIT COMPLETES ISSUE - TORONTO, March 3 - <American Barrick Resources Corp> said -wholly owned Barrick Resources (USA) Inc completed the -previously announced 50 mln U.S. dlr issue of two pct gold -indexed notes, which are guaranteed by American Barrick. - Reuter - - - - 3-MAR-1987 10:07:42.19 -acq -usa - - - - - -F -f0445reute -d f BC-COMMUNITY-BANK-<CBSI> 03-03 0060 - -COMMUNITY BANK <CBSI> TO MAKE ACQUISITION - SYRACUSE, N.Y., March 3 - Community Bank System Inc said it -has entered into a definitive agreement to acquire Nichols -Community Bank for 2,800,000 dlrs in common stock. - It said subject to approval by Nichols shareholders and -regulatory authorities, the transaction is expected to be -completed later this year. - Reuter - - - - 3-MAR-1987 10:08:28.26 -jobs -belgium - - - - - -RM -f0447reute -r f BC-BELGIAN-UNEMPLOYMENT 03-03 0086 - -BELGIAN UNEMPLOYMENT FALLS IN FEBRUARY - BRUSSELS, March 3 - Belgian unemployment, based on the -number of jobless drawing unemployment benefit, fell to 12.1 -pct of the working population at the end of February from 12.6 -pct at the end of January, the National Statistics Office said. - The rate compares with 12.4 pct at the end of February -1986. - The total number of jobless stood at 508,392, compared with -530,587 at the end of January and 521,219 at the end of -February 1986, the Statistics Office said. - REUTER - - - - 3-MAR-1987 10:12:44.89 - -usa - - - - - -F -f0456reute -r f BC-KODAK-<EK>-HAS-NEW-DA 03-03 0068 - -KODAK <EK> HAS NEW DATA STORAGE, USAGE SYSTEMS - NEW YORK, March 3 - Eastman Kodak Co said it is introducing -four information technology systems that will be led by today's -highest-capacity system for data storage and retrieval. - The company said information management products will be -the focus of a multi-mln dlr business-to-business -communications campaign under the threme "The New Vision of -Kodak." - Noting that it is well-known as a photographic company, -Kodak said its information technology sales exceeded four -billion dlrs in 1986. "If the Kodak divisions generating those -sales were independent, that company would rank among the top -100 of the Fortune 500," it pointed out. - The objective of Kodak's "new vision" communications -campaign, it added, is to inform others of the company's -commitment to the business and industrial sector. - Kodak said the campaign will focus in part on the -information management systems unveilded today -- - -- The Kodak optical disk system 6800 which can store more -than a terabyte of information (a tillion bytes). - - The Kodak KIMS system 5000, a networked information -management system using optical disks or microfilm or both. - -- The Kodak KIMS system 3000, an optical-disk-based system -that allows users to integrate optical disks into their current -information management systems. - -- The Kodak KIMS system 4500, a microfilm-based, -computer-assisted system which can be a starter system. - Kodak said the optical disy system 6800 is a -write-once/ready-many-times type its Mass Memory Division will -market on a limited basis later this year and in quantity in -1988. - Each system 6800 automated disk library can accommodate up -to 150, 14-inch optical disks. Each disk provides 6.8 gigabytes -of randomly accessible on-line storage. Thus, Kodak pointed -out, 150 disks render the more-than-a-terabyte capacity. - Kodak said it will begin deliveries of the KIMS system 5000 -in mid-1987. The open-ended and media-independent system -allows users to incorporate existing and emerging technologies, -including erasable optical disks, high-density magnetic media, -fiber optics and even artificial intelligence, is expected to -sell in the 700,000 dlr range. - Initially this system will come in a 12-inch optical disk -version which provides data storage and retrieval through a -disk library with a capacity of up to 121 disks, each storing -2.6 gigabytes. - Kodak said the KIMS system 3000 is the baseline member of -the family of KIMS systems. Using one or two 12-inch manually -loaded optical disk drives, it will sell for about 150,000 dlrs -with deliveries beginning in mid-year. - The company said the system 3000 is fulling compatibal with -the more powerful KIMS system 5000. - It said the KIMS system 4500 uses the same hardware and -software as the system 5000. It will be available in mid-1987 -and sell in the 150,000 dlr range. - Reuter - - - - 3-MAR-1987 10:14:49.98 - -usa - - - - - -F -f0467reute -r f BC-BANGOR-HYDRO-<BANG>-S 03-03 0081 - -BANGOR HYDRO <BANG> SEEKS RATE CUT - BANGOR, Maine, March 3 - Bangor Hydro-Electric Cor said it -has filed with the Maine Public Utilities Commission (MPUC) for -a two-stage base rate reduction. - Bangor Hydro said the first stage, which could take effect -on April 1 and would stay effective until the MPUC makes a -final decision on the filing, could cut revenues by 6.149 mln -dlrs, or 9.7 pct. - The company said lower federal income taxes and lower -capital costs prompted the filing. - The second stage, Bangor Hydro said, effective when the -MPUC makes a final decision, calls for an additional revenue -reduction of 712,000 dlrs, or 1.1 pct. - Bangor Hydro said, if approved, the cuts would reduce -residential base rates by 8.5 pct, with 7.5 pct cut by April 1. - The utility company also said it is seeking to increase its -fuel cost adjustment rate by April 1. - Bangor said if the increase is approved it could offset -much of the base rate cut and may cause a net increase in some -customers' rates. - Reuter - - - - 3-MAR-1987 10:15:06.95 - -usa - - - - - -F -f0469reute -d f BC-BROWNING-FERRIS-<BFI> 03-03 0105 - -BROWNING-FERRIS <BFI>WASTE DISPOSAL SITE CLEARED - HOUSTON, March 3 - Browning-Ferris Industries Inc said the -Colorado Department of Health and the U.S. Environmental -Protection Agency have awarded the company permits to build and -operate a hazardous waste disposal site near Last Chance, Colo. - The company said construction will start this year and take -about 12 months, costing about 14 to 16 mln dlrs. It said it -has already spent 10 mln dlrs on development costs. - The site will not accept materials that react rapidly with -air or water, explosives, shock sensitive materials or -radioactive wastes, the company said. - Reuter - - - - 3-MAR-1987 10:16:12.11 -earn -sweden - - - - - -F -f0472reute -d f BC-PHARMACIA-AB-<PHAB-ST 03-03 0028 - -PHARMACIA AB <PHAB ST> 1986 YEAR - STOCKHOLM, March 3 - Sales 3.65 billion crowns vs 3.40 -billion. - Profit after financial items 821.2 mln crowns vs 740.2 -mln. - The 1986 results include a once-off writedown of 520 mln -crowns for intangible assets, mainly the know-how paid for in -the takeover of a number of high-tech companies by the group, -Pharmacia said. - Earnings per share after real tax including the writedown: -1.94 crowns vs 12.05 crowns. - Earnings per share after real tax (not including the -writedown): 12.38 crowns vs 12.05 - Earnings per American Depository Receipt (ADR) according to -U.S. Accounting principles after real tax including the -writedown): 1.96 crowns vs 9.49 crowns. - Earnings per ADR according to U.S. Accounting principles -after real tax (without the writedown): 9.8 crowns vs 9.49. - One ADR represents 0.75 pct of one B Free share in -Pharmacia. - The board proposed a dividend of 1.55 crowns vs 1.25. - REUTER - - - -3-MAR-1987 10:16:24.19 - -usa - - - - - -F -f0473reute -d f BC-VWR-CORP-<VWRX>-FORMS 03-03 0069 - -VWR CORP <VWRX> FORMS NEW UNIT - SEATTLE, March 3 - VWR Corp said it has formed a new -subsidiary, Momentun Textiles, to handle the distribution of -upholstery fabrics, leathers and naugahyde to contract and -consumer furniture manufacturers. - It said its VWR Textiles and Supplies unit, which had -handled that business, will continue to distribute non-woven -textiles, construction fabrics and manufacturing supplies. - Reuter - - - - 3-MAR-1987 10:17:43.59 - -usa - - - - - -F -f0484reute -r f BC-HALLWOOD-GROUP-<HWG> 03-03 0091 - -HALLWOOD GROUP <HWG> OFFICIAL GET SAXON POST - DALLAS, March 3 - Saxon Oil Development Partners' Saxon Oil -Co said its chairman Bill Saxon and chief executive officer -Steven Saxon have resigned effective immediately. - Saxon said Anthony Gumbiner, chairman and chief executive -officer of The Hallwood Group Inc, succeeds Bill Saxon as -chairman. - Hallwood owns a substantial number of shares of preferred -stock in Saxon which, if converted into common stock, would -constitute approximately 37 pct of the company, according to a -source. - Hallwood specializes in bailing out financially troubled -companies and restructuring their debt, according to the -source. In exchange sometimes, the group receives a small -portion of the company's common stock. - At times, the group also receives a position in the -company, as was the case at Saxon, the source explained. - Reuter - - - - 3-MAR-1987 10:20:45.46 -earn -usa - - - - - -F -f0494reute -d f BC-PHARMACIA-FORECASTS-H 03-03 0101 - -PHARMACIA FORECASTS HIGHER 1987 EARNINGS - STOCKHOLM, March 3 - Pharmacia AB <PHAB ST> forecast -earnings after financial items of one billion crowns in 1987 vs -821.2 mln last year on condition that exchange rates remained -at their present parities. - Sales would in such circumstances go up to six billion -crowns from 3.65 billion in 1986, it said. - A weakening Dollar was mainly responsible for a five pct -negative impact on sales during 1986 which the company blamed -on currency movements. - Last year's results were also badly hit by a once-off -writedown of 520 mln crowns for intangible assets. - The company said mainly this represented the premium the -group had paid for the know-how of various high-tech firms it -had taken over. - The accounts also showed a financial deficit of 1.87 -billion crowns vs a deficit of 133 mln which was covered partly -by drawing down company liquidity to 738 mln vs one billion and -partly by increasing borrowing to 2.23 billion vs 621 mln. - Pharmacia said the financial deficit was caused by it -having used more funds than generated by group operations, -mainly because of the 1.36 billion it paid in cash for shares -in LKB-Produkter AB and the assets of Intermedics-Intraocular -Inc. - REUTER - - - - 3-MAR-1987 10:23:39.80 - -usa - - - - - -M -f0504reute -d f BC-BERYLLIUM-INT'L-SETS 03-03 0121 - -BERYLLIUM INT'L SETS JOINT VENTURE WITH COMINCO - SALT LAKE CITY, Utah, March 3 - Beryllium International -Corp said it has signed a joint venture agreement with Cominco -American Inc, a unit of Cominco Ltd, to develop a beryllium -mine and processing plant on Beryllium International's property -in the Topaz Mountains southwest of Salt Lake City. - Beryllium said as a 49 pct owner of the venture it would be -contributing the mine while Cominco, as operator and 51 pct -owner, would conduct drilling, metallurgical studies, process -testing, and other preliminary work for a feasibility study. - Beryllium said the cost of the preliminary work in 1987, -which will start immediately, should be about 250,000 dlrs to -300,000 dlrs. - Reuter - - - - 3-MAR-1987 10:26:35.62 -gnp -canada - - - - - -E V RM -f0508reute -f f BC-CANADA-REAL-4TH-QTR-G 03-03 0013 - -******CANADA REAL 4TH QTR GDP ROSE 1.1 PCT, AFTER 3RD QTR 1.1 PCT RISE - OFFICIAL -Blah blah blah. - - - - - - 3-MAR-1987 10:29:04.26 -bop -canada - - - - - -E V RM -f0518reute -f f BC-CANADA-4TH-QTR-CURREN 03-03 0017 - -******CANADA 4TH QTR CURRENT ACCOUNT DEFICIT 2.3 BILLION DLRS VS 3RD QTR 1.9 BILLION DEFICIT - OFFICIAL -Blah blah blah. - - - - - - 3-MAR-1987 10:29:32.44 - -usa - - - - - -F -f0519reute -h f BC-UNITED-GUARDIAN-<UNIR 03-03 0075 - -UNITED-GUARDIAN <UNIR>, <FEDERAL> SIGN CONTRACT - SMITHTOWN, N.Y., March 3 - United-Guardian Inc said it -signed a contract with <Federal Health Corp> covering the -exclusive marketing of Warexin, a disinfectant for kidney -dialysis machines, hospital equipment and instruments. - Under the contract, United-Guardian said Federal will -continue to supply Hospal, a subsidiary of <Sandoz Ltd> and -<Rhone Poulenc S.A.> with all its Warexin requirements. - Reuter - - - - 3-MAR-1987 10:31:10.05 -ship -usa - - - - - -F -f0524reute -r f BC-MCLEAN-INDUSTRIES-<MI 03-03 0082 - -MCLEAN INDUSTRIES <MII> UNIT TRANSERS SERVICE - CRANFORD, N.J., March 3 - McLean Industries Inc said its -shipping subsidiary, United States Lines Inc, reached an -agreement in principle to transfer its South American service -to American Transport Lines Inc, a subsidiary of <Crowley -Maritime Corp>. - Under the terms of the agreement, United States Lines will -lease five vessels to American Transport for 15 months with an -option to extend the period up to 10 years, the company said. - In return, U.S. Lines will receive a fixed payment and a -percentage of revenues for at least three years and possibly as -long as American Transport utilizes its vessels and conducts -trade in South America, the company said. - The companies will consummate the transactions as soon as -the required approvals are obtained, McLean said. - Reuter - - - - 3-MAR-1987 10:32:15.36 - -usa - - - - - -RM F A -f0528reute -u f BC-PROXMIRE-VOWS-QUICK-A 03-03 0108 - -PROXMIRE VOWS QUICK ACTION ON U.S. BANKING BILL - WASHINGTON, March 3 - Senate Banking Committee Chairman -William Proxmire said modified legislation to help a federal -deposit insurance fund and prohibit new limited-service banks -and thrifts could be ready for a Senate vote in two to three -weeks. - Proxmire said he agreed to demands from committee members -for a one-year moratorium on granting new business powers -sought by commercial banks to increase the bill's chances. - In its new form, the bill would proscribe regulators from -granting new powers to banks, Proxmire told reporters after a -speech to the U.S. League of Savings Institutions. - A vote on the bill by the committee is scheduled for -Thursday. If approved it will go to the full Senate. - "I have spoken to the majority leader and he has agreed to -bring it up promptly on the Senate floor in two or three weeks," -Proxmire told the thrift executives. - The bill would recapitalize the Federal Savings and Loan -Insurance Corp fund with 7.5 billion dlrs. - It also would prohibit establishment of new nonbank banks -and nonthrift thrifts, so-called because they provide financial -services but do not meet the regulatory definition of both -making loans and receiving deposits. - Reuter - - - - 3-MAR-1987 10:33:48.56 - -usa - - - - - -C G L -f0540reute -u f BC-lard-consumption 03-03 0107 - -U.S. LARD CONSUMPTION IN JANUARY - WASHINGTON, March 3 - U.S. factory usage of lard in the -production of both edible and inedible products during January -totaled 21.3 mln lbs, vs a revised 25.6 mln lbs in December, -according to Census Bureau figures. - In the year-earlier period, usage, which includes -hydrogenated vegetable and animal fats and other oils in -process, amounted to 33.3 mln lbs. - Usage in January comprised 15.7 mln lbs of edible products -and 5.6 mln lbs of inedible products. - Total lard usage in the 1986/87 marketing season, which -began October 1, amounted to 104.3 mln lbs, vs 154.2 mln lbs in -the year-ago period. - Reuter - - - - 3-MAR-1987 10:34:47.47 - -netherlands - - - - - -RM -f0546reute -u f BC-SOCIETE-GENERALE-DUTC 03-03 0097 - -SOCIETE GENERALE DUTCH UNIT LAUNCHES CD PROGRAMME - AMSTERDAM, March 3 - The Amsterdam unit of French bank -Societe Generale said it is launching a 50-mln guilder, five -month certificate of deposit programme starting March 6 and -ending September 7. - Denominations will be in one mln guilders. The price is to -be set on March 4, issue date is March 6 and redemption at par -is on September 7. - Subscriptions are to be placed with Societe Generale, -Oolders en de Jong C.V or Haighton en Ruth B.V. A global note -for the issue will be deposited with the Dutch central bank. - REUTER - - - - 3-MAR-1987 10:35:22.38 - -uk - - - - - -RM -f0548reute -b f BC-MONY-FUNDING-ISSUES-1 03-03 0087 - -MONY FUNDING ISSUES 125 MLN DLR EUROBOND - LONDON, March 3 - Mony Funding Inc is issuing a 125 mln dlr -eurobond due April 7, 1997 paying 8-1/8 pct and priced at -101-1/2 pct, sole lead manager Citicorp Investment Bank Ltd -said. - The non-callable bond is guaranteed by Mutual Life -Insurance Co of the U.S. And is available in denominations of -5,000 dlrs and will be listed in Luxembourg. The selling -concession is 1-3/8 pct while management and underwriting -combined pays 5/8 pct. - The payment date is April 7. - REUTER - - - - 3-MAR-1987 10:37:40.72 -grainwheat -uk - - - - - -G -f0559reute -u f BC-SMALL-QUANTITY-OF-U.K 03-03 0057 - -SMALL QUANTITY OF UK WHEAT SOLD TO HOME MARKET - LONDON, March 3 - A total of 2,435 tonnes of British -intervention feed wheat were sold at today's tender for the -home market out of requests for 3,435 tonnes, the Home Grown -Cereals Authority, HGCA, said. - Price details were not reported. - No bids were submitted for intervention barley. - Reuter - - - - 3-MAR-1987 10:38:18.98 -gnp -canada - - - - - -E V RM -f0564reute -f f BC-CANADA-DECEMBER-GDP-U 03-03 0013 - -******CANADA DECEMBER GDP UP 1.2 PCT AFTER NOVEMBER'S 0.2 PCT FALL - OFFICIAL -Blah blah blah. - - - - - - 3-MAR-1987 10:38:44.01 -earn -usa - - - - - -F -f0568reute -d f BC-FIRST-FEDERAL-SAVINGS 03-03 0052 - -FIRST FEDERAL SAVINGS <FFKZ> YEAR NET - KALAMAZOO, MICH., March 3 - - Shr 78 cts vs one dlr - Net 1,413,000 vs 1,776,000 - Assets 705.3 mln vs 597.3 mln - Deposits 495.6 mln vs 493.9 mln - Loans 260.0 mln vs 379.7 mln - Qtly div six cts vs six cts prior qtr - Pay April 1 - Record March 6 - NOTE: 1986 net includes charges from accounting changes, -from one-time expenses associated with a proxy contest and an -increase in loan reserves. - First Federal Savings and Loan Association of Kalamazoo is -full name of company. - Reuter - - - - 3-MAR-1987 10:39:00.13 - -usa - - - - - -F -f0569reute -u f BC-BOEING-<BA>-SAYS-ORDE 03-03 0088 - -BOEING <BA> SAYS ORDER WORTH ONE BILLION DLRS - SEATTLE, March 3 - Boeing Co said its order for 15 -extended-range 767-300's from AMR Corp <AMR> is worth over one -billion dlrs. - The company said AMR is its first customer for the -767-300ER twinjet, a derivative of its 767-200 designed for -increased passenger and cargo capability on flights of up to -6,600 miles. It said the first delivery is scheduled for -February 1988 and the jet will seat 215 in tri-class -configuration. - Boeing said it now has orders for 47 767-300's. - In New York, <Airbus Industrie> said AMR is also the launch -customer for its A300-600R widebody. - AMR today announced the order of 15 of the Boeing and 25 of -the Airbus twinjets. - Airbus said in AMR's configuration, the A300-600R will seat -16 in first class and 251 in economy. Deliveries will be made -bewtween April 1988 and June 1989. - Airbus did not disclose the value of the order. - Boeing said AMR will operate the 767's on North Atlantic -routes, while Airbus said AMR will operate the A300's on -Caribbean routes. - Reuter - - - - 3-MAR-1987 10:40:22.86 - -usa - - - - - -F -f0577reute -u f BC-INLAND-<IAD>-FILES-FO 03-03 0105 - -INLAND <IAD> FILES FOR 1.5 MLN SHARES OFF - CHICAGO, March 3 - Inland Steel Industries Inc said it -registered with the Securities and Exchange Commission for a -proposed public offering of 1.5 mln shares of Series C -cumulative convertible exchangeable preferred shares, 50 dlrs a -share liquidation value. - Goldman Sachs and Co and First Boston Corp are -underwriters. They have an option to buy 225,000 additional -shares to cover overallotments. - Proceeds are for general corporate purposes, including to -fund a portion of the investment needed for a continuous cold -mill joint venture under discussion with Nippon Steel Corp. - Reuter - - - - 3-MAR-1987 10:40:34.06 - -usa - - - - - -F -f0579reute -r f BC-<ACUSTAR-CORP>-HAS-UN 03-03 0067 - -<ACUSTAR CORP> HAS UNAUTHORIZED ACCOUNT ACTION - BLOOMINGTON, Minn., March 3 - Acustar Corp said it has -discovered significant unauthorized activity in its corporate -accounts but has not yet determined the full extent of the -problem. - It said it has requested that all over-the-counter trading -in its stock be halted until it can make a further -announcement. An investigation is underway, it said. - Reuter - - - - 3-MAR-1987 10:41:05.96 -earn -usa - - - - - -F -f0584reute -r f BC-TOLL-BROTHERS-INC-<TO 03-03 0046 - -TOLL BROTHERS INC <TOL> 1ST QTR JAN 31 NET - HORSHAM, Penn., March 3 - - Shr 22 cts vs 12 cts - Net 3,243,000 vs 1,656,000 - Revs 28.4 mln vs 21.5 mln - NOTE: All amts reflect 3-for-2 stock split of company's -common in form of 50 pct stock dividend paid Feb 26, 1987. - Reuter - - - - 3-MAR-1987 10:41:11.13 - -usa - - - - - -F -f0585reute -d f BC-UNICORP-AMERICAN-<UAC 03-03 0049 - -UNICORP AMERICAN <UAC> IN JOINT VENTURE - NEW YORK, March 3 - Unicorp American Corp said it has -formed a joint venture with Sybedon Corp, a New York real -estate investment banking firm, to pursue real estate projects. - It said a total of 20 mln dlrs is being committed to the -joint venture. - Reuter - - - - 3-MAR-1987 10:41:36.86 -earn -usa - - - - - -F -f0589reute -s f BC-PILLSBURY-CO-<PSY>-VO 03-03 0025 - -PILLSBURY CO <PSY> VOTES QUARTERLY DIVIDEND - MINNEAPOLIS, MINN., March 3 - - Qtly div 25 cts vs 25 cts prior qtr - Pay 31 May - Record 1 May - Reuter - - - - 3-MAR-1987 10:41:41.92 -earn -usa - - - - - -F -f0590reute -s f BC-BERKSHIRE-GAS-CO-<BGA 03-03 0025 - -BERKSHIRE GAS CO <BGAS> PAYS REGULAR QTLRY DIV - PITTSFIELD, Mass., March 3 - - Qtrly div 28.5 cts vs 28.5 cts - Pay April 15 - Record March 31 - Reuter - - - - 3-MAR-1987 10:44:50.56 -grainwheatbarley -ukussr - - - - - -G -f0601reute -d f BC-U.K.-WHEAT-AND-BARLEY 03-03 0096 - -U.K. WHEAT AND BARLEY EXPORTS ADJUSTED UPWARDS - LONDON, March 3 - The U.K. Exported 535,460 tonnes of wheat -and 336,750 tonnes of barley in January, the Home Grown Cereals -Authority (HGCA) said, quoting adjusted Customs and Excise -figures. - Based on the previous January figures issued on February 9, -wheat exports increased by nearly 64,000 tonnes and barley by -about 7,000 tonnes. - The new figures bring cumulative wheat exports for the -period July 1/February 13 to 2.99 mln tonnes, and barley to -2.96 mln compared with 1.25 and 1.89 mln tonnes respectively a -year ago. - January wheat exports comprised 251,000 tonnes to European -Community destinations and 284,000 tonnes to third countries. - The Soviet Union was prominent in third country -destinations, taking 167,700 tonnes while Poland was credited -with 54,500 and South Korea 50,000 tonnes. Italy was the -largest EC recipient with 75,000 tonnes followed by West -Germany with 55,200 and France 52,000 tonnes. - Barley exports for January comprised 103,700 tonnes to the -EC and 233,000 to third countries. The Soviet Union was the -largest single importer with 133,265 tonnes followed by Saudi -Arabia with 53,800 tonnes. - Reuter - - - - 3-MAR-1987 10:46:56.99 -gnp -canada - - - - - -E V RM -f0609reute -b f BC-CANADA-GDP-RISES-3.1 03-03 0085 - -CANADA GDP RISES 3.1 PCT IN 1986 - OTTAWA, March 3 - Canada's real gross domestic product, -seasonally adjusted, rose 1.1 pct in the fourth quarter of -1986, the same as the growth as in the previous quarter, -Statistics Canada said. - That left growth for the full year at 3.1 pct, which is -down from 1985's four pct increase. - The rise was also slightly below the 3.3 pct growth rate -Finance Minister Michael Wilson predicted for 1986 in -February's budget. He also forecast GDP would rise 2.8 pct in -1987. - Statistics Canada said final domestic demand rose 0.6 pct -in the final three months of the year after a 1.0 pct gain in -the third quarter. - Business investment in plant and equipment rose 0.8 pct in -the fourth quarter, partly reversing the cumulative drop of 5.8 -pct in the two previous quarters. - Reuter - - - - 3-MAR-1987 10:47:04.45 -grainwheat -ussrpolandczechoslovakiaromania - - - - - -C G T -f0610reute -u f BC-EAST-EUROPE-WHEAT-WIN 03-03 0099 - -EAST EUROPE WHEAT WINTERKILL POSSIBLE, ACCU SAYS - STATE COLLEGE, Pa., March 3 - Winter wheat crops in the -western Soviet Union, Poland and eastern Czechoslovakia through -northern Romania may suffer some winterkill over the next two -nights, private forecaster Accu-Weather Inc said. - Western USSR winter wheat areas have had only light and -spotty snow and winterkill is possible tonight and tomorrow -night as temperatures drop to minus 10 to 0 degrees F. - Snow cover is scant in Poland, with only about 50 pct of -the winter wheat areas reporting one to two inches of snow as -of this morning. - The remaining 50 pct of winter wheat crops do not have snow -cover, making winterkill possible on each of the next two -nights. Lowest temperatures will be minus 10 to 0 degrees F. - Winter wheat areas from eastern Czechoslovakia through -northern Romania had light snow flurries yesterday and last -night, but amounts were an inch or less. With temperatures -expected to fall to near 0 degrees F over the next two nights, -some light winterkill is possible, Accu-Weather added. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-002.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-002.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-002.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-002.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2013 +0,0 @@ - - - 5-MAR-1987 09:07:54.17 -earn -uk - - - - - -F -f0986reute -d f BC-JAGUAR-SEES-STRONG-GR 03-05 0115 - -JAGUAR SEES STRONG GROWTH IN NEW MODEL SALES - LONDON, March 5 - Jaguar Plc <JAGR.L> is about to sell its -new XJ-6 model on the U.S. And Japanese markets and expects a -strong reception based on its success in the U.K., Chairman Sir -John Egan told a news conference. - Commenting on an 11 pct growth in 1986 group turnover to -830.4 mln stg and pre-tax profits at 120.8 mln stg, slightly -below 1985's 121.3 mln, Egan said Jaguar aimed at an average -profit growth of 15 pct per year. However, the introduction of -the new model had kept this year's pre-tax profit down. - Jaguar starts selling XJ-6 in the U.S. In May and plans to -sell 25,000 of its total 47,000 production there in 1987. - U.S. Sales now account for 65 pct of total turnover, -finance director John Edwards said. - A U.S. Price for the car has not been set yet, but Edwards -said the relatively high car prices in dollars of West German -competitors offered an "umbrella" for Jaguar. He added the XJ-6 -had also to compete with U.S. Luxury car producers which would -restrict the car's price. - Jaguar hedges a majority of its dollar receipts on a -12-month rolling basis and plans to do so for a larger part of -its receipts for longer periods, John Egan said. - In the longer term, capital expenditure will amount to 10 -pct of net sales. Research and development will cost four pct -of net sales and training two pct. - Jaguar builds half of its cars and buys components for the -other half. The firm is in early stages of considering the -building of an own press shop in Britain for about 80 mln stg, -but Egan said this would take at least another three years - On the London Stock Exchange, Jaguar's shares were last -quoted at 591p, down from 611p at yesterday's close, after -reporting 1986 results which were in line with market -expectations, dealers said. - REUTER... - - - - 5-MAR-1987 09:18:26.80 - - - - - - - -F -f0011reute -f f BC-******occidental-petr 03-05 0012 - -******OCCIDENTAL PETROLEUM COMMON STOCK OFFERING RAISED TO 36 MLN SHARES -Blah blah blah. - - - - - - 5-MAR-1987 09:19:43.22 -grainwheat -usairaq - - - - - -C G -f0012reute -u f BC-/CCC-ACCEPTS-BONUS-BI 03-05 0117 - -CCC ACCEPTS BONUS BID ON WHEAT FLOUR TO IRAQ - WASHINGTON, March 5 - The Commodity Credit Corporation, -CCC, has accepted bids for export bonuses to cover sales of -25,000 tonnes of wheat flour to Iraq, the U.S. Agriculture -Department said. - The department said the bonuses awarded averaged 116.84 -dlrs per tonne. - The shipment periods are March 15-April 20 (12,500 tonnes) -and April 1-May 5 (12,500 tonnes). - The bonus awards were made to Peavey Company and will be -paid in the form of commodities from CCC stocks, it said. - An additional 175,000 tonnes of wheat flour are still -available to Iraq under the Export Enhancement Program -initative announced January 7, 1987, the department said. - Reuter - - - - 5-MAR-1987 09:21:58.67 -crude - - - - - - -Y -f0017reute -f f BC-******DIAMOND-SHAMROC 03-05 0016 - -******DIAMOND SHAMROCK RAISES CRUDE POSTED PRICES ONE DLR, EFFECTIVE MARCH 4, WTI NOW 17.00 DLRS/BBL -Blah blah blah. - - - - - - 5-MAR-1987 09:22:57.75 -earn -usa - - - - - -F -f0019reute -r f BC-NORD-RESOURCES-CORP-< 03-05 0063 - -NORD RESOURCES CORP <NRD> 4TH QTR NET - DAYTON, Ohio, March 5 - - Shr 19 cts vs 13 cts - Net 2,656,000 vs 1,712,000 - Revs 15.4 mln vs 9,443,000 - Avg shrs 14.1 mln vs 12.6 mln - Year - Shr 98 cts vs 77 cts - Net 13.8 mln vs 8,928,000 - Revs 58.8 mln vs 48.5 mln - Avg shrs 14.0 mln vs 11.6 mln - NOTE: Shr figures adjusted for 3-for-2 split paid Feb 6, -1987. - Reuter - - - - 5-MAR-1987 09:23:44.74 -copper -chile - - - - - -C M -f0022reute -b f BC-NO-QUAKE-DAMAGE-AT-CH 03-05 0089 - -NO QUAKE DAMAGE AT CHUQUICAMATA - MINE SPOKESMAN - SANTIAGO, March 5 - The earthquake which hit northern Chile -today, registering 7.0 on the open-ended Richter scale, caused -no damage to the copper mine at Chuquicamata, a mine spokesman -said. - Chuquicamata public relations director Guillermo Barcelo -told Reuters by telephone from the mine that the quake had -caused no problems and operations continued as usual. - A spokesman for the state Chilean Copper Commission in -Santiago confirmed there had been no damage at Chuquicamata. - Reuter - - - - 5-MAR-1987 09:24:40.64 -crudenat-gas -canada - - - - - -E F Y -f0025reute -r f BC-orbit-oil-increases 03-05 0094 - -ORBIT INCREASES OIL AND GAS RESERVE VALUES - CALGARY, Alberta, March 5 - <Orbit Oil and Gas Ltd> said -the value of its oil and gas reserves increased by 19 pct to -52.6 mln dlrs from 44.2 mln dlrs reported at year-end 1985, -according to an independent appraisal. - Orbit said it has reserves of 2.4 mln barrels of oil and -natural gas liquids and 67.2 billion cubic feet of natural gas. - In addition, 75 pct owned <Sienna Resources Ltd> has -Canadian reserves of 173,000 barrels of oil and 1.6 bcf of -natural gas with a current value of 2.2 mln dlrs, Orbit said. - Reuter - - - - 5-MAR-1987 09:24:55.56 -grainwheat -usaegypt - - - - - -C G -f0026reute -u f BC-CCC-ACCEPTS-BONUS-BID 03-05 0105 - -CCC ACCEPTS BONUS BID ON SEMOLINA TO EGYPT - WASHINGTON, March 5 - The Commodity Credit Corporation, -CCC, has accepted a bid for an export bonus to cover a sale of -2,000 tonnes of semolina to Egypt, the U.S. Agriculture -Department said. - The department said the bonus was 233.91 dlrs per tonne and -was made to International Multifoods Corp. The bonus will be -paid in the form of commodities from CCC stocks. - The semolina is for shipment during June 1987, it said. - An additional 13,000 tonnes of semolina are still available -to Egypt under the Export Enhancement Program initiative -announced on August 6, 1986, it said. - Reuter - - - - 5-MAR-1987 09:26:07.38 - -france -balladur - - - - -F -f0032reute -d f BC-FRENCH-CGE-GROUP-LIKE 03-05 0099 - -FRENCH CGE GROUP LIKELY TO BE PRIVATISED IN MAY - PARIS, March 5 - France's state-owned Cie Generale -d'Electricite (CGE) is likely to be privatised during May this -year, sources close to Finance Minister Edouard Balladur said. - Although the Finance Ministry simply said that the group -would be privatised during the course of this year, when it -first announced the operation in early January, the May date is -earlier than the market had expected. - As a result it will follow close on the heels of the -privatisation of the TF1 television channel and the advertising -group <Agence Havas>. - Last month the government privatised the first of the state -financial groups, Cie Financiere de Paribas <PARI.P>, in a -floatation which was 40 times oversubscribed. - And in December the first of the industrial groups, glass -maker Cie de Saint-Gobain <SGEP.P>, returned to the private -sector. - CGE has interests ranging from telecommunications to -shipbuilding and nuclear engineering, and recently struck a -deal with ITT Corp <ITT.N> to create the world's second largest -telecommunications group under the Alcatel name. - REUTER - - - - 5-MAR-1987 09:26:17.58 -acq -franceusawest-germanynetherlandssweden - - - - - -F -f0033reute -d f BC-FIVE-GROUPS-APPLY-TO 03-05 0118 - -FIVE GROUPS APPLY TO BUY FRENCH TELEPHONE GROUP - PARIS, March 5 - Five consortia have applied to buy the -French state-owned telephone equipment manufacturer <Cie -Generale de Constructions Telephoniques (CGCT)>, which will -give the owners control of 16 pct of the French telephone -switching market, sources close to Finance Minister Edouard -Balladur said. - The French government has given itself until the end of -April to decide which applicant will be accepted, they added. - While several foreign groups have said they want to gain a -foothold in the French market, their potential stake in CGCT is -limited to 20 pct under privatisation laws passed last year, -with 80 pct to be left in French hands. - The Finance Ministry sources gave no details of the groups -interested in CGCT, but several have publicly announced their -candidacies. - U.S. Telecommunications giant American Telephone and -Telegraph Co <T.N> which has been at the centre of the two-year -battle for CGCT, has teamed up with the Dutch-based <Philips -Telecommunications Industrie B.V.>, a subsidiary of NV Philips -Gloeilampenfabriek <PGLO.AS> and <Societe Anonyme de -Telecommunications> (SAT) to present a joint bid, in -association with holding company Cie du Midi SA <MCDP.P> and -five French investment funds. - A second bid has come from the West German electronics -group Siemens AG <SIEG.F>, which hopes to take a 20 pct stake -in CGCT, with the French telecommunications <Jeumont-Schneider> -taking the remaining 80 pct. - Sweden's <AB LM Ericsson> has also submitted a bid for the -maximum 20 pct permitted, in association with French defence -electronics group <Matra>, which would hold between 40 and 49 -pct, and construction group <Bouygues>. - Matra has already acquired CGCT's private telephone -business. -REUTER... - - - - 5-MAR-1987 09:27:39.53 - -usa - - - - - -V RM -f0039reute -b f BC-/SPEAKER-SEEKING-SUPP 03-05 0112 - -SPEAKER SEEKING SUPPORT FOR U.S. TAX INCREASES - WASHINGTON, March 5 - House Speaker Jim Wright is lobbying -congressmen to support a plan to cut the 1988 budget deficit -about 40 billion dlrs, half through spending cuts and the -remainder through tax hikes, congressional sources said. - He is backing a half and half plan and has made the -suggestion to Democrats on the House Budget Committee -privately, committee sources said. - However, a committee source told Reuters that committee -Democrats already generally favor a plan to cut the deficit -about 40 billion dlrs, half through taxes and the Speaker's -move was seen as building support outside the committee. - Wright's 20 billion dlr revenue raising plan has no -specifics, although he has floated a stock transfer tax and -also has suggested deferring tax cuts due to the wealthy. - Neither of those plans has caught fire yet in Congress, and -some congressmen are cool to the idea of a stock tax. - The Budget committee is considering a 1988 budget aimed at -reducing the estimated deficit of 170 billion dlrs as estimated -by the nonpartisan Congressional Budget Office. - Committee Chairman William Gray has publicly backed a -budget cutting move of 40 billion dlrs but says that will not -reach the Gramm-Rudman deficit target for 1988 of 108 billion -dlrs, although he claims it will be in the spirit of it. - Reuter - - - - 5-MAR-1987 09:31:01.67 -ship -turkey - - - - - -C G T M -f0051reute -u f BC-BLIZZARD-CLOSES-BOSPH 03-05 0099 - -BLIZZARD CLOSES BOSPHORUS - ISTANBUL, March 5 - Blizzard conditions halted shipping -through the Bosphorus waterway and piled snow up to 70 cms deep -in central Istanbul, paralysing the city for the second day -running. - Snow whipped by 48 kph winds continued to fall on Istanbul -and northwest Anatolia after 36 hours and weather reports -predicted no relief for another two days. - Port officials said at least six large vessels in the Black -Sea and 13 in the Sea of Marmara were waiting for conditions to -improve. - Istanbul's Ataturk international airport has been closed -since yesterday. - Reuter - - - - 5-MAR-1987 09:33:06.03 -acq -usa - - - - - -F -f0060reute -u f BC-JAPAN-FUND-<JPN>-SEEK 03-05 0100 - -JAPAN FUND <JPN> SEEKERS CONFIDENT OF FINANCING - NEW YORK, March 5 - The <Sterling Grace Capital Management -L.P.> group said it is confident financing can be arranged if -The Japan Fund's board recommend's the group's acquisition -proposal. - The group, which also includes <Anglo American Security -Fund L.P.> and T.B. Pickens III, Tuesday proposed an entity it -controls acquire for cash all the assets of Japan Fund for 95 -pct of the fund's aggregate net asset value. - The group said it has had a number of meetings over the -past few days with domestic and overseas financial institutions. - The Sterling Grace Capital group said certain of these -institutions have expressed serious interest in providing -financing for the proposed acquisition of Japan Fund, "adding -we are reasonably confident that the financing can be quickly -arranged if the Japan Fund's board of directors is willing to -recommend the transaction to shareholders." - Reuter - - - - 5-MAR-1987 09:33:18.80 - - - - - - - -F -f0061reute -f f BC-******K-MART-CORP-FEB 03-05 0011 - -******K MART CORP FEBRUARY SALES UP 13.1 PCT ON COMPARABLE STORE BASIS -Blah blah blah. - - - - - - 5-MAR-1987 09:34:02.54 - -tanzaniacanadabelgiumwest-germanyukswedenitalydenmarkzambiasouth-africa - -worldbankadb-africaec - - - -G T M -f0066reute -r f BC-TANZANIAN-RAILWAYS-SE 03-05 0113 - -TANZANIAN RAILWAYS SECURE 25.6 MLN DLRS AID - DAR ES SALAAM, March 5 - State-run Tanzania Railway -Corporation (TRC) has secured 25.6 mln dlrs aid from banks and -European countries for a one-year emergency repair program, -Transport Minister Mustafa Nyang'anyi said. - Nyang'anyi told Reuters on his return from a World Bank -sponsored donors' conference in New York that the aid would -enable TRC to buy spares for 32 locomotives, overhaul 800 -wagons and replace 67,000 sleepers over the next 12 months. - The World Bank, African Development Bank, European -Community, Canada, Belgium, West Germany, Britain, Sweden, -Italy and Denmark had contributed to the package, he said. - TRC runs a rail network linking Dar es Salaam and the -northern port of Tanga with the coffee-growing area around -Mount Kilimanjaro and ports on Lake Victoria and Lake -Tanganyika. - It is under separate administration from the -Tanzania-Zambia railway linking Dar es Salaam with the Zambian -copperbelt and the railway system of southern Africa, which has -already received substantial aid as part of international -efforts to ease the dependence of landlocked African states on -trade routes through South Africa. - But this is the first international aid package for TRC, -which also carries cargo for Uganda, Zaire and Burundi. - Reuter - - - - 5-MAR-1987 09:34:13.71 -earn -canada - - - - - -E F -f0068reute -r f BC-pegasus-gold-inc 03-05 0053 - -PEGASUS GOLD INC <PGULF> 3RD QTR DEC 31 NET - VANCOUVER, British Columbia, March 5 - - Shr profit 20 cts vs loss two cts - Net profit 2,665,000 vs loss 202,000 - Revs 12,141,000 vs 5,993,000 - Nine mths - Shr profit 35 cts vs loss 11 cts - Net profit 4,653,000 vs loss 1,167,000 - Revs 35.1 mln vs 18.0 mln - Reuter - - - - 5-MAR-1987 09:34:57.56 - -usa - - - - - -F -f0072reute -u f BC-STOP-AND-SHOP'S-<SHP> 03-05 0083 - -STOP AND SHOP'S <SHP> BRADLEES FEBRUARY SALES UP - BOSTON, March 5 - Stop and Shop Cos Inc said sales for the -four weeks ended February 28 for its Bradlees Discount -Department Stores Division were up six pct to 104 mln dlrs from -98 mln dlrs a year before, with same-store sales up three pct. - The company said the modest comparable store sales increase -was due to a combination of difficult weather conditions in the -Northeast, a later Easter this year and a possible slowing in -consumer demand. - Reuter - - - - 5-MAR-1987 09:35:22.89 - -usa - - - - - -M -f0075reute -d f BC-GM-(GM)-LAYING-OFF-5, 03-05 0083 - -GM LAYING OFF 5,500 AT TWO MICHIGAN PLANTS - DETROIT, March 5 - General Motors Corp said it ordered -temporary layoffs of 5,500 hourly workers to cut production and -thereby reduce inventories of cars built at two plants later -this month. - A spokesman said 2,000 workers would be laid off one week -beginning March 9 at GM's Detroit-Hamtramck luxury car plant. - Another 3,500 will be laid off a week effective March 23 at -GM's Lansing, Mich, plant which builds the company's "N-body" -compact cars. - Reuter - - - - 5-MAR-1987 09:36:37.16 - -usa - - - - - -F -f0079reute -r f BC-MITSUBISHI-MOTOR/AMER 03-05 0103 - -MITSUBISHI MOTOR/AMERICA FEBRUARY SALES RISE - FOUNTAIN VALLEY, Calif., March 5 - Mitsubishi Motor Sales -of America Inc said sales of all vehicles rose 43.7 pct in -February to 9,735 units from 6,776 in February 1986. - Sales of passenger cars and wagons grew 11.7 pct to 5,314 -from 4,758 and truck and van sales more than doubled to 4,421 -from 2,018, the affiliate of Mitsubishi Motors Corp said. - Year-to-date total vehicle sales increased 16.5 pct to -14,966 from 12,842. - Car and wagon sales in the two months fell 13.7 pct to -7,640 from 8,848 but sales of trucks and vans grew 83.4 pct to -7,326 from 3,994. - Reuter - - - - 5-MAR-1987 09:38:14.93 -earn -canada - - - - - -E F -f0085reute -d f BC-keltic-inc 03-05 0036 - -<KELTIC INC> YEAR NET - TORONTO, March 5 - - Shr 99 cts vs 1.25 dlrs - Net 418,733 vs 235,572 - Revs 2,777,425 vs 2,024,116 - Note: 1986 shr after November, 1986 600,000 class A -subordinate floating share issue - Reuter - - - - 5-MAR-1987 09:39:13.96 - -usa - - - - - -F -f0086reute -u f BC-SUPERMARKETS-GENERAL 03-05 0043 - -SUPERMARKETS GENERAL <SGC> FEBRUARY SALES RISE - WOODBRIDGE, N.J. - Supermarkets General Corp reported sales -of 424.8 mln dlrs for the four-week period ended Feb 28, 1987, -A 7.2 pct increase over sales of 396.4 mln dlrs for the -comparable period last year. - Reuter - - - - 5-MAR-1987 09:40:41.79 -money-fxinterest -uk - - - - - -RM -f0087reute -b f BC-U.K.-MONEY-MARKET-GIV 03-05 0095 - -U.K. MONEY MARKET GIVEN HELP, OFFERED FACILITIES - LONDON, March 5 - The Bank of England said it had given the -money market 206 mln stg of assistance this afternoon and -offered the discount houses borrowing facilities to take out -the rest of the 1.10 billion stg shortage, revised down from an -initial 1.15 billion estimate. - It made no alteration to its established dealing rates, -buying 95 mln stg of band one bank bills at 10-7/8 pct and 111 -mln of band two bank bills at 10-13/16 pct. This brings the -Bank's total assistance so far today to 243 mln stg. - REUTER - - - - 5-MAR-1987 09:40:53.56 - -usa - - - - - -F -f0088reute -u f BC-SUPERMARKETS-GENERAL 03-05 0044 - -SUPERMARKETS GENERAL <SGC> FEBRUARY SALES RISE - WOODBRIDGE, N.J., March 5 - Supermarkets General Corp -reported sales of 424.8 mln dlrs for the four-week period ended -Feb 28, 1987, A 7.2 pct increase over sales of 396.4 mln dlrs -for the comparable period last year. - Reuter - - - - 5-MAR-1987 09:41:51.56 -acq -usa - - - - - -F -f0096reute -r f BC-E.F.-HUTTON-<EFH>-STA 03-05 0093 - -E.F. HUTTON <EFH> STARTS PUROLATOR <PCC> BID - NEW YORK, March 5 - E.F. Hutton Group Inc said it has -started its previously announced offer to purchase up to -6,332,471 common shares of Purolator Courier Corp at 35 dlrs -each. - In a newspaper advertisement, the company said the offer, -proration period and withdrfawal rights will expire April One -unless extended. The offer is conditioned on receipt of at -least 5,116,892 Purolator shares, or a 66.7 pct interest, and -is the first step in a merger agreement that has been approved -by the Purolator board. - Hutton said it reserves the right to buy more than -6,332,471 shares but has no present intention of doing so. It -said it may waive the condition that at least 5,116,892 shares -be tendered as long as it received at least a 50.1 pct -interest. If it were to receive fewer shares than that, it -said it would only purchase sharesd with the consent of -Purolator. - Reuter - - - - 5-MAR-1987 09:42:45.36 -money-fx -usataiwansouth-korea -yeutter - - - - -RM A -f0100reute -r f BC-YEUTTER-PUTS-CURRENCY 03-05 0101 - -YEUTTER PUTS CURRENCY BURDEN ON TAIWAN, KOREA - NEW YORK , March 5 - Responsibility for the appreciation of -the Taiwan dollar and the South Korean Won lies soley with -those countries, said U.S. trade representative Clayton Yeutter - Speaking to the Asia Society, Yeutter said that it is in -those countries' own long-term interest to raise the value of -their currencies against the dollar. - Yeutter was responding to a question about what the U.S. -could do to encourage appreciation of those currencies against -the dollar in order to reduce the large U.S. trade deficits -with Taiwain and Korea. - "An undervalued currency will help those countries' exports -in the short term, but in the long run they have to be -concerned about how they are perceived in the international -business community," Yeutter said. - For Taiwan, Yeutter said that with its per capita trade -surplus with the U.S., much larger than that of Japan's, and -with huge foreign exchange reserves, it was difficult to defend -the high import tarrifs and other barriers that prevail in that -country. - He also said that the south Korean Won should begin to move -to reflect underlying economic fundamentals, "otherwise in two -or three years' time, Korea will be in the same situation that -prevails in Taiwan." - Turning to the U.S. deficit with Japan of more than 50 -billion dlrs, Yeutter said that this situation was not -sustainable. - "Something must give soon. If not, there is a great threat -of U.S. legislative action to counteract that trend," Yeutter -said. - Reuter - - - - 5-MAR-1987 09:42:52.28 -earn -usa - - - - - -F -f0101reute -r f BC-PRINCEVILLE-DEVELOPME 03-05 0069 - -PRINCEVILLE DEVELOPMENT CORP <PVDC> YEAR LOSS - PRINCEVILLE, Hawaii, March 5 - - Shr diluted loss 31 cts vs profit 17 cts - Net loss 2,806,005 vs profit 1,513,395 - Revs 15.0 mln vs 10.4 mln - Avg shrs diluted 8,982,754 vs 8,804,899 - NOTE: Current year includes loss of 3.4 mln dlrs from -takeover defense expenses. Also includes losses of 1.8 mln dlrs -vs 332,000 dlrs from equity in limited partnerships. - Reuter - - - - 5-MAR-1987 09:44:47.86 -acq -usa - - - - - -F -f0112reute -r f BC-ORANGE-CO-<OJ>-HOLDER 03-05 0035 - -ORANGE-CO <OJ> HOLDER RAISES STAKE - LAKE HAMILTON, Fla., March 5 - Orange-Co Inc said its -largest shareholder, <Summit Resoureces Inc>, has increased its -stake to 15 pct from 14 pct and now owns 644,727 shares. - Reuter - - - - 5-MAR-1987 09:44:55.17 -earn -usa - - - - - -F -f0113reute -r f BC-HORIZON-CORP-<HZN>-4T 03-05 0075 - -HORIZON CORP <HZN> 4TH QTR NET - FOUNTAIN HILLS, Ariz., March 5 - - Oper shr profit 1.66 dlrs vs loss eight cts - Oper net profit 12.0 mln vs loss 572,000 - Revs 27.4 mln vs 4,311,000 - Year - Oper shr profit 1.36 dlrs vs loss 43 cts - Oper net profit 9,817,000 vs loss 2,433,000 - Revs 35.0 mln vs 13.8 mln - Avg shrs 7,224,000 vs 6,731,000 - NOTE: 1985 net includes tax credits of 492,000 dlrs in -quarter and 2,433,000 dlrs in year. - 1985 net both periods excludes 168,000 dlr loss from -discontinued operations. - 1986 net both periods includes pretax gain 21.8 mln dlrs -from sale of remaining interest in Paradise Hills, N.M., -development. - Reuter - - - - 5-MAR-1987 09:45:10.22 -earn -canada - - - - - -E F -f0115reute -r f BC-thomson 03-05 0046 - -<INTERNATIONAL THOMSON ORGANISATION LTD> YEAR - TORONTO, Mar 5 - - Shr 33p vs 38p - Net 97 mln vs 111 mln - Revs 1.71 billion vs 1.76 billion - NOTE: Figures in sterling. - Share results after deducting preferred share dividends of -one mln pounds sterling in 1986. - Reuter - - - - 5-MAR-1987 09:45:49.05 - -france - -ec - - - -C G -f0118reute -u f BC-FRENCH-FARMERS-STRONG 03-05 0108 - -FRENCH FARMERS STRONGLY CRITICISE EC MILK PACT - PARIS, March 5 - The EC agriculture ministers' agreement on -reducing dairy output puts milk producers in an impossible -situation, French farm unions said. - The accord to limit butter sales into intervention, part of -planned dairy output cuts of 9-1/2 pct over two years, will cut -milk producers' income, a spokeswoman for France's largest farm -union, the FNSEA, said. - The move has destroyed part of the Common Agricultural -Policy, French milk producers said in a press release. - But Agriculture Minister Francois Guillaume said -repercussions of the plan will affect dairies, not farmers. - "If there are negative repercussions, it will be at the -level of the dairies which have never looked for new outlets -for butter and milk," he told journalists during a visit to -Rouen. - FNSEA president Raymond Lacombe said on French radio the -milk sector needs restructuring by encouraging early retirement -and helping young farmers to start. But Commission proposals, -rejected by ministers, would have frozen land prices, he said. - The FNSEA says it will demonstrate over Commission -proposals to freeze most 1987/88 farm prices and cut supports. -Pig farmers have held violent demonstrations over falling pork -prices and milk producers blocked roads in protest at cuts in -milk output. - Reuter - - - - 5-MAR-1987 09:52:38.52 - -uk - - - - - -RM -f0137reute -b f BC-IBJ-ESTABLISHES-200-M 03-05 0074 - -IBJ ESTABLISHES 200 MLN STG CD PROGRAMME - LONDON, March 5 - The Industrial Bank of Japan Ltd (IBJ), -London Branch, said it is establishing a sterling certificate -of deposit (CD) issuance programme for up to 200 mln stg. - The arranger is LLoyds Merchant Bank Ltd and dealers are -LLoyds, Samuel Montagu and Co Ltd, Morgan Grenfell and Co Ltd -and S.G. Warburg and Co Ltd. - The paper will have maturities between seven and 365 days. - REUTER - - - - 5-MAR-1987 09:53:39.85 - - - - - - - -F -f0139reute -f f BC-******MOBIL'S-MONTGOM 03-05 0015 - -******MOBIL'S MONTGOMERY WARD AND CO FEBRUARY SALES UP 12.7 PCT ON COMPARABLE STORE BASIS -Blah blah blah. - - - - - - 5-MAR-1987 09:54:03.66 -earn -usa - - - - - -F -f0140reute -r f BC-EQUATORIAL-COMMUNICAT 03-05 0058 - -EQUATORIAL COMMUNICATIONS CO <EQUA> 4TH QTR LOSS - MOUNTAIN VIEW, Calif., March 4 - - Shr loss 3.84 dlrs vs nil - Net loss 56,879,000 vs profit 23,000 - Rev 10.3 mln vs 17.7 mln - Year - Shr loss 4.60 dlrs vs profit 14 cts - Net loss 67,818,000 vs profit 1,807,000 - Rev 50.9 mln vs 56.1 mln - Avg shares 14,734,000 vs 12,801,000 - NOTE: Fourth qtr net includes a one-time restructuring -charge of 45.2 mln dlrs. 1985 net income includes extraordinary -gain of 3.2 mln dlrs, or 25 cts. - Reuter - - - - 5-MAR-1987 09:55:41.23 - -iraniraq - - - - - -RM -f0142reute -u f BC-IRAQ-SAYS-IT-CRUSHES 03-05 0121 - -IRAQ SAYS IT CRUSHES NEW IRANIAN BASRA OFFENSIVE - BAGHDAD, March 5 - Iraq said its forces killed or wounded -15,000 Iranian Revolutionary Guards as they crushed a new -Iranian offensive near the strategic port city of Basra. - A high command war communique said four Revolutionary -Guards divisions attacked Iraqi positions east of Basra on the -Gulf War southern front, but they were fully crushed by noon -(0900 GMT). - Adbul-Jabbar Mohsen, chief of the defence ministry -political department, said the Iranians had 15,000 casualties. - Iran earlier today said its forces launched fresh attacks -near Basra last night, adding that 1,200 Iraqis were killed or -wounded in fighting near Fish Lake, 10 km east of Basra. - In its first reaction to Tehran reports of a new Iranian -offensive on the northern front, Iraq said fighting continues -around the strategic mountain peak of Kardamanend, overlooking -the Haj Omran-Rawandiz axis close to the Iranian border. - A military spokesman said Iran launched its attack in the -north "to (turn) Iraqi attention towards that area and relax -pressure in the south." - He added, "Iraq knows well that Iran's main goal is to -occupy Basra in the south and that was the reason why Iraq has -repelled their new offensive so decisively and firmly." - Iran reported heavy fighting on both fronts today. - REUTER - - - - 5-MAR-1987 09:55:46.08 -earn - - - - - - -E F -f0143reute -b f BC-thomson 03-05 0010 - -******INTERNATIONAL THOMSON ORGANISATION LTD YEAR SHR 33P VS 38P -Blah blah blah. - - - - - - 5-MAR-1987 09:56:03.54 - -usa - - - - - -F -f0144reute -b f BC-ENZON-<ENZN>-SAYS-DRU 03-05 0063 - -ENZON <ENZN> SAYS DRUG TREATS DISEASE - SOUTH PLAINFIELD, N.J., March 5 - Enzon Inc said a new -treatment using its investigational new drug PEG-ADA has -restored the functioning of the immune system in the first two -children that were born deficient in the enzyme adenosine -deaminase. - The disorder is known as severe combined immunodeficiency -disease, or "bubble boy disease" - Bubble Boy Disease is a rare but severe disease that -hampers the development of the immune system. It has killed -most of its victims before adulthood. - Children with the disease are consigned to live in a -sterile environment, such as a plastic bubble, to avoid -infection, the company said. - The study of Enzon's drug, conducted at Duke University, -showed that two children suffering from the disease were -treated for 11 and seven months, respectively, and were free of -serious infection during that time, the company said. The -results were published in the New England Journal of Medicine. - The disease is caused by a missing enzyme, called Adenosine -Deaminase, or ADA, that is crucial to the development of the -immune system. - Enzon said it has developed a technology to coat the enzyme -with a substance called polyethylene glycol, or PEG, serving to -disguise the enzyme when it is reintroduced into the body, -preventing rejection. - "Marked improvement in laboratory tests of immune function -occurred in each child, along with an increase in the number of -T-lymphocytes, the immune cells that were missing before -treatment with PEG-ADA had begun," the study said. - "The children are now more active and have begun to gain -weight and height. Before treatment their growth had been very -poor in comparison to normal children of the same age," the -study, conducted by Doctors Michael Hershfield and Rebecca -Buckley, said. - The PEG-ADA injections were given once a week. Victims of -the disease have traditionally been treated by bone marrow -transplants, but for most, donors are not available or -transplantation is unsuccessful, the company said. Other -diseases caused by a missing enzyme might also be treated by -introducing a PEG coated enzyme, the article noted. - Reuter - - - - 5-MAR-1987 09:57:00.61 - - - - - - - -F -f0149reute -f f BC-******MCI-COMMUNICATI 03-05 0011 - -******MCI COMMUNICATIONS CALLS FOR IMMEDIATE DEREGULATION OF ATT -Blah blah blah. - - - - - - 5-MAR-1987 09:58:35.61 - - - - - - - -F -f0154reute -b f BC-******F.W.-WOOLWORTH 03-05 0009 - -*****F.W. WOOLWORTH CO FEBRUARY SALES INCREASE 11.3 PCT -Blah blah blah. - - - - - - 5-MAR-1987 09:59:40.82 -acq -usa - - - - - -F -f0160reute -r f BC-TRIMEDYNE-<TMED>-TO-S 03-05 0066 - -TRIMEDYNE <TMED> TO SPIN OFF STAKE IN UNIT - SANTA ANA, Calif., March 5 - Trimedyne Inc said it will -distribute one Class B common share of <Automedix Sciences Inc> -for each four Trimedyne shares held of record on March Nine. - The company said in the spinoff it is distributing its -entire 44 pct interesdt in Automedix. The spun-off stock will -not be saleable for 13 months, the company said. - Reuter - - - - 5-MAR-1987 10:00:29.72 - -usa - - - - - -F -f0163reute -b f BC-K-MART-<KM>-FEBRUARY 03-05 0088 - -K MART <KM> FEBRUARY SALES UP 8.2 PCT - TROY, Mich., March 5 - K Mart Corp said February sales -rose 13.1 pct from a year ago and comparable store sales in the -four-week period ended February 25 rose 8.2 pct. - K Mart said consolidated sales in the period were 1.46 -billion dlrs compared with 1.29 billion last year. It said the -year-ago figures excluded sales for discontinued operations. - K Mart cited "favorable consumer response to our -merchandise programs" and said its specialty retailers had -"excellent February sales." - Reuter - - - - 5-MAR-1987 10:00:45.71 - - - - - - - -F -f0165reute -b f BC-*****HECK'S-INC-TO-RE 03-05 0006 - -*****HECK'S INC TO RELEASE NEWS SHORTLY . -Blah blah blah. - - - - - - 5-MAR-1987 10:01:44.44 -earn -usa - - - - - -F -f0171reute -r f BC-CASEY'S-GENERAL-STORE 03-05 0045 - -CASEY'S GENERAL STORES INC <CASY> 3RD QTR JAN 31 - DES MOINES, Iowa, March 5 - - Shr 16 cts vs 13 cts - Net 1,900,000 vs 1,600,000 - Sales 68.2 mln vs 69.6 mln - Nine mths - Shr 60 cts vs 43 cts - Net 7,100,000 vs 4,700,000 - Sales 214.0 mln vs 219.5 mln - Reuter - - - - 5-MAR-1987 10:02:32.72 - - - - - - - -F -f0176reute -f f BC-******J.C.-PENNEY-FEB 03-05 0010 - -******J.C. PENNEY FEBRUARY STORE AND CATALOG SALES UP 5.3 PCT -Blah blah blah. - - - - - - 5-MAR-1987 10:02:53.85 -grainwheatbarleycorn -france - -ec - - - -C G -f0179reute -u f BC-FRENCH-FREE-MARKET-CE 03-05 0092 - -FRENCH FREE MARKET CEREAL EXPORT BIDS DETAILED - PARIS, March 5 - French operators have requested licences -to export 40,000 tonnes of free market feed wheat, 32,500 -tonnes of soft bread wheat, 375,000 tonnes of barley and -465,000 tonnes of maize at today's European Community tender, -trade sources here said. - Rebates requested ranged between 134 and 136.50 European -currency units (Ecus) a tonne for the feed wheat, 137.39 and -141.50 Ecus a tonne for the bread wheat, 137.93 and 142.95 Ecus -for the barley and 133.75 and 140.25 Ecus for the maize. - Reuter - - - - 5-MAR-1987 10:03:24.09 - -usa - - - - - -F Y -f0183reute -b f BC-OCCIDENTAL-<OXY>-OFFE 03-05 0099 - -OCCIDENTAL <OXY> OFFERS OVER 37 MLN SHARES - NEW YORK, March 5 - Occidental Petroleum Corp said its -common stock offering has been further increased to a total of -37,950,000 shares. - The company explained that underwriters exercised in full -their option to increase tohe offering by buying an additional -4,950,000 shares over and above the 33 mln brought to market -yesterday. Originally, Occidental had planned to offer 30 mln -shares. It had 165 mln outstanding prior to the offering. - The underwriters are Drexel Burnham Lambert Inc, Kidder -Peabody and Co Inc and Salomon Brothers Inc. - At the public offering price of 30.50 dlrs a share, -Occidental said, the total value of the offering was nearly -1.16 billion dlrs, making it the largest underwritten common -equity offering by a U.S. natural resource company. - The company said the significant financial improvements -from applying the net proceeds of the offering, principally to -the reduction of debt, along with its 1986 restructuring of oil -and gas operations and the acquisition of Midcon Corp have -positioned Occidental to benefit from an improving oil and gas -industry environment. - Reuter - - - - 5-MAR-1987 10:03:43.41 -crude -usa - - - - - -F Y -f0186reute -u f BC-DIAMOND-SHAMROCK-<DIA 03-05 0073 - -DIAMOND SHAMROCK <DIA> RAISES CRUDE OIL POSTINGS - NEW YORK, MAR 5 - Diamond Shamrock said it raised its -posted prices for all grades of crude oil one dlr a barrel, -effective yesterday. - The one dlr increase brings West Texas Intermediate, WTI -the U.S. benchmark crude, to 17.00 dlrs a bbl, the company -said. - Diamond Shamrock joined Sun Co, Coastal, Citgo and Murphy -Oil in raising crude oil posted prices one dlr a barrel -yesterday. - Reuter - - - - 5-MAR-1987 10:04:23.59 -earn -usa - - - - - -F -f0190reute -r f BC-OAK-HILL-SPORTSWEAR-C 03-05 0047 - -OAK HILL SPORTSWEAR CORP <OHSC> 4TH QTR NET - NEW YORK, March 5 - - Shr 27 cts vs 28 cts - Net 1,026,000 vs 1,025,000 - Sales 27.8 mln vs 25.4 mln - Year - Shr 95 cts vs 16 cts - Net 3,682,000 vs 598,000 - Sales 102.1 mln vs 100.4 mln - Avg shrs 3,858,000 vs 3,700,000 - Reuter - - - - 5-MAR-1987 10:04:32.26 -earn -usa - - - - - -F -f0191reute -r f BC-OAK-INDUSTRIES-INC-<O 03-05 0068 - -OAK INDUSTRIES INC <OAK> 4TH QTR LOSS - SAN DIEGO, March 5 - - Oper shr loss five cts vs loss 50 cts - Oper net loss 3,862,000 vs loss 15,900,000 - Sales 42.6 mln vs 38.8 mln - Avg shr 72.1 mln vs 31.7 mln - Year - Oper shr loss 51 cts vs loss 2.10 dlrs - Oper net loss 30.3 mln vs 51.3 mln - Sales 151.7 mln vs 153.1 mln - Avg shrs 59.4 mln vs 24.4 mln - Backlog 57.1 mln vs 52.9 mln - NOTES: Operating losses exclude profits from discontinued -operationgs of 1,000,000 dlrs, or one cent a share, vs -2,493,000 dlrs, or eight cts a share, in quarter and 65.0 mln -dlrs, or 1.09 dlrs a share, vs 13.7 mln dlrs, or 56 cts a -share, in year - 1986 year operating loss also excludes extraordinary gain -of of 25.6 mln dlrs, or 43 cts a share - Backlog, which includes only orders to be shipped within 12 -mths, was 63.0 mln dlrs on January 31. Orders to be shipped -beyond 12 mths were 27.6 mln dlrs vs 17.1 mln dlrs at December -31 - Reuter - - - - 5-MAR-1987 10:04:36.77 -earn -usa - - - - - -F -f0192reute -s f BC-REGIS-CORP-<RGIS>-REG 03-05 0024 - -REGIS CORP <RGIS> REGULAR DIVIDEND SET - MINNEAPOLIS, March 5 - - Qtly div 4-1/2 cts vs 4-1/2 cts prior - Pay April 15 - Record March 24 - Reuter - - - - 5-MAR-1987 10:05:25.49 - -usa - - - - - -F -f0196reute -u f BC-JAMESWAY-<JMY>-FEBRUA 03-05 0068 - -JAMESWAY <JMY> FEBRUARY SALES UP 13 PCT - SECAUCUS, N.J., March 5 - Jamesway Corp said it had sales -for the four weeks ended February 28, excluding leased -departments, were 31.7 mln dlrs, up 13 pct from 28.0 mln dlrs -in the comperable four week period a year earlier. - On a store for store basis, the company said, sales -increased five pct. It operated 100 stores last month, up from -92 in February 1986. - Reuter - - - - 5-MAR-1987 10:09:59.43 - -usa - - - - - -F -f0209reute -u f BC-K-MART-<KM>-COMPARABL 03-05 0102 - -K MART <KM> COMPARABLE-STORE FEBRUARY SALES UP - TROY, Mich., March 5 - K Mart Corp said February sales -rose 13.1 pct from a year ago and comparable store sales in the -four-week period ended February 25 rose 8.2 pct. - K Mart said consolidated sales in the period were -1,459,193,000 dlrs compared with 1,289,635,000 dlrs last year. -It said the year-ago figures excluded sales for discontinued -operations such as Designer Depots, Furr's Cafeterias and -Bishop Buffets. - K Mart cited "favorable consumer response to our -merchandise programs" and said its specialty retailers had -"excellent February sales." - Reuter - - - - 5-MAR-1987 10:11:50.97 - -usa -james-baker -worldbank - - - -C G L M T -f0214reute -r f BC-Trade 03-05 0143 - -CONGRESS MAY CURB U.S. AID TO DEVELOPMENT BANKS - WASHINGTON, March 5 - Congressional ire is rising against -the multinational development banks which make loans to help -other countries produce goods in direct competition with -beleagured U.S. farmers and miners. - With a record U.S. trade deficit of 169 billion dlrs last -year and a farm economy in the doldrums, Congress is pressing -to hold back U.S. funds for the World Bank and other -development banks if the money is used to subsidize production -or to produce goods already in oversupply around the world. - "American tax dollars are being used to subsidize foreign -agriculture and mineral production that is often in direct -competition with our producers," Senator Don Nickles, an -Oklahoma Republican, said in a letter to fellow senators -seeking support for his legislation to limit these loans. - Nickles and Senator Steven Symms, a conservative Republican -from Idaho, have introduced legislation that would strictly -limit U.S. funding of multinational development banks if they -make any loans to help developing countries produce surplus -commodities or minerals. - Current law requires that the United States vote against -such loans but carries no reprisals if they are ultimately -approved by the banks. - Treasury Secretary James Baker's assurances that U.S. -policy is to oppose these loans did not satisfy concerns raised -at two Senate committee hearings last week. - Baker told a Senate Appropriations subcommittee on Foreign -Operations, "As a policy matter, we oppose loans for production -of commodities in oversupply." - The senators cited a 350-mln-dlr World Bank loan made to -Argentina last year to help it increase its agricultural -exports by one billion dlrs a year by 1989. - Nickles, Symms and others also have cited other loans such -as a 1985 World Bank loan to Hungary to expand livestock -exports and 500 mln dlrs lent to Thailand from 1981 to 1985 at -low interest rates for agriculture. - Last year the Republican-controlled Senate voted three -times over the objections of the administration to cut U.S. -funding of development banks by the amount of these loans. - But even with a 65 to 15 vote in favour of the proposal, -the restrictions were weakened in the final version. Only a -provision directing U.S. officials to vote disapproval cleared -Congress. - This year's version, called the Foreign Agricultural -Investment Reform (FAIR) Act would require the U.S. to vote -against loans designed to increase production of surplus -commodities and minerals. Also, the recipient countries would -have to prove that the production, marketing and export of the -commodities could be handled without government subsidy. - If the loan is approved over U.S. objections, the United -States would not increase or replenish funds for that -institution until it agrees to stop making such loans. - Objections to such loans have most often been raised by -conservative Republicans who have traditionally opposed U.S. -funding for these international development banks. - But the loss of many jobs to foreign competition has raised -similar concerns among more moderate senators. - The administration opposes any legislation that would tie -its hands in votes on the loans. It argues there might be -instances in which a country needed the money to continue its -moves toward U.S. policies in other areas. - Baker said the United States would continue to use its -leverage in the banks to require foreign trade liberalization -measures, often in the form of elimination of subsidies. - Two House Republicans, Representatives Larry Craig of Idaho -and Beau Bolter of Texas, have introduced the bill. But it -faces stiff opposition in the House Banking Committee which has -blocked its consideration by the House in the past. - Symms intends to offer the bill as an amendment to any -related legislation this year, an aide said. - Reuter - - - - 5-MAR-1987 10:13:13.34 - -usa - - - - - -F -f0219reute -d f BC-EQUATORIAL-<EQUA>-SIG 03-05 0094 - -EQUATORIAL <EQUA> SIGNS PACT WITH CONTEL UNIT - MOUNTAIN VIEW, Calif., March 5 - Equatorial Communications -Co, a satellite data network concern, said it has signed an -agreement with Contel Corp's <CTC>, Contel ASC, unit allowing -Contel ASC to buy 3.6 mln shares of Equatorial stock at 3.25 -dlrs per share. - In addition, Equatorial said under the agreement Contel ASC -would buy a minimum of 10 mln dlrs of equipment from -Equatorial, loan Equatorial up to six mln dlrs and assume a -portion of Equatorial's rights and obligations under a -satellite transponder lease. - Reuter - - - - 5-MAR-1987 10:13:54.12 -acq -west-germanyusa - - - - - -F -f0223reute -d f BC-MANNESMANN-SEEKS-STAK 03-05 0101 - -MANNESMANN SEEKS STAKE IN U.S. FIRM - DUESSELDORF, March 5 - Mannesmann AG <MMWG.F>, the -diversified engineering and pipe-making group, is interested in -taking a stake in a U.S. Company or companies but has not yet -found a suitable firm, a spokesman said in reply to questions. - Mannesmann managing board chairman Werner Dieter told the -business weekly Wirtschaftswoche in an interview that -Mannesmann wanted to invest in a U.S. Company in order to -strengthen its presence on the U.S. Market. - Dieter said Mannesmann would act quickly when and if it -found a firm in which it wanted to take a stake. - The Mannesmann spokesman declined to say in which -industrial sector the group may make a U.S. Acquisition or how -big the acquisition might be. - He also said the group had not yet completed taking over a -stake in car components firm <Fichtel und Sachs AG>. - Mannesmann had said in January it hoped to take a 37.5 pct -stake in Fichtel und Sachs's holding company, Sachs AG, in the -first quarter. The spokesman said Mannesmann had a letter of -intent on the takeover from the heirs of the company's late -owner but completion has been delayed by legal questions -concerning the inheritance. - REUTER - - - - 5-MAR-1987 10:15:44.63 -earn -usa - - - - - -F -f0228reute -u f BC-AMERICAN-INT'L-GROUP 03-05 0052 - -AMERICAN INT'L GROUP INC <AIG> 4TH QTR NET - NEW YORK, March 5 - - Shr 1.83 dlrs vs 77 cts - Net 296.6 mln vs 120.1 mln - Year - Shr 4.90 dlrs vs 2.76 dlrs - Net 795.8 mln vs 420.5 mln - NOTE: Includes gains of 139.2 mln vs 46.8 mln in year and -94.0 mln vs 11.6 mln from capital gains from investments. - Reuter - - - - 5-MAR-1987 10:17:54.70 -earn -usa - - - - - -F -f0241reute -r f BC-SYSTEMS-FOR-HEALTH-CA 03-05 0075 - -SYSTEMS FOR HEALTH CARE IN ONE-FOR-50 SPLIT - CHICAGO, March 5 - Systems for Health Care Inc said it -repositioned the company through a one-for-50 reverse stock -split. - It said there are now 3,002,500 common shares outstanding -with a quoted price of about 7/8 bid, compared to 150,125,000 -shares outstanding prior to the split. - In another recent development, Systems for Health Care -formally changed its name to its present form from Orcas Corp. - Reuter - - - - 5-MAR-1987 10:18:25.05 - -usa - - - - - -F -f0245reute -r f BC-FIRST-EXECUTIVE-CORP 03-05 0085 - -FIRST EXECUTIVE CORP <FEXC> GIVES UNIT FUNDS - LOS ANGELES, March 5 - First Executive Corp said that its -principal subsidiary contributed 152 mln dlrs to one of its -divisions to cover credits it wrongfully took on its 1983 to -1985 regulatory accounting statements. - The company said Executive Life Insurance Co gave the -capital infusion to its subsidiary, Executive Life Insurance Co -of New York. It said the new funds bring to 280 mln dlrs the -company has received from its parent the past three years. - Executive Life Insurance Co of New York admitted a -violation of state insurance law and paid a fine of 250,000 -dlrs levied by the New York Insurance Department, according to -the company. - Executive Life of New York took credits for reinsurance -agreements that provided less protection to the insurer and its -policyholders than New York rules require, according to -published reports. - Reuter - - - - 5-MAR-1987 10:18:32.34 - -usa - - - - - -F -f0246reute -r f BC-<HARD-ROCK-CAFE-PLC> 03-05 0087 - -<HARD ROCK CAFE PLC> SETS INITIAL U.S. OFFERING - NEW YORK, March 5 - Hard Rock Cafe PLC said it has filed -for an initial U.S. offering of 2,240,000 American Depositary -Shares representing 11.2 mln Class A ordinary shares. - It said 240,000 of the ADS's will be sold by a current -shareholder. - Lead underwriter is <Drexel Burnham Lambert Inc>. - The company said proceeds will be used for the financing of -additional restaurants, the expansion of existing restaurants -and retail operations and the repayment of debt. - Reuter - - - - 5-MAR-1987 10:18:46.99 - -belgium - - - - - -RM -f0247reute -b f BC-BELGIUM-TO-ISSUE-150 03-05 0093 - -BELGIUM TO ISSUE 150 BILLION FRANC STATE LOAN - BRUSSELS, March 5 - Belgium is to issue a 150 billion -franc, eight-year state loan carrying a coupon of eight pct, a -Finance Ministry spokesman said. - Pricing will be fixed next week. - The spokesman said the loan will feature a call option -after four years at a price also to be determined. - Some 120 billion francs of the loan will be taken up by -members of the issuing consortium, comprising major Belgian -commercial banks, and the remaining 30 billion by semi-state -owned financial institutions. - The most recent public authority loan stock issue, for the -state road building fund Fonds des Routes, was also for eight -years with an eight pct coupon. It was priced at par. - The issue also featured a call option after four years at -102, falling to 101-1/2 after five and by a half point each -year thereafter. - REUTER - - - - 5-MAR-1987 10:18:51.21 - - - - - - - -F -f0248reute -f f BC-******MAY-DEPARTMENT 03-05 0009 - -******MAY DEPARTMENT STORES CO FEBRUARY SALES RISE 15 PCT -Blah blah blah. - - - - - - 5-MAR-1987 10:20:40.73 -earncrude -ukusa - - - - - -F Y -f0253reute -d f BC-ROYAL-DUTCH/SHELL-U.S 03-05 0111 - -ROYAL DUTCH/SHELL U.S. EARNINGS SHARPLY LOWER - LONDON, March 5 - Royal Dutch/Shell Group <RD.AS> earnings -for 1986 from the U.S. Fell sharply because of difficult market -conditions, lower crude and gas prices and also due to -different accounting methods, Shell chairman Peter Holmes said. - The Shell Oil dollar net income fell 47 pct in the year, -while the additional effect of currency movements reduced the -contribution to group net income by 57 pct to 472 mln stg. - The group earlier reported a drop in net income for the -year to 2.54 billion stg from 3.03 billion previously, with -lower crude prices outweighing the effect of increased sales by -volume. - Although the figures were lower, they were nonetheless at -the top end of market forecasts. Shell Transport and Trading -Plc <SC.L> shares, the U.K. Arm of the group, rose to 11.39 stg -from a close last night of 11.06 stg. Analysts noted that a -general collapse in exploration and production volumes was -partially offset by earnings from chemicals rising to 462 mln -stg from 205 mln in 1985. - Also, a windfall tax credit and lower than expected -currency losses had added about 100 mln stg onto fourth quarter -results, which was the main reason for the figures exceeding -forecasts, industry analyst Chris Rowland of Barclays de Zoete -Wedd noted. - However, he added there could well be a sharp fall in -performance in the first quarter of 1987, due to the -improbability that the group would be able to repeat the high -refining and marketing margins of first quarter 1986. - The impact of recovering oil prices would come through -faster on the downstream side than on the upstream as such a -high proportion of upstream activity centred on gas, which -typically reacted to oil price changes with about a half-year -lag, analysts said. - Holmes said that in the upstream U.S. Sector the third -quarter of 1986 had been the worst of all. - Only two of the oil majors had managed to make a profit in -the period, with Shell Oil being one of them. The decrease in -U.S. Earnings had been accentuated by tax rates but the group -had increased share to become volume market leader, Holmes -added. - Continued low crude oil prices would continue to subdue -U.S. Exploration activity. "Exploration is currently pretty -flat. We are going to go on, but at 16-18 dlrs there will be no -massive upturn," he said. - A renewal of exploration in high cost areas of the North -Sea and the U.S. Requires prices of around 25 dlrs a barrel. - Ultimately this would lead to a rise in U.S. Imports. "If -you are not exploring you are not going to find anything," he -noted. - U.S. Oil production had dropped some half mln barrels a day -(bbd) in 1986 and would continue to fall if the price stayed -below 20 dlrs a barrel. - This favored OPEC's attempts to stabilise prices, as the -lower the price the more likelihood there was of non-OPEC -marginal production shutting down. "OPEC has done pretty -extraordinarily well...Everything is moving in (its) direction," -he added. - Reuter - - - - 5-MAR-1987 10:21:29.06 - -usa - - - - - -F -f0258reute -u f BC-J.C.-PENNEY-<JCP>-FEB 03-05 0069 - -J.C. PENNEY <JCP> FEBRUARY SALES 5.3 PCT - NEW YORK, March 5 - J.C. Penney co Inc said sales for the -four weeks ended February 28 for its JCPenney stores and -catalogs were up 5.3 pct to 780 mln dlrs from 741 mln dlrs a -year earlier, with comparable store sales up 5.5 pct. - The company said total company sales for the period were up -6.0 pct to 888 mln dlrs from 838 mln dlrs, with same-store -sales up 6.3 pct. - Reuter - - - - 5-MAR-1987 10:21:41.00 - -usa - - - - - -F -f0259reute -u f BC-F.W.-WOOLWORTH-<Z>-FE 03-05 0057 - -F.W. WOOLWORTH <Z> FEBRUARY SALES INCREASE - NEW YORK, March 5 - F.W. Woolworth Co said total sales for -the four weeks ended February 28 rose 11.3 pct to 416 mln, from -374 mln in the comparable 1986 period. - Woolworth said domestic sales increased 7.1 pct, to 249 mln -from 233 mln, while foreign sales rose 18.4 pct to 167 mln, -from 141 mln. - Reuter - - - - 5-MAR-1987 10:22:24.09 -interest -spain - - - - - -RM -f0266reute -r f BC-BANKERS-WELCOME-SPANI 03-05 0115 - -BANKERS WELCOME SPANISH RESERVE REQUIREMENT HIKE - MADRID, March 5 - Bankers welcomed the Bank of Spain's -decision to raise the reserve requirement for banks and savings -banks, saying it reflected the socialist government's -determination not to ease up in the fight against inflation -despite the painful social effects of four years of austerity. - The central bank last night raised the requirement by one -percentage point to 19 pct from March 13, saying that excess -liquidity threatened money supply and inflation targets. - Bankers said the move represented a change of tactic by the -Bank, which until now has relied on raising interest rates to -choke off money supply growth. - "I think it's a good measure," a senior foreign banker said. -"It's a faster way to get the job done than using interest rates -and avoids unpleasant effects on other areas of the economy." - "It shows that the political will is very strong. They know -that controlling inflation will make industry more competitive -and bring down unemployment in the long run," he added. - The head of another foreign bank said that only a month -ago, the Bank of Spain had dismissed his suggestion of a rise -in reserve requirements, preferring to pursue its strategy of -raising interest rates. - But bankers said the high real interest rates on offer now --- around eight pct for overnight funds -- was attracting money -from abroad, strengthening the peseta and making Spanish -exports less competitive. - The government says industry's competitiveness is also -being hit hard by inflation. At 8.3 pct last year, the rate was -way above that of Spain's major trading partners in the -European Community, which it joined a year ago. - To help meet this year's target of five pct, it is -insisting pay rises stay at that level, setting the stage for -clashes with trade unions, who say they have made enough -sacrifices. - Demonstrations by workers, students and farmers, whose -demands essentially involve more government spending, have -become an almost daily occurrence. But Prime Minister Felipe -Gonzalez insists that the state is doing as much as it can. - Bankers said the reserve requirement increase could have -some impact on commercial lending rates but should not hit the -money market too hard. - The Bank of Spain, which only yesterday raised its key -overnight call money rate to 13.5 pct, left it unchanged at -today's auction. The rate has been increased nine times since -the start of the year, when it was below 12 pct. - Bankers said commercial lending rates were set to rise in -any case with the end of the six pct maximium interest rate -banks can offer for time deposits of up to six months. - The measure will take effect tomorrow, following the -publication of the decree in today's official gazette. Bankers -say the liberalisation will increase the cost of funds and, -inevitably, push lending rates higher. - A companion measure, reducing the proportion of funds which -banks must invest in specific areas, also takes effect -tomorrow. Officials said when the cut was approved last month -that it was aimed partly at compensating banks for higher -interest rates. - REUTER - - - - 5-MAR-1987 10:22:36.39 -earn -sweden - - - - - -F -f0268reute -d f BC-GAMBRO-AB-<GAMB-ST>-1 03-05 0035 - -GAMBRO AB <GAMB ST> 1986 YEAR - STOCKHOLM, Mar 5 - Group profit after net financial items -133.5 mln crowns vs 101 mln. - Sales 1.61 billion vs 1.51 billion. - Proposed dividend 0.80 crowns vs 0.40 crowns. - REUTER - - - - 5-MAR-1987 10:22:52.88 - -netherlands - - - - - -F -f0269reute -d f BC-KLM-LOAD-FACTOR-HIGHE 03-05 0100 - -KLM LOAD FACTOR HIGHER IN FEBRUARY - AMSTERDAM, March 5 - KLM Royal Dutch Airlines <KLM.AS> said -its load factor rose to 66.5 pct in February from 62.5 pct in -January and 65.7 pct in February 1986. - The load factor was 66.6 pct in the April/February period -of 1986/87 compared with 67.2 pct in the same period in -1985/86. - Traffic rose 18 pct and capacity rose 17 pct in February -versus 12 and 13 pct respectively in January. - In the April/February period of 1986/87 traffic rose nine -pct and capacity rose 10 pct compared with eight and nine pct -respectively in the same period in 1985/86. - REUTER - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-003.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-003.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-003.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-003.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2006 +0,0 @@ - - - 9-MAR-1987 04:58:41.12 -money-fx -uk - - - - - -RM -f0416reute -b f BC-U.K.-MONEY-MARKET-SHO 03-09 0095 - -U.K. MONEY MARKET SHORTAGE FORECAST AT 250 MLN STG - LONDON, March 9 - The Bank of England said it forecast a -shortage of around 250 mln stg in the money market today. - Among the factors affecting liquidity, it said bills -maturing in official hands and the treasury bill take-up would -drain around 1.02 billion stg while below target bankers' -balances would take out a further 140 mln. - Against this, a fall in the note circulation would add 345 -mln stg and the net effect of exchequer transactions would be -an inflow of some 545 mln stg, the Bank added. - REUTER - - - - 9-MAR-1987 05:03:09.75 -money-fxinterest -france - - - - - -RM -f0423reute -u f BC-BANK-OF-FRANCE-SETS-M 03-09 0112 - -BANK OF FRANCE SETS MONEY MARKET TENDER - PARIS, March 9 - The Bank of France said it invited offers -of first category paper today for a money market intervention -tender. - Money market dealers said conditions seemed right for the -Bank to cut its intervention rate at the tender by a quarter -percentage point to 7-3/4 pct from eight, reflecting an easing -in call money rate last week, and the French franc's steadiness -on foreign exchange markets since the February 22 currency -stabilisation accord here by the Group of Five and Canada. - Intervention rate was last raised to eight pct from 7-1/4 -on January 2. Call money today was quoted at 7-11/16 7-3/4 pct. - REUTER - - - - 9-MAR-1987 05:03:38.51 -crude -china - - - - - -F -f0426reute -u f BC-AMOCO-REPORTS-SOUTH-C 03-09 0073 - -AMOCO REPORTS SOUTH CHINA SEA OIL FIND - PEKING, March 9 - The U.S. <Amoco Petroleum Corp> has -reported an offshore oil find at its Pearl River basin -concession in the South China Sea, the New China News Agency -said. - It said the Liu Hua 11-1-1 A well produced at around 2,240 -barrels per day at a depth of 305 metres. - The news agency said Amoco plans to drill a second well in -the area this year, but gave no further details. - REUTER - - - - 9-MAR-1987 05:12:17.12 - -south-korea - - - - - -F -f0437reute -u f BC-SOUTH-KOREA-DELAYS-CO 03-09 0110 - -SOUTH KOREA DELAYS CONTRACT FOR NUCLEAR PLANTS - SEOUL, March 9 - Technology transfer problems have delayed -the finalising of contracts between South Korea's state-owned -Korea Electric Power Corp (Kepco) and U.S. Firms for supplies -of equipment and services for Kepco's latest two 950-megawatt -nuclear power plants, a Kepco spokesman said. - He told Reuters the contracts for Kepco's tenth and -eleventh stations, costing between two and three billion dlrs, -were due for completion by the end of February. - Kepco has been negotiating with Combustion Engineering Inc -(CSP) for pressurised light-water reactors and General Electric -Co (GE) for turbines. - - KEPCO has also been negotiating with (Sargent and Lundy -Engineers) for engineering and design consultancy services. - "We have been waging a tug-of-war on the transfer of -advanced technology. But I am optimistic we will sign contracts -with them within this month," the spokesman said. - He said the transfer of advanced technology is vital for -South Korea, which wants to build future nuclear power plants -with its own technology. - Work on the two plants is due to start about June 1988 for -completion in 1995 and 1996, although the sites have yet to be -chosen, he said. - REUTER - - - - 9-MAR-1987 05:19:27.56 - -switzerland - - - - - -RM -f0442reute -u f BC-KEIAISHA-ISSUING-12-M 03-09 0060 - -KEIAISHA ISSUING 12 MLN SWISS FRANC NOTES - ZURICH, March 9 - Keiaisha Co Ltd of Tokyo is issuing 12 -mln Swiss francs of straight notes due March 26, 1992 with a -4-5/8 pct coupon, lead manager Gotthard Bank said. - The notes can be called from September 26, 1989 at 101-1/4, -declining semi-annually. - The issue is guaranteed by the Kyowa Bank Ltd. - REUTER - - - - 9-MAR-1987 07:59:05.79 -interest - - - - - - -RM -f0749reute -f f BC-NATIONAL-WESTMINSTER 03-09 0015 - -******NATIONAL WESTMINSTER BANK SAYS IT CUTTING BASE LENDING RATE TO 10.5 PCT FROM 11 PCT. -Blah blah blah. - - - - - - 9-MAR-1987 08:08:57.16 -interest -uk - - - - - -RM -f0776reute -b f BC-NATIONAL-WESTMINSTER 03-09 0029 - -NATIONAL WESTMINSTER BANK CUTS BASE RATE - LONDON, March 9 - National Westminster Bank Plc said it has -cut its base lending rate 0.5 percentage points to 10.5 pct -today. - National Westminster said that it was responding to general -easing in money market rates. - Its move followed a signal from the Bank of England earlier -this afternoon that it would endorse a half point cut in the -base rate, a surprise move following its strong signals last -week that such a move would be premature. - However, since then the pound has continued to gain -strongly. - REUTER - - - - 9-MAR-1987 08:11:20.25 -earn -usa - - - - - -F -f0792reute -s f BC-U.S.-FACILITIES-<USRE 03-09 0047 - -U.S. FACILITIES <USRE> SEMI-ANNUAL DIVIDEND - COSTA MESA, Calif., March 9 - - Semi-annual dividend 4 cts - Pay May 29 - Record April 14 -Note: full name is U.S. Facilities Corp. This is first dividend -declared since company completed its initial public offering on -November 7. - Reuter - - - - 9-MAR-1987 08:13:16.75 -acq -usa - - - - - -F A -f0805reute -r f BC-STANDARD-PACIFIC-<SPF 03-09 0134 - -STANDARD PACIFIC <SPF> ACQUIRES SOUTH BAY S/L - COSTA MESA, Calif, March 9 - Standard Pacific LP said it -has acquired substantially all of the assets and liabilities of -South Bay Savings and Loan Association of Newport Beach. - The firm said over the weekend that it will conduct its -savings and loan activities through Standard Pacific Savings -FA, a Federal stock association. - On Friday, the Federal Home Loan Bank Board in Washington -said it approved the acquisition of South Bay S and L, a 62.5 -mln dlr state-chartered stock association, by Standard Pacific, -which has 312.8 mln dlrs in assets. - The Bank Board said that the Federal Savings and Loan -Insurance Corp will make a cash contribution, provide capital -loss coverage and indemnify Standard Pacific against -undisclosed liabilities. - Reuter - - - - 9-MAR-1987 08:13:36.29 -strategic-metal -usasouth-africa - - - - - -A -f0808reute -d f AM-URANIUM 03-09 0135 - -U.S. TO ALLOW TEMPORARY IMPORTS OF S.A. URANIUM - WASHINGTON, March 9 - The Treasury Department said it would -temporarily permit imports of South African uranium ore and -oxide pending clarification of anti-apartheid sanctions laws -passed by Congress last fall. - The decision was announced late Friday. It applies, until -July 1, to uranium ore and oxide imported into the U.S. for -processing and re-export to third countries. - The Treasury said it took the action because it felt that -when Congress passed the comprehensive South African sanctions -bill last fall over President Reagan's veto it had not intended -to hurt U.S. industry. - In addition, the Treasury said it would permit U.S.-made -goods to be imported temporarily from South African -state-controlled organizations for repair or servicing. - - Reuter - - - - 9-MAR-1987 08:15:28.61 - -usairan - - - - - -V -f0812reute -u f BC-PAPER-SAYS-INDICTMENT 03-09 0115 - -PAPER SAYS INDICTMENTS IN IRAN CASE EXPECTED - NEW YORK, March 9 - The special prosecutor in the Iran arms -scandal is expected to bring indictments that could include -felony charges against senior Reagan administration officials, -the New York Times reported. - It quoted law enforcement officials with knowledge of the -investigation as saying special prosecutor Lawrence Walsh, who -is investigating the scandal, was focusing on three areas. - The paper identified these as conspiracy to defraud the -government, obstructing justice and making false statements to -the government. It said the prosecutor had not ruled out any -suspects, including current and former government officials. - MORE - - - - 9-MAR-1987 08:15:42.31 - -usauk - - -nyselse - - -F -f0814reute -r f BC-NYSE-RULE-COULD-AFFEC 03-09 0101 - -NYSE RULE COULD AFFECT TRADING IN LONDON - LONDON, March 9 - An existing New York Stock Exchange, -NYSE, rule might be used to limit the trading activities of its -members in London in stocks listed on both exchanges, sources -at the London Exchange said. - This could arise if the London Stock Exchange goes ahead -with plans to close its trading floor. - The London Exchange sources were commenting on press -reports that the NYSE would bar its members firms from trading -on the London Exchange in interlisted stocks during periods -when the NYSE was open. - The London exchange is seeking clarification. - London Exchange sources said the possibility of -restrictions on NYSE members appears to reflect a rule which -requires that exchanges recognised by the NYSE possess a -trading floor. - Last month, the London Exchange said in a statement that it -planned to close its floor in due course, apart from a floor -for traded options, because almost all business is now being -done by screen and telephone between brokerage offices. - This development stemmed from the Big Bang restructuring of -the market on October 27. The demise of the traditional Stock -Exchange floor has been widely expected, though no date has -been set as yet. - Market sources said a compromise over the NYSE rule could -well be reached, partly because the interests of U.S. -Securities dealers are not all identical. - Some of them could well start lobbying the NYSE, pointing -out, among other things, that the expansion of global trading -needs to be based on reciprocal arrangements. - NYSE brokerage firms which also trade on the London -Exchange would presumably be put at a disadvantage over -non-NYSE U.S. Firms, which have affiliates on the London -Exchange, market sources said. - REUTER - - - - 9-MAR-1987 08:16:35.37 -acq -usa - - - - - -F -f0816reute -u f BC-/PIEDMONT-<PIE>-AGREE 03-09 0113 - -PIEDMONT <PIE> AGREES TO USAIR <U> BUYOUT - NEW YORK, March 9 - USAir Group Inc said Piedmont Aviation -Inc has agreed to be acquired for 69 dlrs per share. - The company, in a newspaper advertisement, said it has -started a tender offer for all Piedmont shares at that price, -and the Piedmont board, with two directors absent, has -unanimously approved the bid. The offer and withdrawal rights -are to expire April Three unless extended, and the bid is to be -followed by a merger at the same price. - USAir said Piedmont has granted it an irrevocable option to -buy up to 3,491,030 new shares under certain circumstances. -Piedmont now has about 18.6 mln shares outstanding. - USAir said the tender is conditioned on receipt of enough -shares to give USAir at least a 50.1 pct interest in Piedmont -on a fully diluted basis and approval by the U.S. Department of -Transportation of a voting trust agreement permitting USAir to -buy and hold shares pending review of its application to gain -control of Piedmont. - The company said its merger agreement with Piedmont -provides that the offer is not to be amended without Piedmont's -prior written consent in any way that would be adverse to -Piedmont shareholders, but it said it could cut the number of -shares to be bought without Piedmont's consent. - USAir said it could reduce the number of Piedmont shares to -be purchased in the offer to no less than the minimum number -needed to cause the voting trust condition of the bid to be -satisfied. - In that case, it said if more than that minimum number of -shares were tendered, it would buy shares on a pro rata basis. - In February USAir had offered to pay 71 dlrs per share in -cash for 50 pct of Piedmont's stock and 1.55 to 1.90 USAir -shares for each remaining Piedmont share. - Last week, Carl C. Icahn-controlled Trans World Airlines -Inc <TWA> made a conditional offer to acquire USAir for 52 dlrs -per share, a bid that was rejected by the USAir board. - The Transportation Department on Friday rejected TWA's -application to acquire USAir on the grounds that the -application failed to comply with department regulations by -omitting necessary information. TWA said it would refile -today, providing the information needed. - On Friday TWA said it had already acquired four mln shares -or 15 pct of USAir. - Reuter - - - - 9-MAR-1987 08:21:01.71 - -usaussr - - - - - -V -f0832reute -r f BC-U.S.-AIDES-SEE-MOSCOW 03-09 0103 - -U.S. AIDES SEE MOSCOW AGREEING TO ARMS CHECK PACT - WASHINGTON, March 9 - Senior U.S. Arms control officials -said they were optimistic the United States and Soviet Union -could reach agreement on ways to verify a pact to eliminate -medium-range nuclear missiles in Europe. - Chief U.S. Arms control negotiator Max Kampelman said on -the NBC television network a fair pact would be hard to -negotiate, but, "We are determined to do it." - Assistant Secretary of Defence for international security -policy Richard Perle said he thought the two sides could agree -on a method to ensure each side was honouring a missile pact. - President Reagan said on Friday that Secretary of State -George Shultz would go to Moscow next month for talks on arms -control and a possible U.S.-Soviet summit meeting. - The decision to send Shultz to Moscow followed an -announcement by Soviet leader Mikhael Gorbachev that he was -willing to separate elimination of medium-range missiles in -Europe from his demand for curbs on U.S. Development of a -Strategic Defence Initiative (SDI) anti-missile system. - Kampelman said the United States and the Soviet Union both -had a general definition of so-called "intrusive" or on-site -inspection of a pact, but details would be tough to work out. - Reuter - - - - 9-MAR-1987 08:22:57.04 -crudenat-gas -usa - - - - - -Y F -f0839reute -d f BC-API-REPORTS-SHARP-FAL 03-09 0082 - -API REPORTS SHARP FALL IN DRILLINGS - WASHINGTON, March 9 - Estimated oil and gas drilling -completions in the United States dropped by almost 41 per cent -in 1986 from 1985, the American Petroleum Institute said. - API, an industry group, said that of the 42,387 wells -completed last year, a total of 19,741 were oil wells, 8,645 -were natural gas wells and 14,001 were dry holes. - In 1985, a total of 71,539 wells were drilled - 36,834 oil -wells, 13,036 gas wells and 21,669 dry holes. - reuter - - - - 9-MAR-1987 08:23:31.25 -instal-debt -uk - - - - - -RM -f0840reute -b f BC-U.K.-CREDIT-BUSINESS 03-09 0109 - -U.K. CREDIT BUSINESS FALLS IN JANUARY - LONDON, March 9 - New credit advanced by finance houses, -retailers, bank credit cards and other specialist providers of -credit slipped to 2.66 billion stg in January from 2.78 billion -in December - but remained close to the average level for -1986's fourth quarter, the Department of Trade and Industry -said. - Of the January total, 1.15 billion stg was advanced on bank -credit cards. - On a three-month basis, total advances in November to -January were 3.0 pct lower than in the previous three months. -Within this total, lending to consumers fell by 6.0 pct and -lending to businesses declined by 5.0 pct. - At end-January 1987, the total amount outstanding was 24.07 -billion stg, up from December's 23.77 billion stg and 3.0 pct -above the total three months earlier, the department said. - January saw a rise of 300 mln stg in amounts outstanding to -finance houses, other specialist credit grantors and retailers. - The department said advances on credit cards rose by 1.0 -pct between the latest two three-month periods. Retailers -advanced 3.0 pct less in the latest three months than in the -previous three months, it said. - REUTER - - - - 9-MAR-1987 08:27:14.06 -crudeship -brazil - - - - - -C G L M T -f0842reute -u f BC-BRAZILIAN-SEAFARERS' 03-09 0108 - -BRAZILIAN SEAFARERS' STRIKE DAMAGES OIL EXPORTS - SAO PAULO, March 9 - A strike by Brazil's 40,000 seafarers -who want pay rises of up to 180 pct may have cost the -state-owned oil company Petrobras 20 mln dlrs in lost export -orders, the company's commercial director Arthur de Carvalho -was quoted as saying in press reports. - More than 170 ships in Brazil, and about nine more in -foreign ports, have been halted by the strike, which began on -February 27. - Marines began blockading the ships on Friday after the -strike was ruled illegal, and some strikers are running short -of food, National Merchants Marine Union president Edson Areias -said. - Reuter - - - - 9-MAR-1987 08:38:11.68 - -usa - - - - - -F -f0875reute -u f BC-NEC-<NIPNY>-UNIT-INTR 03-09 0098 - -NEC <NIPNY> UNIT INTRODUCES NEW COMPUTERS - BOXBOROUGH, Mass., March 9 - NEC Corp's NEC Informational -Systems Inc said it introduced three advanced personal -computers that are fully compatible with the International -Business Machines Corp <IBM> PC AT. - The computers, the PowerMate 1, PowerMate 2 and -BusinessMate, are based on a chip made by Intel Corp <INTC>. - The PowerMate 1 and 2 are available immediately and sell -for 1,995 dlrs and 2,595 dlrs, respectively, the company said. - The BusinessMate, scheduled for April availability, will -sell for less than 6,000 dlrs, it said. - Reuter - - - - 9-MAR-1987 08:40:06.50 -tradegnpbopdlr -ukusawest-germanyjapan - -oecd - - - -A -f0886reute -d f BC-OECD-TRADE,-GROWTH-SE 03-09 0110 - -OECD TRADE, GROWTH SEEN SLOWING IN 1987 - LONDON, March 9 - The 24 nations of the Organisation for -Economic Cooperation and Development (OECD), hampered by -sluggish industrial output and trade, face slower economic -growth, and their joint balance of payments will swing into -deficit in 1987, the Economist Intelligence Unit (EIU ) said. - The EIU said in its World Trade Forecast it revised OECD -economic growth downwards to 2.5 pct this year, compared with a -2.8 pct growth forecast in December. - It said the new areas of weakness are West Germany and the -smaller European countries it influences, and Japan, hardest -hit by currency appreciation this year. - The independent research organisation cut its 1987 growth -rate forecasts for West Germany to 2.2 pct from 3.2 pct in -December and to 2.3 pct from three pct for Japan. - It said it expected the OECD to post a current account -deficit of some 13 billion dlrs in both 1987 and 1988, due in -large part to a 1.50 dlrs a barrel rise in 1987 oil prices. - It said the U.S. Current account deficit looked likely to -fall even more slowly than forecast, to 125 billion dlrs in -1987 and 115 billion in 1988 from 130 billion in 1986. - It said it expected West Germany to post a 31 billion dlr -payments surplus and Japan a 76 billion dlr surplus this year. - The EIU said it saw oil prices dropping to around 16.50 -dlrs a barrel by end-1987 and 15.50 dlrs in 1988 from about 18 -dlrs last year, as adherence to OPEC output policy becomes -increasingly ragged. - It said the dollar is poised to resume its decline in -foreign exchange markets, and will lose a further 13 pct on its -trade-weighted index this year and five pct in 1988 after last -year's 18.4 pct drop. The average mark/dollar rate is put at -1.80 marks this year and 1.70 in 1988 while the yen/dollar rate -is expected to break through the 150 yen barrier with an -average value of 150 yen in 1987 and 146 yen in 1988, it said. - "This is not a crash scenario but the dollar's steeper -angle of descent increases the risk of ending with a fireball -rather than a three-point landing," the EIU said. - "Talking will not stop the dollar's slide for long and the -February meeting (of finance ministers of the Group of Five and -Canada) produced scant promise of either a decisive shift to -more expansive policies in West Germany and Japan, or a tighter -U.S. Fsical policy," it said. - It said the key to the dollar's fortunes was the -willingness of Japanese institutions to buy U.S. Government -assets despite prospects of sustaining a currency loss. - "Thus far they have been willing," the EIC said, adding -that if Japan was deterred from buying U.S. bonds the dollar -would collapse. - To contain such a currency crisis, dollar interest rates -would have to soar, bringing recession and a Third World debt -crisis, it said. - On trade, the EIU said prospects for 1987 look -"increasingly sick." - Import growth, forecast in December at 4.5 pct, is now seen -slowing down to around 3.8 pct in 1987 with a recovery only to -4.2 pct in 1988, it said. - The weakness of the West German economy is the biggest -single factor, with import growth there expected to feature a -sluggish 3.5 pct growth in 1987 against the 6.5 pct forecast in -December, the EIU said. - On the export side, it said it saw weak demand in West -Germany affecting export prospects elsewhere in Europe, while -Japan's exports in 1987 would remain flat and sales by U.S. -Exporters would respond only marginally to a lower, more -competitively-priced dollar. - It said in most of Europe and in Japan, raw materials and -oil will cost less in domestic currency in 1987 than in 1986. - Reuter - - - - 9-MAR-1987 08:44:23.42 -interestmoney-fxdlr -usawest-germany -poehl - - - - -RM -f0895reute -u f BC-POEHL-SAYS-FURTHER-RA 03-09 0110 - -POEHL SAYS FURTHER RATE CUT POSSIBLE - SOURCES - By Allan Saunderson and Antonia Sharpe, Reuters - FRANKFURT, March 9 - Bundesbank president Karl Otto Poehl -told a closed investment symposium that West Germany could cut -leading interest rates again if the United States makes a -similar move, banking sources said. - The sources were reporting Poehl's remarks at a symposium -in Duesseldorf last week organised by Deutsche Bank Ag. Press -representatives were not invited. - The sources, speaking separately, said Poehl told about 200 -bankers in reply to questions that a cut in U.S. Interest rates -would give room for a matching measure in Germany. - "It was a definite hint at lower German interest rates," said -one banker who attended the symposium. - A Bundesbank spokesman said the central bank would have no -comment on the reported remarks, made at the private meeting. - But, according to a second source, who also declined to be -identified, Poehl's comments were seen by bankers present as a -direct pointer to further moves by the central bank to defend -German industry from an additional revaluation of the mark. - "He said if the Americans drop their interest rates then the -Bundesbank would also drop them. He said that quite clearly," -the second source said. - In reply to questions, Poehl also said the half-point cut -in the discount and Lombard rates on January 22 came after the -U.S. Had signalled it would be prepared to attend a meeting to -discuss the level of the dollar on condition Germany made such -a move in advance, the sources said. - Asked if American authorities could have been persuaded, by -cuts in German rates, to come to the bargaining table as early -as last September, one of the sources quoted Poehl as saying, -"No, they wouldn't have been. We checked that." - The Paris meeting of the Group of Six industrial nations -took place exactly one month after the German cut in rates. - Poehl emphasised in his comments the very close talks -between central banks before and after the G-6 meeting, saying -that financial markets had not fully realised the significance -of the Paris session and the U.S. Agreement to stem further -falls in the value of the dollar, the sources said. - For the first time all participants at the summit agreed -that a further fall in the dollar would be harmful for all -world economies, including the U.S., Poehl had said. - The sources said the tone of Poehl's comments boosted -growing sentiment that the dollar would be stabilised around -current levels by international central bank cooperation. - One source said Poehl's remarks also underlined the fact -that the Bundesbank was now more prepared to be accommodative -in monetary policy in order to prevent a further slowdown in -West Germany's economic growth. - Poehl and other Bundesbank officials have in the past -stressed that the German central bank had no direct -responsibility for growth and was solely concerned with -combatting inflation. - This led, for instance, to the introduction of a tighter -monetary stance from the beginning of December until the -half-point cut in rates in late January. - The sources quoted Poehl as saying that the current -overshooting of the German monetary target would not directly -respark inflation. The Bundesbank was not obliged to react -immediately whenever such overshooting occurs. - Latest data for central bank money stock, the Bundesbank's -main measure of money supply, showed the measure was growing at -7-1/2 pct in January, outside its three to six pct 1987 target. - Share prices rose in very active trading today, with -dealers reporting that Poehl's remarks, coupled with a bullish -outlook on stock prices from Deutsche at the same symposium, -brought in strong bargain hunting at current low levels. - REUTER - - - - 9-MAR-1987 08:44:51.73 - -ukcolombia - - - - - -F -f0897reute -u f BC-PLESSEY-TO-SELL-TELEP 03-09 0106 - -PLESSEY TO SELL TELEPHONE SYSTEM TO COLOMBIA - LONDON, March 9 - Plessey Co Plc <PLY.L> said it had won a -multi-million stg contract to supply Colombia with the System X -digital telephone exchange, the first major export contract for -the system. - Company sources said the deal was worth about 15 mln stg. -v A Plessey statement said the contract, awarded by the -National Telecommunications Authority of Colombia, was won -against competition from Telefon L M Ericsson AB, NEC Corp, -Fujitsu Ltd and Italtel of Italy. - "The award is regarded as a triumph for System X and a -breakthrough in the South American market," it said. - Plessey said the contract was one of the largest awarded by -Telecom Colombia for the past 10 years and involved supplying -13 telephone exchanges including 68,000 lines. - The award also includes transmission equipment for the -interconnection of the exchanges and the existing system. - The firm was actively marketing System X worldwide and -contract negotiations in certain countries had reached an -advanced stage, it said. - Plessey shares were down 5p at 235p, having gone -ex-dividend. - REUTER - - - - 9-MAR-1987 08:46:08.05 - -venezuela - - - - - -A -f0901reute -r f BC-VENEZUELA-REVEALS-DEB 03-09 0113 - -VENEZUELA REVEALS DEBT PAYMENT SCHEDULE DETAILS - CARACAS, March 8 - The 20.3 billion dlr debt rescheduling -accord Venezuela signed a week ago will reduce its payments -over the next three years by 64 pct, according to Finance -Ministry figures released this weekend. - A ministry statistical analysis said while the original -accord called for payments of 3.82 billion dlrs between 1987 -and 1989, the new agreement requires debt servicing of 1.35 -billion over the same period. In 1987, Venezuela will be -required to pay 250 mln dlrs instead of the 1.55 billion -originally agreed. Payments in 1988 were cut to 400 mln from -1.20 billion, and in 1989 to 700 mln from 1.11 billion. - The ministry's analysis said the reduction in debt -servicing during 1987-1989 amounts to an effective grace -period, something the Venezuelan negotiators sought from -creditor banks but were not granted. - Most of the rescheduling falls during 1994-1998, when 53.3 -pct, or some 11.25 billion dlrs, must be paid. Under the -February 27 accord, Venezuela will repay 20.3 billion dlrs of -public sector debt over 14 years at 7/8 of a percentage point -over London interbank offered rates (Libor). - This compares with the February 1986 accord which called -for a 12-year term and interest of 1-1/8 point over Libor. - REUTER - - - - 9-MAR-1987 08:48:26.10 -acq -usa - - - - - -F -f0909reute -r f BC-SOSNOFF-STARTS-BID-FO 03-09 0113 - -SOSNOFF STARTS BID FOR CAESARS WORLD <CAW> - NEW YORK, March 9 - <MTS Acquisition Corp>, a company -formed by Martin T. Sosnoff, said it has started a tender offer -for all shares of Caesars World Inc at 28 dlrs each. - In a newspaper advertisement, MTS said the offer and -withdrawal rights expire April Three unless extended. - Sosnoff, a New York investor, already owns about four mln -of Caesars' 30.3 mln shares outstanding, or about 13.3 pct, and -is Caesars' largest shareholder. Caesars owns casino hotels in -Nevada and honeymoon resorts in Pennsylvania's Pocono -Mountains. It also controls Caesars New Jersey Inc <CJN>, -which owns an Atlantic City, N.J., casino hotel. - For the second quarter ended January 31, Caesars World -earned 12.6 mln dlrs on revenues of 190.4 mln dlrs, up from -earnings of 7,500,000 dlrs and revenues of 163.8 mln dlrs a -year before. For all of fiscal 1986, the company earned 41.0 -mln dlrs on revenues of 694.4 mln dlrs. - MTS said the offer is conditioned on receipt of at least -enough shares to give Sosnoff a majority interest on a fully -diluted basis, the arrangement of sufficient financing to buy -all Caesars shares not already owned and pay related costs and -approval by the New Jersey Casino control Commission and the -NEvada Gaming Commission and State Gaming Control Board. - MTS said Marine Midland Banks Inc <MM> has committed to -lend it 100 mln dlrs for the acquisition and use its best -efforts to syndicate another 400 mln dlrs in senior financing -for the transaction. - It said its financial adviser, PaineWebber Group Inc <PWJ>, -has stated in writing that subject to market conditions, it is -highly confident that it can arrange commitments for up to 475 -mln dlrs in "mezzanine" financing. - MTS said it does not expect problems in obtaining New -Jersey and Nevada regulatory approval for the acquisition, -since ownership in a Caesars stake has already been cleared. - In June 1986, Sosnoff requested a seat on the Caesars World -board, a request that has not yet been granted. In September -1986, Sosnoff, who is chairman of <Atalanta/Sosnoff Capital -Corp>, filed for clearance under U.S. antitrust laws to raise -his interest in Caesars World to 25 pct. - Sosnoff said, in a letter to Caesars World chairman and -chief executive officer Henry Gluck, that "The decision to go -directly to the shareholders was made at the urging of may -financial and legal advisors, who repeatedly stressed to me the -lack of responsiveness of the management in the past." - Sosnoff, who said he has made numerous efforts to express -his views to management on ways of maximizing shareholder -values, said Caesars twicce refused his request for a board -seat. "My advisers felt that, had I given you advance notice, -you would have used the time to throw up obstacles to my offer -rather than giving it serious consideration," he said. - Sosnoff said he hopes that Caesars World management will be -willing to negotiate an acquisition agreement with him. - "As I have indicated publicly in the past, I believe -operating management of the company has performed well and that -appropriate consideration should be given to a significant -equity interest for them in the company following the -acquisition," Sosnoff said in the letter to Gluck. - MTS said Sosnoff has asked the company to fix March 27 as -the record date for the determination of shareholders entitled -to authorize action without a meeting -- including the election -or removal of directors. - Reuter - - - - 9-MAR-1987 08:51:35.60 -gnpjobscpibopdfl -netherlands - - - - - -RM -f0913reute -r f BC-DUTCH-PLANNING-AGENCY 03-09 0104 - -DUTCH PLANNING AGENCY FORECASTS LOWER GROWTH - THE HAGUE, March 9 - Dutch economic growth is slowing as a -firming guilder cuts competitiveness abroad and industries -reduce the pace of investment, the Dutch official planning -agency CPB said. - The Centraal Planbureau, publishing its 1987 economic -outlook, said Dutch Net National Income (NNI) was expected to -grow by one pct this year, down from two pct growth recorded in -1986 and 2.5 pct in 1985 and 1984. - Dutch Gross National Product is expected to rise to 432.20 -billion guilders in 1987 in constant prices, a two pct increase -from last year's 423.95 billion. - The CPB, forecasting an 8.5 pct increase in the value of -the guilder on a trade-weighted basis compared with 10.0 pct -last year, said the dollar was expected to trade at an average -of 2.0 guilders in 1987 compared with 2.45 guilders in 1986. - "The higher guilder is causing a substantial fall in unit -labour costs abroad, when measured in guilder terms, while -these are rising slightly in the Netherlands," the CPB said. - More of economic growth now depended on domestic -consumption, the CPB said, but noting that higher margins set -by domestic producers and importers mitigated the effect on -purchasing power of lower import costs and deflation. - Consumer prices were set to fall by 1.5 pct this year, the -CPB said. Inflation was zero last year. - Gross investment in industry was expected to grow by five -pct this year, a slowdown compared with 11.5 pct growth last -year, the CPB said. - Exchange rate and oil price fluctuations will continue to -condition the Dutch economy in the future as it has in recent -years, the CPB said, noting a continued depressing impact of -these factors on Dutch competitiveness. - In addition, it noted a slight rise in taxation and social -security costs to employers. - The CPB, forecasting a rise in the budget deficit to 7.2 -pct of Net National Income in 1987 from 6.3 pct last year, -urged the government to cut expenditure further to bring down -the deficit and reduce tax and social security payments in -future. - Dutch government revenue is being depressed further by -falling income from natural gas sales in 1987, the CPB said. - It said unemployment was expected to fall to 675,000 this -year from 710,000 last year. - While the two pct GDP growth forecast set by the CPB is -within its latest forecast, issued last month, of 1.5 to two -pct growth, the figure is well above recent market estimates. - Dutch merchant bank Pierson, Heldring en Pierson said in -its February economic outlook that GDP growth at constant -prices was expected to be 1.1 pct this year and market analysts -had expected the CPB's final forecast to be below its own -latest estimate. - "It is too early to comment because I haven't seen the whole -document yet, but it would seem we are more pessimistic in some -of our estimates," a Pierson economist said. - The CPB forecast 2.5 pct export growth in volume terms in -1987, after four pct growth last year. Excluding energy -exports, the 1987 figure would be two pct, it said. - Imports were set to rise by 4.5 pct this year compared with -four pct in 1986 in volume terms, the CPB said. - The balance of payments would see a sharp decline in the -surplus, to six billion guilders in 1987 compared with 12.1 -billion last year, the CPB forecast. - REUTER - - - - 9-MAR-1987 08:51:49.54 -acq -usa - - - - - -F -f0914reute -b f BC-TRUMP-MAKES-BID-FOR-C 03-09 0088 - -TRUMP MAKES BID FOR CONTROL OF RESORTS <RTB> - NEW YORK, March 9 - Casino owner and real estate developer -Donald Trump has offered to acquire all Class B common shares -of Resorts International Inc, a spokesman for Trump said. - The estate of late Resorts chairman James M. Crosby owns -340,783 of the 752,297 Class B shares. - Resorts also has about 6,432,000 Class A common shares -outstanding. Each Class B share has 100 times the voting power -of a Class A share, giving the Class B stock about 93 pct of -Resorts' voting power. - More - - - - 9-MAR-1987 08:54:12.02 -earn -usa - - - - - -F -f0922reute -u f BC-IOMEGA-<IOMG>-SETS-MA 03-09 0096 - -IOMEGA <IOMG> SETS MANAGEMENT, LABOR LAYOFFS - ROY, Utah, March 9 - Iomega Corp said it has laid off over -a quarter of its professional and management staff and nearly -half of its direct labor force as part of a restructuring and -downsizing of its business. - The company also said it will receive a qualified opinion -from the auditors of it 1986 financial statement subject to the -outcome of two suits. The company is a defendant in a -consolidated class action law suit which seeks damages in an -unspecified amount and is also a defendant in a related -shareholder action. - Iomega said the auditors state in their opinion letter that -both actions are in the early stages of discovery and the -likely outcome can not be determined at this time. - The company said a corporate wide reduction of its -professional, management and indirect labor will result in the -permanent elimination of 183 positions in all functional areas -of the company's business. This represents over 25 pct of -professional, management and indirect employees, it added. - In addition, Iomega announced layoff of about 182 -employees, principally from its manufacturing direct labor -force. Those affected represent about 46 pct of direct labor. - Commenting on the layoffs, Iomega said those from among the -direct labor force affects personnel building the Alpha Eight -Inch Disk Drive and Bernoulli Boxes. - "This action is required as we bring our finished goods -inventory and inventory in our distribution channels down to -acceptable levels," it explained. - The company stated this layoff does not affect the -production of its new 5-1/4 inch Beta 20 product which is -currently being built to a backlog of orders. - Reuter - - - - 9-MAR-1987 08:58:22.38 - -usa - - - - - -F -f0942reute -d f BC-TECHNOLOGY/NEW-ERA-FO 03-09 0109 - -TECHNOLOGY/NEW ERA FOR INFORMATION HANDLING - By Lawrence Edelman, Reuters - NEW YORK, March 9 - Ground-breaking new systems for storing -and retrieving information are ushering in a new era for -computer companies and computer users. - Within the past few weeks, International Business Machines -Corp <IBM>, Eastman Kodak Co <EK> and others have launched -products that radically increase the amount of data that can be -catalogued and shelved in computerized libraries. - "This flurry of new technology could yield systems that -handle a multimedia blitz of data," said Ian Warhaftig, a -senior analyst with International Data Corp, Framingham, Mass. - "We're developing new systems because our customers are -asking for them," Peter Giles, vice president and general -manager of Kodak's mass memory division, said in a recent -interview. - This demand is expected to soar in coming years. While -estimates vary, industry analysts project that providing -products and services geared for information storage and -retrieval could become a 20 billion dlr a year business by -1995. - A wide range of technologies will be needed to meet the -varying requirements of users. - For example, a large credit verification service would want -a system from which it could quickly retrieve credit data and -relay it to its clients. A law firm, however, may need a -computerized law library in which capacity, rather than speed, -is the key feature. For architects and engineers, the ability -to store photographs, sketches and other graphics would be -crucial. - Regardless of the specific application, the trend is toward -converting information - documents, video or film or even sound -recordings - into to the digital language of zeros and ones -understood by computers. - Saving space is the key goal in digitizing data for -storage. An optical disk the size of a standard compact disk -can store 550 megabytes of data, or about 250,000 pages of -typewritten text. - For this reason, the compact disk read-only memory, or -CD-ROM, is already a popular data storage media. Last week, -Microsoft introduced Microsoft Bookshelf, a 300 dlr program -that contains, on a single CD-ROM disk, a dictionary, -thesaurus, national ZIP code directory, Bartlett's Familiar -Quotations, the World Almanac and other reference works. - Scores of such products are already on the market, but most -are specialty items, such as Lotus Development Corp's <LOTS> -CD-ROM data base of stock information for financial analysts -and investors. "Microsoft Bookshelf is important because it -marks the arrival of CD-ROM packages for the general public," -said Ian Warhaftig of International Data Corp. - One drawback of the CD-ROM, which uses a laser to record -and read data, is that that it requires a special player. -CD-ROM players for the retail market will appear later this -year. - Moreover, IDC's Warhaftig said CD-ROM's will be integrated -with personal computers. - "Eventually, CD-ROM's will fit right inside the PC box," he -said. "Imagine the advantage of having a spelling checker and -thesaurus at your fingertips when you're writing with a word -processing program." - But CD-ROM's are just the beginning. Also last week, Kodak -unveiled several systems that use 12-inch optical disks. The -largest Kodak system uses a jukebox-like cabinet to hold up to -150 optical disks from which data can be retrieved in a matter -of seconds. - Kodak also announced a 14-inch optical disk with 6.8 -gigabytes of memory, five times the memory of a CD-ROM. The -Kodak disk, which will not be available until the middle of -1988, is designed for users who need quick access to very large -amounts of data, said Kodak's Giles. - Meanwhile, N.V. Philips <PGLO.AS>, the Dutch electronics -giant, is preparing to take optical disk technology a step -further with the first disk that can combine text, video and -sound. Philips said the system, called Called CD-Interactive, -will be ready next year. It will include a new kind of CD-ROM -player that can hook up with a television set and stereo. - Additional breakthroughs are expected as the next -generation of computer memory chips are introduced. Last month -IBM said it has made a four-megabyte chip, capable of storing -more data than eight CD-ROM's. Meantime, <Nippon Telegraph and -Telephone> of Japan said it has built a 16-megabyte chip. - Analysts say commercial versions of these chips are several -years away, though some suspect that IBM may start volume -production of its four-megabyte chip sometime this year. - Such chips will enable computer makers to build computers -with immense memory capacities. - - Reuter - - - - 9-MAR-1987 09:01:34.94 -ship -brazil - - - - - -C G L M T -f0951reute -u f BC-BRAZIL-SEAMEN-CONTINU 03-09 0114 - -BRAZIL SEAMEN CONTINUE STRIKE DESPITE COURT - RIO DE JANEIRO, March 9 - Hundreds of marines were on alert -at 11 key Brazilian ports after 40,000 seamen decided to remain -on indefinite strike, even after the Higher Labour Court -Saturday ruled it illegal, union leaders said. - The halt, the first national strike by seamen in 25 years, -started on February 27, and union leaders said they would not -return to work unless they got a 275 pct pay rise. Shipowners -have offered a 100 per cent raise, which the seamen rejected. - "We have nothing to lose. If they want to lay off the -workers, fine, but we are determined to carry on with our -protest until the end," a union leader said. - more - He said they had decided in a meeting that if the marines -take over the ships, the seamen would abandon the vessels and -let the marines handle the situation by themselves. - A spokesman for the Rio de Janeiro Port said the order to -send marines to take over the ports was given by Navy Minister -Henrique Saboya on grounds that ports are areas of national -security. But he said there were no incidents. The strike has -cut exports and imports and made an estimated 160 ships idle. - Petrol station owners in four states also continued their -shutdown and there were fears that the combination of the two -stoppages could lead to a serious fuel shortage. - Reuter - - - - 9-MAR-1987 09:06:39.94 - -usa - - - - - -F A -f0971reute -r f BC-BANKING-TRADE-GROUP-S 03-09 0098 - -BANKING TRADE GROUP SAYS BANK PROFITS DOWN - WASHINGTON, March 9 - The American Bankers Association said -the profitability of the nation's commercial banks declined by -12 pct during the first three quarters of 1986. - During the first nine months of last year, the industry's -annualized rate of return on assets dropped to 0.68 pct from -0.77 pct in the same period in 1985, the ABA said. Return on -equity fell to 10.8 pct from 12.3 pct the previous year. - Despite the decline in profits, the ABA said banks' capital -grew boosting the industry's capital ratio to 6.4 pct from 6.3 -pct. - The number and size of banks losing money during the period -increased significantly, the ABA said. - During the first nine months of 1986, 17.5 pct of banks, -holding 9.6 pct of banking assets, were unprofitable, the group -said. That compares with 13 pct of banks, holding 8.8 pct of -assets, during the same period in 1985, it said. - The industry's provisions for loan losses increased to 0.73 -pct of assets during the period, up from 0.59 pct of assets -during the same period in 1985, the group said. - Reuter - - - - 9-MAR-1987 09:08:09.30 - -usa - - - - - -F -f0975reute -r f BC-PAPER-INSTITUTE-SEES 03-09 0074 - -PAPER INSTITUTE SEES STRONG PAPER MARKET IN '87 - NEW YORK, March 9 - The American Paper Institute said the -industry is headed for another year of record volume in 1987, -with linerboard particularly strong. - "A pro-growth trade policy, continued attention to currency -management, a fairly low interest rate climate and no major tax -increases are the essential ingredients in this outlook," Red -Cavaney, American Paper Institute president said. - Cavaney said that so far this year the industry's -performance mimics last year's strength. - Last year, he said, paper and paperboard production hit a -record 71 mln tons, 5.9 pct above 1985's 67 mln tons, while -industry after-tax profits in 1986 exceeded 1985 profits. - Cavaney said that inventories will play a major role in -this year's performance. - "Inventories, which are generally low, are a positive -factor in the industry's outlook this year," he said, citing -market pulp stocks, which are currently at 21 days supply, at -the low end of the industry's long term average. - Cavaney added that as a result of slimmer inventories in -1986 and in the early part of this year, shipments for 1987 as -a whole will be higher than last year, even if demand slackens. - Cavaney said, however, he expects demand this year to be -strong, spurred by consumer spending. - The benefits of tax reform on individual after-tax income -and consumer goods companies' cash flow, he said, will increase -demand for both communications paper and packaging this year. - In addition, Cavaney said low mortgage rates should support -high levels of housing starts in 1987, increasing demand for -many kinds of packaged goods. - Inventory building should help demand for cartons and -corrugated containers this year, he added. - Cavaney said he expects exports to remain fairly high in -1987, as well, as a result of the recent declines in the dollar -against major world currencies. - But more importantly, he said, an improved balance of trade -in 1987 from the lower dollar would induce increased industrial -activity at home and thus higher packaging demand. - Cavaney said increased competitiveness, caused by lower -costs, higher productivity and improved efficiency would also -contribute to a strong showing from the industry this year. - Cavaney said, however, that the Tax Reform Act of 1986 -could have a negative impact on the industry this year. - "For manufacturers, the removal of the investment tax -credit creates an impediment to future investment," he said. - Also, he said API estimates the industry will lose three -billion dlrs in cash flow over a five year period as a result -of reforms. - "Adjustments to this loss will require time and careful -evaluation and will adversely affect the capital spending -decisions of individual companies," Cavaney said. - Reuter - - - - 9-MAR-1987 09:11:10.46 -money-fxgnp -belgiumwest-germany - -ec - - - -RM -f0984reute -r f BC-BONN-SERIOUS-ABOUT-CU 03-09 0090 - -BONN SERIOUS ABOUT CURRENCY PACT, SAYS TIETMEYER - BRUSSELS, March 9 - West Germany takes "very seriously" the -recent undertaking by major industrial countries to promote -exchange rate stability around current levels, Finance Ministry -State Secretary Hans Tietmeyer said. - Talking to journalists before a meeting of European -Community Economy and Finance Ministers here, Tietmeyer -declined to say whether the February 22 Paris accord by the -Group of Five countries plus Canada included secret agreements -for stabilising currencies. - But he noted the official communique said the participants -agreed to cooperate closely to foster stability of exchange -rates around current levels. "We're taking this sentence very -seriously," he said. - Tietmeyer remarked that the dollar had hardly moved against -the mark since the meeting. - He said a slowdown in West German economic growth had been -caused by sharp exchange rate swings and that the Paris -agreement should help in this respect. - Economics Ministry State Secretary Otto Schlecht said the -Bonn government saw no current need for measures to bolster the -economy but was paying close attention to the slower growth and -had not ruled out "appropriate and timely" action if necessary. - Schlecht and Tietmeyer were speaking ahead of a discussion -by the EC ministers of the latest EC Commission report on the -economic situation in the 12-nation bloc. - The Commission has sharply revised down expected German -gross national product growth this year to two pct from 3.2 pct -predicted last autumn and says Bonn has the most room of any EC -country to stimulate economic activity. - Schlecht said the upturn in West Germany's economy slowed -in the fourth quarter of last year and the first quarter of -1987. But he said there was no cumulative downwards trend in -view that would make quick remedial action necessary. - He said a number of favourable indicators such as high -level of investment and a good climate for consumption meant a -recovery could be expected, while exports would pick up -slightly during the course of the year. - REUTER - - - - 9-MAR-1987 09:11:41.38 - -saudi-arabia - - - - - -RM -f0986reute -r f BC-SAUDI-FRENCH-BANK-TO 03-09 0109 - -SAUDI-FRENCH BANK TO DOUBLE PAID-UP CAPITAL - JEDDAH, March 9 - <Al Bank Al Saudi Al Fransi>, also known -as Saudi-French, will double paid-up capital to 400 mln riyals -from 200 mln by converting reserves into equity, bank officials -said. - Jeddah-based Saudi-French, 40 pct owned by Banque Indosuez -and 60 pct by the Saudi public, will sign a technical services -agreement with Indosuez in Riyadh on Tuesday for management of -the bank over the next five years, they said. - The officials said the increase in paid-up capital, -doubling the number of shares held by shareholders, will add -depth to the market and extend trading to more investors. - REUTER - - - - 9-MAR-1987 09:12:08.15 - -usa - - - - - -F -f0988reute -u f BC-COMPAQ-COMPUTER-<CPQ> 03-09 0031 - -COMPAQ COMPUTER <CPQ> HAS NEW DESKTOP COMPUTER - HOUSTON, March 9 - Compaq Computer Corp said it has -introduced a new 12 megahertz desktop personal computer called -the Compaq Deskpro 286R. - More - - - - 9-MAR-1987 09:12:30.97 -coffee -uganda - -ico-coffee - - - -T C -f0990reute -u f BC-UGANDA-DISAPPOINTED-B 03-09 0129 - -UGANDA DISAPPOINTED BY COFFEE TALKS FAILURE - KAMPALA, March 9 - Uganda, Africa's second largest coffee -producer, was disappointed by the stalemate in recent coffee -talks in London, the chairman of the state-run Coffee Marketing -Board, CMB, said. - "This has not been good for coffee producers, more so in a -situation where the prices dropped by 200 pounds per tonne of -robusta coffee," J. Makumbi said when he returned from London on -Friday. - Producers and consumers failed to agree on a quota formula -to share the world's coffee production during International -Coffee Organisation, ICO, talks that ended last week. - Makumbi blamed the failure to set quotas, which were -suspended in Feburary last year, on Indonesian demands that its -quota be increased dramatically. - Uganda -- which earns about 400 mln dlrs annually from -coffee exports, over 95 pct of its foreign exchange earnings -- -had sought to raise its ICO quota to 3.0 mln from 2.45 mln -60-kilo bags, according to sources close to the CMB. - The CMB has estimated that production will rise 20 to 25 -pct in the current 1986/87 October-September season to over -three mln bags. - For several years Uganda had been unable to meet its ICO -export quota as rebel activity disrupted the coffee industry. - The Ugandan government depends on coffee export duties for -about 60 pct of its sales tax revenue and the industry employs -over half of salaried manpower. - In Dar es Salaam, Tanzania's Agriculture and Livestock -Development Minister Paul Bomani said today Third World -countries would suffer from the failure of the London coffee -talks. - "It is only the middlemen who will benefit, he said. - Bomani called on the ICO to convene another meeting within -two months, saying, "Once tempers have cooled and delegations -have had time to report back to their headquarters, common -sense will prevail." - Reuter - - - - 9-MAR-1987 09:17:04.78 -acq - - - - - - -F -f0001reute -f f BC-Chrysler-to-take-over 03-09 0012 - -****** Chrysler to take over Renault stake in American Motors, says Renault -Blah blah blah. - - - - - - 9-MAR-1987 09:17:44.88 -meal-feed -usahungary - - - - - -C G -f0005reute -r f BC-ADDITIONAL-CCC-CREDIT 03-09 0127 - -ADDITIONAL CCC CREDIT GUARANTEES FOR HUNGARY - WASHINGTON, March 9 - The Commodity Credit Corporation, -CCC, has authorized an additional 8.0 mln dlrs in credit -guarantees for sales of vegetable protein meals to Hungary for -fiscal year 1987, the U.S. Agriculture Department said. - The additional guarantees increase the vegetable protein -meal credit line to 16.0 mln dlrs and increases the cumulative -fiscal year 1987 program for agricultural products to 23.0 mln -dlrs from 15.0 mln, it said. - The department also announced an extension of the export -period from September 30, 1987, to December 31 for sales of -vegetable protein meals. - To be eligible for the credit guarantees all sales must be -registered before export but not later than September 30. - Reuter - - - - 9-MAR-1987 09:20:38.92 -earn - - - - - - -F -f0010reute -b f BC-******southern-co-to 03-09 0012 - -******SOUTHERN CO TO TAKE 226 MLN DLR CHARGE ON PROJECTED VOGTLE COST RISE -Blah blah blah. - - - - - - 9-MAR-1987 09:21:19.67 -acq -usa - - - - - -F -f0014reute -r f BC-APPLIED-CIRCUIT<ACRT> 03-09 0091 - -APPLIED CIRCUIT<ACRT> SELLS ELECTRONICS BUSINESS - ANAHEIM, Calif., March 9 - Applied Circuit Technology Inc -(ACT) said it has agreed in principal to sell its primary -computer electronics business to the <Sanpao Group> of San -Francisco. - ACT said it has not disclosed the deal's terms, but added -that 50 pct of the sale price is in cash, with the remainder to -be paid over a two year period. - The deal is expected to close on March 31, ACT said. - ACT said it made the move to concentrate resources on its -pharmaceuticals subsidiaries. - Reuter - - - - 9-MAR-1987 09:24:32.21 -acq -usa - - - - - -F -f0030reute -u f BC-USAIR-<U>-ACQUIRES-9. 03-09 0107 - -USAIR <U> ACQUIRES 9.9 PCT OF PIEDMONT <PIE> - WASHINGTON, D.C., March 9 - USAir Group Inc said it has -acquired 2,292,599 Piedmont Aviation Inc shares, about 9.9 pct -on a fully diluted basis, from Norfolk Southern Corp <NSC>. - The acquisition of Piedmont by USAir has been approved by -the directors of both companies. - USAir said it has been advised by Norfolk Southern that the -company supports the proposed merger and intends to tender all -of its remaining 1,477,829 Piedmont common shares in response -to USAir's tender offer which began today. This total includes -shares issuable upon conversion of Piedmont preferred, USAir -noted. - USAir said Piedmont has about 23.1 mln common shares on a -fully diluted basis, adding its offer is conditioned on the -tender of at least 9,309,394 shares, representing 40.2 pct of -the oustanding shares on a diluted basis. - USAir said the 3,491,030 new shares it has an option to buy -represent 18.5 pct of Piedmont's currently outstanding shares. - Reuter - - - - 9-MAR-1987 09:25:10.00 -coffee -brazil - - - - - -T C -f0031reute -r f BC-BRAZILIAN-COFFEE-RAIN 03-09 0059 - -BRAZILIAN COFFEE RAINFALL - SAO PAULO, MARCH 9 - THE FOLLOWING RAINFALL WAS RECORDED IN -THE AREAS OVER PAST 72 HOURS - PARANA STATE: UMUARAMA NIL, PARANAVAI 1.5 MILLIMETRES, -LONDRINA NIL, MARINGA NIL. - SAO PAULO STATE: PRESIDENTE PRUDENTE O.6 MM, VOTUPORANGA -12.0 MM, FRANCA 28.0 MM, CATANDUVA 10.0 MM, SAO CARLOS NIL, SAO -SIMAO NIL. REUTER11:43/VB - - - - 9-MAR-1987 09:25:41.63 -acq - - - - - - -F -f0033reute -f f BC-******GENCORP-TO-SELL 03-09 0011 - -******GENCORP TO SELL LOS ANGELES TELEVISION STATION TO WALT DISNEY CO -Blah blah blah. - - - - - - 9-MAR-1987 09:26:28.51 -acq -usa - - - - - -F -f0035reute -d f BC-NATIONWIDE-CELLULAR-< 03-09 0073 - -NATIONWIDE CELLULAR <NCEL> COMPLETES PURCHASE - VALLEY STREAM, N.Y., March 9 - Nationwide Cellular Service -Inc said it has completed the previously-announced acquisition -of privately-held Nova Cellular Co, a Chicago reseller of -mobile telephone service with 1,800 subscribers, for about -65,000 common shares. - Nova Cellular has an accumulated deficit of about 650,000 -dlrs and had revenues of about 2,600,000 dlrs for 1986, it -said. - Reuter - - - - 9-MAR-1987 09:27:57.44 -interest -uk - - - - - -C G T M -f0038reute -u f BC-NATIONAL-WESTMINSTER 03-09 0092 - -NATIONAL WESTMINSTER BANK CUTS BASE RATE - LONDON, March 9 - National Westminster Bank Plc said it has -cut its base lending rate 0.5 percentage points to 10.5 pct -today. - National Westminster said it was responding to general -easing in money market rates. - Its move followed a signal from the Bank of England earlier -this afternoon that it would endorse a half point cut in the -base rate, a surprise move following its strong signals last -week that such a move would be premature. - However, since then the pound has continued to gain -strongly. - Reuter - - - - 9-MAR-1987 09:30:35.65 -money-fxinterest -uk - - - - - -RM -f0039reute -b f BC-U.K.-MONEY-MARKET-GIV 03-09 0096 - -U.K. MONEY MARKET GIVEN FURTHER HELP AT NEW RATES - LONDON, March 9 - The Bank of England said it provided the -market with further assistance during the afternoon, buying -bills worth 166 mln stg at the lower rates introduced this -morning. - It bought 45 mln stg of local authority bills plus 27 mln -stg of bank bills in band one at 10-3/8 pct together with 94 -mln stg of band two bank bills at 10-5/16 pct. - The bank also revised its estimate of the market shortage -up to 300 mln stg from 250 mln this morning. It has given total -assistance of 213 mln stg today. - REUTER - - - - 9-MAR-1987 09:30:53.98 - -usa - - -cbtcme - - -C -f0040reute -u f BC-CBT,-CME-HEADS-TO-ADD 03-09 0125 - -CBT, CME HEADS TO ADDRESS CFTC COMMITTEE - WASHINGTON, March 9 - The heads of the Chicago Board of -Trade, CBT, and the Chicago Mercantile Exchange, CME, are to -address a meeting of the Commodity Futures Trading Commission's -financial products advisory committee March 11 in Chicago, CFTC -said. - CBT Chairman Karsten Mahlmann will present the objectives -and views of the CBT's ad hoc committee on off exchange trading -issues, CFTC said. - CME President William Brodsky is set to discuss current -issues involving equity index markets, including factors -affecting price volatility, changes in settlement procedures, -margin changes and price limits. - The CFTC committee, headed by Commissioner Robert Davis, -examines financial futures market issues. - Reuter - - - - 9-MAR-1987 09:31:21.09 -ship -hong-kongjapan - - - - - -F -f0043reute -r f BC-HUTCHISON-UNIT-BUYS-C 03-09 0075 - -HUTCHISON UNIT BUYS CONTAINER CRANES FROM JAPAN - HONG KONG, March 9 - Container port operator, <Hong Kong -International Terminals Ltd>, a 89 pct held unit of Hutchison -Whampoa Ltd <HWHH.HK>, said it has placed a 164 mln H.K. Dlr -order for seven quayside container cranes of 800 tons each with -Japan's Mitsui Engineering and Shipbuilding Co Ltd <MSET.T> for -May 1988 to August 1989 delivery. - Hong Kong International Terminals operates 32 cranes. - REUTER - - - - 9-MAR-1987 09:32:01.67 -ship -turkey - - - - - -C G T M -f0046reute -d f BC-BOSPHORUS-SHIPPING-MO 03-09 0111 - -BOSPHORUS SHIPPING MOVES, ISTANBUL OFFICES CLOSE - ISTANBUL, March 9 - Istanbul remained at a virtual -standstill today under snow up to a meter deep but shipping was -moving through the narrow Bosphorus waterway linking the Sea of -Marmara and the Black Sea, officials said. - The authorities ordered government offices closed until -Wednesday. Many banks, businesses and schools stayed shut as -workers struggled to keep main roads and supply lines open in -this city of 6.5 mln people. - The second blizzard to hit Istanbul in a week stopped -yesterday afternoon and the international airport reopened -today after a two-day closure. It was also shut earlier last -week. - Reuter - - - - 9-MAR-1987 09:32:40.79 -crude -ecuador - -opec - - - -V -f0048reute -u f BC-ECUADOR-TO-EXPORT-NO 03-09 0113 - -ECUADOR TO EXPORT NO OIL FOR 4 MONTHS, OFFICIAL - By WALKER SIMON, Reuters - QUITO, March 9 - The suspension of Ecuador's crude oil -shipments after an earthquake cut an oil pipeline will last at -least four months, a senior Energy Ministry official said. - The official said Ecuador could resume exports after -repairing a 40 km section of the 510 km pipeline, which links -jungle oil fields at Lago Agrio to Balao on the Pacific coast. -It would take about 100 mln U.S. Dlrs to repair the pipeline, -the official, who did not want to be named, told Reuters. -Ecuador had enough oil to meet domestic demand for about 35 -days and would have to import crude to supplement stocks. - The earthquake last Thursday night registered six on the -12-point international Mercalli scale. The damage to the -pipeline was a severe economic blow to Ecuador, where oil -accounts for up to two-thirds of total exports and as much as -60 pct of government revenues. - Financially pressed Ecuador, a member of the Organisation -of Petroleum Exporting Countries (OPEC), was recently pumping -about 260,000 barrels per day (bpd) of crude, about 50,000 bpd -above the output quota assigned by the cartel, another Energy -Ministry spokesman said. Last year, it exported an average of -173,500 bpd, according to the central bank. - However, Ecuador might build an emergency 25 km pipeline, -costing 15 to 20 mln dlrs, to hook up with a Colombian -pipeline, the first official said. He estimated it could take -about 60 days to build. - Ecuador, squeezed by the slide in world oil prices in 1986, -had only 138 mln dlrs in net international reserves at the end -of January, about equal to one month's imports. - It suspended interest payments in January on 5.4 billion -dlrs owed to about 400 private foreign banks. The country's -total foreign debt is 8.16 billion dlrs, the eighth largest in -Latin America. - In Caracas, President Jaime Lusinchi said Venezuela would -loan five mln barrels of crude to Ecuador over the next three -months to make up for losses from damage to the pipeline. - Ecuador asked for the loan to guarantee domestic supplies -and would ship an equivalent volume back to Venezuela in -repayment in May, Lusinchi said. - A commission headed by Venezuelan Investment Fund Minister -Hector Hurtado and including representatives from the interior -and defence ministries and the state oil company Petroleos de -Venezuela will travel to Ecuador Tuesday to evaluate and -co-ordinate an emergency relief program, he said. - REUTER - - - - 9-MAR-1987 09:33:35.86 -money-supply -france - - - - - -RM -f0056reute -f f BC-FRENCH-JAN-M-3-MONEY 03-09 0015 - -******FRENCH JAN M-3 MONEY SUPPLY ROSE PROV ADJUSTED ONE PCT (O.7 PCT FALL IN DEC) - OFFICIAL. -Blah blah blah. - - - - - - 9-MAR-1987 09:35:55.99 - -greeceitaly - - - - - -C G T M -f0067reute -d f PM-GREECE-BLIZZARDS 03-09 0109 - -HEAVY SNOWS HIT GREECE, ITALY - ATHENS, March 9 - Blizzards lashed Greece today, piling up -to 10 feet of snow in places and paralyzing transport in what -state radio called unprecedented weather conditions for this -time of year. - Except for a handful of flights of the national airline -Olympic Airways that took off before the blizzards started, all -air traffic in and out of the Athens international airport was -canceled, radio said. - The weather service said heavy snowfalls would continue for -several hours. - Cold weather also hit southern and eastern Italy. Heavy -snowfalls caused long delays and difficulties for road, rail -and air traffic. - Reuter - - - - 9-MAR-1987 09:39:30.30 -rubber -malaysia - - - - - -T -f0080reute -r f BC-MALAYSIA-SAYS-RUBBER 03-09 0138 - -MALAYSIA SAYS RUBBER PACT DEPENDS ON CONSUMERS - KUALA LUMPUR, March 9 - Malaysia said the success of talks -opening today on a new International Natural Rubber Agreement -(INRA) depends on how flexible consumer countries are. - Rubber producer and consumer countries meet for 12 days in -Geneva from tomorrow to try to hammer out a rubber pact after -they failed to reach agreement last November to replace the -current accord, which expires next October. - Primary Industries Minister Lim Keng Yaik said in a -statement that Malaysia wants to continue with a second INRA -and is prepared to accept modifications that would strengthen -the present agreement. - He said the second INRA would allow for an orderly disposal -of the accumulated buffer stock of 375,000 tonnes, since the -market is now capable of absorbing such releases. - Reuter - - - - 9-MAR-1987 09:39:45.70 - -sweden - - - - - -RM -f0081reute -u f BC-PHARMACIA-AB-LAUNCHES 03-09 0115 - -PHARMACIA AB LAUNCHES EUROCOMMERCIAL PAPER PROGRAMME - STOCKHOLM, March 9 - Pharmacia AB said it was launching a -200 mln dlr Eurocommercial paper programme as part of a move to -internationalise the company's financing. - Market makers will be Credit Suisse First Boston, Morgan -Stanley International and Svenska Handelsbanken PLC. - Pharmacia treasurer Bertil Tiusanen said gaining direct -access to the short term international capital market would -improve its ability to meet its dollar borrowing requirement. - He said it was a natural step for an internationally known -company whose shares are noted in Tokyo and Stockholm and are -traded over the counter in the United States. - REUTER - - - - 9-MAR-1987 09:40:54.41 -acq -usa - - - - - -F -f0084reute -u f BC-MCDOWELL-<ME>-TO-MERG 03-09 0103 - -MCDOWELL <ME> TO MERGER WITH <INTERPHARM INC> - NASHVILLE, Tenn., March 9 - McDowell Enterprises Inc said -it has signed a definitive agreement to acquire an 80 pct -interest in privately held Interpharm Inc for a 19.9 pct -interest in McDowell. - The company said subject to contigencies, including future -sales and profit levels, McDowell could over a four-year period -acquire 100 pct of Interpharm in exchange for up to 51 pct of -McDowell's voting stock. - It said the transaction is expected to be completed within -60 days, at which time the McDowell board would be restructured -to include Interpharm management. - Reuter - - - - 9-MAR-1987 09:41:09.67 - -usa - - - - - -F -f0085reute -r f BC-FEDERAL-HOME-MORTAGE 03-09 0108 - -FEDERAL HOME MORTAGE BUYS FUNDS FROM LENDER - CHARLOTTE, N.C., March 9 - The Federal Home Mortgage Corp -announced the sale of 400 mln dlrs for residential mortgages to -First Union Corp's mortgage subsidiary. - Freddie Mac said that First Union Mortgage Corp already -swapped 70 mln dlrs of new residential mortgages to Freddie Mac -in the first phase of the contract. - Freddie Mac said buy selling 400 mln dlrs worth of -mortages, it makes more mortgage money available. It said -through its guarantor program, First Union will be allowed to -convert its investment-quality mortgages into mortgage-backed -securities accepted in capital markets. - Freddie Mac explained that the securities can be used as -collateral for borrowings, sold to other investors, or employed -in a variety of cash management techniques. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-004.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-004.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-004.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-004.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2023 +0,0 @@ - - -11-MAR-1987 18:04:17.59 - -canada - - - - - -M -f0849reute -d f BC-INCO-SEES-NO-MAJOR-IM 03-11 0133 - -INCO SEES NO MAJOR IMPACT FROM DOW REMOVAL - TORONTO, March 11 - Inco Ltd said it did not expect its -earlier reported removal from the Dow Jones industrial index to -make a major impact on the company's stock. - "We don't think that individuals or institutions buy our -shares because we were one of the Dow Jones industrials," -spokesman Ken Cherney said in reply to a query. - Inco closed 1-3/8 lower at 19-3/8 in second most active -trading on the Toronto Stock Exchange. - The Wall Street Journal, which selects the index, said Inco -was dropped to make the index more representative of the -market. Inco, the non-Communist world's largest nickel -producer, was a member of the index since 1928. - Replacing Inco and Owens-Illinois Inc will be Coca-Cola Co -and Boeing Co, effective tomorrow. - Nickel analyst Ilmar Martens at Walwyn Stodgell Cochran -Murray Ltd said Inco's removal from the index would likely -spark short-term selling pressure on the stock. - "Some investors who have Inco may suddenly say, 'well, -because it's not now a Dow stock, we should eliminate that -investment,'" said Martens, although he added the move was -unlikely to have a serious long-term impact on Inco stock. - Inco has struggled in recent years against sharply lower -nickel prices. Its net earnings fell to 200,000 U.S. dlrs in -1986 from 52.2 mln dlrs the previous year. - Reuter - - - -11-MAR-1987 18:06:47.22 - -usa - - - - - -F -f0852reute -d f BC-FORMER-EMPIRE-OF-CARO 03-11 0107 - -FORMER EMPIRE OF CAROLINA <EMP> EXEC SENTENCED - NEW YORK, March 11 - Mason Benson, former president and -chief operating officer of Empire of Carolina Inc, a toy maker, -today was sentenced in Manhattan federal court to a year and -one day in jail for his involvement in a kickback scheme. - Benson pleaded guilty to charges of conspiracy, tax -evasion, filing false corporate tax returns and defrauding the -company's shareholders. He was also fined 5,000 dlrs. - Benson was charged with demanding kickbacks from sales -representatives who were asked to turn over a portion of their -commisisons as a condition for doing business with Empire. - Reuter - - - -11-MAR-1987 18:09:39.66 - -usa - - - - - -F -f0856reute -h f AM-AIDS 03-11 0095 - -DOCTORS FIND LINK BETWEEN AIDS, SMALLPOX VIRUS - BOSTON, March 11 - In a discovery that could complicate the -search for an AIDS vaccine, a team of U.S. Army doctors said -they have uncovered a potentially-fatal interaction between the -AIDS virus and a virus used to protect against smallpox. - Physicians at the Walter Reed Army Institute of Research -said a 19-year-old man, who apparently had been exposed to the -AIDS virus, developed a pox-like disease and died after -receiving the smallpox vaccine. The military now tests recruits -for AIDS before vaccinating them. - The findings, reported in The New England Journal of -Medicine, are significant because scientists have begun working -on an AIDS vaccine that relies on the smallpox vaccine. - "Our case report raises provocative questions concerning -the ultimate safety of such vaccines," said the group led by -Dr. Robert Redfield. - The report also throws into question the belief held by -some scientists that the smallpox vaccine, which exposes people -to a milder, protective form of the disease known as cowpox, -could be further modified to protect people against a host of -other diseases. - Reuter - - - -11-MAR-1987 18:13:59.93 - -usa - - - - - -F -f0860reute -d f AM-CANCER 03-11 0107 - -BIRTH CONTROL PILLS HELP PREVENT CANCER - STUDY - BOSTON, March 11 - Doctors at the Centers for Disease -Control in Atlanta said they have new evidence that birth -control pills can help provide long-term protection from cancer -of the ovary, even if the pills are only taken for a few -months. - The study, reported in the New England Journal of -Medicine, also found that all the various types of oral -contraceptives on the market were equally effective in lowering -the rate of ovarian cancer. - The researchers estimated that the use of birth control -pills in this country probably prevented about 1,700 cases of -ovarian cancer in 1982. - As more and more women who have taken oral contraceptives -"move into the age groups that are at highest risk for -epithelial ovarian cancer we may witness a declining incidence -of this serious disease," they said. - Specifically, the team led by Dr. Howard Ory found that -"oral contraceptive use, even for a few months, reduces the -risk of epithelial ovarian cancer by 40 percent for women 20 to -54 years of age. - "The effect probably takes from five to ten years to -become apparent, but it persists long after the use of oral -contraceptives ends. Moreover, protection exists regardless of -the formulation of oral contraceptive used," they said. - Reuter - - - -11-MAR-1987 18:14:49.93 -interestretailipi -usa - - - - - -RM C -f0861reute -u f BC-fin-futures-outlook 03-11 0103 - -U.S. ECONOMIC DATA KEY TO DEBT FUTURES OUTLOOK - By Brad Schade, Reuters - CHICAGO, March 11 - U.S. economic data this week could be -the key in determining whether U.S. interest rate futures break -out of a 3-1/2 month trading range, financial analysts said. - Although market expectations are for February U.S. retail -sales Thursday and industrial production Friday to show healthy -gains, figures within or slightly below expectations would be -positive for the market, the analysts said. - "You have to be impressed with the resiliency of bonds -right now," said Smith Barney Harris Upham analyst Craig -Sloane. - Treasury bond futures came under pressure today which -traders linked to a persistently firm federal funds rate and a -rise in oil prices. However, when sufficient selling interest -to break below chart support in the June contract failed to -materialize, participants who had sold bond futures early -quickly covered short positions, they said. - "Everyone is expecting strong numbers, and if they come in -as expected it won't be that bad for the market," Sloane said. - Sloane said the consensus estimate for the non-auto sector -of retail sales is for a rise of 0.6 to 0.7 pct. - Dean Witter analyst Karen Gibbs said a retail sales figure -below market forecasts would give a boost to debt futures, and -she put the range for the non-auto sector of retail sales at up -0.8 to 1.2 pct. - Industrial production and the producer price index Friday -both are expected to show increases of about 0.5 pct, she -added. - Retail sales "will tell us whether or not we will be able -to fill the gap," Gibbs said, referring to a chart gap in June -bonds between 100-26/32 and 101-3/32 created Friday. June bonds -closed at 100-4/32 today. - Also key to debt futures direction, in addition to the -federal funds rate, is the direction of crude oil prices, said -Carroll McEntee and McGinley Futures analyst Brian Singer. - "A higher fed funds rate and firm oil prices precluded the -market from breaking out of the trading range the last time the -market approached the top of the range," Singer said. - In order for bonds to break above the top of the range, -which is just below 102 in the June contract, "the crude oil -rally needs to run its course and pull back a little bit," -Singer said. "Fed funds are already easing back down toward the -six pct level." - The recent surge in oil prices has also been a concern to -Manufacturers Hanover Futures analyst Jim Rozich, but the rally -may be nearing a top around 18.50 dlrs per barrel, he said. - Rozich said he is looking for the June bond contract to -ease to 99-6/32 and find support. - "I'm not quite ready to jump on the bullish bandwagon yet. -The jury is still out this week," Rozich said. - Reuter - - - -11-MAR-1987 18:15:09.97 - -usa - - - - - -C G L M T -f0863reute -d f AM-AID 03-11 0106 - -U.S. "ACTION PROGRAM" FOR SUB-SAHARAN AFRICA - WASHINGTON, March 11 - The Reagan administration, -responding to last year's United Nations special session on -Africa, today outlined a U.S. "action program" for sub-Saharan -Africa focusing heavily on economic reform and self-help. - A White House statement announced establishment of "a -long-term U.S. goal for all U.S. economic programs and policies -in sub-Saharan Africa: to end hunger in the region through -economic growth, policy reform and private sector development." - The statement said the "program of action" was recommended by -a White House task force set up last September. - In a series of recommendations, the task force called for -new efforts to address Africa's heavy debt burden and said U.S. -food aid should stress production incentives to reinforce -African nations' economic reform and productivity. - It also said better African access to world markets should -be promoted to reward good performance and enable African -nations to earn their way toward economic growth. - The U.S. private sector should be mobilized to provide -"private, voluntary and corporate involvement of a humanitarian - It said donor countries "should negotiate, through the -existing International Monetary Fund/World Bank coordination -process, framework agreements with each sub-Saharan African -country to establish long-term structural adjustment and reform -programs." - The task force called for a separate budget account for -U.S. bilateral aid "in order to focus better on rewarding -economic performance and increasing the flexibility of U.S. -assistance programs for incentive economic reforms and private -sector development." - Reuter - - - -11-MAR-1987 18:16:09.87 - -usa - - - - - -F A RM -f0867reute -r f BC-UNUSUAL-TEXAS-INSTRUM 03-11 0091 - -UNUSUAL TEXAS INSTRUMENTS <TXN> PREFERRED PRICED - NEW YORK, March 11 - In a novel type of financing, Texas -Instruments Inc marketed a three-part, 225 mln dlr issue of -convertible money market preferred stock through Shearson -Lehman Brothers Inc as sole manager. - Shearson, which originated the new convertible concept, -said each of the three tranches totaled 75 mln dlrs. In the -first, a 2.85 pct dividend was set on the stock with a strike -price of 190 dlrs that represented a 15 pct premium over the -common stock price when terms were set. - Also included were 4.36 pct dividend preferred with a 220 -dlr strike price and 33 pct premium and 4.49 pct dividend -preferred with a 235 dlr strike price and 42 pct premium. - Texas Instruments common closed at 167.25 dlrs, up 2-1/8. - Ronald Gallatin, managing director at Shearson, said that -"demand for the offering was unbelievable, especially for the -first tranche." - He said that Shearson originated the concept of auction -money market preferred stock three years ago. The conversion -feature of this issue is the new wrinkle. - Commenting on the first tranche, Gallatin noted that the -original pricing talk called for a dividend in the four to 4.20 -pct area. This was gradually cut to 2.85 pct because of intense -demand, saving the issuer money in financing costs. - The Shearson official said that virtually all buyers of the -first tranche received less than they wanted. He said the -latter two tranches were less strongly oversubscribed. - Like non-convertible money market preferred stock, the new -version allows investors to redeem their holdings every seven -weeks. Investors then can maintain their holdings, sell them, -or offer to hold on to the securities if the auction -dividend is at least at a level they specify in advance. - Gallatin said the securities were sold to a broad range of -investors, including major insurance companies, banks, money -managers and pension funds. - Reuter - - - -11-MAR-1987 18:21:00.31 - -usacanada -james-bakerreagan - - - - -E -f0877reute -r f AM-CANADA-CLARK 03-11 0105 - -CLARK SAYS HE EXPECTS U.S. ACTION ON ACID RAIN - WASHINGTON, March 11 - Canadian Foreign Secretary Joe -Clark, winding up a two-day visit to Washington, said he -expected the Reagan administration to take some action on -reducing acid rain. - "My impression is there will be some movement by the United -States administration on acid rain (but) how much movement I -can't judge or predict," he told reporters. - The meetings with American officials are part of a routine -U.S.-Canada consultation but are also expected to lay the -groundwork for a summit in Ottawa next month between President -Reagan and Prime Minister Brian Mulroney. - Clark today held discussions with Treasury Secretary James -Baker and Democratic Sens. Patrick Moynihan of New York, -Christopher Dodd of Connecticut, Lloyd Bentsen of Texas and -George Mitchell of Maine. - Yesterday, he held talks with Vice President George Bush, -Secretary of State George Shultz and Commerce Secretary Malcolm -Baldrige. - Among its priorities, Canada is seeking evidence that -Reagan is prepared to live up to a commitment made last year to -implement in the United States a five-year 5 billion U.S. dlr -program to test cleaner ways of burning coal. - This issue was discussed at length with Baker and several -of the senators, including Mitchell who urged Canada to "keep -the heat on" the Reagan administration to force action, Canadian -officials said. - Also taken up with most of the senators and Baker were -trade issues, including the need for the United States and -Canada to establish a better mechanism for settling trade -disputes between the two countries, who are each other's major -trading partner, Canadian officials said. - Reuter - - - -11-MAR-1987 18:22:58.57 - -usa - - - - - -F -f0886reute -r f BC-FORD-MOTOR-<F>-DISTRI 03-11 0052 - -FORD MOTOR <F> DISTRIBUTES PROFIT SHARING - DALLAS, March 11 - Ford Motor COr said that profit-sharing -checks were distributed to employees in its U.S. facilities. - About 371 mln dlrs was distributed to 160,253 emplyees. The -average payment per employee was more than 2,100 dlrs compared -with 1,200 in 1985. - - Reuter - - - -11-MAR-1987 18:24:57.40 - -jamaica - - - - - -RM A -f0887reute -u f BC-jamaica-puts-cap-on-b 03-11 0079 - -JAMAICA PUTS CAP ON BORROWING - Kingston, march 11 - jamaica has put a cap on its 3.5 -billion dlr foreign debt and will reduce its obligations by 300 -mln dlrs this year, prime minister edward seaga said today. - Speaking at a news conference, seaga said jamaica has -reached its "maximum stock of debt" and will not undertake any -more borrowing until it is justified by economic growth. - "this year we'll be reducing the stock of debt by 300 -million dollars," he said. - He told reporters his government aims to reduce jamaica's -ratio of debt payments to foreign exchange earnings from the -current 50 pct to 25 pct within three years. - Debt payments this year are expected to total 287 mln -dollars, seaga said. - yesterday jamaica agreed with creditor banks to reschedule -over the next 12 years some 181 miln dlrs due in 1987-89. - The accord includes a grace period on principal payments -for eight and a half years and a reduction of interest rates -from 2.5 to 1.125 pct above libor. - Last week, jamaica obtained a 10-year rescheduling of 100 -pct of principal and 85 pct of interest on 125 mln dollars of -debt to the paris club nations the debt would have fallen due -over the next two years. - Reuter - - - -11-MAR-1987 18:26:24.22 - -usa - - - - - -F -f0888reute -d f AM-SICKLE 03-11 0114 - -FASTER TEST FOR SICKLE CELL ANEMIA DEVELOPED - BOSTON, March 11 - A team of California researchers said -that they have developed a better, faster test for detecting -sickle cell anemia in unborn children than existing procedures. - The test, developed by Cetus Corp <CTUS> researchers, -requires only a small amount of genetic material from a fetus -and produces a diagnosis within a day, unlike other tests that -require several days and can only be done in a few specialized -centers, they said. - Sickle cell anemia is a painful, inherited blood disease -that causes the normally-flexible red blood cells to stiffen -into a sickle-like shape. It is primarily found in blacks. - The researchers said in The New England Journal of Medicine -that their "procedure promises to be a rapid, sensitive and -reliable method for the prenatal diagnosis of sickle cell -disease." - In addition, they said, the technique might also be -adapted to detect other types of genetic disease. - Reuter - - - -11-MAR-1987 18:36:05.15 -earn -canada - - - - - -E F -f0900reute -r f BC-BANK-OF-BRITISH-COLUM 03-11 0060 - -BANK OF BRITISH COLUMBIA 1ST QTR JAN 31 NET - VANCOUVER, British Columbia, March 11 - - Oper shr loss two cts vs profit three cts - Oper net profit 273,000 dlrs vs profit 1,710,000 - YEAR - period ended October 31, 1986 - Oper shr loss 23 cts vs profit 14 cts - Oper net loss 4,397,000 vs profit 7,527,000 - Assets 2.67 billion vs 3.25 billion - Note: 1987 1st qtr net excludes extraordinary loss of 2.2 -mln dlrs or six cts shr. - 1986 yr net excludes extraordinary loss of 66 mln dlrs or -1.94 dlrs shr involving 22.1 mln dlrs of costs from sale of -bank assets to Hongkong Bank of Canada, eight mln dlrs for -contingent liabilities in respect of litigation and potential -tax reassessment by U.S. govt and 35.9 mln dlrs of deferred tax -debits. - Most bank assets sold to HongKong Bank of Canada, a unit of -<Hong Kong and Shanghai Banking Corp> in Nov, 1986. - Shr after preferred divs. - Reuter - - - -11-MAR-1987 18:37:48.60 - -usairan - - - - - -V -f0904reute -u f AM-REAGAN-HAKIM 03-11 0101 - -RAN SCANDAL PARTICIPANT TO GET IMMUNITY OFFER - WASHINGTON, March 11 - Albert Hakim, an arms merchant, is -the first top-ranked player in the Iran arms scandal who may be -enticed into testifying by the promise of immunity, -investigators said. - The House Select committee probing the Iran arms scandal -has voted to grant limited immunity from criminal prosecution -to Hakim in return for his testimony. - Hakim, 51, was said deeply involved from the start in the -attempt to trade arms to Iran for help in freeing American -hostages in Lebanon and the diversion of funds and arms to -rebels in Nicaragua. - - Reuter - - - -11-MAR-1987 18:38:02.32 -earn -usa - - - - - -F -f0905reute -r f BC-RESTAURANT-ASSOCIATES 03-11 0069 - -RESTAURANT ASSOCIATES INC <RA> 4TH QTR JAN 3 - NEW YORK, March 11 - - Shr 25 cts vs 36 cts - Net 1.4 mln vs 1.4 mln - Revs 56.9 mln vs 35.1 mln - Year - Shr 86 cts vs 75 cts - Net 4.7 mln vs 3.0 mln - REvs 201.4 mln vs 140.0 mln - NOTE:1985 4th qtr includes 99,000 loss from carryforward. -Shares restated to give effect to 1.4 to one stock split in the -form a 40 pct class A dividend in August 1985. - Reuter - - - -11-MAR-1987 18:41:59.82 -earn -usa - - - - - -F -f0907reute -r f BC-MICHIGAN-GENERAL-CORP 03-11 0077 - -MICHIGAN GENERAL CORP <MGL> 4TH QTR - SADDLE BROOK, N.J., March 11 - - Shr loss 1.02 dlrs vs 1.01 dlr - Net loss 18.1 mln vs 11.4 mln - Revs 96.0 mln vs 90.3 mln - Year - Shr loss 2.65 dlrs vs loss 3.06 dlrs - Net loss 39.3 mln vs 34.6 mln - Revs 386.0 mln vs 373.0 mln - NOTE:1986 4th qtr, year loss includes 14.4 mln dlrs, 4.6 -mln dlrs respectively from discontinued. 1985 4th qtr and year -include loss of 13.1 mln, 1.9 mln dlr respectively. - Reuter - - - -11-MAR-1987 18:45:36.66 -crudenat-gasiron-steel -usalibya - - - - - -F Y -f0908reute -u f BC-USX-<X>-PROVED-OIL,-G 03-11 0103 - -USX <X> PROVED OIL, GAS RESERVES FALL IN 1986 - NEW YORK, March 11 - USX Corp said proved reserves of oil -and natural gas liquids fell 28 pct to 802.8 mln barrels at the -end of 1986 from 1.12 billion barrels at year-end 1985. - The figures, in USX's just-released 1986 annual report, -indicate much of the drop resulted from the exclusion of 293.7 -mln barrels of Libyan reserves, after the U.S. government last -June directed U.S. oil companies to end Libyan operations. - USX, which owns Marathon Oil Co and Texas Oil and Gas Corp, -had 60 pct of its 1986 sales of 14.94 billion dlrs from its oil -and gas operations. - About 24 pct of total sales came from USX's USS steel unit -and 16 pct from diversified businesses, which include oilfield -services, raw materials, minerals, chemicals and real estate. - According to the report, domestic liquids reserves fell -slightly to 628.5 mln barrels from 628.9 mln and foreign -reserves fell to 174.3 mln from 486.4 mln barrels. The large -drop in foreign reserves was in the Middle East and Africa, -where they fell to about 9.3 mln barrels from 316.7 mln, -reflecting the exclusion of Libya. - Total natural gas reserves fell to 4.82 trillion cubic feet -at year-end 1986 from 5.18 trillion at the end of 1985. - Again, most of the drop came from the Middle East and -Africa, where reserves fell to zero from 71.9 billion cubic -feet, excluding Libyan reserves. - U.S. natural gas reserves fell to 3.44 trillion cubic feet -from 3.65 trillion and foreign reserves fell to 1.38 trillion -from 1.53 trillion. - In other areas, USX said total capital spending fell to 962 -mln dlrs in 1986 from 1.78 billion dlrs in 1985. The 1986 -audited figure is eight mln dlrs higher than the unaudited -figure the company reported on Jan 27. - USX also said it expects to record a gain of 150 mln dlrs -in 1988, representing 50 pct of previously existing investment -tax credits allowable under the new tax law. The loss of the -other half of the credits was reflected in the fourth quarter. - In a discussion of steel results, USX said plants that were -shut down last month and some previously idled plants may be -permanently closed. USX took a fourth quarter charge of 1.03 -billion dlrs to restructure its steel operations. The charge -included the "indefinite idling" last month of four plants in -Utah, Pennsylvania and Texas. - Other plants or parts of plants in Pennsylvania, Indiana, -Alabama, Ohio and Chicago had been previously idled. - "These operations are not permanently shut down. Improved -market conditions for the products from these plants may make -it feasible to reopen some of them," USX said in the report. - "On the other hand, a lack of any future market improvement -may necessitate their permanent closing," it added. - Reuter - - - -11-MAR-1987 18:50:05.96 - -usa - - - - - -F Y -f0914reute -r f BC-PHILLIPS<P>-SAYS-STOC 03-11 0099 - -PHILLIPS<P> SAYS STOCK UP ON STEPS TO PARE DEBT - NEW YORK, March 11 - Phillips Petroleum Co Chairman C. J. -"Pete" Silas said his company's stock, ranked fourth on the -most active list of stocks traded today, rose partly because of -steps it took to pare its debt. - Silas told Reuters in an interview today, "part of this -strength results from the rise in oil prices and also because -some of the analysts have been happy with the steps we've taken -in 1986 to pare our debt." - Phillips stocks rose 1/4 to 14 dlrs a share following -recommendations by some oil analysts, a company source said. - Phillips debt stood at 5.9 billion dlrs in December 1986 -down from a 1985 high of 8.6 billion dlrs, analysts said. - "At 14 dlrs a share, Phillips is priced closer to the actual -price of oil," he added. - Silas said, "if the analysts are right that oil prices will -rise to 20 dlrs or higher, then it seems to make sense to buy -Phillips." He is, however, more cautious about the strength in -crude prices, expecting the price to fluctuate between 16-18 -dlrs a barrel for the year. - Oil industry analysts said one reason for the stock's -popularity of the stock is that it traded at a strong discount -to its appraised value and was attractively priced for small -investors. - Charles Andrew, an analyst who follows Phillips for John S. -Herold Inc of Greenwich, Conn said that the appraised value of -the company, based on available data is 34.25 dlrs. - "The stock is trading at about 1/3 its appraised value. The -company has tremendous leverage and if it can get its act -together and if oil prices are steady to higher there is good -room for improvement," he said. - But, he added, "if oil prices turn lower, there will be a -lot of pressure on Phillips." - Phillips' shares fell as low as eight dlrs a share over the -last 52 weeks with a 1987 low of 11-3/4 dlrs in 1987. -Analysts say that the appraised value of the company could be -revised due to asset sales of their oil and gas reserves. - Silas told Reuters that the asset sales which amount to -about two billion dlrs for 1986 were completed and that none -were planned. - Reuter - - - -11-MAR-1987 18:50:57.36 - -usa - - - - - -F -f0915reute -u f BC-MICHIGAN-GENERAL-<MGL 03-11 0107 - -MICHIGAN GENERAL <MGL> BEGINS EXCHANGE OFFER - SADDLE BROOK, N.J., march 11 - Michigan General Corp said -it began an exchange offer for its 110 mln dlrs outstanding -principal amount of 10-3/4 pct senior subordinated debentures -due December 1, 1998. - Pursuant to the exchange offer, each 1,000 dlr principal -amount will receive 500 dlr principal amount of senior -subordinated notes due March 1, 1992, 200 dlr principal amount -of non-interest bearing convertible senior subordainted notes -due March 1, 1997 and 12 shares of delayed convertible -preferred stock, liquidation preference 25 dlrs per share. - The offer will expire April nine. - Michigan General said the exchange offer is crucial to is -attempt to restructure and reduce its risk from Chapter 11. - The principal purpose of the offer is to reduce its debt -service on the 10-3/4 pct debetures, increase stockholders' -equity and induce its lender to continue to fund. - Assuming a 90 pct acceptance of the offer, Michigan's -annual cash interest requirements will be reduced by about 10.6 -mln dlrs, it said. - Completion is subject to the tender of at least 90 pct of -the debentures and its lender to waive it from default under -its loan agreements. - - Reuter - - - -11-MAR-1987 18:53:18.49 -earn -canada - - - - - -E F -f0918reute -r f BC-BANK-OF-B.C.-REVISES 03-11 0108 - -BANK OF B.C. REVISES SHARE PAYOUT ESTIMATE - VANCOUVER, British Columbia, March 11 - Bank of British -Columbia said it revised its estimate of shareholder -distributions from last November's sale of most of the bank's -assets to HongKong Bank of Canada to between 65 cts and 1.15 -dlrs a share from 55 cts to 1.20 dlrs a share. - The bank said the estimate could rise to between 1.30 dlrs -and 1.80 dlrs a share if the full pension surplus is obtained. -It said it did not know when distributions would be made. - It earlier reported that operating profit for first quarter -ended January 31 fell to 273,000 dlrs from 1.7 mln dlrs the -previous year. - For full-year 1986 ended October 31, the bank posted an -operating loss of 4.4 mln dlrs against year-earlier profit of -7.5 mln dlrs. The bank also posted a 66 mln dlr extraordinary -loss in fiscal 1986. - Bank of British Columbia sold most of its assets last -November to HongKong Bank Canada, a unit of <HongKong and -Shanghai Banking Corp>, of Hong Kong, for 63.5 mln dlrs. - It said efforts to wind up the bank's affairs were -proceeding as quickly as possible. - The bank said it expected to report positive earnings in -future periods, barring unforeseen circumstances. - Loan losses, which the bank previously said figured in its -move to sell off most of its assets, rose to 105.7 mln dlrs in -fiscal 1986 from year-earlier 36.1 mln dlrs. The bank said 31.1 -mln dlrs of the 1986 total represented downward adjustments to -its portfolio of syndicated sovereign risk loans as required -under the sale to HongKong Bank. - Since November 27, the bank has confined activities to the -winding up of affairs, Bank of British Columbia said. - Reuter - - - -11-MAR-1987 18:54:46.18 - -usa -reagan - - - - -V -f0921reute -u f BC-HOUSE-VOTES-TO-BLOCK 03-11 0111 - -HOUSE VOTES TO BLOCK CONTRA AID FOR SIX MONTHS - WASHINGTON, March 11 - The House voted to block 40 mln dlrs -in military aid to the Nicaraguan rebels until President Reagan -accounts for past assistance, including money diverted from the -U.S. sale of arms to Iran. - The vote was seen as a temporary defeat for Reagan, who has -made aid to the "contras" a key initiative. - Congressional Democratic leaders have conceded that despite -today's vote, they can not muster a two-thirds majority to -override a certain Reagan veto. But they have said it is likely -they can win a battle expected this fall over 105 mln dlrs iin -new aid Reagan is requesting. - - Reuter - - - -11-MAR-1987 18:56:34.21 -earn -canada - - - - - -E F -f0924reute -d f BC-<KIENA-GOLD-MINES-LTD 03-11 0040 - -<KIENA GOLD MINES LTD> 4TH QTR NET - TORONTO, March 11 - - Shr 17 cts vs 16 cts - Net 1,019,000 vs 985,000 - Revs 7,997,000 vs 7,492,000 - YEAR - Shr 1.18 dlrs vs 64 cts - Net 6,959,000 vs 3,778,000 - Revs 36.5 mln vs 29.8 mln - Reuter - - - -11-MAR-1987 18:56:43.55 -carcasslivestock -argentina - - - - - -L -f0925reute -r f BC-ARGENTINE-MEAT-EXPORT 03-11 0117 - -ARGENTINE MEAT EXPORTS HIGHER IN JAN/FEB 1987 - BUENOS AIRES, March 11 - Argentine meat exports during -Jan/Feb 1987 totalled 39,714 tonnes, against 36,594 tonnes -shipped in the same 1986 period, National Meat board said. - Shipments in tonnes with comparative figures for the 1986 -period, in brackets, included: beef 26,945 (20,096), horse meat -3,257 (4,211) and beef offal 7,660 (10,502). - Argentine's meat exports totalled 20,243 tonnes in February -1987, against 19,217 tonnes shipped in the same 1986 month. - Shipments in tonnes, with comparative figures for February -1986, in brackets, included: beef 13,272 (11,464), horse meat -1,543 (2,083) and beef offal 4,476 (4,672), the board added. - Main destinations for refrigerated beef (bone in -equivalent) were as follows, in tonnes, with comparative -figures for 1986 in brackets - - EC 5,500 (7,900), Brazil 5,200 (unavailable), Israel 3,700 -(3,000), Peru 2,500 (800), Singapore 500 (300), Switzerland 500 -(400), Canary Islands 500 (300), Malta 500 (700), Aruba/Curazao -200 (300), Chile 100 (600). - Main destinations for canned meat and cooked beef (bone in -equivalent), in tonnes with comparative figures for Jan/Feb -1986, in brackets, were - - United States 11,200 (13,400), EC 4,700 (5,100). - Reuter - - - -11-MAR-1987 19:02:33.14 -earn -canada - - - - - -E F -f0940reute -r f BC-KIENA-PLANS-TWO-FOR-O 03-11 0056 - -KIENA PLANS TWO-FOR-ONE STOCK SPLIT - TORONTO, March 11 - <Kiena Gold Mines Ltd> said it planned -a two-for-one common stock split, pending shareholder approval -on April 7. - It said approval would require 66-2/3 pct of votes cast. -Kiena said 57 pct-owner Campbell Red Lake Mines Ltd <CRK> was -expected to vote in favor of the split. - Reuter - - - -11-MAR-1987 19:04:31.39 - -usa - - - - - -F -f0941reute -r f BC-VANZETTI-<VANZ>-INCRE 03-11 0053 - -VANZETTI <VANZ> INCREASE OF SHARES APPROVED - STOUGHTON, Mass, March 11 - vanzetti Systems INc said its -shareholders approved increasing the number of authorized -shares to five mln from three mln. - Shareholders also approved increasing the number of shares -reserved for options to employees to 300,000 from 150,000 - Reuter - - - -11-MAR-1987 19:04:38.26 -earn -usa - - - - - -F -f0942reute -s f BC-ROWE-FURNITURE-CORP-< 03-11 0025 - -ROWE FURNITURE CORP <ROWE> SETS QTLY DIVIDEND - SALEM, Va., March 11 - - Qtly div four cts vs four cts prior - Pay April 15 - Record March 20 - Reuter - - - -11-MAR-1987 19:05:21.41 -trade -usa -reaganyeutter - - - - -V RM -f0943reute -u f BC-U.S.-HOUSE-PANEL-TAKE 03-11 0092 - -U.S. HOUSE PANEL TAKES FIRST TRADE BILL VOTES - By Jacqueline Frank - WASHINGTON, March 11 - House trade lawmakers took their -first votes on measures designed to toughen U.S. trade laws but -held over until tomorrow the most difficult votes on -controversial plans to protect American industries. - Meeting in closed session, the House Ways and Means Trade -Subcommittee failed to resolve one of the most sensitive issues -in the bill--whether they will force major foreign trading -partners to severely cut their trade surpluses with the United -States. - The subcommittee is considering a toned-down version of -Democratic-sponsored trade legislation that aims to open -foreign markets but which drops last year's effort to force -President Reagan to retaliate with quotas or tariffs. - Congressional aides who asked not to be identified said the -lawmakers intend to wrap up their proposals tomorrow and will -consider a proposal to mandate retaliation without setting -specific trade penalties. - The legislation faces another hurdle in the full Ways and -Means Committee next week before the full House votes on it. - Rep. Richard Gephardt, a Missouri Democrat who is seeking -his party's 1988 presidential nomination, said he may offer an -amendment to call for reductions in the trade surpluses of -those countries with barriers to imports of U.S. goods. - This would be a moderated version of his earlier plan to -force a mandatory ten per cent annual cut in the trade surplus -with the United States by Japan, South Korea, Taiwan, West -Germany and other countries with the largest trade imbalances. - "My criteria for a good amendment sets a standard for -getting the trade deficit down," he told reporters. - The trade law changes are to become part of a major -congressional and administration effort to turn around the -record U.S. trade deficit of 169 billion dlrs last year by -opening up foreign markets and making U.S. products more -competitive. - House Speaker James Wright, a Texas Democrat, said again -today he expects the full House will approve the trade bill by -May and that Reagan will accept the final congressional bill. - "I expect whatever is reported (by the Ways and Means -Committee) will pass. We will have a good bill and an effective -bill," he told reporters. - The comprehensive trade bill will include work by other -committees to ease export controls on high technology, to aid -U.S. workers displaced by foreign competition, to stimulate -research and development, to remove foreign trade barriers and -to improve education and worker training. - The lawmakers agreed that for the first time a U.S. -industry could charge foreign producers with unfair competition -if they deny basic worker rights such as collective bargaining, -safety rules and payment of a minimum wage appropriate to the -country's economic development. - They transferred to U.S. Trade Representative Clayton -Yeutter the powers now held by Reagan to decide whether to -retaliate against foreign violations of fair trade rules and -whether an injured industry deserves import relief. - They agreed to make it easier for a company to get -temporary relief from import competition but agreed the -industry should provide a plan to become competitive. - The administration has not announced its support but -Yeutter said yesterday, "I am cautiously optimistic," that the -Democratic-led House will come up with an acceptable bill. - Reuter - - - -11-MAR-1987 19:06:36.56 -trade -franceussr - - - - - -C G L M T -f0945reute -r f BC-SOVIET-MINISTER-SAYS 03-11 0087 - -SOVIET MINISTER SAYS TRADE BOOST UP TO FRENCH - PARIS, March 11 - Soviet first deputy prime minister -Vsevolod Murakhovsky said at the end of a brief visit here his -country wanted to boost joint business with France, but that a -reduction of France's trade deficit with the Soviet Union -depended on the French. - Murakhovsky, who is also chairman of the State -Agro-Industrial Committee (GOSAGROPROM), told a news conference -he had discussed a variety of possible deals with French -companies Rhone-Poulenc, Pechiney and Imec. - Declining to put figures on possible contracts he said he -had discussed plant protection and the processing of highly -sulphuric gas with Rhone-Poulenc, packaging technology for -agricultural products with Pechiney, and fruit and vegetable -juice processing with Imec. - An official for Pechiney said an agreement of intent on -packaging could be signed soon, but could not give any other -details. The other two companies were not immediately available -for comment. - Asked whether he foresaw a reduction this year of France's -trade shortfall, at 7.6 billion francs in the first 11 months -of 1986 against 5.1 billion for the whole of 1985, Murakhovsky -told Reuters: "It all depends on France." - At a meeting in Paris last January French and Soviet -foreign trade ministers said they were committed to increased -efforts to reduce the deficit. Estimates at the time showed a -French 190 mln franc surplus for December 1986. - Murakhovsky said the Soviet Union was prepared to talk with -anybody with "interesting" proposals offering latest technology -and assuring "a mutual advantage." - He said the Soviet Union had many tasks ahead of it and -would deal rapidly with proposals it considered interesting. - He encouraged companies to take advantage of new laws -guaranteeing "the interests of foreign partners" in joint -ventures. - But he said no agreements had yet been finalised under the -new joint venture laws. - He said concrete deals had not yet been finalised as a -result of a one billion dollar accord signed in Moscow last -month with French businessman Jean-Baptiste Doumeng. - He said Doumeng's Interagra company was preparing proposals -for further examination by the Soviet Union. Doumeng last month -said the agreement was to exchange one billion dollars worth of -goods. - Murakhovsky said the agreement was one of intent, and -designed primarily to renew and increase the Soviet Union's -food production capacity. - Reuter - - - -11-MAR-1987 19:09:27.77 -crude -ecuadorvenezuela - - - - - -RM A Y -f0952reute -u f AM-ecuador-assistance 1stld 03-11 0103 - -VENEZUELA TO LEND OIL TO ECUADOR FOR EXPORT - Caracas, march 11 - venezuela will supply ecuador with an -as yet undetermined amount of crude oil to help it meet export -commitments, seriously affected by last week's earthquake, -energy and mines minister arturo hernandez grisanti said. - He gave few details about the deal, but said a crude oil -loan agreement will be made between state oil companies -petroleos de venezuela (pdvsa) and ecuador's cepe. - Ecuador was forced to suspend oil exports for an expected -four months after an earthquake damaged a pipeline. Oil -accounts for 60 per cent of its export income. - Hernandez was speaking to reporters at miraflores palace -on the results of talks with ecuador's deputy energy minister -fernando santos alvite, who arrived here last night. - "the volume lent to ecuador would be discounted from its -opec quota and would not affect venezuela's," he said. "we would -from august on produce our own quota and sell the additional -amounts that ecuador would be repaying us," he said. - He did not elaborate on the quota arrangements but did say -ecuador would notify opec by telex that venezuela would be -lending it a certain amount over so many days. - Venezuela's opec output quota is currently 1.495 million -barrels a day, and ecuador's has been set at 210,000 bpd. - Reuter - - - -11-MAR-1987 19:10:26.95 -earn -usa - - - - - -F -f0956reute -d f BC-EAGLE-CLOTHES-INC-<EG 03-11 0083 - -EAGLE CLOTHES INC <EGL> 2nD QTR JAN 31 - NEW YORK, March 11 - - Shr profit 17 cts vs profit 14 cts - Net profit 1.3 mln vs profit 901,000 - Revs 36.9 mln vs 36.2 mln - Six months - Shr profit 18 cts vs loss 11 cts - Net profit 1.4 mln vs loss 716,000 - Revs 63.6 mln vs 57.7 mln - NOTE:1986 six months includes increase in provision for -doubtful accounts to 1.5 mln dlrs. 1986 shares give effect to -issuance of 1.5 mln shares in exchange for outstanding Series 1 -preferred shares. - Reuter - - - -11-MAR-1987 19:11:19.94 - -iraniraq - - - - - -C G L M T -f0958reute -r f AM-GULF-IRAQ 03-11 0112 - -IRAQ SAYS IRAN ATTACK REPULSED ON SOUTHERN FRONT - BAGHDAD, March 11 - Iraq said it had repelled an Iranian -attack on positions held by its fourth army corps east of the -southern Iraqi town of Amarah on the Baghdad-Basra highway. - A Baghdad war communique said an Iranian infantry brigade, -backed by tanks, launched the overnight attack and fierce -fighting raged for more than six hours before Iranian troops -fled the battlefield, leaving 220 men killed and many wounded. - No major battles have been reported fought by the fourth -army corps for more than a year in the area, mainly swamplands -of the Hawizah marshes running eastward to the southern port -city of Basra. - Reuter - - - -11-MAR-1987 19:15:32.68 -trade -ukjapan - - - - - -C G L M T -f0961reute -r f AM-BRITAIN-JAPAN 03-11 0120 - -BRITAIN CALLS ON JAPAN TO INCREASE IMPORTS - LONDON, March 11 - Britain today called on Japan to -increase foreign imports or risk the rise of protectionism and -the harm it would bring to it and other trading nations. - British Trade and Industry Secretary Paul Channon said -Japan must heed a report issued by a Japanese government -advisory body in December calling for faster domestic demand to -help cut its trade surplus and restructure its economy. - "I recognise that the strong yen has brought problems to -Japan's domestic economy," he told a group of Japanese -businessmen in London. - "But these short term difficulties should not be allowed to -deflect Japan from the fundamental reforms necessary," he said. - "It is not just a domestic issue for Japan. If import -propensity does not expand very soon there is a real risk from -protectionist lobbies, particularly in the U.S. With whom Japan -has so massive a surplus," he said. - "They may well succeed in securing action by governments -which would be highly injurious to trading nations like Japan -and the U.K." - Channon said there had been substantial growth in the -volume of trade between Japan and Britain, amounting to 6.2 -billion sterling (9.8 billion dlrs) last year. - But he added: "Regrettably too much of it was in one -direction, with the Japanese selling us 3.7 billion sterling -(5.8 billion dlrs) more than we sold them." - Reuter - - - -11-MAR-1987 19:15:55.25 -acq - - - - - - -F -f0963reute -f f BC-******TAFT-BROADCASTI 03-11 0013 - -******TAFT BROADCASTING REJECTS 145 DLR PER SHARE BUYOUT OFFER FROM THETA CORP -Blah blah blah. - - - - - -11-MAR-1987 19:18:49.58 -acq -usa - - - - - -F -f0964reute -u f BC-TAFT-<TFB>-REJECTS-14 03-11 0098 - -TAFT <TFB> REJECTS 145 DLR/SHR OFFER - Cincinnati, March 11 - Taft Braodacasting Co said its board -of directors unanimously decided not to accept the pending -proposal of Theta Corp, an investor group led by Dudley Taft. - The decision was based on, among other things, the advise -of its financial advisors, goldman sachs and co, that the offer -of 145 dlrs per share was inadequate. - Taft said the board concluded that the offer failed to -recognize fully the future propsects of the company and -directed management to explore alternatives including possible -financial restructuring. - - Reuter - - - -11-MAR-1987 19:23:42.46 - -ecuador - - - - - -C G L M T -f0967reute -d f AM-ecuador-tremor 1stld 03-11 0120 - -ECUADOR DEBT TO BE HONOURED AFTER QUAKE SURVIVAL - QUITO, March 11 - Ecuador, stricken by a severe earthquake, -will honour its 8.16 billion dlr foreign debt but only after -ensuring the survival of the country after the tremor which -claimed at least 300 lives and caused 4,000 persons to -disappear. - "The government's position ... is to permit us to honour the -(debt) commitments but without sacrificing the country, because -first we have to survive and later we can comply," information -minister Marco Lara told reuters. - He said the nation would later announce definitive -measures on the foreign debt in the aftermath of the earthquake -which the government said will cause nearly a billion dlrs in -economic losses. - Reuter - - - -11-MAR-1987 19:26:43.72 -veg-oil -uk - -ec - - - -C G -f0968reute -r f AM-COMMUNITY-BRITAIN 03-11 0087 - -BRITISH MINISTER CRITICISES PROPOSED EC OILS TAX - LONDON, March 11 - A British minister said that a proposed -European Community tax on vegetable oils and fats would raise -the price of fish and chips and he pledged the government would -fight against it. - Lord Belstead, a junior agriculture minister, told the -House of Lords the tax would raise the price of raw materials -used in many processed foods by about 100 pct. - He said revenue should not be raised by taxing the consumer -and called the proposal "repugnant." - Reuter - - - -11-MAR-1987 20:04:55.06 -jobs -australia - - - - - -RM -f0981reute -b f BC-AUSTRALIAN-UNEMPLOYME 03-11 0091 - -AUSTRALIAN UNEMPLOYMENT EASES IN FEBRUARY - CANBERRA, March 12 - Australia's seasonally-adjusted -unemployment rate eased to 8.2 pct of the estimated workforce -in February from 8.3 pct in January, compared with 7.9 pct a -year earlier, the Statistics Bureau said. - The number of unemployed declined to 632,100 from 638,300 -in January, against 594,500 in February 1986, it said. - But unadjusted, the number of jobless rose to 699,800 or -9.1 pct of the workforce from 671,400 or 8.9 pct in January and -658,500 or 8.7 pct a year earlier. - REUTER - - - -11-MAR-1987 21:02:16.57 - -ecuador - - - - - -RM -f0996reute -u f BC-ECUADOR-SEEKS-HALT-TO 03-11 0106 - -ECUADOR SEEKS HALT TO PAYMENTS TO BANKS IN 1987 - QUITO, March 11 - Ecuador, stricken by a severe earthquake, -is seeking through negotiations with private foreign banks to -postpone all payments due to them for the rest of the year, -Finance Minister Domingo Cordovez said. - He said in a statement, "The idea with the foreign banks is -to obtain from them the best terms to give the Ecuadorean -economy a complete relief in the period of deferral of payments -on the foreign debt during the present year." - The statement referred only to payments due to private -foreign banks, a senior government finance official told -Reuters. - These creditors hold two-thirds of Ecuador's foreign debt -which totals 8.16 billion dlrs. - It did not refer to debts maturing to foreign governments -and multilateral lending agencies, accounting for the remainder -of Ecuador's foreign debt, the official said. - He said Ecuador owed the private foreign banks between 450 -and 500 mln dlrs in interest payments for the rest of 1987 and -about 66 mln in principal payments maturing this year. - Cordovez said Ecuador would seek new loans from -multilateral organisations. A World Bank mission was due here -soon to evaluate emergency loans, government officials said. - Ecuador has also appealed for emergency -aid from about 40 foreign governments. - Government officials have calculated losses to the 1987 -budget from last Thursday's earthquake at 926 mln dlrs. - In 1986, Ecuador's total service on the foreign debt was -about 996 mln dlrs to all creditors. - The quake ruptured Ecuador's main oil pipeline, suspending -crude exports for five months until the line is repaired. Oil -accounts for up to two-thirds of its total exports and up to 60 -pct of total revenues. Before the tremor, Ecuador suspended -interest payments on January 31 to private foreign banks. - Officials said they stopped interest payments due to a -cash-flow squeeze stemming from a slide in world oil prices, -which cut 1986 exports by about 25 pct to 2.18 billion dlrs. - Ecuadorean finance officials have been in telephone contact -every day this week with some of the banks who sit on its -14-bank advisory committee, the senior government finance -official said. The committee represents the country's 400 or so -private foreign bank creditors. - Cordovez also said in the statement, "The banks should -perceive that it is impossible at this moment to comply with -what was forseen." - Cordovez added, Ecuador must make a new proposal in line -with the reality since the earthquake by seeking better options -of deferment and of softening the negotiation conditions." - Interest payments fall due at least monthly to private -foreign banks. - Ecuador's initial proposal earlier this year was to make -only one semi-annual or one annual interest payment this year. - Under this proposal, it sought to defer interest payments -until June at the earliest, foreign bankers and government -officials here said. - Ecuadorean officials held their last formal meeting with -the advisory committee in New York in January, but the -negotiations were suspended on January 16 due to the 12-hour -kidnapping of President Leon Febres Cordero by air force -paratroopers. - The Red Cross says that least 300 people died and at least -4,000 are missing due to the earthquake. - REUTER - - - -11-MAR-1987 21:06:50.50 -money-fx -usa -james-baker - - - - -RM -f0002reute -u f BC-TREASURY-SECRETARY-BA 03-11 0096 - -TREASURY SECRETARY BAKER DECLINES COMMENT ON G-6 - NEW YORK, March 11 - U.S. Treasury Secretary James Baker -declined comment on the February 22 Paris accord between the -six major industrial nations under which they agreed to foster -exchange rate stability. - Asked by reporters after a speech before the National -Fitness Foundation banquet what, if any, currency intervention -levels had been set in Paris, Baker replied: "We never talk -about intervention." - Baker also declined to comment on his views about the -foreign exchange markets' reaction to the accord. - REUTER - - - -11-MAR-1987 21:32:41.13 -crude -venezuelaecuador - -opec - - - -RM -f0019reute -u f BC-ECUADOR-TO-ASK-OPEC-T 03-11 0104 - -ECUADOR TO ASK OPEC TO RAISE EXPORT QUOTA - CARACAS, March 11 - Ecuador will ask OPEC to raise its oil -export quota by 100,000 barrels per day to 310,000 to -compensate for lost output due to last week's earthquake, -deputy Energy Minister Fernando Santos Alvite said. - Santos Alvite, who arrived in Caracas last night to discuss -an aid plan for Ecuador, did not say when the Organisation of -Petroleum Exporting Countries (OPEC) would be approached. - The additional output would be related to plans now under -discussion for Venezuela and Mexico to lend Ecuador crude while -it repairs a pipeline damaged by the quake. - Earlier, Venezuelan Energy and Mines Minister Aturo -Hernandez Grisanti said his country would supply an unspecified -part of Ecuador's export commitments. - But Santos Alvite told reporters he hoped a first cargo of -300,000 barrels could leave Maracaibo this weekend to supply -refineries near Guayaquil. He added Ecuador also wanted to make -up for 50,000 bpd it shipped to Caribbean destinations. Mexico -might supply Ecuador's South Korean market. - Ecuador may be unable to export oil for up to five months -due to extensive damage to a 25 mile stretch of pipeline -linking jungle oilfields to the Pacific port of Balao. - REUTER - - - -11-MAR-1987 21:37:18.46 -oilseedrapeseed -china - - - - - -G C -f0024reute -u f BC-CHINA'S-RAPESEED-CROP 03-11 0097 - -CHINA'S RAPESEED CROP DAMAGED BY STORMS - PEKING, March 12 - The yield on 46,000 hectares (ha) of -rapeseed in central China will be cut by up to 70 pct by -hailstorms and tornadoes that swept across nearly 100,000 ha of -crops on March 6, the New China News Agency said today. - The storm, which lashed the Huai and Yangtze rivers and -eastern Anhui province, left two people dead and 800 others -injured. Some 800 houses were flattened and 19 boats sunk, it -said. - The Anhui provincial government has sent emergency relief -to the 19 counties affected, the news agency said. - REUTER - - - -11-MAR-1987 22:25:49.20 -crude -china - - - - - -F -f0040reute -u f BC-CHINA-CLOSES-SECOND-R 03-11 0112 - -CHINA CLOSES SECOND ROUND OF OFFSHORE OIL BIDS - PEKING, March 12 - China has closed the second round of -bidding by foreign firms for offshore oil exploration rights, -the China Daily has reported. - It quoted a spokesman for the China National Offshore Oil -Corp (CNOOC) as saying China signed eight contracts with 15 -foreign firms for blocks in the Pearl River mouth and south -Yellow Sea covering a total area of 44,913 sq km. - Second round bidding began at the end of 1984 and only one -well has so far produced results -- Lufeng 13-1-1, 250 km -south-east of Shenzhen, with an output of 6,770 barrels a day. -The well was drilled by a group of Japanese companies. - The spokesman added CNOOC was ready to enter into contracts -for offshore blocks before third round bidding began. He did -not say when this would be, but added the contracts would not -be bound by restrictions imposed during the second round. - China has signed 36 oil contracts and agreements with 37 -companies from 10 countries since 1979, when offshore -exploration was open to foreigners. Eleven contracts were -terminated after no oil was discovered. - Foreign firms have invested 2.1 billion dlrs on offshore -China since 1979. - REUTER - - - -11-MAR-1987 22:42:47.98 - -japan - - - - - -RM -f0046reute -b f BC-JAPAN-RELAXES-RULES-O 03-11 0097 - -JAPAN RELAXES RULES ON SECURITIES COMPANY OUTLETS - TOKYO, March 12 - Japan has relaxed its limit on the -establishment of securities company outlets in order to service -a growing number of individual investors, the Finance Ministry -said. - Japanese securities companies can now set up as many as 21 -new outlets in the two years before March 31, 1989, against the -previous maximum of 13. - The rules apply to outlets in department stores, -supermarkets and other locations convenient for individuals. - Foreign securities firms are not affected by the ruling, it -said. - REUTER - - - -11-MAR-1987 22:56:45.09 -acq -usa - - - - - -F -f0048reute -u f BC-AMC-IMPOSES-HIRING-FR 03-11 0097 - -AMC IMPOSES HIRING FREEZE DUE TO TAKEOVER BID - DETROIT, March 11 - American Motors Corp <AMO> management -has ordered a hiring freeze in view of Chrysler Corp's <C> 1.5 -billion dlr takeover bid, a spokesman for AMC said. - Analysts said the merger is virtually certain to go ahead. - American Motors directors met for five hours Wednesday to -review the takeover proposal. "The board ... Expects to be -meeting periodically over the next several weeks on the -Chrysler proposal," AMC said in its first formal statement since -it acknowledged the Chrysler proposal on Monday. - Chrysler, the number three U.S. Automaker, has said the -merger is motivated principally by its desire to acquire AMC's -profitable Jeep business and dealers, as well as a new modern -car assembly plant in Bramalea, Ontario. - That means a guaranteed future for much of AMC, but it -leaves in question the fate of many of its 19,000-plus -employees, according to industry analysts. AMC's Toledo, Ohio -Jeep plant has 1,850 hourly workers on indefinite layoff while -its Kenosha, Wisconsin, car plant has another 2,250 on layoff. - REUTER - - - -11-MAR-1987 22:57:31.32 - -china - - - - - -F -f0050reute -u f BC-ROTHMANS-CLOSE-TO-JOI 03-11 0108 - -ROTHMANS CLOSE TO JOINT VENTURE IN CHINA - PEKING, March 12 - Rothmans International plc <ROT.L> aims -to set up a joint venture with Jinan cigarette factory in -Shandong, China to produce high quality cigarettes, some for -export, Chinese newspapers said. - The China Daily said the factory has produced high-quality -"General" brand cigarettes using advanced machinery and technical -assistance worth 2.5 mln dlrs donated by Rothmans under a -co-operation agreement signed in 1985. - The Economic Daily newspaper said the high quality "General" -will help China's cigarettes enter the international market. -The two papers gave no more details. - REUTER - - - -11-MAR-1987 23:00:56.20 -bop -australia - - - - - -RM -f0052reute -u f BC-FOREIGN-INVESTMENT-IN 03-11 0113 - -FOREIGN INVESTMENT IN AUSTRALIA JUMPS IN LAST QTR - CANBERRA, March 12 - The net inflow of foreign investment -into Australia jumped to 7.3 billion dlrs in the fourth quarter -of 1986 from 4.32 billion in the third quarter and 4.55 billion -a year earlier, the Statistics Bureau said. - The Bureau attributed the increase to a turnaround of 2.08 -billion dlrs in official sector transactions and a 1.09 billion -turnaround in direct investment. - The turnaround in official transactions to a 1.52 billion -inflow from a 555 mln outflow in the third quarter, against a -520 mln inflow a year earlier, was largely on account of -government foreign currency borrowings, it said. - Direct investment recorded a turnaround to a 1.04 billion -dlr inflow in the fourth quarter from a 57 mln withdrawal in -the third quarter, against a 546 mln inflow in the fourth -quarter of 1985, the Bureau said. - It said the major part of the turnaround reflected an -injection of funds, estimated at around 700 mln dlrs, -associated with the previously reported restructuring of the -Australian operations of General Motors Corp <GM>. - GM used the funds to pay out or take over certain -Australian liabilities of its local unit <General -Motors-Holden's Ltd>, it said. - However, net borrowings remained the major part of total -inflow, accounting for 6.16 billion dlrs in the fourth quarter -against 3.88 billion in the third quarter and 4.03 billion a -year earlier, the Bureau said. - Net official borrowings comprised 1.52 billion dlrs against -a net outflow of 548 mln in the third quarter and a 516 mln -inflow a year earlier. - Total private and semi-public authority net borrowings rose -to 4.64 billion dlrs from 4.42 billion in the third quarter and -3.51 billion a year earlier. - REUTER - - - -11-MAR-1987 23:06:27.89 - -ukussr - - - - - -RM -f0055reute -u f BC-MOSCOW-CARRIES-OUT-NU 03-11 0094 - -MOSCOW CARRIES OUT NUCLEAR TEST - LONDON, March 12 - The Soviet Union carried out a nuclear -test early today, the official Tass news agency reported. - According to the report, monitored by the British -Broadcasting Corporation, the explosion was at 0200 gmt. - A blast on February 26 ended a 19-month unilateral test -moratorium declared by the Soviet Union. Moscow blamed the end -of the freeze on U.S. Refusal to join a total test ban. - Tass said the latest explosion, with a power of up to 20 -kilotonnes, had "the aim of improving military equipment." - REUTER - - - -11-MAR-1987 23:06:44.14 -graincorn -taiwan - - - - - -G C -f0058reute -u f BC-TAIWAN'S-FIRST-QUARTE 03-11 0086 - -TAIWAN'S FIRST QUARTER MAIZE IMPORTS SEEN RISING - TAIPEI, March 12 - Taiwan's maize import commitments are -expected to rise to 970,000 tonnes in the first four months of -1987 from 870,000 tonnes a year earlier, a spokesman for the -Joint Committee of Maize Importers told Reuters. - He said more than 75 pct of the imports come from the U.S. -And the rest from South Africa. - The maize import target for calendar 1987 is set at well -over 3.4 mln tonnes compared with an actual 3.07 mln in 1985, -he added. - REUTER - - - -11-MAR-1987 23:46:55.84 -trade -taiwan - - - - - -RM -f0077reute -u f BC-TAIWAN-FURTHER-RELAXE 03-11 0110 - -TAIWAN FURTHER RELAXES FOREIGN GOODS IMPORT CURBS - TAIPEI, March 12 - Taiwan said it would soon relax import -controls on some 400 foreign items, including stationery and -books, in a further effort to allow trading partners, -especially the U.S., Greater access to its markets. - Taiwan announced the easing of import curbs on some 600 -farm and industrial products last month, a Council for Economic -Planning and Development spokesman told Reuters. - He said the new move was intended to balance trade between -Taiwan and its trading partners. The island's trade surplus -reached a record 15.6 billion U.S. Dlrs last year, up from -10.62 billion in 1985. - In January, Taiwan cut import tariffs on some 1,700 foreign -products and allowed imports of U.S. Wine, beer and cigarettes. - "We hope the measures will help reduce our trade surplus -this year, especially with that of the U.S.," the spokesman -said. - Washington is pressing Taiwan to open its markets wider as -a way of cutting its trade deficit with the island, which rose -to 2.35 billion U.S. Dlrs in the first two months of 1987 from -1.87 billion in the year-earlier period. - REUTER - - - -12-MAR-1987 00:06:25.87 -shipiron-steel -japanusa - - - - - -F -f0081reute -u f BC-ECONOMIC-SPOTLIGHT-- 03-12 0111 - -ECONOMIC SPOTLIGHT - MITSUBISHI HEAVY FIGHTS BACK - By Fumiko Fujisaki, Reuters - TOKYO, March 12 - International efforts to redirect Japan's -export-driven economy toward domestic consumption face heavy -going if the country's largest defence contractor and world's -biggest shipbuilder is anything to go by. - Mitsubishi Heavy Industries Ltd <MITH.T> (MHI), which began -making ships and iron goods for Japan's military rulers 130 -years ago, is responding to the strong yen by redoubling its -efforts to maintain its share of export markets. - "If we sell the best quality and the cheapest products, -everyone will buy them," MHI president Yotaro Iida said. - Although two of MHI's main businesses, shipbuilding and -power plant construction, have been hit hard by the yen's 40 -pct rise against the dollar, the company has no plans to -abandon them, Iida told Reuters in an interview. - Its other big activity, aircraft component manufacture, has -performed so well that MHI now accounts for half of the money -Tokyo spends on defence procurement each year. - "We have made the utmost efforts among the world's -manufacturers to improve productivity," he said. "You may be -surprised if you come to see our plants. The outside is old but -the inside is ultra-modern, with robots and computers." - Securities analysts at major securities houses agreed that -MHI has pared costs more quickly than its competitors. The -company has slashed its workforce to 47,000 from 86,000 in -1976. - Despite its cost-cutting, MHI expects profits to drop 40 -pct to 30 billion yen in the current fiscal year ending March -31, from 1985/86's record 50.14 billion. - And that includes gains from the sale of MHI's stake in -Mitsubishi Motors Corp <MIMT.T> for 49 billion yen. - Iida is optimistic about the future, however. He said a -resurgence of demand from the Middle East following the recent -recovery in oil prices coupled with persistent demand for power -plants in developing countries will help MHI restore its -exports-to-sales ratio to the past decade's average of 30 pct. - MHI's exports-to-sales ratio fell to 25.9 pct in the -half-year ended last September, from 35 to 36 pct five years -ago. - China is the most promising market, although MHI also -considers other non-oil-producing developing countries as major -customers. - "Our customers are all seen as being in trouble due to a -lack of foreign currency," Iida said. But he added that he felt -MHI could sell to those markets with Japanese government -financial support. - It can also finance the plants itself and recover its -investment through product sales, a strategy Iida said could -prove popular in the future. - In shipping, MHI is fighting back against low-priced South -Korean competition by building more technologically advanced -carriers to carry liquefied natural gas and other products -difficult to transport. - Shipbuilders Association officials told Reuters MHI is the -world's largest shipbuilder in terms of orders and capacity. - Domestically, MHI is involved in 12 national projects, -including development of nuclear fusion reactors and launch -vehicles for man-made satellites. - It has been the biggest contractor for the Japan Defence -Agency's F-15 and F-14 jet fighters and missiles, although all -of these have been built under licence from U.S. Firms. - MHI is now heading up five Japanese companies seeking to -develop the country's own fighter plane to replace the -currently used F-1 support fighters in the late 1990s. - Military experts said Washington is putting strong pressure -on Tokyo to buy a U.S. Plane, either the McDonnell Douglas Corp -F-18 or General Dynamics Corp F-16, to reduce Japan's huge -trade surplus with the U.S. - "It might be a good idea to jointly produce planes with U.S. -Makers as Japan is supported by the U.S. Defence umbrella," Iida -said. - MHI also plans to cooperate with the U.S. In its Strategic -Defence Initiative space defence program by participating in -the project when it moves from the research stage, he said. - The U.S. Has been seeking Japan's technological support. - In fiscal 1985/86, aircraft accounted for 17.1 pct of MHI's -sales, shipbuilding 17 pct and power plants 27.9 pct. Iida said -the ideal ratio is power plants 30 pct, aircraft and special -vehicles 25 pct and shipbuilding 15 pct. - As for the remaining 30 pct, Iida said he wanted to shift -the domestic focus away from heavy machinery sold to -manufacturers and towards household goods, but he declined to -specify which products. - "By the end of this year, you may find our brand name on -your daily products, although this does not mean we will run -away from our mainstream business," he said. - REUTER - - - -12-MAR-1987 00:37:11.96 - -japan - - - - - -RM -f0096reute -u f BC-JAPANESE-BANKRUPTCIES 03-12 0091 - -JAPANESE BANKRUPTCIES DECLINE IN FEBRUARY - TOKYO, March 12 - Japan's corporate bankruptcies in -February fell 10.8 pct from January to 1,071 cases and total -debts dropped 49.4 pct to 149.40 billion yen, the Tokyo -Commerce and Industry Research Co said. - February bankruptcies fell 14.9 pct from a year earlier, -the 26th straight monthly decline, and debts fell 54.3 pct. - The lower number of bankruptcies in February reflected a -relaxation of money market conditions and reduced bill -settlements due to fewer operating days, it said. - Bankruptcies caused by the strength of the yen against the -dollar totalled 69, or 6.4 pct of those in February, with debts -of 25.52 billion yen, the research firm said. - This compared with 64 with debts of 125.59 billion yen in -January, it said. - Currency-linked bankruptcies since November 1985, when the -dollar's depreciation against the yen began to affect Japanese -export-linked firms, totalled 772, with cumulative debts of -660.53 billion yen, it said. - The value of the yen against the dollar rose to an average -153.49 yen per dollar in February from 184.62 a year earlier. - Bankruptcies usually decline in the first quarter of the -year due to fewer operating days and for seasonal reasons. - Bankruptcies are expected to increase in the quarter -starting April 1 due to expectations of slow consumer spending, -low wage increases for the 1987/88 fiscal year which starts in -April, and slow capital spending by manufacturers, the company -said. - Bankrupcties among export-linked subcontractors will rise -due to a recent shift by major manufacturers to overseas -production, it added. - REUTER - - - -12-MAR-1987 00:55:57.87 -ship -bangladesh - - - - - -G C -f0108reute -u f BC-BANGLADESH-PORT-WORKE 03-12 0089 - -BANGLADESH PORT WORKERS END STRIKE - CHITTAGONG, March 12 - Cargo handling resumed at -Bangladesh's Chittagong port today after 7,000 workers ended -their three day walk-out triggered by a pay dispute, port -officials said. - Loading and unloading of 14 ships stranded by the strike -started this morning and will be completed as quickly as -possible, they said. - The strikers returned to work after an agreement was -reached last night between port authorities and the Port -Workers Association, they said without giving details. - REUTER - - - -12-MAR-1987 01:01:34.13 -acq -uk -leigh-pemberton - - - - -RM -f0111reute -u f BC-LEIGH-PEMBERTON-OPPOS 03-12 0116 - -LEIGH-PEMBERTON OPPOSES TAKEOVER PROTECTION RULES - LONDON, March 11 - The Bank of England does not favour the -introduction of rules to shield companies from hostile takeover -attempts, its governor, Robin Leigh-Pemberton, said. - Instead, merchant banks advising bidding companies must -show restraint and responsibility to avoid the excesses that -have marred recent takeovers, he told the Yorkshire and -Humberside Regional Confederation of British Industries' annual -dinner. - Leigh-Pemberton also called on companies to improve ties -with institutional investors, suggesting representatives of -those institutions be granted seats on the boards of directors -of companies they invest in. - "Boards cannot expect protection from unwelcome predators, -for that is but a short step from saying that they should be -protected from their own shareholders -- who are, after all, -the proprietors of the company," Leigh-Pemberton said. - He added takeovers and mergers had an important role to -play in furthering economies of scale, integration and more -efficient market penetration. "The degree of success or failure -(of a takeover) has not in my experience depended on whether or -not the takeover was contested," he said. - Leigh-Pemberton noted there had been excesses in takeover -activity in the recent past. "The aim is to pressurise a -company's management into action dedicated solely to a -favourable impact on the share price in the short-term, partly -or even primarily at the expense of the future," he said. - Such bids "often depend for their success on creating a -highly-charged and artificial situation in the share market, -and give rise to temptations, on both sides of the battle, to -engage in aggressive, even manipulative tactics that are -immensely damaging to the interest of the shareholders," he -said. - In a clear reference recent events, he said "those in the -City who act for companies or individuals .. Must, I suggest, -be ready to accept a full measure of responsibility -- even if -it entails opprobrium -- for the transactions that may result." - They "should exercise the most careful judgment at the -outset with respect to the clients for whom they act and the -activities contenplated. Those who sow wind cannot expect the -whirlwind to visit elsewhere," he added. - REUTER - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-005.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-005.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-005.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-005.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2012 +0,0 @@ - - -13-MAR-1987 15:05:02.92 -acq -usa - - - - - -F -f0215reute -d f BC-PLM-<PLMA>-UNIT-ENDS 03-13 0076 - -PLM <PLMA> UNIT ENDS MERGER TALKS - SAN FRANCISCO, March 13 - PLM Cos Inc said its PLM Power Co -unit broke off merger discussions with Sunlaw Energy Corp of -Beverly Hills, Calif. - In January PLM Power entered into a letter of intent to -negotiate a potential acquisition of Sunlaw, subject to -substantial due diligence, the company said. - But it also said the two companies were not able to agree -on mutually satisfactory final terms and conditions. - Reuter - - - -13-MAR-1987 15:08:53.08 -coffee -colombia - - - - - -C T -f0224reute -b f BC-colombia-opens-coffee 03-13 0086 - -COLOMBIA OPENS APRIL/MAY COFFEE REGISTRATIONS - BOGOTA, March 13 - Colombia opened coffee export -registrations for April and May with the National Coffee -Growers' Federation setting no limit, Gilberto Arango, -president of the private exporters' association, said. - He told Reuters the decision not to put any limit responded -to "new factors" which have emerged from recent International -Coffee Organisation talks in London, where producers and -consumers failed to agree on a re-introduction of export quotas. - Reuter - - - -13-MAR-1987 15:11:52.98 -graincorn -usa - - - - - -C G L -f0228reute -b f BC-/USDA-REPORTS-10.572 03-13 0098 - -USDA REPORTS 10.572 MLN ACRES IN CONSERVATION - WASHINGTON, March 13 - The U.S. Agriculture Department has -accepted 10,572,402 more acres of highly erodable cropland into -the Conservation Reserve Program, USDA announced. - In the latest signup, farmers on 101,020 farms submitted -bids on a total of 11,254,837 acres. - The accepted bids for annual rental payments ranged up to -90 dlrs per acre with an average of 51.17 dlrs per acre. - Land entered into the Conservation Reserve Program will be -ineligible for farming for ten years and must be planted with -permanent vegetative cover. - Producers enrolled 1,894,764 acres of corn base acreage in -the conservation program to take advantage of a corn "bonus" -rental payment that was offered by USDA. - The corn bonus, to be paid in generic comodity -certificates, amounts to two dlrs per bushel, based on the ASCS -program payment yield for corn, for each acre of corn based -accepted into the reserve. - The state showing the biggest enrollment in the -conservation program during this signup was Texas with -approximately 1.225 mln acres, followed by Iowa with 1.030 mln -acres, Minnesota with 890,000 acres, Montana 875,000 acres, and -Kansas with 842,000 acres. - Other states showing big enrollment were Missouri with -646,000 acres, North Dakota with 588,000 acres, and Nebraska -with 554,000 acres. - In the corn belt states of Illinois and Indiana, 217,000 -acres and 116,000 acres respectively were enrolled. - Farm land signed up to date in the conservation program -totals 19,488,587 acres. Bids on the previous signups ranged up -to 90 dlrs per acre with an average of 45.52 dlrs. - Reuter - - - -13-MAR-1987 15:13:01.16 - -usabrazil - - - - - -RM -f0233reute -u f BC-BRAZIL-DEBT-POSES-THO 03-13 0103 - -BRAZIL DEBT POSES THORNY ISSUE FOR U.S. BANKS - By Cal Mankowski, Reuters - NEW YORK, March 13 - CitiCorp <CCI> appears to be digging -in its heels for tough negotiations over the billions of -dollars in loans that Brazil owes to money center banks, Wall -Street analysts said. - "I view it as pre-negotiation posturing," said analyst -Carole Berger of Cyrus J. Lawrence Inc, referring to both -Brazil and Citicorp. Brazil recently stopped paying interest on -its commercial bank debt. Today, CitiCorp said its first -quarter income would be reduced by 50 mln dlrs after tax if it -lists the loans as non-performing status. - Citicorp filed an 8-K form with the Securities and Exchange -Commission, indicating a material change in its financial -situation. "Citicorp is saying you can't scare us with threats, -we'll make your loans non-performing right now," Berger said. - The loans have to be treated as non-performing after 90 -days without a payment. CitiCorp said only that the situation -will be reviewed at the end of the current quarter. - Berger asserted that Brazil is doing its own politicking by -talking to U.S. regulators and trying to drive a wedge between -U.S. and European banks. - Analyst Lawrence Cohn of Merrill Lynch and Co said it is -unlikely the situation will be resolved until the second half -of this year. - "Ultimately the Brazilians are going to have to pay up on -all the interest they owe," Cohn said. "The real issue is the -rescheduling of debt terms. - Another question is whether or not the International -Monetary Fund can help Brazil with a new austerity program. - Stocks of money center banks were mostly down fractions in -late dealings. One trader most stocks in the group bounced off -their lows by midday as investors took the news in stride. - Cohn said the bank stocks may be risky until numbers on -non-performing loans are reported for each bank. But he said -investors looking ahead six to 12 months might want to buy at -present levels for the "tremendous fundamental values" in the -group. - Analyst Robert Gordon of Shearson Lehman Brothers Inc said -Manufacturers Hanover Corp <MHC) has the greatest exposure to -Brazilian loans of any New York bank, in terms of percentage of -earnings. He said his only two recommendations currently among -New York banks are J.P. Morgan and Co <JPM> and Bankers Trust -Co <BT> which happen to have the least exposure. - Gordon said his positive opinion on J.P. Morgan and Bankers -Trust was not merely a response to the fact that the two have -lower exposure to Brazilian loans than other banks. - In fact he said there's a chance those banks could get more -involved in the future. He noted that Morgan has already set up -a brokerage subsidiary to deal in loans to less developed -countries. - "I don't see any reason to change full year earnings -estimates, said Frederick Meinke, analyst at E.F. Hutton Co. He -thinks the confrontation with Brazil could end in a replay of a -situation that occurred with Argentina in 1984 and 1985. - Meinke noted that in the case of Argentina the loans became -non-accruing for a couple of quarters but then when the banks -came to an agreement with Argentina all the back interest was -paid. "What it did was distort the quarterly earnings pattern," -he said. - He said in the case of Brazil write-offs of loans is a -worst-case outcome which is highly unlikely. He noted that -Brazil is a country with a diversified economy, going through -some economic upheaval after the transition from a military to -a civilian government. - "The countries of Latin America have too much debt relative -to their ability to service it," said John Mason of -Interstate Securities. "We've been fiddling around with these -problems for five years and the hour is growing late." - He said up to now the banks have reduced their spreads, cut -interest rates internally and extended maturities and none of -these measures has been enough. He expects re-classification of -as much as a third of the loans as non-accruing and he sees -partial write downs of some loans. - Nevertheless Mason thinks the money center bank stocks -could be poised for a short term rally. - A spokesman at First Chicago Corp <FNB> said it is -premature to put Brazil's loans on a cash basis. "It is our -expectation that economic development will allow Brazil to meet -its debt," a spokesman said. - Bankers Trust in New York said it would be premature to -make a decision. Several other banks queried by Reuters said -much the same thing. - A spokesman at Manufacturers Hanover noted that of 2.3 -billion dlrs in loan exposure to Brazil only 1.3 billion is -subject to Brazil's unilateral moratorium on repayment of -interest. - - Reuter - - - -13-MAR-1987 15:13:10.18 - -usa - - - - - -F -f0234reute -b f BC-ROCKWELL-<ROK>-TO-REP 03-13 0112 - -ROCKWELL <ROK> TO REPURCHASE MORE COMMON SHARES - PITTSBURGH, March 13 - Rockwell International Corp said its -board has authorized extension of the company's 500 mln dlr -stock repurchase program by an additional 500 mln dlrs. - Since the beginning of the present repurchase program in -March 1986, Rockwell said, it has bought 10.4 mln shares for -461 mln dlrs. At present prices, it said, the program would -reduce the presently outstanding 140 mln common shares by about -seven pct. Since November 1983, the company has repurchased -18.1 mln shares for 672 mln dlrs, it said. - Rockwell said the stock will be repurchased through open -market and private transactions. - Rockwell said the repurchased shares will be available for -potential acquisitions, stock options, employee benefit -programs, conversion of convertible securities and other -purposes. - The company said, "We continue to view our repurchase -program as an integral part of our long term goal of improving -shareholder values." - Rockwell said the program "complements our aggressive -program of support for the growth plans of our businesses with -capital investments, product and research development -resources, and acquisitions in support of our core businesses." - - Reuter - - - -13-MAR-1987 15:14:20.63 - -usa - - - - - -F Y -f0237reute -r f BC-VOGTLE-NUCLEAR-PLANT 03-13 0100 - -VOGTLE NUCLEAR PLANT GETS FULL-POWER LICENSE - ATLANTA, March 13 - The Nuclear Regulatory Commission -issued a full-power operating license for Unit 1 of the Vogtle -Electric Generating Plant, said Southern Co <SO> unit Georgia -Power, which is a co-owner of the plant. - Georgia Power said the license allows for completion of -pre-operational testing, which will be followed by full-power -operation. Unit 1 is scheduled to begin commerical operation by -June one, it said. - The other co-owners of the plant are <Olgethorpe Corp>, the -Municpal Electric Authority of Georgia and the city of Dalton. - Reuter - - - -13-MAR-1987 15:19:10.06 - -ukjapanusa - - - - - -F -f0255reute -r f BC-BRITISH-AIRWAYS-<BAB> 03-13 0081 - -BRITISH AIRWAYS <BAB> TO FLY TO TOKYO NON-STOP - NEW YORK, March 13 - British Airways said the British -government reached an agreement on new traffic rights with the -Japanese government which clears the way for non-stop flights -between London and Tokyo. - The flight is scheduled to cut across Siberia, shaving -almost six hours off the previous flight path to 11-1/2 hours, -British Airways said. - The trans-Siberian route is subject to approval by the -USSR, British Airways added. - Under the agreement, British Airways said it will continue -to leave Heathrow daily, but the new non-stop service will -operate on Thursdays and Saturdays starting early June. The -company said return flights will be on Fridays and Sundays. - Reuter - - - -13-MAR-1987 15:20:20.42 - -ukjapan - - - - - -A -f0260reute -h f BC-BRITAIN-WANTS-BANK-RE 03-13 0118 - -BRITAIN WANTS BANK REGULATION DEAL WITH JAPAN - LONDON, March 13 - Britain wants Japan to agree a timetable -for work towards joint rules on capital adequacy for banks -along the lines of a January outline agreement between the U.S -and the U.K., Corporate Affairs Minister Michael Howard said. - Howard told a Nikkei conference on Tokyo financial markets, -"I want to see an agreement between us on what progress is to be -made and the rate at which it will happen." - Japanese vice-minister of finance for international affairs -Toyoo Gyohten told the conference yesterday he was ready to -discuss capital adequacy, but no negotiations were planned and -he could not see how or when agreement would be reached. - Reuter - - - -13-MAR-1987 15:21:39.08 -livestockcarcass -usa - -ec - - - -C G L -f0264reute -u f BC-/U.S.-MEAT-GROUP-TO-F 03-13 0131 - -U.S. MEAT GROUP TO FILE TRADE COMPLAINTS - WASHINGTON, March 13 - The American Meat Institute, AME, -said it intended to ask the U.S. government to retaliate -against a European Community meat inspection requirement. - AME President C. Manly Molpus also said the industry would -file a petition challenging Korea's ban of U.S. meat products. - Molpus told a Senate Agriculture subcommittee that AME and -other livestock and farm groups intended to file a petition -under Section 301 of the General Agreement on Tariffs and Trade -against an EC directive that, effective April 30, will require -U.S. meat processing plants to comply fully with EC standards. - The meat industry will seek to have the U.S. government -retaliate against EC and Korean exports if their complaints are -upheld. - Reuter - - - -13-MAR-1987 15:21:47.30 - -usa - - - - - -F -f0265reute -r f BC-COMMERCE-BANCORP-<COB 03-13 0095 - -COMMERCE BANCORP <COBA> FILES FOR OFFERING - CHERRY HILL, N.J., March 13 - Commerce Bancorp Inc said it -has filed a registration statement with the Securities and -Exchange Commission for a 575,000 share Series B cumulative -preferred stock offering, including 75,000 shares to cover -allotments. - Commerce said it and its banking subsidiaries will use the -proceeds to support their planned growth and for general -corporate purposes. - The bank holding company said each share of preferred -stocks initially will be convertible into one share of Commerce -common stock. - Commerce said the preferred shares will be priced at a -range of 20-22 dlrs a share, with a proposed sale to the public -commencing in early-to-mid April. - Commerce said Butcher and Singer Inc will be the offering's -managing underwriter. - Reuter - - - -13-MAR-1987 15:21:53.56 - -usa - - - - - -F -f0266reute -d f BC-ADIA-SERVICES-<ADIA> 03-13 0080 - -ADIA SERVICES <ADIA> SELLS 500,000 SHARES - MENLO PARK, Calif., March 13 - Adia Services Inc said it -agreed to sell 500,000 shares of common stock to its principal -stockholder, Adia S.A., at a price based on the current market -price. - The sale will raise Adia S.A.'s ownership in the company to -74.7 pct from 72.7 pct, Adia said. - The company also said it intends to use proceeds from the -stock sale to retire debt, for working capital and for general -corporate purposes. - Reuter - - - -13-MAR-1987 15:22:36.13 -earn -usa - - - - - -F -f0268reute -s f BC-MET-PRO-CORP-<MPR>-TO 03-13 0024 - -MET-PRO CORP <MPR> TO PAY REGULAR DIVIDEND - HARLEYSVILLE, Pa., March 13 - - Qtrly 15 cts vs 15 cts prior - Pay May Eight - Record April 24 - Reuter - - - -13-MAR-1987 15:24:00.88 -earn -usa - - - - - -F -f0270reute -h f BC-AILEEN-INC-<AEE>-1SR 03-13 0028 - -AILEEN INC <AEE> 1SR QTR JAN 31 LOSS - NEW YORK, March 13 - - Shr loss 30 cts vs loss 20 cts - Net loss 1,553,000 vs loss 1,031,000 - Revs 10.0 mln vs 8,696,000 - Reuter - - - -13-MAR-1987 15:25:16.54 - -usa - - - - - -A RM -f0271reute -r f BC-INT'L-GAME-TECHNOLOGY 03-13 0065 - -INT'L GAME TECHNOLOGY <IGAM> TO SELL DEBT - NEW YORK, March 13 - International Game Technology said it -filed with the Securities and Exchange Commission a -registration statement covering a 35 mln dlr issue of senior -notes due 1995 and a 25 mln dlr issue of convertible senior -subordinated debentures due 2002. - The company named Drexel Burnham Lambert Inc as sole -manager of the offerings. - Reuter - - - -13-MAR-1987 15:32:32.81 -earn -usa - - - - - -F -f0285reute -u f BC-resending 03-13 0066 - -WOLVERINE WORLD WIDE INC <WWW> 4TH QTR LOSS - ROCKFORD, MICH., March 13 - - Shr loss six cts vs profit 55 cts - Net loss 414,000 vs profit 3,936,000 - Sales 109.4 mln vs 126.8 mln - Year - Shr loss 1.75 dlrs vs profit 55 cts - Net loss 12,589,000 vs profit 3,965,000 - Sales 341.7 mln vs 389.5 mln - NOTE: Year results include 14.0 mln dlr restructuring -charge in 2nd Qtr of 1986 - Reuter - - - -13-MAR-1987 15:32:42.51 - -usa - - - - - -F -f0286reute -r f BC-MEAD-<MEA>-FILES-150 03-13 0094 - -MEAD <MEA> FILES 150 MLN DLR SHELF REGISTRATION - DAYTON, Ohio, March 13 - Mead Corp said it filed a shelf -registration with the Securities and Exchange Commission -covering potential debt securities offerings of up to 150 mln -dlrs. - It said the underwriters for this offerings may include -Smith Barney, Harris Upham and Co Inc, Goldman Sachs and Co -and/or Salomon Brothers Inc. - Mead said proceeds will be used to retire short-term debt, -a portion of which was incurred to finance part of the recent -acquisitions of Ampad Corp and Zellerbach Distribution Group. - Reuter - - - -13-MAR-1987 15:33:15.31 -graincorn -usamexico - - - - - -C G -f0287reute -f f BC-ussr-export-sale 03-13 0012 - -******U.S. EXPORTERS REPORT 122,000 TONNES CORN SOLD TO MEXICO FOR 1986/87 -Blah blah blah. - - - - - -13-MAR-1987 15:34:07.21 -earn -usa - - - - - -F -f0290reute -r f BC-HURCO-COMPANIES-INC-< 03-13 0036 - -HURCO COMPANIES INC <HURC> FIRST QTR NET - INDIANAPOLIS, March 13 - - Shr profit three cts vs loss 18 cts - Net profit 124,000 vs loss 370,000 - Rev 11.3 mln vs 11.7 mln - Avg shares 3,673,000 vs 2,368,000 - Reuter - - - -13-MAR-1987 15:38:11.97 - -usa - - - - - -F -f0295reute -r f BC-ALCIDE'S-<ALCD>-SHELF 03-13 0036 - -ALCIDE'S <ALCD> SHELF REGISTRATION EFFECTIVE - NORWALK, Conn., March 13 - Alcide Corp said its shelf -registration of 4,500,000 shares of common has been declared -effective by the Securities and Exchange Commission. - Reuter - - - -13-MAR-1987 15:39:02.46 -acq -usa - - - - - -F -f0298reute -r f BC-MAXTOR-<MXTR>-AGREES 03-13 0107 - -MAXTOR <MXTR> AGREES TO ACQUIRE U.S. DESIGN - SAN JOSE, Calif., March 13 - Maxtor Corp and U.S. Design -Corp <USDC>, said they reached definitive agreement covering -the acquisition of U.S. Design by Maxtor. - They said the arrangement, which is subject to a number of -conditions including U.S. Design shareholder approval, calls -for Maxtor to issue 12 mln dlrs worth of its own common stock -in exchange for all of U.S. Design. - The number of Maxtor shares to be issued will be determined -by the average closing price of Maxtor stock over the 10 -trading day period prior to the day the acquisition becomes -effective, the companies also said. - Reuter - - - -13-MAR-1987 15:39:21.46 -earn -usa - - - - - -F -f0299reute -s f BC-SHARED-MEDICAL-SYSTEM 03-13 0024 - -SHARED MEDICAL SYSTEMS CORP <SMED> SETS PAYOUT - MALVERN, Pa., March 13 - - Qtly div 18 cts vs 18 cts prior - Pay April 15 - Record March 31 - Reuter - - - -13-MAR-1987 15:39:34.41 - -usa - - - - - -F -f0300reute -r f BC-INTERNATIONAL-LEASE-F 03-13 0064 - -INTERNATIONAL LEASE FINANCE <ILFC> PICKS ENGINE - EVENDALE, Ohio, March 13 - International Lease Finance Corp -said it picked the CFM International CFM56-5 high bypass -turbofan engine to power its three new Airbus Industries A320 -aircraft. - International Lease said it is negotiating to buy up to 27 -more A320s. Initial aircraft deliveries are planned for 1991, -the company said. - Reuter - - - -13-MAR-1987 15:40:26.67 - -usa - - - - - -A -f0301reute -d f BC-JWP-<JWP>-SELLS-30-ML 03-13 0053 - -JWP <JWP> SELLS 30 MLN DLRS OF NOTES - LAKE SUCCESS, N.Y., March 13 - JWP Inc said it sold 30 mln -dlrs principal amount of its 9.25 pct senior notes due 1996 to -certain institutional lenders. - The company said about 15 mln dlrs of the proceeds will be -used to pay debt and the balance for general corporate purposes. - Reuter - - - -13-MAR-1987 15:41:03.47 - - - - - - - -F RM -f0302reute -f f BC-******S/P-UPGRADES-UN 03-13 0010 - -******S/P UPGRADES UNION CARBIDE CORP'S 1.2 BILLION DLRS OF DEBT -Blah blah blah. - - - - - -13-MAR-1987 15:41:10.37 - - - - - - - -RM -f0303reute -f f BC-ELECTRICITE-DE-FRANCE 03-13 0014 - -******ELECTRICITE DE FRANCE SAYS IT WILL LAUNCH EURO-COMMERCIAL PAPER PROGRAM ON MONDAY -Blah blah blah. - - - - - -13-MAR-1987 15:41:31.04 - -usa - - - - - -F -f0304reute -d f BC-STORAGE-TECH-<STK>-IN 03-13 0104 - -STORAGE TECH <STK> IN DISCUSSIONS WITH IRS - VAIL, Colo., March 13 - Storage Technology Corp said it is -holding dicussions with the Internal Revenue Service that could -end their dispute over the amount of back taxes owed by the -company. - "We are currently pursuing discussions with the IRS that -could lead to a final solution," Stephen G. Jerritts, president -and chief operating officer said. "Simultaneously, we are -taking all necessary actions to try to expedite the court -appeal process, resolve these issues and allow final court -approval of the plan of reorganization, by our target date of -June 30, 1987," he said. - Last year, Storage Technology's bankruptcy court ruled that -the company owed about 25 mln dlrs in taxes, an amount much -lower than the IRS is seeking. - The IRS has appealed the court's decision. - Jerritts also said his company and <Siemens AG> of West -Germany extended an agreement under which Storage Technology -distributes a laser printer made by Siemens. - Reuter - - - -13-MAR-1987 15:41:46.52 - -usa - - - - - -C M -f0306reute -d f BC-U.S.-EARLY-MARCH-CAR 03-13 0128 - -U.S. EARLY MARCH CAR SALES OFF 2.2 PCT - DETROIT, March 13 - Retail sales of new cars by U.S. -automakers eased 2.2 pct in early March to the weakest levels -since 1983, with industry giant General Motors Corp down 9.3 -pct while Ford Motor Co and Chrysler Corp both had gains. - The decline by GM continued its trend of weaker sales since -the beginning of the 1987 model year, which has forced the -world's biggest corporation to cut its car production several -times through temporary and permanent layoffs at various -plants. - Consumer incentives apparently had some success, analysts -said, as the seasonally adjusted annualized sales rate improved -to 7.5 mln compared with about 7.0 mln in late February. The -eight domestic carmakers sold 8.2 mln units during 1986. - Reuter - - - -13-MAR-1987 15:42:09.99 - -usa - - - - - -F -f0310reute -h f BC-CAPITAL-INVESTMENTS-F 03-13 0038 - -CAPITAL INVESTMENTS FORMS UNIT - BOCA RATON, Fla., March 13 - <Capital Investments -Development Corp> said it formed Bradford-Taylor Clearing House -Inc, a unit that will compile mailing lists for use by the -direct mail industry. - Reuter - - - -13-MAR-1987 15:45:20.31 -earn -usa - - - - - -F -f0315reute -d f BC-WEIGH-TRONIX-INC-<WGH 03-13 0047 - -WEIGH-TRONIX INC <WGHT> 4TH QTR NET - FAIRMONT, MINN., March 13 - - Shr 18 cts vs 16 cts - Net 348,298 vs 308,927 - Sales 4,166,750 vs 3,740,970 - Year - Shr 72 cts vs 52 cts - Net 1,409,867 vs 1,020,096 - Sales 16.5 mln vs 15.0 mln - Avg shrs 1,974,529 vs 1,956,214 - Reuter - - - -13-MAR-1987 15:45:27.49 - -uk - - - - - -RM F A -f0316reute -r f BC-GOLDMAN-SACHS-GIVEN-B 03-13 0099 - -GOLDMAN SACHS GIVEN BOGUS EXXON BONDS IN TRADE - LONDON, March 13 - Goldman Sachs International Corp -received forged bonds of a unit of Exxon Corp <XON> in a trade, -a spokesman for Goldman Sachs and Co Inc said in a telephone -conversation from New York. - He said the transaction left Goldman Sachs International -with an exposure of about 2.2 mln dlrs but that it had -insurance to cover the loss. - The spokesman was responding to an enquiry about an item in -the London "Standard" newspaper, which said Goldman Sachs "is -feared to be the victim of a new multi-million pound City -scandal." - The newspaper also said, "The firm (Goldman Sachs) is -believed to be the paying agent for some 900 bonds issued in -the name of oil giant Exxon which were deposited at banks in -Brussels and have now been found to be forgeries." - The spokesman said that the bonds were delivered to the -firm by a man working on behalf of a third party. He said it -wasn't until the bonds were cleared through Euro-clear (a major -clearing house for the eurobond market) that it was discovered -they were forgeries. - The spokesman also said he believed that the intermediary -had been apprehended by police. However, a spokesman for the -City of London police said he was unaware of such an arrest and -could neither confirm nor deny it. - Last Friday, Exxon Corp said forgeries of a 20-year zero -coupon euronote issued by its Exxon Capital Corp subsidiary -have been discovered in the European market. It also said -Morgan Guaranty Trust Co was the fiscal agent and paying agent -and that Morgan, Euro-clear and Cedel (another major clearing -system) and police in London and Brussels were investigating -the case. - Reuter - - - -13-MAR-1987 15:45:35.38 -livestockcarcass -usa - -ec - - - -F -f0317reute -d f BC-U.S.-MEAT-GROUP-TO-FI 03-13 0109 - -U.S. MEAT GROUP TO FILE TRADE COMPLAINTS - WASHINGTON, March 13 - The American Meat Institute, AME, -said it intended to ask the U.S. government to retaliate -against a European Community meat inspection requirement. - AME President C. Manly Molpus also said the industry would -file a petition challenging Korea's ban of U.S. meat products. - Molpus told a Senate Agriculture subcommittee that AME and -other livestock and farm groups intended to file a petition -under Section 301 of the General Agreement on Tariffs and Trade -against an EC directive that, effective April 30, will require -U.S. meat processing plants to comply fully with EC standards. - - Reuter - - - -13-MAR-1987 15:47:27.24 - -uk - - - - - -A RM -f0322reute -u f BC-EDF-TO-LAUNCH-EURO-CP 03-13 0116 - -EDF TO LAUNCH EURO-CP PROGRAM MONDAY - LONDON, March 13 - <Electricite de France> (EdF) will make -its first offering of Euro-commercial paper in the -international market on Monday, EdF chief financial officer -Daniel Lallier said in a telephone call from Paris. - The program was announced in late January and dealers -expect the company will be pushing to maintain its ability to -obtain some of the finest terms available in the international -markets. - Lallier did not say how much would be offered, although he -has noted that EDF would be cautious because it believes the -market is still in its infancy. In January he said EdF may not -issue more than 300 to 500 mln dlrs of paper this year. - EdF plans to oversee the program itself, with Goldman Sachs -International Corp, Morgan Guaranty Ltd and Salomon Brothers -International Ltd acting as dealers for the general program, -which will be aimed at institutional and retail investors. - Union Bank of Switzerland will act as dealer for a specific -program, which is aimed at smaller retail investors. - Reuter - - - -13-MAR-1987 15:47:50.80 -graincorn -usa - - -cbt - - -C G -f0324reute -b f BC-/CBT-TRADERS-SAY-U.S. 03-13 0138 - -CBT TRADERS SAY U.S. CONSERVATION SIGNUP NEUTRAL - CHICAGO, March 13 - The 11,254,837 acres of highly erodable -farmland submitted to the U.S. Department of Agriculture for -the conservation reserve program was within trade guesses of -10-12 mln and should have an overall neutral impact on grain -and soybean prices Monday, grain traders said. - Farmers enrolled 1,894,764 acres of corn base acreage in -the conservation program to take advantage of a corn bonus -rental payment that was offered by the USDA, which may underpin -new crop futures, they said. - New crop corn prices firmed earlier this week on ideas of a -large sign-up in the program. But traders noted that the poor -yielding acres being set-aside will result in only a modest -decrease in final production figures, since farmers will -concentrate on high yielding land. - Of a total 11,254,837 erodoble acres submitted, usda -accepted 10,572,402 acres into the program at an average rental -payment of 51.17 dlrs per acre. - Farm land signed up to date now totals 19,488,587 acres. - Reuter - - - -13-MAR-1987 15:48:34.01 -earn -usa - - - - - -F -f0330reute -d f BC-MONARCH-AVALON-INC-<M 03-13 0064 - -MONARCH AVALON INC <MAHI> 3RD QTR JAN 31 LOSS - BALTIMORE, March 13 - - Shr loss 11 cts vs profit four cts - Net loss 199,000 vs profit 81,000 - Rev 1.9 mln vs 2.5 mln - Nine months - Shr loss 14 cts vs profit 15 cts - Net loss 261,000 vs profit 273,000 - Rev 6.4 mln vs 7.6 mln - NOTE: Per share information adjusted for three-for-two -stock split on January 31, 1986. - Reuter - - - -13-MAR-1987 15:52:33.91 - -canada - - - - - -E RM -f0336reute -r f BC-bcresources 03-13 0102 - -B.C. RESOURCES HAS NEW 360 MLN DLR CREDIT LINE - VANCOUVER, British Columbia, March 13 - British Columbia -Resources Investment Corp said it successfully concluded -refinancing negotiations with bankers for a new 360 mln dlr -restructured credit facility. - The credit line will be in place for four years to March -31, 1991, but is extendable up to 10 years under certain -circumstances which were not specified by the company. - B.C. Resources said subsidiaries Westar Timber and Westar -Petroleum have settled revised lending agreements, but debt -discussions regarding subsidiary Westar Mining are continuing. - - Reuter - - - -13-MAR-1987 15:53:40.40 - -argentina -machinea - - - - -RM F A -f0338reute -u f BC-ARGENTINE-DEBT-TALKS 03-13 0115 - -ARGENTINE DEBT TALKS DIFFICULT - CENTRAL BANK - BUENOS AIRES, March 13 - Central Bank President Jose Luis -Machinea said negotiations with creditor banks on Argentina's -30 billion dlr private sector foreign debt were difficult. - "There is considerable divergence with the banks. We must -try to get them to lower the spreads," Machinea told Reuter. - He said negotiations with the steering committee for the -country's creditor banks in New York would not end next week. - Machinea leaves for New York tomorrow with Treasury -Secretary Mario Brodersohn to complete Argentina's team at -negotiations with the steering committee for a 2.15 biilion dlr -loan to see the country through 1987. - Machinea said Argentina had World Bank support. He said he -and Economy Minister Juan Sourrouille had discussed Argentina's -loan request with World Bank Vice-President David Knox, who is -currently in Buenos Aires. - Argentina is aiming at four pct growth in 1987 and has said -this target is not negotiable. It has indicated that it would -not put payment of interest due on its foreign debt ahead of -its growth target if the loan was not granted. - The United States and 12 other industrial nations granted -Argentina a 500 mln dlr bridge which was received this week. - Talks on the 2.15 billion dlr lona began in January. - Reuter - - - -13-MAR-1987 15:54:21.09 -crudegasnat-gaswpi -usa - - - - - -C M -f0339reute -r f BC-U.S.-PRODUCER-ENERGY 03-13 0116 - -U.S. PRODUCER ENERGY PRICES RISE IN FEBRUARY - WASHINGTON, March 13 - Prices of wholesale finished energy -goods in the U.S. rose 4.0 pct in February after a 9.8 pct rise -in January, the Labor Department said. - The Producer Price Index for finished energy goods fell by -20.9 pct in the past 12 months. - Heating oil prices rose 3.0 pct in February after a 18.0 -pct rise in January, the department said. - Gasoline prices rose by 5.5 pct last month after a 15.7 -pct January rise, the department said. Natural gas prices rose -1.8 pct after a 4.2 pct rise in January. - Crude oil prices rose 4.4 pct in February, after a 19.7 pct -January rise and were off 21.3 pct from the year ago level. - Reuter - - - -13-MAR-1987 15:55:47.33 - -usa - - - - - -A RM -f0342reute -u f BC-UNION-CARBIDE-<UK>-DE 03-13 0103 - -UNION CARBIDE <UK> DEBT UPGRADED BY S/P - NEW YORK, March 13 - Standard and Poor's Corp said it -upgraded 1.2 billion dlrs of debt of Union Carbide Corp and its -affiliate, DCS Capital Corp. - Raised were the pair's senior debt to BB-plus from -BB-minus. Union Carbide's subordinated debt was upgraded to -BB-minus from B. - S and P said the action reflected several positive factors -which emerged over the past year, including a better balance of -supply and demand in the chemical industry. Union Carbide has -also benefitted from the turnaround in foreign exchange rates -and lower feedstock costs, the agency noted. - Standard and Poor's said the company's asset sales, and -subsequent use of the proceeds for debt reduction, exceeded the -corporate plan of a year ago. - The rating agency also pointed out that Union Carbide's -successful refinancing of more than 2.5 billion dlrs of -long-term debt has resulted in a substantially lower interest -burden. - Reuter - - - -13-MAR-1987 15:56:03.81 - -usa - - - - - -F -f0343reute -u f BC-U.S.-EARLY-MARCH-CAR 03-13 0095 - -U.S. EARLY MARCH CAR SALES OFF 2.2 PCT - By Richard Walker, Reuters - DETROIT, March 13 - Retail sales of new cars by U.S. -automakers eased 2.2 pct in early March to the weakest levels -since 1983, with industry giant General Motors Corp <GM> down -9.3 pct. - Ford Motor Co <F> and Chrysler Corp <C> both had gains. - The decline by GM continued its trend of weaker sales since -the beginning of the 1987 model year, which has forced the -world's biggest corporation to cut its car production several -times through temporary and permanent layoffs at various -plants. - Relatively weaker sales by all of the Detroit Big Three -carmakers have compelled the companies to offer a string of -sales incentives including cash rebates and below-market -interest loans in an effort to reignite the market. - Incentives apparently had some success, analysts said, as -the seasonally adjusted annualized sales rate improved to 7.5 -mln compared with about 7.0 mln in late February. The eight -domestic carmakers sold 8.2 mln units during 1986. - GM said its sales of domestic-built cars in the March 1-10 -period declined to 97,487 from 104,952 a year ago while truck -sales rose 14.4 pct to 40,131 from 35,081. There were eight -selling days in each period. - Despite the lower car sales, the giant automaker had a -bright spot as its Chevrolet division, which is launching a -national sales campaign this month for its new Corsica and -Beretta compact cars, was up almost 21 pct when only -domestic-built cars were counted. GM's Buick division was also -up, by 11.4 pct, while Cadillac was down 7.8 pct, Pontiac was -off 10.8 pct and Oldsmobile plunged 41 pct. - GM also showed an improvement in its market share to 53.6 -pct from 48.1 pct in late February, which analysts said was -partly due to the increasing sales for the new Chevrolets. - Meanwhile, Ford said its car sales rose 5.9 pct to 50,407 -compared with 47,592 a year ago while truck sales gained by -12.6 pct to 35,814 from 31,811. - Number three Chrysler's car sales gained to 0.4 pct to -25,286 from 25,191 while its truck sales gained 15 pct to -15,565 from 13,585. The truck sales were a record for the -period, the company said. - Among the smaller makers, Honda <HMC> said domestic car -sales rose 16 pct to 4,394 from 3,786 and Volkswagen of America -rose 4.9 pct to 849 from 809. - American Motors Corp <AMO> fell 57 pct to 760 from 1,780 -for cars but rose 18 pct in jeep sales to 4,500 from 3,800. - Nissan <NSANY> car sales rose 19.1 pct to 2,137 from 1,794 -and gained 3.6 pct on trucks to 1,686 from 1,628. Toyota -<TOYOY> said it sold 500 U.S.-built cars compared with none a -year ago. - Reuter - - - -13-MAR-1987 15:56:39.68 -cotton -usa - - - - - -C G -f0344reute -u f BC-/U.S.-COTTON-CERTIFIC 03-13 0137 - -U.S. COTTON CERTIFICATE EXPIRATION DATE EXTENDED - WASHINGTON, March 13 - Expiration dates on upland cotton -certificates issued under the 1986 upland cotton program are -being extended, the Agriculture Department announced. - The certificates are being extended because of a shortage -of Commodity Credit Corporation inventory available for -exchange with certificates, USDA undersecretary Danial Amstutz -said. - Presently, upland cotton commodity certificates expire nine -months from the last day of the month of issuance. - Under the new procedure, all current outstanding and all -new upland cotton certificates issued under the 1986 upland -cotton program will have an expiration date of either February -29, 1988, or nine months from the last day of the month in -which the certificate is issued, whichever is later. - Reuter - - - -13-MAR-1987 15:59:24.64 - -usa - - - - - -A RM -f0348reute -u f BC-S/P-DOWNGRADES-MICHIG 03-13 0113 - -S/P DOWNGRADES MICHIGAN GENERAL <MGL> DEBT - NEW YORK, March 13 - Standard and Poor's Corp said it cut -to C from CCC-minus Michigan General Corp's 110 mln dlrs of -10-3/4 pct senior subordinated debentures due 1998. - S and P said if Michigan General's exchange offer for the -debentures is not successful, the firm anticipates it will -default on the June 1 interest payment and will have to seek -protection from creditors under the Federal Bankruptcy Act. - The exchange offer faces numerous obstacles, including the -tender of at least 90 pct of the debentures and additional -financing from lenders, S and P noted. - The company's implied senior debt rating is CCC-minus. - Reuter - - - -13-MAR-1987 15:59:41.96 -earn -italy - - - - - -RM -f0349reute -u f BC-BNL-ANNOUNCES-NET-198 03-13 0083 - -BNL ANNOUNCES NET 1986 PROFITS IN BANK SECTOR - ROME, March 13 - State-owned <Banca Nazionale del Lavoro -BNL> said 1986 profits for its banking activities equalled 155 -billion lire against 146 billion lire in 1985. - Consolidated 1986 results for BNL, which also has interests -in tourism, public works, industrial credit and other sectors, -are expected to be announced later this year. - The results for the banking sector are to be presented at a -shareholders meeting scheduled for April 29. - Reuter - - - -13-MAR-1987 16:00:21.17 -earn -usa - - - - - -F -f0353reute -d f BC-APPLIED-DNA-SYSTEMS-I 03-13 0069 - -APPLIED DNA SYSTEMS INC <ADNA> 4TH QTR LOSS - NEW YORK, March 13 - - Shr loss one ct vs nil - Net loss 148,007 vs loss 58,863 - Revs 198,919 vs 133,071 - Avg shrs 7,476,433 vs 6,633,989 - Year - Shr loss three cts vs loss six cts - Net loss 230,949 vs 424,719 - Revs 666,626 vs 509,971 - NOTE: Amounts include losses of a 50 pct owned scientific -development affiliate, Analytical Biosystems Corp. - Reuter - - - -13-MAR-1987 16:05:31.61 -acq -usa - - - - - -F Y -f0366reute -r f BC-QED 03-13 0094 - -OILMAN HAS 8.7 PCT OF QED EXPLORATION <QEDX> - WASHINGTON, March 13 - Kansas oilman Nicholas Powell told -the Securities and Exchange Commission he has acquired 195,000 -shares of QED Exploration Inc, or 8.7 pct of the total -outstanding common stock. - Powell, who heads Prairie Resources Corp and Mack C. Colt -Inc, both Kansas oil and gas exploration companies, said he -bought the stock for investment purposes. - Powell, who said he has already spent 609,831 dlrs on his -QED stock, said he plans to buy more shares as long as he -considers them to be undervalued. - Reuter - - - -13-MAR-1987 16:05:38.71 - -usa - - - - - -F -f0367reute -d f BC-TEXAS-AIR-<TEX>-NAMES 03-13 0052 - -TEXAS AIR <TEX> NAMES BRITT AIRWAYS PRESIDENT - HOUSTON, March 13 - Texas Air Corp said it named Norman -McInnis as president of its Britt Airways unit, succeeding Bill -Britt, who retired March one. - McInnis, former president of Royale Airlines, most recently -was a consultant to the commuter airline industry. - - Reuter - - - -13-MAR-1987 16:05:59.28 -earn - - - - - - -E F -f0370reute -b f BC-labatt 03-13 0009 - -******JOHN LABATT LTD 3RD QTR SHR DILUTED 32 CTS VS 30 CTS -Blah blah blah. - - - - - -13-MAR-1987 16:06:21.90 - -usa - - - - - -F -f0373reute -d f BC-ARMATRON-<ART>-NEGOTI 03-13 0043 - -ARMATRON <ART> NEGOTIATES NEW CREDIT LINE - MELROSE, Mass., March 13 - Armatron International Inc said -it negotiated a new seasonal line of credit with three lenders -for 10 mln dlrs for working capital requirements to support its -lawn and garden product line. - Reuter - - - -13-MAR-1987 16:06:58.01 -earn -usa - - - - - -F -f0375reute -d f BC-LIFESTYLE-RESTAURANTS 03-13 0049 - -LIFESTYLE RESTAURANTS INC <LIF> 1ST QTR JAN 24 - NEW YORK, March 13 - - Shr loss 31 cts vs loss eight cts - Net loss 1,780,000 vs loss 449,000 - Revs 13.9 mln vs 17.8 mln - NOTE: Current 1st qtr loss included a gain of 870,000 dlrs -and 70,000 dlrs from the sale of restaurant leases. - Reuter - - - -13-MAR-1987 16:07:06.10 - -usa - - - - - -A RM -f0376reute -u f BC-TREASURY-BALANCES-AT 03-13 0085 - -TREASURY BALANCES AT FED ROSE ON MARCH 12 - WASHINGTON, March 13 - Treasury balances at the Federal -Reserve rose on March 12 to 3.038 billion dlrs on March 12 from -2.715 billion dlrs the previous business day, the Treasury said -in its latest budget statement. - Balances in tax and loan note accounts fell to 7.623 -billion dlrs from 8.870 billion dlrs on the same respective -days. - The Treasury's operating cash balance totaled 10.661 -billion dlrs on March 12 compared with 11.586 billion dlrs on -March 11. - Reuter - - - -13-MAR-1987 16:07:38.14 -earn -usa - - - - - -F -f0379reute -r f BC-SIERRA-HEALTH-SERVICE 03-13 0051 - -SIERRA HEALTH SERVICES INC <SIE> 4TH QTR LOSS - LAS VEGAS, Nev., March 13 - - Shr loss 52 cts vs profit six cts - Net loss 2,943,000 vs profit 334,000 - Revs 33.5 mln vs 18.5 mln - Year - Shr loss 1.57 dlrs vs profit 16 cts - Net loss 8,781,000 vs profit 792,000 - Revs 116.0 mln vs 56.5 mln - - Reuter - - - -13-MAR-1987 16:08:43.39 -earn -usa - - - - - -F -f0384reute -d f BC-FIRECOM-INC-<FRCM>-3R 03-13 0049 - -FIRECOM INC <FRCM> 3RD QTR JAN 31 LOSS - NEW YORK, March 13 - - Shr loss two cts vs profit two cts - Net loss 104,874 vs profit 90,470 - Sales 3,154,673 vs 1,666,313 - Nine mths - Shr loss one cent vs profit four cts - Net loss 39,169 vs profit 159,784 - Sales 8,250,003 vs 4,665,553 - Reuter - - - -13-MAR-1987 16:09:02.87 -ipi -brazil - - - - - -RM A -f0385reute -r f BC-BRAZIL-INDUSTRIAL-GRO 03-13 0106 - -BRAZIL INDUSTRIAL PRODUCTION SLOWED IN JANUARY - RIO DE JANEIRO, March 13 - Industrial output in January was -6.09 pct above the same 1986 month after rising 6.71 pct in -December, Brazilian Geography and Statistics Institute figures -show. - The result is in line with the declining trend in the -growth rate since October, the Institute said. - In the 12 months to end-January industrial production was -10.48 pct above the 12 months to end-January last year, while -in calendar 1986 output was 10.89 pct above 1985. - The biggest output rises in the 12 months to end-January -were 23.68 pct in pharmaceuticals and 22.12 pct in machinery. - Reuter - - - -13-MAR-1987 16:10:20.88 -earn -usa - - - - - -F -f0389reute -s f BC-WHEELING-AND-LAKE-ERI 03-13 0045 - -WHEELING AND LAKE ERIE RAILWAY CO <WLE> DIV - ROANAKE, Va., March 13 - - Qtly div 1.4375 dlrs vs 1.4375 dlrs - Pay May 1 - Record April 3 - Note: Dividend paid to all shareholders other than Norfolk -Southern Corp's <NSC> Norfolk and Western Railway Co. - Reuter - - - -13-MAR-1987 16:10:59.71 -earn -usa - - - - - -F -f0391reute -s f BC-GENERAL-CINEMA-CORP-< 03-13 0027 - -GENERAL CINEMA CORP <GCN> CLASS B DIVIDEND - CHESTNUT HILL, Mass., March 13 - - Qtly div class B 13.5 cts vs 13.5 cts - Pay April 30 - Record April 9 - - Reuter - - - -13-MAR-1987 16:11:18.64 -earn -canada - - - - - -E F -f0393reute -u f BC-labatt 03-13 0062 - -<JOHN LABATT LTD> 3RD QTR JAN 31 NET - TORONTO, March 13 - - Shr 36 cts vs 31 cts - Shr diluted 32 cts vs 30 cts - Net 26,158,000 vs 21,798,000 - Revs 1.05 billion vs 844.2 mln - Nine mths - Shr 1.28 dlrs vs 1.22 dlrs - Shr diluted 1.15 dlrs vs 1.08 dlrs - Net 92,779,000 vs 77,971,000 - Revs 3.16 billion vs 2.70 billion - Avg shrs 72.4 mln vs 64.0 mln - Reuter - - - -13-MAR-1987 16:12:28.42 -grainwheat -usasudan - - - - - -C G -f0394reute -u f BC-SUDAN-RECEIVES-50-MLN 03-13 0119 - -SUDAN RECEIVES 50 MLN DLRS IN PL480 AUTHORITY - WASHINGTON, March 13 - Authorizations to purchase 50 mln -dlrs worth of U.S. wheat and wheat flour under Public Law 480 -were issued to Sudan today, the Agriculture Department said. - The authorization provides for 34 mln dlrs -- about 309,000 -tonnes -- worth of wheat, grade U.S. number two or better -(except durum which shall be number three or better). - It also provides for 16 mln dlrs -- about 73,000 tonnes -- -worth of wheat flour. - The contracting period for both commodities is March 20 -through August 31, 1987. The delivery period for wheat is March -20 through September 30, 1987 and for wheat flour is April 10 -through SEptember 30, 1987, USDA said. - Reuter - - - -13-MAR-1987 16:14:48.69 -trade -usa - - - - - -F A -f0399reute -r f BC-TRADE-BILL-TO-CHANGE 03-13 0139 - -TRADE BILL TO CHANGE AGRICULTURE TRADE LAWS - WASHINGTON, March 13 - The House Ways and Means Committee -is moving toward passage of a trade bill that sponsors said was -intended to help open foreign markets to U.S. agricultural -goods and to modify some U.S. agricultural trade laws. - The trade subcommittee voted to require President Reagan to -take into account the potential harm to U.S. agricultural -exports of any trade retaliation he might impose for foreign -unfair trade practices against other domestic industries. - The bill would allow U.S. agricultural producers to seek -government monitoring of imports if there is a reasonable -chance the industry would be harmed by an import surge. - The full Ways and Means Committee is to consider the bill -next week and congressional sources said they expect it will be -approved. - In investigations involving a processed agricultural -product, trade associations of processors or producers would -have to petition for relief from foreign dumping or unfair -duties. - The bill sets out U.S. trade negotiating objectives for -the Uruguay round of talks under the General Agreement on -Tariffs and Trade. It would seek fair trade in agriculture, -seek to discipline restrictive or trade distorting import and -export practices, to eliminate tariffs, subsidies, quotas and -non-tariff barriers. - President Reagan's authority to negotiate a new GATT -agreement would be extended through January 1993 and authority -to negotiate a free trade zone with Canada would be extended -through January 3, 1991. - The bill extends Reagan's authority to negotiate an -international coffee agreement through October 31, 1989. - It allows a refund of import duties paid on raw sugar -imported from November 1, 1977 to March 31, 1985 for production -of sugar or products containing sugar and destined for -re-export. The export of the sugar or products must occur -before Octoer 1, 1991. - Presently, to qualify for the refund the sugar must be -processed within three years after import and exported within -five years. - Agriculture would also benefit from more rapid decisions in -complaints of unfair foreign trade practices or injury from -imports. - Reuter - - - -13-MAR-1987 16:15:15.79 -earn -usa - - - - - -F -f0400reute -r f BC-AMERICAN-CITY-<AMBJ> 03-13 0077 - -AMERICAN CITY <AMBJ> SETS INITIAL PREFERRED DIV - KANSAS CITY, Mo. - March 13 - American City Business -Journals Inc said it declared an initial dividend of 15.4 cts a -share on its recent issue of 1.6 mln shares of convertible -exchangeable preferred stock. - The dividend is payable March 31 to shareholders of record -March 20, American City said, adding that future dividends will -be paid on a quarterly basis. - The preferred stock was issued on February 23. - Reuter - - - -13-MAR-1987 16:16:39.20 -money-supply -usa - - - - - -RM V -f0405reute -f f BC-******U.S.-BUSINESS-L 03-13 0011 - -******U.S. BUSINESS LOANS RISE 377 MLN DLRS IN MARCH 4 WEEK, FED SAYS -Blah blah blah. - - - - - -13-MAR-1987 16:17:16.42 -money-supply -usa - - - - - -RM V -f0407reute -b f US-BUSINESS-LOAN-FULLOUT 03-13 0057 - -U.S. BUSINESS LOANS RISE 377 MLN DLRS - WASHINGTON, March 13 - Business loans on the books of major -U.S. banks, excluding acceptances, rose 377 mln dlrs to 279.085 -billion dlrs in the week ended March 4, the Federal Reserve -Board said. - The Fed said that business loans including acceptances -increased 484 mln dlrs to 281.546 billion dlrs. - Reuter - - - -13-MAR-1987 16:22:34.56 -wpigasnat-gascrudeheat -usa - - - - - -F A Y -f0420reute -r f BC-U.S.-PRODUCER-ENERGY 03-13 0099 - -U.S. PRODUCER ENERGY PRICES RISE IN FEBRUARY - WASHINGTON, March 13 - Prices of wholesale finished energy -goods in the United States were up in February, rising by 4.0 -pct after a 9.8 pct rise in January, the Labor Department said. - The Producer Price Index for finished energy goods has -fallen 20.9 pct in the past 12 months. - Heating oil prices rose 3.0 pct in February after a 18.0 -pct rise in January, the department said. - Gasoline prices rose by 5.5 pct last month after a 15.7 -pct January rise, the department said. Natural gas prices rose -1.8 pct after a 4.2 pct rise in January. - Energy goods at the intermediate stage of processing rose -2.7 pct in February after rising 3.5 pct in January and were -down 16.1 pct over the past 12 months, the Labor Department -said. - Prices for crude energy goods, such as crude oil, coal and -gas at the wellhead, rose 2.6 pct last month after a 10.0 pct -January rise. They were down 11.6 pct from February 1986, the -department said. - At the intermediate stage, liquefied petroleum gas prices -rose 10.1 pct last month after a 5.0 pct January rise and were -41.0 pct below prices a year earlier, the department said. - Residual fuel prices rose 16.7 pct in February after a 13.4 -pct rise a month earlier and were off 17.4 pct in 12 months. - Electric power prices fell 0.3 pct last month, after a 1.3 -pct January decline, and were down 3.6 pct from a year ago. - Crude oil prices rose 4.4 pct in February, after a 19.7 pct -January rise and were off 21.3 pct from the year ago level. - Prices of natural gas at the wellhead rose 1.8 pct in -February after rising 4.2 pct a month earlier and were 14.8 pct -lower than they were 12 months earlier, the department said. - Coal costs were down 0.3 pct last month after rising 0.4 -pct in January and were down 0.8 pct from a year ago. - Reuter - - - -13-MAR-1987 16:23:07.43 -earn - - - - - - -F -f0423reute -b f BC-******WEYERHAEUSER-CO 03-13 0012 - -******WEYERHAEUSER SAID IT SEES SIGNIFICANT INCREASES IN EARNINGS IN 1987 -Blah blah blah. - - - - - -13-MAR-1987 16:26:35.20 - -usaparaguay - - - - - -RM A -f0431reute -r f BC-BANK-OF-AMERICA-<BAC> 03-13 0105 - -BANK OF AMERICA <BAC> SEEKS TO QUIT PARAGUAY - NEW YORK, March 13 - BankAmerica Corp is seeking a buyer -for its branch in Asuncion, Paraguay, a spokesman in Miami for -the bank holding company said. - "We are in ongoing negotiations for the sale of our -Paraguay operations," the spokesman said. He declined to name -the possible buyer. - A sale of the Paraguayan operations, which employ about 80 -people, would be consistent with Bank of America's strategy of -concentrating its international efforts on wholesale banking, -he added. The bank has sold operations in a number of countries -recently, including Italy and Sri Lanka. - Reuter - - - -13-MAR-1987 16:27:23.99 - -usa - - - - - -F -f0437reute -r f '--GE-<GE>-GETS-474.5-ML 03-13 0034 - -GE <GE> GETS 474.5 MLN DLR CONTRACT - WASHINGTON, March 13 - General Electric Co has received a -474.5 mln dlr contract for 172 F-110-GE-100 fighter jet engines -and 32 other jet engines, the Air Force said. - REUTER - - - -13-MAR-1987 16:28:15.51 - -usa - - - - - -F -f0441reute -r f BC-GENERAL-HOST-<GH>-TO 03-13 0094 - -GENERAL HOST <GH> TO APPEAL COURT RULING - STAMFORD, Conn., March 13 - General Host Corp said a -federal district judge in Wichita, Kan., affirmed a preliminary -1984 ruling that the company's Amerian Salt Co unit polluted -groundwater near a plant in Lyons, Kan. - The company said it would appeal the ruling, which calls -for actual damages of 3.1 mln dlrs and punitive damages of 10 -mln dlrs. - General Host believes it has strong grounds for a reversal -of the ruling. It reiterated that it is not including a -provision for losses in its financial statements. - American Salt, part of General Host's AMS Industries Inc -unit, has agreed with the State of Kansas to carry out an -effective clean-up plan, the company said. - In the current ruling, Federal Judge Cecil Miller affirmed -his August 1984 preliminary ruling. - The suit was brought in 1977 by a group of local -landowners, a General Host spokesman said. - Reuter - - - -13-MAR-1987 16:29:46.00 - -usa - - - - - -F -f0448reute -d f BC-MOBIL-<MOB>-GETS-107. 03-13 0028 - -MOBIL <MOB> GETS 107.2 MLN DLR CONTRACT - WASHINGTON, March 13 - Mobil Oil Corp has received a 107.2 -mln dlr contract for jet fuel, the Defense Logistics Agency -said. - REUTER - - - -13-MAR-1987 16:31:43.02 - -usa - - - - - -F -f0454reute -h f BC-IOMEGA-<IMOG>-PRESIDE 03-13 0060 - -IOMEGA <IMOG> PRESIDENT RESIGNS FOR NEW POST - ROY, Utah, March 13 - Iomega Corp said its president, -Gabriel Fusco, resigned as president to become chairman and -chief executive officer of <Sequoia Systems>. - Fusco was president and chief executive officer of Iomega -between April 1983 and January 1987, and will remain on the -company's board of directors. - - Reuter - - - -13-MAR-1987 16:33:42.42 -earn - - - - - - -F -f0461reute -f f BC-varity 03-13 0010 - -******VARITY EXPECTS TO REPORT 4TH QTR AND FULL-YEAR 1986 LOSS -Blah blah blah. - - - - - -13-MAR-1987 16:36:20.34 - -usa - - - - - -A RM -f0467reute -r f BC-GUILFORD-MILLS-<GFD> 03-13 0087 - -GUILFORD MILLS <GFD> TO SELL CONVERTIBLE DEBT - NEW YORK, March 13 - Guilford Mills Inc said it filed with -the Securities and Exchange Commission a registration statement -covering a 60 mln dlr issue of convertible subordinated -debentures. - Proceeds will be used to repay certain indebtedness and -increase working capital, as well as for general corporate -purposes. - Guilford Mills said it expects the issue will be offered -later this month. The company named Bear, Stearns and Co as -lead underwriter of the offering. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-006.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-006.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-006.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-006.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2012 +0,0 @@ - - -17-MAR-1987 10:59:37.95 - -usa - - - - - -A RM Y -f5264reute -r f BC-VALERO-ENERGY-<VLO>-D 03-17 0110 - -VALERO ENERGY <VLO> DEBT UPGRADED BY MOODY'S - NEW YORK, March 17 - Moody's Investors Service Inc said it -upgraded Valero Energy Corp's 120 mln dlrs of debt. - Moody's cited an improved leverage position that will -result from Valero's sale of its Valero Natural Gas subsidiary -to Valero Natural Gas Partners L.P., the partial sale of units -of that partnership to the public, and the simultaneous sale of -first mortgage bonds to institutional investors. - Raised were Valero-backed tax-exempt economic development -revenue bonds of Vincennes, Ind, to Baa-3 from B-1, Valero's -subordinated debt to Ba-1 from B-2 and depository preferred -stock to Ba-1 from B-2. - Reuter - - - -17-MAR-1987 11:01:59.32 - -usa - - - - - -F -f5272reute -r f BC-NL-<NL>-FILES-SUITS-A 03-17 0107 - -NL <NL> FILES SUITS AGAINST UNITED CATALYSTS - HIGHTSTOWN, N.J., March 17 - NL Industries Inc's NL -Chemicals Inc subsidiary said it filed two complaints against -<United Catalysts Inc> for patent infringements and -misappropriation of confidential information. - NL said the patent infringement suit alleges that United's -product, Thixogel DSS, infringes on NL's patent protecting its -Bentone 128 product. - NL said it filed the patent complaint in the United States -District Court for the Western District of Kentucky, and the -misappropriation complaint in Circuit Court, Jefferson County, -Ky. United Catalysts is based in Louisville, Ky. - Reuter - - - -17-MAR-1987 11:02:40.56 -acq -usa - - - - - -A -f5277reute -d f BC-IRVING-TRUST-<V>-BUYS 03-17 0060 - -IRVING TRUST <V> BUYS GULF/WESTERN <GW> UNIT - NEW YORK, March 17 - Irving Bank Corp said it bought the -factoring division of Associates Commercial Corp, a unit of -Gulf and Western Co Inc's Associates Corp of North America. - The terms of the previously announced deal were not -disclosed. - It said the assets were transferred to Irving Commercial -Corp. - - Reuter - - - -17-MAR-1987 11:03:32.29 - -usa - - - - - -F -f5283reute -r f BC-DITTLER-BROTHERS-SEEK 03-17 0098 - -DITTLER BROTHERS SEEK LOTTERY INVESTIGATIONS - ATLANTA, March 17 - Dittler Brothers called for -investigations by the attorneys general of 24 states in -connection with possible violation of state lottery laws by -Bally Manufacturing Corp <BLY> and its subsidiary, Scientific -Games. - Dittler Brothers said it requested the states' law -enforcement chiefs to investigate the companies following last -week's determination by a court-appointed auditor that -Scientific furnished erroneous information to those 24 state -lottery officials. - The states named are spread throughout the country. - Reuter - - - -17-MAR-1987 11:07:22.82 -earn -usa - - - - - -F -f5302reute -d f BC-AMRE-INC-<AMRE>-3RD-Q 03-17 0039 - -AMRE INC <AMRE> 3RD QTR JAN 31 NET - DALLAS, MArch 17 - - Shr five cts vs one ct - Net 196,986 vs 37,966 - Revs 15.5 mln vs 8,900,000 - Nine mths - Shr 52 cts vs 22 cts - Net two mln vs 874,000 - Revs 53.7 mln vs 28.6 mln - Reuter - - - -17-MAR-1987 11:07:47.91 -grainwheat -usa - - - - - -C G -f5304reute -u f BC-KANSAS-LEGISLATOR-TO 03-17 0112 - -KANSAS LEGISLATOR TO OFFER U.S. 0/92 BILL TODAY - WASHINGTON, March 17 - U.S. Rep. Dan Glickman, D-Kan., -chairman of the House Agriculture subcommittee on wheat, -soybeans and feedgrains, said he would today introduce a bill -to apply the so-called 0/92 concept to wheat and feedgrains -producers. - Glickman told Reuters the measure would allow 1987 winter -wheat producers and 1988 feedgrains producers the possibility -of receiving no less than 92 pct of their income support -payments regardless of how much acreage they planted. - He also said his bill would protect program participants -from reduced income payments in the event market prices rose -above the loan rate. - Reuter - - - -17-MAR-1987 11:09:12.10 - -uk - - - - - -RM -f5308reute -b f BC-C.-ITOH-FINANCE-(EURO 03-17 0112 - -C. ITOH FINANCE (EUROPE) ISSUES EUROBOND - LONDON, March 17 - C. Itoh Finance (Europe) Ltd is issuing -a 30 mln dlr deferred coupon eurobond, due March 30, 1992 and -priced at 100.1 pct, Wako International (Europe) Ltd said as -lead manager. - From the third year the bonds will pay interest at a rate -of four pct over six month London interbank borrowed rate -(Libor). They will be issued in denominations of 50,000 dlrs -and will be listed in Luxembourg. Fees of 0.1 pct comprise two -basis points for management and underwriting and eight points -for selling. - Co-leads are Mitsui Trust International and Pru-Bache -Securities International. Pay date is March 30. - The transaction is guaranteed by C. Itoh and Co (Hong Kong) -Ltd, Wako International said. - REUTER - - - -17-MAR-1987 11:09:38.54 - -usa - - - - - -F -f5309reute -r f BC-INTERNATIONAL-LEASE-< 03-17 0083 - -INTERNATIONAL LEASE <ILFC> SELLS TWO JETS - BEVERLY HILLS, Calif., March 17 - International Lease -Finance Corp said it sold two Boeing 737-200 aircraft and -leased one 737-200 in two transactions valued at 28 mln dlrs. - It said the sales will result in a pre-tax gain for its -second fiscal quarter ending May 31. - The two jets were sold for 18 mln dlrs to an investor group -and the third was leased for five years to Pacific Western -Airlines Ltd of Calgary, Alberta, International Lease said. - Reuter - - - -17-MAR-1987 11:10:08.50 - -usa - - - - - -F -f5314reute -r f BC-HITECH-ENGINEERING-<T 03-17 0057 - -HITECH ENGINEERING <THEX> COMPLETES STOCK SALE - MCLEAN, Va., March 17 - HiTech Engineering Co said it -completed the private sale of 200,000 shares of its common -stock to its chairman and president, Francine Prokoski, for -37,500 dlrs. - The company said the proceeds will be used to develop -products under a contract with a private company. - Reuter - - - -17-MAR-1987 11:10:19.73 -earn -usa - - - - - -F -f5316reute -d f BC-PORTA-SYSTEMS-CORP-<P 03-17 0042 - -PORTA SYSTEMS CORP <PSI> 4TH QTR JAN 31 NET - SYOSSET, N.Y., March 17 - - Shr 10 cts vs 11 cts - Net 547,000 vs 579,000 - Sales 11.0 mln vs 11.1 mln - Year - Shr 46 cts vs 52 cts - Net 2,500,000 vs 2,841,000 - Sales 40.7 mln vs 40.5 mln - Reuter - - - -17-MAR-1987 11:14:30.93 - -usa - - - - - -F -f5335reute -r f BC-CALIFORNIA-ENERGY-<CE 03-17 0055 - -CALIFORNIA ENERGY <CECI> INITIAL OFFER STARTS - SANTA ROSA, Calif., March 17 - California Energy Co Inc -said an initial public offering of 1,900,000 common shares is -underway at 7.50 dlrs each through underwriters led by Laidlaw -Adams and Peck Inc. - The geothermal power company said the offering is expected -to close March 19. - Reuter - - - -17-MAR-1987 11:15:07.84 - -usa - - -amex - - -F -f5338reute -r f BC-DIVI-HOTELS-<DVH>-WAR 03-17 0027 - -DIVI HOTELS <DVH> WARRANTTRADE ON AMEX - NEW YORK, March 17 - Divi Hotels NV of Aruba said its -warrants have started trading today on the <American Stock -Exchange>. - Reuter - - - -17-MAR-1987 11:15:13.82 -earn - - - - - - -F -f5339reute -f f BC-******FEDERATED-DEPAR 03-17 0012 - -******FEDERATED DEPARTMENT STORES INC 4TH QTR SHR 3.64 DLRS VS 3.16 DLRS -Blah blah blah. - - - - - -17-MAR-1987 11:15:25.35 -earn -usa - - - - - -F -f5340reute -r f BC-<WARNACO-GROUP-INC>-E 03-17 0072 - -<WARNACO GROUP INC> EIGHT MTHS JAN THREE NET - NEW YORK, March 17 - - Oper net 46.6 mln - Revs 392 mln - 12 mths - Oper net 65 mln vs 47.1 mln - Revs 590 mln vs 591 mln - NOTE: Eight months represents earnings following -acquisition in May 1986 when company went private. - Period ending Jan. 3, 1987 excludes 42.3 mln dlrs of -interest expenses, 41.6 mln dlrs of acquisition adjusments, and -1.7 mln dlrs of income taxes. - Reuter - - - -17-MAR-1987 11:15:35.39 - -ukirelandusa - - - - - -RM -f5341reute -b f BC-BANK-OF-IRELAND-LAUNC 03-17 0099 - -BANK OF IRELAND LAUNCHES U.S. PAPER PROGRAM - LONDON, March 17 - Bank of Ireland said it launched in the -U.S. Market a commercial paper program for up to 200 mln dlrs, -becoming the first Irish issuer of paper in that market. - It said the first tranche of an undisclosed amount was sold -today through Goldman Sachs and Co Inc and that the paper last -week had received the top A-1/P-1 rating of Standard and Poor's -Corp and Moody's Investors Service Inc, respectively. - In a statement, the Bank of Ireland noted that the U.S. -Paper market will provide it with a new source of funding. - REUTER - - - -17-MAR-1987 11:15:43.66 - -ussrusa -james-baker -worldbankimf - - - -A RM -f5342reute -b f BC-BAKER-SAYS-U.S.-OPPOS 03-17 0077 - -BAKER SAYS U.S. OPPOSES SOVIET BANK MEMBERSHIP - WASHINGTON, March 17 - Treasury Secretary James Baker said -the U.S. opposes Soviet membership of the World Bank or the -International Monetary Fund. - Baker told a House foreign affairs subcommittee, "I think -our position is absolutely clear on that ... We do not support -and will not support Soviet membership in the World Bank or the -IMF." - Baker said the U.S. position was "unqualified and -unconditional." - The secretary observed that he has written to congressman -Jack Kemp, a New York Republican who is also a presidential -contender, outlining the U.S. position. - Baker was responding to a questioner who noted that World -Bank President Barber Conable has in the past suggested future -Soviet membership could take place. - Ever since Soviet leader Mikhail Gorbachev suggested Soviet -membership in the General Agreement on Tariffs and Trade -- -which was also rejected -- there has been speculation Moscow -was interested in joining the international institutions. - Reuter - - - -17-MAR-1987 11:16:02.24 -earn -usa - - - - - -F -f5345reute -d f BC-GANTOS-INC-<GTOS>-4TH 03-17 0053 - -GANTOS INC <GTOS> 4TH QTR JAN 31 NET - GRAND RAPIDS, MICH., March 17 - - Shr 43 cts vs 37 cts - Net 2,276,000 vs 1,674,000 - Sales 31.9 mln vs 23.9 mln - Avg shrs 5.3 mln vs 4.5 mln - Year - Shr 90 cts vs 69 cts - Net 4,508,000 vs 3,096,000 - Sales 98.4 mln vs 75.0 mln - Avg shrs 5.0 mln vs 4.5 mln - Reuter - - - -17-MAR-1987 11:16:08.19 -earn -usa - - - - - -F -f5346reute -d f BC-<ATLANTIC-EXPRESS-INC 03-17 0027 - -<ATLANTIC EXPRESS INC> 1ST HALF DEC 31 NET - NEW YORK, March 17 - - Shr not given - Net 788,099 - Revs 15.5 mln - NOTE: Company went public during 1986. - Reuter - - - -17-MAR-1987 11:16:42.57 - -netherlands - - - - - -RM -f5349reute -b f BC-RABOBANK-LAUNCHES-250 03-17 0083 - -RABOBANK LAUNCHES 250 MLN GUILDER BULLET - UTRECHT, Netherlands, March 17 - Rabobank Nederland B.A. -Said it is launching under its own management a 250 mln guilder -eight-year bullet bond with a 6-3/4 pct coupon and priced at -par. - No early redemption is permitted on the bond which will be -paid back in full on April 15, 1995. - Denominations are in 1,000 and five times 1,000 guilders. -Subscription closes March 23, payment is April 15. Listing will -be on the Amsterdam Stock Exchange. - REUTER - - - -17-MAR-1987 11:18:43.18 -acq -usa - - - - - -F -f5358reute -u f BC-SPENDTHRIFT-FARMS-<SF 03-17 0049 - -SPENDTHRIFT FARMS <SFI> GETS BID FOR CONTROL - LEXINGTON, Ky., March 17 - Spendthrift Farm Inc said it has -received three tentative proposals to acquyire control of the -company. - It said it is evaluating the proposals and will not comment -further unless a definitive agreement is reached. - Reuter - - - -17-MAR-1987 11:18:58.30 - -usa - - - - - -F -f5360reute -d f BC-BIOTECHNICA-<BIOT>-HA 03-17 0105 - -BIOTECHNICA <BIOT> HAS NEW AGRICULTURE UNIT - CAMBRIDGE, Mass., March 17 - BioTechnica International said -it established a new subsidiary, BioTechnica Agriculture, to -develop and commercialize microbial and plant products for -improving crops. It said the unit will be based in Overland -Park, Kansas. - It said Charles H. Baker, former president of Rohm and Haas -Co's <ROH> Rohm and Haas Seed Inc affiliate, has been named -president of the new agriculture unit. The company said Baker -will also act for a limited time as president of <Chaco -Enterprises Inc>, formed to acquire the Hybrex hybrid wheat -technology from Rohm and Haas. - Reuter - - - -17-MAR-1987 11:19:09.96 - -usa - - - - - -F -f5361reute -d f BC-SUNWORLD-<SUNA>-HAS-H 03-17 0103 - -SUNWORLD <SUNA> HAS HIGHER LOAD FACTOR - LAS VEGAS, Nev., March 17 - Sunworld International Airways -Inc said its February load factor rose to 53 pct from 46.1 pct -a year earlier and its year-to-date load factor was up to 52 -pct from the 51 pct posted for the same period last year. - February revenue passenger miles rose to 27.4 mln from 26.4 -mln, but year-to-date revenue miles declined to 59.7 mln from -60.4 mln. - Available seat miles for the month dropped to 51.7 mln from -57.2 mln and for the two month period available miles totaled -115.3 mln, down from last year's 119.2 mln, Sunworld -International said. - Reuter - - - -17-MAR-1987 11:22:34.18 -crude -usa - -opec - - - -F Y -f5371reute -u f BC-SHEARSON-LEHMAN-UPGRA 03-17 0109 - -SHEARSON LEHMAN UPGRADES U.S. OIL STOCKS - NEW YORK, March 17 - Analyst Sanford Margoshes of Shearson -Lehman Brothers said he recommended a number of oil stocks -today now that it is apparent that OPEC has succeeded in -holding to its prescribed production quotas. - "It is clear that OPEC, through jawboning and quota -restraint, will boost the price of oil," Margoshes said. - Prices of oil stocks rose sharply today in response to -higher oil prices and optimism about OPEC quotas. Margoshes -said he recommends Imperial Oil <IMO.A>, up 1/2 to 49-1/8, -Standard Oil Co <SRD>, 7/8 to 62-3/4, Exxon <XON> one to -83-1/8, and Chevron <CHV> 1-1/8 to 54-7/8. - In addition, Margoshes said he recommended Atlantic -Richfield <ARC> on a short-term basis, though he said he is -still suspect about its debt situation. Atlantic Richfield rose -1-3/4 to 77. - He said "the market could come down to test the 16 dlr a -barrel level again, but the main thrust of investing in oil is -positive right now. Before the year is out we will see higher -oil prices." - He noted that belief that the government is interested in -raising the strategic reserves is factored into the rise in oil -stocks today. - Reuter - - - -17-MAR-1987 11:24:30.25 - -belgiumwest-germany -kohldelors -ec - - - -RM -f5381reute -u f BC-EC-COMMISSION-TO-VISI 03-17 0104 - - EC COMMISSION TO VISIT BONN AT KOHL'S INVITATION - BRUSSELS, March 17 - West German Chancellor Helmut Kohl has -invited the European Community's 17-man Commission for talks in -Bonn next month in a bid to repair strained relations, EC -diplomats said. - The Commissioners, led by President Jacques Delors, will -pay a two-day visit to Bonn on April 1-2 when they were due for -a meeting with the principal West German cabinet members. - The meeting, the first of its kind between the Commission -and the government of a member state, was originally meant to -focus on problems posed by West Germany's federal constitution. - But they said the meeting was now likely to be dominated by -Commission plans to restructure the EC's exhausted finances and -its costly farm policy, which have provoked strong opposition -from Bonn. - Kohl has written two letters to Delors, complaining that -the plans would hit West German farmers hard. His farm -minister Ignaze Kiechle has publicly criticised the two German -members of the Commission for failing to oppose them. - This caused protest from Brussels where the Commission -tries to guard the independence of its members from the -governments that nominate them. - REUTER - - - -17-MAR-1987 11:25:02.06 -copper -zambiasouth-africa - - - - - -C M -f5382reute -u f BC-ZAMBIAN-MINISTER-CONF 03-17 0109 - -ZAMBIAN MINISTER CONFIRMS COPPER DIVERSION - LUSAKA, March 17 - Minister of Mines Patrick Chitambala -confirmed that Zambia had ended copper shipments through South -Africa and announced that its state-run mining company had -closed down its liaison office in the white-ruled republic. - He told the official Times of Zambia newspaper in an -interview the government was diverting all mineral exports -along rail routes to Dar es Salaam in Tanzania and Beira in -Mozambique. Chitambala declined to say what volume of copper -and other minerals were being shipped through these two ports, -but he said there had not been any problem with the new -arrangements. - "So far our copper has been reaching its destinations -without hindrance," he told the Times. - The Times of Zambia quoted unnamed sources as saying Zambia -exported 100,000 tonnes of copper through Dar es Salaam and -17,000 through Beira in the last quarter of 1986. Diplomatic -sources in Lusaka had earlier expressed doubts over Zambia's -ability to ship all its copper through Beira and Dar es Salaam -without causing massive bottlenecks at the ports. - Chitambala also said that the state-run Zambia Consolidated -Copper Mines (ZCCM) had closed its liaison office in -Johannesburg, since it was now redundant. - Reuter - - - -17-MAR-1987 11:25:49.37 -acq - - - - - - -F -f5385reute -f f BC-******TAFT-CHAIRMAN'S 03-17 0012 - -******TAFT CHAIRMAN'S GROUP RAISES TAFT BROADCASTING BID TO 150 DLRS/SHARE -Blah blah blah. - - - - - -17-MAR-1987 11:26:47.36 -acq -usa - - - - - -F -f5388reute -d f BC-DEVELOPMENT-CORP-OF-A 03-17 0078 - -DEVELOPMENT CORP OF AMERICA <DCA> MERGED - HOLLYWOOD, Fla., March 17 - Development Corp of America -said its merger with Lennar Corp <LEN> was completed and its -stock no longer existed. - Development Corp of America, whose board approved the -acquisition last November for 90 mln dlrs, said the merger was -effective today and its stock now represents the right to -receive 15 dlrs a share. - The American Stock Exchange said it would provide further -details later. - Reuter - - - -17-MAR-1987 11:27:21.25 - -usabrazil -james-baker - - - - -RM A -f5391reute -u f BC-TREASURY'S-BAKER-CALL 03-17 0090 - -TREASURY'S BAKER CALLS FOR NEW BRAZIL PLAN - WASHINGTON, March 17 - Treasury Secretary James Baker said -that Brazil should come up with a new economic plan if it hopes -to get additional assistance from commercial banks and others. - In testimony before a House appropriations subcommittee, -Baker said that he had given that message to Brazilian -officials earlier this month when they met for talks in -Washington. - He said that the so-called Cruzado Plan had worked for a -while, but that new efforts by the government are now required. - Baker made it clear that he backed the decision by the -Paris Club official creditors to reschedule loans to Brazil, -even though the country later froze its payments to commercial -bank creditors. - He said that the official loans are being serviced and that -this was a result of the rescheduling. - Reuter - - - -17-MAR-1987 11:27:51.45 - -usa - - -nasdaq - - -F -f5394reute -d f BC-CALIFORNIA-MICRO-<CAM 03-17 0031 - -CALIFORNIA MICRO <CAMD> TRADES ON NASDAQ - MILPITAS, Calif., March 17 - California Micro Devices Corp -said its stock was included in the March 17 expansion of the -NASDAQ market system. - Reuter - - - -17-MAR-1987 11:28:09.98 -acq -usa - - - - - -F -f5396reute -d f BC-TEVA-<TEVIY>-SELLS-PR 03-17 0067 - -TEVA <TEVIY> SELLS PROMEDICO SUBSIDIARY - NEW YORK, March 17 - Teva Pharmaceutical Industries Ltd, -based in Israel, said it sold its wholly owned Promedico -subsidiary, to foreign investors for four mln dlrs. - It said the book value of the unit is about 2.2 mln dlrs. - Teva said it will continue to market Promedico's products -through its wholly owned subsidiary, Salomon, Levin and Elstein -Ltd. - - Reuter - - - -17-MAR-1987 11:28:28.04 - -usa - - - - - -F -f5398reute -d f BC-ERC-<ERC>-GETS-THIRD 03-17 0083 - -ERC <ERC> GETS THIRD CONTRACT - FIARFAX, Va., March 17 - ERC International said its -Facilities Management Group subsidiary, ERCI Facilities Service -Corp, was awarded a 2.1 mln dlrs contract in the drug -repository field, the third such contract in nine months. - It said that under the five-year contract, it will manage -the National Cancer Institutes's pre-clinical drug repository -of more than 400,000 drugs and chemicals used to test antitumor -activity in animals and tissue culture systems. - Reuter - - - -17-MAR-1987 11:29:40.89 - -usa -james-baker - - - - -A RM -f5404reute -u f BC-BAKER-SAYS-U.S.-NOT-S 03-17 0096 - -BAKER SAYS U.S. NOT SEEKING IADB VETO - WASHINGTON, March 17 - Treasury Secretary James Baker said -that the United States was not seeking loan veto in its -negotiation for voting power at the Inter-American Development -Bank. - Discussing the ongoing negotiation, Baker said the U.S. -position is that the countries that pay in the most should have -the greatest say over the loan decisions. - The U.S. is seeking the power to block loan votes with one -other country, and the issue will be discussed in Miami later -this month at the annual meeting of the Latin development bank. - Reuter - - - -17-MAR-1987 11:31:47.85 -earn -usa - - - - - -F -f5409reute -r f BC-NEW-MILFORD-SAVINGS-B 03-17 0025 - -NEW MILFORD SAVINGS BANK <NMSB> RAISES PAYOUT - NEW MILFORD, Conn., March 17 - - Qtly div 25 cts vs 20 cts prior - Pay April 21 - Reord March 27 - Reuter - - - -17-MAR-1987 11:32:05.95 -acq -usa - - - - - -F -f5411reute -b f BC-K-MART-<KM>-ENDS-TALK 03-17 0057 - -K MART <KM> ENDS TALKS TO SELL STORES - CHICAGO, March 17 - K Mart Corp said recent talks to sell -65 remaining Kresge variety stores and their underlying real -estate to F.W. Woolworth Co <Z> have ended. - Robert Stevenson, K Mart vice president, told Reuters the -talks, which began about six weeks ago, ended. He declined to -give a reason. - Kresge is the forerunner of what is now the K Mart chain. -The name was changed to K Mart in 1977, Stevenson said. - "We're selling and buying real estate in our real estate -division, and Woolworth was interested in some of our -properties. The talks were of a casual nature," he said. - The 65 Kresge stores that are scattered around the country -in downtown and suburban locations, he said. - Stevenson said K Mart will continue to operate the stores. -"The stores are profitable. The only decision K Mart has made -is that we will continue to operate them," he said - Kresge had been a nationwide chain of 900 variety stores. - Reuter - - - -17-MAR-1987 11:32:21.74 -earn -usa - - - - - -F -f5413reute -d f BC-INSTITUTE-OF-CLINICAL 03-17 0081 - -INSTITUTE OF CLINICAL PHARM PLC <ICPYY> YEAR - NEW YORK, March 17 - - Shr 20 ct vs 27 cts - Net 1,048,000 vs 1,368,000 - Revs 9,457,000 vs 5,386,000 - NOTE: Dollar amounts converted from Irish pounds at noon -buying rate of the Federal Reserve Bank of New York at Dec 31, -1986, of 1.4105 dlr per one Irish pound. The equivalent rate at -Dec 31, 1985, was 1.2470 dlr equals one Irsh pound. Full name -of company is The Institute of Clinical Pharmacology PLC, based -in Dulbin, Ireland. - Reuter - - - -17-MAR-1987 11:33:26.98 - - -lawson - - - - -RM -f5419reute -f f BC-LAWSON-SAYS-U.K.-BASI 03-17 0012 - -******LAWSON SAYS U.K. BASIC RATE INCOME TAX TO BE CUT TO 27 PCT FROM 29 PCT -Blah blah blah. - - - - - -17-MAR-1987 11:36:40.54 -gnpbop -uk -lawson - - - - -C -f5431reute -b f BC-U.K.-GROWTH-RATE-SEEN 03-17 0113 - -U.K. GROWTH RATE SEEN AT THREE PCT THIS YEAR - LONDON, March 17 - Chancellor of the Exchequer Nigel -Lawson, presenting his budget for fiscal 1987/88 to parliament, -said U.K. Economic growth was forecast at three pct in calendar -1987. - He said the Treasury expected a current account balance of -payments deficit in 1987 of 2.5 billion stg, after a 1.1 -billion shortfall in 1986. Inflation is expected to be 4.0 pct -at the end of 1987, he said, adding it may exceed 4.5 pct by -the summer before falling back to 4.0 pct by the end of the -year. - The planned PSBR for 1987/88 was 4.0 billion stg unchanged -when compared with the likely outturn for fiscal 1986/87, -Lawson said. - Although no explicit target was set for the broad sterling -M3 money supply, Lawson said broad money will continue to be -taken into account in assessing monetary conditions as well as -the exchange rate. - The low outturn of the PSBR in 1986/87 was mainly due to -the buoyancy of non-oil tax revenues in general, and the -corporation tax paid by an increasingly profitable business -sector in particular. - On oil prices, Lawson said he was sticking to his earlier -assumption that North Sea crude prices will average 15 dlrs per -barrel in calendar 1987. The treasury would strive to keep the -PSBR at 1.0 pct of GDP in future, he said. - Reuter - - - -17-MAR-1987 11:39:54.35 - -usa - - - - - -F -f5452reute -r f BC-BUTLER-<BTLR>-TO-BUY 03-17 0061 - -BUTLER <BTLR> TO BUY BACK 600,000 SHARES - KANSAS CITY, MO., March 17 - Butler Manufacturing Co said -its board authorized the repurchase of up to 600,000 shares, or -12 pct of its outstanding common stock. - It said purchases will be made in open market and private -transactions through Kidder, Peabody and Co. - Butler currently has 5,001,848 shares outstanding. - Reuter - - - -17-MAR-1987 11:40:05.58 - -usa - - - - - -F -f5453reute -r f BC-ROYAL-PALM-<RPAL>-SAY 03-17 0105 - -ROYAL PALM <RPAL> SAYS RESTRICTIONS LIFTED - WEST PALM BEACH, Fla., March 16 - Royal Palm Savings -Association said it has entered into an agreement with the -Federal Home Loan Bank Board and the Florida Department of -Banking and Finance resulting in the removal of limitations -which had severely restricted its growth and lending. - The company said it will now be permitted to grow about 70 -mln dlrs in calendar 1987, or about 15 pct for this year, and -at the same rate thereafter. - Royal Palm said under the accord, it will resume commercial -and nonresidential lending but will place substantial emphasis -on residential loans. - The company said it agreed to adopt new policies and -procedures but did not elaborate. - Reuter - - - -17-MAR-1987 11:40:26.25 - -west-germany - - - - - -G -f5457reute -d f BC-WEST-GERMAN-FEED-OUTP 03-17 0102 - -WEST GERMAN FEED OUTPUT SEEN DECLINING - BONN, March 17 - West German feedstuffs production is -expected to decline further after it dropped to 16.5 mln tonnes -in 1986 from 16.7 mln the previous year, the West German Feed -Stuff Industry Association (MFI) said. - Association president Ulrich Wagner told a news conference -West Germany's rate of self sufficiency in the feedstuffs -sector is expected to fall below 70 pct this year from around -75 pct in 1986. - He attributed the expected decline to introduction of milk -quotas in 1984, aimed at curbing EC milk production, and to -cheaper imports from abroad. - "Our industry's output is not even close to stagnation," -Wagner said. "In the long term we expect annual production to -decline steadily." - The only sector which saw a slight increase last year, by -0.6 pct, was feed for poultry which rose to 3.25 mln tonnes -from 3.23 mln, he said. - Wagner predicted that the sales volume in feed for dairy -cattle will decline even more this year because of the further -cut in milk output from April. - Reuter - - - -17-MAR-1987 11:40:46.06 -earn -usa - - - - - -F -f5460reute -d f BC-ICN-BIOMEDICALS-INC-< 03-17 0034 - -ICN BIOMEDICALS INC <BIMD> 1ST QTR FEB 28 NET - COSTA MESA, Calif., March 17 - - Shr 10 cts vs eight cts - Net 856,000 vs 574,000 - Sales 9,593,000 vs 9,232,000 - Avg shrs 8,809,000 vs 6,969,000 - Reuter - - - -17-MAR-1987 11:40:52.10 -earn -usa - - - - - -F -f5461reute -d f BC-APPLIED-CIRCUIT-TECHN 03-17 0043 - -APPLIED CIRCUIT TECHNOLOGY <ACRT> 1ST QTR LOSS - ANAHEIM, Calif., March 17 - Period ended January 31. - Shr loss two cts vs loss 12 cts - Net loss 192,370 vs loss 1,494,146 - Revs 6,751,830 vs 2,278,842 - Note: Full name Applied Circuit Technology Inc. - Reuter - - - -17-MAR-1987 11:40:57.61 -earn -usa - - - - - -F -f5463reute -s f BC-FRISCH'S-RESTAURANTS 03-17 0025 - -FRISCH'S RESTAURANTS INC <FRS> SETS QUARTERLY - CINCINNATI, March 17 - - Qtly div 5-1/2 cts vs 5-1/2 cts prior - Pay April 16 - Record April Six - Reuter - - - -17-MAR-1987 11:42:11.71 -money-fxinterest - - - - - - -V RM -f5465reute -f f BC-******FED-SETS-TWO-BI 03-17 0010 - -******FED SETS TWO BILLION DLR CUSTOMER REPURCHASE, FED SAYS -Blah blah blah. - - - - - -17-MAR-1987 11:44:54.11 - -usa - - -nyse - - -F -f5478reute -u f BC-NYSE-REVIEWS-PROGRAM 03-17 0037 - -NYSE REVIEWS PROGRAM TRADING - NEW YORK, March 17 - The <New York Stock Exchange> said it -is undertaking a review of the long-term effects on securities -markets of computer-driven trading techniques known as program -trading. - The NYSE said, "The study will review major new trading -techniques involving programmed portfolio hedging and index -arbitrage for their potential benefits and risks to the -financial system. It will also explore the regulatory -implications of these trading techniques and whether their -increased use could possibly lead to market abuse." - The exchange said a final report is expected before the end -of 1987. It said program trading is becoming increasingly -important as a market factor. - Reuter - - - -17-MAR-1987 11:45:10.92 -money-fxinterest -usa - - - - - -V RM -f5479reute -b f BC-/-FED-ADDS-RESERVES-V 03-17 0061 - -FED ADDS RESERVES VIA CUSTOMER REPURCHASES - NEW YORK, March 17 - The Federal Reserve entered the U.S. -Government securities market to arrange two billion dlrs of -customer repurchase agreements, a Fed spokesman said. - Dealers said Federal funds were trading at 6-1/16 pct when -the Fed began its temporary and indirect supply of reserves to -the banking system. - Reuter - - - -17-MAR-1987 11:46:13.53 -earn -usa - - - - - -F -f5486reute -u f BC-FEDERATED-DEPARTMENT 03-17 0062 - -FEDERATED DEPARTMENT STORES INC <FDS> 4TH QTR - CINCINNATI, March 17 - Jan 31 end - Shr 3.64 dlrs vs 3.16 dlrs - Net 171.3 mln vs 154.0 mln - Sales 3.44 billion vs 3.23 billion - Avg shrs 47.1 mln vs 48.8 mln - Year - Oper shr 6.23 dlrs vs 5.88 dlrs - Oper net 301.9 mln vs 286.6 mln - Sales 10.51 billion vs 9.98 billion - Avg shrs 48.5 mln vs 48.8 mln - NOTE: Latest year net excludes 14.3 mln dlr charge from -loss on early debt extinguishment. - Net includes charges 15.7 mln dlrs in both periods of -latest year vs charges 23.9 mln dlrs in both periods of earlier -year from merger of divisions. - Investment tax credits three mln dlrs vs 8,900,000 dlrs in -quarter and 4,900,000 dlrs vs 16.4 mln dlrs in year. - Latest year net includes nine mln dlr provision for loss on -disposition of two Abraham and Strauss stores and preopening -expenses for another. - Latest year net includes gain from sale of interest in Fort -Worth, Texas, shopping center of 9,500,000 dlrs. - Latest year net both periods includes gain 9,100,000 dlrs -from sale of interest in Memphis, Tenn., shopping center. - Prior year net includes gain 6,600,000 dlrs on sale of -Boston Store division. - Reuter - - - -17-MAR-1987 11:46:42.56 -earn -usa - - - - - -F -f5492reute -r f BC-CLOTHESTIME-INC-<CTME 03-17 0042 - -CLOTHESTIME INC <CTME> 4TH QTR NET - ANAHEIM, Calif., March 17 - - Shr 12 cts vs 10 cts - Net 1,683,000 vs 1,407,000 - Sales 42.2 mln vs 28.8 mln - Year - Shr 83 cts vs 70 cts - Net 11,908,000 vs 10,005,000 - sales 160.3 mln vs 126.5 mln - Reuter - - - -17-MAR-1987 11:47:10.74 - -canada - - - - - -E F Y -f5496reute -r f BC-phoenix-canada-oil-to 03-17 0103 - -PHOENIX CANADA OIL TO APPEAL RULING - Toronto, March 17 - <Phoenix Canada Oil Co Ltd> said it -intends to appeal a ruling in U.S. Federal District Court of -Delaware on its suit against Texaco Inc <TX>, Chevron Corp -<CHV>, Chevron's Gulf Oil unit and their Ecuador subsidiaries. - The court ruled against Phoenix's claim that a royalty it -held should have entitled it to a share of the 160 mln U.S. -dlrs paid to the defendants when they sold 62.5 pct of their -working interest in Ecuador oil operations, Phoenix said. - However, the court did award Phoenix 1,250,000 Canadian -dlrs in underpayments, the company said. - Phoenix Canada Oil said the fiduciary relationship that -existed between Phoenix, as the royalty owner, and the -defendants, as the working interest operators, was fundamental -in the oil industry and was not reflected in the court's -ruling. - Reuter - - - -17-MAR-1987 11:47:33.87 - -usa - - - - - -F -f5500reute -r f BC-GANNETT-<GCI>-SEEKS-T 03-17 0046 - -GANNETT <GCI> SEEKS TO DOUBLE AUTHORIZED SHARES - WASHINGTON, March 17 - Gannett Co Inc said it will ask -shareholders at the May Seven annual meeting to approve a -doubling of authorized common shares to 400 mln and limitations -on the liability of directors under Delaware law. - Reuter - - - -17-MAR-1987 11:47:39.87 -earn -usa - - - - - -F -f5501reute -d f BC-VIDEO-LIBRARY-INC-<VL 03-17 0055 - -VIDEO LIBRARY INC <VLVL> 4TH QTR LOSS - SAN DIEGO, Calif.,March 17 - - Shr loss two cts vs profit three cts - Net loss 59,299 vs profit 88,843 - Revs 3,487,693 vs 2,123,488 - Year - Shr profit 25 cts vs loss two cts - Net profit 816,395 vs loss 44,541 - Revs 12.2 mln vs 7,413,328 - Avg shrs 3,208,472 vs 2,348,559 - Reuter - - - -17-MAR-1987 11:47:50.38 - -finland - - - - - -RM -f5502reute -r f BC-CONSERVATIVE-GAINS-MA 03-17 0112 - -CONSERVATIVE GAINS MAY SPEED FINNISH MARKET REFORM - By Simon Haydon, Reuters - HELSINKI, March 17 - Conservative gains in Finnish general -elections could speed liberalisation of financial markets, -though there will not be a radical economic restructuring, -conservative officials and economic analysts said. - The conservatives gained nine new seats in parliament after -the two-day elections, which ended yesterday, and political -commentators say social democrat Prime Minister Kalevi Sorsa is -likely to be replaced by a centre-right coalition. - International spokesman Pasi Natri told Reuters: "we are -willing to liberalise the economy as much as possible." - Helsinki analysts said the outgoing centre-left coalition -had introduced major reforms of money and stock markets in its -period of government between 1983 and 1987. - They said Finnish conservatives bore little resemblance to -other European conservative movements and had, for example, -shelved privatisation policies to increase their popularity. - Finnish trade affairs are dominated by its special ties -with its neighbour, The Soviet Union, and a new centre-right -coalition could alter this relationship, the analysts said. - The two countries have a long-term pact under which trade -must be balanced in value. The 1987 accord signed in January -agreed bilateral trade totalling about 30 billion markka. - Finland exports finished products to the USSR, with crude -oil accounting for 80 pct of imports. - The Centre Party said before the elections that Fenno- -Soviet trade would have to be cut because Finland had to trim -exports when the value of Moscow's oil exports to Finland fell. - Finnish financial markets reacted cautiously to the -election news, with little movement in the markka or on the -Helsinki stock exchange. - Securities analysts said the market would respond positively -if a centre-right coalition was formed, but added it was too -early to exclude the possibility that social democrats would -hang on to power. - The spokesman said conservatives favoured legislation -governing the stock market to prevent "casino-style behaviour." - He said the conservatives also favoured the establishment -of an internal market between the Nordic countries. - International capital markets were becoming more and more -important, he said, adding conservatives would speed up the -development of Finland's capial markets. - He said the conservatives supported the bilateral trade ties -with Moscow, but that links with western Europe should be -studied. Finland is a member of the European Free Trade -Association ( EFTA). - Negotiations between the major Finnish political parties -are likely to be protracted, and the shape of the new -government will probably not be established before the start of -April. - Conservatives hold 44 seats now, The Centre Party gained -three to 40 and the social democrats lost one, and now hold 56 -seats. - REUTER - - - -17-MAR-1987 11:47:58.01 - -usabrazil - - - - - -F A RM -f5503reute -b f BC-/BANKAMERICA-<BAC>-MA 03-17 0108 - -BANKAMERICA <BAC> MAY RECLASSIFY BRAZIL LOANS - WASHINGTON, March 17 - BankAmerica Corp may place its -long-term loans to Brazil on nonaccrual status if Brazil -continues to defer interest payments on the loans, the bank -holding company said in a filing with the Securities and -Exchange Commission. - BankAmerica said its outstanding loans to Brazil currently -total about 2.7 billion dlrs, including about 1.5 billion dlrs -in long-term loans and 1.2 billion dlrs in short-term loans. - The Brazilian government announced in February its -intention to stop paying interest temporarily on its long-term -public and private sector commercial bank debt. - "Continued deferral of interest payment on these obligations -could result in the loans being placed on nonaccrual status," -the banking firm said. - BankAmerica said its outstanding loans to Mexico currently -total about 2.5 billion dlrs, of which about 215 mln dlrs of -loans have been reported as either nonaccrual or past due 90 -days or more. - Outstanding loans to Venezuela currently total about 1.3 -billion dlrs, of which 241 mln dlrs of loans have been reported -as either nonaccrual or past due 90 days or more, it said. - Reuter - - - -17-MAR-1987 11:48:39.18 -earn -austria - - - - - -F -f5504reute -d f BC-CHEMIE-LINZ-EXPECTS-S 03-17 0116 - -CHEMIE LINZ EXPECTS SHARPLY HIGHER 1986 LOSS - LINZ, Austria, March 17 - State-owned <Chemie Linz AG> is -likely to record a 1986 loss of some 600 mln schillings -compared with a 340 mln loss in 1985, a company spokesman said. - Falling sales and lower world prices of fertilisers were -largely responsible for the sharp increase, along with the -effects of the dollar's fall which has helped to give U.S. -Fibre producers a competitive edge, he told Reuters. - The firm would have made a small profit in 1985 had it not -been for 456 mln schillings lost by subsidiary <Merx -HandelsgesmbH> on oil trading. Merx has since withdrawn from -the oil market. The firm will announce 1986 results in July. - Reuter - - - -17-MAR-1987 11:49:09.95 -earn -canada - - - - - -E F -f5506reute -d f BC-cabre-exploration-ltd 03-17 0026 - -<CABRE EXPLORATION LTD> SIX MTHS JAN 31 NET - CALGARY, Alberta, March 17 - - Shr 13 cts vs 13 cts - Net 617,000 vs 604,000 - Revs 1,889,000 vs 1,920,000 - Reuter - - - -17-MAR-1987 11:50:08.20 -acq -usa - - - - - -F -f5508reute -b f BC-DUDLEY-TAFT-RAISES-BI 03-17 0108 - -DUDLEY TAFT RAISES BID FOR TAFT BROADCASTING<TFB> - CINCINNATI, Ohio, March 17 - Dudley Taft and Narragansett -Capital Inc said it was prepared to raise its bid to acquire -Taft Broadcasting Co to more than 150 dlrs per share. - Taft, through Theta Co, sent and letter to Taft's board of -directors stating he was committed to purchasing the -broadcasting company and was ready to discuss all aspects of -the purchase. - The company said items to be discussed included price, -structure and form of consideration. Taft said he was prepared -to negotiate a transaction in which Taft Broadcast shareholders -would receive in excess of 150 dlrs per share. - Reuter - - - -17-MAR-1987 11:50:48.87 - -japan -james-baker - - - - -V RM -f5510reute -f f BC-******TREASURY'S-BAKE 03-17 0014 - -******TREASURY'S BAKER SAYS HE IS "QUITE CONFIDENT" JAPAN WILL STIMULATE ITS ECONOMY -Blah blah blah. - - - - - -17-MAR-1987 11:52:58.57 -veg-oil -west-germany - -ec - - - -C G -f5519reute -u f BC-EC-OILS-TAX-NO-LONGER 03-17 0107 - -EC OILS TAX NO LONGER MAJOR ISSUE - ASSOCIATION - BONN, March 17 - The proposed European Community (EC) tax -on vegetable oils and fats is no longer a major issue on the -agenda and the EC Commission merely used it as a threat, the -West German Feed Stuffs Industry Association (MFI) said. - Association chairman Ulrich Wagner told a news conference -the West German feed industry believes the EC does not -seriously contemplate the introduction of such a tax because it -would end in another transatlantic trade war. - "We have just avoided a trade conflict with the U.S. And the -Commission used the tax threat to calm national farm lobbies." - American Soybean Association (ASA) president-elect Wayne -Bennett said yesterday in The Hague that U.S. Soybean producers -were confident the tax would be rejected. - Bennett, who is leading one of three soybean delegations on -a lobbying tour of EC capitals, will also visit Bonn on -Thursday and Friday. - There are indications the Bonn government will also reject -the proposed tax, Wagner said. - Reuter - - - -17-MAR-1987 11:54:05.69 -acq -usa - - - - - -F -f5525reute -d f BC-ALLWASTE-<ALWS>-TO-BU 03-17 0083 - -ALLWASTE <ALWS> TO BUY RELATED COMPANY - HOUSTON, March 17 - Allwaste Inc said it entered into an -agreement in principle to acquire all the outstanding common of -a related air-moving and industrial services company. It did -not disclose the name of the company. - Allwaste, which preforms air-moving and related services, -said it will swap shares of its common, valued at 2.6 mln dlrs, -with the company it is acquiring. - It said the acquisition is subject to negotiation of a -final agreement. - Reuter - - - -17-MAR-1987 11:57:19.33 -crude -usafrance - - - - - -F Y -f5543reute -u f BC-EXXON-<XON>-MAY-CLOSE 03-17 0104 - -EXXON <XON> MAY CLOSE ONE FRENCH REFINERY - NEW YORK, MARCH 17 - Exxon Corp, the world's largest oil -company, said in a published interview today that it was -reviewing its worldwide refinery operations and might decide to -close on of its french refineries. - Lee R. Raymond, Exxon's new president, singled out the -possibility of a closure of one of Exxon's refineries in France -during the interview. - An Exxon spokeswoman confirmed that Raymond had -specifically mentioned refineries in France but said that no -specific refinery had been named. She also said that all of -Exxon's opertations were under constant review. - Exxon currently has two refineries in France, FOS in the -mediterranean with a capcity of 175,000 barrels per day and -Port Jerome west of paris with a similar capacity. - Petroleum Intelligence Weekly, an influential trade -journal, said, in its current issue, that they understood that -Exxon was looking at the possibility of refinery closures in -Antwerp, Southern France or possibly Italy. - Paul Mlotok, oil analyst with Salomon Brothers inc said -that with the closures Exxon made in 1986 in Europe and the -improvement in the European refining situation, its future -profits there should be good. - "Exxon and other major oil companies have closed a bunch of -refineries in Europe, upgraded the rest and shaken many of the -indepedents out of the market. Now with demand for products -rising and efficient operations, Exxon should show superior -earnings," Mlotok said. - "Just after Royal Dutch <RD>, they are seen as one of the -highest grade refiners in Europe," he added. - Industry sources said that the oil companies were likely to -feel greater pressure on their operations in Southern Europe -where competition from the OPEC countries is increasing as -these producers move further into downstream operations. - PIW said that refiners in the Mediterranean can expect -increased shipments from Saudi Arabia and other OPEC export -refineries. - PIW said "sales from Libya, Algeria and elsewhere are -expected to reclaim markets lost to Italian and other European -refiners as a result of the abundance of cheap netback oil last -year." - Reuter - - - -17-MAR-1987 11:58:19.93 - -ussrusa -james-baker -worldbankimf - - - -C -f5551reute -r f BC-BAKER-SAYS-U.S.-OPPOS 03-17 0105 - -BAKER SAYS U.S. OPPOSES SOVIET BANK MEMBERSHIP - WASHINGTON, March 17 - U.S. Treasury Secretary James Baker -said the U.S. opposes Soviet membership of the World Bank or -the International Monetary Fund. - Baker told a House foreign affairs subcommittee, "I think -our position is absolutely clear on that ... We do not support -and will not support Soviet membership in the World Bank or the -IMF." - Baker said the U.S. position was "unqualified and -unconditional." - Baker was responding to a questioner who noted that World -Bank President Barber Conable has in the past suggested future -Soviet membership could take place. - Reuter - - - -17-MAR-1987 11:58:36.43 -veg-oilsoybean -italyusa - -ec - - - -C G -f5552reute -u f BC-ITALY-STANCE-ON-EC-OI 03-17 0100 - -ITALY STANCE ON EC OILS TAX NOT ENCOURAGING-ASA - ROME, March 17 - Italy's response to protests by U.S. -Soybean producers about the proposed European Community (EC) -tax on vegetable oils and fats had not been encouraging, -American Soybean Association (ASA) board chairman George -Fluegel said. - Fluegel, heading one of three U.S. Soybean producer -delegations currently on a lobbying tour of EC countries, told -Reuters in an interview meetings with officials from the -Italian Foreign and Agricultural ministries had not yielded -much to encourage hopes that Italy would vote against the -proposed tax. - Fluegel said his delegation had received a negative -response from the Italian Agriculture Ministry, but that the -attitude of the Foreign Ministry appeared "more realistic." - He said the proposed tax was discriminatory against U.S. -Farmers since it was basically asking them to help finance the -EC's Common Agricultural Policy (CAP) on oilseeds. - Asked which EC countries might be expected to vote against -the proposed tax, he said, "Realistically, from the information -we're getting, it looks like the English, the Germans, -hopefully the Netherlands and Denmark." His delegation also -hoped to convince Belgium to vote against the issue, he added. - Asked what form he thought U.S. Retaliatory action might -take in the event of the EC tax proposal being approved, -Fluegel said industrial as well as agricultural products could -be involved. - U.S. Agriculture Secretary Richard Lyng warned the EC -yesterday it would face serious retaliation if it enacted the -tax. - ASA president-elect Wayne Bennett said yesterday in The -Hague American soybean producers were confident the proposed -tax would be rejected. - Reuter - - - -17-MAR-1987 11:59:00.09 -cotton -israel - - - - - -G -f5556reute -d f BC-ISRAEL'S-FIVE-YEAR-PL 03-17 0142 - -ISRAEL'S FIVE-YEAR PLAN TO BOOST AGRICULTURE - TEL AVIV, March 17 - Israel has drawn up a five-year plan -for 1987-1991 to raise agricultural production by 500 mln dlrs -to 2.7 billion dlrs, an annual rise of 3.4 pct, the Israeli -Ministry of Agriculture said. Agricultural exports are to be -increased by 180 mln dlrs, or 4.8 pct per year on average. - The area planted to cotton is to remain at the 1986 level -of 100,000 to 112,500 acres with exports expected to bring in -80 to 90 mln dlrs per year. The 34 pct decline from the 1985 -level reflects continued water rationing which will remain in -force, the ministry said. - Groundnut production is planned to increase by 13,000 -tonnes, or 57 pct, by 1991 and exports by 9,000 tonnes, or 82 -pct. Maize production is targetted to rise by 48,000 tonnes, or -48 pct, and exports by 34,000 tonnes, or 45 pct. - Reuter - - - -17-MAR-1987 12:02:53.79 - -usa - - - - - -RM A -f5571reute -r f BC-BRUNSWICK-<BC>-FILES 03-17 0078 - -BRUNSWICK <BC> FILES FOR 300 MLN DLR SHELF - SKOKIE, ILL., March 17 - Brunswick Corp said it filed a -registration statement with the Securities and Exchange -Commission on a shelf offering of 300 mln dlr in senior debt -securities. - It said proceeds from the sale will be used mainly for to -replace variable rate indebtedness, primarily privately placed -commercial paper, incurred in connection with the acquisitions -of Bayliner marine Corp and Ray Industries Inc. - Reuter - - - -17-MAR-1987 12:03:31.99 -acq -usa - - - - - -F -f5575reute -u f BC-SOROS-GROUP-HAS-B.F. 03-17 0100 - -SOROS GROUP HAS B.F. GOODRICH <GR> STAKE - WASHINGTON, March 17 - An investor group led by New York -investor George Soros said it acquired a 6.1 pct stake in B.F. -Goodrich Co common stock as an investment. - The group said it paid about 69 mln dlrs for the 1,389,600 -Goodrich shares, which are being held by Quantum Fund N.V., a -Netherlands Antilles investment firm advised by Soros. - It said all the shares were bought between Dec. 29 and -March 9. - The group said it reserved the future right to buy -additional shares and to formulate other purposes or plans -regarding its Goodrich investment. - Reuter - - - -17-MAR-1987 12:04:26.00 - -usa -james-baker - - - - -C -f5584reute -r f BC-BAKER-SAYS-U.S.-NOT-S 03-17 0095 - -BAKER SAYS U.S. NOT SEEKING IADB VETO - WASHINGTON, March 17 - Treasury Secretary James Baker said -the United States was not seeking loan veto in its negotiation -for voting power at the Inter-American Development Bank. - Discussing the ongoing negotiation, Baker said the U.S. -position is that the countries that pay in the most should have -the greatest say over the loan decisions. - The U.S. is seeking the power to block loan votes with one -other country, and the issue will be discussed in Miami later -this month at the annual meeting of the Latin development bank. - Reuter - - - -17-MAR-1987 12:04:41.09 -housing -usa - - - - - -C M -f5585reute -d f BC-BALDRIGE-PREDICTS-SOL 03-17 0111 - -BALDRIGE PREDICTS SOLID U.S. HOUSING GROWTH - WASHINGTON, March 17 - Commerce Secretary Malcolm Baldrige -predicted 1987 will be the fifth successive year for growth in -housing starts after a 2.6 pct rise overall in February starts -to a seasonally adjusted annual rate of 1.851 mln units. - "This year should be the fifth solid year in a row for -homebuilding activity -- with single-family units stronger than -multi-family units," he said in a statement. - Single-family starts rose last month from January levels by -5.6 pct to 1.317 mln units on a seasonally adjusted basis while -multi-family unit starts fell 4.1 pct to 534,000 units, the -department reported. - Reuter - - - -17-MAR-1987 12:05:06.31 -acq - - - - - - -F -f5587reute -f f BC-******TAFT-BROADCASTI 03-17 0014 - -******TAFT BROADCASTING SAYS IT WILL CONTINUE TO REVIEW OPTIONS IN RESPONSE TO LATEST BID -Blah blah blah. - - - - - -17-MAR-1987 12:05:12.02 -acq - - - - - - -F -f5588reute -b f BC-******COURT-ENJOINS-Z 03-17 0012 - -******COURT ENJOINS ZICO INVESTMENT'S TENDER FOR BANCROFT CONVERTIBLE FUND -Blah blah blah. - - - - - -17-MAR-1987 12:06:41.72 -acq -usa - - - - - -F -f5599reute -u f BC-STEINHARDT-GROUP-HAS 03-17 0106 - -STEINHARDT GROUP HAS 6.6 PCT OF HOLIDAY <HIA> - WASHINGTON, March 17 - A group led by New York investor -Michael Steinhardt told the Securities and Exchange Commission -it bought a 6.6 pct stake in Holiday Corp common stock as an -investment. - The group said it paid 114 mln dlrs for its 1.6 mln Holiday -shares, 530,000 of which were bought since Feb. 6. - At the same time, group members said they held short -positions in the stock totaling 830,000 shares. - In addition to Steinhardt himself, the group includes -Steinhardt Partners and Institutional Partners, two investment -firms of which Steinhardt is one of the general partners. - Reuter - - - -17-MAR-1987 12:08:46.37 - -usa - - - - - -V -f5612reute -u f AM-REAGAN-POINDEXTER 03-17 0093 - -POINDEXTER REFUSES TO TESTIFY BEFORE COMMITTEE - WASHINGTON, March 17 - Adm. John Poindexter, a former -National Security Adviser who resigned over the Iran arms -scandal, refused to testify before a House committee probing a -recent expansion of White House and military control over -unclassified information. - "On advice of counsel, I decline to answer that question -pursuant to my constitutional rights under the Fifth Amendment," -Poindexter said four times in response to questions from House -Government Operations Committee chairman Rep. Jack Brooks. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-007.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-007.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-007.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-007.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2010 +0,0 @@ - - -19-MAR-1987 06:17:22.36 -earn -australia - - - - - -F -f0363reute -u f BC-FAIRFAX-SAYS-HIGHER-T 03-19 0107 - -FAIRFAX SAYS HIGHER TAX HITS FIRST HALF EARNINGS - SYDNEY, March 19 - Media group John Fairfax Ltd <FFXA.S> -said that its flat first half net profit partly reflected the -impact of changes in the Australian tax system. - Fairfax earlier reported net earnings edged up 2.3 pct to -25.94 mln dlrs in the 26 weeks ended December 28 from 25.35 mln -a year earlier although pre-tax profit rose 9.1 pct to 48.30 -mln from 44.29 mln. - Net would have risen 10.1 pct but for the increase in -company tax to 49 pct from 46 and the imposition of the tax on -fringe benefits, paid by employers and not the recipients, the -company said in a statement. - Fairfax also pointed to the cyclical downturn in revenue -growth in the television industry as another reason for the -flat first half earnings. - It said it considered the result satisfactory in view of -these factors. - Fairfax said its flagship dailies, The Sydney Morning -Herald and the Melbourne Age, boosted advertising volume, as -did the Australian Financial Review, and posted extremely -satisfactory performances. Magazines also performed strongly. - But an 8.9 pct rise in television costs outweighed a 4.0 -pct rise in revenue, it said. - Fairfax said a fall in net interest also contributed to net -earnings because group borrowings were reduced following the -receipt of a 96.11 mln dlr capital dividend from <Australian -Associated Press Pty Ltd> (AAP) after the sale of AAP's "B" -shares in Reuters Holdings Plc <RTRS.L>. - This accounted for the 89.32 mln dlr extraordinary profit. - Fairfax said it is too early to predict results for the -full year. Increased borrowings after the recent 320 mln dlr -acquisition of the HSV-Seven television station in Melbourne -will hit earnings but networking with the Channel Sevens in -Sydney and Brisbane will produce some offsetting cost savings. - REUTER - - - -19-MAR-1987 06:20:33.63 - -france - - - - - -RM -f0367reute -b f BC-BANK-OF-FRANCE-SELLS 03-19 0095 - -BANK OF FRANCE SELLS 1.6 BILLION FRANCS CRH TAP - PARIS, March 19 - The Bank of France sold 1.6 billion -francs of 8.50 pct March 1987/99 Caisse de Refinancement -Hypothecaire (CRH) state-guaranteed tap stock at an auction, -the Bank said. - Demand totalled 6.82 billion francs and prices bid ranged -from 93.50 to 96.60 pct. The minimum accepted price was 95.50 -pct with a 9.13 pct yield, while the average price was 95.69. - At the last auction on February 19, two billion francs of -CRH tap stock was sold at a minimum price of 91.50 pct and -yield of 9.73 pct. - REUTER - - - -19-MAR-1987 06:21:45.34 -earn -uk - - - - - -F -f0370reute -b f BC-BRITOIL-PLC-<BTOL.L> 03-19 0045 - -BRITOIL PLC <BTOL.L> 1986 YR - LONDON, March 19 - - Shr 6.56p vs 50.31p - Final div 6p, making 8p vs 13p. - Pre-tax profit 134 mln stg vs 759 mln. - Net profit 33 mln vs 253 mln. - Turnover 978 mln stg vs 1.80 billion. - Extraordinary debit 50 mln vs nil. - Operating profit 149 mln stg vs 756 mln. - Exceptional debit on rationalisation programme 12 mln vs -nil - Petroleum Revenue Taxes 77 mln vs 319 mln, - U.K. Corporation tax and overseas tax 24 mln vs 187 mln, - Note - The net effect of accounting changes in 1986 was to -reduce after tax profits by 47 mln stg. Retained earnings for -prior years were increased by 209 mln. - Extraordinary debit of 50 mln stg related to the decision -to seek a buyer for the company's U.S. Assets. - REUTER - - - -19-MAR-1987 06:29:47.46 -jobs -uk - - - - - -RM -f0389reute -f f BC-(EMBARGOED-FOR-RELEAS 03-19 0023 - - (EMBARGOED FOR RELEASE AT 1130 GMT THURS MARCH 19) ******UK -FEB ADJUSTED UNEMPLOYMENT FELL 44,100 TOTAL 3.07 MLN OR 11.1 -PCT - OFFICIAL - - - - - -19-MAR-1987 06:31:34.81 -income -uk - - - - - -RM -f0391reute -f f BC-UK-UNIT-WAGE/LABOUR-C 03-19 0013 - -******UK UNIT WAGE/LABOUR COSTS ROSE 3.3 PCT IN THREE MONTHS ENDING JAN - OFFICIAL -Blah blah blah. - - - - - -19-MAR-1987 06:32:16.74 -income -uk - - - - - -RM -f0392reute -f f BC-UK-AVERAGE-EARNINGS-R 03-19 0014 - -******UK AVERAGE EARNINGS ROSE 7.6 PCT IN JANUARY, UNDERLYING RISE 7.5 PCT - OFFICIAL -Blah blah blah. - - - - - -19-MAR-1987 06:32:22.15 -money-supply -uk - - - - - -RM -f0393reute -f f BC-U.K.-FEBRUARY-ADJUSTE 03-19 0015 - -******U.K. FEBRUARY ADJUSTED STERLING M3 RISES 2-1/4 PCT, M0 DOWN 3/4 TO ONE PCT - OFFICIAL -Blah blah blah. - - - - - -19-MAR-1987 06:32:48.77 -earn -uk - - - - - -F -f0394reute -u f BC-LEGAL-AND-GENERAL-GRO 03-19 0037 - -LEGAL AND GENERAL GROUP PLC YEAR 1986 - LONDON, March 19 - - Shr 14.58p vs 7.86p - Div 6.5p making 9.75p, an increase of 19.4 pct - Pretax profit 83.2 mln stg vs 31.5 mln - Net after tax 68.6 mln stg vs 37.7 mln - Pretax profit 83.2 mln stg vs 31.5 -mln, consists of - - Long term business 45.9 mln stg vs 43.8 mln - U.S. Long term business 6.2 mln vs 8.9 mln - Fund management 4.7 mln vs 6.5 mln - Short term business 4.7 mln vs loss 29.0 mln - Associate companies 0.9 mln vs 0.8 mln - Shareholders other income and outgoings 0.4 mln debit vs -0.5 mln credit - Exceptional long-term business profit 21.4 mln vs nil - REUTER - - - -19-MAR-1987 06:33:49.51 -money-supply - - - - - - -RM -f0397reute -f f BC-FEB-STERLING-BANK-LEN 03-19 0014 - -******FEB STERLING BANK LENDING UP 2.9 BILLION STG AFTER 1.75 RISE IN JAN - OFFICIAL -Blah blah blah. - - - - - -19-MAR-1987 06:33:54.42 -jobs -uk - - - - - -RM -f0398reute -f f BC-UK-FEB-ADJUSTED-UNEMP 03-19 0014 - -******UK FEB ADJUSTED UNEMPLOYMENT FELL 44,100 TOTAL 3.07 MLN OR 11.1 PCT - OFFICIAL -Blah blah blah. - - - - - -19-MAR-1987 06:34:43.33 -trade -japanusa - - - - - -F -f0399reute -u f BC-JAPAN-TO-ASK-CHIP-MAK 03-19 0118 - -JAPAN TO ASK CHIP MAKERS TO SLASH OUTPUT FURTHER - TOKYO, March 19 - The Ministry of International Trade and -Industry will ask Japanese computer microchip makers to further -slash output in the second quarter in an effort to save its -semiconductor pact with the United States, MITI officials said. - The United States has accused Japan of reneging on the -semiconductor pact by failing to stop the flow of cut-price -Japanese chips to Asian markets. Washington has threatened to -take retaliatory action after April 1. - The pact, agreed last year, calls on Japan to stop selling -cut-price chips in world markets and to increase its imports of -American chips to reduce some of its huge trade surplus. - MITI, anxious to salvage the bilateral agreement, has been -pressing chip makers to limit production in the hope that will -boost domestic chip prices and reduce the incentive to export. - Last month, the ministry asked Japanese chip makers to -reduce first quarter output by 10 pct. To meet that request, -they had to slash production by 20 pct over the final six weeks -of the first quarter. - If that reduced production level were maintained through to -the end of June, second quarter output would come in 10 pct -below that of the first three months of the year. - MITI officials, who declined to be identified, said the -ministry has not yet decided on the extent of the second -quarter cutback. - One said that Japanese chip makers are losing ground in -Asia to South Korean and U.S. Competition just as markets there -are picking up. - MITI has been criticized privately by some Japanese -semiconductor makers for what they see as heavy-handed attempts -to ensure the success of the Japan/U.S. Chip pact. - REUTER - - - -19-MAR-1987 06:39:15.19 -money-supply -uk - - - - - -RM -f0402reute -b f BC-U.K.-CLEARING-BANK-LE 03-19 0067 - -U.K. CLEARING BANK LENDING RISES 1.6 BILLION STG - LONDON, March 19 - Clearing bank sterling lending to the -U.K. Private sector in February is estimated to have risen by -an underlying, seasonally-adjusted 1.6 billion stg after a 1.2 -billion stg rise in January, the Banking Information Service -said. - The unadjusted rise was 1.31 billion stg, compared with an -813 mln stg increase in January. - The Banking Information Service said the adjusted rise of -1.6 billion stg was well above the recent monthly average of -about 1.0 billion stg. - Of the increase, 297 mln stg was accounted for by personal -lending, which the Banking Information Service said was taken -up entirely by lending for home purchases. - Lending for consumption fell around 17 mln stg while about -182 mln stg of credit card debt was repaid during the month. - Lending to the manufacturing industry was up 370 mln stg, -and to leasing companies by 308 mln stg. - The Banking Information Service said February fell within -the governmemnt tax season, so much of the lending was probably -the result of industry's need to pay its tax bills. - Deposits by the private sector rose an unadjusted 1.1 -billion stg in February and by a seasonally-adjusted 1.75 -billion stg. - Deposits from the public sector rose 185 mln stg in -February while deposits from overseas residents rose by 43 mln. - REUTER - - - -19-MAR-1987 06:43:04.94 -jobs -uk - - - - - -RM -f0410reute -b f BC-U.K.-UNEMPLOYMENT-FAL 03-19 0084 - -U.K. UNEMPLOYMENT FALLS IN FEBRUARY - LONDON, March 19 - Unemployment in the U.K. Fell a -provisional seasonally-adjusted 44,100 in February, to total -3.07 mln or 11.1 pct of the workforce, the Employment -Department said. - In January, seasonally adjusted unemployment fell by a -revised 1,100 to 11.3 pct, it said. Initially the January -position was reported as flat. - The unadjusted jobless total, including school leavers, -fell to 3.23 mln, or 11.7 pct, from 3.30 mln, 11.9 pct, in -January. - February was the seventh successive month that seasonally -adjusted unemployment registered a fall. - It was at a peak of 11.7 pct last summer. - Lord Young, the Employment Minister, said there appeared -little doubt the monthly fall, which has been running at about -20,000, will continue. - A Department spokesman said the sharp fall in February -reflected some compensation for the flat figure in January and -continued the downward trend seen in the past six months. - He said the February fall was spread throughout the country -and among men and women. - REUTER - - - -19-MAR-1987 06:47:26.22 -money-supply -uk - - - - - -RM -f0415reute -b f BC-STERLING-M3-UP-2-1/4 03-19 0110 - -STERLING M3 UP 2-1/4 PCT IN FEBRUARY, M0 DOWN - LONDON, March 19 - The main measure of U.K. Broad money, -sterling M3, grew a provisional, seasonally adjusted 2-1/4 pct -in February after a rise of 1.1 pct in January, the Bank of -England said. - The narrow measure, M0, fell a provisional adjusted 3/4 to -one pct after a 0.6 pct drop in January, the Bank said. - Unadjusted annual growth in sterling M3 was 18-3/4 to 19 -pct in the 12 months to February against 17.6 pct in January -while M0 rose four to 4-1/4 pct after a 5.2 pct rise in -January. - Seasonally adjusted, sterling bank lending grew 2.9 billion -stg after a January rise of 1.75 billion. - Of the unadjusted counterparts to sterling M3, bank lending -to the private sector expanded 2.6 billion stg after a 1.4 -billion rise in January, the Bank said. - The public sector borrowing requirement (PSBR) contracted -by 300 mln stg after a contraction of 3.7 billion stg in -January. - Funding - debt sales to the non-bank private sector and -external flows to the public sector - rose by 300 mln stg after -a 1.5 billion stg rise in January. Of this, central government -debt sales to the public sector were expansionary by 400 mln -stg after a 1.3 billion expansion in January, the Bank said. - Other unadjusted counterparts to sterling M3 expanded by -300 mln stg in February after an expansion of 1.3 billion stg -in January, the Bank said. - Unadjusted figures showed a rise in sterling M3 by 1-3/4 to -two pct in February after a drop of 0.8 pct in January. - On the same basis, the figures showed a drop of about 1-1/2 -pct in MO in February after a sharp 6-1/2 pct fall in January. - The Bank said it would publish full, final figures on March -30. - The Bank said non-bank private sector holdings of public -sector debt fell by about 400 mln stg in February while -external flows to the public sector were about 100 mln stg. - Combined with a net PSBR repayment of about 300 mln stg, -the public sector contribution to the growth in sterling M3 was -therefore about flat, the Bank said. - It said seasonally adjusted bank lending, at about 2.9 -billion stg in February, compared with an average of about 2.6 -billion stg a month over the preceding six months. - REUTER - - - -19-MAR-1987 06:53:56.15 -income -uk - - - - - -RM -f0418reute -b f BC-U.K.-EARNINGS-RISE-7. 03-19 0094 - -U.K. EARNINGS RISE 7.6 PCT IN YEAR TO JANUARY - LONDON, March 19 - U.K. Average earnings rose a seasonally -adjusted 7.6 pct in the year to end-January after a 7.4 pct -rise in the year to December, the Department of Employment -said. - The underlying rise was 7.5 pct after 7.75 pct in December. - The January index, base 1980, was set at a provisional -seasonally adjusted 190.4, down from 193.4 in December. - The underlying rise, adjusted for factors such as back-pay -and timing variations, had been steady at 7.5 pct from October -1985 to October 1986. - Unit wage costs in U.K. Manufacturing industry rose 3.3 pct -in the three months to end January, on a year-on-year basis, -after a 3.1 pct rise in the three months to end December, the -Department of Employment said. - In January, the unit wage rise in manufacturing industries -was 3.6 pct, unchanged from the December rise. - The Department said the decline in the underlying rate of -rise in earnings reflected the reduced significance of bonus -payments in January compared with December. - The actual increase reflected teacher pay settlements and -industrial action in the transport and communications sectors -in January 1987. - REUTER - - - -19-MAR-1987 06:55:01.57 - -uk - - - - - -RM -f0419reute -b f BC-MEPC-ISSUES-PARTLY-PA 03-19 0088 - -MEPC ISSUES PARTLY PAID EUROSTERLING BOND - LONDON, March 19 - U.K. Property company MEPC Plc is -issuing a 75 mln stg eurobond due April 15, 2004 paying 9-7/8 -pct and priced at 99-5/8 pct, lead manager County Natwest -Capital Markets said. - The bond is in partly paid form with 25 pct due on April 15 -and the remainder on July 15. It will be available in -denominations of 1,000 and 10,000 stg and will be listed in -London. - Fees comprise 1-1/2 pct selling concession and 1/2 pct each -for management and underwriting. - REUTER - - - -19-MAR-1987 07:01:20.97 - -uk - - - - - -RM -f0426reute -b f BC-NOMURA-INTERNATIONAL 03-19 0108 - -NOMURA INTERNATIONAL FINANCE ISSUES EUROBOND - LONDON, March 19 - Nomura International Finance Plc is -issuing a 150 mln dlr eurobond due April 28, 1992 with a 7-1/4 -pct coupon and priced at 101-1/8 pct, Nomura International Ltd -said as lead manager. - The transaction carries the guarantee of Nomura Securities. -Bonds will be issued in denominations of 5,000 dlrs and will be -listed in London. Payment date is April 27. - Fees comprise 5/8 pct for management and underwriting, -including a 1/8 pct praecipuum, and 1-1/4 pct for selling. - Co-lead is Pru-Bache Securities. The issue is targeted at -Europe, with no Japanese co-managers. - REUTER - - - -19-MAR-1987 07:09:17.93 - -uk - - - - - -A -f0442reute -r f BC-VOLVO-ISSUES-70-BILLI 03-19 0078 - -VOLVO ISSUES 70 BILLION EUROLIRE BOND - LONDON, March 19 - AB Volvo is issuing a 70 billion -eurolire bond due May 31, 1990 paying 10-1/8 pct and priced at -100-1/2 pct, lead manager Banca Commerciale Italiana said. - The bond is available in denominations of two mln lire and -will be listed in London. - Fees comprise 7/8 pct selling concession with 1/2 pct for -management and underwriting combined. - Payment date is April 24 and there will be a long first -coupon. - REUTER - - - -19-MAR-1987 07:13:37.68 - -west-germany -stoltenberg - - - - -RM -f0450reute -u f BC-STOLTENBERG-CONSIDERS 03-19 0101 - -STOLTENBERG CONSIDERS RAISING SOME INDIRECT TAXES - BONN, March 19 - Finance Minister Gerhard Stoltenberg said -he was looking for ways to help finance a planned tax reform -without increasing value-added tax but could not rule out -raising some indirect taxes, for example, on tobacco. - Stoltenberg also told parliament that closing tax loopholes -would contribute towards the 19 billion marks the government is -seeking to finance part of its 44 billion mark tax reform -package for the 1990s. - He confirmed that a temporary and limited increase in the -borrowing requirement was also being considered. - Chancellor Helmut Kohl yesterday said a temporary rise in -borrowing was acceptable but stressed his government would -exercise strict discipline in spending. - New net borrowing was 23.0 billion marks in 1986 compared -with 37.2 billion in 1982. - REUTER - - - -19-MAR-1987 07:16:04.87 -money-fx -uk - - - - - -RM -f0456reute -b f BC-U.K.-MONEY-MARKET-SHO 03-19 0032 - -U.K. MONEY MARKET SHORTAGE FORECAST REVISED DOWN - LONDON, March 19 - The Bank of England said it revised down -its estimate of the deficit in the system today to 400 mln stg -from 450 mln. - REUTER - - - -19-MAR-1987 07:17:51.88 - -west-germany - - - - - -RM -f0457reute -u f BC-WESTLB-ISSUES-50-MLN 03-19 0115 - -WESTLB ISSUES 50 MLN AUSTRALIAN DLR EUROBOND - FRANKFURT, March 19 - A Westdeutsche Landesbank -Girozentrale (WestLB) unit is raising 50 mln Australian dlrs -through a five-year bullet eurobond with a 14-3/8 pct coupon -and priced at 101-1/2, co-lead manager WestLB said. - The bond, for WestLB Finance N.V., Is guaranteed by the -parent. Investors will pay for the bond on April 15, and the -bond pays annual interest on the same day. It matures on that -day in 1992. Fees total two pct, with 1-3/8 points for selling, -and 5/8 for management and underwriting combined. There is a -1/8 pct praecipuum. Listing is in Luxembourg. - Co-lead is Hambros Bank Ltd. Denomination is 1,000 dlrs. - REUTER - - - -19-MAR-1987 07:21:25.03 - -ecuador - - - - - -A -f0462reute -r f BC-DEBT-ECUADOR 03-19 0085 - -ECUADOR SEEKS 450 MLN DLRS IN EMERGENCY CREDIT - By Jorge Aguirre, Reuters - QUITO, March 18 - Ecuador is seeking between 437 and 450 -mln dlrs in loans this year from multilateral organisations and -foreign governments to grapple with economic losses from a -devastating earthquake 13 days ago, a presidential economic -adviser said. - Foreign governments and multilateral organisations hold -one-third of Ecuador's 8.16 billion dlrs total foreign debt, he -said in a news conference at the presidential palace. - But he added that the suspension of payments to private -foreign banks, who hold the rest of the foreign debt, would be -prolonged though the government hoped to negotiate an agreement -with these creditors. - President Leon Febres Cordero says the earthquake cost the -country one billion dlrs in losses and left 1,000 people dead -or missing. - Swett, who was Finance Minister of Ecuador between August -1984 to June 1986, added: "With the private foreign banks there -has been a ceasing of payments by Ecuador. - "We are bringing forward the respective negotiations whose -conclusion we hope finalises in the next few weeks." - Finance Minister Domingo Cordovez said last week that -quake-hit Ecuador sought through negotiations to postpone all -payments due to the private foreign banks in 1987 until next -year. - Although Swett gave no gave details on the latest plan for -negotiations with private foreign banks, he calculated the -suspension of payment to these creditors would save the -government 54.45 billion sucres. - This amount is equal to 363 mln dlrs at the free rate of -150 sucres to the dollar -- the rate Swett said reporters -should use in calculating the dollar equivalent. - The Ecuadorean central bank, which is the institution -remitting debt payments abroad, uses the official rate of 95 -sucres to the dollar for its accounting purposes. At the -official rate, the 54.45 billion sucres' sum equals 573 mln -dlrs. - Ecuador, squeezed by a slide last year in prices for crude, -its main export, suspended payments to private foreign banks in -January. - Swett said the government would also seek to refinance the -1.429 billion dlr section of the debt owed to the Paris Club -group of foreign governments, though it would continue to -service the debt with them. He gave no more details. - The government adopted a tough austerity program last -Friday intended to grapple with the tremor's economic costs. -But the country's labour unions have called a general strike -for Wednesday to press for a suspension of the program. - The 500,000-strong Unitary Workers' Front (FUT) and the -100,000-member General Union of Workers (UGT) called the strike -to cancel the measures, which include a rise in petrol prices -of up to 80 per cent and budget cuts of as much as 10 per cent. - The leftist-led FUT said it was also backing a call by the -Maoist Popular Movement for Democracy (MPD) party, to have -Congress impeach and oust Febres Cordero, a conservative, for -having adopted the austerity measures. - Reuter - - - -19-MAR-1987 07:23:33.05 -gold -south-africa - - - - - -A -f0474reute -r f BC-SOME-7,000-SOUTH-AFRI 03-19 0104 - -SOME 7,000 SOUTH AFRICAN MINERS RETURN TO WORK - JOHANNESBURG, March 19 - Some 7,000 black workers returned -to work after staging one-day strikes at two mines on Monday, -the National Union of Mineworkers and the companies that own -the mines said. - About 6,000 miners resumed work at the Grootvlei gold mine -east of Johannesburg after protesting the transfer of -colleagues to other jobs at the same mine, owners General -Mining Union Corp Ltd <GENM.J> said. - The union said about 1,000 mineworkers at a new coal -facility owned by Anglo American Corp of South Africa Ltd -<ANGL.J> also returned to their jobs on Tuesday. - The workers at Anglo's Vaal Colliery south of Johannesburg -had struck to protest the alleged refusal of officials of the -South African homeland of Transkei to allow miners to attend a -funeral in the homeland, a union spokesman said. - REUTER - - - -19-MAR-1987 07:27:17.84 -acq -japanusa - - - - - -F -f0490reute -r f BC-NIPPON-LIFE-SEEKING-T 03-19 0102 - -NIPPON LIFE SEEKING TIE WITH U.S. SECURITIES HOUSE - TOKYO, March 19 - <Nippon Life Insurance Co> is pursing a -possible link with an American securities house to expand its -overseas investment portfolio, a company spokesman said. - But he declined to comment on rumours the company would -take a 10 pct stake in <Shearson Lehman Brothers>, an -investment banking unit of American Express Co <AXP>. - He said the firm started to sound out several U.S. -Investment banks on capital participation about 18 months ago -and was narrowing the number of prospects, but he did not say -if it had set its sights on one firm. - Nippon Life, Japan's largest life insurer, also plans to -set up a wholly owned investment unit, <Nissei International -America>, in New York next month and subsidiaries in Canada, -Singapore, the Cayman Islands and Jersey this year, he said. - These moves are in line with its long-term strategy to put -more emphasis on overseas investment management as -opportunities at home are declining while the company's assets -are growing. - The company is especially attracted by the scale and depth -of U.S. Money and credit markets and wants to establish a firm -foothold there, the spokesman added. - REUTER - - - -19-MAR-1987 07:28:32.29 - - - - - - - -RM -f0495reute -f f BC-****** 03-19 0009 - -****** Bundesbank says it leaves credit policies unchanged -Blah blah blah. - - - - - -19-MAR-1987 07:28:41.74 - -west-germany - - - - - -F -f0496reute -u f BC-WEST-GERMAN-CAR-OUTPU 03-19 0107 - -WEST GERMAN CAR OUTPUT RISES IN FEBRUARY - FRANKFURT, March 19 - West German car and van production -rose to 389,900 in February from 380,900 in February 1986, the -German Automobile Industry Association VDA said in a statement. - Production of trucks of up to six tonnes fell sharply to -11,500 from 14,600, owing to a cut in production of small -delivery vans of up to two tonnes. Total vehicle output rose to -410,000 from 404,600. - Car and van exports eased to 222,000 in February from -225,000 one year earlier, and exports of trucks of up to six -tonnes dropped to 6,200 from 9.900. Total vehicle exports fell -to 233,200 from 240,300. - Car and van output in January and February eased to 758,700 -from 766,500 in the first two months of 1986. Production of -trucks up to six tonnes fell to 26,300 from 30,700, and total -vehicle production fell to 802,300 from 814,900. - Car and van exports in January and February fell to 424,700 -from 443,300 a year earlier and exports of trucks up to six -tonnes fell to 15,400 from 20,200. Total vehicle exports fell -to 449,200 from 473,500. - REUTER - - - -19-MAR-1987 07:28:55.45 -money-fx - - - - - - -RM -f0498reute -b f BC-U.K.-MONEY-MARKET-GIV 03-19 0083 - -U.K. MONEY MARKET GIVEN 181 MLN STG ASSISTANCE - LONDON, March 19 - The Bank of England said it provided the -money market with 181 mln stg in assistance this morning. - This compares with the Bank's revised shortage forecast of -around 400 mln stg. - The central bank purchased bank bills outright at the new -dealing rates established yesterday. - These comprised 65 mln stg in band one at 9-7/8 pct, 114 -mln stg in band two at 9-13/16 pct and two mln stg in band -three at 9-3/4 pct. - REUTER - - - -19-MAR-1987 07:29:03.46 - -japan - - - - - -F -f0499reute -d f BC-FUJI-BANK-ACCUSED-OF 03-19 0074 - -FUJI BANK ACCUSED OF MISUSE OF TAX FREE RESERVES - TOKYO, March 19 - The Tokyo Regional Taxation Bureau has -imposed a penalty tax on <Fuji Bank Ltd> for alleged improper -use of tax-free reserves, a bank spokeswoman told Reuters. - She declined to reveal the bank's planned response but -another bank official said it has not paid the penalty. - The bank said in a brief statement it believes that its use -of the tax-free reserves is legal. - Financial institutions can set aside 0.003 pct of their -risky loans as tax-free reserves. Fuji said a difference of -understanding exists between the bank and the tax bureau -regarding the use of tax-free reserves. It did not elaborate. - Fuji Bank reported a 72.1 billion yen net profit in the -1985/86 year. Lending totaled 16,120 billion yen. - REUTER - - - -19-MAR-1987 07:29:42.07 -money-supply -philippines - - - - - -A -f0505reute -h f BC-PHILIPPINES'-LIQUIDIT 03-19 0104 - -PHILIPPINES' LIQUIDITY RISES, LOAN DEMAND FALLS - MANILA, March 19 - Liquidity in the Philippines rose in -December while loan demand and short-term lending rates fell, -the Central Bank said. - A bank official said M-3 rose 9.72 pct to a provisional -149.80 billion pesos at the end of December from a month -earlier for a year-on-year gain of 12.72 pct. - She said short-term bank lending rates fell to an -annualised 13.88 pct at the end of December, from 14.58 pct a -month earlier and 19.82 pct at the end of December 1985. - Poor loan demand was illustrated by a rise in commercial -bank reserves, the official said. - The bank official said commercial bank reserves were 22.19 -billion pesos at the end of December, when reserves required -were 21.59 billion. - She said the surplus of 597 mln pesos, compared with a -deficit of 390 mln pesos a month earlier and a deficit of 1.64 -billion at the end of 1985, reflected political uncertainty in -the last quarter of 1986. - Reserve money, the total available to monetary authorities, -was a provisional 52.58 billion pesos at the end of 1986. This -was 5.19 pct up from 49.98 billion at the end of November and -41.85 pct up from 37.09 billion in December 1985. - The bank official noted M-3, which includes M-1 money -supply, plus savings, time deposits and deposit substitutes. -Was 132.88 billion pesos at the end of December 1985. - M-1 money supply rose a provisional 17.3 pct to 42.86 -billion pesos at the end of December 1986 from 36.52 billion a -month earlier. The year-on-year rise was 19.64 pct, up from -35.83 billion at the end of December 1985. - Reuter - - - -19-MAR-1987 07:31:01.10 -acq -japanportugal - - - - - -F -f0511reute -r f BC-SANWA-BANK-ACQUIRES-S 03-19 0103 - -SANWA BANK ACQUIRES SMALL STAKE IN PORTUGUESE BANK - TOKYO, March 19 - Sanwa Bank Ltd <ANWA.T> has agreed to buy -a two pct stake in Oporto-based <Banco Portugues de Investmento -Sarl> (BPI), Portugal's largest merchant bank, a Sanwa official -said. - Sanwa will purchase the shares from International Finance -Corp, a BPI shareholder and sister organisation of the World -Bank, for 351 mln yen, he said. - The acquisition will be completed this month as both the -Japanese and Portuguse governments are expected to give -permission soon. This is the first time a Japanese bank has -bought a stake in a Portuguese bank. - Sanwa plans to increase its stake in BPI to four pct, the -ceiling for foreign shareholders, the official said. - The bank has also agreed with <Banco Portugues do -Atlantico>, a state-owned merchant bank in Oporto, to exchange -information on customers and help accelerate Japanese -investment and technological transfers to Portugal, he said. - REUTER - - - -19-MAR-1987 07:41:42.61 -interest -west-germany - - - - - -A -f0527reute -u f BC-BUNDESBANK-LEAVES-CRE 03-19 0051 - -BUNDESBANK LEAVES CREDIT POLICIES UNCHANGED - FRANKFURT, March 19 - The Bundesbank left credit policies -unchanged after today's regular meeting of its council, a -spokesman said in answer to enquiries. - The West German discount rate remains at 3.0 pct, and the -Lombard emergency financing rate at 5.0 pct. - REUTER - - - -19-MAR-1987 07:44:43.08 -gnp -france -balladur - - - - -RM -f0534reute -u f BC-NO-FRENCH-REFLATION, 03-19 0103 - -NO FRENCH REFLATION, SOURCES CLOSE TO BALLADUR SAY - PARIS, March 19 - There is no question of stimulating -consumption or relying on a systematic budget deficit or other -reflationary policies to boost the French economy, sources -close to finance minister Edouard Balladur said. - Their comments followed remarks by prime minister Jacques -Chirac's spokesman Denis Baudouin, who said on Monday ministers -were agreed on the desirability of "relaunching" the economy. - This sparked speculation the government was preparing for a -reflationary U-turn, but the finance ministry immediately ruled -out any such move. - The sources today said the government's policy remained one -of "recovery," or sound finances and greater efficiency. - They said that while 8.6 billion of the 30 billion franc -revenues expected for 1987 from a sweeping privatisation -program will go to providing public companies with fresh -capital, 21.4 billion francs, or two-thirds, will go toward -paying off national debt. - Any further privatisation revenue this year above the 30 -billion would be distributed between repayment of national -internal debt and public companies in similar proportions, they -added. - The sources said it was absurd to talk of reflation when -the country's internal debt, expected to grow by 10 pct this -year from 1,300 billion francs in 1986 was growing twice as -fast as gross domestic product. - Nominal GDP is expected to grow by roughly five pct this -year from 5,000 billion francs last year, broadly in line with -earlier forecasts. Real GDP will grow by up to 2.5 pct. - The sources said that with France's economic targets for -1987 roughly in line with its main trading partners, the -government had no intention of pushing the economy to grow at -an artificial pace out of step with neighbouring economies. - REUTER - - - -19-MAR-1987 07:55:53.04 - -hong-kong - - - - - -RM -f0557reute -u f BC-H.K.-REVIEWS-BANKING 03-19 0100 - -H.K. REVIEWS BANKING STRUCTURE, CAPITAL RATIO - HONG KONG, March 19 - The Banking Commission is reviewing -the present three-tier banking system and its newly established -capital adequacy ratio, banking commissioner Robert Fell said. - He told a news conference his office has had talks with the -Bank of England and the U.S. Federal Reserve Board on -risk-based capital ratios, following an agreement on such -standards between the two central banks early this year. - The Bank of England and the Fed are trying to persuade the -Bank of Japan and European central banks to accept their -standards. - "We welcome international standards," Fell said. "It means a -level playing field for all." - Under a new banking rule that came into effect last year, -banks in Hong Kong are given a two-year grace period to meet a -five pct capital adequacy requirement. - "The difference between us (Hong Kong and the U.K.) is -really not that great," he said. - Fell said the majority of banks are comfortable with the -required capital ratio, though some are under-capitalised. - Some banks, mostly Japanese, want a lower capital ratio -because of the special nature of their business, mainly -offshore banking operations. These institutions have proposed -the creation of a limited service bank category. - Financial institutions in Hong Kong are now classified into -three types -- banks, registered and licensed deposit-taking -companies. - Fell said the Commission is reviewing the three-tier -structure in light of the possible changes in capital ratio and -the growing trend towards securitisation of debt. - Fell said the Commission is also studying a set of -guidelines on loan loss provisions with the help of the Society -of Accountants. - Other planned guidelines relate to securitisation of debt -and business that banks and deposit taking companies can -conduct. - REUTER - - - -19-MAR-1987 08:01:10.70 - -ukaustria - - - - - -RM -f0571reute -u f BC-AUSTRIA-INCREASES-BON 03-19 0059 - -AUSTRIA INCREASES BOND TO 75 MLN AUSTRALIAN DLRS - LONDON, March 19 - The Australian dollar eurobond launched -yesterday for the Republic of Austria has been increased to 75 -mln dlrs from the original 50 mln, Credit Suisse First Boston -Ltd said as lead manager. - The five year transaction has a 14-1/4 pct coupon and was -priced at 101-3/4 pct. - REUTER - - - -19-MAR-1987 08:02:36.22 - -uk - - - - - -RM -f0577reute -u f BC-U.K.-BUILDING-SOCIETY 03-19 0078 - -U.K. BUILDING SOCIETY TAPS EUROSTERLING MARKET - LONDON, March 19 - Cheltenham and Gloucester Building -Society is issuing a 50 mln stg eurobond due April 22, 1992, -paying 9-1/4 pct and priced at 101-1/4 pct, lead manager Union -Bank of Switzerland (Securities) Ltd said. - The bond will be available in denominations of 1,000 stg -and will be listed in Luxembourg. - Fees comprise 1-1/4 pct selling concession and 5/8 pct -management and underwriting combined. - REUTER - - - -19-MAR-1987 08:04:29.56 -money-fxincomemoney-supply -usa - - - - - -A -f0587reute -u f BC--U.S.-CREDIT-MARKET-O 03-19 0111 - -U.S. CREDIT MARKET OUTLOOK - SPENDING, M-1 - NEW YORK, March 19 - Brisk increases in personal income and -consumption are to appear in February data released today, but -the bond market's recent sluggishness suggests there will be no -major price reaction unless the rises are much larger than -expected, economists said. - Personal income is forecast to rise by 0.6 to 0.8 pct, -compared with no change in January, while consumption -expenditures are projected to increase 1.4 to 1.6 pct, -reversing most of the two pct drop recorded in January. - M-1 money supply data for the March 9 week will also be -released. An increase of some 2.3 billion dlrs is expected. - Peter Greenbaum of Smith Barney, Harris Upham and Co Inc -expects a one pct rise in income, led by a strong gain in wage -and salary disbursements in February. - Nonfarm payrolls expanded by 337,000 jobs in February, the -average workweek lengthened by 0.6 pct and hourly wages rose by -four cts, he noted in a report. Vigorous spending on durable -goods last month, especially cars, foreshadow a rise of at -least 1.5 pct in consumption, he added. - The prospect of bearish data did not trouble the bond -market much yesterday, with the 30-year Treasury bond slipping -just 7/32 to 99-28/32 for a yield of 7.51 pct. - Analysts said the market is still trapped in a narrow -range, desperately seeking direction. - "Seasonally adjusted, it's already December in the bond -market," quipped Robert Brusca of Nikko Securities Co -International Inc. - Paul Boltz of T. Rowe Price Associates Inc said the -steadiness of long bond yields around 7.5 pct, despite some -signs of a stronger economy, probably reflects expectations -that inflation will remain subdued. - But he warned that this assumption might not be justified. - "It took the bond market a long while to see that inflation -was not returning to double digits, and now that it has learned -that lesson, it may be a little slow to see that a four to five -pct inflation is a real possibility ahead," Boltz said in a -report. - After trading late yesterday at 5-15/16 pct, Fed funds were -indicated by brokers to open comfortably at 5-15/16, six pct. - Reuter - - - -19-MAR-1987 08:07:29.71 -veg-oiloilseedsoybean -west-germanyusa - -ec - - - -C G -f0595reute -r f BC-U.S.-DELEGATION-HOPES 03-19 0115 - -U.S. DELEGATION HOPES FOR VEG OILS TAX DEFEAT - BONN, March 19 - American soybean producers and processors -are hoping the proposed EC tax on vegetable oils and fats will -not be imposed, but say the U.S. Is prepared to retaliate if it -is introduced. - Wayne Bennett, the American Soybean Association's first -vice president, told a news conference the U.S. Administration -would not hesitate to retaliate, but both producers and -processors were trying to solve the issue through negotiation. - U.S. Secretary of Agriculture Richard Lyng said in a letter -to EC officials that U.S. Retaliatory measures would cover more -than agricultural products if the tax was imposed, Bennett -said. - The ASA and National Soybean Processors Association (NSPA) -delegations will meet top West German government officials -today and tomorrow to lobby for support. - Bennett said West Germany, Britain, the Netherlands, -Denmark and Portugal oppose the tax, but Italy and Belgium seem -to have taken a hardline view on the issue. - "Europeans in favour of the tax say it would be to their -advantage economically, but that is not correct because we -would hit back," NSPA chairman Jack Reed said. - This step would be very expensive for all and no one would -emerge as a winner if the tax were introduced, he said. - Reed pointed out the U.S. Administration and the soybean -industry view the EC proposal as violating the General -Agreement on Tariffs and Trade. - The proposed tax also violates the zero duty bindings -agreed between the EC and U.S. In 1962, he said. - Under the zero duty bindings pact U.S. Soybeans and -products can be exported to the Community duty-free. - REUTER - - - -19-MAR-1987 08:08:32.15 - -hong-kong - - - - - -RM -f0600reute -u f BC-H.K.-BANKING-SECTOR-S 03-19 0100 - -H.K. BANKING SECTOR STABLE, OFFICIAL SAYS - HONG KONG, March 19 - The banking sector has regained its -stability after a protracted period of difficulty, banking -commissioner Robert Fell said. - "The banking climate has dramatically changed from a year -ago," he said at a news conference to present his annual report -on the banking sector for 1986. - "We've got confidence back. We've got profitability back." he -said. - A three-year shake out in the local banking sector forced -the government to take over three banks and arrange for the -acquisition of four others by the private sector. - Fell said that in many cases the bank problems stemmed from -management fraud which he linked partly to dramatic swings in -the stock and property markets in the early 1980s. - "We've got it out of the system now," he said. "Fraud is no -longer a systemic problem." - But he acknowledged there may still be problems. - "Deliberate fraud is difficult to detect especially where -collusion and senior management are involved," he said. -"Prudential supervision cannot give complete protection. The -(new banking) ordinance is designed to give a "measure" of -protection." - Fell said a number of banks want to set up operations in -Hong Kong, adding the government approved three banking -licences this week. He did not give details. - At the end of 1986, there were 151 licenced banks, 25 of -which were locally incorporated, compared with 143 a year ago. -Another 134 foreign banks had representative offices compared -with 131 a year ago. - There were 34 licensed deposit-taking companies (DTCs) and -254 registered DTCs at the end of 1986, compared with 35 and -278 respectively a year ago, he said. - Foreign banks seeking banking licences in Hong Kong must -have assets of 14 billion U.S. Dlrs. But Financial Secretary -Piers Jacobs said yesterday the asset criteria are flexible. - A high asset threshold has worked in the favour of banks -incorporated in countries with relatively large economies, he -noted. - "No licences in the last few years have been granted to -banks from any of the smaller countries in the Asia-Pacific -region," he said. - REUTER - - - -19-MAR-1987 08:13:16.72 -acq - - - - - - -F -f0621reute -f f BC-******AMERICAN-EXPRES 03-19 0014 - -******AMERICAN EXPRESS SAYS IT'S HOLDING TALKS ON SALE OF SHEARSON STAKE TO NIPPON LIFE -Blah blah blah. - - - - - -19-MAR-1987 08:13:36.39 - -usa - - - - - -F -f0623reute -r f AM-SAVINGS 03-19 0103 - -SAVINGS BANK CLOSED, 15TH TROUBLED U.S. S&L OF YEAR - WASHINGTON, March 18 - The Federal Home Loan Bank Board -(FHLBB) announced today the replacement of a closed Santa Ana, -Calif., savings bank in the 15th federal action assisting -troubled U.S. savings institutions this year. - The FHLBB said Perpetual Savings Bank in Santa Ana was put -into receivorship because it was insolvent and was replaced by -a new federally chartered Perpetual Savings Association. - It said the savings bank's insolvency "was a direct result -of losses on speculative investments in real estate which were -not supported by appraisals." - The FHLBB said it appointed Great American First Savings -Bank <GTA> of San Diego to manage Perpetual Savings. - It said as of January 31, Perpetual had assets of 61.9 mln -dlrs. - Reuter - - - -19-MAR-1987 08:15:06.00 -acq -usajapan - - - - - -F -f0627reute -u f BC-/AMERICAN-EXPRESS-<AX 03-19 0044 - -AMERICAN EXPRESS <AXP> MAY SELL SHEARSON STAKE - NEW YORK, March 19 - American Express Co said it and its -Shearson Lehman Brothers Inc subsidiary have been holding talks -on the possible equity investment in Shearson Lehman by <Nippon -Life Insurance Co> of Japan. - The company said, "The discussions have led to a general -understanding by which Nippon Life would purchase a 13 pct -equity investment in Shearson Lehman for approximately 530 mln -dlrs and American Express, Shearson Lehman and Nippon Life -would explore mutually advantageous, nonexclusive business and -investment opportunities." - The company said a definitive agreement on the matter is -subject to a number of conditions, including approval of the -American Express board and the Japanese Ministry of Finance. - The company said its board is scheduled to meet March 27 -for its regular monthly sessions. - American Express said it is continuing to evaluate various -courses of action of strategic importance to Shearson Lehman in -addition to the possible investment by Nippon Life. - It said the options range from expanding Shearson's -capacity to meet international competition, to broadening -further its access to capital. - The company also said, "All the courses of action under -study reflect the continuing integral role of Shearson Lehman -in American Express' worldwide financial services strategy." - Reuter - - - -19-MAR-1987 08:15:21.69 - -usa - - - - - -F -f0629reute -r f BC-XEROX-<XRX>-TO-STOP-S 03-19 0092 - -XEROX <XRX> TO STOP SELLING PC'S BY THEMSELVES - NEW YORK, March 19 - Xerox Corp has decided to stop selling -personal computers as standalone products, a company spokesman -said. - The spokesman said "As a first priority, we're selling PC's -as part of preconfigured systems, mostly desktop publishing -systems, and not by themselves anymore." - He said Xerox does not expect to take any material charge -from changing its marketing of personal computers. He said for -the past five years, Xerox has sold most of its PC's as -components of larger systems. - Another Xerox spokesman said the company actually stopped -selling personal computers alone on February 16 but never -announced the move. - Reuter - - - -19-MAR-1987 08:16:10.53 -money-fxrand -south-africa - - - - - -RM -f0630reute -r f BC-S.AFRICA'S-FINANCIAL 03-19 0093 - -S.AFRICA'S FINANCIAL RAND SEEN HEADED HIGHER - JOHANNESBURG, March 19 - The financial rand, widely viewed -as a direct reflection of foreign investor confidence in South -Africa, appears headed above 30 U.S. Cents, dealers and bank -economists said. - The currency has risen about 25 pct in the past three -months to its current rate of 29.50 cents, due partly to signs -of a possible power shift with the appearance of a number of -independent candidates in the whites-only election on May 6, -they added. - It has risen about two cents this week alone. - "Another factor is that banks in London, where the main -market is based, are going long in the currency because of a -general feeling that it will rise in the future," one economist -said. - Dealers described 30 cents as a psychological barrier that -was expected to be broken soon after a brief consolidation -phase from recent gains. - After reaching 30 cents, "There is a chance of appreciation -to 32 cents in the next several weeks," one dealer said. - There was a widespread feeling that both the commercial -rand, holding stable at 48 cents, and the financial rand were -staying firm, banking sources said. - A Barclays National Bank executive who asked not to be -identified said: "The rise of the independents appears to be -indicative of a potential shift of power in the National Party -and has created a favourable sentiment overseas." - One dealer said growing business and investor interest from -West Germany and Switzerland were behind the financial rand's -rise. - Economists said foreigners also were being attracted by -South Africa's long-term government bonds and "semi-gilts" or -securities in partly government-owned firms, many with yields -as high as 30 pct. They could be purchased with financial rands -with interest paid in commercial rands. - "This has had a definite influence on the financial form of -the rand," a dealer said, adding that at present demand is -slightly in excess of supply. - The financial rand was reintroduced in September 1985 to -help end capital flight from South Africa during a period of -severe political unrest in the country. - REUTER - - - -19-MAR-1987 08:22:06.66 - -usa - - - - - -A -f0648reute -r f BC-EX-REAGAN-AIDE-DEAVER 03-19 0113 - -EX-REAGAN AIDE DEAVER INDICTED ON PERJURY CHARGES - WASHINGTON, March 19 - Former White House aide Michael -Deaver, a long-time confidant of President Reagan, has been -indicted on charges of lying about his contacts as a Washington -lobbyist with top U.S. Government officials. - The five-count perjury indictment charged that Deaver lied -in sworn testimony to Congress and before the grand jury -investigating his business affairs. - Deaver, who resigned as deputy White House chief of staff -in 1985 to open a lobbying firm, faces a maximum penalty of 25 -years in prison if convicted. Immediately after the indictment -was announced Reagan issued a statement wishing Deaver well. - Reuter - - - -19-MAR-1987 08:22:21.02 -acq -usa - - - - - -F -f0649reute -d f BC-<FI-TEK-CORP>-TO-MAKE 03-19 0094 - -<FI-TEK CORP> TO MAKE ACQUISITION - DENVER, March 19 - Fi-Tek Corp said it has signed a letter -of intent to acquire <Voice Systems and Services Inc> for an -undisclosed amount of stock. - It said on completion of the acquisition it would change -its name to Voice Systems and Services Inc. It said VBoice -Systems has received a 3,600,000 dlr contract to provide FLP -Communications of Dallas with voicemail systems through service -bureaus located throughout the U.S. and has also contracted to -provide voicemail systems and administration to M and S -Communications. - Reuter - - - -19-MAR-1987 08:22:28.01 -acq -usa - - - - - -F -f0650reute -r f BC-FIRST-WISCONSIN-<FWB> 03-19 0062 - -FIRST WISCONSIN <FWB> TO MAKE ACQUISITION - MILWAUKEE, March 19 - First Wisconsin Corp said it has -agreed to acquire North Shore Bancorp Inc of Northbrook, Ill., -for 6,160,000 dlrs in cash, or slightly more than twice book -value, subject to approval by North Shore shareholders and -regulatory authorities. - The company said completion is expected in the third -quarter. - Reuter - - - -19-MAR-1987 08:26:32.47 -bop -italy - - - - - -RM -f0656reute -b f BC-ITALY'S-FEBRUARY-PAYM 03-19 0085 - -ITALY'S FEBRUARY PAYMENTS BALANCE IN SURPLUS - ROME, March 19 - Italy's overall balance of payments showed -a surplus of 1,461 billion lire in February 1987 compared with -a deficit of 1,145 billion in January, provisional Bank of -Italy figures show. - The February surplus compared with a deficit of 1,578 -billion lire in the same month for 1986. - For the first two months of 1987, the balance of payments -showed a surplus of 302 billion lire against a deficit of 4,622 -billion in the same 1986 period. - The Bank of Italy said the cumulative balance for the first -two months of 1987 does not match the total calculated on the -individual monthly figures because of the provisional nature of -certain data. - REUTER - - - -19-MAR-1987 08:26:43.13 -earn -usa - - - - - -F -f0658reute -d f BC-BELVEDERE-CORP-<BLV> 03-19 0073 - -BELVEDERE CORP <BLV> 4TH QTR LOSS - NEW YORK, March 19 - - Oper shr loss 21 cts vs loss 95 cts - Oper net loss 666,000 vs loss 2,184,000 - Avg shrs 3,181,805 vs 2,310,200 - Year - Oper shr loss 30 cts vs loss 23 cts - Oper net loss 823,000 vs loss 606,000 - Avg shrs 2,757,040 vs 2,614,225 - NOTE: Net excludes realized investment gains of 666,000 -dlrs vs 289,000 dlrs in quarter and 2,274,000 dlrs vs 1,468,000 -dlrs in year. - Reuter - - - -19-MAR-1987 08:27:00.64 -reserves -italy - - - - - -RM -f0659reute -b f BC-ITALIAN-NET-RESERVES 03-19 0081 - -ITALIAN NET RESERVES RISE IN FEBRUARY - ROME, March 19 - Italy's net official reserves rose to -66,172 billion lire in February 1987 from a previously reported -62,174 billion in January, the Bank of Italy said. - Gold holdings at end-February totalled 35,203 billion lire, -unchanged on January. - Convertible currencies totalled 18,467 billion lire, up -from 14,899 billion in January, while European Currency Unit -(ECU) holdings were 10,156 billion lire against 10,133 billion. - REUTER - - - -19-MAR-1987 08:31:00.91 - -usa - - - - - -F -f0665reute -r f BC-SJNB-<SJNB>-SAYS-CHIE 03-19 0071 - -SJNB <SJNB> SAYS CHIEF EXECUTIVE RESIGNS - SAN JOSE, Calif., March 19 - SJNB Financial Corp said -Douglas McLendon has resigned as president and chief executive -officer of the holding company and its San Jose National Bank -subsidiary and as a director of its Tri-Valley National Bank -subsidiary to pursue other interests. - It said vice chairman William Pfeifle, 68, will act as -interim president and chjief executive officer. - Reuter - - - -19-MAR-1987 08:33:10.94 - -west-germany - - - - - -RM -f0671reute -r f BC-GERMAN-INVESTORS-SLOW 03-19 0109 - -GERMAN INVESTORS SLOW TO ACCEPT BOND INNOVATIONS - By Franz-Josef Ebel, Reuters - WEST BERLIN, March 19 - The liberalization of West German -capital markets in May 1985 led to a flood of financial -innovations but the lack of a secondary market for these has -diminished their acceptance, Deutsche Girozentrale - Deutsche -Kommunalbank management board member Wiegand Hennicke said. - While innovations may be intellectualy stimulating, they -lack transparency, he told an investors' forum in West Berlin. - "Properly functioning markets require standardized products. -This (condition) has not been met by some of the innovations," -Hennicke said. - The volume of zero coupon bonds and floating rate notes, -the most widely used financial innovations in Germany, stands -at four billion and 16 billion marks, respectively, a tiny -proportion of the 1,000 billion marks of bonds in circulation. - Even for zero-coupon bonds and floating rate notes, a -secondary market had not developed, Hennicke said. One -important reason for this was the bourse turnover tax, which -was reducing the rate of return to the investors. - West German Finance Minister Gerhard Stoltenberg said this -week he believed the tax could still be removed, even if its -abolition was not decided during recent coalition discussions. - Karl-Herbert Schneider-Gaedicke, deputy management board -chairman of DG Bank Deutsche Genossenschaftsbank, said German -domestic and institutional investors had also shown -reservations about investing in participation shares. - One of the reasons was the widely varying terms and -conditions of participation shares in West Germany. "The -investor has to scrutinize (participation shares) carefully, -before making an investment decision," Schneider-Gaedicke said. - He added the attractiveness of participation shares could -be increased by limiting the combination possibilities of terms -and conditions and increasing safeguards for investors. - He also urged publicizing the comparative advantage of -participation shares over ordinary shares for foreigners. - Foreigners do not receive the corporation tax bonus granted -to domestic investors for share dividends. - Karl Thomas, head of the Bundesbank's credit department, -said the domestic investor had missed earnings opportunities -over the last four years by failing to invest in German bonds. - Domestic investors did not believe interest rates would -decline and stay at low levels for such a long time, because -expectations were determined by sharp interest rate -fluctuations at the start of the decade. - The Bundesbank has a natural interest in seeing domestic -savings channelled into bonds and shares, Thomas said. - A shift of savings into long-term assets would dampen -monetary expansion and foster a stable rise of the money -supply, he said. - REUTER - - - -19-MAR-1987 08:34:53.72 -earn - - - - - - -F -f0681reute -f f BC-******CARTER-HAWLEY-H 03-19 0013 - -******CARTER HAWLEY HALE STORES INC 4TH QTR SHR LOSS 1.58 DLRS VS PROFIT 58 CTS -Blah blah blah. - - - - - -19-MAR-1987 08:40:55.05 - -usa - - -cbt - - -C G -f0698reute -u f BC-CBT-HEAD-CONFIDENT-OF 03-19 0142 - -CBT HEAD CONFIDENT OF SEPARATE CBT, MCE LIMITS - BOCA RATON, Fla., March 19 - Chicago Board of Trade, CBT, -President Thomas Donovan said he was confident the Commodity -Futures Trading Commission, CFTC, would not force the CBT and -the MidAmerica Commodity Exchange, MCE, to merge speculative -position limits on futures contracts traded on the two -exchanges. - Last month CFTC proposed combining CBT and MCE contracts on -corn, wheat, soybeans, soybean meal and oats for the purposes -of applying speculative position limits. - Donovan told Reuters he had spoken to CFTC officials about -the matter and believed they would modify the proposal. - CBT officials have complained the CFTC was reneging on a -commitment made when the two exchanges formed an affiliation, -and proposing to decrease spot month limits on the MCE contrary -to congressional intent. - Reuter - - - -19-MAR-1987 08:45:33.50 - -usa - - -cbt - - -C -f0705reute -u f BC-CBT-LEADERS-PLAN-TRIP 03-19 0125 - -CBT LEADERS PLAN APRIL TRIP TO FAR EAST - BOCA RATON, Fla., March 19 - The two top officials of the -Chicago Board of Trade, CBT, are planning to visit three -countries in the Far East next month to drum up support for the -exchange's proposed night trading session, CBT President Thomas -Donovan told Reuters. - Donovan said he and CBT Chairman Karsten Mahlmann will -leave April 3 and spend two weeks in Hong Kong, Tokyo and -Sydney discussing the night trading session with brokerage -firms, regulators and exchanges. - CBT hopes to launch the first U.S. night trading session at -the end of April, offering Treasury-bond and T-note futures and -options on the two futures contracts between 1700 and 2100 hrs -central U.S. time (2300 to 0300 hrs GMT). - Reuter - - - -19-MAR-1987 08:49:57.02 - -switzerland - - - - - -F -f0709reute -u f BC-SWISSAIR-PLANE-ORDER 03-19 0112 - -SWISSAIR PLANE ORDER FOR 1.2 BILLION SWISS FRANCS - ZURICH, March 19 - Swissair <SWSZ.Z> said that the order -for McDonnell Douglas Corp <MD> MD-11 long haul jets confirmed -this morning was worth a total 1.2 billion Swiss francs. - President Robert Staubli told a news conference it had not -yet been decided whether the planes would have General Electric -Co <GE.N>, Pratt and Whitney <UTX> or Rolls Royce engines. - The airline said it chose the U.S. Plane rather than the -rival A-340 of the European Airbus consortium because it met -better the Swissair requirements and would be able to enter -service in 1990 giving a smooth transition from the DC-10s it -replaces. - Staubli said Swissair planned to have replaced its whole -fleet of 11 DC10s by 1992 at the latest, entailing the order of -five more long-haul planes in addition to the six announced -today. He said it would decide on the basis of the development -of traffic whether these five would be MD-11s or Boeing 747s. - However, Staubli ruled out the possibility that Swissair -might eventually choose A-340s. "We cannot afford to operate -three different types of aircraft," he said. - Swissair also had no short term plans to exercise its -option to buy Airbus A-310s, of which it already operates nine, -officials said. But it would still hold the options open. - Staubli declined to say how much it paid for each of the -MD-11s. The total 1.2 billion franc figure was not only for the -planes but also for spare parts and other related expenditure. - Company officials said that Swissair intended to cover -around 75 pct of the costs of its entire DC-10 replacement -programme with internally generated funds. It hopes to raise -the remaining 25 pct on the Swiss and other capital markets -through issuing straight or equity related bonds and/or through -a capital increase. - The first such bond issue would likely come this year, they -predicted. - REUTER - - - -19-MAR-1987 08:56:16.58 - -uk - - - - - -A -f0726reute -d f BC-BP-SALE-WAS-IN-UK-198 03-19 0115 - -BP SALE WAS IN UK 1987/88 BUDGET MATHS - TREASURY - LONDON, March 19 - The U.K. Treasury said its 1987/88 -budget arithmetic which was unveiled on Tuesday "took full -account of likely proceeds" from the sale of the government's -remaining 31.7 pct stake in British Petroleum Co PLC (BP.L). - A statement issued by the Treasury said "the BP announcement -therefore makes no difference to our estimate of privatisation -proceeds in 1987/88, or to subsequent years, which remains 5.0 -billion stg a year." - "It makes no difference to the PSBR (Public Sector Borrowing -Requirement) which the Chancellor set in the budget," it said. - "It has nothing to do with the future scope for tax cuts." - The Treasury's move was prompted by press speculation, -officials said, which followed last night's surprise -announcement by the government. It currently holds about 578.5 -mln shares in BP. - The Treasury statement said that the sell-off "is simply a -part of the government's continuing privatisation programme, -the overall size of which was announced in the Autumn -(economic) Statement" (last November). - It said the BP proceeds "will be received in installments, -of which the first will be in 1987/88." - News of the privatisation weighed down both BP's share -price in London and the equity market overall, market sources -said. - The prospect of so much more BP paper in circulation had -cut BP shares at 1340 GMT to 824 pence from yesterday's London -close of 828 pence. The company's shares had been down as low -as 802 pence before rebounding, stock market sources said. - Worries over the ability of the London stock market to -digest the BP and other privatisation issues sent the Financial -Times/Stock Exchange 100 Share Index down 9.1 points by 1340 -GMT to 1997.5 from last night's close. At one point the index -was as low as 1989.1, the sources said. - REUTER - - - -19-MAR-1987 08:59:17.90 -acq - - - - - - -F -f0733reute -b f BC-******WASTE-MANAGEMEN 03-19 0015 - -******WASTE MANAGEMENT SAYS IT IS PREPARED TO RAISE ITS BID FOR CHEMLAWN TO 33 DLRS A SHARE -Blah blah blah. - - - - - -19-MAR-1987 09:00:53.32 -earn -usa - - - - - -F -f0736reute -u f BC-TRANSAMERICA-<TA>-TO 03-19 0090 - -TRANSAMERICA <TA> TO HAVE GAIN ON UNIT SALE - LOS ANGELES, MArch 19 - Transamerica Corp said it expects -to realize a gain of about 75 mln dlrs on the -previously-announced sale of the group life and health -operations of its Transamerican Occidental Life Insurance Co -subsidiary to Provident Life and Accident Co <PACC>. - But it said its Transamerica Life Cos unit plans to change -to a more conservative method of amortizing deferred policy -acquisition costs, resulting in a one-time charge that will -offset most of the gain from the sale. - Transamerica said it has now signed a definitive agreement -for the sale, which will be structured as a reinsurance -transaction involving about 400 mln dlrs of reserve -liabilities. - It said the 75 mln dlr gain from the sale and about 125 mln -dlrs of statutory surplus that previously supported operations -of the group being sold will be used to support Transamerica -Life Cos' efforts to accelerate the growth of its remaining -businesses. It said closing is expected by May One, subject to -regulatory approvals. - Reuter - - - -19-MAR-1987 09:01:39.59 - -usa - - - - - -F -f0738reute -u f BC-COCA-COLA-<KO>-IN-FIL 03-19 0046 - -COCA-COLA <KO> IN FILM COLORING VENTURE - MARINA DEL RAY, Calif., March 19 - Color Systems Technology -Inc <CLST> said it has completed formation of a joint venture -called Screen Gems Classicolor with Coca-Cola Co to color and -distribute feature films and television programs. - Color Systems said it and Coca-Cola will share profits from -worldwide television, basic cable, pay television and home -video distribution, and Color Systems will also be paid by the -venture to convert to color the black and white material -involved. - The company said Coca-Cola has initially contributed a -number of its Screen Gems television series and Color Systems -its library of more than 100 feature films and television -series. It said the venture expects to acquire more black and -white material for color conversion and will start generating -revenues by distributing the combined library initially as-is. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-008.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-008.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-008.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-008.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2019 +0,0 @@ - - -20-MAR-1987 16:54:10.55 -earn -usa - - - - - -F -f2479reute -r f BC-GANTOS-INC-<GTOS>-4TH 03-20 0056 - -GANTOS INC <GTOS> 4TH QTR JAN 31 NET - GRAND RAPIDS, MICH., March 20 - - Shr 43 cts vs 37 cts - Net 2,276,000 vs 1,674,000 - Revs 32.6 mln vs 24.4 mln - Year - Shr 90 cts vs 69 cts - Net 4,508,000 vs 3,096,000 - Revs 101.0 mln vs 76.9 mln - Avg shrs 5,029,000 vs 4,464,000 - NOTE: 1986 fiscal year ended Feb 1, 1986 - Reuter - - - -20-MAR-1987 16:57:13.73 -acq - - - - - - -F -f2484reute -f f BC-******CHEMLAWN-CORP, 03-20 0010 - -******CHEMLAWN CORP, ECHOLAB INC SIGN DEFINITIVE MERGER AGREEMENT -Blah blah blah. - - - - - -20-MAR-1987 16:57:26.14 -grainwheatoilseedsoybeanveg-oil -usa - - - - - -C G -f2485reute -r f BC-LDC-FOOD-AID-NEEDS-DE 03-20 0124 - -LDC FOOD AID NEEDS DECLINE IN 1986/87 - USDA - WASHINGTON, March 20 - Total food aid needs in 69 of the -least developed countries declined in 1986/87, as requirments -fell in many countries in Africa, the Middle East and Asia, the -U.S. Agriculture Department said. - In a summary of its World Agriculture Report, the -department said grain production in sub-Saharan Africa was a -record high in 1986, with gains in almost every country. - However, food needs in Central America rose, worsened by -drought-reduced crops and civil strife. - Record wheat production in 1986/87 is pushing global wheat -consumption for food to a new high, and higher yielding -varieties have been particularly effective where spring wheat -is a common crop, it said. - However, may developing countries in tropical climates, -such as Sub-Saharan Africa, Southeast Asia, and Central -America, are not well adapted for wheat production, and -improved varieties are not the answer to rising food needs, the -department said. - World per capita consumption of vegetable oil will rise in -1986/87 for the third straight year. - Soybean oil constitutes almost 30 pct of vegetable oil -consumption, while palm oil is the most traded, the department -said. - Reuter - - - -20-MAR-1987 17:00:29.12 -sugargraincorn -usa - - - - - -C G T -f2491reute -b f BC-/U.S.-SUGAR-PROGRAM-C 03-20 0130 - -U.S. SUGAR PROGRAM CUT SENT TO CONGRESS BY USDA - WASHINGTON, MARCH 20 - The U.S. Agriculture Department -formally transmitted to Congress a long-awaited proposal to -drastically slash the sugar loan rate and compensate growers -for the cut with targeted income payments. - In a letter to the Congressional leadership accompanying -the "Sugar Program Improvements Act of 1987", Peter Myers, -Deputy Agriculture Secretary, said the Reagan administration -wants the sugar loan rate cut to 12 cents per pound beginning -with the 1987 crop, down from 18 cts now. - Sugarcane and beet growers would be compensated by the -government for the price support cut with targeted income -payments over the four years 1988 to 1991. The payments would -cost an estimated 1.1 billion dlrs, Myers said. - The administration sugar proposal is expected to be -introduced in the House of Representatives next week by Rep. -John Porter, R-Ill. - Congressional sources said the program cut is so drastic it -is unlikely to be adopted in either the House or Senate because -politically-influential sugar and corn growers -and high fructose corn syrup producers will strongly resist. - The direct payment plan outlined by the administration -targets subsidies to small cane and beet growers and gradually -lowers payments over four years. It also excludes from payment -any output exceeding 20,000 short tons raw sugar per grower. - For example, on the first 350 tons of production, a grower -would receive 6 cts per lb in fiscal 1988, 4.5 cts in 1989, 3 -cts in 1990 and 1.5 cts in 1991. - The income payments would be based on the amount of -commercially recoverable sugar produced by a farmer in the 1985 -or 1986 crop years, whichever is less, USDA said. - Myers said the administration is proposing drastic changes -in the sugar program because the current high price support is -causing adverse trends in the sugar industry. - He said the current program has artificially stimulated -domestic sugar and corn sweetener production which has allowed -corn sweeteners to make market inroads. - U.S. sugar consumption has declined which has resulted in a -"progressive contraction" of the sugar import quota to only one -mln short tons this year, he said. This has hurt cane sugar -refiners who rely on imported sugar processing. - Furthermore, USDA said the current sugar program gives -overseas manufacturers of sugar-containing products a -competitive advantage. The result has been higher imports of -sugar-containing products and a flight of U.S. processing -facilities overseas to take advantage of cheaper sugar. - USDA also said the current program imposes a heavy cost on -U.S. consumers and industrial users. In fiscal 1987, USDA said -consumers are paying nearly two billion dlrs more than -necessary for sugar. - "Enactment of this bill will reduce the price gap between -sweeteners and help to correct or stabilize the many adverse -impacts and trends which the sugar industry is currently -facing," Myers said. - The following table lists the rate of payments, in cts per -lb, to growers and the quantity covered, in short tons -recoverable raw sugar, under the administration's proposal to -compensate sugar growers with targeted payments. - QUANTITY 1988 1989 1990 1991 -First 350 tons 6.000 4.500 3.000 1.500 -Over 350 to 700 5.750 4.313 2.875 1.438 -Over 700 to 1,000 5.500 4.125 2.750 1.375 -Over 1,000 to 1,500 5.000 3.750 2.500 1.250 -Over 1,500 to 3,000 4.500 3.375 2.250 1.125 -Over 3,000 to 6,000 3.500 2.625 1.750 0.875 -Over 6,000 to 10,000 2.250 1.688 1.125 0.563 -Over 10,000 to 20,000 0.500 0.375 0.250 0.125 -Over 20,000 tons nil nil nil nil - Reuter - - - -20-MAR-1987 17:00:52.39 -earn -canada - - - - - -E -f2494reute -d f BC-oink 03-20 0042 - -<OE INC> 4TH QTR NET - MONTREAL, March 20 - - Shr 24 cts vs 26 cts - Net 1.5 mln vs 1.3 mln - Revs 40.5 mln vs 33.5 mln - Year - Shr 80 cts vs 82 cts - Net 4.9 mln vs 4.1 mln - Revs 143.0 mln vs 121.1 mln - Avg shrs 6.1 mln vs 5.0 mln - Reuter - - - -20-MAR-1987 17:01:28.16 - -usa - - - - - -F -f2497reute -r f BC-TEXAS-INSTRUMENTS-<TX 03-20 0106 - -TEXAS INSTRUMENTS <TXN> BEGINS BUILDING PLANT - DALLAS, March 20 - Texas Instruments Inc said construction -will begin in April on a new plant near Denton, Texas, on 193 -acres owned by the company. - It said the plant will initially employ between 1,000 and -1,500 people, and will be used by its Defense Systems and -Electronics Group for producing electronic equipemnt. The plant -is expected to be operational in late 1988. - Separately, the company said it leased about 185,000 square -feet of a complex in Texas for its Defense Systems group. It -plans to transfer about 700 employees to work at the site by -the third quarter of 1987. - Reuter - - - -20-MAR-1987 17:06:31.28 -earn -usa - - - - - -F -f2510reute -w f BC-VMS-MORTGAGE-LP-<VMLP 03-20 0037 - -VMS MORTGAGE LP <VMLPZ> MONTHLY CASH PAYOUT - CHICAGO, March 20 - VMS Mortgage L.P. said it declared a -regular monthly cash distribution of nine cts a depositary unit -for the month of March, payable May 14, record April One. - Reuter - - - -20-MAR-1987 17:06:47.92 -livestockpork-belly -usa - - -cme - - -C L -f2512reute -u f BC-LITTLE-EFFECT-SEEN-FR 03-20 0117 - -LITTLE EFFECT SEEN FROM COLD STORAGE REPORT - CHICAGO, March 20 - The USDA monthly cold storage report -for meats is expected to have little, if any, effect on -livestock and meat futures at the Chicago Mercantile Exchange -Monday and daily fundamentals will likely provide the bulk of -direction, livestock analysts said. - The increase of 66.4 mln lbs in total poultry offsets the -22.6 mln lbs decline in total red meats. Fundamentals may -provide most of the direction in futures on Monday, they said. - "I think the market is going to be looking at some other -things and accentuate whatever the action of cash markets might -be early next week," Jerry Gidel, livestock analyst for GH -Miller, said. - Shearson Lehman livestock analyst Chuck Levitt said futures -will be in the shadow of a little larger seasonal hog -marketings pace next week. Also, Easter ham business was -completed this week and there may be less aggressive interest -for pork in general next week. - "We needed some help from the cold storage report to avert -a possible setback next week in the pork complex," Levitt said. - Analysts agreed with CME floor traders and called the belly -figure neutral to slightly negative. Although belly stocks were -down 33 pct from last year, they exceeded the average -expectation and actually showed a lighter than expected decline -from last month due to an adjustment to last month's holdings, -they said. - However, analysts noted that the amount of bellies put in -storage has been light since the beginning of March and this is -a potentially bullish situation. - Glenn Grimes, agronomist at the University of Missouri, -said, "I would not look for (belly) storage during the next -month or two to be heavier than a year ago - I think it will be -less." - Reuter - - - -20-MAR-1987 17:07:44.99 -shipgrain -canada - - - - - -E F -f2515reute -h f BC-SEAWAY (PIX-EXPECTED) 03-20 0130 - -STRIKE THREAT, LOWER TRAFFIC MAR SEAWAY OPENING - By Jane Arraf, Reuters - MONTREAL, March 20, Reuter - The St. Lawrence Seaway, set -to reopen March 31 after the winter, faces another tough year -because of depressed traffic levels and the possibility of the -first strike in 20 years on the Great Lakes, seaway officials -said. - Depressed grain exports, rising costs, and competing modes -of transportation are all expected to result in only a marginal -increase over last year's traffic levels -- and revenues -- on -the 2,300 mile waterway, officials said. - In 1986, a season that ran from April 3 to December 27, the -seaway moved 37.6 mln metric tons of freight between Montreal -and Lake Ontario and 41.6 mln tons on the Welland Canal, -linking Lake Erie and Lake Ontario. - By comparison, in 1985 about 37 mln tons of cargo traveled -through the Montreal-Lake Ontario section and 42 mln through -the eight-lock canal. - The waterway is expected to lose 9-10 mln Canadian dlrs -this year, about the same as the estimated deficit for fiscal -1986-87 ending March 31, said William Blair, an executive -member of Canada's St Lawrence Seaway Authority. - The seaway moves about one-half of Canada's exported grain. -Those exports of the single most important commodity carried on -the waterway have been depressed by world surpluses. - The Seafarers' International Union, which represents about -2,300 workers on the Great Lakes and the ocean coasts, has said -it will likely go on strike this spring to protest employers' -demands for wage rollbacks and other concessions. - "It's 99.9 pct (certain)--I guarantee you a strike," Roman -Gralewicz, head of the Seafarers' Canadian branch, has said. - The Canadian government has called in a labor conciliator -to try to hammer out a contract agreement between the two -sides. The seaway authority said a walkout tying up ships on -the Great Lakes would badly hurt traffic. - "We haven't had a strike on the seaway for years...a -prolonged strike would have a disasterous effect," Seaway -Authority spokeswoman Gay Hemsley said. - "These are the heaviest contract talks in the history of the -St Lawrence Seaway," George Miller, vice-president of the -Canadian Lake Carriers Association, an association of major -Canadian shipping companies, said recently. - The workers' current contract expires May 31. The -association said it is asking for a five per cent cut in wages -for the next three years, reduced crew levels and the power to -restructure crew dispatching. - The association said its members recorded about a 6 mln dlrs -(U.S.) loss in each of 1985 and 1986 due to lower traffic and -freight rates and increasing competition. The seaway said 1985 -was its worst year in two decades. - Hemsley said the seaway authority plans to raise tolls on -the Welland Canal by eight pct this year, compared to last -year's 15 pct rise, while maintaining a freeze on tolls -throughout the rest of the waterway. - Canada is responsible for 13 of the seaway's 15 locks and -about 85 pct of its revenues and maintenance costs. - "We may see and hope for a steady upward climb...but we -won't see a major increase for a number of years," Hemsley said. - A Canada-U.S. delegation to promote the seaway to shippers -in Western Europe should result in some increased traffic this -season but the full benefits won't be felt for several years, -Blair said. - Reuter - - - -20-MAR-1987 17:07:50.76 -acq -usa - - - - - -F -f2516reute -u f BC-CHEMLAWN-<CHEM>,-ECOL 03-20 0065 - -CHEMLAWN <CHEM>, ECOLAB <ECON> IN MERGER PACT - COLUMBUS, Ohio, March 20 - Chemlawn Corp and Ecolab Inc -said they signed a definitive merger agreement under which -Ecolab will buy all outstanding Chemlawn common stock for 36.50 -dlrs a share in cash, for a total of about 370 mln dlrs. - Under terms of the agreement, Chemlawn said it rescinded -its previously announced rights dividend plan. - Chemlawn previously rejected a 27 dlr a share offer from -Waste Management Inc <WMX>. - Yesterday, the Oak Brook, Ill.-based waste disposal company -said it was prepared to offer 33 dlrs a share, or about 330 mln -dlrs, for Chemlawn, a lawn-care company. - Chemlawn had said last week that it was negotiating with -other possible suitors, which it did not identify. - A Chemlawn spokesman said further details on the merger -would be issued later. - Ecolab is a maker of commercial laundry detergent based in -St. Paul, Minn. For its first six months ended December 31, the -company earned 20.4 mln dlrs, or 76 cts a share, on sales of -421.8 mln dlrs. - Officials at Waste Management could not be reached for -immediate comment. - Reuter - - - -20-MAR-1987 17:10:14.07 -earn - - - - - - -F -f2524reute -b f BC-******LILCO-REVISES-1 03-20 0011 - -******LILCO REVISES 1986 NET TO INCLUDE 16 MLN DLR LOSS PROVISION -Blah blah blah. - - - - - -20-MAR-1987 17:12:06.51 -earn -usa - - - - - -F -f2527reute -h f BC-FALCON-CABLE-<FAL>-SE 03-20 0073 - -FALCON CABLE <FAL> SETS INITIAL DISTRIBUTION - PASADENA, Calif., March 20 - Falcon Cable Systems Co said -its set an initial quarterly cash distribution of 53.75 cts per -unit, payable May 15 to unitholders of record March 31. - The partnership made its initial public offering in -December, 1986. - Falcon said it expects to pay cash distributions to limited -partners at an annual rate of 2.15 dlrs per unit, through -December 31, 1989. - Reuter - - - -20-MAR-1987 17:12:35.20 - -usa - - - - - -F -f2530reute -u f BC-GENERAL-DYNAMICS-<GD> 03-20 0064 - -GENERAL DYNAMICS <GD> GETS 67.9 MLN DLR CONTRACT - WASHINGTON, March 20 - The Electric Boat Division of -General Dynamics Corp is being awarded a 67.9 mln dlr -modification to a Navy contract for architectural, engineering -and hardware development work for a submarine improvement -program, the Defense Department said. - It said the work is expected to be completed September 30, -1987. - Reuter - - - -20-MAR-1987 17:15:01.04 - -usa - - - - - -A RM -f2533reute -r f BC-SONAT-<SNT>-UNIT-FILE 03-20 0090 - -SONAT <SNT> UNIT FILES FOR DEBENTURE OFFERING - NEW YORK, March 20 - Southern Natural Gas Co, a unit of -Sonat Inc, said it filed with the Securities and Exchange -Commission a registration statement covering a 100 mln dlr -issue of debentures due 1999. - Proceeds will be used, together with funds from the -company's operations, to redeem Southern Natural's 15 pct -sinking fund debentures of 1991. - The company named Goldman, Sachs and Co, Lazard Freres and -Co and Merrill Lynch Capital Markets as managing underwriters -of the offering. - Reuter - - - -20-MAR-1987 17:16:21.60 -crude -usa - - - - - -Y -f2536reute -r f BC-BIDS-AWARDED-FOR-ELK 03-20 0104 - -BIDS AWARDED FOR ELK HILLS CRUDE OIL - LOS ANGELES, March 20 - The U.S. Department of Energy said -it has awarded bids for about 90,000 barrels per day, bpd, of -crude oil from the Elk Hills Naval Petroleum Reserve in -California. The contract period runs from April one through -July one, the DOE said. - Successful bidders, the amount of crude oil and the price -per bbl according to the DOE are as follows - - Texaco Inc's <TX> Texaco Trading and Transport 15,000 bpd -at 15.79 dlrs and 2,200 bpd at 15.19 dlrs, Beacon Oil Co 7,000 -bpd at 15.66 dlrs and 2,500 bpd at 16.04 dlrs, Golden West -Refining 8,110 bpd at 15.42 dlrs. - Successful bidders, the amount of oil and price per bbl, -according to the DOE continue as follows - - Chevron's <CHV> Chevron USA Inc 3,000 bpd at 14.51 dlrs and -4,000 bpd at 14.61 dlrs, Chevron International Oil Co 2,600 bpd -at 14.41 dlrs and 2,800 bpd at 14.51 dlrs, Newhall Refining Co -6,000 bpd at 15.82 dlrs, Caljet Inc 4,000 bpd at 15.32 dlrs, -Casey Co 4,000 bpd at 15.45 dlrs. - Also, Cryssen Refining Inc 4,000 bpd at 15.47 dlrs, -Edgington Oil Co 4,000 bpd at 15.54 dlrs, Sound Refining Inc -3,100 bpd at 15.51 dlrs, Atlantic Richfield Co <ARC> 3,000 bpd -at 15.75 dlrs. - Successful bidders, the amount of crude oil and the price -per bbl according to the DOE continue as follows - - Orkin Inc 2,679 bpd at 15.24 dlrs, Lunday-Thagard Co 2,511 -bpd at 15.27 dlrs, Golden Eagle Refining 2,500 bpd at 15.37 -dlrs, MacMillan Ring-Free Oil Co 1,000 bpd at 15.81 dlrs, 1,000 -bpd at 15.71 dlrs and 230 bpd at 16.02 dlrs, Mock Resources -2,000 bpd at 15.76 dlrs, Petro-Diamond 2,000 bpd at 15.46 dlrs. - Reuter - - - -20-MAR-1987 17:20:28.92 -earn -usa - - - - - -F -f2544reute -s f BC-MONTGOMERY-STREET-INC 03-20 0024 - -MONTGOMERY STREET INCOME <MTS> MONTHLY DIVIDEND - SAN FRANCISCO, March 20 - - Mthly div 15 cts vs 15 cts - Pay April 15 - Record April 1 - Reuter - - - -20-MAR-1987 17:20:54.85 -earn -canada - - - - - -E -f2545reute -r f BC-sullivan-mines-inc 03-20 0056 - -<SULLIVAN MINES INC> YEAR LOSS - MONTREAL, March 20 - - Oper shr loss 12 cts vs profit four cts - Oper loss 1,069,000 vs profit 339,000 - Revs 12.8 mln vs 10.9 mln - Note: 1986 shr and net exclude extraordinary gain of -382,000 dlrs or four cts share. 1985 shr and net exclude -extraordinary gain of 183,000 dlrs or two cts share - Reuter - - - -20-MAR-1987 17:21:38.85 - -usa - - - - - -F -f2547reute -u f BC-GRUMMAN-<GQ>-GETS-109 03-20 0051 - -GRUMMAN <GQ> GETS 109.1 MLN DLR NAVY CONTRACT - WASHINGTON, March 20 - Grumman Aerospace Corp is being -awarded a 109.1 mln dlr increment of funds to a Navy contract -for 12 EA-6B Prowler Electronic Warfare aircraft, the Defense -Department said. - It said the work is expected to be completed in July 1989. - Reuter - - - -20-MAR-1987 17:23:12.99 - -usa - - - - - -F -f2549reute -r f BC-MORTON-THIOKOL-<MTI> 03-20 0061 - -MORTON THIOKOL <MTI> GETS 61.4 MLN DLR CONTRACT - WASHINGTON, March 20 - Morton Thiokol Inc's Wasatch -Operations is being awarded a 61.4 mln dlr contract -modification finalizing a previously awarded contract for -missile rocket motors for Terrier, Tarter and Aegis ships, the -Defense Department said. - It said the work is expected to be completed in October -1987. - Reuter - - - -20-MAR-1987 17:26:53.43 -acq -usa - - - - - -F -f2560reute -u f BC-CYCLOPS 03-20 0106 - -INVESTMENT FIRM HAS 7.1 PCT OF CYCLOPS <CYL< - WASHINGTON, March 20 - Halcyon Investments, a New York risk -arbitrage and securities dealing partnership, told the -Securities and Exchange Commission it has acquired 288,000 -shares of Cyclops Corp, or 7.1 pct of the total outstanding. - Halcyon said it bought the stake for 26.1 mln dlrs as part -of its ordinary risk arbitrage and securities trading business. -Other than that, the firm said there was no specific purpose in -its purchases. - Halcyon said it might buy more stock or sell some or all of -its current stake. It said it bought the bulk of its stake -between Feb 6 and March 13. - Reuter - - - -20-MAR-1987 17:27:19.61 -acq -canada - - - - - -E A -f2561reute -d f BC-chrysler-credit-canad 03-20 0107 - -CHRYSLER'S <C> CREDIT CANADA PLACED ON CREDITWATCH - Montreal, March 20 - Canadian Bond Rating Service said it -placed Chrysler Credit Canada Ltd, a subsidiary of Chrysler -Corp <C>, on creditwatch until all financial details concerning -the proposed acquisition of American Motors Corp <AMO> are -finalized. - The creditwatch affects Chrysler Credit Canada's short term -notes, guaranteed notes, debentures and the recently completed -75 mln dlr 9.25 Eurobond issue due April 15, 1993. - Canadian Bond Rating Service said that, based on facts -currently available on the proposed transaction, it does not -anticipate the necessity of a downgrade. - Canadian Bond Rating Service said Chrysler Credit Canada -short term notes are now rated A-2 (high) and guaranteed notes -and debentures are rated B plus plus (high). - Reuter - - - -20-MAR-1987 17:27:55.93 -earn -usa - - - - - -F -f2565reute -u f BC-LILCO-<LIL>-REVISES-1 03-20 0089 - -LILCO <LIL> REVISES 1986 NET TO INCLUDE LOSS - HICKSVILLE, N.Y., March 20 - Long Island Lighting Co said -it revised its preliminary 1986 net income to include a 16 mln -dlrs after tax provision for its investment in the Jamesport -Nuclear units. - Due to the provision, it said its revised 1986 net income -was 316.7 mln dlrs or 2.13 dlrs per share after deducting for -preferred stock dividend requirements, which were not paid in -either 1986 or 1985. - It had earlier reported 1986 income of 332.7 mln dlrs or -2.28 dlrs per share. - LILCO also said its board authorized contracts for its -corporate officers calling for payment of one year's salary, -and continuation of insurance and retirement benefits if the -company changes hands and these officers lose their jobs. - LILCO said none of these contracts will result in -additional costs to its customers. - Lilco said the downward revision in its 1986 earnings is a -reserve established to reflect a settlement agreement with the -staff of New York State's Public Service Commission respecting -the utility's spending on a nuclear power station planned for, -but never built at, Jamestown, N.Y. - The company declined to detail the settlement, explaining -the settlement has not been approved by the commission. Lilco -was seeking to include costs totaling 118 mln dlrs for the -abandoned nuclear power plant project in its rate base, a -spokeswoman said. - Reuter - - - -20-MAR-1987 17:29:58.63 -acq -usa - - - - - -F -f2571reute -d f BC-ROGERS-<ROG>-ADOPTS-R 03-20 0104 - -ROGERS <ROG> ADOPTS RIGHTS PLAN - ROGERS, Conn., March 20 - Rogers Corp said its board -approved a shareholder rights plan designed to protect its -shareholders in the event of an attempted hostile takeover. - Rogers said the plan is not being adopted in response to -any specific takeover attempt. - Under the plan, shareholders may buy one share of common -stock at 65 dlrs for each share held. The rights will be -exercisable only if a person or group acquires 20 pct or more -of Rogers' shares or announces an offer for 30 pct or more. - The dividend distribution will be made March 30 to holders -or record on that date. - Reuter - - - -20-MAR-1987 17:32:18.21 - -usa - - -nyse - - -F -f2575reute -u f BC-WALL-STREET-SURVIVES 03-20 0102 - -WALL STREET SURVIVES TRIPLE EXPIRATIONS - By Cal Mankowski, Reuters - NEW YORK, March 20 - The four-times-a-year "triple -witching hour" did not jolt Wall Street as much as it has in -the past. - Market averages finished sharply higher as stock index -futures, index options and options on individual stocks expired -simultaenously. Some analysts warned part of the gain may be -retraced next week. But there were signs Wall Street is getting -used to the phenomeon which causes a huge burst of activity in -the final minutes. Officials of the New York Stock Exchange -said the day went smoothly and efficiently. - "This has been one of the few times that the consensus has -been right," said Jim Creber, trader at Miller, Tabak, Hirsch -and Co. - He expects a "follow-through" Monday and Tuesday to the -advance which lifted the Dow Jones Industrial Average 34 points -for the day and 75 points for the entire week. - Creber, whose firm was one of the first to get involved in -arbitrage activity involving index futures and options, said -the general trend of the market has been upward for months. -"Every time the market comes in, somebody comes along with more -money," he said. - He said investors adding to Individual Retirement Accounts -prior to a mid-April tax deadline and buying from Japanese -investors are apparently helping push stocks higher. - Ron Feinstein, an analyst with Dean Witter Reynolds Inc, -said reports of heavy Japanese buying, just prior to the end of -the fiscal year in Japan, fueled bullish sentiment. - He said investors who had long positions in stocks hedged -with short positions in index futures rolled the expiring March -futures over into June contracts. But he added different -players with other goals also were active and there was no -simple explanation of the market's gyrations. - For example, Feinstein noted the June contract for the June -Standard and Poor's 500 stock index future hit 300 about 15 -minutes prior to the close of NYSE trading. In 12 minutes, the -contracted dipped to 297.50. "That could have been a wave of -selling from institutional people making a roll," he said. - It was the first time a nearby contract of the S and P 500 -hit 300. The cash index closed at a record 298.17. "It looks -like the market is going to continue to go higher," he said. - "Triple expirations didn't really mean that much, it was a -strong day for stocks," said Steve Chronowitz of Smith Barney, -Harris Upham and Co. - Chronowitz said the stock market has been underpinned by -"good solid buying interest" which will cushion any pullback. - Other investors who were long futures and short stocks -bought stocks on the close today instead of rolling over, said -Mark Zurack of Goldman, Sachs and Co. He cautioned against -"over-dramatizing" the day's activity, which said was more a -reflection of fundamental strength in the markets. - Leigh Stevens of PaineWebber Group Inc said what he saw was -mostly covering of short positions in stocks as index options -and individual options expired. He said there could be a -decline early next week in the stock market. - "It looked like it worked well today," said Howard Kramer, -asssistant director of market regulation for the Securities and -Exchange Commission. But he said all of the data will have to -be analyzed next week. - He said there was relatively little commotion at the close, -with about 50 mln shares changing hands in the final minute -compared to 85 mln in the triple expirations three months -earlier. He noted the Dow industrials jumped about 12 points in -the closing minutes, a modest move for a 2333-point index. - Kramer pointed out an SEC-NYSE measure to curb volatility, -disclosure of "market-on-close" orders in 50 major stocks 30 -minutes prior to the end of trading, showed imbalances of -modest proportions. The disclosures are aimed at evening out -volatility by attracting orders on the opposite side of the -imbalance. - The data showed more buy orders than sell orders for 47 -stocks, a preponderance of sell orders for only one stock, and -no significant imbalance for two stocks. The NYSE had tightened -a rule governing what type of market on close orders can be -accepted in the final half hour. - Reuter - - - -20-MAR-1987 17:39:14.71 -earn -usa - - - - - -F -f2586reute -s f BC-EASTGROUP-PROPERTIES 03-20 0037 - -EASTGROUP PROPERTIES <EGP> DIVIDEND - JACKSON, MISS., May 20 - Qtly div 65 cts vs 65 cts prior - Payable APril 22 - REcord April 10 - NOTE:Company paid 30 cts special dividend along with prior -quarter's dividend - Reuter - - - - - -20-MAR-1987 17:40:10.54 -earn -usa - - - - - -F -f2588reute -r f BC-SUNBELT-NURSERY-GROUP 03-20 0050 - -SUNBELT NURSERY GROUP INC <SBN> 2ND QTR FEB 28 - FORT WORTH, Texas, March 20 - - Shr loss 40 cts vs loss 29 cts - Net loss 1.5 mln vs loss 1.1 mln - Revs 28.9 mln vs 28.5 mln - Six months - Shr loss 99 cts vs loss 69 cts - Net loss 3.7 mln vs loss 2.6 mln - Revs 52.5 mln vs 51.7 mln - - Reuter - - - -20-MAR-1987 17:41:26.30 -earn -usa - - - - - -F -f2590reute -d f BC-MARCOM-TELECOMMUNICAT 03-20 0067 - -MARCOM TELECOMMUNICATIONS <MRCM> 2ND QTR JAN 31 - WEST PALM BEACH, Fla., March 20 - - Oper shr loss five cts vs loss six cts - Oper net loss 157,688 vs loss 96,573 - Revs 1,094,331 vs 1,378,973 - Avg shrs 3,315,654 vs 1,661,023 - Six mths - Oper shr loss seven cts vs loss 24 cts - Oper net loss 198,555 vs loss 394,589 - Net 2,243,377 vs 2,440,850 - Avg shrs 2,796,848 vs 1,637,592 - NOTE: Current year 2nd qtr and six mths excludes a loss -10,767 dlrs for discontinued operations. - Prior year 2nd qtr and six mths excludes a loss of 54,686 -dlrs and 112,565 dlrs for discontinued operations. - Full name of company is Marcom Telecommunications Inc. - Reuter - - - -20-MAR-1987 17:43:13.77 -earn -usa - - - - - -F -f2600reute -s f BC-EASTPARK-REALTY-TRUST 03-20 0024 - -EASTPARK REALTY TRUST <ERT> QTLY DIV - JACKSON, MISS, March 20 - - Qlty div 25 cts vs 25 cts prior - Payable April 22 - Record April 10 - Reuter - - - -20-MAR-1987 17:44:23.79 -trade -canadausa - - - - - -E -f2604reute -h f AM-TRADE 03-20 0138 - -CANADA'S CLARK SEES TRADE AS MOST URGENT PROBLEM - By Dean Lokken, Reuters - SAN FRANCISCO, March 20 - Trade is the most urgent problem -facing U.S.-Canadian relations because of a pressing need to -reach a new bilateral pact within the coming months, Joe Clark, -Canadian secretary of state for external affairs, said. - Negotiators for the two countries have been meeting for -more than a year in an effort to work out an agreement. - "The most urgent problem now is the trade question because -that has to be decided within the next 10 months," Clark told -the Commonwealth Club of California. "We have a fast track -authority from your Congress for approval or rejection of -whatever the negotiators achieve." - Clark said that, as a practical matter, an initial -agreement must be reached by late September or early October. - He listed environmental questions, particularly acid rain, -and defense as the second and third most important bilateral -issues facing Ottawa and Washington. - On Wednesday, President Reagan announced that he will seek -2.5 billion dlrs from Congress to address the acid rain -problem. Some interpreted the move as a goodwill gesture in -advance of his annual meeting, on April 5-6 in Ottawa, with -Prime Minister Brian Mulroney. - In a question-and-answer session with the public affairs -group, Clark said that the two countries must find better -mechanisms for resolving their trade disputes. - "This rash of countervailing actions, where we acted on -corn and you acted on soft wood and we both said they were -quasijudicial -- the dispute resolution mechanisims in place -now are not working adequately in either of our interests," he -said. - Ottawa also is seeking to change some of Washington's rules -on government procurement that penalize Canadian businesses, he -said. - "There are a number of Canadian companies that, in order to -secure substantial contracts in the United States, have had to -move their head offices out of our country into your country -because you have national procurement requirements," he said. - In turn, he added, the United States would like to change -some of the procurement requirements that exist at the -provincial government level in Canada. - Clark declined to forecast the outcome of the discussions. - "What will come out of it remains for the negotiators, in -the first instance, to propose, and then governments and -congresses will have judge," he said. - In his prepared remarks, Clark said that the United States -has tended to take Canada for granted, although it exports to -its northern neighbor more than twice what it exports to Japan. -"Yet you bought almost 10 per cent more from Japan last year -than you bought from Canada," he said. REUTER - Reuter - - - -20-MAR-1987 17:45:15.30 -earn -usa - - - - - -F -f2605reute -h f BC-ESSEX-CORP-<ESEX>-YEA 03-20 0056 - -ESSEX CORP <ESEX> YEAR END LOSS - ALEXANDRIA, Va., March 20 - - Oper shr loss 11 cts vs profit 33 cts - Oper net loss 132,000 vs profit 408,000 - Revs 25.2 mln vs 23.0 mln - NOTE: 1986 and 1985 oper net excludes a loss of 636,000 -dlrs or 52 cts per share and a loss of 994,000 dlrs or 80 cts -per share for discontinued operations. - Reuter - - - -20-MAR-1987 17:45:24.11 - -usaindonesia - - - - - -F -f2606reute -r f BC-DELTA- 03-20 0078 - -U.S. LAUNCHES INDONESIAN COMMUNICATIONS SATELLITE - CAPE CANAVERAL, March 20 - NASA launched an Indonesian -communications satellite aboard a Delta rocket, marking the -first international payload to be put into orbit since the -Challenger disaster more than a year ago. - The 43 mln dlr satellite, the Palapa B2-P, was launched as -the result of an agreement reached last year between President -Ronald Reagan and Indonesia's President Suharto when they met -on Bali. - - Reuter - - - -20-MAR-1987 17:50:45.11 -earn -canada - - - - - -E F Y -f2617reute -r f BC-sulpetro 03-20 0093 - -<SULPETRO LTD> YEAR OCT 31 LOSS - CALGARY, Alberta, March 20 - - Shr loss 19.22 dlrs vs loss 3.90 dlrs - Net loss 276.4 mln vs loss 45.6 mln - Revs 85.4 mln vs 113.3 mln - NOTE: Shr results after deducting preferred share dividends -of 13.1 mln dlrs in both periods. - Current loss includes a 125 mln dlr writedown of oil and -gas properties, a 67 mln dlr writeoff of deferred charges, a -22.5 mln dlr loss on disposal of U.K. properties, a 21.2 mln -dlr equity loss from affiliate Sulbath Exploration ltd and a -4.6 mln dlr loss on other investments. - Reuter - - - -20-MAR-1987 17:51:40.27 - -canada - - - - - -E -f2619reute -d f BC-alberta-budget-sets 03-20 0097 - -ALBERTA BUDGET SETS TAX INCREASE, LOWER DEFICIT - EDMONTON, Alberta, March 20 - The Alberta provincial -government will increase its general corporate tax rate on -April 1 to 15 pct from 11 pct under its 1987-88 budget -announced today, provincial treasurer Dick Johnston said. - The budget forecasts the 1987-88 provincial deficit to be -1.90 billion dlrs, compared to a forecast deficit of 3.30 -billion dlrs for fiscal 1987, which ends March 31, Johnston -said. - The budget forecasts fiscal 1988 revenues of 8.63 billion -dlrs and expenditures of 10.42 billion dlrs, Johnston said. - The provincial budget raises combined personal and -corporate income taxes by about 20 pct, Johnston said. - Johnston told a news conference taxes were increased after -revenues from oil and gas taxes fell by 64 pct last year and -are not expected to increase sharply in the short term. - The provincial government expects resource tax revenues for -fiscal 1987 to fall to 1.30 billion dlrs from a previously -estimated 2.20 billion dlrs, compared to 3.60 billion dlrs -collected in fiscal 1986 before the collapse in oil prices. - Johnston told reporters he needed to raise taxes in order -to begin moving towards a balanced budget in 1990-91. - Johnston said the personal income tax increase takes three -forms. The basic provincial tax rate rises to 46.5 pct from -43.5 pct of the basic federal income tax rate. - The provincial budget also imposed a temporary eight pct -surtax on individuals with taxable income of more than 36,000 -dlrs, he said. - In addition, the government levied a flat one pct surtax on -all individuals with taxable income. - Johnston said overall government spending of 10.42 billion -dlrs represents a cut of 4.4 pct, but various grants and tax -credits for agriculture and energy industries will remain. - Reuter - - - -20-MAR-1987 17:54:04.61 - -usa - - - - - -F -f2622reute -d f BC-WISCONSIN-ELECTRIC-<W 03-20 0085 - -WISCONSIN ELECTRIC <WTC> OFFERS PREFERRED - NEW YORK, March 20 - Wisconsin Electric Power Co said it -began a public offering of 700,000 shares of serial preferred -stock, 6-3/4 pct series, 100 dlrs par value, at a price of 100 -dlrs per share. - The shares are being offered pursuant to a shelf -registration covering 700,000 sahres of serial preferred stock -which the company filed on February 19, 1987. - Proceeds will be used to redeem outstanding preferred stock -or for repayment of short-term indebtedness. - Reuter - - - -20-MAR-1987 17:55:02.25 - -usa - - - - - -A RM -f2623reute -r f BC-TEXAS-AIR-<TEX>-UNIT 03-20 0116 - -TEXAS AIR <TEX> UNIT SELLS EQUIPMENT-BACKED DEBT - NEW YORK, March 20 - Continental Airlines Inc, a unit of -Texas Air Corp, is offering 350 mln dlrs of equipment-backed -debt securities in three tranches and another 150 mln dlrs of -senior notes due 1997, said lead manager Drexel Burnham. - A 100 mln dlr offering of first priority secured equipment -certificates due 1992 was given a 10 pct coupon and par -pricing. This tranche is non-callable to maturity. - A 125 mln dlr issue of second priority secured equipment -certificates due 1995 has an 11 pct coupon and par pricing and -an equal-sized offering of third priority certificates due 1999 -was given an 11-3/8 pct coupon and par pricing. - The second two tranches of the equipment-backed deal are -non-callable for five years, Drexel said. - Continental's 10-year notes were assigned an 11-1/2 pct -coupon and priced at par. They are non-callable for five years. -Texas Air has guaranteed the scheduled payments of interest and -principal for the senior notes. - The securities are rated B-2 by Moody's and B by Standard -and Poor's. Kidder Peabody, Merrill Lynch and Smith Barney -co-managed the issues. Proceeds, estimated at 486 mln dlrs, -will be used to repay about 254 mln dlrs of bank debt, with the -remainder added to working capital, Continental said. - Reuter - - - -20-MAR-1987 18:00:25.76 -earn -usa - - - - - -F -f2628reute -r f BC-STANWOOD-CORP-<SNW>-4 03-20 0073 - -STANWOOD CORP <SNW> 4TH QTR JAN 3 - NEW YORK, March 30 - - Shr loss 1.12 dlrs vs profit one cts - Net loss 1.7 mln vs profit 8,000 dlrs - Revs 31.8 mln vs 42.1 mln - Year - Shr loss 51 cts vs profit 57 cts - NEt loss 780,000 vs profit 876,000 - Revs 117.8 mln vs 117.3 mln - NOTE:1986 4th qtr includes loss of 911,000 for termination -of licensing agreement and loss of 319,000 dlr for termination -of womens wear operation. - Reuter - - - -20-MAR-1987 18:01:38.04 - -usa - - - - - -F -f2630reute -r f BC-GUEST-SUPPLY-<GEST>-G 03-20 0059 - -GUEST SUPPLY <GEST> GETS SHAREHOLDER SUIT - NORTH BRUNSWICK, N.J., March 20 - Guest Supply INc said a -shareholder sued it and certain officers and directors, -alleging misrepresentations and omissions in the prospectus for -the company's September 1986 public offering. - Guest said the complaint is without merit and will defend -the action vigorously. - Reuter - - - -20-MAR-1987 18:01:49.51 - -usabraziljapan -conable -worldbankimf - - - -A RM -f2631reute -r f BC-CONABLE-SAYS-BRAZIL-D 03-20 0106 - -CONABLE SAYS BRAZIL DEBT MORATORIUM IS TEMPORARY - WASHINGTON, March 20 - World Bank President Barber Conable -said he believed Brazil's decision to suspend foreign debt -interest payments is temporary. - Conable in a wide-ranging television interview to be shown -on public broadcasting tomorrow said Brazil now has the -attention of its creditors and must come up with a plan -designed to reform its economy. - "I think the Brazilians have the attention of many of their -creditors, but they must come up with a plan that will persuade -people that the Brazilian economy is going to be put on a -course that will result in some growth." - Turning to Japan, Conable said the role of that country has -been increasing in the World Bank and is expected to continue -to do so. - He said that Japan had made an additional 450 mln dlr -pledge to the International Development Association, an -indication that it agrees that it must provide more help in -line with its economic position. - Conable said there was no indication that the Soviet Union -was serious about joining the International Monetary Fund and -World Bank. He said they would have to get convertible currency -and open their books and the Soviets "don't usually do that." - REUTER - - - -20-MAR-1987 18:06:35.19 -earn -canada - - - - - -E F Y -f2635reute -r f BC-sulpetro-loss-due-to 03-20 0116 - -SULPETRO LOSS DUE TO WRITEDOWNS, ASSET DISPOSALS - Calgary, Alberta, March 20 - <Sulpetro Ltd> said its 1986 -fiscal year net loss of 276.4 mln dlrs, or 19.22 dlrs per -share, was due to several factors, the largest of which was a -writedown of 125.0 mln dlrs of oil and gas properties. - Sulpetro also recorded a writeoff of deferred charges -amounting to 67.0 mln dlrs, a loss of 22.5 mln dlrs on the -disposal of all properties in the United Kingdom and an equity -loss of 21.2 mln dlrs from affiliate Sulbath Exploration Ltd. - There was also a loss on other investments of 4.6 mln dlrs -and a loss on operations of 36.1 mln dlrs after interest, -depletion, depreciation and income tax recoveries. - In the fiscal year ended October 31, 1985, Sulpetro had a -net loss of 45.6 mln dlrs, or 3.90 dlrs per share. - The company also said its non-recourse project financing -for the Irish-Lindergh heavy oil field remains in default due -to continuing low oil prices. - Reuter - - - -20-MAR-1987 18:07:55.50 -acq -usa - - - - - -F -f2636reute -u f BC-AMERICAN-EXPRESS-<AXP 03-20 0099 - -AMERICAN EXPRESS <AXP> TO DISCUSS SHEARSON DEAL - New York, March 20 - American Express Co's board of -directors Monday will discuss the company's arrangement to sell -13 pct of Shearson Lehman Brothers Inc to Nippon Life Insurance -Co, a company spokesman said. - The spokesman would not say whether the board is planning -to vote on the understanding between American Express and -Nippon Life. The Shearson stake is to be sold for 530 mln dlrs, -American Express has said. - The spokesman also would not comment on speculation that -the board was to discuss a sale of securities to the public. - Monday's board meeting is a regular monthly meeting. The -plan to sell part of Shearson to Nippon Life must be approved -by the American Express board and Japan's Ministry of Finance. - Earlier, American Express and Shearson said they were -subpoenaed by the Securities and Exchange Commission. American -Express said it was subpoenaed for documents pertaining to -securities transactions of American Express and Fireman's Fund. -Shearson was subpoenaed for documents related to transactions -with Jefferies and Co and others. - The American Express spokesman said he could not comment on -whether any officials of the firm were subpoenaed. - Reuter - - - -20-MAR-1987 18:11:31.62 -crudenat-gasfuel -usa - - - - - -Y -f2642reute -r f BC-NATURAL-GAS-SEEN-RECA 03-20 0107 - -NATURAL GAS SEEN RECAPTURING SOME MARKET SHARE - By NAILENE CHOU-WIEST, Reuters - NEW YORK, March 17 - Higher crude oil prices will raise -demand for natural gas, helping it to reclaim market share lost -to heavy oil when prices plunged in 1986, analysts said. - The analysts said that these efforts will be most -successful in the industrial sectors of the economy with large -and growing energy requirements. - "Natural gas stands a good chance to recapture the share of -oil supplied to electric utilities that it lost to the residual -fuel industry last year," Michael Smolinski, an energy -economist with Data Resources Inc, told Reuters. - An estimated 200,000 barrels per day of residual fuel went -into the utilities market at the expense of natural gas last -year when world oil prices plunged, Smolinski said. - Assuming oil prices hold above 15 dlrs a barrel, national -average gas prices delivered to the utilities at a projected -2.10 to 2.25 dlrs per mln Btu would be very competitive, -Michael German, vice president of economic analysis at American -Gas Association said. - The average delivered prices at the end of January were -2.10 dlrs per mln Btu, compared with 3.26 dlrs a year ago. - "We expect natural gas to regain 250 to 400 billion cubic -feet (of demand) in the overall energy market in the second and -third quarter (1987)," he said. - In addition to price competitiveness, availability will be -an important factor persuading energy users to switch to gas, -Frank Spadine, senior energy economist with Bankers Trust Corp. -in New York noted. - Spadine said the mild winter in many parts of the North -American continent has led to a build up of gas inventories and -less would be necessary to replenish underground storage this -spring freeing gas for spot sales. - These forecasts develop a strong counterpoint to the fears -that natural gas suplies would be tight and prices -significantly higher given a sharp decline in drilling last -year. - AGA's German contended that despite the drilling decline, -much of U.S. proved reserves could be brought to production -quickly through developments such as the infill drilling which -permits more wells to be drilled in proved reserve basins. - Citing recent EIA statistics, German said, the gas surplus -was likely to contract from three trillion cubic feet in 1986 -to two trillion cubic feet in 1987, but the surplus would not -go away until 1990. - Smolinski of Data Resources agreed that the surplus would -persist until 1990. While gas supplies may tighten in certain -consuming areas, notably in California and in the Northeast -U.S., an overall shortfall appeared remote. - Reuter - - - -20-MAR-1987 18:14:24.22 - -usa - - - - - -F -f2647reute -r f BC-LOUISIANA-LAND-<LLX> 03-20 0064 - -LOUISIANA LAND <LLX> ASSUMES INEXCO'S DEBT - NEW ORLEANS, March 20 - Louisiana Land and Exploration Co -said it assumed the obligation to pay the principal and -interest on the 8-1/2 pct convertible subordinated debentures -due September 1, 2000 of Inexco Oil Co, a unit of Louisiana -Land. - Effective March 23, the debentures will be listed as the -debentures of Louisiana Land, LLXOO. - Reuter - - - -20-MAR-1987 18:16:46.86 - -canada - - - - - -E A -f2653reute -r f BC-macmillan-bloedel-to 03-20 0063 - -MACMILLAN BLOEDEL <MMBLF> TO REDEEM DEBENTURES - VANCOUVER, British Columbia, March 20 - MacMillan Bloedel -Ltd said it will redeem all outstanding nine pct series J -debentures on April 27, 1987 for 34.9 mln U.S. dlrs, plus a -premium of one pct and accrued and unpaid interest. - The series J debentures were issued in Europe in 1977 and -were due February 1992, the company said. - Reuter - - - -20-MAR-1987 18:19:27.03 -trade -usajapan - - - - - -F A RM -f2659reute -r f AM-TRADE-COMPUTERS 03-20 0106 - -U.S. SENATORS SAY SANCTIONS LIKELY ON MICROCHIPS - By Jacqueline Frank, Reuters - WASHINGTON, March 20 - The United States will likely impose -sanctions soon on imports of Japanese microchips, senators said -today after a private meeting with Commerce Secretary Malcolm -Baldrige. - Although the senators said Baldrige told them no decision -would be taken until a final determination is made on whether -Japanese microchips were dumped in the United States, they said -they were virtually sure Japan would face penalties. - President Reagan's trade policy advisory group, of which -Baldrige is a member, will meet on the issue Wednesday. - "I am confident we will see action taken," Sen. John McCain, -an Arizona Republican, told reporters. - "I am expecting sanctions at least, and even more than -sanctions," Sen. Pete Domenici, a New Mexico Republican, said. - The senators, several congressmen and U.S. semiconductor -industry representatives met with Baldrige and State Department -officials to discuss Japan's alleged violations of a September -1986 agreement to stop dumping its microchips in the United -States and other countries. - They recommended Japanese firms be penalized through -tariffs or import duties over the next six to 12 months for -continuing to dump microchips. The violations were worth 100 -mln dls to the Japanese semiconductor industry, they said. - Asked if Baldrige intended to recommend sanctions, Sen. -Pete Wilson told reporters, "The clear import of what he said is -that there will be." - "Japan can't just say they will comply. We think sanctions -must be applied," for past violations of the agreement, the -California Republican said. - The semiconductor industry produces microprocessor chips -which are used in high technology products ranging from radios -to defence missile guidance systems. - Sen. James McClure, an Idaho Republican, said Baldrige told -them the administration had not made a final determination that -Japanese companies had dumped semiconductor microchips below -the cost of production in the United States or other countries. - But McClure said senators told him, "There is no doubt -dumping is going on," based on evidence such as invoices of -purchases of the Japanese products. - The two countries signed a pact last September in which -Japan agreed to stop selling its microchips in the United -States and other countries below production costs and to allow -the U.S. semiconductor industry access to the Japanese market. - In return, the United States waived its right to impose -import duties on the Japanese microchips. - Japanese officials have said they have lived up to the pact -and have asked Japanese chip-makers to further slash output to -save the pact. - Japan has frequently been the target of congressional -discouragement over last year's record 169-billion-dlr trade -deficit. Tokyo had a 59-billion-dlr surplus with the United -States last year and had large surpluses with other countries. - The Senate yesterday unanimously passed a resolution -calling for action against Japan for violations of the pact -since September. The resolution will be introduced in the House -next week by Rep. Bob Matsui, a California Democrat. - Reuter - - - -20-MAR-1987 18:20:01.80 -earn -usa - - - - - -F -f2661reute -d f BC-MULTI-MEDIA-SEES-YEAR 03-20 0093 - -MULTI-MEDIA SEES YEAR END LOSS - NEW YORK, March 20 - Multi-Media Barter Ltd said it expects -to report a net loss of 820,000 dlrs or 17 cts a share for the -year ended December 31, compared to a loss of 553,000 or 11 cts -a share in the prior year. - The fourth quarter resulted in a net loss of 227,000 or -four cts compared to a loss of 330,000 or six cts a shares last -year. - It said it is currently in the process of restructuring by -reducing expenses and streamlining operations and has cut -expenses from 50,000 dlrs to less than 15,000 dlrs a month. - Reuter - - - -20-MAR-1987 18:25:06.34 - -usa - - - - - -F -f2670reute -d f BC-WIEBOLDT'S-TO-CLOSE-E 03-20 0110 - -WIEBOLDT'S TO CLOSE EIGHT STORES - CHICAGO, March 20 - Wieboldt's Department Stores, in -Chapter 11 bankruptcy since September 1986, said as part of an -agreement with creditors it will operate its four largest and -most productive stores but close the remaining eight stores. - It said 341 employees of its remaining 885 employees will -be laid off or terminated as a result. - The company also said it established a fund of about 12 mln -dlrs to be available for payment of creditors' claims. - The retailer said it would continue to operate its four -largest and most productive Chicago area outlets - State -Street, Randhurst, Harlem-Irving and Ford City. - Reuter - - - -20-MAR-1987 18:26:27.13 -earn -usa - - - - - -F -f2673reute -w f BC-NATIONAL-HMO-CORP-<NH 03-20 0058 - -NATIONAL HMO CORP <NHMO> 2ND QTR JAN 31 - MELBOURNE, Fla, March 20 - - Shr loss nine cts vs profit nine cts - Net loss 478,000 vs profit 371,000 - Revs 3.4 mln vs 2.6 mln - Six months - Net loss 466,000 vs profit 685,000 - Revs 6.2 mln vs 5.0 mln - NOTE:1987 net loss includes writeoff of deferred start up -costs totaling 490,000 dlrs. - Reuter - - - -20-MAR-1987 18:39:41.65 -earn -canada - - - - - -F -f2685reute -r f BC-MINORCO-<MNRCY>-HALF 03-20 0038 - -MINORCO <MNRCY> HALF YEAR DEC 31 - TORONTO, ONtario, March 20 - - Shr 26 cts vs 38 cts - Net 44.0 mln vs 65.0 mln - NOTE:1986 net includes one mln dlr extraordinary gain and -1985 net icludes four mln dlrs extraordinary loss. - Reuter - - - -20-MAR-1987 18:41:04.26 - -usaphilippines - - - - - -RM A -f2686reute -u f BC-PHILIPPINE-DEBT-TALKS 03-20 0110 - -PHILIPPINE DEBT TALKS TO CONTINUE ON SATURDAY - NEW YORK, March 20 - The Philippines and its bank advisory -committee completed another round of debt rescheduling talks -and will meet again on Saturday, a senior banker said. - Although today's negotiations did not produce a final -agreement, the decision to meet at the weekend appears to be a -signal that the two sides are making progress. - The Philippines seeks to restructure 9.4 billion dlr of its -27.2 billion dlr foreign debt. The interest rate to be charged -on the debt and Manila's proposal to pay interest partly with -investment notes instead of cash have been the main sticking -points in the talks. - Reuter - - - -20-MAR-1987 18:41:09.81 -earn -usa - - - - - -F -f2687reute -r f BC-MINORCO-<MNRCY>-SEES 03-20 0069 - -MINORCO <MNRCY> SEES IMPROVED SECOND HALF - TORONTO, Ontario, March 20 - Minorco said it expects net -earnings to be substantially stronger than the 44.0 mln dlrs -reported for the first half. - In reporting that first half results declined from 65.0 mln -dlrs, Minorco said the contributions from its 50 pct investment -in December 1985 in Adobe Resources Corp was negative as a -result of low oil and gas prices. - Reuter - - - -20-MAR-1987 18:41:20.90 -earn -usa - - - - - -E -f2688reute -r f BC-MINORCO-<MNRCY>-SEES 03-20 0069 - -MINORCO <MNRCY> SEES IMPROVED SECOND HALF - TORONTO, Ontario, March 20 - Minorco said it expects net -earnings to be substantially stronger than the 44.0 mln dlrs -reported for the first half. - In reporting that first half results declined from 65.0 mln -dlrs, Minorco said the contributions from its 50 pct investment -in December 1985 in Adobe Resources Corp was negative as a -result of low oil and gas prices. - Reuter - - - -20-MAR-1987 18:44:31.15 - -usa - - - - - -A -f2691reute -r f BC-FDIC-SAYS-INDIANA-BAN 03-20 0091 - -FDIC SAYS INDIANA BANK BECOMES 48TH TO FAIL - WASHINGTON, March 20 - The Federal Deposit Insurance Corp -said state banking regulators closed the Morocco State Bank in -Morrocco, Indiana, bringing the total number of banks to fail -so far this year to 48. - The failed bank's 14.1 mln dlrs in deposits and 9.9 mln -dlrs of its loans and other assets will be assumed by DeMotte -State Bank in DeMotte, Ind, the FDIC said. - The FDIC said it will advance 3.7 mln dlrs to help the -transaction and would retain 5.1 mln dlrs in the failed banks -assets. - Reuter - - - -20-MAR-1987 18:48:35.54 - -usa - - - - - -V RM -f2693reute -u f AM-ARMS-KAMPELMAN 03-20 0112 - -U.S. ARMS NEGOTIATOR SAID TO HAVE HEART ATTACK - WASHINGTON, March 20 - U.S. arms negotiator Max Kampelman -suffered a mild heart attack, an aide said. - Nancy Tackett, Kampleman's staff assistant, told Reuters -Kampelman was doing well and was expected to leave George -Washington Hospital in about a week. - "A full recovery is expected," she said. - Kampelman did not feel well yesterday and may have -sufffered the heart attack then, Tackett said. He had a -regularly-scheduled physical this morning and entered the -hospital after that, on his doctor's advice, she said. - A hospital spokesman confirmed that Kampelman was a -patient in the coronary care unit. - - Reuter - - - -20-MAR-1987 18:49:16.73 - -usa - - - - - -A -f2695reute -u f BC-DALLAS-BASED-THRIFT-C 03-20 0103 - -DALLAS-BASED THRIFT CLOSED BY REGULATORS - WASHINGTON, March 20 - The Federal Home Loan Bank Board -said Dallas-based Vernon Savings and Loan Association, the 15th -largest thrift in Texas, was closed by state authorities and -its assets, deposits and liabilities were transfered to a new -federally chartered association. - Vernon, with 1.35 billion dlrs of assets and nine offices -in Texas and Oklahoma, was closed after state regulators -concluded it was in unsafe and unsound condition. - The thrift was owned by Texas businessman Donald Dixon, who -bought it in early 1982, when it had only 120 mln dlrs in -assets. - The bank board said growth was accomplished largely through -the purchase of brokered deposits and the sale of jumbo -certificates of deposit, which totaled 29 pct of total deposits -at the end of 1986. - The bank board also said that 96 pct of its loan portfolio -was nonperforming as a result of sloppy loan practices. - It said Vernon also paid excessive salaries and dividends -to officers and directors and bought a beach house and five -airplances for the use of thrift executives and stockholders. - The bank board ousted the thrift's officers and directors -and hired another Texas association to run it. - The bank board also said it closed First Federal of -Maryland, a federal savings association that had 115.2 mln dlrs -in assets. It said its 118 mln dlrs in insured deposits were -transferred to Columbia First Federal Savings and Loan -Association of Washington, D.C. - The bank board said First Federal had engaged in unsound -loan underwriting practices and many of the loans are now -deliquent. The institution experienced heavy and continuing -losses and became insolvent, the bank board said. - Reuter - - - -20-MAR-1987 18:50:54.45 -tin -bolivia - -imfworldbank - - - -RM A -f2699reute -r f BC-BOLIVIA-PREPARES-FOR 03-20 0108 - -ECONOMIC SPOTLIGHT - BOLIVIA - By Paul Iredale, Reuters - LA PAZ, March 20 - Bolivia, once Latin America's most -delinquent debtor, is preparing for a second International -Monetary Fund agreement after an economic stabilisation program -has effectively slowed inflation and reduced public spending. - A fund spokesman said an IMF team would visit La Paz -shortly to discuss terms of the new agreement. - He said the IMF had disbursed 130 mln dlrs here and 20 mln -dlrs are pending under the one year agreement that ends this -month. The accord provided for a stand-by loan, a compensatory -financing facility and a structural adjustment facility. - The spokesman said that if the agreement is renewed, -Bolivia can expect a further 60-mln-dlr stand-by loan over the -next 12 months. - Bolivia's agreement with the IMF, its first since 1980, -opened the door to rescheduling negotiations with the Paris -Club and Argentina and Brazil, which hold 2.5 billion dlrs of -Bolivia's 4.0-billion-dlr foreign debt. - Central Bank President Javier Nogales told Reuters the -negotiations with the Paris Club, which have yet to be -finalised, had been extremely successful. - Nogales said the Paris Club had agreed to reschedule -Bolivia's debt over 10 years with five to six years grace and -had waived all interest payments until the end of 1988. - Bilateral discussions on interest rates continue, he said. - Nogales said Bolivia was expecting some 400 mln dlrs in -disbursements this year from lender countries and international -agencies, including the World Bank and the Inter-American -Development Bank, although diplomatic and banking sources put -the figure at closer to 300 mln dlrs. - Nogales said Bolivia's net international reserves are -around 250 mln dlrs, up from one mln dlrs when President Ictor -Paz Estenssoro took office in august 1985. Nogales said the -capital flow on Bolivia's debt servicing versus new credits had -changed from a net outflow of 200 mln dlrs in 1985 to a net -inflow of 130 mln dlrs in 1986. - Bolivia's return from the financial wilderness follows paz -estenssoro's economic stabilisation program. He inherited -inflation of 23,000 pct a year, state enterprises that were -losing hundreds of mlns of dlrs and a currency that traded on -the black market at up to 16 times its official rate. - Paz estenssoro froze public sector wages, set a market- -related rate for the peso, introduced tax reforms and laid off -thousands of workers in state corporations. - Inflation has been running at 10 pct a year for the past -six months, according to the Central Bank, and the government -expects the economy to grow three pct this year after a 14 pct -contraction over the last six years. - The government is also proposing a novel solution to its -debt to commercial banks, some 900 mln dlrs, on which interest -has not been paid since March, 1984. - Nogales said that over the next few months Bolivia would -make a one-time offer to buy back all its commercial debt at -the price it trades on the international secondary market -- -10-15 cents on the dlr. He said Bolivia's commercial bank -steering committee agreed at a meeting in New York to consider -the proposal, but it is still unclear what proportion of the -country's creditor banks will take up the offer. - One foreign banker speculated that Bolivia might be able to -buy back up to 30 pct of its commercial debt paper under the -deal, mostly from small banks who have written off their loans -to the country. - But he said the larger creditors were more interested in a -scheme of debt-equity swaps, similar to that which has operated -in Chile for the past two years. - The Bolivian government has yet to draw up proposals for -debt-equity swaps, but the banker said it was planning to -privatise more than 100 state companies and these could serve -as a basis for such a scheme. - Foreign bankers said this type of proposal might prove -attractive to Bolivia in the long run, especially as the -government realises that it will have to attract a large amount -of new capital in order to grow. - Planning Minister Gonzalo Sanchez de Lozada told Reuters -that Bolivia was hoping for five to six billion dlrs in new -investment over the next 10 to 12 years. - The government realises that in order to remain viable, -Bolivia will need to develop new exports. - The price of tin, which accounted for some 45 pct of -Bolivia's exports in 1984, has collapsed on the world markets, -and gas, the country's major revenue earner, is in abundant -supply in the region. - Reuter - - - -20-MAR-1987 18:51:57.82 -earn -usa - - - - - -F -f2703reute -r f BC-NEOAX-INC-<NOAX>-4TH 03-20 0046 - -NEOAX INC <NOAX> 4TH QTR - LAWRENCEVILLE, N.J., March 20 - - Shr loss 13 cts vs loss six cts - Net loss 1.4 mln vs loss 635,000 - Revs 40.3 mln vs 28.5 mln - Year - Shr profit 40 cts vs profit 26 cts - Net profit 4.2 mln vs 2.6 mln - Revs 166.4 mln vs 94.6 mln - NOTE:1986 4th qtr and year net reflects dividend -requirements of 1.5 mln dlrs and 3.3 mln dlrs, and charges of -257,000 dlrs and 4.6 mln dlrs respectively which is not -accruable or payable because of pre-reorganization tax loss -carryforwards. - 1985 4th qtr and year net reflects dividend requirement of -1.1 mln dlrs and 2.3 mln dlrs, respectively, and charges of -472,000 dlrs and 2.9 mln dlrs respectively which is not -accruable or payable because of pre-organization tax loss -carryforwards. - Reuter - - - -20-MAR-1987 18:57:24.80 - -usa - - - - - -F -f2706reute -r f BC-PACIFIC-STOCK-EXCHANG 03-20 0083 - -PACIFIC STOCK EXCHANGE SHORT INTEREST UP - SAN FRANCISCO, March 20 - The Pacific Stock Exchange said -there was a total short interest of 1,413,674 shares of stock -exclusively traded on the Exchange as of March 13, an increase -of 102,486 shares from last month's restated total of -1,311,188. - The Exchange said the short interest ratio rose to 1.42 -from last month's ratio of 1.25. - The ratio is based on an average daily trading volume of -994,545 shares in the 47 issues included in the report. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-009.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-009.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-009.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-009.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2003 +0,0 @@ - - -24-MAR-1987 15:59:17.10 - -usa - - - - - -F -f2412reute -u f BC-ADVANCED-MAGNETICS-<A 03-24 0066 - -ADVANCED MAGNETICS <ADMG> IN AGREEMENT - CAMBRIDGE, Mass., March 24 - Advanced Magnetics Inc said it -reached a four mln dlrs research and development agreement with -ML TEchnolgy Ventures LP, a limited partnership sponsored by -Merrill LYnch Capital Markets. - Under the agreement, Advanced Magnetics will develop and -conducts clinical trials of its contrast agents for magnetic -resonance imaging. - The agreement includes a warrant permitting MLTV to buy up -to 380,000 shares of Advanced Magnetics common stock through -February 1994 at 10.50 dlrs per sahre. - Reuter - - - -24-MAR-1987 15:59:39.63 - -usa - - - - - -F -f2414reute -d f BC-HEALTH-RESEARCH-FILES 03-24 0108 - -HEALTH RESEARCH FILES FOR BANKRUPTCY - MINNEAPOLIS, Minn., March 24 - <Health Research and -Management Group> said it has filed for protection under -Chapter 11 of the federal bankruptcy law. - The company said it filed the petitions to reorganize debt -and eliminate contingent liabilities it incurred while -attempting to expand nationally. - Health Research also said it owes about 750,000 dlrs of its -1.1 mln dlrs in debt to <MedPro Group Inc>, a former jont -venture partner. - The company added it has asked the Minnesota Department of -Commerce to suspend trading of its common stock pending -dissemination of current financial information. - Also, the company said George Frisch has been elected -chairman of the board, president and chief executive officer, -replacing Daniel Zismer, who resigned as chairman of the board -and O. Frederick Kiel, who resigned as president and chief -executive officer. - Reuter - - - -24-MAR-1987 16:00:01.29 -earn -usa - - - - - -F -f2415reute -h f BC-NUMEREX-CORP-<NMRX>-2 03-24 0052 - -NUMEREX CORP <NMRX> 2ND QTR JAN 31 LOSS - MINNEAPOLIS, MINN., March 24 - - Shr loss seven cts vs profit five cts - Net loss 149,421 vs profit 103,120 - Sales 1,698,345 vs 1,920,010 - Six Mths - Shr loss five cts vs profit nine cts - Net loss 100,472 vs profit 191,614 - Sales 3,836,794 vs 3,650,322 - Reuter - - - -24-MAR-1987 16:01:25.88 - - - - - - - -V RM -f2419reute -f f BC-******U.S.-SELLING-12 03-24 0015 - -******U.S. SELLING 12.8 BILLION DLRS OF 3 AND 6-MO BILLS MARCH 30 TO PAY DOWN 1.2 BILLION DLRS -Blah blah blah. - - - - - -24-MAR-1987 16:02:17.95 - - - - - - - -V RM -f2423reute -f f BC-******U.S.-2-YEAR-NOT 03-24 0015 - -******U.S. 2-YEAR NOTE AVERAGE YIELD 6.43 PCT, STOP 6.44 PCT, AWARDED AT HIGH YIELD 85 PCT -Blah blah blah. - - - - - -24-MAR-1987 16:03:55.80 - -usa - - - - - -F -f2426reute -u f BC-COMMODORE-<CBU>,-ATAR 03-24 0056 - -COMMODORE <CBU>, ATARI IN SETTLEMENT - NEW YORK, March 24 - Commodore International Ltd said it -settled and discontinued all pending litigation with Atari -Corp. - The company issued a statement which said the case had been -settled on terms satisfactory to both sides. - Company officials were not immediately available for -comment. - Reuter - - - -24-MAR-1987 16:04:42.31 -trademoney-fx -usataiwanjapansouth-korea - - - - - -RM A -f2428reute -b f BC-/BALDRIGE-SUPPORTS-NI 03-24 0088 - -BALDRIGE SUPPORTS NIC TALKS ON CURRENCIES - WASHINGTON, March 24 - Commerce Secretary Malcolm Baldrige -said he supported efforts to persuade newly-industrialized -countries (NICS) to revalue currencies that are tied to the -dollar in order to help the United States cut its massive trade -deficit. - "We do need to do something with those currencies or we -will be substituting Japanese products for Taiwanese products," -or those of other nations with currencies tied to the dollar, -Baldrige told a House banking subcommittee. - The U.S. dollar has declined in value against the Yen and -European currencies, but has changed very little against the -currencies of some developing countries such as South Korea and -Taiwan because they are linked to the value of the dollar. - As a result, efforts to reduce the value of the dollar over -the past year and a half have done little to improve the trade -deficits with those countries. - Baldrige told a House Banking subcommittee that the -Treasury Department was attempting to persuade those countries -to reach agreement with the United States on exchange rates. - - Reuter - - - -24-MAR-1987 16:05:14.04 - -usa - - - - - -F -f2431reute -u f BC-TRIANGLE-<TRI>-BEGINS 03-24 0044 - -TRIANGLE <TRI> BEGINS EXCHANGE OFFER - NEW YORK, March 24 - Triangle Industries Inc said it began -a previously announced offer to exchange one share of Triangle -common stock for each share of participating preferred stock. - The offer will expire April 21. - Triangle said that sales in 1987 will exceed four billion -dlrs. - For the year ended December 31, 1986, Triangle reported -sales of 2.7 billion dlrs and net income of 47.6 mln dlrs. - - Reuter - - - -24-MAR-1987 16:05:42.34 - -usa - - - - - -F -f2435reute -r f BC-SOUTHMARK-<SM>-UNIT-I 03-24 0108 - -SOUTHMARK <SM> UNIT IN PUBLIC OFFERING OF STOCK - DALLAS, March 24 - Southmark Corp's National Heritage Inc -said it has started the initial public offering of 2,000,000 -shares of common stock at 9.50 dlrs per share. - It said all shares are being traded though NASDAQ under -the symbol <NHER>. - The lead underwriter for the offering is Drexel Burnham -Lambert Inc, with Bear, Stearns and Co Inc., and E.F. Hutton -and Co Inc acting as co-underwriters, the company said. - Proceeds will be used to augment working capital, complete -scheduled renovations at some National Heritage leased -facilities and repay certain debts to Southmark, it said. - Reuter - - - -24-MAR-1987 16:06:25.01 -acq - - - - - - -F -f2438reute -f f BC-******EASTMAN-KODAK-C 03-24 0013 - -******EASTMAN KODAK CO TO SELL HOLDINGS IN ICN PHARMACEUTICALS AND VIRATEK INC -Blah blah blah. - - - - - -24-MAR-1987 16:07:44.11 - -usa - - - - - -A -f2442reute -r f BC-FEUD-PERSISTS-AT-U.S. 03-24 0105 - -FEUD PERSISTS AT U.S. HOUSE BUDGET COMMITTTEE - WASHINGTON, March 24 - A feud among Democrats and -Republicans persisted at the House Budget Committee, stalling -the writing of a fiscal 1988 U.S. budget plan. - Republicans failed to appear at a drafting session called -by Democratic committee chairman William Gray as a make-up -meeting to end bickering that has delayed budget activity for -a week and threatens the ability of Congress meeting an April -15 deadline for completing the deficit-cutting budget. - Republicans told Gray yesterday they would appear today and -participate if the meeting was held behind closed doors. - - He said the Republicans were prepared to make a "good faith" -effort to cooperate if the budget deliberations were held -behind closed doors and not in public as is the normal -procedure. - However, they failed to appear today and Gray said he had -been told they wanted House Speaker Jim Wright to answer a -series of budget questions posed by House Republican leader Bob -Michel before they would cooperate in budget matters. - The budget feuding led the Washington Post today to -editorialize that it was childish, similar to an eraser fight -among fourth grade students. - Reuter - - - -24-MAR-1987 16:07:51.39 -interest -usa - - - - - -A RM -f2443reute -u f BC-TREASURY-BALANCES-AT 03-24 0084 - -TREASURY BALANCES AT FED ROSE ON MARCH 23 - WASHINGTON, March 24 - Treasury balances at the Federal -Reserve rose on March 23 to 3.332 billion dlrs from 3.062 -billion dlrs on the previous business day, the Treasury said in -its latest budget statement. - Balances in tax and loan note accounts fell to 15.513 -billion dlrs from 17.257 billion dlrs on the same respective -days. - The Treasury's operating cash balance totaled 18.845 -billion dlrs on March 23 compared with 20.318 billion dlrs on -March 20. - Reuter - - - -24-MAR-1987 16:08:11.64 - -usa - - - - - -A -f2444reute -r f BC-FARM-CREDIT-SYSTEM-SE 03-24 0112 - -FARM CREDIT SYSTEM SEEN NEEDING 800 MLN DLRS AID - WASHINGTON, MARCH 24 - A member of the board which -regulates the farm credit system said Congress should plan to -provide at least 800 mln dlrs in fiscal 1988 to bailout the -troubled system, but other members of the board differed. - Jim Billington, Farm Credit Administration (FCA) board -member told a House Agriculture Appropriations subcommittee -hearing "I feel your subcommittee should plan on providing at -least 800 mln next year to assist the Farm Credit System." - However, FCA board member Marvin Duncan differed, saying -"it is premature to talk about the cost of a solution until we -know what kind of solution." - Chairman of the FCA board, Frank Naylor, said it might be -possible to structure a rescue of the system with government -guarantees or a line of credit which requires little or no -upfront government money. - However, Billington said Congress must provide help -immediately because "this system needs some assurance that it -will get some help." - The FCA estimates the system could lose up to 1.4 billion -dlrs in 1987, exhausting the remainder of its working capital, -Naylor said. - The farm credit system is expected to present its own -proposals for government aid to a Senate Agriculture -subcommittee hearing on Thursday. - Naylor said the Treasury Department is continuing to refine -Reagan administration ideas on how a rescue should be -structured. - Congressional sources said they hope to begin drafting a -rescue bill for the farm credit system as early as next week. - Reuter - - - -24-MAR-1987 16:09:09.08 -iron-steel -usa - - - - - -F -f2445reute -u f BC-USX-<X>-USS-UNIT-RAIS 03-24 0068 - -USX <X> USS UNIT RAISES PRICES - LORAIN, Ohio, March 24 - USX Corp's USS subsidiary said -that effective with shipments beginning July 1 prices for all -leaded grades and 1200-series grades of hot rolled bar and -semi-finished products from its Lorain, Ohio, facility will be -increased by 15 dlrs a ton over the prices in effect June 1. - It said the increase is being made to reflect current -market conditions. - Reuter - - - -24-MAR-1987 16:10:06.45 -trade -japanusa - - - - - -F -f2447reute -d f BC-UNIONIST-URGES-RETALI 03-24 0108 - -UNIONIST URGES RETALIATION AGAINST JAPAN - WASHINGTON, March 24 - William Bywater, president of the -International Union of Electronic Workers, called on President -Reagan to retaliate against Japan for unfair practices in -semiconductor trade. - He said in a statement a crash program was needed in the -semiconductor industry to prevent the United States from -becoming "one of the world's industrial lightweights." - Bywater's remarks came as the White House Economic Policy -Council prepared for a Thursday meeting to decide what -sanctions if any should be taken against Japan for alleged -violations of a U.S.-Japanese semiconductors agreement. - The pact, agreed to last July, called for Tokyo to end -selling semiconductors at below cost and to open its home -market to U.S. goods. In return, Washington agreed to forego -antidumping duties on Japanese semiconductors. - But U.S. officials have said that while Japan has stopped -dumping in the U.S. market, it has not ended third country -dumping; nor has it opened its market to U.S. semiconductors. - Japan yesterday, in an effort to ward off U.S. action, -ordered a cutback in semiconductors production as a way to -force prices up and end the dumping. - Bywater, in his statement, said he backed a Defense Science -Board task force proposal to set up a consortium to develop new -electronic products and manufacturing processes and make the -U.S. industory more competitive. - But he added the industry could not wait for legislation to -pass and that action was required now to help the depressed -electronic industry. - Bywater said, "I urge the Reagan Administration to take full -and severe action immediately against Japan by invoking the -retaliatory steps that are permitted under U.S. law and GATT -(General Agreement on Tariffs and Trade)." - Reuter - - - -24-MAR-1987 16:12:10.73 - -usa - - - - - -F -f2454reute -u f BC-EXXON-(XON)-GETS-99.2 03-24 0030 - -EXXON (XON) GETS 99.2 MLN DLR CONTRACT - WASHINGTON, March 24 - Exxon Co USA of Houston has been -awarded a 99.2 mln dlr contract for jet fuel, the Defense -Logistics Agency said. - Reuter - - - -24-MAR-1987 16:12:45.97 - -usa - - - - - -F -f2456reute -u f BC-EATON-(ETN)-GETS-53.0 03-24 0035 - -EATON (ETN) GETS 53.0 MLN DLR CONTRACT - WASHINGTON, March 24 - Eaton Corp's AIL Division has -received a 53.0 mln dlr contract for jamming system work for -the EA-6B electronic warfare aircraft, the Navy said. - Reuter - - - -24-MAR-1987 16:12:53.77 -grainrice -usazaire - - - - - -C G -f2457reute -u f BC-ZAIRE-AUTHORIZED-TO-B 03-24 0077 - -ZAIRE AUTHORIZED TO BUY PL 480 RICE - USDA - WASHINGTON, March 24 - Zaire has been authorized to -purchase about 30,000 tonnes of U.S. rice under an existing PL -480 agreement, the U.S. Agriculture Department said. - It may buy the rice, valued at 5.5 mln dlrs, between March -31 and August 31, 1987, and ship it from U.S. ports by -September 30, the department said. - The purchase authorization covers the entire quantity of -rice provided under the agreement. - Reuter - - - -24-MAR-1987 16:13:26.14 - -usa - - - - - -F -f2459reute -u f BC-MCDONNELL-DOUGLAS-GET 03-24 0036 - -MCDONNELL DOUGLAS GETS 30.6 MLN DLR CONTRACT - WASHINGTON, March 24 - McDonnell Douglas Corp (MD) has -received a 30.6 mln dlr contract for work on development of the -standoff land attack missile (SLAM), the Navy said. - REUTER - - - -24-MAR-1987 16:15:17.01 -acq -usa - - - - - -F -f2463reute -r f BC-MIDIVEST-ACQUIRES-ASS 03-24 0080 - -MIDIVEST ACQUIRES ASSETS OF BUSINESS AVIATION - ROANOKE, Va., March 24 - <Midivest Inc> said it acquired -all the assets of <Business Aviation Inc> of Sioux Falls, S.D., -for an undisclosed amount of stock. - Midivest said it expects to sell 10 to 20 of the renovated -Beechcraft planes next year. It said management will also lease -these airborne intensive care units to hospitals and government -subdivisions through Metropolitan Leasing, a wholly-owned -subsidiary of Midivest. - Reuter - - - -24-MAR-1987 16:15:59.31 -grainwheat -usajordan - - - - - -C G -f2464reute -u f BC-U.S.-WHEAT-CREDITS-FO 03-24 0113 - -U.S. WHEAT CREDITS FOR JORDAN SWITCHED - WASHINGTON, March 24 - The Commodity Credit Corporation -(CCC) has switched 25.0 mln dlrs in wheat credit guarantees to -Jordan under the Export Credit Guarantee Program to the -Intermediate Export Credit Guarantee Program, the U.S. -Agriculture Department said. - The switch reduces the total value of GSM-102 guarantees -for the current fiscal year to 30.0 mln dlrs. - The credit terms extended for export sales under the -Intermediate Export Credit Guarantee Program (GSM-103) must be -in excess of three years but not more than seven years. - All sales must be registered and exports completed by -September 30, 1987, the department said. - Reuter - - - -24-MAR-1987 16:17:44.35 -money-fxdlr -usajapanuk - - - - - -V RM -f2474reute -r f BC-DOLLAR-EXPECTED-TO-FA 03-24 0108 - -DOLLAR EXPECTED TO FALL DESPITE INTERVENTION - By Claire Miller, Reuters - NEW YORK, March 24 - Central bank intervention in the -foreign exchange markets succeeded in staunching the dollar's -losses today, but senior dealers here believe the U.S. currency -is headed for a further retreat. - Although the intervention was widespread, dealers perceive -that the six major industrial nations have differing levels of -commitment to their recent accord to stabilize currencies. - Moreover, hard economic realities hold greater sway over -the currency market than central bank intervention and these -argue for a further dollar decline, dealers said. - "The market can be bigger than the central banks. And -economic fundamentals will always come to the fore," said a -dealer at one major U.S. bank. - As the dollar dropped to post-World War II lows against the -yen today foreign exchange traders said the Bank of Japan, -Federal Reserve Board and Bank of England intervened in the -markets on behalf of the U.S. currency. - Reports of the authorities' actions helped the dollar -recover to about 149.45 yen in New York this afternoon from -the post-war low of 148.20 yen in the Far East. But it still -failed to regain Monday's U.S. closing level of 150.00/05 yen. - Tokyo dealers said the Bank of Japan bought one to 1.5 -billion dlrs in Tokyo today and may also have purchased dollars -yesterday in the U.S. via the Federal Reserve. - Meanwhile, there were strong rumors in New York that the -Fed also bought a modest amount of dollars around 148.50 yen -today. Talk also circulated that the Bank of England purchased -a small amount of dollars for yen. - The Fed's last confirmed intervention was on January 28 -when it bought 50 mln dlrs in coordination with the Bank of -Japan. But on March 11 the Fed also was rumored to have -signalled displeasure with a dollar surge above 1.87 marks. - The authorities' actions appeared to back up the February -22 Paris pact between the U.S., Japan, West Germany, Britain, -France and Canada under which the nations agreed to cooperate -to foster exchange rate stability around prevailing levels. - But foreign exchange dealers were not overly impressed by -the authorities' intervention which they said can only soften -extreme moves in the market. - For one thing, some dealers believed that the Fed's -purchases were done on behalf of the Bank of Japan rather than -for the U.S. central bank's own account, suggesting a rather -watered-down American commitment to the currency accord. - The Bank of England's action also was thought to be -completed on behalf of the Japanese central bank, reinforcing -the market's view that Japan is the most resolute of the six -nations in its support of the currency pact. - "No-one doubts the Bank of Japan is serious. But the other -two central banks seem to be making more token gestures than -anything else," said Chris Bourdain of BankAmerica Corp. - "I'm not convinced the intervention was concerted," said -Earl Johnson of Harris Trust and Savings Bank in Chicago. -"It's a yen problem more than anything else." - Some dealers said a rising wave of trade protectionist -sentiment in the U.S. limits the extent to which the American -authorities can endorse a stronger dollar against the yen. - "The dollar's break below the key 150 yen level ties the -Treasury's hands behind its back. The U.S. cannot intervene on -its own account because of the strength of protectionism here," -said Albert Soria of Swiss Bank Corp. - Such comments reflect the view that the currency markets -are becoming increasingly politicized. Despite official -denials, some traders still feel the U.S. would countenance a -lower dollar to help trim the nation's trade deficit. - The majority of the 170 billion dlr merchandise trade -deficit in 1986 was with Japan. - Indeed U.S. Treasury secretary James Baker's comment on -Sunday that the February currency pact had not established -dollar targets was read by the market as a signal to sell the -U.S. currency and kicked off the latest retreat. - "The dollar still has more room on the downside against the -yen based on the frictions in trade and financial services. The -currency market is becoming very political," said Natsuo Okada -of Sumitomo Bank Ltd. - Okada expects the dollar to trade between 148 and 150 yen -this week but sees the chance of a drop to 140 yen by the end -of April or early May. - Even if West Germany and Japan succeed in stimulating their -economies, it may not be enough to solve structural economic -imbalances in the near future, dealers said. - "Even if Japan and West Germany do expand this year, it -won't be enough to help the trade situation much," said -Bourdain of BankAmerica, who also expects the dollar to drop to -148 yen in the next couple of days. - Reuter - - - -24-MAR-1987 16:17:58.20 - -usa - - - - - -RM V -f2475reute -u f BC-/U.S.-TO-SELL-12.8-BI 03-24 0066 - -U.S. TO SELL 12.8 BILLION DLRS IN BILLS - WASHINGTON, March 24 - The U.S. Treasury said it will sell -12.8 billion dlrs of three and six-month bills at its regular -auction next week. - The March 30 sale, to be evenly divided between the three -and six month issues, will result in a paydown of 1.2 billion -dlrs as maturing bills total 13.99 billion dlrs. - The bills will be issued April 2. - Reuter - - - -24-MAR-1987 16:22:32.09 - -usa - - - - - -F -f2482reute -r f BC-INLAND-STEEL-<IAD>-TO 03-24 0081 - -INLAND STEEL <IAD> TO BUILD NEW PLANT IN INDIANA - SOUTH BEND, Ind., March 24 - Inland Steel Industries and -Governor Robert Orr of Indiana said the new joint venture cold- -rolled steel plant between Inland Steel and Nippon Steel Corp -will be built on a site in St. Joseph County Indiana. - Inland Steel said yesterday that the joint venture, to be -named I/N Tek, will cost more than 400 mln dlrs and will employ -over 200 people by the time the companies complete the project -in 1990. - Reuter - - - -24-MAR-1987 16:22:41.79 -acq -usa - - - - - -F -f2483reute -b f BC-******EASTMAN-KODAK-C 03-24 0093 - -EASTMAN KODAK <EK> TO SELL HOLDINGS - ROCHESTER, N.Y., March 24 - Eastman Kodak Co said it plans -to sell its 2.3 pct holding in ICN Pharmaceuticals <ICN> and -part of its nine pct holdings in Viratek <VIRA>. - It said the purpose of the investments had been to lay the -groundwork for the creation of its Nucleic Acid Research -Institute. - Since that has been achieved, there is no longer any reason -to maintain the equity positions, Kodak said. - Kodak holds 470,000 sahres of ICN, currently trading at -about 18-3/4 and 700,000 of Viratek, trading at 44. - Reuter - - - -24-MAR-1987 16:23:12.76 - -usa -boesky - - - - -F -f2485reute -u f BC-GUINNESS 03-24 0094 - -GUINNESS SUES BOESKY IN FEDERAL COURT - NEW YORK, March 24 - <Guinness PLC> has joined investors -suing former Wall Street speculator Ivan Boesky, alleging it -was deceived into putting money into his one billion dlr -investment partnership in 1986. - Guinness, the largest limited partner in Ivan F. Boeksy and -Co. L.P., is the latest to file suit in federal court in -Manhattan against Boesky, court papers show. - About 40 other investors have also filed suit over similar -allegations, including that Boesky did not reveal his illegal -insider trading activities. - Guinness is charging it was induced to join in the Boesky -partnership through a prospectus that contained "material untrue -statements and omissions." - The suit also alleged that the Boesky Corporation, which -became a part in the formation of the investment partnership, -Ivan F. Boesky and Co., L.P., "had achieved its extraordinary -rates of return as a result of trading on inside information -and other violations of the securities laws." - In addition, the suit charged that Boesky and other -defendants unlawfully "schemed with and provided substantial -assistance to one another to evade the registration provisions" -of securities law. - Reuter - - - -24-MAR-1987 16:23:23.82 -acq -usacanada - - - - - -F E -f2486reute -r f BC-FIRM-REDUCES-SCEPTRE 03-24 0078 - -FIRM REDUCES SCEPTRE RESOURCES <SRL> HOLDINGS - WASHINGTON, March 24 - Montreal-based Noverco Inc told the -Securities and Exchange Commission it reduced its stake in -Sceptre Resources Ltd to 1,232,200 shares or 4.8 pct of the -total outstanding. - Noverco said it sold off 400,500 shares "to reduce the -investment of Noverco in Sceptre." - "Additional common shares of Sceptre may be sold or -purchased by Noverco, depending upon market conditions," Noverco -said. - Reuter - - - -24-MAR-1987 16:23:35.03 - - - - - - - -F -f2487reute -b f BC-******GENCORP-BOARD-W 03-24 0011 - -******GENCORP BOARD WITHDRAWS PROPOSALS TO STAGGER DIRECTORS TERMS -Blah blah blah. - - - - - -24-MAR-1987 16:26:21.04 -earn -canada - - - - - -E -f2496reute -d f BC-<ACKLANDS-LTD>-1ST-QT 03-24 0029 - -<ACKLANDS LTD> 1ST QTR FEB 28 NET - TORONTO, March 24 - - Shr three cts vs 11 cts - Net 126,000 vs 434,000 - Revs 84.0 mln vs 80.2 mln - Avg shrs 4,948,731 vs 3,870,511 - Reuter - - - -24-MAR-1987 16:30:25.13 -earn -usa - - - - - -F -f2511reute -d f BC-BULL-AND-BEAR-GROUP-A 03-24 0078 - -BULL AND BEAR GROUP A <BNBGA> CUTS FUND PAYOUTS - NEW YORK, March 24 - Bull and Bear Group A said it lowered -its monthly dividends on three of its funds. - It said it lowered its Tax Free Income Fund <BLTFX> to 10.3 -cts from 10.6 cts; its U.S. Government Guaranteed Securities -Fund <BBUSX> to 11.5 cts from 11.8 cts; and its High Yield Fund -<BULHX> to 14 cts from 14.2 cts. - All dividends are payable March 31 to shareholders of -record March 25, the company said. - Reuter - - - -24-MAR-1987 16:30:42.93 -crude -usa - - - - - -Y -f2513reute -r f BC-CALTEX-TO-RAISE-BAHRA 03-24 0107 - -CALTEX TO RAISE BAHRAIN OIL PRODUCT PRICES - NEW YORK, March 24 - Caltex Petroleum Corp said it will -raise -posted prices for naphtha and several grades of residual fuel -in Bahrain, effective March 25. - Caltex, a joint venture of Chevron Corp <CHV> and Texaco -INC <TX>, said its naphtha posting is up four cts a gallon to -43 cts. It said it is raising its marine diesel oil posting by -30 cts a barrel to 20.24 dlrs a barrel. - Light, medium, and heavy fuel oil postings are up 1.50 dlrs -a barrel, the company said. This will bring the light fuel oil -price to 16.90 dlrs, medium to 15.50 dlrs, and heavy to 14.60 -dlrs, the company said. - Reuter - - - -24-MAR-1987 16:31:01.12 -pet-chem -usa - - - - - -F -f2515reute -u f BC-CHARTER-CO-<QCHR>-TO 03-24 0093 - -CHARTER CO <QCHR> TO COMPLETE REORGANIZATION - JACKSONVILLE, Fla., March 24 - Charter Co, the huge -petrochemical concern in bankruptcy proceedings stemming from -hundreds of dioxin-related claims, said it and all of its -subsidiaries, except the Independent Petrochemical Corp, will -complete their reorganization on March 31. - It said that on that date, it will deposit with an escrow -agent 288.8 mln dlrs in cash, 66.7 mln dlrs in notes and 31 mln -shares of its common for distribution. - Company officials were not immediately available for -comment. - As previously reported, Charter settled dioxin-related -claims for about 1,200 individuals and the state of Missouri, -resolving claims against it and all subsidiaries except -Independent Petrochemical. - Charter said some of the settlements remain subject to -appeals and final court approvals and resolve claims against -charter and its subsidiaries except Independent Petrochemical. - It said about 500 individual claims against it and certain -of its units remain pending as disputed claims in bankruptcy -court. It said about 300 of these claims have been filed since -confirmation of the joint plan of reorganization. - Charter said its two creditors, an equity committee in its -bankruptcy proceedings and <American Financial Corp>, which -will own 50.5 pct of its common after the reorganization, have -waived the requirement that Charter resolve all dioxin-related -claims against it prior to completing its reorganization. - That requirement excludes claims against Independent -Petrochemical. Charter also said a plan for liquidation of -Independent has been approved by the bankruptcy court and will -be completed after March 31. - Earlier, Charter reported net income for the year of 153.2 -mln dlrs, which included a gain of 28.5 mln dlrs for -discontinued operations and 114.8 mln dlrs for the settlement -of claims in its reorganization proceedings. - In 1985, it reported earnings of 1,274,000 dlrs, which -included a loss of 36.3 mln dlrs for discontinued operations -and 29.4 mln dlrs for extraordinary items. - For the fourth quarter, it reported earnings of 118.8 mln -dlrs, including a gain of 28.6 mln dlrs for discontinued -operations and 90.5 mln dlrs mainly for claims settlements. In -the year-ago period, Charter reported a loss of 13 mln dlrs. - Reuter - - - -24-MAR-1987 16:32:07.68 -acq -usa - - - - - -F -f2518reute -r f BC-NASHUA-<NSH>-TO-PURCH 03-24 0083 - -NASHUA <NSH> TO PURCHASE PRIVATE DISC MAKER - NASHUA, N.H., March 24 - Nashua Corp said it signed a -letter of intent to purchase <Lin Data Corp>, a private -manufacturer of high-capacity rigid discs for storage of -computer data. - Under the terms of the letter, Nashua said it will acquire -all classes of Lin stock for 24 mln dlrs. In addition, it said -it will loan Lin 1,200,000 dlrs to support its operations. - The closing of the sale is set for the second quarter of -1987, the company said. - Reuter - - - -24-MAR-1987 16:34:49.02 -earn -usa - - - - - -F -f2522reute -r f BC-ALTRON-INC-<ALRN>-4TH 03-24 0072 - -ALTRON INC <ALRN> 4TH QTR JAN 3 - WILMINGTON, Mass, March 24 - - Shr loss 56 cts vs loss five cts - Net loss 1.9 mln vs loss 164,000 - revs 6.9 mln vs 5.4 mln - Year - Shr loss 1.15 dlrs vs profit 52 cts - Net loss 3.8 mln vs profit 1.7 mln - Revs 25.6 mln vs 29.8 mln - NOTE: 1987 net loss includes loss 6.5 mln dlrs for -nonrecurring reserve for closing costs of facility, writeoffs -and sales of real estate. - - Reuter - - - -24-MAR-1987 16:38:19.15 - -usa - - - - - -F -f2534reute -r f BC-COLLINS-FOODS-<CF>-MO 03-24 0077 - -COLLINS FOODS <CF> MOVES UP WARRANT CONVERSION - LOS ANGELES, March 24 - Collins Foods International Inc -said it moved up the conversion date for its warrants to -purchase common stock to April 24. - There are currently 2,160,000 warrants outstanding, the -company said. It said each warrant entitles the holder to buy -one Collins common share at 12.11 dlrs per share. - Collins also said the warrants were originally scheduled to -expire on December 15, 1988. - But the agreement under which the warrants were issued -permits the company to accelerate the date if the closing price -of its common stock equals or exceeds 21.78 dlrs per share for -10 consecutive trading days, the company said. - It also pointed out that the stock price closed at 22.75 -dlrs per share on March 23. - Reuter - - - -24-MAR-1987 16:38:34.38 -earnacq -usa - - - - - -F -f2535reute -u f BC-GENCORP-<GY>-PROPOSAL 03-24 0098 - -GENCORP <GY> PROPOSALS WITHDRAWN FROM MEETING - AKRON, Ohio, March 24 - GenCorp Inc said it withdrew from -consideration at its annual meeting on March 31 proposals aimed -at providing for a stock split and an increased dividend so -that it could focus its energies on responding to the takeover -offer made last week by a partnership of AFG Industries Inc -<AFG> and Wagner and Brown. - In addition to proposing an increase in the number of its -outstanding common shares, GenCorp had suggested the adoption -of a classified or "staggered" board and the elimination of -cumulative voting. - GenCorp said these proposals could "distract energy and -attention from the real task at hand -- to respond to the -tender offer in a manner which is in the best interests of the -company, its shareholders and its other constituencies." - GenCorp said the proposal to increase its outstanding -shares was made with the aim of declaring a stock split and a -dividend increase. - The other proposals, it said, would provide for greater -long-term stability and cohesiveness for the GenCorp board. - The company did not indicate when it might resubmit the -proposals for approval by its shareholders. - Reuter - - - -24-MAR-1987 16:39:39.76 - -usa - - - - - -Y -f2540reute -r f BC-WEEKLY-ELECTRIC-OUTPU 03-24 0073 - -WEEKLY ELECTRIC OUTPUT UP 2.4 PCT FROM 1986 - WASHINGTON, March 24 - U.S. power companies generated a net -47.47 billion kilowatt-hours of electrical energy in the week -ended March 21, up 2.4 pct from 46.36 billion a year earlier, -the Edison Electric Institute (EEI) said. - In its weekly report on electric output, the electric -utility trade association said electric output in the week -ended March 14 was 48.31 billion kilowatt-hours. - The EEI said power production in the 52 weeks ended March -21 was 2,557.44 billion kilowatt hours, up 2.1 pct from the -year-ago period. - Electric output so far this year was 602.26 billion -kilowatt hours, up 2.2 pct from 589.51 billion last year, the -EEI said. - Reuter - - - -24-MAR-1987 16:40:00.41 - -usa - - - - - -F -f2541reute -r f BC-MONOLITHIC-<MMIC>-TO 03-24 0096 - -MONOLITHIC <MMIC> TO DROP GATE ARRAY LINE - SANTA CLARA, Calif., March 24 - Monolithic Memories Inc -said it plans to discontinue marketing its gate array -integrated circuit product line and focus efforts on the market -for field-programmable products. - It said the current market dynamics will hinder -profitability in the gate array market for some time. - Monolithic also said it does not expect the move to have a -negative impact on earnings, adding, the company has estimated -that the gate array products would have contributed only one -pct of revenues in fiscal 1987. - Reuter - - - -24-MAR-1987 16:40:32.83 -crudegas - - - - - - -Y -f2543reute -u f BC-******API-SAYS-DISTIL 03-24 0015 - -******API SAYS DISTILLATE STOCKS OFF 4.07 MLN BBLS, GASOLINE OFF 2.69 MLN, CRUDE UP 8.53 MLN -Blah blah blah. - - - - - -24-MAR-1987 16:41:16.33 -earn -usa - - - - - -F -f2547reute -r f BC-VERMONT-FINANCIAL-SER 03-24 0038 - -VERMONT FINANCIAL SERVICES <VFSC> SETS PAYOUT - BRATTLEBORO, Vermont, March 24 - Vermont Financial Services -Corp said its board approved a regular 20 cts per share cash -dividend payable April 25 to shareholders of record March 26. - Reuter - - - -24-MAR-1987 16:41:51.89 -acq - - - - - - -F -f2551reute -f f BC-******RESORTS-INTERNA 03-24 0011 - -******RESORTS INTERNATIONAL GETS BUYOUT PROPOSAL FROM KSZ CO INC -Blah blah blah. - - - - - -24-MAR-1987 16:42:09.41 - -usa - - - - - -F -f2554reute -d f BC-VR-BUSINESS-BROKERS-E 03-24 0073 - -VR BUSINESS BROKERS EXPANDS OPERATIONS - BOSTON, March 24 - <VR Business Brokers> said it sold a -master franchise license to one of the largest independent -groups of management consultants in the Caribbean. - It said that under the master license the group will -operate under the name VR Caribbean Inc and will cover -countries of the Caribbean basin and Central America and Dade -County, Fla. - Terms of the sale were not disclosed. - Reuter - - - -24-MAR-1987 16:42:29.98 - -usa - - - - - -F -f2556reute -u f BC-CORRECTED---ATT-<T>-F 03-24 0112 - -CORRECTED - ATT <T> FORMS COMPUTER SALES GROUPS - NEW YORK, March 24 - American Telephone and Telegraph Co -said it formed a 600-member sales force dedicated exclusively -to its computers and other data systems products. - Separately, ATT denied reports that it plans to buy back a -large chunk of its stock. ATT's stock is up 1/4 points at -25-1/8 in heavy trading. - The company said it also created a separate 500-member team -that will educate the computer sales force and its other sales -groups on ATT's computer products. This group, ATT said, -reports directly to Vittorio Cassoni, senior vice president of -its computer unit. (Corrects sales support team size to 500) - -REUTER - - - -24-MAR-1987 16:44:02.04 -earn -usa - - - - - -F -f2558reute -s f BC-GREAT-ATLANTIC-AND-PA 03-24 0024 - -GREAT ATLANTIC AND PACIFIC TEA CO INC <GAP> DIV - NEW YORK, March 24 - - Qtly div 10 cts vs 10 cts prior - Payable May one - Record April 15 - Reuter - - - -24-MAR-1987 16:44:47.92 -acq -usa - - - - - -F -f2559reute -d f BC-GARTNER-GROUP-<GART> 03-24 0077 - -GARTNER GROUP <GART> ACQUIRES COMTEC PROGRAM - STAMFORD, Conn., March 24 - Gartner Group Inc said it -acquired sole ownership of the COMTEC Market Research Program. - Gartner said its wholly-owned subsidiary purchased the -interests of its former partners for an aggregate price of -1,125,000 plus a percentage of net sales proceeds on future -sales of certain products. - Prior to the acquisition, Gartner Group owned one-third in -the COMTEC partnership, it said. - Reuter - - - -24-MAR-1987 16:48:46.78 - -usa - - - - - -F -f2569reute -r f BC-U.S.-CAR-SALES-DOWN-3 03-24 0117 - -U.S. CAR SALES DOWN 3.9 PCT IN MID-MARCH - Detroit, March 24 - Sales of U.S.-made cars during -mid-March, the traditional start of the spring selling season, -dropped 3.9 pct behind last year's level, analysts say. - Automakers sold about 204,000 cars in the March 11-20 -selling period, 10,000 fewer than last year. Analysts said the -decline may auger poorly for the rest of the spring season. - Buyers shied away from the showrooms of American Motors -Corp <AMO>, the target of a 1.5 billion dlr takeover bid from -Chrysler Corp <C>. Analysts said consumers were anxious about -the whether Chrysler will retain some American Motors models, -causing a 62 pct drop in American Motors sales in mid-March. - Chrysler's mid-March sales fell 3.6 pct. - "During the spring selling season, you usually look for -some kind of seasonal uplift in sales. It doesn't look like -it's happening," said Joseph Philippi, analyst with E.F. Hutton -and Co. - "There may be less bloom to the spring selling season this -year than last," one auto company official conceded. - General Motors Corp <GM>, still working to regain consumer -interest in its cars, led the drop with a 14.8 pct decline. - Ford Motor Co's <F> sales increased 15.2 pct for the -period. But analysts said the rise compares to a 1986 period -for Ford, leaving it down 10 pct in two years. - "The total industry (mid-March sales) was slightly less -than expected," the company official said. - American Motors' decline caught analysts eye. "American -Motors took it on the chin--big," said Philippi. - Given the prospective takeover by Chrysler, "people might -be a little leary about going to (American Motors) dealers," he -said. - American Motors sold 790 domestic cars in the period, -meaning each of American Motors 1,050 dealers "is selling a car -about every other day," Philippi said. - Potential American Motors buyers are afraid their car -models "might disappear," he said. - Chrysler, in its purchase agreement with American Motors' -majority stockholder <Renault>, has agreed not to undercut -sales of American Motors' new Medallion and Premier cars, made -by Renault. - On a company by company basis, sales of U.S. made cars from -the March 11 to 20 period were--GM 105,438, down 14.8 pct, Ford -67,672, up 15.2 pct, Chrysler 30,909, down 3.6 pct, American -Motors 790, down 6.2 pct, American Honda 7,447 compared with -5,031, Nissan Motor Corp, 3,358, up 10.7 pct, Volkswagon U.S. -Inc 1,330, down 35 pct. - Reuter - - - -24-MAR-1987 16:54:19.43 -acq -usa - - - - - -F -f2583reute -u f BC-RESORTS-INT'L-<RT.A> 03-24 0079 - -RESORTS INT'L <RT.A> RECEIVES TAKEOVER OFFER - ATLANTIC CITY, N.J., March 24 - Resorts International Inc -said it received a proposal from <KSZ Co Inc> under which -holders of Resorts class B stock would receive 140 dlrs a share -in cash and one share of common stock in a new company to be -formed through the takeover. - Under the offer, Resorts said holders of its class A shares -would receive 15 dlrs a share in cash and three shares of -common stock in the new company. - Resorts said the offer from KSZ calls for a merger of -Resorts with RI Acquisition Co Inc, a newly formed Delaware -corporation. - Resorts said that prior to the merger, RI Acquisition would -be capitalized with about 100 mln dlrs of debt and about 220 -mln dlrs of equity. - It said 200 mln dlrs of the equity would be in the form of -special preferred stock. - The KSZ offer, Resorts said, indicates that KSZ has a -commitment from <M. Davies Cos> to buy all of the special -preferred stock. - Resorts said the offer will expire at 1700 EST on March 27. -It said it asked its investment advisor, Bear, Stearns and Co, -to advise its board on the offer. - Earlier this month, the estate of James M. Crosby and -certian members of his family agreed to sell their class B -shares to New York real estate tycoon Donald Trump for 135 dlrs -a share. The estate and family members hold 78 pct of the -752,297 class B shares outstanding. - Trump also agreed to pay 135 dlrs a share for the remaining -class B shares outstanding. - Resorts also has about 5,680,000 shares of outstanding -class A stock. These shares carry one one-hundredth the voting -power of the class B shares. - Trump's offer beat out a rival bid of 135 dlrs a share made -by Pratt Hotel Corp <PRAT>. - Resorts said that under the proposal made by KSZ, existing -class A and class B shareholders would control about 96 pct of -the outstanding common of the new company formed to acquire -Resorts. - Resorts said the new company, upon completion of the -merger, would hold the 220 mln dlrs of debt and that the -special preferred stock would immediately be converted into -exchangeable participating preferred of the new company. - This preferred, Resorts said, would pay a dividend based on -the net cash flows from the new company's Paradise Island -operations. - A Resorts spokesman said the KSZ offer was made in a -two-page letter and that Resorts could not comment on it -because it did not contain enough information. Resorts has -asked Bear, Sterns to obtain complete data, he said. - The spokesman said Resorts is not familiar with KSZ but -that it believes the company is controlled by Marvin Davis, the -Denver oilman. - Calls to Davis were referred to Lee Solters, who handles -public relations for Davis. Solters, said to be travelling, was -not immediately available for comment. - Donald Trump was also unavailable for comment, as was a -spokesman for the Crosby estate. - Reuter - - - -24-MAR-1987 16:56:59.34 -earn -usa - - - - - -A F RM -f2588reute -r f BC-CITICORP-<CCI>-SEES-D 03-24 0111 - -CITICORP <CCI> SEES DOUBLING IN RETAIL BANK NET - NEW YORK, March 24 - Citicorp expects net income in its -individual banking sector to top one billion dlrs by 1993, -compared with 462 mln dlrs in 1986, said Richard Braddock, head -of Citicorp's individual banking division. - "We can double our earnings over the next five to seven -years," he told a banking analysts meeting, adding that this -forecast may be on the conservative side. - He said that bank card operations and the New York branch -system would continue to turn in hefty profits but also picked -out other developing areas, such as U.S. mortgage and -international consumer, as major potential earners. - Braddock and his sector heads made the following more -specific predictions: - - Cost of funds and net credit loss levels in the U.S. -bankcard unit will taper off in coming years from 1986's -relatively inflated levels. - - Customer net revenue in the mortgage banking area will -rise to 464.7 mln dlrs in 1987 from 374.3 mln in 1986. - - The international consumer business will show 22 pct -compound annual growth in earnings between 1986 and 1992. - - Private banking earnings will hit 100 mln dlrs in 1987 -and top 200 mln dlrs in 1992. - Reuter - - - -24-MAR-1987 16:58:33.67 -earn -usa - - - - - -F -f2593reute -d f BC-WD-40-CO-<WDFC>-2ND-Q 03-24 0042 - -WD-40 CO <WDFC> 2ND QTR FEB 28 NET - SAN DIEGO, Calif., March 24 - - Shr 35 cts vs 40 cts - Net 2,642,000 vs 3,017,000 - Sales 19.1 mln vs 18.9 mln - Six Mths - Shr 69 cts vs 70 cts - Net 5,178,000 vs 5,299,000 - Sales 35.6 mln vs 33.8 mln - Reuter - - - -24-MAR-1987 16:59:02.01 - -usa - - -nasdaq - - -F -f2594reute -u f BC-NASD-TO-BEGIN-SEARCH 03-24 0105 - -NASD TO BEGIN SEARCH FOR NEW PRESIDENT - NEW YORK, March 24 - The National Association of Securities -Dealers, which will launch a search for a new president later -this week, will probably concentrate on candidates with an -extensive background in the financial markets, officials of the -organization said today. - Gordon Macklin, 58, who has served as president for 17 -years, today announced his decision to leave the organization -of 6,658 broker-dealers. Macklin will join Hambrecht and Quist -as chairman and co-chief executive officer. - Association chairman Joseph Hardiman will appoint a search -committee later this week. - The committee will have its first meeting as early as next -week. The new president is expected to be someone knowledgable -about the over-the-counter markets and committed to the concept -of self-regulation. - Macklin joined the association as president in 1970, -leaving a position at McDonald and Co. - The National Association of Securities Dealers Automated -Quotations System, which currently lists 5200 securities of -4400 companies, was ushered in 10 months after Macklin's -arrival. - Reuter - - - -24-MAR-1987 17:00:51.46 -trade -brazilusa - - - - - -C G L M T -f2599reute -d f AM-BRAZIL-COMPUTER 03-24 0136 - -BRAZIL COMPUTER MARKET TO REMAIN CLOSED-MINISTER - RIO DE JANEIRO, MARCH 24 - Brazilian Science and Technology -Minister Renato Archer said Brazil will keep its computer -market closed to foreign goods in order to give its own infant -industry time to develop. - "Every country establishes laws to protect its interests. -The United States closed their borders at a certain stage to -some foreign goods and therefore protected its industrial -development. Now it is time for Brazil to do likewise," Archer -said at the opening of a national software conference. - After several meetings, Brazil and the U.S. Have made no -major progress in their computer row, which they have been -trying to resolve for the past 18 months. - The Reagan administration has objected to Brazil protecting -its computer industry from imports. - Reuter - - - -24-MAR-1987 17:02:09.20 - -usa - - - - - -F -f2603reute -d f BC-METALBANC-IN-OFFERING 03-24 0053 - -METALBANC IN OFFERING - MIAMI, March 24 - Metalbanc Corp said signed a letter of -intent for a proposed public offering of one mln units, -consisting of four shares of common stock and stock purchase -warrants for two additional shares. - The units are expected to be sold at between five dlrs and -6.50 dlrs per unit. - Reuter - - - -24-MAR-1987 17:03:05.68 -earn -usa - - - - - -F -f2608reute -d f BC-NORTHERN-INDIANA-PUBL 03-24 0071 - -NORTHERN INDIANA PUBLIC SVC <NI> AGAIN OMITS DIV - HAMMIND, Ind., March 24 - Northern Indiana Public Service -Company said it again omitted its quarterly common stock -dividend which would have been payable in May. - NIPSCO said it has not paid a qtly dividend since December -1985 following an adverse decision by the Indiana Supreme Court -denying amortization of about 191 mln dlrs NIPSCO invested in -its Bailly N-1 project. - Reuter - - - -24-MAR-1987 17:03:18.88 -money-fxdlr - - - - - - -A RM -f2610reute -f f BC-******FED'S-JOHNSON-S 03-24 0013 - -******FED'S JOHNSON SAYS DOLLAR STABILIZED AFTER FED TOOK APPROPRIATE ACTION -Blah blah blah. - - - - - -24-MAR-1987 17:05:30.74 -money-fxtrade -usajapan -volcker - - - - -A RM -f2612reute -r f BC-FED-CHAIRMAN-VOLCKER 03-24 0108 - -FED CHAIRMAN VOLCKER SAYS BANK PROPOSALS A WORRY - WASHINGTON, March 24 - The chairman of the Federal Reserve -Board, Paul Volcker, has written to the chairman of the House -Banking Committee to raise concerns about legislative proposals -scheduled for consideration Wednesday. - Volcker told committee chairman Fernand St. Germain a -proposal to deny primary dealer status to firms from countries -that do not grant U.S. firms equal access to their government -debt markets might invite retaliation against U.S. firms -abroad. - He added, "even Japan, against whom this proposal seems to -be particularly directed," has started opening its markets. - In his letter, made available at the Treasury, Volcker also -said a proposal to ease debt problems of developing countries -by setting up a public facility to buy their debts owed to -commercial banks, was a problem. - "I believe that the prospect of debt relief would undermine -the difficult internal efforts of the borrowing countries to -achieve the structural reform that is needed regardless of the -policies that are followed on servicing external debt," Volcker -said. - It might also cause private lenders to become reluctant to -extend more credit to the borrowing countries, he said. - Volcker said he endorsed comments by Treasury Secretary -James Baker "about the inappropriateness of using public -resources for purchasing private commercial bank debt, which we -both see as an inherent aspect of the proposed international -debt facility." - He also said a proposal for establishing formal procedures -for international negotiations on currency exchange rates "is -unrealistic and could well have damaging effects." - "For example, the bill's directive to intitiate negotiations -in order to achieve a competitive exchange rate for the dollar --- a matter upon which there can be considerable difference -among analysts -- runs the risk of building up potentially -destabilizing market expectations," Volcker said. - He recommended "we should not lock ourselves into formalized -procedures for international negotiations" on exchange rates but -instead use other, more flexible means like the recent mmeting -in Paris between U.S. treasury and central bank representatives -and those of major trade allies. - Reuter - - - -24-MAR-1987 17:08:30.83 -earn -usa - - - - - -F -f2615reute -s f BC-BORMAN'S-INC-<BRF>-DE 03-24 0024 - -BORMAN'S INC <BRF> DECLARES QTLY DIVIDEND - DETROIT, Mich., March 24 - - Qtly div five cts vs five cts prior - Pay June 15 - Record May 18 - Reuter - - - -24-MAR-1987 17:08:39.15 - -usa - - - - - -F -f2616reute -r f BC-INTERLEUKIN-2-<ILTO> 03-24 0057 - -INTERLEUKIN-2 <ILTO> DETAILS WARRANT CONVERSION - WASHINGTON, March 24 - Interleukin-2 Inc said the -registration of warrants became effective March 20 and that 3.5 -mln warrants will be convertible into 1.75 mln shares of the -company's common stock, giving the company a maximum of 2.4 mln -dlrs. - The warrants must be exercised by June 22. - Reuter - - - -24-MAR-1987 17:10:19.66 -graincornoilseedsoybean -usa - - - - - -C G -f2618reute -u f BC-/U.S.-CORN-ACREAGE-SE 03-24 0134 - -U.S. CORN ACREAGE SEEN NEAR RECORD LOW - by Maggie McNeil, Reuters - WASHINGTON, March 24 - U.S. corn acreage this year is -likely to drop to the lowest level since the unsurpassed -acreage reductions of the 1983 PIK year and could rank as one -of the lowest corn plantings in the United States in sixty -years, Agriculture Department officials said. - USDA releases its official plantings report on March 31. -Agriculture Department analysts said next week's figures will -likely show a sharp drop in acreage to as low as 65 mln acres, -down 22 pct from last year's plantings of 83.3 mln acres. - Assuming an 18 mln acre drop in plantings, U.S. corn -production will also decrease significantly. Analysts said 1987 -corn production could drop by over one billion bushels to -around seven billion bushels. - Expected signup of up to 90 pct in the 1987 feed grains -program, along with 1.9 mln acres enrolled in the conservation -program, will cause acreage to plummet, Department feedgrain -analysts said. - "There's no question that there will be a sharp decrease in -corn acreage," one said. "It's difficult for any farmer to not -go along with the program this year." - Soybean acreage is also expected to decline this year but -at a much slower rate of around four pct, USDA analysts said. - Soybean plantings could drop to 59 mln acres or below, they -said, compared to last year's level of 61.5 mln acres. - If analysts' unofficial estimates prove correct then the -drop in u.s. corn acreage will be the largest since 1983 when -farmers idled 22 mln acres in the Payment-In-Kind program. - Farmers planted only around 60 mln acres of corn in 1983. A -severe drought that summer in major producing states caused -yields to tumble and final crop production to total only 4.2 -billion bushels. - Given normal weather conditions this year, USDA analysts -said the 1987 corn crop could end up around seven billion -bushels, down from last year's crop of 8.3 billion bushels. - "This kind of acreage reduction will mean a significant -reduction in production," an analyst said. - A crop of seven billion bushels is close to the annual U.S. -corn usage, so surplus stocks, while not decreasing, would not -increase significantly, a specialist said. - High producing corn belt states are expected to show the -greatest acreage reductions, based upon historical -participation in government programs, analysts said. - In contrast, soybean acreage is likely to be cut the most -in marginal producing areas of the southeast and the western -corn belt, a USDA soybean analyst said. - "Soybean acreage in the eastern corn belt will not budge," -he said. Neither does he expect any significant acreage cuts in -higher-producing delta areas. - Soybean production could drop fractionally from last year's -2.0 billion bushels to 1.8 to 1.9 billion, he said. - U.S. soybean acreage, after soaring to 71.4 mln acres in -1979 from only 52 mln acres five years prior to that, has -steadily declined in the 1980's. - U.S. corn acreage, with the exception of 1983, has been in -the low to mid 80-mln acre range for the past 10 years. The -highest corn plantings reported in the 60 years that USDA has -kept such records was in 1932 when farmers planted 113 mln -acres and obtained average yields of 26.5 bushels per acre. - Last year U.S. farmers obtained record corn yields -averaging 119.3 bushels per acre. - "We have absolutely no trouble producing an eight billion -bushel crop on only 80 mln acres or so," an analyst said. - Corn acreage will probably level at around 65 mln acres as -long as government program provisions remain the same, analysts -said. - Currently farmers enrolling in the program are required to -set aside 20 pct of their base acreage and then are eligible -for payments of two dlrs per bushel by idling an additional 15 -pct of their acreage. - "To get to the PIK level of 60 mln acres, we would have to -provide more incentives," an analyst said. - Reuter - - - -24-MAR-1987 17:10:32.59 -acq -usa - - - - - -F -f2620reute -r f BC-KIRSCHNER-<KMDC>-COMP 03-24 0065 - -KIRSCHNER <KMDC> COMPLETES PURCHASE - TIMONIUM, Md., March 24 - Kirschner Medical corp said it -completed the acquisition of Minnesota Mining and -Manufacturing's <MMM> orthopedic metal implant line division. - The acquisition price is 12.0 mln dlrs in cash, a six mln -dlr three year note and 100,000 shares of Kirschner common -stock. - The division had sales of 11.3 mln dlrs in 1986. - Reuter - - - -24-MAR-1987 17:10:45.15 -tradehogcarcasslivestock -usaussr - - - - - -C G L -f2621reute -r f BC-U.S.-SENATORS-SEEK-TO 03-24 0126 - -U.S. SENATORS SEEK TO EXPAND USDA EXPORT BONUS - WASHINGTON, March 24 - Leading U.S. farm state senators are -seeking to insert into the Senate's omnibus trade bill a -provision that would broaden eligibility requirements under the -U.S. Agriculture Department's export enhancement program, EEP, -to include traditional buyers of U.S. farm products, including -the Soviet Union, Senate staff said. - Under existing criteria, USDA can offer EEP subsidies to -recoup export markets lost to competing nations' unfair trading -practices. - Senate Agriculture Committee Chairman Patrick Leahy (D-Vt.) -is leading a group of farm state senators in an effort to -broaden the criteria in such a way as to enable Moscow to be -eligible for the subsidies, sources said. - The senators -- including Senate Finance Committee Chairman -Lloyd Bentsen (D-Tex.), Max Baucus (D-Mont.), David Pryor -(D-Ark.), John Melcher (D-Mont.) and Thad Cochran (R-Miss.) -- -also may fold into the trade bill a measure to shield pork -producers and processors from Canadian imports. - The measure, sponsored by Sen. Charles Grassley (R-Iowa), -would clarify the definition of "industry" in determining whether -or not imports were causing injury to U.S. producers. - Grassley's bill stems from a 1985 decision by the -International Trade Commission that imports from Canada of live -swine -- but not fresh, chilled and frozen pork -- were harming -U.S. producers. - The bill's proponents have argued Canada has simply -replaced shipments of live hogs with fresh pork. - Reuter - - - -24-MAR-1987 17:11:15.09 -money-fxdlr -usa - - - - - -A RM -f2623reute -b f BC-/FED'S-JOHNSON-SAYS-F 03-24 0088 - -FED'S JOHNSON SAYS FED ACTED TO STABILIZE DOLLAR - WASHINGTON, March 24 - Federal Reserve Board Vice Chairman -Manuel Johnson said the dollar has stabilized against other -currencies after action taken by the Fed. - "We have taken the appropriate action and the dollar has -stabilized," Johnson said after testifying to a House Banking -subcommittee. - He did not elaborate on the nature of the action nor when -it was taken, but said that it was in the spirit of the -agreement reached by six industrial nations in Paris recently. - Johnson said the dollar's decline against other currencies -such as the Japanese yen has been gradual. - Since the accord by the United States, Britain, West -Germany, Japan, France and Canada, foreign exchange markets -have been closely watching for indications of intervention by -central banks to determine the committment by those nations to -their agreement. - The nations agreed that currency exchange rates were at -about the correct levels when the pact was signed earlier this -year. - Reuter - - - -24-MAR-1987 17:11:23.20 - -usa - - - - - -F -f2624reute -r f BC-XOMA-<XOMA>-FILES-FOR 03-24 0098 - -XOMA <XOMA> FILES FOR PUBLIC OFFERING - BERKELEY, Calif., March 24 - Xoma Corp said it filed a -registration statement with the Securities and Exchange -Commission covering a proposed public offering of 1.3 mln -common shares. - Xoma, a biotechnology company which produces monoclonal -antibody-based products to treat some forms of cancer, said -proceeds will be used to fund research and product development, -human clinical trials and the expansion of manufacturing -capacity and working capital. - It said Dillon Read and Co Inc and Alex Brown and Sons Inc -will manage the underwriting. - Reuter - - - -24-MAR-1987 17:12:51.35 - -usa - - - - - -F -f2625reute -r f BC-REPUBLIC-AMERICAN-<RA 03-24 0088 - -REPUBLIC AMERICAN <RAWC> PLANS EXCHANGE OFFER - ENCINO, Calif., March 24 - Republic American Corp said it -began an offer to exchange a new issue of 9-1/2 pct -subordinated debentures due 2002 for a portion of its common -stock. - Republic said it is offering to acquire its stock at a rate -of 17.50 dlrs principal amount of debentures per common share. - The offering, which expires on April 27 unless extended, is -for up to 2,250,000 shares, with the company reserving the -right to accept three mln shares, Republic also said. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-010.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-010.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-010.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-010.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2002 +0,0 @@ - - -26-MAR-1987 12:12:57.76 - -usa - - - - - -F -f1727reute -d f BC-AMOCO-<AN>-UNIT-EXPAN 03-26 0094 - -AMOCO <AN> UNIT EXPANDS CARPET YARN PLANT - CHICAGO, March 26 - Amoco Corp said its Amoco Fabrics Co -will expand the capacity of its polypropylene carpet face yarn -facility by 55 pct to support its successful penetration of the -commercial and residential carpet markets. - It said the expansion of the plant in Andalusia, Ala., will -bring Amoco's total face yarn capacity to nearly 140 mln pounds -a year, with Andalusia capacity at 85 mln pounds. - Amoco Fabrics is part of Amoco Chemicals Co, the chemical -manufacturing and marketing subsidiary of Amoco Corp. - Reuter - - - -26-MAR-1987 12:13:39.63 -earn -usa - - - - - -E F -f1730reute -d f BC-island-telephone 03-26 0038 - -ISLAND TELEPHONE SHARE SPLIT APPROVED - CHARLOTTETOWN, Prince Edward Island, March 26 - <Island -Telephone Co Ltd> said the previously announced two-for-one -common share split was approved by shareholders at the annual -meeting. - Reuter - - - -26-MAR-1987 12:15:35.31 - -usaukswitzerlandbelgiumluxembourg - - - - - -F -f1735reute -r f BC-BIOGEN-<BGNF>-GETS-PA 03-26 0103 - -BIOGEN <BGNF> GETS PATENT FROM EUROPEAN OFFICE - CAMBRIDGE, Mass., March 26 - Biogen Inc said the European -Patent Office granted it a patent covering certain proteins -used to produce a hepatitis B vaccine through genetic -engineering techniques. - Robert Gottlieb, Biogen spokesman, said the company has -licensed the vaccine on a nonexclusive basis to <Wellcome PLC>, -the British pharmaceutical firm, and is discussing licensing -with other companies. - Biogen said the patent gives it the right to exclude others -from marketing hepatitis B vaccine in the 11 member countries -of the European Patent Convention. - Gottlieb said the company has also filed a patent in other -markets, including the U.S. The vaccine is in clinical tests. - Patents in the biotechnology field are particularly -important as the company with an exclusive patent can reap -large rewards. Recently many of the products of genetic -engineering have become the target of patent lawsuits. - Merck and Co Inc <MRK> already sells a genetically -engineered hepatitis B vaccine in the U.S. called Recombivax -HB. A subsidiary of <SmithKline Beckman Corp>, SmithKline -Biologicals, based in Belgium, is selling a hepatitis B -vaccine, called Engerix-B, in Belgium. - A SmithKline spokesman said the vaccine has also been -formally approved in Switzerland and Luxembourg and has been -authorized for market in a number of Far East countries. - Hepatitis B is a serious liver infection common in many -parts of Africa and southeast Asia where about five pct to 15 -pct of the population carry the virus. In the U.S. about -200,000 new cases occur each year. - Last December the European Patent Ofice rejected Biogen's -patent for alpha-interferon, which Biogen said it will appeal -once it receives a formal written opinion from the office. - - Reuter - - - -26-MAR-1987 12:17:26.37 - -usa - - - - - -C -f1745reute -d f BC-KEY-HOUSE-MEMBER-OPPO 03-26 0113 - -KEY U.S. HOUSE MEMBER OPPOSES CFTC USER PLAN - WASHINGTON, March 26 - A key U.S. House member said he -opposed a Reagan administration plan to shift the cost of -surveillance of futures exchanges to the private sector. - "I just think user fees are the wrong way to attack a -problem of this sort," said Rep. Ed Jones (D-Tenn.), chairman -of the House Agriculture Subcommittee on Conservation, Credit -and Rural Development. - The White House budget office has asked the Commodity -Futures Trading Commission, CFTC, to draw up a plan for -transferring the three-mln dlr cost of monitoring futures -trading to either exchanges, futures commission merchants or -users of the markets. - CFTC Commissioner William Seale said the proposal was a -move in the wrong direction. "I would prefer to see -(surveillance) paid for through the appropriations process -rather than through taxation of market participants," he said. - CFTC Chairman Susan Phillips told the panel the commission -was preparing the proposal, due to be completed April 15, at -the request of the Office of Management and Budget. - Reuter - - - -26-MAR-1987 12:19:18.42 -tradeacq -ukjapan -thatcher - - - - -RM -f1749reute -u f BC-U.K.-GROWING-IMPATIEN 03-26 0119 - -U.K. GROWING IMPATIENT WITH JAPAN - THATCHER - LONDON, March 26 - Prime Minister Margaret Thatcher said -the U.K. Was growing more impatient with Japanese trade -barriers and warned that it would soon have new powers against -countries not offering reciprocal access to their markets. - She told Parliament that the bid by the U.K.'s Cable and -Wireless Plc <CAWL.L> to enter the Japanese telecommunications -market was being regarded by her government as a test case. - "I wrote to the prime minister of Japan, Mr Nakasone, on the -fourth of March to express our interest on the Cable and -Wireless bid. I have not yet had a reply. We see this as a test -on how open the Japanese market really is," Thatcher said. - Thatcher told Parliament that "shortly ... We shall have -more powers than we have now, when, for example the powers -under the Financial Services Act and the Banking Act become -available, then we shall be able to take action in cases where -other countries do not offer the same full access to financial -services as we do." - Cable and Wireless is seeking a stake in the proposed -Japanese telecommunications rival to Kokusai Denshin Denwa. - But the Japanese minister for post and telecommunications -was reported as saying that he opposed Cable and Wireless -having a managerial role in the new company. - REUTER - - - -26-MAR-1987 12:20:34.41 - -usa - - - - - -F -f1755reute -u f BC-GENCORP<GY>-TO-BUILD 03-26 0107 - -GENCORP<GY> TO BUILD 50 MLN DLR PLANT IN INDIANA - AKRON, Ohio, March 26 - GenCorp said it plans to build a 50 -mln dlr manufacturing facility in Shelbyville, Ind. - The company said it will begin building the plant, where it -will produce reinforced plastic components for cars and trucks, -this May with an expected completion date in mid-1988. - GenCorp said its DiversiTech General unit will operate the -plant through its reinforced plastics division. - "We believe the use of reinforced plastics in cars and -trucks will grow," A. William Reynolds, GenCorp chairman and -chief executive officer said as the reason for building the -plant. - "Our investment in the Shelbyville plant reflects the -confidence we have in the future of this product line," -Reynolds added. - GenCorp said the plant will create 500 new jobs. - Reuter - - - -26-MAR-1987 12:21:18.81 - -usa - - - - - -F -f1761reute -r f BC-JONES-INTERNATIONAL-R 03-26 0090 - -JONES INTERNATIONAL REALIGNS SUBSIDIARIES - ENGLEWOOD, Colo., March 26 - <Jones International Ltd> said -it realigned several subsidiaries to accommodate corporate -strategy. - Jones said ultimate control of the subsidiaries will remain -unchanged under the realignment. - Jones said it will exchange approximately 97 pct of its -holdings of the common stock of Jones Intercable Inc <JOIN> for -Class A common stock of Jones Spacelink Ltd <SPLK>. The company -said the move will enable Spacelink to elect 75 pct of -Intercable's directors. - In addition, Jones said 60 pct of the common stock of its -subsidiary, <The Jones Group Ltd>, will be exchanged for Class -A common stock of Jones Spacelink Ltd. - Following the exchange, Jones International's ownership of -Spacelink Class A voting stock will increase to approximately -89 pct. - Jones International said it will retain approximately two -pct of the common stock and approximately four pct of the Class -A common stock of Jones Intercable as well as the remaining 40 -pct of the Jones Group stock. - Reuter - - - -26-MAR-1987 12:21:42.19 -earn -usa - - - - - -F -f1764reute -d f BC-QUESTECH-INC-<QTEC>-Y 03-26 0062 - -QUESTECH INC <QTEC> YEAR NET - MCLEAN, Va., March 26 - - Shr loss nil vs profit 19 cts - Net loss 3,175 vs profit 284,945 - Revs 13.6 mln vs 10.6 mln - Year - Shr profit 13 cts vs profit 56 cts - Net profit 195,202 vs profit 857,006 - Revs 47.5 mln vs 42.9 mln - Note: Current year net includes charge against discontinued -operations of 1,060,848 dlrs. - Reuter - - - -26-MAR-1987 12:22:10.06 - -usa - - - - - -RM -f1766reute -u f BC-ASLK-CGER-FINANCE-ISS 03-26 0094 - -ASLK-CGER FINANCE ISSUES 10 BILLION YEN BOND - LONDON, March 26 - ASLK-CGER Finance NV is issuing a 10 -billion yen eurobond due April 10, 1994 with a 5-1/2 pct coupon -and priced at 101-1/2 pct, lead manager IBJ International Ltd -said. - The bonds are guaranteed by Belgian savings bank ASLK-CGER -Bank and have all been pre-placed. They will be issued in -denominations of one mln yen and listed in Luxembourg. - Fees comprise 5/8 pct for management and underwriting -combined, with a 1/8 pct praecipuum, and 1-1/4 pct for selling. -Pay date is April 10. - REUTER - - - -26-MAR-1987 12:23:03.99 - - - - - - - -F -f1768reute -f f BC-******UAW-STRIKES-GM 03-26 0009 - -******UAW STRIKES GM TRUCK AND BUS PLANT AT PONTIAC, MICH -Blah blah blah. - - - - - -26-MAR-1987 12:26:06.29 -crudenat-gas -canada - - - - - -E Y -f1773reute -u f BC-CANADA-OIL-EXPORTS-RI 03-26 0077 - -CANADA OIL EXPORTS RISE 20 PCT IN 1986 - OTTAWA, March 26 - Canadian oil exports rose 20 pct in 1986 -over the previous year to 33.96 mln cubic meters, while oil -imports soared 25.2 pct to 20.58 mln cubic meters, Statistics -Canada said. - Production, meanwhile, was unchanged from the previous year -at 91.09 mln cubic feet. - Natural gas exports plunged 19.4 pct to 21.09 billion cubic -meters, while Canadian sales slipped 4.1 pct to 48.09 billion -cubic meters. - The federal agency said that in December oil production -fell 4.0 pct to 7.73 mln cubic meters, while exports rose 5.2 -pct to 2.84 mln cubic meters and imports rose 12.3 pct to 2.1 -mln cubic meters. - Natural gas exports fell 16.3 pct in the month 2.51 billion -cubic meters and Canadian sales eased 10.2 pct to 5.25 billion -cubic meters. - Reuter - - - -26-MAR-1987 12:26:42.65 - -usa - - - - - -F -f1775reute -u f BC-PRU-BACHE-ANALYST-REA 03-26 0138 - -PRU BACHE ANALYST REAFFIRMS BULLISH MARKET CALL - NEW YORK, March 26 - Joseph Feshbach, chief market analyst -at Prudential-Bache Securities, said the stock market is poised -to climb above Dow Jones Industrial 2500 level by June. - The Dow average is around 2380 today. - "Liquidity is the biggest fundamental factor in the market -and money coming out of fixed income funds and flowing into -equities will propel the market sharply higher," Feshbach said, -noting that the market's peak will occur in June. - Feshbach said that in early January he predicted that the -Dow Jones Industrial average, the most closely watched market -barometer, would reach the 2400 level by April and the 2500 -level by June. He said he is now even more optimistic, saying -"the market is ready for a 150 point rise from current levels -any day now." - Reuter - - - -26-MAR-1987 12:27:23.14 - -uk - - - - - -RM -f1779reute -u f BC-LLOYD'S-APPOINTS-NEW 03-26 0117 - -LLOYD'S APPOINTS NEW OUTSIDE COUNCIL MEMBERS - LONDON, March 26 - Four new outsiders were appointed to the -policy-making Council of the Lloyd's of London insurance -market, shifting the voting balance on the Council away from -Lloyd's professionals, Lloyd's said. - It said in a statement the appointments of the new members, -none of them previously involved in the insurance market, were -made to comply with the core recommendation in the Neill report -into regulation at Lloyd's, which was published on January 22. - The recommendation, one of 70 to improve investor -protection in the Lloyd's market, was to reduce the number of -elected working members, Lloyd's professionals, from 16 to 12. - Simultaneously, the number of outsiders would be increased -by four while the number of external Council members, usually -Lloyd's investors without an active role in the market, would -remain unchanged at eight. - Lloyd's said the four newly-appointed Council members were -barrister Elizabeth Mary Freeman, Sir Maurice Hodgson, -non-executive chairman of British Home Stores Plc, Lloyd's Bank -Plc chairman Sir Jeremy Morse, and Brian Pomeroy, an accountant -who sat on the three-member Neill enquiry panel. - They replace the four Lloyd's professionals who resigned on -April 4 after Lloyd's agreed to implement the recommendation. - REUTER - - - -26-MAR-1987 12:27:45.45 -coffeecocoasugar - - - -nycsce - - -C T -f1783reute -d f BC-COFFEE,-SUGAR-AND-COC 03-26 0126 - -COFFEE, SUGAR AND COCOA EXCHANGE NAMES CHAIRMAN - NEW YORK, March 26 - The New York Coffee, Sugar and Cocoa -Exchange (CSCE) elected former first vice chairman Gerald -Clancy to a two-year term as chairman of the board of managers, -replacing previous chairman Howard Katz. - Katz, chairman since 1985, will remain a board member. - Clancy currently serves on the Exchange board of managers -as chairman of its appeals, executive, pension and political -action committees. - The CSCE also elected Charles Nastro, executive vice -president of Shearson Lehman Bros, as first vice chairman. -Anthony Maccia, vice president of Woodhouse, Drake and Carey, -was named second vice chairman, and Clifford Evans, president -of Demico Futures, was elected treasurer. - Reuter - - - -26-MAR-1987 12:28:11.69 -veg-oil -belgium - -ec - - - -C G -f1785reute -u f BC-MOST-EC-STATES-SAID-T 03-26 0121 - -MOST EC STATES SAID TO BE AGAINST OILS/FATS TAX - BRUSSELS, March 26 - A majority of European Community (EC) -member states are either against or have strong reservations -over a tax on both imported and domestically-produced oils and -fats proposed by the European Commission, senior diplomats -said. - They said a special committee of agricultural experts from -EC member states had voiced strong objections over the measure -during a meeting charged with preparing the ground for the -annual EC farm price-fixing which begins next Monday. - They added that only France and Italy had indicated they -would support the Commission proposal which would lead to a tax -initially of 330 Ecus per tonne during the 1987/88 price round. - Reuter - - - -26-MAR-1987 12:30:59.51 - -uk - - - - - -RM -f1797reute -u f BC-ROWNTREE-SEEKS-200-ML 03-26 0110 - -ROWNTREE SEEKS 200 MLN STG FACILITY, CP PROGRAM - LONDON, March 26 - Rowntree Mackintosh Plc is seeking a 200 -mln stg, five year multiple option facility, of which 150 mln -stg will be committed, and a 200 mln stg commercial paper -program, County Natwest Capital Markets Ltd said as arranger. - The facility includes options for sterling acceptances, -multi-currency advances, sterling and dollar notes via tender -panels and there is also a sterling swingline. - The committed portion carries a facility fee of five basis -points and a margin of ten. A 2-1/2 basis point utilisation -fee is payable on drawings of more than half the committed -portion. - The 200 mln stg commercial paper program will include a -dollar option, County Natwest said. - A County Natwest official said the facility, launched -earlier this week, seemed to be progressing well in -syndication. - REUTER - - - -26-MAR-1987 12:33:25.04 - -usa - - - - - -F -f1813reute -u f BC-TALKING-POINT/CONRAIL 03-26 0109 - -TALKING POINT/CONRAIL <CRR> - By Cal Mankowski, Reuters - NEW YORK, March 26 - Private investors eagerly snapped up -shares of Consolidated Rail Corp, the biggest initial stock -offering in U.S. history, but some analysts warned they could -be in a for a bumpy ride at least in the near term. - Analyst James Voytko of PaineWebber Group Inc believes some -investors who bought at the offering price of 28 dlrs will be -tempted to sell. The shares climbed 3-3/8 to 31-3/8 by midday. -Voytko said profit-taking pressure could become severe at the -35 dlr level. Others say Conrail, a combination of previously -bankrupt railroads, has good long term potential. - "Conrail is in the best position to weather the current -tremendous price competition in the transportation industry in -general," said Drew Robertson, analyst at Atlantic Systems Inc, -a research firm. - "It will survive and do damn well," said another analyst -who declined to be identified. He noted that Conrail's freight -trains serve heavy industry including steel and autos in major -U.S. cities in the northeast U.S. and midwest. - Robertson noted that Conrail's traffic is less dependent on -coal than other railroads based in the east. He expects Conrail -to earn 2.85 dlrs per share in 1987. - Voytko of PaineWebber sees another problem six months down -the road when more than 10 mln Conrail shares will be -distributed to current and former employees. He believes many -of these indivdiuals will be inclined to sell the stock. - Robertson says it's hard to determine the psychology of the -average employe, but even if a lot of stock is sold, it would -would not hit the market as one big block. He doubts it would -create a big downward push on the price. - "It's hard to call," said the analyst who requested -anonymity. In some cases employe loyalty may motivate -individuals to keep their shares, he said. - Steven Lewins, analyst for Citicorp Investment Management, -believes the key to Conrail's long term outlook is how it is -able to invest surplus cash. He expects Conrail to earn 3.00 -dlrs per share this year, flat in comparison with 1986, but by -1991 the picture could change dramatically if money not needed -for rail operations is invested wisely. - By 1991, earnings could reach 4.30 dlrs per share, Lewins -said, factoring in reinvestment of free cash flow at -conservative rates. - He believes motor freight will be one area of -diversification Conrail will explore. - Elizabeth Dole, U.S. Secretary of Transportation, whose -department was responsible for the sale of Conrail, noted that -Conrail is required to reinvest in its rail system and cannot -defer necessary maintenance. - For the historic offering of Conrail shares, Dole visited -the New York Stock Exchange and was photographed on the floor -wearing a locomotive engineer's cap, which she presented to -Stanley Crane, Conrail chairman and chief executive. - The U.S. government is expected to receive about 1.88 -billion dlrs for Conrail after factoring in underwriting fees -and other adjustments. - The possibility of a recession at some time in the next -five years is another issue troubling some investors. - Lewins says revenue-ton-miles, which he believes will climb -from 68.7 mln miles last year to 69.5 mln this year and 70.5 -mln in 1988, will grow to 71.5 mln in 1991, but in a recession -year, perhaps 1989, the figure could dip to 64.2 mln. - On the revenue side, he believes revenue per ton-mile will -be 4.7 cts in 1991, little changed from present levels and -exactly the same as in 1981. - "Their basic business isn't going anywhere," he says, -explaining why emphasizes investment of cash flow. - Voytko thinks Conrail can remain profitable in a recession -year. He points out his firm, PaineWebber, is not forecasting a -recession in any specific year, but as an example a 1990 -recession of modest degree could knock earnings down to 2.20 -dlrs per share. He estimated 3.00 dlrs per share this year and -3.35 dlrs next year. His 1988 figure reflects mostly a lowering -of the tax rate to 34 pct from 40 pct this year. - Voytko believes the Conrail shares merit purchase at the 26 -dlr level. - Goldman, Sachs and Co was lead manager for the offering. A -total of 148 firms took part in the U.S. syndicate. - Reuter - - - -26-MAR-1987 12:33:57.01 -acq -usa - - - - - -F -f1818reute -r f BC-GOULD<GLD>-COMPLETES 03-26 0077 - -GOULD<GLD> COMPLETES SALE OF FRENCH BATTERY UNIT - ROLLING MEADOWS, Ill., March 26 - Gould Inc said it has -completed the sale of its French battery business, Compagnie -Francaise D'Electro Chimie, to a group of investors including -the unit's employees and <GNB Inc> of Minnesota. - Gould did not disclose terms of the deal. - Gould said the move is part of its previously announced -plan to divest assets unrelated to its computer and electronics -businesses. - Reuter - - - -26-MAR-1987 12:34:24.39 - -usa - - - - - -F -f1823reute -r f BC-CMS-ENHANCEMENTS-<ACM 03-26 0054 - -CMS ENHANCEMENTS <ACMS> GETS CREDIT LINE - TUSTIN, Calif., March 26 - CMS Enhancements Inc said it has -obtained a ten mln dlr line of credit from Bank of the West, -effective immediately. - The credit line will be used in part to fund additional -growth, including research and development of new products, the -company said. - Reuter - - - -26-MAR-1987 12:37:48.01 - -usa - - - - - -F -f1836reute -d f BC-EXOVIR-<XOVR>-TO-GET 03-26 0108 - -EXOVIR <XOVR> TO GET EUROPEAN PATENT - GREAT NECK, N.Y., March 26 - Exovir Inc said the European -Patent Office notified it that its application covering -combinations of nonionic surfactants and all forms of -interferon has been approved and a patent will be issued in -about six months. - Exovir is completing trials of a gel combining alpha -interferon and nonoxynol-9, an antiviral surfactant, as a -treatment for genital and oral herpes and genital warts. The -gel was given a U.S. patent in 1985. - It said clinical tests will begin shortly to test whether -the gel is effective in preventing transmission of the AIDS -virus when used with a condom. - Reuter - - - -26-MAR-1987 12:38:09.30 - -usa - - - - - -F -f1839reute -d f BC-resending 03-26 0082 - -HIGHER U.S. WEEKLY CAR OUTPUT ESTIMATED - DETROIT, March 26 - U.S. automakers are expected to build -167,236 cars this week, up from 133,067 in the same year-ago -period, said the trade publication Ward's Automotive Reports. - It said year-to-date car production would reach 2,012,093 -compared to 2,126,954 in the 1986 period. - Domestic truck production for the week was seen as rising -to 70,033 from 58,506. Year to date, it was projected at -937,163 compared to 882,230 in the 1986 period. - Reuter - - - -26-MAR-1987 12:38:22.02 - -usa - - - - - -F -f1840reute -r f BC-CIRCLE-K-<CKP>-OFFICI 03-26 0071 - -CIRCLE K <CKP> OFFICIAL INCREASES HOLDINGS - PHOENIX, Ariz., March 26 - Circle K Corp said its chairman, -Karl Eller, will buy 750,000 shares of Circle K common stock -from the company's founder and Vice Chairman, Fred Hervey, in a -private transaction. - After the sale, Hervey will directly or beneficially own -6,764,004 shares, or 13.61 pct of Circle K stock and Eller will -hold 2,873,300 shares, of 5.78 pct of the stock. - Reuter - - - -26-MAR-1987 12:40:02.47 -earn -usa - - - - - -F -f1852reute -d f BC-SHOE-TOWN-INC-<SHU>-Y 03-26 0060 - -SHOE TOWN INC <SHU> YEAR ENDED JAN THREE 1987 - TOTOWA, N.J., March 26 - - Shr 51 cts vs 75 cts - Net 5,524,000 vs 8,094,000 - Revs 142.4 mln vs 137.2 mln - NOTE: 1986 and 1985 year net includes loss 785,000 dlrs or -eight cts a share and 59,000 dlrs or one ct a share, -respectively, for discontinued operations. - 1985 year ended December 28, 1985. - Reuter - - - -26-MAR-1987 12:40:16.38 - -usaargentina - - - - - -F -f1854reute -d f BC-EASTERN-AIR-<TXN>-SEE 03-26 0102 - -EASTERN AIR <TXN> SEEKS MORE ARGENTINA FLIGHTS - MIAMI, March 26 - Texas Air Corp's Eastern Airlines Inc -said it asked the U.S. Department of Transportation to approve -an increase in the number of its weekly roundtrip flights to -Buenos Aires to 11 from five. - It said if several of Pan Am Corp's <PN> one-stop flights -to Buenos Aires were terminated in Rio de Janeiro, Eastern -could add four non-stop flights from the U.S. - The expanded weekly schedule would include seven nonstop -flights from Miami, two from New York, and two one-stop flights -from Los Angeles via Lima. It asked for the change by June 12. - Reuter - - - -26-MAR-1987 12:40:43.84 -acq -usa - - - - - -F A -f1858reute -r f BC-FIRST-WISCONSIN-<FWB> 03-26 0055 - -FIRST WISCONSIN <FWB> TO BUY MINNESOTA BANK - MILWAUKEE, Wis., March 26 - First Wisconsin Corp said it -plans to acquire Shelard Bancshares Inc for about 25 mln dlrs -in cash, its first acquisition of a Minnesota-based bank. - First Wisconsin said Shelard is the holding company for two -banks with total assets of 168 mln dlrs. - First Wisconsin, which had assets at yearend of 7.1 billion -dlrs, said the Shelard purchase price is about 12 times the -1986 earnings of the bank. - It said the two Shelard banks have a total of five offices -in the Minneapolis-St. Paul area. - Reuter - - - -26-MAR-1987 12:40:52.65 - -usa - - - - - -F -f1859reute -r f BC-IMRE-<IMRE>-COMPLETES 03-26 0107 - -IMRE <IMRE> COMPLETES PRIVATE STOCK PLACEMENT - SEATTLE, March 26 - IMRE Corp said it completed a private -placement of about 400,000 shares of its securities with a -group of European institutions for 2.5 mln dlrs. - The company said proceeds will be used for working capital -and to implement the company's business plan. - IMRE also said it has established a light manufacturing -facility in Richmond, Washington that makes raw material -components for Prosorba column, a medical device that removes -disease-related immune components from the human bloodstream. - The company is awaiting Food and Drug Administration -approval on the device. - Reuter - - - -26-MAR-1987 12:41:04.85 -earn -usa - - - - - -F -f1860reute -d f BC-AMERICAN-NURSERY-PROD 03-26 0070 - -AMERICAN NURSERY PRODUCTS <ANSY> 3RD QTR NET - TAHLEQUAH, OKLA., March 26 - Period ended Feb 28 - Shr profit five cts vs profit four cts - Net profit 191,000 vs profit 108,000 - Sales 6,561,000 vs 5,896,000 - Nine mths - Shr loss 28 cts vs loss 40 cts - Net loss 871,000 vs loss 990,000 - Sales 9,310,000 vs 8,894,000 - Avg shrs 3,086,386 vs 2,465,996 - NOTE: Full name is American Nursery Products Inc - Reuter - - - -26-MAR-1987 12:41:30.21 - -usa - - - - - -F -f1864reute -h f BC-CLINICAL-DATA-<CLDA> 03-26 0050 - -CLINICAL DATA <CLDA> AWARDED RESEARCH CONTRACTS - BOSTON, March 26 - Clinical Data Inc said it has contracts -with four major pharmaceutical firms to analyze certain data in -research studies evaluating the efficacy and safety of new -cardiovascular drugs. - It said the contracts exceed 500,000 dlrs. - Reuter - - - -26-MAR-1987 12:43:18.88 - - - - - - - -F -f1871reute -f f BC-******DUN/BRADSTREET 03-26 0011 - -******DUN/BRADSTREET SAYS BUSINESS FAILURES UP 10.8 PCT IN FEBRUARY -Blah blah blah. - - - - - -26-MAR-1987 12:44:43.83 - -usa - - - - - -F -f1875reute -u f BC-UAW-STRIKES-GENERAL-M 03-26 0097 - -UAW STRIKES GENERAL MOTORS <GM> PLANT - PONTIAC, Mich., March 26 - The United Auto Workers struck -General Motors Corp's truck and bus plants at Pontiac, Mich, -General Motors said. - General Motors' truck and bus group failed to reach an -agreement on local issues with UAW Local 594 by the union's -deadline of noon today, causing a strike by 9,000 hourly -workers at the facility, the company said. - General Motors said it was "eager" to continue meeting with -union officials on the dispute. It was not immediately clear -whether contract talks were continuing at the facility. - General Motors spokesman Frank Cronin said the three plants -at Pontiac stopped working "as of noon today." - He said talks will resume Friday at 1000 EST in Pontiac. -"We're hoping (the strike) will be of very brief duration," -Cronin said. - Bus-manufacturing operations at one of the three -plants--the Pontiac Central facility--are being sold to -Greyhound Corp <G>, although GM will retain the facility. - Cronin said about 400 workers on the bus line will be laid -off "whenever we fulfill production commitments" on the buses, -"possibly in May." - The Pontiac Central plant also makes medium- and heavy-duty -trucks. Assembly of the medium trucks is scheduled to move to -Janesville, Wis., in 1990, Chronin said. - Heavy truck operations at the plant will be taken over by -GM's joint venture with Volvo AB, and all vehicle assembly -operations at the facility will eventually be ended, Chronin -said. The plant also has sheet metal operations, which are so -far unaffected, he said. - The other two plants at Pontiac--Pontiac East and Pontiac -West--make full-size pickups and sport utility vehicles. - Reuter - - - -26-MAR-1987 12:46:03.72 - -usa - - - - - -F -f1880reute -r f BC-S.P.I.-SUSPENSION-<SP 03-26 0046 - -S.P.I. SUSPENSION <SPILF> WINS CONTRACT - NEW YORK, March 26 - S.P.I. Suspension and Parts Industries -Ltd said it won four multi-year contracts from the U.S. Army -worth 34.5 mln dlrs. - The contracts, for wheels on U.S. Army vehicles, will run -for five years beginning 1987. - Reuter - - - -26-MAR-1987 12:46:20.26 -earn -usa - - - - - -F -f1881reute -d f BC-DISCUS-CORP-<DISC>-4T 03-26 0046 - -DISCUS CORP <DISC> 4TH QTR LOSS - BLOOMINGTON, Minn., March 26 - - Shr loss six cts vs loss seven cts - Net loss 125,000 vs loss 140,000 - Rev 2.4 mln vs 2.2 mln - Year - Shr loss 13 cts vs loss 14 cts - Net loss 271,000 vs loss 211,000 - Rev 10.1 mln vs 8.2 mln - Reuter - - - -26-MAR-1987 12:48:35.24 - - - - - - - -F -f1886reute -b f BC-******ENTERTAINMENT-P 03-26 0009 - -******ENTERTAINMENT PUBLICATIONS DISCONTINUES THREE UNITS -Blah blah blah. - - - - - -26-MAR-1987 12:49:18.15 - -usa - - - - - -C -f1887reute -d f BC-CFTC-OFFICIALS-SEE-NO 03-26 0106 - -CFTC OFFICIALS SEE NO MERGER WITH SEC - WASHINGTON, March 26 - Officials of the Commodity Futures -Trading Commission (CFTC) said merging the agency with the -Securities and Exchange Commission (SEC) would not help -regulation of commodities and securities markets. - "I don't think that a merger would solve regulatory -problems," CFTC chairman Susan Phillips told the House -Subcommittee on Conservation, Credit and Rural Development. - "I think what does solve our problems would be working with -other agencies in a strong capacity," she said in response to a -question. "We don't want agencies to trample on our -jurisdiction either." - CFTC Commissioner Fowler West said, "We ... do not have the -expertise to regulate securities markets. I don't think the SEC -has the expertise to regulate the futures markets." - Increased attention to price volatility in stock index -futures markets and reports of alleged futures trading abuses -have raised concerns Congress may adopt a radically different -regulatory structure for securities and futures markets. - Rep. John Dingell (D-Mich.), chairman of the House Energy -and Commerce Committee, which has jurisdiction over securities -regulation, has said he will hold hearings on the questions of -market volatility and alleged trading abuses. - Reuter - - - -26-MAR-1987 12:49:31.85 -earn - - - - - - -F -f1889reute -b f BC-*****ENTERTAINMENT-PU 03-26 0013 - -*****ENTERTAINMENT PUBLICATIONS SEES 31 CTS/SHR 3RD QTR LOSS ON UNITS DISPOSAL -Blah blah blah. - - - - - -26-MAR-1987 12:50:43.81 - -poland -jaruzelski - - - - -RM -f1894reute -u f BC-POLAND-FIRM-ON-ECONOM 03-26 0092 - -POLAND FIRM ON ECONOMY DESPITE CONCESSIONS - By Irena Czekierska, Reuters - WARSAW, March 26 - The Polish government has backed down -from some proposed price rises in the face of strong opposition -from trade unions, but has restated its commitment to economic -reforms entailing tougher discipline and austerity measures. - Following a warning from the officially-backed OPZZ unions -that sharp price hikes could spark confrontation, the -government has agreed that food prices this year will rise an -average 9.6 pct instead of the planned 13 pct. - A statement last night said the government had "partially -accepted" demands for the protection of the low-paid and agreed -to extend some social benefits. - But Polish leader Wojciech Jaruzelski, at a separate -meeting yesterday, sharply criticised the slow pace of reforms. - He told an economic commission that tougher discipline and -austerity measures, greater efficiency and initiative should -replace waste, red tape and inertia. He announced cost-cutting -measures affecting central administrative bodies. - OPZZ economic expert Zbigniew Kochan welcomed the move on -food prices. "This decrease was considerable," Kochan told -Reuters today. "Also important is the fact that the government -admitted we were right and agreed to consult us over prices -from now on," he added. - The communique made no mention of curbs on wage increases, -or price rises in sectors including transport and energy. - The authorities have said prices could go up by as much as -26 pct as state subsidies are sharply reduced in an effort to -make the market more free and to improve efficiency. - The OPZZ unions are officially recognised by the government -and replaced the Solidarity movement suppressed under martial -law. They claim a membership of seven million. - Western diplomats said today the climb-down on food prices -was a limited concession. "This is a small price to pay if they -can push through the other price rises," one said, adding that -fuel and energy rises would have a more significant effect. - He noted that there had been a concerted media campaign to -prepare people for price rises, including a major article in a -mass-circulation women's magazine, "clearly aimed at those who -do the shopping," he said. - Other articles in the official press this week have focused -on coal, which sells to both industrial and private consumers -at far less than either the production or export costs. - Countering scepticism from opposition sources and former -Solidarity activists as to OPZZ's role, Kochan said "It was -definitely not a question of gaining credibility, but true -concern for people's living standards." - Deputy Prime Minister Jozef Koziol said the authorities' -main aim was not to harm workers' living standards. But he was -also quoted by the official PAP news agency as saying the -government had to take current economic realities into account. - REUTER - - - -26-MAR-1987 12:50:49.04 -earn -usa - - - - - -F -f1895reute -r f BC-PAY-'N-PAK-STORES-INC 03-26 0043 - -PAY 'N PAK STORES INC <PNP> 4TH QTR FEB 28 NET - KENT, Wash., March 26 - - Shr 11 cts vs 13 cts - Net 1,129,000 vs 1,301,000 - Revs 83.2 mln vs 74.5 mln - Year - Shr 57 cts vs 82 cts - Net 5,686,000 vs 8,168,000 - Revs 398.4 mln vs 333.8 mln - Reuter - - - -26-MAR-1987 12:50:57.93 -gas -usa - - - - - -F Y -f1896reute -r f BC-corrected---mobil 03-26 0119 - -(CORRECTED) - MOBIL <MOB> TO UPGRADE REFINERY UNIT - NEW YORK, March 26 - Mobil Corp said it will spend over 30 -mln dlrs to upgrade a gasoline-producing unit at its Beaumont, -Texas, refinery. - It said the unit is a catalytic reformer, which converts -low-octane components of gasoline into high-octane components -for use in Super Unleaded gasoline. - The company said the modernization will allow the unit to -regenerate catalysts on a continuous basis without shutdown. -Currently, it must be shut twice a year. The unit produces -46,000 barrels of gasoline components a day. Construction will -start late this year, with completion set for mid-1989. - (Correcting unit's output to barrels/day from barrels/year) - Reuter - - - -26-MAR-1987 12:59:20.16 - -usa - - -cbt - - -C -f1921reute -d f BC-CFTC-SPECULATIVE-LIMI 03-26 0141 - -CFTC LIMIT PLAN MAY NOT REVERSE LIQUIDITY DROP - WASHINGTON, March 26 - A proposal by the Commodity Futures -Trading Commission, CFTC, to raise federal limits on futures -speculative positions for certain agricultural commodity -contracts would not reverse a decline in liquidity in those -markets that started in 1981, two CFTC commissioners said. - Commissioners William Seale and Kalo Hineman told a House -Agriculture subcommittee a recent proposal that would have the -effect of raising deferred month speculative position limits on -several agricultural commodity contracts would not -substantially increase liquidity in those months. - "I seriously doubt that increasing speculative limits will -create a great deal of liquidity in the back months," Seale -told the House Agriculture Subcommittee on Conservation, Credit -and Rural Development. - Analysts have attributed much of the liquidity squeeze to a -1981 tax law change, which by changing the treatment of -so-called straddles limited the ability of futures commission -merchants to roll positions forward for tax purposes. - CFTC Chairman Susan Phillips said only that the commission -would take into account Congress' recommendation that federal -speculative limits be raised. - The Chicago Board of Trade and the MidAmerica Commodity -Exchange have expressed concern that the CFTC plan would -decrease spot month limits for certain of their contracts. - Reuter - - - -26-MAR-1987 13:00:01.51 -earn -usa - - - - - -F -f1926reute -d f BC-AMERICAN-NURSERY-PROD 03-26 0073 - -AMERICAN NURSERY PRODUCTS <ANSY> 3RD QTR NET - TAHLEQUAH, Okla., March 26 - Qtr ends Feb 28 - Shr profit five cts vs profit four cts - Net profit 191,000 vs profit 108,000 - Revs 6,561,000 vs 5,896,000 - Avg shrs 3.6 mln vs 2.5 mln - Nine mths - Shr loss 28 cts vs loss 40 cts - Net loss 871,000 vs loss 990,000 - Revs 9,310,000 vs 8,894,000 - Avg shrs 3.1 mln vs 2.5 mln - NOTE: Full name American Nursery Products Inc. - Reuter - - - -26-MAR-1987 13:00:14.13 -earn -sweden - - - - - -F -f1927reute -d f BC-VOLVO-FINAL-RESULT-IM 03-26 0124 - -VOLVO 1986 RESULT OFF SLIGHTLY FROM 1985 - STOCKHOLM, March 26 - AB Volvo <VOLV.ST> said the weakening -dollar caused the drop in its 1986 profits, but company chief -executive Pehr Gyllenhammar said 1986 was one of Volvo's best -years ever. - In its final report released earlier, the company said the -group's 1986 profits before allocations and taxes was 7.53 -billion crowns compared with 1985's 7.60 billion. - Despite the fall, Gyllenhammar said, "Sales of industrial -products have never been higher, and Volvo Cars and Volvo -Trucks were both completely sold out at year-end. Operating -income was slightly higher than a year earlier." - He said the company's financial strength gave it -exceptional opportunities to invest for the future. - Although industrial sales were up, the company's yearend -report said total sales were 84.09 billion crowns against -1985's 86.19 billion. - Reuter - - - -26-MAR-1987 13:00:46.83 -acq -usa - - - - - -F -f1929reute -h f BC-<MERIDIAN-ENERGY>,-CA 03-26 0045 - -<MERIDIAN ENERGY>, CASTONE END LETTER OF INTENT - CHICAGO, March 26 - <Meridian Energy Inc> and Castone -Development Corp, a privately-held company, jointly announced -that they have decided to terminate the letter of intent under -which Meridian would have acquired Castone. - Reuter - - - -26-MAR-1987 13:06:17.40 -iron-steelship -taiwansouth-koreajapanchinauk - -ec - - - -M -f1955reute -r f BC-REPORT-EXPECTS-SHARP 03-26 0107 - -REPORT EXPECTS SHARP DROP IN WORLD IRON IMPORTS - LONDON, March 26 - World seaborne iron ore imports will -fall sharply by the year 2000 with declining imports to the EC -and Japan only partially offset by increased demand from South -East Asia, a report by Ocean Shipping Consultants said. - The report predicts annual world seaborne iron ore imports -of 267.7 mln tonnes by 2000 versus 312.4 mln tonnes in 1985. - It estimates that total bulk shipping demand from the iron -ore sector will fall by almost 10 pct, or 200 billion tonne -miles, with shipping demand associated with the coking trade -down about 17 pct or 130 billion tonne miles. - The report sees EC imports falling to 91.7 mln tonnes in -2000 from 123.6 mln in 1985 with Japanese imports falling to 89 -mln from 124.6 mln tonnes. Imports to South East Asia are seen -rising to 58.6 mln from 32.6 mln tonnes in 1985. - It predicts that EC steel production will fall to 109 mln -tonnes in 2000 from 135.7 mln in 1985 with Japanese production -falling to 92 mln from 105.3 mln. - South Korea and Taiwan are expected to double their output -to 40 mln tonnes with Chinese production increasing by 25 mln -tonnes to 80 mln, it added. - Reuter - - - -26-MAR-1987 13:06:50.85 - -usa - - - - - -F -f1960reute -d f BC-ROYCE-<RLAB>-TO-REDEE 03-26 0056 - -ROYCE <RLAB> TO REDEEM WARRANTS - MIAMI, March 26 - Royce Laboratories Inc said it is calling -for redemption its redeemable common purchase warrants on April -30 at 2.5 cts per warrant. - It said warrant holders retain the right to purchase one -share of its common at an exercise price of three dlrs per -share until 1700 EST April 29. - Reuter - - - -26-MAR-1987 13:07:08.34 - -usa - - - - - -F -f1961reute -b f BC-DUN/BRADSTREET-<DB>-S 03-26 0056 - -DUN/BRADSTREET <DB> SAYS BUSINESS FAILURES UP - NEW YORK, March 26 - Dun and Bradstreet Corp said business -failures in February increased 10.8 pct, to 5,390, from 4,864 -in February 1986. - "The national level of business failures continues to be -driven upward by substantial increases in the oil and -agricultural states," Dun said. - Dun said that of the nine U.S. Bureau of the Census -regions, three reported a decrease in the number of failures -and two had gains of less than 3.0 pct. - The largest increase was reported in the West South Central -states, Dun said, with business failures rising 47.8 pct, to -1,218. - The East South Central states posted a 44 pct rise, to 298, -Dun said, while the West North Central states recorded a 27.3 -pct gain, to 489. - The greatest decline, Dun reported, was registered by the -Middle Atlantic states, down 8.2 pct in February, to 324. - The Pacific states also reported a large decline in failing -businesses, off 6.8 pct, to 1,028, Dun said. - In the smokestack region of the East North Central states, -there was a negligible decline of 0.6 pct, to 794, Dun said. - Dun said the Mountain states recorded a gain in business -failures of 1.5 pct, to 530. - Business failures in the New England states rose 23.5 pct, -to 105. - By industry segment, Dun said the largest gain was recorded -by the agricultural, forestry and fishing sector, up 62.7 pct, -to 345. - Year to date, Dun said business failures rose to 11,004, an -increase of 5.3 pct over 1986. - Reuter - - - -26-MAR-1987 13:08:21.86 -earn -australia - - - - - -F -f1966reute -d f BC-GOLDFIELD-CORP-<GV>-4 03-26 0080 - -GOLDFIELD CORP <GV> 4TH QTR NET LOSS - MELBOURNE, Fla., March 26 - - Shr loss four cts vs loss five cts - Net loss 527,065 vs loss 1,204,080 - Revs 622,470 vs 613,205 - Year - Shr profit four cts vs loss 13 cts - Net profit 1,099,778 vs loss 3,282,478 - Revs 7,579,547 vs 6,068,254 - NOTE: 1985 excludes loss from discontinued operations of -four cts per share in the quarter and loss 10 cts in the year. -1986 year excludes extraordinary gain of two cts a share. - - Reuter - - - -26-MAR-1987 13:08:52.54 - - - - - - - -A F RM -f1970reute -f f BC-******FED'S-HELLER-UR 03-26 0015 - -******FED'S HELLER URGES FORMING FINANCIAL SERVICES HOLDING COMPANIES TO STRENGTHEN BANKING -Blah blah blah. - - - - - -26-MAR-1987 13:09:45.98 -money-fx -ukfrance -balladurlawson -ec - - - -RM -f1973reute -r f BC-BRITISH,-FRENCH-MINIS 03-26 0115 - -BRITISH, FRENCH MINISTERS DISCUSS PUBLIC SPENDING - LONDON, March 26 - French Finance Minister Edouard Balladur -discussed the need to control public spending in talks here -today with British Chancellor of the Exchequer Nigel Lawson, a -Treasury spokesman said. - The spokesman said the ministers reviewed their economies, -and public spending, domestic and European Community-wide. - He declined to comment on whether the subject of concerted -action to shore up the dollar had arisen. The U.S. Currency -dipped sharply earlier this week after a month of relative -stability after an agreement by six major industrialised -nations in Paris on February 22 to stabilise their currencies. -REUTER - - - -26-MAR-1987 13:09:57.13 -acq -usa - - - - - -F A RM -f1974reute -b f BC-FED'S-HELLER-URGES-BR 03-26 0091 - -FED'S HELLER URGES BROAD REFORM TO AID BANKING - WASHINGTON, March 26 - Federal Reserve Board Governor -Robert Heller said the banking system could be strengthened by -permitting formation of financial services holding companies -involved in areas like banking, insurance, real estate and -securities. - In a speech prepared for delivery in New York to the Bank -and Financial Analysts' Association, Heller said, "I believe -that increased diversification along geographic and product -lines is the key to strengthening the American banking system." - He said he supported the idea of financial services holding -companies advocated by the Association of Bank Holding -Companies in which regulation of various bank, thrift, -insurance, investment, securities and real estate subsidiaries -would be handled on functional lines. - "Limits would be placed on the extension of credit by the -bank to the associated institutions, and all transactions would -have to be on an arms-length basis," Heller said. - Measures would be necessary to avoid abuse of the banks' -special position by such holding companies or subsidiaries. - Heller said he "would require the holding company to serve -as a 'source of strength' to the bank by making a commitment to -maintain the bank's capital. - "In other words, the bank would not be allowed to fail as -long as the holding company has a positive net worth." - Heller also said commercial enterprises should be permitted -to own a financial services holding company, again with the -provision that capital would flow to the financial enterprise -if necessary. - Heller said the effects of these actions "would be banks -that are at least as strong as the corporations holding them" in -which customer deposits were assured while any incentive to -"loot the bank" was removed. - Such diversification would give access to national and -international financial services to corporations across the -United States. - Heller said that would mean "the steady decline of America's -banks in the world financial league tables would be arrested" by -permitting them to become more competitive. - Reuter - - - -26-MAR-1987 13:11:37.69 -earn - - - - - - -F -f1977reute -f f BC-******FEDERATED-DEPAR 03-26 0014 - -******FEDERATED DEPARTMENT STORES INC UPS QTLY DIV BY 10.5 PCT, SETS 2-FOR-1 STOCK SPLIT -Blah blah blah. - - - - - -26-MAR-1987 13:14:17.73 - -usa - - - - - -A RM -f1990reute -r f BC-OUTBOARD-MARINE-<OM> 03-26 0116 - -OUTBOARD MARINE <OM> SELLS 9.15 PCT DEBENTURES - NEW YORK, March 26 - Outboard Marine Corp is raising 100 -mln dlrs via an offering of sinking fund debentures due 2017 -yielding 9.15 pct, said lead manager Salomon Brothers Inc. - The debentures have a 9-1/8 pct coupon and were priced at -99.75 to yield 146 basis points over comparable Treasury bonds. -Morgan Stanley co-managed the deal. - The issue is non-refundable for 10 years. A sinking fund -beginning in 1998 to retire annually five pct of the debt may -be increased by 200 pct at the company's option, giving it an -estimated minimum life of 13.85 years and maximum of 20.5 -years. The debt is rated Baa-2 by Moody's and BBB-plus by S/P. - Reuter - - - -26-MAR-1987 13:15:04.62 -acq -usa - - - - - -F -f1992reute -r f BC-GOULD-<GLD>-SELLS-FRE 03-26 0052 - -GOULD <GLD> SELLS FRENCH BATTERY UNIT - ROLLING MEADOWS, March 26 - Gould Inc said it sold its -French Battery unit, Cie Francaise d'Electro Chimie, to a group -of investors including the unit's employees and <GNB Inc> of -Minnesota. - Terms of the sale were not disclosed. The unit had 1986 -sales of 65 mln dlrs. - Reuter - - - -26-MAR-1987 13:17:32.95 -earn -usa - - - - - -F -f2003reute -r f BC-ADVANCED-GENETIC-SCIE 03-26 0036 - -ADVANCED GENETIC SCIENCES <AGSI> YEAR LOSS - OAKLAND, Calif., March 26 - - Shr loss 30 cts vs loss 73 cts - Net loss 3,895,267 vs loss 8,250,222 - Revs 3,237,235 vs 234,745 - Note: 4th qtr data not available - Reuter - - - -26-MAR-1987 13:25:26.95 -earn -usa - - - - - -F -f2025reute -u f BC-FEDERATED-DEPARTMENT 03-26 0077 - -FEDERATED DEPARTMENT <FDS> RAISES QTLY DIVIDEND - CINCINNATI, March 26 - Federated Department Stores Inc said -it raised its quarterly common stock dividend to 74 cts a -share, from 67 cts, an increase of 10.5 pct. - The company said it also approved a two-for-one stock split -in the form of a 100 pct stock dividend. - At the same time, Federated said it will ask shareholders -to approve an increase in the number of authorized shares to -400 mln, from 200 mln. - Federated said the dividend is payable on a pre-split basis -on April 24 to shareholders of record April 10. - New shares from the stock split will be distributed May 11, -it said. - - Reuter - - - -26-MAR-1987 13:29:49.49 - -usa - - - - - -F -f2040reute -r f BC-CFTC-SEES-NO-TRADING, 03-26 0087 - -CFTC SEES NO TRADING, TRIPLE WITCHING RULES - WASHINGTON, March 26 - The chairman of the CFTC, Susan -Phillips, said she does not expect the CFTC to restrict dual -trading or to intervene in the quarterly expiration of stock -index futures and their options. - "At this time we have no plans to reexamine our policy (on -dual trading)," she told the House Subcommittee on -Conservation, Credit and Rural Development. - She said it would not be appropriate to ban dual trading -because it would decrease market liquidity. - Dual trading refers to the ability of futures commission -merchants to trade for their own as well as their clients' -accounts. Exchange rules prohibit a broker from attempting to -benefit from the market impact of a client's order by trading -on his own account before placing the client's order. - CFTC has required all futures exchanges by July 1 to have -implemented audit trails permitting the reconstruction of all -trades to the nearest minute. The move was designed in part to -discourage abuse of dual trading. - The board of directors of the Chicago Mercantile Exchange -has proposed limiting but not banning dual trading in the -Standard and Poor's 500 stock index future pit. - Phillips indicated the CFTC would not move beyond requiring -improved audit trails in its effort to allay concerns about -dual trading abuses. - "It would be inappropriate at this point until we see how -the audit trail will work," she said in response to a question. - On triple-witching, Phillips said recent experiments by -markets to quell price fluctuations have been quite successful -and that users of securities and derivative instruments were -still learning how to deal with the quarterly phenomenon. - Triple-witching refers to the simultaneous expiration of -stock index futures, options on those futures and options on -certain individual stocks. - The CFTC chairman noted the commission has heightened -surveillance of markets on triple-witching day. - "We aren't sure any other regulatory changes are needed at -this point," Phillips said. - Reuter - - - -26-MAR-1987 13:30:19.72 - -usa - - - - - -A RM -f2041reute -r f BC-TRINITY-INDUSTRIES-<T 03-26 0104 - -TRINITY INDUSTRIES <TRN> AND UNIT CUT BY S/P - NEW YORK, March 26 - Standard and Poor's Corp said it cut -to BB-minus from BB-plus Trinity Industries Inc's 275 mln dlrs -of liquid yield option notes. - Also downgraded were the unit Trinity Industries Leasing -Co's 60 mln dlrs of convertible debentures due 2006 to BB-plus -from BBB-minus. - S and P said the actions reflected Trinity's weakened -earnings due to depressed demand in several key markets, the -likelihood that a significant sustained improvement would not -occur in the near-term, as well as heightened financial risk -from a series of debt-financed acquisitions. - Reuter - - - -26-MAR-1987 13:32:52.55 -earn -usa - - - - - -F -f2054reute -u f BC-DANZAR-INVESTMENT-<DN 03-26 0079 - -DANZAR INVESTMENT <DNZR> SETS SPECIAL DIVIDEND - DALLAS, March 26 - Danzar Investment Group Inc said it -received 60 mln shares of <Commonwealth Capital Ltd> in -settlement of a debt and that it will distribute the shares to -its stockholders as a dividend. - Danzar said the dividend will also include 18,750,000 -Commonwealth shares it already holds. - The dividend of 39.9 shares per Danzar share held will be -paid to shareholders of record April 15, the company said. - Reuter - - - -26-MAR-1987 13:38:15.46 -acq -usa - - - - - -F -f2069reute -d f BC-FIDELITY-<FNF>-UNIT-A 03-26 0058 - -FIDELITY <FNF> UNIT ACQUIRES CALIFORNIA CONCERN - SCOTTSDALE, Ariz., March 26 - Fidelity National Financial -Inc said its Fidelity National Title Insurance Co subsidiary -acquired the operations of Safeco Title Insurance Co in the -northern California counties of Alameda, Contra Costa and San -Mateo. - Terms of the acquisition were not disclosed. - Reuter - - - -26-MAR-1987 13:40:37.69 - -usa - - - - - -F -f2070reute -d f AM-LIABILITY 03-26 0113 - -ADMINISTRATION SAYS INSURANCE CRISIS EASED - WASHINGTON, March 26 - The Reagan administration said the -national crisis in liability insurance eased during the past -year as the insurance industry's profits more than doubled to -11.5 billion dlrs, but some problems still persist. - An administration working group, in an update of its report -a year ago, found that insurance premiums generally have -stabilized, but at high levels, as the crisis has abated. - After severe financial difficulties in 1984 and 1985, the -insurance industry's rate of return last year recovered to the -same level as the performace of U.S. corporations in general, -the group said in a 98-page study. - While the crisis has eased, the study found that liability -insurance will likely remain expensive and continue to be -difficult to obtain for some lines of coverage and for some -sectors of the American economy. - Some types of insurance, especially associated with -environmental liability, remain unavailable for many companies -at any price, it said. - The increased availability and the price stability for -insurance the past year has been accompanied by higher -deductibles, lower coverage limits and additional policy -restrictions, the study said. - The administration last year unveiled a wide range of -recommendations aimed at dealing with the crisis, including -limits on punitive damages and awards for pain, suffering and -mental anguish at 100,000 dlrs. - Attorney General Edwin Meese told a news conference today -that the administration still supports state efforts to place -limits on damage awards and to enact other reforms of the tort -laws. - Assistant Attorney General Richard Willard denied charges -by consumer groups that the insurance crisis was caused by -industry collusion to raise rates in violation of the antitrust -laws. Willard, the head of the working group, said excessive -jury damage awards was the main reason for the insurance -liability problem. - Reuter - - - -26-MAR-1987 13:44:20.98 - - - - - - - -RM -f2081reute -f f BC-Saint-Gobain-U.S.-sub 03-26 0015 - -******Saint Gobain U.S. Subsidiary seeks 150 mln dlr, five year facility - arranger Chemical -Blah blah blah. - - - - - -26-MAR-1987 13:45:13.45 -earn -usa - - - - - -F -f2082reute -u f BC-HOME-SAVINGS-BANK-<HM 03-26 0022 - -HOME SAVINGS BANK <HMSB> SETS INITIAL DIVIDEND - NEW YORK, March 26 - - Qtly div nine cts - Pay April 30 - Record April six - Reuter - - - -26-MAR-1987 13:46:09.82 -cotton -usa - - - - - -C G -f2085reute -u f BC-cotton-ginnings 03-26 0093 - -FINAL 1986 CROP U.S. COTTON GINNINGS - WASHINGTON, March 26 - Final 1986 crop U.S. cotton ginnings -totaled 9,438,425 running bales, vs 12,987,834 bales at the end -of the 1985 season and 12,544,866 bales at end-1984 season, the -U.S. Census Bureau said. - The bureau said upland cotton ginnings from the final 1986 -crop totaled 9,237,296 bales, vs 12,837,088 bales in 1985 and -12,418,749 bales in 1984. - American Pima ginnings from the final 1986 crop totaled -201,129 bales, vs 150,746 bales in the 1985 crop and 126,117 -bales in 1984, the bureau said. - REUTER - - - -26-MAR-1987 13:48:02.47 - -usa - - - - - -F A -f2087reute -d f AM-ANDERSON 03-26 0119 - -FORMER TREASURY SECRETARY PLEADS GUILTY TO TAX EVASION - NEW YORK, March 26 - Former Secretary of the Treasury -Robert Anderson, whom Dwight Eisenhower once said deserved to -be president, pleaded guilty to income tax evason charges and -illegally running an offshore bank. - Anderson, declaring that he was "deeply regretful," admitted -to evading tax on 127,500 dlrs in undeclared income. Much of -the money was paid to him for lobbying for controversial South -Korean evangelist Sun Myung Moon's Unification Church. - The 77-year-old Anderson was President Eisenhower's -treasury secretary from 1957 to 1961 and a prominent -businessman afterwards. In his memoirs, Eisenhower said -Anderson deserved to be president. - Standing before Federal Court Judge Edmund Palmieri, -Anderson, who faces up to 10 years in jail, said he had -recently undergone two operations and treatment for alcoholism. - The judge set May 7 for sentencing and U.S. Attorney -Rudolph Giuliani declared the government would ask that -Anderson be sent to jail. - According to the indictment, Anderson was a prinicipal of -the Commercial Exchange Bank and Trust Ltd of Anguilla in the -British West Indies for two years ending in 1985. - During that time, government prosecutors said the bank -conducted operations in New York city but failed to register -with state and federal banking authorities. Depositors have -lost at least 4 mln dlrs. - Anderson pleaded gulity only for the tax year 1984 but -admitted other tax transgressions for the previous year and -faces civil fines for both years. - Among other things, he said he received 80,000 dlrs in 1983 -from a shell corporation for lobbying for the Unification -Church. The money was given to him as a no-interest loan -repayable in 1990 but the government said it should have been -reported as income. - Reuter - - - -26-MAR-1987 13:53:17.71 -earn - - - - - - -F -f2104reute -f f BC-******american-brankd 03-26 0009 - -******AMERICAN BRANDS SEES RECORD FIRST QUARTER RESULTS -Blah blah blah. - - - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-011.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-011.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-011.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-011.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2010 +0,0 @@ - - -30-MAR-1987 14:22:36.87 - -usa - - - - - -F A RM -f2192reute -u f BC-FIDATA-<FID>-ANNOUNCE 03-30 0086 - -FIDATA <FID> ANNOUNCES PRELIMINARY ESM SETTLEMENT - NEW YORK, March 30 - Fidata Corp <FID> and its subsidiary, -Fidata Trust Company New York <FTCNY>, announced that they have -reached a preliminary settlement agreement in principle in the -lawsuits filed by major parties arising out of the E.S.M. -Government Securities, Inc bankruptcy. - Fidata Corp said that it anticipates that the cost of the -proposed settlement, after anticipated recoveries, will be less -than 4 mln dlrs, and possibly significantly less. - The major terms of the settlement agreement, applicable to -Fidata and FTCNY, provide for the release by Fidata of its -claims to 1.125 mln dlrs held by the ESM estate, and the -further payment of 8.425 mln dlrs for distribution to the -public body plaintiffs and Home State Savings Bank. - Fidata said it expects to recover along with its subsidiary -at least half of the sums to be paid under the terms of the -agreement, and potentially amounts substantially in excess of -that. - Reuter - - - -30-MAR-1987 14:23:25.56 - -usa - - - - - -F -f2194reute -w f BC-LOUISVILLE-GAS<LOU>-T 03-30 0084 - -LOUISVILLE GAS<LOU> TO ASK PROTECTIVE MEASURES - LOUISVILLE, KY., March 30 - Louisville Gas and Electric Co -said it will ask stockholders at its May 12 annual meeting to -approve several anti-takeover proposals. - It said the measures include staggered terms for directors -and a fair price provision that would require a potential -purchaser to make the same offer to all stockholders. - Louisville Gas said the amendments are not in response to -any specific effort to obtain control of the company. - Reuter - - - -30-MAR-1987 14:23:31.58 - -usa - - - - - -F -f2195reute -h f BC-TRACOR-<TRR>-UNIT-WIN 03-30 0064 - -TRACOR <TRR> UNIT WINS NAVY CONTRACT - AUSTIN, March 30 - Tracor Inc said its Tracor Applied -Sciences unit was awarded a 1.9 mln dlr contract by the U.S. -Navy's Naval Underwater Systems Center. - Under the contract, Tracor said the unit will provide -analytical, experimental, engineering and technical services to -the Navy's Surface Ships Antisubmarine Warefare Development -Program. - Reuter - - - -30-MAR-1987 14:23:38.33 - -usa - - - - - -F -f2196reute -r f BC-CAMPBELL-SOUP-<CPB>-T 03-30 0056 - -CAMPBELL SOUP <CPB> TO SELL PLANT IN DELAWARE - CAMDEN, N.J., March 30 - Campbell Soup co said it will sell -its W.L. Wheatley ingredients plant in Clayton, Del., as a -going operation. - It said it will continue to operate the plant until a buyer -is found. The sale is aimed at improving Campbell's return on -assets, the company said. - Reuter - - - -30-MAR-1987 14:28:03.38 - -usaindia - - - - - -F -f2207reute -h f BC-VIDEO-DISPLAY-<VIDE> 03-30 0065 - -VIDEO DISPLAY <VIDE> IN INDIAN JOINT VENTURE - STONE MOUNTAIN, Ga., March 30 - Video Display Corp said it -signed agreements with <Glowtronics <Ltd> to jointly build a -manufacturing plant in the state of Karnatake, India. - Video Display said the plant, in which it will own a 40 pct -equity interest, will make cathodes, filament heatrers and -electron gun assembles for television sets. - Reuter - - - -30-MAR-1987 14:28:16.03 -acq - - - - - - -F -f2208reute -f f BC-TAFT 03-30 0013 - -******BASS GROUP SAYS IT HAS HAD TALKS ON SEEKING CONTROL OF TAFT BROADCASTING -Blah blah blah. - - - - - -30-MAR-1987 14:29:14.28 -crude -usa - - - - - -Y -f2209reute -u f BC-REFINE- 03-30 0103 - -LOWER REFINERY OPERATIONS SEEN PRODUCING PROFITS - By BERNICE NAPACH, Reuters - SAN ANTONIO, TEXAS, March 30 - U.S. refiners will have to -reduce operations if they want to be profitable this year, said -industry officials attending the National Petroleum Refiners -Association meeting here. - "If the refining sector can discipline itself to refine -about 12 mln barrels of crude oil a day, we have a chance to -pull down inventories to acceptable levels by the second -quarter, said Archie Dunham, executive vice president of -petroluem products at Conoco Inc - "If not, the industry will have a tough 1987," he added. - Last week's American Petroleum Institute report said that -U.S. refining capacity rose three pct to 78.7 pct of capacity, -with crude oil runs at 12.2 mln barrels per day for the week -ended March 20. - The API said that with the higher crude oil runs, -distillate and gasoline inventories were sharply above year-ago -levels. Gasoline stocks were at 245.6 mln barrels, some 17.2 -mln barrels above year-ago levels. Distillate stocks, at 108.7 -mln barrels, are 10.9 mln barrels above last year's level, the -API said. - Henry Rosenberg, chairman of Crown Central Petroleum Corp -<CNP> told Reuters that unless refining and marketing return to -profitability, oil companies will have to rely on downstream -operations to produce an acceptable level of earnings. - "The jump in refining capacity is a concern if it -continues," said Kenneth Buckler, executive vice president of -refining and marketing at <Total Petroleum Co>, a U.S. -subsidiary of Cie Francaise Des Petroles of France. - Refineries should operate near 75 pct of capacity given -the current level of demand but the operating level should -increase as gasoline demand picks up in the next quarter, -Buckler said. - Dunham said the potential operable capacity of U.S. -refineries should also be cut about 500,000 barrels of crude -per day. "I expect to see the shutdown of more small refineries -over the next five years," he said, adding that these -facilities refine between 10,000 and 30,000 barrels of crude -oil per day. The API said U.S. operations have the capacity to -refine 15.6 mln bpd of crude. - Reuter - - - -30-MAR-1987 14:29:24.83 - -usa - - - - - -F -f2210reute -r f BC-NYNEX 03-30 0103 - -NYNEX <NYN> UNIT FILES 500 MLN DLR DEBT OFFERING - WASHINGTON, March 30 - New York Telephone Co, a subsidiary -of NYNEX Corp, filed with the Securities and Exchange -Commission for a shelf offering of up to 500 mln dlrs of debt -securities on terms to be determined at the time of the sale. - Proceeds from the offering, which is in addition to 50 mln -dlrs of debt securities already registered with the SEC but -unsold, will be used to refinance outstanding long-term debt, -to repay short-term debt and for other general corporate -purposes, the company said. - The company did not name an underwriter for the sale. - Reuter - - - -30-MAR-1987 14:29:34.81 - -usa - - - - - -F -f2212reute -d f BC-HALIFAX-ENGINEERING-< 03-30 0101 - -HALIFAX ENGINEERING <HX> GETS CONTRACTS - ALEXANDRIA, Va., March 30 - Halifax Engineering Inc said it -has received a fixed-price contract woirth 6,700,000 dlrs for -one year, plus two option years, to provide security services -for the U.S. Embassy in Tegucigalpa. - The company said it has also received a three-year U.S. -Army contract, including two option years, for -telecommunications installation support. The contract is worth -a total of 7,500,000 dlrs, it said. - Halifax said its backlog as of tomorrow, the end of its -fiscal year, will be about 53 mln dlrs, up from 27 mln dlrs a -year before. - Reuter - - - -30-MAR-1987 14:29:58.53 - -usasweden - - - - - -F -f2213reute -d f BC-<ELECTROLUX-AB>-UNIT 03-30 0095 - -<ELECTROLUX AB> UNIT TO BUILD WAREHOUSE - ASHEVILLE, N.C., March 30 - The North Carolina Department -of Commerce said Electrolux AB of Sweden's White Consolidated -Industries subsidiary will locate a new 15 mln dlr 352,000 -square foot national appliance parts distribution center at -Asheville, N.C. - It said the center will handle parts for Frigidaire, -Tappan, Kelvinator, Gibson, Vesta and White-Westinghouse -product lines. Each now has a separate distribution center. - The department said construction will start immediately and -should be finished in late 1987. - Reuter - - - -30-MAR-1987 14:30:15.88 - -ukfrance - - - - - -RM -f2215reute -u f BC-SALOMON-SA-EURO-CP/CR 03-30 0106 - -SALOMON SA EURO-CP/CREDIT TERMS DETAILED - LONDON, March 30 - A seven-year credit facility for Salomon -SA, the French ski bindings and boots maker, will have a -facility fee of 7.5 basis point, banking sources said. - The financing involves a 75 mln dlr euro-commercial paper -program which will be supported by a 75 mln dlr committed -syndicated revolving credit. Morgan Guaranty Ltd is the -arranger. - Drawings on the revolving credit will be at a margin of 10 -basis points over the London Interbank Offered Rate (LIBOR). -Banks are being invited to join at 7.5 mln dlrs for 10 basis -points and at five mln dlrs for eight basis points. - Reuter - - - -30-MAR-1987 14:32:12.01 -grainwheatcornoilseedsoybean -usa - - - - - -C G -f2221reute -f f BC-export-inspections 03-30 0015 - -******U.S. EXPORT INSPECTIONS, IN THOUS BUSHELS SOYBEANS 17,683 WHEAT 20,717 CORN 36,581 -Blah blah blah. - - - - - -30-MAR-1987 14:32:29.52 - -usa - - -cbtnyce - - -F RM -f2222reute -u f BC-REGULATORS-TO-CONSIDE 03-30 0112 - -REGULATORS TO CONSIDER CBT EVENING SESSION - WASHINGTON, March 30 - The Commodity Futures Trading -Commission, CFTC, said that on April 15 it will consider the -Chicago Board of Trade's proposal to establish night trading. - The Chicago exchange hopes to begin night trading at the -end of the month. The proposed trading session -- which would -be the first in the United States -- would extend from 1700 to -2100 local time (2300 to 0300 GMT). - CFTC also said that on April 22 it will consider the -Philadelphia Board of Trade's application to trade futures on -the Australian dollar and the New York Cotton Exchange's -application to trade the five-year U.S. Treasury Index. - Reuter - - - -30-MAR-1987 14:35:33.56 - -west-germanyjapan - - - - - -F -f2239reute -r f BC-SONY-INCREASING-PRODU 03-30 0099 - -SONY INCREASING PRODUCTION ABROAD - BONN, March 30 - Sony Corp <SNE.T> will increase production -abroad to overcome falling profits caused by the yen's rise -against the dollar, managing board chairman Akio Morita told -the West German newspaper Die Welt. - He was quoted as saying that Sony, whose latest profit -figures had been affected strongly by dollar fluctuations, -would increase production in the U.S. And Europe. - Several production facilities were being built, he added. -"At the same time we are also investing capital in order to -modernise our locations and raise our productivity." - Morita said that to overcome the same currency problems, -Japan needs to restructure its economy in order to live less -from exports and more from domestic demand. - He said U.S. And European companies had made the mistake of -not investing enough in the future, which was why they had lost -their lead in consumer electronics. - "They may spend a lot of money on research and development," -he said. "But planning and marketing are very important sectors -in developing a marketable product." - "If they don't spend money on these, they can't build up new -business lines." - Speaking of difficulties foreign firms experience in -penetrating the Japanese market, Morita said "Naturally, I have -to admit that there are still many obstacles in Japan." - On the other hand, many foreign firms were too interested -in short-term success, he said. - "If, therefore, a company comes to Japan and wants to make a -profit at once on this market, it is not so simple." - "These people then complain, while the successful firms keep -their mouths shut," Morita said. - Reuter - - - -30-MAR-1987 14:36:52.17 -earn -usa - - - - - -F -f2244reute -u f BC-NEWMONT-MINING-<NEM> 03-30 0084 - -NEWMONT MINING <NEM> PLANS 2-FOR-1 STOCK SPLIT - NEW YORK, March 30 - Newmont Mining Corp's board has -proposed a two-for-one stock split subject to shareholder -approval of an increase to 120 mln from 60 mln in authorized -common shares, the proxy for the company's annual meeting said. - If holdings voting at the May six meeting in Wilmington, -Del., approve the increase in authorized shares the split will -be paid in the form of a stock dividend on June 10 to holders -of record May 20, the proxy said. - Newmont said it will also ask shareholders to approve -amendments to its certificate of incorporation limiting certain -liabilities of its directors. - Reuter - - - -30-MAR-1987 14:38:10.07 - -mexico - - - - - -F -f2254reute -u f BC-MEXICO-FUND-<MFX>-TO 03-30 0086 - -MEXICO FUND <MFX> TO BUY BACK TWO MLN SHARES - MEXICO CITY, March 30 - The Mexico Fund Inc said its board -authorized an offer to purchase two mln shares, or about 10.2 -pct, of its common stock at 6.75 dlrs a share cash. - The fund, at a special board meeting, said the offer is not -conditioned on any minimum number of shares being tendered. - The fund has issued and outstanding 19,513,200 shares of -common stock, it said. As of March 26, 1987, the fund said the -net asset value of its shares was 8.13 dlrs. - The fund said it intends to commence the offer by a mailing -to its shareholders as soon as possible. - It said it purchased shares of its stock in open market -transactions prior to the proposed cash tender and intends to -purchase additional shares at prevailing market prices after -completion of the offer. - The fund's last price per share on the New York Stock -Exchange at the halt was 5-3/4. - Reuter - - - -30-MAR-1987 14:42:08.80 - -usa - - - - - -F -f2265reute -d f BC-QUARTZ-ENGINEERING-<Q 03-30 0046 - -QUARTZ ENGINEERING <QRTZ> GETS SIEMENS ORDER - TEMPE, Ariz., March 30 - Quartz Engineering and Materials -Inc said it has received a 500,000 dlr order from <Siemens AG> -of West Germany for its ATMOSCAN automated environmentally -controlled semiconductor wafer processing system. - Reuter - - - -30-MAR-1987 14:43:54.75 -earn -usa - - - - - -F -f2273reute -d f BC-DENPAC-CORP-<DNPC>-YE 03-30 0043 - -DENPAC CORP <DNPC> YEAR LOSS - HACKENSACK, N.J., March 30 - - Shr loss one ct vs loss one ct - Net loss 483,518 vs loss 220,582 - Sales 381,841 vs 400,518 - NOTE: 1985 net includes 196,868 dlr gain from forgiveness o -accrued interest due to affiliates. - Reuter - - - -30-MAR-1987 14:44:06.64 -earn -usa - - - - - -F -f2275reute -d f BC-<AIN-LEASING-CORP>-3R 03-30 0049 - -<AIN LEASING CORP> 3RD QTR JAN 31 LOSS - GREAT NECK, N.Y., March 30 - - Shr loss six cts vs profit 22 cts - Net loss 133,119 vs profit 496,391 - Revs 136,918 vs 737,917 - Nine mths - Shr loss 21 cts vs profit 15 cts - Net loss 478,991 vs profit 340,210 - Revs 324,011 vs 841,908 - Reuter - - - -30-MAR-1987 14:47:20.29 - -usa - - - - - -F -f2282reute -r f BC-WARNER-LAMBERT-<WLA> 03-30 0097 - -WARNER-LAMBERT <WLA> WINS PACKAGING SUIT - MORRIS PLAINS, N.J., March 30 - Warner-Lambert Co said a -federal court judgment resulted in <My-K Laboratories Inc> -agreeing to discontinue the sale of cough syrup and a -children's allergy elixir because it imitates Warner-Lambert -packaging. - Warner-Lambert said the final consent judgment was entered -in the U.S. District Court of the Northern District of -Illinois. It also said the packaging in question imitated its -own packaging of Benylin and Benadryl products. - My-K agreed to adopt different packaging, Warner-Lambert -said. - Reuter - - - -30-MAR-1987 14:47:40.85 - -usa - - - - - -F -f2284reute -d f BC-HARTMARX-<HMX>-UNIT-P 03-30 0094 - -HARTMARX <HMX> UNIT PRESIDENT RESIGNS - CHICAGO, March 30 - Hartmarx Corp said Geoffrey Bloom -resigned as president and chief executive officer of its -Jaymar-Ruby Inc subsidiary to accept the position of president -and chief operating officer of Wolverine World Wide Inc <WWW>. - It said Elbert Hand, president and chief operating officer -of Hartmarx, and president and chief executive officer of the -Hartmarx Men's Apparel Group, was named chief executive officer -of Jaymar-Ruby Inc. Burton Ruby, son of the Jaymar-Ruby -founder, remains as chairman. - - Reuter - - - -30-MAR-1987 14:48:20.82 - -usa - - - - - -A -f2286reute -u f BC-SENATE-BILL-WOULD-ALL 03-30 0102 - -SENATE BILL WOULD ALLOW FARM LOAN WRITE-DOWNS - WASHINGTON, March 30 - The U.S. Senate has approved a -measure that would allow an estimated 4,200 agricultural banks -to write off loan losses over ten years. - The measure, offered by Sen. Alan Dixon (D-Ill.), was -attached to a bill to recapitalize the Federal Savings and Loan -Insurance Corp that the Senate approved March 27. - Dixon's amendment would permit agricultural banks -- banks -with assets of 100 mln dlrs or less and at least 25 pct of -total loans in farm loans -- to write down over ten years -agricultural loan losses incurred between 1984 and 1992. - Reuter - - - -30-MAR-1987 14:49:29.53 - -usa - - - - - -C G -f2291reute -r f BC-U.S.-SENATE-BUDGET-CH 03-30 0131 - -U.S. SENATE BUDGET CHIEF EYES FARM POLICY CHANGE - WASHINGTON, March 30 - U.S. Senate Budget Committee -Chairman Lawton Chiles' (D-Fla.) fiscal 1988 budget plan would -cut farm spending by about two billion dlrs, primarily by -making unspecified changes in price and income support -programs, Senate staff members said. - Chiles presented his budget blueprint late last week and -said he would like to begin voting on it this week. - Senate Republican staff members said Chiles was -recommending that policy changes be adopted for 1988 crops. - While savings from the changes would accrue mainly in -fiscal 1989, Chiles said his income and price support proposals -would trim about two billion dlrs from advance deficiency -payments, most of which would be made in the spring of next -year. - It was not clear how the Senate Budget panel head would -achieve the savings in Commodity Credit Corp outlays. Aides to -Chiles would not comment on how the CCC savings would be made. - Recently the Congressional Budget Office released a report -listing possible price and income support program savings. - The options included lowering target prices, increasing -unpaid acreage reduction programs, targeting income support -payments to specific groups of producers, limiting the use of -generic commodity certificates, raising loan rates and -"decoupling" income support payments from production decisions. - Chiles proposed saving about 100 mln dlrs by freezing the -U.S. Agriculture Department's discretionary spending functions -which include research and credit programs, Senate staff said. - The Florida senator's plan also would provide 30 mln dlrs -for organic farming research and 20 mln dlrs for homeless aid. - Reuter - - - -30-MAR-1987 14:54:12.48 - -usasouth-africa - - - - - -F -f2301reute -u f BC-newmont-mining-<nem> 03-30 0112 - -NEWMONT MINING <NEM> SEEKS SOUTH AFRICAN SALE - NEW YORK, March 10 - Newmont Mining Corp will seek -favorable terms for sale of its South African investments, the -proxy statement for its annual meeting said. - Recommending that shareholders vote against a proposal -calling expeditious withdrawal from South Africa, the proxy -said "a quick sale could be akin to abandonment" because of the -depressed state of metal mining stocks and exchange rates on -capital withdrawals from South Africa. - The proxy said the company gave close consideration to -alternatives to the continued holdings of four existing South -African metal mining investments during the past year. - Pointing out "a measurable number of investors incline to -support" resolutions calling for South African divestment as -part of their effort to avoid pressure to sell a given stock, -the company said "this largely unspoken agenda of many -supporters of disinvestment does receive attention by the -corporation." - Because of this, Newmont Mining said it "is prepared to -consider, and will seek, favorable terms for sale of its South -African investments," but asked stockholders to reject the -resolution calling for withdrawal and leave the matter to the -continuing judgment of management. - Reuter - - - -30-MAR-1987 15:00:51.14 -crude -venezuela - - - - - -Y -f2311reute -u f BC-VENEZ- 03-30 0109 - -VENEZUELA WANTS TO BOOST ITS REFINING CAPACITY - SAN ANTONIO, TEXAS, March 30 - Venezuela's state oil -company Petroleos de Venezuela S.A. wants to raise its -worldwide refining capacity by 150,000 barrels of per day, a -company official attending the National Petroleum Refiners -Association meeting here said. - He declined to be identified but said PdVSA has the -capacity to refine about 650,000 bpd of crude oil from refining -centers -in Venezuela, Sweden, West Germany, Belgium, and the United -States. The company recently purchased a 50 pct stake in the -Corpus Christi, Texas refinery of Champlin Petroleum Co, a -subsidiary of Union Pacific Corp <UNP>. - Earlier it bought a similar stake in the Lake Charles, La -refinery owned by Citgo Petroleum Corp, a unit of Southland -Corp <SLC>. - According to the official, Venezuela is searching -worldwide for the additional refining capacity but he did not -mention where the company was looking. - Refineries abroad, he said, guarantee a refining outlet for -Venezuelan crude oil while ensuring stability of supply to -refiners. - He said Venezuela currently produces about 1.4 mln bpd of -crude oil, which is in line with its 1.495 bpd OPEC ceiling. - Reuter - - - -30-MAR-1987 15:02:17.84 - -usa - - - - - -F -f2316reute -r f BC-AUDI-OFFERS-CASH-INCE 03-30 0132 - -AUDI OFFERS CASH INCENTIVE TO CURRENT OWNERS - TROY, MICH., March 30 - Audi of America Inc said it -introduced the "Audi Private Purchase Plan" in which it will -offer 5,000 dlr purchase certificates exclusively to current -owners of 1984-86 Audi 5000 vehicles. - It said owners must apply the certificates toward purchase -or lease of any new 1987 Audi 5000 series vehicle. - The program will run between April 1 and June 30, and more -than 150,000 certificates will be mailed. - A company spokesman said eligible owners need not trade in -their old cars to take advantage of the offer. - He also said the scheme was not prompted by the fact that -Audi had to recall thousands of its cars earlier this year to -correct a possible defect that caused some of the cars to -accelerate suddenly. - Reuter - - - -30-MAR-1987 15:05:58.06 -earn -usa - - - - - -F -f2335reute -r f BC-PRIMEBANK-<PMBK>-SETS 03-30 0037 - -PRIMEBANK <PMBK> SETS 10 PCT STOCK DIVIDEND - GRAND RAPIDS, Mich., March 30 - PrimeBank Federal Savings -Bank said its board declared a 10 pct stock dividend to be -distributed about April 15 to holders or record March 31. - Reuter - - - -30-MAR-1987 15:06:30.04 -earn -usa - - - - - -F -f2336reute -d f BC-AMERICAN-LOCKER-GROUP 03-30 0074 - -AMERICAN LOCKER GROUP INC <ALGI> 4TH QTR NET - JAMESTOWN, N.Y., March 30 - - Shr profit 23 cts vs loss six cts - Net profit 319,564 vs loss 84,203 - Sales 6,419,230 vs 5,583,560 - Year - Shr profit 1.11 dlrs vs profit 43 cts - Net profit 1,582,125 vs profit 654,083 - Sales 26.2 mln vs 22.6 mln - NOTE: Full year 1985 includes gains of two cts per share -from discontinued operations and four cts per share from -disposal of assets. - Reuter - - - -30-MAR-1987 15:15:20.33 -acq -usa - - - - - -F -f2351reute -b f BC-TAFT 03-30 0087 - -BASS GROUP SAYS IT HAS HAD TALKS ON TAFT <TFB> - WASHINGTON, March 30 - A group led by members of the -wealthy Bass family of Fort Worth, Texas, which holds a 24.9 -pct stake in Taft Broadcasting Co, said it has had talks about -taking part in a move to take control of the company. - In a filing with the Securities and Exchange Commission, -the group said it has had discussions with other Taft -stockholders and some company managers and directors -"concerning participation in a group to acquire control" of the -company. - The Bass group, which did not identify any of the other -people with whom it said it has had talks, said it plans to -continue evaluating Taft and "will be involved in further -discussions relating to the future control and direction" of -the company. - The group, which holds 2,291,210 Taft common shares, said -its members may buy more shares of Taft common stock, or may -decide to sell some or all of its stake. - On Friday Taft said it would negotiate with a group led by -its vice chairman, Dudley Taft, and a Rhode Island investment -firm, which had offered 150 dlrs a share for the company. - The Dudley Taft group, Theta Corp, which also includes -Narragansett Capital Corp, a Providence, R.I., investment firm, -is seeking to take the company private in a leveraged buyout -valued at 1.38 billion dlrs. - Besides the Bass group, another major Taft shareholder, -Cincinnati, Ohio, financier Carl Lindner, has also said he has -had talks about increasing his stake in the company, taking -part in a takeover effort, or launching one himself. - Lindner controls 1,489,298 shares of Taft common stock, or -16.2 pct of the total. - Reuter - - - -30-MAR-1987 15:16:34.99 -iron-steel -usa - - - - - -MQ FQ -f2355reute -u f BC-us-steel-production 03-30 0077 - -U.S. STEEL PRODUCTION ROSE 1.3 PCT IN WEEK - New York, March 30 - Steel production rose -1.3 pct to 1,696,000 short tons in the -week ended March 28 from 1,675,000 short -tons, the American Iron and Steel Institute -reported - Production so far this year was 18,810,000 tons adjusted off -14.6 pct from 22,016,000 tons -produced by the nations mills a year ago. - Utilization for the week of March 28 was 78.7 pct and for -the week of March 21 was was 77.8 pct. - Reuter - - - -30-MAR-1987 15:17:57.62 -earn -usa - - - - - -F -f2366reute -r f BC-NORTH-AMERICAN-GROUP 03-30 0070 - -NORTH AMERICAN GROUP <NAMG> 4TH QTR OPER LOSS - CHICAGO, March 30 - - Oper shr loss 12 cts vs loss 10 cts - Oper net loss 474,270 vs loss 369,848 - Revs 202,500 vs 111,210 - Avg shrs 3,904,373 vs 3,495,579 - Year - Oper shr loss 28 cts vs loss 46 cts - Oper net loss 1,069,550 vs loss 893,612 - Revs 408,031 vs 438,933 - Avg shrs 3,785,607 vs 1,944,627 - NOTE: Full name is North American Group Ltd - Earnings exclude losses on reorganization expenses of -33,453 dlrs, or one ct a share vs 59,520 dlrs, or two cts a sh -are in the quarter and losses of 237,859 dlrs, or six cts a -share vs 413,444 dlrs, or 21 cts a share for the year - Earnings exclude gains on discontinued operations of -147,671, or four cts a share in the 1985 quarter and gains of -760,603 dlrs, or 20 cts a share vs 520,200 dlrs, or 27 cts a -share for the year - Reuter - - - -30-MAR-1987 15:18:39.33 - -usa - - - - - -F -f2371reute -u f BC-PAY-'N-PAK-<PNP>-TO-E 03-30 0079 - -PAY 'N PAK <PNP> TO EXPLORE ITS ALTERNATIVES - KENT, Wash., March 30 - Pay 'N Pak Stores Inc said it -intends to explore all alternatives for the purpose of -maximizing its value to stockholders. - The company said it also retained Salomon Brothers Inc as -its financial advisor to assist it in this regard. - Last week investor Paul Bilzerian reported that he holds a -7.2 pct stake in Pay 'N Pak and is considering seeking control -of the retail building materials firm. - In a filing with the Securities and Exchange Commission -Bilzerian said he and a Tampa, Fla., investment firm he -controls called Bicoastal Financial Corp, may acquire -additional Pay 'N Pak shares, or they may seek to acquire one -or more positions on the company's board. - He also said in the filing that he may attempt to obtain a -controlling interest through a tender offer or otherwise. - Reuter - - - -30-MAR-1987 15:20:25.66 - -usa - - - - - -RM A -f2377reute -r f BC-SOCIETY-FOR-SAVINGS-< 03-30 0111 - -SOCIETY FOR SAVINGS <SOCS> TO OFFER NOTES - NEW YORK, March 30 - Society for Savings said it will offer -up to 100 mln dlrs of medium-term notes with maturites of one -to five years through Goldman, Sachs and Co and Shearson Lehman -Brothers Inc. - The notes will be supported by an irrevocable letter of -credit by the Federal Home Loan Bank of Boston. Each note will -bear interest at a fixed-rate or variable rate formula -established at the time of issuance, Society for Savings said. - Bankers Trust Co will act as fiscal and paying agent. -Non-redeemable to maturity, the notes will be issued only in -registered form and in minimum denomiations of 100,000 dlrs. - Reuter - - - -30-MAR-1987 15:20:32.84 -earn -usa - - - - - -F -f2378reute -r f BC-<OXOCO-INC>-YEAR-LOSS 03-30 0072 - -<OXOCO INC> YEAR LOSS - HOUSTON, March 30 - - Oper shr loss 6.68 dlrs vs loss 9.95 dlrs - Oper net loss 53.9 mln vs loss 69.8 mln - Revs 16.5 mln vs 33.2 mln - Avg shrs 8,329,492 vs 7,271,668 - NOTE: 1986 excludes loss 12.9 mln for discontinued -compressor operations vs loss 14.9 mln year prior. - 1986 excludes gain of 98.7 mln for extinguishment of debt -from company's chapter 11 filing and subsequent reorganization. - Reuter - - - -30-MAR-1987 15:20:48.00 -earn -usa - - - - - -F -f2380reute -d f BC-TEECO-PROPERTIES-L.P. 03-30 0094 - -TEECO PROPERTIES L.P. OPER INCOME DOWN - NEW YORK, March 30 - <Teeco Properties L.P.> said the -partnership recorded income from operations for 1986 of 140,000 -dlrs, or two cts a unit. - The partnerhsip said this compared to 1985 figures of -660,000 dlrs, or 10 cts a unit. - Results of operations between both years is not comparable -since the partnership's principle objective is to sell or -dispose of its assets and distribute proceeds to unit holders, -according to the partnership. - It said the number of units outstanding for both years is -6,479,516. - - Reuter - - - -30-MAR-1987 15:20:52.65 -earn -usa - - - - - -F -f2381reute -d f BC-BROUGHER-INSURANCE-GR 03-30 0042 - -BROUGHER INSURANCE GROUP INC<BIGI> 4TH QTR LOSS - GREENWOOD, Ind., March 30 - - Shr loss nine cts vs profit 20 cts - Net loss 257,157 vs profit 414,890 - Year - Shr profit 54 cts vs profit 1.05 dlrs - Net profit 1,295,104 vs profit 2,140,673 - Reuter - - - -30-MAR-1987 15:22:33.92 - -usa - - - - - -F -f2385reute -d f AM-COURT-CARS 03-30 0099 - -HIGH COURT DECLINES TO REVIEW AIR BAG RULE - WASHINGTON, March 30 - The Supreme Court declined to review -a federal regulation requiring automobile manufacturers to -phase in automatic seat belts or air bags for new cars sold in -the United States. - The Department of Transportation (DOT) rule required that -the safety devices be installed, for the first time, on 10 pct -of this year's model cars. All new cars must have the devices -by the 1990-model year. - The regulation, however, can be rescinded if states with -two-thirds of the U.S. population adopt mandatory seat belt-use -laws by 1989. - Reuter - - - -30-MAR-1987 15:24:34.95 - -uk - - - - - -A -f2395reute -w f BC-TRADE-BODY-SETS-NEW-R 03-30 0105 - -TRADE BODY SETS NEW RULES FOR EURODLR MANAGERS - London, March 30 - The International Primary Market Makers -Association, a trade organisation, said its board last week -adopted new rules recommending lead managers of eurodollar bond -issues make a market in that security for 12 months. - Currently, while there is an implied obligation on the part -of firms to make markets in issues they underwrite, there is no -formal obligation to do so. - Christopher Sibson, secretary general of IPMA, in -explaining why the recommendation was adopted, said "It is aimed -at the problem of the lead manager who does a deal and -disappears." - Sibson said the organization cannot force its members to -adhere to the rule. "We're under no illusions about the legal -binding force of these recommendations," he said. - Lead managers have occasionally abandoned efforts to -support an unprofitable issue just a short while after it has -been offered, leaving investors and smaller firms with no one -to buy it back from them. - Most recently, when prices of perpetual floating rates -notes (FRNs) suddenly plunged, most market makers abandoned the -securities altogether, leaving investors stuck with about 17 -billion dlrs worth of unmarketable securities on their books. - Sibson noted that the recommendation adopted by the board -only applies to fixed-rate dollar issues and would not have -helped the floating rate sector out of its current crisis. - Among other measures, the IPMA also decided that the -criteria for membership should be tightened to exclude some of -the smaller firms. - Under the new rules, a firm must be the book running lead -manager during the two preceding years of 12 internationally -distributed debt issues denominated in U.S. Dlrs or in one of -eight other major currencies. - The former requirement called for three lead-managed -issues. Sibson said he expects the tighter entrance -requirements to pare 3he current list of 67 members down by six -to 10 members. - Smaller firms have criticized IPMA's efforts to restrict -membership to the larger firms, saying it is anti-competitive -and that it reinforces the big firms' already large market -share. - "Belonging to IPMA carries a certain amount of prestige with -borrowers," said a dealer at a small foreign bank. "The borrower -says to himself, "Well I can travel economy or I can travel -first class,'" he said. - Reuter - - - -30-MAR-1987 15:26:11.53 -iron-steel -usa - - - - - -F -f2401reute -r f BC-CSC-INDUSTRIES-UNIT-T 03-30 0091 - -CSC INDUSTRIES UNIT TO INCREASE PRICES - WARREN, Ohio, March 30 - Copperweld Steel Co <CPSL>, a -subsidiary of CSC Industries Inc., said it will increase from -market price levels its bar, semi-finished and leaded products -effective July One. - Hot rolled and cold finished bar wil be increase 25 dlrs -per net ton, while semi-finished products will be increased 15 -dlrs per net ton, the company said. - Anticipated higher energy and raw material costs, combined -with current market trends, were cited by the company as -reasons for the increases. - Reuter - - - -30-MAR-1987 15:26:25.70 -grainwheat -usa - - - - - -C G -f2402reute -u f BC-USDA-TO-UPDATE-WINTER 03-30 0098 - -USDA TO UPDATE WINTER WHEAT ACREAGE TOMORROW - WASHINGTON, March 30 - The U.S. Agriculture Department said -it will update its estimate of winter wheat seeded acreage in -the prospective planting report, scheduled for release at 1500 -est (2100 gmt) tomorrow, March 31. - The original estimate of seedings of winter wheat was -published in January. - It said the new survey is possible because of the new -integrated nationwide survey program that uses probability -sampling procedures that combine information from farmers -operating in selected areas and farmers identified on special -lists. - Reuter - - - -30-MAR-1987 15:27:02.85 -acq -usa - - - - - -F -f2404reute -b f BC-SANTA-FE-<SFX>-AWARE 03-30 0121 - -SANTA FE <SFX> AWARE OF HENLEY <HENG> STAKE - CHICAGO, March 30 - Santa Fe Southern Pacific Corp said it -has discussed with Henley Group that company's almost five pct -stake and was told the holdings are for investment purposes. - "We have confirmed with the Henley Group that they own -approximately 7.9 mln shares of Santa Fe Southern Pacific -common stock. They have informed me that they like our company -and purchased the stock last year for investment purposes," -Santa Fe chairman John Schmidt said in a statement. - Henley late Friday filed a 10-K report with the Securities -and Exchange Commission concerning the Santa Fe stake. - Earlier Santa Fe's stock was up 4-7/8 to 41 before slipping -to be up 1-7/8 at 38. - Reuter - - - -30-MAR-1987 15:29:30.70 - -usa - - - - - -F -f2406reute -r f BC-OXOCO-CONCLUDES-PRIVA 03-30 0097 - -OXOCO CONCLUDES PRIVATE SALE OF NEW COMMON - HOUSTON, March 30 - Oxoco Inc said it concluded the private -placement of 3,906,250 shares of its new common stock at an -average purchase price of 1.28 dlrs per share for a cash -payment of five mln dlrs. - Oxoco said the sale was to a group of venture capital -investors led by Hambrecht and Quist of San Francisco. - It said the venture capitalists now own 71.6 pct of the -outstanding stock of the company. - In addition, Andrew Loomis and Michael McGovern were -elected chairman and co-chairman, respectively, of the company, -it said. - Reuter - - - -30-MAR-1987 15:29:47.66 -sugar -usa - - - - - -C T -f2407reute -b f BC-sugar-imports 03-30 0122 - -U.S. SUGAR IMPORTS DOWN IN LATEST WEEK - USDA - WASHINGTON, March 30 - Sugar imports subject to the U.S. -sugar import quota during the week ended March 6 totaled 25,192 -short tons versus 29,043 tons the previous week, the -Agriculture Department said. - Cumulative imports now total 130,804 tons, it said. - The sugar import quota for the 1987 quota year -(January-December) has been set at 1,001,430 short tons -compared with 1,850,000 tons in the 1986 quota year, which was -extended three months to December 31. - The department said the Customs Service reported that -weekly and cumulative imports are reported on an actual weight -basis and when final polarizations are received, cumulative -import data are adjusted accordingly. - Reuter - - - -30-MAR-1987 15:39:21.47 - -usa - - - - - -F -f2427reute -u f BC-TRANSAMERICAN-FILES-A 03-30 0092 - -TRANSAMERICAN FILES AMENDED REORGANIZATION PLAN - HOUSTON, March 30 - TransAmerican Natural Gas Corp, which -has been operating under Chapter 11 bankruptcy protection since -January 1983, said it filed an amended and restated negotiated -plan of reorganization. - A hearing on the adequacy of the disclosure statement is -scheduled for April 29 in the U.S. Bankruptcy Court for the -Southern District of Texas. - Basic terms of the amended and restated negotiated plan -have not changed from the original plan filed last October, the -company said. - The amended filing reflects adding ancillary documents to -the plan filed in October, it said. - Assuming the plan is found adequate on April 29, -TransAmerican would then seek acceptance from creditors which -is relatively assured since they participated in the -negotiations, the company said. - Liabilities in excess of one billion dlrs are being -reorganized under the amended plan which provides for full -debt-repayment to secured bank lenders. - Unsecured creditors would receive either 100 pct repayment, -secured by liens on assets, or one-time lump sum payments of 25 -to 35 cts on the dollar, in cash, shortly after confirmation of -the plan by the court. - TransAmerican is vigorously resisting efforts by Coastal -Corp <CGP> to acquire its assets through a subsequent plan of -liquidation. - The spokesman said the company is confident its plan will -be confirmed and is optimistic that it will emerge from Chapter -11 as early ninety days after the April 29 confirmation. - A Coastal spokesman said it will file a plan in April with -the court and will request the court to review its plan. - On March 17, the company said that as a creditor, which is -owed 625,000 dlrs, it has a right to file its own plan which -will better serve the other creditors in a shorter time. - A TransAmerican spokesman said the net worth of Coastal's -offer is less than 25 pct of the fair market value of -Transamerican's assets which are in excess of one billion dlrs. - - Reuter - - - -30-MAR-1987 15:44:23.25 - -usa - - - - - -F -f2434reute -r f BC-TEXTRON-<TXT>-TO-REPA 03-30 0114 - -TEXTRON <TXT> TO REPAY DEBT THROUGH ASSET SALES - PROVIDENCE, R.I., March 30 - Texton Inc said it intends to -repay a substantial portion of the debt generated to acquire -Ex-Cell-O Corp last year through internally generated cash and -proceeds from the sale of assets. - Textron financed the acquisition by borrowing about one -billion dlrs under promissory notes, subsequently refinanced -through the sale of commercial paper and bank borrowings. - The large diversified conglomerate with operations ranging -from defense to consumer and financial services, said in its -annual report that it has not yet identified the units, other -than its Gorham division, it expects to sell. - Textron said it did expect to identify the units it intends -to sell during the next year. It said the sales are expected to -reduce income from continuing operations as the units' earnings -will exceed the interest on the debt retired with the proceeds -of the sales. - It also said it plans to "return to a more conservative -balance sheet ratio of debt-to-capital," through asset sales -and increasing cash flow from continuing operations. - It also said it will continue to examine "large acquisition -opportunities," while "pruning" operations no longer expected -to meet its strategic requirements. - Reuter - - - -30-MAR-1987 15:51:12.26 -earn -usa - - - - - -F -f2449reute -r f BC-TEMPLETON-ENERGY-INC 03-30 0064 - -TEMPLETON ENERGY INC <TMPL> 4TH QTR NET - HOUSTON, March 30 - - Shr profit four cts vs loss six cts - Net profit 967,000 vs loss 1,219,000 - Revs 10.1 mln vs 4.5 mln - Year - Shr profit three cts vs loss five cts - Net profit 688,000 vs 982,000 - Revs 24.6 mln vs 16.3 mln - NOTE: 1986 includes results of Louisiana Energy and -Development Corp acquired in November 1986. - Reuter - - - -30-MAR-1987 15:52:04.99 -earn -usa - - - - - -F -f2450reute -r f BC-AEL-INDUSTRIES-<AELNA 03-30 0063 - -AEL INDUSTRIES <AELNA> 4TH QTR FEB 27 NET - LANSDALE, Pa., March 30 - - Shr 66 cts vs 33 cts - Net 2,955,000 vs 1,563,000 - Revs 26.1 mln vs 23.9 mln - 12 mths - Shr 74 cts vs 1.01 dlrs - Net 3,321,000 vs 4,739,000 - Revs 108.4 mln vs 104.9 mln - NOTE: year 1987 includes charge of 818,000 dlrs, or 18 cts -per share, for sale of Elisra Electronic Systems Ltd. - Reuter - - - -30-MAR-1987 15:54:36.57 -acq -usa - - - - - -F -f2452reute -r f BC-AMOSKEAG-<AMKG>-TAKEO 03-30 0084 - -AMOSKEAG <AMKG> TAKEOVER BLOCKED BY COURT - MANCHESTER, N.H., March 30 - Amoskeag Bank Shares Inc said -the New Hampshire Supreme Court overturned its proposed -acquisition of Portsmouth Savings Bank in a three-two vote. - The acquisition had been opposed by some depositors, who -filed an action to block the takeover. - "We will respond to this news as soon as we have had an -opportunity to analyze the decision, and any and all options -available to us," chairman William Bushnell said in a -statement. - Reuter - - - -30-MAR-1987 15:55:50.23 -earn -usa - - - - - -F -f2454reute -d f BC-METROMAIL-<MTMA>-PRED 03-30 0117 - -METROMAIL <MTMA> PREDICTS FLAT EARNINGS - LINCOLN, Neb., March 30 - Metromail Corp said it expects -flat operating profits for its 1987 fiscal year ending May 31 -with last fiscal year's earnings from operations of 9,943,000 -dlrs, or 1.05 dlrs a share. - The company said the flat results will be due to higher -than normal expenditures during the fourth quarter for -expansion of its data processing capabilities. - Earlier, Metromail reported fiscal 1987 third quarter -earnings of 2.4 mln dlrs, or 25 cts a share, versus three mln -dlrs, or 32 cts a share, the prior third quarter, and nine -months net of 7.2 mln dlrs, or 76 cts a share, versus 7.8 mln -dlrs, or 82 cts a share the prior nine months. - Reuter - - - -30-MAR-1987 15:56:28.52 - -usa - - - - - -F -f2455reute -r f BC-APPLE-<AAPL>-EXPANDS 03-30 0088 - -APPLE <AAPL> EXPANDS NETWORK CAPABILITIES - CUPERTINO, Calif., March 30 - Apple Computer Inc said it -has extended the ability of the Apple MacIntosh personal -computer family to commmunicate over <Northern Telecom Ltd's> -Meridian SL-1 integrated services network. - The new capabilities include linking separate AppleTalk -networks, dial-up remote use of LaserWriter printers, one step -file transfer and conversion and Memorybank 485, a new 485 -megabyte storage subsystem for use with MacIntosh personal -computers, Apple said. - Reuter - - - -30-MAR-1987 15:58:33.75 -acq -usa - - - - - -F -f2457reute -u f BC-BALL-<BLL>-ENDS-TALKS 03-30 0056 - -BALL <BLL> ENDS TALKS WITH MONSANTO <MTC> - MUNCIE, IND., March 30 - Ball Corp said it was unable to -complete negotiations to acquire the plastic container business -of Monsanto Co. - It said the two companies had entered into exclusive -negotiations last October. - Neither company provided details on why the talks were -terminated. - Reuter - - - -30-MAR-1987 15:58:44.17 -oilseedrapeseed -japancanada - - - - - -C G -f2458reute -u f BC-JAPAN-BUYS-CANADIAN-R 03-30 0030 - -JAPAN BUYS CANADIAN RAPESEED - WINNIPEG, March 30 - Japanese crushers bought 2,000 tonnes -of Canadian rapeseed in export business overnight for May -shipment, trade sources said. - Reuter - - - -30-MAR-1987 15:59:18.08 - -usa - - - - - -F -f2459reute -u f BC-NEWMONT-MINING-<NEM> 03-30 0107 - -NEWMONT MINING <NEM> SETS HIGHER SPENDING IN 1987 - NEW YORK, March 30 - Newmont Mining Corp estimates its 1987 -capital spending at 137 mln dlrs, its annual report said. - A company spokesman said this figure excludes <Magma Copper -Co> and compares to spending of about 80 mln dlrs in 1986 -excluding the 45 mln dlrs spent on Magma operations. As -previously announced, Newmont is distributing 80 pct of Magma's -stock to its shareholders in the form of a dividend. - The report also said Newmont Mining increased its ownership -of Du Pont Co <DD> stock during 1986 to 5,970,141 shares at -year end from 5,250,376 shares a year earlier. - Newmont's annual report said the company held 2.5 pct of Du -Pont's stock at the end of 1986, up from 2.2 pct a year -earlier. - The report also said Newmont's proven oil reserves declined -to 7,970,000 barrels at the end of 1986 from 8,530,000 barrels -a year earlier and its natural gas reserves declined to 271.48 -billion cubic feet from 274.82 billion at the end of 1985. - Reuter - - - -30-MAR-1987 15:59:24.50 - -usa - - - - - -F -f2460reute -r f BC-3COM-CORP-<COMS>-INTR 03-30 0085 - -3COM CORP <COMS> INTRODUCES NEW WORKSTATION - SANTA CLARA, Calif., March 30 - 3Com Corp said it -introduced a new network workstation for business applications. - The product, called 3Station, is the first in a family of -network workstations, which will later include a Token Ring -version, the company said. - It said the 3Station is an IBM-compatible 80286-based -Ethernet product which can be integrated with personal -computers on a network. - The company also said it plans to begin shipments on May -15. - Reuter - - - -30-MAR-1987 16:00:03.76 - -usa - - - - - -A RM -f2462reute -r f BC-S/P-AFFIRMS-BANNER-<B 03-30 0110 - -S/P AFFIRMS BANNER <BNR>, LOWERS REXNORD <REX> - NEW YORK, March 30 - Standard and Poor's Corp said it -affirmed Banner Industries Inc's 135 mln dlrs of B-minus -subordinated debt following its purchase of Rexnord Inc. - Rexnord's 50 mln dlrs of 12-3/4 pct debentures of 1994 were -cut to B from A-minus to reflect the merger with Banner. - While increasing Banner's size and diversity, S and P said -the transaction heightens financial risk, with debt to capital -rising to more than 90 pct. - Near-term earnings and cash flow protection will weaken -from the acquisition, though Banner's plans to sell some -Rexnord assets will reduce debt for the medium term. - Reuter - - - -30-MAR-1987 16:00:28.68 -acq -usa - - - - - -F -f2463reute -d f BC-REEF-ENERGY-<RFEN>-EN 03-30 0098 - -REEF ENERGY <RFEN> ENTERS PIPELINE AGREEMENT - TRAVERSE CITY, MICH., March 30 - Reef Energy Corp said its -board entered into agreements with Penteco Corp, a private -Tulsa-based company, to buy a 12-pct interest in the general -partnership of Penteco East Central Pipeline and a 10-pct -interest in Lincoln Gas and Marketing Corp. - Penteco East is a gas gathering and transmission system in -southern Kansas and northern Oklahoma. - It said Penteco in turn has purchased one mln shares of -Reef common and taken options for the purchase of another two -mln shares over the next 36 months. - Reuter - - - -30-MAR-1987 16:00:33.29 -earn -usa - - - - - -F -f2464reute -s f BC-AMERON-INC-<AMN>-QTLY 03-30 0025 - -AMERON INC <AMN> QTLY DIVIDEND - MONTEREY PARK, Calif., March 30 - - Shr 24 cts vs 24 cts prior qtr - Pay May 15 - Record April 24 - - Reuter - - - -30-MAR-1987 16:00:39.33 -earn -usa - - - - - -F -f2465reute -d f BC-JOHNSON-ELECTRONICS-I 03-30 0070 - -JOHNSON ELECTRONICS INC <JHSN> 4TH QTR LOSS - WINTER PARK, Fla., March 30 - - Shr loss three cts vs profit eight cts - Net loss 35,000 vs profit 128,000 - Revs 1,133,000 vs 1,528,000 - Year - Shr profit four cts vs profit 21 cts - Net profit 72,000 vs profit 339,000 - Revs 4,837,000 vs 4,500,000 - NOTE: 1985 net income included an after tax gain of 195,000 -or 12 cts per share on sale of real property. - Reuter - - - -30-MAR-1987 16:01:55.85 -money-fx -usa - - - - - -A RM -f2469reute -u f BC-TREASURY-BALANCES-AT 03-30 0084 - -TREASURY BALANCES AT FED FELL ON MARCH 27 - WASHINGTON, March 30 - Treasury balances at the Federal -Reserve fell on March 27 to 2.424 billion dlrs from 2.508 -billion dlrs on the previous business day, the Treasury said in -its latest budget statement. - Balances in tax and loan note accounts fell to 9.706 -billion dlrs from 10.786 billion dlrs on the same respective -days. - The Treasury's operating cash balance totaled 12.131 -billion dlrs on March 27 compared with 13.283 billion dlrs on -March 26. - Reuter - - - -30-MAR-1987 16:06:38.27 -earn -usa - - - - - -F -f2480reute -r f BC-MORRISON-INC-<MORR>-3 03-30 0049 - -MORRISON INC <MORR> 3RD QTR FEB 28 NET - MOBILE, Ala., March 30 - - Shr 35 cts vs 29 cts - Qtly div 12 cts vs 12 cts prior qtr - Net 5,036,000 vs 4,165,000 - Revs 147.6 mln vs 132.4 mln - Nine mths - Shr 1.12 dlrs vs one dlr - Net 16.1 mln vs 14.4 mln - Revs 433.4 mln vs 385 mln - NOTE: Per share data reflect March 1986 five pct stock -distribution. Cash dividend is payable April 30 to holders of -record April 15. - Reuter - - - -30-MAR-1987 16:06:53.63 - -usa - - - - - -C G -f2481reute -d f BC-FOREIGN-OWNERSHIP-OF 03-30 0127 - -FOREIGN OWNERSHIP OF U.S. FARMLAND UP -- USDA - WASHINGTON, March 30 - Non-U.S. citizens held 12.4 mln -acres of privately owned U.S. agricultural land as of December -31, slightly less than one pct of the total agricultural land, -but 369,000 acres above the foreign ownership at the end of -1985, the U.S. Agriculture Department said. - The department said forest land accounted for 52 pct of all -foreign-owned acreage, cropland 17 pct, pastures and other -agricultural land 26 pct and non-agricultural and unreported -uses, five pct. - Corporations owned 79 pct of the foreign-held acreage, -parternships 11 pct, and individuals eight pct, the department -said. The remaining two pct was held by estates, trusts, -associations, institutions and others, it said. - Reuter - - - -30-MAR-1987 16:07:10.68 - -usasouth-africa - - - - - -F -f2483reute -u f BC-U.S.-GROUP-ASKS-SPECI 03-30 0101 - -U.S. GROUP ASKS SPECIAL ROYAL DUTCH<RD> MEETING - NEW YORK, March 30 - A group of U.S. investors opposed to -Royal Dutch Shell Petroleum Co's South African policies plans -to seek a special shareholders meeting to discuss their -complaints. - Representatives of the American Baptist Churches and the -New York City Teachers Retirement System said the company has -refused to include their proposals in proxy material prepared -for the annual meeting in May. - The group said its proposals call for an end to sales by -Royal Dutch to the South African police and military and -withdrawal from South Africa. - - Reuter - - - -30-MAR-1987 16:08:25.90 -acq -usa - - - - - -F -f2488reute -r f BC-VANDERBILT-<VAGO>-TO 03-30 0116 - -VANDERBILT <VAGO> TO RAISE COMMON, MERGE - LAS VEGAS, March 30 - Vanderbilt Gold Corp said -shareholders at a special meeting approved its reincorporation -in Delaware, an increase in authorized common to 25 mln shares -from 12 mln shares, and a non-qualified stock option plan. - It also said shareholders approved the merger of Morning -Star Mine interests held by six corporations in exchange for -issuing 2,098,602 shares of its common. It said the acquisition -brings its ownership in Morning to over 94 pct and it intends -to acquire the remaining interests before mid year. - It said its plans call for 1987 production of 30,000 ounces -of gold with product costs per ounce at about 200 dlrs. - Reuter - - - -30-MAR-1987 16:10:35.89 -cotton -usa - - - - - -C G -f2491reute -u f BC-/LITTLE-RISK-SEEN-FOR 03-30 0142 - -LITTLE RISK SEEN FOR TEXAS COTTON FROM COLD - New York, March 30 - Texas' cotton crop stands little -chance of damage from frigid temperatures expected tonight in -that state, as very little cotton has been planted, according -to Texas agricultural sources and cotton market analysts. - "It's still pretty early for cotton planting. Only six pct -of the crop was planted as of last week," said Doug Stillmann, -a statistician at the Texas Agricultural Statistic Service in -Austin, a division of the U.S. Agriculture Department. - Stillmann and other cotton market sources said planting had -begun in the Rio Grande Valley and South Texas areas only, with -planting in the crucial high and low plains areas not slated to -begin until next month. The high and low plains accounted for -60 pct of the 2.5 mln bales produced in Texas last year, -Stillmann said. - Temperatures tonight in most of Texas are expected to drop -to freezing to the low 20s, although the lower Rio Grande -Valley may see more moderate readings in the middle 30s, -according to meteorologists at Accu-Weather Inc. - The price of new-crop cotton on the New York cotton futures -market rallied today on weather-related fears. - Reuter - - - -30-MAR-1987 16:11:45.14 -grain -usa - - - - - -C G -f2493reute -u f BC-REPORT-ON-EXPORT-MARK 03-30 0054 - -REPORT ON EXPORT MARKETS FOR U.S. GRAIN DELAYED - WASHINGTON, March 30 - The U.S. Agriculture Department's -report on Export Markets for U.S. Grain, scheudled for release -today, has been delayed until Wednesday, April 1, a department -spokeswoman said. - No reason was given for the delay in releasing the monthly -report. - Reuter - - - -30-MAR-1987 16:12:16.53 -acq - - - - - - -F -f2497reute -b f BC-******BILZERIAN-TELLS 03-30 0010 - -******BILZERIAN TELLS SEC HE UPS PAY 'N PAK STAKE TO 9.9 PCT -Blah blah blah. - - - - - -30-MAR-1987 16:13:10.33 - -usa - - - - - -F -f2501reute -d f BC-ALLIED-SIGNAL-<ALD>-G 03-30 0037 - -ALLIED-SIGNAL <ALD> GETS 38.6 MLN DLR CONTRACT - WASHINGTON, March 30 - Allied Corp, a division of -Allied-Signal Inc, has received a 38.6 mln dlr contract for -work on F-15 aircraft avionics maintenance, the Air Force said. - reuter - - - -30-MAR-1987 16:16:09.66 - -usa - - - - - -F -f2503reute -r f BC-MORRISON-<MORR>-SETS 03-30 0055 - -MORRISON <MORR> SETS SHAREHOLDER RIGHTS PLAN - MOBILE, Ala., March 30 - Morrison Inc said its board -adopted a shareholder rights plan to deter any possible hostile -takeover of the company. - It said details of the plan will be released shortly. A -record date of April 10 was set for the distribution of the -rights to shareholders. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-012.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-012.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-012.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-012.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2010 +0,0 @@ - - - 1-APR-1987 11:04:07.01 -earn -usa - - - - - - -F -f1288reute -s f BC-REPUBLIC-SAVINGS-AND 04-01 0039 - -REPUBLIC SAVINGS AND LOAN <RSLA> SETS DIVIDEND - MILWAUKEE, Wis., April 1 - - Qtly div 30 cts vs 30 cts prior - Pay April 27 - Record April 13 - NOTE: Company's full name is Republic Savings and Loan -Association of Wisconsin. - Reuter - - - - 1-APR-1987 11:04:40.35 -wheatcornsoybeangrainoilseed -usaussr - - - - - - -C G -f1292reute -u f BC-/SHULTZ-USSR-TRIP-FUE 04-01 0108 - -SHULTZ USSR TRIP FUELS TALK OF EEP WHEAT OFFER - By Nelson Graves, Reuters - WASHINGTON, April 1 - Speculation the United States will -offer subsidized wheat to the Soviet Union appears to have -reached a new level of intensity in the run-up to Secretary of -State George Shultz' visit later this month to Moscow. - Rumors of an impending deal have coursed through wheat -markets since officials from the two countries held their -customary, semi-annual grain talks in February. Moscow's -decision at that time to reenter the U.S. corn market -strengthened the perception of warming farm trade prospects. - Shultz is set to arrive in Moscow April 13. - Shultz' statement two weeks ago that he would not stand in -the way of a wheat subsidy offer under the Export Enhancement -Program, EEP, coupled with the announcement of his visit to -Moscow, was interpreted by many grain trade representatives -here as a clear signal that the Reagan administration was -preparing an offer. - Administration officials -- in and out of the U.S. -Agriculture Department -- have been extremely tight-lipped -about the prospects of a subsidy offer. - But USDA officials for the most part have abandoned the -contention the proposal is dormant, suggesting that an offer, -while not a "done deal," is a live possibility. - Prominent U.S. grain trade representatives -- many of whom -asked not to be identified -- continue to maintain that an -offer to subsidize four mln tonnes of wheat is imminent. - Others, who one month ago claimed a deal was not possible, -are saying they would not rule one out. - Rep. Pat Roberts, R-Kan., yesterday went so far as to -predict a subsidy offer would be made within the next ten days -to two weeks. - Aides to Roberts said he had spoken to Republican leaders -who had been in contact with administration officials. - Richard Fritz, director of international marketing at U.S. -Wheat Associates, said he was confident an export enhancement -offer would be made by the middle of this month. - Fritz also said he thought the value of the bonus would end -up being close to the offer Washington made Peking earlier this -year when USDA approved subsidies to China of around 36 dlrs -per tonne on one mln tonnes of wheat. - Some grain trade representatives say a four-mln-tonne wheat -subsidy offer might help stimulate more Soviet purchases of -U.S. corn and open the door to U.S. sales of soybeans. - As ever, one of the crucial sticking points in a wheat deal -would appear to be price. - Last summer the administration took the controversial step -of offering the Soviets subsidized wheat -- but were -embarrassed when Moscow spurned the proposal on the grounds -that the 15-dlr-per-tonne subsidy still left U.S. wheat prices -far above world market prices. - The administration's decision to set the subsidy level up -front instead of accepting bids from exporters appeared to be a -means of controlling the price while attempting to dampen -criticism, grain trade sources said. - Nonetheless, the pricing procedure did not prevent Shultz -from saying the Soviets were "chortling" because Washington was -offering Soviet housewives cheaper grain than that available to -U.S. housewives. - The conventional wisdom among grain trade representatives -here is that a general warming of relations between the two -countries since last summer, combined with continued hard times -in the U.S. grain belt, would favor a subsidy offer. - In addition, the USSR has made it clear it would consider -buying U.S. wheat if it were priced more competitively. - However, observers have not forgotten the circumstances -surrounding the administration's announcement of the wheat -subsidy offer last summer. - Up until the time of the announcment, congressional and -industry leaders were led to believe the White House had -decided to expand the Export Enhancement Program to include not -only the Soviets, but also a much broader list of countries. - Instead, the administration scaled back the offer to -include only the Soviets. - That last-minute change of heart adds a measure of -uncertainty even to the predictions of those most convinced -that the administration will not now pass up the opportunity to -sell four mln tonnes of wheat to the Soviet Union. - Reuter - - - - 1-APR-1987 11:05:07.78 -sugar -ukindia - - - - - - -C T -f1295reute -b f BC-KAINES-CONFIRMS-WHITE 04-01 0062 - -KAINES CONFIRMS WHITE SUGAR SALES TO INDIA - LONDON, April 1 - London-based sugar operator Kaines Ltd -confirmed it sold two cargoes of white sugar to India out of an -estimated overall sales total of four or five cargoes in which -other brokers participated. - The sugar, for April/May and April/June shipment, was sold -at between 214 and 218 dlrs a tonne cif, it said. - Reuter - - - - 1-APR-1987 11:09:07.45 - -usa - - - - - - -F -f1325reute -r f BC-LUXTEC-<LUXT>-CUTS-WA 04-01 0037 - -LUXTEC <LUXT> CUTS WARRANT EXERCISE PRICE - STURBRIDGE, Mass., April 1 - Luxtec Corp said it has -reduced the exercise price of its Class B common stock purchase -warrants to one dlr from two dlrs from today through June 30. - Reuter - - - - 1-APR-1987 11:09:11.43 -earn -usa - - - - - - -F -f1326reute -r f BC-<THL-HOLDINGS-INC>-YE 04-01 0038 - -<THL HOLDINGS INC> YEAR JAN 31 NET - CANTON, Mass., April 1 - - Oper net 94.4 mln vs 74.1 mln - Revs 1.3 bilion vs 1.2 billion - NOTE: THL is parent to SCOA Industries Inc, acquired in a -leveraged buyout in December 1985. - Reuter - - - - 1-APR-1987 11:09:19.56 - -uk - - - - - - -F -f1327reute -d f BC-GUARDIAN-ROYAL-SEES-E 04-01 0111 - -GUARDIAN ROYAL SEES EXPANSION IN LIFE ASSURANCE - LONDON, April 1 - Insurance group Guardian Royal Exchange -Plc <GREX.L> said it would expand its life assurance business -and push further into European markets, but that U.K. -Underwriting losses remained a heavy drag on profits. - Earlier, the group had announced sharply increased pre-tax -profits of 143.8 mln stg for calendar 1986, versus 3.5 mln the -previous year. - "We are anxious to develop our life assurance business," -group managing director Peter Dugdale told a news conference. -"If we have a thrust for the coming years, it is probably best -to spend more time on life in the U.K. And abroad," he said. - Reuter - - - - 1-APR-1987 11:09:50.05 -acqstrategic-metal -usa - - - - - - -M -f1330reute -d f BC-MOUNTAIN-STATES-ADDS 04-01 0090 - -MOUNTAIN STATES ADDS TWO MINERALS PROPERTIES - SALT LAKE CITY, April 1 - Mountain States Resources Corp -said it acquired two properties to add to its strategic -minerals holdings. - The acquisitions include a total of 5,100 acres of -titanium, zirconium and rare earth resources, the company said. - Both properties, located in southern Utah, consist of -approximately 1,430 acres of unpatented mining claims and one -state lease, it said. - The company also announced the formation of Rare Tech -Minerals Inc, a wholly-owned subsidiary. - Reuter - - - - 1-APR-1987 11:10:45.38 -coffee - - -ico-coffee - - - - -C T -f1333reute -b f BC-Restoration-of-coffee 04-01 0016 - -******RESTORATION OF COFFEE EXPORT QUOTAS BEFORE - OCTOBER SEEMS UNLIKELY - ICO PRODUCER DELEGATES - - - - - - 1-APR-1987 11:11:41.60 -wheatgrain -usaussr - - - - - - -F -f1337reute -d f BC-SHULTZ-USSR-TRIP-FUEL 04-01 0103 - -SHULTZ USSR TRIP FUELS TALK OF EEP WHEAT OFFER - WASHINGTON, April 1 - Speculation the United States will -offer subsidized wheat to the Soviet Union appears to have -reached a new level of intensity in the run-up to Secretary of -State George Shultz' visit later this month to Moscow. - Rumors of an impending deal have coursed through wheat -markets since officials from the two countries held their -customary, semi-annual grain talks in February. Moscow's -decision at that time to reenter the U.S. corn market -strengthened the perception of warming farm trade prospects. - Shultz is set to arrive in Moscow April 13. - Reuter - - - - 1-APR-1987 11:11:46.21 -interest -usa - - - - - - -RM A -f1338reute -r f BC-FREDDIE-MAC-ADJUSTS-S 04-01 0043 - -FREDDIE MAC ADJUSTS SHORT-TERM DISCOUNT RATES - WASHINGTON, April 1 - The Federal Home Loan Mortgage Corp -adjusted the rates on its short-term discount notes as follows: - MATURITY RATE OLD RATE MATURITY - 32 days 6.00 pct 6.10 pct 1 day - - Reuter - - - - 1-APR-1987 11:12:00.71 -coffee -ukbrazilguatemalacolombia - -ico-coffee - - - - -C T -f1340reute -b f BC-COFFEE-QUOTAS-BEFORE 04-01 0082 - -ICO QUOTAS BEFORE OCTOBER UNLIKELY - DELEGATES - LONDON, April 1 - The restoration of coffee export quotas -before the end of the current 1986/87 coffee year (Oct 1/Sept -30) now seems unlikely, given reluctance by International -Coffee Organization, ICO, producers and consumers to resume -negotiations on an interim quota accord, producer delegates -told reporters. - Consumers and most producers see no point in reopening the -quota dialogue while Brazil's position remains unchanged, they -said. - Brazil's refusal to accept a reduction in its previous 30 -pct share of the ICO's global export quota effectively -torpedoed talks here last month aimed at restoring quotas -before October, the delegates noted. - Disappointment at the lack of progress on quotas forced -coffee futures in London and New York to new lows today, -traders here said. Near May in New York fell below one dlr in -early trading at around 99.10 cents per pound, traders said. - Producer delegates said that while the possibility of -reimposing quotas before October remained on the ICO agenda, in -practice the idea had effectively been discarded. - The ICO's executive board session here this week has so far -barely touched on the quota debate, demonstrating general -unwillingness to revive talks while chances of success are -still remote, producer delegates said. - Some producers are in no hurry to see quotas restored, -despite the price collapse seen since the failure of last -month's negotiations, they said. - "With Brazil's frost season approaching, who wants to -negotiate quotas," one leading producer delegate said. - Coffee prices normally rise during Brazil's frost season -(mainly June-August) as dealers and roasters build up stocks as -insurance against possible severe frost damage to Brazil's -crop. - Many producers are more interested in working towards -reimposing quotas from October 1, based on a new system of -quota allocations valid until the International Coffee -Agreement expires in 1989, they said. - Guatemala has already proposed the "other oilds" producer -group should meet in the next two months to begin talks on how -to allocate quota shares. - Producers still seem divided on how to overhaul the quota -distribution system, with some producer delegates reporting -growing support for a radical reallocation, based on the -principle of "objective criteria" favoured by consumers. - At last month's council session a splinter group of small -producers backed consumer demands for new quota shares based on -exportable production and stocks, while Brazil, Colombia and -the rest of the producers favoured leaving quota allocations -unchanged, except for some temporary adjustments. - A delegate from one of the eight said more producers now -supported their cause. - The delegate said unless major producers like Brazil showed -readiness to negotiate new quota shares, prospects for a quota -accord in October also looked bleak. - The U.S. and most other consumers are still determined to -make reimposition of quotas conditional on a redistribution of -quota shares based on "objective criteria." - ICO observers remained sceptical that Brazil would be -prepared to accept a quota reduction when the ICO council meets -in September. - Brazil has adopted a tough stance with banks on external -debt negotiations and is likely to be just as tough on coffee, -they said. - They said Brazil's reluctance to open coffee export -registrations might reflect fears this would provoke another -price slide and force an emergency ICO council session, which -would most likely end in failure. - Producers met this afternoon to review the market situation -but had only a general discussion about how further -negotiations should proceed, a producer delegate said. - Producers plan to hold consultations on quotas, and then -may set a date for a formal producer meeting, but plans are not -fixed, he said. - The ICO executive board reconvened at 1650 hours local time -to hear a report from consultants on ICO operations. The board -meeting looks set to end today, a day earlier than scheduled, -delegates said. - Reuter - - - - 1-APR-1987 11:13:10.37 - -usa - - - - - - -F -f1346reute -f f BC-******AMERICAN-MOTORS 04-01 0011 - -******AMERICAN MOTORS MARCH U.S. CAR OUTPUT DOWN TO 2,578 FROM -5,922 - - - - - - 1-APR-1987 11:16:02.05 - -yugoslavia -mikulic - - - - - -A -f1350reute -h f BC-YUGOSLAVIA-WINS-TIME 04-01 0108 - -YUGOSLAVIA WINS TIME IN PARIS CLUB REFINANCING - BELGRADE, April 1 - Yugoslavia has won breathing space from -its major official creditors through yesterday's Paris Club -refinancing agreement but it will take time for it to resolve -its economic crisis, economists at western embassies said. - Yugoslav delegation chief Finance Minister Svetozar -Rikanovic said a refinancing was agreed for 475 mln dlrs of -debt falling due between May 16 this year and May 31, 1988. - The agreement was the second multi-year Yugoslav debt -refinancing, based on a protocol signed last May which ushered -in "enhanced monitoring" of Yugoslavia's economy by the IMF. - Western economists who follow Yugoslav financial affairs -said a similar deal would probably emerge from talks with -commercial creditors at the end of this month. But they said -the refinancings would only provide a breathing space, because -Yugoslavia has to repay 5.5 billion dlrs in 1987. - And the country is still struggling to reverse a dramatic -decline in export earnings, which have fallen 12.5 pct so far -this year, continuing a downward spiral of the past 18 months. - The Yugoslav hard currency debt has grown from 1.2 billion -dlrs in 1965 to stand at 19.7 billion dlrs at the end of 1986 -and is one of the country's most dire economic problems. - The debt began to snowball in the 1960s and 1970s due to an -excessive investment rate exceeding the growth of the Gross -Social Product and necessitating additional foreign borrowing. - Rising international oil prices in the 1970s proved to be a -serious blow to the country's balance of payments. - Deputy Prime Minister Milos Milosavljevic said this month -that Yugoslavia had repaid 640 mln dlrs of principal and 325 -mln dlrs of interest so far this year. - According to official Yugoslav figures, Yugoslavia repaid a -record 5.97 billion dlrs in capital and interest in 1986, -reducing overall indebtedness by 996 mln dlrs. - Mikulic is trying to rein in rampant retail inflation of -almost 100 pct a year through price and incomes controls. - Janez Zemljaric, also a Deputy Prime Minister, said -recently Yugoslavia expected a "definite measure of -understanding" from its 16 major western creditor nations. - Western economists said Yugoslavia has had its way with the -Paris Club creditors but that not all creditors were satisfied -with its economic performance last year. They said the Paris -discussions were heated and emotional. - "Economic factors were balanced by political realities," an -economist at one of the main embassies here said, but added -that creditors had no complaints regarding Yugoslavia's -repayment record because it had so far always repaid debts on -time. - Yugoslavia has refinanced its debt regularly since 1983. - In December 1985, it signed a deal with the International -Coordinating Committee of 600 commercial banks to refinance -maturities arising between January 1, 1985 and end-1988. - It had signed bilateral refinancing agreements in March of -that year for maturities arising from January 1, 1985 to March -25, 1986, following an agreement in Paris on March 25, 1985. - Government ministers told Reuters this month that -Yugoslavia had made too great an effort to repay its debts in -1986, at great cost to the economy, and that this was -regretted. - Mikulic has said Yugoslavia is unlikely to follow Brazil's -lead and suspend its debt repayments "but we have understanding -for what that country did." - Western economists said, however, that Mikulic's remarks, -taken with those of his ministers, could be a signal that some -problems were seen ahead in refinancing debt repayments. - Before the Paris talks, some Yugoslav officials had hinted -that Yugoslavia could start to look to the Soviet Bloc for -financial support if Belgrade failed to secure the necessary -refinancing from western creditors. - Sources close to the western creditors, however, said they -did not view the threat as serious. - REUTER - - - - 1-APR-1987 11:16:55.25 -earn -usa - - - - - - -E -f1353reute -u f BC-(GEOFFRION-LECLERC-IN 04-01 0031 - -(GEOFFRION LECLERC INC) SIX MTHS NET - MONTREAL, April 1 - - Shr 39 cts vs 26 cts - Net 3,466,000 vs 1,913,000 - Revs 27.7 mln vs 19.4 mln - Note: period ended February 28. REUTER - Reuter - - - - 1-APR-1987 11:19:36.90 - -usa - - - - - - -A RM -f1358reute -r f BC-ALLIED-SUPERMARKETS-< 04-01 0093 - -ALLIED SUPERMARKETS <ASU> FILES FOR OFFERING - NEW YORK, April 1 - Allied Supermarkets Inc said it filed -with the Securities and Exchange Commission a registration -statement covering 240 mln dlrs of debt securities. - The company plans to offer 140 mln dlrs of senior -subordinated discount debentures and 100 mln dlrs of -subordinated debentures. - Proceeds will be used to finance Allied's acquisition of -Vons Cos Inc. - Allied named Drexel Burnham Lambert Inc and Donaldson, -Lufkin and Jenrette Securities Corp as co-underwriters of both -offerings. - Reuter - - - - 1-APR-1987 11:19:44.38 -interest -usa - - - - - - -RM A -f1359reute -r f BC-FHLBB-CHANGES-SHORT-T 04-01 0083 - -FHLBB CHANGES SHORT-TERM DISCOUNT NOTE RATES - WASHINGTON, April 1 - The Federal Home Loan Bank Board -adjusted the rates on its short-term discount notes as follows: - MATURITY NEW RATE OLD RATE MATURITY - 5.00 pct 30-69 days - 5.92 pct 70-88 days - 30-123 days 5.00 pct 5.00 pct 89-123 days - 124-150 days 5.93 pct 5.93 pct 124-150 days - 151-349 days 5.00 pct 5.00 pct 151-349 days - 350-360 days 5.98 pct 5.98 pct 350-360 days - Reuter - - - - 1-APR-1987 11:20:01.59 -earn -usa - - - - - - -F -f1361reute -r f BC-TOWLE-MANUFACTURING-C 04-01 0044 - -TOWLE MANUFACTURING CO <QTOW> YEAR LOSS - BOSTON, April 1 - - Oper shr loss 4.71 dlrs vs loss 14.09 dlrs - Oper loss 22 mln vs loss 67.2 mln - NOTE: 1986 loss excludes gain on the sale of Gold Lance -Corp of 12.1 mln dlrs. Company is operating under chapter 11. - Reuter - - - - 1-APR-1987 11:21:36.73 -acq - - - - - - - -F -f1366reute -f f BC-******DELTA-AIR-LINES 04-01 0009 - -******DELTA AIR LINES COMPLETES ACQUISITION OF WESTERN AIR - - - - - - 1-APR-1987 11:22:14.20 -interest - -james-baker - - - - - -V RM -f1370reute -f f BC-******TREASURY'S-BAKE 04-01 0011 - -******TREASURY'S BAKER SAYS HE HOPES PRIME RATE INCREASES -TEMPORARY - - - - - - 1-APR-1987 11:23:07.19 - -canada - - - - - - -E -f1371reute -u f BC-NEW-MONTREAL-NEWSPAPE 04-01 0103 - -NEW MONTREAL NEWSPAPER FOLDS - MONTREAL, April 1 - Le Matin, the French-language tabloid -launched here in February, said it is shutting down its -operations because it can no longer get financing. - The paper, launched by private investors, was Montreal's -fourth French-language newspaper and was aimed at readers with -above average incomes and educations. It had a daily -circulation of about 20,000 copies. - Le Matin was printed and distributed by (Southam Inc)'s -Montreal Gazette newspaper. A Gazette spokesman said his -newspaper is Le Matin's biggest creditor but he declined to -reveal the amount of debt - Acting publisher Jean-Pierre Bordua said the newspaper's -bank blocked its lines of credit after three of the paper's -senior managers resigned Friday. - Reuter - - - - 1-APR-1987 11:24:00.34 - -usa - - - - - - -F -f1377reute -r f BC-TOWLE-<QTOW>-STOCK-MA 04-01 0103 - -TOWLE <QTOW> STOCK MAY BE DILUTED, CANCELED - BOSTON, Mass., April 1 - Towle Manufacturing Co, in Chapter -11 of the U.S. bankruptcy code, said any plan of reorganization -would likely lead to a dilution or cancellation of its common -and preferred stock. - The company also said claims for subordinated debentures -would likely be paid at less than their 100 pct of their face -value, and general unsecured claims would likely be paid -without interest. The company has not yet filed a plan of -reorganization. - The company said it lost 22 mln dlrs from operations in -1986 against a loss of 67.2 mln dlrs a year ago. - The company also said its independent accountants -disclaimed an opinion on the financial statements for 1986 -because of questions about its contination as a going concern. - The company said, however, it substantially restructured -its business, reducing borrowings on an outstanding credit line -to 16.5 mln dlrs in 1986 from 57 mln dlrs a year ago. The -company also cut its staff to 820 employees at the end of 1986 -from 2,500 a year earlier. - Reuter - - - - 1-APR-1987 11:24:06.95 -earn -usa - - - - - - -F -f1378reute -d f BC-SOUTH-ATLANTIC-FINANC 04-01 0045 - -SOUTH ATLANTIC FINANCIAL CORP <SOAF> 4TH QTR - STAMFORD, Conn., April 1 - - Shr 12 cts vs 33 cts - Net 699,037 vs 1,349,077 - Year - Shr 54 cts vs 55 cts - Net 2,748,280 vs 1,833,766 - NOTE: Per shr amounts reported after preferred stock -dividend requirements. - Reuter - - - - 1-APR-1987 11:25:07.00 - -usa - - - - - - -F -f1381reute -r f BC-AMERICAN-MOTORS-<AMO> 04-01 0085 - -AMERICAN MOTORS <AMO> MARCH OUTPUT FALLS - SOUTHFIELD, Mich., April 1 - American Motors Corp said it -produced 2,578 U.S. cars in March, down from 5,922 in the same -1986 month. - The automaker's March U.S. Jeep output was 21,390, up from -16,215 in the same month last year. - Year-to-date U.S. car production by American Motors through -the end of March was 8,647 vehicles compared to 12,553 in the -same 1986 period. Year-to-date Jeep output was 58,597 compared -to 56,801. - - Reuter - - - - 1-APR-1987 11:26:18.58 -copper -usa - - - - - - -C M F -f1385reute -u f BC-CYPRUS-LOWERS-COPPER 04-01 0035 - -CYPRUS LOWERS COPPER PRICE 1.25 CTS TO 67 CTS - DENVER, April 1 - Cyprus Minerals Company said it is -decreasing its electrolytic copper cathode price by 1.25 cents -to 67.0 cents a pound, effective immediately. - Reuter - - - - 1-APR-1987 11:27:55.71 - -ukjapan -thatcherlawson - -lse - - - -RM -f1393reute -u f BC-TOSHIBA-COULD-BE-FIRS 04-01 0113 - -TOSHIBA COULD BE FIRST TO FEEL U.K. TRADE ANGER - By Sten Stovall, Reuters - LONDON, April 1 - Toshiba Corp <TSBA.T>, the Japanese -electronics group which plans to enter Britain's liberalised -telecommunications equipment market, risks becoming the first -casualty in the current war of words over trade between Japan -and the U.K., Government and industry sources said. - U.K. Authorities have lost patience with Japanese trading -practices and said they are seeking ways to retaliate without -unleashing a damaging trade war. "Toshiba's timing seems most -unfortunate for the company, as it comes exactly when we are -looking for someone to punch," one official told Reuters. - Earlier, <Toshiba Information Systems (U.K.) Ltd> said it -wanted to enter the British business facsimile and key -telephone market. A facsimile machine sends printed data over -telephone lines, while a key telephone system is used for -switching calls within a business, industry sources said. - The move by Toshiba comes in the middle of a dispute over -Japan's refusal to open up its telecommunications market to -foreign companies. "Toshiba's timing is most extraordinary," one -official at the Department of Trade and Industry (DTI) said. - Tomorrow, the U.K. Government will consider what legal -action it can possible take to press for Japanese reform. - Prime Minister Margaret Thatcher has given notice that the -U.K. Would fight the Japanese government's attempt to prevent -Cable and Wireless Plc <CAWL.L> from taking a significant -position in a new Japanese international telecommunications -venture. "We regard this as a test case," she told Parliament. - But while the U.K. Is keen to see some movement on the -issue by Japan, it is also worried that recent anti-Japanese -rhetoric may cause developments to get out of hand, officials -said. - Japanese officials in Tokyo today reiterated that Japan had -no plans to bow to U.K. And U.S. Pressure to give foreign -telecommunications firms a bigger role there. - The government, for which competition and the deregulation -of markets are major political themes, is unlikely to make -final decisions tomorrow on how to act against Japan, officials -said. - Detailed consideration of the issue has been shelved during -Thatcher's official visit to the Soviet Union, which ends -today. - "We are waiting for the Prime Minister to decide what to do. -The DTI will pass the ball to her as soon as she returns -tonight," a DTI official said. - He said Toshiba's application would be considered by the -Office of Telecommunications (OFTEL). An OFTEL spokeswoman said -"a decision on this application will take weeks, maybe months." - Asked whether Toshiba's bid would fall victim to British -retaliation, the OFTEL spokeswoman said: "Who knows what's going -to happen given the current situation!" - A Toshiba executive, who asked not to be named, told -Reuters: "We do not anticipate any special problems." - Some analysts queried by Reuters questioned the basis of -Britain's strong stand on the Cable and Wireless bid. One said -that the company's proposal was equivalent to a Japanese -company wanting to take a stake in Mercury International, the -subsidiary of Cable and Wireless that is the only real -competitor of British Telecommunications Plc <BTY.L>. - British Corporate Affairs minister Michael Howard leaves -for Japan on Saturday. - The minister will seek a clear timetable from Japan for -easier access for British institutions to Japanese financial -markets, reciprocating the easy access Japanese securities -houses and banks have to the City of London. - Britain has threatened to use its new Financial Services -Act to revoke or deny licences to Japanese brokerage houses if -it does not get satisfaction. - But British authorities would be far from happy if forced -to use that weapon, government sources said. - Sir Nicholas Goodison, Chairman of the London Stock -Exchange, said in New York yesterday that sanctions against -Japanese financial institutions operating in the U.K. Would set -back London's ambition to become a leading centre for corporate -financing and securities trading. - Chancellor of the Exchequer Nigel Lawson also warned -yesterday of the negative effects that a trade war could have -on the British economy. Such a development could hit U.K. -Exports and sharply alter the outlook for the next general -election in which economic recovery will be one of the -government's main themes, political analysts said. - REUTER - - - - 1-APR-1987 11:28:34.96 - -uk - - - - - - -RM -f1395reute -u f BC-DOLLAR-EUROBONDS-END 04-01 0114 - -DOLLAR EUROBONDS END EASIER ON PRIME RATE RISES - By Christopher Pizzey, Reuters - LONDON, April 1 - The dollar straight sector of the -eurobond market ended easier after a subdued day's trading as -U.S. Banks began to match yesterday's surprise 1/4 point prime -rate hikes by Citibank and Chase Manhattan Bank, dealers said. - The prime rates were raised to 7-3/4 from 7-1/2 pct and the -timing of the moves puzzled many dealers. However, reaction -here was limited, with shorter dated paper ending steady to 1/4 -point easier, while longer dates dipped by 1/4 to 1/2 point. - In the primary market, activity again centred on currencies -other than the U.S. Dollar, dealers noted. - One dollar straight dealer at a U.S. Securities house -commented "There was, in fact, the odd retail buyer today, but -only in small sizes." He added that, ironically, the prime rate -rises may help the market to stabilise since the dollar rose on -the back of the news. - The only U.S. Dollar deal launched during the day was, as -has been the case recently, equity linked. The 15-year -convertible bond was for the Bank of Tokyo Ltd and has an -indicated coupon of two pct. One source at a house involved in -the deal said, "It's got to be a blow-out. With a name like this -you're talking about Japan Inc." - The lead manager was the Bank of Tokyo International (BOTI) -and the deal ended far above the par issue price at 108 109 -pct. A BOTI official said "We've had worldwide interest in the -deal." - She noted the Tokyo stock market had experienced a mild -correction at the beginning of the week but that bank stocks -were hardly affected. - The yen sector edged slightly firmer and one new straight -deal was launched, a 20 billion yen bond for France's Caisse -Nationale des Telecommunications. The state guaranteed five -year bond pays 4-3/8 pct and was priced at 101-1/2 pct. - The issue was lead managed by IBJ International Ltd and was -quoted on the grey market at less 1-7/8 less 1-3/4 pct compared -with the total fees of 1-7/8 pct. One syndicate official at a -firm not involved in the deal said "It's tight, but overall I -would say its fairly priced." - Also launched was a five-year zero coupon bond with a total -redemption amount of 19 billion yen for Rural Banking and -Finance Corp of New Zealand. It was priced at 81.22 pct and -lead managed by Nomura International. - In the Australian dollar sector, GMAC (Australia) Finance -Ltd issued a 50 mln Australian dlr bond. - Hambros Bank Ltd was lead manager for the four-year deal -which pays 14-1/4 pct and was priced at 101 pct. It was -guranteed by General Motors Acceptance Corp and was quoted on -the 1-3/4 pct fees at less 1-3/4 pct bid. - McDonalds Corp issued a 75 mln Canadian dlr bond paying -8-1/2 pct over five years and priced at 101-5/8 pct. It was -quoted around the 1-7/8 pct fees at less two less 1-3/4 and was -led by Morgan Guaranty Ltd. - The European Investment Bank launched a 300 mln Danish -Crown, seven-year, bond withan 11 pct coupon and pricing of 101 -pct. It was lead managed by Den Danske Bank. - The floating rate note sector basically ended easier -following the increase in period eurodollar deposit rates -prompted by the prime rate increases, dealers said. But they -noted that mis-match deals - issues whereby the coupon is -re-fixed on a monthly basis - were firmer. - REUTER - - - - 1-APR-1987 11:30:48.69 -interest -usa -james-baker - - - - - -V RM -f1401reute -b f BC-TREASURY'S-BAKER-HOPE 04-01 0080 - -TREASURY'S BAKER HOPES PRIME RATE RISE TEMPORARY - WASHINGTON, April 1 - Treasury Secretary James Baker said -he hopes yesterday's small increase in two major money center -banks' prime rate was a temporary phenomenon. - "I hope it was a temporary blip upward," he told a House -Appropriations subcommittee. - He said the decline in interest rates since President -Reagan took office remains "one of the significant -accomplishments, in the economic area, of this administration." - Reuter - - - - 1-APR-1987 11:31:43.99 -acq -usa - - - - - - -F -f1403reute -u f BC-DELTA-<DAL>-COMPLETES 04-01 0064 - -DELTA <DAL> COMPLETES WESTERN AIR <WAL> BUY - ATLANTA, April 1 - Delta Air Lines Inc said it completed -the acquisition of Western Air Lines Inc this morning. - The action follows U.S. Supreme Court Justice Sandra Day -O'Connor's overnight granting of Delta and Western's request to -stay an earlier injunction against the deal issued by the U.S. -Court of Appeals for the Ninth Circuit. - More - - - - 1-APR-1987 11:33:36.12 - -usa - - - - - - -F -f1412reute -r f BC-NATIONAL-DISTILLERS-A 04-01 0099 - -NATIONAL DISTILLERS AND CHEMICAL <DR> EXPANDING - NEW YORK, April 1 - National Distillers and Chemical Corp -said its board approved a modernization and expansion program -from its petrochemical division, USI Chemical Co, its -polyethylene producer. - The program will add 600 mln pounds per year to USI's -existing capacity of 3.2 billion pounds, the company said. The -increase will result from the addition of two linear reactors -based on fluid bed gas phase technology for the production of -linear low density or high density polyethylene at locations in -the Midwest and Gulf Coast, it said. - Plans are in the engineering stage with completion expected -in mid 1989, the company said. In addition, USI is presently -constructing a 300 mln pound linear low density polyethylene -facility, scheduled to come on stream in early 1988 at its Port -Author, Texas, plant. - Reuter - - - - 1-APR-1987 11:34:07.33 - -usa - - - - - - -F -f1417reute -r f BC-BALDWIN-PIANO-<BPAO> 04-01 0056 - -BALDWIN PIANO <BPAO> FILES FOR SECONDARY - CINCINNATI, April 1 - Baldwin Piano and Organ Co said it -has filed for a secondary offering of 630,000 common shares, -including 490,000 to be sold by General Electric Co <GE> and -140,000 by other shareholders. - Lead underwriters are William Blair and Co and McDonald and -Co Investments <MDD>. - Reuter - - - - 1-APR-1987 11:34:12.41 -earn -usa - - - - - - -F -f1418reute -r f BC-AMERICAN-OIL-AND-GAS 04-01 0049 - -AMERICAN OIL AND GAS CORP <AOG> 4TH QTR LOSS - HOUSTON, April 1 - - Shr loss 34 cts vs loss 2.14 dlrs - Net loss 2,275,000 vs loss 9,560,000 - Revs 17.0 mln vs 19.9 mln - Year - Shr loss 49 cts vs loss 2.11 dlrs - Net loss 2,661,000 vs loss 9,283,000 - Revs 73.5 mln vs 93.6 mln - - NOTE: Results have been restated to reflects equity -investment in WellTech Inc for one month ended Dec 31, 1986 and -its investment in American Well Servicing for the 11 months -ended Nov 30, 1986 and full year 1985. - 1986 and 1985 net include loss of 3,512,000 dlrs and -5,944,000 dlrs, respectively, for equity in WellTech and -predecessor operations. - Reuter - - - - 1-APR-1987 11:35:12.00 -acq - - - - - - - -F -f1425reute -f f BC-MACANDREWS/FORBES-UNI 04-01 0014 - -******MACANDREWS/FORBES UNIT BEGINS OFFER TO BUY ALL REVLON -GROUP NOT ALREADY OWNED - - - - - - 1-APR-1987 11:36:11.38 -earn -usa - - - - - - -F -f1433reute -r f BC-<NEWPARK-RESOURCES-IN 04-01 0076 - -<NEWPARK RESOURCES INC> YEAR ENDED DEC 31 LOSS - NEW ORLEANS, April 1 - - Oper shr loss 1.99 dlr vs loss 4.88 dlrs - Oper net loss 29.1 mln vs 70.8 mln - Revs 34.8 mln vs 84.8 mln - NOTE: 1986 and 1985 oper net excludes a loss of 5.5 mln -dlrs or 37 cts a share and 64.6 mln dlrs or 4.43 dlrs a share, -respectively, for discontinued operations. - 1986 net also excludes a gain of 66.4 mln dlrs or 4.50 dlrs -a share for credit on debt restructuring. - Reuter - - - - 1-APR-1987 11:36:30.26 - -usa - - - - - - -F -f1435reute -u f BC-CARDIS-<CDS>-EXPECTS 04-01 0096 - -CARDIS <CDS> EXPECTS SIGNIFICANT YEAR LOSS - BEVERLY HILLS, Calif., April 1 - Cardis Corp said it -anticipates reporting a loss from continuing operations of -approximately 17.7 mln dlrs on revenues of 228 mln dlrs for -fiscal year 1986. - In addition, the company said it expects to report a -year-end loss on the discontinued operations of its engine -rebuilding divisions of approximately 1,100,000 mln dlrs. - Cardis also said it expects to report a loss in excess of -five mln dlrs for its first fiscal quarter ended Jan 31, 1987, -on approximate revenues of 58 mlns dlrs. - For fiscal 1985 Cardis reported operating income of -8,680,000 and net income of 1,150,000 dlrs, and in the first -quarter of fiscal 1986, it reported a 495,000 dlr loss from -continuing operations. - The company said its auditor, Touche Ross and Co, has -indicated to it that any opinion it issues on the company's -soon-to-be completed year-end audit will be qualified. - The company also said it expects to conclude soon its -current negotiations with its primary lenders for extension of -its loan agreements and expansion of its credit lines. - Reuter - - - - 1-APR-1987 11:36:57.32 -earn -usa - - - - - - -F -f1439reute -d f BC-TIERCO-GROUP-INC-<TIE 04-01 0031 - -TIERCO GROUP INC <TIER> YEAR ENDED DEC 31 LOSS - OKLAHOMA CITY, April 1 - - Shr loss 72 cts vs loss 1.57 dlr - Net loss 1,526,359 vs loss 3,315,834 - Revs 8,032,798 vs 7,276,517 - Reuter - - - - 1-APR-1987 11:37:00.45 -earn -usa - - - - - - -F -f1440reute -s f BC-MICRODYNE-CORP-<MCDY> 04-01 0022 - -MICRODYNE CORP <MCDY> SETS PAYOUT - OCALA, Fla., April 1 - - Semi div three cts vs three cts prior - Pay June 12 - Record May 15 - Reuter - - - - 1-APR-1987 11:37:26.62 - -usa -james-baker - - - - - -V RM -f1442reute -f f BC-******U.S.-TREASURY'S 04-01 0012 - -******U.S. TREASURY'S BAKER SAYS JAPAN TARIFF ACTION NOT START -OF TRADE WAR - - - - - - 1-APR-1987 11:37:46.98 - -brazil - - - - - - -RM -f1443reute -u f BC-BRAZIL-CONFIRMS-RENEW 04-01 0098 - -BRAZIL CONFIRMS RENEWAL OF SHORT-TERM CREDIT LINES - BRASILIA, April 1 - Brazilian economic officials confirmed -a renewal of short-range credit lines by commercial creditors, -bringing optimism that renegotiation of the 109 billion dlrs -foreign debt is possible. - Finance Ministry sources said a "large majority" of foreign -banks had accepted to extend Brazil's credit lines before the -midnight deadline of March 31 for payment of 15 billion dlrs -servicing expired. - Finance Minister Dilson Funaro told reporters all short -range credit lines were renewed, "without exception." - Central Bank sources, although incapable of confirming that -100 pct of the banks had renewed the credit lines, said that -there was a massive affirmative reply. - The credit lines were extended in their majority by 30 -days, but there were banks which renewed the deadline by 90 -days and, sometimes, by 180 days, Funaro told reporters. - Brazil is pledging for an extension of the deadlines for an -indefinite period, until its economic officials seek a global -renegotiation of the debt. - Last week Brazil had suggested to creditors an extension of -the deadline for another two months, until May 31. - REUTER - - - - 1-APR-1987 11:38:11.26 - -ukjapan -thatcher - - - - - -F -f1446reute -d f BC-TOSHIBA-COULD-BE-FIRS 04-01 0112 - -TOSHIBA COULD BE FIRST TO FEEL U.K. TRADE ANGER - By Sten Stovall, Reuters - LONDON, April 1 - Toshiba Corp <TSBA.T>, the Japanese -electronics group which plans to enter Britain's liberalised -telecommunications equipment market, risks becoming the first -casualty in the current war of words over trade between Japan -and the U.K., Government and industry sources said. - U.K. Authorities have lost patience with Japanese trading -practices and said they are seeking ways to retaliate without -unleashing a damaging trade war. "Toshiba's timing seems most -unfortunate for the company, as it comes exactly when we are -looking for someone to punch," one official told Reuters. - Earlier, <Toshiba Information Systems (U.K.) Ltd> said it -wanted to enter the British business facsimile and key -telephone market. A facsimile machine sends printed data over -telephone lines, while a key telephone system is used for -switching calls within a business, industry sources said. - The move by Toshiba comes in the middle of a dispute over -Japan's refusal to open up its telecommunications market to -foreign companies. "Toshiba's timing is most extraordinary," one -official at the Department of Trade and Industry (DTI) said. - Tommorrow, the U.K. Government will consider what legal -action it can possible take to press for Japanese reform. - Prime Minister Margaret Thatcher has given notice that the -U.K. Would fight the Japanese government's attempt to prevent -Cable and Wireless Plc <CAWL.L> from taking a significant -position in a new Japanese international telecommunications -venture. "We regard this as a test case," she told Parliament. - But while the U.K. Is keen to see some movement on the -issue by Japan, it is also worried that recent anti-Japanese -rhetoric may cause developments to get out of hand, officials -said. - Japanese officials in Tokyo today reiterated that Japan had -no plans to bow to U.K. And U.S. Pressure to give foreign -telecommunications firms a bigger role there. -reuter^M - - - - 1-APR-1987 11:38:19.87 -interest -usa - - - - - - -RM A -f1447reute -r f BC-FHLBB-CHANGES-SHORT-T 04-01 0082 - -FHLBB CHANGES SHORT-TERM DISCOUNT NOTE RATES - WASHINGTON, April 1 - The Federal Home Loan Bank Board -adjusted the rates on its short-term discount notes as follows: - MATURITY NEW RATE OLD RATE MATURITY - - 30-123 days 5.00 pct 5.00 pct -30-123 days - 124-150 days 5.90 pct 5.93 pct 124-150 days - 151-349 days 5.00 pct 5.00 pct 151-349 days - 350-360 days 5.96 pct 5.98 pct 350-360 days - Reuter - - - - 1-APR-1987 11:39:28.49 - -brazil - - - - - - -A -f1452reute -r f BC-BRAZIL-CONFIRMS-RENEW 04-01 0097 - -BRAZIL CONFIRMS RENEWAL OF SHORT-TERM CREDIT LINES - BRASILIA, April 1 - Brazilian economic officials confirmed -a renewal of short-range credit lines by commercial creditors, -bringing optimism that renegotiation of the 109 billion dlrs -foreign debt is possible. - Finance Ministry sources said a "large majority" of foreign -banks had accepted to extend Brazil's credit lines before the -midnight deadline of March 31 for payment of 15 billion dlrs -servicing expired. - Finance Minister Dilson Funaro told reporters all short -range credit lines were renewed, "without exception." - Central Bank sources, although incapable of confirming that -100 pct of the banks had renewed the credit lines, said that -there was a massive affirmative reply. - The credit lines were extended in their majority by 30 -days, but there were banks which renewed the deadline by 90 -days and, sometimes, by 180 days, Funaro told reporters. - Brazil is pledging for an extension of the deadlines for an -indefinite period, until its economic officials seek a global -renegotiation of the debt. - Last week Brazil had suggested to creditors an extension of -the deadline for another two months, until May 31. - Reuter - - - - 1-APR-1987 11:40:15.71 -earn -usa - - - - - - -F -f1457reute -r f BC-CROWNAMERICA-INC-<CRN 04-01 0050 - -CROWNAMERICA INC <CRNA> 2ND QTR ENDED FEB 28 - DALTON, Ga., April 1 - - Shr two cts vs 29 cts - Net 23,000 vs 338,000 - Revs 20.2 mln vs 21.5 mln - Six mths - Shr 64 cts vs 97 cts - Net 741,000 vs 1,113,000 - Revs 43.2 mln vs 44.3 mln - NOTE: 1986 2nd qtr and six mths ended March one. - Reuter - - - - 1-APR-1987 11:40:30.77 - -usa - - - - - - -F -f1458reute -d f BC-QUANTUM-DIAGNOSTICS-< 04-01 0057 - -QUANTUM DIAGNOSTICS <QTMCU> GETS PATENT - HAUPPAUGE, N.Y., April 1 - Quantum Diagnostics Ltd said it -has been granted a patent for a new imaging technology it has -developed that uses electrmagnetic radiation. - It said it sees applications in airport security screening -devices, medical diagnostic imaging systems and quality control -devices. - Reuter - - - - 1-APR-1987 11:45:57.96 -earn -usa - - - - - - -F Y -f1471reute -u f BC-DIAMOND-SHAMROCK-<DIA 04-01 0112 - -DIAMOND SHAMROCK <DIA> SEES BETTER 1987 EARNINGS - NEW YORK, APRIL 1 - Diamond Shamrock Corp, which will split -this month into two separate companies, expects to show -improved earnings in 1987 over last year, executives of the new -company told Reuters. - Charles Blackburn, president and chief executive officer of -Diamond Shamrock and the new company, which will emphasize -exploration and production, said, "Earnings wil be better than -in 1986." He declined to say how much better. - In 1986 Diamond Shamrock reported a loss of 115.6 mln dlrs -on total revenues of 2.543 billion dlrs. Exploration and -production lost 18.5 mln dlrs on revenues of 593.5 mln dlrs. - Roger Hemminghaus, Diamond Shamrock vice president and -soon-to-be chief executive of the spin-off Diamond Shamrock -Refining and Marketing Co, said, "Refining and marketing is a -margin business. The margins will return and this will be a -better year than 1986." - In 1986, refining and marketing showed operating profits of -40.1 mln dlrs on revenues of 1.636 billion dlrs. - "We are also expecting to be in the black in the first -quarter (1987)," Heminghaus added. In the first quarter of 1986, -the refining and marketing segment showed a loss of 27.1 mln -dlrs on revenues of 492.1 mln dlrs. - - The executives were in New york for meetings with -institutional investors aimed at increasing interest in the -company's stock. - On the New York Stock Exchange, Diamond Shamrock was -trading at 16-1/4, down 1/4. - Earlier this year, T. Boone Pickens offered 15 dlrs a share -for Diamond Shamrock, and management countered with an offer at -17 dlrs and a decision to split off the refining and marketing -operation to its shareholders. - "Our advisors convinced us the market would give higher -multiples for pure plays," Blackburn said. - Reuter - - - - 1-APR-1987 11:46:53.00 -earn -usa - - - - - - -F -f1474reute -r f BC-VMS-STRATEGIC-<VLANS> 04-01 0054 - -VMS STRATEGIC <VLANS> SETS INITIAL DIVIDEND - CHICAGO, April 1 - VMS Strategic Land Trust said it -delcared an initial quarterly cash dividend of 30 cts a share, -payable May 15 to shareholders of record April 20. - The company also said that effective today it will be -trading on the NASDAQ system under the symbol <VLANS>. - Reuter - - - - 1-APR-1987 11:47:47.24 -iron-steel -usa - - - - - - -F -f1479reute -u f BC-BETHLEHEM-STEEL-<BS> 04-01 0087 - -BETHLEHEM STEEL <BS> SETS PLATE PRICE INCREASES - BETHLEHEM, Pa., April 1 - Bethlehem Steel Corp said its -base price for carbon plates and high-strength and low-alloy -plates will be increased by 25 dlrs to 405 dlrs a short ton, -effective July one. - The company said its composite prices for alloy plates will -also be increased 25 dlrs per ton on the same date, adding it -does not publish its prices for this product. - Bethlehem Steel said its composite prices for strip mill -plates will be increased 15 dlrs a ton. - Reuter - - - - 1-APR-1987 11:48:38.72 - -usajapan -james-baker - - - - - -V RM -f1482reute -b f BC-/TRREASURY'S-BAKER-SE 04-01 0099 - -TRREASURY'S BAKER SEES NO TRADE WAR OVER TARIFFS - WASHINGTON, April 1 - Treasury Secretary James Baker said -the U.S. imposition of tariffs on Japanese goods over -semiconductor trade does not signal the start of a trade war. - He also played down the significance of the precipitous -stock market decline earlier this week. - "I don't think this action should be interpreted in any way -as the start of a trade war," he said in response to a question -from a House Appropriations subcommittee. - He said a drop in stock market prices of the magnitude -experienced Monday was not so unusual. - "I don't think it is particularly unusual to see those kinds -of days" on Wall Street, Baker said. - Since Monday, he added, "The stock market has rebounded -rather vigorously." - He urged lawmakers to move cautiously on trade legislation -to avoid overly protectionist moves which might aggravate world -trade tensions. - "You're not going to legislate this (trade) deficit away," he -told the panel. - - Reuter - - - - 1-APR-1987 11:50:44.93 -earn -usa - - - - - - -F -f1490reute -d f BC-EQUICOR-SEES-YEAR-REV 04-01 0115 - -EQUICOR SEES YEAR REVENUES TO TOP TWO BILLION - NASHVILLE, Tenn., April 1 - Equicor, Equitable HCA Corp, -said that the company will likely attain revenues in excess of -two billion dlrs in its first year of operations. - The company, created last October with initial equity of -400 mln dlrs, is owned equally by the Equitable Life Assurance -Society of the U.S. and Hospital Corp of America <HCA>. - Financial results for the first six months of the company's -operations were not disclosed. Equicor provides employee group -plans to 1,500 corporations nationwide. It said it aims to -double its marketshare in five years from the about 3.5 pct of -the employee benefits industry it controls. - Reuter - - - - 1-APR-1987 11:50:55.18 -acq -usa - - - - - - -F -f1491reute -b f BC-MACANDREWS/FORBES-UNI 04-01 0110 - -MACANDREWS/FORBES BEGINS REVLON <REV> OFFER - NEW YORK, April 1 - MacAndrews and Forbes Group Inc said it -began an 18.50-dlr-a-share cash offer for all common stock of -Revlon Group Inc it does not already own. - The offer, which is being made by a wholly owned -subsidiary, Revmac Acquisition Corp, is subject to financing -and at least 28.5 mln shares being tendered, the company said. - MacAndrews and Forbes, wholly owned by Ronald Perelman, -chairman of Revlon Group, held about 31.8 pct of the voting -power of Revlon as of March 27, a spokesman said. The stake -includes about 15.1 pct of Revlon common and 95 pct of its -series A preferred stock, he said. - More - - - - 1-APR-1987 11:51:56.55 -earn -usa - - - - - - -F -f1494reute -u f BC-ARCO-<ARC>-UP-ON-HIGH 04-01 0109 - -ARCO <ARC> UP ON HIGHER EARNINGS ESTIMATE - NEW YORK, April 1 - Atlantic Richfield Co's stock rose -sharply after analyst Eugene Nowak of Dean Witter Reynolds Inc -raised his earnings estmates of the company, traders said. - ARCO jumped 1-3/4 to 81-3/4. - Nowak said that based on an average oil price of 17 dlrs a -barrel in 1987, the company should earn about 4.50 dlrs a -share. Next year, based on an average oil price of 18 dlrs a -barrel, ARCO should earn about five dlrs a share. The company -earned 3.38 dlrs a share in 1986. "If oil prices should rise to -an average of 20 dlrs a barrel," he said, "ARCO could record -earnings of 6.50 dlrs a share. - Nowak said his increased estimates come after the company -told analysts yesterday that its first quarter earnings will -comfortably cover its quarterly dividend requirement of one dlr -a share. - Nowak said, "The company has done an outstanding job -reducing expenses, and ARCO is poised to generate greater -earnings power." He said first quarter earnings will likely -exceed the company's expectations stated yesterday and be in -the 1.15-1.20 dlr-a-share range. - Reuter - - - - 1-APR-1987 11:53:49.16 - -usa -reagan - - - - - -V RM -f1505reute -b f BC-/SENATE-UPHOLDS-REAGA 04-01 0088 - -SENATE UPHOLDS REAGAN'S VETO BUT WILL REVOTE - WASHINGTON, April 1 - The Senate voted to sustain President -Reagan's veto of an 88 billion dlr highway and mass transit -funding bill, but Senate Democratic leader Robert Byrd of West -Virginia called for a second vote to reconsider the outcome. - The first vote ended with 65 Senators voting for the bill -and 35 voting to sustain the veto, two short of the two-thirds -majority needed to override. One of those voting to sustain the -veto was North Carolina Democrat Terry Sanford. - Reuter - - - - 1-APR-1987 11:53:59.16 -cornsorghumgrain -usabelgiumspain - -ec - - - - -C G -f1506reute -b f BC-EC-PROMISED-U.S.-BULK 04-01 0096 - -U.S. SAID PROMISED BULK OF MAIZE EXPORT TO SPAIN - BRUSSELS, April 1 - The U.S. Has been promised a near -monopoly of maize exports to Spain from third countries -guaranteed under an agreement with the European Community, an -EC official said. - The official, who asked not to be named, told Reuters that -the guarantee was given in an unpublished clause of the -agreement. - Under the accord, which began in January, third countries -were guaranteed access for the next four years for two mln -tonnes a year of maize to the Spanish market, as well as -300,000 tonnes of sorghum. - However, the official said the U.S. Had been assured that -almost all the exports would be reserved for its traders. - The EC Commission is to ask member states to agree either a -tender system to fix reduced import levies for the maize or to -authorise direct imports by the Spanish intervention board. - EC sources noted that under a tender system maize from -outside the U.S. Would sometimes be offered on more favourable -terms than that from the U.S. - No Commission spokesman was immediately available for -comment. - Reuter - - - - 1-APR-1987 11:54:45.49 -acq -usauk - - - - - - -F -f1511reute -d f BC-DEAK-INTERNATIONAL-BU 04-01 0114 - -DEAK INTERNATIONAL BUYS JOHNSON MATTHEY - NEW YORK, APRIL 1 - Deak International, a foreign currency -and precious metals firm, announced the acquisition of Johnson -Matthey Commodities of New York from Minories Finance Limited, -a unit of the Bank of England. - The purchase valued at 14.8 mln dlrs follows the recent -acquisition of London's Johnson Matthey Commodities Limited, -Deak said. - The New York firm will be known as Deak International -Trading Ltd, the company said. - Arkadi Kuhlmann, president and chief executive officer of -Deak International said the purchase will expand Deak's -operations into the precious metals and wholesale non-ferrous -metals trading arenas. - Reuter - - - - 1-APR-1987 11:56:02.30 -acq -usa - - - - - - -F -f1516reute -u f BC-WALL-STREET-STOCKS/PU 04-01 0095 - -WALL STREET STOCKS/PUROLATOR COURIER <PCC> - NEW YORK, April 1 - Purolator Courier Corp stock jumped -5-3/8 on a 40 dlr per share takeover offer from Emery Air -Freight Corp <EAF>, traders said. - Purolator was trading at 40-1/4, 1/4 above the offer price. -The Emery offer tops a 35 dlr per share buyout agreement E.F. -Hutton LBO Inc reached with Purolator February 27. - That offer was to have expired today. Neither Hutton nor -Purolator had any immediate comment. - "There's probably some speculation out there that there -might be another offer," said one analyst. - Reuter - - - - 1-APR-1987 11:57:09.82 -corngrain -usaargentinaussr - - - - - - -C G -f1518reute -b f BC-/ARGENTINE-CORN-SALES 04-01 0125 - -ARGENTINE CORN SALES TO USSR LOWER - USDA REPORT - WASHINGTON, April 1 - Total corn sales by Argentina to the -Soviet Union are only 1.5 to 1.8 mln tonnes, with delivery -spread out from March to June, the U.S. Agriculture -Department's Counselor in Buenos Aires said in a field report. - The report, dated March 27, said many sources have stated -that the Soviet Union was initially interested in purchasing -2.3 mln tonnes lof corn from Argentina. - However, Soviet purchases from the United States have -tended to displace additional Argentine purchases, the report -said. - The USDA has to date reported USSR purchases of 2.6 mln -tonnes of U.S. corn for delivery in the current U.S.-USSR grain -agreement year, which ends this September 30, it said. - Reuter - - - - 1-APR-1987 11:57:23.68 - -usa - - - - - - -F Y -f1519reute -r f BC-GPU'S-<GPU>-THREE-MIL 04-01 0085 - -GPU'S <GPU> THREE MILE ISLAND POWER REDUCED - MIDDLETOWN, Pa., April 1 - General Public Utilities corp -said its Three Mile Island Unit One's power output has been cut -to 81 pct of reactor power, or 730 megawatts of electricity, -due to mineral deposits on the secondary or non-nuclear side of -its two steam generators. - The company said the deposits do not affect the safe -operation of the plant but interfere with the production of -steam. - It said the unit was similarly limited in power in late -1985. - Reuter - - - - 1-APR-1987 11:58:09.69 - -usa - - - - - - -F -f1524reute -r f BC-CYPRUS-MINERALS-<CYPM 04-01 0064 - -CYPRUS MINERALS <CYPM> WINS COAL CONTRACT - DENVER, April 1 - Cyprus Minerals Co said it was awarded a -five year contract to supply 360,000 tons of steam coal to -Niagara Mohawk Power Co <NMK>. - The company is currently shipping 240,000 tons of steam -coal a year to Niagara Mohawk under a contract signed in 1985. -The coal comes from the Emerald mine in Southwestern -Pennsylvania. - - Reuter - - - - 1-APR-1987 11:58:19.48 - -usa - - - - - - -F -f1525reute -r f BC-QUANTECH-<QANT>-SAYS 04-01 0103 - -QUANTECH <QANT> SAYS THREE DIRECTORS RESIGN - LEVITTOWN, N.Y., April 1, Quantech Electronics Corp said -Leonard N. Hecht, Jack Goldfarb and Harold V. Wallace resigned -as directors. - On March 26, the company announced the resignations of -Bernard Weinblatt as president and a director, and Hecht as -chief executive officer. It said Hecht will serve as a -consultant for an interim period. - Quantech said its remaining directors are Henry Ginsberg -and David Siegel. Ginsberg, who is chairman, has been named -president and chief executive officer, and Siegel has been -named chief operating officer, the company said. - Reuter - - - - - - 1-APR-1987 11:58:27.08 -earn -usa - - - - - - -F -f1526reute -r f BC-BARNES-GROUP-<B>-EXPE 04-01 0104 - -BARNES GROUP <B> EXPECTS SALES TO GROW MODESTLY - HARTFORD, Conn., April 1 - Barnes Group said it expects -sales and net income for 1987 will be up slightly over 1986. - Without supplying specific figures, Barnes told -shareholders at its annual meeting it expected net income to -improve at a rate exceeding its growth in sales, which was two -pct higher than 1985. - The company said it recorded income from continuing -operations of 16.6 mln dlrs, or 2.57 dlrs per share, on sales -of 440 mln dlrs in 1986. It said it recorded income from -continuing operations of 16.4 mln dlrs, or 2.27 dlrs per share, -in the previous year. - Reuter - - - - 1-APR-1987 11:58:33.10 - -usa - - - - - - -A RM -f1527reute -r f BC-UNITED-CITIES-<UCIT> 04-01 0078 - -UNITED CITIES <UCIT> PRIVATELY PLACES BONDS - NEW YORK, April 1 - United Cities Gas Co said it placed -privately on March 18 20 mln dlrs of 8.69 pct first mortgage -bonds. - Proceeds will be used to retire short-term debt and fund -the company's current construction program, United Cities said. - The company said more than 30 lending institutions -participated in the bidding for the bonds and that 25 pct of -the issue was placed with the U.S. unit of a Canadian firm. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-013.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-013.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-013.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-013.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2011 +0,0 @@ - - - 3-APR-1987 12:41:43.18 - -usa - - - - - - -F -f1680reute -b f BC-CHRYSLER-<C>-LATE-MAR 04-03 0085 - -CHRYSLER <C> LATE MARCH U.S. CAR SALES UP - DETROIT, April 3 - Chrysler Corp said car sales for the -March 21-31 period rose 20.2 pct to 40,454 from 33,669 a year -earlier. - For the month of March, it said auto sales increased 6.3 -pct to 96,649 from 90,945. - Chrysler said U.S. truck sales in late March jumped 65.2 -pct to 28,698 from 17,372 a year ago. For the entire month, -truck sales advanced 28.9 pct to 63,283 from 49,102, it said. - The company said it was still tabulating year-to-date -figures. - Reuter - - - - 3-APR-1987 12:42:15.79 - -usa - - - - - - -F -f1682reute -u f BC-WALL-STREET-STOCKS/CO 04-03 0085 - -WALL STREET STOCKS/COMPAQ COMPUTER <CPQ> - NEW YORK, April 3 - Compaq Computer Corp, IBM's chief -rival in the personal computer market, scored a big gain on -Wall Street today. Compaq's stock rose 1-3/8 to 32-1/4 on -volume of 1.3 mln shares. - "The rationale for the move," one trader said, "is that the -damage from the IBM announcement yesterday was less than -expected." He said Compaq's stock had been under pressure -recently because of anticipation of IBM's unveiling of a new -line of personal computers. - International Business Machines <IBM> introduced four new -personal computers and more than 100 new peripheral products. -But analysts said the new computers, though they do contain a -lot of proprietary concepts, will not be as hard to copy as -some other PC makers had feared. - "The long range issue here is who wins and who loses in the -PC business, and that issue was not resolved yesterday and is -unlikely to be decided any time soon," analyst Mark Stahlman of -Sanford C. Bernstein and Co said. - Stahlman reaffirmed his recommendation of Compaq and Apple -Computer Inc <AAPL>. - Stahlman said "The critical investment question now is who -will have a pickup in sales in the near term. We expect to see -a strong demand setting for PCs for the rest of this year, and -that will boost the revenues for all of the major PC vendors." - "The first quarter was the strongest PC sales period on -record for Compaq, Apple and IBM," Stahlman said, "and I don't -think the IBM announcement is going to change that trend soon." - "In anticipating the IBM announcement, Compaq has made -pricing adjustments necessary to compete for its immediate -purposes," he said. - Reuter - - - - 3-APR-1987 12:43:33.42 -copper -canada - - - - - - -E F -f1686reute -r f BC-noranda-sets-temporar 04-03 0090 - -NORANDA SETS TEMPORARY MINE SHUTDOWN - Murdochville, Quebec, April 3 - <Noranda Inc> said -production will remain shut down at its fire-damaged copper -mine here until it can completely examine the mine. - The fire, which started Wednesday and burned itself out -late yesterday, killed one miner and trapped 56 others -underground for about 24 hours. The 56 were eventually brought -safely out of the mine. - Company spokesman Dale Coffin said the investigation could -take from a few days to several weeks, but would not be more -specific. - Noranda said that, when it resumes production, it plans to -operate the mine at about one-third of the normal 72,000 metric -tons annual finished capacity. - The fire weakened part of the mine's support structure, -Coffin said. - Noranda said if it decides to keep the mine open, it would -take four or five months before it could resume full -production. - Reuter - - - - 3-APR-1987 12:48:00.50 - -canada - - - - - - -E A RM -f1694reute -u f BC-CANADA-BUDGET-DEFICIT 04-03 0115 - -CANADA BUDGET DEFICIT RISES IN JANUARY - OTTAWA, April 3 - The Canadian government's budget deficit -rose to 1.78 billion dlrs in January from 1.67 billion dlrs in -the same month last year, the finance department said. - But the deficit in the first 10 months of the fiscal year -which began on April 1, 1986, fell to 22.36 billion dlrs from -25.74 billion dlrs in the same period a year ago. - January revenues rose to 7.96 billion dlrs from 7.56 -billion dlrs while expenditures grew to 9.74 billion dlrs from -9.23 billion dlrs. Revenues in the first 10 months increased to -70.06 billion dlrs from 62.30 billion while expenditures grew -to 92.42 billion dlrs from 88.05 billion. - Reuter - - - - 3-APR-1987 12:49:26.47 -acq -usaswitzerland - - - - - - -F -f1697reute -r f BC-CIS-TECHNOLOGIES<CIH> 04-03 0099 - -CIS TECHNOLOGIES<CIH> TO SELL SHARES TO SWISS CO - TULSA, Okla, April 3 - CIS Technologies Inc said it -executed a formal share purchase agreement with Swiss -Reinsurance Co of Zurich, Switzerland. - Under terms of the agreement, Swiss Re will acquire 5.5 mln -newly issued CIS stock at 2.50 dlrs a share, or 13.8 mln dlrs. -This purchase represents 30 pct of the outstanding shares. - Swiss Re will acuqire 500,000 of the shares immediately and -remaining shares will be bought after a due diligence report is -completed by auditors. - The transaction is expected to be complete by June 11. - Reuter - - - - 3-APR-1987 12:51:05.81 -earn -usa - - - - - - -F -f1701reute -r f BC-COPLEY-PROPERTIES-INC 04-03 0025 - -COPLEY PROPERTIES INC <COP> INCREASES DIVIDEND - BOSTON, Mass, APril 3 - - Qtly div 42 cts vs 41.5 cts prior - Payable APril 28 - Record April 14 - Reuter - - - - 3-APR-1987 12:52:18.65 -cpi -colombia - - - - - - -RM -f1705reute -r f BC-COLOMBIAN-INFLATION-S 04-03 0085 - -COLOMBIAN INFLATION STABLE AT AROUND 20 PCT - BOGOTA, April 3 - Colombia's cost of living index rose 2.71 -pct in March, after a 2.03 pct increase in February and a 2.21 -pct rise in March 1986, the government statistics institute -said. - The result brought year-on-year inflation to 20.36 pct -compared with 22.65 pct at end-March 1986 and 19.77 pct for the -year ending February 1987. - The government has predicted that inflation this year would -be slightly lower than in 1986 when it reached 20.9 pct. - REUTER - - - - 3-APR-1987 12:52:47.08 -interest -usa - - - - - - -A RM -f1708reute -r f BC-FHLBB-SAYS-MORTGAGE-R 04-03 0103 - -FHLBB SAYS MORTGAGE RATES CONTINUE DECLINE - WASHINGTON, April 3 - The Federal Home Loan Bank Board said -home mortgage rates fell from early February to early March to -their lowest point in nine years, but the rate of decline was -slower than it had been in recent months. - The bank board said the average effective commitment rate -for fixed-rate mortgages for single family homes and a 25 pct -loan-to-price ratio with a maturity of at least 15 years was -9.48 pct in early March. - The rate was four basis points lower than a month ago, only -one-eighth the size of decline in the previous month, the bank -board said. - Rates for adjustable-rate mortgages decline eight basis -points from early February to 8.43 pct in early March, the bank -board said. The drop was far less than the 15 basis point -decline in the previous period, the agency said. - The average effective interest rate on all loans closed by -major mortgage lenders declined nine basis points from early -February to early March, the agency said. The fall brought the -rate to 9.14 pct was the lowest since December 1977, it said. - The effective rate for ARMS was 8.39 pct, 15 basis points -below a month earlier. For fixed-rate loans it was 9.36 pct, 14 -basis points below a month earlier, the agency said. - Reuter - - - - 3-APR-1987 12:56:19.95 - -usa - - -nyse - - - -F -f1713reute -d f BC-NYFE-SEAT-SELLS-FOR-1 04-03 0048 - -NYFE SEAT SELLS FOR 1,500 DLRS - NEW YORK, April 3 - The New York Stock Exchange said a seat -on the New York Futures Exchange sold for 1,500 dlrs, which is -up 250 dlrs from the previous sale yesterday. - The Exchange said the current bid is 1,250 and the current -offer is 1,500 dlrs. - Reuter - - - - 3-APR-1987 12:56:53.22 -money-supply -canada - - - - - - -E RM -f1716reute -f f BC-CANADIAN-MONEY-SUPPLY 04-03 0014 - -******CANADIAN MONEY SUPPLY M-1 FALLS 291 MLN DLRS IN WEEK, BANK OF CANADA SAID -Blah blah blah. - - - - - - 3-APR-1987 12:58:50.26 -acq -usa - - - - - - -F -f1722reute -r f BC-BENEFICIAL-<BNL>-UNIT 04-03 0100 - -BENEFICIAL <BNL> UNIT SALE APPROVED - NEW YORK, April 3 - Beneficial Corp said the sale of its -American Centennial Insurance Co subsidiary to <First Delaware -Holdings Inc> was approved by the Delaware Insurance -Department. - Under the transaction, American Centennial will receive a -cash infusion of 200 mln dlrs, including the settlement of tax -sharing agreements with Beneficial Corp, Beneficial said. - It will also receive 25 mln dlrs from Beneficial -International Insurance Co, another Beneficial subsidiary being -purchased by the management-led group of First Delaware, the -company said. - Reuter - - - - 3-APR-1987 12:59:13.76 - -netherlands - - -asecboe - - - -C -f1724reute -d f BC-LARGER-VOLUME-SEEN-ON 04-03 0114 - -LARGER VOLUME SEEN ON EUROPEAN OPTIONS EXCHANGES - AMSTERDAM, April 3 - European options exchanges will see -spectacular growth over the next five years as more -professional investors discover the options markets, Bernard -Reed, manager of the London options exchange said. - At an options outlook seminar to mark tomorrow's official -opening of a new Amsterdam options exchange (EOE) building, he -forecast increasing interest from banks and institutional -investors, using options for portfolio insurance. - "But the dominance by the professionals should not make us -neglect private clients," he noted. "Successful exploitation of -retail business has been one of the keys to success." - Reed said derived option products in particular will become -a popular instrument for managing equity risks. On the Chicago -Board Options Exchange (CBOE), the cash-settled S&P 100 index -option is the most traded in the world. - Dutch Stock Index Fund options to be relaunched on May 18 -and the upcoming options on London's FTSE 100 index will see a -30 pct yearly turnover growth until 1990, Reed estimated. - The CBOE and the Chicago Mercantile Exchange have agreed -with Morgan Stanley to trade options and futures on the capital -international EAFE index which will let investors participate -in worldwide market moves. - Reed said he did not believe in globalising the option -business by introducing international products, because this -would intensify competition among the exchanges, but he did see -a future for global rules and regulations. - Reuter - - - - 3-APR-1987 13:05:49.54 - -usa - - - - - - -F -f1749reute -r f BC-TIERCO-<TIER>-SELLS-N 04-03 0057 - -TIERCO <TIER> SELLS NOTE - OKLAHOMA CITY, April 3 - Tierco Group INc said it sold at -par to the Kuwait Real Estate INvestment and Management Co its -10 mln dlrs 75. pct senior subordinated note due 1997, together -with warrants to buy 1.1 mln shares of common stock. - The warrant may be exercised within five years at 9.50 dlrs -per share. - Reuter - - - - 3-APR-1987 13:05:53.71 -earn -canada - - - - - - -E F -f1750reute -r f BC-itt-canada-ltd 04-03 0040 - -<ITT CANADA LTD> YEAR NET - TORONTO, April 3 - - Shr 5.56 dlrs vs 3.88 dlrs - Net 47.5 mln vs 33.2 mln - Revs 254.5 mln vs 243.5 mln - Note: shr after preferred dividends - ITT Corp <ITT> owns 100 pct of ITT Canada common shares - Reuter - - - - 3-APR-1987 13:06:02.09 - -usa - - - - - - -F -f1751reute -d f BC-******ALLIED-SIGNAL-T 04-03 0089 - -CALIFORNIA MICRO DEVICES <CAMD> IN DEFENSE DEAL - MILPITAS, Calif, April 3 - California Micro Devices Corp -said an additional 3.2 mln dlrs contract was received from -General Dynamics Corp <GD> to supply electronic components -contained in the guidance control for Defense Electronics -Systems. - This contract follows a 750,000 dlrs contract awarded last -year. - Shipments will begin in APril 1987. - The company also disclosed that Fuji Photo Film Co Ltd is -the licensee of a one mln dlrs technology agreement announced -last fall. - Reuter - - - - 3-APR-1987 13:06:05.40 - -usa - - - - - - -F -f1752reute -d f BC-STEWART-INFORMATION-R 04-03 0032 - -STEWART INFORMATION RESCHEDULES ANNUAL MEETING - HOUSTON, APRIL 3 - Stewart INformation Services Corp said -it rescheduled its annual meeting to May 18. - It had been scheduled for APril 24. - Reuter - - - - 3-APR-1987 13:06:11.03 - -usa - - - - - - -F -f1753reute -h f BC-FISERVE-<FISV>-GETS-B 04-03 0061 - -FISERVE <FISV> GETS BUSINESS WORTH ONE MLN DLRS - WEST ALLIS, Wis., April 3 - FIserve Inc said 14 savings and -loans with 1.5 billion dlrs in cumulative assets will transfer -their data processing to FIserve from Midwest Commerce Data -Corp, a unit of Midwest Commerce Corp. - About one mln dlrs a year in new recurring revenues will be -generated for FIserve, it said. - Reuter - - - - 3-APR-1987 13:14:52.25 - -usa - - - - - - -F -f1764reute -r f BC-MONY-REAL-<MYM>-REPOR 04-03 0086 - -MONY REAL <MYM> REPORTS PORTFOLIO - NEW YORK, April 3 - Mony Real Estate Investors Trust said -its investment portfolio consists of 137.1 mln dlrs of -mortgages with an average maturity of less than six years, 43.7 -mln dlrs of real estate equities and 2.7 mln dlrs of foreclosed -real estate. - The trust's exposure to oil-dependent regions is limited to -2.2 mln dlrs, it said. - It said it accepted an offer to sell foreclosed property -and increased its loss reserve by 750,000 dlrs in anticipation -of the sale. - Reuter - - - - 3-APR-1987 13:17:05.48 -money-supply -canada - - - - - - -E A RM -f1768reute -u f BC-CANADIAN-MONEY-SUPPLY 04-03 0099 - -CANADIAN MONEY SUPPLY FALLS IN WEEK - OTTAWA, April 3 - Canadian narrowly-defined money supply -M-1 fell 291 mln dlrs to 32.44 billion dlrs in the week ended -March 25, Bank of Canada said. - M-1-A, which is M-1 plus daily interest chequable and -non-personal deposits, fell 7 mln dlrs to 75.14 billion dlrs -and M-2, which is M-1-A plus other notice and personal -fixed-term deposits, fell 56 mln dlrs to 177.54 billion dlrs. - M-3, which is non-personal fixed term deposits and foreign -currency deposits of residents booked at chartered banks in -Canada, rose 321 mln dlrs to 216.67 billion dlrs. - Chartered bank general loans outstanding fell 169 mln dlrs -to 126.03 billion dlrs. - Canadian liquid plus short term assets rose 72 mln dlrs to -36.47 billion dlrs and total Canadian dollar major assets of -the chartered banks rose 507 mln dlrs to 224.22 billion dlrs. - Chartered bank net foreign currency assets fell 231 mln -dlrs to minus 2.00 billion dlrs. - Notes in circulation totalled 16.16 billion dlrs, up 50 mln -dlrs from the week before. - Government cash balances fell 1.17 billion dlrs to 4.63 -billion dlrs in week ended April 1. - Government securities outstanding rose 1.09 billion dlrs to -226.42 billion dlrs in week ended April 1, treasury bills rose -1.35 billion dlrs to 76.95 billion dlrs and Canada Savings -Bonds fell 47 mln dlrs to 43.87 billion dlrs. - Reuter - - - - 3-APR-1987 13:17:16.61 - -usa - - - - - - -F -f1769reute -r f BC-COPLEY-PROPERTIES-<CO 04-03 0072 - -COPLEY PROPERTIES <COP> TO INVEST IN JOINT PACT - BOSTON, April 3 - Copley Properties Inc said the company -will invest 9,500,000 dlrs in a joint venture to acquire and -develop 33.4 acres of industrial land in Hayward, Calif. - Copley said it will own 60 pct of the project and be -entitled to a 10 pct preferential return on its investment plus -60 pct of all excess cash from operations, refinancings and -other capital transactions. - Reuter - - - - 3-APR-1987 13:18:53.02 -acq -usa - - - - - - -F -f1775reute -r f BC-UNION-TO-PROTEST-DART 04-03 0103 - -UNION TO PROTEST DART'S SUPERMARKETS <SGL> BID - LANDOVER, MD., April 3 - The United Food And Commercial -Workers said that more than 1,000 rank-and-file members of the -union will demonstrate Monday at Dart Group Corp's headquarters -protesting Dart's proposed 1.73 billion dlr takover of -Supermarkets General <SGL>. - Supermarkets is best known for its Pathmark chain of -supermarket drug stores in the New York and New Jersey area and -also owns Rickels home centers. - The union said that it is firmly against the Dart bid -because "workers have always ended up with a raw deal in the -current takeover mania." - A Union statement said: "We do not intend to allow our -members to pick up the tab for Supermarket General's executives -and the bankers or the Dart Group who stand to make millions." - Dart is controlled by the Haft family of Washington, which -last year made a bid for California-based Safeway Stores Inc. -The Hafts lost, but walked away with at least 100 mln dlrs in -profits, analysts estimate. - The union said that Dart's Safeway bid forced a major -restructuring at Safeway to pay the Hafts and their lawyers and -caused a loss of thousands of jobs. - Reuter - - - - 3-APR-1987 13:19:08.87 - -usa - - - - - - -F -f1776reute -u f BC-PAN-AM-<PN>-MARCH-LOA 04-03 0086 - -PAN AM <PN> MARCH LOAD FACTOR ROSE TO 60.6 PCT - NEW YORK, April 3 - Pan Am Corp's Pan American World -Airways said its load factor rose to 60.6 pct last month from -54.9 pct in March 1986. - The airline said its scheduled March traffic increased 14.6 -pct to 1.94 billion revenue passenger miles from 1.70 billion -last year as available seat miles rose 3.8 pct to 3.21 billion -from 3.09 billion. - It said the March traffic increase was the third -consecutive month of year over year traffic growth for Pan Am. - For the first quarter, Pan Am said, its load factor -increased to 56.3 pct from 53.4 pct as scheduled traffic -increased 10.2 pct to 5.25 billion miles and available seat -miles increased 4.5 pct to 9.32 billion. - The airlines said its March scheduled freight ton miles -increased 1.5 pct to 53.3 mln from 52.5 mln and was up 0.4 pct -for the first quarter to 134.6 mln. - Reuter - - - - 3-APR-1987 13:21:48.58 -acq -usa - - - - - - -F -f1785reute -u f BC-FCS-LABORATORIES-<FCS 04-03 0099 - -FCS LABORATORIES <FCSI> TERMINATES DEAL TALKS - TEMPE, Ariz., April 3 - FCS Laboratories Inc said merger -discussions with an unnamed privately-held company in the -health care field have ended without an agreement. - The previously announced negotiations began last August, -the company said. - "It's disappointing to spend so much time on these -negotiations and have them fail," said FCS chairman Nicholas -Gallo III. "But the discussions could not produce a deal -acceptable to our board in the context of the company's -stronger financial position today as compared to six months -ago." - Gallo said FCS will stop actively seeking potential merger -partners, but will respond to serious inquiries. - "We are determined to follow our plan to restore this -company to profitability," he said. "To continue actively -searching for potential acquirers inherently forces us to -postpone the implementation of critical decisions which are -part of the plan." - The company, which has 4,475,930 common shares outstanding, -reaffirmed it expects to be profitable in the second half of -the fiscal year ending September 30, 1987. - Reuter - - - - 3-APR-1987 13:23:23.58 -interest -usa - - - - - - -A RM -f1794reute -u f BC-WHITE-HOUSE-SAYS-INTE 04-03 0090 - -WHITE HOUSE SAYS INTEREST RATES REFLECT MARKET - WASHINGTON, April 3 - The White House said the rise in -interest rates was "unfortunate in a general sense" but reflected -market forces. - "There's always movement up and down and the basic fact is -that we believe the economy is strong and growing and there -will always be fluctuations in the interest rate, but the -economy is sound and in good shape," spokesman Marlin Fitzwater -said. - Citibank raised its prime rate by one quarter of a point -and the move was followed by other banks. - Reuter - - - - 3-APR-1987 13:25:20.85 -earn -usa - - - - - - -F -f1799reute -d f BC-REGAL-PETROLEUM-LTD-< 04-03 0049 - -REGAL PETROLEUM LTD <RPLO> YEAR - THE WOODLANDS, TExas, April 3 - - Shr loss nine cts - Net loss 1.4 mln - Revs 630,118 dlrs - NOTE:Due to change in fiscal year, prior 4th qth and year -cannot be presented on comparable basis. 1986 loss includes -writedowns approximating 1.4 mln dlrs. - Reuter - - - - 3-APR-1987 13:26:03.77 -earn -usa - - - - - - -F -f1801reute -w f BC-CANTERBURY-PRESS-INC 04-03 0042 - -CANTERBURY PRESS INC YEAR NOV 30 - MEDFORD, N.J., April 3 - - Shr 1.1 cts vs 1.7 cts - Net 26,708 vs 35,084 - Revs 447,548 vs 243,161 - NOTE:1986 net includes 4,300 dlrs gain from tax credit and -1985 includes gain of 8,300 dlrs gain from credit. - Reuter - - - - 3-APR-1987 13:26:44.58 -earn -usa - - - - - - -F -f1803reute -d f BC-GRAPHIC-MEDIA-INC-<GM 04-03 0044 - -GRAPHIC MEDIA INC <GMED> YEAR - FAIRFIELD, N.J., April 3 - - Shr nine cts vs 19 cts - Net 188,000 vs 362,000 - Revs 20.4 mln vs 11.3 mln - NOTE:1985 restated for reversal of certain tax benefits. -1986 and 1985 reflects preferred stock dividend requirements. - Reuter - - - - 3-APR-1987 13:27:04.11 - - - - - - - - -CQ MQ -f1804reute -r f BC-cbt-silver-vol-oi 04-03 0080 - -CBT SILVER VOLUME/OPEN INTEREST FOR APRIL 2 - VOLUME OPEN-INT CHANGE - Apr 714 684 up 516 - May 14 36 dn 1 - Jun 3097 7109 dn 140 - Aug 86 537 up 20 - Oct 12 157 up 7 - Dec 215 3125 up 56 - Feb 3 252 up 1 - Apr 28 1275 dn 2 - Jun 54 103 up 49 - Aug 0 9 unch - TTL 4223 13287 up 506 - Reuter - - - - - - 3-APR-1987 13:27:08.42 - - - - - - - - -FQ EQ -f1805reute -u f BC-WALL-STREET-INDICES-1 04-03 0040 - -WALL STREET INDICES 1300 - - NYSE COMPOSITE 168.38 UP 1.62 - NYSE INDUSTRIALS 203.81 UP 2.34 - S AND P COMPOSITE 296.94 UP 3.31 - - NYSE-A VOLUME 154525400 - - AMEX INDEX 338.30 UP 3.06 - - AMEX-B VOLUME 11343900 - - - - - - 3-APR-1987 13:27:38.57 - -usa - - - - - - -F A -f1806reute -r f BC-BURLINGTON-<BNI>-UNIT 04-03 0082 - -BURLINGTON <BNI> UNIT SETTLES BONDHOLDER SUIT - SEATTLE, April 3 - Burlington Northern Inc said its -Burlington Northern Railroad Co unit reached an agreement in -principle to settle a class action lawsuit filed against the -company in May 1985 by holders of two series of the company's -bonds. - It said the settlement arrangement calls for the company to -establish a cash settlement fund of 35.5 mln dlrs, which would -be distributed to the bondholders after deductions for -attorney's fees. - The lawsuit, filed by holders of its four pct Prior Lien -bonds due January 1, 1997 and its three pct General Lien Bonds -due January 1, 2047, sought to prevent the release of -collateral, the company said. - If the settlement agreement is approved, the trading prices -of the bonds will decline substantially because they will no -longer reflect the speculative premiums at which the bonds -currently trade, Burlington Northern also said. - It said the settlement is subject to negotiation by -Burlington Northern, the Citibank N.A. unit of Citicorp <CCI> -and Bankers Trust Co <BT>, the bonds' trustees. - Reuter - - - - 3-APR-1987 13:27:46.34 -earn -usa - - - - - - -F -f1807reute -r f BC-RICHARDSON-ELECTRONIC 04-03 0073 - -RICHARDSON ELECTRONICS <RELL> 3RD QTR FEB 28 NET - LaFox, Ill., April 3 - - Shr 20 cts vs 20 cts - Net 1,981,000 vs 1,689,000 - Rev 24.7 mln vs 19.6 mln - Nine months - Shr 59 cts vs 53 cts - Net 5,855,000 vs 4,360,000 - Rev 70.9 mln vs 51.9 mln - NOTE: Fiscal 1986 per share data reflects dilutive effect -of shares issued for April 1986 convertible debenture -conversion. Company's full name is Richarson Electronics Ltd. - Reuter - - - - 3-APR-1987 13:29:07.38 -earn -usa - - - - - - -F -f1812reute -d f BC-DIVERSIFIED-HUMAN-RES 04-03 0038 - -DIVERSIFIED HUMAN RESROUCES GROUP <HIRE> YEAR - DALLAS, APril 3 - - Shr loss five cts vs profit 72 cts - Net loss 79,069 vs profit 829,737 - Revs 14.4 mln vs 14.1 mln - NOTE:1985 includes extraordainy credit of 11 cts. - Reuter - - - - 3-APR-1987 13:30:04.51 - -usa - - - - - - -F -f1813reute -r f BC-ALASKA-AIR-<ALK>-UNIT 04-03 0110 - -ALASKA AIR <ALK> UNIT HAS HIGHER LOAD FACTOR - SEATTLE, April 3 - The Alaska Airlines unit of Alaska Air -Group Inc said its March load factor rose to 58.1 pct from 57.3 -pct a year earlier, but its year-to-date load factor dropped to -51.8 pct from 52.6 pct last year. - March revenue passenger miles rose five pct to 225.9 mln -from 215.6 mln, but year-to-date revenue miles fell one pct to -586.7 mln from 593 mln. - Available seat miles for the month totaled 389.1 mln, a -three pct increase over the 376.1 mln posted for March 1986, -and for the year-to-date available miles totaled 1.132 billion -compared with 1.128 billion a year earlier, Alaska Air said. - Reuter - - - - 3-APR-1987 13:30:26.85 - -ukjapan -nakasonethatcher - - - - - -RM -f1815reute -u f BC-UK-MINISTER-LOOKS-TO 04-03 0112 - -UK MINISTER LOOKS TO EASE TENSION ON TOKYO TRIP - By Sten Stovall, Reuters - LONDON, April 3 - The U.K. Government hopes for a -breakthrough on the deadlock with Japan over trade policies -during next week's visit to Tokyo by Corporate Affairs Minister -Michael Howard, political sources said. - Howard, who leaves for Japan tomorrow, told Reuters he will -try to promote understanding on trade issues during his visit. - Meanwhile, Britain will re-examine a letter from Japanese -Prime Minister Yasuhiro Nakasone promising personal help in -solving the row over a U.K. Firm's bid to win a significant -role in Japan's telecommunications market, government sources -said. - Tensions have risen following Britain's decision to arm -itself early with new statutory powers which it says could be -used against certain Japanese financial institutions. - Britain reacted optimistically at first to the letter from -Nakasone to Prime Minister Margaret Thatcher, seeing it as a -signal that he would work towards ensuring a satisfactory -outcome to the bid launched by Cable and Wireless Plc <CAWL.L>, -government officials said. - But this view has since been clouded by reports from Tokyo -that Nakasone's assurances really constituted little more than -politeness in the face of British anger, they added. - Howard said he would use his trip to push for a bigger role -in Japan's telecommunications industry for Cable and Wireless -Plc. The U.K. Government has made the issue a test case for -Japan's willingness to open its markets adequately to outside -competition. - Asked whether the letter from Nakasone was a rejection of -attempts by Britain to achieve that, Howard said "I am not sure -it is correct to regard Mr Nakasone's letter as a rejection of -Mrs Thatcher's request of him - and it says he is taking a -personal interest in this problem. - "I don't understand it to be closed at all." - Howard added that during his Tokyo visit he would be -"talking to them about it (the letter), finding out exactly what -they do mean about it, and making it plain that we take a very -serious view of the fact that access to Japanese markets is not -as free as we allow access to our markets to be." - He noted that under the new Financial Services Act, Britain -could revoke or deny licences to Japanese banking and insurance -institutions in London if U.K. Firms fail to receive similar -treatment in financial markets in Japan soon. - "I hope it won't come to that, and I don't think it will," -Howard added. - During the trip Howard will meet officials in the Tokyo -Stock Exchange, the Ministry of Finance, the Trade Ministry, -and Posts and Telecommunications Minister Shunjiro Karasawa. - Karasawa is regarded as behind opposition to any -significant role for Cable and Wireless in the Japanese -telecommunications industry. - Share prices on the London Stock Exchange were undermined -again today by fears of a possible U.K./Japanese trade war. -This was despite denials by Trade and Industry Secretary Paul -Channon that Britain was on the verge of a trade war. - He told a meeting of insurance brokers today that Britain -believed a "sensible solution" could be found which would open -Japanese markets to British goods. - Government officials were at pains today to deny that -Britain had set a deadline of three weeks for Japan to promise -similar access to its financial markets to U.K.-based financial -firms as that enjoyed in London by equivalent Japanese firms. - They said that Department of Trade and Industry officials -had said yesterday that the measures against Japanese financial -institutions could be imposed from then but that this did not -necessarily constitute a deadline. - Experts believe Britain would lose out by acting against -Japanese banks, insurance and investment institutions. But -despite the danger of Japanese firms taking their trade -elsewhere in Europe, Howard said he did not expect the move to -backfire. - He said in a radio interview today "it is true that we -benefit from their presence - but they would not want to lose -those advantages. And I am sure they are making their views -plain to the Japanese government on this matter." - Howard, who will also be visiting South Korea before -returning to London on April 11, said his trip to Tokyo was -planned well before the current trade row. - Howard said his talks with Japanese officials would also -include ways of jointly combating financial fraud in global -markets with Japanese officials. This would be done through a -cooperation between national regulatory bodies. - He said a memorandum of understanding for exchanging -information to combat financial fraud would be sought with -Japan on terms similar to one signed last autumn between -Britain and the United States. - REUTER - - - - 3-APR-1987 13:33:25.31 - -usa - - - - - - -F -f1828reute -d f BC-PACIFIC-GAS-<PCG>-PLA 04-03 0103 - -PACIFIC GAS <PCG> PLANT TO BEGIN REFUELING - SAN FRANCISCO, April 3 - Pacific Gas and Electric Co said -its Diablo Canyon Unit 2 nuclear power plant will begin its -first refueling today after about 13 months of operation. - The refueling outage is expected to last about 12 weeks and -will include a variety of maintenance as well as the -replacement of about one-third of Unit 2's fuel, the company -said. - Pacific Gas said Unit 2 generated power about 93.7 pct of -the time during its first year of operation. - Pacific Gas' two Diablo Canyon units generate about 2.2 mln -kilowatts of electricity in full operation. - Reuter - - - - 3-APR-1987 13:34:29.36 -acq -usa - - - - - - -F -f1833reute -d f BC-MID-STATE-<MSSL>,-FIR 04-03 0067 - -MID-STATE <MSSL>, FIRST FEDERAL IN DEAL - OCALA, Fla, April 3 - Mid-State Federal Savings and Loan -Association said it and First Federal Savings and Loan -Association of Brooksville <FFBV> reached a definitive merger -agreement. - As previously announced, Brooksville shareholders will get -cash and stock in exchange for their shares. The transaction is -expected to be completed during the summer 1987. - Reuter - - - - 3-APR-1987 13:34:50.83 -acq -canada - - - - - - -E F -f1835reute -r f BC-memotec-data-complete 04-03 0110 - -MEMOTEC DATA COMPLETES TELEGLOBE ACQUISITION - MONTREAL, April 3 - <Memotec Data Inc> said it completed -the previously announced 488.3 mln dlr acquisition of Teleglobe -Canada from the federal government. - Memotec Data said Teleglobe, which has provided Canada's -overseas telecommunications services since 1950, now becomes -Teleglobe Canada Inc, a unit of Memotec. - Teleglobe president and chief executive Jean-Claude Delorme -will continue in the same post, the company said. - In addition to the sale price, the government will receive -Teleglobe's accumulated cash of 102 mln dlrs and a special 18 -mln dlr dividend, making total proceeds 608.3 mln dlrs. - Reuter - - - - 3-APR-1987 13:37:55.73 - -usa - - - - - - -F -f1839reute -d f BC-CITIZENS-FIRST-BANCOR 04-03 0133 - -CITIZENS FIRST BANCORP <CFB> RECEIVES FINE - GLEN ROCK, N.J., April 3 - Citizens First Bancorp Inc said -its banking subsidiary pleaded guilty to two technical -violations of the Bank Secrecy Act and was fined 2,000 dlrs. - The subsidiary, Citizens First National Bank of New Jersey, -pleaded guilty to two misdemeanors in Federal District Court -for the District of New Jersey. Charges had been brought by the -U.S. Attorney's office. - The company said no additional charges will be brought -against it and that it has instituted additional procedures to -reduce the possibility of future violations. It cooperated with -authorities in the investigation. - The violations occurred on Aug 12, 1982, and May 25, 1984, -when the bank failed to report currency transactions involving -more than 10,000 dlrs. - Reuter - - - - 3-APR-1987 13:40:10.81 -trade -usajapan - - - - - - -F -f1844reute -u f AM-TRADE-AMERICAN 04-03 0100 - -U.S., JAPANESE OPEN TALKS ON SEMICONDUCTORS - WASHINGTON, April 5 - U.S. and Japanese officials meet -tomorrow to try to settle a dispute over semiconductor trade -and to cut short the 300 mln dlr penalty tariffs President -Reagan has ordered imposed on Japanese exports. - But U.S. officials held out little hope that any accord -could be reached before the tariffs of 100 per cent - up from -about five per cent - are to take effect on April 17. - The Customs Bureau last week started to levy a bond on the -Japanese goods that Reagan ordered penalized. The penalties -would be retroactive to March 31. - Reagan said on March 27 when ordering the tariffs that he -hoped the Japanese would soon end their unfair practices in -semiconductor trade and that sanctions could be lifted. - Technical meetings are to be held today and tomorrow, with -meetings at a more senior level scheduled for Thursday and -Friday. Public hearings on the sanctions are set for April 13. - The Japanese aides here for the technical talks include -Shigeru Muraoka, director-general of international trade policy -of the Ministry of International Trade and Industry (MITI), and -Masashi Yamamoto, deputy director-general of the information -and machinery bureau. - Meeting with them will Glen Fukushima, director of the -Japan office of the U.S. Trade Representative's Office, and Jim -Gradoville, of trade representative's office of industry and -services. - The two sides in the Thursday and Friday talks will be -headed by Deputy U.S. Trade Representative Michael Smith and -MITI vice minister Makoto Kuroda. - - Reuter - - - - 3-APR-1987 13:41:26.38 - -usa - - - - - - -F -f1847reute -r f BC-TRIBUNE-<TRB>-FILES-3 04-03 0051 - -TRIBUNE <TRB> FILES 300 MLN DLR SHELF REGISTRATION - CHICAGO, April 3 - Tribune Co said it filed a shelf -registration with the Securities and Exchange Commission for -300 mln dlrs in debt securities. - Underwriters may include Salomon Bros Inc and Merrill -Lynch, it said. Proceeds will be for general needs. - Reuter - - - - 3-APR-1987 13:42:58.60 -acq -usa - - - - - - -F -f1854reute -d f BC-AMERON-<AMN>-ADOPTS-S 04-03 0107 - -AMERON <AMN> ADOPTS SHAREHOLDER RIGHTS PLAN - MONTEREY PARK, Calif., April 3 - Ameron Inc said its board -adopted a rights plan designed to protect shareholders from -potentially unfair takeover tactics. - The plan calls for distribution of one right for each of -its outstanding common shares and each right entitles the -holder to buy one/one-hundredth of a share of newly authorized -Series A Junior Participating cumulative Preferred stock at an -exercise price of 55 dlrs, Ameron said. - It said the rights are exercisable if a group acquires 20 -pct or more of its common stock or announces a tender offer for -30 pct or more of its shares. - Reuter - - - - 3-APR-1987 13:43:34.67 - -uknigeria - - - - - - -RM -f1856reute -u f BC-BRITAIN'S-ECGD-DISCUS 04-03 0102 - -BRITAIN'S ECGD DISCUSSING NEW COVER FOR NIGERIA - LONDON, April 3 - Britain's Export Credits Guarantee -Department (ECGD) is holding talks with Nigeria aimed at -resuming insurance cover for British exporters to Nigeria, the -head of ECGD's international debt division, Gerry Breach, said. - The ECGD suspended cover on Nigeria in 1984 after the -country fell into arrears on payments of insured and uninsured -debts. - Following last week's bilateral accord between Britain and -Nigeria to reschedule the country's insured trade debts, -bankers had hoped that talks would commence on a resumption of -cover. - Breach made his comments in an address to a private meeting -of businessmen, a copy of which was made available to the -press. - Breach noted that for the ECGD to consider "a gradual -introduction of a package of new support" certain criteria would -have to be met. - This would involve the Nigerian economic structural -adjustment program being put into effect and being endorsed by -the International Monetary Fund, the program remaining on -course and continuing to be endorsed by the IMF and a -satisfactory level of acceptance by the Nigerian government of -the ECGD insured short-term trade arrears. - Breach said that these criteria are now beginning to be -satisfied, adding that while the ECGD could not yet formally -announce new cover, it was holding discussions with Nigeria on -priorities for new credits. - He said an announcement would be made "as soon as possible" -on an agreement and the ECGD would create a package for Nigeria -that would include the department's normal range of export -trade support facilities. - British exports to Nigeria exceeded 550 mln stg in 1986. - Breach noted that since cover was removed, the ECGD has -maintained a limited amount of short-term trade cover for -Nigeria, which was backed by letters of credit from the -Nigerian Central Bank. - While the ECGD would initially continue to use this -structure under a new package, it would also hope to expand the -volume of coverage in the short-term area and relax the terms -it is prepared to underwrite towards the commonly accepted -maximum of 180 days. - REUTER - - - - 3-APR-1987 13:44:08.77 -acq -usa - - - - - - -F -f1857reute -d f BC-FCS-LABORATORIES-<FCS 04-03 0062 - -FCS LABORATORIES <FCSI> ENDS MERGER TALKS - TEMPE, Ariz., April 3 - FCS Laboratories said its merger -talks with another unidentified company in the health care -field ended without agreement. - The talks began last August, the company said. - The company also said it will no longer actively seek out -potential merger partners, but will respond to serious -inquiries. - Reuter - - - - 3-APR-1987 13:45:46.93 - -usa - - - - - - -F -f1860reute -u f BC-******IBM-SECRETARY-J 04-03 0091 - -IBM <IBM> NEWLY NAMED SECRETARY DIES IN FIRE - ARMONK, N.Y., APril 3 - International Business Machines -Corp said recently elected secretary, John Manningham, and his -wife, Patricia, died early this morning in a fire at their -Reidgefield, Conn home. - Manningham, 53, began his IBM career in 1959 as a marketing -representative. His election would have been effective July 1. - Tom Irwin is the current secretary. - IBM Chairman John Akers said "this is a great loss to the -IBM Company and to the Manningham's family, friends and -community. - Reuter - - - - 3-APR-1987 13:46:44.30 -trade -ukjapan - - - - - - -C -f1863reute -d f BC-UK-MINISTER-LOOKS-TO 04-03 0106 - -UK MINISTER LOOKS TO EASE TENSION WITH JAPAN - LONDON, April 3 - The U.K. government hopes for a -breakthrough on the deadlock with Japan over trade policies -during next week's visit to Tokyo by Corporate Affairs Minister -Michael Howard, political sources said. - Howard, who leaves for Japan tomorrow, told Reuters he will -try to promote understanding on trade issues during his visit. - Meanwhile, Britain will re-examine a letter from Japanese -Prime Minister Yasuhiro Nakasone promising personal help in -solving the row over a U.K. firm's bid to win a significant -role in Japan's telecommunications market, government sources -said. - Tensions have risen following Britain's decision to arm -itself early with new statutory powers which it says could be -used against certain Japanese financial institutions. - Britain reacted optimistically at first to the letter from -Nakasone to Prime Minister Margaret Thatcher, seeing it as a -signal that he would work towards ensuring a satisfactory -outcome to the bid launched by Cable and Wireless Plc, -government officials said. - But this view has since been clouded by reports from Tokyo -that Nakasone's assurances really constituted little more than -politeness in the face of British anger, they added. - Reuter - - - - 3-APR-1987 13:54:45.70 -trade -usajapan -conable -imfworldbank - - - - -F RM A -f1876reute -u f BC-CONABLE-WARNS-PROTECT 04-03 0082 - -CONABLE WARNS PROTECTIONISM MIGHT SPREAD - By Alver Carlson, Reuters - WASHINGTON, April 3 - World Bank President Barber Conable -expressed concern that trade protectionism, at the heart of a -new showdown between the United States and Japan, might spread -throughout the industrial world. - But in an interview with Reuters, Conable said the action -by the United States to slap tariffs on certain electronic -goods from Japan did not mean the countries were heading for a -full-scale trade war. - Conable said the World Bank has been pressing developing -countries to open their markets, arguing that a free trading -environment increased the possibility of global economic -growth. - "We have, in fact, been making adjustment loans to many -countries in the developing world which have encouraged the -opening of their markets and we want to be sure that the -developed world doesn't close at the same time," he said. - He said the U.S. action against Japan was "a significant -retaliatory step but it did not constitute a basic change in -trade policy." - The interview came just before next week's semi-annual -meetings of the Bank and the International Monetary Fund. - Referring to Brazil's recent interest payments moratorium, -Conable also said the global debt situation was very serious -and must be closely watched. - He said the Bank, which in the past has concentrated on -making loans that assist the basic underpinnings in the -developing world such as dams, roads and sewers, will -increasingly make assistance available for economic reform. - The Bank has increased these loans, in part because of the -debt crisis that has found countries desperately in need of new -funds for balance of payments adjustment and economic reforms -aimed at opening their markets, encouraging foreign investment -and reducing government's role in the economy. - "We're comfortable with adjustment lending, we expect, -however, that it will never reach a majority of our portfolio," -Conable said. - He made clear, however, that adjustment lending would -continue to increase as a proportion of overall Bank lending -for some time. - He noted, "the problem of debt was a severe one and many -countries are asking for adjustment assistance because of the -problem of debt." - Conable, is a a former Republican Congressman from New York -chosen by President Reagan for the Bank position last year. He -is an associate of Treasury Secertary James Baker who launched -the U.S. strategy for shoring up indebted nations in October, -1985 which included a call for increased adjustment lending by -the World Bank. - Conable also said that he expected the result of a major -study of the Bank's organization to be completed in the next -several weeks. - He said the decision to seek a reorganization was based, in -part, on the fact that the Bank had come under fire from the -poorest countries for not doing enough to help and from the -richest countries because of inefficiency. - the reorganization is considered a major initiative by -Conable, and is being closely-watched by the agency's 151 -member-countries as an indication of his management style and -priorities. - "I want to be sure this institution is viewed by those who -must support it as soundly constituted so that it will be -permitted to grow," Conable said. - However, he said "I don't believe there is anything -basically wrong with this institution and I don't believe it -has to have any redefinition of its purpose." - He said, however, that it was apparent that the debt -initiative proposed by Baker has given the Bank a central role -in dealing with the debt crisis. - Conable added that cooperation between the Bank and its -sister agency, the International Monetary Fund, was good and -that he talked often with IMF Managing Director Michel -Camdessus on a variety of issues. - On a personal level, Conable said that he not feel a need -to put his personal stamp on the Bank noting that "I don't have -a particular mission here except to be useful to the -institution and to the process of development." - He added, "so I don't feel a great calling to personalize -the institution." - On the development needs of sub-Sahara Africa, Conable said -that the Bank was constantly reviewing new ways for assisting -the region, noting that half of the recently agreed financing -of 12.4 billion dlrs for Bank's International Development -Association was earmarked for Africa. - Leading industrial nations are expected to consider new -forms of debt relief for the very poorest nations, like those -in the Sub-Sahara, during next week's meetings. - Reuter - - - - 3-APR-1987 13:55:17.71 - -usa - - - - - - -F -f1877reute -r f BC-AMERICAN-SAVINGS-<AMS 04-03 0080 - -AMERICAN SAVINGS <AMSB> SEEKS STATE CHARTER - TACOMA, Wash., April 3 - American Savings Bank F.S.B. said -it applied for a state charter and it intends to change its -depositor insurance coverage to the Federal Deposit Insurance -Corp and to withdraw from coverage by the Federal Savings and -Loan Insurance Corp. - The savings bank also said state chartered institutions -have broader banking powers and the conversion will be in the -best interest of both shareholders and depositors. - Reuter - - - - 3-APR-1987 13:55:26.39 - -usa - - - - - - -F -f1878reute -r f BC-LTV-<QLTV>-UNIT-WINS 04-03 0063 - -LTV <QLTV> UNIT WINS TWO ARMY CONTRACTS - SOUTH BEND, Ind., April 3 - LTV Corp said its AM General -division received two contracts valued at 11.7 mln dlrs from -the U.S. Army to make special equipment kits for Hummer troop -and cargo vehicles. - Deliveries are set for May 1987 through November 1988, the -company said. AM General is part of LTV Missiles and -Electronics Group. - Reuter - - - - 3-APR-1987 13:57:12.03 - -usajapan - - - - - - -F -f1882reute -r f AM-PLANE-BOEING 04-03 0112 - -BOEING SEEKS CAUSE OF JAL ENGINE PROBLEM - SEATTLE, April 3 - Boeing Co. <BA> is trying to find out -what caused an engine brace to snap on one of Japan Air Line's -747-SR jumbo jets, a spokesman for the airplane manufacturer -said. - "We know about the problem and we have provided a service -advisory to operators of 747s," said the spokesman. "We are not -advising any massive inspections at this time." - The advisory alerts operators of the jumbo jets that a -problem has occurred and under what circumstances, but it does -not recommend any action. - "A 'service bulletin' would be sent out if there is -anything they should be concerned about," the spokesman said. - A JAL spokesman in Toyko said inspectors making a routine -check found one of three diagonal braces attaching an engine to -the wing of a 747-SR had snapped due to metal fatigue. - The airlines said it had ordered an inspection of all 11 of -its 747-SR's. The plane is a full-sized jumbo jet that has been -modified slightly to handle short-haul routes in Japan, mainly -between Tokyo and Osaka. - The jetliners have beefed-up landing gear to accommodate a -higher-than-normal number of landings and takeoffs. - Boeing's spokesman said only JAL and All Nippon Airlines -use the 747-SR. JAL took delivery of its first 747-SR in 1973 -and purchased two more last year. He said the braces had been -shipped to a Boeing plant near Seattle where they were being -inspected. - Reuter - - - - 3-APR-1987 13:58:59.52 - -uknigeria - - - - - - -C G T M -f1886reute -d f BC-BRITAIN'S-ECGD-DISCUS 04-03 0101 - -BRITAIN'S ECGD DISCUSSING NEW COVER FOR NIGERIA - LONDON, April 3 - Britain's Export Credits Guarantee -Department (ECGD) is holding talks with Nigeria aimed at -resuming insurance cover for British exporters to Nigeria, the -head of ECGD's international debt division, Gerry Breach, said. - The ECGD suspended cover on Nigeria in 1984 after the -country fell into arrears on payments of insured and uninsured -debts. - Following last week's bilateral accord between Britain and -Nigeria to reschedule the country's insured trade debts, -bankers had hoped that talks would commence on a resumption of -cover. - Breach told a businessmen's meeting that for the ECGD to -consider "a gradual introduction of a package of new support" -certain criteria would have to be met. - This would involve the Nigerian economic structural -adjustment program being put into effect and being endorsed by -the International Monetary Fund, the program remaining on -course and continuing to be endorsed by the IMF and a -satisfactory level of acceptance by the Nigerian government of -the ECGD insured short-term trade arrears. - British exports to Nigeria exceeded 550 mln stg in 1986. - Reuter - - - - 3-APR-1987 14:02:56.83 - -uk - - - - - - -RM F -f1899reute -u f BC-BP-CREDIT-FACILITY-SU 04-03 0115 - -BP CREDIT FACILITY SUBSTANTIALLY OVERSUBSCRIBED - LONDON, April 3 - A five billion dlr credit facility being -arranged for two units of British Petroleum Co Plc <BP.L> -attracted over 15 billion dlrs in syndication but will not be -increased, Morgan Guaranty Ltd said on behalf of Morgan -Guaranty Trust Co of New York, the arranger. - It said that 64 of BP's relationship banks will be joining -the facility, although their participations will be cut back -dramatically. Banks had been invited as lead managers at 200 -mln dlrs, managers at 125 mln and co-managers at 75 mln. - BP will make the final decision on the allotments broadly -based on relationships rather than on the amounts offered. - The facility is being arranged for BP International and BP -North America in conjunction with the company's planned tender -offer for the 45 pct of Standard Oil Co it does not already -own. - Because of the purpose of the facility, Morgan only had -five business days to arrange the facility. As a result, it -carried terms that bankers considered relatively favourable -when compared with those on most other recent credits. The -facility fee, for example, was 1/8 pct compared with the 1/16 -pct BP paid on a recent 1.5 billion dlr refinancing. - REUTER - - - - 3-APR-1987 14:04:13.24 -strategic-metal -spain - - - - - - -C M -f1903reute -u f BC-MINAS-DE-ALMADEN-RAIS 04-03 0113 - -MINAS DE ALMADEN RAISES MERCURY PRICE - MADRID, April 3 - Spain's Minas de Almaden y Arrayanes S.A. -has agreed with Algerian producer ENOF to establish a minimum -price of 300 dlrs per flask for spot mercury sales, Almaden -spokesman Jesus Gallego said. - In response to enquiries from Reuters, he said his company -had raised the minimum price for its spot sales from 240 dlrs -per flask following talks with ENOF. - In a separate press release, the company said that ENOF and -Almaden held talks in Istanbul a week ago with Turkish mercury -producers on ways to improve prices, but Gallego said he was -not in a position to say what action the Turkish companies -would be taking. - Reuter - - - - 3-APR-1987 14:04:52.21 -money-fx -usa - - - - - - -F A RM -f1907reute -u f BC-U.S.-JOBS-DATA-SAID-T 04-03 0099 - -U.S. JOBS DATA SAID TO RULE OUT FED TIGHTENING - By Kathleen Hays, Reuters - NEW YORK, April 3 - A steep drop in goods-producing jobs -detracted from U.S. March non-farm payroll employment and makes -it unlikely that the Federal Reserve will tighten monetary -policy to defend the dollar, economists said. - U.S. March non-farm payroll employment rose 164,000, less -than the gain of 220,000 to 290,000 the financial markets -expected. Manufacturing employment fell 25,000, compared with -February's 50,000 gain, while March construction employment -dropped 45,000 after being unchanged in February. - "The momentum of industrial activity is tapering off as we -end the first quarter," said Stephen Roach of Morgan Stanley -and Co Inc. "This sets the stage for more sluggish growth in -the second and third quarters." - "The Fed will view this as a caution flag on the economy," -he said. "They will not ease as long the dollar is weak, but -clearly they can't tighten." - David Wyss of Data Resources Inc said that the downward -revision in February non-farm payroll employment to 236,000 -from 337,000 means that employment gains in the first quarter -were weaker than expected. - While Wyss left his first-quarter forecast of real U.S. -gross national product growth at 3.5 pct, he said the March -jobs data suggested a downward revision in his second-quarter -growth forecast to 2.5 pct from 2.8 pct. - Bill Sullivan of Dean Witter Reynolds Inc said the average -monthly gain in non-farm jobs in the first quarter was only -237,000, compared with 254,000 in the fourth quarter of 1986. - "There's momentum in first quarter labor force activity, -but less than assumed," he said. "Gains in goods-producing jobs -were subdued at best. This rules out any possibilty of the Fed -tightening for exchange-related purposes." - In March, the average workweek fell back to its January -level of 34.8 hours from 35.0 hours in February. Manufacturing -hours also fell back to their January level, totalling 40.9 -hours in March compared with 41.2 hours in February. - The Commerce Department noted that loss of manufacturing -jobs in March was concentrated in automobile, electrical and -electronic manufacturing. - Robert Brusca of Nikko Securities International said that a -13,000 decline in auto manufacturing employment accounted for -nearly half of the total drop in manufacturing jobs. - Economists said that a build-up in auto inventories -resulting from a steep drop in sales has finally caught up with -the labor force and may point to slower growth ahead. - Most expect an increase in inventories of as much as five -pct to offset a steep four to five pct drop in final sales in -the first-quarter GNP accounts. - Roach said he expects first quarter U.S. GNP to rise two -pct, to be followed by a gain of 1.0-1.5 pct at best in the -second and third quarters. He said the March drop in industrial -activity "is a reasonable response in light of the inordinate -contribution inventory accumulation made to GNP." - Economists said the employment data also suggest weak gains -in industrial production and personal income for March. -They expect only marginal gains, if not small declines, for -these indicators, compared with a February increases of 0.5 pct -in industrial production and 0.9 pct in personal income. - Steve Slifer of Lehman Government Securities said the drop -in March construction employment may also signal a drop in -March housing starts, which rose 2.6 pct in February to 1.851 -million units at an annual rate from 1.804 million units in -January. - The rate of unemployment fell to 6.6 pct, its lowest level -since March 1980, from 6.7 pct in February. But Wyss pointed -out that this resulted from a drop in the labor force, which -fell to 119.2 mln in March from 119.35 mln in February. - "This just means that there were fewer people looking for -work, so the drop in unemployment doesn't mean much," he said. - He said the latest employment report will not concern the -Fed because it does points to GNP growth in the first half of -2.5-3.0 pct, but "it does suggest they can't afford to tighten -to quickly either." - The statistical factors used to smooth out seasonal -fluctuations in the jobs data may have understated March labor -force gains, just as seasonal factors probably overstated them -in January and February, Slifer said, but are consistent with -his forecast of 1.8 pct first quarter GNP growth. - Economic growth remains sluggish, but Silfer does not think -that the Federal Open Market Committee changed policy at their -meeting this week. "At some point they will be more inclined to -ease," he said. For the time being, however, the March -employment report "increases the likelihood they won't tighten, -regardless of the dollar." - - Reuter - - - - 3-APR-1987 14:06:26.28 -acq -usa - - - - - - -F -f1912reute -u f BC-BRISTOL-MYERS-<BMY>-R 04-03 0096 - -BRISTOL-MYERS <BMY> REVIEWING SCIMED MERGER - MINNEAPOLIS, April 3 - SciMed Life Systems Inc <SMLS> said -Bristol-Myers Co is analyzing the pending lawsuit brought -against SciMed by <Advanced Cardiovascular Systems Inc> to -determine whether to consummate its previously announced plans -to merge with SciMed. - The company said its was served the suit in Minneapolis on -March 31, the day after it announced its definitive merger -agreement with Bristol-Myers. - SciMed said the suit, which alleges that SciMed infringed -on Advanced Cardiovascular patents, is without merit. - Reuter - - - - 3-APR-1987 14:07:59.28 - -ukjapan - - - - - - -F -f1919reute -d f BC-UK-SEEKS-PACT-WITH-JA 04-03 0095 - -UK SEEKS PACT WITH JAPAN FOR INFORMATION EXCHANGE - LONDON, April 3 - Corporate Affairs Minister Michael Howard -said he will use a coming trip to Tokyo to seek a memorandum of -understanding between Britain and Japan on the exchange of -information to fight fraud in world financial markets. - He told journalists that he would be seeking an agreement -with Japan similar to one struck last autumn between the U.K. -Department of Trade and Industry, on the one hand, and the -Securities and Exchange Commission (SEC) and the Commodity -Futures Trading Commission on the other. - Market sources have persistently speculated that it was -information passed on to the U.K. By the SEC through their pact -that triggered the DTI's investigations into (Guinness Plc's) -<GUIN.L> takeover of <Distillers Co Plc> last year. - The probe, launched in December, triggered the resignation -of some of Guinness' senior management, including Chairman -Ernest Saunders. - The Trade department, however, has never confirmed this and -has yet to state what its investigation actually concerns. - REUTER - - - - 3-APR-1987 14:08:38.07 -crude -iraqiran - - - - - - -C -f1921reute -d f AM-GULF-IRAQ 04-03 0075 - -IRAQ SAYS ITS FORCES SINK THREE IRANIAN VESSELS - BAGHDAD, April 3 - Iraq said its forces sank three Iranian -boats which tried to approach its disused deep water oil -terminal in the northern Gulf today. - A military spokesman, quoted by the official Iraqi news -agency, said other Iranian boats fled. He did not identify the -vessels. - Iraq's major oil outlets in the northern Gulf were closed -shortly after the war with Iran started in late 1980. - Reuter - - - - 3-APR-1987 14:09:38.75 - -france - - - - - - -RM -f1924reute -r f BC-FRANCE-HLM-LAUNCHES-7 04-03 0083 - -FRANCE HLM LAUNCHES 750 MLN FRANC BOND - PARIS, April 3 - Housing group France HLM is launching a -750 mln French franc 8.40 pct 15-year bond with an issue price -of 95.36 pct and denominated in 5,000 franc units, lead manager -Banque Paribas said. - The issue is being co-led by Credit Lyonnais. - Payment date is April 20 and redemption will be in 12 equal -annual instalments starting after the first three years of the -issue's life. It will be listed in the Official Bulletin (BALO) -on April 6. - REUTER - - - - 3-APR-1987 14:12:09.91 - -usa - - - - - - -F -f1928reute -u f BC-******TEXAS-AIR'S-CON 04-03 0078 - -TEXAS AIR'S <TEX> CONTINENTAL MARCH TRAFFIC UP - HOUSTON, April 3 - Texas Air Corp'S Continental Airlines -said its March 1987 load factor rose to 65.6 pct from 64.3 pct -last year. Available seat miles rose to 5.1 mln from 2.5 mln -and revenues passenger miles rose to 3.3 mln from 1.6 mln - For the year to date, load factor fell to 61.8 pct from -61.9 pct, available seat miles rose to 13.2 mln from 7.3 mln -and revenue passenger miles rose to 8.2 mln from 4.5 mln - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-014.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-014.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-014.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-014.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2029 +0,0 @@ - - - 7-APR-1987 11:02:35.07 - - - - - - - -E -f1137reute -b f BC-JOHANNESBURG-GOLD-SHA 04-07 0120 - -JOHANNESBURG GOLD SHARES CLOSE MIXED TO FIRMER - JOHANNESBURG, April 7 - Gold share prices closed mixed to -slightly firmer in quiet and cautious trading, showing little -reaction to a retreat in the bullion price back to below 420 -dlrs and a firmer financial rand, dealers said. - Heavyweight Vaal Reefs ended eight rand higher at 398 rand -but Grootvlei eased 40 cents at 16.60 rand, while mining -financials had Gold Fields up a rand at 63 rand despite weaker -quarterly results. Other minings were firm but platinums eased. - Industrials also closed mixed to firmer, the index once -again hitting a new high of 1757 from Friday's 1753 finish. The -overall index also hit a new high of 2188 versus 2179 on -Friday. - REUTER - - - - 7-APR-1987 11:02:40.82 - - - - - - - -TQ -f1138reute -u f BC-NY-SUGAR-11-1100 04-07 0024 - -NY SUGAR 11 1100 - - MAY7 662 OFF 17 - JUL7 678 OFF 15 - SEP7 696 OFF 12 - OCT7 699 OFF 14 - JAN8 UNTRD - MAR8 739 OFF 16 - MAY8 UNTRD - JUL8 780 OFF 3 - - - - - - 7-APR-1987 11:03:03.68 - - - - - - - -CQ TQ -f1140reute -u f BC-NY-COFFEE-11-00 04-07 0026 - -NY COFFEE 11:00 - - MAY7 10200 OFF 4 - JUL7 10390 OFF 10 - SEP7 10580 OFF 25 - DEC7 10900 UNCH - MAR8 11100 UP 50 - MAY8 11300 UP 50 - JUL8 UNTRD - SEP8 UNTRD - - - - - - 7-APR-1987 11:03:30.55 - - - - - - - -CQ LQ -f1143reute -u f BC-peoria-actual-rcpts 04-07 0023 - -PEORIA ACTUAL LIVESTOCK RECEIPTS - USDA - CATTLE HOGS - For April 8 - WEEK AGO 200 2,000 - YEAR AGO 100 2,400 - Reuter - - - - - - 7-APR-1987 11:04:03.63 - - - - - - - -C L -f1145reute -u f BC-feeder-cattle-report 04-07 0106 - -FEEDER CATTLE FUTURES SET NEW HIGHS, TURN MIXED - CHICAGO, April 7 - Feeder Cattle futures advanced 0.20 to -0.30 cent at the start and posted new season's highs in April -through August and October before slipping to trade 0.10 cent -lower to 0.20 higher in latest trade. - Futures ran up to new highs at the start on general demand -prompted by continued strong cattle fundamentals. Posting of -another 10 cent gain in the latest reported average feeder -steer price added to support, traders said. - However, prices retreated on profit-taking following the -lead of other meat pits. Stotler notably sold April on the -decline, they said. - Reuter - - - - 7-APR-1987 11:04:12.58 - - - - - - - -FQ EQ -f1146reute -u f BC-AMEX-CONSOLIDATED-110 04-07 0050 - -AMEX-CONSOLIDATED 1100 ACTIVES - - 364,200 WESTERN DIG 25 7/8 UP 1 1/4 - 230,200 WANG LAB B 15 1/2 UP 1/8 - 223,800 WICKES COS 4 1/8 OFF 1/8 - 190,600 ALZA CP 37 1/2 UP 1 7/8 - 187,900 TEXAS AIR 41 1/2 OFF 1 - - ADVANCES 247 DECLINES 152 - - - - - - 7-APR-1987 11:04:23.94 - - - - - - - -M -f1147reute -b f BC-LME-LEAD-AFT-2ND-RING 04-07 0025 - -LME LEAD AFT 2ND RING 1602 - APR 7 - LAST BUYER SELLER - Cash 308.0 -- -- - 3 Months 301.5 301.0 302.0 - - - - - - 7-APR-1987 11:04:29.67 - - - - - - - -GQ -f1148reute -u f BC-cbt-corn-spreads 04-07 0058 - -CBT CORN SPREADS - APRIL 7 - 1000 hrs cdt - MONTHS LAST DIFFERENCE - Jul/May 3-1/4 over 3-1/2 over - Dec/Jul 12-3/4 over 13 over - Jul/Sep 4-3/4 under 5 under - Sep/May no quote 8-1/4 over - Sep/Dec no quote 8-1/4 under - Dec/Mar8 no quote no quote - May/Dec 16 under 16-1/2 under - Reuter - - - - 7-APR-1987 11:04:47.19 - - - - - - - -FQ EQ -f1150reute -u f BC-NYSE-CONSOLIDATED-110 04-07 0090 - -NYSE-CONSOLIDATED 1100 ACTIVES - -4,969,500 GCA CP 7/32 OFF 1/32 -2,163,900 BELLSOUTH 39 3/8 OFF 1/8 -2,058,500 TEXACO 34 1/8 UP 1/2 -1,152,200 OKLAHO G&E 32 1/2 OFF 3/4 - 939,700 UNITED AIR 65 OFF 3/4 - 929,900 USX CORP 29 5/8 UP 3/8 - 918,100 GEN MOTORS 83 5/8 UP 2 1/8 - 917,500 FORD MOTOR 91 1/4 UP 1 1/8 - 755,700 DELMARVA 30 1/4 OFF 1/8 - 732,200 CAESARS 31 1/4 UP 5/8 - - ADVANCES 636 DECLINES 525 - - - - - - 7-APR-1987 11:05:05.48 - - - - - - - -C L -f1151reute -u f BC-TEXAS-PANHANDLE/W-OKL 04-07 0098 - -TEXAS PANHANDLE/W OKLA FEEDLOT ROUNDUP - USDA - Amarillo, April 7 - Cattle in the panhandle area monday -were 0.50 to 1.50 dlr higher. Trading was very active. - Feedlots reported very good interest and inquiry from -buying sources. Confirmed sales of 22,700 steers and heifers -8,100 head. There were 37,900 head sold for the week to date. - Steers - good and mostly choice 2-3, 70-85 pct choice, -1025-1150 lb 69.00-70.00, late mostly 69.50-70.00. - Heifers - near 350 head mostly choice 2-3 1000 lb 68.25. -Good and mostly choice 2-3 950-100 lb 66.50-68.00, late mostly -67.00-68.00. - Reuter - - - - 7-APR-1987 11:05:17.86 - - - - - - - -CQ -f1152reute -u f BC-MIDWEST-GRAIN-FUTURES 04-07 0061 - -MIDWEST GRAIN FUTURES 11:00 EDT -KANSAS CITY WHEAT - MAY7 274 1/2 UP 1/2 - JUL7 263 1/2 UP 1/2 - SEP7 265 1/2 UP 1/4 - DEC7 270 1/2 OFF 1/4 - MAR8 -- --MINNEAPOLIS WHEAT - MAY7 284 3/4 UP 1 1/4 - JUL7 280 1/4 OFF 1/2 - SEP7 277 UP 1 - DEC7 -- -- - MAR8 -- -- - - - - 7-APR-1987 11:05:28.64 -trade -usa -volcker - - - - -V RM -f1153reute -b f BC-VOLCKER-PUSHES-SPENDI 04-07 0080 - -VOLCKER PUSHES SPENDING CUTS OVER TRADE BILL - WASHINGTON, April 7 - Federal Reserve Board Chairman Paul -Volcker said reducing the federal budget deficit was a more -important goal for Congress than drafting trade legislation. - "Reduce the budget deficit," Volcker responded when asked by -a member of the Senate Banking Committee about trade -legislation priorities. - "If you don't deal with the budget deficit, everything else -you do is going to be counterproductive," he said. - Reuter - - - - 7-APR-1987 11:05:35.43 - - - - - - - -M -f1154reute -u f BC-cbt-metals-registns 04-07 0032 - -CBT METALS REGISTRATIONS - APRIL 7 - AS OF 0945 CDT - SILVER 1,000 OZ 13,943 UNC - 5,000 OZ 203 UNC - GOLD 100 OZ 42 UNC - 3-KG 42 UNC - 1-KG 658 UNC - Reuter - - - - - - 7-APR-1987 11:05:44.09 - - - - - - - -GQ -f1155reute -u f BC-MIDWEST-GRAIN-FUTURES 04-07 0061 - -MIDWEST GRAIN FUTURES 11:01 EDT -KANSAS CITY WHEAT - MAY7 274 1/2 UP 1/2 - JUL7 263 1/2 UP 1/2 - SEP7 265 1/2 UP 1/4 - DEC7 270 1/2 OFF 1/4 - MAR8 -- --MINNEAPOLIS WHEAT - MAY7 284 3/4 UP 1 1/4 - JUL7 280 1/4 OFF 1/2 - SEP7 277 UP 1 - DEC7 -- -- - MAR8 -- -- - - - - 7-APR-1987 11:05:53.61 - - - - - - - -GQ -f1156reute -u f BC-cbt-soybean-spreads 04-07 0074 - -CBT SOYBEAN SPREADS - APRIL 7 - 1000 hrs cdt - MONTHS LAST DIFFERENCE - May/Jul 1 under 1 under - Jul/Aug even even - Sep/Nov 1-1/2 under 2-1/2 under - May/Nov 2-1/2 over 2-1/4 over - Jul/Nov 3-1/2 over 3-1/2 over - Nov/Jan 6-3/4 under 6-3/4 under - Aug/Sep no quote 5 over - Mar/May8 no quote no quote - Jan/Mar8 no quote no quote - Reuter - - - - 7-APR-1987 11:06:07.52 - - - - - - - -GQ -f1157reute -u f BC-CBT-11-01-EDT 04-07 0105 - -CBT 11:01 EDT -WHEAT -MAY7 288 UP 1 3/4 -JUL7 273 UP 1/4 -SEP7 273 1/2 UP 1/2 -DEC7 279 UP 1 -MAR8 278 1/4 UP 1 -CORN -MAY7 159 3/4 UP 1 1/2 -JUL7 163 UP 1 1/4 -SEP7 167 1/2 UP 1 1/4 -DEC7 176 UP 1 1/4 -MAR8 183 UP 1 1/4 -OATS -MAY7 150 UNCH -JUL7 138 OFF 1/2 -SEP7 128 1/4 UNCH -DEC7 134 1/2 UP 1/2 -MAR8 UNTRD -BEANS -MAY7 501 1/4 UP 1 1/2 -JUL7 502 1/4 UP 2 -AUG7 502 1/2 UP 3 -SEP7 497 UP 3 -NOV7 498 3/4 UP 2 3/4 -JAN8 505 1/4 UP 2 3/4 -MEAL -MAY7 1456 UP 3 -JUL7 1457 UP 6 -AUG7 1455 UP 5 -SEP7 UNTRD -OCT7 1455 UP 4 -OIL -MAY7 1554 UP 11 -JUL7 1589 UP 11 -AUG7 1605 UP 10 -SEP7 1620 UP 9 -OCT7 1635 UP 10 - - - - - - 7-APR-1987 11:06:13.18 - - - - - - - -C G -f1158reute -u f BC-cbt-registrations 04-07 0063 - -CBT REGISTRATIONS - APRIL 7 - AS OF 0945 CDT - SOYOIL 7,099 UNC - SILVER 1,000 OZ 13,943 UNC - 5,000 OZ 203 UNC - GOLD 100 OZ 42 UNC 3-KG 42 UNC 1-KG 658 UNC - CERTIFICATES OUTSTANDING - SOYBEAN MEAL 0 UNC - CENTRAL 0 - MID-SOUTH 0 - MISSOURI 0 - EASTERN IOWA 0 - NORTHEAST 0 - NORTHERN 0 - Reuter - - - - - - 7-APR-1987 11:06:16.90 - - - - - - - -L -f1159reute -u f BC-SIOUX-FALLS-CATTLE-UP 04-07 0044 - -SIOUX FALLS CATTLE UP 0.50 DLR - USDA - sioux falls, april 7 - slaughter cattle rose 0.50 dlr in -active trade, the usda said. - stees - choice 2-4 1100-1400 lbs 66.00-67.00. - heifers - load choice 3 near 1225 lbs 66.50. choice 2-4 -950-1125 lbs 64.00-66.00. - Reuter - - - - 7-APR-1987 11:06:31.29 - - - - - - - -GQ -f1161reute -u f BC-CME-11-01--EDT 04-07 0053 - -CME 11:01 EDT - -L-CATTLE -APR7 69.57 UP 0.17 -JUN7 64.92 OFF 0.10 -AUG7 60.75 OFF 0.12 -F-CATTLE -APR7 69.00 OFF 0.10 -MAY7 68.05 OFF 0.17 -AUG7 66.50 UP 0.10 -HOGS -APR7 50.10 UP 0.28 -JUN7 48.75 UP 0.28 -JUL7 47.25 UP 0.38 -BELLIES -MAY7 66.15 OFF 0.25 -JUL7 64.70 OFF 0.15 -AUG7 61.65 UP 0.05 -FEB8 56.00 UP 0.40 - - - - - - 7-APR-1987 11:06:39.38 - - - - - - - -GQ -f1162reute -u f BC-cbt-soyoil-report 04-07 0060 - -CBT SOYBEAN OIL SPREADS - APRIL 7 - 1000 hrs cdt - MONTHS LAST DIFFERENCE - May/Jul 0.34 under 0.35 under - Jul/Aug 0.16 under 0.17 under - Jul/Dec 0.78 under 0.77 under - Aug/Sep 0.16 under 0.16 under - May/Aug no quote 0.52 under - May/Dec no quote 1.12 under - Dec/Jan no quote no quote - Reuter - - - - 7-APR-1987 11:06:45.97 - - - - - - - -MQ -f1163reute -u f BC-NY-COMEX-ALUMINUM-11- 04-07 0040 - -NY COMEX ALUMINUM 11:01 - LAST CHANGE -APR7 UNTRD -MAY7 6150 UNCH -JUN7 UNTRD -JUL7 UNTRD -SEP7 UNTRD -DEC7 UNTRD -JAN8 UNTRD -FEB8 UNTRD -MAR8 UNTRD -MAY8 UNTRD -JUL8 UNTRD -SEP8 UNTRD -DEC8 UNTRD -JAN9 UNTRD - - - - - - 7-APR-1987 11:06:50.37 - - - - - - - -LQ -f1164reute -u f BC-FLASH-SIOUX-FALLS-HOG 04-07 0027 - -FLASH SIOUX FALLS HOGS UP 1.75 DLR - USDA - sioux falls, april 7 - barrows and gilts rose 1.75 dlr in -active trade, the usda said. us 1-3 220-250 lbs 51.75-52.00. - Reuter - - - - 7-APR-1987 11:06:58.55 - - - - - - - -MQ CQ -f1165reute -u f BC-NY-COMEX-GOLD-11-01 04-07 0036 - -NY COMEX GOLD 11:01 - APR7 4199 UP 14 - MAY7 UNTRD - JUN7 4237 UP 11 - AUG7 4288 UP 15 - OCT7 4327 UP 10 - DEC7 4370 UP 9 - FEB8 4415 UP 8 - APR8 UNTRD - JUN8 UNTRD - AUG8 UNTRD - OCT8 UNTRD - DEC8 UNTRD - FEB9 UNTRD - - - - - - 7-APR-1987 11:07:09.81 - - - - - - - -FQ -f1167reute -u f BC-NASDAQ-COMP-11-01 04-07 0007 - -NASDAQ COMP 11:01 -COMP 437.49 OFF 0.29 - - - - - - 7-APR-1987 11:07:18.11 - - - - - - - -GQ -f1168reute -u f BC-cbt-soymeal-spreads 04-07 0052 - -CBT SOYBEAN MEAL SPREADS - APRIL 7 - 1000 hrs cdt - MONTHS LAST DIFFERENCE - May/Jul 0.10 over 0.10 over - Jul/Aug no quote even - Jul/Dec no quote 1.40 under - Oct/Dec no quote 1.40 under - Dec/Jan no quote 0.60 under - Oct/Jan no quote 2.00 under - Reuter - - - - 7-APR-1987 11:07:22.81 - - - - - - - -C G L M T RM -f1169reute -b f BC-LONDON-DOLLAR-FLUCTUA 04-07 0027 - -LONDON DOLLAR FLUCTUATIONS 1600 - APRIL 7 - STG 1.6177/82 - DMK 1.8235/45 - SFR 1.5120/30 - DFL 2.0578/88 - FFR 6.0650/0700 - YEN 145.20/30 - LIT 1299/1301 - BFC 37.76/81 - - - - - - 7-APR-1987 11:07:28.63 - - - - - - - -G -f1170reute -r f BC-PRSFRENCH-GRAINS---AP 04-07 0069 - -PRSFRENCH GRAINS - APR 07 - Prices in ff per 100 kilos. Cumulative monthly supplements of -17.40 ff per ton to be added from august 1986 onwards. - Soft wheat- dlvd ROUEN APR 130.50 PAID, MAY 130.25 PAID. -LA PALLICE APR/MAY 129.50 BYR. DUNKIRK APR 129.50 PAID. - SOFT WHEAT - EX REGION EURE ET LOIR APR/OCT 126 PAID. -CHALONS/MODANE APR/JUNE 122 BYR. - SOFT WHEAT - FOB REGION METZ APR/JUNE 127 BYR/127.50 SLR. - Feed barley - dlvd ROUEN APR/MAY 118.50 BYR/119 SLR. - FEED BARLEY - EX REGION EURE ET LOIR APR/MAY 114.50 SLR. -CHALONS/MODANE APR/MAY 112.50 BYR. - FEED BARLEY - FOB REGION METZ APR/MAY 116 BYR. - CORN - DLVD BAYONNE APR/JUNE 132.50 BYR. BORDEAUX APR/JUNE -134 BYR. TONNAY/CHARENTES APR/JUNE 131.75 BYR. - CORN - EX REGION EURE ET LOIR 126 TO 127 NOMINAL. MARNE -APR/JUNE 127 NOMINAL. - CORN - FOB REGION METZ APR/JUNE 132.50 BYR. CREIL -APR/MAY/JUNE 128 PAID, JUL/AUG/SEP 129/129.50 PAID. REUTER - - - - - - 7-APR-1987 11:07:45.56 -acq -usa - - - - - -F -f1172reute -d f BC-AMERICAN-SPORTS-ADVIS 04-07 0071 - -AMERICAN SPORTS ADVISORS <PIKS> TO LIQUIDATE - CARFLE PLACE, N.Y., April 7 - American sports Advisors Inc -said it has agreed to sell its sports handicapping and -publication business to Professor Enterprises for about -1,650,000 dlrs and intends to liquidate after closing. - The transaction is subject to shareholder approval. - Professor is owned by American Sports president Edward C. -Horowitz and Mike Warren, it said. - Reuter - - - - 7-APR-1987 11:08:01.92 - - - - - - - -C T -f1173reute -u f BC-ny-coffee-opg-report 04-07 0106 - -N.Y. COFFEE FUTURES SLIGHTLY HIGHER, THIN EARLY - NEW YORK, April 7 - N.Y. coffee futures were marginally -firmer midmorning, trading in ranges of no more than 0.50 cent. - May was up 0.16 cent at 102.20 cents at 1052 hrs EST, in a -range of 102.00 to 102.50 cents. July was up 0.15 at 104.15 -cents in a 35-point range. - Traders said reports that the U.S. State Department does -not forsee a meeting with Brazil prior to the next -International Coffee Organization session in September did not -affect the market as the news was expected. - Operators are watching the cash market for indications of -roaster interest or producer selling. - Reuter - - - - 7-APR-1987 11:08:12.19 - -uk -thatcher - - - - -V -f1174reute -u f AM-BRITAIN 1STLD 04-07 0124 - -THATCHER FIRM AS PRESSURE MOUNTS FOR ELECTIONS - By Colin McIntyre, Reuters - LONDON, April 7 - As pressure mounted on British Prime -Minister Margaret Thatcher to call a June election, she said -today that the decision on when to go to the county was hers -and hers alone. - She was speaking to parliament after senior members of the -ruling Conservative Party urged her to call elections due in -June 1988 a year early in the wake of two more opinion polls -giving her party a commanding lead. - Asked by a Conservative back-bencher for an assurance that -the decision was hers alone, and did not depend on "media hype, -pressure and speculation," she replied: "The date of the next -election will be decided by Downing Street, not Fleet Street." - Downing Street is the Prime Minister's official residence, -Fleet Street the traditional home of the British national -press. - A Harris poll for the breakfast-time program TV-AM gave the -Tories 43 pct of the vote, representing a majority of 132 seats -in parliament, their biggest lead since the party's landslide -victory in the 1983 elections. - In The Times of London, a MORI poll gave the Tories a 92 -seat majority. It was the sixth poll to show the ruling party -with a big lead over the opposition Labour Party and the -fast-improving centrist Alliance. - Leading the chorus urging Thatcher to go to the polls in -June, Sir Marcus Fox, vice-chairman of the influential 1922 -committee of Conservative back-benchers, said: "I have always -felt that it would be June, and this reinforces my view. - "I always thought June was right. We have got most of our -legislation through and to go beyond that I do not think would -be in the national interest." - Another Tory back-bencher, Anthony Beaumont-Dark, said: "I -have always been an October man, but I think it would be good -to get it out of the way now." - Their comments came as government officials dismissed -speculation about a snap election to coincide with local polls -in May, timed to reap maximum advantage from the recent -popularity surge, Thatcher's successful trip to Moscow and -Labour's current popularity slump. - Calls for a May poll were also prompted by Tory concern -over a steady advance by the Alliance, and the possibility that -if it continues it could rob the Conservatives of an overall -majority in parliament. - Today's MORI poll showed an Alliance gain of eight points -over the past month in around 100 key marginal seats where the -outcome of the next election is likely to be decided. - Reuter - - - - 7-APR-1987 11:08:21.35 - -ukportugal - - - - - -F -f1175reute -d f BC-PORTUGUESE-AIRLINE-CO 04-07 0122 - -PORTUGUESE AIRLINE CONFIRMS AIRBUS A310 ORDER - LONDON, April 7 - Portugal's "flag carrier" airline TAP has -confirmed an order for three Airbus Industrie <AINP.PA> -A310-300 passenger aircraft, British Aerospace Plc <BAEL.L> -(BAe), one of four shareholders in the international Airbus -consortium, said. - BAe said in a statement TAP had also taken options on -another two Airbus aircraft, either the existing A310-300 -medium range craft or the long-range four-engined A340 which -Airbus hopes to launch in 1992, depending on the airline's -needs. - BAe said the firm order confirmed a commitment taken by TAP -in January. Details of the value of the contract, delivery -dates or which engine would power the aircraft were not -available. - Reuter - - - - 7-APR-1987 11:08:49.00 - - - - - - - -G -f1177reute -r f BC-LONDON-EC-BARLEY/WHEA 04-07 0053 - -LONDON EC BARLEY/WHEAT CLOSING - APR 7 - BARLEY WHEAT - May 114.65 May 122.80 - Sep 99.85 Jul 125.50 - Nov 102.45 Sep 101.20 - Jan 105.05 Nov 103.40 - Mar 107.50 Jan 106.35 - May 109.40 Mar 108.75 - May 111.40 - ALL VALUES - SALES - BARLEY 24 - WHEAT 197 - - - - - - 7-APR-1987 11:09:35.39 - - - - - - - -LQ -f1178reute -b f BC-FLASH-ST-PAUL-HOGS-UP 04-07 0030 - -FLASH ST PAUL HOGS UP 1.00/2.00 DLRS - USDA - st paul, april 7 - barrow and gilt prices rose 1.00 to 2.00 -dlrs in very active trade, the usda said. us 1-3 220-260 lbs -51.50-52.00. - Reuter - - - - 7-APR-1987 11:09:39.16 -money-fx - -volcker - - - - -V -f1179reute -f f BC-******VOLCKER-SAYS-RE 04-07 0011 - -******VOLCKER SAYS RESTRICTIVE MONETARY POLICY WOULD HURT INVESTMENT -Blah blah blah. - - - - - - 7-APR-1987 11:09:46.42 - - - - - - - -M -f1180reute -b f BC-LME-ZINC-AFT-2ND-RING 04-07 0025 - -LME ZINC AFT 2ND RING 1607 - APR 7 - LAST BUYER SELLER - Hg Cash -- -- -- - 3 Months -- 456.0 457.0 - - - - - - 7-APR-1987 11:09:52.58 - - - - - - - -MQ -f1181reute -u f BC-ny-metals-est-vols 04-07 0035 - -N.Y. METALS FUTURES ESTIMATED VOLUMES- APRIL 7 - Time 10.00 11.00 - Silver 8000 13000 - Copper 900 1700 - Gold 4500 8000 - Aluminum 0 1 - Palladium ---- 190 - Platinum ---- 2226 - Reuter - - - - - - 7-APR-1987 11:10:01.59 - - - - - - - -C T -f1182reute -u f BC-ny-sugar-mids-report 04-07 0102 - -WORLD SUGAR FUTURES TUMBLE IN EARLY TRADING - NEW YORK, April 7 - World sugar futures tumbled early when -sell stops were triggered at 6.60 and 6.55 cents basis the spot -contract, traders said. - Spot May dropped 0.27 cent to 6.52 cents a lb. It opened at -6.72 cents. - Trade houses worked both sides of the market, analysts -said. - The decline may have been a continued reaction to the -market's inability yesterday to breach resistance around 6.93 -cents basis May, which unsettled traders, analysts said. - The market should draw support from buying tenders slated -for tomorrow and Saturday, they said. - Reuter - - - - 7-APR-1987 11:10:11.23 - - - - - - - -RM C M -f1183reute -u f BC-GOLD-AND-SILVER-CLOSE 04-07 0111 - -GOLD AND SILVER CLOSE OFF HIGHS IN ZURICH - ZURICH, April 7 - Gold and silver closed off the day's -highs on profit-taking, but silver, which continued to set the -pace, remained well up on yesterday's close, dealers said. - Underlying speculative demand for silver remained strong -but profit-taking eroded the gains, taking the metal off -indicated highs at around 6.80 dlrs to close at 6.64/66 dlrs an -ounce. Yesterday's close was 6.52/54 dlrs. - Some investors were noted selling gold and switching into -silver. This combined with profit-taking to push gold down to a -close of 418.50/419.00 dlrs from its opening 421.80/422.20 and -yesterday's 421.50/422.00. - Dealers said it was unclear if the silver rally had peaked -or if fresh gains could be achieved in New York. - "A lot depends on the Dow Jones index," one dealer commented. -"Further gains in stock prices would take away a lot of the -support for silver and gold." - Platinum ended 50 cents higher at 563/567 dlrs. - REUTER - - - - 7-APR-1987 11:10:21.78 - -swedenusa - - - - - -F -f1184reute -d f BC-SWEDEN'S-ERICSSON-WIN 04-07 0081 - -SWEDEN'S ERICSSON WINS U.S. ORDER - STOCKHOLM, April 7 - Sweden's Telefon AB L.M. Ericsson -<ERIC.ST> said it has won its third contract from U.S. West Co -Inc <WST> for digital exchange equipment to be supplied in the -state of Idaho over the next five years. - No financial details were available. The company said the -contract provided for the replacement of more than 50 older -exchanges run by <Mountain Bell>, one of U.S. West's three -operating companies, with Ericsson's AXE system. - Reuter - - - - 7-APR-1987 11:10:24.80 - - - - - - - -LQ CQ -f1185reute -b f BC-FLASH-OMAHA-HOGS-UP-1 04-07 0026 - -FLASH OMAHA HOGS UP 1.00 DLR - USDA - omaha, april 7 - barrow and gilt prices rose 1.00 dlr in -active trade, the usda said. us 1-3 220-260 lbs 51.00-51.50. - Reuter - - - - 7-APR-1987 11:10:27.07 - - - - - - - -RM C -f1186reute -u f BC-BANK-OF-ENGLAND-STERL 04-07 0016 - -BANK OF ENGLAND STERLING INDEX - CLOSING APRIL 7 - 72.3 AFTER NOON 72.3 - (PREVIOUS CLOSE 72.4 ) - - - - - - 7-APR-1987 11:11:03.67 - - - - - - - -C G -f1188reute -u f BC-cbt-wheat-opg-report 04-07 0130 - -CBT WHEAT FUTURES OPEN FIRMER, SET NEW HIGHS - CHICAGO, April 7 - CBT wheat futures opened firmer to again -set new contract highs in new crop, then back off those highs -to hold gains of 1-1/4 cents per bushel in May, with new crop -July unchanged in light early dealings. - Steady speculative buying after yesterday's strong close -kept the chart picture very bullish and supported initial -values, traders said. - Rumors that exporters are planning to ship SRW wheat out of -Toledo and/or Chicago, further tightening already low -deliverable stocks, kept May firm relative to new crop months, -they added. - However, the rally failed to follow-through due to the lack -of confirmed export sales of significant quantities of U.S. -wheat so far this week, as some traders expected. - - Reuter - - - - 7-APR-1987 11:11:10.86 - - - - - - - -RM -f1189reute -u f BC-DOLLAR-CLOSES-LITTLE 04-07 0103 - -DOLLAR CLOSES LITTLE CHANGED IN FRANKFURT - FRANKFURT, April 7 - The dollar closed virtually unchanged -from yesterday's finish, but near the day's high after another -extremely quiet session. - With the G-5 meeting in Washington ahead of this week's IMF -interim committee, traders remained reluctant to open any large -positions. Towards the end of the day the dollar firmed after -failing earlier to hold beneath 1.82 marks. Some dealers said -Senate testimony from Fed Chairman Paul Volcker also lent -support. - The dollar closed at 1.8265/75 marks after opening at -1.8200/15 and closing yesterday at 1.8260/70. - Volcker said that a further sizeable dollar decline could -be counter-productive, and that exchange rate adjustments have -been enough to narrow the U.S. Trade deficit. - Such remarks in the past might have moved the dollar -sharply, today they only pushed it up 20 or 30 basis points -when it was already firming for technical reasons. - The dollar in any case held in a narrow range today, -trading early in the morning just below 1.82 marks and rising -to a high of 1.8270. - Dealers said they were awaiting comments after the G-5 -meeting from U.S. Treasury Secretary James Baker. - Looking slightly further ahead, the market is awaiting U.S. -February trade data, due on April 14. - Another set of disappointing figures could push the dollar -below its recent 1.80-85 mark range if there have been no -supportive statements from G-5 officials in Washington in the -meantime, dealers said. - Sterling closed slightly easier at 2.950/954 marks, after -opening at 2.951/955 and closing yesterday at 2.954/958. - The pound has been buoyed by expectations the ruling -Conservatives will win the next U.K. Election. - But dealers said sterling now looks high against the mark -and room for further gains must be limited. - Many dealers believe sterling will enter the EMS joint -float after a U.K. Election. In this case, its ceiling could -well be at or near 2.95 marks, dealers said. - The yen closed at 1.2550/70 marks per 100 after closing -yesterday at 1.2490/2510, and the Swiss franc firmed to -120.55/70 marks per 100 from 120.10/50. - The French franc ended unchanged at 30.04/07 marks per 100. - REUTER - - - - 7-APR-1987 11:11:20.04 - - - - - - - -YQ -f1190reute -u f BC-U.S.-POSTED-PRICES-RE 04-07 0104 - -U.S. POSTED PRICES REPORT (DLRS/BBL) - COMPANY....EFFECTIVE DATE..W.T.I.....W.T.S...LT LOUISIANA - AMOCO.......2/23/87........17.50.....16.60....17.85 - ARCO........4/06/87........18.00.....17.10....18.35 - CHAMPLIN....1/12/87........17.50.....17.00....17.85 - CHEVRON.....2/04/87... ....17.50.....17.50....17.85 - CITGO.......3/12/87........17.50.....17.50....17.85 - COASTAL.....3/12/87........17.50.....16.60......... - CONOCO......3/09/87........17.50.....16.60....17.85 - DIAMOND.SH..3/12/87........17.50................... - EXXON.......3/12/87........17.50.....16.60....17.85 - MARATHON....3/12/87........17.50.....17.50....17.85 - COMPANY....EFFECTIVE DATE..W.T.I.....W.T.S....LT LOUISIANA - MOBIL......2/10/87.........17.50.....17.50....17.85 - MURPHY.....3/12/87.........17.50.....17.50....17.85 - PERMIAN....3/12/87.........17.50.....17.50....17.85 - PHILLIPS...3/12/87.........17.50.....17.50......... - SHELL......1/20/87.........18.11.....17.23....17.89 - SUN........3/12/87.........17.50.....17.50....17.85 - TEXACO*....4/01/87............................17.85 - UNION......3/12/87.........17.50.....17.50....17.85 - * Deleted West Texas-New Mexico postings. - - - - - - 7-APR-1987 11:12:10.97 - - - - - - - -C L -f1193reute -u f BC-live-hog-report 04-07 0127 - -LIVE HOG FUTURES HIGHER EARLY - CHICAGO, April 7 - Live Hog futures ran up for gains of -0.57 to 0.07 cent in eary trade paced by April and June. - Fairly active demand reflected strength in cash hogs and -the continued discount of futures to cash. The start of -fieldwork limited farmer movement of hogs to market and -prompted packers to bid up for hogs. Mostly steady to firm cash -pork products added to support, traders said. - However, prices slipped from the highs in latest trade as -commercial profit-taking developed. Some selling was also -attributed to expectations that cash ham prices will be falling -soon on a seasonal basis, they said. - Thomson and RBH bought while Packers Trading and Refco -sold. Stotler spread long June/short April, they added. - Reuter - - - - 7-APR-1987 11:12:32.96 - - - - - - - -GQ -f1194reute -u f BC-MIDWEST-GRAIN-FUTURES 04-07 0060 - -MIDWEST GRAIN FUTURES 11:10 EDT -KANSAS CITY WHEAT - MAY7 274 1/2 UP 1/2 - JUL7 263 1/2 UP 1/2 - SEP7 265 1/2 UP 1/4 - DEC7 270 1/2 OFF 1/4 - MAR8 -- --MINNEAPOLIS WHEAT - MAY7 285 UP 1 1/2 - JUL7 280 3/4 UNCH - SEP7 277 UP 1 - DEC7 -- -- - MAR8 -- -- - - - - 7-APR-1987 11:12:47.66 - - - - - - - -RM -f1196reute -u f BC-LONDON-LIFFE-YEN-CLOS 04-07 0024 - -LONDON LIFFE YEN CLOSE 1610 - APR 7 - MTH LAST HIGH LOW PR.SET - Jun 6918 6928 6918 6878 - Sep 6964 6964 6962 6923 - - - - - - 7-APR-1987 11:12:56.28 - - - - - - - -RM -f1197reute -u f BC-LONDON-LIFFE-EURODOLL 04-07 0064 - -LONDON LIFFE EURODOLLAR CLOSE 1610 - APR 7 - MTH LAST HIGH LOW PR.SET - Jun 9333 9334 9330 9336 - Sep 9326 9328 9325 9330 - Dec 9318 9319 9317 9322 - Mar 9304 9305 9300 9308 - Jun 9284 9285 9283 9288 - Sep 9262 9262 9260 9267 - Dec 9240 9240 9238 9245 - Mar 9219 9219 9218 9224 - - - - - - 7-APR-1987 11:13:07.76 - - - - - - - -GQ -f1198reute -u f BC-CBT-11-10-EDT 04-07 0108 - -CBT 11:10 EDT -WHEAT -MAY7 287 1/2 UP 1 1/4 -JUL7 273 UP 1/4 -SEP7 273 1/2 UP 1/2 -DEC7 279 1/4 UP 1 1/4 -MAR8 278 1/4 UP 1 -CORN -MAY7 160 UP 1 3/4 -JUL7 163 1/2 UP 1 3/4 -SEP7 168 1/4 UP 2 -DEC7 176 3/4 UP 2 -MAR8 183 1/4 UP 1 1/2 -OATS -MAY7 149 1/2 OFF 1/2 -JUL7 138 OFF 1/2 -SEP7 128 3/4 UP 1/2 -DEC7 134 UNCH -MAR8 UNTRD -BEANS -MAY7 501 1/4 UP 1 1/2 -JUL7 502 1/4 UP 2 -AUG7 502 1/2 UP 3 -SEP7 497 1/2 UP 3 1/2 -NOV7 499 UP 3 -JAN8 505 1/2 UP 3 -MEAL -MAY7 1455 UP 2 -JUL7 1455 UP 4 -AUG7 1455 UP 5 -SEP7 1458 UP 7 -OCT7 1457 UP 6 -OIL -MAY7 1556 UP 13 -JUL7 1591 UP 13 -AUG7 1608 UP 13 -SEP7 1623 UP 12 -OCT7 1635 UP 10 - - - - - - 7-APR-1987 11:13:21.62 - - - - - - - -F -f1200reute -f f BC-******HONEYWELL-BULL 04-07 0013 - -******HONEYWELL BULL INTRODUCES HIGH PERFORMANCE COMPUTERS FOR MEDIUM, LARGE FIRMS -Blah blah blah. - - - - - - 7-APR-1987 11:13:32.95 - - - - - - - -C L -f1201reute -u f BC-PORK-BELLY-FUTURES-ST 04-07 0128 - -PORK BELLY FUTURES START HIGHER, THEN EASE - CHICAGO, April 7 - Pork belly (bacon) futures ran up for -gains of 0.55 to 0.30 cent at the start and then eased to trade -0.15 cent lower to 0.15 higher in early dealings. - Active local carryover demand and mixed commission house -buying lifted futures at the start. Higher cash hog markets on -light runs and spillover from other meat pits prompted support, -traders said. - However, locals turned sellers along with Saul Stone and -Paine Webber and prices turned mostly lower. Trimming of gains -in other pits and expectations of possibly negative out of town -storage report this afternoon weighed on the market. Guesses on -the report ranged from in 1.0 to 2.25 mln lbs with most -indications on the high side, they noted. - Reuter - - - - 7-APR-1987 11:13:39.69 - - - - - - - -L -f1202reute -u f BC-miss-direct-hogs 04-07 0079 - -MISSOURI DIRECT HOGS UP 1.00-1.50 DLR - USDA - JEFFERSON CITY, April 7 - Barrow and gilts in the east and -west were 1.00 to 1.50 dlr higher than monday's midsession. Top -50.50 dlrs per cwt. - EAST WEST -U.S. 1-2 210-250 LB 49.50-50.50 49.50-50.50 -U.S. 1-3 210-250 LB 49.50-50.50 49.50-50.50 -U.S. 1-2 200-210 LB 48.50-49.50 48.50-49.50 - SOWS - steady/up 2.00 dlrs. Top 46.00 dlrs. -US 1-3 300-500 lb 42.00-43.00, over 500 lb 43.00-46.00 dlrs. - Reuter - - - - 7-APR-1987 11:14:21.32 - - - - - - - -RM -f1205reute -u f BC-LOMDON-LIFFE-STERLING 04-07 0064 - -LOMDON LIFFE STERLING-DP CLOSE 1612 - APR 7 - MTH LAST HIGH LOW PR.SET - Jun 9071 9079 9070 9078 - Sep 9096 9104 9096 9104 - Dec 9051 9056 9051 9051 - Mar 9089 9097 9089 9098 - Jun 9076 9076 9076 9083 - Sep 9055 9055 9055 9061 - Dec 9055 9055 9055 9061 - Mar 9027 9027 9027 9030 - - - - - - 7-APR-1987 11:14:26.83 - - - - - - - -RM -f1206reute -u f BC-LONDON-LIFFE-STERLING 04-07 0038 - -LONDON LIFFE STERLING CLOSE 1612 - APR 7 - MTH LAST HIGH LOW PR.SET - Jun 16100 16100 16100 16085 - Sep --- --- --- 15985 - Dec --- --- --- 15885 - Mar --- --- --- 15784 - - - - - - 7-APR-1987 11:14:36.23 -money-fx -usa -volcker - - - - -V RM -f1207reute -b f BC-VOLCKER-SEES-TIGHT-PO 04-07 0076 - -VOLCKER SEES TIGHT POLICY HURTING INVESTMENT - WASHINGTON, April 7 - Federal Reserve Board Chairman Paul -Volcker said a restrictive monetary policy would be damaging to -investment and that a better course would be to restrain -spending. - "A restrictive monetary policy would hit investment. You -don't want to put interest rates up unless you have to," Volcker -told the Senate Banking Committee. - "That is not a constructive way to proceed," he said. - Volcker said that given a choice between squeezing the -budget deficit or squeezing investment, he would favor -squeezing the budget deficit. - In response to a question about banks, Volcker said he -would be pleased if Congress decided to give banks a tax -writeoff as an incentive for them to take greater reserves -against loans to debtor countries. - "If you give a tax writeoff for reserving against loans, -then we will see more reserving and that would make me happy," -Volcker told Committee Chairman Sen William Proxmire (D-Wisc). - Reuter - - - - 7-APR-1987 11:14:55.96 - -usa - - - - - -F -f1209reute -d f BC-REUTERS-<RtrSY>-UNIT 04-07 0108 - -REUTERS <RtrSY> UNIT COMPLETES TRADING SYSTEM - NEW YORK, April - Rich Inc, a wholly-owned subsidiary of -Reuters Holdings PLC of London, said it completed installation -of a 20 mln dlr trading system for Merrill Lynch and Co Inc -<MER> in New York. - The company said its Composite Information System was -designed and installed for Merrill Lynch in the investment -firm's World Financial Center offices in downtown Manhattan. - The system, which offers access to financial news, in-house -computers, commercial television and other services, includes -479 equity positions, 614 in the debt area and 152 municipal -markets positions, the company said. - Reuter - - - - 7-APR-1987 11:15:52.09 - - - - - - - -RM -f1211reute -u f BC-LONDON-LIFFE-D.MARK-C 04-07 0025 - -LONDON LIFFE D.MARK CLOSE 1614 - APR 7 - MTH LAST HIGH LOW PR.SET - Jun --- --- --- 5507 - Sep --- --- --- 4885 - - - - 7-APR-1987 11:17:29.61 - - - - - - - -GQ -f1215reute -u f BC-CME-11-15--EDT 04-07 0053 - -CME 11:15 EDT - -L-CATTLE -APR7 69.60 UP 0.20 -JUN7 64.97 OFF 0.05 -AUG7 60.75 OFF 0.12 -F-CATTLE -APR7 69.00 OFF 0.10 -MAY7 68.12 OFF 0.10 -AUG7 66.50 UP 0.10 -HOGS -APR7 50.12 UP 0.30 -JUN7 48.80 UP 0.33 -JUL7 47.30 UP 0.43 -BELLIES -MAY7 66.25 OFF 0.15 -JUL7 64.77 OFF 0.08 -AUG7 61.75 UP 0.15 -FEB8 56.10 UP 0.50 - - - - - - 7-APR-1987 11:18:01.28 - - - - - - - -RM -f1216reute -u f BC-LONDON-LIFFE-S.FRANC 04-07 0025 - -LONDON LIFFE S.FRANC CLOSE 1616 - APR 7 - MTH LAST HIGH LOW PR.SET - Jun --- --- --- 6627 - Sep --- --- --- 6041 - - - - 7-APR-1987 11:18:17.62 - - - - - - - -RM -f1217reute -r f BC-stockholm-exchanges-c 04-07 0049 - -Stockholm exchanges clsg apr 6 stg 10.2807 10.2872 us 6.3540 -6.3560 dmk 348.3170 348.4840 ffr 104.6787 104.7981 sfr 419.8216 -420.2314 bfr con 16.8139 16.8281 dfl 308.7313 308.9186 dkr -92.4016 92.4643 nkr 93.1262 93.1965 lit 0.4889 0.4893 aus sch -49.5438 49.5788 can 4.8611 4.8645 yen 4.3730 4.3774 - - - - - - 7-APR-1987 11:18:33.41 - - - - - - - -F -f1219reute -u f BC-HOSPITAL-CORP-OF-AMER 04-07 0017 - -HOSPITAL CORP OF AMERICA, 100,000 AT 38-1/2, UNCH, ALL BUYSIDE -BY ABD SECURITIES ON THE BOSTON EXCHANGE - - - - - - 7-APR-1987 11:18:44.72 - - - - - - - -C G -f1220reute -u f BC-cbt-s'bean-opg-report 04-07 0102 - -CBT SOYBEAN FUTURES OPEN SLIGHTLY FIRMER - CHICAGO, April 7 - CBT soybean futures opened steady, with -new crop slightly firmer, then rallied further to hold gains of -one cent to three cents per bushel higher in light early -dealings. - A firmer Gulf soybean basis this morning, strength in corn -futures and delays in the Brazilian soybean harvest supported -soybean futures, despite a disappointing drop in the weekly -soybean export figure yesterday afternoon, traders said. - A local professional house and a local house were the -featured buyers of July, with sellers scattered and small-lot, -pit brokers said. - Reuter - - - - 7-APR-1987 11:18:57.30 - - - - - - - -RM C G L M T -f1221reute -u f BC-DOLLAR-REMAINS-IN-NAR 04-07 0096 - -DOLLAR REMAINS IN NARROW RANGE IN QUIET ZURICH - ZURICH, April 7 - The dollar remained confined in the same -narrow range in quiet trading, benefitting only slightly from -comments by Fed Chairman Paul Volcker that further sizeable -dollar losses would be counter-productive, dealers said. - It finished at 1.5140/50 Swiss francs after opening at -1.5128/38 and closing yesterday at 1.5185/95. - "Volcker's remarks produced some buying interest but most -people were still waiting to see what comes out of the finance -ministers' meetings in Washington," one dealer said. - Other currencies lost ground against the Swiss franc. - Sterling eased after advancing sharply yesterday on -expectations of an early U.K. General election. The pound ended -at 2.4469/4501 francs compared with 2.4547/4578 yesterday. - The mark slipped to 82.83/93 centimes from 83.11/21 and the -French franc dipped to 24.90/94 from 24.98/25.02. - REUTER - - - - 7-APR-1987 11:19:14.60 - - - - - - - -M -f1223reute -b f BC-LME-COPPER-AFT-2ND-RI 04-07 0026 - -LME COPPER AFT 2ND RING 1617 - APR 7 - LAST BUYER SELLER - Std Cash -- -- -- - 3 Months -- -- -- - - - - - - 7-APR-1987 11:19:21.24 - - - - - - - -TQ -f1224reute -u f BC-ny-comms-est-vols 04-07 0053 - -N.Y. COMMODITY FUTURES ESTIMATED VOLUMES - APRIL 7 - Time 11.00 - Coffee 825 - Cocoa 756 - Sugar 11 7040 - Sugar 14 16 - Orange ---- - Cotton ---- - Sugar 11 options calls 364 - Sugar 11 options puts 115 - Reuter - - - - - - 7-APR-1987 11:19:24.46 - - - - - - - -M -f1225reute -b f BC-LME-COPPER-AFT-2ND-RI 04-07 0026 - -LME COPPER AFT 2ND RING 1617 - APR 7 - LAST BUYER SELLER - Hg Cash 909.5 909.5 910.0 - 3 Months 879.0 879.0 879.5 - - - - - - 7-APR-1987 11:19:32.58 - - - - - - - -L -f1226reute -u f BC-ST-LOUIS-CATTLE-STEAD 04-07 0054 - -ST LOUIS CATTLE STEADY/UP 0.50 DLR - USDA - st louis, april 7 - slaughter steers were firm to 0.50 dlr -higher in active trade and heifers fully steady amid limited -supply, the usda said. - steers - choice 2-4 975-1250 lbs 64.00-65.50, package 2-3 -1230 lbs 66.00. - heifers - few lots choice 2-4 900-1075 lbs 61.50-63.00. - Reuter - - - - 7-APR-1987 11:19:42.99 - -uk - - -liffe - - -RM -f1227reute -u f BC-LIFFE,-AFTER-RECORD-V 04-07 0111 - -LIFFE, AFTER RECORD VOLUMES, SEES MORE GROWTH - LONDON, April 7 - The records in turnover set by the London -International Financial Futures Exchange (LIFFE) in March could -be surpassed in the coming months, Liffe Chief Executive -Michael Jenkins said. - Last month, Liffe saw record monthly futures volume at 1.15 -mln lots, and record monthly options volume at 97,700. Total -Liffe volume in first quarter 1987 rose to 2.8 mln contracts, -or 89 pct up on the same 1986 period. - Long gilt turnover in first quarter 1987 was 300 pct up on -the year-ago period at 1.63 mln lots versus 409,500. But T-bond -volume fell by 38 pct to 244,500 in first three months 1987. - Jenkins told Reuters the higher volumes for gilts reflected -in part the volatility in the U.K. Markets in recent months, -while the falloff in T-bonds was an indication of the relative -stability of U.S. Credit markets. - Jenkins said he saw room for the whole financial futures -sector to grow further in the coming months. In particular, FT- -SE 100 futures had great scope for expansion, and turnover in -them should be much higher by end 1987. - FT-SE futures volume was 62,700 in first quarter 1987, an -increase of 124 pct over the 28,000 contracts recorded in the -same months of 1986. - Institutions here had been slow to find out about the use -of stock exchange futures, but they would now learn more, -Jenkins predicted. - Commenting on the difference in popularity between gilts -and bonds, Jenkins said Liffe had designed the widest possible -variety of contracts so that at any given time, at least one -sector would be volatile enough to attract trading. The current -situation of U.S. Markets being steady, and U.K. Ones -changeable, might alter completely in coming months. - A further boost to Liffe's volume and attractiveness should -come with the introduction of yen bond futures, he added. - REUTER - - - - 7-APR-1987 11:20:07.42 -earn -usa - - - - - -F -f1230reute -r f BC-NEW-BEDFORD-INSTITUTI 04-07 0025 - -NEW BEDFORD INSTITUTION FOR SAVINGS <NBBS> YEAR - NEW BEDFORD, Mass., April 7 - - Net 12.3 mln vs 6,438,000 - NOTE: Company went public in March. - Reuter - - - - 7-APR-1987 11:20:16.05 - -usa - - - - - -F -f1231reute -b f BC-HONEYWELL-BULL-UNVEIL 04-07 0077 - -HONEYWELL BULL UNVEILS FIVE NEW COMPUTERS - MINNEAPOLIS, April 7 - Honeywell Bull, a 1.9 billion dlr -computer systems company formed March 27 by Honeywell Inc -<HON>, Compagnie des Machines Bull of France and NEC Corp of -Japan, said it introduced a line of high-performance computers -for medium and large companies. - The company also unveiled software for the new systems to -facilitate patient care in hospitals and control inventory and -production in factories. - Honeywell Bull said its new line includes five models in -the DPS 7000 family of 32-bit virtual memory systems that -support as many as 600 terminals and perform between 9,000 and -52,000 transactions an hour. - Prices for the systems will range from 127,000 dlrs to more -than 1.0 mln dlrs. - It said two integrated, modular software packages -introduced are specifically for operation on DPS 7000 -computers. - Reuter - - - - 7-APR-1987 11:20:25.56 - -usa - - - - - -F -f1232reute -r f BC-OXFORD-ENERGY-CO-<OEN 04-07 0095 - -OXFORD ENERGY CO <OEN> TO BUILD ENRGY PLANT - NEW YORK , APri 7 - The Oxford Energy Co said it received -final approval from the Connecticut Department of Public Utiliy -Control of a power contract for the company's tire burning -energy plant to be located in Sterling, Conn. - The Oxford facility has an estimated total cost of -approximately 70 mln dlrs, and is expected to start -construction during the second half of 1987. Construction of -the project is subject to the receipt of various state and -local permits, the company said, and the arrangement of -financing. - Under the terms of the order, issued by the Connecticut -Department of Publc Utility Control, Connecticut Light and -Power Co will be required to purchase the output of the -Sterling facility under a 25-year power purchase aagreemnt at -prices fixed by the contract formulas, the company said. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-015.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-015.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-015.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-015.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2003 +0,0 @@ - - - 8-APR-1987 10:08:12.27 -acq -usa - - - - - -F -f1041reute -d f BC-PAXAR-CORP-<PAKS>-MAK 04-08 0032 - -PAXAR CORP <PAKS> MAKES ACQUISITION - PEARL RIVER, N.Y., April 8 - Paxar Corp said it has -acquired Thermo-Print GmbH of Lohn, West Germany, a distributor -of Paxar products, for undisclosed terms. - Reuter - - - - 8-APR-1987 10:08:15.55 -earn -canada - - - - - -E F -f1042reute -d f BC-<mark's-work-wearhous 04-08 0027 - -<MARK'S WORK WEARHOUSE LTD> YEAR JAN 31 NET - Calgary, Alberta, April 8 - - Shr 10 cts vs 32 cts - Net 975,000 vs 3,145,000 - Sales 159.1 mln vs 147.3 mln - Reuter - - - - 8-APR-1987 10:08:21.25 - -usa - - - - - -F -f1043reute -d f BC-KEY-TRONIC-<KTCC>-GET 04-08 0068 - -KEY TRONIC <KTCC> GETS NEW BUSINESS - SPOKANE, Wash., April 8 - Key Tronic corp said it has -received contracts to provide seven original equipment -manufacturers with which it has not done business recently with -over 300,000 computer keyboards for delivery within the next 12 -months. - The company said "The new contracts represent an annual -increase of approximately 25 pct in unit volume over last -year." - Reuter - - - - 8-APR-1987 10:08:26.93 -acq -canada - - - - - -E F Y -f1044reute -d f BC-canadian-bashaw,-ersk 04-08 0061 - -CANADIAN BASHAW, ERSKINE RESOURCES TO MERGE - Edmonton, Alberta, April 8 - Canadian Bashaw Leduc Oil and -Gas Ltd said it agreed to merge with Erskine Resources Ltd. -Terms were not disclosed. - Ownership of the combined company with 18.8 pct for the -current shareholders of Canadian Bashaw and 81.2 pct to the -current shareholders of Erskine, the companies said. - Reuter - - - - 8-APR-1987 10:11:16.60 -earn -usa - - - - - -F -f1055reute -d f BC-ENTOURAGE-<ENTG>-HAS 04-08 0097 - -ENTOURAGE <ENTG> HAS FIRST QUARTER LOSS - HOUSTON, April 8 - Entourage International Inc said it had -a first quarter loss of 104,357 dlrs, after incurring 70,000 -dlrs in costs for an internal audit, a report for shareholders -and proxy soliciation and 24,000 dlrs in startup expenses for -opening London offices. - The company went public during 1986. - Entourage also said it has started marketing a solid -perfume packaged in a lipstick tube called "Amadeus," retailing -at 15 dlrs. - The company also said it has acquired North Country Media -Group, a video productions company. - Reuter - - - - 8-APR-1987 10:11:26.26 -earn -canada - - - - - -E F -f1056reute -d f BC-<mr.-jax-fashions-inc 04-08 0028 - -<MR. JAX FASHIONS INC> YEAR FEB 28 NET - Vancouver, British Columbia, April 8 - - Shr 58 cts vs 29 cts - Net 3,141,000 vs 1,440,000 - Sales 24.7 mln vs 13.0 mln - Reuter - - - - 8-APR-1987 10:11:53.50 - -usa - - - - - -F -f1060reute -d f BC-DIGITAL-COMMUNICATION 04-08 0058 - -DIGITAL COMMUNICATIONS<DCAI> NAMES NEW PRESIDENT - ALPHARETTA, Ga., April 8 - Digital Communications -Associates Inc said its board has named James Ottinger -president and chief operating officer. - The company said Ottinger replaces Bertil Nordin as -president. Nordin will become chairman and chief executive -officer, Digital Communications added. - Reuter - - - - 8-APR-1987 10:11:58.32 - -usa - - - - - -F -f1061reute -d f BC-DIGITAL-<DEC>-IN-TERA 04-08 0054 - -DIGITAL <DEC> IN TERADYNE <TER> LICENSING PACT - BOSTON, April 8 - Teradyne Inc said Digital Equipment Corp -signed a multi-license purchase agreement valed at over one mln -dlrs for Teradyne's Lasar Version Six Simulation System. - The company said the agreement includes the option for -futrue lasar purchases by Digital. - Reuter - - - - 8-APR-1987 10:12:18.53 - -usa - - - - - -F -f1064reute -d f BC-HOME-INTENSIVE-<KDNY> 04-08 0032 - -HOME INTENSIVE <KDNY> EXTENDS DIALYSIS AT HOME - NORTH MIAMI BEACH, Fla., April 8 - Home Intensive Care Inc -said it has opened a Dialysis at Home office in Philadelphia, -its 12th nationwide. - Reuter - - - - 8-APR-1987 10:14:36.24 - -canada - - -tose - - -E F -f1071reute -u f BC-bache-canada-buys 04-08 0113 - -BACHE CANADA BUYS TORONTO STOCK EXCHANGE SEAT - TORONTO, April 8 - Bache Securities Inc, 80 pct owned by -Prudential Bache Securities Inc, said it acquired its third -Toronto Stock Exchange seat for 301,000 Canadian dlrs. - The company said the price was the highest yet paid for an -exchange seat. A Toronto Stock Exchange spokesman said an -exchange seat last sold for 195,000 dlrs in March, which was -acquired by <Toronto Dominion Bank>. - Bache Securities said it needed a third exchange seat as -part of an extensive plan to provide an enhanced level of -service to clients. The seat will be used to further build its -professional trading area, the investment dealer said. - Reuter - - - - 8-APR-1987 10:17:29.78 -earn - - - - - - -F -f1081reute -f f BC-******F.W.-WOOLWORTH 04-08 0012 - -******F.W. WOOLWORTH CO SAYS IT HIKES DIVIDEND TO 33 CTS A SHARE FROM 28 CTS -Blah blah blah. - - - - - - 8-APR-1987 10:19:42.41 -earn -usa - - - - - -F -f1088reute -b f BC-F.W.-WOOLWORTH-CO-<Z> 04-08 0021 - -F.W. WOOLWORTH CO <Z> HIKES DIVIDEND - NEW YORK, April 8 - - Qtly div 33 cts vs 28 cts prior - Pay June 1 - Record May 1 - Reuter - - - - 8-APR-1987 10:20:02.86 -sugar -netherlands - - - - - -C T -f1089reute -u f BC-DUTCH-SUGAR-BEET-PLAN 04-08 0103 - -DUTCH SUGAR BEET PLANTING HALF FINISHED - ROTTERDAM, April 8 - Roughly half of this year's expected -130,000 hectare Dutch sugar beet crop is already in the ground, -a spokesman for Suiker Unie, the largest sugar processor in the -Netherlands, told Reuters. - Conditions are generally good and the average sowing date -for the crop is expected to be around April 11, against April -23 last year, and a 10-year average of April 14, the spokesman -added. - "It is far too early yet to say what kind of output we can -expect when it comes to harvest in September, but at least the -crop is off to a very good start," he said. - Last year, the Netherlands planted a record 137,600 -hectares of sugar beet and produced a record 1.2 mln tonnes of -white sugar, substantially more than the country's combined "A" -and "B" quota of 872,000 tonnes. - This year, however, a self-imposed quota system has been -introduced with the aim of cutting plantings to 130,000 -hectares and reducing white sugar output to around 915,000 -tonnes to minimise the amount of non-quota "C" sugar produced. - Only farmers with a record of growing suger beet have been -allotted quotas. This is expected to prevent the area being -boosted by dairy or cereal farmers moving into sugar. - Reuter - - - - 8-APR-1987 10:20:14.11 - -uk - - - - - -F -f1090reute -d f BC-U.K.-EXPECTS-SUBSTANT 04-08 0121 - -U.K. EXPECTS SUBSTANTIAL DEMAND FOR ROLLS SHARES - LONDON, April 8 - Demand for shares in state-owned engine -maker <Rolls Royce Plc> is expected to be substantial when the -government privatises it at the end of April, Christopher Clark -of the group's bankers Samuel Montagu and Sons Ltd said. - He told a press conference after the release of an initial -prospectus for the float that the issue would be offered to -U.K. Institutions, company employees and the general public. - As in previous flotations, clawback arrangements would be -made if public subscriptions exceeded initial allocations. - He declined to say how the shares would be allocated beyond -saying that a "significant proportion" would go to institutions. - A decision on what percentage would go to each sector would -be made shortly before the sale price was announced on April -28. - Minimum subscription would be for 400 shares with payment -in two tranches, again a method broadly in line with previous -privatisations. - Chairman Sir Francis Tombs denied suggestions that Rolls -was a stock that should be left to the institutions. He noted -that although the aircraft industry was cyclical, Rolls had -several operations -- such as spare parts and military -equipment -- that evened out the swings. - Rolls' 1986 research and development expenditure in 1986 -was 255 mln stg and could be expected in the future to vary -according to changes in turnover. - He noted that net research and development expenditure was -written off in the year it occurred, a policy that received -"inadequate recognition in one or two of the more extravagant -forecasts of future profits." He made no forecast himself. - In 1986, Rolls reported that pretax profit rose 48 pct to -120 mln stg on turnover 12 pct higher at 1.8 billion. - Reuter - - - - 8-APR-1987 10:25:01.82 - -netherlands - - -nyse - - -F -f1109reute -r f BC-NV-PHILIPS-SHARES-GET 04-08 0097 - -NV PHILIPS SHARES GET NYSE QUOTE FROM APRIL 14 - EINDHOVEN, NETHERLANDS, APRIL 8 - NV Philips -Gloeilampenfabrieken <PGLO.AS> shares are due to start trading -on the New York Stock Exchange on April 14, Philips chairman -Cor van der Klugt told the annual shareholders meeting. - In March, the Dutch electronics group announced it would -end its current over the counter listing on the New York NASDAQ -system and move to the NYSE. - Philips said the "big board" listing in New York is expected -to boost its profile in the U.S., Where 10 pct of all -outstanding Philips shares are held. - Reuter - - - - 8-APR-1987 10:25:54.05 -earn - - - - - - -F -f1110reute -f f BC-******J.P.-MORGAN-AND 04-08 0010 - -******J.P. MORGAN AND CO INC 1ST QTR SHR 1.22 DLRS VS 1.28 DLRS -Blah blah blah. - - - - - - 8-APR-1987 10:28:08.79 -sugar -belgiumfrancewest-germanyspaindenmark - -ec - - - -T C -f1117reute -b f BC-EC-COMMISSION-DETAILS 04-08 0069 - -EC COMMISSION DETAILS SUGAR TENDER - BRUSSELS, April 8 - The EC Commission confirmed it granted -export licences for 118,350 tonnes of current series white -sugar at a maximum export rebate of 46.496 European Currency -Units (ECUs) per 100 kilos. - Out of this, traders in France received 34,500 tonnes, in -the U.K. 37,800, in West-Germany 20,000, in Belgium 18,500, in -Spain 5,800 and in Denmark 1,750 tonnes. - REUTER - - - - 8-APR-1987 10:30:36.41 - -canada - - - - - -E Y -f1126reute -r f BC-pancontinental-oil-ha 04-08 0093 - -PANCONTINENTAL OIL HAS PRIVATE FINANCING - Calgary, Alberta, April 8 - <Pancontinental Oil Ltd> said -it arranged a 10 mln dlr private financing with Pemberton -Houston Willoughby Bell Gouinlock Inc. - The private placement consists of special warrants to -purchase seven pct convertible redeemable preferred shares. - The shares will be convertible for five years into common -shares at five dlrs per share. The preferred shares are not -redeemable for 2-1/2 years. Net proceeds will be used to -increase working capital and finance exploration and -development. - Reuter - - - - 8-APR-1987 10:30:58.28 - -uk - - - - - -RM -f1128reute -b f BC-FEDERAL-REALTY-CONVER 04-08 0102 - -FEDERAL REALTY CONVERTIBLE INCREASED, PRICED - LONDON, April 8 - Today's dollar convertible eurobond for -Federal Realty Investment Trust has been increased to 100 mln -dlrs from the initial 75 mln, lead manager Salomon Brothers -International said. - The coupon has been fixed at 5-1/4 pct compared with the -indicated range of 5-1/4 to 5-1/2 pct. The conversion price has -been fixed at 30-5/8 dlrs compared with last night's close in -the U.S. Of 25-1/2 dlrs. This represents a premium of 20 pct. - The put option after seven years was priced at 120 pct to -give the investor a yield to the put of 7.53 pct. - REUTER - - - - 8-APR-1987 10:34:45.43 -earn -west-germany - - - - - -F -f1147reute -r f BC-VOLKSWAGEN-DIVIDEND-D 04-08 0114 - -VOLKSWAGEN DIVIDEND DECISION DUE TOMORROW - WOLFSBURG, West Germany, April 8 - Volkswagen AG <VOWG.F>, -VW, is due to make a formal announcement about its 1986 -dividend tomorrow after saying the 1985 level of 10 marks per -ordinary share would be held, despite massive losses because of -a suspected foreign currency fraud. - A spokesman said VW's supervisory board will meet tomorrow -to discuss the payout. A statement will be made afterwards. - VW has also said disclosed profits for 1986 will reach -their 1985 level, despite provisions of a possible 480 mln -marks linked to the currency affair. The figure is virtually -the same as the 477 mln mark 1985 parent company net profit. - When VW first confirmed the currency scandal on March 10 it -said the management board would propose an unchanged 10-mark -dividend to the supervisory board. A dividend of 11 marks would -be proposed for the company's new preference shares. - Share analysts said they saw supervisory board approval of -the management board proposal as virtually a formality. -"Anything else would be more than a surprise," one said. - Company sources said VW would have to dig into reserves to -maintain the disclosed profit. Parent company reserves stood at -around three billion marks at end-1985. - Reuter - - - - 8-APR-1987 10:35:24.55 - -uk - - - - - -RM -f1152reute -b f BC-TORONTO-DOMINION-UNIT 04-08 0082 - -TORONTO DOMINION UNIT ISSUES AUSTRALIAN DLR BOND - LONDON, April 8 - Toronto Dominion Bank, Nassau Branch is -issuing a 40 mln Australian dlr eurobond due May 15, 1990 -paying 14-1/2 pct and priced at 101-3/8 pct, lead manager -Hambros Bank Ltd said. - The non-callable bond is available in denominations of -1,000 Australian dlrs and will be listed in London. The selling -concession is one pct, while management and underwriting -combined will pay 1/2 pct. - The payment date is May 15. - REUTER - - - - 8-APR-1987 10:36:31.07 - -uk - - - - - -E -f1160reute -b f BC-TORONTO-DOMINION-UNIT 04-08 0081 - -TORONTO DOMINION UNIT ISSUES AUSTRALIAN DLR BOND - LONDON, April 8 - Toronto Dominion Bank, Nassau Branch is -issuing a 40 mln Australian dlr eurobond due May 15, 1990 -paying 14-1/2 pct and priced at 101-3/8 pct, lead manager -Hambros Bank Ltd said. - The non-callable bond is available in denominations of -1,000 Australian dlrs and will be listed in London. The selling -concession is one pct, while management and underwriting -combined will pay 1/2 pct. - The payment date is May 15. - Reuter - - - - 8-APR-1987 10:37:10.01 -earn -usa - - - - - -F -f1167reute -r f BC-CITYTRUST-BANCORP-INC 04-08 0028 - -CITYTRUST BANCORP INC <CITR> 1ST QTR NET - BRIDGEPORT, Conn., April 8 - - Shr 1.40 dlrs vs 1.16 dlrs - Net 5,776,000 vs 4,429,000 - Avg shrs 4,132,828 vs 3,834,117 - Reuter - - - - 8-APR-1987 10:37:30.96 -acq -usa - - - - - -F -f1170reute -r f BC-SOUTHMARK-<SM>-ACQUIR 04-08 0071 - -SOUTHMARK <SM> ACQUIRES 28 NURSING HOMES - DALLAS, April 8 - Southmark Corp said it acquired 28 -long-term care facilities containing for approximately 70 mln -dlrs in cash. - It said the facilities, which contain approximately 2,500 -beds in seven western states, were bought from Don Bybee and -Associates, of Salem,Ore. - The acquistion brings to 57 health care facilities acquired -in the last three months, the company said. - Reuter - - - - 8-APR-1987 10:38:13.19 - -usa - - - - - -A RM -f1175reute -r f BC-HELEN-OF-TROY-<HELE> 04-08 0084 - -HELEN OF TROY <HELE> FILES CONVERTIBLE OFFERING - NEW YORK, April 8 - Helen of Troy Corp said it filed with -the Securities and Exchange Commission a registration statement -covering a 20 mln dlr issue of covertible subordinated -debentures due 2007. - Proceeds will be used for general corporate purposes, -including possible repayment of bank debt, product development -and possible acquisitions, Helen of Troy said. - The company named Drexel Burnham Lambert Inc as sole -underwriter of the offering. - Reuter - - - - 8-APR-1987 10:38:19.91 -earn -usa - - - - - -F -f1176reute -b f BC-/J.P.-MORGAN-AND-CO-I 04-08 0088 - -J.P. MORGAN AND CO INC <JPM> 1ST QTR NET - NEW YORK, April 8 - - shr 1.22 dlrs vs 1.28 dlrs - net 226.4 mln vs 233.9 mln - assets 80.45 billion vs 70.23 billion - loans 35.16 billion vs 35.99 billion - deposits 45.22 billion vs 39.68 billion - return on assets 1.14 pct vs 1.35 pct - return on common equity 18.20 pct vs 22.08 pct - NOTE: 1987 qtr net was reduced by 20 mln dlrs because 1.3 -billion dlrs of loans to Brazil were placed on non-accrual. - loan loss provision 35 mln dlrs vs 70 mln year earlier. - Reuter - - - - 8-APR-1987 10:38:37.99 -earn -usa - - - - - -F -f1179reute -r f BC-FIRSTBANC-CORP-OF-OHI 04-08 0021 - -FIRSTBANC CORP OF OHIO <FBOH> 1ST QTR NET - AKRON, Ohio, April 8 - - Shr 74 cts vs 67 cts - Net 8,067,000 vs 7,317,000 - - Reuter - - - - 8-APR-1987 10:39:08.80 -earn -usa - - - - - -F -f1183reute -r f BC-MAYFAIR-SUPER-MARKETS 04-08 0063 - -MAYFAIR SUPER MARKETS INC <MYFRA> 2ND QTR NET - ELIZABETH, N.J., April 8 -Qtr ends Feb 28 - Shr Class A 61 cts vs 48 cts - Shr Class B 59 cts vs 46 cts - Net 2,358,000 vs 1,876,000 - Revs 122,508,000 vs 105,871,000 - Six mths - Shr Class A 1.15 dlrs vs 86 cts - Shr Class B 1.13 dlrs vs 84 cts - Net 4,485,000 vs 3,378,000 - Revs 242,453,000 vs 210,117,000 - NOTE: qtr and six mths prior figures reflect two-for-one -stock split in August 1986. - Reuter - - - - 8-APR-1987 10:39:16.52 -earn -usa - - - - - -F -f1184reute -r f BC-HANOVER-INSURANCE-<HI 04-08 0074 - -HANOVER INSURANCE <HINS> GET SPLIT APPROVAL - WORCESTER, Mass., April 8 - Hanover Insurance Co said its -stockholders approved a two-for-one stock split. - As a result of the split, Hanover said it increases the -number of authorized shares of capital stock from 10.4 mln, -having a par value of one dlr, to 20.9 mln, also having a par -value of one dlr. - The stock split is payable April 30 to stockholders of -record April 10, Hanover said. - Reuter - - - - 8-APR-1987 10:39:22.31 - -usajapan - - - - - -F -f1185reute -d f BC-FEDERAL-PAPERBOARD-<F 04-08 0057 - -FEDERAL PAPERBOARD <FBO> ENTERS AGREEMENT - MONTVALE, N.J., April 8 - Federal Paperboard Co Inc said it -has entered into an agreement with Ozaki Trading Co Ltd of -Osaka, Japan, allowing Ozaki to represent Federal Paperboard's -bleached paperboard sales in Japan. - Federal added it will be opening an office in Japan in the -near future. - - Reuter - - - - 8-APR-1987 10:39:29.93 -acq -usa - - - - - -F -f1186reute -d f BC-NATIONAL-GUARDIAN-<NA 04-08 0099 - -NATIONAL GUARDIAN <NATG> MAKES ACQUISITIONS - GREENWICH, Conn., April 8 - National Guardian Corp said it -has acquired a number of security services companies recently, -with aggregate revenues of about 3,500,000 dlrs, for an -aggregate cost of about 2,700,000 dlrs. - It said it acquired guard service companies C.S.C. Security -Gaurd Service of Paramus, N.J., from Cartel Security -Consultants Inc, the Guard Services Division of Security -Services of America of Wayne, N.J., Capital Investigations and -Protective Agency of Hackensack, N.J., and Meyer Detective -Agency Inc of National Park, N.J. - The company said it bought alarm service operations -Certified Security Services Inc of Key West, Fla., Custom -Security Services of Myrtle Beach, S.C., A-T-E Security Group -Inc of Houston and the Louisville, Kent and Nashville, Tenn, -offices of Wells Fargo Alarm Services. - Reuter - - - - 8-APR-1987 10:40:25.85 -earn -usa - - - - - -F -f1194reute -s f BC-resending 04-08 0041 - -UNIVERSAL MEDICAL <UMBIZ> DISTRIBUTION SET - MILWAUKEE, WIS., April 8 - - Qtly distribution 7-1/2 cts vs 7-1/2 cts prior (excluding -2-1/2 cts special) - Pay April 30 - Record April 22 - NOTE: Full name is Universal Medical Buildings L.P. - Reuter - - - - 8-APR-1987 10:43:34.24 -graincorn -zambia - -imf - - - -G C -f1209reute -u f BC-ZAMBIA-DOES-NOT-PLAN 04-08 0097 - -ZAMBIA DOES NOT PLAN RETAIL MAIZE PRICE HIKE - LUSAKA, April 8 - The Zambian government has no immediate -plans to follow last week's increase in the producer price of -maize with a hike in the retail price of maize meal, an -official of the ruling party said. - Last December, a 120 pct increase in the consumer price for -refined maize meal, a Zambian staple, led to food riots in -which at least 15 people died. - That price increase, which President Kenneth Kaunda later -revoked, followed pressure by the International Monetary Fund -(IMF) to reduce the government's subsidy bill. - However, if the producer price rise, from 6.10 dlrs to 8.67 -dlrs per 90-kg bag, is not accompanied by a retail price -increase, the government will have to spend more on subsidies, -a practice discouraged by the IMF. - "There is no way out but to raise the subsidy levels of -meal. It (the government) would have to choose between the -demands of the IMF and those of the people," a Ministry of -Agriculture economist said. - Reuter - - - - 8-APR-1987 10:45:27.04 - -usa - - - - - -F -f1218reute -r f BC-BLOCKER-ENERGY-<BLK> 04-08 0065 - -BLOCKER ENERGY <BLK> SHARE OFFERING UNDERWAY - HOUSTON, April 8 - Blocker Energy corp said an offering of -20 mln common shares is underway at 2.625 dlrs per share -through underwriters led by <Drexel Burnham Lambert Inc> and -Alex. Brown and Sons Inc <ABSB>. - The company is offering 19.7 mln shares and shareholders -the rest. Before the offering it had about 33.6 mln shares -outstanding. - Reuter - - - - 8-APR-1987 10:45:36.01 - -usa - - - - - -F -f1219reute -r f BC-ASARCO-<AR>-COMPLETES 04-08 0082 - -ASARCO <AR> COMPLETES SHARE OFFERING - NEW YORK, April 8 - Asarco Inc said it completed the sale -of four mln shares of Asarco common stock to an underwriting -group led by First Boston Corp. - The underwriters sold the shares to the public at a price -of 22.50 dlrs a share, the minerals and energy company said. - Proceeds of about 86 mln dlrs will be used to reduce -outstanding debt, it said. - The offering included 3.5 mln shares announced April 1 and -500,000 to cover overallotments. - Reuter - - - - 8-APR-1987 10:45:44.23 - -usa - - - - - -F -f1220reute -r f BC-AMERICAN-MIDLAND-<AMC 04-08 0088 - -AMERICAN MIDLAND <AMCO> SETS OPERATOR FOR CASINO - ENGLEWOOD CLIFFS, N.J., April 8 - American Midland Corp -said <Braodway Casinos Inc> has entered into a letter of intent -for a new company to be formed by <Carnival Cruise Lines Inc> -and <Continental Hotel Cos> to operate Broadway's planned -hotel/casino in the Marina area of Atlantic City, N.J. - American Midland has agreed to spin off its 8.2 acre -Atlantic City property to Broadway, a new company in which -American Midland shareholders would initially own an 85 pct -interest. - Reuter - - - - 8-APR-1987 10:45:50.03 -acq -usa - - - - - -F -f1221reute -r f BC-WEDGESTONE-REALTY-<WD 04-08 0046 - -WEDGESTONE REALTY <WDG> ACQUISITION APPROVED - NEWTON, Mass., April 8 - Wedgestone Realty Investors Trust -said shareholkders have approved the acquisition of its -advisor, Wedgestone Advisory Corp, for 600,000 shares. - It said completion is expected to take place April 10. - Reuter - - - - 8-APR-1987 10:51:43.03 -heat -usa - - - - - -Y -f1239reute -u f BC-SUN-<SUN>-CUTS-HEATIN 04-08 0062 - -SUN <SUN> CUTS HEATING OIL BARGE PRICE - NEW YORK, April 8 - Sun Co's Sun Refining and Marketing Co -subsidiary said it is decreasing the price it charges contract -barge customers for heating oil in ny harbor by 0.50 cent a -gallon, effective today. - The 0.50 cent a gallon price reduction brings Sun's heating -oil contract barge price to 50 cts a gallon, the company said. - Reuter - - - - 8-APR-1987 10:52:38.11 - - - - - - - -A RM -f1241reute -f f BC-******MOODY'S-AFFIRMS 04-08 0012 - -******MOODY'S AFFIRMS AVCO FINANCIAL'S LONG-TERM DEBT, CUTS COMMERCIAL PAPER -Blah blah blah. - - - - - - 8-APR-1987 10:56:40.19 - -usa - - - - - -F -f1250reute -u f BC-MEDICAL-JOURNAL-REPOR 04-08 0106 - -MEDICAL JOURNAL REPORTS NEW INTERLEUKIN PROMISE - WASHINGTON, April 8 - Promising new findings in the use of -a controversial experimental drug called Interleukin-2 as a -cure for cancer will be published in the April 9 issue of the -prestigious New England Journal of Medicine, according to a -Wall Street analyst who has obtained an advance copy of the -magazine. - Among interleukin's principal U. S. makers are Cetus Corp -<CTUS>, headquartered in Emeryville, Calif., and Immunex Corp -<IMNX>, based in Seattle, Wash. - The journal, to be released late today, contains two -articles reporting high remission rates several cancer types. - The journal also contains a signed editorial concluding -that the new results mark a significant milestone in the search -for a successful immunotherapy for cancer. - Interleukin-2, also known as IL-2, is a substance naturally -produced by living cells in the laboratory. - The drug is controversial because it was widely praised as -a promising cancer treatment in early reports on its -effectiveness in late 1985, only to come under criticism a year -later for its failure to live up to its promise and due to its -ravaging side effects. - One of the new studies, conducted by Dr. William West of -Biotherapeutics Inc of Franklin, Tenn., is particularly -significant because it found far fewer harsh side effects after -it changed the way in which the drug is administered. - In that study, researchers administered IL-2 to 48 cancer -patients and found a 50-pct remission rate for kidney cancers -and a 50 pct remission rate for melanoma, a type of skin -cancer, according to Prudential-Bache Securities' Stuart -Weisbrod, who obtained the advance copy of the magazine. - For rectal and colon cancer, the researchers found no -remissions, but none of the 48 patients treated had side -effects serious enough to be placed under intensive hospital -care, according to the article. - In the second study, whose principal author is Dr. Steven -Rosenberg of the National Cancer Institute, researchers -administered IL-2 to 157 cancer patients and found a 33 pct -remission rate in cancers of the kidney, a 27 pct rate in -melanomas and a 15 pct rate in cancers of the colon and rectum. - In the National Cancer Institute trials, a total of four -patients died, the magazine reported, confirming the harshness -of the drug's side effects as originally administered. - "Perhaps we are at the end of the beginning of the search -for successful immunotherapy for cancer," said the editorial, -signed by John Durant of Philadelphia's Chase Cancer Center. - "These observations reported by Rosenberg and West surely -did not describe successful practical approaches ready for -widespread applications in the therapy of cancer patients," the -editorial said. - "On the other hand, if they reflect, as seems possible, a -successful manipulation of the cellular immune system, then we -may be near the end of our search for a meaningful direction in -the immunuotherapy of cancer," the editorial concluded. - Reuter - - - - 8-APR-1987 10:58:23.92 - -usa - - - - - -F -f1260reute -u f BC-report-recommends-dis 04-08 0096 - -REPORT SEEKS TO DISALLOW SOUTHERN <SO> COSTS - ATALANTA, April 8 - An audit submitted to the Georgia -Public Service Commission claims that between 944 mln dlrs and -1.8 billion dlrs of the costs of the Plant Vogtle nuclear power -station should be disallowed, a Southern Co spokeswoman said. - Southern's Georgia Power Co subsidiary has a 45.7 pct -interest in the plant and estimated earlier this year it would -cost a total of 8.87 billion dlrs. Last year, the plant's -owners pledged to Georgia regulators they would limit the cost -passed on to rate payers to 8.4 billion dlrs. - The Southern spokeswoman said the company feels the report -by O'Brien-Kreitzberg is "flawed and biased." She said the -report was released yesterday by the state attorney general. - Responding to the report today, Georgia Power Chairman -Robert W. Scherer told a news conference the conclusions drawn -by the firm "are not only wrong -- they also reflect the same -bias against nuclear power that these auditors have -demonstrated in similar cases accross the country." - Saying he was not suggesting Georgia power was without -fault, Scherer said "the audit identified several things I wish -we had done differently." - Scherer pointed out a report O'Brien-Kreitzberg submitted -to Georgia regulators in March 1986 projected Georgia Power -would not finish Plant Vogtle unit one before the end of 1987. - Noting "unit one is finished, and we expect it to be in -commercial operationg by June," he said the firm's latest -report ignored the earlier projection, gave the utility no -credit for the completion and "actually penalized us by -suggesting that costs to maintain t he schedule be disallowed." - Scherer said the latest audit alleges Georgia Power could -have saved 95 mln dlrs if it had stopped using four shifts, -seven days a week to speed construction three years sooner. - He said this would have delayed completion of the plant for -another year "and it would have cost several hunderd million -dlrs more." - Noting the audit said costs were increased 600 mln dlrs by -schedule delays totaling 20.5 months, he said "First, we have -the best concrete placement record in the industry, Second new -government regulations after the Three Mile Island incident -significantly increased construction time. - - Reuter - - - - 8-APR-1987 10:58:52.50 - -uk - - - - - -A -f1263reute -r f BC-FINAL-TERMS-SET-ON-AT 04-08 0067 - -FINAL TERMS SET ON ATARI CORP CONVERTIBLE EUROBOND - LONDON, April 8 - The coupon on the 75 mln dlr, 15-year, -convertible eurobond for Atari Corp has been set at 5-1/4 pct -compared with indicated range of five to 5-1/4 pct, lead -manager Paine Webber International said. - The conversion price was set at 32-5/8 dlrs, representing a -premium of 20.38 pct over yesterday's Atari share close of 27 -dlrs. - REUTER - - - - 8-APR-1987 11:00:51.15 -graincornsorghumsunseedwheatoilseedsoybean -argentina - - - - - -C G -f1271reute -r f BC-FURTHER-ARGENTINE-COA 04-08 0112 - -FURTHER ARGENTINE COARSE GRAIN LOSSES FEARED - By Manuel Villanueva - BUENOS AIRES, April 8 - Argentine grain producers adjusted -their yield estimates for the 1986/87 coarse grain crop -downward in the week to yesterday after the heavy rains at the -end of March and beginning of April, trade sources said. - They said sunflower, maize and sorghum production estimates -had been reduced despite some later warm, dry weather, which -has allowed a return to harvesting in some areas. - However, as showers fell intermittently after last weekend, -producers feared another spell of prolonged and intense rain -could cause more damage to crops already badly hit this season. - Rains in the middle of last week reached an average of 27 -millimetres in parts of Buenos Aires province, 83 mm in -Cordoba, 41 in Santa Fe, 50 in Entre Rios and Misiones, 95 in -Corrientes, eight in Chaco and 35 in Formosa. - There was no rainfall in the same period in La Pampa. - Producers feared continued damp conditions could produce -rotting and lead to still lower yield estimates for all the -crops, including soybean. - However, as the lands began drying later in the week -harvesting advanced considerably, reaching between 36 and 40 -pct of the area sown in the case of sunflower. - Deterioration of the sunflower crop evident in harvested -material in Cordoba, La Pampa and Buenos Aires forced yield -estimates per hectare to be adjusted down again. - The season's sunflowerseed production is now forecast at -2.1 mln to 2.3 mln tonnes, against 2.2 mln to 2.4 mln forecast -last week and down 43.9 to 48.8 pct on the 1985/86 record of -4.1 mln. - Area sown to sunflowers was two to 2.2 mln hectares, 29.9 -to 36.3 pct below the record 3.14 mln hectares last season. - Maize harvesting has also reached 36 to 40 pct of the area -sown. It is near completion in Cordoba and Santa Fe and will -begin in La Pampa and southern Buenos Aires later in April. - Production estimates for maize were down from last week at -9.5 mln to 9.8 mln tonnes, against 9.6 mln to 9.9 mln estimated -previously. - This is 22.2 to 23.4 pct below the 12.4 mln to 12.6 mln -tonnes estimated by private sources for the 1985/86 crop and -21.9 to 25.8 pct down on the official figure of 12.8 mln -tonnes. - Maize was sown on 3.58 mln to 3.78 mln hectares, two to -seven pct down on last season's 3.85 mln. - Sorghum was harvested on 23 to 25 pct of the area sown in -Cordoba, Santa Fe and Chaco. Harvest will start in La Pampa and -Buenos Aires in mid-April. - The total area sown was 1.23 mln to 1.30 mln hectares, 10.3 -to 15.2 pct down on the 1.45 mln sown last season. - The new forecast for the sorghum crop is 2.9 mln to 3.2 mln -tonnes compared with three mln to 3.3 mln forecast last week, -and is 23.8 to 29.3 pct down on last season's 4.1 mln to 4.2 -mln tonne crop. - The soybean crop for this season was not adjusted, -remaining at a record 7.5 mln to 7.7 mln tonnes, up 4.2 to 5.5 -pct on the 7.2 mln to 7.3 mln estimated by private sources for -1985/86 and 5.6 to 8.5 pct higher than the official figure of -7.1 mln. - The area sown to soybeans this season was a record 3.7 mln -to 3.8 mln hectares, 10.8 to 13.8 pct up on the record 3.34 mln -sown in 1985/86. - The soybean crop is showing excessive moisture in some -areas and producers fear they may discover more damage. Some -experimental harvesting was carried out in Santa Fe on areas -making up only about one pct of the total crop but details on -this were not available. - Preparation of the fields for the 1987/88 wheat crop, which -will be sown between May and August or September, has so far -not been as intense as in previous years. - Reuter - - - - 8-APR-1987 11:04:45.96 - - - - - - - -V RM -f1297reute -f f BC-******TOP-OFFICIALS-A 04-08 0012 - -******TOP OFFICIALS ARRIVE AT U.S. TREASURY TO BEGIN GROUP OF FIVE MEETING -Blah blah blah. - - - - - - 8-APR-1987 11:05:28.33 -jobs -netherlands - - - - - -RM -f1304reute -r f BC-DUTCH-ADJUSTED-UNEMPL 04-08 0082 - -DUTCH ADJUSTED UNEMPLOYMENT RISES IN MARCH - THE HAGUE, April 8 - Dutch seasonally adjusted unemployment -rose in the month to end-March to a total 693,000 from 690,600 -at end-February, but was well down from 730,100 at end-March -1986, Social Affairs Ministry figures show. - The figure for male jobless rose by 2,000 in the month to -436,500 compared with 470,700 a year earlier. The figure for -women was 256,500 at end-March against 256,100 a month earlier -and 259,400 at end-March 1986. - On an unadjusted basis total unemployment fell by 16,500 in -the month to end-March to 692,200. In March 1986 the figure was -725,000. - A ministry spokesman said the unadjusted figures showed a -smaller than usual seasonal decrease for the time of year, -because of particularly cold weather delaying work in the -building industry. He said this explained the increase in the -adjusted statistics. - Total vacancies available rose by 1,900 to 26,300 at -end-March. A year earlier the figure was 28,763. - REUTER - - - - 8-APR-1987 11:06:39.06 -earn -usa - - - - - -F -f1309reute -u f BC-HARTMARX-CORP-<HMX>-B 04-08 0021 - -HARTMARX CORP <HMX> BOOSTS DIVIDEND - CHICAGO, April 8 - Qtly div 25 cts vs 23 cts prior qtr - Pay 15 May - Record 1 May - - - - - - 8-APR-1987 11:11:12.33 - -usa - - - - - -A RM F -f1329reute -b f BC-MOODY'S-AFFIRMS-AVCO 04-08 0107 - -MOODY'S AFFIRMS AVCO UNIT'S LONG-TERM DEBT - NEW YORK, April 8 - Moody's Investors Service Inc said it -affirmed the long-term debt ratings but cut the commercial -paper to Prime-2 from Prime-1 of Avco Financial Services Inc, a -unit of Avco Corp. - Avco Financial has 2.5 billion dlrs of debt outstanding. - For the paper cut, Moody's cited a higher risk profile -inherent in the company's core business. Moody's said the -affirmation reflected its assessment of a less diversified risk -profile in the company's receivables. - Affirmed were Avco Financial's A-3 senior debt, Baa-2 -senior subordinated debt and Baa-3 junior subordinated debt. - Reuter - - - - 8-APR-1987 11:12:13.98 -money-fx -usa -stoltenbergpoehlballadurde-larosieremiyazawasumitaleigh-pembertongoriajames-baker - - - - -V RM -f1335reute -b f BC-TOP-OFFICIALS-ARRIVE 04-08 0108 - -TOP OFFICIALS ARRIVE AT TREASURY FOR G-5 TALKS - WASHINGTON, April 8 - Top officials of leading industrial -nations arrived at the U.S. Treasury main building to begin a -meeting of the Group of Five. - Officials seen arriving by Reuter correspondents included -West German Finance Minister Gerhard Stoltenberg and Bundesbank -President Karl Otto Poehl, French Finance Minister Edouard -Balladur and his central banker Jacques de Larosiere. - Also seen arriving were Japanese Finance Minister Kiichi -Miyazawa and Japan's central bank governor Satoshi Sumita and -British Chancellor of the Exchequer and central bank governor -Robin Leigh Pemberton. - There was no immediate sign of Italian or Canadian -officials. Monetary sources have said a fully blown meeting of -the Group of Seven is expected to begin around 3 p.m. local -time (1900 gmt) and last at least until 6 p.m. (2200 gmt), when -a communique is expected to be issued. - Italian sources said Italian acting Finance Minister -Giovanni Goria met Treasury Secretary James Baker last night. - At those talks Baker apparently convinced Goria, who -declined to attend the February meeting of the Group of Seven -in Paris, that Italy would participate fully in any meaningful -decisions. - Reuter - - - - 8-APR-1987 11:12:43.58 -interest -usa - - - - - -V RM -f1338reute -b f BC-/-FED-EXPECTED-TO-SET 04-08 0110 - -FED EXPECTED TO SET CUSTOMER REPURCHASES - NEW YORK, April 8 - The Federal Reserve is expected to -intervene in the government securities market to supply -temporary reserves indirectly via customer repurchase -agreements, economists said. - Economists expect the Fed to execute 2.0-2.5 billion dlrs -of customer repos to offset pressures from the end of the -two-week bank reserve maintenance period today. Some also look -for a permanent reserve injection to offset seasonal pressures -via an outright purchase of bills or coupons this afternoon. - The Federal funds rate opened at 6-3/8 pct and remained at -that level, up from yesterday's 6.17 pct average. - Reuter - - - - 8-APR-1987 11:15:23.93 - -usa - - - - - -F -f1352reute -r f BC-BEST-BUY-<BBUY>-MARCH 04-08 0063 - -BEST BUY <BBUY> MARCH SALES RISE - MINNEAPOLIS, April 8 - Best Buy Co Inc said its sales for -March rose to 26.1 mln dlrs from 11.9 mln dlrs in the -comparable 1986 period. - It said sales for the fiscal year ended March 31 rose to -329.5 mln dlrs from 113.1 mln dlrs a year earlier. - The company said sales performance was based on the -addition of 12 new retail facilities. - Reuter - - - - 8-APR-1987 11:15:28.57 - -usa - - - - - -F -f1353reute -r f BC-AUTOSPA-<LUBE>-TO-RED 04-08 0041 - -AUTOSPA <LUBE> TO REDEEM WARRANTS - NEW YORK, April 8 - AutoSpa corp said it will redeem all -its common stock purchase warrants on May Five at 7.5 cts each. - Through May Four, each warrant may be exercised into one -common share at 1.75 dlrs. - Reuter - - - - 8-APR-1987 11:15:35.75 -acq -usa - - - - - -F -f1354reute -r f BC-READER'S-DIGEST-ASSOC 04-08 0071 - -READER'S DIGEST ASSOCIATION SELLS UNIT - PLEASANTVILLE, N.Y., April 8 - <The Reader's Digest -Association Inc> said it sold its subsidiary, Source -Telecomputing Corp, to the venture capital firm of <Welsh, -Carson, Anderson and Stowe>. - The purchase price was not disclosed, Reader's Digest said. - It said it purchased an 80 pct stake in Source in 1980 and -earned an unspecified profit on 14 mln dlrs in revenues in -1986. - Reuter - - - - 8-APR-1987 11:15:38.86 -earn -usa - - - - - -F -f1355reute -r f BC-WEIS-MARKETS-INC-<WMK 04-08 0026 - -WEIS MARKETS INC <WMK> 1ST QTR MARCH 28 NET - SUNBURY, Pa., April 8 - - Shr 59 cts vs 51 cts - Net 18.0 mln vs 15.6 mln - Revs 278.6 mln vs 272.2 mln - Reuter - - - - 8-APR-1987 11:15:46.20 - -usa - - - - - -F -f1356reute -r f BC-AVNET-INC-<AVT>-FILES 04-08 0093 - -AVNET INC <AVT> FILES FOR DEBENTURE OFFERING - NEW YORK, April 8 - Anvet Inc said it filed with the -Securities and Exchange Commission a registration statement for -a proposed public offering of 150 mln dlrs of convertible -subordinated debentures due 2012. - Avnet said it will use the net proceeds for general working -capital purposes and the anticipated domestic and foreign -expansion of its distribution, assembly and manufacturing -businesses. - The company said an investment banking group managed by -Dillon Read and Co Inc will handle the offering. - Reuter - - - - 8-APR-1987 11:15:53.12 -earn -canada - - - - - -E F -f1357reute -r f BC-CONTINENTAL-BANK-INIT 04-08 0100 - -CONTINENTAL BANK INITIAL DISTRIBUTION APPROVED - TORONTO, April 8 - Continental Bank of Canada said -shareholders approved a capital reorganization to allow an -initial payout by the end of May to common shareholders from -last year's 200 mln Canadian dlr sale of most Continental -assets to <Lloyds Bank PLC>'s Lloyds Bank Canada. - The bank said the initial distribution would take the form -of a stock dividend of cumulative redeemable retractable class -A series two preferred shares entitling holders to monthly -floating rate dividends at 72 pct of prime and to 12.75 dlrs a -share on retraction. - Continental said the initial payout was subject to Canadian -government approval. - The bank reiterated that total distributions to common -shareholders would range from 16.50 dlrs a share to 17.25 dlrs -including the initial stock dividend and a final distribution -in late 1988 or early 1989. - The payout of existing preferred shareholders will be -completed just before next month's initial distribution to -common shareholders, Continental added. - - Reuter - - - - 8-APR-1987 11:15:58.96 -earn -usa - - - - - -F -f1358reute -r f BC-ATLAS-CONSOLIDATED-MI 04-08 0060 - -ATLAS CONSOLIDATED MINING AND DEVELOPMENT <ACMB> - NEW YORK, April 8 - 4th qtr - Shr loss 17 cts vs loss 22 cts - Net loss 14.5 mln vs loss 18.0 mln - Revs 27.3 mln vs 23.7 mln - Year - Shr 58 cts vs 1.01 dlrs - Net loss 48.3 mln vs loss 84.2 mln - Revs 111.7 mln vs 141.9 mln - NOTE: Atlas Consolidated Mining and Development Corp of -Manila. - Translated from Philippine pesos at 20.3489 pesos to dollar -vs 18.5571 in quarter and 20.2315 vs 18.2743 in year. - Reuter - - - - 8-APR-1987 11:16:31.73 - -usa - - - - - -F -f1362reute -r f BC-FORD-<F>-EXTENDS-INCE 04-08 0119 - -FORD <F> EXTENDS INCENTIVES ON LIGHT TRUCKS - DEARBORN, Mich., April 8 - Ford Motor Co said it extended -its buyer incentive program on light trucks to April 30 from -April 6, the program's previous expiration date. - Ford, which saw a 23 pct rise in its March truck sales over -the March 1986 level, said the incentives were extended to -"maintain its truck sales momentum." - The program itself was not changed. Customers have a choice -of 3.9 to 9.9 annual percentage rate financing or a cash rebate -of 300 dlrs or 600 dlrs, depending on the type of transmission -chosen. - Ford last week extended to April 30 from March 12 its -incentive program on its compact trucks and the Ford Taurus and -Mercury Sable cars. - Reuter - - - - 8-APR-1987 11:16:47.23 - -italy - -fao - - - -C G T -f1364reute -d f BC-FAO-REPORTS-BETTER-CR 04-08 0104 - -FAO REPORTS BETTER CROPS IN DEVELOPING COUNTRIES - ROME, April 8 - World output of staple foods maintained -growth in 1986, following a record harvest the year before, and -most of the increase was in developing countries, the director -general of the U.N.'s Food and Agriculture Organisation (FAO) -said. - Speaking to FAO's committee on world food security, Edouard -Saouma said sub-Saharan Africa registered a cereal production -increase of 3.6 pct in 1986 and the Far East also continued to -increase production. - Despite ample supplies worldwide, many countries face -problems in paying for all the food they need, he said. - Saouma said many of the developing world's food problems -were the result of "chaotic" world trade. - He said it was vital to promote employment to improve the -"food-security situation" of the poor, with policy reforms in -developing countries to remove existing disincentives to -production so that agriculture could play a greater role in -stimulating economic growth. - Reuter - - - - 8-APR-1987 11:16:54.96 - -usa - - - - - -F -f1365reute -r f BC-AVX-CORP-<AVX>-FILES 04-08 0061 - -AVX CORP <AVX> FILES FOR DEBENTURE OFFERING - GREAT NECK, N.Y., April 8 - AVX Corp said it has filed a -registration statement with the Securities and Exchange -Commission for a proposed public offering of 75 mln dlrs -prinicipal amount of convertible subordinated debentures. - AVX said a syndicate managed by Shearson Lehman Brothers -Inc will underwrite the offering. - Reuter - - - - 8-APR-1987 11:17:19.96 -acq -usa - - - - - -F -f1367reute -u f BC-SCI-MED-<SMLS>-BOARD 04-08 0100 - -SCI-MED <SMLS> BOARD AGREES TO BRISTOL<BMY>DEAL - MINNEAPOLIS, MINN., April 8 - Sci-Med Life Systems Inc said -its directors approved a previously proposed agreement of -merger with Bristol-Myers Co. - The proposed transaction is subject to completion of a due -diligence investigation, including a review by Bristol-Myers of -a patent infringement suit served on Sci-Med by Advanced -Cardiovascular Systems Inc on March 31, 1987. - Bristol-Myers has the right to call off the agreement under -certain circumstances, it said. - Sci-Med said it continues to believe the patent suit is -without merit. - Reuter - - - - 8-APR-1987 11:18:14.40 -acq -usa - - - - - -F -f1371reute -r f BC-FIDELCOR-<FICR>-COMPL 04-08 0059 - -FIDELCOR <FICR> COMPLETES SALE OF UNIT - PHILADELPHIA, April 8 - Fidelcor Inc said it has completed -the sale of its Industrial Valley Title Insurance Co subsidiary -to a group of investors including the unit's management for -undisclosed terms. - Industrial Valley has assets of about 37.6 mln dlrs and was -acquired last year along with IVB Financial Corp. - Reuter - - - - 8-APR-1987 11:18:20.11 -earn -usa - - - - - -F -f1372reute -d f BC-DATA-TRANSLATION-INC 04-08 0033 - -DATA TRANSLATION INC <DATX> 1ST QTR FEB 28 NET - MARLBORO, Mass., April 8 - - Shr 18 cts vs 13 cts - Net 575,000 vs 379,000 - Sales 6,625,000 vs 4,537,000 - Avg shrs 3,173,000 vs 2,977,000 - Reuter - - - - 8-APR-1987 11:18:37.67 -pet-chemcrudeacqearn -usa - - - - - -F Y -f1375reute -d f BC-petrochemical 04-08 0098 - -ENERGY/U.S. PETROCHEMICAL INDUSTRY - By JULIE VORMAN, Reuters - HOUSTON, April 8 - Cheap oil feedstocks, the weakened U.S. -dollar and a plant utilization rate approaching 90 pct will -propel the streamlined U.S. petrochemical industry to record -profits this year, with growth expected through at least 1990, -major company executives predicted. - This bullish outlook for chemical manufacturing and an -industrywide move to shed unrelated businesses has prompted GAF -Corp <GAF>, privately-held Cain Chemical Inc, and other firms -to aggressively seek acquisitions of petrochemical plants. - Oil companies such as Ashland Oil Inc <ASH>, the -Kentucky-based oil refiner and marketer, are also shopping for -money-making petrochemical businesses to buy. - "I see us poised at the threshold of a golden period," said -Paul Oreffice, chairman of giant Dow Chemical Co <DOW>, adding, -"There's no major plant capacity being added around the world -now. The whole game is bringing out new products and improving -the old ones." - Analysts say the chemical industry's biggest customers, -automobile manufacturers and home builders that use a lot of -paints and plastics, are expected to buy quantities this year. - U.S. petrochemical plants are currently operating at about -90 pct capacity, reflecting tighter supply that could hike -product prices by 30 to 40 pct this year, said John Dosher, -managing director of Pace Consultants Inc of Houston. Demand -for some products such as styrene could push profit margins up -by as much as 300 pct, he said. - Oreffice, speaking at a meeting of chemical engineers in -Houston, said Dow would easily top the 741 mln dlrs it earned -last year and predicted it would have the best year in its -history. - In 1985, when oil prices were still above 25 dlrs a barrel -and chemical exports were adversely affected by the strong U.S. -dollar, Dow had profits of 58 mln dlrs. "I believe the entire -chemical industry is headed for a record year or close to it," -Oreffice said. - GAF chairman Samuel Heyman estimated that the U.S. chemical -industry would report a 20 pct gain in profits during 1987. -Last year, the domestic industry earned a total of 13 billion -dlrs, a 54 pct leap from 1985. - The turn in the fortunes of the once-sickly chemical -industry has been brought about by a combination of luck and -planning, said Pace's John Dosher. - Dosher said last year's fall in oil prices made feedstocks -dramatically cheaper and at the same time the American dollar -was weakening against foreign currencies. That helped boost -U.S. chemical exports. - Also helping to bring supply and demand into balance has -been the gradual market absorption of the extra chemical -manufacturing capacity created by Middle Eastern oil producers -in the early 1980s. - Finally, virtually all major U.S. chemical manufacturers -have embarked on an extensive corporate restructuring program -to mothball inefficient plants, trim the payroll and eliminate -unrelated businesses. The restructuring touched off a flurry of -friendly and hostile takeover attempts. - GAF, which made an unsuccessful attempt in 1985 to acquire -Union Carbide Corp <UK>, recently offered three billion dlrs -for Borg Warner Corp <BOR>, a Chicago manufacturer of plastics -and chemicals. Another industry powerhouse, W.R. Grace <GRA> -has divested its retailing, restaurant and fertilizer -businesses to raise cash for chemical acquisitions. - But some experts worry that the chemical industry may be -headed for trouble if companies continue turning their back on -the manufacturing of staple petrochemical commodities, such as -ethylene, in favor of more profitable specialty chemicals that -are custom-designed for a small group of buyers. - "Companies like DuPont <DD> and Monsanto Co <MTC> spent the -past two or three years trying to get out of the commodity -chemical business in reaction to how badly the market had -deteriorated," Dosher said. "But I think they will eventually -kill the margins on the profitable chemicals in the niche -market." Some top chemical executives share the concern. - "The challenge for our industry is to keep from getting -carried away and repeating past mistakes," GAF's Heyman -cautioned. "The shift from commodity chemicals may be -ill-advised. Specialty businesses do not stay special long." - Houston-based Cain Chemical, created this month by the -Sterling investment banking group, believes it can generate 700 -mln dlrs in annual sales by bucking the industry trend. - Chairman Gordon Cain, who previously led a leveraged buyout -of Dupont's Conoco Inc's chemical business, has spent 1.1 -billion dlrs since January to buy seven petrochemical plants -along the Texas Gulf Coast. - The plants produce only basic commodity petrochemicals that -are the building blocks of specialty products. - "This kind of commodity chemical business will never be a -glamorous, high-margin business," Cain said, adding that demand -is expected to grow by about three pct annually. - Garo Armen, an analyst with Dean Witter Reynolds, said -chemical makers have also benefitted by increasing demand for -plastics as prices become more competitive with aluminum, wood -and steel products. Armen estimated the upturn in the chemical -business could last as long as four or five years, provided the -U.S. economy continues its modest rate of growth. - Reuter - - - - 8-APR-1987 11:20:27.61 - -usa - - - - - -F -f1387reute -d f BC-FEDERAL-PAPER-BOARD-< 04-08 0047 - -FEDERAL PAPER BOARD <FBO> IN MARKETING DEAL - MONTVALE, N.J., April 8 - Federal Paper Board Co Inc said -it has named Ozaki Trading Co Ltd of Osaka to represent it it -Japan on the sale of bleached paperboard. - Federal said it plans to open its own Japanese office in -the near future. - Reuter - - - - 8-APR-1987 11:21:05.09 -earn -usa - - - - - -F -f1390reute -d f BC-FIDATA-CORP-<FID>-4TH 04-08 0094 - -FIDATA CORP <FID> 4TH QTR LOSS - NEW YORK, April 8 - - Shr loss two cts vs profit 38 cts - Net loss 90,000 vs profit 1,685,000 - Revs 1,826,000 vs 29.3 mln - Year - Shr profit 3.37 dlrs vs profit 46 cts - Net profit 15.0 mln vs profit 2,047,000 - Revs 26.2 mln vs 123.6 mln - NOTE: Net includes pretax securities sale gain 10,000 dlrs -vs loss 1,000 dlrs in quarter and gain 486,000 dlrs vs loss -112,000 dlrs in year. - Net includes pretax gains on sale of businesses of nil vs -4,656,000 dlrs in quarter and 26.0 mln dlrs vs 4,656,000 dlrs -in year. - Net includes pretax losses on disposition of product line -of nil vs 3,150,000 dlrs in quarter and 3,300,000 dlrs vs -3,150,000 dlrs in year. - Quarter net includes tax credits of 102,000 dlrs vs 736,000 -dlrs. - Net includes reversal of tax loss carryforwards of 259,000 -dlrs vs 264,000 dlrs in quarter and tax loss carryforwards of -8,635,000 dlrs vs 579,000 dlrs in year. - Reuter - - - - 8-APR-1987 11:21:19.09 - -usa - - - - - -F -f1392reute -d f BC-CMS-<ACMS>-UNVEILS-FI 04-08 0111 - -CMS <ACMS> UNVEILS FIRST IBM SYSTEM/2 ADD ONS - TUSTIN, Calif., April 8 - CMS Enhancements Inc said it has -introduced the first add-on mass storage products for the new -International Business Machines Corp <IBM> IBM Personal -System/2 Model 30 personal computers. - CMS said the products are available immediately and include -hard disk drives, tape backup subsystems and a hard disk drive -on an expansion card. - It added it plans to introduce more products for higher- -end models of the IBM personal computers within the next two -months. - Prices for the new products range from 795 dlrs for a tape -backup subsystem, to 5,695 dlrs for a mass storage subsystem. - Reuter - - - - 8-APR-1987 11:21:24.56 -earn -usa - - - - - -F -f1393reute -d f BC-MARBLE-FINANCIAL-CORP 04-08 0042 - -MARBLE FINANCIAL CORP <MRBL> 1ST QTR NET - RUTLAND, Vt., April 8 - - Oper shr 26 cts vs not given - Oper net 866,000 vs 480,000 - NOTE: 1987 net excludes 157,000 dlr gain from termination -of pension plan. - Company went public in August 1986. - Reuter - - - - 8-APR-1987 11:22:35.93 - -usa - - - - - -F -f1402reute -d f BC-NANTUCKET-<NAN>-NAMES 04-08 0055 - -NANTUCKET <NAN> NAMES NEW HEAD FOR UNIT - NEW YORK, April 8 - Nantucket Industries Inc said James -Adams has been named president of its hosiery division, -replacing John Wineapple, and Terry Hampton has been named vice -president of manufacturing for the division, replacing Howard -Fromkin. - No reason was given for the changes. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-016.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-016.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-016.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-016.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2030 +0,0 @@ - - - 9-APR-1987 16:55:59.00 - - -james-baker - - - - -V RM -f2652reute -f f BC-******TREASURY'S-BAKE 04-09 0013 - -******TREASURY'S BAKER SAYS MACROECONOMIC INDICATORS NEED MORE PROMINENT ROLE -Blah blah blah. - - - - - - 9-APR-1987 16:56:03.23 -acq - - - - - - -F -f2653reute -b f BC-******HOSPITAL-CORP-O 04-09 0012 - -******HOSPITAL CORP SAYS IT RECEIVED 47 DLR A SHARE OFFER FROM INVESTOR GROUP -Blah blah blah. - - - - - - 9-APR-1987 16:56:14.45 -earn -usa - - - - - -F -f2654reute -s f BC-BEVERLY-ENTERPRISES-< 04-09 0026 - -BEVERLY ENTERPRISES <BEV> SETS REGULAR DIVIDEND - PASEDENA, Calif., April 9 - - Qtly div five cts vs five cts prior - Pay July 13 - Record June 30 - Reuter - - - - 9-APR-1987 16:59:15.05 -money-fx - -james-baker - - - - -V RM -f2662reute -f f BC-******TREASURY'S-BAKE 04-09 0013 - -******TREASURY'S BAKER SAYS FLOATING EXCHANGE RATE SYSTEM NEEDS GREATER STABILITY -Blah blah blah. - - - - - - 9-APR-1987 17:03:06.18 -crude -usa - - - - - -Y -f2669reute -r f BC-/CRUDE-OIL-NETBACKS-U 04-09 0110 - -CRUDE OIL NETBACKS UP SHARPLY IN EUROPE, U.S. - NEW YORK, April 9 - Crude oil netback values in complex -refineries rose sharply in Europe and firmed in the U.S. last -Friday from the previous week but fell sharply in Singapore, -according to calculations by Reuters Pipeline. - The firmer tone to refining margins in Europe and the U.S. -relected higher prices for petroleum products, particularly -gasoline, and support from crude oil prices. - Netback values for crude oil refined in Northern Europe -rose substantially following strong gains in gasoline prices -there. Brent is valued at 19.45 dlrs, up 56 cts a barrel or -three pct from the previous week. - In the U.S. Gulf, sweet crudes rose in value by 14 cts to -19.33 dlrs for West Texas Intermediate, up about 0.7 pct. - Sour grades in the U.S. Gulf showed an increase of 33 cts a -barrel for Alaska North Slope, up 1.7 pct. - But netbacks for crude oil refined in Singapore fell -sharply, down 15 cts to as much as 68 cts a barrel as ample -distillate supplies weighed on petroleum product prices. - Attaka in Singapore is valued at 18.55 dlrs, a decline of -68 cts a barrel or 3.5 pct from the previous week. - For refineries in the Mediterranean, netback values were -mostly lower, with declines of seven to 14 cts. The value of -Kuwait crude fell 14 cts to 18.37 dlrs, while Iranian Light -fell 11 cts to 19.14 dlrs. - On the U.S. West Coast, netback values for ANS CIF L.A. -also jumped sharply, up 40 cts a barrel or 2.2 pct to 18.82 -dlrs on higher gasoline prices. - Reuter - - - - 9-APR-1987 17:04:00.71 -money-fx -usa -james-baker -imf - - - -V RM -f2670reute -b f BC-TREASURY'S-BAKER-SAYS 04-09 0098 - -TREASURY'S BAKER SAYS SYSTEM NEEDS STABILITY - WASHINGTON, April 9 - Treasury Secretary James Baker said -the floating exchange rate system has not been as effective as -had been hoped in promoting stability and preventing imbalances -from emerging in the global economy. - In remarks before the afternoon session of the -International Monetary Fund's Interim Committee, Baker said he -was not suggesting that the system should be abandoned. - "But I do suggest," he said, "that we need something to give -it more stability and to keep it headed in the right direction -when the wind shifts." - He said that indicators can serve "as a kind of compass" but -added that structural indicators can help focus attention on -some policies. - Baker, however, said the IMF "needs to move beyond -macroeconomic indicators and find structural indicators that -can help focus attention on some of the policies of specific -relevance to the imbalances we face today." - The Treasury Secretary said that indicators should be given -a more prominent role in the annual economic reviews -- Article -IV consultations -- that the Fund performs. - Baker also told the policy making group that it was time -for the IMF to adopt earlier recommendations making IMF -surveillance more relevant to national policymakers and the -public. - "In particular, we urge increased publicity for IMF -appraisals developed in Article IV consultations, the use of -follow-up reports on country actions to implement IMF -recommendations, and greater use of special consultation -procedures," he said. - Baker emphasized that indicators were a device "for moving -beyond rhetoric to action." - He said they provide "more structure to the system, and -induce more discipline and peer pressure into the process of -policy coordination." - He said the Fund's procedures for surveillance need to be -reviewed and updated to reflect the use of indicators. - "This should be matter of priority for the executive board," -he said. - Baker also urged the Fund to develop alternative -medium-term economic scenarios for countries that "can help us -focus even more clearly on the most important imbalances, by -identifying options for addressing them and analyzing the -implications of these options." - He said also that further work should be done on finding -paths that lead toward possible medium-term objectives. - "If we are to take effective remedial action when there are -significant deviations from an intended course, then we must -have more definitive ways of indentifying the right course for -key variables," he said. - Reuter - - - - 9-APR-1987 17:07:18.35 -acqcrudenat-gas -usa - - - - - -F -f2677reute -r f BC-NERCI-<NER>-UNIT-CLOS 04-09 0083 - -NERCI <NER> UNIT CLOSES OIL/GAS ACQUISITION - PORTLAND, Ore., April 9 - Nerco Inc said its oil and gas -unit closed the acquisition of a 47 pct working interest in the -Broussard oil and gas field from <Davis Oil Co> for about 22.5 -mln dlrs in cash. - Nerco said it estimates the field's total proved developed -and undeveloped reserves at 24 billion cubic feet, or -equivalent, of natural gas, which more than doubles the -company's previous reserves. - The field is located in southern Louisiana. - Reuter - - - - 9-APR-1987 17:10:03.66 - -usauksouth-africanamibia - -un - - - -C M -f2679reute -d f AM-TERRITORY-COUNCIL-1ST LD'*'*'* 04-09 0131 - -U.S. AND BRITAIN VETO SANCTIONS AGAINST S.AFRICA - UNITED NATIONS, April 9 - For the second time in seven -weeks, the United States and Britain vetoed a Security Council -resolution to impose mandatory sanctions against South Africa. - Nine of the Council's 15 members voted for the draft, aimed -at forcing South Africa to implement an eight-year-old U.N. -independence plan for Namibia (South West Africa), a vast, -sparsely populated territory rich in minerals. - The U.S. and Britain were joined by West Germany in casting -negative votes. France, Italy and Japan abstained. - The resolution called for comprehensive mandatory sanctions -because Pretoria insists on making Namibian independence -conditional on the withdrawal of more than 30,000 Cuban troops -from neighbouring Angola. - Reuter - - - - 9-APR-1987 17:14:55.93 -money-fxgraincottonlivestockgoldsilver -usa - - - - - -F C G L M T -f2692reute -r f BC-media-summary 04-09 0127 - -U.S. DOLLAR LOSSES PROPEL BROAD COMMODITY GAINS - by Keith Leighty, Reuters - CHICAGO, April 9 - Commodities from gold to grains to -cotton posted solid gains in a flurry of buying today as losses -in the U.S. dollar and rising interest rates kindled fears of -inflation and economic instability. - Gains were most pronounced on the Commodity Exchange in New -York, where gold jumped 12.40 dlrs and closed at 436.50 dlrs a -troy ounce, and silver 22.5 cents to 6.86 dlrs a troy ounce. - A key factor behind the advance was anticipation that -inflation will be the only way for the major industrial nations -to halt the slide in the value of the U.S. dollar, said Steve -Chronowitz, director of commodity research with Smith Barney, -Harris Upham and Co., in New York. - The dollar tumbled one day after top finance officials from -the seven largest industrial nations reaffirmed their -commitment to support its value, and despite reports of -intervention by the U.S. Federal Reserve Bank, traders said. - Traders said it appears that the industrial nations, known -as the Group of Seven, lack the ability to change the long-term -direction of the currency markets. - "Maybe they have some ideas or plans," said Chronowitz. "If -they do, it's not evident." - "It looks like there's no cure but to let the free market -take values to where they should be. - "One way or another, we will force our major trading -partners to stimulate their economies," as a measure to correct -the mounting U.S. trade deficit, Chronowitz said. - "I think the markets believe, and have believed for a long -time, that the only recourse is to reflate at some point. It's -going to be a long and tedious process, but that's what's -happening," he said. - The falling value of the dollar makes U.S. commodities -cheaper for foreign buyers, stimulating demand. - At the same time, traders who are holding stocks and bonds -saw the value of their investments falling and many are turning -to commodities such as precious metals as a hedge, said Marty -McNeill, a metals analyst in New York with the trading house of -Dominick and Dominick. - The reaction in the metal markets reverberated throughout -the commodities markets, as grains, livestock, and cotton -posted broad gains. - Traders at the Chicago Board of Trade said attention in the -grain markets has shifted from concern about burdensome -supplies to the outlook that a lower dollar will stimulate -export demand. - After the close of trading, the Agriculture Department -raised its estimate for grain imports by the Soviet Union by -two mln tonnes from the month-earlier report. - Live hogs and frozen pork bellies posted sharp gains on the -Chicago Mercantile Exchange, while live cattle were moderately -higher. - Analysts said several factors boosted hog prices. They said -hogs haven't been making the weight gains that are normal at -this time of year, and farmers have been too busy with field -work to market animals. - Reuter - - - - 9-APR-1987 17:15:43.34 - -usa - - - - - -F -f2694reute -u f BC-GENERAL-MOTORS-<GM>-T 04-09 0052 - -GENERAL MOTORS <GM> TO IDLE 9,800 WORKERS - DETROIT, April 9 - General Motors Corp said it will -temporarily lay off 9,800 workers at two plants next week. - The layoffs will bring to 11,900 the number of General -Motors workers temporarily let go by the company. - Indefinite layoffs remain unchanged at 37,000. - General Motors said its Chevrolet-Pontiac-GM of Canada -plant at Okalhoma City, Okla., will be shut down April 13 -through April 20 for inventory adjustment. Some 5,500 workers -will be idled at the plant. - General Motors' Chevrolet-Pontiac-GM of Canada plant at -Doraville, Ga., will be closed for the same period for -inventory adjustment, with 4,300 workers affected. - The company's Lakewood, Ga., plant has been shut since -December, with 2,100 workers on temporary layoff. - General Motors said it will have one car plant and five -truck plants working on on overtime Saturday, April 11. - Reuter - - - - 9-APR-1987 17:16:11.81 - -usa - - - - - -F -f2695reute -d f BC-TENNEX-INDUSTRIES-TO 04-09 0076 - -TENNEX INDUSTRIES TO BUILD PLANT IN TENNESSEE - NASHVILLE, Tenn., April 9 - <Tennex Industries Inc>, a -Japanese owned supplier of air cleaners for the automotive -industry, said it will build a seven mln dlr plant in -Munfreesboro, Tenn. - The company said the 37,500-square-foot plant will -initially supply parts to <Nissan Motor Manufacturing Corp USA> -in nearby Smyna. - The company said it hopes to eventually produce parts for -other U.S. car makers. - Reuter - - - - 9-APR-1987 17:16:58.84 -graincorn -usaegypt - - - - - -C G -f2697reute -u f BC-EGYPT-SEEKING-500,000 04-09 0034 - -EGYPT SEEKING 500,000 TONNES CORN - U.S. TRADERS - KANSAS CITY, April 9 - Egypt is expected to tender April 22 -for 500,000 tonnes of corn for May through September shipments, -private export sources said. - Reuter - - - - 9-APR-1987 17:20:34.87 -earn -usa - - - - - -F -f2704reute -r f BC-TRUSTCORP-INC-<TTCO> 04-09 0048 - -TRUSTCORP INC <TTCO> 1ST QTR NET - TOLEDO, Ohio, April 9 - - Shr 67 cts vs 62 cts - Net 9,160,000 vs 7,722,000 - Assets 4.5 billion vs four billion - Note: Shr and net data are before accounting change -announced in 1986, which added 30 cts a share to year-ago 1st -qtr results. - Reuter - - - - 9-APR-1987 17:28:02.76 -grainship -usa - - - - - -G -f2720reute -r f BC-ny-grain-freights 04-09 0065 - -N.Y. GRAIN FREIGHTS - April 9 - Nidera took TBN 12,000 tonnes HSS Toledo to Casablanca -April 29-May 5 25.00 dlrs three days load 1,000 discharge - Comanav took Radnik 20,000 tonnes Lakehead to Morocco April -15-25 22.00 dlrs 5,000 load 3,000 discharge - Krohn took Akron 75,000 tonnes anygrains on 55 feet stowage -Mississippi River to Rotterdam May 1-10 8.05 dlrs 12 days all -purposes - Continental took Legionario 40,000 tonnes River Plate to -Japan April 25-May 10 22.50 dlrs 2,000 load 5,000 free -discharge - Garnac took Sokorri 30,000 tonnes U.S. Gulf to Constanza -April 15-25 17.00 dlrs load terms unknown 3,000 discharge - reuter - - - - - - 9-APR-1987 17:28:46.65 -earn -usa - - - - - -F -f2724reute -h f BC-NAPA-VALLEY-BANCORP-< 04-09 0019 - -NAPA VALLEY BANCORP <NVBC> 1ST QTR NET - NAPA, Calif, April 9 - - Shr 20 cts vs 25 cts - Net 487,000 vs 435,000 - Reuter - - - - 9-APR-1987 17:29:59.20 -earn -usa - - - - - -F -f2728reute -h f BC-INTERNATIONAL-POWER-M 04-09 0078 - -INTERNATIONAL POWER MACHINES <PWR> 4TH QTR LOSS - MESQUITE, Texas, April 9 - - Shr loss 21 cts vs loss 28 cts - Net loss 817,000 vs loss 1,058,000 - Revs 5,627,000 vs 7,397,000 - Year - Shr loss 75 cts vs loss 1.36 dlrs - Net loss 2,872,000 vs loss 5,200,000 - Revs 23.3 mln vs 21.1 mln - Note: 1985 net includes 1,255,000 adjustment in inventory -valuations and 486,000 in cost-reduction expenses. - Full name is International Power Machines Corp. - Reuter - - - - 9-APR-1987 17:33:46.96 - -usa - - -cboe - - -F RM -f2736reute -u f BC-CBOE-TO-LIST-NEW-S-AN 04-09 0112 - -CBOE TO LIST NEW S AND P OPTIONS <NSX> APRIL 20 - CHICAGO, April 9 - The Chicago Board Options Exchange, -CBOE, said it will list new Standard and Poor 500 stock index -options beginning April 20 that will trade side-by-side with -the existing S and P 500 options <SPX>. - The new S and P 500 option contract differs from the -existing contract in that settlement of the new contract will -be based on the opening value of the index on expiration -Friday. Settlement of the existing contract is based on the -closing value of the index on expiration Friday. - The new opening settlement S and P 500 options will be -offered only in months in which there are S and P 500 futures. - Initial months to be listed in the new options will be -June, September and December, the CBOE said. - Dissemination of the settlement of price of the new options -will be made through a special ticker symbol -- <SET>, the -exchange said. - There will initially be seven series of strike prices for -each contract month of the new options -- one strike price "at -the money," or near to the actual spot index value, and three -above and three below the spot index. - Position limits in any combination of both the new and -existing S and P 500 options will be 15,000 contracts. - The exchange said in the rare event that a stock does not -open on expiration Friday, the previous day's closing price of -that stock will be used to calculate the settlement value of -the index. - Reuter - - - - 9-APR-1987 17:35:06.68 - -usa - -ec - - - -F A RM -f2743reute -r f BC-EC-WARNS-AGAINST-PASS 04-09 0111 - -EC WARNS AGAINST PASSAGE OF TEXTILE BILL - WASHINGTON, April 9 - The European Community has told -Congress that if textile legislation injuring EC interests is -approved, there was no doubt the community would retaliate -against U.S. exports. - Roy Denmam, head of the EC delegation here, issued the -warning in a letter to Senator Lloyd Bentsen, chairman of the -Finance Committee. A copy of the letter was provided Reuters. - Denmam told Bentsen, a Texas Democrat, that if the textile -legislation passed on its own or was included in an omnibus -trade bill and injured EC interests, "there should be no doubt -that the EC will retaliate against the United States." - He added that "at a time when U.S. textile exports to the EC -are growing rapidly, one result of such retaliation would be a -substantial reduction of U.S. exports and jobs." - The textile legislation, backed strongly by the industry, -hard hit by imports, and by senators from textile-producing -states would impose new tough global quotas on textile imports -and for the first time include Europe in the quotas. - Reagan Administration officials have also opposed the -textile legislation, saying that if it passed it would likely -prompt a presidential veto. - Denman made his comments on the textile issue in a general -assessment of the Senate trade bill, titled S.490. - He said he was concerned about provisions in the Senate -bill that would limit, if not eliminate, the president's -discretion if retaliating against nations for keeping their -home markets closed to foreign goods. - U.S. Trade Representative Clayton Yeutter has also opposed -those provisions, arguing that presidential flexibility was -needed in order to be able to negotiate with countries to open -their markets, with retaliation being retained as a final, but -discretionary, weapon. - The pending overall trade legislation would force the -Administration to consult often with Congress and seek its -approval during step-by-step GATT negotiations. - He said "enactment of S. 490 would reduce the confidence of -other governments in America's commitment to multinational -trade." - Summing up the senate legislation, Denman said "a number of -provisions of that bil may achieve the opposite of what is -intended and lead to dangerous consequences for the world and -the U.S. economy." - Reuter - - - - 9-APR-1987 17:39:34.36 - -usa - - -cboe - - -C -f2752reute -u f BC-CBOE-TO-LIST-NEW-S-AN 04-09 0110 - -CBOE TO LIST NEW S AND P OPTIONS APRIL 20 - CHICAGO, April 9 - The Chicago Board Options Exchange, -CBOE, said it will list new Standard and Poor 500 stock index -options beginning April 20 that will trade side-by-side with -the existing S and P 500 options. - The new S and P 500 option contract differs from the -existing contract in that settlement of the new contract will -be based on the opening value of the index on expiration -Friday. Settlement of the existing contract is based on the -closing value of the index on expiration Friday. - The new opening settlement S and P 500 options will be -offered only in months in which there are S and P 500 futures. - Initial months to be listed in the new options will be -June, September and December, the CBOE said. - Dissemination of the settlement price of the new options -will be made through a special ticker symbol -- <SET>, the -exchange said. - There will initially be seven series of strike prices for -each contract month of the new options -- one strike price "at -the money," or near to the actual spot index value, and three -above and three below the spot index. - Position limits in any combination of both the new and -existing S and P 500 options will be 15,000 contracts. - The exchange said in the rare event that a stock does not -open on expiration Friday, the previous day's closing price of -that stock will be used to calculate the settlement value of -the index. - Reuter - - - - 9-APR-1987 17:39:43.66 - -usa - - - - - -F -f2753reute -u f BC-THREE-TRADERS-INDICTE 04-09 0111 - -THREE TRADERS INDICTED FOR INSIDER TRADING - NEW YORK, April 9 - A Grand Jury in Manhattan Federal Court -indicted three arbitrageurs, charging they swapped inside -information between their firms, Goldman Sachs and Co and -Kidder Peabody and Co, court documents showed. - Robert Freeman, head of risk arbitrage at Goldman -Sachs and Co, Richard Wigton, an employee of Kidder Peabody Co -Inc, and Timothy Tabor, also formerly with Kidder, were charged -with trading on inside information between June 1984 and -January 1986. They were arrested in February. - The indictments also alledged that Goldman Sachs and -Freeman made money on the insider trading scheme. - According to the indictment, Freeman exchanged inside -information with Martin Siegel, who at the time was a vice -president of Kidder Peabody. - Siegel pleaded guilty last February 13 to charges he -participated in the conspiracy. The indictment charged Siegel -passed on non-public information to both Wigton and Tabor from -Freeman. - Reuter - - - - 9-APR-1987 17:41:35.88 -acq -usa - - - - - -F -f2762reute -r f BC-GREAT-AMERICAN-MGMT<G 04-09 0102 - -GREAT AMERICAN MGMT<GAMI> HAS ATCOR<ATCO> STAKE - WASHINGTON, April 9 - Great American Management and -Investment Inc told the Securities and Exchange Commission it -acquired a 7.7 pct stake in Atcor Inc. - Great American said it bought the stake for investment. - It added that it has also considered--but not yet -decided--to buy additional Atcor shares, either in the open -market, in private transactions, through a tender offer or -otherwise. - Great American said it paid about 6.1 mln dlrs for its -462,400 Atcor shares. It said its most recent purchases -included 191,400 shares bought March 18-April 6. - Reuter - - - - 9-APR-1987 17:42:26.40 -earn -usa - - - - - -F -f2764reute -h f BC-RAI-RESEARCH-CORP-<RA 04-09 0072 - -RAI RESEARCH CORP <RAC> 3RD QTR FEB 28 NET - HAUPPAUGE, N.Y., April 9 - - Oper shr one ct vs 13 cts - Oper net 17,806 vs 312,692 - Revs 1,318,165 vs 2,239,349 - Nine mths - Oper shr 27 cts cs 28 cts - Oper net 640,156 vs 671,291 - Revs 5,612,818 vs 5,632,044 - Note: Oper excludes gain from discontinued operations of -15,598 for year-ago qtr and loss from discontinued operations -of 49,040 for year-ago nine mths. - Reuter - - - - 9-APR-1987 17:42:36.85 -earn -canada - - - - - -E F -f2765reute -r f BC-moore 04-09 0110 - -MOORE <MCL> SEES SUBSTANTIAL 1987 PROFIT GAIN - TORONTO, April 9 - Moore Corp Ltd expects 1987 profits from -continuing operations will exceed 1986 results and recover to -1985 levels when the company earned 152 mln U.S. dlrs or 1.70 -dlrs a share, president M. Keith Goodrich said. - "We'll have a substantial increase in earnings from -continuing operations," he told reporters after the annual -meeting. He said he expected profits would recover last year's -lost ground and reach 1985 results. - In 1986, profits from continuing operations slumped to -139.5 mln dlrs or 1.54 dlrs a share. The total excluded losses -of 30 mln dlrs on discontinued operations. - Goodrich said Moore is still actively looking for -acquisitions related to its core areas of business forms -manufacturing or handling. - "We could do a large acquisition," he said when asked if -the company could raise as much as one billion dlrs for this -purpose. - Chairman Judson Sinclair, answering a shareholder's -question, told the annual meeting that a special resolution -passed by shareholders to create a new class of preferred -shares would allow Moore to move quickly if it decided to -pursue an acquisition. - "If we were to make a major acquisition ... it means we can -move with a certain expediency," Sinclair said. - Asked if the resolution was designed to give Moore -protection from a possible hostile takeover, Sinclair said -only, "I know of no threat to the corporation at this time." - - Reuter - - - - 9-APR-1987 17:47:39.74 - -usa - - - - - -F -f2772reute -r f BC-ARVIN-<ARV>-RAISES-NU 04-09 0081 - -ARVIN <ARV> RAISES NUMBER OF AUTHORIZED SHARES - COLUMBUS, Ind., April 9 - Arvin Industries Inc said its -shareholders at the annual meeting voted to increase authorized -common shares to 50 mln from 30 mln. - The company told shareholders that the offering of 1.7 mln -common shares in January raised 50 mln dlrs, and the 500 shares -of variable rated preferred stock offered in February also -raised 50 mln dlrs. The company said it also placed 150 mln -dlrs in long-term debt in March. - Reuter - - - - 9-APR-1987 17:49:07.93 - -usa - - - - - -F -f2775reute -r f BC-RAYTHEON-<RTN>-WINS-U 04-09 0085 - -RAYTHEON <RTN> WINS U.S. NAVY CONTRACT - LEXINGTON, Mass., April 9 - Raytheon Co said the United -States Navy awarded it a 215.3 mln dlr contract to produce -1,927 AIM/RIM-7M Sparrow Missile Guidance and Control Sections -and associated hardware. - Under the contract, the company said it will provide -missiles and associated hardware to the U.S. Navy and Air Force -and to several U.S. allies. - Raytheon said the contract represents the major share of -the fiscal 1987 competitive Sparrow missile procurement. - Reuter - - - - 9-APR-1987 17:50:16.86 -acq -usa - - - - - -F -f2777reute -r f BC-FIRM-HAS-14.8-PCT-OF 04-09 0102 - -FIRM HAS 14.8 PCT OF DECISION/CAPITAL FUND<DCF> - WASHINGTON, April 9 - Gabelli Group Inc said it and two -subsidiaries held a total of 295,800 Decision/Capital Fund Inc -shares or 14.8 pct of the total outstanding. - It said the shares were held on behalf of investment -clients and it said it had no intention of seeking control of -the fund. - Gabelli said its most recent purchases of Decision/Capital -Fund stock included 95,800 shares bought April 3-6 on the -Philadelphia Stock Exchange. - Gabelli is an investment firm headquartered in New York -City. Its Gabelli and Co subsidiary is a brokerage firm. - Reuter - - - - 9-APR-1987 17:51:34.88 - -usa - - - - - -A RM -f2779reute -r f BC-CONSUMERS-POWER-<CMS> 04-09 0077 - -CONSUMERS POWER <CMS> TO REDEEM BONDS - JACKSON, Mich., April 9 - Consumers Power Co said it has 56 -mln dlrs available to be used to redeem at par any 15 pct -series first mortgage bonds that are not exchanged under an -outstanding bond exchange program. - The utility on March 17 offered to exchange its 15 pct -first mortgage bonds due March 1, 1994 for a new series of -first mortgage bonds, 9-1/4 pct due April 1, 1997. The offer -will expire April 14, 1987. - Reuter - - - - 9-APR-1987 17:52:21.04 - -usa - - - - - -F -f2782reute -u f BC-SEMICONDUCTOR-BOOK-TO 04-09 0110 - -SEMICONDUCTOR BOOK TO BILL RATIO AT 1.21 PCT - CUPERTINO, Calif., April 9 - The Semiconductor Industry -Association put the three-month average book-to-bill ratio at -1.21, which was above analysts' expectations and reflects the -sixth straight increase in this indicator of computer industry -activity. - Average booking in the three month period ended in March -totaled 910.8 mln dlrs, up 15.6 pct from a month ago and the -highest bookings since September, 1984. March billings, or -computer chip sales in the month, totaled 912.1 mln dlrs, up -34.6 pct from a month ago, the association said. The three -month average billings totaled 751.3 mln dlrs, up 6.5 pct. - March billings were the strongest recorded since November, -1984, the association said. The book to bill ratio, at 1.21, -was the highest since May, 1984, it noted. - Preliminary total solid state shipments for the first -quarter of 1987 totaled 2.25 billion dlrs, up 4.9 pct from last -quarter and up 15.9 pct from last year's first quarter. - Semiconductor Industry Association President Andrew -Procassini said the rise in the book to bill was due to a -substantial increase in U.S. bookings during March. - "We believe that the bookings increase reflects growing -confidence by electronic equipment manufacturers that some -end-equipment market segments have improved substantially -during the first quarter," Procassini said in a statement. - The association also revised its book-to-bill ratio -estimate for the three months ended in February to 1.12, from -1.13 earlier. It further revised the January book-to-bill -figure to 1.09 from 1.12 estimated earlier. - The three-month average book-to-bill ratio of 1.21 for -March means for every 100 dlrs worth of product shipped, -computer chip maker received 121 dlrs in new orders. - Drexel Burnham Lambert Inc analyst Michael Gumport said -association numbers indicate March orders were up 20 pct above -the normal seasonal level. - The association does not break out March orders from its -three-month average, which it put at 910.8 mln dlrs. - Gumport noted the three-month average bookings were well -above the 800-865 mln dlrs anticipated by the industry. - He said semiconductor stock could rise five to ten pct on -the stock market open tomorrow, due to the positive numbers. - "Skeptics are going to have to have some pretty strong -reasons not to like this group (of stocks)," Gumport said. - Kidder Peabody and Co analyst Michael Kubiak said the ratio -indicates March orders at about one billion dlrs, which would -be the highest monthly order rate since April, 1984. - He predicted at least a five pct rise in semiconductor -stocks on the open, and said the stock group could soar as high -as 15 pct during the session. - "One month does not a boom-time make, but this is very good -news," he said. - Kubiak attributed the stong semiconductor orders to -strength in the personal computer market, inventory restocking -and strong buying by distributors. - Purchasing managers had been keeping computer chip -inventories low, due to the overcapacity in the industry and -the slow growth of the economy in general, analysts noted. - The semiconductor industry has been in a slump for the past -three years. - The analysts said the March order and sales numbers are the -strongest evidence yet that the trend may be turning. - Nevertheless, they do not expect the Administration to -retreat from proposed sanctions against Japanese chip makers. - They added, however, if the industry continues to improve, -it could mean the sanctions will be short term. - Jack Beedle, President of In-Stat, an electronics industry -research firm, called the March numbers "excellent", but also -cautioned against excessive optimism. - "I still believe caution should be the word, rather than -euphoria," said Beedle, adding that he has yet to see strong -indications from the general economy or the computer industry -that support a solid, long-term recovery. - Beedle said while he thinks the semiconductor industry will -have a very good second quarter, he still thinks positive -shifts in exports and industrial production are needed to -sustain a recovery. - Reuter - - - - 9-APR-1987 17:54:38.77 -acq -usa - - - - - -F -f2786reute -u f BC-PARTNERSHIP-BUYS-IPCO 04-09 0097 - -PARTNERSHIP BUYS IPCO <IHS> STAKE OF 6.8 PCT - WASHINGTON, April 9 - MP Co, a New York investment -partnership, told the Securities and Exchange Commission it -bought a 6.8 pct stake in IPCO Corp common stock. - The partnership said it acquired 346,600 IPCO shares, -paying 4.9 mln dlrs, because it believed the securities to be -"an attractive investment opportunity." - It said it planned to regularly review its investment and -may in the future recommend business strategies or an -extraordinary corporate transaction such as a merger, -reorganization, liquidation or asset sale. - The partnership is controlled by Marcus Schloss and Co Inc, -a New York brokerage firm, and Prime Medical Products Inc, a -Greenwood, S.C., medical supplies firm. - Reuter - - - - 9-APR-1987 17:56:18.18 -earn -usa - - - - - -F -f2792reute -d f BC-DELMED-INC-<DMD>-YEAR 04-09 0081 - -DELMED INC <DMD> YEAR LOSS - FREEHOLD, N.J., April 9 - - Oper shr loss 30 cts vs loss 1.27 dlrs - Oper net loss 8,648,000 vs loss 25.6 mln - Revs 27.4 mln vs 33.3 mln - Avg shrs 29.1 mln vs 20.1 mln - Note: Oper excludes loss on provision for discontinued -operations of 971,000 vs 12.2 mln and loss from conversion of -debt 587,000 vs gain of 1,734,000. - 1985 oper excludes loss from pension plan liquidation of -631,000 and loss from discontinued operations of 1,015,000. - - Reuter - - - - 9-APR-1987 17:56:55.34 - -usa - - - - - -F -f2793reute -r f BC-MARCH-TRUCK-SALES-SAI 04-09 0058 - -MARCH TRUCK SALES SAID UP 16.4 PCT - DETROIT, April 9 - Retail sales of trucks in March rose -16.4 pct over the same month last year, said the Motor Vehicle -Manufacturers Association. - The trade group said dealers sold 377,617 trucks in March, -up from 324,327 last year. - Year-to-date truck sales were up 3.6 pct at 934,074 from -1986's 901,757. - Reuter - - - - 9-APR-1987 18:01:43.61 - -usa - - - - - -F -f2798reute -r f AM-ASPIRIN (EMBARGOED) 04-09 0097 - -DRUG INDUSTRY ATTACKED ON ASPIRIN ISSUE - CHICAGO, April 9 - Elements of the drug industry endangered -the lives of children by pressuring the government to delay a -now common warning on the link between aspirin and an often -fatal disease, a doctor said. - The warning involving Reye's Syndrome has since been -required on aspirin products under a Food and Drug -Administration (FDA) directive of one year ago, and now appears -on the labels of aspirin and aspirin-containing products. - The industry under government coaxing began voluntarily -printing warning labels in mid-1985. - - But in an editorial in this week's Journal of the -American Medical Association, Dr Edward Mortimer of Case -Western Reserve University in Cleveland said some aspirin -manufacturers misled physicians and acted irresponsibly in -opposing the warning for several years before then. - Mortimer's criticism was prompted by a new government study -published in the same issue of the Journal which said it had -found a "strong association" between aspirin and Reye's Syndrome. - Reye's Syndrome, which kills about 20 per cent of its -victims, strikes following chicken pox, influenza and other -illnesses. Symptoms include lethargy, belligerence and -excessive vomiting. Those who survive sometimes suffer brain -damage. - - Reuter - - - - 9-APR-1987 18:04:04.54 -acq - - - - - - -E F -f2802reute -b f BC-cadillac-fairview-say 04-09 0011 - -******CADILLAC FAIRVIEW SAYS IT HAS RECEIVED SOME ACQUISITION PROPOSALS -Blah blah blah. - - - - - - 9-APR-1987 18:04:24.13 - -usa - - - - - -F -f2803reute -r f BC-GM-<GM>-UNIT-GETS-BOE 04-09 0053 - -GM <GM> UNIT GETS BOEING <BA> CONTRACT - IRVINE, Calif., April 9 - General Motors Corp's Hughes -Aircraft Co said it received a contract worth more than 20 mln -dlrs from Boeing Co's Boeing Commercial Airplane Co. - Hughes will supply a cabin entertainment and service system -for Boeing's new 747-4000 jumbo jetliners. - Reuter - - - - 9-APR-1987 18:05:37.57 - -usa - - - - - -F -f2804reute -d f BC-AUDEC-IN-PRIVATE-PLAC 04-09 0057 - -AUDEC IN PRIVATE PLACEMENT OF STOCK, WARRANTS - SADDLEBROOK, N.J., April 9 - <Audec Corp> said it sold -privately 24 units, each consisting of 40,000 common shares and -40,000 redeemable common share purchase warrants, for a total -of 480,000 dlrs. - Audec said the sale was part of its plan to place a total -of 28 units at 20,000 dlrs each. - Reuter - - - - 9-APR-1987 18:09:50.90 - -usafrance - -worldbankimf - - - -RM A -f2808reute -u f BC-FRENCH-PROPOSE-NEW-WO 04-09 0109 - -FRENCH PROPOSE NEW WORLD BANK DEBT FACILITY - WASHINGTON, April 9 - The French government said it -proposed the creation of a new facility for development and for -debt reduction under the framework of the World Bank. - In a statement issued in conjunction with the meeting of -the International Monetary Fund's policy-making Interim -Committee, the French said the "multilateral resources thus -collected would permit a partial refinancing on highly -concessional terms of previously rescheduled official debts." - The statement said the "French government believes it is -necessary to take new steps to deal with the issue of the -poorest countries' debt." - The French statement said that Paris club reschedulings -should have a lengthening of the repayment period up to between -15 and 20 years instead of the current limit of 10 years. - And grace periods would be extended. - "These measures would be confined to the poorest, heavily -indebted countries and would be decided on a case-by-case -basis," it said. - The French also called for making the IMF's compensatory -financing facility for export shortfalls more concessional. - Reuter - - - - 9-APR-1987 18:10:34.32 -acq -canada - - - - - -E F -f2810reute -r f BC-cadillac-fairview-say 04-09 0066 - -CADILLAC FAIRVIEW SAYS IT RECEIVED TAKEOVER BIDS - Toronto, April 9 - <Cadillac Fairview Corp Ltd> said it -received proposals to acquire the company, following its -announcement last August that it had retained investment -dealers to solicit offers for all outstanding common shares. - Cadillac Fairview said the offers are subject to -clarification and negotiation and offered no further details. - Reuter - - - - 9-APR-1987 18:16:05.61 - -usa - - - - - -F -f2816reute -r f BC-ONE-CHRYSLER-<C>-PLAN 04-09 0083 - -ONE CHRYSLER <C> PLANT TO WORK OVERTIME - DETROIT, April 9 - Chrysler Corp said one of its U.S. car -and truck assembly plants will work overtime next week. - Six of its seven U.S. facilities will work during the week. -The plant on overtime, both during the week and on Saturday, -April 11, is the company's Sterling Heights, Mich., factory. - The company's U.S. plants and offices will be closed -Friday, April 17, and Monday, April 20, for the Good Friday and -Martin Luther King Jr. holidays. - Reuter - - - - 9-APR-1987 18:19:25.11 - -usa - -ec - - - -C G -f2817reute -d f BC-EC-WARNS-AGAINST-PASS 04-09 0131 - -EC WARNS AGAINST PASSAGE OF TEXTILE BILL - WASHINGTON, April 9 - The European Community (EC) will -retaliate against U.S. textile exports if Congress passes trade -legislation damaging European interests, an EC official warned -today. - Roy Denman, head of the EC delegation here, issued the -warning in a letter to Senator Lloyd Bentsen, chairman of the -Finance Committee. A copy was provided to Reuters. - The bill, backed by the textile industry and senators from -textile-producing states, would impose global quotas on textile -imports and for the first time include Europe. - Denman said he was concerned about provisions in the bill -that would limit, if not eliminate, the president's discretion -in retaliating against nations that keep their home markets -closed to foreign goods. - Reuter - - - - 9-APR-1987 18:20:35.91 -shipcrude -usa - - - - - -C -f2818reute -u f BC-ny-tankers 04-09 0084 - -N.Y. TANKERS - April 9 - Tennaco took Nicopolis part cargo 50,000 tons dirty April -12 Caribbean to U.S. Gulf worldscale 130 - Exxon took Brazil Glory 77,000 tons dirty April 17 East -Coast Mexico to U.S. Atlantic Coast worldscale 75 - Champlin took Tamba Maru part cargo 57,000 tons crude April -18 Caribbean to U.S. Gulf worldscale 105 - Pecten took World Cliff part cargo 74,500 tons dirty April -14 Sullom Voe to U.S. Atlantic Coast/U.S. Gulf worldscale 70 -for Atlantic Coast worldscale 67.5 for Gulf - Crown Petroleum took British Skill (Gotco relet) part cargo -100,000 tons dirty April 18 West Africa to U.S. Gulf worldscale -63 - Oroleum took Marika P. part cargo 59,000 tons dirty April -16 Caribbean to U.S. Atlantic Coast/U.S. Gulf rate not reported - Reuter - - - - - - 9-APR-1987 18:21:04.22 -acq -usa - - - - - -F -f2819reute -d f BC-WINTERHALTER-<WNTLC> 04-09 0044 - -WINTERHALTER <WNTLC> HOLDERS OKAY TAKEOVER - ANN ARBOR, Mich., April 9 - Winterhalter Inc said its -shareholders approved the 525,000 dlr acquisition of -Winterhalter by Interface Systems Inc <INTF>. - The acquisition would be for 15 cts per Winterhalter share. - Reuter - - - - 9-APR-1987 18:24:01.68 - -usa - - - - - -F -f2822reute -d f BC-LIBERTY-FINANCIAL-<LF 04-09 0078 - -LIBERTY FINANCIAL <LFG> PRESIDENT TO RESIGN - HORSHAM, Pa., April 9 - Harold H. Kline, 48, will resign on -May one as president of Liberty Financial Group Inc and its -Liberty Savings Bank unit to pursue other business -opportunties, the company said. - The company said Kline's post will be filled by Charles G. -Cheleden, chairman and chief executive officer. - Kline will continue to serve on the boards of Liberty -Financial and Liberty Savings, the company added. - Reuter - - - - 9-APR-1987 18:25:31.98 - -usa - - - - - -F -f2824reute -r f BC-IMMUNOMEDICS-<IMMU>-T 04-09 0105 - -IMMUNOMEDICS <IMMU> TO SELL COMMON STOCK - NEWARK, N.J., April 9 - Immunomedics Inc said it filed a -registration statement with the Securities and Exchange -Commission for the proposed sale of 2,500,000 shares of common -stock. - The company said it will sell 2,100,000 shares and that -certain stockholders will sell the remaining 400,000 shares. - Proceeds from the offering will be used for product -development, basic research, staff expansion, prepayment of -debt, capital expenditures and working capital, the company -said. The offering will be co-managed by E.F. Hutton and Co Inc -and First Boston Corp, Immunomedics said. - Reuter - - - - 9-APR-1987 18:29:26.90 - -usa - - - - - -F Y -f2826reute -u f BC-MOBIL-(MOB)-WILL-NOT 04-09 0095 - -MOBIL <MOB> WILL NOT INCREASE BUDGET - DALLAS, April 9 - Mobil Corp Chairman Allen E. Murray said -the company's exploration and production budget would not be -increased in the foreseeable future as it is "operating on the -assumption that (oil) prices will remain on the lower end of -the spectrum. - "Our budget is at about the same level as it was last year -and I think it is the right amount," said Murray who was in -town for ceremonies celebrating the consolidation of Mobil's -domestic exploration and production operations into a new, -locally-based subsidiary. - Last year, Mobil spent a total of 2.13 billion dlrs on -exploration and production, 341 mln dlrs in the United States -and 1.79 billion overseas. - Murray said the new subsidiary, Mobil Exploration and -Production U.S. Inc., was not created as "part of any cost -saving effort" but instead to "increase our efficiency and -ability to stay ahead of the pack." - The consolidation will, however, save Mobil about 15 mln -dlrs annually once relocation and reorganization costs have -been absorbed, according to A.F. Stancell, vice president of -U.S. producing operations for the company. - Mobil, the nation's second largest oil company, responded -to the collapse of oil prices last year -- from 30 dlrs a -barrel at end-1985 to as low as 10 dlrs in mid-1986 -- by -laying off 5,500 people and cutting its budget in midyear by 27 -percent, or 1.1 billion dlrs. - Of that amount, more than 900 mln dlrs was eliminated from -its exploration and spending spending plans. - But the company reported an increase in profits in 1986 -over 1985 and a jump in per share earnings to 3.45 dlrs a share -from 2.55 dlrs. - Reuter - - - - 9-APR-1987 18:31:32.77 -earn -canada - - - - - -E F -f2833reute -d f BC-<american-eagle-petro 04-09 0030 - -<AMERICAN EAGLE PETROLEUMS LTD> YEAR LOSS - Calgary, Alberta, April 9 - - Shr loss 10 cts vs profit 17 cts - Net loss 1,546,000 vs profit 4,078,000 - Revs 22.6 mln vs 38.9 mln - Reuter - - - - 9-APR-1987 18:33:20.67 - - -james-baker - - - - -V RM -f2836reute -f f BC-******TREASURY'S-BAKE 04-09 0011 - -******TREASURY'S BAKER SAYS DEBTOR NATIONS NEED TIMELY DISBURSEMENTS -Blah blah blah. - - - - - - 9-APR-1987 18:36:11.47 - -usa - - - - - -F -f2837reute -r f BC-GM'S<GM>-HUGHES-AIRCR 04-09 0091 - -GM'S<GM> HUGHES AIRCRAFT HAS BOEING<BA> CONTRACT - IRVINE, Calif, April 9 - General Motors' Hughes Aircraft Co -said it was awarded a contract worth more than 20 mln dlrs by -Boeing's Boeing Commercial Airplane Co to provide an advanced -cabin entertainment and service system for Boeing's new 747-400 -airliners. - Hughes said the new system uses advanced digital electronic -techniques and also adds cabin lighting control, cabin advisory -signs and seat information. - Hughes said the first 747-400 is scheduled to be completed -in early 1988. - - Reuter - - - - 9-APR-1987 18:36:43.22 - -usa -reagan - - - - -V -f2838reute -u f BC-REAGAN-HITS-HOUSE-PAS 04-09 0070 - -REAGAN HITS HOUSE-PASSED BUDGET - WEST LAFAYETTE, Ind, April 9 - President Reagan criticized -the House-passed budget by saying the Democratic budget plan -was just business as usual. - The budget cut defense by eight billion dlrs and called for -18 billion dlrs in new taxes. - He said the defense cut potentially theratened national -security and was asking the American taxpayers to pay for the -Democrats' excesses. - Reuter - - - - 9-APR-1987 18:36:56.22 - -usa - - - - - -RM A -f2839reute -r f BC-S/P-DOWNGRADES-ZENITH 04-09 0053 - -S/P DOWNGRADES ZENITH ELECTRONIC <ZE> - NEW YORK, April 9 - Standard and Poor's said it lowered its -rating on 190 mln dlrs of Zenith Electronic Corp debt because -of continued poor earnings results and increased debt leverage. - Among the rating changes, the company's senior debt was -lowered to BB-plus from BBB-plus. - Reuter - - - - 9-APR-1987 18:39:02.17 - -usa - - - - - -RM A -f2841reute -r f BC-MOODY'S-DOWNGRADES-RE 04-09 0102 - -MOODY'S DOWNGRADES REPUBLICBANK <RPT> - NEW YORK, April 9 - Moody's Investors Service said it -lowered the ratings on 464 mln dlrs of long-term debt issued by -RepublicBank Corp and its two principal subsidiaries but -upgraded 451 mln dlrs of securities of Interfirst Corp <IFC>. - The rating adjustments are based on the likelihood that the -proposed merger of the two Texas banks will be consummated. -Moody's said Interfirst is considerably the weaker of the two -institutions. - Among the rating changes, RepublicBank's senior debt was -downgraded to BA-1 from BAA-1 while Interfirst's was raised to -BA-1 from B-1. - Reuter - - - - 9-APR-1987 18:39:51.11 - -usa -james-baker -imf - - - -V RM -f2842reute -b f BC-TREASURY'S-BAKER-CALL 04-09 0092 - -TREASURY'S BAKER CALLS FOR MORE BANK FLEXIBILITY - WASHINGTON, April 9 - Treasury Secretary James Baker said -that commercial banks need to develop more flexibility in their -concerted lending mechanisms "to help assure continued -participation in new money packages." - He said that major debtor nations need to be able to count -on receiving timely disbursements on new loans essential to -support well-conceived economic programs. - His remarks were made to the afternoon session of the -International Monetary Fund's policy making Interim Committee. - Baker said, "The sense of urgency and willingness to -cooperate in support of a larger general interest that helped -to carry us through the difficult crisis period of 1982 and -1983 is now less evident." - He said to address this problem, it is important for the -commercial banks to "develop a menu of alternative new money -options from which all banks with debt exposure can choose in -providing continuing support for debtor reforms." - He said the "continued implementation of the debt strategy -may well rest on their doing so." - Baker also said that growth prospects for the lowest income -countries remain an issue of "critical concern to the United -States." - He said that he intended to address the problem of poor -country prospects in greater detail at tomorrow's meeting of -the joint IMF-World Bank Devlopment Committee. - Baker said, however, that ministers should guard against -what appear to be magical solutions to the complex debt -problem. - "I want to stress the need for all to guard against the -ephemeral attraction of magical solutions, which may appear as -tantalizing alternatives to the rigorous realities of grappling -with our debt problems," he said. - But he emphasized that the only lasting progress is to -approach each situation on a case-by-case basis, "bringing to -bear the policies and financing needed to bring the economy -back to sustained economic growth." - Reuter - - - - 9-APR-1987 18:41:59.03 -trade -chile - - - - - -RM A -f2844reute -u f BC-chilean-trade-surplus 04-09 0107 - -CHILEAN TRADE SURPLUS NARROWS SLIGHTLY IN FEBRUARY - Santiago, april 9 - chile's trade surplus narrowed to 102.2 -mln dlrs in february, from 105.4 mln dlrs in the same month -last year, but it was above the 18.2-mln-dlr surplus recorded -in january 1987, the central bank said. - Exports in february totalled 379.4 mln dlrs, 17.2 pct above -the january figure. Imports fell 9.2 pct from the previous -month to 277.2 mln dlrs. The figures for the same month last -year were 314 mln and 208.6 mln dlrs, respectively. - The accumulated trade surplus over the first two months of -1987 stands at 120.4 mln dlrs against 132.8 mln dlrs the -previous year. - Reuter - - - - 9-APR-1987 18:42:19.11 -interestmoney-fxdlr -usa - - - - - -RM A -f2845reute -u f BC-ANALYSTS-DOUBT-FED-FI 04-09 0112 - -ANALYSTS DOUBT FED FIRMED DESPITE BORROWING RISE - By Martin Cherrin, Reuters - NEW YORK, April 9 - Economists said that they doubt the -Federal Reserve is firming policy to aid the dollar, despite -higher discount window borrowings in the latest two-week -statement period and very heavy borrowings Wednesday. - Data out today show net borrowings from the Fed averaged -393 mln dlrs in the two weeks to Wednesday, up from 265 mln -dlrs in the prior statement period. Wednesday borrowings were -1.4 billion dlrs as Federal funds averaged a high 6.45 pct. - "One could make a case that the Fed is firming, but it -probably isn't," said William Sullivan of Dean Witter Reynolds. - Sullivan said some may assume the Fed has firmed policy -modestly to support the dollar because net borrowings in the -two-weeks to Wednesday were nearly 400 mln dlrs after averaging -around 250 mln dlrs over the previous two months. - However, the Dean Witter economist noted that the latest -two-week period included a quarter end when seasonal demand -often pushes up borrrowings. - "Some might argue that the Fed was firming policy, but it -looks like it tried to play catchup with reserve provisions -late in the statement period and didn't quite make it," said -Ward McCarthy of Merrill Lynch Capital Markets. - A Fed spokesman told a press press conference today that -the Fed had no large net one-day miss of two billion dlrs or -more in its reserve projections in the week ended Wednesday. - Still, McCarthy said it may have had a cumulative miss in -its estimates over the week that caused it to add fewer -reserves earlier in the week than were actually needed. - The Fed took no market reserve management action last -Thursday and Friday, the first two days of the week. It added -temporary reserves indirectly on Monday via two billion dlrs of -customer repurchase agreements and then supplied reserves -directly via System repurchases on Tuesday and Wednesday. - Based on Fed data out today, economists calculated that the -two-day System repurchase agreements the Fed arrranged on -Tuesday totaled around 5.9 billion dlrs. They put Wednesday's -overnight System repos at approximately 3.4 billion dlrs. - "It is quite clear that the Fed is not firming policy at -this time," said Larry Leuzzi of S.G. Warburg and Co Inc. - Citing the view shared by the other two economists, Leuzzi -said the Fed cannot really afford to seriously lift interest -rates to help the dollar because that would harm already weak -economies in the United States and abroad and add to the -financial stress of developing countries and their lenders. - "Those who believe the Fed tightened policy in the latest -statement period have to explain why it acted before the dollar -tumbled," said McCarthy of Merrill Lynch. - He said the dollar staged a precipitous drop as a new -statement period began today on disappointment yesterday's -Washington meetings of international monetary officials failed -to produce anything that would offer substantive dollar aid. - In fact, currency dealers said there was nothing in -Wednesday's G-7 communique to alter the prevailing view that -the yen needs to rise further to redress the huge trade -imbalance between the United States and Japan. - The economists generally agreed that the Fed is aiming for -steady policy now that should correspond to a weekly average -Fed funds rate between six and 6-1/8 pct. This is about where -the rate has been since early November. - "I'm not so sure that the Fed is engineering a tighter -policy to help the dollar, as some suspect," said Sullivan of -Dean Witter. - If it is, however, he said that Fed probably has just -nudged up its funds rate goal to around 6.25 to 6.35 pct from -six to 6.10 pct previously. - Reuter - - - - 9-APR-1987 18:45:25.86 - -usapakistan - -worldbank - - - -RM -f2848reute -r f BC-PAKISTAN-GETS-70-MLN 04-09 0105 - -PAKISTAN GETS 70 MLN DLR WORLD BANK LOAN - WASHINGTON, April 9 - The World Bank said it approved a 70-mln-dlr, 20-year loan to assist Pakistan in a project designed -to improve power plant efficiency. - Noting that a shortage of power constrains Pakistan's -economic development, the Bank said one objective of the -project is to provide at least 200 megawatts of additional -generating capacity. - Another objective is to improve the efficiency with which -hydrocarbons are used by Pakistan's Water and Power Development -Authority (WAPDA) in power production, it said. One effect of -this would be reduced atmospheric pollution. - Reuter - - - - 9-APR-1987 18:47:26.32 -earn -usa - - - - - -F -f2853reute -h f BC-VALEX-PETROLEUM-INC-< 04-09 0042 - -VALEX PETROLEUM INC <VALP> YEAR DEC 31 - DENVER, Colo, April 9 - - Shr loss six cts vs loss 84 cts - Net loss 219,632 vs loss 16.3 mln - Revs 1.4 mln vs 2.8 mln - NOTE:1985 net includes 15.5 mln dlrs of writedowns and tax -benefit of 51,294. - - Reuter - - - - 9-APR-1987 18:50:11.20 - -usa - - - - - -F -f2855reute -h f BC-VALEX-PETROLEUM-<VALP 04-09 0052 - -VALEX PETROLEUM <VALP> RECLASSIFIES DEBT - DENVER, Colo, April 9 - Valex Petroleum Inc said its 1.3 -mln dlrs in long-term debt with a commercial bank was -reclassified as a current liability, which resulted in its -auditors giving it a qualified opinion. - Earlier, Valex reported a net loss 219,632 for 1986. - Reuter - - - - 9-APR-1987 18:52:32.99 - -usa - - - - - -F -f2856reute -h f BC-DATA-ARCHITECTS-<DRCH 04-09 0052 - -DATA ARCHITECTS <DRCH> TO MAKE OFFERING - WALTHAM, Mass, April 9 - Data Architects inc said it -intends to make a public offering of 850,000 shares of its -common stock, of which 672,000 shares will be sold by the -company and 178,000 by certain shareholders. - Proceeds will be used for general corporate purposes. - Reuter - - - - 9-APR-1987 18:58:51.24 - -usa - - - - - -F -f2860reute -h f BC-FIVE-DIRECTORS-OF-TER 04-09 0051 - -FIVE DIRECTORS OF TERRAPET ENERGY RESIGN - DALLAS, April 9 - <Terrapet Energy Corp> said five -directors resigned because they could not obtain directors and -officers liability insurance. - It said the directors are Dean R. Fellows, Frederick B. -Hegi Jr, W.D. Masterson, Thomas Sturgess and John C. Thomas. - Reuter - - - - 9-APR-1987 19:03:16.01 - -usa - - - - - -F -f2863reute -u f BC-GOLDMAN,-SACHS-COMMEN 04-09 0109 - -GOLDMAN, SACHS COMMENTS ON FREEMAN INDICTMENT - NEW YORK, April 9 - Goldman, Sachs and Co, responding to -the indictment earlier today of Robert M. Freeman, who remains -head of its risk arbitrage unit, said it believes the -44-year-old executive did not violate insider trading laws. - "Based on all we now know, we continue to believe in him -and to believe that he did not act illegally," the company said -in a statement. - Freeman was indicated by a federal grand jury along with -two other top Wall Street executives, Richard Wigton and -Timothy Tabor, for allegedly swapping insider information in a -scheme that produced millions in illegal profits. - The company said it based in belief in Freeman's innocence -on an investigation conducted by its independent outside -counsel after Freeman was arrested in February. - Reuter - - - - 9-APR-1987 19:05:53.65 - -usamauritius - -worldbank - - - -A RM -f2867reute -r f BC-MAURITIUS-GETS-25-MLN 04-09 0091 - -MAURITIUS GETS 25 MLN DLR WORLD BANK LOAN - WASHINGTON, April 9 - The World Bank said it approved a 25 -mln dlr structural adjustment loan for Mauritius to aid that -country's industrial sector. - The Bank said the 17-year loan will support policy reforms -designed to help increase the efficiency of the country's -manufacturing sector, develop export enterprises and encourage -efficient use of resources. - It added, "The increased availability of foreign exchange -for imports is expected to help the expansion of industrial -output and exports." - Reuter - - - - 9-APR-1987 19:24:29.96 - -canada - - -tose - - -E -f2871reute -r f BC-power 04-09 0119 - -TORONTO FINANCIAL DISTRICT HIT BY POWER OUTAGE - TORONTO, April 9 - Toronto's financial district, the -business heart of Canada, slowed to a near halt this afternoon -after being struck by a power blackout, utility and business -officials said. - The blackout occurred around 1515 EDT in about an -eight-square-block section of the city's downtown core, home to -most of the city's skyscrapers, containing the headquarters of -many of Canada's major corporations and financial institutions. - Ontario Hydro spokeswoman Christina Warren told Reuters the -blackout occurred when a transformer cable went down during -routine maintenance at a downtown hydroelectricity station. -Power was restored after 10 minutes. - The power loss halted floor trading for 15 minutes on the -Toronto Stock Exchange, Canada's largest equity market, -although computerized trading - accounting for about 20 per -cent of the Exchange's normal volume - continued, Toronto Stock -Exchange official John Kolosky said. - Bank operations were also affected. The headquarters or -major offices of Canada's six major banks line a small section -of Bay Street, the Wall Street of Canada. - Bank of Montreal spokesman Brian Smith told Reuters the -blackout shut down electronic banking machines and caused a -minor slowdown in money trading operations, although "all in all -we were not seriously affected." - Officials at various downtown skyscrapers said the blackout -also briefly shut down elevators and disrupted business in the -downtown core's extensive network of underground shopping -malls. - Workers at some of the buildings said several people were -briefly trapped on elevators, but police and firefighters -reported no serious problems. - Reuter - - - - 9-APR-1987 19:36:34.99 - -usa - - - - - -A RM -f2876reute -r f BC-U.S.-THRIFT-OFFICIAL 04-09 0119 - -U.S. THRIFT OFFICIAL URGES MORE LENDER INSURANCE - NEW YORK, April 9 - The Administration's 15 billion dlr -plan to recapitalize the Federal Savings and Loan Insurance -Corporation is needed to ensure the future profitablity of the -U.S. thrift industry, according to a top industry regulator. - "Today thrifts in overwhelming numbers are profitable," -Shannon Fairbanks, executive chief of staff of the Federal Home -Loan Bank Board told a thrift industry conference. - "But every thrift is paying a market tax for the inabliity -of regulators to deal with problems carried forward from the -past," she said, referring to the premium that thrifts have to -pay in the marketplace to entice deposits away from banks. - "The industry wants to see a five billion dlr plan passed -now, and then to wait and see what happens," Fairbanks said. -"They're saying, 'we don't want to pay more right away.' The -argument is that it's a drain on the industry." - "But the dollars paid out can be recaptured in the -reduction in the market tax differential," she said. "The cost -of recapitalization to the industry would be recaptured in -bottom line profitability." - Fairbanks said that the public's confidence in thrift -instititutions eroded with the financial difficulties of -savings and loan associations in Ohio and Maryland in 1985. - As thrift institutions in economically distressed areas -like Texas have continued to fall on hard times, this has -increased depositors' demand for a higher premium on deposits -in savings and loans compared with premiums paid on deposits in -commercial banks, she said. - Before 1983, thrift institutions paid a 25 basis point -yield differential on savings deposits over that offered by -commercial banks as mandated by U.S. financial regulations. - With the elimination in 1983 of regulations that had drawn -strict lines between savings and loans and commercial banks, -the gap widened to as much as 50 to 75 basis points as wary -depositors demanded a higher premium to place their funds in -thrift institutions, Fairbanks said. - "The market tax paid by today's thrift industry is the most -significant impediment to future profits," she said. - Depositor confidence is also eroded by the existence of -thrifts that are failing but manage to stay in business by -paying deposit rates well above prevailing market rates. - Presently, the FHLBB cannot afford to close failing -institiutions "because we can't afford it with the current -FSLIC fund," she said. - Fairbanks estimated that the high market tax differential -paid by thrifts will drop by at least 10 to 20 basis points -with an adequate recapitalization of FSLIC because it will help -restore this lost confidence. - Reuter - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-017.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-017.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-017.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-017.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2014 +0,0 @@ - - -21-APR-1987 11:35:01.50 -coffee -ukbrazil -dauster - - - - -C T -f1400reute -b f BC-IBC-COFFEE-AUCTIONS-T 04-21 0115 - -IBC COFFEE AUCTIONS TO START SOON - DAUSTER - LONDON, April 21 - The Brazilian Coffee Institute, IBC, -plans to sell in a series of auctions over the next few weeks -robusta coffee purchased in London last year, but details of -where and when auctions will take place are still to be -finalised, IBC president Jorio Dauster told reporters. - The sales of 630,000 bags of robusta and an unspecified -amount of Brazilian arabica coffee will take place over a -minimum of six months but it is not decided where sales will -take place or whether they will be held weekly or monthly. - The amount offered at each sale has also not been set, but -could be in the order of 100,000 bags, Dauster said. - Reuter - - - -21-APR-1987 11:37:33.52 - -canada - - - - - -E -f1416reute -u f BC-AMCA-(AIL)-NAMES-NEW 04-21 0054 - -AMCA (AIL) NAMES NEW CHAIRMAN - TORONTO, April 21 - AMCA International Ltd said it -appointed president and chief executive officer WIlliam Holland -to succeed Kenneth Barclay as chairman. - Barclay, who is 60 years old, decided not to stand for -reappointment as chairman this year but will continue as a -director, AMCA said. - Reuter - - - -21-APR-1987 11:38:04.12 -crude -usa - - - - - -Y -f1418reute -u f BC-API-OIL-INVENTORY-REP 04-21 0081 - -API OIL INVENTORY REPORT TO BE ISSUED TONIGHT - NEW YORK, APRIL 21 - The American Petroleum Institute, API, -said its weekly U.S. petroleum inventory report will be issued -tonight, despite many company closures on Friday of last week -for the Easter holiday. - The API report is usually released around 1700 EDT on -Tuesday nights. - The Energy Information Administration said it also expects -its weekly oil statistic report to be released as usual, on -Wednesday night at about 1700 EDT. - Reuter - - - -21-APR-1987 11:44:00.53 -acq -usa - - - - - -F -f1442reute -u f BC-FAIRCHILD 04-21 0095 - -SORO GROUP TO LIMIT FAIRCHILD <FEN> STOCK BUYS - WASHINGTON, April 21 - Quantum Fund N.V., a Netherlands -Antilles mutual fund for which New York investor George Soros -is investment adviser, said it has agreed to limit further -purchases of Fairchild Industries Inc stock. - In a filing with the Securities and Exchange Commission, -Quantum, which already holds 1,647,481 Fairchild common shares, -or 11.5 pct of the total outstanding, said it agreed to the -restriction after Fairchild said its security clearance might -be jeopardized if Quantum acquires a major stake in it. - But Quantum said Fairchild management was told that Soros, -acting either individually or through entities other than -Quantum that he controls, may decide to buy common stock in the -company on his own behalf. - Quantum had recently notified the Federal Trade Commission -under the Hart-Scott-Rodino Antitrust Improvements Act of 1976 -that it might buy up to 49.9 pct of Fairchild's voting stock. -Unless the FTC had objected, Quantum would have been free, but -not obligated, to buy up to 49.9 pct of Fairchild stock. - Fairchild management, however, warned that if Quantum, a -foreign entity, raises its stake in the company to 49.9 pct, it -could "impair" the government security clearances Fairchild -needs to carry out its its defense contract work. - In response, Quantum said it told Fairchild it will not -make "significant additional purchases" of its common or -preferred stock without giving Fairchild enough prior notice to -enable it to consult with Quantum over the impact of action. - Quantum also said it has withdrawn its notification request -to the FTC and the antitrust division of the Justice Department -of its intent to buy up to 49.9 pct of Fairchild. - Quantum also said it told the FTC and the Justice -Department that it does not expect to resubmit any further -notifications of intent to significantly raise its stake in -Fairchild at this time. - The restrictions Quantum has agreed to follow regarding -further dealings in Fairchild stock do not apply to Soros as an -individual investor. - Fairchild's annual shareholders meeting is scheduled to be -held tomorrow. - Reuter - - - -21-APR-1987 11:45:56.03 -money-fx -usa - - - - - -V RM -f1446reute -b f BC-/-FED-ADDS-RESERVES-V 04-21 0059 - -FED ADDS RESERVES VIA TWO-DAY REPURCHASES - NEW YORK, April 21 - The Federal Reserve entered the U.S. -Government securities market to arrange two-day System -repurchase agreements, a Fed spokesman said. - Dealers said that Federal funds were trading at 6-7/16 pct -when the Fed began its temporary and direct supply of reserves -to the banking system. - Reuter - - - -21-APR-1987 11:49:31.32 - -usa - - -nasdaq - - -F -f1466reute -d f BC-CAPITAL-ASSOCIATES-<C 04-21 0053 - -CAPITAL ASSOCIATES <CAII.O> TO TRADE ON NASDAQ - COLORADO SPRINGS, Colo., April 21 - Capital Associates Inc -said its common stock will be included in NASDAQ's national -market system, starting today. - Capital Associates is an equipment leasing and financial -service company with headquarters in Colorado Springs, Colo. - Reuter - - - -21-APR-1987 11:52:37.63 -copper -usa - - - - - -C M -f1486reute -u f BC-/MINT-REVIEWS-OFFERS 04-21 0105 - -MINT REVIEWS OFFERS ON 3,701,000 LBS COPPER - WASHINGTON, April 21 - The U.S. Mint received 17 offers -from seven firms at prices ranging from 0.66845-0.6840 dlrs per -lb for payment by standard check and 0.66695-0.68 dlrs per lb -for wire transfer payment in a review of offers on 3,701,000 -lbs of electrolytic copper it is seeking to purchase. - Philipp Brothers, N.Y., led with the lowest offers of -0.66695 for wire transfer payment and 0.66845 dlrs per lb to be -paid by check, followed by Cerro Sales Corp, N.Y., with 0.6684 -dlrs per lb on one mln lbs for wire payment, and 0.6713 dlrs -per lb on one mln lbs for standard payment. - Firms, in submitting offers, elect to be paid by standard -check or wire transfer, with awards based on whichever of the -two methods is more cost advantageous at that time. - Cerro Sales also offered prices for wire payment of 0.6689 -dlrs per lb on one mln lbs and 0.6693 dlrs per lb on 1,701,000 -lbs. Cerro's standard payment offers included 0.6719 dlrs per -lb on one mln lbs and 0.6723 dlrs per lb on 1,701,000 lbs. - Cargill Metals, Minneapolis, offered 0.67025 dlrs per lb -for wire payment and 0.67275 dlrs per lb for standard payment, -while Elders Raw Materials, Darien, Ct., offered 0.6718 dlrs -per lb for wire payment and 0.6735 dlrs per lb for standard -payment on increments of 950,000 lbs each. - Other offers for wire transfer payment include 0.6759 dlrs -per lb on 380,000 lbs, submitted by Deak International, N.Y., -0.6789 dlrs per lb on the entire quantity by Diversified Metals -Corp, St. Louis, and 0.68 dlrs per lb by Gerald Metals, -Stamford, Ct. - Other standard payment offers include 0.6819 dlrs per lb on -950,000 lbs by Diversified Metals, and 0.6840 dlrs per lb on -the entire quantity by Gerald Metals. - The Mint said the copper is for delivery the week of May 11 -to Olin Corp, East Alton, Ill. - The offers have a minimum acceptance period of three -calendar days, it said. - Reuter - - - -21-APR-1987 11:55:33.03 - -canada - - - - - -E F -f1500reute -r f BC-ahed-<aHM.TO>-may-iss 04-21 0076 - -AHED <AHM.TO> MAY ISSUE ONE MLN SHARES - Toronto, April 21 - Ahed Corp said it began discussions -with an investment dealer about issuing an additional one mln -treasury shares in the near future. - Ahed also said it believes recent increases in its stock -price could be attributable to a published report describing -the activities of the company. - Ahed said no other events are known to have taken place -which would cause these recent price increases. - Reuter - - - -21-APR-1987 11:55:57.82 - -usa - - - - - -F -f1503reute -r f BC-U.S.-WEST-<USW>-INTRO 04-21 0082 - -U.S. WEST <USW> INTRODUCES DATA NETWORK PRODUCT - NEW YORK, April 21 - U.S. WEST INC said it introduced its -first product for managing data networks, called the NETCENTER -graphic network monitor. - The product was developed by U.S. WEST Network Systems Inc, -a subsidiary of U.S. WEST INC, it said. It will be distributed -in the third quarter of 1987. - The company said the product is aimed at companies with IBM -SNA networks, and will allow customers control over their own -networks. - - The initial license fee for a typical configuration will be -in the 100,000 dlr to 300,000 dlr range, depending on the size -of the network, the company said. - Reuter - - - -21-APR-1987 12:04:11.03 -grainwheatbarleyoilseedrapeseed -france - - - - - -C G -f1537reute -u f BC-FRENCH-WINTER-CEREAL 04-21 0106 - -FRENCH WINTER CEREAL SOWING SEEN LITTLE CHANGED - PARIS, April 21 - The Ministry of Agriculture left its -estimates of French winter cereal sowings for the 1986/87 -campaign barely changed at 6.606 mln hectares compared with its -previous forecast of 6.601 mln. - This compared with the 6.41 mln ha of winter cereals -harvested in the 1985/86 campaign. - Winter soft wheat sowings were put at 4.647 mln ha compared -with its previous estimate of 4.651 mln and 4.57 mln ha -harvested last campaign. Winter barley plantings were forecast -at 1.46 mln ha, unchanged from its previous estimate and -compared with 1.41 mln harvested last season. - The ministry put hard winter wheat sowings at 246,000 ha -versus a February 1 estimate of 236,000 and actual area -harvested last campaign of 217,000. - Winter rape plantings were forecast at 627,000 ha against a -previous estimate of 621,000 and 375,000 rpt 375,000 harvested -in 1985/86. - Reuter - - - -21-APR-1987 12:11:18.43 -gold -canada - - - - - -F -f1591reute -r f BC-ENERGEX-MINERALS-<EGX 04-21 0101 - -ENERGEX MINERALS <EGX> MAY RUN UP TO THREE PITS - VANCOUVER, British Columbia, April 21 - Energex Minerals -Ltd said economic evaluation of reserves indicates high-grade -operation from three open pits may be feasable based on -five-year operation at 100 tons a day, a payback of less than -1-1/2 years. - An increase in the project's life, profitability and scale -is anticipated as additional reserves are developed in 1987, -the company said. - Current reserves are one mln long tons at 0.20 ounce gold -per ton, all categories; proven-probable 262,242 long tons at -0.25 ounce gold per ton, the company said. - Reuter - - - -21-APR-1987 12:13:27.73 -acq -canada - - - - - -E F Y -f1605reute -r f BC-dome-<dmp>-executives 04-21 0083 - -TURNER TO MEET WITH DOME <DMP> EXECUTIVES - Ottawa, April 21 - Liberal Party leader John Turner said he -will meet with senior executives of Dome Petroleum Ltd in -Calgary tomorrow to discuss the proposed sale of Dome. - Turner's office said he will hold a news conference -tomorrow at 1400 MDT (1600 EDT) in Calgary. - Turner, who is opposition leader in Parliament, has -criticized Dome's acceptance of a 5.1 billion dlr takeover bid -from Amoco Corp <AN> as a sell-out of Canada's oil industry. - Reuter - - - -21-APR-1987 12:13:34.25 - -usa - - - - - -F -f1606reute -r f BC-NEW-YORK-TIMES-<NYT> 04-21 0079 - -NEW YORK TIMES <NYT> SEES UNEVEN GAINS IN 1987 - HUNTSVILLE, Ala., April 21 - The New York Times Co said -that if prevailing business conditions continue, the company -sees "another outstanding year, although the remaining quarters -of 1987 will probably not show uniform gains." - The company's first quarter earnings rose 21 pct to 41.1 -mln dlrs or 50 cts a share compared to 33.9 mln dlrs or 42 cts -a share in the year-ago quarter restated for a two-for-one -stock split. - - The company also said its newspaper division, which -includes the New York Times and 32 regional newspapers, had a -first quarter operating profit of 69.8 mln dlrs compared with -60.7 mln dlrs in the year-ago first quarter mainly due to -advertising volume and rate increases. - The company's magazine division, which includes "Family -Circle," had a first quarter profit of 9.7 mln dlrs compared to -7.4 mln dlrs in the year ago quarter. - The company's broadcasting and cable tv group reported an -operating profit of 2.9 mln dlrs compared to 2.6 mln dlrs in -the year-ago first quarter. - Reuter - - - -21-APR-1987 12:14:27.18 - -usa - - - - - -F A RM -f1611reute -u f BC-BANKERS-TRUST-<BT>-TI 04-21 0115 - -BANKERS TRUST <BT> TIES NET TO CURRENCY EARNINGS - NEW YORK, April 21 - Bankers Trust New York Corp said its -first quarter foreign exchange trading income rose to 82.8 mln -dlrs from 20.9 mln dlrs in the first qtr of 1986, offsetting -the bank's 7.4 mln dlr loss incurred from placing 540 mln dlrs -of Brazilian loans on a non-accrual status. - Earlier, the bank reported that first quarter net income -increased to 124.2 mln dlrs, or 1.77 dlrs a share, from 115.9 -mln dlrs, or 1.64 dlrs a share, a year ago. - Bankers Trust chairman Alfred Brittain III said increased -non-interest income, a lower provision for loan-losses and -increased net interest income also helped first quarter net. - - Bankers Trust previously announced that the 540 mln dlrs in -non-accruable Brazilian loans would cut its first quarter -earnings by 7.4 mln dlrs, and could slice about 30 mln dlrs -from the full year's net. - Bankers Trust said non-interest income in the first quarter -equaled 275.4 mln dlrs, up 37.1 mln dlrs from a year ago. - Loan losses fell in the quarter to 22 mln dlrs, versus 40 -mln dlrs a year ago while taxable net interest income remained -flat at 266 mln dlrs, the bank said. - Reuter - - - -21-APR-1987 12:15:12.80 -acq -usa - - - - - -F Y -f1618reute -r f BC-ALTEX-<AII>-TO-SELL-O 04-21 0072 - -ALTEX <AII> TO SELL OILFIELD SERVICES ASSETS - DENVER, April 21 - Altex Industries Inc said it agreed to -sell the assets of its wholly-owned oilfield service -subsidiary, Parrish Oil Tools Inc. - The price and buyer were not disclosed. - Altex said Parrish had a loss from operations of 428,000 -dlrs on revenues of 881,000 dlrs in fiscal 1986 and a loss from -operations of 48,000 dlrs on revenues of two mln dlrs in fiscal -1985. - Reuter - - - -21-APR-1987 12:17:02.35 - -usa - - - - - -F -f1633reute -r f BC-IMARK-INDS-<IMAR.O>-V 04-21 0041 - -IMARK INDS <IMAR.O> VOTES ANNUAL 25 CT DIVIDEND - GENESEO, ILL., April 21 - Imark Industries Inc said its -directors approved payment of an annual dividend of 25 cts on -May 21, record May seven. - The company paid the same dividend last year. - Reuter - - - -21-APR-1987 12:17:09.99 - -usa - - - - - -F -f1634reute -r f BC-DUQUESNE-LIGHT-<DQU> 04-21 0083 - -DUQUESNE LIGHT <DQU> HURT BY LEGISLATION - PITTSBURGH, APril 21 - Duquesne Light Co president Wesley -von Schack told shareholders that current state law and -regulatory policies will result in higher capital rates and -higher rates for customers. - "Pennsylvania's recently enacted excess capacity -legislation denies shareholders the opportunity to earn a fair -return on their investment and undermines economic development -in Pennsylvania," von Schack told shareholders at the annual -meeting. - - Von Schack said two major bond rating agencies have recently -downgraded Duquesne's credit rating due to regulatory -uncertainty. The action will result in higher capital rates and -higher rates for customers, he said. - He said the Pennsylvania Utility commission indicated in -its most recent rate case decision that even if newly -constructed Perry No. 1 nuclear plant was in commercial -operation, shareholders would be denied a return on their -investment in the plant. Von Schack called on shareholders to -join it and certain legislators' efforts to create a -partnership to fight these issues and resolve these problems. - - Reuter - - - -21-APR-1987 12:17:49.31 -interestmoney-fxgnp -kuwait - - - - - -RM -f1638reute -r f BC-CREATIVE-MONETARY-POL 04-21 0109 - -CREATIVE MONETARY POLICY TO SPUR KUWAITI ECONOMY - By Rory Channing, Reuters - KUWAIT, April 21 - Kuwait, a major oil producer hit by last -year's price slump, is leaning towards a more creative monetary -policy to help spur its economy, banking sources said. - "There is a clear emphasis on encouraging the use of money -in productive ventures, rather than having it all tied up in -interest bearing investments which have no direct productive -outlet," one banker said. - Kuwait's Central Bank yesterday cut one key money market -rate and abandoned another which had been used since February -1986 to direct inter-bank borrowing and lending costs. - The bank reduced to six pct from 6-1/2 pct the rate at -which it will offer funds of one month to one year in the -inter-bank market. This, in turn, affected retail rates. - The cut, the third this year, followed a major overhaul of -interest rate policy last month which Central Bank Governor -Sheikh Salem Abdul-Aziz al-Sabah said was designed to revive -the economy. - One banker said "There is growing flexibility, creativity, -in interest rate policy, amid an awareness of the need to -diversify the economy by stimulating the non-oil sector." - For the first time in nearly three years domestic interest -rates are now significantly below those for the U.S. Dollar, a -favourite haven for Gulf speculative and investor funds in the -past, banking sources said. - Despite uncertainties generated by the 6-1/2 year old Iran- -Iraq war on Kuwait's northern doorstep, bankers play down the -prospect of any significant capital flight. - The Kuwaiti dinar, whose value is set by the Central Bank -and was fixed today at 0.27095/129 to the dollar, is stronger -now than for several years. - Fears that the dollar may fall further will prompt second -thoughts among Kuwaiti investors prepared to consider switching -funds into the U.S. Currency, the sources said. - "There is a distinct exchange rate risk," they added. - Bankers said the dollar slump hurt many investors behind -the last major capital outflow in 1984, encouraged then by 18 -pct U.S. Interest rates and the start of Iranian attacks on -neutral shipping in the Gulf. - The Central Bank calculates its dinar exchange rate against -a basket of currencies. Bankers do not know the basket's exact -make-up but say it is weighted heavily in favour of the dollar. - Some bankers believe any strengthening of the dinar beyond -0.27000 to the dollar might provoke investors into shifting -funds into the U.S. Currency. "They may ask:When will the dollar -be so cheap again?" one said. - And with dinar interest rates now roughly one pct below -those for the dollar, they say the Central Bank faces a -delicate balancing role requiring further flexibility. - Bankers said the current, expansionary interest rate policy -is only part of a broader attempt to encourage local investment -and strengthen the backbone of the economy. - They estimate the economy, measured in terms of GDP and -allowing for inflation, shrank 19 pct in 1986 after an 8.1 pct -contraction the previous year. - Bankers also noted recent measures to stimulate stock -market activity, capped today by sharp cuts in brokerage fees -to make it cheaper for investors to trade. - REUTER - - - -21-APR-1987 12:23:33.91 - -usa - - - - - -F -f1672reute -r f BC-CSX-<CSX>-UNIT-CHAIRM 04-21 0065 - -CSX <CSX> UNIT CHAIRMAN RETIRES - WHITE SULPHUR SPRINGS, W. Va., April 21 - CSX Corp said -that Joseph Abely, chairman and chief executive officer of -CSX's Sea-Land Corp unit, will retire by the end of the month. - The company said he will be replaced by Robert Hintz, -executive vice president of CSX and president and chief -executive officer of the company's energy and properties -groups. - Reuter - - - -21-APR-1987 12:28:08.02 - -brazil - - - - - -F -f1702reute -d f BC-BRAZIL-FUND-SHOULD-ST 04-21 0095 - -BRAZIL FUND SHOULD START OPERATING SOON - SAO PAULO, April 21 - A Brazil Fund through which foreign -investors will be able to buy stocks in Brazilian companies -should start operating in about two months, the Securities and -Exchange Commission said. - A spokesman told Reuters that four institutions in the -United States were interested in participating in the Fund -- -Merrill Lynch and Co Inc, Salomon Brothers Inc, the IFC and the -First Boston Corp. - The spokesman said the Fund, approved last December, was -expected to attract about 100 mln dlrs of investments. - Reuter - - - -21-APR-1987 12:36:27.62 -oilseedrapeseed -japancanada - - - - - -C G -f1756reute -u f BC-JAPAN-BUYS-4,000-TONN 04-21 0043 - -JAPAN BUYS 4,000 TONNES OF CANADIAN RAPESEED - WINNIPEG, April 21 - Japan bought 4,000 tonnes of Canadian -rapeseed for last-half May/first-half June shipment, nearly -completing buying for May needs, trade sources said. - Price details were not available. - - Reuter - - - -21-APR-1987 12:39:08.68 -grainwheat -south-koreacanada - - - - - -C G -f1763reute -u f BC-SOUTH-KOREA-BUYS-50,0 04-21 0038 - -SOUTH KOREA BUYS 50,000 TONNES CANADIAN WHEAT - WINNIPEG, April 21 - South Korea yesterday bought 50,000 -tonnes of Canadian feed wheat for late June/early July shipment -at 95.00 dlrs per tonne FOB Vancouver, trade sources said. - Reuter - - - -21-APR-1987 12:39:55.30 -trade -usa -reagan - - - - -RM A -f1766reute -r f BC-WASHINGTON-BUDGET 04-21 0106 - -SENATE PREPARING FOR NEW U.S. BUDGET BATTLE - By Michael Posner, Reuters - WASHINGTON, April 21 - Congress returned from its Easter -recess ready for the annual Spring budget battle that promises -to be a partisan dispute. - The budget fight pitting Democrats against President Reagan -and Republicans is expected to get underway this week in the -Senate late this week and last at least another week. It is -taking on new prominence because of current trade woes. - That is because the budget problems and its associated huge -deficits are said to be at the root of related international -trade friction currently worrying financiers. - As the dollar slides downward on global markets and stock -exchanges gyrate wildly, the trade dispute involving the United -States and Japan once again is spreading fears of a major trade -war between the two trading giants for the first time since -World War II. - Ostensibly that dispute is over U.S. charges that Japan is -refusing to open its markets to semi-conductor chips and the -resulting U.S. tariffs doubling prices of Japanese televisions -and small computers. - Behind the elements of a brewing trade war which neither -side wants, is the dilemma of the U.S. budget and its deficit. - Some analysts say the financial markets may be waking up to -the economic realities that the huge debt cannot continue to -grow without repercussions. - A large portion of the U.S. debt has been financed by -foreigners from their accumulated trade surpluses. But if they -withdraw this support the result can only be further problems, -including higher interest rates for Americans. - In a nutshell, the U.S. budget process has now moved to the -showdown stages in Congress. Reagan's own trillion dollar -spending budget for the government year 1988, starting Oct. 1, -was trounced badly in the House on April 9. - The Senate takes up a plan similar to one that passed the -House, calling for slashing the deficit from its estimated 171 -billion dlr level next year to about 134 billion dlrs, through -defense and domestic spending cuts and about 18.5 billion dlrs -in new, unspecified, taxes. As the Senate prepares to take up -its own budget plan, majority Democrats predict there will be -passage of a bill, only after a protracted partisan battle. - In the House, not one Republican voted for the budget, -which passed by 230 to 192. In the Senate, none of Reagan's -Republicans voted for the budget as it passed out of the Senate -Budget Committee for full Senate consideration. - A key Senate Budget Committee source told Reuters he -believes this very unusual unanimous opposition was by design -among congressional Republicans, perhaps with the tacit -approval of the White House. - "Republicans want Democrats to take the heat for any tax -hikes and defense cuts," he said. - In the coming weeks, the source said, Democrats will press -for a bipartisan budget and seek a negotiated budget with -Reagan -- who already is opposed to the idea. But "it is not -clear how the Republicans will act," he added. - He said Republicans may propose their own plan for lower -taxes and more defense spending, which they did not offer after -Reagan's budget was clobbered in an early vote in the House. - When Reagan entered the White House in 1981, he inherited -what was labelled a huge deficit from Jimmy Carter that wound -up to be nearly 79 billion dlrs that year. - Despite Reagan's promise to balance the budget by 1983, -critics note that his administration's record of accumulated -debt is estimated over one trillion dlrs, or 1,100 billion -dlrs. - That is money the government must borrow, and pay back, and -many analysts say it is what kept the dollar high and caused -the worst U.S. trade deficit ever. - Last year the United States bought goods from the world -worth 169.8 billion dlrs more than what it sold, including -purchases of 58.6 billion dlrs in Japanese goods. - While Congress is trying to attack the trade deficit on one -front through a get-tough trade bill promising retaliatory -measures unless all markets are opened, its success so far -against the budget deficit has been marked by limited progress. - Congress, which controls the pursestrings, has put the -deficit on a downward path from its record high of 220.7 -billion dlrs accumulated in fiscal 1986, which ended Sept. 30. - Because of the Gramm-Rudman-Hollings balanced budget law -enacted in late 1985, there has been pressure on Congress to do -more than talk about deficits. - That law, named after Republican Senators Phil Gramm of -Texas, Warren Rudman of New Hampshire and Democrat Ernest -Hollings of South Carolina, calls for a balanced budget by 1991 -through a series of set deficit targets that Congress must meet. - The law has been followed, even though an enforcement -mechanism to mandate automatic across-the-board cuts if -Congress misses its goal was stricken by the Supreme Court. - The legislators have followed the targets -- on paper. But -in reality, the goal has actually been missed. For example, -Congress last year approved legislation to meet the 1987 target -of a 144 billion dlr deficit. But even after approving the -numbers, the deficit for 1987 is estimated at over 170 billion -dlrs -- far off the target. - This year the target is 108 billion dlrs and that goal is -expected to be missed widely. - Reuter - - - -21-APR-1987 12:42:37.02 - -usa - - - - - -A RM -f1778reute -r f BC-COMMONWEALTH-EDISON-< 04-21 0112 - -COMMONWEALTH EDISON <CWE> SELLS MORTGAGE BONDS - NEW YORK, April 21 - Commonwealth Edison Co is raising 360 -mln dlrs via a two-tranche offering of first and refunding -mortgage bonds, said lead manager Morgan Stanley and Co Inc. - A 200 mln dlr issue of bonds due 1990 has an 8-1/8 pct -coupon and was priced at 99.775 to yield 8.21 pct, or 65 basis -points over comparable Treasury securities. - A 160 mln dlr offering of bonds due 1992 has an 8-5/8 pct -coupon and was priced at 99.85 to yield 8.661 pct, or 78 basis -points more than Treasuries. Both tranches are non-callable for -life and rated A-3 by Moody's and A by S and P. Salomon -Brothers Inc co-managed the deal. - Reuter - - - -21-APR-1987 12:47:33.66 -acq -usa - - - - - -F -f1796reute -r f BC-ROYAL-RESOURCES 04-21 0058 - -BUSINESSMAN HAS ROYAL RESOURCES <RRCO.O> STAKE - WASHINGTON, April 21 - James Stuckert, a Louisville, Ky., -businessman, told the Securities and Exchange Commission he has -acquired 380,000 shares of Royal Resources Corp, or 5.7 pct of -the total outstanding common stock. - Stuckert said he bought the stake for 600,000 dlrs solely as -an investment. - Reuter - - - -21-APR-1987 12:48:28.99 - -usa - - - - - -F -f1800reute -d f BC-ATT-<T>-LAUNCHES-SYST 04-21 0091 - -ATT <T> LAUNCHES SYSTEMS FOR SMALL BUSINESSES - NEW YORK, April 21 - American Telephone and Telegraph Co -introduced two communications systems, Spirit and Merlin, and -other products, in a bid to strengthen its position with small -businesses, the company said. - The Spirit system, with a basic price tag of 1,500 dlrs, -can handle up to six lines and 16 telephones and a more -advanced line which can handle up to 24 lines and 48 -tlelphones. - ATT said the Merlin line, which starts at 2,500 dlrs, can -handle up to 32 lines and 72 telephones. - ATT said the new products will eventually replace the -current Merlin product family. Some of the systems will be -available in May and others in the third quarter. - ATT also introduced software enhancements for the System -25, for business that require PBX voice and data communications -and need up to 150 phones. These and other enhancements will be -available in the third quarter, the company said. - Reuter - - - -21-APR-1987 12:53:58.04 -cpi -spain - - - - - -RM -f1823reute -r f BC-SPAIN-MAINTAINS-FIVE 04-21 0091 - -SPAIN MAINTAINS FIVE PCT INFLATION TARGET - MADRID, April 21 - Spanish Secretary of State for the -economy Guillermo de la Dehesa said the government maintained -its five pct inflation target for this year although a 0.6 pct -increase in March pushed the rise in the year on year consumer -price index to 6.3 pct. - De la Dehesa said the March rise, announced today by the -National Statistics Institute, was not entirely satisfactory -but acceptable. - The year on year rate at the end of February was six pct. -Prices rose 8.3 pct last year. - The March rise included a 0.05 pct increase correcting an -error in last January's consumer price index. Economists had -earlier said the error could have been as high as 0.2 pct. - De la Dehesa said seasonal increases in food prices pushed -the index up in March and he expected the rate to be lower in -April. - The Communist-led Workers Commissions union said the March -price rise showed inflation was going up again and the -government looked increasingly unlikely to meet its five pct -target. - The Workers Commissions said the inflation trend fuelled -unions's claims to wage increases beyond the government's -recomendation to limit wage rises at around five pct. - Spain is being affected by a two-month-old wave of strikes -for wage rises. Government officials note wage settlements so -far this year have yielded average increases upwards of six -pct, while unions say the figure is higher then seven pct. - REUTER - - - -21-APR-1987 13:00:06.84 -crude -usa - - - - - -Y -f1842reute -u f BC-API-SAID-STATISTICS-T 04-21 0036 - -API SAID STATISTICS TO BE RELEASED TONIGHT - NEW YORK, April 21 - The American Petroleum Institute said -it plans to release its weekly report on U.S. oil inventories -tonight, even though last Friday was a holiday. - Reuter - - - -23-APR-1987 18:32:18.42 - -usa - - - - - - -F -f3036reute -r f BC-GCA-<GCA>-COMPLETES-F 04-23 0102 - -GCA <GCA> COMPLETES FINANCIAL RESTRUCTURING - ANDOVER, Mass., April 23 - GCA Corp said it completed its -previously announced plan of financial restructuring under -which Hallwood Group Inc <HWG> took a 14 pct interest in the -company, a maker of semiconductor manufacturing equipment. - The company said it also implemented a one-for-50 reverse -stock split. - Under terms of the plan, the company exchanged about 109 -mln dlrs in debt to creditors and suppliers for 43 mln dlrs in -cash, and warrants to purchase 2.2 mln shares of its common -stock. GCA also raised 71.7 mln dlrs through the sale of common -stock. - Reuter - - - -23-APR-1987 18:34:33.58 - -usa - - - - - - -F -f3040reute -u f BC-SEC 04-23 0098 - -SEC WARNS SECURITIES DEALERS ON HIGH MARK-UPS - WASHINGTON, April 23 - The Securities and Exchange -Commission reminded securities dealers that its mark-up -disclosure requirements also applies to transactions on -zero-coupon securities. - Dealers and brokers are required by U.S. securities law to -disclose their mark-ups if they are excessive, the SEC said in -a public notice. - Further, excessive mark-ups on securities transactions, -whether disclosed or not, violate the rules of the national -Association of Securities Dealers Inc and Municipal Securities -Rulemaking Board, it said. - In a separate action, the SEC filed a friend-of-the-court -brief in a private civil case involving a complaint against -Merrill Lynch over excessive mark-ups on zero-coupon bonds. The -case is being appealed to the U.S. Appeals Court. - The lower court dismissed the complaint, finding antifraud -provisions of securities laws do not prohibit undisclosed -excessive mark-ups on securities transactions. - The SEC is urging the appeals court to reverse the -decision, citing its nearly 50 year-old position that -undisclosed excessive mark-ups by securities dealers violate -the general antifraud provisions of securities laws. - Reuter - - - -23-APR-1987 18:37:03.79 -earn -canada - - - - - - -E F -f3044reute -u f BC-SOUTHAM-INC-<STM.TO> 04-23 0043 - -SOUTHAM INC <STM.TO> 1ST QTR NET - TORONTO, April 23 - - Oper shr 32 cts vs 37 cts - Oper net 18.9 mln vs 21.6 mln - Revs 352.1 mln vs 323.0 mln - Note: 1987 net excludes extraordinary gain of 2.8 mln dlrs -or five cts shr from sale of surplus property. - Reuter - - - -23-APR-1987 18:45:40.42 -earn -usa - - - - - - -F -f3052reute -r f BC-LOCTITE-CORP-<LOC>-3R 04-23 0044 - -LOCTITE CORP <LOC> 3RD QTR MARCH 31 NET - NEWINGTON, Conn., April 23 - - Shr 96 cts vs 53 cts - Net 8,663,000 vs 4,798,000 - Revs 89.7 m ln vs 66.8 mln - Nine mths - Shr 2.33 dlrs vs 1.67 dlrs - Net 21.1 mln vs 15.1 mln - Revs 241.3 mln vs 192.8 mln - Reuter - - - -23-APR-1987 18:56:03.00 - -usajapan - - - - - - -RM V -f3056reute -u f BC-U.S.-CONGRESS-STILL-A 04-23 0104 - -U.S. CONGRESS STILL ANGRY WITH JAPAN - ABE - NEW YORK, April 23 - Special Japanese envoy Shintaro Abe -said in a brief interview with Reuters that the feeling in the -U.S. congress is "very severe" against Japan. - However, Abe said he believed that neither Congress nor the -Reagan administration wants to undermine relations with Japan. - He said the Reagan administration showed "relative -understanding" of how Japan is trying to alleviate its U.S. -trade imbalance. Abe said he was convinced "Congress and the -administration had the same view that the relationship between -Tokyo and Washington should not be undermined." - Reuter - - - -23-APR-1987 18:59:23.50 -earn -usa - - - - - - -F -f3060reute -u f BC-GLENFED-INC-<GLN>-3RD 04-23 0070 - -GLENFED INC <GLN> 3RD QTR MARCH 31 NET - GLENDALE, Calif., April 23 - - Oper shr 1.54 dlrs vs 82 cts - Oper net 33.7 mln vs 17.66 mln - Revs 473.1 mln vs 419.0 mln - Nine mths - Oper shr 4.60 dlrs vs 2.39 dlrs - Oper net 100.4 mln vs 51.0 mln - Revs 1.38 billion vs 1.21 billion - Assets 18.5 billion vs 15.5 billion - Deposits 13.00 billion vs 11.29 billion - Loans 15.04 billion vs 12.56 billion - Note: Oper net excludes extraordinary loss 6,636,000 and -11.9 mln for 1987 qtr and nine mths on prepayment of borrowings -from the Federal Home Loan Bank Board. - Oper also excludes tax credits of 15.8 mln vs 5,954,000 for -qtr and 17.8 mln vs 11.6 mln for nine mths. - - Reuter - - - -23-APR-1987 19:00:51.40 -earn -usa - - - - - - -F -f3062reute -r f BC-HORIZON-INDUSTRIES-IN 04-23 0053 - -HORIZON INDUSTRIES INC <HRZN> 2ND QTR NET - CALHOUN, Ga., April 23 - Qtr ended April four - Shr profit eight cts vs loss 22 cts - Net profit 341,000 vs loss 903,000 - Revs 58.4 mln vs 46.3 mln - Six mths - Shr profit 35 cts vs loss 19 cts - Net profit 1,466,000 vs loss 767,000 - Revs 121.4 ln vs 95.9 mln - Reuter - - - -23-APR-1987 19:02:27.01 -money-supply -usa - - - - - - -RM V -f3063reute -u f BC-/FED-DATA-PROVIDE-NEW 04-23 0097 - -FED DATA PROVIDE NEW EVIDENCE OF TIGHTER POLICY - By Alan Wheatley, Reuters - NEW YORK, April 23 - U.S. banking data released today are -too distorted to draw sweeping conclusions about monetary -policy, but they do support the market's assumption that the -Federal Reserve has started to tighten its grip on credit, -economists said. - "It's clear that the Fed has firmed somewhat. Discount -window borrowings, net free reserves, the Fed funds rate -average and the pattern of reserve additions are all consistent -with a modest tightening," said Dana Johnson of First Chicago -Corp. - Johnson, and several other economists, now estimate that -the Fed funds rate should trade between 6-1/4 and 6-3/8 pct. - Discount window borrowings in the week to Wednesday were -935 mln dlrs a day, producing a daily average for the two-week -statement period of 689 mln dlrs, the highest since the week of -December 31, 1986, and up from 393 mln dlrs previously. - Moreover, banks were forced to borrow a huge 5.2 billion -dlrs from the Fed on Wednesday - the highest daily total this -year - even though unexpectedly low Treasury balances at the -Fed that day left banks with over two billion dlrs more in -reserves than the Fed had anticipated. - However, economists said it is almost certain that the Fed -is aiming for much lower discount window borrowings than -witnessed this week. They pointed to two factors that may have -forced banks to scramble for reserves at the end of the week. - First, economists now expect M-1 money supply for the week -ended April 29 to rise by a staggering 15 to 20 billion dlrs, -partly reflecting the parking in checking accounts of the -proceeds from stock market sales and mutual fund redemptions to -pay annual income taxes. - As banks' checking-account liabilities rise, so do the -reserves that they are required to hold on deposit at the Fed. - Required reserves did indeed rise sharply by 2.5 billion -dlrs a day in the two weeks ended Wednesday, but economists -said the Fed may not have believed in the magnitude of the -projected M-1 surge until late in the week and so started to -add reserves too late. - Second, an apparent shortage of Treasury bills apparently -left Wall Street dealers with too little collateral with which -to enagage in repurchase agreements with the Fed, economists -said. Thus, although there were 10.3 billion dlrs of repos -outstanding on Wednesday night, the Fed may have wanted to add -even more reserves but was prevented from doing so. - "It's not at all inconceivable that the Fed didn't add as -much as they wanted to because of the shortage of collateral," -said Ward McCarthy of Merrill Lynch Economics Inc. - McCarthy estimated that the Fed is now targetting -discount-window borrowings of about 400 mln dlrs a day, -equivalent to a Fed funds rate of around 6-3/8 pct. - After citing the reasons why the Fed probably has not -tightened credit to the degree suggested by the data, -economists said the fact that the Fed delayed arranging -overnight injections of reserves until the last day of the -statement period was a good sign of a more restrictive policy. - Jeffrey Leeds of Chemical Bank had not been convinced that -the Fed was tightening policy. But after reviewing today's -figures, he said, "It's fair to say that the Fed may be moving -toward a slightly less accommodative reserve posture." - Leeds expects Fed funds to trade between 6-1/4 and 6-3/8 -pct and said the Fed is unlikely to raise the discount rate -unless the dollar's fall gathers pace. - Johnson at First Chicago agreed, citing political -opposition in Washington to a dollar-defense package at a time -when Congress sees further dollar depreciation as the key to -reducing the U.S. trade surplus with Japan. - Reuter - - - -23-APR-1987 19:08:09.42 -earn -usa - - - - - - -F -f3066reute -r f BC-RORER-GROUP-INC-<ROR> 04-23 0072 - -RORER GROUP INC <ROR> 1ST QTR NET - FORT WASHINGTON, Pa., April 23 - - Oper shr profit 34 cts vs loss 78 cts - Oper net profit 7,434,000 vs loss 17.0 mln - Revs 201.2 mln vs 171.7 mln - Note: Year-ago oper exludes gain on sale of businesses of -139.6 mln. - Year-ago oper includes charges of 27.8 mln resulting from -allocation of the purchase price of Revlon's businesses to -inventory and 7.1 mln for restructuring costs. - Reuter - - - -23-APR-1987 19:36:56.77 -coffee -costa-ricaguatemala - -ico-coffee - - - - -T -f3073reute -u f AM-centam-coffee 04-23 0088 - -MILD COFFEE GROWERS TO MEET IN GUATEMALA - SAN JOSE, April 23 - A large group of "other milds" -coffee-growing nations will hold talks in Guatemala next month -to map their strategy for next September's meeting of the -International Coffee Organisation (ICO). - Mario Fernandez, executive director of the Costa Rican -coffee institute, said delegates from Mexico, the Dominican -Republic, Peru, Ecuador, India, Papua New Guinea and five -central american nations will participate in the two-day -strategy session beginning May 4. - The main topic will be reform of what many producing -countries perceive as the ICO's unfair distribution of export -quotas, Fernandez said. - He said Costa Rica would press for quotas "based on the -real production and export potential of each country in the -past few years" and to distribute quotas based on "historic" -production levels rather than recent harvests and crop -estimates. - Reuter - - - -23-APR-1987 19:48:08.94 -acq -usa - - - - - - -F -f3076reute -u f AM-COMSAT 04-23 0107 - -US STUDY DISCUSSES DROPPED COMSAT-CONTEL MERGER - WASHINGTON, April 23 - A congressional study today said the -proposed, but now apparently abandoned, merger of the -Communications Satellite Corp <CQ> and Contel Corp <CTC> -would technically be legal but could violate the spirt of the -law setting up COMSAT. - Two weeks ago before the study was completed, Contel -announced it would seek to terminate the proposed merger. - The study by the non partisan Congressional Research -Service (CRS) said "the proposed merger appears to comply, -technically, with the mandates or letter of statutes, if may -nevertheless violate the spirit of the law." - Comsat, created by a 1962 act of Congress, and Contel, a -corporation of local telephone and communications firms, filed -with the Federal Communications Commission last November 3 an -application for merger. Several firms had protested the -proposed merger. - In an analysis of the law, the research service issued -several critical comments about the structure of the new firm -and said apparent domination by Contel of a restructured COMSAT -would have broken the spirit of the law setting up -COMSAT.COMSAT is the U.S. arm of Intelstat, the international -satellite communications firm. - -Reuter...^M - - - -23-APR-1987 19:48:47.25 - -japanusa -nakasone - - - - - -C -f3077reute -u f BC-JAPANESE-PARLIAMENT-P 04-23 0138 - -SETBACK SEEN FOR NAKASONE IN JAPANESE PARLIAMENT - TOKYO, April 24 - Japan's Lower House passed the 1987 -budget after the ruling Liberal Democratic Party agreed to a -mediation proposal that could kill its plan to introduce a -controversial sales tax, political analysts said. - The move was seen as a major blow to Prime Minister -Yasuhiro Nakasone, the leading advocate of the five pct tax. - Some analysts predicted Nakasone might be forced to step -down just after the June summit of leaders from major -industrial democracies, well before his one-year term is due to -expire at the end of October. - The ruling party though was anxious to pass the budget -before Nakasone leaves next week for the U.S. so that he could -tell Washington the Japanese government was doing its utmost to -boost the sagging economy and imports. - Reuter - - - -23-APR-1987 20:21:46.09 -money-fxdlr - - - - - - - -RM -f3091reute -b f BC-BANK-OF-JAPAN-INTERVE 04-23 0086 - -BANK OF JAPAN INTERVENES IN TOKYO MARKET - TOKYO, April 24 - The Bank of Japan intervened just after -the Tokyo market opened to support the dollar from falling -below 140.00 yen, dealers said. - The central bank bought a moderate amount of dollars to -prevent its decline amid bearish sentiment for the U.S. -Currency, they said. - The dollar opened at a record Tokyo low of 140.00 yen -against 140.70/80 in New York and 141.15 at the close here -yesterday. The previous Tokyo low was 140.55 yen set on April -15. - REUTER - - - -23-APR-1987 20:24:10.50 -money-supply -australia - - - - - - -RM -f3092reute -b f BC-AUSTRALIA'S-M-3-MONEY 04-23 0101 - -AUSTRALIA'S M-3 MONEY SUPPLY RISE 1.5 PCT IN MARCH - SYDNEY, April 24 - Australia's M-3 money supply growth was -1.5 pct in March and 11.3 pct in the 12 months to March, the -Reserve Bank said. - This compared with a revised rise of 0.5 pct in February -and 11.1 pct in the year to end-February. - The Reserve Bank said the M-3 data for March was affected -by the start of the operations of <National Mutual Royal -Savings Bank Ltd>, which has resulted in the transfer of -deposits (equivalent to around 1.5 pct of m-3) from the United -Permanent Building Society to National Mutual Royal Savings -Bank Ltd. - The Reserve Bank said M-3 money supply in March was 110.77 -billion Australian dlrs compared with a revised 109.11 billion -in February and 99.48 billion in March, 1986. - M-3 is deposits of the private sector held by trading and -savings banks plus holdings of notes and coins. - REUTER - - - -23-APR-1987 20:30:17.87 - -japan - - - - - - -RM -f3094reute -b f BC-JAPANESE-PARLIAMENT-P 04-23 0111 - -JAPANESE PARLIAMENT PASSES 1987 BUDGET - TOKYO, April 24 - Parliament's Lower House passed the 1987 -budget shortly before midnight local time, official -parliamentary sources said. - The move followed agreement by the ruling Liberal -Democratic Party to a proposal that could kill its plan to -introduce a controversial sales tax, political analysts said. -The move was seen as a major blow to Prime Minister Yasuhiro -Nakasone, the leading advocate of the five pct tax, they said. - Some analysts said Nakasone may be forced to step down -after the June summit of heads of major industrial democracies -and before his one-year term is due to expire at end-October. - Under the compromise agreed by the LDP and opposition -parties, Lower House Speaker Kenzaburo Hara will take charge of -the sales tax bill, appoint a ruling/opposition party council -to debate it and allow opposition leaders to review the present -tax system, analysts said. - Hara also verbally agreed to scrap the sales tax plan -entirely if the joint council fails to reach agreement on how -to handle the tax. - The opposition parties, who have been vociferously -attacking the sales tax plan for months, hailed the decision as -a great victory. - The opposition parties had already delayed passage of the -budget for three weeks after the April 1 start of the fiscal -year by intermittent parliamentary boycotts. - Although the LDP had more than enough votes to ram the -budget through parliament, it had been reluctant to do so for -fear of a backlash of public opinion, especially after its -setback in recent local elections due to the sales tax issue. - The ruling party though was anxious to pass the budget -before Nakasone leaves next week for the U.S. So that he could -tell Washington the Japanese government was doing its utmost to -boost the sagging economy and imports. - According to Kyodo News Service, Nakasone told reporters he -did not think the sales tax was dead. - If the sales tax is dropped, it could prove a major boost -to the economy because it would increase the government budget -deficit, economists said. - The sales tax was originally scheduled to be introduced -next January to help offset the loss of government revenues -stemming from a cut in income and corporate taxes due to go -into effect this month. - REUTER - - - -23-APR-1987 20:35:24.14 -money-fxdlr -usajapan - - - - - - -RM -f3095reute -f f BC-Dollar-trades-at-post 04-23 0011 - -******Dollar trades at post-war low of 139.50 yen in Tokyo - brokers -Blah blah blah. - - - - - -23-APR-1987 21:19:18.12 -dlr - - - - - - - -RM -f3111reute -f f BC-Many-major-nations-ye 04-23 0012 - -******Many major nations yesterday intervened heavily to aid dlr - Miyazawa -Blah blah blah. - - - - - -23-APR-1987 21:25:22.52 -acq -uk - - - - - - -F -f3114reute -f f BC-STANDARD-OIL-SAYS-BRI 04-23 0012 - -******STANDARD OIL SAYS BRITISH PETROLEUM SHARE TENDER EXTENDED UNTIL MAY 4 -Blah blah blah. - - - - - -23-APR-1987 21:28:14.05 -money-fxdlr -usajapan -miyazawa - - - - - -RM -f3115reute -b f BC-JAPAN-HAS-NO-PLANS-FO 04-23 0110 - -JAPAN HAS NO PLANS FOR NEW MEASURES TO AID DLR - TOKYO, April 24 - Finance Minister Kiichi Miyazawa said -Japan has no plans to take new emergency measures to support -the dollar, other than foreign exchange intervention. - He also told reporters that many major nations yesterday -intervened heavily to support the dollar against the yen. - Yesterday's intervention was large in terms of the -countries involved and the amounts expended, he said. - With the continued fall of the dollar against the yen, -0speculation had arisen in currency markets here that Japan -might take new measures to support the U.S. Currency, such as -curbing capital outflows. - Miyazawa said that yesterday's news of a 4.3 pct rise in -U.S. Gnp in the first quarter had been expected. Although the -growth looks robust on the surface, the figures in reality are -not that good, he said. - He said the ruling Liberal Democratic Party (LDP) is -expected to come up with a final set of recommendations of ways -to stimulate the Japanese economy before Prime Minister -Yasuhiro Nakasone leaves for Washington next week. - Commenting on yesterday's report on economic restructuring -by a high-level advisory panel to Nakasone, Miyazawa said it -was important to put the panel's recommendations into effect. - REUTER - - - -23-APR-1987 21:34:36.89 -acq -usauk - - - - - - -F -f3117reute -b f BC-STANDARD-OIL-SAYS-BP 04-23 0082 - -STANDARD OIL SAYS BP EXTENDS TENDER - NEW YORK, April 23 - Standard Oil Co <SRD> said in a brief -announcement issued after a meeting of its board of directors -that British Petroleum Co PLC <BP.L> (BP) has extended its 70 -dlr per share tender offer until midnight May 4. - The offer for the 45 pct of Standard shares not owned by BP -had been due to expire midnight April 28. - Standard Oil said discussions with BP concerning the tender -were continuing but provided no further details. - "So long as those discussions continue, no recommendation -will be made to Standard Oil shareholders regarding the offer," -Standard said. - Standard directors met at the company's Cleveland -headquarters on Thursday in a regularly scheduled meeting. The -spokesman was unable to say if the meeting would continue on -Friday. - A committee of independent directors previously obtained an -opinion from First Boston Corp that the Standard shares were -worth 85 dlrs each, 15 dlrs more than the BP offer. - REUTER - - - -23-APR-1987 21:38:26.85 - -usa - - - - - - -F -f3120reute -u f BC-QANTAS-TO-BUY-EXTENDE 04-23 0104 - -QANTAS TO BUY EXTENDED RANGE BOEING 767 AIRCRAFT - SYDNEY, April 24 - State-owned <Qantas Airways Ltd> said it -has placed a firm order for a single Boeing Co <BA.N> 767-300ER -(extended range) aircraft for delivery in August 1988 at a cost -of 150 mln Australian dlrs, including spares. - A statement said it also has options to buy six more and -will decide in mid-1987 whether to use engines made by United -Technologies Corp <UTX> unit Pratt and Whitney or General -Electric Co <GE>. - The 767-300ER can carry more cargo and passengers and is -more fuel-efficient than the 767-200, six of which Qantas has -in service. - REUTER - - - -23-APR-1987 21:40:47.37 - -usajapan - - - - - - -RM -f3123reute -u f BC-JAPAN-AGENCY-URGES-WA 04-23 0115 - -JAPAN AGENCY URGES WATCH ON YEN RISE EFFECTS - TOKYO, April 24 - Japan should look out for possible -effects of the yen's recent sharp rise on Japan's economy as -growth remains slow, the government's Economic Planning Agency -said in a monthly report submitted to cabinet ministers. - EPA officials told reporters the underlying trend of the -economy is firm but growth is slow due to sluggish exports. - Customs-cleared exports by volume fell 4.9 pct -month-on-month in February after a 2.8 pct fall in March. - The government must take adequate economic measures to -expand domestic demand and stabilise exchange rates in a bid to -ensure sustained econonic growth, the report said. - The report made a special reference to the yen's renewed -rise and its effect on the economy, the officials said, adding -the agency's judgement of current economic conditions has not -changed since last month. - The EPA said last month Japan's economy is beginning to -show signs of bottoming out, conditional upon exchange rates. - The dollar fell below 139 yen in early trading today - a -post-war low. - REUTER - - - -23-APR-1987 22:03:13.44 -money-supplyinterest -japan - - - - - - -RM -f3135reute -b f BC-JAPAN-DOES-NOT-INTEND 04-23 0108 - -JAPAN DOES NOT INTEND TO EASE CREDIT - OFFICIALS - TOKYO, April 24 - The Bank of Japan does not intend to ease -credit policy further, bank officials told Reuters. - They were responding to rumours in the Japanese bond market -that the central bank was planning to cut its 2.5 pct discount -rate soon, possibly before Prime Minister Yasuhiro Nakasone -leaves for Washington on April 29. - Bank of Japan governor Satoshi Sumita will be in Osaka, -western Japan on April 27 and 28 for the annual meeting of the -Asian Development Bank, making a rate cut announcement early -next week a virtual impossibility, they said. April 29 is a -holiday here. - REUTER - - - -23-APR-1987 22:49:55.57 -interest -australia - - - - - - -RM -f3162reute -u f BC-NATIONAL-MUTUAL-CUTS 04-23 0068 - -NATIONAL MUTUAL CUTS AUSTRALIAN PRIME TO 17.75 PCT - MELBOURNE, April 24 - National Mutual Royal Bank Ltd said -it would cut its prime rate to 17.75 pct from 18.25, effective -April 27. - The cut follows a trend toward lower rates started last -month and accelerated by Westpac Banking Corp, which yesterday -cut its prime to 17.50 pct from 18.25 pct. Westpac's 17.50 pct -is the lowest prevailing rate. - REUTER - - - -23-APR-1987 23:12:19.63 -acq -australiacanada - - - - - - -F -f3171reute -u f BC-ELDERS-PURCHASE-OF-CA 04-23 0102 - -ELDERS PURCHASE OF CANADIAN BREWER APPROVED - SYDNEY, April 24 - Elders IXL Ltd <ELXA.S> said the -Canadian government approved its bid for <Carling O'Keefe Ltd>. - Elders earlier announced it was buying 10.9 mln shares, or -50.1 pct of Carling, from the Canadian subsidiary of Rothmans -International Plc <ROT.L> for 18 Canadian dlrs each. - Elders chairman John Elliott said in a statement when the -offer for the ordinary shares closed on April 23, that -acceptances representing over 93 pct of outstanding shares had -been received. <IXL Holdings> would proceed to acquire the rest -compulsorily, he said. - REUTER - - - -23-APR-1987 23:51:21.93 -crude -ecuadorcolombia - -opec - - - - -RM -f3186reute -u f BC-ECUADOR-TO-USE-COLOMB 04-23 0106 - -ECUADOR TO USE COLOMBIA OIL LINK FOR FIVE YEARS - BOGOTA, April 23 - Ecuador will use a new pipeline link -with Colombia to export crude oil for the next five years, -Colombian mines and energy minister Guillermo Perry said. - The link will be inaugurated on May 8. It was built to -allow Ecuador to resume exports of crude oil halted on March 5 -by earthquake damage to its Lago Agrio to Balao pipeline, - Once that pipeline is repaired, Ecuador will exceed its -OPEC quota in order to offset lost income and pay debts -contracted with Venezuela and Nigeria since the quake, Ecuador -mines and energy minister Javier Espinosa said. - The two ministers were speaking at a news conference after -signing an agreement for joint oil exploration and exploitation -of the jungle border zone between the two nations. Drilling -will begin in September. - "The agreement to transport Ecuadorean crude oil is not only -for this emergency period but for the next five years, with -possibility of an extension. Between 20,000 and 50,000 barrels -per day (bpd) will be pumped along it," Perry said. - Espinosa said Ecuador planned to pump 35 mln barrels -through the link in the next five years, at a cost of 75 cents -per barrel during the first year. - The 43-km link, with a maximum capacity of 50,000 bpd, will -run from Lago Agrio, the centre of of Ecuador's jungle -oilfields, to an existing Colombian pipeline that runs to the -Pacific port of Tumaco. - Espinosa said the 32-km stretch of the link built on the -Ecuadorean side cost 10.5 mln dlrs. Perry gave no figures for -Colombia's 11 km segment but said it was "insignificant compared -with what we are going to earn." - OPEC member Ecuador was pumping around 250,000 bpd before -the quake. Lost exports of 185,000 bpd are costing it 90 mln -dlrs per month, Espinosa said. - REUTER - - - -23-APR-1987 23:57:39.18 - -indonesia - - - - - - -RM -f0001reute -u f BC-SUHARTO-PARTY-SET-FOR 04-23 0107 - -SUHARTO PARTY SET FOR EASY WIN IN INDONESIA POLLS - JAKARTA, April 24 - President Suharto's ruling Golkar party -appears to have made substantial gains with over 75 pct of the -votes counted in Indonesia's national elections. - Figures released by the election commission showed Golkar -on target to take 70 pct of the vote. - Provisional figures indicate that with results of 68.9 mln -ballots announced, Golkar had won 50.29 mln, the Moslem-based -United Development Party 10.93 mln and the nationalist -Democratic Party 7.69 mln. - The total electorate is 94 mln and officials said they -thought about 90 pct of the votes had been counted. - - - -24-APR-1987 06:10:35.04 - -denmark - - -zse - - -F -f0368reute -r f BC-DENMARK'S-NOVO-INDUST 04-24 0108 - -DENMARK'S NOVO INDUSTRI GETS SWISS SHARE LISTING - COPENHAGEN, April 24 - Danish-based insulin and enzymes -producer Novo Industri A/S <NVO.CO> said in a statement that -its "B" shares would be listed on stock exchanges in Zurich, -Basel and Geneva from May 4. - The aim is to create broader European interest in Novo -stock, currently listed in Copenhagen, London and New York, -said the statement issued after yesterday's ordinary general -meeting. - Novo said more than 50 pct of its B shares were owned by -U.S. Investors. The new listings, the first by a Danish company -on the Swiss exchanges, will not involve issuing of new share -capital. - REUTER - - - -24-APR-1987 06:16:49.25 -graincorn -taiwanusa - - - - - -G C -f0376reute -u f BC-TAIWAN-TO-TENDER-UP-T 04-24 0088 - -TAIWAN TO TENDER UP TO 87,000 TONNES OF U.S. MAIZE - TAIPEI, April 24 - The joint committee of Taiwan's maize -importers will tender on April 29 for two cargoes of U.S. -Maize, totalling between 54,000 and 87,000 tonnes for delivery -between May 21 and June 25, a committee spokesman told Reuters. - Taiwan has set a calendar 1987 import target of 2.92 mln -tonnes compared with imports of 3.05 mln in 1986. About 80 pct -of the imports are expected to come from the U.S. And the rest -from South Africa, the spokesman said. - REUTER - - - -24-APR-1987 06:18:18.37 -money-fx -switzerland -languetin - - - - -RM -f0379reute -u f BC-SWISS-COMMITTED-TO-JO 04-24 0106 - -SWISS COMMITTED TO JOINT CURRENCY INTERVENTION - BERNE, April 24 - The Swiss National Bank will continue to -take part in concerted intervention on currency markets as -necessary, president Pierre Languetin told the bank's annual -meeting. - He said the dollar had on occasion hit highs or lows which -bore no relation to economic fundamentals and cooperation -between all monetary authorities was necessary to prevent it -breaching thresholds that would damage everyone. - "We are resolved -- as we have done in the past -- to take -part in concerted intervention to the extent that this is -possible and desirable," Languetin said. - Languetin said Switzerland had noted with satisfaction the -six nation Paris accord on currency stabilisation measures in -February, adding that it had anchored the principle of -strengthened international cooperation. - He said measures such as recent concerted intervention were -useful in the short term. - But he added, "The (Paris) Louvre accord can produce no -lasting effects without a correction of the fundamental -imbalances, without a reduction of the American budget deficit -and without stronger growth in Europe and Japan." - Languetin said certain changes would probably be necessary -in the "too expansive" monetary policy of the United States, -adding that there was a prevailing view that U.S. Money supply -was expanding too strongly. - "If this should last long the dollar could only be -stabilised at the cost of a substantial easing in monetary -policy on the part of the other central banks, which would in -turn create the basis for a new wave of world-wide inflation," -he said. One positive factor was that monetary authorities in -the most important countries had not relinquished their -anti-inflation policies. - REUTER - - - -24-APR-1987 06:34:22.72 -sugar -japancuba - - - - - -C T -f0409reute -u f BC-JAPANESE-BUYERS-ACCEP 04-24 0103 - -JAPANESE BUYERS ACCEPT CUBA SUGAR DELAY - TRADERS - TOKYO, April 24 - Several Japanese buyers have accepted -postponement of between 150,000 and 200,000 tonnes of Cuban raw -sugar scheduled for delivery in calendar 1987 until next year -following a request from Cuba, trade sources said. - Cuba had sought delays for some 300,000 tonnes of -deliveries, they said. It made a similar request in January -when Japanese buyers agreed to postpone some 200,000 tonnes of -sugar deliveries for 1987 until 1988. - Some buyers rejected the Cuban request because they have -already sold the sugar on to refiners, they added. - Japanese buyers are believed to have contracts to buy some -950,000 tonnes of raw sugar from Cuba for 1987 shipment. - But Japan's actual raw sugar imports from Cuba are likely -to total only some 400,000 to 450,000 tonnes this year, against -576,990 in 1986, reflecting both the postponements and sales -earlier this year by Japanese traders of an estimated 150,000 -tonnes of Cuban sugar to the USSR for 1987 shipment, they said. - They estimated Japan's total sugar imports this year at 1.8 -mln tonnes, against 1.81 mln in 1986, of which Australia is -expected to supply 550,000, against 470,000, South Africa -350,000, against 331,866, and Thailand 400,000, after 390,776. - REUTER - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-018.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-018.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-018.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-018.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2004 +0,0 @@ - - - 2-JUN-1987 10:04:07.81 -cpi -brazil -sarney - - - - -C -f1027reute -u f BC-BRAZIL'S-SARNEY-DECLA 06-02 0092 - -BRAZIL'S SARNEY RENEWS CALL FOR WAR ON INFLATION - BRASILIA, June 2 - President Jose Sarney today declared "a -war without quarter" on inflation and said the government would -watch every cent of public expenditure. - Sarney, addressing his cabinet live on television, also -reiterated that he intended to remain in power for five years, -until 1990. There has been a long-running political debate -about how long his mandate should be. - Brazil is currently suffering from the worst inflation of -its history. In April monthly inflation reached 21 pct. - Reuter - - - - 2-JUN-1987 10:04:26.11 - - -reaganvolckergreenspan - - - - -V RM -f1030reute -f f BC-******REAGAN-SAYS-VOL 06-02 0014 - -******REAGAN SAYS VOLCKER WILL NOT ACCEPT 3rd TERM AS FED CHAIRMAN, NOMINATES GREENSPAN -Blah blah blah. - - - - - - 2-JUN-1987 10:05:19.67 - -usa - - - - - -V RM -f1034reute -b f BC-/U.S.-HOME-SALES-ROSE 06-02 0079 - -U.S. HOME SALES ROSE 7.6 PCT IN APRIL - WASHINGTON, June 2 - Sales of new, single-family homes rose -7.6 pct in April from March to a seasonally adjusted annual -rate of 777,000 units, the Commerce Department said. - The department revised March sales to show a 2.7 pct -decrease from the previous month to 722,000 units instead of -the previously reported 3.6 pct drop in March. - The April increase brought home sales 12.0 pct below the -April, 1986, level of 883,000 units. - The April increase brought home sales to the highest level -since last April's 883,000 units. - The Commerce Department said that before seasonal -adjustment, the number of homes actually sold in April was -76,000, up from 71,000 in March but down from 84,000 in April, -1986. - The average price was 118,800 dlrs in April, down from -121,200 dlrs in March but up from 110,300 dlrs a year ago. - The median price was unchanged from March at 99,000 dlrs -but up from 92,500 dlrs in April, 1986, the department said. - Reuter - - - - 2-JUN-1987 10:06:06.42 - -uk - - - - - -RM -f1036reute -b f BC-BRIXTON-ESTATE-LAUNCH 06-02 0075 - -BRIXTON ESTATE LAUNCHES UNLIMITED STG CP PROGRAM - LONDON, June 2 - Brixton Estate Plc is establishing a -sterling commercial paper program for an unlimited amount, J. -Henry Schroder Wagg and Co Ltd said as arranger. - Dealers will be Schroder Wagg, S.G. Warburg and Co Ltd and -County Natwest Capital Markets Ltd. - The paper will be issued in denominations of 500,000 and -one mln stg and will have maturities between seven and 364 -days. - REUTER - - - - 2-JUN-1987 10:06:53.99 - -usa -reaganvolckergreenspanjames-baker - - - - -V RM -f1037reute -b f BC-REAGAN-FED 06-02 0043 - -REAGAN SAYS VOLCKER WILL NOT SERVE NEW TERM - WASHINGTON, June 2 - President Reagan said Paul Volcker has -declined to serve another term as chairman of the Federal -Reserve Board, the U.S. central bank. Reagan -nominated economist Alan Greenspan in his place. - Volcker's term expires in August. - Reagan, in a brief announcement in the White House briefing -room, said he accepted Volcker's decision "with great reluctance -and regret." - Volcker, first appointed to the Fed post by President Jimmy -Carter in 1979, said "there is a time to leave and a time to -come ... I have no feeling I was being pushed." - Volcker, appearing with Reagan, Greenspan, and Treasury -Secretary James Baker in the briefing room, said he will remain -on the job until Greenspan's nomination is approved by the -Senate. - In a tribute to a smiling Volcker standing beside him, -Greenspan told reporters that one of the departing chairman's -greatest achievements was reducing inflation. - "It will be up to those of us who follow him to be certain -that those very hard won gains will not be lost. Assuring that -will be one of my primary goals," Greenspan said. - Financial markets reacted with dismay at the departure of -Volcker, who has been widely credited with holding the line on -inflation and seeking to maintain stability in currency values. - Immediately following Reagan's announcement, the U.S. -dollar weakened sharply against all major currencies and both -the bond and stock markets declined. - But Greenspan told reporters he thought the dollar, which -has fallen sharply over the past year, has reached its low -point. - - "There certainly is evidence in that direction," Greenspan -said when reporters asked if the dollar has bottomed out. - The market reaction was probably exaggerated by surprise -because the announcement followed a number of published reports -that the White House had decided to reappoint Volcker. - Volcker's tenure at the Fed began under the cloud of major -inflation under Carter with consumer prices rising more than 10 -per cent annually and the prime interest rate exceeding 20 per -cent. - - With Reagan's backing, Volcker pursued a tight money policy -that cut inflation to about three per cent annually and reduced -interest rates to their lowest level in nearly a decade. - The tight money policies were also blamed for producing -a deep recession in 1981 and 1982 that caused major political -problems for Reagan. - Reagan reappointed Volcker to the chairmanship in 1983. - - Greenspan, who heads his own Wall Street consulting firm, -was chairman of President Ford's Council of Economic Advisers -from September 1974 until January 1977. - Greenspan, a Republican, is considered a traditional -conservative economist and has been an adviser to several -presidents. - Reuter - - - - 2-JUN-1987 10:11:04.12 - -belgium - - - - - -RM -f1051reute -u f BC-BELGIAN-PUBLIC-SPENDI 06-02 0106 - -BELGIAN PUBLIC SPENDING DEFICIT FALLS IN MAY - BRUSSELS, June 2 - Belgium's public expenditure deficit -fell sharply to 59.5 billion francs in May from 96.7 billion in -the same month last year, the first major sign of the effects -of the government's public spending curbs, the Budget Ministry -said. - During the first five months of this year, the net -government financing requirement was down by 44.1 billion -francs from year ago levels at 345.8 billion francs, it said in -a statement. - The government is aiming to cut this year's financing -requirement to below 420 billion francs this year from around -560 billion in 1986. - The Ministry said it was expected that more than half the -projected cut should have been achieved by the end of July. - Ministry sources noted that for technical reasons, the -financing requirement is always highest in the early months of -the year. - REUTER - - - - 2-JUN-1987 10:11:37.96 - -switzerland - - - - - -RM -f1055reute -u f BC-CHRISTIANIA-RAISES-AM 06-02 0091 - -CHRISTIANIA RAISES AMOUNT OF GOLD LINKED BOND - ZURICH, June 2 - Norway's Christiania Bank <CHBO.OL> is -increasing the size of its 2-1/2 pct seven year bond issue with -gold call and put warrants to 75 mln Swiss francs from 50 mln, -lead manager Bank Gutzwiller, Kurz, Bungener Ltd said. - The issue is priced at par. - Each 5,000 franc bond carries three 18 month call warrants -with a strike price of 490 dlrs and four three year put -warrants with a strike price of 420 dlrs. - Subscriptions close on June 22 and payment date is July 8. - REUTER - - - - 2-JUN-1987 10:13:22.63 - -usa - - - - - -V RM -f1060reute -b f BC-/U.S.-FACTORY-ORDERS 06-02 0107 - -U.S. FACTORY ORDERS ROSE 0.2 PCT IN APRIL - WASHINGTON, June 2 - New orders for manufactured goods rose -401 mln dlrs, or 0.2 pct, in April to a seasonally adjusted -199.8 billion dlrs, the Commerce Department said. - The slight April gain followed a revised orders increase in -March of 2.6 pct. The department originally reported a March -increase of 2.3 pct. Excluding defense, factory orders fell 0.2 -pct in April after rising 1.1 pct in March. - Orders for durable goods were virtually unchanged in April, -up only 13 mln dlrs to 106.2 billion dlrs. The department had -estimated on May 22 that April durable goods orders rose 0.1 -pct. - The department said defense capital goods orders were up -808 mln dlrs, or 8.1 pct, in April to 10.8 billion dlrs. -Defense orders had risen 43.2 pct in March. - New orders for non-durable goods were up 388 mln dlrs, or -0.4 pct, in April to 93.6 billion dlrs. - These figures compared with a March increase of 4.2 pct in -durables orders and a 0.8 pct rise in non-durables orders. - Orders for non-defense capital goods were up 0.8 pct in -April after rising 2.0 pct in March. - Within major industry categories orders for transportation -equipment fell 7.6 pct in April after rising 10.8 pct in March. - Primary metals gained 5.4 pct in April after a 6.8 pct -March orders increase. - Orders for non-electrical machinery were down 0.9 pct in -April after rising 2.3 pct in March. Electrical machinery -orders rose during April by 19.3 pct after falling in March by -3.4 pct. - Reuter - - - - 2-JUN-1987 10:13:44.37 -gnp -pakistan - - - - - -RM -f1062reute -r f BC-PAKISTAN-SAYS-GOOD-EC 06-02 0107 - -PAKISTAN SAYS GOOD ECONOMIC GROWTH CONTINUES - ISLAMABAD, June 2 - Pakistan says its economy has continued -its recent outstanding performance during the financial year -1986/87 ending on June 30 but areas like balance of payments, -investments and energy were causing concern. - GDP grew in line with the average growth rate since 1980 -and the inflation rate was the lowest since 1969/70, according -to a government economic survey. - The reform of economic regulation had gathered momentum -and there was an impressive performance in a five point -government program for rural uplift, education and poverty -alleviation, said the survey. - Ministry Economic Adviser Qazi Alimullah told a news -conference that before recent unseasonal rains and hailstorms -damaged the wheat crop, GDP growth was calculated at 7.04 pct -compared to 7.25 pct in 1985/86.He said the figure might now -slide down a little to around 6.8 or 6.9 pct. - The survey said monetary expansion was estimated to be nine -pct to date but might rise to around 12 pct by the year-end. - Alimullah said exports rose 18 pct to 3.5 billion dlrs from -2.9 billion dlrs in 1985/86. But the at the same time, home -remittances by Pakistanis abroad dropped to 2.3 billion dlrs -from the 1985/86 level of 2.595 billion. - More exports and an improvement in the balance of payments -situation will be required to overcome this declining trend in -home remittances, he said. - The survey said the trade deficit was expected to fall to -2.4 billion dlrs from three billion dlrs in 1985/86 because of -the boost in exports. - He said national investment continued to be small because -of a poor rate of savings, about 14 pct of GDP. He said more -savings were required to maintain or possibly step up the -present growth rate and to finance the country's seventh -five-year development plan to be launched in July 1988. - REUTER - - - - 2-JUN-1987 10:18:10.62 -money-fxdlr - -greenspan - - - - -V RM -f1077reute -f f BC-******GREENSPAN-SAYS 06-02 0010 - -******GREENSPAN SAYS THERE IS EVIDENCE DOLLAR HAS BOTTOMED OUT -Blah blah blah. - - - - - - 2-JUN-1987 10:20:19.41 -interest - - - - - - -RM -f1084reute -f f BC-BANK-OF-FRANCE-LEAVES 06-02 0013 - -******BANK OF FRANCE LEAVES INTERVENTION RATE UNCHANGED AT 7-3/4 PCT - OFFICIAL -Blah blah blah. - - - - - - 2-JUN-1987 10:21:40.24 -money-fxdlr -usa -greenspan - - - - -V RM -f1090reute -u f BC-/GREENSPAN-SEES-EVIDE 06-02 0060 - -GREENSPAN SEES EVIDENCE DOLLAR FALL OVER - WASHINGTON, June 2 - Newly-nominated Federal Reserve Board -chairman Alan Greenspan said there was evidence the dollar -finally had bottomed out. - In a White House briefing Greenspan was asked by reporters -if he thought the dollar had bottomed out. - "There certainly is evidence in that direction," he replied. - Reuter - - - - 2-JUN-1987 10:22:29.78 -goldsilverplatinum - -volcker - - - - -V RM -f1091reute -f f BC-******U.S.-GOLD,-SILV 06-02 0012 - -******U.S. GOLD, SILVER, PLATINUM SOAR ON VOLCKER REJECTION OF 3RD TERM -Blah blah blah. - - - - - - 2-JUN-1987 10:25:00.56 -cocoa -uk - -icco - - - -C T -f1106reute -b f BC-ICCO-BUYS-5,000-TONNE 06-02 0063 - -ICCO BUYS 5,000 TONNES COCOA FOR BUFFER STOCK - LONDON, June 2 - The International Cocoa Organization -(ICCO) buffer stock manager bought 5,000 tonnes of cocoa today -for the buffer stock, traders said. - The cocoa is believed to have been entirely made up of -second hand material, they added. - Such a purchase would bring cumulative buffer stock -purchases to 26,000 tonnes. - Reuter - - - - 2-JUN-1987 10:27:58.21 - -usa - - - - - -F -f1123reute -u f BC-YANKEE-COS-<YNK>-SEEK 06-02 0063 - -YANKEE COS <YNK> SEEKS DEBT RESTRUCTURING - COHASSET, Mass., June 2 - Yankee Cos Inc said it will be -working with the holders of substantially all of its 12-5/8 pct -senior secured notres due 1996 to develop and overall debt and -asset restructuring program, and as a first step, the -noteholder has agreed to the deferral of the June One interest -payment on the notes until June 30. - Yankee said interest was paid to other noteholders -yesterday. - The company said it plans to meet and work with all -interest parties, including the holders of its three debt -issues and federal banking authorities, over the next several -weeks to formulate and implement a restructuring plan. - Reuter - - - - 2-JUN-1987 10:29:27.94 - -usa - - - - - -F -f1132reute -u f BC-Q-MED-<QEKG.O>-SEES-S 06-02 0106 - -Q-MED <QEKG.O> SEES SHARPLY HIGHER REVENUES - CLARK, N.J., June 2 - Q-Med Inc said preliminary results -show its second quarter, ended May 31, revenues exceeded 4.2 -mln dlrs. A year earlier revenues were nearly 1.4 mln dlrs. - The company also said it had appointed Coopers and Lybrand -as its auditors. Chairman Michael Cox declined any comment on -this appointment. - The company said its preliminary second quarter revenues -are consistent with management's expectations and represent a -greater than 40 pct increase in sales over those reported for -the first quarter. Earnings should show a similar growth -pattern, the company added. - Reuter - - - - 2-JUN-1987 10:29:31.47 -acq -usa - - - - - -F -f1133reute -u f BC-ACME-PRECISION-<ACL> 06-02 0028 - -ACME PRECISION <ACL> BUYOUT BID DROPPED - DETROIT, June 2 - Acme Precision Products Inc said a -management group has withdrawn a six dlr per share leveraged -buyout offer. - Acme said the management group dropped its bid due to -continued weakness in the machine tool industry and in Acme -Precision's operating results and to the inability of the -management group to obtain modifications to terms of its -financing commitment. - It said, "The effect of these factors led the management -group to conclude that the six dlr per share price was -excessive under current conditions." - Reuter - - - - 2-JUN-1987 10:29:53.30 - -usa - - - - - -A RM -f1136reute -r f BC-DOMINION-<D>-UNIT-SEL 06-02 0111 - -DOMINION <D> UNIT SELLS 30-YEAR BONDS - NEW YORK, June 2 - Virginia Electric and Power Co, a unit -of Dominion Resources Inc, is raising 100 mln dlrs via an -offering of first and refunding mortgage bonds due 2017 -yielding 9.89 pct, said sole manager E.F. Hutton and Co Inc. - Hutton led a group that won the bonds in competitive -bidding. It bid them at 99.376, representing a net interest -charge to the company of 9.94 pct. - The underwriter set a 9-7/8 pct coupon and reoffering price -of 99.85 to yield 123 basis points more than comparable -Treasury securities. Non-refundable for five years, the bonds -are rated A-1 by Moody's and A-plus by Standard and Poor's. - The gross spread is four dlrs and the reallowance is 2.50 -dlrs, bookrunner Hutton said of the Virginia Electric deal. - Virginia Electric last visited the domestic debt market in -October 1986 when it sold 100 mln dlrs of same-rated, -same-maturity 9-1/4 pct bonds. That issue was priced to yield -9.27 pct, or 141 basis points over Treasuries. - Reuter - - - - 2-JUN-1987 10:30:02.50 - -usa - - - - - -F -f1137reute -r f BC-GENERAL-SIGNAL-<GSX> 06-02 0073 - -GENERAL SIGNAL <GSX> LOW BIDDER ON RADIO JOB - STAMFORD, Conn., June 2 - General Signal Corp said its -General Railway Signal Co unit is the apparent low bidder at -32.5 mln dlrs on a transit radio system contract for the -Southern California Rapid Transit District in Los Angeles. - The company also said its General Farebox Inc subsidiary -received a 3.1 mln dlr farebox system contract from the Greater -Cleveland Regional Transit Authority. - Reuter - - - - 2-JUN-1987 10:30:24.62 - -usa - - - - - -F -f1141reute -r f BC-WILLIAMS-<WMB>-REINCO 06-02 0034 - -WILLIAMS <WMB> REINCORPORATES IN DELAWARE - TULSA, June 2- Williams Cos said it has been reincorporated -in Delaware as Williams Cos Inc following approval by -shareholders at the annual meeting last month. - Reuter - - - - 2-JUN-1987 10:30:58.70 - -usa - - - - - -A RM -f1142reute -r f BC-NOBLE-AFFILIATES-<NBL 06-02 0112 - -NOBLE AFFILIATES <NBL> SELLS CONVERTIBLE DEBT - NEW YORK, June 2 - Noble Affiliates Inc is raising 100 mln -dlrs via an offering of convertible subordinated debentures due -2012 with a 7-1/4 pct coupon and par pricing, said lead -underwriter Morgan Stanley and Co Inc. - The debentures can be converted into the company's common -stock at 19.625 dlrs per share, representing a premium of 25.6 -pct over the stock price when terms on the debt were set. - Non-callable for three years, the issue is rated Baa-3 by -Moody's and BBB-plus by Standard and Poor's. Noble Affiliates -is also offering 125 mln dlrs of 10-1/8 pct notes due 1997 -through a group led by Morgan Stanley. - Reuter - - - - 2-JUN-1987 10:31:26.20 - -usa - - -nasdaq - - -F -f1146reute -r f BC-MERIDIAN-INSURANCE-<M 06-02 0033 - -MERIDIAN INSURANCE <MIGI.O> IN NASDAQ EXPANSION - INDIANAPOLIS, June 2 - Meridian Insurance Group Inc said -its common stock has been included in the NASDAQ National -Market System, effective today. - Reuter - - - - 2-JUN-1987 10:33:30.27 - -uk - - - - - -RM -f1161reute -b f BC-CANON-SALES-ISSUES-10 06-02 0104 - -CANON SALES ISSUES 100 MLN DLR WARRANT BOND - LONDON, June 2 - Canon Sales Co Inc is issuing a 100 mln -dlr equity warrant bond due June 30, 1992 with an indicated -coupon of 1-5/8 pct and par pricing, lead manager Yamaichi -International (Europe) Ltd said. - The issue is guaranteed by Fuji Bank Ltd and final terms -will be set on June 9. The selling concession is 1-1/2 pct -while management and underwriting combined pays 3/4 pct. The -deal is available in denominations of 5,000 dlrs and will be -listed in Luxembourg. - The warrants are exercisable from July 15, until June 23, -1992. The payment date is June 30. - REUTER - - - - 2-JUN-1987 10:35:06.58 -grainbarley -italy - - - - - -G -f1173reute -d f BC-ITALIAN-BARLEY-CROP-R 06-02 0085 - -ITALIAN BARLEY CROP REPORTED IN GOOD CONDITION - ROME, June 2 - Italy's barley crop is generally in good -condition and harvesting is expected to begin shortly, the -agricultural marketing information and research board Irvam -said. - First consignments were expected to be available around -mid-June. - Excellent weather, characterised by alternating periods of -sunshine and rain, has encouraged growth except in Sardinia, -which was expected to lose a large part of its barley crop -because of extreme dryness. - Irvam said yields are expected higher than last year's low -levels if favourable weather continues in the next few weeks. - Given an average yield of 3.5 tonnes per hectare, national -production would be around two pct higher than in the previous -season at just above 1.6 mln tonnes, it said. - If yields reach the record 3.78 tonnes per hectare achieved -in 1984, production would be around 1.75 mln tonnes, an -increase of 11 pct compared to 1986. - Reuter - - - - 2-JUN-1987 10:35:41.13 - -uk - - - - - -RM -f1176reute -b f BC-ASIAN-DEVELOPMENT-BAN 06-02 0082 - -ASIAN DEVELOPMENT BANK ISSUES 50 MLN STG EUROBOND - LONDON, June 2 - The Asian Development Bank is issuing a 50 -mln stg eurobond due July 1, 1997 paying 9-1/2 pct and priced -at 101-7/8 pct, lead manager County Natwest Capital Markets Ltd -said. - The non-callable bond is available in denominations of -1,000 and 10,000 stg and will be listed in Luxembourg. - The selling concession is 1-3/8 pct while management and -underwriting combined pays 5/8 pct. - Payment date is July 1. - REUTER - - - - 2-JUN-1987 10:38:09.89 - -usa - - - - - -F -f1191reute -r f BC-DATA-GENERAL-<DGN>-OF 06-02 0095 - -DATA GENERAL <DGN> OFFERS NEW NETWORK PRODUCTS - NEW YORK, June 2 - Data General Corp said it introduced -several new hardware and software products that link -International Business Machines Corp <IBM> and IBM-compatible -personal computers into mainframe and minicomputer systems. - Data General said the products include three local area -networks that conform to industry standards. It said it is now -offering a Starlan network, which was originally introduced by -American telephone and Telegraph Co <t>, a thin Ethernet and a -PC interface for the standard Ethernet. - - In addition, Data General said it will offer several -software packages for PC networks, including MS Net, a product -developed by Microsoft Corp <MSFT.O> that allows PCs to share -printers, data files and other peripherals. - The company said it also introduced a PC version of its -popular CEO office automation software. - Data General said the new products allow computer users to -divide work among a collection of PCs and larger computers. - - "Data General is the first vendor to offer three different -local area networks for personal computer integration," said -Colin Crook, senior vice president of the company's -communications systems group. - "We're really giving users freedom of choice with industry -standard products," added J. David Lyons, vice president of -group marketing. - In addition to the new products, which were expected, Data -General announced a joint product development agreement with -<Gold Hill Computers>, a Cambridge, Mass.,-based artificial -intelligence software company. - - The company also announced the formation of a new network -services group that will help customers plan and design -computer networks. - The group will also provide service and maintenance for -Data General and other vendors' equipment, the company said. - Reuter - - - - 2-JUN-1987 10:38:33.20 - -usa - - - - - -F -f1194reute -r f BC-PERPETUAL-SAVINGS-<PA 06-02 0067 - -PERPETUAL SAVINGS <PASB.O> SETS HOLDING COMPANY - ALEXANDRIA, Va., June 2 - Perpetual Savings Bank said its -board has approved formation of a holding company to be -incorporated in Virginia, subject to Federal Home Loan Bank -Board and shareholder approval. - It said its common and prefered shares would be exchanged -on a one-for-one basis for shares of the holding company, -Perpetual Financial corp. - Reuter - - - - 2-JUN-1987 10:39:23.41 -earn -usa - - - - - -F -f1200reute -u f BC-PEP-BOYS---MANNY,-MOE 06-02 0046 - -PEP BOYS - MANNY, MOE AND JACK INC <PBY> 1ST QTR - PHILADELPHIA, June 2 - May Two net - Shr 11 cts vs eight cts - Net 5,895,000 vs 3,896,000 - Sales 127.3 mln vs 110.5 mln - NOTE: Share adjusted for three-for-one stock split payable -July 27 to holders of record July One. - Reuter - - - - 2-JUN-1987 10:40:26.29 -acq -canada - - - - - -E F -f1202reute -r f BC-elders-says-bid-made 06-02 0100 - -ELDERS HAPPY TO LEAVE CARLING SHARES OUTSTANDING - TORONTO, June 2 - Elders IXL Ltd <ELXA.S> says it is happy -to leave preferences shares of brewer Carling O'Keefe Ltd -outstanding after an undisclosed bidder made an offer to -acquire all of Carling's outstanding preferred stock. - Elders, which owns 100 pct of Carling's outstanding common -shares, previously proposed to redeem the 433,745 Carling -series A preferred shares at 33.50 Canadian dlrs each and -redeem the 386,662 series B preferreds at 40 dlrs a share. - The series A and B preferred shares carry no vote while -dividends are paid. - - Elders says neither it nor Carling knows the identity of -the bidder for Carling's preferred shares. - On May 29, the bidder offered to acquire the Carling -preferred for 36 dlrs for each series A and 40.50 dlrs for each -series B share. - Elders said leaving the Carling preferred shares -outstanding will not affect ongoing plans of the company. - Series B preferred shareholders had previously rejected -Carling's proposal to redeem the shares and a series A -preferred shareholders meeting was adjourned to June 12. - Reuter - - - - 2-JUN-1987 10:40:39.77 - -belgium - -ec - - - -C G T -f1203reute -r f BC-EC-FARM-MINISTERS-DIS 06-02 0116 - -EC FARM MINISTERS DISAGREE ON DIRECT INCOME AIDS - GENVAL, Belgium, June 2 - Plans to provide direct income -aids for European Community (EC) small farmers to help them -face deep cuts in guaranteed crop prices received a mixed -reception from EC agriculture ministers, EC officials said. - The plans were discussed at an informal meeting of the -ministers hosted in the village of Genval by the Council of -Ministers' current chairman, Belgium's Paul de Keersmaeker. - The EC Executive Commission has proposed that the richer -member states be allowed to make direct payments to their -farmers in special difficulties, while the EC itself would -finance a similar scheme in the poorer EC countries. - However, EC officials said only the Netherlands and -Luxembourg supported this idea at today's meeting, and France, -Denmark and Belgium showed marked hostility to it. - French minister Francois Guillaume told reporters, "Farmers -should not become recipients of public assistance -- their -survival should be assured by price mechanisms and the market." - The officials said the ministers had not sought to resolve -their more urgent differences over guaranteed farm prices for -1987/88 at this meeting. - The ministers will resume talks on the price fixing issue -in Luxembourg on June 15. - Reuter - - - - 2-JUN-1987 10:44:13.90 - -usa - - - - - -F -f1226reute -d f BC-ONE-OF-TWO-SARA-LEE-< 06-02 0098 - -ONE OF TWO SARA LEE <SLE> STRIKES SETTLED - DEERFIELD, ILL., June 2 - Sara Lee Corp said 500 workers at -its Kitchens of Sara Lee bakery operation in Deerfield, Ill., -have returned to work this week after ratifying a contract. - A company spokesman said members of Local Two of the -Bakery, Confectionery and Tobacco Workers, who had walked out -May 10, reached "mutually agreeable terms" in a new two-year -contract. - Meanwhile, about 100 Teamster drivers and warehouse -employees, whose contract expired May 16, remained out, the -company said. No new talks were scheduled, Sara Lee said. - Details of the new contract were not immediately available, -but a company spokesman said it "maintained benefits and called -for no sacrifices from current employees." - Union sources reported that the contract freezes wages and -introduces a sharply lower starting rate for new hires. They -said it also gives Sara Lee concessions on a workplace issue -involving excused absences. - Reuter - - - - 2-JUN-1987 10:44:26.34 - -usa - - - - - -F -f1228reute -d f BC-CRAY-<CYR>-GETS-3.6-M 06-02 0051 - -CRAY <CYR> GETS 3.6 MLN DLR COMPUTER ORDER - MINNEAPOLIS, June 2 - Cray Research Inc said Aerospatiale, -a French aerospace company, ordered a Cray X-MP/14se computer -system valued at about 3.6 mln dlrs. - It said the leased system will be installed in the fourth -quarter, pending export license approval. - Reuter - - - - 2-JUN-1987 10:48:49.65 - -portugal - - - - - -RM -f1246reute -u f BC-PORTUGAL-CONTRACTS-FO 06-02 0105 - -PORTUGAL CONTRACTS FOR 150 MLN ECU LOAN - LISBON, June 2 - Portugal has contracted a six-year, 150 -mln ECU loan from a group of foreign banks led by Daiwa Europe -Ltd to finance investment projects, the finance ministry said. - Interest of 7.75 pct is to be paid in annual instalments -starting in 1988, ministry spokesman Luis Vilhena de Cunha -said. - The loan will first be in the form of a temporary global -note and be replaced later by subscriptions of 1,000 and 10,000 -ECUs. The issue price was set at 101.75 pct. - Banque Generale du Luxembourg SA will act as listing agent -and fiscal agent, the spokesman added. - REUTER - - - - 2-JUN-1987 10:50:08.18 -carcass -usa - - - - - -C G L -f1251reute -b f BC-CHICKEN-NOT-MAIN-SALM 06-02 0140 - -CHICKEN NOT MAIN SALMONELLA CAUSE, OFFICIAL SAYS - WASHINGTON, June 2 - A representative of the poultry -industry said statistics showed that chicken is less frequently -the cause of salmonella poisoning than beef, dairy products or -salads and other mixed foods. - Kenneth May, President of Holly Farms Poultry Industries -and a director of the National Broiler Council, told a House -Agriculture subcommittee the incidence of salmonella in chicken -has not increased in recent years and that chicken is neither -the major source of the bacterial poisoning nor the cause of an -increase in outbreaks of the disease. - May said the Center for Disease Control figures showed that -between 1978 and 1982, chicken was involved in four pct of all -U.S. salmonellosis outbreaks, while beef accounted for ten pct -of outbreaks and dairy products six pct. - May said the remaining outbreaks were caused by salads and -mixed food, turkey, seafood, pork, eggs and other foods. - May said the chicken industry favored moving away from -bird-by-bird inspection procedures to a risk assessment system -better able to identify microbial and bacterial contamination -of poultry. - However, Ellen Haas, executive director of Public Voice for -Food and Health Policy, said bird-by-bird inspection should be -retained and labels should be attached to each ready-to-cook -chicken to remind consumers about preparation procedures -necessary to avoid illness. - Haas also called for a review of present chicken industry -inspection methods that she said can worsen poultry hazards. - Reuter - - - - 2-JUN-1987 10:51:10.96 -graincorn -usa - - - - - -C G -f1254reute -u f BC-/U.S.-HOUSE-PANEL-VOT 06-02 0110 - -U.S. HOUSE PANEL VOTES TO SPEED UP CORN PAYMENTS - WASHINGTON, June 2 - The House Agriculture Committee voted -to make approximately 2.8 billion dlrs of feedgrains deficiency -payments immediately instead of in the late fall. - A similar measure was decisively defeated on the Senate -floor last week. - The bill, which passed by a voice vote, would allow -so-called Findley payments to be made immediately rather than -late this year. Payments for 1987-90 feedgrains crops would not -be changed. - Because the bill would move 2.8 billion dlrs of spending -into fiscal 1987 from fiscal 1988, the measure is expected to -meet stiff resistance in the full House. - - Reuter - - - - 2-JUN-1987 10:51:16.67 -acq -usa - - - - - -F -f1255reute -u f BC-JONES-AND-VINING-<JNS 06-02 0031 - -JONES AND VINING <JNSV.O> STARTS BID FOR SHARES - BRAINTREE, Mass., June 2 - Jones and Vining Inc said it has -started a tender offer for all of its own shares at five dlrs -per share. - The company said it will hold a special meeting on July 10 -for a vote on approval of a merger at the tender price. - It said the price to be paid in the tender and merger could -be reduced by any fees and expenses the court may award to -counsel for the plaintiffs in the class action suit brought -against it in Delaware Chancery Court by Ronda Inc. The -plaintfiffs' counsel are seeking fees of up to 10 cts per -share, Jones and Vining said. - The company said the court has scheduled a hearing on the -proposed settlement of the suit for July Eight. - The company said the start of the tender offer and the -calling of the special meeting are conditions of the -settlement, and completion of the tender and merger are -conditioned on final approval of the settlement. - Reuter - - - - 2-JUN-1987 10:51:48.40 -acq -usa - - - - - -F -f1258reute -d f BC-HEALTHSOUTH-<HSRC.O> 06-02 0064 - -HEALTHSOUTH <HSRC.O> MAKES ACQUISITION - BIRMINGHAM, Ala., June 2 - HEALTHSOUTH Rehabilitation Corp -said it has acquired Pine Island Sports Medicine Center in Fort -Lauderdale, Fla., and will incorporate the facility into its -HEALTHSOUTH Rehabilitation Center of Fort Lauderdale, which is -now under construction and should be in operation by -mid-summer. - Terms were not disclosed. - Reuter - - - - 2-JUN-1987 10:51:55.69 -acq -usa - - - - - -F -f1259reute -d f BC-BANC-ONE-<ONE>-MAKES 06-02 0033 - -BANC ONE <ONE> MAKES INDIANA ACQUISITION - COLUMBUS, Ohio, June 2 - Banc One Corp said it has -completed the acquisition of First National Bank of -Bloomington, Ind, which has assets of 271 mln dlrs. - Reuter - - - - 2-JUN-1987 10:53:42.76 - -usa - - - - - -F -f1265reute -r f BC-PENTLAND-INDUSTRIES-P 06-02 0062 - -PENTLAND INDUSTRIES PLC HOLDERS APPROVE SPLIT - NEW YORK, June 2 - Pentland Industries PLC said -shareholders at the annual meeting approved an increase in -authorized share capital to 36 mln stg to 12 mln stg by -creation of another 240 mln ordinary shares, allowing for a -three-for-one stock split. - It said dealings in the new shares are expected to start on -June 15. - Reuter - - - - 2-JUN-1987 10:54:40.06 -acq -usa - - - - - -F -f1270reute -d f BC-ORION-BROADCAST-<OBGI 06-02 0079 - -ORION BROADCAST <OBGI.O> BUYS FORD <F> UNIT - DENVER, June 2 - Orion Broadcast Group Inc said its -majority-owned Orion Financial Services Corp subsidiary has -agreed to purchase FN Realty Services Inc from Ford Motor Co -for 1,200,000 to 1,500,000 dlrs in cash and notes. - It said closing is expected within 45 days after receipt of -regulatory approvals. - FN provides loan collection, accounting, data processing -and administrative services to the real estate industry. - Reuter - - - - 2-JUN-1987 10:54:52.48 - -luxembourg - -ec - - - -C G T -f1271reute -r f BC-EC-BUDGET-MINISTERS-S 06-02 0100 - -EC BUDGET MINISTERS SET TO REFUSE PLEA FOR CASH - LUXEMBOURG, June 2 - A plea for extra cash to bail the -European Community (EC) out of its latest financial crisis was -likely to be rejected at a meeting today of EC budget -ministers, diplomats said. - The ministers were meeting for the first time since the EC -Executive Commission unveiled an emergency budget for 1987 -aimed at plugging a deficit caused by soaring farm spending and -falling revenues. - The emergency package includes a demand for member states -to pay an extra 1.5 billion European currency units (Ecus) to -help meet the deficit. - Officials said Britain and West Germany were expected to -lead opposition to contributing any extra cash, with the U.K -insisting instead on a clampdown on runaway farm spending. - The Commission says there will be a shortfall of at least -five billion Ecus this year, more than 1/8 of total spending. - It hopes to make up much of the shortfall in a one-time -accounting exercise by paying member states in arrears rather -than in advance for their spending on Community farm policies. - But if member states do not make up the rest of the gap, -the Commission has warned that spending on regional and social -projects could be slashed by half. - Reuter - - - - 2-JUN-1987 10:55:50.84 - -usa - - - - - -F -f1273reute -h f BC-ORBIT-<ORBT.O>-UNIT-I 06-02 0083 - -ORBIT <ORBT.O> UNIT INCREASES BACKLOG - HAUPPAUGE, N.Y., June 2 - Orbit Instrument Corp said its -unit, Orbit Semiconductor Inc, has received orders totalling -about 2.5 mln dlrs which puts its backlog at a record level of -about 4.7 mln dlrs. - Additionally, the company said it will now offer two Micron -CMOS processes that can withstand Megarad total dose radiation. - Applications for the processes include products -manufactured for military, medical and power industry market, -the company said. - Reuter - - - - 2-JUN-1987 10:57:14.48 - -south-africa - - - - - -C M -f1281reute -u f BC-SOUTH-AFRICA-NAMES-1, 06-02 0100 - -SOUTH AFRICA SAYS 1,500 STILL DETAINEES - CAPE TOWN, June 2 - South Africa said the number of people -it was detaining without trial has dropped to 1,500, far fewer -than previous official figures during the past year of -emergency rule. - A government spokesman said the latest set of names, -presented to parliament, included all current detainees who had -been held for over a month. Previous lists have named up to -8,500 people. - The official figure was supported by civil rights groups -who said many detainees had been freed in recent weeks, -possibly to empty cells for a new government crackdown. - Reuter - - - - 2-JUN-1987 11:02:51.01 - -japan - - - - - -C G T -f1297reute -d f BC-JAPANESE-FARMERS-MARC 06-02 0098 - -JAPANESE FARMERS PROTEST OPENING MARKETS - TOKYO, June 2 - Thousands of farmers gathered in central -Tokyo to urge the government to stand firm against foreign -pressure for further opening up of Japan's markets to foreign -agricultural products, union officials said. - Officials of the Central Union of Agricultural Cooperatives -said about 5,000 representatives from 4,200 farming groups -joined the demonstration. - The organisers said the farmers demanded that the -government should avoid easy compromises on liberalising -agricultural imports at next week's economic summit in Venice. - The United States and the European Community want Japan to -remove tariffs and quotas to help cut their trade deficits with -Japan. - Under a banner reading "The government and parliament must -not sacrifice farmers," the demonstrators adopted a declaration -saying they would fight any unreasonable moves to open Japanese -markets to foreign agricultural products. - An agriculture ministry official said Japan and the United -States were expected to hold talks on Japanese import ceilings -for U.S. Beef and citrus fruit in September. - Reuter - - - - 2-JUN-1987 11:04:44.51 - - - - - - - -RM C G L M T F -f1303reute -b f BC-LONDON-GOLD-1500-FIX 06-02 0008 - -******LONDON GOLD 1500 FIX - JUNE 2 - 455.00 DLRS -Blah blah blah. - - - - - - 2-JUN-1987 11:07:06.07 - -norway -de-clercq -ec - - - -C G L M T -f1316reute -d f BC-FRESH-DEBATE-ON-NORWA 06-02 0091 - -FRESH DEBATE ON NORWAY'S EC MEMBERSHIP WELCOMED - OSLO, June 2 - European Community officials welcomed -Norway's recent move to renew a public debate on Community -membership but said Norway should not expect special trade -advantages as long as it stays outside the EC. - Belgian Willy de Clercq, EC Commissioner on external -affairs and trade policy, said high level talks this week with -Norway's minority Labour government had helped clarify several -misconceptions that led to Norway's narrow rejection of EC -membership in a 1972 referendum. - "But you (Norway) cannot be in the club and remain outside -the club. You can expect equal footing in the club, but not out -of it," de Clercq added, referring to Norway's attempts to adapt -its EC trade ties in the face of Community moves to launch an -internal trade market from 1992. - The government, worried that the internal market will -hamper trade with the EC, which takes about two-thirds of -Norway's exports, last month sent a report to parliament asking -political parties and the public to reassess the country's -relationship to the EC. - Reuter - - - - 2-JUN-1987 11:08:09.27 - - - - - - - -F -f1321reute -f f BC-******GULF-AND-WESTER 06-02 0009 - -******GULF AND WESTERN INC 2ND QTR SHR 86 CTS VS 73 CTS -Blah blah blah. - - - - - - 2-JUN-1987 11:08:48.90 -earn -usa - - - - - -F -f1325reute -u f BC-PHH-GROUP-INC-<PHH>-4 06-02 0057 - -PHH GROUP INC <PHH> 4TH QTR APRIL 30 NET - HUNT VALLEY, Md., June 2 - - Shr 71 cts vs 47 cts - Net 12.1 mln vs 7.8 mln - Revs 369.8 mln vs 307.9 mln - 12 mths - Shr 2.35 dlrs vs 2.33 dlrs - Net 39.5 mln vs 39 mln - Revs 1.36 billion vs 1.24 billion - NOTE: Prior year restated to reflect results from current -year acquisitions. - - Reuter - - - - 2-JUN-1987 11:10:13.59 - -usa -volcker - - - - -V RM -f1330reute -u f AM-VOLCKER-TEXT 06-02 0062 - -VOLCKER IN LETTER DECLINES NEW FED TERM - WASHINGTON, June 2 - Following is the full text of Federal -Reserve Board Chairman Paul Volcker's letter to President -Reagan declining reappointment to the Fed: - Dear Mr. President, - As the end of my term as chairman of the Federal Reserve -Board approaches, you naturally have to consider an appropriate -new appointment. - - In that connection, you will recall that, upon my -reappointment as chairman in 1983, I felt unable to make a firm -commitment to you or to the Congress to remain in office for a -second full four-year term. Despite my reservations at the -time, that term is in fact now almost finished. However, I do -think, after eight years as chairman, a natural time has now -come for me to return to private life as soon as reasonably -convenient and consistent with an orderly transition. -Consequently, I do not desire reappointment as chairman and I -plan to resign as governor when a new chairman is prepared to -assume office. - - I will be leaving with a sense of great appreciation for -your unfailing courtesy to me personally. More broadly, your -consistent support of the work of the Federal Reserve during a -particularly challenging period for it, for the financial -system, and for the economy has been critical to whatever -success we have had. - - Without doubt, strong challenges remain for all of those -involved in economic policy. In that effort, I believe the -nation will continue to be well served by a strong Federal -Reserve System -- a system firmly dedicated to fostering -economic and financial strength and stability and able to bring -to that effort a combination of sound and independent -professional judgement and continuity beyond any partisan -considerations. - - May I add, too, my personal best wishes for the remainder -of your own term in office during which you have done so much -to restore a sense of confidence and self-reliance among the -American people. - Faithfully yours, - Paul A Volcker - Reuter - - - - 2-JUN-1987 11:18:53.04 -money-fx -uk -lawson - - - - -RM -f1373reute -u f BC-LAWSON-CALLS-INTERVEN 06-02 0120 - -LAWSON CALLS INTERVENTION PROOF OF STABILITY GOAL - LONDON, June 2 - The scale of foreign exchange intervention -the Bank of England has carried out recently is clear proof of -Britain's determination to stabilise exchange rates as agreed -between the Group of Seven industrialised countries in Paris in -February, Chancellor of the Exchequer Nigel Lawson said. - Saying he was "content" with sterling's current value, Lawson -told reporters he wanted "to maintain the exchange rate -stability we have all signed up for." He declined to say if he -favoured a rise or a fall from present sterling levels. - May currency reserves, out today, showed a record 4.8 billion -stg rise, pointing to massive currency intervention. - In April, reserves rose a hefty 2.9 billion stg. - Pointing to the reserves data, Lawson said, "We have been -playing a very full part ourselves" in meeting our commitments -toward exchange rate stability as agreed in Paris. - "We wish to see it (stability) continuing," he added. - Asked which techniques were available to preserve -stability, Lawson said both central bank intervention and -interest rate changes could be used to tackle "the market -pressures there are from time to time." - "Interest rate stability is not an objective in that -sense...Rates have to be moved up and down at times," he added. - Lawson said he expected intervention to be "sterilised" by -draining excess sterling liquidity from the market through new -issues of government securities and foreign currency sales, -when the market allowed. - This would limit the inflationary impact of intervention, -he said. - "Sterilisation will be dictated by market tactics...Not -necessarily in the month in which intervention occurs," Lawson -said. "I am confident that we can sterilise on this scale." - REUTER - - - - 2-JUN-1987 11:19:19.10 -money-fxinterest -usa - - - - - -V RM -f1376reute -b f BC-/-FED-NOT-EXPECTED-TO 06-02 0071 - -FED NOT EXPECTED TO TAKE MONEY MARKET ACTION - NEW YORK, June 2 - The Federal Reserve is not expected to -intervene in the government securities market to add or drain -reserves at its usual intervention time this morning, -economists said. - With the Federal funds rate trading comfortably at 6-9/16 -pct, down from yesterday's 6.74 pct average, economists said -the Fed did not need to take reserve management action today. - Reuter - - - - 2-JUN-1987 11:19:50.44 -earn -usa - - - - - -F -f1379reute -b f BC-******GULF-AND-WESTER 06-02 0044 - -GULF AND WESTERN INC <GW> 2ND QTR APRIL 30 NET - NEW YORK, June 2 - - Shr 86 cts vs 73 cts - Net 52.7 mln vs 45.7 mln - Revs 989.9 mln vs 863.9 mln - Six mths - Shr 1.97 dlrs vs 1.28 dlrs - Net 122 mln vs 79.9 mln - Revs 2.078 billion vs 1.726 billion - Reuter - - - - 2-JUN-1987 11:20:12.43 - - - - - - - -F E -f1382reute -b f BC-******ALLEGIS-SAID-IT 06-02 0014 - -******ALLEGIS SAID IT IS CREATING A LIMITED PARTNERSHIP TO SELL SOME CANADIAN HOTELS -Blah blah blah. - - - - - - 2-JUN-1987 11:22:06.08 - - - - - - - -F -f1395reute -b f BC-******BROWN-GROUP-INC 06-02 0008 - -******BROWN GROUP INC 1ST QTR SHR 56 CTS VS 42 CTS -Blah blah blah. - - - - - - 2-JUN-1987 11:22:55.99 - - - - - - - -F E -f1402reute -b f BC-******ALLEGIS-SAID-IT 06-02 0013 - -******ALLEGIS SAID IT SEES PROCEEDS OF 350 MLN CANADIAN DLRS WHEN HOTELS ARE SOLD -Blah blah blah. - - - - - - 2-JUN-1987 11:23:12.29 - - - -icco - - - -T -f1404reute -f f BC-ICCO-BUFFER-STOCK-MAN 06-02 0010 - -******ICCO BUFFER STOCK MANAGER BUYS 5,000 TONNES - OFFICIAL -Blah blah blah. - - - - - - 2-JUN-1987 11:24:34.77 - -switzerland -volckergreenspan - - - - -RM -f1415reute -u f BC-CSFB-ECONOMIST-SAYS-V 06-02 0104 - -CSFB ECONOMIST SAYS VOCLKER'S RESIGNATION A SHOCK - ZURICH, June 2 - The decision by Paul Volcker not to serve -a third term as chairman of the U.S. Federal Reserve Board is a -shock for financial markets and the world economy, Hans Mast, -senior economic adviser to Credit Suisse First Boston, said. - "The markets will believe there will be pressure for a more -expansive policy (in the United States)," he said. - "I would say this is quite a shock for the world economy," he -added. "He always stood for an anti-inflationary policy and -tight fiscal discipline. He was one of the best central bankers -America has had." - Mast said the markets would now be trying to assess what -sort of direction the Fed would be taking under Alan Greenspan, -designated to succeed Volcker. - "Greenspan is more of a politician than an academician, but -the most important thing is that he has little experience in -banking," Mast said. - Greenspan's first comments on being named were that the -dollar appeared to have bottomed out but Mast said that -conviction would have to be backed by policy. "How can you say -the dollar has bottomed out with the present level of current -account deficits?" he said. "I would be sceptical." - REUTER - - - - 2-JUN-1987 11:24:48.49 - -usa -volcker - - - - -A RM -f1417reute -u f BC-SHEARSON-ECONOMIST-SA 06-02 0109 - -SHEARSON ECONOMIST SAYS VOLCKER EFFECT SHORT-TERM - NEW YORK, June 2 - Alan Sinai, chief economist of Shearson -Lehman Brothers Inc, said news that Federal Reserve Chairman -Paul Volcker declined to accept reappointment would have only a -short-term effect on financial markets. - "The markets should not go into a panic," Sinai told a -fixed-income conference in New York sponsored by the Institute -for International Research. - Sinai said he thought that Volcker was one of the best Fed -governors in the country's history. Still, he predicted that -the markets would calm after today's tremors. - Alan Greenspan has been nominated to replace Volcker. - Reuter - - - - 2-JUN-1987 11:25:21.16 - -usa - - - - - -F -f1421reute -r f BC-PERRY-DRUG-STORES-<PD 06-02 0068 - -PERRY DRUG STORES <PDS> NAMES NEW PRESIDENT - PONTIAC, Mich., June 2 - Perry Drug Stores Inc said it has -elected David Schwartz as president and chief executive -officer, effective immediately. - Perry said Schwartz, who will also serve on the board, -replaced Donald Fox, who resigned January 12. - Previously, Schwartz was vice president of drug and general -merchandise for Kroger Co <KR>, Perry said. - Reuter - - - - 2-JUN-1987 11:25:35.88 - -usa - - - - - -F -f1423reute -r f BC-MICRO-D-<MCRD.O>-IN-A 06-02 0088 - -MICRO D <MCRD.O> IN AGREEMENT WITH ZENITH <ZE> - GLENVIEW, ILL., June 2 - Zenith Electronics Corp said its -computer subsidiary signed an agreement under which Micro D Inc -will market the new Zenith Data Systems monitor, which uses the -flat tension mask color video display. - The monitor offers more than 50 pct greater brightness and -contrast performance than conventional high-revolution computer -monitors, Zenith said. It is compatible with the new IBM -Personal System/2 computers and will be available later this -summer. - Reuter - - - - 2-JUN-1987 11:25:47.87 -trade -turkey - - - - - -RM -f1425reute -r f BC-TURKISH-TRADE-DEFICIT 06-02 0083 - -TURKISH TRADE DEFICIT WIDENS IN APRIL - ANKARA, June 2 - Turkey's trade deficit widened to 382 mln -dlrs in April from 275 mln in March and 273 mln in April 1986, -the State Statistics Institute said. - The deficit for the first quarter of 1987 widened to 1.23 -billion dlrs from 1.20 billion a year earlier. - April exports totalled 702 mln dlrs compared with imports -of 1.08 billion. - Exports in the first four months were worth 2.69 billion -dlrs compared with imports of 3.92 billion. - REUTER - - - - 2-JUN-1987 11:25:57.77 -earn -usa - - - - - -F -f1427reute -r f BC-UNITED-FINANCIAL-BANK 06-02 0039 - -UNITED FINANCIAL BANKING <UFBC.O> 1ST QTR NET - VIENNA, Va., June 2 - - Shr four cts vs 21 cts - Net 29,862 vs 152,826 - NOTE: Full name is United Financial Banking Cos Inc. Net -includes loan loss provision nil vs 40,000 dlrs. - Reuter - - - - 2-JUN-1987 11:26:37.03 - -usa - - - - - -F -f1432reute -d f BC-DREYFUS-<DRY>-INTRODU 06-02 0099 - -DREYFUS <DRY> INTRODUCES STOCK INDEX FUND - NEW YORK, June 2 - Dreyfus Corp said it introduced a stock -index mutual fund designed primarily for use by bank trust -departments in managing their corporate pension accounts. - Dreyfus said the fund is keyed to matching the performance -of Standard and Poor's 500 Composite Stock Price Index, and in -addition to purchasing stock of the S and P index, the fund may -also deal in index futures. - The company said the fund will be managed by <Wells Fargo -Investment Advisors>. - Minimum investment requirement is one mln dlrs, the company -said. - Reuter - - - - 2-JUN-1987 11:27:37.15 - -usa -greenspanvolcker - - - - -A RM -f1437reute -u f BC-SEN-DOLE-SAYS-GREENSP 06-02 0113 - -SEN DOLE SAYS GREENSPAN WILL BE GOOD FED CHAIRMAN - WASHINGTON, June 2 - Senate Republican Leader Robert Dole -of Kansas said Alan Greenspan would be a good replacement for -Paul Volcker as Federal Reserve Chairman. - "While Paul Volcker's retirement is a real loss, this -country is very fortunate to have a man of Alan Greenspan's -caliber to take his place," Dole said in a statement. - "Alan's knowledge of the economy, coupled with his -experience at the top levels of government, means that the -leadership of the Federal Reserve Board will be in good hands. -Alan, literally, has some big shoes to fill. But I haven't any -doubts he's more than equal to the task," Dole said. - Reuter - - - - 2-JUN-1987 11:27:45.10 -earn -usa - - - - - -F -f1438reute -u f BC-BROWN-GROUP-INC-<BG> 06-02 0032 - -BROWN GROUP INC <BG> 1ST QTR MAY 2 NET - ST. LOUIS, Junee 2 - - Shr 56 cts vs 42 cts - Net 10,030,000 vs 7,833,000 - Sales 392.1 mln vs 339.6 mln - Avg shrs 17,966,000 vs 18,709,000 - Reuter - - - - 2-JUN-1987 11:28:11.97 -crude -usa - - - - - -C -f1439reute -d f BC-U.S.-ENERGY-SECRETARY 06-02 0141 - -U.S. ENERGY SECRETARY SEES HIGHER OIL PRICES - WASHINGTON, June 2 - Energy Secretary Donald Hodel said he -expects oil prices to rise significantly by the year 2000, -probably to around 33 dlrs a barrel in current dollars. - "I do anticipate a significant increase (by 2000). -Thirty-three dlrs a barrel is not unreasonable," Hodel told the -Senate Energy Committee. - Hodel said the loss of some domestic oil production through -the shutdown of stripper (10 barrels a day or less) wells -because of low prices was probably permanent. He said he was -also concerned by the decline in domestic oil exploration. - Hodel urged Congress to approve oil exploration in section -1002 of the Arctic National Wildlife Refuge in Alaska. He said -geologic condtions in the area were favorable for the discovery -of oil fields equal to those in nearby Prudhoe Bay. - Reuter - - - - 2-JUN-1987 11:28:46.97 - -usa - - - - - -F -f1444reute -s f BC-MUTUAL-OF-OMAHA-INTER 06-02 0024 - -MUTUAL OF OMAHA INTEREST SHARES INC <MUO> PAYOUT - OMAHA, Neb., June 2 - - Qtly div 36 cts vs 36 cts prior - Payable July 1 - Record June 12 - Reuter - - - - 2-JUN-1987 11:29:35.72 -earn -usa - - - - - -F -f1445reute -r f BC-NORTHWEST-TELEPRODUCT 06-02 0043 - -NORTHWEST TELEPRODUCTIONS <NWTL.O> 4TH QTR NET - MINNEAPOLIS, MINN., June 2 - - Shr 15 cts vs 16 cts - Net 239,034 vs 264,485 - Sales 2,932,782 vs 2,664,853 - Year - Shr 57 cts vs 45 cts - Net 929,524 vs 741,121 - Sales 10.9 mln vs 9,708,792 - - Reuter - - - - 2-JUN-1987 11:31:07.63 - - - - - - - -F -f1451reute -b f BC-******U.S.-JUDGE-SAYS 06-02 0014 - -******U.S. JUDGE SAYS TO DECIDE BURLINGTON REQUEST FOR SAMJENS INJUNCTION IN "FEW DAYS" -Blah blah blah. - - - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-019.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-019.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-019.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-019.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2013 +0,0 @@ - - -18-JUN-1987 18:46:13.14 - -usa - - - - - -F -f4966reute -u f BC-BEVERLY-HILLS-COP-II 06-18 0074 - -BEVERLY HILLS COP II TOPS 100 MLN AT BOX OFFICE - NEW YORK, June 18 - Gulf and Western Inc's <GW> Paramount -Pictures Corp division said its movie "Beverly Hills Cop II" -has topped the 100 mln dlr mark at the box office on the 29th -day of its North American release. - Paramount said the the movie has become the fastest movie -to hit the 100 mln dlr mark with an "R" rating, which means -that anyone under 17 must be accompanied by their parents. - Reuter - - - -18-JUN-1987 18:46:33.73 - -usa - - - - - -F -f4968reute -s f BC-TRANSAMERICA-CORP-<TA 06-18 0022 - -TRANSAMERICA CORP <TA> QUARTERLY DIVIDEND - SAN FRANCISCO, June 18 - - Qtly div 44 cts vs 44 cts - Pay July 31 - Record July 3 - Reuter - - - -18-JUN-1987 18:48:35.56 - -usajapan - - - - - -F A -f4972reute -d f AM-POLICY 06-18 0078 - -U.S. HOUSE CALLS HIGHER JAPAN DEFENSE SPENDING - WASHINGTON, June 18 - The House today supported a call for -Japan to boost its defense spending to help share the burden of -protecting Western interests in sensitive areas around the -world, including in the Gulf. - House member approved a measure that would require -Secretary of State George Shultz to enter into talks with Japan -on increasing Japanese defense spending to at least 3 pct of -its gross national product. - The measure, passed during consideration of the 1988-89 -State Department funding bill would not require an increase, -but legislators called on Japan to spend more on defense. The -Senate must approve the measure before it becomes law. - "We don't have to bash the Japanese. We have to show them -how to share the burden of the defense of the free world," said -Rep. Robert Dornan, a California Republican. - The amendment calls on Shultz to enter into talks with -Japan with the aim of reaching agreement on one of two -alternatives: either Japan can spend 3 pct of its GNP on -defense by itself or give the equivalent amount of money to the -United States as a kind of security fee. - Reuter - - - -18-JUN-1987 18:55:48.68 -gnp - - -oecd - - - -RM -f4988reute -f f BC-OECD-SEES-1.5-PCT-WES 06-18 0010 - -****** OECD SEES 1.5 PCT WEST GERMAN REAL GNP GROWTH IN 1987 - - - - - -18-JUN-1987 18:56:07.09 -gnpcpibop -franceaustralia - -oecd - - - -RM -f4990reute -u f BC-AUSTRALIA-SET-TO-GROW 06-18 0117 - -AUSTRALIA SET TO GROW, BUT UNEMPLOYMENT MAY RISE - PARIS, June 19 - Australia's economy should manage modest -growth over the next two years after a sharp slowdown but -unemployment could still edge upwards, the Organisation for -Economic Cooperation and Development (OECD) said. - The organisation's latest half-yearly report says Gross -Domestic Product will grow by 2.5 pct this year and by 2.75 pct -in 1988 compared with only 1.4 pct in 1986. The growth will be -helped by higher stockbuilding and stronger domestic demand -following tax cuts and higher real wages, it added. - The report forecasts a decline in inflation, with consumer -prices increasing by 8.5 pct this year and 6.25 pct in 1988. - The current account deficit shows signs of easing slightly -and could narrow to 12 billion dlrs by the end of 1988. - While predicting slightly stronger growth than last year, -however, the report revises downwards the OECD's earlier growth -forecast for 1987 of 3.75 pct. - The OECD predicts a similar combination of modest economic -growth and rising unemployment for New Zealand, which is -struggling to recover from a major economic crisis. - The country's GDP, which contracted by 0.6 pct last year, -should again show growth over the next two years, rising by -0.25 pct this year and a more substantial 2.75 pct in 1988. - Reuter - - - -18-JUN-1987 19:03:26.58 -acq -usa - - - - - -F -f4996reute -u f BC-/SQUIBB-<SQB>-SAID-NO 06-18 0104 - -SQUIBB <SQB> SAID NOT INTERESTED IN BUYING CETUS - BY MARJORIE SHAFFER, REUTERS - NEW YORK, June 18 - Robert Fildes, president and chief -executive of Cetus Corp <CTUS.O>, told Reuters that Squibb Corp -is not interested in buying Cetus. - Earlier the companies said Squibb would buy from Cetus a -five pct equity postion in Cetus for about 40 mln dlrs. - "This is not an attempt by Squibb to become a major -majority holder in Cetus," Fildes told Reuters in an interview. -"Squibb has not approached us with any indication that they -want to acquire us and we wouldn't be interested in that kind -of arrangement," said Fildes. - Squibb could not be reached to comment on the late comments -by Fildes. - Squibb is Cetus' first pharmaceutical partner and the only -one to own an equity position in Cetus. Eastman Kodak Co <EK> -and W.R. Grace <WR> both have joint ventures with Cetus, but -neither owns an equity position in the company, said Fildes. - Cetus has a venture with Kodak to develp diagnostic -products and with Grace to develop agricultural products. - Earlier, Squibb and Cetus announced in a joint statement -an agreement in principle to form a joint venture to develop -new biotechnology products in several fields. - - As part of the deal Squibb will license several of Cetus' -anticancer agents, including interleukin-2, in development. -Squibb will sell the drugs only in Japan and other markets but -not in North American and Western Europe. - "We wouldn't have done this deal had it not been understood -that Cetus wants to build its own fully integrated business in -North America and Europe," said Fildes. - He said Squibb was the good partner because Squibb has a -major joint venture in Japan and has sales capabilities of its -own in that market. - - Fildes said Cetus has shunned licensing arrangements with -pharmaceutical companies because it wanted to build its own -business. Many large corporations have invested in small -biotech firms. - But Squibb's investment in Cetus is the first it has made -in biotechnology. Fildes said that was attractive to Cetus -because it wanted a partner that didn't have a relationship -with a large number of other biotechnology companies." - - Fildes said his strategy was to have partners in non drug -areas like diagnostics and agriculture, but to "keep the -biggest developments in anticancer drugs to ourselves." - Fildes said the partnership with Squibb would be used to -broaden the company's reach in such big money making areas -as the cardiovascular, anti-infective and the anti-inflammatory -markets. - Squibb is also investming 75 mln dlrs in Cetus' research -over the next five years. - - "Squibb is putting up over 75 mln dlrs in research and -development to make it happen, while the equity position part -of the package is simply to demonstrate the seriousness of this -partnership," said Fildes. - Reuter - - - -18-JUN-1987 19:44:15.31 - -usa - - - - - -F -f5022reute -b f BC-NBC-SAYS-IT-WILL-IMPL 06-18 0116 - -NBC SAYS IT WILL IMPLEMENT CONTRACT JUNE 29 - NEW YORK, June 29 - The National Broadcasting Co, a unit of -General Electric Co <GE>, said it intends to implement on June -29 a labor contract rejected by union represenatives. - A spokesman for the National Association of Broadcast -Employees and Technicians, represening 2,800 workers, said its -negotiating committee adopted a formal resolution today stating -it will inform NBC it will strike upon implementation. - "The union will have to decide what action it thinks is -appropriate," said Day Krolik, NBC's vice president for labor -relations. A union spokesman said NBC has until the day of -implemetation to peacefully negotiate a contract. - Reuter - - - -18-JUN-1987 19:50:03.10 - -usa - - - - - -F -f5025reute -u f BC-FORMER-SHEARSON-<SHE> 06-18 0099 - -FORMER SHEARSON <SHE> OFFICIAL PLEADS GUILTY - NEW YORK, June 18 - Mark Stahl, 45, who was a former senior -vice president of Shearson Lehman Brothers, until his -suspension on April 16, today admitted in U.S. District court -here, embezzling almost 19 mln dlrs from his firm over the past -year. - He entered a guilty plea before United States District -Court Judge Vincent Broderick to four specific charges totaling -1,031,000 dlrs on wire fraud. - Stahl, who was a senior vice president for finance, told -the judge that the total embezzlement amounted to "a little -less than" 19 mln dlrs. - - Through an attorney, Stahl agreed to make restitution to -Shearson Lehman of all the embezzled funds if possible. However -his guilty pleas today to the four counts will cover all -criminal liability of the embezzlement that occurred between -April 1986 to last April. - Judge Broderick scheduled sentencing for December nine. - Stahl faces a maximum sentence of 20 years in jail and one -mln dlrs in fines, or both. - Reuter - - - -18-JUN-1987 19:53:55.04 -earn -usa - - - - - -F -f5027reute -u f BC-TRI-STAR-PICTURES-INC 06-18 0083 - -TRI-STAR PICTURES INC <TRSP.O> 1ST QTR MAY 31 - NEW YORK, June 18 - - Shr four cts vs four cts - Net 1,180,000 vs 902,000 - Revs 146.9 mln vs 37.0 mln - Avg shrs 33 mln vs 23.9 mln - NOTE: Company changed its fiscal year from December 31 to -the last day of February, thus results of operations for the -year-ago period have been restated to reflect this change. - Current first quarter includes results of operations of -Loews Theatre Management Corp which Tri-Star acquired December -31. - Reuter - - - -18-JUN-1987 20:07:05.93 - - - - - - - -E F RM -f5035reute -f f BC-CANADA-BUDGET-DEFICIT 06-18 0013 - -******CANADA BUDGET DEFICIT DECLINE TO SLOW IN LATE 1980S - -OFFICIAL - Reuter - - - - - -18-JUN-1987 20:07:10.18 - - - - - - - -V RM E -f5036reute -f f BC-CANADA-UPS-CORPORATE 06-18 0014 - -******CANADA LIFTS CORPORATE TAX REVENUES BY FIVE BILLION DLRS -OVER FIVE YEARS - OFFICIAL - - - - - -18-JUN-1987 20:07:45.08 - - -wilson - - - - -E F RM -f5037reute -f f BC-WILSON-CUTS-PERSONAL 06-18 0011 - -******WILSON CUTS PERSONAL TAX RATES, LIMITS CAPITAL GAINS -EXEMPTIONS - Reuter - - - - - -18-JUN-1987 20:08:00.01 - - - - - - - -V RM E -f5038reute -f f BC-CANADA-UPS-FINANCIAL 06-18 0015 - -******CANADA LIFTS FINANCIAL INSTITUTION AVERAGE TAX RATE TO -21.3 PCT FROM 14.5 PCT - OFFICIAL - - - - - -18-JUN-1987 20:12:23.11 - -canada -wilson - - - - -V E RM -f5040reute -u f BC-WILSON-TO-HIKE-CORPOR 06-18 0085 - -CANADA TO INCREASE CORPORATE TAX REVENUES - OTTAWA, June 18 - Canada will increase corporate tax -revenues by about five billion dlrs over the next five years by -broadening the tax base and allowing fewer exemptions, finance -minister Michael Wilson said. - As Wilson previously promised, he said corporations will -bear an increased tax burden, despite new measures to lower -overall tax rates. - Increased corporate revenues will result from broadening -the tax base and eliminating special tax exemptions. - "The jobs of many Canadians depend on a corporate income -tax system that is competitive with other countries, -particularly the United States," Wilson said in a prepared -speech to the House of Commons. - "And it (tax reform) will ensure that profitable -corporations carry a bigger share of the total tax burden," he -added. - Federal tax revenue from corporations will increase by 470 -mln dlrs in the fiscal year ending March 31, 1988, 410 mln dlrs -in fiscal 1989 and 1.19 billion dlrs in fiscal 1990, according -to documents tabled with Wilson's speech. - Reuter - - - -18-JUN-1987 20:15:24.21 - -canada -wilson - - - - -V E RM -f5041reute -u f BC-CANADA-FINANCIAL-TAX 06-18 0074 - -CANADA FINANCIAL TAX RATE INCREASED - OTTAWA, June 18 - The average tax rate for Canadian -financial insitutions will increase to 21.3 pct from 14.5 pct -under the new tax reform package, the federal finance -department said. - The amount of financial institutions' income that is taxed -will also increase to 74.0 pct from 48.7 pct, it said in -documents tabled with finance minister Michael Wilson's -prepared speech to the House of Commons. - Under Wilson's plan, the federal government will collect -1.36 billion dlrs more over the next five years from financial -insitutions, including banks, trust mortgage and life insurance -companies, according to finance department documents. - Financial institutions "are going to complain, but we -believe the changes are appropriate and affordable," said one -finance department official who asked not to be identified. - Ottawa will collect more revenue from financial -institutions by reducing the amount of reserves they can deduct -from taxes, which "will broaden the tax base for this low tax -paying sector," the finance department said. - Among the changes, chartered banks will no longer be able -to use a five-year averaging formula to calculate loan losses -that may be deducted for tax purposes. - Effective June 17, 1987, banks will deduct bad or doubtful -loans during the year they are incurred. - The finance department said the impact of the new -provisions will be cushioned over a period of five years. - The changes are needed to ensure that all financial -companies are taxed fairly under deregulation of the financial -services industry. - "It would be inconsistent for the tax system to continue -to provide different reserves for tax purposes for institutions -competing in the same marketplace," the finance department -said. - Reuter - - - -18-JUN-1987 20:20:39.69 - -canada -wilson - - - - -V E RM -f5048reute -u f BC-OTTAWA-WIDENS-SALES-T 06-18 0089 - -OTTAWA WIDENS SALES TAX, STUDIES REPLACEMENT - OTTAWA, June 18 - Canada will broaden a federal sales tax -levied on manufacturers before scrapping the system in favor of -a broad based, multi-staged sales tax, finance minister Michael -Wilson said. - As expected, Wilson did not include a new sales tax system -as part of his wide-ranging tax reforms tabled in the House of -Commons today. - Instead, the federal government will make interim changes -to the existing sales tax to make it more fair for low and -middle income Canadians. - "The present (sales) tax is fundamentally flawed. It is a -hidden, arbitrary and capricious tax," Wilson told the House of -Commons. - The existing federal sales tax system hurts the Canadian -economy by putting more tax on Canadian produced goods than -imported goods and adding a hidden tax on Canadian exports that -makes them less competitive, Wilson said. - Interim changes effective January 1, 1988 will include: - -- applying the federal sales tax to marketing companies -related to manufacturers - -- levying the tax at the wholesale level instead of the -manufacturer for a selected range of products - -- applying a 10 pct sales tax to telecommunication -services, except for residential telephone lines - -- quicker collection of federal sales taxes. - To offset these changes for low income Canadians, -refundable tax credits will be increased to 70 dlrs from 50 -dlrs for adults and to 35 dlrs from 25 dlrs for children, the -finance department said. - Ottawa is considering three alternative forms for a new -sales tax, including a goods and services tax, a value added -tax and a national sales tax that would combine existing -federal and provincial levies into one system, Wilson told the -House of Commons. - He said the federal government will explore the -possibility of one national sales tax with Canada's 10 -provincial governments. All provinces except Albeta now levy a -provincial sales of tax of varying amounts. - Wilson said one joint system would be simpler for -taxpayers and maximize economic benefits of tax reform. - If Ottawa and the provinces can't agree on a national -sales tax system, Wilson said the federal government will -consider either a goods and services tax or a value-added tax. - A goods and services tax would apply at one rate to -virtually all goods and services in Canada and would include -further increases in refundable tax credits for low and middle -income Canadians, the finance department said in documents -accompanying Wilson's speech. - A federal value-added tax, similar to European tax -systems, would also be broad based but would allow more -flexibility to exempt selected goods and services, the -department said. The finance deparment said the main drawback -of a value added tax is that it would be more complex and -costly to implement than the other two proposals. - Reuter - - - -18-JUN-1987 20:28:39.01 -gnp -canada -wilson - - - - -V E RM -f5055reute -u f BC-CANADIAN-BUDGET-DEFIC 06-18 0088 - -FALL IN CANADIAN BUDGET DEFICIT TO SLOW - OTTAWA, June 18 - Finance Minister Michael Wilson said tax -reform will not affect his determination to reign in -expenditures, but his forecasts show a slowing of the decline -in the budget deficit in the late 1980s. - "Responsible tax reform must be fiscally responsible," -Wilson said in a speech prepared for the House of Commons. - Wilson estimated the deficit will fall to 29.3 billion dlrs -in the year ending March 31, 1988, the same level as he -forecast in the February budget. - And in the year ended this past March, the deficit was -expected to have been one billion dlrs lower than the 32 -billion dlr shortfall originally forecast, Wilson said. - Wilson said in the current 1988 fiscal year -higher-than-anticipated spending, particularly in farm income -support programs, will be offset by higher-than-anticipated -revenues. - But finance department documents show the pace of deficit -reduction was expected to slow temporarily in fiscal 1989 and -1990 as a result of lower oil and grain prices and the -transition to the reformed taxation system. - The deficit is expected to total 28.9 billion dlrs in -fiscal 1989 and 28.6 billion dlrs in 1989 and then fall to 26.1 -billion dlrs in 1991. - Wilson was optimistic about the outlook for the Canadian -economy, forcasting gross domestic product would expand 2.8 pct -this year and 3.0 pct in 1988. In 1986 the economy grew by an -actual 3.1 pct. - Inflation, meanwhile, is expected to stabilize at around -the current four pct level over the next two years. - Reuter - - - -18-JUN-1987 20:33:47.78 - -canada -wilson - - - - -V E RM -f5060reute -u f BC-CANADA'S-WILSON-SETS 06-18 0106 - -CANADA'S WILSON SETS NEW PREFERRED SHARE TAX - OTTAWA, June 18 - Finance Minister Michael Wilson tabled a -ways and means motion to immediately impose a special tax on -preferred share dividends to eliminate a significant loss of -corporate tax revenue. - Under the motion, which is used to introduce most financial -tax changes, dividends on all preferred shares issued after -June 18 will be taxable. - The issuing corporation will be able to choose between two -forms of tax, one that imposes a 25 pct tax on dividends with a -subsequent additional 10 pct tax paid by the shareholder, and -one that imposes a flat 40 pct tax on dividends. - "Measures to reduce the tax advantages of after-tax -financing arrangements using preferred shares are a critical -step in achieving the broadened corporate tax base required to -fund personal income tax reductions," Wilson explained. - The minister said many profitable corporations, using -various deductions built up over the years, pay no taxes, -although they are in a position to pay dividends out of their -profits. - Reuter - - - -18-JUN-1987 20:35:36.77 - -canada -wilson - - - - -V E RM -f5063reute -u f BC-CANADA-SETS-WIDE-RANG 06-18 0089 - -CANADA SETS WIDE-RANGING PERSONAL TAX CHANGES - OTTAWA, June 18 - Finance Minister Michael Wilson unveiled -a wide-ranging reform of the personal tax system that includes -limiting the capital gains exemption and a sharp cut in the -dividend tax credit. - With most changes effective at the first of next year, -Wilson also announced he was cutting the number of tax brackets -from 10 to three. - He said the changes will cut personal tax revenues by two -billion dlrs in 1988 and by more than 11 billion dlrs over the -next five years. - "Most Canadians will pay lower taxes because of two -far-reaching changes. A new structure of federal income tax -rates and the conversion of exemptions and deductions to tax -credits," Wilson told the House of Commons. - The new tax brackets will be 17 pct on the first 27,500 -dlrs of taxable income, 26 pct on the next 27,500 dlrs and 29 -pct on taxable income in excess of 55,000 dlrs. The maximum tax -rate is 34 pct under the current system. - In a major reversal of his own initiative, Wilson said the -controversial 500,000 dlrs capital gains exemption will be -reduced to 100,000 dlrs over an investors' lifetime. - Wilson introduced the exemption shortly after taking office -in 1984 as a a way of stimulating investment, but it was -sharply criticized by the opposition as over-generous to -wealthy investors. - The 500,000 dlr lifetime exemption will be kept on the -sale of farm land and for small businesess, however. - Also, the taxable portion of a capital gain will increase -from 50 pct currently to 66-2/3 pct in 1988 and 75 pct in 1990. - The dividend tax credit will be reduced from 33-1/3 pct to -25 pct and the deduction for up to 1,000 dlrs of interest and -dividend income will be eliminated in 1988. - Wilson said tax treatment for registered retirement savings -plan contributions will be maintained but the phase in of the -increase in the maximum limit to 15,500 dlrs will be delayed -four years to 1994. - Reuter - - - -18-JUN-1987 20:48:32.87 -interest - - - - - - -RM -f5072reute -f f BC-ANZ-BANKING-GROUP-SAY 06-18 0014 - -******ANZ BANKING GROUP SAYS IT WILL CUT PRIME RATE TO 16.00 -PCT FROM 16.50 ON JUNE 22 - - - - - -18-JUN-1987 21:07:33.30 -money-fxdlr - -miyazawa - - - - -RM AI -f5083reute -f f BC-Japan-still-asking-in 06-18 0013 - -******Japan still asking institutions to limit speculative dlr -deals - Miyazawa - - - - - -18-JUN-1987 21:09:30.49 -interest -australia - - - - - -RM AI -f5084reute -b f BC-ANZ-BANKING-GROUP-CUT 06-18 0092 - -ANZ BANKING GROUP CUTS PRIME RATE TO 16.00 PCT - MELBOURNE, June 19 - The Australia and New Zealand Banking -Group Ltd <ANZA.S> said it will cut its prime rate to 16.00 pct -from 16.50, effective June 22. - The cut takes the ANZ's prime to the lower end of the range -of prime rates being offered by Australian trading banks. The -highest rate is 17.50 pct. - The cut follows announcements of cuts yesterday by -<Citibank Ltd> to 16.00 pct from 16.5, effective today, and -<Commonwealth Bank of Australia> to 15.75 pct from 16.25, -effective June 24. - REUTER - - - -18-JUN-1987 21:15:11.47 -money-fxdlr -japan -miyazawa - - - - -RM AI -f5087reute -b f BC-JAPAN-STILL-WANTS-SPE 06-18 0069 - -JAPAN STILL WANTS SPECULATIVE DLR DEALS LIMITED - TOKYO, June 19 - The Finance Ministry is still asking -financial institutions to limit speculative dollar dealings, -Finance Minister Kiichi Miyazawa told reporters. - He was responding to rumours in the New York currency -market overnight that the Ministry was reducing its pressure on -institutions to refrain from excessively speculative dollar -dealings. - REUTER - - - -18-JUN-1987 21:32:28.55 - -india -gandhi - - - - -RM V -f5094reute -u f BC-GANDHI-PARTY-BADLY-DE 06-18 0108 - -GANDHI PARTY BADLY DEFEATED IN INDIA STATE POLL - NEW DELHI, June 19 - Prime Minister Rajiv Gandhi's Congress -(I) party was swept from power in the northern state of Haryana -by an opposition landslide. - The loss was a major personal setback for Gandhi whose -vote-winning ability was on trial after political scandals in -Delhi and a string of electoral losses since he took command of -the party in 1984. - With 53 results in for Haryana's 90-seat assembly, Congress -had won only two seats against 63 previously. Before the poll, -Congress politicians in Delhi said privately that a loss in -Haryana could open a party leadership debate. - REUTER - - - -18-JUN-1987 21:34:55.99 - -south-korea - - - - - -RM V -f5096reute -u f BC-SOUTH-KOREA-THREATENS 06-18 0107 - -SOUTH KOREA THREATENS EMERGENCY MEASURES - SEOUL, June 19 - The government will take emergency -measures if the present wave of violent protest demonstrations -continues, state radio said. - The radio, which did not specify the measures, said the -decision was taken today at a meeting of top ministers and -security officials attended by Prime Minister Lee Han-key. It -said a special statement would be made shortly. - Thousands of demonstrators took to the streets of Seoul and -other cities yesterday, battling riot police and demanding the -resignation of President Chun Doo Hwan. It was the ninth -successive day of violent protests. - REUTER - - - -18-JUN-1987 21:56:40.46 - -usa - - - - - -F -f5107reute -r f BC-COURT-ORDERS-INT'L-ME 06-18 0107 - -COURT ORDERS INT'L MEDICAL INSURER TO SHOW CAUSE - TALLAHASSEE, Fla., June 18 - A Circuit Court judge ordered -the company that insured the solvency of International Medical -Centres Inc to show cause why it should not honour its contract -with International, according to Florida's Department of -Insurance, which had filed a petition on the matter. - As previously reported, International, the largest health -maintenance organisation in Florida was declared insolvent on -May 14. Federal regulators had also told the company its -Medicare contract would be terminated on July 31 because of the -company's financial and management problems. - Michelle McLawhorn, Florida Department spokeswoman, said -International's insurer, State Mutual Life Assurance Co of -America, had made clear it would fight activation of the policy -because International did not provide it with accurate -financial records. State Mutual could not be reached for -comment. - McLawhorn said it was not yet known how many creditors -International had or how big its debt was. The court gave State -Mutual 20 days to show why it should not be obliged to pay -claims against the solvency policy. - REUTER - - - -18-JUN-1987 22:26:37.58 - -brazil -sarney - - - - -RM AI -f5137reute -u f BC-BRAZIL-RULING-PARTY-T 06-18 0101 - -BRAZIL RULING PARTY TO DECIDE ON PRESIDENTIAL TERM - BRASILIA, June 18 - The ruling Brazilian Democratic -Movement Party (PMDB) will hold a national convention on July -18 and 19 to discuss the length of the Presidential term, a -PMDB spokesman said. - Although the country's constitution allows for a six-year -term, Sarney said he would remain only five years after he came -to power in 1984. - The Constituent Assembly is drawing up a new constitution -and severe economic problems have increased the pressure on it -to call early elections. A faction of the PMDB favours a poll -in November next year. - REUTER - - - -18-JUN-1987 22:33:01.85 -money-supplymoney-fxdlr -usa - - - - - -RM AI -f5141reute -u f BC-FED-DATA-SUGGEST-NO-C 06-18 0086 - -FED DATA SUGGEST NO CHANGE IN MONETARY POLICY - By Kathleen Hays, Reuters - NEW YORK, June 18 - New U.S. Banking data suggest the -Federal Reserve is guiding monetary policy along a steady path -and is not signalling any imminent change of course, economists -said. - But they also said that if money supply growth remains -weak, as this week's unexpected eight billion dlr M-1 decline -suggests it may, this could influence the Fed to loosen its -credit reins and move toward a more accommodative monetary -policy. - A Reuter survey of 17 money market economists produced a -forecast of a 600 mln dlr M-1 decline for the week ended June -8, with estimates ranging from a gain of one billion dlrs to a -decline of four billion. Instead, M-1 fell eight billion dlrs -to 745.7 billion dlrs at a seasonally adjusted annual rate. - Coming on the heels of a 4.3 billion decrease in M-1 for -the week ended June 1, this means the nation's money supply has -fallen more than 12 billion dlrs in the past two weeks, -economists said. - "M-1 has hit an air pocket of weakness," said Bill Sullivan -of Dean Witter Reynolds Inc. - While M-1 may have lost its significance as an indicator of -economic growth, Sullivan said Fed officials might be concerned -the latest drop in M-1 means another month of sluggish growth -in the broader monetary aggregates, M-2 and M-3, which are seen -as better gauges of economic growth. - Latest monthly M-2 and M-3 data showed that as of May, both -measures were growing at rates below the bottom of the Fed's -5-1/2 to 8-1/2 pct target ranges. - If money growth does not accelerate, Fed officials, -concerned that this indicates economic growth is flagging, -could turn toward easier monetary policy, economists said. - "Does this mean that the Fed abandons its current open -market position? No," Sullivan said. "But does this mean the end -of tightening for the time being? Definitely yes." - Economists said average adjusted discount window borrowings -of 385 mln dlrs for the latest two-week bank statement period -were lower than they had expected. Most believed the Fed had -targetted a two-week borrowings average of around 500 mln dlrs. - But they said that if it had not been for a large one-day -net miss in the Fed's reserve projections, the higher -borrowings target would probably have been reached. - A drop in May U.S. Housing starts and continued weakness in -auto sales show key sectors of the U.S. Economy are lagging, -while a recent modest 0.3 pct gain in May producer prices has -helped dispel inflation fears, Slifer said. - "If this continues, we can entertain the notion of Fed -easing at some point," he said. - Other economists said the Fed would probably pay little -attention to weak money supply growth. "It has been a number of -years since M-1 has given good signs of what's going on in the -economy," one said. "I don't think M-1 shows that the economy is -falling apart and the Fed should ease." - Economists agreed a stable dollar will continue to be a -prerequisite for any move by the Fed toward easier monetary -policy. - They said the Fed is reluctant to lower short-term rates -for fear this would spur expectations of a weaker dollar and -higher inflation which would push up long-term yields and choke -off econmomic growth. - But Sullivan said the dollar has been steady since late -April. "The Fed has to determine if this represents a -fundamental change for the dollar. If it does, then this gives -them more room to ease," he said. - REUTER - - - -18-JUN-1987 22:34:58.79 -earn -usa - - - - - -F -f5142reute -b f BC-NATIONAL-SEMICONDUCTO 06-18 0067 - -NATIONAL SEMICONDUCTOR CORP <NSM> FOURTH QUARTER - SANTA CLARA, Calif., June 18 - - Shr profit six cents vs loss 10 - Net profit 8.1 mln dlrs vs loss 7.1 mln - Sales 511.9 mln vs 397.8 mln - Avg shrs 97.0 mln vs 90.5 mln - YEAR - Shr loss 38 cents vs loss 1.10 dlrs - Net loss 24.6 mln dlrs vs loss 91.5 mln - Sales 1.87 billion vs 1.48 billion - Avg shrs 91.7 mln vs 89.8 mln - NOTE - Current year figure includes previously announced 15 -mln dlr restructuring charge. - Figures include extraordinary credit from tax benefit of -4.2 mln dlrs in quarter vs 2.3 mln a year earlier and 4.2 mln -for year vs 5.6 mln year earlier. - The 1986 year net reflects 51.2 mln dlr gain from -cumulative effect of accounting change. - REUTER - - - -18-JUN-1987 23:12:09.91 - -usa - - - - - -F -f5168reute -u f BC-NATIONAL-SEMICONDUCTO 06-18 0104 - -NATIONAL SEMICONDUCTOR <NSM> SEES IMPROVED YEAR - SANTA CLARA, Calif., June 18 - National SemiConductor Corp, -which earlier reported a profitable fiscal fourth quarter after -a year ago loss, said it expects improved financial performance -during its new fiscal year. - The company reported a profit of 8.1 mln dlrs in the -quarter ended May 31, after a loss of 7.1 mln dlrs in the year -ago period. - The company said orders for its core businesses have -improved, adding "Our strong balance sheet and the improved -business environment should enable us to improve our financial -performance during our new fiscal year." - The company said that during the fourth quarter both its -semiconductor group and its information systems group had -higher sales and improved operating performance than in the -prior quarter and the year-earlier quarter. - REUTER - - - -18-JUN-1987 23:19:19.77 - -usa - - - - - -RM AI -f5172reute -u f BC-OKLAHOMA-THRIFT-PLACE 06-18 0117 - -OKLAHOMA THRIFT PLACED UNDER RECEIVERSHIP - WASHINGTON, June 18 - The Federal Home Loan Bank Board -(FHLBB) today placed <Investors Federal Bank> of El Reno, -Oklahoma under receivership and transferred its 97.8 mln dlrs -in assets to the <Investors Savings and Loan Association>. - An FHLBB statement said the thrift was insolvent and "had -substantially dissipated its assets," mainly by participating in -large commercial real estate developments. It said it violated -federal laws and regulations on loan documentation, loans to -directors and conflict of interest. The sucessor organisation -is a federal savings and loan to be managed under contract by -Sunwood Management Corp of Parker, Colorado. - REUTER - - - -18-JUN-1987 23:26:43.72 - -japanusa - - - - - -F -f5175reute -u f BC-MITSUBISHI-ELECTRIC-T 06-18 0114 - -MITSUBISHI ELECTRIC TO ASSEMBLE PC'S IN U.S. - TOKYO, June 19 - Mitsubishi Electric Corp <MIET.T> plans to -assemble personal computers in the U.S. To counteract the -imposition of a 100 pct import tax in April and a drop in -profits due to the yen's appreciation against the dollar, a -company spokesman told Reuters. - It will assemble 16-bit MP-286 and 32-bit MP-386 desk-top -computers at its wholly-owned computer and computer-related -equipment sales unit <Mitsubishi Electronics America Inc> in -Torrance, California at a rate if 10,000 a month, he said. This -will include 2,000 TO 3,000 to be sold in the U.S. Under the -Mitsubishi name, he said without giving more details. - REUTER - - - -18-JUN-1987 23:30:02.35 -trade -usasingaporebruneiindonesiamalaysiaphilippinesthailand - - - - - -RM V -f5177reute -u f BC-SHULTZ-WARNS-ASEAN-OF 06-18 0100 - -SHULTZ WARNS ASEAN OF LOOMING TRADE PROBLEM - SINGAPORE, June 19 - U.S. Secretary of State George Shultz -warned members of the Association of Southeast Asian Nations -(ASEAN) they could no longer rely on increased exports to the -U.S. For growth. - "Given the importance of exports, particularly export -manufactures, to all of your countries, you are going to have -to work hard to diversify your markets," he said. - "While you may be able to maintain your current market share -in the U.S., You clearly will not be able to look to the U.S. -To take major increases in your exports," he added. - Shultz told the foreign ministers of Brunei, Indonesia, -Malaysia, the Philippines, Singapore and Thailand the U.S. -Would cut its huge foreign trade deficit more rapidly than many -now believed. - He said ASEAN's looming trade problems would not -necessarily stem from protectionist legislation now being -contemplated by Congress, "but simply because of the adjustments -the U.S. Economy will have to make in order to service our -large and growing external debt." - Shultz said the U.S. Deficit had resulted not from falling -exports but from higher imports that had fuelled world growth. - REUTER - - - -18-JUN-1987 23:52:30.35 - -australia -keatinghawke - - - - -RM AI -f5192reute -u f BC-AUSTRALIA'S-OPPOSITIO 06-18 0107 - -AUSTRALIA'S OPPOSITION FACES SETBACK ON TAX PLAN - By Francis Daniel, Reuters - SYDNEY, June 19 - The conservative opposition, already -fighting an uphill election battle, now faces controversy in -its own ranks over a possible error in its major tax cutting -program, economists said. - Professor Michael Porter, architect of the tax plan, -declined to refute Treasurer Paul Keating's charge that the -opposition miscalculated tax and expenditure cuts by several -billion dollars. Economists said the opposition, trailing -behind Labour in opinion polls, would find its chances further -diminished if its tax policy was a miscalculation. - The tax plan, unveiled by opposition leader John Howard -last week, is the cornerstone of the Liberal Party's economic -strategy to oust the Labour Party in the July 11 poll. - Keating has said the Howard tax plan would sharply increase -the budget deficit to more than nine billion dlrs and severely -damage Australia's economy, already overburdened with balance -of payments and foreign debt problems. - In his mini-budget on May 13, Keating said the budget -deficit for the year ending June 1988 would be between two and -three billion dlrs. - Porter, a key member of the opposition economic think tank, -said he played a leading role in formulating the tax plan but -not Howard's proposed expenditure savings, which Keating -claimed were distorted through double counting. - Some opposition members said there appeared to be errors, -but a Liberal Party spokesman refused comment, saying the -package was being reexamined. - "The whole thing is so deceitful," Prime Minister Bob Hawke -said in a radio interview. "Howard has made a mess of it. If -they can't govern themselves, how can they expect to govern the -country?" - Hawke, who is seeking a third term, said the opposition had -made the election one of the easiest for him. - "I've never felt more physically and mentally relaxed -(during an election). We've no problems at all," he said. - The latest public opinion poll, published in the Melbourne -Sun newspaper, showed Labour was leading the opposition by 12 -points, indicating a 66-seat majority for Hawke in parliament. - The Election Commission announced last night that 613 -candidates would contest the 148-seat House of Representatives, -while 255 candidates would fight for the 76 Senate seats. - REUTER - - - -18-JUN-1987 23:58:21.89 - -japan - - - - - -F -f0001reute -u f BC-FUJITSU,-FUJIAN-PROVI 06-18 0108 - -FUJITSU, FUJIAN PROVINCE FORM JOINT VENTURE - TOKYO, June 19 - Fujitsu Ltd <ITSU.T> said it signed a -joint venture agreement with the Post and Telecommunication -Administration Bureau of Fujian Province (PTABF), China to -develop and sell software for the Fujitsu-designed digital -telephone switching machine FETEX-150. - It said in a statement the joint company, <Fujian Fujitsu -Communications Software Ltd> located in Fuzhou city, was -capitalised at about 10 mln yuan and was owned 51 pct by PTABF -and 49 pct by Fujitsu. - It would create about 20 local jobs and has a target of -annual software sales of 330 mln yen in 1992, Fujitsu said. - REUTER - - - -18-JUN-1987 23:59:08.26 - -japan - - - - - -F -f0002reute -u f BC-MITSUI,-ALLIANCE-IN-F 06-18 0116 - -MITSUI, ALLIANCE IN FUND MANAGEMENT TIE-UP - TOKYO, June 19 - <Mitsui Investment Management Co Ltd> -(MIMCL) and <Alliance Capital Management International Inc> -(ACMII) will sign an agreement late this month to cooperate in -international fund management, a ACMII spokesman said. - MIMCL, 55-pct controlled by affiliated companies of Mitsui -Bank Ltd <MIBT.T>, will reconsign some of its foreign -securities investment orders to ACMII, he told Reuters. - ACMII, the London-based 100 pct-owned subsidiary of -<Alliance Capital Management Corp> of New York, will reconsign -some of its foreign orders to MIMCL and instruct MIMCL in -international fund management techniques, the spokesman said. - Both firms were among 56 investment advisory companies -granted Japanese government approval for discretionary fund -management on June 10, the Mitsui spokesman said. - Alliance Capital Management Corp is the world's biggest -firm devoted exclusively to fund management and has 35 billion -dlrs in funds, he said. - Mitsui Investment Co Ltd, established two years ago, -controls about 800 mln dlrs, 80 pct of which is invested in -Japanese equities. - REUTER - - - -19-JUN-1987 00:05:03.32 -alum -indonesia - - - - - -F M C -f0006reute -u f BC-INDONESIA-RAISES-STAK 06-19 0107 - -INDONESIA RAISES STAKE IN ALUMINIUM PLANT - JAKARTA, June 19 - Indonesia has increased its share in a -434-billion-yen aluminium smelter joint venture with Japan from -25 to 37 pct, Asahan Project Authority director A.R. Suhud -said. - The Japanese Export-Import Bank said Indonesia had raised -its share of (P.T. Indonesia Asahan Aluminium) company, -capitalised in 1975 at 91 billion, by swapping 32 billion yen -in government loans to the company for an equity stake. - The Japanese shareholders, the Overseas Economic -Cooperation Fund and 12 companies, are to invest another 24 -billion yen raising capitalisation to 147 billion yen. - Asahan reported total losses of 97.6 billion rupiah between -1982 and 1985. Suhud said much of the company's 320 billion yen -debt had been caused by falling tin prices and the appreciation -of the yen against the U.S. Dollar. Aluminium is sold in -dollars. - Prices improved from 1,150 dlrs a tonne six months ago to -about 1,450 dlrs today. The plant is supposed to break even if -prices stay at 1,500 dlrs a tonne. - Sahud said the plant, with a capacity of 220,000 tonnes a -year, would probably lose money again in 1987. The plant, -situated in North Sumatra, produces mostly for Japan. - REUTER - - - -19-JUN-1987 00:12:36.11 - -philippines - - - - - -F -f0010reute -u f BC-PHILIPPINE-STOCKS-SOA 06-19 0094 - -PHILIPPINE STOCKS SOAR TO NEW HIGHS, RECORD VOLUME - By Greg Hutchinson, Reuters - MANILA, June 19 - Investors on Philippine stock markets -have shrugged off growing communist activity in the cities to -push share prices to all-time highs on record turnover, brokers -said. - Regularly heavy trading of more than one billion shares a -day has sent the Manila exchange's composite index soaring to -775.9 from 577.2 points in just over three weeks. - Brokers described recent trading as "frantic" and "hectic" as -trading records were smashed day after day. - A total 2.6 billion shares worth 259.4 million pesos -changed hands on the main Manila and the less important Makati -exchanges yesterday, with much of the activity among centavo -priced stocks, brokers said. The turnover was more than double -the record of 1.1 billion shares worth 118.1 million pesos set -on Wednesday. - Brokers said rising gold prices caused mining shares to -shoot up three weeks ago, and other sectors followed. Share -prices continued their rise even when the gold price fell back -to 450 dlrs an ounce, due to rising confidence in President -Corazon Aquino's handling of the economy, they said. - Brokers said Aquino's handling of the 18-year-old communist -insurgency and the maintenance of relatively low interest rates -also contributed to the rise. - Blue chip stocks, such as those of San Miguel Corp and -Philippine Long Distance Telephone Co (PLDT), have risen 25 pct -in three weeks, and the trend is upward in the medium term -although a temporary correction is overdue, they said. - Since the surge began on May 26, Manila's Mining index has -risen to 5,700.4 points from 4,042.4, its commercial and -industrial index has shot up to 881.0 from 694.9 points, and -the oils indicator has increased to 4.1 from 2.9 points. - Market activity has been rising in spurts since Ferdinand -Marcos was replaced by Aquino 16 months ago. - One broker said he thought the Philippine stock market "may -at last have come of age." - Wilson Sy, president of Prudential Securities, a local -stockbroking firm with Hong Kong affiliations, told Reuters, -"Barring any unforeseen political events you can bet on the -Philippine market. It has shrugged off the communist inroads -into Manila." - Assassins have killed 52 policemen, soldiers and security -guards in the capital this year. - Communist hitmen known as sparrows have claimed they killed -22 of them. - Sy said Philippine stocks were undervalued in world terms -with price-earnings ratios often half those in Hong Kong and -one-sixth those in Japan. He said PLDT, which is also U.S. -Listed, has a price-earnings ratio of about nine. - Sy predicted Manila's composite index would rise beyond -1,000 points from its current 775.9 mark by year-end. - Other brokers were more cautious, saying Aquino had to -improve peace and order before investors could treat the -Philippines as they would Hong Kong or Tokyo. - One broker said he believed about 30 pct of the money going -into stocks was now foreign, much of it from fund managers and -their agents based in Hong Kong and New York. - Manila Stock Exchange chairman Robert Coyuito told Reuters, -"If the peace and order situation really improved the market -could move beyond a price-earnings ratio of 20 times." - "But all depends on how Congress performs and the local -elections go," he said. - A new two-chamber legislature was elected last month and is -due to sit on July 27. Local elections are scheduled for -November. - PLDT shares closed at 630 pesos a share yesterday, 30 pesos -above Wednesday's record close. PLDT share prices have risen -about nine-fold in 18 months. - San Miguel shares closed at 190 pesos, also a historic -high, brokers said. - REUTER - - - -19-JUN-1987 01:04:05.45 - -canada - - - - - -RM AI -f0043reute -u f BC-CANADIAN-TAX-REFORM-C 06-19 0103 - -CANADIAN TAX REFORM CALLED AN IMPORTANT STEP - By Larry Welsh, Reuters - OTTAWA, June 18 - Canada's sweeping tax reform package, -announced today, is an important step towards a fairer system, -but is not as bold a revamp of the tax structure as some had -expected, economists and business leaders said. - "It's the biggest step towards tax reform we've taken in a -great many years," Merrill Lynch Canada Inc chief economist -Michael Manford told Reuters. - "But the system is the same old system with a lot of -important changes, as opposed to a brand new system," he added. -(See spotlight index page on ECRA) - Manford said changes introduced by Finance Minister Michael -Wilson did not go far enough in simplifying the federal tax -system. They represent evolutionary rather than revolutionary -reform. - "Overall, I thought that it was a more timid step than we -were led to believe," he said. - Wilson's move to increase money collected from corporations -while cutting individual taxes "is probably an acceptable shift," -said Bill James, president of Falconbridge Ltd, an -international mining company. - Wilson spread corporate tax increases fairly evenly across -the corporate sector, James said. "So it's not going to hit -anyone too hard and we will remain competitive." - Wilson said in his speech to the House of Commons that -Canada's tax system needed to be changed to compete with -sweeping reforms in the United States last year. - "The critical thing on the corporate side is that Wilson -moved most of the taxes much closer to the U.S. System," Manford -said. - The federal government increased taxes paid by corporations -by about five billion dlrs over the next five years, but -lowered personal taxes by 11 billion dlrs in the same period. - Despite collecting more corporate taxes, Wilson was able to -lower the tax rate on individual companies by removing many -special tax exemptions and broadening the tax base. - Wilson's plan also reduced the capital cost allowance, used -by companies to write off major investments, which some -business spokesmen said will hurt business in the long run. - "That will affect some investment decisions negatively," said -Laurent Thiebeault, Canadian Manufacturers Association -president. - Tax analysts said for some industries it will take several -days to assess the impact of the capital cost allowance -reductions that will be made over a number of years. - As anticipated, Canada's opposition parties signalled they -intend to fight the new tax measures as they are introduced in -Parliament over the next few months. - "It's not tax reform, it's a tax grab," said Liberal leader -John Turner. - Turner labelled changes to the federal sales tax "a money -machine for the minister of finance." - Wilson broadened the federal sales tax to include -additional products and also promised to introduce a -broad-based, multi-staged sales tax. - "It's not at all a fair package and Canadians are going to -see that very quickly," New Democratic Party leader Ed Broadbent -said. - However, economist Manford said Wilson acted wisely to -protect lower income Canadians by providing tax credits that -will cut 850,000 people from the tax rolls. - REUTER - - - -19-JUN-1987 01:07:20.73 -money-fxreserves -taiwan - - - - - -RM AI -f0050reute -u f BC-TAIWAN-DOLLAR-AND-RES 06-19 0086 - -TAIWAN DOLLAR AND RESERVES SEEN RISING MORE SLOWLY - By Chen Chien-Kuo, Reuters - TAIPEI, June 19 - Recent government moves to curb capital -inflow have temporarily helped to slow the rise of Taiwan's -foreign exchange reserves and to stabilise the local dollar -against the U.S. Currency, officials and bankers said. - Central bank governor Chang Chi-Cheng told reporters the -reserves rose only about 500 mln U.S. Dlrs in the past two -weeks and the local dollar appreciated more slowly against the -U.S. Dollar. - Chang said, "The pace of increase in our reserves is much -slower now than before and our currency is getting more stable." -He said the reserves, mainly the result of the trade surplus -with the U.S., Rose at the rate of two to three billion U.S. -Dlrs a month between January and May. - The reserves, the world's third largest after Japan and -West Germany, now total well over 60 billion U.S. Dlrs. - On June 2 the central bank froze overseas borrowings of -local and foreign banks and cut the limit on central bank -purchases of forward U.S. Dollars from banks to 40 pct from 90 -pct of the value of a contract. - Local and foreign bankers said the June 2 measures had -drastically limited their ability to lend foreign exchange to -importers and exporters. - They said their overseas borrowings and forward dollar -transactions showed a drastic decline with some banks -registering a fall of up to 30 pct. - Bank dealers said the Taiwan dollar has stabilised against -the U.S. Currency this week after rising two to five Taiwanese -cents a day between June 2 and 13 compared with a rise of five -to eight cents in May. - The bank dealers said the central bank, which had -previously bought U.S. Dollars heavily, sold at least 1.1 -billion U.S. Dlrs in the past two weeks to meet commercial -demand. - They said they expected the government to keep the local -dollar stable in the near term to give breathing space to -businesses experiencing slower exports because of the rise of -more than 23 pct in the value of the Taiwan dollar since -September 1985. - The Taiwan dollar opened at 31.09 to the U.S. Dollar today, -unchanged from yesterday. - Keh Fei-Lo, vice president of First Commercial Bank, said, -"It appears the central bank's move to curb the capital inflow -is quite successful." - Vice economic minister Wang Chien-Shien said the slower -rise in foreign exchange reserves would help ease pressure from -Washington over the large U.S. Trade deficit with Taiwan. - Over the past year Taiwanese businessmen have delayed -imports of machinery and production equipment because of -exchange rate uncertainty, he said. The stable exchange rate -would help boost imports, particularly from the United States. - REUTER - - - -19-JUN-1987 01:23:58.25 -alum -japanindonesiabrazil - - - - - -RM AI -f0063reute -u f BC-JAPAN-APPROVES-AID-FO 06-19 0112 - -JAPAN APPROVES AID FOR INDONESIA, BRAZIL ALUMINIUM - TOKYO, June 19 - Japan's cabinet approved a plan to help -financially-troubled aluminium ventures in Indonesia and -Brazil, an official at the Ministry of International and Trade -Industry (MITI) said. - Japan will invest 24 billion yen in <PT Indonesia Asahan -Aluminium> in addition to the 68.3 billion yen already invested -in the company. The government and private interests will -equally share the additional investment, he said. - They will also provide equal shares in 6.3 billion yen in -new investment in the Albras Amazon aluminium project in -Brazil, in addition to the 45.7 billion yen already invested. - The Japan Export-Import Bank will cut its rates on loans to -Asahan and Albras to about five pct from about seven pct, the -official said. - Interest rates on loans by Japan's private banks to the two -projects are expected to be reduced to around five pct from the -current seven to eight pct, but an agreement has yet to be -reached, industry sources said. - Under the rescue scheme for Asahan, in which 91.1 billion -yen has been invested, Indonesia will also extend another 32 -billion yen to the company. This will raise Indonesia's -investment ratio to about 40 pct from the current 25 pct. - The Brazilian government has already agreed to invest an -additional 6.5 billion yen in Albras, in which investment now -totals 93.2 billion yen, but its stake will not change from 51 -pct, the official said. - The sources said the rescue programs for the two projects -were larger than earlier expected, reflecting Japan's desire to -help develop the economies of Indonesia and Brazil and to -stabilise sources of aluminium. - Japan depends on imports for more than 90 pct of its -aluminium demand, which totals some 1.8 mln tonnes a year, they -said. - REUTER - - - -19-JUN-1987 01:38:31.06 -acq -japanusa - - - - - -F -f0069reute -u f BC-MITSUI-BUYS-FIVE-PCT 06-19 0104 - -MITSUI BUYS FIVE PCT STAKE IN U.S. CHIP MAKER - TOKYO, June 19 - Mitsui and Co Ltd <MITS.T> paid 1.5 mln -dlrs in early May for a five pct stake in <Zoran Corp>, a -California-based maker of large scale integrated circuits (LSI) -with computer graphic, communications and medical applications, -a Mitsui spokesman told Reuters. - He said the two firms will form a marketing company in -Japan as early as next year, although details of the joint -venture are not yet fixed. Mitsui expects last year's 10 -billion yen Japanese LSI market to grow quickly. - Zoran was founded in 1981 and now has about 100 employees, -he said. - REUTER - - - -19-JUN-1987 01:59:21.71 - -japan - - - - - -F -f0081reute -u f BC-JAPAN-REPORT-SAYS-FAU 06-19 0100 - -JAPAN REPORT SAYS FAULTY REPAIRS CAUSED JAL CRASH - TOKYO, June 19 - Faulty repairs and inadequate inspection -caused the 1985 crash of a Japan Airlines Co Ltd <JAPN.T> (JAL) -Boeing 747 which killed 520 people, the Japanese government -said in a final official report. - The clear cause of the crash was faulty repair work by the -Boeing Co <BA>, said Shun Takeda, the ministry of transport -official leading the accident investigation committee. - But the report also criticised the ministry's inspectors -for failing to carry out a full check of the repairs before -signing the clearance sheet. - The aircraft hit Mount Osutaka, north of Tokyo, on August -12, 1985, after a bulkhead separating the pressurised cabin -from the unpressurised tail suddenly burst, fracturing key -navigation systems. Only four people survived. - A Japan Air Lines spokesman declined comment on the report. -Boeing is expected to release a statement later today. - The report cleared the JAL crew of all responsibility. - In a separate set of recommendations, the investigators -said large aircraft operating in Japan should have fail-safe -systems, but did not say how this should be done. - A press statement by a group of lawyers representing -victims of the crash criticised the report for not dealing in -greater depth with the fail-safe aspect. - The lawyers said Boeing had showed it believed the crash -was due to design defects by specifying two design -modifications to prevent a recurrence in a memorandum filed in -King County, Washington, Superior Court last March 24. - They said similar official recommendations for fail-safe -systems following two air disasters involving DC-10 aircraft, -near Paris in 1974 and at Chicago in 1979, had been rejected -after objections from aircraft manufacturers. - The government investigators asked the ministry to -formulate concrete guidelines for its inspectors. An internal -ministry memo earlier this year complained that inspectors were -left too much on their own when making aircraft checks. - A Boeing team made repairs to the aircraft's aft bulkhead -under JAL supervision, and Transport Ministry inspectors -approved the repairs without actually seeing them, today's -report said. - The inspectors were unable to check Boeing's work because -the part repaired had been covered by a seal, the report said. - Over time, cabin pressurisation speeded up the process of -metal fatigue in the repaired bulkhead. - Boeing issued an official statement on September 6, 1985, -saying the 1978 repairs it had carried out were faulty. It did -not link them with the crash. - REUTER - - - -19-JUN-1987 02:05:48.53 -trade -japan - - - - - -RM AI -f0088reute -u f BC-JAPAN'S-JUNE-INTERIM 06-19 0095 - -JAPAN'S JUNE INTERIM TRADE SURPLUS NARROWS - TOKYO, June 19 - Japan's custom-cleared trade surplus -narrowed to 1.61 billion dlrs in the first 10 days of June from -1.97 billion a year earlier, the Finance Ministry said. - The June interim surplus compares with a 1.76 billion dlr -surplus in the same May period. - FOB exports in the first 10 days of June rose 17.6 pct from -a year earlier to 6.05 billion dlrs while CIF imports rose 39.6 -pct to 4.44 billion. - The average yen/dollar rate used for the figures was 141.04 -yen against 169.03 a year earlier. - REUTER - - - -19-JUN-1987 02:45:16.79 -earn -japan - - - - - -F -f0106reute -u f BC-C.-ITOH-AND-CO-LTD-<C 06-19 0046 - -C. ITOH AND CO LTD <CITT.T> - TOKYO, June 19 - Year ended March 31 - Group shr 18.83 yen vs 18.73 - Net 20.07 billion vs 18.47 billion - Pretax 22.14 billion vs 25.36 billion - Operating 37.57 billion vs 51.57 billion - Sales 14,762 billion vs 15,900 billion - REUTER - - - -19-JUN-1987 03:01:42.04 - -japan - - - - - -RM AI -f0119reute -u f BC-JAPAN-MACHINERY-ORDER 06-19 0103 - -JAPAN MACHINERY ORDERS FALL IN APRIL - TOKYO, June 19 - Japan's private sector machinery orders, -excluding shipbuilding, fell 10.4 pct in April from March to a -seasonally adjusted 663.8 billion yen, after rising 17.6 pct in -March, the government's Economic Planning Agency said. - April orders rose 2.0 pct from a year earlier after a 22.6 -pct year-on-year rise in March, an agency spokesman told -Reuters. - Seasonally adjusted private sector orders, excluding those -for shipbuilding and electric power firms, fell 7.5 pct in -April from March to 517.4 billion yen, after a 5.7 pct rise in -March from February. - April orders fell 1.3 pct from a year earlier after being -unchanged in March. - The April drop was due mainly to a 12.9 pct decrease in -orders from machine tool industries and a 15.3 pct drop in -orders from car makers, the spokesman said. - REUTER - - - -19-JUN-1987 03:53:39.82 - -japanusa - - - - - -RM AI -f0189reute -u f BC-U.S.-SEEKS-JAPAN-HELP 06-19 0090 - -U.S. SEEKS JAPAN HELP IN EVENT OF 1988 RECESSION - By Rich Miller, Reuters - TOKYO, June 19 - Senior U.S. Officials are looking to Japan -for help in buttressing the world economy in the event of an -American recession next year, Japanese government sources said. - During a visit to the U.S. Earlier this month, Economic -Planning Minister Tetsuo Kondo was asked by both U.S. Federal -Reserve chairman Paul Volcker and Council of Economic Advisers -chairman Beryl Sprinkel what Japan could do if the U.S. Enters -recession next year. - Although Sprinkel indicated that he personally did not -expect a recession next year, Volcker seemed to acknowledge -that an economic downturn was at least a possibility, the -sources said. - Faced with with a huge budget deficit, the U.S. Has little -room to manoeuvre on fiscal policy to counteract any downturn -that might occur in 1988. - It is also hamstrung as far as monetary policy is concerned -because U.S. Inflation is already showing some signs of picking -up, one source said. - But Japan is also limited in what action it could take to -help counteract a U.S. Recession without running the risk of -overstimulating its domestic economy and pushing up inflation, -the sources said. - Money supply growth is accelerating and interest rates are -at record low levels. In May, M-2 money supply plus -certificates of deposit grew at a year-on-year rate of 10.2 -pct, well above nominal GNP growth of four to five pct. - Some government sources are also worried that the recently -announced 6,000 billion yen emergency economic package could -push up land prices and the construction sector's inflation. - Public investment spending grew at a year-on-year rate of -about 10 pct in April, but that could accelerate to 20 pct -later this year under the impact of the emergency package, one -source said. - The 6,000 billion yen package was generally well received -in the U.S., Although U.S. Congressmen and businessmen told -Kondo they wanted the measures implemented quickly, sources -said. - The Japanese minister explained that the acceleration of -public works spending in the package was taking place -immediately, they said. - U.S. Congressmen were particularly interested in how much -impact the package would have on reducing the bilateral trade -imbalance, a question which Kondo was unable to answer clearly, -given the many economic uncertainties involved, the sources -said. - While recognizing that Japan's trade surplus is falling in -terms of volume, some Congressmen expressed concern that it was -not falling fast enough. - But the sources said no one pressed Kondo for a further -rise of the yen as a solution to correcting the bilateral trade -imbalance. - REUTER - - - -19-JUN-1987 03:59:02.90 -acq - - - - - - -F -f0194reute -f f BC-Sainsbury's-says-it-t 06-19 0013 - -******Sainsbury's says it taking control of Shaw's Supermarkets -for 30 dlrs a share - - - - - -19-JUN-1987 04:08:37.39 - -japanindonesiabolivia - - - - - -RM AI -f0206reute -u f BC-JAPAN-TO-MAKE-LOANS-T 06-19 0085 - -JAPAN TO MAKE LOANS TO INDONESIA AND BOLIVIA - TOKYO, June 19 - Japan will lend 27.17 billion yen to -Indonesia and will share equally with the World Bank a 7.25 -billion yen loan to Bolivia as part of its efforts to help -Third World countries, a Foreign Ministry spokesman said. - The lending is in line with Japan's plan to contribute 20 -billion dlrs over the next three years to developing countries. - Both loans will be used for development, the spokesman told -Reuters. He declined to name terms. - REUTER - - - -19-JUN-1987 04:11:27.72 -acq -uk - - - - - -F -f0207reute -b f BC-SAINSBURY'S-TAKING-CO 06-19 0104 - -SAINSBURY'S TAKING CONTROL OF SHAW'S SUPERMARKETS - LONDON, June 19 - J Sainsbury Plc<SNB.L> said it agreed to -take control of the U.S. Shaw's Supermarkets Inc through a -combination of share purchases and a tender offer at 30 dlrs a -share. - Sainsbury bought about 21 pct of the stock in 1983. It said -its U.S. Subsidiary, Chene Investments Inc, bought 2.55 mln -common shares from the controlling Davis family yesterday at 30 -dlrs a share for 76.5 mln dlrs, lifting its stake to 49.4 pct. - A tender offer for the outstanding shares will be launched, -also at 30 dlrs a share for a maximum further cost of 184.4 -mln. - The Shaw's Board and the Davis family has agreed to accept -the offer, thus assuring Sainsbury's a total holding of 74.0 -pct. - The company had allotted 20.18 mln new ordinary shares to -<Warburg Securities Ltd> which it said would be sufficient to -finance about 188 mln dlrs of the maximum 261 mln dlrs payable. - Shaw's operates a chain of 49 supermarkets in -Massachusetts, Maine and New Hampshire which in 1986 produced -sales of 1.1 billiob dlrs and pretax profit of 31.1 mln. At the -end of 1986 it had net assets of 88 mln dlrs. - Last September, Sainsbury's increased its stake in Shaw's -to 28.5 pct. In the year to March 21, it reported a rise in -pretax profit to 246.9 mln stg from 192.7 mln on sales that -increased to 4.04 billion from 3.58 billion. - Sainsbury shares had fallen five pence before the -announcement to 590p from last night's close but were unmoved -by news of the deal. - REUTER - - - -19-JUN-1987 04:20:47.11 - -japan - - - - - -F -f0223reute -u f BC-C.-ITOH-SEES-NO-GROWT 06-19 0108 - -C. ITOH SEES NO GROWTH IN 1987/88 GROUP PROFIT - TOKYO, June 19 - C. Itoh and Co Ltd <CITT.T> said its group -net profit in the year ending March 31, 1988, is expected to be -unchanged from a year earlier. - The prediction assumes a yen/dollar rate of 140 yen and a -crude oil price of 18 dlrs a barrel, a company spokesman told -Reuters. Sales in 1987/88 are estimated at 15,100 billion yen, -up 2.3 pct from a year earlier. - The company earlier reported group net profit of 20.07 -billion yen in the year ended March 31, 1987, up 8.6 pct from a -year earlier, helped by a drop in sales and administration -costs and reduced interest charges. - REUTER - - - -19-JUN-1987 04:25:32.92 - -uk - - - - - -F -f0231reute -r f BC-UBS-TO-SELL-25,000-SA 06-19 0065 - -UBS TO SELL 25,000 SANDOZ SHARES - LONDON, June 19 - Union Bank of Switzerland (Securities) -Ltd said it is lead managing the sale of 25,000 new bearer -shares of Sandoz Ltd. - The shares closed in Zurich yesterday at 12,100 Swiss -francs each. Final terms will be set on, or before, June 25. - The selling concession is two pct while management and -underwriting each pays 3/4 pct. - REUTER - - - -19-JUN-1987 04:25:41.52 -earn -japan - - - - - -F -f0232reute -u f BC-ISUZU-MOTORS-LTD-<ISU 06-19 0066 - -ISUZU MOTORS LTD <ISUM.T> SIX MONTHS TO APRIL 30 - TOKYO, June 19 - - Parent shr loss 15.85 yen vs profit 2.02 - Interim div nil vs nil - Net loss 12.92 billion vs profit 1.65 billion - Current loss 12.52 billion vs profit 4.44 billion - Operating loss 8.76 billion vs profit 6.52 billion - Sales 443.90 billion vs 528.03 billion - Outstanding shrs 815.10 mln vs 814.97 mln - REUTER - - - -19-JUN-1987 04:31:03.46 - -japan - - - - - -F -f0237reute -u f BC-ISUZU-DENIES-PLANS-TO 06-19 0091 - -ISUZU DENIES PLANS TO IMPORT GM CARS TO JAPAN - TOKYO, June 19 - Isuzu Motors Ltd <ISUM.T> has no plans to -import cars made by General Motors Corp <GM.N> to Japan, an -Isuzu spokesman told Reuters. - The Japanese daily Yomiuri Shimbun reported that Isuzu had -decided to import cars directly from GM. - Each month Isuzu's domestic distributors sell five to 10 -cars from GM's Buick, Chevrolet, and Oldsmobile range. - The cars are supplied by Yanase and Co Ltd, a Japanese -importer and distributor. - Isuzu is owned 38.6 pct by GM. - REUTER - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-020.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-020.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-020.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-020.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2041 +0,0 @@ - - -19-OCT-1987 23:49:31.45 -money-fx -japanusa - - - - - -RM AI -f0001reute -u f BC-IF-DOLLAR-FOLLOWS-WAL 10-19 0105 - -IF DOLLAR FOLLOWS WALL STREET JAPANESE WILL DIVEST - By Yoshiko Mori - TOKYO, Oct 20 - If the dollar goes the way of Wall Street, -Japanese will finally move out of dollar investments in a -serious way, Japan investment managers say. - The Japanese, the dominant foreign investors in U.S. Dollar -securities, have already sold U.S. Equities. - But "if the dollar falls steeply, which did not happen -yesterday, Japanese investors will definitely try to withdraw -significant funds from U.S. Shares," said Akira Kawakami, deputy -manager of Nomura Investment Trust and Management Co Ltd's -international investment department. - An unstable, lower dollar would also affect Japanese -investment in U.S. Bonds. "Japan-U.S. Interest rate -differentials, which currently look wide enough, mean nothing -in the absence of dollar stability," said Kawakami. - U.S. Bonds could benefit due to a gloomy economic picture -following the estimated huge losses in stocks by major U.S. -Institutional and individual investors, he said. The effect -should be to rule out any U.S. Interest rate rise. - But most Japanese investors in U.S. Bonds are still wiating -to see if the dollar really is stable, he said. The dollar was -holding firm at above 142 yen on Tuesday morning. - "Although Japanese investors sold huge amounts of stocks in -New York yesterday, most are still looking for chances to -lighten their U.S. Stock inventories," Hiromitsu Sunada, manager -of Meiji Mutual Life Insurance Co's international investment -department said. - Their sales helped send Wall Street stocks down 508 points -to 1,738, the market's biggest percentage drop since 1914. - "Investment in U.S. Stocks and bonds is difficult, -considering the dangers," said Katsuhiko Okiyama, deputy general -manager and chief adviser of Yamaichi Securities Co Ltd's fixed -income securities marketing group. - Japanese investment at home could start to pick up once -markets have stopped reacting to Wall Street, the managers -said. The Tokyo yen bond market is likely to stabilise in one -or two weeks, which is what investors have been waiting for. -The bottom for yen bonds should be around a 6.3 pct yield for -the 5.1 pct 89th bond, they said. - "The basic background which has supported the stocks and -bonds markets has not changed," said Norio Okutsu, assistant -general manager of Nikko Securities' bond department. "But new -outflows of funds to the U.S. Will be decreasing." However, -this was already evident three months ago, he said. - REUTER - - - -19-OCT-1987 23:58:39.11 - -japanfrance - - - - - -F -f0012reute -u f BC-NEC-TO-SUPPLY-CHIP-TE 10-19 0085 - -NEC TO SUPPLY CHIP TECHNOLOGY TO FRANCE - TOKYO, Oct 20 - NEC Corp <NIPN.T> will supply <Matra-Harris -Semiconducteurs SA(A)> (MHS) of France with manufacturing -technology for 16-bit microchips used in microcomputers, an NEC -spokesman said. - MHS, a joint venture between France's MATRA <MATR.PA> and -Harris Corp <HRS> of the U.S., Will manufacture and market -globally a microcomputer based on NEC's Micron PD 78312 and -Micron PD78310 chips. - MHS will pay NEC an undisclosed sum for the technology. - REUTER - - - -19-OCT-1987 23:59:09.79 - -japan - - -tse - - -RM AI -f0013reute -b f BC-JAPAN-TAKES-WAIT-AND- 10-19 0107 - -JAPAN TAKES WAIT-AND-SEE STANCE ON STOCKS-OFFICIAL - TOKYO, Oct 20 - The Finance Ministry will take a -wait-and-see stance on Tokyo Stock Exchange movement, although -it is gravely concerned about the sharp fall in stock prices, a -senior Ministry official said. - The official, who declined to be identified, told reporters -the 7.3 pct drop in Tokyo stock prices this morning was caused -primarily by psychological factors following the 22.5 pct fall -in New York stock prices overnight. - He said the Ministry is in close contact with the Tokyo -Stock Exchange, but has no plans yet to take any specific -measures regarding the fall. - REUTER - - - -20-OCT-1987 00:08:10.16 - -mexico - - - - - -RM -f0017reute -u f BC-MEXICAN-STOCKMARKET-H 10-20 0112 - -MEXICAN STOCKMARKET HEAD SEES NO CRISIS AFTER FALL - MEXICO CITY, Oct 19 - The outlook for Mexico's economy and -stockmarket remains optimistic despite the market's worst-ever -fall of 52,671.56 points on Monday, the president of the -Mexican stock exchange, Manuel Somoza, said. - He said the 16.51 pct drop in the exchange's index -reflected a "totally emotional" reaction to Monday's fall on the -New York stock exchange and was not a reflection of a new -crisis for the Mexican economy or the stockmarket." - He was speaking at a news conference here on Monday. - "We think that after the psycological effect the market will -tend to stabilize itself," Somoza said. - Somoza said he based his optimism on the relatively bright -outlook of the Mexican economy due to increased income from oil -and non-petroleum exports, record high foreign reserves and -government efforts to promote a modernization of the industrial -sector. - "The U.S. Economy is not the same as the Mexican," he said. -He did not say when he thought the market would stabilize. - He said traders had originally expected the market to level -out on Monday after last week's profit taking pulled the index -down 44,207 points. - News of the "enormous problems" in New York, which reached -Mexico City before the local market opened, caused a flurry of -selling on the Mexican exchange, Somoza said. - The stockmarket had risen 629 pct over the year by the end -of September. - Somoza said Monday's light volume of 15.3 mln shares -compared to an average of 53 mln was an indication the day's -drop was not a sign of a major collapse. - He also denied rumours that the day's loss was the result -of government and brokerage house manipulation. - REUTER - - - -20-OCT-1987 00:15:04.00 -cocoa -indonesiaukmalaysiausapapua-new-guineawest-germanynetherlands - - - - - -T -f0021reute -u f BC-ASIAN-COCOA-PRODUCERS 10-20 0097 - -ASIAN COCOA PRODUCERS EXPAND DESPITE CRITICS - By Jeremy Clift - JAKARTA, Oct 20 - Asian cocoa producers are expanding -output despite depressed world prices and they dismiss -suggestions in the London market that their cocoa is inferior. - "Leading cocoa producers are trying to protect their market -from our product," said a spokesman for Indonesia's directorate -general of plantations. "We're happy about our long-term future." - Malaysian growers said they would try to expand sales in -Asia and the United States if Malaysian cocoa was not suitable -for European tastes. - They were responding to comments by London traders that -large tonnages of unwanted cocoa beans from Malaysia, Indonesia -and Papua New Guinea (PNG) were helping to depress cocoa -prices. - London traders said the Asian cocoa was considered -unsuitable for western palates because of an acrid odour and a -high level of free fatty acids. - Ng Siew Kee, the chairman of Malaysia's Cocoa Growers' -Council, said Malaysia should expand its sales to Asia and the -United States if it did not produce a type suitable for Western -Europe. - A spokesman for the PNG Cocoa Industry Board said the -London market was mistaken if it linked PNG cocoa with -high-acid Malaysian and Indonesian beans. - "When the market is declining, buyers seize on anything to -talk down prices," the spokesman said. - He said that PNG could sell whatever cocoa it produces. - PNG exported 33,000 tonnes of cocoa in the 1986/87 cocoa -year ending September 30, of which nearly 50 pct was exported -to West Germany, 16 pct to the U.S. And the rest to the -Netherlands and Britain. - The Indonesia spokesman, an Agriculture Ministry official -who wished not to be identified, said Indonesia had no problem -with quality and would continue to expand sales. He described -criticism of the quality of Indonesian beans as "trade politics" -and said Jakarta's traditional links with Dutch buyers meant it -did not have any difficulty with exports. - Indonesia and Malaysia, Asia's two biggest commodity -producers, are expanding cocoa output and are both outside the -International Cocoa Organization (ICCO). - Officials have said Malaysian production is expected to -total 150,000 to 155,000 tonnes in calendar 1987. - This is up from 131,000 tonnes in 1986, partly because of -the end of a three-year drought in Sabah, the country's largest -cocoa growing area. - Production of Indonesian cocoa beans tripled to 31,600 -tonnes in calendar 1986 from 10,284 tonnes in 1980. Output is -projected to rise to 50,000 tonnes in 1988 from 38,000 tonnes -this year as young trees mature. - Both Malaysia and Indonesia are low cost producers and -traders said they could last out low prices longer than West -African countries. - According to one Kuala Lumpur trader, world prices would -have to fall another 1,000 ringgit per tonne (about 250 stg) to -make cocoa production in Malaysia uneconomic. - Some traders believe the main quality problem is with -harvesting and fermentation techniques. - One trader said Malaysian cocoa is virtually -indistinguishable from West African output if treated in the -same way but this is not possible on the larger Malaysian -estates. - REUTER - - - -20-OCT-1987 00:20:44.23 - - - - -tse - - -RM AI -f0029reute -f f BC-Tokyo-stock-index-dow 10-20 0012 - -******Tokyo stock index down 2,210.19 points to 23,536.37 in early afternoon -Blah blah blah. - - - - - -20-OCT-1987 00:30:35.73 - -japan -nakasone - - - - -RM AI -f0036reute -b f BC-JAPANESE-PREMIER-SAYS 10-20 0110 - -JAPANESE PREMIER SAYS HE WATCHING STOCK SITUATION - TOKYO, Oct 20 - Japanese Prime Minister Yasuhiro Nakasone -was quoted by Kyodo News Service as saying he was watching the -stock market situation. - "We must watch things a little longer. New York is down 22 -pct, London 10 pct, while compared to this Japan is seven pct -down," Kyodo quoted him as telling reporters. - Asked if he agreed with analysts who called the stock -sell-off "Black Monday," Nakasone said: "Compared with times past, -economics have changed completely." He rejected a comparison -between the present situation and the stock market collapse of -1929 and the recession which followed. - REUTER - - - -20-OCT-1987 00:48:57.47 -crude -malaysia - -opec - - - -Y -f0049reute -u f BC-MALAYSIA-ADVISED-TO-R 10-20 0116 - -MALAYSIA ADVISED TO RAISE CRUDE OIL OUTPUT IN 1988 - KUALA LUMPUR, Oct 20 - Malaysia's national oil company, -Petronas, has advised the government to raise crude oil output -to 540,000 barrels a day (bpd) in 1988 from a current 500,000 -bpd, a senior company official said. - "We have the capacity to produce the amount," Rastam Hadi, -Petronas's Vice-President for Upstream Sector said. - The government will announce its decision on Friday when it -unveils the country's budget. Malaysia raised output this month -to current levels from 420,000 bpd after reviewing the world -oil market. In May, Malaysia cut output to 420,000 bpd from -459,000 in response to a call by OPEC to boost prices. - REUTER - - - -20-OCT-1987 02:15:10.98 -money-fx -usawest-germany -sumita - - - - -RM AI -f0103reute -f f BC-Sumita-welcomes-U.S.- 10-20 0012 - -******Sumita welcomes U.S.-West German joint confirmation of Louvre accord -Blah blah blah. - - - - - -20-OCT-1987 02:18:33.93 - - - - -tse - - -RM AI -f0105reute -f f BC-Tokyo-stock-index-slu 10-20 0010 - -******Tokyo stock index slumps 14.9 pct to close at 21,910.08 -Blah blah blah. - - - - - -20-OCT-1987 02:20:31.11 - - -sumita - - - - -RM AI -f0106reute -f f BC-Sumita-says-world-sto 10-20 0013 - -******Sumita says world stockmarkets excessively concerned about economic future -Blah blah blah. - - - - - -20-OCT-1987 02:29:24.58 -money-fx -japanusawest-germany -sumita - - - - -RM AI -f0111reute -b f BC-SUMITA-WELCOMES-U.S.- 10-20 0109 - -SUMITA WELCOMES U.S.-JAPAN AGREEMENT ON LOUVRE - TOKYO, Oct 20 - Bank of Japan governor Satoshi Sumita said -he welcomed Monday's U.S. And West German joint confirmation of -their commitment to the Louvre accord. - Sumita said in a statement that world stockmarkets were -excessively concerned about the economic future. - The Bank of Japan will continue to adhere to a system of -policy coordination based upon the Louvre accord of February, -he said. The accord called for stability in foreign exchange -rates. Exchange rates generally are regaining stability and the -economies of industrialised nations are heading for a steady -recovery, he said. - REUTER - - - -20-OCT-1987 02:31:05.43 -money-fx -new-zealand - - - - - -RM -f0112reute -u f BC-NEW-ZEALAND-WILL-CONT 10-20 0074 - -NEW ZEALAND WILL CONTINUE FIRM MONETARY POLICY - WELLINGTON, Oct 20 - The Reserve Bank of New Zealand said -there was no evidence to suggest the fall in share prices had -affected financial stability and it would maintain its firm -monetary policy. - Governor Spencer Russell said in a statement the central -bank did not accept arguments that the battle against inflation -should now take a low second priority after the sharemarket's -plunge. - Russell said the bank had two statutory responsibilities -- -to implement the government's monetary policy to bring down -inflation, and to ensure the financial sector's stability. - "Unless the bank is directed otherwise, the firm monetary -policy will continue because it is very much in the national -interest that it do so," he said. - "And there is yet no evidence available to the bank to -suggest that the fall in share prices has affected the -stability of the financial sector." - The Barclays share index fell a record 504.75 points to -2,925,26 on Tuesday, a decline of 14.7 pct. - REUTER - - - -20-OCT-1987 02:51:54.24 - - - - -tse - - -RM AI -f0126reute -f f BC-Tokyo-Stock-Exchange 10-20 0013 - -******Tokyo Stock Exchange has no plan to suspend trading on Wednesday-president -Blah blah blah. - - - - - -20-OCT-1987 02:52:04.37 - - - - -tse - - -F -f0127reute -f f BC-Tokyo-Stock-Exchange 10-20 0013 - -******Tokyo Stock Exchange to ease margin requirements, exchange president says -Blah blah blah. - - - - - -20-OCT-1987 03:02:08.52 -money-supply -japan - - - - - -RM AI -f0132reute -f f BC-Japan-September-M-2-p 10-20 0014 - -******Japan September M-2 plus CD money supply rises 11.1 pct year on year (Aug 11.0) -Blah blah blah. - - - - - -20-OCT-1987 03:12:36.51 - - -james-baker - - - - -RM V -f0146reute -f f BC-BAKER-HEADS-HOME-AFTE 10-20 0013 - -******BAKER HEADS HOME AFTER CUTTING SHORT EUROPE TRIP - SWEDISH FINANCE MINISTRY -Blah blah blah. - - - - - -20-OCT-1987 03:14:08.12 -graincorn -tanzaniamalawimozambiquezaire - - - - - -G -f0147reute -u f BC-TANZANIA-SELLS-MAIZE 10-20 0075 - -TANZANIA SELLS MAIZE TO MALAWI, MOZAMBIQUE, ZAIRE - DAR ES SALAAM, Oct 20 - Tanzania has arranged to sell -53,000 tonnes of maize to Malawi, Mozambique and Zaire, radio -Tanzania said. - The radio said the grain would be delivered soon, but gave -no details about the value of the sales. - Tanzania is expecting a record maize harvest of 2.3 mln -tonnes in the 1987/88 financial year ending June, up from a -bumper crop of 2.1 mln in 1986/87. - REUTER - - - -20-OCT-1987 03:14:33.15 -cotton -tanzania - - - - - -G -f0148reute -u f BC-TANZANIAN-COTTON-THRE 10-20 0100 - -TANZANIAN COTTON THREATENED BY LACK OF STORAGE - DAR ES SALAAM, Oct 20 - About 60,000 tonnes of harvested -raw cotton may be spoiled by rain in Tanzania's northern -Shinyanga region because it is stored in the open or in crude -village sheds, radio Tanzania reported. - The cotton, worth one billion shillings, cannot be moved to -ginneries in the region because most mill warehouses are full. -Many mills are not working because of a lack of spare parts, it -added. - Agriculture Ministry officials have forecast a 1987/88 -cotton harvest of about 200,000 tonnes, down from 215,000 in -1986/87. - REUTER - - - -20-OCT-1987 03:17:41.87 - -japan - - -tse - - -RM AI -f0153reute -b f BC-TOKYO-STOCK-EXCHANGE 10-20 0082 - -TOKYO STOCK EXCHANGE WILL NOT SUSPEND TRADING - TOKYO, Oct 20 - Tokyo Stock Exchange president Michio -Takeuchi said the exchange has no immediate plans to suspend -trading to cool off panic stock selling. - However, he said Tokyo may consider such a measure if the -London and New York exchanges are closed overnight. - "I don't think it will happen," he added. - He also told reporters the exchange will relax margin -requirements effective on Wednesday to encourage stock buying. - Takeuchi said the sharp fall in stock prices was mostly due -to psychological factors. - "We need to keep close watch on market movement but we -expect the market will stabilise soon," he said, adding that -individual investors should remain calm. "It is advisable to -wait for an autonomous recovery of the market," he said. - The margin requirement in cash will be reduced to 50 pct -from 70 pct while the margin collateral requirement in equity -will rise to 70 pct from 60 pct, effective on Wednesday, he -said. - Takeuchi also said the exchange has no specific plan to -take coordinated action with the New York and London exchanges -to help stabilise stock prices. - The drop on Wall Street was caused by various factors but -was primarily the result of a correction of overvalued share -prices, he said. The current stock price plunge cannot compare -with the Great Depression as the economic environment is very -different, he added. - The exchange has not changed plans to introduce stock -futures trading next year despite press reports that the Wall -Street fall was linked with futures trading, he said. - REUTER - - - -20-OCT-1987 03:26:57.39 -interest -philippines - - - - - -RM -f0166reute -u f BC-AQUINO-SAYS-MANILA-WA 10-20 0111 - -AQUINO SAYS MANILA WATCHING INTEREST RATES CLOSELY - MANILA, Oct 20 - President Corazon Aquino said the -Philippines was closely monitoring interest rates in the wake -of Monday's record drop on Wall Street and steep declines in -Manila and other Asian stock markets. - "We will monitor these developments closely and will -continue to hope that they do not precipitate large declines in -economic activity around the world," Aquino told a meeting of 13 -major Philippine business groups. - "The Philippines, as a trading country in the world economy, -depends on the continued health and growth of both the world -economy and the world trading system," she said. - The Manila Stock Exchange composite index plunged 105.49 -points or 11.79 pct by the midday close to 789.54, depressed by -the record 508 point fall of the Dow Jones industrial average -on Monday. - "The Philippines, in addition, as a large borrower nation, -is affected by developments in interest rate levels around the -world and will carefully monitor the impact of these -developments on interest rates, on gold and on commodity -prices," Aquino said. - "We welcome the statements from world leaders that urge calm -in the present difficult situation," she added. - REUTER - - - -20-OCT-1987 03:36:58.94 - -japan - - - - - -F -f0181reute -u f BC-NISSAN-STARTS-TO-MARK 10-20 0101 - -NISSAN STARTS TO MARKET REMODELLED 4WD VEHICLES - TOKYO, Oct 20 - Nissan Motor Co Ltd <NSAN.T> said it has -started to market a remodelled version of its four wheel drive -(4WD) Safari vehicle in Japan. - Nissan said in a statement it hopes to sell 250 vehicles a -month in Japan. - It also plans soon to start exporting 3,400 vehicles a -month to the Australian, Middle East and Asian markets under -the name Patrol, a spokesman said. - It will sell the vehicle in Europe sometime in the future, -with shipments from <Motor Iberica S.A.>, its Spanish unit. The -volume for Europe will be set later. - REUTER - - - -20-OCT-1987 03:38:14.97 - -japan - - - - - -RM -f0182reute -u f BC-JAPAN-TO-SCRUTINISE-L 10-20 0113 - -JAPAN TO SCRUTINISE LIFE INSURERS' CAPITAL GAINS - TOKYO, Oct 20 - The Finance Ministry plans to examine how -life insurance companies realised capital gains through -transactions undertaken in June, just before the yen bond -market began to fall sharply, a senior Ministry official said. - The move is aimed at cooling fierce competition in the -field and will pave the way for a Ministry system to check that -insurers do not inflate investment returns on the accounts to -attract investors, he said. - Some insurers transfer part of their unrealised gains from -general accounts to the variable life accounts, violating their -internal regulations, industry sources said. - The eight major local life-insurers which offer variable -life policies here realised an average return of 21.01 pct on -such policies in the year ended September. - The Ministry will scrutinise the policies of 17 local and -foreign life insurers which offer the variable life schemes. - Japan has 23 major local life insurers, none of which is -listed on the stock market. - REUTER - - - -20-OCT-1987 04:03:13.28 - - - - -lse - - -RM V -f0211reute -f f BC-FTSE-100-share-index 10-20 0013 - -******FTSE 100 share index opens 186.0 down at 1,866.3 - London Stock Exchange -Blah blah blah. - - - - - -20-OCT-1987 04:10:11.01 -money-supply -japan - - - - - -RM AI -f0223reute -b f BC-JAPAN-MONEY-GROWTH-TO 10-20 0110 - -JAPAN MONEY GROWTH TO STAY AT 11-12 PCT - OFFICIAL - TOKYO, Oct 20 - Growth in Japan's M-2 plus certificates of -deposit (CD) money supply in the October to December period is -not expected to accelerate, but will remain at high levels -between 11 and 12 pct, a senior Bank of Japan official said. - The central bank will keep a watch on high growth in -liquidity because this is a factor that may cause rises in -prices of goods, he said. - The September growth of 11.1 pct year on year announced -earlier today should not be taken as implying that the money -supply has started to expand very rapidly, he said. In August -the rate of increase was 11.0 pct. - REUTER - - - -20-OCT-1987 04:11:39.73 - -west-germany - - - - - -F -f0225reute -u f BC-W.GERMAN-CAR-OUTPUT, 10-20 0093 - -W.GERMAN CAR OUTPUT, EXPORTS RISES IN SEPTEMBER - FRANKFURT, Oct 20 - West German car and van production rose -in September to 407,600 from 386,000 in September 1986, while -exports climbed to 226,300 from 218,200, the German Automobile -Industry Association VDA said. - The association added that incoming domestic orders in -September were above, and foreign orders roughly equal, to -those in September last year. - Car and van production rose in the first nine months of the -year to 3.25 mln from 3.19 mln. But exports fell to 1.80 mln -from 1.85 mln - Output of light trucks fell in September to 13,200 from -14,700, while heavy truck production was unchanged at 10,100. - Over the nine month period, light truck production fell to -109,300 from 129,200, while heavy truck production dipped to -83,800 from 84,700. - Exports of light trucks fell in September to 7,800 from -9,000 and to 66,600 from 84,300 in the first nine months. - Exports of heavy trucks rose to 5,500 in September from -4,600 in September last year and to 47,800 from 45,300 in the -first nine months. - REUTER - - - -20-OCT-1987 04:19:37.24 - -new-zealand -douglas - - - - -RM -f0240reute -u f BC-DOUGLAS-SAYS-N.Z.-NOT 10-20 0099 - -DOUGLAS SAYS N.Z. NOT ISOLATED FROM WORLD MARKETS - WELLINGTON, Oct 20 - Finance Minister Roger Douglas said -the fall in share prices on local and world markets -demonstrated that New Zealand could not be isolated from global -trends. - "We can't expect to isolate ourselves from developments -around the world," Douglas told reporters. - "I think above all what today's problems illustrate is that -the sort of policies that we have been putting in place the -last three years are absolutely essential so that New Zealand's -economic performance improves, relative to the rest of the -world." - The New Zealand share market fell 14.7 pct on Tuesday in a -record one-day fall. - Douglas told a news conference, at which the government -announced plans to sell its 89 pct stake in <New Zealand Steel -Ltd>, that the sharemarket fall would not affect plans to sell -parts of state-owned corporations such as <Air New Zealand>, -<DFC New Zealand Ltd> and <Petroleum Corp of New Zealand Ltd>. -Asked if the government considered acting to close the -sharemarket for a period, Douglas said: "No. I'm not sure it -would have been my job to do so." - REUTER - - - -20-OCT-1987 04:21:55.55 - -japanusa - - - - - -RM V -f0243reute -u f BC-WILL-WORLD-RECESSION 10-20 0086 - -WILL WORLD RECESSION FOLLOW STOCK MARKET PLUNGE? - By Linda Sieg - TOKYO, Oct 20 - Some economists fear a world recession if -stock exchanges continue to plunge. Others are more sanguine. - The pessimists say the stocks shakeout is destroying -personal assets and dampening consumption. - "The real economic effects can be significant -- the -destruction of wealth and a deflationary impact on the economy," -said an economist at a U.S. Securities house. - But other economists said such fears were overblown. - "Because of lower appreciation of corporate or personal -assets, that much negative impact could be observed (in the -U.S.)," said Keikichi Honda, general manager of economic -research at the Bank of Tokyo Ltd. - "But the appreciation of stock prices has not been playing -such a major role in the entire U.S. Gross national product -(GNP)," Honda said. - The pessimists noted that the record fall on Wall Street on -Monday was sparked by fears the U.S. Economy is heading for a -recession or serious slowdown much earlier than expected. - But the optimists said a dampening effect on consumption -due to stock market losses was less likely in Japan. - "In Japan the weight of stocks in individuals' total assets -is less than in the U.S., And the total weight of individuals' -holdings in the stock market is less, so there will be less -damage than in the U.S.," said an economist at one of Japan's -major brokerage houses. - "Japan is taking strong measures to stimulate domestic -demand, so while there could be some impact from the reduction -of assets value, it would not be a major impact," said the Bank -of Tokyo's Honda. - Optimists also pointed to incipient declines in U.S. -Interest rates as a positive sign for the U.S. Economy. - "U.S. Interest rates are coming down so there is a feeling -that interest rates have hit their ceiling, and the U.S. -Economy is strong, so there should be no direct impact from the -collapse of share prices," said Toshiaki Kakimoto, Sumitomo Bank -Ltd chief economist. - Some economists suggested that should markets continue to -slump, the major industrial nations may have to discuss -possible joint lowering of official discount rates. - "Until last week, a discussion of lower rates was -unthinkable, now it's not," said the Japanese brokerage house -economist. - "There has been a move from the purely rational to the -emotional -- it's a central bankers' nightmare," said the -foreign economist. "It will require strong global leadership by -politicians to snuff out," he said. - However, "previously, the stocks correction was due to fears -of higher interest rates, a possible resurgence of inflation -and the depreciation of the dollar," said Nobuyuki Ueda, senior -economist at the Long-Term Credit Bank Ltd. - "Now some people have an uneasy feeling about the outlook of -the U.S. Economy," Ueda said. - "If the stock market is a leading indicator of the future -movement of the economy, this decline will have very -significant implications for the U.S. Economy," he said. - "If the low levels hold, those who were keeping consumption -high because of unrealised gains could curb consumption," said -Salomon Brothers (Asia) Ltd economist Ron Napier. "If the paper -gains aren't there, people won't spend." - A U.S. Recession could then trigger similar declines in -other economies, some economists said. - "I don't know if a possible recession in the U.S. Would -trigger a world recession because other nations, such as Japan, -are showing good economic performance," LTCB's Ueda said. "But we -can't rule out the possibility because the U.S. Is still -playing a very dominant role in the world economy." - REUTER - - - -20-OCT-1987 04:25:26.49 - -japan -nakasonemiyazawa - -tse - - -RM V -f0246reute -u f BC-JAPAN-TRIES-TO-STEM-S 10-20 0097 - -JAPAN TRIES TO STEM STOCKS DIVE - By Linda Sieg - TOKYO, Oct 20 - Government and monetary authorities today -staged a concerted effort to calm spreading panic on Japanese -stock exchanges but market analysts said there were limits to -their ability to succeed. - "The ability of the Big Four (Japanese securities houses) -and the Finance Ministry is limited," said Barclays de Zoete -Wedd economist Peter Morgan. - Finance Ministry officials asked the big four securities -companies this afternoon to help calm panic selling on the -Tokyo Stock Exchange, ministry officials said. - Prime Minister Yasuhiro Nakasone was quoted by Kyodo News -Service as saying he was watching the stock market situation. - But he rejected comparisons with the 1929 stock market -collapse and subsequent recession. - Finance Minister Kiichi Miyazawa said the Tokyo stock -market should not be gravely affected by downturns in New York -and London because there are clear signs of a Japanese economic -recovery and exchange rate stability. - Bank of Japan Governor Satoshi Sumita also tried to calm -the panic, saying in a statement that world stock markets were -excessively concerned about the economic future. - Traditionally, the four big houses -- Nomura Securities Co -Ltd, Yamaichi Securities Co Ltd, Daiwa Securities Co Ltd, and -Nikko Securities Co Ltd -- have influenced the market because -of their sheer size and overwhelming market share. - This strength has in the past made it possible for the -brokerages to calm down markets under guidance from the Finance -Ministry, analysts said. - But the analysts questioned whether the brokerages, which -have already suffered heavy losses from falling bond markets -over the past year, would have the strength this time to turn -things around. - "The question is, are the Japanese brokerages strong enough -to force investors to buy," said Johsen Takahashi, research -director at the Mitsubishi Research Institute. - "If we consider that they have suffered serious losses in -the bond markets and in their U.S. Investments, it is debatable -whether they they could support buying," he said. - "We can support things to some extent, but we can't -completely suppress selling," said one Japanese broker. - Some analysts said the high percentage of shares cross-held -by financial institutions and other corporations could have a -stabilising effect on the market. - Some 80 pct of shares are held by corporate shareholders, -said Keikichi Honda, general manager of the Bank of Tokyo Ltd's -economic research division. "This is a tightly woven textile. In -its own way it is stronger than Wall Street." - But other analysts expressed doubt about this argument. - "If a high percent of shares is cross held, everything -happens at the edges and the relative moves can be larger," said -Kleinwort Benson Ltd financial analyst Simon Smithson. "Selling -will drive prices down an enormous distance because of no -liquidity." - "You don't need big volume to get big declines in the market --- you just need a huge imbalance between sellers and buyers," -said Barclay's Morgan. - Shares held by what are termed "stable shareholders," or -banks and other companies with which a firm does business, -might also find their way onto the market if the outlook gets -bad enough, some analsyst said. - "Closely held shares could become unclosely held," said -Morgan. But he said such a prospect is unlikely right now -because companies, with their improved earnings prospects, do -not need to sell shares for cash flow reasons. - REUTER - - - -20-OCT-1987 04:30:24.90 -crudeship -indonesia -subroto -opec - - - -RM V Y -f0257reute -u f BC-WORLD-COULD-COPE-WITH 10-20 0105 - -WORLD COULD COPE WITH HORMUZ CLOSURE, SUBROTO SAYS - JAKARTA, Oct 20 - Oil prices would skyrocket for a time if -conflict in the Gulf closed the Strait of Hormuz, but oil -supplies could be adjusted to take care of world demand, -Indonesian Energy Minister Subroto said. - He made no explicit reference to the latest U.S. Military -action in the Gulf. - But in an address to a conference of the Indonesian -Petroleum Association, he said, "If worst comes to worst and say -the flow of oil through the Straits of Hormuz is completely -shut off, I believe the world oil supply, given time to adjust, -can take care of the situation." - "But this is not to say that prices, at least for a short -duration, will not skyrocket as speculators take advantage of -the situation," he declared. - Tensions in the Gulf, however, usually had a relatively -short-term impact on prices, he added. - Assessing future price trends, he said, "Short-term spot -prices will probably still fluctuate, but they will most likely -hover around the official Opec price basket of 18 dlrs per -barrel. - "The upward deviations, however, are likely to be greater -than the downward ones." - "The balance between supply and demand in the short term -will still be delicate," he added. "Non-Opec production may still -go up, competing with Opec for the expected additional increase -in world demand." - Subroto, a member of Opec's three-man quota committee which -has been touring cartel members, said speculation may play -havoc with spot prices, but Opec was trying to stabilize the -situation by urging cooperation by non-Opec producers. - In the medium term, non-Opec production would reach a -plateau in the early 1990s, leaving Opec much stronger, he -said. - REUTER - - - -20-OCT-1987 04:34:41.19 -jet -bangladesh - - - - - -Y -f0264reute -u f BC-BANGLADESH-TENDERS-FO 10-20 0059 - -BANGLADESH TENDERS FOR TWO MLN BARRELS PETROLEUM - DHAKA, Oct 20 - Bangladesh Petroleum Corp said it floated -an international tender for imports of two mln barrels of Jet -Kero, Superior Kero and High Speed Diesel for shipment during -January-June 1988. - It said the offer for the petroleum products would be open -until 0600 gmt on November 19. - REUTER - - - -20-OCT-1987 04:48:51.01 -interest - -poehl - - - - -RM V -f0286reute -f f BC-Poehl-says-German-and 10-20 0014 - -****** Poehl says German and international interest rate rises are cause for concern -Blah blah blah. - - - - - -20-OCT-1987 04:49:48.44 - - -poehl - - - - -RM V -f0287reute -f f BC-Bundesbank-has-no-int 10-20 0012 - -****** Bundesbank has no interest in higher capital market rates - Poehl -Blah blah blah. - - - - - -20-OCT-1987 04:53:02.87 -ship -bahrainiran - - - - - -Y -f0289reute -u f BC-IRANIAN-TANKER-REPORT 10-20 0079 - -IRANIAN TANKER REPORTS SIGHTING MINE IN GULF - BAHRAIN, Oct 20 - An Iranian shuttle tanker reported -spotting a floating mine in the central Gulf on Tuesday about -50 miles west of Lavan Island, regional shipping sources said. - The Khark III, owned by the National Iranian Tanker Co, -gave the position of the mine as 27 degrees 14 minutes north, -52.06 east. - There was no indication of measures being taken against the -mine, which is in Iranian territorial waters. - REUTER - - - -20-OCT-1987 04:54:40.64 -acq -uk - - - - - -F -f0290reute -r f BC-FABER-OPEN-FOR-OFFERS 10-20 0093 - -FABER OPEN FOR OFFERS ON MORGAN GRENFELL STAKE - LONDON, Oct 20 - Willis Faber Plc <WIFL.L> chairman and -chief executive David Palmer said the company would consider -any bid for its 20.8 pct shareholding in Morgan Grenfell Group -Plc <MGFL.L> but had not yet received any offers. - "We will entertain any approaches," he told Reuters in reply -to questions, following U.K. Press speculation. - In an earlier statement, Faber said that if an offer were -to be received for its stake in the merchant banking group, "it -would be considered on its merits." - REUTER - - - -20-OCT-1987 04:58:56.26 - - -poehl - - - - -RM V -f0293reute -f f BC-Inflationary-fears-ar 10-20 0011 - -****** Inflationary fears are unjustified and exaggerated, Poehl says -Blah blah blah. - - - - - -20-OCT-1987 04:59:07.79 -acq -ukcanada - - - - - -F -f0294reute -u f BC-CORBY-DISTILLERIES-TO 10-20 0107 - -CORBY DISTILLERIES TO EXPAND IN CANADA - LONDON, Oct 20 - <Corby Distilleries Ltd>, 52 pct owned by -Allied Lyons Plc <ALLD.L> subsidiary <Hiram Walker-Goodman & -Worts> is to buy the spirits business of <McGuinness Distillers -Ltd> of Toronto for 45 mln Canadian dlrs. - McGuinness is a producer and marketer of spirits and also -has exclusive agencies for some imported wines and spirits. - The sale is subject to the approval of the Bureau of -Competition Policy. Michael Jackaman, president and chief -executive officer of Hiram Walker and Allied Vintners, said, -"The acquisition is an excellent one both commercially and -financially." - REUTER - - - -20-OCT-1987 04:59:48.03 -interest -west-germany -poehljames-bakerstoltenberg - - - - -RM V -f0295reute -b f BC-POEHL-SAYS-RATE-RISES 10-20 0088 - -POEHL SAYS RATE RISES ARE CAUSE FOR CONCERN - FRANKFURT, Oct 20 - Rises in West German and international -interest rates are a cause for concern and the Bundesbank has -no interest in higher capital market rates, Bundesbank -President Karl Otto Poehl said. - "We consider the interest rate increase that has occurred -here and internationally to be a problem and cause for concern," -Poehl told an investment conference. - "I would like to stress that the Bundesbank has no interest -in higher capital market rates," he said. - Shortly after Poehl spoke, the Bundesbank announced a -tender for a securities repurchase pact at a fixed rate of 3.80 -pct. - Previous tenders over the last month by interest rate have -seen the allocation rate on these facilities rise to 3.85 pct -at last week's pact from 3.60 on the last fixed-rate tender in -late September. - The Bundesbank's reduction of the key allocation rate to -3.80 from 3.85 pct was heralded Monday by repeated injections -of money market liquidity at between 3.70 and 3.80 pct. - These moves to cap interest rates followed a meeting -between Poehl, Finance Minister Gerhard Stoltenberg and U.S. -Treasury Secretary James Baker Monday in Frankfurt. - Officials said afterwards the three men had reaffirmed -their commitment to the Louvre accord on currency stability. - Over the weekend, criticism by Baker of the tightening in -West German monetary policy had prompted a sharp fall of the -dollar on speculation that Louvre cooperation had ended. - But the dollar rallied on news of Monday's meeting in -nervous trading to trade above 1.79 marks Tuesday. - Poehl said that the recent rise in interest rates was not -due to central bank policy, but to markets' expectations, and -currency developments. - Commenting on the inflationary expectations, Poehl said "You -have to get to the root of the problem, you have to pursue a -policy which reveals that there are no grounds for such fears." - The inflationary fears were unjustified and exaggerated, he -said. - Poehl rebuffed recent U.S. Criticism of West Germany, -saying the Bundesbank had made a substantial contribution to -international cooperation in interest and monetary policy. - The Bundesbank has tolerated an overshooting of its money -supply target, arousing criticism from other quarters, he said. - "Today we still have lower interest rates than at the end of -1986... Quite the contrary of other countries, where interest -rates have risen substantially more," Poehl said. - This had to be taken into account when considering recent -rises in repurchase pact allocation rates, which were due to -rising international money market rates that had spilled over -into the German market, he said. - Poehl expressed surprise that financial markets had so far -ignored improvements in the U.S. Deficits. - "The adjustment process in the U.S. Trade balance is -definitely underway," he said, noting that this was not so -noticeable in absolute figures. - The spectacular improvement in the budget deficit had also -attracted little attention, he said. - REUTER - - - -20-OCT-1987 05:00:49.66 -acq -uk -lawson - - - - -RM -f0296reute -b f BC-LAWSON-SAYS-BP-SHARE 10-20 0108 - -LAWSON SAYS BP SHARE OFFER GOING AHEAD - LONDON, Oct 20 - U.K. Chancellor of the Exchequer Nigel -Lawson said the Government was going ahead with this month's -flotation of British Petroleum Co Plc <BP.L> shares despite the -collapse on international stock markets. - "We are going ahead because the whole issue has been -underwritten - we had it underwritten because there is always a -risk of this sort of thing happening," Lawson said in a BBC -radio interview. - Lawson's remarks came as renewed selling on the London -stock market took BP shares down a further 33p to 283, well -below the 330p price set for the around seven billion stg -issue. - Lawson said the U.K. Economy is fundamentally sound and -added that stock markets had reflected that recently. - "I profoundly believe in the market system as the best way -for securing economic prosperity (but) that does not mean to -say the markets are infallible." - "My advice to small investors...Is to remain calm. There is -absolutely no reason not to do so," Lawson said. - REUTER - - - -20-OCT-1987 05:01:49.86 - - - - - - - -RM -f0300reute -f f BC- 10-20 0014 - -****** Bundesbank sets 35-day securities repurchase tender at fixed rpt fixed 3.80 pct -Blah blah blah. - - - - - -20-OCT-1987 05:03:42.33 - - - - -pse - - -F -f0303reute -f f BC-Paris-share-price-ind 10-20 0010 - -******Paris share price indicator opens 2.31 pct down - official -Blah blah blah. - - - - - -20-OCT-1987 05:05:18.65 - -ukusa -lawson - -lse - - -F -f0305reute -u f BC-LAWSON-CALLS-DEGREE-O 10-20 0114 - -LAWSON CALLS DEGREE OF SHARE FALL ABSURD - LONDON, Oct 20 - U.K. Chancellor of the Exchequer Nigel -Lawson said the severity of the current rout on world stock -markets was an absurd over-reaction sparked on Wall Street by a -spreading lack of confidence in the U.S. Economy. - Lawson said in a BBC radio interview, "This began on Wall -Street. It has a lot to do with the American stock market (and) -a lack of confidence in the U.S. - and some careless talk by -those who should have known better." - In a further wave of selling this morning in London, the -FTSE 100 index had lost a further 233.2 points only 50 minutes -after the official 0800 GMT opening to stand at 1,819.1. - Lawson said a correction on world stock markets was to have -been expected after the bull markets of recent years. "What was -not expected was the severity of the downturn, which quite -frankly is rather absurd." - He said he saw no fundamental signs why the U.S. Economy -should go into recession, adding, "Indeed the possibility of -higher (U.S.) interest rates would certainly in my judgment not -lead the American economy into a recession." - "The only way in which the American economy would go into -recession was if it actually talks itself into recession," he -said. - REUTER - - - -20-OCT-1987 05:06:25.13 - -japan - - - - - -RM AI -f0308reute -u f BC-BANK-OF-JAPAN-SEES-ST 10-20 0114 - -BANK OF JAPAN SEES STEADY ECONOMIC RECOVERY - TOKYO, Oct 20 - The Japanese economy is firmly on the -recovery path, supported by robust domestic demand, the Bank of -Japan said in a regular monthly report. - The report said industrial production is strengthening as -manufacturing companies have almost completed adjustments of -their plant and equipment investment while non-manufacturing -firms have continued to be positive in their capital spending. - Strong domestic demand, such as consumer spending and -housing investment, will more than offset declining exports, -the central bank report said. It also noted the continued rise -in domestic wholesale prices and money supply. - REUTER - - - -20-OCT-1987 05:07:16.01 - - - - -lse - - -RM V -f0311reute -f f BC-London's-FTSE-100-sha 10-20 0011 - -******London's FTSE 100 share index falls below 1,800 - Stock Exchange -Blah blah blah. - - - - - -20-OCT-1987 05:08:54.04 -coconut -philippinesusa - - - - - -G -f0315reute -u f BC-PHILIPPINES-APPLAUDS 10-20 0108 - -PHILIPPINES APPLAUDS DEFEAT OF U.S. LABELLING BILL - By Diane Stormont - MANILA, Oct 20 - The Philippine coconut industry has -greeted with relief the defeat in the U.S. Senate of a bill -requiring some edible oils to be labelled as saturated fats. - The bill, which was defeated by the Senate Agriculture -Committee on Monday, could have cost about 60 mln dlrs a year -in lost exports, the Philippine Coconut Authority (PCA) said. - "Naturally, we welcomed the defeat but there is a chance the -bill will be resurrected and attached as a rider to another -Senate bill," a spokesman for the United Coconut Association of -the Philippines (UCAP). - PCA chairman Jose Romero noted the vote was close, with -eight senators voting for it, 10 against and one abstaining. - The UCAP spokesman said the American Soybean Association -(ASA) had spent about 25 mln dlrs lobbying for the bill. - He said the ASA also had obscured the health issue during -the debate. - "Coconut oil is high in saturated fats, but unlike saturated -animal fats, they do not enter the blood and lymph systems -leaving fatty deposits connected to heart disease," he said. - U.S. Soybean and cottonseed producers had argued that -saturated fats cause heart disease and that the labels would -discourage consumption by health conscious consumers in favour -of domestic unsaturated alternatives. - Opponents of the bill said the proposal discriminated -against imports and would damage the Philippines, Malaysia and -Indonesia. - The Philippines earned 488 mln dlrs from coconut products -in 1986, up from 477 mln in 1985, UCAP figures show. - Exports to the United States for edible and non-edible use -account for about half of that total, PCA's Romero said. - REUTER - - - -20-OCT-1987 05:17:40.79 - -thailand - - - - - -F -f0331reute -u f BC-THAI-STOCKS-PLUNGE-IN 10-20 0091 - -THAI STOCKS PLUNGE IN REACTION TO WORLDWIDE TREND - By Vithoon Amorn - BANGKOK, Oct 20 - Thai stock prices plunged on Tuesday as -nervous investors unloaded shares on reports of steep declines -on major world stock markets. - Brokers said the Securities Exchange of Thailand Index fell -a record 36.64 points, or nearly eight pct, to close at 422.37. - "It's impossible to halt the slide in this situation. The -market just doesn't behave logically," said Sirivat -Voravetvuthikun, executive vice president of Asian Securities -Trading Co Ltd. - But Sirivat said he did not believe the fall would mark the -end of the SET's 16 month bull run, which has accelerated -during the last two months. He expected Thai stocks to -fluctuate widely in the next few weeks. - The slide on Tuesday followed a 13.85 point decline of the -97-stock index on Monday when it closed at 459.01. - Brokers said they were flooded with sell orders when the -market opened this morning and a SET announcement urging -investors not to panic was ignored. - The index reached a record 472.86 last Friday, up 57.7 pct -from end-June and 128.2 pct higher than last December. - SET officials said 77 issues were traded on Tuesday, of -which all but two declined. Of the losers, 68 plummeted the -daily maximum 10 pct allowed by the exchange. Prices on the -special foreign column also fell sharply. - SET vice president Suthichai Chitvanich told reporters the -10 pct floor serves as a restraint, making it unnecessary to -suspend trading should the panic continue. - The Thai exchange has lately been gaining on its own -strength with most buying coming from local investors. - Investors should not be unduly influenced by foreign market -reports, he added. - Suthichai said sound local fundamentals, including low -interest rates and promising economic growth, favoured -investment in the stock market. - The SET also announced it would release third quarter -corporate earnings earlier than expected as part of efforts to -shore up public confidence. - REUTER - - - -20-OCT-1987 05:28:05.60 - - - - -mise - - -F -f0355reute -f f BC-Milan-bourse-opening 10-20 0011 - -******Milan bourse opening delayed one hour to 1200 GMT - official -Blah blah blah. - - - - - -20-OCT-1987 05:31:21.81 -interest -japan - - - - - -RM V -f0357reute -u f BC-TOKYO-STOCK-PLUNGE-CO 10-20 0106 - -TOKYO STOCK PLUNGE COULD FORCE EASIER MONEY POLICY - By Rich Miller - TOKYO, Oct 20 - Plunging Tokyo stock prices will prevent -the Bank of Japan from raising its discount rate and could even -force it to ease monetary policy if the collapse continues, -government and private economists said. - A rise in interest rates now would only serve to spark -further selling of shares that could ultimately have a major -deflationary impact on the real economy, they said. - Although Bank of Japan officials have consistently -maintained that they had no plans to raise the 2.5 pct discount -rate, many in the markets have thought otherwise. - Fears of a rise in the discount rate were fanned by the -central bank's apparent decision last week to countenance -higher rates on commercial bills, dealers said. - But today's stock market collapse -- prices fell nearly 15 -pct -- means that the Bank of Japan would be hard pressed to -raise the discount rate now, despite its concerns about a -renewed outbreak of inflation, dealers and economists said. - Japanese government bond prices rose sharply today as the -markets concluded that the stock market's collapse precluded -the central bank from carrying out the widely-rumoured discount -rate increase. - A senior government economist suggested that both the U.S. -And Japan needed to ease monetary policy now to prevent a -further drop in New York and Tokyo stock prices. "They need to -support the stock and security markets," he said. - But Bank of Japan officials said they saw no need to change -policy for the moment, although one admitted that the central -bank may have to rethink its strategy if Tokyo stock prices -continue to plunge during the rest of the week. - Both government and Bank of Japan economists agreed the -economy is better placed now to cope with the deflationary -impact of plunging stock prices than it was a few months ago. - With the economy recovering strongly, the steep drop in -stock prices is not likely to put a major dent in consumer and -business confidence, one government economist said. - "There will be some impact on the real economy, but it won't -be that big," said another. - Individuals are not heavily invested in stocks on their -own, although they do participate through trust funds and other -investment vehicles. And while many manufacturing firms turned -to financial market investments for profits during last year's -economic downturn, the recent rebound has allowed them to -refocus their attention on their core businesses, he said. - Paradoxically, it is the pick-up in the economy that is -partly to blame for the stock market collapse as companies have -shifted funds away from financial investments to increase -inventories and step up capital spending, one government -economist said. - In deciding what response to make to the steep stock price -drop, the Bank of Japan must first determine whether prices -will continue to fall further and then decide if they pose a -greater economic danger than the threat of higher inflation, -one central bank official said. "That will at least take a -couple of days, if not weeks," he said. - REUTER - - - -20-OCT-1987 05:34:04.54 - - - - -mise - - -F -f0363reute -f f BC-CORRECTED-Milan-Bours 10-20 0014 - -******CORRECTED-Milan Bourse opening delayed an hour to 1000 GMT (NOT 1200 GMT)-official -Blah blah blah. - - - - - -20-OCT-1987 05:43:10.09 - -philippines -aquino - - - - -RM AI -f0379reute -u f BC-AQUINO-SAYS-GROWTH-HA 10-20 0098 - -AQUINO SAYS GROWTH HAS PRIORITY OVER DEBT PAYMENTS - MANILA, Oct 20 - President Corazon Aquino said economic -growth took priority over debt repayments but she sought to -dispel fears that the Philippines would not honour a July -agreement rescheduling 13.2 billion dlrs of debt. - In a speech to 13 major business groups, Aquino said, "Our -policy has been very clear fm the start -- growth must take -priority, for the plain and simple reason that if we have no -money to pay, we can't. And if we starve the nation of -essential services, there may be no one around to honour the -debt." - Aquino said her officials would try to get all 483 creditor -banks to sign the debt rescheduling pact by the November 15 -effective date. - "That should end speculation and remove at least one excuse -for hoarding dollars," Aquino said. - Violent fluctuations in the peso's exchange rate and the -end of a 17-month bull run in local stock markets have -triggered dollar-hoarding. - Aquino said the country's foreign debt, which rose to -nearly 29 billion dlrs in April, was growing even without fresh -borrowing. - Debt servicing took up 40 pct of the budget and 45 pct of -export earnings, Aquino said. Over the next six years, the -Philippines would be paying its creditors 20 billion dlrs while -getting only four billion dlrs in new loans. - Aquino acknowledged there were grave doubts about her -government's ambitious privatisation program. - "There is always an excuse for government not to sell," she -said, but she added: "I want government to get out of business." -She said non-performing assets would be sold in open bidding -and Filipinos and foreigners would compete on equal terms. - REUTER - - - -20-OCT-1987 05:43:53.22 - -ukusa - - - - - -RM -f0380reute -b f BC-E.F.-HUTTON-DENIES-RU 10-20 0113 - -E.F. HUTTON DENIES RUMOURED SOLVENCY PROBLEMS - LONDON, Oct 20 - Brokerage firm E.F. Hutton Group Inc <EFH> -is not facing liquidity problems as a result of the fall on -Wall Street, nor is the firm on the brink of insolvency, London -joint managing director Harry Romney said. - He was replying to Reuter questions about market rumours -that Hutton could be in financial difficulties. - Romney noted the New York-based firm employs 16,000 to -17,000 people worldwide. Questioned on whether Hutton might be -considering cutbacks in line with some other big U.S. -Securities houses, he said Hutton's operations were under -contuous review, but no announcements were imminent. - REUTER - - - -20-OCT-1987 05:46:18.76 -grainrice -philippines - - - - - -G -f0386reute -u f BC-RICE-RESEARCH-INSTITU 10-20 0100 - -RICE RESEARCH INSTITUTE NAMES NEW HEAD - MANILA, Oct 20 - The Manila-based International Rice -Research Institute (IRRI) said West German agricultural -scientist Klaus Lampe will take over as its director-general in -early 1988, succeeding M.S. Swaminathan. - An IRRI statement said Lampe, 56, is currently senior -adviser to the German Agency for Technical Cooperation at -Eschborn and was a former head of the agriculture section of -the Federal Ministry for Economic Cooperation. - It said Swaminathan, who has headed IRRI since 1982, will -concentrate on environmental and agricultural issues. - REUTER - - - -20-OCT-1987 05:46:54.39 - - - - -mise - - -F -f0392reute -b f BC-CONSOB-DELAYS-MILAN-B 10-20 0089 - -CONSOB DELAYS MILAN BOURSE OPENING ONE HOUR - MILAN, Oct 20 - The opening of the Milan bourse and Italy's -nine other stock exchanges has been delayed one hour to 1000 -GMT by stock market regulatory agency Consob. - A Consob spokesman told Reuters the action was taken "to -give operators time to reflect on the agreement between -Treasury Secretary James Baker and West German officials on the -Louvre accord." He did not elaborate. - The Milan Stock Index (MIB), base January 2 equals 1000, -closed down 6.26 pct yesterday. - REUTER - - - -20-OCT-1987 06:07:59.83 - -uk - - -lse - - -RM V -f0436reute -b f BC-STOCK-EXCHAGE-SAYS-NO 10-20 0093 - -STOCK EXCHAGE SAYS NO QUESTION OF HALTING TRADING - LONDON, Oct 20 - A spokeswoman for the London Stock -Exchange said there was no question of trading being suspended -because of the unprecedented three-day drop in prices, which -has seen almost 23 pct wiped off share values. - Trading on the Hong Kong market has been called off until -Monday because of the steep slide on Wall Street amid panic -selling on all the world's stock exchanges. - The Tokyo market was 14.9 pct off last night after a huge -508 point (22.5 pct) fall on Wall Street yesterday. - The Stock Exchange said although the Stock Exchange -Automated Quotation (SEAQ) system was working perfectly, "fast -market" conditions may pevail periodically. - A "fast market" indicator is displayed at the bottom of the -SEAQ screen when the huge volume of activity is delaying prices -from entering the system, making screen prices lag behind the -prevailing market. - Such conditions are reviewed every 30 minutes and at 1000 -GMT were withdrawn and all on screen prices became firm. - The Exchange said the mandatory quote period will still end -at 1600 GMT but depending upon trading activity the market -indices may again be calculated up to 1630 GMT instead of the -usual 1600 GMT. - At 0945 GMT the FTSE 100 share index was down 259.1 points -at 1,793.2, 12.6 pct lower so far today. - REUTER - - - -20-OCT-1987 06:12:19.69 -alum - - - - - - -C M -f0446reute -f f BC-Sept-daily-ave-primar 10-20 0013 - -****** Sept daily ave primary aluminium output 34,900 tonnes, up 400 tonnes, IPAI. -Blah blah blah. - - - - - -20-OCT-1987 06:14:40.08 - - - - - - - -F -f0447reute -f f BC-Blue-Arrow-says-Conse 10-20 0012 - -******Blue Arrow says Conservative Party Chairman Norman Tebbit to join board -Blah blah blah. - - - - - -20-OCT-1987 06:18:31.24 - -south-korea - - - - - -RM -f0462reute -u f BC-SAMSUNG-BOND-GOES-CON 10-20 0118 - -SAMSUNG BOND GOES CONVERTIBLE BUT NO SHARE DEMAND - SEOUL, Oct 20 - The first convertible bond issued by a -South Korean firm overseas -- by Samsung Electronics Co Ltd -<SAMS.SE> -- became eligible for conversion but there was no -demand for shares as the government still bans direct share -ownership by foreigners, a Samsung official said. - "There was no demand from holders, so the lead managers made -no approach to us to issue shares," the official said. - The five pct bond, co-lead managed by S.G. Warburg and -Goldman Sachs Co, raised 20 mln dlrs when issued in 1985. The -only other Korean convertible bonds were issued by Daewoo Heavy -Industries Ltd <DAEW.SE> and <Yukong Ltd>, both in 1986. - REUTER - - - -20-OCT-1987 06:20:40.59 -alum -ukbrazilcuba - - - - - -M -f0470reute -r f BC-GROUNDED-BRITISH-BAUX 10-20 0060 - -GROUNDED BRITISH BAUXITE VESSEL REFLOATED IN ORINOCO - LONDON, Oct 20 - The British bulk carrier Envoy, which ran -aground in the Orinoco river on October 16, was refloated -without lightening on October 19, Lloyds Shipping Intelligence -service said. - The Envoy, 75,453 tonnes dw, was carrying a cargo of 50,000 -tonnes of bauxite from Brazil to Cuba. - REUTER - - - -20-OCT-1987 06:21:43.60 - - - - -zse - - -F -f0472reute -f f BC-Swiss-Stock-Index-fal 10-20 0013 - -******Swiss Stock Index falls 3.7 pct or 38.4 points at opening to 989.5 - official -Blah blah blah. - - - - - -20-OCT-1987 06:27:57.36 - -austriausaussrjapan - -ec - - - -Y -f0483reute -u f BC-EAST,-WEST-APPROVE-NU 10-20 0118 - -EAST, WEST APPROVE NUCLEAR FUSION ENERGY PROJECT - VIENNA, Oct 20 - East and West on Monday decided to go -ahead with an ambitious nuclear fusion project billed as -possibly providing an inexhaustible source of energy, the -International Atomic Energy Agency (IAEA) said. - Representatives of the U.S., The Soviet Union, the European -Community and Japan agreed to develop plans for a revolutionary -thermonuclear reactor, to produce energy not from splitting -atoms as in today's nuclear plants, but by joining them. - Work is due to begin next year at the Institute for Plasma -Physics at the Max Planck Foundation near Munich, West Germany, -and is scheduled for completion by 1990, an IAEA statement -said. - Research into fusion's scientific feasibility has been -under way for many years but the project approved on Monday, -known as International Thremonuclear Experimental Reactor -(ITER) will study if an actual plant could be built. - The project represents an unprecedented display of -East-West scientific cooperation, but a decision will not be -made until its completion on whether an actual reactor would be -jointly constructed or by individual participant countries. - Dieter Sigmar, a leading U.S. Fusion researcher, said last -month that the development of a demonstration plant would cost -several billion dlrs and need at least another 10 years. - Fusion plants would produce little radioactive waste. - While today's nuclear power plants need uranium, mined in -only a few countries and producing dangerous waste, fusion -plants would eventually run only on deuterium, an element -related to hydrogen and available from almost limitless -supplies of sea water, according to experts. - REUTER - - - -20-OCT-1987 06:28:03.88 - -japan -takeshita - - - - -RM -f0484reute -u f BC-TAKESHITA-FACES-TOUGH 10-20 0098 - -TAKESHITA FACES TOUGH ECONOMIC MANAGEMENT JOB - By Tsukasa Maekawa - TOKYO, Oct 20 - Former Finance Minister Noboru Takeshita, -chosen on Monday to be Japan's next prime minister, will face a -tough test in managing Japan's economy from the very start of -his two-year term, economists and businessmen said. - Takeshita told a news conference on Tuesday that he would -do his best to continue the domestic reforms and external -policies of Prime Minister Yasuhiro Nakasone. - However, leading Japanese businessmen called on Takeshita -to outdo Nakasone by showing stronger leadership. - "Takeshita should not merely follow the Nakasone policies -but should cope with mounting economic issues with a new vision -and policies," Takashi Ishihara, chairman of the Japan Committee -for Economic Development, said in a statement. - Economists generally agreed that there will be no major -changes in Japan's economic policies under a new leader. - However, expectations are high among major industries for -new initiatives by Takeshita for immediate and effective -measures to solve economic problems such as trade friction with -the U.S., Administrative and tax reforms, and soaring land -prices. - Eishiro Saito, chairman of the Federation of Economic -Organisations (Keidanren), urged Takeshita to succeed in -unifying the ruling Liberal Democratic Party as soon as -possible to tackle difficult tasks. - Regarding foreign economic polices, Yoshitoki Chino, -chairman of the Japan Securities Dealers Association, said -Takeshita should come up with economic measures well before -economic issues develop into problems. - Behind those calls on Takeshita for prompt action are -doubts about his capability in handling international issues -due to his lack of experience in diplomacy, economists said. - Economists said foreign countries should be patient with -Takeshita, who is widely known as an ultra-cautious politician. - Takeshita has repeatedly said, "There should be consensus -before taking action." - Takeshita has so far failed to unveil specific measures to -reduce Japan's huge trade surplus, economists said. - He has said Japan will continue to stimulate the economy -and to open the market wider to foreign products. - REUTER - - - - diff -Nru clucene-core-0.9.21b/test/data/reuters-21578/reut2-021.sgm clucene-core-2.3.3.4/test/data/reuters-21578/reut2-021.sgm --- clucene-core-0.9.21b/test/data/reuters-21578/reut2-021.sgm 2008-10-23 17:44:34.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578/reut2-021.sgm 1970-01-01 00:00:00.000000000 +0000 @@ -1,2002 +0,0 @@ - - -19-OCT-1987 15:37:46.03 - - - - - - - -F -f2882reute -f f BC-CITYFED-FINANCI 10-19 0013 - -******CITYFED FINANCIAL CORP SAYS IT CUT QTRLY DIVIDEND TO ONE CENT FROM 10 CTS/SHR -Blah blah blah. - - - - - -19-OCT-1987 15:35:53.55 -crudeship -bahrainiranusa - - - - - -Y -f2873reute -r f AM-GULF-PLATFORM 10-19 0101 - -HUGE OIL PLATFORMS DOT GULF LIKE BEACONS - By ASHRAF FOUAD - BAHRAIN, Oct 19 - Huge oil platforms dot the Gulf like -beacons -- usually lit up like Christmas trees at night. - One of them, sitting astride the Rostam offshore oilfield, -was all but blown out of the water by U.S. Warships on Monday. - The Iranian platform, an unsightly mass of steel and -concrete, was a three-tier structure rising 200 feet (60 -metres) above the warm waters of the Gulf until four U.S. -Destroyers pumped some 1,000 shells into it. - The U.S. Defense Department said just 10 pct of one section -of the structure remained. - U.S. helicopters destroyed three Iranian gunboats after an -American helicopter came under fire earlier this month and U.S. -forces attacked, seized, and sank an Iranian ship they said had -been caught laying mines. - But Iran was not deterred, according to U.S. defense -officials, who said Iranian forces used Chinese-made Silkworm -missiles to hit a U.S.-owned Liberian-flagged ship on Thursday -and the Sea Isle City on Friday. - Both ships were hit in the territorial waters of Kuwait, a -key backer of Iraq in its war with Iran. - Henry Schuler, a former U.S. diplomat in the Middle East -now with CSIS said Washington had agreed to escort Kuwaiti -tankers in order to deter Iranian attacks on shipping. - But he said the deterrence policy had failed and the level -of violence and threats to shipping had increased as a result -of U.S. intervention and Iran's response. - The attack on the oil platform was the latest example of a -U.S. "tit-for-tat" policy that gave Iran the initiative, said -Harlan Ullman, an ex-career naval officer now with CSIS. - He said with this appraoch America would suffer "the death -of one thousand cuts." - But for the United States to grab the initiative -militarily, it must take warlike steps such as mining Iran's -harbors or blockading the mouth of the Gulf through which its -shipping must pass, Schuler said. - He was among those advocating mining as a means of bringing -Iran to the neogtiating table. If vital supplies were cut off, -Tehran could not continue the war with Iraq. - Ullman said Washington should join Moscow in a diplomatic -initiative to end the war and the superpowers should impose an -arms embargo against Tehran if it refused to negotiate. - He said the United States should also threaten to mine and -blockade Iran if it continued fighting and must press Iraq to -acknowledge responsibility for starting the war as part of a -settlement. - Iranian and Western diplomats say Iraq started the war by -invading Iran's territory in 1980. Iraq blames Iran for the -outbreak of hostilities, which have entailed World War I-style -infantry attacks resulting in horrific casualties. - Each side has attacked the others' shipping. - Reuter - - - -19-OCT-1987 15:34:40.05 -acq - - - - - - -F -f2863reute -b f BC-CCR-VIDEO-SAYS 10-19 0015 - -******CCR VIDEO SAYST RECEIVED OFFER TO NEGOTIATE A TAKEOVER BY INTERCEP INVESTMENT CORP -Blah blah blah. - - - - - -19-OCT-1987 15:32:25.38 - -canada - - - - - -E F -f2855reute -b f BC-GM-<GM>-CANADA-UNIT-M 10-19 0096 - -GM <GM> CANADA UNIT MAJOR OFFER ACCEPTED BY UNION - TORONTO, Oct 19 - The Canadian Auto Workers' Union said it -accepted an economic offer from the Canadian division of -General Motors Corp <GM> in contract negotiations. - But union president Bob White said many local issues at the -11 plants in Ontario and Quebec still remained unresolved ahead -of Thursday's deadline for a strike by 40,000 workers. - "It minimizes the possibility of a strike," White told -reporters. - However, "if we don't have local agreements settled by -Thursday, there will be a strike," he said. - The local issues still unresolved involved health care, -skilled trades and job classifications, White said. - GM Canada negotiator Rick Curd said he believed a strike -would be avoided. - "Even though there are some tough issues to be resolved -we're on the right schedule to meet the target," Curd said. - "I'm very pleased with the state of the negotiations," he -said. - Union membership meetings have been scheduled for the -weekend in case a tentative settlement, said White. - White said the union has also received assurances that a -job protection pact negotiated with GM workers in the U.S. does -not threaten Canadian jobs. - The economic offer for a three-year pact largely matches -agreements at Ford <F> and Chrysler <C> in Canada, which -include inflation-indexed payments for future retirees and -fixed annual payments for current retirees. - It also gives workers wage increases of three pct -immediately and 1.5 pct in each of the second and third years. - Reuter - - - -19-OCT-1987 15:32:11.59 - -canada - - - - - -E F -f2854reute -u f BC-CANADA-DEVELOPMENT-UN 10-19 0092 - -CANADA DEVELOPMENT UNIT <CDC.TO> REFINANCES - SARNIA, Ontario, Oct 19 - Canada Development Corp said its -<Polysar Ltd> unit completed a refinancing package worth about -830 mln Canadian dlrs. - The company said the financing, which involves 24 banks -and four syndicated loans, consists of a 380 mln Canadian dlr -revolver, a 200 mln Canadian dlr European medium term loan, a -149 mln Canadian dlr revolver and a 100 mln Canadian dlr -operating loan. - The company said the refinancing will reduce borrowing -costs, in addition to having other benefits. - Reuter - - - -19-OCT-1987 15:31:35.28 -crudeship -bahrainusairan - - - - - -C -f2849reute -u f BC-/DIPLOMATS-CALL-U.S. 10-19 0110 - -DIPLOMATS CALL U.S. ATTACK ON OIL RIG RESTRAINED - By Ian MacKenzie - BAHRAIN, Oct 19 - A U.S. attack on an Iranian oil platform -in the Gulf on Monday appeared to be a tit-for-tat raid -carefully orchestrated not to be too provocative or upset Arab -allies, Western diplomats in the region said. - U.S. Defence Secretary Caspar Weinberger said Monday that -U.S. Warships destroyed the oil platform in the southern Gulf -in response to a missile strike on the American-registered -Kuwaiti tanker Sea Isle City in Kuwaiti waters on Friday. - "We consider the matter closed," he said, a signal the U.S. -administration did not want the Gulf crisis to escalate. - Iran had warned the United States earlier in the day -against exacerbating the Gulf crisis, saying military action -would endanger American interests. - Following the raid, a okesman for Tehran's War -Information Headquarters vowed to avenge the attack with a -"crushing blow." - "The United States has entered a swamp from which it can in -no way get out safely," Tehran Radio quoted him as saying. - Diplomats noted, however, Iran was also seeking to avoid -ostracism by Arab states due to meet at a summit in Amman on -November 8 and discuss the Iran-Iraq war. - Iranian Prime Minister Mir-Hossein Mousavi is currently in -Damascus, and diplomats said he would seek Syrian help in -preventing a total Arab breach with Tehran. - Further escalation of the war threatening the Gulf Arab -states could work against Tehran at the Amman gathering, they -said. - "The ball is in Iran's court now. It's up to Tehran to -respond one way or the other," a diplomat said. - President Ronald Reagan warned Iran of stronger American -countermeasures if the military escalation continued. - Western diplomats and military sources in the area said -shelling the platform appeared to be the least provocative act -the United States could have taken once it had decided to -retaliate for the tanker attack, blamed by both the Americans -and Kuwaitis on Iran. - "It's interesting that they chose something in international -waters because it doesn't implicate any other nation," one -diplomat said. "This was better for U.S. Relations with the Gulf -Arab states, particularly Kuwait." - Commented another diplomat: "Kuwait must be happy that the -U.S. Has done something, but relieved that Faw was not attacked -on its doorstep." - One source said of the attack on the oil platform: "They -managed to warn off the crew and hit something that was the -least nuisance to everybody." - A diplomat commented: "They were very clever in the place -they chose. It gets attention, but it hasn't devastated -anything because it wasn't working in the first place." - A senior Arab banker in the area said after the news broke: -"This was a good, measured response without risking a flare-up -... It is a face-saving response (for the Americans)." - Reuter - - - -19-OCT-1987 15:30:22.56 -acq -usafrance - - - - - -F -f2842reute -r f BC-BROWN-DISC-TO-BUY-RHO 10-19 0076 - -BROWN DISC TO BUY RHONE-POULENC <RHON.PA> UNIT - COLORADO SPRINGS, Colo., Oct 19 - Brown Disc Products Co -Inc, a unit fo Genevar Enterprises Inc, said it has purchased -the ongoing business, trademarks and certain assets of -Rhone-Poulenc's Brown Disc Manufacturing unit, for undisclosed -terms. - Rhone-Poulenc is a French-based chemical company. - Under the agreement, Rhone-Poulenc will supply magnetic -tape and media products to Brown Disc Products. - Reuter - - - -19-OCT-1987 15:28:27.68 - - - - - - - -V RM -f2834reute -f f BC-DOW-SINKS-TO-LO 10-19 0011 - -******DOW SINKS TO LOWEST LEVEL OF THE YEAR, DOWN 370 POINTS TO 1876 -Blah blah blah. - - - - - -19-OCT-1987 15:27:23.12 - -usa - - - - - -F -f2832reute -h f BC-LANE-TELECOMMUNICATIO 10-19 0080 - -LANE TELECOMMUNICATIONS PRESIDENT RESIGNS - HOUSTON, Oct 19 - Lane Telecommunications Inc <LNTL.O> said -Richard Lane, its president and chief operating officer, -resigned effective Oct 23. - Lane founded the company in 1976 and has been its president -since its inception, the company said. - He said he resigned to pursue other business interests. - Kirk Weaver, chairman and chief executive officer, said -Lane's resignation was amicable. - No replacement has been named. - Reuter - - - -19-OCT-1987 15:24:34.02 - -usa - - - - - -F -f2824reute -d f BC-PERKIN-ELMER-<PKN>-WI 10-19 0072 - -PERKIN-ELMER <PKN> WINS EPA CONTRACT - NORWALK, Conn., Oct 19 - Perkin-Elmer Corp said it won a -contract to provide laboratory information management systems -to the Enviromental Protection Agency's 10 regional -laboratories. - The value and the exact duration of the contract was not -disclosed. - The company said the contract will include hardware, -software, installation, support services, and software analyst -consultations. - Reuter - - - -19-OCT-1987 15:23:44.84 - -usa - - - - - -F -f2822reute -s f BC-WHIRLPOOL-CORP-<WHR> 10-19 0026 - -WHIRLPOOL CORP <WHR> REG QTLY DIV - BENTON HARBOR, MICH., Oct 19 - - Qtly div 27-1/2 cts vs 27-1/2 cts prior - Pay December 31 - Record December Four - Reuter - - - -19-OCT-1987 15:23:41.70 -earn -usa - - - - - -F -f2821reute -d f BC-CONSOLIDATED-FREIGHTW 10-19 0045 - -CONSOLIDATED FREIGHTWAYS INC <CNF> 3RD QTR NET - PALO ALTO, Calif., Oct 19 - - Shr 43 cts vs 63 cts - Net 16,362,000 vs 24,325,000 - Revs 589.3 mln vs 549.1 mln - Nine Mths - Shr 1.40 dlrs vs 1.73 dlrs - Net 54,011,000 66,591,000 - Revs 1.68 1.58 billion - Reuter - - - -19-OCT-1987 15:23:36.33 -crudeship -usairaniraqkuwait - - - - - -Y RM -f2820reute -u f AM-GULF-FUTURE 10-19 0081 - -LATEST ATTACK SEEN POINTING UP DILEMMAS FOR US - By CHRISTOPHER HANSON - WASHINGTON, Oct 19 - Military experts say the United States -faces a dilemma in the Gulf following U.S. destruction of an -Iranian oil platform in retaliation for an attack on a -U.S.-flagged tanker. - The experts told Reuters Tehran holds the initiative and is -likely to control the tempo and direction of the conflict as -long as America simply reacts to Iranian attacks by launching -limited retaliatory strikes. - But if Washington seizes the initiative with bolder steps --- such as mining Iran's harbors, blockading its shipping, or -destroying key bases -- it could find itself in a major war. - "Iran is in the driver's seat in an absolute sense as the -cycle of attack and retaliation continues," said Fred Axelgard, -a Gulf War expert with the private Center for Strategic and -International Studies (CSIS). - "It's like a Greek tragedy," said retired Adm. Eugene Carroll -of Washington's private Center for Defense Information (CDI) -think tank. - Some Middle East experts say the only way out is for -Washington to join forces with Moscow in pressing for an end to -the war between Iran and Iraq. - They say it is not feasible for America to withdraw its -30-ship force from the Gulf area, where the Navy began -escorting U.S.-flagged Kuwaiti tankers in July. Withdrawal -would give the appearance of being chased away by Iran, which -President Reagan could never accept. - U.S. Defense Secretary Caspar Weinberger told a Pentagon -news conference the destroyers Kidd, Young, Leftwich and Hoel -fired about 1,000 rounds of five-inch shells at Iran's Rostam -oil rig 120 miles east of Bahrain beginning at about 1400 Gulf -time (0700 EDT) on Monday. - Weinberger said the platform had been used as a military -base by Iran and that the attack responded to an Iranian -Silkworm missile strike on the U.S.-flagged Kuwaiti tanker Sea -Isle City on Friday. - Iranians manning the platform were warned in advance and -allowed to escape. - "We do not seek further confrontation with Iran, but we will -be prepared to meet any escalation of military action by Iran -with stronger countermeasures," Weinberger said. - "We consider this matter closed," he said. - Analysts ranging from the liberal CDI to conservatives -agreed the U.S. reaction was measured, reasonable and did not -escalate the conflict unduly. But they said the question was -whether Iran would consider the matter closed. It had not taken -this view after earlier clashes. - Reuter - - - -19-OCT-1987 15:23:02.47 -earn -usa - - - - - -F -f2817reute -d f BC-ROCHESTER-TELEPHONE-C 10-19 0044 - -ROCHESTER TELEPHONE CORP <RTC> 3RD QTR NET - ROCHESTER, N.Y., Oct 19 - - Shr 96 cts vs 87 cts - Net 10.8 mln vs 9,671,000 - Revs 103.9 mln vs 97.5 mln - Nine mths - Shr 2.73 dlrs vs 2.62 dlrs - Net 30.7 mln vs 29.3 mln - Revs 325.7 mln vs 302.8 mln - Reuter - - - -19-OCT-1987 15:21:54.33 - -usa - - - - - -F -f2815reute -h f BC-NATIONAL-CITY-<NCTY.O 10-19 0106 - -NATIONAL CITY <NCTY.O> UNIT BEGINS NEW SERVICE - CLEVELAND, Oct 19 - National City Corp's National City Bank -unit said it has begun a personal computer-based financial -management service for small businesses. - The service, the InTouch Financial Manager, is based on a -personal computer system develoed by <Harbinger Comput -Services> of Atlanta, and is licensed in Ohio by <Money Station -Inc>, an electronic funds transfer network. - National City said the service will allow businesses to use -a personal computer and a local telephone call to communicate -with their bank to initiate transactions and to receive data -anmessages. - Reuter - - - -19-OCT-1987 15:20:42.71 -earn -usa - - - - - -F -f2813reute -r f BC-SOUTH-CAROLINA-NATION 10-19 0054 - -SOUTH CAROLINA NATIONAL CORP <SCNC.O> 3RD QTR - COLUMBIA, S.C., Oct 19 - - Shr 64 cts vs 55 cts - Net 14.0 mln vs 11.8 mln - Nine mths - Shr 1.83 dlrs vs 1.53 dlrs - Net 39.7 mln vs 32.7 mln - Assets 4.65 billion vs 4.53 billion - Loans 3.24 billion vs 2.92 billion - Deposits 3.32 billion vs 3.15 billion - Reuter - - - -19-OCT-1987 15:19:34.63 -earn -usa - - - - - -F -f2809reute -u f BC-MARINE-CORP-<MCOR.O> 10-19 0056 - -MARINE CORP <MCOR.O> 3RD QTR NET - SPRINGFIELD, Ill., Oct 19 - - Shr 30 cts vs 30 cts - Net 1,804,000 vs 1,800,000 - Nine mths - Shr 89 cts vs 79 cts - Net 5,334,00 vs 4,496,000 - NOTE: Earnings per share reflect initial public offering of -534,750 common shares in March 1986 and 2-for-1 stock splits in -January and June 1986. - Reuter - - - -19-OCT-1987 15:18:52.46 -crude -uknorway - - - - - -F Y -f2807reute -r f BC-STATOIL-AWARDS-VESLEF 10-19 0110 - -STATOIL AWARDS VESLEFRIKK OIL FIELD CONTRACTS - LONDON, Oct 19 - Norwegian state oil company Den Norske -Stats Oljeselskap (Statoil) signed contracts worth a total of -1.5 billion Norwegian crowns in connection with the development -of the Veslefrikk oil field, Statoil said. - Moss Rosenberg Verft of Stavanger has been awarded a -contract to convert the the drilling platform West Vision to a -floating production platform. The work is to be completed in -the summer of 1989. - Aker Verdal has been awarded a contract for the -engineering, purchasing and construction of the steel jacket -for the wellhead platform, also to be completed in 1989, -Statoil said. - Reuter - - - -19-OCT-1987 15:17:20.73 -acq -uk - - - - - -F Y -f2798reute -h f BC-U.K.-TREASURY-CONFIRM 10-19 0106 - -U.K. TREASURY CONFIRMS BP SALE TO GO AHEAD - LONDON, Oct 19 - The British Treasury confirmed that the -sale of British Petroleum Co Plc will go ahead as planned, -despite Monday's stock market crash which forced BP below the -330p a share set for the 7.2 billion stg issue. - "The government are not considering terminating the BP -offer. The offer has been fully underwritten," a Treasury -spokesman said. - The issue, which remains open until October 28, was fully -underwritten last week when the issue price was set. - BP shares closed down 33p at 317p as the FT-SE 100 share -index crashed a record 249.6 points, more than 10 pct. - Reuter - - - -19-OCT-1987 15:14:42.04 - -ugandaegypt - - - - - -RM -f2787reute -r f AM-UGANDA-EGYPT 10-19 0108 - -EGYPT TO BUILD HOUSING ESTATES AND ROADS FOR UGANDA - KAMPALA, Oct 19 - Egypt has agreed to build two housing -estates and two new roads in Uganda worth a total of 295 -million dollars, Egyptian commercial attache Muhammud el Tahan -said. - He said Egyptian companies will build 8,000 housing units -in Kampala and reconstruct the roads between Fort Portal and -Bundibugyo near the Zaire border in western Uganda and between -Kapchorwa and Swam near Mount Elgon in the east of the country. -Uganda would repay 70 per cent of the Egyptian Government -credit to finance the projects in the form of barter goods and -30 per cent in hard currency, Tahan said. - Reuter - - - -19-OCT-1987 15:12:27.51 - - - - - - - -E F -f2781reute -f f BC-UNION-ACCEPTS-G 10-19 0013 - -******UNION ACCEPTS GM CANADA'S ECONOMIC OFFER - MANY LOCAL ISSUES UNRESOLVED -Blah blah blah. - - - - - -19-OCT-1987 15:10:34.40 -earn -usa - - - - - -F -f2773reute -d f BC-HARMAN-INTERNATIONAL 10-19 0044 - -HARMAN INTERNATIONAL <HIII.O> 1ST QTR SEPT 30 - WASHINGTON, Oct 19 - - Shr 30 cts vs 26 cts - Net 2,534,000 vs 1,695,000 - Revs 98.8 mln vs 67.1 mln - Avg shrs 8,447,000 vs 6,563,000 - NOTE: full name of company is harman international -industries inc. - Reuter - - - -19-OCT-1987 15:10:11.16 -money-fx -west-germany - - - - - -RM A -f2771reute -u f BC-GERMAN-BANKER-CALLS-F 10-19 0107 - -GERMAN BANKER CALLS FOR SPECIAL MONETARY MEETING - BONN, Oct 19 - Finance ministers from major industrial -nations should hold a special meeting to deal with the U.S. -Dollar's sharp decline, Helmut Geiger, president of the West -German savings bank association, said. - Geiger told Reuters: "Finance ministers should meet soon to -take confidence-building measures to limit the damage caused by -the dollar's fall." - Separately, Geiger told Bild newspaper in an interview -released ahead of publication on Tuesday that the lower dollar, -which had been artificially talked down by U.S. officials, -would damage West German exports and cost jobs. - Reuter - - - -19-OCT-1987 15:07:16.28 - -usa - - - - - -F A RM -f2754reute -r f BC-FIRST-BOSTON-<FBC>-ST 10-19 0092 - -FIRST BOSTON <FBC> STRATEGIC REVIEW IS UNDERWAY - NEW YORK, Oct 19 - First Boston Inc said it is conducting a -strategic review of its operations as part of a general policy -to periodically evaluate its business plans. - The company said it is too early to predict the outcome of -the review, although it does not expect radical changes in its -organization. - Salomon Inc <SB> last week completed a strategic review -that resulted in substantial layoffs. - Other brokerage firms are either engaged in reviews or have -made major personnel cutbacks. - Reuter - - - -19-OCT-1987 15:07:01.53 - - - - -nyse - - -V RM -f2752reute -f f BC-NYSE-TRADES-MOR 10-19 0010 - -******NYSE TRADES MORE THAN 500 MLN SHARES IN RECORD VOLUME -Blah blah blah. - - - - - -19-OCT-1987 15:06:04.62 - -usa - - - - - -F -f2750reute -s f BC-FEDERAL-SIGNAL-CORP-< 10-19 0025 - -FEDERAL SIGNAL CORP <FSS> REG QTLY DIV - OAK BROOK, ILL., Oct 19 - - Qtly div 20 cts vs 20 cts prior - Pay January Seven - Record December 17 - Reuter - - - -19-OCT-1987 15:06:01.13 - -usa - - - - - -F -f2749reute -d f BC-ENTERTAINMENT-MARKETI 10-19 0061 - -ENTERTAINMENT MARKETING <EM> HEAD TO BUY SHARES - HOUSTON, Oct 19 - Elias Zinn, chairman and chief executive -of Entertainment Marketing Inc, said he planned to personally -purchase up to 500,000 shares of Entertaiment Marketing common -stock from time to time in the open market. - Zinn said his purchases would be subject to availability -and acceptable price levels. - Reuter - - - -19-OCT-1987 15:05:55.95 -earn -usa - - - - - -F -f2748reute -r f BC-THE-BANKING-CENTER-<T 10-19 0053 - -THE BANKING CENTER <TBCX.O> 3RD QTR NET - WATERBURY, Conn., Oct 19 - - Shr 25 cts - Net 3,081,000 vs 2,063,000 - Nine months - Shr 86 cts - Net 10.5 mln vs 6,966,000 - Assets 1.43 billion vs 1.30 billion - Deposits 912.5 mln vs 875.8 mln - NOTE: Company converted to a stock savings bank on Aug 13, -1986. - 1986 results include operations of Realtech Realtors, which -was acquired in 1986. - 1987 results include operations of Burgdorff Realtors, -acquired in December 1986; Cornerstone Mortgage Co, acquired in -July 1987; Centerbank Mortgage Co, acquired in July 1987; and -Center Capital Corp, formed in August 1987. - Reuter - - - -19-OCT-1987 15:05:50.99 - -usa - - - - - -F -f2747reute -r f BC-ROTO-ROOTER-<ROTO.O> 10-19 0072 - -ROTO-ROOTER <ROTO.O> SEES IMPROVED 4TH QTR NET - CINCINNATI, Ohio, Oct 16 - Roto-Rooter Inc said it expects -fourth quarter profits to exceed the 22 cts a share reported -for the final quarter of 1986 and the 23 cts earned in 1987's -third quarter. - It reported the third quarter profit was up pct from the -20 cts a share earned during the quarter in 1986. Nine month -profits were up 23 pct to 64 cts a share from 52 cts last year. - Reuter - - - -19-OCT-1987 15:05:42.30 -acq -usa - - - - - -F -f2745reute -u f BC-CALMAT-<CZM>-SUES-IND 10-19 0082 - -CALMAT <CZM> SUES INDUSTRIAL EQUITY - LOS ANGELES, Oct 19 - CalMat Co said it filed suit in Los -Angeles Superior Court against Industrial Equity (Pacific) Ltd, -against certain of its affiliates and against Ronald Langley, -president of Industrial Equity's North American operations. - The company said its sut charges that Langley -missapropriated material non-public information acquired in his -capacity as a CalMat director and used the information for the -benefit of Industrial Equity. - According to its more recent amendment to its Schedule 13D, -Industrial Equity owned about 19.17 pct of CalMat's stock at -October 14, CalMat said. - It said Industrial has also stated that it intends to -pursue a possible business combination in the near future. - Reuter - - - -19-OCT-1987 15:05:31.45 -trade -usaussr -reaganverity - - - - -F A RM -f2743reute -r f AM-REAGAN-VERITY 10-19 0104 - -REAGAN CALLS FOR VIGILANCE ON CERTAIN EXPORTS - WASHINGTON, Oct 19 - President Reagan said the Commerce -Department should be vigilant in preventing the flow of -strategic technology from reaching the the Soviet Union and -other communist countries. - He was speaking at the swearing in of C. William Verity as -Secretary of the Commerce Department. - Verity said the U.S. should make certain that militarily -sensitive high technology does not wind up in communist -nations. But he also said the U.S. must reduce the list of -products of a nontechnological nature, thereby allowing -manufacturers to increase exports and jobs. - Reuter - - - -19-OCT-1987 15:02:51.54 -earn -usa - - - - - -F -f2726reute -d f BC-WATTS-INDUSTRIES-INC 10-19 0032 - -WATTS INDUSTRIES INC <WATTA.O> 1ST QTR SEPT 27 - ANDOVER, Mass., Oct 19 - - Shr 36 cts vs 27 cts - Net 4,538,000 vs 3,160,000 - Sales 41.8 mln vs 32.8 mln - Avg shrs 12.6 mln vs 11.9 mln - Reuter - - - -19-OCT-1987 15:01:06.27 - -usa - - - - - -F -f2712reute -h f BC-WHIRLPOOL-<WHR>-NAMES 10-19 0070 - -WHIRLPOOL <WHR> NAMES NEW CHAIRMAN - BENTON HARBOR, MICH., Oct 19 - Whirlpool Corp said it named -David Whitwam to the additional position of chairman, effective -December One, replacing Jack Sparks, who retires November 30. - It said Whitwam was elected president and chief executive -officer effective July One. - Sparks will continue to serve on Whirlpool's board of -directors as chairman of the finance committee. - Reuter - - - -19-OCT-1987 14:59:03.82 -earn -usa - - - - - -F -f2706reute -h f BC-MONITERM-CORP-<MTRM.O 10-19 0084 - -MONITERM CORP <MTRM.O> 3RD QTR OPER NET - MINNETONKA, MINN., Oct 19 - - Oper shr profit 13 cts vs nil - Oper net profit 612,806 vs profit 2,363 - Sales 8,317,933 vs 2,823,243 - Nine mths - Oper shr profit 32 cts vs loss four cts - Oper net profit 1,464,338 vs loss 161,315 - Sales 20.3 mln vs 8,241,463 - NOTE: 1987 earnings exclude gains from utilization of tax -loss carryforwards of 321,980 dlrs, or seven cts a share in the -quarter and 772,285 dlrs, or 17 cts a share for the nine months - Reuter - - - -19-OCT-1987 14:57:51.62 - -usa - - - - - -F -f2700reute -h f BC-SEEQ-<SEEQD.O>,-NATIO 10-19 0082 - -SEEQ <SEEQD.O>, NATIONAL SEMI <NSM> IN ACCORD - SANTA CLARA, Calif., Oct 19 - Seeq Technology Corp and -National Semiconductor Corp said they signed a four-year -exclusive technology licensing and manufacturing agreement. - The agreement allows the two companies to share technology -and marketing rights to Seeq's 512-kilobit and one-megabit -semiconductors and for National Semiconductor's 256-Kb FLASH -EEPROMs, the companies said. - Financial terms of the arrangement were not disclosed. - Reuter - - - -19-OCT-1987 14:57:12.59 -earn -usa - - - - - -F -f2697reute -d f BC-ERIE-LACKAWANNA-INC-< 10-19 0047 - -ERIE LACKAWANNA INC <ERIE.O> 3RD QTR NET - CLEVELAND, Oct 19 - - Shr 1.32 dlrs vs 1.59 dlrs - Net 1,217,649 vs 1,471,824 - Total income 1,896,018 vs 2,278,642 - Nine mths - Shr 4.92 dlrs vs 5.38 dlrs - Net 4,553,380 vs 4,979,626 - Total income 6,918,266 vs 8,134,313 - Reuter - - - -19-OCT-1987 14:56:58.45 -earn -usa - - - - - -F -f2696reute -h f BC-QUANTUM-CORP-<QNTM.O> 10-19 0043 - -QUANTUM CORP <QNTM.O> 2ND QTR SEPT 27 NET - MILPITAS, Calif., Oct 19 - - Shr 44 cts vs 30 cts - Net 4,057,000 vs 2,716,000 - Sales 49.5 mln vs 29.6 mln - Six Mths - Shr six cts vs 55 cts - Net 518,000 vs 5,167,000 - Sales 89.7 mln vs 54.9 mln - Reuter - - - -19-OCT-1987 14:56:46.00 -earn -usa - - - - - -F -f2695reute -w f BC-TERMIFLEX-CORP-<TFLX. 10-19 0038 - -TERMIFLEX CORP <TFLX.O> 1ST QTR SEPT 30 NET - MERRIMACK, N.H., Oct 19 - - Shr five cts vs seven cts - Net 64,652 vs 96,157 - Sales 1,205,321 vs 1,499,591 - NOTE: Backlog three mln dlrs vs 2,600,000 as of June 30, -1987. - Reuter - - - -19-OCT-1987 14:56:31.92 -acq -usa - - - - - -F -f2692reute -s f BC-DURAKON-<DRKN.O>-TO-M 10-19 0050 - -DURAKON <DRKN.O> TO MAKE ACQUISITION - LAPEER, Mich., Oct 19 - Durakon Industries Inc said it has -entered into a definitive agreement to acquire DFM Corp, a -maker of bug and gravel protective shields for trucks and cars, -for an undisclosed amount of cash and debentures, retroactive -to September One. - Reuter - - - -19-OCT-1987 14:56:25.95 -acq -usa - - - - - -F -f2691reute -r f BC-CHARTER-CRELLIN 10-19 0089 - -ATLANTIS <AGH> MAY BID FOR CHARTER-CRELLIN<CRTR.O> - WASHINGTON, Oct 19 - Atlantis Group Inc said it bought -100,000 shares of Charter-Crellin Inc common stock, or 6.3 pct -of the total outstanding, and may seek control in a negotiated -transaction. - In a filing with the Securities and Exchange Commission, -Atlantis said it has informally discussed a business -combination with Charter-Crellin management. - But the company said it has not held negotiations with -Charter-Crellin and does not intend to initiate further -discussions. - Pending development of specific proposals, Atlantis said it -will continue to purchase additional Charter-Crellin shares in -private or open market transactions depending on a range of -factors including the market price of the stock. - Atlantis said it bought its Charter-Crellin common stock in -open market transactions between September 22 and October 7 at -14.91 dlrs to 15.62 dlrs a share, or for a total of about 1.51 -mln dlrs. - Reuter - - - -19-OCT-1987 14:56:02.82 -acq -usa - - - - - -F -f2690reute -s f BC-ALLWASTE-<ALWS.O>-TO 10-19 0066 - -ALLWASTE <ALWS.O> TO MAKE ACQUISITION - HOUSTON, Oct 19 - Allwaste Inc said it has agreed in -principle to acquire a privately-held firm that performs -interior cleaning services for tank-trailers for 1,300,000 -common shares. - It said the firm, which it did not name, earned about -1,500,000 dlrs pretax for the first nine mons of 1987. - The company said closing is expected by October 31. - Reuter - - - -19-OCT-1987 14:55:53.51 -earn -usa - - - - - -F -f2689reute -d f BC-TRAVELERS-REAL-ESTATE 10-19 0051 - -TRAVELERS REAL ESTATE <TRAT.O> 3RD QTR NET - BOSTON, Oct 19 - - Shr 18 cts vs 27 cts - Net 444,387 vs 676,593 - Revs 549,437 vs 764,901 - Nine mths - Shr 67 cts vs 81 cts - Net 1,690,670 vs 2,031,937 - Revs 1,986,938 vs 2,302,278 - NOTE: Full name is Travelers Real Estate Investment Trust - Reuter - - - -19-OCT-1987 14:55:34.56 - -usa - - - - - -F -f2687reute -d f BC-SAFEGUARD-<SFGD.O>-TO 10-19 0070 - -SAFEGUARD <SFGD.O> TO BUY BACK MORE SHARES - ANAHEIM, Calif., Oct 19 - Safeguard Health Enterprises Inc -said its board authorized management to step up its stock -repurchase program by doubling the repurchase ceiling to 1.6 -mln shares. - The company also said it has already purchased 691,000 -shares through September 30 under the previous authorization to -buy 800,000 shares, or 10 pct of the stock then outstanding. - Reuter - - - -19-OCT-1987 14:55:26.31 -earn -usa - - - - - -F -f2686reute -u f BC-NEW-YORK-TIMES-CO-<NY 10-19 0042 - -NEW YORK TIMES CO <NYT> 3RD QTR NET - NEW YORK, Oct 19 - - Shr 40 cts vs 33 cts - Net 32.6 mln vs 26.7 mln - Revs 406.5 mln vs 370.1 mln - Nine months - Shr 1.44 dlrs vs 1.20 dls - Net 117.8 mln vs 97.5 mln - Revs 1.2 billion vs 1.1 billion - Reuter - - - -19-OCT-1987 14:55:10.41 -earn -usa - - - - - -F -f2685reute -d f BC-SAFEGUARD-HEALTH-<SFG 10-19 0051 - -SAFEGUARD HEALTH <SFGD.O> 3RD QTR NET - ANAHEIM, Calif., Oct 19 - - Shr 11 cts vs five cts - Net 806,000 vs 384,000 - Revs 18.0 mln vs 15.6 mln - Nine Mths - Shr 28 cts vs 17 cts - Net 2,105,000 vs 1,320,000 - Revs 51.9 mln vs 46.1 mln - Note: Full name Safeguard Health Enterprises Inc. - Reuter - - - -19-OCT-1987 14:55:01.65 -acq -usa - - - - - -F -f2684reute -u f BC-HENLEY-<HENG.O>-ENDS 10-19 0084 - -HENLEY <HENG.O> ENDS TALKS WITH SANTE FE - LA JOLLA, Calif., Oct 19 - Henley Group Inc said it ended -talks with Sante Fe Southern Pacific Corp concerning the -possible acquisition of Sante Fe's Southern Pacific -Transportation Co subsidiary. - The company also said it is reviewing its investment in -Santa Fe Southern Pacific in light of Sante Fe's announcement -that it recieved several bids ranging from 750 mln dlrs to more -than one billion dlrs for its Southern Pafific Transportation -subsidiary. - - Henley said it held discussions with Sante Fe concerning -the acquisition by Henley of Bankers Leasing and Financial Corp -and certain Sante Fe transportation and real estate assets. - Henley said it began talks with Sante Fe after it announced -its restructuring program in August 1987. - As previously disclosed, Henley made necessary filings -under the Hart-Scott-Rodino Antitrust Improvement Acts to -permit Henley to increase its investment in Sante Fe to 24.9 -pct of the outstanding common stock from 5.03 pct. - - Henley said that depending on prevailing conditions, -including price and availability of Sante Fe stock, substantial -developments affecting Sante Fe, other investment and business -opportunities available to Henley, Henley may additional Sante -Fe shares, or sell all or part of its investment in Sante Fe. - Reuter - - - -19-OCT-1987 14:54:15.03 -earn -usa - - - - - -F -f2683reute -d f BC-MERCURY-SAVINGS-AND-L 10-19 0053 - -MERCURY SAVINGS AND LOAN <MSL> 3RD QTR LOSS - HUNTINGTON BEACH, Calif., Oct 19 - - Shr loss 39 cts vs profit 44 cts - Net loss 2,169,000 vs profit 2,417,000 - Nine Mths - Shr profit 56 cts vs profit 1.68 dlrs - Net profit 3,111,000 vs profit 9,317,000 - Note: Full name Mercury Savings and Loan Association -' - Reuter - - - -19-OCT-1987 14:53:33.35 - -usa - - - - - -F -f2679reute -a f BC-CARMIKE-<CMIKA.O>-OPE 10-19 0028 - -CARMIKE <CMIKA.O> OPENS SIX-SCREEN THEATER - COLUMBUS, Ga., Oct 19 - Carmike Cinemas Inc said it has -opened a six-screen theter called Carmike Six in Milledgeville, -Ga. - Reuter - - - -19-OCT-1987 14:53:09.31 -earn -usa - - - - - -F -f2677reute -d f BC-BURNHAM-SERVICE-CORP 10-19 0043 - -BURNHAM SERVICE CORP <BSCO.O> 3RD QTR NET - COLUMBUS, Ga., Oct 19 - - Shr 45 cts vs 36 cts - Net 2,554,000 vs 1,954,000 - Revs 44.4 mln vs 32.5 mln - Nine mths - Shr 1.00 dlrs vs 75 cts - Net 5,461,000 vs 3,756,000 - Revs 109.5 mln vs 89.9 mln - Reuter - - - -19-OCT-1987 14:52:58.11 -acq -usa - - - - - -F -f2676reute -d f BC-TEXAS-AMERICAN-BANCSH 10-19 0087 - -TEXAS AMERICAN BANCSHARES <TXA> TO SELL UNIT - FORT WORTH, Texas, Oct 19 - Texas American Bancshares Inc -said it agreed to sell its Texas American Bank/Levelland unit -to <First American Bancorp Inc> for about 12 mln dlrs in cash. - Texas American said regulatory approval ofthe transaction -is expected in December, and the sale will close shortly -thereafter. - Once the sale is completed, the unit's name will change to -First American Bank of Texas. The unit reported total assets of -196.7 mln dlrs on Juen 30, 1987. - Reuter - - - -19-OCT-1987 14:52:34.06 -acq -usa - - - - - -F -f2675reute -d f BC-SUPERMARKETS-GENERAL 10-19 0113 - -SUPERMARKETS GENERAL <SGL> SELLS 11 DRUG STORES - CARTERET, N.J., Oct 19 - Supermarkets General Corp said it -agreed to sell 11 super drug stores to <F and M Distributors>. - The nine existing and two unopened stores are located in -Maryland, Virginia and upstate New York and are operated under -the Pathmark Super Drug trade name, the company said. - Terms of the transaction were not disclosed. - The nine existing stores generated approximately 34.8 mln -dlrs of Supermarkets General's total sales of 2.9 billion -during the six-month period ended Aug One, 1987. - F and M Distributors operates 42 discount drug stores in -Michigan, Ohio, Illinois, Indiana and Wisconsin. - Reuter - - - -19-OCT-1987 14:51:53.39 - -usa - - - - - -F -f2673reute -r f BC-TRAVELERS-REAL-ESTATE 10-19 0077 - -TRAVELERS REAL ESTATE <TRAT.O> PAYOUT CUT - BOSTON, Oct 19 - Travelers Real Estate Investment Trust - Qtly div 17 cts vs 23 cts in prior qtr - Payable November 25 - Record October 30 - It said the lower dividend reflects the reduction in cash -flow from a mortgage secured by a motel in Covington, La. - The trust said an appraisal is being made of the Covington -property to determine whether an increase in loss reserve will -be required at year end. - - Travelers REIT said its investment adviser, Keystone Realty -Advisers has committed to lend the trust up to 500,000 dlrs for -a term of two years to cover past due payables and capital -improvements on the Covington motel. - Keystone Realty is an affiliate of the Keystone Group, a -Traverlers Corp <TIC> subsidiary. - Reuter - - - -19-OCT-1987 14:51:34.80 -earn -usa - - - - - -F -f2671reute -r f BC-ERC-INTERNATIONAL-INC 10-19 0070 - -ERC INTERNATIONAL INC <ERC> 3RD QTR NET - FAIRFAX, Va., Oct 19 - - Shr 31 cts vs nine cts - Net 1,345,000 vs 368,000 - Revs 31.9 mln vs 26.4 mln - Nine mths - Shr 91 cts vs 40 cts - Net 3,890,000 vs 3,556,000 - Revs 89.3 mln vs 71.7 mln - NOTE: 1986 qtr and nine mths include loss 831,000 dlrs, or -19 cts per share, and loss 1,872,000 dlrs, or 44 cts per share, -respectively, from discontinued operations. - Reuter - - - -19-OCT-1987 14:51:26.65 - -usa - - - - - -F -f2670reute -r f BC-KING-WORLD-<KWP>-SAYS 10-19 0049 - -KING WORLD <KWP> SAYS SHOW EXTENDED - NEW YORK, Oct 19 - King World Productions Inc said its -syndicated television series "The Oprah Winfrey Show" has been -extended through the 1989-90 broadcast season. - It said six of the top 10 markets have renewed the series -through the end of the decade. - Reuter - - - -19-OCT-1987 14:50:41.28 -earn -usa - - - - - -F -f2666reute -u f BC-/PAINEWEBBER-GROUP-IN 10-19 0056 - -PAINEWEBBER GROUP INC <PWG> 3RD QTR NET - NEW YORK, Oct 19 - - Shr 44 cts vs 71 cts - Net 14.8 mln vs 21.1 mln - Revs 628.6 mln vs 605.6 mln - Avg shrs 30,743,000 vs 26,969,000 - Nine mths - Shr 2.01 dlrs vs 1.93 dlrs - Net 65.0 mln vs 57.4 mln - Revs 1.89 billion vs 1.81 billion - Avg shrs 30,782,000 vs 26,619,000 - Reuter - - - -19-OCT-1987 14:49:20.85 - - - - - - - -E RM -f2661reute -f f BC-CANADA-JUNE-BUDGET-DE 10-19 0016 - -*****CANADA JUNE BUDGET DEFICIT 2.66 BILLION DLRS VS YEAR AGO 2.80 BILLION DLRS - OFFICIAL -Blah blah blah. - - - - - -19-OCT-1987 14:47:08.40 - -usa - - - - - -F -f2647reute -d f BC-COUNTRYWIDE-<CCR>-SEE 10-19 0106 - -COUNTRYWIDE <CCR> SEES 3RD QTR NET OF 20 CTS - NEW YORK, Oct 19 - Countrywide Credit Industries Inc said -it expects fiscal third quarter earnings of 20 or 21 cents per -fully diluted share, based on 18 mln shares outstanding. - The company posted net income of 31 cents per fully diluted -share in the previous third quarter ended November 30 last -year, based on 12 mln shares outstanding. - Angelo Mozilo, vice chairman and executive vice president, -also told security analysts that that company should have a -total loan servicing portfolio of 11 billion or 12 billion dlrs -by the end of the current fiscal year, in February 1988. - Countrywide Credit, a financial service company primarily -involved in mortgage banking, reported 4.5 billion dlrs in its -loan servicing portfolio for the last fiscal year. - In addition, Mozilo said the company was continuing to -reduce expenses by one mln dlrs a month and should bring total -costs down by three mln dlrs at the end of the quarter. - He said about 55 pct of the cost cuts were in personnel, -and that the company had reduced the number of its offices -nationwide by 11 in recent months. - Reuter - - - -19-OCT-1987 14:45:58.06 -crude -venezuela - -opec - - - -Y -f2641reute -u f BC-VENEZUELA-SAYS-OPEC-O 10-19 0105 - -VENEZUELA SAYS OPEC OIL OUTPUT 0VER 18 MLN BPD CARACAS, Oct 19 -- The current OPEC oil production is above 18 mln barrels per -day (bpd) and this level threatens the precarious equilibrium -of the of oil market, Venezuelan Energy and Mines Minister -Arturo Hernandez Grisanti said on Monday. - He told reporters three or four countries out of OPEC's 13 -members were mainly responsible for the overproduction, but -declined to identify them. - OPEC's production ceiling for the second half of 1987 is -16.6 mln bpd. The Venezuelan minister said OPEC's production -reached a peak this year when it went over 19 mln bpd in -August. - Hernandez Grisanti, together with the oil ministers of -Nigeria and Indonesia, met the heads of state of six Mideast -Gulf countries earlier this month to urge OPEC members to -comply with assigned production quotas. - He said some of the countries which were complying as -Venezuela, Indonesia, Libya, Algeria, Ecuador, Saudi Arabia and -Iran. - Hernandez declined to say whether the three or four -countries he said were overproducing bordered the Mideast Gulf. - REUTER - - - - - -19-OCT-1987 14:45:13.72 -acq -usa - - - - - -F -f2638reute -b f BC-ATLANTIS-GROUP 10-19 0013 - -****ATLANTIS GROUP TELLS SEC IT SEEKS NEGOTIATED PURCHASE OF CHARTER-CRELLIN -Blah blah blah. - - - - - -19-OCT-1987 14:44:27.84 -acq -usa - - - - - -F -f2634reute -d f BC-DYNASCAN-<DYNA.O>-COM 10-19 0109 - -DYNASCAN <DYNA.O> COMPLETES MANAGEMENT BUYOUT - CHICAGO, Oct 19 - Dynascan Corp said it completed the sale -of its industrial electronic products group and expects to -recognize about a 3.0 mln dlr pretax gain on the transaction in -the fourth quarter. - It said the group was sold October 15 for 13.5 mln dlrs to -Maxtec International Corp, a privately held company created by -the company's management team. - It said the purchase price was 12 mln dlrs in cash and 1.5 -mln dlrs in five-year notes plus warrants to buy 7.0 pct of the -stock of Maxtec. - Dynascan said the group was projected to provide about 12 -pct of its consolidated sales in 1987. - Reuter - - - -19-OCT-1987 14:43:45.78 -acq - - - - - - -F -f2633reute -f f BC-HENLEY-GROUP-RE 10-19 0011 - -******HENLEY GROUP REVIEWING INVESTMENT IN SANTA FE SOUTHERN PACIFIC -Blah blah blah. - - - - - -19-OCT-1987 14:43:38.56 - -usa - - - - - -F -f2632reute -s f BC-PALL-CORP-<PLL>-SETS 10-19 0022 - -PALL CORP <PLL> SETS QUARTERLY - GLEN COVE, N.Y., Oct 19 - - Qtly div 8-1/2 cts vs 8-1/2 cts prior - Pay Nov 13 - Record Oct 30 - Reuter - - - -19-OCT-1987 14:42:48.01 -acq - - - - - - -F -f2628reute -f f BC-HENLEY-GROUP-SA 10-19 0015 - -******HENLEY GROUP SAID IT ENDED TALKS ON BUYING SOUTHERN PACIFIC FROM SANTA FE SOUTHERN -Blah blah blah. - - - - - -19-OCT-1987 14:42:12.65 - - - - - - - -F -f2627reute -f f BC-PAINEWEBBER-GRO 10-19 0009 - -******PAINEWEBBER GROUP INC 3RD QTR SHARE 44 CTS VS 71 CTS -Blah blah blah. - - - - - -19-OCT-1987 14:42:08.28 -acq -spainukusa - - - - - -F -f2626reute -r f BC-RENTA-INMOBILIARIA-SE 10-19 0099 - -RENTA INMOBILIARIA SEEKS CANNON GROUP <CAN> ASSETS - MADRID, Oct 19 - Spanish property firm <Renta Inmobiliaria -SA> is negotiating to buy the property assets of U.S. media -company Cannon Group Inc <CAN>, Renta's finance director Jose -Luis Sanchez said. - Sanchez told Reuters that Renta's chairman Juan Antonio -Robles was currently in the U.S. to negotiate the deal but -declined to give other details. - Interpart, a Luxembourg-based holding company chaired by -Italian financier Giancarlo Paretti, payed around 12.2 billion -pesetas in July to acquire a 63.5 pct stake in Renta -Inmobiliaria. - The Spanish daily newspaper El Pais said the Cannon -property assets sought by Renta included the Elstree film -studios in Britain and a chain of movie-theaters in Europe and -the U.S. - - Reuter - - - -19-OCT-1987 14:41:38.02 - -usa - - - - - -F -f2625reute -r f BC-STOP-AND-SHOP-<SHP>-T 10-19 0035 - -STOP AND SHOP <SHP> TO REPURCHASE SHARES - BOSTON, Oct 19 - Stop and Shop Cos Inc said its board has -authorized the repurchase of up to five pct of its common -shares from time to time at prevailing market prices. - Reuter - - - -19-OCT-1987 14:41:28.16 -crude -usa - - - - - -F Y -f2623reute -u f BC-SOUTHLAND-<SLC>-UNIT 10-19 0078 - -SOUTHLAND <SLC> UNIT RAISES CRUDE OIL PRICES - New York, Oct 19 - Citgo Petroleum Corp, a subsidiary of -Southland Corp, said it raised the contract price it will pay -for all grades of crude oil by 50 cts a barrel, effective Oct -16 - The increase brings Citgo's postings for the West Texas -Intermediate and West Texas Sour grades to 19.00 dlrs/barrel, -while Light Louisiana SWeet is now priced at 19.35 dlrs. - Citgo last changed it crude oil postings on Sept 9. - Reuter - - - -19-OCT-1987 14:41:09.93 - - - - - - - -F -f2621reute -f f BC-NEW-YORK-TIMES 10-19 0008 - -******NEW YORK TIMES CO 3RD QTR SHR 40 CTS VS 33 CTS -Blah blah blah. - - - - - -19-OCT-1987 14:40:54.90 - -usa - - - - - -F -f2619reute -d f BC-<THERMASCAN-INC>-RECE 10-19 0110 - -<THERMASCAN INC> RECEIVES FDA APPROVAL ON DRUG - NEW YORK, Oct 19 - Thermascan Inc said the U.S. Food and -Drug Administration has approved clinical trials of a new, -advanced AIDS confirmation test developed by the company. - Thermascan said that about 10,000 trials will be taken on -the the new test, called Fluorognost in the next three months -through blood banks, hospitals and health centers as well as by -individual physicians. - The trials will be conducted in New York at the Beth Israel -Medical Centre, the Sacremento Medical foundation Blood Center, -the Karolinska Institute, Stockholm, and the Institute of -Hygiene at the University of Innspruck. - Reuter - - - -19-OCT-1987 14:40:47.20 - -usa - - - - - -F -f2618reute -d f BC-GOTTSCHALKS-<GOT>-TO 10-19 0061 - -GOTTSCHALKS <GOT> TO BUY BACK STOCK - FRESCalif., Oct 19 - Gottschalks Inc said its board -authorized management to purchase up to 300,000 of the -company's outstanding shares, or about 3.5 pct of the stock -outstanding, because the company believes its shares are -currently undervalued. - It said the purchases will be made from time to time on the -open market. - Reuter - - - -19-OCT-1987 14:40:42.14 -acq -usa - - - - - -F -f2617reute -r f BC-CCX-INC 10-19 0083 - -GROUP SELLS MOST OF STAKE IN CCX INC <CCX> - WASHINGTON, Oct 19 - A shareholder group including Far -Hills, N.J. attorney Natalie Koether said it reduced its stake -in CCX Inc common stock to 10,000 shares, or less than one pct -of the company's common stock outstanding, from a previous -stake of about ten pct. - In a filing with the Securities and Exchange Commission, -the group said it sold 380,000 CCX common shares on October 15 -at four dlrs a share. - The group gave no reason for the sales. - Reuter - - - -19-OCT-1987 14:40:07.34 - -usa - - - - - -A RM -f2612reute -d f BC-LEISURE-AND-TECHNOLOG 10-19 0070 - -LEISURE AND TECHNOLOGY <LVX> SELLS NOTES - NEW YORK, Oct 19 - Leisure and Technology In is raising -40 mln dlrs through an offering of notes due 1999, said sole -manager Merrill Lynch Capital Markets. - The notes have a 15-3/4 pct coupon and were priced at par. - Non-callable for three years and non-refundable for five -years, the issue is rated B-2 by Moody's Investors Service Inc -and B by Standard and Poor's Corp. - Reuter - - - -19-OCT-1987 14:39:55.20 -acq -usa - - - - - -F -f2611reute -r f BC-TWIN-DISC 10-19 0106 - -ORION <OC> HAS 5.2 PCT TWIN DISC <TDI> STAKE - WASHINGTON, Oct 19 - Orion Capital Corp said it acquired -163,000 shares of Twin Disc Inc common stock, or 5.2 pct of the -company's common stock outstanding. - In a filing with the Securities and Exchange Commission, -Orion Capital said the stock represents "a favorable investment -opportunity at current market prices." - In open market transactions between August 21 and October -16, an Orion Capital subsidiary bought 56,200 Twin Disc common -shares at 21.06 dlrs to 22.43 dlrs a share. The entire 5.2 pct -stake was purchased at a cost of 3.2 mln dlrs, Orion Capital -told the SEC. - - Reuter - - - - Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/test/data/reuters-21578-index/deletable and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/test/data/reuters-21578-index/deletable differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/test/data/reuters-21578-index/segments and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/test/data/reuters-21578-index/segments differ diff -Nru clucene-core-0.9.21b/test/data/reuters-21578-index/_z.f0 clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.f0 --- clucene-core-0.9.21b/test/data/reuters-21578-index/_z.f0 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.f0 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -lbqpjlldaaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff -Nru clucene-core-0.9.21b/test/data/reuters-21578-index/_z.f1 clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.f1 --- clucene-core-0.9.21b/test/data/reuters-21578-index/_z.f1 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.f1 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -yywwwwwxwxxxxxxxxxxxxxxxxxxxxxx \ No newline at end of file diff -Nru clucene-core-0.9.21b/test/data/reuters-21578-index/_z.fdt clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.fdt --- clucene-core-0.9.21b/test/data/reuters-21578-index/_z.fdt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.fdt 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ - LEWIS.DTD -README.TXTall-exchanges-strings.lc.txtall-orgs-strings.lc.txtall-people-strings.lc.txtall-places-strings.lc.txtall-topics-strings.lc.txtcat-descriptions_120396.txt"feldman-cia-worldfactbook-data.txt reut2-000.sgm reut2-001.sgm reut2-002.sgm reut2-003.sgm reut2-004.sgm reut2-005.sgm reut2-006.sgm reut2-007.sgm reut2-008.sgm reut2-009.sgm reut2-010.sgm reut2-011.sgm reut2-012.sgm reut2-013.sgm reut2-014.sgm reut2-015.sgm reut2-016.sgm reut2-017.sgm reut2-018.sgm reut2-019.sgm reut2-020.sgm reut2-021.sgm \ No newline at end of file Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/test/data/reuters-21578-index/_z.fdx and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.fdx differ diff -Nru clucene-core-0.9.21b/test/data/reuters-21578-index/_z.fnm clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.fnm --- clucene-core-0.9.21b/test/data/reuters-21578-index/_z.fnm 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.fnm 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -contentspath \ No newline at end of file Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/test/data/reuters-21578-index/_z.frq and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.frq differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/test/data/reuters-21578-index/_z.prx and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.prx differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/test/data/reuters-21578-index/_z.tii and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.tii differ Binary files /tmp/g_lxE0kVXu/clucene-core-0.9.21b/test/data/reuters-21578-index/_z.tis and /tmp/FbQoACf6dy/clucene-core-2.3.3.4/test/data/reuters-21578-index/_z.tis differ diff -Nru clucene-core-0.9.21b/test/data/utf8text/arabic_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/arabic_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/arabic_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/arabic_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -ﻞﻴﻤﻳﺭ - -استبعدت تونس كابتن منتخبها القومي خالد بدرة من المجموعة الخامسة ÙÙŠ كأس العالم أمام ملاوي ÙÙŠ 26 مارس/ آذار. - -وكان كابتن المنتخب القومي روجر ليمير قد استبعد بدرة، 32 عاما، والذي قاد Ùريق بلاده ÙÙŠ كأس الأمم الإÙريقية، من الÙريق الذي يضم 23 لاعبا يوم الثلاثاء. - -وقد تم استبدال بدرة بالمهاجم علاء الدين يحيى المعار حاليا إلى Ùريق سان اتيان الÙرنسي من Ùريقه الإنجليزي ساوثامبتون. - -كما سيلعب منتخب تونس المعرو٠باسم نسور قرطاج دون لاعب الوسط عادل شيلدي الذي أوق٠عن اللعب. - -ومن المقرر أن تمثل المباراة Ùرصة لتونس لاستعادة اللاعب الÙرنسي المولد حامد ناموتشي. - -وكان ناموتشي، 20 عاما، لاعب الوسط والذي يلعب لصالح الÙريق الاسكتلندي رينجرز يلعب مع الÙريق القومي ÙÙŠ Ùبراير/ شباط ÙÙŠ المباراة الودية أمام تركيا غير أن المباراة ألغيت بسبب سوء الأحوال الجوية. - -ووÙقا لقوانين الاتحاد الدولي لكرة القدم (الÙÙŠÙا) يسمح للاعب كرة القدم تمثيل دولة أخرى طالما يحمل جنسية مزدوجة ويطلب تغيير الجنسية قبل سن 21. diff -Nru clucene-core-0.9.21b/test/data/utf8text/chinese_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/chinese_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/chinese_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/chinese_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -啤酒 -é…’ -é’島啤酒與美國釀酒商åˆä½œ - - - -百å¨å•¤é…’是安海斯-布希公å¸ç”¢å“之一 -中國é’島啤酒集團和世界最大釀酒商美國安海斯-布希公å¸(Anheuser-Busch)é”æˆå”議,組æˆå•†æ¥­ç­–ç•¥è¯ç›Ÿã€‚ - -安海斯-布希公å¸æ˜¯ç”Ÿç”¢ç™¾å¨å•¤é…’(Budweiser Beer)çš„å…¬å¸ã€‚ - -安海斯-布希和é’島兩家公å¸å°‡çµåˆé›™æ–¹çš„資æºï¼Œé€²ä¸€æ­¥æ‹“展中國的市場。 - -é’島啤酒表示,兩家公å¸åˆè³‡çš„詳情ä»æœ‰å¾…商討。 - -安海斯-布希已經æŒæœ‰é’島4.5%的股權。 - -é’島å°å®‰æµ·æ–¯-布希來說,å¸å¼•åŠ›éžå¸¸å¤§ï¼Œä¸»è¦æ˜¯ç”±æ–¼é’島éåŠé¾å¤§ä¸­åœ‹å¸‚å ´çš„æ¯å€‹è§’è½ã€‚ - -é’島一直收購å°åž‹é‡€é…’商,æ高其市場佔有率。é’島目å‰çš„市場佔有率是11%。該公å¸è¡¨ç¤ºï¼Œå¸‚場佔有率æ¯å¹´å¢žé•·6%。 - -é æ–™è©²å…¬å¸åœ¨2002å¹´1月到6月的盈利增長了50%,å³è¶…éŽ1億元人民幣。 - -世界上30多個國家å‡æœ‰å‡ºå”®é’島啤酒。 - -æ¥ -《译员》下月将全çƒåŒæ­¥ä¸Šæ˜  妮å¯å°†æœ‰æœ›æ¥åŽ - -æ›´æ–° æ¥æºï¼šåƒé¾™æ–°é—»ç½‘ 第1页/å…±1页 << 上一页 | 下一页 - -因为将å‚演王家å«çš„《从上海æ¥çš„女人》,好莱åžè‘—å女星妮å¯Â·åŸºå¾·æ›¼åœ¨ä¸­å›½å†…地的人气激增。记者昨天了解到,由她主演的好莱åžå¤§ç‰‡ã€Šå›½å®¶ç¿»è¯‘员》作为今年内地首部全çƒåŒæ­¥å¼•è¿›å¤§ç‰‡ï¼Œå°†äºŽ4月22日公映,而妮å¯æœ¬äººå°†æœ‰æœ›æ¥åŽå‚加该片的宣传活动 - diff -Nru clucene-core-0.9.21b/test/data/utf8text/czech_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/czech_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/czech_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/czech_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -BudÄ›jovický -Základní -informace NaÅ¡e mise - -Tradice: PÅ™i výrobÄ› originálního budÄ›jovického ležáku Budweiser Budvar používáme tradiÄní postupy a stavíme na znalostech a vÄ›domostech, které nám zanechaly generace sládků. - -Kvalita: NaÅ¡e pivo vaříme z nejkvalitnÄ›jších surovin, žateckého chmelu, moravského sladu a vody z naÅ¡ich vlastních artéských studní. - -JedineÄnost:Díky lahodné chuti a jedineÄnému složení a charakteru vyhledávají náš ležák tisíce milovníků kvalitních piv prakticky po celém svÄ›tÄ›. - -Originalita: Kdekoli na svÄ›tÄ› si koupíte Budweiser Budvar, můžete si být jisti, že byl vyroben v místÄ› svého původu ÄŒeských BudÄ›jovicích (dříve Budweis). Proto se můžeme v rámci přístupu ÄŒeské republiky do Evropské unie pyÅ¡nit "ochranou podle místa původu" pro naÅ¡e výrobky. - -Pivovar BudÄ›jovický Budvar - -Kvalita a vÄ›hlas budÄ›jovického piva, jehož historie sahá až do 13. století, vedly k tomu, že originální receptura i jeho jméno byly Äasto pÅ™edmÄ›tem napodobování a kopírování. - -Pivovar BudÄ›jovický Budvar je dlouhodobÄ› jedním z nejúspěšnÄ›jších potravinářských podniků v ÄŒeské republice. Téměř polovina produkce je úspěšnÄ› prodávána ve více než 60 zemích celého svÄ›ta. - -Novodobá historie pivovaru se datuje do roku 1967, kdy Ministerstvo zemÄ›dÄ›lství ÄŒeské republiky založilo národní podnik BudÄ›jovický Budvar jako přímého nástupce ÄŒeského akciového pivovaru, který vaÅ™il pivo v ÄŒeských BudÄ›jovicích již od roku 1895. Ten byl založen Äeskými právováreÄníky, kteří navázali na více než 700 let starou historii vaÅ™ení piva v ÄŒeských BudÄ›jovicích (dříve Budweis). - -BudÄ›jovický Budvar vlastní cenné duÅ¡evní vlastnictví v podobÄ› více než 380 ochranných známek registrovaných ve 101 zemích svÄ›ta. Mezi nejznámÄ›jší patří Budweiser, Budvar, Budweiser Budvar, Bud, BudÄ›jovický Budvar a Czechvar. Toto ohromné duÅ¡evní bohatství souvisí s místem svého původu, mÄ›stem ÄŒeské BudÄ›jovice, dříve Budiwoyz Äi Budweis. - -Postupnou a cílevÄ›domou expanzí na zahraniÄní trhy a posilováním prodejů doma dosáhl BudÄ›jovický Budvar pozice klíÄového hráÄe na trhu piva nejen v ÄŒeské republice. Objem exportovaného výstavu Å™adí prémiový originální ležák Budweiser Budvar k jedné z nejexportovanÄ›jších pivních znaÄek ÄŒeské republiky. V BudÄ›jovickém Budvaru, n. p., dnes pracuje pÅ™es 670 zamÄ›stnanců. - -Hlavní pÅ™edstavitelé pivovaru - -Ing. Jiří BoÄek – Å™editel -Ing. Josef Tolar – sládek -Ing. Petr Jánský – finanÄní a ekonomický manager -Ing. Robert Chrt – obchodní manager -Äesky english deutsche Úvod Mapa stránek - -Katalog výrobků -Katalog výrobků -To nejvzácnÄ›jší, co máme … - -NaÅ¡e vlastní vyÅ¡lechtÄ›ná kultura kvasinek (Saccharomyces cerevisiae subsp. uvarum), která dozrává pod peÄlivým dohledem sládků, otváří tu nejjemnÄ›jší souÄást lahodné chuti naÅ¡eho piva. - -K výrobÄ› naÅ¡eho piva jsou použity jen ty nejkvalitnÄ›jší suroviny a každá z nich je pro jeho unikátní chuÅ¥ neménÄ› důležitá. - -Panensky Äistá přírodní voda, která Äekala téměř 10 000 let na vysvobození z naÅ¡ich 300 m hlubokých artéských studní, dotváří jeho nezamÄ›nitelnou lahodnou chuÅ¥, kterou oceníte pokaždé, když se napijete. - -NaÅ¡e pivo vyniká dokonalou harmonickou chutí. Její základ tvoří kombinace tÄ›ch nejkvalitnÄ›jších domácích surovin a dlouholetá -zkuÅ¡enost generací sládků. - -K výrobÄ› jsou použity jen ty nejmodernÄ›jší technologie, zároveň se vÅ¡ak úzkostlivÄ› dbá na dodržování tradiÄních výrobních postupů, aby byla zachována stále stejná, vysoká kvalita. Velký důraz je kladen na zrání („ležení“) piva, které u prémiového originálního ležáku dosahuje minimálnÄ› 90 dní, u speciálního piva Bud Super Strong až 200 dní. - -SamiÄí hlávky vysoce kvalitního žateckého chmele (Humulus lupulus) dÄ›lají z naÅ¡eho piva opravdovou vzácnost. Dodávají mu totiž jeho nenapodobitelný, vysoce cenÄ›ný, jemný chmelový charakter. - -Zrnka unikátní odrůdy moravského jeÄmene (Hordeum vulgaris), která každoroÄnÄ› pÅ™ednostnÄ› vybíráme z prvotřídních sklizní, dodávají naÅ¡emu pivu jeho nenapodobitelnou zlatavou barvu. - - - -Seznam produktů - - - -Budweiser Budvar prémiový ležák - - -Budweiser Budvar prémiový ležák - - -BudÄ›jovický Budvar svÄ›tlé výÄepní pivo - - -Bud Super Strong - - -Budweiser Budvar Free nealkoholické pivo - - -Budweiser Budvar Free nealkoholické pivo - - -Budweiser Budvar tmavý ležák - -© 2003 VÅ¡echna práva vyhrazena, BudÄ›jovický Budvar n.p. Maintenance by ÄŒeský Web, a.s. diff -Nru clucene-core-0.9.21b/test/data/utf8text/english_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/english_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/english_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/english_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -MSN vs. Google and Yahoo, Round 3 -Published: March 15, 2005, 7:41 PM PST -By Stefanie Olsen -Staff Writer, CNET News.com - -TrackBack -Print -E-mail -TalkBack - -Microsoft CEO Steve Ballmer is expected to show off a new paid-search service -on Wednesday that will eventually go toe-to-toe with rival Google and supplant -partner Yahoo's advertising. - -As previously reported, Microsoft's Internet group is developing a -pay-per-click ad-bidding system that pairs search results with sponsored text -messages from advertisers. Yahoo's Overture Services currently supplies MSN -with sponsored search links, which complement MSN-sold "featured sites." - -But the new MSN service, called AdCenter and set to roll out in Singapore and -France in the coming months, will bump Overture ads in the long run and let MSN -own a major source of its advertising revenue. (Microsoft splits fees collected -from marketers with Overture.) - -News.context - -What's new: -MSN is set to show off its version of a system for selling text ads linked to -search queries and results, a direct challenge to market leaders Google and -Yahoo. - -Bottom line: - -Microsoft's Internet group is hungry for a bigger piece of the -multibillion-dollar ad business related to search, and the new service will -eventually allow it to jettison a deal with Yahoo's Overture Services. That -agreement provides ad revenue but requires MSN to split the money with Yahoo. - -More stories on this topic -Microsoft does not have a specific date for a U.S. launch, but it envisions -operating the ad network globally, said Adam Sohn, an MSN spokesman. - -"Call this the third leg of the search stool," said Sohn. "First, we introduced -algorithmic search, then desktop (search), which is still in beta, and now the -advertising platform." - -With the product, Microsoft will move into the mother lode of a -multibillion-dollar ad business dominated by Google and Yahoo. Search-engine -marketing is expected to be worth as much as $5 billion this year, and nearly -$9 billion annually within four years, according to Jupiter Research. -Microsoft's piece of the pie is smaller than the shares enjoyed by market -leaders Yahoo and Google, and the software giant is hungry for more. - -Google fields 35.1 percent of the searches online, followed by Yahoo at 31.8 -percent and MSN at 16 percent, according to ComScore QSearch. If the number of -searches translates to the percentage of the ad market, MSN generates roughly -$1.6 billion annually from search, minus the portion shared with Overture. - -MSN's product is far from fully baked, according to Sohn, but it could -eventually crowd rivals, search engine watchers say. Given that there is a -finite number of searches conducted on the Internet, and hence a limited number -of opportunities to display search-related ads, MSN will grab ad dollars away -from Yahoo and Google, they say. According to data from ComScore QSearch, there -were roughly 4.9 billion search queries in the United States during the month -of January. - -"The big pie of searches out there isn't getting any bigger" because of MSN's -ad platform, said industry expert Danny Sullivan. "All that's - -Continued ... diff -Nru clucene-core-0.9.21b/test/data/utf8text/french_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/french_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/french_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/french_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -réputé -comédie -Hitch - expert en séduction - -Alex Hitchens est un entremetteur (marieur) professionnel qui utilise des moyens peu orthodoxes pour coacher ses clients et jouer avec le destin. Il réussit ainsi avec succès à unir des hommes ordinaires avec des femmes extraordinaires. Malgré tout cela, Hitch ne croit pas en l'amour. -Pourtant sa rencontre avec Sara, une jeune journaliste sexy qui partage les mêmes points de vue cyniques sur les relations amoureuses va les amener sur un territoire inconnu... - - Vidéos : bande annonce - -Interviews - -Amber Valletta -Kevin James -Eva Mendes -Andy Tennant - -À propos du film -Notes de production : - -WILL SMITH COMME JAMAIS… - -Will Smith est l’une des plus célèbres stars de Hollywood. Héros d’action réputé pour son charme et son humour, il n’avait cependant encore jamais joué dans une comédie romantique. James Lassiter, producteur de HITCH et associé de Will Smith dans leur société de production, Overbrook Entertainment, explique : « Cela faisait des années que nous cherchions un bon scénario de comédie romantique pour Will. Ce n’est pas aussi facile que ça en a l’air. Ce genre de scénario est finalement assez rare, et les bons le sont encore plus ! » -James Lassiter et Teddy Zee ont été séduits par le scénario de Kevin Bisch, qui semblait fait pour Smith. Un « conseiller en séduction », un homme cool et sûr de lui aide, contre un peu d’argent, des hommes timides et qui ne brillent pas en société à gagner le cÅ“ur de n’importe quelle femme. James Lassiter explique : « C’est la légende urbaine parfaite : l’histoire d’un homme si charismatique qu’il peut enseigner aux autres comment s’y prendre pour séduire. - -« Selon la philosophie de Hitch, poursuit-il, trois jours suffisent pour mettre en lumière le « vrai vous » et conquérir la femme de vos rêves. » Teddy Zee, également producteur chez Overbrook, a lui aussi vu tout de suite le potentiel de l’histoire. « Il y a à la fois quelque chose de très urbain et de très raffiné dans ce scénario ; c’est contemporain, chic et très humain. Il faut aussi noter que l’histoire est racontée du point de vue masculin, ce qui est extrêmement rare dans les comédies romantiques. » - -Le scénariste Kevin Bisch a puisé son inspiration dans ses expériences personnelles à l’université. Après une suite de rendez-vous plus ou moins réussis avec différentes jeunes filles, il a réalisé qu’il finissait généralement assis au bord du lit avec elles, à feuilleter longuement des albums photos… « J’ai eu une révélation, confie-t-il en souriant. Comment avais-je pu être aussi bête ? Elles ne faisaient que tuer le temps en attendant que je les embrasse. Après ça, je me suis intéressé de près à la mécanique et au timing des débuts d’une relation avec une femme, et aux petits détails infimes… » - - - diff -Nru clucene-core-0.9.21b/test/data/utf8text/german_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/german_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/german_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/german_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -Damit -können -führt - -Damit Sie sich aus allgemein zugänglichen Quellen ungehindert "unterrichten" können und tagesaktuell informiert sind, bieten wir Ihnen in Zusammenarbeit mit nationalen und internationalen Redaktionen einen Schlagzeilenservice der Sie direkt zum jeweiligen Artikel des Herausgeber führt. - -Grundgesetz der Bundesrepublik Deutschland -Artikel 5 -Meinungs-, Informations-, Pressefreiheit; Kunst und Wissenschaft -(1) Jeder hat das Recht, seine Meinung in Wort, Schrift und Bild frei zu äußern und zu verbreiten und sich aus allgemein zugänglichen Quellen ungehindert zu unterrichten. Die Pressefreiheit und die Freiheit der Berichterstattung durch Rundfunk und Film werden gewährleistet. Eine Zensur findet nicht statt. - -(2) Diese Rechte finden ihre Schranken in den Vorschriften der allgemeinen Gesetze, den gesetzlichen Bestimmungen zum Schutze der Jugend und in dem Recht der persönlichen Ehre. - -(3) Kunst und Wissenschaft, Forschung und Lehre sind frei. Die Freiheit der Lehre entbindet nicht von der Treue zur Verfassung. - - -Anmerkung: Jeder veröffentlichte Artikel wird von Journalisten mehr oder weniger gut recherchiert. Kein Journalist ist frei von Fehlern und frei von Subjektivität seine eigene Sicht zum jeweiligen Thema darzustellen. Aus diesem Grund sollten Sie zur Meinungsbildung immer mehrere Medien nutzen. Wir hoffen Ihnen mit diesem Service dabei helfen zu können. - -Auf die Auswahl der Schlagzeilen hat die German News Redaktion keinen Einfluss. Alle publizierten Schlagzeilen und Einführungstexte (teaser) geben nicht unbedingt die Meinung der German News Redaktion wieder. Eine weitere Verwendung der Schlagzeilen aus German News ist nicht gestattet und kann nur durch Einwilligung des jeweiligen Herausgeber erfolgen. Die Zuordnung zur Themenauswahl erfolgt frei. - diff -Nru clucene-core-0.9.21b/test/data/utf8text/greek_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/greek_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/greek_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/greek_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -στείλτε - - -Ελληνικό Yahoo!: ΕÏγαλεία Επικοινωνίας - Yahoo! Mail - Διαβάστε και στείλτε emails από οπουδήποτε στον κόσμο με το Yahoo! Mail. ΜποÏείτε να έχετε Ï€Ïόσβαση ακόμα και στον POP3 mail λογαÏιασμό σας, μέσω του Web. - Yahoo! ΗμεÏολόγιο - Κάνει εÏκολη την οÏγάνωση της ημέÏας σας με τις υπενθυμίσεις, τις e-mail Ï€Ïοσκλήσεις, και τη λίστα εκκÏεμοτήτων. - Yahoo! Ατζέντα - ΟÏγανώστε τις διευθÏνσεις των φίλων σας. ΜποÏείτε να μεταφέÏετε όλες τις πληÏοφοÏίες για τους φίλους σας από το Microsoft Outlook, από το Netscape Address Book ή από το Palmtop σας. - Yahoo! Messenger - Στείλτε άμεσα μηνÏματα στους φίλους σας ή στους συνεÏγάτες σας. Σας στέλνει υπενθυμίσεις σε συνεÏγασία με το Yahoo! ΗμεÏολόγιο, ώστε να μη χάνετε κανένα σημαντικό ÏαντεβοÏ. - Yahoo! Σημειώσεις - ΑποθηκεÏστε όλες τις σημειώσεις σας στο Web. ΤώÏα μποÏείτε να έχετε Ï€Ïόσβαση στις σημειώσεις σας από οπουδήποτε, οποιαδήποτε στιγμή. - - - -ΤώÏα στο Ελληνικό Yahoo! όλα αυτά τα εÏγαλεία είναι εντελώς δωÏεάν. Και μποÏείτε να τα έχετε για πάντα! - diff -Nru clucene-core-0.9.21b/test/data/utf8text/hebrew_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/hebrew_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/hebrew_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/hebrew_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,408 +0,0 @@ -ב×רצות -Ale - - - בירה נפוצה מ×ד בעיקר ב×רצות ×נגלוסקסיות, צבעה ×›×”×” ולייצורה ×ž×©×ª×ž×©×™× ×‘×©×ž×¨×™ תסיסה עילית. בירה קילקני ×”×™× ×‘×™×¨×” מסוג ×–×”. - - - -CO2 - - - ×’×– פחמן דו חמצני הנוצר על ידי ×”×©×ž×¨×™× ×‘×ª×”×œ×™×š התסיסה. זהו ×”×’×– ×ותו ×נו ×—×©×™× ×‘×¢×ª שתיית הבירה. - - - -Lager - - - - הבירה הנפוצה ביותר בעול×, צבעה בהיר, קלה לשתיה, בעלת ×רומה קלה ונעימה, ידועה ×’× ×‘×©× Pilsner על-×©× ×”×‘×™×¨×” הצ'כית המפורסמת ולייצורה ×ž×©×ª×ž×©×™× ×‘×©×ž×¨×™ תסיסה תחתית. קרלסברג, טובורג רד וטובורג גרין הן בירה מסוג ×–×”. - - - -Stout - - - צבעה ×›×”×” ולייצורה ×ž×©×ª×ž×©×™× ×‘×©×ž×¨×™ תסיסה עילית. בירה גינס ×”×™× ×‘×™×¨×” מסוג ×–×”. - - Widget - - - התקן מיוחד שהינו למעשה מיכלון קטן המכיל ×’×– חנקן ומוחדר בעת המילוי לבקבוק ×ו לפחית של גינס Draught. ×›×©×¤×•×ª×—×™× ×ת הבקבוק ×ו הפחית, המיכלון מתבקע ומשחרר ×ת החנקן היוצר ×ת הקצף העשיר והסמיך המיוחד של גינס. - - - -×לכוהול - - - ×תנול, ×ו כוהל ×תילי. נוצר בזמן התסיסה של השמרי×. - - - - -ב×לטיקה - - - ב×לטיקה ×”×™× ×” המבשלה הגדולה ביותר לייצור בירה ברוסיה ו×חת מהמובילות ב×ירופה. - -למבשלות בירה ב×לטיקה ×¡×•×’×™× ×¨×‘×™× ×•×ž×’×•×•× ×™× ×©×œ בירה ×›×שר העיקרון המנחה ×ת המבשלה ×”×•× ×‘×™×©×•×œ בירה המבוססת על ×ž×¨×›×™×‘×™× ××™×›×•×ª×™×™× ×‘×™×•×ª×¨. - -מבשלות בירה ישר×ל משווקת בקבוקי ב×לטיקה 0.5 ליטר מספר 3, 4, 6 ו-9 ופחיות 0.5 ליטר מספר 5 ו-7. - - - -בירה - - - הבירה ×”×™× ×” משקה מוגז בדרך-כלל ×לכוהולי עשוי ×ž×“×’× ×™× ×©×•× ×™×. במשך ×לפי שנות קיומה הבירה פשטה ולבשה טעמי×, ריחות ×•×¦×‘×¢×™× ×‘×”×ª×× ×œ×ž×¡×•×¨×•×ª, יכולות טכנולוגיות והתקדמות מדעית. הבירה נחשבת למשקה פופולרי בכל היבשות ובקרב כל העמי×. - - - -בירה ×œ×œ× ×לכוהול -בירה שתססה בתהליך רגיל ×ך ×”×לכוהול הורחק ממנה בתהליכי זיקוק ×ו בעזרת ממברנות דוגמת Reverse Osmosis. - - בירה מ×לט - - - בירה ×œ× ×›×•×”×œ×™×ª המכילה כמות של ×¡×•×›×¨×™× ×•×¢×œ כן מתוקה. הבירה יכולה לתסוס זמן קצר על מנת לסלק ×˜×¢×ž×™× ×•×¨×™×—×•×ª ××•×¤×™×™× ×™×™× ×œ×ª×™×¨×•×©. הבירה ×›×”×” לרוב בגין הוספת כמות נכבדת של לתת קלוי ×›×”×” מ×ד. - - - - -בירה מתסיסה פר×ית - - -בירה ש××™× ×” מוססת על ידי זן ×©×ž×¨×™× ×ž×•×’×“×¨ ××œ× ×¢×œ ידי ×©×ž×¨×™× ×”× ×ž×¦××™× ×‘×ווירת המבשלה. זוהי תסיסה ספונטנית המקובלת בעיקר בבלגיה. - - - - -גינס - - -בירה מסוג Stout, ×יכותית ביותר. בעלת צבע ×›×”×” מ×ד שמקורו בלתת קלוי היטב. בירה מרירה מ×ד ובעלת קצף מיוחד ועשיר הנובע מהתערובת הייחודית של חנקן ו-CO2. גינס ייחודית בבקבוק מהפכני. ב×מצעות התקן מיוחד בתוך הבקבוק ×ž×©×ª×—×¨×¨×™× ×”×’×–×™× ×¢× ×”×¤×ª×™×—×” וכך נוצר קצף עשיר וסמיך ×•×˜×¢× ×”×–×”×™× ×œ×‘×™×¨×” הנמזגת מהחבית. - - - -די×ט מ×לטי - בירה שחורה די×ט מ×לטי בה הוחלף חלק גדול ×ž×”×¡×•×›×¨×™× ×©×‘×” ×‘×ž×ž×ª×™×§×™× ×ž×œ××›×•×ª×™×™× ×›×š שכמות הקלוריות בה ×”×™× ×” כמחצית מכמות הקלוריות של בירה מ×לטי רגילה ובכל מקרה ×œ× ×™×•×ª×¨ מ 20 קלוריות ל 100 מ"ל. - - - -הלתתה - - - תהליך יצור לתת במהלכו השעורה עוברת הנבטה בתהליך מבוקר של רטיבות וטמפרטורה. תוך כדי נביטת הגרעין ×ž×™×•×¦×¨×™× ×‘×•, מסונתזי×, ×× ×–×™×ž×™× ×”×ž×¡×™×™×¢×™× ×œ×¤×¨×§ ×ת מ×גר ×”×נרגיה שבו, ×”×¢×ž×™×œ× ×™× ×”× ×ž×¦××™× ×‘×נדוספר×. - - -בשלב ר×שון ×ž×¡×•× ×ª×–×™× ×”×× ×–×™×ž×™× ×”×ž××¤×©×¨×™× ×’×™×©×” לתוך ת××™ העמילן ×•×”× ×ž×¤×¨×§×™× ×ת דופן הת××™× ×”×ž×›×™×œ×™× ×¢×ž×™×œ×Ÿ. בשלב שני ×ž×¡×•× ×ª×–×™× ×× ×–×™×ž×™× ×”×ž×¡×™×™×¢×™× ×œ×¤×¨×§ ×ת ×”×¢×ž×™×œ× ×™× ×¢×¦×ž×, ×× ×–×™×ž×™× ×¢×ž×™×œ×•×œ×™×˜×™×™×. - -בשלב ×–×” מופסקת הנביטה בתהליך קלייה. תהליך ×–×” מייבש ×ת הגרעין ו"מקפי×" למעשה ×ת ×ž×¦×‘× ×©×œ ×”×נזימי×. למרות ×”×—×•× ×”×¨×‘ ×ליו נחשף הגרעין בתהליך הייבוש, חיוניות ×”×× ×–×™×ž×™× × ×©×ž×¨×ª ×ך ×”× ××™× × ×¤×¢×™×œ×™×. -×× ×–×™×ž×™× ×לה ×ž×©×ž×©×™× ×ותנו בתהליך בתחילת תהליך מיצוי ×”×¡×•×›×¨×™× ×‘×‘×™×ª הבישול במבשלת הבירה. - -בתחילת תהליך ×–×” ×נו ×’×•×¨×¡×™× ×”×œ×ª×ª ×•×ž×¨×˜×™×‘×™× ×ת הלתת ×‘×ž×™× ×—×ž×™×ž×™×. ×ª×”×œ×™×›×™× ×לו ×ž×¢×•×¨×¨×™× ×ת ×”×× ×–×™×ž×™× ×œ×¤×¢×•×œ×” ×•×”× ×ž×ª×—×™×œ×™× ×‘×ª×”×œ×™×›×™ פירוק ×”×¢×ž×™×œ× ×™× ×œ×¡×•×›×¨×™×. ×¡×•×›×¨×™× ×לו ישמשו ×ת שמרי הבירה במהלך תסיסתה. - -×ž×©×˜×¨×™× ×©×•× ×™× ×©×œ הנבטה וקליה ×™×•×¦×¨×™× ×¡×•×’×™× ×©×•× ×™× ×©×œ לתת ×”× ×‘×“×œ×™× ×‘×¦×‘×¢× ×•×‘×˜×¢×ž× ×•×ž××¤×©×¨×™× ×œ×™×¦×•×¨ מגוון של בירות. - - - -ווינשטפן - - -מבשלה ×‘×“×¨×•× ×ž×–×¨×— גרמניה הנחשבת למבשלה העתיקה ×‘×¢×•×œ× ×שר החלה לייצר בירה בשנת 1040. - -הבירה עשויה מתערובת של לתת שעורה ולתת חיטה. הבירה קלה חמצמצה ו×רומטית. - - - -בירת חיטה ×”×™× ×” בירה שבתהליך הבישול המיוחד שלה ×ž×•×¡×™×¤×™× ×œ×” חיטה ×•×©×ž×¨×™× ×‘×יכות הטובה ביותר ×•×ž×‘×“×œ×™× ×ת הבירה בתכונות הסנסוריות שלה ש×ותן ×ž×–×”×™× ×“×¨×š החושי×: - -×˜×¢× ×ž×™×•×—×“ ×¢× ×רומות וניחוחות ×¤×™×¨×•×ª×™×™× -ר×ש קצף ×חיד ומיוחד -בירה לבנה ומעוננת בעלת עכירות טבעית -×חוז ×לכוהול גבוה יחסית, 5.4% - - - -חבית - - - למה בירה מהחבית? - -בגלל הטע×: החשיפה הקצרה ×œ×—×•× ×‘×ª×”×œ×™×š הפסטור מש×ירה ×ת ×˜×¢× ×”×‘×™×¨×” קרוב מ×ד לטעמה המקורי. בנוסף, כתוצ××” מהמזיגה נוזל הבירה משחרר CO2 המשביח ×ת ×˜×¢× ×”×‘×™×¨×”. ×”×˜×¢× ×¤×—×•×ª מריר, יותר קליל ופחות מוגז. בירה מהחבית תמיד מוגשת בטמפרטורה הנכונה - -בגלל הטריות: מחזור החביות בשוק קצר ביותר ומרבית החביות נמזגות בתוך ×©×‘×•×¢×™×™× ×¢×“ חודש ×ž×™×•× ×”×ž×™×œ×•×™ כך שהבירה טרייה מ×ד. - - - -חומרי ×’×œ× - -חומרי ×”×’×œ× ×”×ž×©×ž×©×™× ×œ×™×™×¦×•×¨ בירה כוללי×: מי×, לתת, לתת קלוי, ×—×•×ž×¨×™× ×¢×ž×™×œ× ×™×™×, סוכר (לעתי×), כשות, שמרי×, חו×, CO2. - - - -×—×•×ž×¨×™× ×¢×ž×™×œ× ×™×™× ×•×¡×•×›×¨ - -עמילן ממקורות ×¦×ž×—×™×™× ××—×¨×™× ×ž×©×ž×© כחומר ×’×œ× × ×•×¡×£ לייצור בירה יחד ×¢× ×”×œ×ª×ª. במערב ×ירופה ×ž×©×ª×ž×©×™× ×‘×ª×™×¨×¡, במזרח ×ירופה נעשה שימוש בתירס ובניגריה ×•×‘×ž×¦×¨×™×™× ×¡×•×¨×’×•× ×”×•× ×”×¢×ž×™×œ×Ÿ שבשימוש. - -×‘×¡×•×’×™× ×ž×™×•×—×“×™× ×©×œ בירה ×ž×©×ª×ž×©×™× ×‘×—×™×˜×” (דוגמת בירה ווינשטפן). החיטה תורמת סמיכות וקצף בעיקר בבירות מסוג Ale. ניתן להוסיף סוכר ממקורות ×©×•× ×™× ×ך סוכר ×–×” ×ינו ×ª×•×¨× ×˜×¢× ×•×¦×‘×¢. תירס ו×ורז ×ž×©×ž×©×™× ×‘×™×™×¦×•×¨ בירות ×יכותיות, קלות וחזקות בעיקר מסוג Lager. - -חוק טוהר הבירה הגרמני משנת 1564 ×œ× ×ž×¨×©×” שימוש ×‘×—×•×ž×¨×™× ××—×¨×™× ×–×•×œ×ª לתת שעורה. ××•×œ× ×—×•×§ ×–×” ×ינו מחייב במדינות ×חרות. - - - -×—×™×™ מדף - - - ×—×™×™ מדף של בירה מתחלק לשלוש ×”×ריזות הקיימות בשוק. - -חבית: שישה ×—×•×“×©×™× ×ž×™×•× ×”×ž×™×œ×•×™ - -בקבוק: ×©× ×™× ×¢×©×¨ ×—×•×“×©×™× ×ž×™×•× ×”×ž×™×œ×•×™ - -פחית: ×©× ×™× ×¢×©×¨ ×—×•×“×©×™× ×ž×™×•× ×”×ž×™×œ×•×™ - - - -טובורג רד - - -בירה ×›×”×” מסוג בירה Lager. הבירה מכילה 5.2% ×לכוהול, צבעה עמוק וטעמה עשיר. - - - -טובורג גרין - -בירה בהירה, עדינה וטעימה מסוג בירה Lager. הבירה מכילה 4.6% ×לכוהול. - - - -טעימות בירה - ×ת הבירות ×˜×•×¢×ž×™× ×‘×˜×ž×¤×¨×˜×•×¨×” של 15 מע"צ ובטמפרטורה המומלצת שלהן ×›×שר כוס הטעימה שקופה ונקייה ובדומה לכוס היין, ×’× ×ž×¢×˜ מעוגלת בכדי שה×רומה ×œ× ×ª×‘×¨×—. - - - -טעימת בירה מזכירה במקצת טעימת יין: - -התרשמות ויזו×לית: ×ž×ª×‘×•× × ×™× ×‘×‘×™×¨×” ×•×‘×•×—× ×™× ×ת צבע, השקיפות, המר××” והקצף. - -הרחה: ×ž×¨×™×—×™× ×•×ž×ª×¨×©×ž×™× ×ž×”×רומות השונות. - -לגימה: ×˜×•×¢×ž×™× ×•×ž×’×œ×’×œ×™× ×ת הבירה בחלל הפה ×•×ž× ×™×—×™× ×œ×œ×©×•×Ÿ ×œ×˜×¢×•× ×ת קשת ×”×˜×¢×ž×™× ×ª×•×š כדי בליעתה. - - - -כוהל בנפח - - - ×חוז הכוהל בבירה ×ž×‘×•×˜× ×‘×™×—×™×“×•×ª נפח (מ"ל לליטר) - - - -כשות (Hops) - - - כשות הינו צמח מטפס הגדל ב×ירופה וזקוק לקור. בן דודו גדל ב×רץ כמטפס טפיל. ב×ירופה ב×רה"ב ובמדינות נוספות ×ž×’×“×œ×™× ×ותו במיוחד כחומר חשוב ליצור בירה. לכשות תפרחת קטנה בצבע ירוק ובצורת חרוט. בתחתית עלי הכותרת ×”×™×¨×•×§×™× ×ž×¦×•×™×•×ª בלוטות קטנות המייצרות חומצת ××œ×¤× ×”×™× ×”×—×•×ž×¨ הנותן ×ת ×”×˜×¢× ×”×ž×¨ לבירה, ×•×’× ×©×ž× ×™× ××ª×¨×™×™× ××¨×•×ž×˜×™×™× ×”×ª×•×¨×ž×™× ×’× ×רומה לבירה. - - - -×§×™×™×ž×™× ×–× ×™× ×©×•× ×™× ×©×œ כשות ולכל ×חד הריחות ×•×”×˜×¢×ž×™× ×©×œ×•. הברומ×סטר בוחר ×ת הכשות שמת×ימה לבירה שברצונו לייצר. - -לבד מ×רומה לכשות תכונה המעכבת גידול של חיידקי×. - -בעבר הוסיפו ×ת שיחי הכשות למיכל ההרתחה ××•×œ× ×›×™×•× ×¢× ×”×ª×¤×ª×—×•×ª התעשייה ×ž×•×¡×™×¤×™× ×›×•×¤×ª×™×•×ª העשויות מהתפרחת ×ו מיצוי מרוכז שלהן. - - - -לתת (Malt) - - - גרעיני שעורה שעברו תהליך הלתתה בבתי הלתתה מיוחדי×. העמילן שבלתת קל לפירוק לסוכר הדרוש ×œ×©×ž×¨×™× ×œ×ª×¡×™×¡×”. שלבי ייצור הלתת: השריית השעורה במי×, נביטה, קלייה וייבוש, ניפוי ו×חסון. - - - -לתת קלוי - - - לתת שתהליך הקלייה הסופי שלו מתבצע בטמפרטורה גבוהה במיוחד הגורמת להיווצרות צבע ×›×”×” ×•×˜×¢× ×§×œ×™×™×” ×ופייני. - - - -מ×לטי - - - בירה שחורה ×œ×œ× ×לכוהול. מיוצרת מלתת קלוי המקנה לה ×ת צבעה השחור ו×ת טעמה המיוחד. ××™× ×” מכילה ×לכוהול בזכות תהליך ייצור מיוחד השונה מייצור בירה רגילה. למ×לטי תכונות ברי×ותיות רבות ומגוונות: מ×לטי ×”×•× ×ž×©×§×” ×יזוטוני הנספג במהירות במערכת העיכול ונוזלי הגוף, מ×לטי מעשיר ×ת הגוף במגוון ×¡×•×›×¨×™× ×”×ž×ª×¤×¨×§×™× ×œ×ורך זמן וכן מכילה ×•×™×˜×ž×™× ×™× ×•×ž×™× ×¨×œ×™× ×”×ž×¡×™×™×¢×™× ×œ×ª×¤×§×•×“ מערכות הגוף. - - - -מילוי ×ספטי - - - - תהליך מילוי ייחודי של משקה לתוך ×”×ריזה בצורה המונעת ×–×™×”×•× ×”×ž×©×§×” ×”×ריזה ×ו הפקק, לקבלת ×ריזה סטרילית. - - - -מילוי קר - - - מילוי של משק×ות לתוך ××¨×™×–×ª× ×‘×˜×ž×¤×¨×˜×•×¨×” נמוכה. משק×ות ×ž×•×’×–×™× ×—×™×™×‘×™× ×œ×ž×œ× ×‘×˜×ž×¤×¨×˜×•×¨×” נמוכה כדי למנוע "בריחת" ×”×’×– במהלך המילוי. - - - -×ž×™× - - - ×ž×™× ×”× ×œ×›×ורה חומר ×’×œ× ×¤×©×•×˜ ביותר ×ך ×œ× ×›×š הדבר. יש חשיבות להרכב ×”×ž×™× ×•×œ×ž×•×ž×¡×™× ×”×ž×¦×•×™×™× ×‘×”×. - -×ž×™× ×¨×›×™×, ×”×ž×›×™×œ×™× ×›×ž×•×ª קטנה של סידן מת××™×ž×™× ×œ×™×¦×•×¨ בירות מסוג Lager ו-Pilsner (בירות של תסיסה עילית). העיר פילזן שבצ'×›×™×” ידועה בכל ×”×¢×•×œ× ×‘×ž×™× ×”×˜×•×‘×™× ×©×œ×” המת××™×ž×™× ×ž×ד ליצור בירות מסוג ×–×” (ומכ×ן ×’× ×”×©× Pilsner). - -×ž×™× ×§×©×™×, ×”×ž×›×™×œ×™× ×”×¨×‘×” סידן מת××™×ž×™× ×œ×™×¦×•×¨ הבירות מסוג Ale ו-Stout (בירות של תסיסה עילית הנפוצות ב××™×™× ×”×‘×¨×™×˜×™×™×). - - - -ערך ברי×ותי - לבירה ערך ברי×ותי בשני ×ª×—×•×ž×™× ×—×©×•×‘×™×: - -1. זירוז פעילות מערכת השתן והכליות בגוף ×”×ד×. - -2. מניעת מחלות בכל ×”×“× ×•×”×œ×‘. - - - -ערך קלורי - - - - בירה ××™× ×” משמינה יותר ממשקה קל רגיל וברוב ×”×ž×§×¨×™× ××£ מכילה פחות קלוריות. - - - -השוו×ת ערך קלורי של משק×ות ל-100 מ"ל משקה: - -בירה קרלסברג: 43 - -בירה טובורג גרין: 39 - -בירה מ×לטי: 35 - -בירה מ×לטי די×ט: 18 - -חלב 1% שומן: 41 - -חלב 3% שומן: 57 - -משק×ות ×§×œ×™× ×•×ž×™×¦×™×: 40-50 - -× ×§×˜×¨×™× ×©×•× ×™×: 45-55 - - - - - -ערך תזונתי - - - - בירה מיוצרת ×ž×—×•×ž×¨×™× ×˜×‘×¢×™×™× ×‘×œ×‘×“! ×ין בה ×—×•×ž×¨×™× ×ž×œ××›×•×ª×™×™× ×•×—×•×ž×¨×™× ×ž×©×ž×¨×™×. בירה מכילה ×ž×™× ×¨×œ×™× ×•×•×™×˜×ž×™× ×™× ×¨×‘×™× ×›×’×•×Ÿ ×שלגן, סידן ×ž×’× ×–×™×•× ×•×–×¨×—×Ÿ. ×›×•×œ× ×—×•×ž×¨×™× ×—×™×•× ×™×™× ×œ×’×•×£ ×”×ד×. - - - -הרכב תזונתי ל-100 מ"ל בירה - -קלוריות: 43 - -שומני×: 0 - -×—×œ×‘×•× ×™× (גר×): 0.1 - -פחמימות (גר×): 4 - -×לכוהול (גר×): 3.9 - - - -פסטור - - פסטור בירה ×‘×‘×§×‘×•×§×™× ×•×‘×¤×—×™×•×ª נועד לשמר ×ת הבירה לתקופת ×—×™×™ המדף שלה על-ידי השמדת כל המיקרו××•×¨×’× ×™×–×ž×™× ×”× ×ž×¦××™× ×‘×ריזה. תהליך הפסטור ×”×•×ž×¦× ×¢×œ-ידי לו××™ פסטר ועיקרו ×—×™×ž×•× ×”×‘×™×¨×” לטמפרטורה של 60-70 מעלות צלזיוס למשך מספר דקות. מכיוון ×©×—×•× ×¤×•×’×¢ ×‘×˜×¢× ×”×‘×™×¨×”, על ×”×—×™×ž×•× ×œ×”×™×•×ª קצר ככל ×”×פשר. - -פסטור בירה בבקבוקי×/פחיות מתבצע במנהרת פסטור מיוחדת על-ידי התזת ×ž×™× ×—×ž×™× ×¢×œ ×”×ריזות ל×חר המילוי והפיקוק. ×”×ž×™× ×ž×—×ž×ž×™× ×ת הבירה עד לפסטורה ול×חר מכן ×ž×§×¨×¨×™× ×ותה על-ידי התזת ×ž×™× ×§×¨×™×. - - - -פרוקטוז - - - -סוכר פירות - - - -צלילות - - - שקיפות הבירה. בגמר תהליך התסיסה הבירה עכורה בשל ×”×©×ž×¨×™× ×©×‘×”. ×”×©×ž×¨×™× ×ž×•×¤×¨×“×™× ×œ×§×‘×œ×ª בירה צלולה. - - - -קילקני - - - -בירה ×ירית מסוג Ale, עדינה מ×ד וקלה לשתיה. מבית גינס העולמית. צבעה ××“×•× ×¢×ž×•×§ ×•×”×™× ×ž×™×•×¦×¨×ª מ-100% מ×לט ×ירי משובח. טמפרטורת ההגשה שלה נמוכה (4-6 מעלות). מ×פייני הבירה ×”× ×ž×–×™×’×ª×” הייחודית ושילוב ×”×’×–×™×, חנקן ו-CO2 מעניק לבירה ר×ש קצף עדין הנשמר ל×ורך זמן. - - - -קצף -הקצף הינו תכונה חשובה של הבירה ×•×ª×•×¨× ×œ×ž×¨××” ולהנ××” ממנה. הקצף נוצר על ידי ×”×—×œ×‘×•× ×™× ×©×‘×‘×™×¨×” וגז ×”-CO2. - - - -קרלסברג -בירה בהירה ומשובחת ביותר מסוג בירה Lager. בעלת ×˜×¢× ×•×יכות ×ž×™×•×—×“×™× ×©×”×§× ×• לה ×©× ×¢×•×œ×ž×™ בשוק הבירות. מיוצרת עפ"×™ המסורת הדנית הידועה ומכילה 5.0% ×לכוהול. - - - -קרמל - - - סוכר שרוף המקנה למשק×ות צבע ×›×”×” ×•×˜×¢× ×™×™×—×•×“×™ (קרמלי) - - - -שמרי בירה - - - -×”×©×ž×¨×™× ×”× ××•×ª× ×ž×™×§×¨×•××•×¨×’× ×™×–×ž×™× ×”×ž×¡×•×’×œ×™× ×œ×”×ª×¡×™×¡ סוכר לגז ול×לכוהול. - -×”×©×ž×¨×™× ×ž×ª×¡×™×¡×™× ×ת הסוכר לצורך הפקת ×נרגיה ×œ×’×“×™×œ×ª× ×•×”×ª×¨×‘×•×ª×. ××•×œ× ×ª×•×š כדי תהליך התסיסה ×”× ×’× ×ž×™×™×¦×¨×™× ×•×ž×¤×¨×™×©×™× ×ž×ות רבות של ×—×•×ž×¨×™× ×”× ×•×ª× ×™× ×‘×™×—×“ ×ת ×”×˜×¢× ×”×ופייני לבירה. - -×™×©× × ×–× ×™× ×©×•× ×™× ×•×¨×‘×™× ×©×œ שמרי×. לכל מבשלה ×”×©×ž×¨×™× ×”×ž×™×•×—×“×™× ×©×œ×”. כל ×”×©×ž×¨×™× ×ž×©×ª×™×™×›×™× ×œ×ž×©×¤×—×ª ×©×ž×¨×™× ×”× ×§×¨×ת Saccharomyces על ×©×•× ×™×›×•×œ×ª× ×œ×”×ª×¡×™×¡ סוכר. - - - -במבשלות קרלסברג שבקופנהגן, דנמרק, פותחה לר×שונה בעול×, לפני ×› 150 שנה, שיטת "התרבית הנקיה" (Pure Culture) ×©×”×™× ×בן יסוד למיקרוביולוגיה המודרנית. השמר הר×שון שבודד בשיטה זו × ×§×¨× ×¢×œ כן Saccharomyces Carlsbergnesis ×•×”×•× ×”×©×ž×¨ המשמש עד ×”×™×•× ×œ×™×¦×•×¨ בירה קרלסברג ×‘×¢×•×œ× ×›×•×œ×• ×•×’× ×‘×ž×‘×©×œ×•×ª בירה ישר×ל בע"מ שב×שקלון. - - - -שעורה - -סוג של דגן ממנו ×¢×•×©×™× ×œ×ª×ª המשמש לייצור בירה. - - - -תסיסה עילית - -בסוג תסיסה ×–×” ×”×©×ž×¨×™× ×¢×•×œ×™× ×œ×¨×ש מיכל התסיסה בגמר התהליך. טמפרטורת התסיסה גבוהה בין 15-22 מעלות, משך התסיסה קצר בין 3-8 ×™×ž×™× ×•×רומת הבירה ×”×™× ×©×œ פירות. הבירות ממשפחה זו ×ž×§×•×¨× ×‘××™×™× ×”×‘×¨×™×˜×™×, ×נגליה, ×ירלנד וסקוטלנד וכן בירות מיוחדות מבלגיה, הולנד וגרמניה. סוגי בירות ×לו נקר××™× Ale ו-Stout. גינס וקילקני נמנות על הבירות המיוצרות מסוג תסיסה ×–×”. - - - -תסיסה תחתית - - - -בסוג תסיסה ×–×” ×”×©×ž×¨×™× ×©×•×§×¢×™× ×œ×ª×—×ª×™×ª מיכל התסיסה בגמר התהליך. טמפרטורת התסיסה נמוכה בין 5-15 מעלות, משך התסיסה ×רוך בין 2-12 שבועות ו×רומת הבירה ×”×™× ×©×œ פרחי×. בירות ×לה נפוצות ×‘×¢×•×œ× ×•×ž×§×•×¨×Ÿ בצ'×›×™×”, גרמניה, דנמרק והולנד. הבירות הנפוצות ממשפחה זו הן בירה ×”-Lager וה-Pilsner. בירות בהירות, קלות לשתיה ובעלות ×רומה קלה ונעימה. קרלסברג, טובורג רד וטובורג גרין נמנות על הבירות המיוצרות מסוג תסיסה ×–×”. - - diff -Nru clucene-core-0.9.21b/test/data/utf8text/japanese_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/japanese_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/japanese_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/japanese_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -見学 -1 ページ / 2 ページ -次㸠- - 7月22・23日を利用ã—ã¦ï¼ŒPlzen ã«ã„ã£ã¦ãã¾ã—ãŸï¼Žãƒ¡ã‚¤ãƒ³ã¯ã“ã®ãƒ“ールåšç‰©é¤¨ï¼†å·¥å ´è¦‹å­¦ï¼Žã¤ã„ã§ã«å‘³è¦‹ã‚‚.ã¨ã¦ã‚‚興味深ã„日をéŽã”ã™ã“ã¨ãŒå‡ºæ¥ã¾ã—ãŸï¼Ž - - 多ãã®æ–¹ãŒã”å­˜ã˜ã¨æ€ã„ã¾ã™ãŒï¼Œã“ã®Plzensky Prazdroj (プルゼーニュスキー・プラズドロイ)ã¯ï¼Œãƒ‰ã‚¤ãƒ„・ミュンヘンã‹ã‚‰ï¼‘842年ã«å°Žå…¥ã•ã‚ŒãŸä½Žæ¸©ä¸‹ã«ãŠã‘る「下é¢ç™ºé…µã€ã¨ã„ã†é†¸é€ æŠ€è¡“ãŒï¼Œã“ã®åœŸåœ°ã®éº¦ãƒ»ãƒ›ãƒƒãƒ—・水・風土ã¨ã†ã¾ã調和ã—,ã¾ãŸäººã€…ã®å¤§ããªåŠªåŠ›ã«ã‚ˆã£ã¦ã¾ã•ã«èŠ±é–‹ã„ãŸãã®å…ƒç¥–ã®ãƒ“ールã§ã™ï¼Žä»Šæ—¥ã€Œãƒ”ルスナービールã€ã¨å‘¼ã°ã‚Œã‚‹ãƒ“ールãŒï¼Œä¸–ç•Œã®å¤§ããªå‹¢åŠ›ã¨ãªã£ã¦ã„ã¾ã™ãŒï¼Œãã®ã€Œãƒ”ルスナーã€ã¨ã¯ã“ã®Plzen(プルゼーニュ)ã¨ã„ã†è¡—ã®ãƒ‰ã‚¤ãƒ„å,Pilsen(ピルゼン)ã®ï¼Œã¨ã„ã†æ„味ã§ã™ï¼Ž - - ãã®é‡åŽšãªï¼Œã—ã‹ã—爽やã‹ã§é£²ã¿è¶Šã—ã®ã„ã„ビールã¯ï¼Œé£²ã‚“ã äººã™ã¹ã¦ãŒä¸–界最高ã®ãƒ“ールã§ã‚ã‚‹ã¨ã„ã†ã§ã—ょã†ï¼Žéº¦ã¨æ°´ã¨ãƒ›ãƒƒãƒ—ã ã‘ã‹ã‚‰ç¹°ã‚Šå‡ºã•ã‚Œã‚‹ã“ã®å‘³ã¯æœ¬å½“ã«å¿˜ã‚Œã‚‰ã‚Œãªã„ã‚‚ã®ã§ã™ï¼Ž - - ã¡ãªã¿ã«ï¼Œã“ã®ãƒ“ール,特ã«ãƒãƒªãƒ³ã‚°åº¦ï¼ˆæœ€åˆã«ãƒ¢ãƒ«ãƒˆã‹ã‚‰ã¨ã‚‹éº¦æ±ã‚’æ°´ã§ã‚ã£ãŸã¨ãã®éº¦æ±æ¿ƒåº¦ï¼‰ãŒï¼‘ï¼’ï¼…ã®ã‚‚ã®ï¼ˆPrazdroj ã§ã¯ãã®ä¸‹ã¯ï¼‘ï¼ï¼…,一般ã«ï¼‘2%を越ãˆã‚‹ã‚‚ã®ã¯å°‘ãªã„)ã¯ï¼Œã®ã©ãŒæ¸‡ã„ãŸã‹ã‚‰ä¸€æ°—ã«é£²ã‚€ï¼Œã¨ã„ã†ã‚ˆã†ãªé£²ã¿æ–¹ã¯ã‚‚ã¯ã‚„出æ¥ãšï¼Œã‚€ã—ã‚パンã®ä»£ã‚ã‚Šã«å°‘ã—ãšã¤ã”ãã”ã飲む,ã¨ã„ã†ã®ãŒã¡ã‚‡ã†ã©ã„ã„よã†ã§ã™ï¼ŽãŸãã•ã‚“飲むã¨ã‚‚ã®ã™ã”ãã®ã©ãŒæ¸‡ãã®ã§ï¼Œã®ã©ã‚’潤ã™ã«ã¯ã‚€ã—ã‚良ããªã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.ã—ã‹ã—æ­´å²çš„ã«è¦‹ã‚‹ã¨ï¼Œã‚­ãƒªã‚¹ãƒˆæ•™ã§ã¯ã€Œãƒ“ールã¯æ¶²ä½“ã®ãƒ‘ンã€ã¨ã—ã¦é‡è¦ãªå½¹å‰²ã‚’ã—ã¦ã„ã¾ã™ï¼Žãƒ¯ã‚¤ãƒ³ã¯ã‚­ãƒªã‚¹ãƒˆã®è¡€ï¼Œãƒ‘ンã¯ã‚­ãƒªã‚¹ãƒˆã®è‚‰ï¼Œãƒ“ールã¯æ¶²ä½“ã®ãƒ‘ン,ã§ã™ï¼Žå®Ÿéš›ï¼Œä¿®é“院ãªã©ã§ã¯æ–­é£ŸæœŸé–“ã«æ°´ã®ä»£ã‚ã‚Šã®ãƒ“ールã§æ „養を補給ã—ã¦ã„ãŸã¨ã„ã†è©±ã‚‚ã‚り,時代ã«ã‚ˆã£ã¦ã¯é†¸é€ ã®è¨±å¯ãŒæ•™ä¼šé–¢ä¿‚ã ã‘ã«ä¸Žãˆã‚‰ã‚Œã¦ã„ãŸã‚Šï¼Œã¾ãŸæ•™ä¼šãŒå…許ã®äº¤ä»˜æ¨©ã‚’æŒã£ã¦ã„ãŸã‚Šï¼Œã¨ã„ã†ã‚‚ã‚ã‚Šã¾ã—ãŸï¼Ž - - 工場ã«è¡Œã£ã¦ã¿ã‚‹ã¨ï¼Œä¸€é¢ãƒ¢ãƒ«ãƒˆã‚’煮出ã—ã¦ã„る匂ã„ãŒã—ã¦ï¼Œã‚~ã‚,麦ã ã,ã¨ã„ã†æ„Ÿã˜ãŒã—ã¾ã™ï¼Žä¸–界中ã‹ã‚‰å¹´é–“5万人もã®äººãŒè¨ªã‚Œã‚‹ã¨ã„ã†ã“ã®ãƒ“ールåšç‰©é¤¨å…±ã€…,我々ビールã®ã¿ã«ã‚‚,ã¾ãŸãã†ã§ãªã„人ã«ã¨ã£ã¦ã‚‚大変興味深ã„ã‚‚ã®ã ã¨æ€ã„ã¾ã™ï¼Ž - -  - -ã“ã®ãƒšãƒ¼ã‚¸ã®å†™çœŸã‚‚,クリックã™ã‚‹ã¨å¤§ããªåŽŸç‰ˆãŒè¦‹ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ï¼Žã‚‚ã®ã™ã”ã大ãã„ã§ã™ãŒï¼Œè‰¯ã‹ã£ãŸã‚‰ãã¡ã‚‰ã‚‚ã”覧下ã•ã„. - - - - -ã“れ㌠Plzen 旧市街ã«ã‚る「ビール醸造åšç‰©é¤¨ã€ã§ã™ï¼Žæ˜”実際ã«ãƒ“ールã®é†¸é€ æ‰€ã§ã‚り,パブã¨ã—ã¦ä½¿ã‚ã‚ŒãŸã“ã¨ã‚‚ã‚る建物ã§ï¼Œãƒ“ールã®é†¸é€ ã®é“å…·ã‹ã‚‰æ˜”ã®è¡£è£…,ビアホールã®å†…装,ã¾ãŸåœ°ä¸‹ã«ã¯ãã®æ˜”氷を入れã¦å†·è”µåº«ã«ã—ã¦ã„ãŸè²¯è”µå€‰ã‚‚ã‚り,ã¨ã«ã‹ã見るã¨ã“ã‚ã¯ãŸãã•ã‚“ã‚ã‚Šã¾ã™ï¼Ž ã“れ㯠Plzensky Prazdroj (Pilsner Urquell) ã®ä¼šç¤¾ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã§é‹å–¶ã•ã‚Œã¦ã„ã¾ã™ï¼Žä¸­ã«ã¯ã„ã‚‹ã¨è§£èª¬æ›¸ã‚’貸ã—ã¦ãã‚Œã¾ã™ï¼Žæ—¥æœ¬èªžã®è§£èª¬æ›¸ã‚‚ã‚ã‚Šã¾ã™ï¼Ž - -ã“ã®å…¥ã‚Šå£ã‚’見るã¨ï¼Œã„ã‹ã«ã‚‚醸造所ã‹ãƒ‘ブã§ã™ã­ï¼Žä¸­ã«ã¯ Urquell ã®æ—¥æœ¬ã§ã®åºƒå‘Šã‚‚ã‚ã‚Šã¾ã™ï¼Žã¯ã£ãã‚Šã¯ã‚ã‹ã‚Šã¾ã›ã‚“ãŒï¼Œå°åˆ·ã®æ„Ÿã˜ã‹ã‚‰ã™ã‚‹ã¨ï¼‘96ï¼å¹´ä»£ã§ã¯ãªã„ã‹ã¨æ€ã„ã¾ã™ï¼Žæ—¥æœ¬ã§ã®å•†æ¨™ç™»éŒ²è¨¼ã¨ã„ã†ã“ã¨ã§ Urquell ã®å•†æ¨™ç™»éŒ²ã®è¨¼æ›¸ãŒã‚ã‚‹ã®ã§ã™ãŒï¼Œã¡ã‚‡ã£ã¨æ„味ã®åˆ†ã‹ã‚‰ãªã„ã¨ã“ã‚ãŒã‚ã£ã¦ï¼Œè‹¥å¹²è¬Žã§ã™ï¼Ž 残念ï¼ã€€Plzensky Prazdroj ã®å·¥å ´ã®æ­£é–€ï¼ˆHistorical gate)ã§ã™ï¼Žã¡ã‚‡ã†ã©æ”¹è£…工事中ã§è‚è…Žã®æ‰€ãŒè¦‹ã‚‰ã‚Œã¾ã›ã‚“ã§ã—ãŸï¼Žæ—§å¸‚è¡—ã®ä¸­å¿ƒã‹ã‚‰ï¼•åˆ†ãらã„ã®ã¨ã“ã‚ã§ã™ï¼Ž - -ã“ã® Gate ãŒå£ç”»ã«ã—ã¦ã‚ã‚Šã¾ã—ãŸï¼Ž ã“ã‚ŒãŒã‚ã®å·¥å ´ã§ã™ï¼Žå¤§ããªå†™çœŸã‚’ã”覧下ã•ã‚Œã°ï¼Œå·¦ã®æ–¹ã«ã€€Prazdroj ã¨æ›¸ã„ã¦ã‚ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ï¼Ž - -ã“ã‚Œã¯å‰ã®å†™çœŸã®å³å´ã«å½“ãŸã‚‹ã¨ã“ã‚ã§ã™ï¼Žä»Šã¯ä½¿ã£ã¦ã„ã‚‹ã®ã‹ã©ã†ã‹ã‚ã‹ã‚Šã¾ã›ã‚“ãŒï¼ŒGate を通ã£ã¦ã“ã®å±‹æ ¹ã®ä¸‹ã¾ã§é‰„é“ã®ç·šè·¯ãŒå¼•ã‹ã‚Œã¦ãŠã‚Šï¼Œæ˜”ã¯ãれを使ã£ã¦å„地ã¸è¼¸é€ã—ã¦ã„ãŸã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ï¼Ž 12時åŠé›†åˆã§ï¼Œãƒ“デオ上映ã®å¾Œå·¥å ´å†…ã®è¦‹å­¦ãƒ„アーãŒã‚ã‚Šã¾ã™ï¼Žæœ€åˆã«å¤§ããªãƒœãƒ¼ãƒ‰ã§ Prazdroj ã®è£½æ³•ã«ã¤ã„ã¦èª¬æ˜ŽãŒã‚り,ãã®å¾Œå·¥å ´å†…ã®è¦‹å­¦ï¼Œã¤ã„ã§åœ°ä¸‹ã®ç™ºé…µè²¯è”µç”¨ã®å€‰ã‚’見学ã§ã™ï¼Žã¨ã¦ã‚‚寒ã‹ã£ãŸï¼Žã§ã‚‚ãã®æ¸©åº¦ã®ä¸‹ã§ã‚ã®ã‚ˆã†ãªãƒªãƒƒãƒãªãƒ“ールãŒã§ãã‚ãŒã‚‹ã®ã§ã™ï¼Žã¾ã•ã‹ã„ã„ã¨ã„ã‚れるã¨ã¯æ€ã‚ãªã‹ã£ãŸã®ã§ï¼Œå…¨ç„¶å†™çœŸã‚’撮りã¾ã›ã‚“ã§ã—ãŸãŒï¼Œä»–ã®äººãŒèžã„ãŸã‚‰OKãŒå‡ºãŸã®ã§ã¤ã„ã§ã«ã¨ã£ã¦è¦‹ã¾ã—ãŸï¼Žã“ã®ä¸­ã§ã¡ã‚‡ã†ã©ãƒ“ールãŒç™ºé…µä¸­ã§ã™ï¼Žï¼Ž diff -Nru clucene-core-0.9.21b/test/data/utf8text/korean_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/korean_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/korean_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/korean_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -10 ì¼ë¶€í„° 7ì¼ê°„ ë…ì¼ -금 -융 -í¬ -커스 - - -세계를 정복할 한국기업 - - - -세계ì¼ë¥˜ë¥¼ 꿈꾸는 ì‚¼ì„±ì „ìž - -삼성전ìžëŠ” 1988 ë…„ 하드디스í¬ë“œë¼ì´ë¸Œ(HDD) ì‚¬ì—…ì„ ì‹œìž‘í•œ ì´ëž˜ 지난해 처ìŒìœ¼ë¡œ.. - - '세빗2005' 한국관 중소업체 눈부신 성과- 머니투ë°ì´ 03/16 16:07 - '세빗 2005' 한국공ë™ê´€ì— 참가한 ì¤‘ì†Œì—…ì²´ë“¤ì´ ì„ ì „ì„ ê±°ë’€ë‹¤. 지난 - 10 ì¼ë¶€í„° 7ì¼ê°„ ë…ì¼ - - - 하노버 '세빗 2005' ì—ì„œ í•œêµ­ê´€ì— ì°¸ê°€í•œ 중소 IT ë²¤ì²˜ì—…ì²´ë“¤ì€ ìž ì • 집계 ê²°ê³¼, 수출ìƒë‹´ì•¡ì€ 12 ì–µ 5000 만달러, ê³„ì•½ê¸ˆì•¡ì€ 2 ì–µ5000 만달러를 ë„˜ì€ ê²ƒìœ¼ë¡œ ... - - [세빗 2005] ê±°ì›ì‹œìŠ¤í…œ, 유럽 MP3 공략 본격화- ì•„ì´ë‰´ìŠ¤ 03/16 13:20 - <ì•„ì´ë‰´ìŠ¤24> ê±°ì›ì‹œìŠ¤í…œì´ 유럽 MP3 기기 시장 ê³µëžµì„ ë³¸ê²©í™”í•œë‹¤. 박남규 ê±°ì›ì‹œìŠ¤í…œ ì‚¬ìž¥ì€ 15ì¼(현지시간) ë…ì¼ í•˜ë…¸ë²„ì—ì„œ 열리고 있는 세빗 2005 전시회ì—ì„œ "ì´ë²ˆì²˜ëŸ¼ ì„¸ë¹—ì— ëŒ€í˜• 부스를 마련하기는 처ìŒ"ì´ë¼ë©° "ìœ ëŸ½ì— ì§€ì‚¬ë¥¼ 설립, ... - - LS그룹 "세계 ì¼ë¥˜ê¸°ì—… ë°œë‹ì›€"- 디지탈타임즈 03/15 11:07 - CIì„ í¬ì‹ 가져… 국내외 브랜드 í™ë³´ ì ê·¹ 나서 LS그룹(회장 구ìží™ã†êµ¬ LG전선그룹)ì€ 14ì¼ ê·¸ëžœë“œì¸í„°ì½˜í‹°ë„¨íƒˆí˜¸í…”ì—ì„œ 가진 CI(통합기업ì´ë¯¸ì§€)ì„ í¬ì‹ì„ 통해 LS브랜드를 ëŒ€ë‚´ì™¸ì— ê³µí¬í•˜ê³ , ì‚°ì—…ìš© 전기ã†ì „ìžã†ì†Œìž¬ë¶„ì•¼ì˜ ì„¸ê³„ì¼ë¥˜ê·¸ë£¹ìœ¼ë¡œ ë„... - - [세빗2005]ë ˆì¸ì½¤ã†ì‚¼ì„±ì „ìž, MP3P시장 넘버3 ê²½ìŸ- 디지탈타임즈 03/15 03:57 - 대형 단ë…부스 설치 ê³µê²©ì  ë§ˆì¼€íŒ… 올 íŒë§¤ëª©í‘œ ìƒí–¥â€¦ 수성ã†íƒˆí™˜ ì´ë ¥ì „ ë ˆì¸ì½¤ê³¼ 삼성전ìžê°€ MP3플레ì´ì–´ 세계시장 3위ìžë¦¬ë¥¼ 놓고 격ëŒí•œë‹¤.애플과 í¬ë¦¬ì—ì´í‹°ë¸Œê°€ 1, 2위를 차지하고 있는 ê°€ìš´ë° ë‘ íšŒì‚¬ëŠ” 올해 íŒë§¤ëŒ€ìˆ˜ 목표를 ëŒ€í­ ìƒí–¥ì¡°... - - 세빗ì—ì„œ 확ì¸í•œ 양극화- ì´ë°ì¼ë¦¬ 03/14 16:56 - 세계 최대 ê·œëª¨ì˜ ì •ë³´í†µì‹  ë°•ëžŒíšŒì¸ `세빗(CeBIT)2005` ê°€ 지난주부터 ë…ì¼ í•˜ë…¸ë²„ì—ì„œ 열리고 있습니다. 지난 1ì›” 미국 ë¼ìŠ¤ë² ê°€ìŠ¤ì—ì„œ 열린 CESì— ì´ì–´ ìš°ë¦¬ë‚˜ë¼ ê¸°ì—…ë“¤ì´ ì„¸ê³„ì¸ì˜ ì£¼ëª©ì„ ë°›ì•„ ITê°•êµ­ì˜ ìœ„ìƒì„ 재차 확ì¸í•˜ëŠ” ìžë¦¬ì˜€ìŠµë‹ˆë‹¤. 하... - - - - - LGì „ìž "2010ë…„ 세계톱3 기필코 달성"- 머니투ë°ì´ 03/14 15:41 - "올해 ë§¤ì¶œì„ 30ì¡°ì›ìœ¼ë¡œ 늘려 글로벌 톱5 ê¸°ì—…ì— ë“¤ê³  ì´ë¥¼ 바탕으로 2010ë…„ì—는 글로벌 톱3ê°€ ëœë‹¤" LGì „ìžì˜ 중장기 비젼ì´ë‹¤.막연하게 1등 ê¸°ì—…ì´ ë˜ê² ë‹¤ëŠ” ì„ ì–¸ì— ê·¸ì¹˜ëŠ” 게 ì•„ë‹ˆë¼ êµ¬ì²´ì ì¸ 시기와 목표를 제시하고 있다. ë„ì „ ì—­ì‹œ 만만치 ... - - ITì‚°ì—… 미래는 한국ì´ë‹¤ <美ì¼ê°„지>- 연합뉴스 03/14 09:38 - =실리콘 밸리 "í•œêµ­ì€ ë¯¸ëž˜ë¡œ 가는 타임머신" 워싱턴 박노황 íŠ¹íŒŒì› = ë¯¸êµ­ì˜ ì¼ê°„ 샌프란시스코 í¬ë¡œë‹ˆí´ì€ 13ì¼ '미래는 한국'ì´ë¼ëŠ” ì œí•˜ì˜ ê¸°ì‚¬ë¥¼ 통해 세계 ì œì¼ì˜ 광대역 ì¸í„°ë„·ë§ë° 휴대 ì „í™” ë³´ê¸‰ë¥ ì„ ëˆ„ë¦¬ê³  있는 IT ê°•êµ­ í•œêµ­ì˜ í˜„í™©ì„ ... - - ìžê¸°ë§Œì¡±ì— 빠진 소니, ì‚¼ì„±ì— íŒ¨ë°°- ë™ì•„ì¼ë³´ 03/12 09:09 - ‘한국 삼성전ìžì™€ ì¼ë³¸ 소니(Sony)ì˜ ì—­ì „.’ 뉴욕타임스는 10ì¼ 1997ë…„ ì´í›„ 7ë…„ ë§Œì— ì‚¼ì„±ì „ìžì™€ ì†Œë‹ˆì˜ ìœ„ìƒì´ 뒤바뀌었다고 전했다.1997ë…„ì€ ì‚¼ì„±ì „ìžê°€ í•œêµ­ì— ëª°ì•„ë‹¥ì¹œ 외환위기ì—ì„œ 벗어나기 위해 사투를 벌ì´ë˜ ë•Œì´ìž 7ì¼ ì†Œë‹ˆ 최고경ì˜... - - [기íšíŠ¹ì§‘ - 글로벌 리ë”기업Ⅲ]LG필립스LCD- 헤럴드경제 03/11 11:41 - ì•žì„  투ìžã†ê¸°ìˆ â€¦LCD 최강ìžë¡œ 지난 2004ë…„ 7ì›”, LG필립스LCD는 한국 기업으로는 최초로 한국과 미국 ì¦ì‹œ ë™ì‹œ ìƒìž¥ì— 성공했다.ì´ëŠ” 남들보다 한발 ì•žì„  ì ê¸° 투ìžì™€ 기술개발로 세계 TFT-LCD 업계를 ì´ëŒì–´ì˜¨ 리ë”ë¡œì„œì˜ ê¸°ì—…ê°€ì¹˜ë¥¼ 다시 한번 ... - - [기íšíŠ¹ì§‘ - 글로벌 리ë”기업Ⅰ] ì¼ë“±ë§Œì´ 산다- 헤럴드경제 03/11 11:41 - 세계 ì´ˆì¼ë¥˜ ê¸°ì—…ìœ¼ë¡œì˜ ë„ì•½ì„ ìœ„í•œ 글로벌 ê²½ì˜ì€ ì´ë¯¸ ëŒ€ê¸°ì—…ë“¤ì˜ ì„ íƒì´ ì•„ë‹Œ 필수로 ìžë¦¬ìž¡ì•˜ë‹¤.êµ­ë‚´ ëŒ€ê¸°ì—…ë“¤ë„ ê¸€ë¡œë²Œ ê²½ì˜ì— 박차를 가해 ì´ì   글로벌 ë¦¬ë” ê¸°ì—…ìœ¼ë¡œ ìžë¦¬ë§¤ê¹€í•˜ê³  있거나 ìžë¦¬ë¥¼ 굳혀가고 있는 ê¸°ì—…ë“¤ì´ ìƒë‹¹ìˆ˜ì— ì´ë¥¸ë‹¤.... diff -Nru clucene-core-0.9.21b/test/data/utf8text/polish_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/polish_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/polish_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/polish_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -spółka -Fermentacja to proces, w wyniku którego wytworzona w warzelni brzeczka staje siÄ™ piwem. Do ochÅ‚odzonej brzeczki dodawane sÄ… drożdże, które zamieniajÄ… cukier w dwutlenek wÄ™gla i alkohol. Oprócz tego drożdże formujÄ… tysiÄ…ce innych komponentów, które podczas fermentacji nadajÄ… piwu okreÅ›lony smak. - - -Proces fermentacji prowadzimy w ogromnych, cylindrycznych, nowoczesnych zbiornikach fermentacyjnych zwanych tankofermentorami. NajwiÄ™ksze z nich mogÄ… pomieÅ›cić po 3 600 hektolitrów piwa czyli 720 000 półlitrowych butelek np. piwa Frater. - -W celu zapewnienia optymalnych temperatur dla procesu fermentacji tanki muszÄ… być chÅ‚odzone. Po procesie fermentacji piwo zwane "piwem mÅ‚odym" musi otrzymać swój peÅ‚ny smak. Odbywa siÄ™ to podczas nastÄ™pnego cyklu produkcyjnego, jakim jest leżakowanie (dojrzewanie) w temperaturach minusowych. - -CaÅ‚y proces fermentacji i dojrzewania zajmuje okoÅ‚o dwóch - trzech tygodni. - - - - -drożdży -spółka - -3 marca 2004 roku Browar Belgia i spółka Dominium, reprezentujÄ…ca Opactwo o.o. Cystersów w Szczyrzycu, podpisali kontrakt na produkcjÄ™ piwa. Umowa jest zwieÅ„czeniem kilkuletnich dziaÅ‚aÅ„ obu stron, zmierzajÄ…cych do wykorzystania unikalnej receptury. Wprowadzenie piwa Frater, warzonego wedÅ‚ug starego przepisu oznacza kontynuacjÄ™ kulturowego dziedzictwa klasztoru. Tradycyjna, wielowiekowa receptura dajÄ…ca podstawy unikalnego piwa, zostaÅ‚a poÅ‚Ä…czona z nowoczesnÄ… technologiÄ…. - - - - - - - -Piwo warzone przez cystersów ze Szczyrzyca ma wielowiekowÄ… tradycjÄ™. Lata praktyki i wnikliwych obserwacji pozwoliÅ‚y zakonnikom stworzyć niepowtarzalnÄ… recepturÄ™, bÄ™dÄ…cÄ… idealnym poÅ‚Ä…czeniem czterech skÅ‚adników (sÅ‚odu, wody, chmielu i drożdży). ZostaÅ‚a ona przywrócona do życia w postaci Fratera, a poprzez wykorzystani - - - - - - -Jak wskazujÄ… zachowane dokumenty, browar w Szczyrzycu powstaÅ‚ w 1623 roku i jest jednym z najstarszych browarów w Polsce. Wedle starych kronik od poczÄ…tku XVII wieku mnisi w Szczyrzycu produkowali napój nazywany "cerewizjÄ…", robiony z palonego ziarna, cykorii, wody i chmielu. Cerewizja zawieraÅ‚a do 1 % alkoholu i byÅ‚a pita zamiast kawy i herbaty, chÅ‚odzÄ…c gardÅ‚a spragnionych rolników i mnichów pracujÄ…cych na terenach należących do opactwa. Mury w klasztorze postawiono w 1824 r., wczeÅ›niej zabudowania byÅ‚y drewniane. - - -Do 1948 r. caÅ‚a produkcja prowadzona byÅ‚a rÄ™cznie, co pozwalaÅ‚o rozlewać rocznie 250 tys. hektolitrów zÅ‚ocistego napoju. Przez ponad sto lat piwo leżakujÄ…ce w beczkach chÅ‚odzono potężnymi blokami lodowymi wycinanymi zimÄ… z pobliskiego stawu. Lód nie roztapiaÅ‚ siÄ™ nawet latem, bo w podziemiach browaru przez caÅ‚y rok temperatura nie przekraczaÅ‚a 2 stopni C. - -Najlepsze czasy browaru przypadajÄ… na okres miÄ™dzy 1925 a 1945 rokiem. W 1925 roku Eugeniusz Czerny wydzierżawiÅ‚ browar. Warzono wówczas piwo "ZÅ‚oty zdrój" sÅ‚ynÄ…ce z wyjÄ…tkowego smaku i rozsÅ‚awione sloganem "Mocne jak gÅ‚os kuryera, sÅ‚odkie jak gÅ‚os Kiepury". ZachowaÅ‚o siÄ™ wiele pamiÄ…tek z tego okresu jak specjalne kufle z pokrywkami i etykiety. Można je obejrzeć w przyklasztornym muzeum. Czerny kontynuowaÅ‚ produkcjÄ™ do koÅ„ca II wojny Å›wiatowej. W 1939 r. zakÅ‚ad przejÄ™li Niemcy, pozwalajÄ…c na kontynuowanie nadal produkcji pod okiem Czernego. -W 1951 roku wiÄ™kszość majÄ…tku browaru przejęło paÅ„stwo. Wówczas byÅ‚ to jedyny klasztorny browar miÄ™dzy ÅabÄ… a WÅ‚adywostokiem. - - -W latach powojennych browar podupadÅ‚. Piwo, sprzedawane pod najróżniejszymi wymyÅ›lnymi nazwami ("Czarny Mnich", "Pils Klasztorny", "Eliksir", "Dama Pik", "Gryf"), nie cieszyÅ‚o siÄ™ uznaniem smakoszy. Piwo produkowane w Szczyrzycu, można byÅ‚o kupić tylko w okolicznych miejscowoÅ›ciach: Limanowej, MyÅ›lenicach, Rabce. W 1993 r. Opactwo Ojców Cystersów odzyskaÅ‚o browar i kontynuowaÅ‚o produkcjÄ™ piwa. Pomieszczenia zakÅ‚adu, choć nie byÅ‚y zdewastowane, wymagaÅ‚y gruntownego remontu. Podobnie jak i urzÄ…dzenia. Nie daÅ‚o siÄ™ na nich produkować dobrej jakoÅ›ci piwa, a szczególnie tego, jakie byÅ‚o warzone w przeszÅ‚oÅ›ci. Opactwo, nie chcÄ…c firmować swoim wizerunkiem tak zÅ‚ej jakoÅ›ci produktu, nie posiadajÄ…c Å›rodków na remont urzÄ…dzeÅ„ i obiektu, postanowiÅ‚o zaprzestać produkcji. W 1996 r. browar, po 373 (!) latach nieprzerwanej pracy, zakoÅ„czyÅ‚ produkcjÄ™ piwa, a wkrótce potem zostaÅ‚ zamkniÄ™ty. - - - - - - -Piwo jest jednym z najstarszych napojów znanych ludzkoÅ›ci. Warzono je już w starożytnym Egipcie. Pierwsze piwa o niewielkiej zawartoÅ›ci alkoholu przyrzÄ…dzano z wieloma dodatkami, a ich głównym przeznaczeniem byÅ‚o gaszenie pragnienia. -Napój ten nierozerwalnie wiąże siÄ™ z tradycjami religijnymi. W starożytnym Egipcie byÅ‚ warzony przez kapÅ‚anów, a w Å›redniowiecznej Europie przez mnichów zakonnych. Od XI wieku piwo byÅ‚o warzone przez setki mnichów z caÅ‚ego Å›wiata. W Polsce warzelnictwo na dużą skalÄ™ zapoczÄ…tkowali cystersi w XIII w. -W Europie wielkim powodzeniem cieszÄ… siÄ™ od dziesiÄ™cioleci tzw. piwa klasztorne. W wielu zakonach zaÅ‚ożonych w Å›redniowieczu mnisi instalowali warzelnie, w których produkowali piwo wedÅ‚ug wÅ‚asnych receptur cieszÄ…ce siÄ™ powodzeniem. Niektóre po wielu latach dziaÅ‚ania z powodu problemów finansowych oddawaÅ‚y licencjÄ™ innym, nie klasztornym browarom, i w ten sposób "religijne" piwo trafiÅ‚o na komercyjny rynek. -Najbardziej znane marki klasztorne to Leffe, Grimbergen i Steenbrugge (współpracujÄ…cy z Palm Breweries). - - - - - - - - -Chwila, na którÄ… czekasz przez caÅ‚y dzieÅ„. Ciche westchnienie, towarzyszÄ…ce otwarciu chÅ‚odnej butelki. GÅ‚Ä™boki, zÅ‚ocisty kolor, przyjemny, naturalny aromat, a już po chwili lekki, szlachetny smak. Na tÄ™ chwilÄ™ warto byÅ‚o czekać. - -Frater. Piwo, którego duch wywodzi siÄ™ z gÅ‚Ä™bi cysterskich manuskryptów, a charakter nadaje mu współczesne pojmowanie szlachetnej sztuki warzenia. -W poczÄ…tkach minionego milennium na ziemie polskie przybyli z zachodu pierwsi mnisi. WÅ›ród rozlicznych praktykowanych w zakonach nauk i sztuk poczesne miejsce zajmowaÅ‚a sztuka warzenia piwa. Wraz z zakapturzonymi braćmi przybyÅ‚ do Polski ten znakomity, zÅ‚ocisty napój oraz pnÄ…ce siÄ™ po zakonnych murach szlachetne odmiany chmielu. -W XIII wieku w malowniczej podbeskidzkiej miejscowoÅ›ci Szczyrzyc powstaÅ‚o cysterskie opactwo. Zgodnie z reguÅ‚Ä… część czasu mnisi poÅ›wiÄ™cali na wytężonÄ… pracÄ™, której efektem byÅ‚o sÅ‚ynÄ…ce z niezrównanego smaku, starannie warzone zÅ‚ociste piwo. MÄ…drość gromadzona przez stulecia pozwoliÅ‚a stworzyć szlachetny, zÅ‚ocisty napój, który prócz barwy, smaku iaromatu prawdziwego pilsnera, ma również duszÄ™. TajemnicÄ™, którÄ… odkrywasz z każdym jego Å‚ykiem. Spróbuj w peÅ‚ni docenić tÄ™ chwilÄ™ prawdziwej, peÅ‚nej, gÅ‚Ä™bokiej przyjemnoÅ›ci. - diff -Nru clucene-core-0.9.21b/test/data/utf8text/russian_utf8.txt clucene-core-2.3.3.4/test/data/utf8text/russian_utf8.txt --- clucene-core-0.9.21b/test/data/utf8text/russian_utf8.txt 2008-10-23 17:44:31.000000000 +0000 +++ clucene-core-2.3.3.4/test/data/utf8text/russian_utf8.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -Великие - -тайны наших любимцев - -ИÑточник: ПРÐВДÐ.Ру -ПоÑтоÑнный адреÑ: http://www.pravda.ru/science/2004/6/20/55/18599_animals.html - -ЧудÑÑ‚ не только люди, но и домашние питомцы. Мы решили пополнить «каталог иÑторий» о Ñтранных выходках кошек, Ñобак, птичек и другой живноÑти, обитающей по ÑоÑедÑтву Ñ Ñ‡ÐµÐ»Ð¾Ð²ÐµÑ‡ÐµÑтвом - -Когда зоопÑихологов проÑÑÑ‚ объÑÑнить ÑтранноÑти в поведении животных или их неожиданно фантаÑтичеÑкую прозорливоÑÑ‚ÑŒ, они чеÑтно признаютÑÑ, что не в Ñилах дать разумное иÑтолкование даже Ñравнительно чаÑто вÑтречающимÑÑ Ð¸ опиÑанным в ÑоответÑтвующей литературе отклонениÑм в поведении домашних животных. - diff -Nru clucene-core-0.9.21b/test/debug/Makefile.am clucene-core-2.3.3.4/test/debug/Makefile.am --- clucene-core-0.9.21b/test/debug/Makefile.am 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/debug/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -test_debugdir = $(tstsrcdir)/debug - -cl_test_SOURCES += $(test_debugdir)/TestError.cpp diff -Nru clucene-core-0.9.21b/test/debug/TestError.cpp clucene-core-2.3.3.4/test/debug/TestError.cpp --- clucene-core-0.9.21b/test/debug/TestError.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/debug/TestError.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - - void testError(CuTest *tc){ - char* msg = "test"; - CLuceneError err(0,msg,false); - CLuceneError err2 = err; - CLuceneError* err3 = &err; - CuAssert(tc,_T("Error did not copy properly"),err.what()!=err2.what()); - CuAssert(tc,_T("Error values did not correspond"),strcmp(err.what(),err2.what())==0); - - IndexReader* reader = NULL; - try{ - RAMDirectory dir; - reader = IndexReader::open(&dir,true); - }catch(CLuceneError&){ - _CLDELETE(reader); - }catch(...){ - _CLDELETE(reader); - CuAssert(tc,_T("Error did not catch properly"),false); - } - } - - -CuSuite *testdebug(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Debug Test")); - - SUITE_ADD_TEST(suite, testError); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/document/Makefile.am clucene-core-2.3.3.4/test/document/Makefile.am --- clucene-core-0.9.21b/test/document/Makefile.am 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/document/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -test_docdir = $(tstsrcdir)/document - -cl_test_SOURCES += $(test_docdir)/TestDocument.cpp diff -Nru clucene-core-0.9.21b/test/document/TestDocument.cpp clucene-core-2.3.3.4/test/document/TestDocument.cpp --- clucene-core-0.9.21b/test/document/TestDocument.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/document/TestDocument.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - - - void TestBinaryDocument(CuTest *tc){ - char factbook[1024]; - strcpy(factbook, clucene_data_location); - strcat(factbook, "/reuters-21578/feldman-cia-worldfactbook-data.txt"); - CuAssert(tc,_T("Factbook file does not exist"),Misc::dir_Exists(factbook)); - - Document doc; - Field* f; - const char* _as; - const char* _as2; - const TCHAR* _ts; - jstreams::StreamBase* strm; - RAMDirectory ram; - - const char* areaderString = "a string reader field"; - const TCHAR* treaderString = _T("a string reader field"); - int readerStringLen = strlen(areaderString); - - SimpleAnalyzer an; - IndexWriter writer(&ram,&an,true); //no analyzer needed since we are not indexing... - - //use binary utf8 - doc.add( *_CLNEW Field(_T("utf8Field"), new jstreams::StringReader(areaderString), - Field::TERMVECTOR_NO | Field::STORE_YES | Field::INDEX_NO) ); - writer.addDocument(&doc); - doc.clear(); - - //use reader - doc.add( *_CLNEW Field(_T("readerField"),_CLNEW StringReader (treaderString), - Field::TERMVECTOR_NO | Field::STORE_YES | Field::INDEX_NO) ); - writer.addDocument(&doc); - doc.clear(); - - //done adding documents, now try and read them back - writer.optimize(); - - //use big file - doc.add( *_CLNEW Field(_T("fileField"), new jstreams::FileInputStream(factbook), - Field::TERMVECTOR_NO | Field::STORE_YES | Field::INDEX_NO) ); - writer.addDocument(&doc); - doc.clear(); - - //another optimise... - writer.optimize(); - writer.close(); - - IndexReader* reader = IndexReader::open(&ram); - - //now check binary stream - reader->document(0, &doc); - f = doc.getField(_T("utf8Field")); - strm = f->streamValue(); - - for ( int i=0;iread(_as,1,1)==1); - CLUCENE_ASSERT(*_as==areaderString[i]); - } - CLUCENE_ASSERT(strm->read(_as,1,1)==-1); - doc.clear(); - - - //and check reader stream - reader->document(1, &doc); - f = doc.getField(_T("readerField")); - _ts = f->stringValue(); - CLUCENE_ASSERT(_tcscmp(treaderString,_ts)==0); - doc.clear(); - - - //now check file stream - reader->document(2, &doc); - f = doc.getField(_T("fileField")); - strm = f->streamValue(); - jstreams::FileInputStream fbStream(factbook); - - do{ - int32_t rd = fbStream.read(_as2,1,1); - if ( rd == -1 ) - break; - CLUCENE_ASSERT(rd==1); - CLUCENE_ASSERT(strm->read(_as,1,1)==1); - CLUCENE_ASSERT(*_as==*_as2); - }while(true); - CLUCENE_ASSERT(strm->read(_as,1,1)==-1); - doc.clear(); - - - - - reader->close(); - _CLDELETE(reader); - } - -CuSuite *testdocument(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Document Test")); - - SUITE_ADD_TEST(suite, TestBinaryDocument); - return suite; -} diff -Nru clucene-core-0.9.21b/test/index/Makefile.am clucene-core-2.3.3.4/test/index/Makefile.am --- clucene-core-0.9.21b/test/index/Makefile.am 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/index/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -test_indexdir = $(tstsrcdir)/index - -cl_test_SOURCES += $(test_indexdir)/TestHighFreqTerms.cpp -cl_test_SOURCES += $(test_indexdir)/TestIndexWriter.cpp -cl_test_SOURCES += $(test_indexdir)/TestUtf8.cpp -cl_test_SOURCES += $(test_indexdir)/TestReuters.cpp diff -Nru clucene-core-0.9.21b/test/index/TestHighFreqTerms.cpp clucene-core-2.3.3.4/test/index/TestHighFreqTerms.cpp --- clucene-core-0.9.21b/test/index/TestHighFreqTerms.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/index/TestHighFreqTerms.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - - class TestTermInfo: LUCENE_BASE { - public: - int32_t docFreq; - Term* term; - - TestTermInfo(Term* t, int32_t df) { - term = _CL_POINTER(t); - docFreq = df; - } - ~TestTermInfo(){ - _CLDECDELETE(term); - } - }; - - class TermInfoQueue: public PriorityQueue > { - public: - TermInfoQueue(int32_t size) { - initialize(size,true); - } - bool lessThan(TestTermInfo* A, TestTermInfo* B) { - return A->docFreq < B->docFreq; - - } - }; - - void _TestHighFreqTerms(const char* index, size_t numTerms) { - uint64_t start = Misc::currentTimeMillis(); - - IndexReader* reader = IndexReader::open(index); - - TermInfoQueue* tiq = _CLNEW TermInfoQueue(100); - TermEnum* terms = reader->terms(); - int32_t c=0; - int32_t minFreq = 0; - while (terms->next()) { - if (terms->docFreq() > minFreq) { - Term* term = terms->term(false); - tiq->put(_CLNEW TestTermInfo(term, terms->docFreq())); - c++; - if (tiq->size() >= numTerms) { // if tiq overfull - TestTermInfo* tti=tiq->pop(); - _CLLDELETE(tti); // remove lowest in tiq - c--; - minFreq = ((TestTermInfo*)tiq->top())->docFreq; // reset minFreq - } - } - } - - while (tiq->size() != 0) { - TestTermInfo* termInfo = (TestTermInfo*)tiq->pop(); - _CLLDELETE(termInfo); - c--; - } - - terms->close(); - _CLDELETE(terms); - _CLDELETE(tiq); - - reader->close(); - _CLDELETE( reader ); - - //CuMessageA(tc,"%d milliseconds\n",Misc::currentTimeMillis()-start);; - } - void TestHighFreqTerms(CuTest *tc){ - char loc[1024]; - strcpy(loc, clucene_data_location); - strcat(loc, "/reuters-21578-index"); - - CuAssert(tc,_T("Index does not exist"),Misc::dir_Exists(loc)); - _TestHighFreqTerms(loc,100); - } - -CuSuite *testhighfreq(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene High Frequencies Test")); - - SUITE_ADD_TEST(suite, TestHighFreqTerms); - return suite; -} diff -Nru clucene-core-0.9.21b/test/index/TestIndexWriter.cpp clucene-core-2.3.3.4/test/index/TestIndexWriter.cpp --- clucene-core-0.9.21b/test/index/TestIndexWriter.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/index/TestIndexWriter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - -//checks that adding more than the min_merge value goes ok... -//checks for a mem leak that used to occur -void testIWmergeSegments1(CuTest *tc){ - RAMDirectory ram; - SimpleAnalyzer a; - IndexWriter ndx2(&ram,&a,true); - ndx2.close(); //test immediate closing bug reported - - IndexWriter ndx(&ram,&a,false); - ndx.setUseCompoundFile(false); - ndx.setMergeFactor(2); - ndx.setMinMergeDocs(1); - TCHAR fld[1000]; - for ( int i=0;i<1000;i++ ){ - English::IntToEnglish(i,fld,1000); - - Document doc; - doc.add ( *Field::Text(_T("field"),fld) ); - ndx.addDocument(&doc); - } - ndx.optimize(); //optimize so we can read terminfosreader with segmentreader - ndx.close(); - - //test the ram loading - RAMDirectory ram2(&ram); - IndexReader* reader2 = IndexReader::open(&ram2); - SegmentReader* segreader = (SegmentReader*)reader2; - Term* term = _CLNEW Term(_T("field"),fld); - TermEnum* en = reader2->terms(term); - CLUCENE_ASSERT(en->next()); - _CLDELETE(en); - _CLDECDELETE(term); - _CLDELETE(reader2); -} -CuSuite *testindexwriter(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene IndexWriter Test")); - SUITE_ADD_TEST(suite, testIWmergeSegments1); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/index/TestReuters.cpp clucene-core-2.3.3.4/test/index/TestReuters.cpp --- clucene-core-0.9.21b/test/index/TestReuters.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/index/TestReuters.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,280 +0,0 @@ -#include "test.h" -#include "CLucene/util/dirent.h" -#include "CLucene/util/Reader.h" - -CL_NS_USE(util) - - //an extremelly simple analyser. this eliminates differences - //caused by differences in character classifications functions - class ReutersTokenizer:public CharTokenizer { - public: - // Construct a new LetterTokenizer. - ReutersTokenizer(CL_NS(util)::Reader* in): - CharTokenizer(in) {} - - ~ReutersTokenizer(){} - protected: - bool isTokenChar(const TCHAR c) const{ - if ( c == ' ' || c == '\t' || - c == '-' || c == '.' || - c == '\n' || c == '\r' || - c == ',' || c == '<' || - c == '>' || c<=9){ - return false; - }else - return true; - } - TCHAR normalize(const TCHAR c) const{ - return c; - } - }; - - class ReutersAnalyzer: public Analyzer { - public: - TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader){ - return _CLNEW ReutersTokenizer(reader); - } - ~ReutersAnalyzer(){} - }; - - - char reuters_fsdirectory[CL_MAX_PATH]; - bool reuters_ready = false; - - char reuters_srcdirectory[1024]; - char reuters_origdirectory[1024]; - - //indexes the reuters-21578 data. - void testReuters(CuTest *tc) { - strcpy(reuters_srcdirectory, clucene_data_location); - strcat(reuters_srcdirectory, "/reuters-21578"); - CuAssert(tc,_T("Data does not exist"),Misc::dir_Exists(reuters_srcdirectory)); - - strcpy(reuters_origdirectory, clucene_data_location); - strcat(reuters_origdirectory, "/reuters-21578-index"); - CuAssert(tc,_T("Index does not exist"),Misc::dir_Exists(reuters_origdirectory)); - - FSDirectory* fsdir = FSDirectory::getDirectory(reuters_fsdirectory,true); - ReutersAnalyzer a; - - IndexWriter writer(fsdir,&a,true); - writer.setUseCompoundFile(false); - writer.setMaxFieldLength(10000); - DIR* srcdir = opendir(reuters_srcdirectory); - struct dirent* fl = readdir(srcdir); - struct fileStat buf; - char tmppath[CL_MAX_DIR]; - strncpy(tmppath,reuters_srcdirectory,CL_MAX_DIR); - strcat(tmppath,PATH_DELIMITERA); - char* tmppathP = tmppath + strlen(tmppath); - TCHAR tpath[CL_MAX_PATH]; - - while ( fl != NULL ){ - strcpy(tmppathP,fl->d_name); - STRCPY_AtoT(tpath,fl->d_name,CL_MAX_PATH); - fileStat(tmppath,&buf); - if ( buf.st_mode & S_IFREG){ - Document* doc = _CLNEW Document; - doc->add(*Field::Text(_T("path"),tpath)); - doc->add(*Field::Text(_T("contents"), _CLNEW FileReader(tmppath, "ASCII") )); - - writer.addDocument( doc ); - _CLDELETE(doc); - } - fl = readdir(srcdir); - } - closedir(srcdir); - - writer.close(); - fsdir->close(); - _CLDECDELETE(fsdir); - - //note: for those comparing 0.9.16 to later, the optimize() has been removed so - //we can do certain tests with the multi-* classes (reader,etc) - //performance will naturally be worse - - reuters_ready = true; - } - - void testByteForByte(CuTest* tc){ - CLUCENE_ASSERT(reuters_ready); - - char tmppath[CL_MAX_DIR]; - - strcpy(tmppath,reuters_origdirectory); - strcat(tmppath,"/_z.cfs"); - FILE* f1 = fopen(tmppath,"rb"); - CLUCENE_ASSERT(f1!=NULL); - - strcpy(tmppath,reuters_fsdirectory); - strcat(tmppath,"/_z.cfs"); - FILE* f2 = fopen(tmppath,"rb"); - CLUCENE_ASSERT(f2!=NULL); - - uint8_t buf1[1024]; - uint8_t buf2[1024]; - - int s1,s2; - - while ( true){ - s1 = fread(buf1,sizeof(uint8_t),1024,f1); - s2 = fread(buf2,sizeof(uint8_t),1024,f2); - CuAssert(tc,_T("comparison yielded different lengths"),s1==s2); - if ( s1 == 0 ) - break; - - for ( int i=0;i<1024;i++ ) - CuAssert(tc,_T("comparison with original failed"),buf1[i]==buf2[i]); - } - - fclose(f1); - fclose(f2); - } - - void testBySection(CuTest* tc){ - IndexReader* reader1 = IndexReader::open(reuters_origdirectory); - IndexReader* reader2 = IndexReader::open(reuters_fsdirectory); - - //misc - CuAssertIntEquals(tc,_T("reader maxDoc not equal"), reader1->maxDoc(), reader2->maxDoc()); - CuAssertIntEquals(tc,_T("reader numDocs not equal"), reader1->numDocs(), reader2->numDocs()); - - - //test field names - StringArrayWithDeletor fn1; - StringArrayWithDeletor fn2; - reader1->getFieldNames(IndexReader::ALL, fn1); - reader2->getFieldNames(IndexReader::ALL, fn2); - - //make sure field length is the same - int fn1count = fn1.size(); - int fn2count = fn2.size(); - CuAssertIntEquals(tc, _T("reader fieldnames count not equal"), fn1count, fn2count ); - - - for (int n=0;nnorms(fn1[n]); - uint8_t* norms2 = reader2->norms(fn1[n]); - if ( norms1 != NULL ){ - CLUCENE_ASSERT(norms2 != NULL); - for ( int i=0;imaxDoc();i++ ){ - int diff = norms1[i]-norms2[i]; - if ( diff < 0 ) - diff *= -1; - if ( diff > 16 ){ - TCHAR tmp[1024]; - _sntprintf(tmp,1024,_T("Norms are off by more than the threshold! %d, should be %d"), norms2[i], norms1[i]); - CuAssert(tc,tmp,false); - } - } - }else - CLUCENE_ASSERT(norms2 == NULL); - //////////////////// - } - fn1.clear(); //save memory - fn2.clear(); //save memory - - - //test Terms - TermEnum* te1 = reader1->terms(); - TermEnum* te2 = reader2->terms(); - while ( te1->next() ){ - CLUCENE_ASSERT(te2->next()); - - CuAssertStrEquals(tc,_T("term enum text not equal"), te1->term(false)->text(), te2->term(false)->text() ); - CuAssertIntEquals(tc,_T("term enum docFreq"), te1->docFreq(), te2->docFreq() ); - - //test term docs - //todo: this isn't useful until we search the td2 for the doc of td1 - /* - TermDocs* td1 = reader1->termDocs(te1->term(false)); - TermDocs* td2 = reader2->termDocs(te1->term(false)); - while (td1->next()){ - CLUCENE_ASSERT(td2->next()); - - //CLUCENE_ASSERT(td1->doc()==td2->doc()); todo: doc's aren't always the same, but should check that - //doc is the same content - CLUCENE_ASSERT(td1->freq()==td2->freq()); - - //todo: add some data into the index for the termfreqvector. - //test term freq vector - TermFreqVector** tfv1 = reader1->getTermFreqVectors(td1->doc()); - TermFreqVector** tfv2 = reader1->getTermFreqVectors(td1->doc()); - if ( tfv1 != NULL ){ - int t=0; - while ( tfv1[t] != NULL ){ - CLUCENE_ASSERT(tfv2[t] != NULL); - - TermFreqVector* v1 = tfv1[t]; - TermFreqVector* v2 = tfv2[t]; - - CLUCENE_ASSERT(_tcscmp(v1->getField(),v2->getField())==0); - CLUCENE_ASSERT(v1->size()==v2->size()); - - //todo: should check a few more things here... - - t++; - } - CLUCENE_ASSERT(tfv2[t] == NULL); - }else - CLUCENE_ASSERT(tfv2==NULL); - - } - _CLDELETE(td1); - _CLDELETE(td2); - */ - - //test term positions - //todo: this isn't useful until we search the td2 for the doc of td1 - /*TermPositions* tp1 = reader1->termPositions(te1->term(false)); - TermPositions* tp2 = reader2->termPositions(te1->term(false)); - while ( tp1->next() ){ - CLUCENE_ASSERT(tp2->next()); - - CLUCENE_ASSERT(tp1->doc()==tp2->doc());todo: doc's aren't always the same, but should check that - //doc is the same content - CLUCENE_ASSERT(tp1->freq()==tp2->freq()); - CLUCENE_ASSERT(tp1->nextPosition()==tp2->nextPosition()); - } - _CLDELETE(tp1); - _CLDELETE(tp2);*/ - - } - te1->close(); - te2->close(); - _CLDELETE(te1); - _CLDELETE(te2); - - reader1->close(); - reader2->close(); - _CLDELETE(reader1); - _CLDELETE(reader2); - } - -CuSuite *testreuters(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Reuters Test")); - - //setup some variables - strcpy(reuters_fsdirectory,cl_tempDir); - strcat(reuters_fsdirectory,"/reuters-index"); - - SUITE_ADD_TEST(suite, testReuters); - //SUITE_ADD_TEST(suite, testByteForByte); this test rarely works currently, use more robust by section test... - SUITE_ADD_TEST(suite, testBySection); - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/index/TestUtf8.cpp clucene-core-2.3.3.4/test/index/TestUtf8.cpp --- clucene-core-0.9.21b/test/index/TestUtf8.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/index/TestUtf8.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,184 +0,0 @@ -#include "test.h" -#include "CLucene/util/dirent.h" -#include "CLucene/util/Reader.h" - -CL_NS_USE(util) - -#ifdef _UCS2 - void _Index(CuTest *tc, IndexWriter* ndx,char* file){ - char path[CL_MAX_PATH]; - TCHAR tlang[20]; - - strcpy(path,clucene_data_location); - strcat(path,"/utf8text"); - CuAssert(tc,_T("Utf8 directory does not exist"),Misc::dir_Exists(path)); - strcat(path,"/"); - strcat(path,file); - strcat(path,"_utf8.txt"); - CuAssert(tc,_T("Language file does not exist"),Misc::dir_Exists(path)); - - STRCPY_AtoT(tlang,file,CL_MAX_PATH); - - Document doc; - doc.add(*Field::Keyword(_T("language"),tlang)); - - - doc.add(*Field::Text(_T("contents"),_CLNEW FileReader(path, "UTF-8",1024))); - ndx->addDocument(&doc); - } - void _Search(CuTest *tc, IndexSearcher* srch, Analyzer* analyzer, char* file, char* query){ - TCHAR tlang[20]; - STRCPY_AtoT(tlang,file,CL_MAX_PATH); - - TCHAR tquery[80]; - lucene_utf8towcs(tquery,query,80); - - Query* q = QueryParser::parse(tquery,_T("contents"), analyzer); - Hits* h = srch->search(q); - CLUCENE_ASSERT( h->length() == 1 ); - - Document& doc = h->doc(0); - CLUCENE_ASSERT( _tcscmp(doc.get(_T("language")), tlang)==0 ); - - _CLDELETE(q); - _CLDELETE(h); - } - - void testUTF8(CuTest *tc) { - RAMDirectory ram; - Directory* pram = &ram; - StandardAnalyzer a; - IndexWriter ndx(&ram,&a,true); - _Index(tc, &ndx,"arabic"); - _Index(tc, &ndx,"chinese"); - _Index(tc, &ndx,"czech"); - _Index(tc, &ndx,"english"); - _Index(tc, &ndx,"french"); - _Index(tc, &ndx,"german"); - _Index(tc, &ndx,"greek"); - _Index(tc, &ndx,"hebrew"); - _Index(tc, &ndx,"japanese"); - _Index(tc, &ndx,"korean"); - _Index(tc, &ndx,"polish"); - _Index(tc, &ndx,"russian"); - ndx.close(); - - IndexSearcher srch(&ram); - _Search(tc,&srch,&a,"arabic", "\xef\xbb\x9e\xef\xbb\xb4\xef\xbb\xa4\xef\xbb\xb3\xef\xba\xad"); //????? - arabic - _Search(tc,&srch,&a,"chinese", "\xe5\x95\xa4\xe9\x85\x92"); //?? - chinese - _Search(tc,&srch,&a,"czech", "Bud\xc4\x9bjovick\xc3\xbd" ); //Budejovický - czech - - _Search(tc,&srch,&a,"english", "google"); //English - google - _Search(tc,&srch,&a,"french", "r\xc3\xa9put\xc3\xa9"); //réputé - french - _Search(tc,&srch,&a,"german", "k\xc3\xb6nnen"); //können - german - _Search(tc,&srch,&a,"greek", "\xcf\x83\xcf\x84\xce\xb5\xce\xaf\xce\xbb\xcf\x84\xce\xb5"); //ste??te - greek - _Search(tc,&srch,&a,"hebrew", "\xd7\x91\xd7\x90\xd7\xa8\xd7\xa6\xd7\x95\xd7\xaa" ); //?????? - hebrew - _Search(tc,&srch,&a,"japanese", "\xe8\xa6\x8b\xe5\xad\xa6" ); //?? - japanese - _Search(tc,&srch,&a,"korean", "\xea\xb8\x88" ); //? - korean - _Search(tc,&srch,&a,"polish", "sp\xc3\xb3\xc5\x82ka"); ;//spólka - polish - _Search(tc,&srch,&a,"russian", "\xd0\x92\xd0\xb5\xd0\xbb\xd0\xb8\xd0\xba\xd0\xb8\xd0\xb5\x20"); //??????? - russian - - srch.close(); - } - - void readBuffered(CuTest* tc, Reader& utf8, Reader& unicode, int readLen){ - const TCHAR* buf1; - const TCHAR* buf2; - int32_t s; - size_t p, p1, p2; - p = p1 = p2 = 0; - while(true){ - s = utf8.read(buf1, readLen); - if ( s == -1 ) - break; - p1+=s; - - s = unicode.read(buf2, readLen); - if (s == -1) - break; - p2+=s; - - CLUCENE_ASSERT(p1==p2); //make sure both readers read the same amount. todo: i guess this is not strictly required... - for ( int32_t i=0;i_UCS2 ; diff -Nru clucene-core-0.9.21b/test/Makefile.am clucene-core-2.3.3.4/test/Makefile.am --- clucene-core-0.9.21b/test/Makefile.am 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/src - -check_PROGRAMS = cl_test -cl_test_LDFLAGS = $(top_builddir)/src/libclucene.la -DIST_SUBDIRS = data - -tstsrcdir = $(top_srcdir)/test -cl_test_SOURCES = CuTest.cpp testall.cpp tests.cpp -include analysis/Makefile.am -include debug/Makefile.am -include document/Makefile.am -include index/Makefile.am -include queryParser/Makefile.am -include search/Makefile.am -include store/Makefile.am -include util/Makefile.am - -EXTRA_DIST = $(tstsrcdir)/README \ - $(tstsrcdir)/CLMonolithic_Test.cpp \ - $(tstsrcdir)/Jamfile.v2 \ - $(tstsrcdir)/*.h \ - $(tstsrcdir)/CMakeLists.txt -MAINTAINERCLEANFILES = Makefile.in -CLEANFILES = cl_test_monolithic$(EXEEXT) cl_test_monolithic *.stackdump -TESTS = cl_test$(EXEXT) - -#monolithic building -monolithic: - @rm -f CLMonolithic_Test.$(OBJEXT) - $(MAKE) $(AM_MAKEFLAGS) cl_test_monolithic$(EXEEXT) - -CLMonolithic_Test.$(OBJEXT): - $(CXXCOMPILE) -c $(srcdir)/CLMonolithic_Test.cpp - -cl_test_monolithic$(EXEEXT): CLMonolithic_Test.o - @rm -f cl_test_monolithic$(EXEEXT) - $(CXXLINK) CLMonolithic_Test.$(OBJEXT) ../src/CLMonolithic.$(OBJEXT) $(LIBS) diff -Nru clucene-core-0.9.21b/test/Makefile.in clucene-core-2.3.3.4/test/Makefile.in --- clucene-core-0.9.21b/test/Makefile.in 2008-10-23 18:18:26.000000000 +0000 +++ clucene-core-2.3.3.4/test/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,969 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -check_PROGRAMS = cl_test$(EXEEXT) -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/analysis/Makefile.am $(srcdir)/debug/Makefile.am \ - $(srcdir)/document/Makefile.am $(srcdir)/index/Makefile.am \ - $(srcdir)/queryParser/Makefile.am $(srcdir)/search/Makefile.am \ - $(srcdir)/store/Makefile.am $(srcdir)/util/Makefile.am -subdir = test -SUBDIRS = -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_cxx_have_std.m4 \ - $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ - $(top_srcdir)/m4/ac_cxx_have_wctype_h.m4 \ - $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ - $(top_srcdir)/m4/ac_define_integer_bits.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/ax_config_feature.m4 \ - $(top_srcdir)/m4/ax_prefix_config_h.m4 \ - $(top_srcdir)/m4/dps_float_byte.m4 \ - $(top_srcdir)/m4/dps_snprintf_oflow.m4 \ - $(top_srcdir)/m4/dps_static_const_type.m4 \ - $(top_srcdir)/m4/dps_swprintf_works.m4 \ - $(top_srcdir)/m4/mdl_cxx_function_try_blocks.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h.tmp -CONFIG_CLEAN_FILES = -am_cl_test_OBJECTS = CuTest.$(OBJEXT) testall.$(OBJEXT) \ - tests.$(OBJEXT) TestAnalysis.$(OBJEXT) TestAnalyzers.$(OBJEXT) \ - TestError.$(OBJEXT) TestDocument.$(OBJEXT) \ - TestHighFreqTerms.$(OBJEXT) TestIndexWriter.$(OBJEXT) \ - TestUtf8.$(OBJEXT) TestReuters.$(OBJEXT) \ - TestQueryParser.$(OBJEXT) TestDateFilter.$(OBJEXT) \ - TestForDuplicates.$(OBJEXT) TestSearch.$(OBJEXT) \ - TestSort.$(OBJEXT) TestTermVector.$(OBJEXT) \ - TestWildcard.$(OBJEXT) TestStore.$(OBJEXT) \ - TestPriorityQueue.$(OBJEXT) English.$(OBJEXT) -cl_test_OBJECTS = $(am_cl_test_OBJECTS) -cl_test_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(cl_test_SOURCES) -DIST_SOURCES = $(cl_test_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLLIB_VERSION = @CLLIB_VERSION@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GREP = @GREP@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -acx_pthread_config = @acx_pthread_config@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_doxygen = @enable_doxygen@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/src -cl_test_LDFLAGS = $(top_builddir)/src/libclucene.la -DIST_SUBDIRS = data -tstsrcdir = $(top_srcdir)/test -cl_test_SOURCES = CuTest.cpp testall.cpp tests.cpp \ - $(test_analysisdir)/TestAnalysis.cpp \ - $(test_analysisdir)/TestAnalyzers.cpp \ - $(test_debugdir)/TestError.cpp $(test_docdir)/TestDocument.cpp \ - $(test_indexdir)/TestHighFreqTerms.cpp \ - $(test_indexdir)/TestIndexWriter.cpp \ - $(test_indexdir)/TestUtf8.cpp $(test_indexdir)/TestReuters.cpp \ - $(test_queryParserdir)/TestQueryParser.cpp \ - $(test_searchdir)/TestDateFilter.cpp \ - $(test_searchdir)/TestForDuplicates.cpp \ - $(test_searchdir)/TestSearch.cpp \ - $(test_searchdir)/TestSort.cpp \ - $(test_searchdir)/TestTermVector.cpp \ - $(test_searchdir)/TestWildcard.cpp \ - $(test_storedir)/TestStore.cpp \ - $(test_utildir)/TestPriorityQueue.cpp \ - $(test_utildir)/English.cpp -test_analysisdir = $(tstsrcdir)/analysis -test_debugdir = $(tstsrcdir)/debug -test_docdir = $(tstsrcdir)/document -test_indexdir = $(tstsrcdir)/index -test_queryParserdir = $(tstsrcdir)/queryParser -test_searchdir = $(tstsrcdir)/search -test_storedir = $(tstsrcdir)/store -test_utildir = $(tstsrcdir)/util -EXTRA_DIST = $(tstsrcdir)/README \ - $(tstsrcdir)/CLMonolithic_Test.cpp \ - $(tstsrcdir)/Jamfile.v2 \ - $(tstsrcdir)/*.h \ - $(tstsrcdir)/CMakeLists.txt - -MAINTAINERCLEANFILES = Makefile.in -CLEANFILES = cl_test_monolithic$(EXEEXT) cl_test_monolithic *.stackdump -TESTS = cl_test$(EXEXT) -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .cpp .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/analysis/Makefile.am $(srcdir)/debug/Makefile.am $(srcdir)/document/Makefile.am $(srcdir)/index/Makefile.am $(srcdir)/queryParser/Makefile.am $(srcdir)/search/Makefile.am $(srcdir)/store/Makefile.am $(srcdir)/util/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu test/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-checkPROGRAMS: - @list='$(check_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done -cl_test$(EXEEXT): $(cl_test_OBJECTS) $(cl_test_DEPENDENCIES) - @rm -f cl_test$(EXEEXT) - $(CXXLINK) $(cl_test_LDFLAGS) $(cl_test_OBJECTS) $(cl_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CuTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/English.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestAnalysis.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestAnalyzers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestDateFilter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestDocument.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestError.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestForDuplicates.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestHighFreqTerms.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestIndexWriter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestPriorityQueue.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestQueryParser.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestReuters.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestSearch.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestSort.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestStore.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestTermVector.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestUtf8.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestWildcard.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testall.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests.Po@am__quote@ - -.cpp.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cpp.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cpp.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -TestAnalysis.o: $(test_analysisdir)/TestAnalysis.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestAnalysis.o -MD -MP -MF "$(DEPDIR)/TestAnalysis.Tpo" -c -o TestAnalysis.o `test -f '$(test_analysisdir)/TestAnalysis.cpp' || echo '$(srcdir)/'`$(test_analysisdir)/TestAnalysis.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestAnalysis.Tpo" "$(DEPDIR)/TestAnalysis.Po"; else rm -f "$(DEPDIR)/TestAnalysis.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_analysisdir)/TestAnalysis.cpp' object='TestAnalysis.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestAnalysis.o `test -f '$(test_analysisdir)/TestAnalysis.cpp' || echo '$(srcdir)/'`$(test_analysisdir)/TestAnalysis.cpp - -TestAnalysis.obj: $(test_analysisdir)/TestAnalysis.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestAnalysis.obj -MD -MP -MF "$(DEPDIR)/TestAnalysis.Tpo" -c -o TestAnalysis.obj `if test -f '$(test_analysisdir)/TestAnalysis.cpp'; then $(CYGPATH_W) '$(test_analysisdir)/TestAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_analysisdir)/TestAnalysis.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestAnalysis.Tpo" "$(DEPDIR)/TestAnalysis.Po"; else rm -f "$(DEPDIR)/TestAnalysis.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_analysisdir)/TestAnalysis.cpp' object='TestAnalysis.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestAnalysis.obj `if test -f '$(test_analysisdir)/TestAnalysis.cpp'; then $(CYGPATH_W) '$(test_analysisdir)/TestAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_analysisdir)/TestAnalysis.cpp'; fi` - -TestAnalyzers.o: $(test_analysisdir)/TestAnalyzers.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestAnalyzers.o -MD -MP -MF "$(DEPDIR)/TestAnalyzers.Tpo" -c -o TestAnalyzers.o `test -f '$(test_analysisdir)/TestAnalyzers.cpp' || echo '$(srcdir)/'`$(test_analysisdir)/TestAnalyzers.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestAnalyzers.Tpo" "$(DEPDIR)/TestAnalyzers.Po"; else rm -f "$(DEPDIR)/TestAnalyzers.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_analysisdir)/TestAnalyzers.cpp' object='TestAnalyzers.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestAnalyzers.o `test -f '$(test_analysisdir)/TestAnalyzers.cpp' || echo '$(srcdir)/'`$(test_analysisdir)/TestAnalyzers.cpp - -TestAnalyzers.obj: $(test_analysisdir)/TestAnalyzers.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestAnalyzers.obj -MD -MP -MF "$(DEPDIR)/TestAnalyzers.Tpo" -c -o TestAnalyzers.obj `if test -f '$(test_analysisdir)/TestAnalyzers.cpp'; then $(CYGPATH_W) '$(test_analysisdir)/TestAnalyzers.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_analysisdir)/TestAnalyzers.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestAnalyzers.Tpo" "$(DEPDIR)/TestAnalyzers.Po"; else rm -f "$(DEPDIR)/TestAnalyzers.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_analysisdir)/TestAnalyzers.cpp' object='TestAnalyzers.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestAnalyzers.obj `if test -f '$(test_analysisdir)/TestAnalyzers.cpp'; then $(CYGPATH_W) '$(test_analysisdir)/TestAnalyzers.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_analysisdir)/TestAnalyzers.cpp'; fi` - -TestError.o: $(test_debugdir)/TestError.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestError.o -MD -MP -MF "$(DEPDIR)/TestError.Tpo" -c -o TestError.o `test -f '$(test_debugdir)/TestError.cpp' || echo '$(srcdir)/'`$(test_debugdir)/TestError.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestError.Tpo" "$(DEPDIR)/TestError.Po"; else rm -f "$(DEPDIR)/TestError.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_debugdir)/TestError.cpp' object='TestError.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestError.o `test -f '$(test_debugdir)/TestError.cpp' || echo '$(srcdir)/'`$(test_debugdir)/TestError.cpp - -TestError.obj: $(test_debugdir)/TestError.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestError.obj -MD -MP -MF "$(DEPDIR)/TestError.Tpo" -c -o TestError.obj `if test -f '$(test_debugdir)/TestError.cpp'; then $(CYGPATH_W) '$(test_debugdir)/TestError.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_debugdir)/TestError.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestError.Tpo" "$(DEPDIR)/TestError.Po"; else rm -f "$(DEPDIR)/TestError.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_debugdir)/TestError.cpp' object='TestError.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestError.obj `if test -f '$(test_debugdir)/TestError.cpp'; then $(CYGPATH_W) '$(test_debugdir)/TestError.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_debugdir)/TestError.cpp'; fi` - -TestDocument.o: $(test_docdir)/TestDocument.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestDocument.o -MD -MP -MF "$(DEPDIR)/TestDocument.Tpo" -c -o TestDocument.o `test -f '$(test_docdir)/TestDocument.cpp' || echo '$(srcdir)/'`$(test_docdir)/TestDocument.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestDocument.Tpo" "$(DEPDIR)/TestDocument.Po"; else rm -f "$(DEPDIR)/TestDocument.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_docdir)/TestDocument.cpp' object='TestDocument.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestDocument.o `test -f '$(test_docdir)/TestDocument.cpp' || echo '$(srcdir)/'`$(test_docdir)/TestDocument.cpp - -TestDocument.obj: $(test_docdir)/TestDocument.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestDocument.obj -MD -MP -MF "$(DEPDIR)/TestDocument.Tpo" -c -o TestDocument.obj `if test -f '$(test_docdir)/TestDocument.cpp'; then $(CYGPATH_W) '$(test_docdir)/TestDocument.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_docdir)/TestDocument.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestDocument.Tpo" "$(DEPDIR)/TestDocument.Po"; else rm -f "$(DEPDIR)/TestDocument.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_docdir)/TestDocument.cpp' object='TestDocument.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestDocument.obj `if test -f '$(test_docdir)/TestDocument.cpp'; then $(CYGPATH_W) '$(test_docdir)/TestDocument.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_docdir)/TestDocument.cpp'; fi` - -TestHighFreqTerms.o: $(test_indexdir)/TestHighFreqTerms.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestHighFreqTerms.o -MD -MP -MF "$(DEPDIR)/TestHighFreqTerms.Tpo" -c -o TestHighFreqTerms.o `test -f '$(test_indexdir)/TestHighFreqTerms.cpp' || echo '$(srcdir)/'`$(test_indexdir)/TestHighFreqTerms.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestHighFreqTerms.Tpo" "$(DEPDIR)/TestHighFreqTerms.Po"; else rm -f "$(DEPDIR)/TestHighFreqTerms.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_indexdir)/TestHighFreqTerms.cpp' object='TestHighFreqTerms.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestHighFreqTerms.o `test -f '$(test_indexdir)/TestHighFreqTerms.cpp' || echo '$(srcdir)/'`$(test_indexdir)/TestHighFreqTerms.cpp - -TestHighFreqTerms.obj: $(test_indexdir)/TestHighFreqTerms.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestHighFreqTerms.obj -MD -MP -MF "$(DEPDIR)/TestHighFreqTerms.Tpo" -c -o TestHighFreqTerms.obj `if test -f '$(test_indexdir)/TestHighFreqTerms.cpp'; then $(CYGPATH_W) '$(test_indexdir)/TestHighFreqTerms.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_indexdir)/TestHighFreqTerms.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestHighFreqTerms.Tpo" "$(DEPDIR)/TestHighFreqTerms.Po"; else rm -f "$(DEPDIR)/TestHighFreqTerms.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_indexdir)/TestHighFreqTerms.cpp' object='TestHighFreqTerms.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestHighFreqTerms.obj `if test -f '$(test_indexdir)/TestHighFreqTerms.cpp'; then $(CYGPATH_W) '$(test_indexdir)/TestHighFreqTerms.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_indexdir)/TestHighFreqTerms.cpp'; fi` - -TestIndexWriter.o: $(test_indexdir)/TestIndexWriter.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestIndexWriter.o -MD -MP -MF "$(DEPDIR)/TestIndexWriter.Tpo" -c -o TestIndexWriter.o `test -f '$(test_indexdir)/TestIndexWriter.cpp' || echo '$(srcdir)/'`$(test_indexdir)/TestIndexWriter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestIndexWriter.Tpo" "$(DEPDIR)/TestIndexWriter.Po"; else rm -f "$(DEPDIR)/TestIndexWriter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_indexdir)/TestIndexWriter.cpp' object='TestIndexWriter.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestIndexWriter.o `test -f '$(test_indexdir)/TestIndexWriter.cpp' || echo '$(srcdir)/'`$(test_indexdir)/TestIndexWriter.cpp - -TestIndexWriter.obj: $(test_indexdir)/TestIndexWriter.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestIndexWriter.obj -MD -MP -MF "$(DEPDIR)/TestIndexWriter.Tpo" -c -o TestIndexWriter.obj `if test -f '$(test_indexdir)/TestIndexWriter.cpp'; then $(CYGPATH_W) '$(test_indexdir)/TestIndexWriter.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_indexdir)/TestIndexWriter.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestIndexWriter.Tpo" "$(DEPDIR)/TestIndexWriter.Po"; else rm -f "$(DEPDIR)/TestIndexWriter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_indexdir)/TestIndexWriter.cpp' object='TestIndexWriter.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestIndexWriter.obj `if test -f '$(test_indexdir)/TestIndexWriter.cpp'; then $(CYGPATH_W) '$(test_indexdir)/TestIndexWriter.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_indexdir)/TestIndexWriter.cpp'; fi` - -TestUtf8.o: $(test_indexdir)/TestUtf8.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestUtf8.o -MD -MP -MF "$(DEPDIR)/TestUtf8.Tpo" -c -o TestUtf8.o `test -f '$(test_indexdir)/TestUtf8.cpp' || echo '$(srcdir)/'`$(test_indexdir)/TestUtf8.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestUtf8.Tpo" "$(DEPDIR)/TestUtf8.Po"; else rm -f "$(DEPDIR)/TestUtf8.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_indexdir)/TestUtf8.cpp' object='TestUtf8.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestUtf8.o `test -f '$(test_indexdir)/TestUtf8.cpp' || echo '$(srcdir)/'`$(test_indexdir)/TestUtf8.cpp - -TestUtf8.obj: $(test_indexdir)/TestUtf8.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestUtf8.obj -MD -MP -MF "$(DEPDIR)/TestUtf8.Tpo" -c -o TestUtf8.obj `if test -f '$(test_indexdir)/TestUtf8.cpp'; then $(CYGPATH_W) '$(test_indexdir)/TestUtf8.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_indexdir)/TestUtf8.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestUtf8.Tpo" "$(DEPDIR)/TestUtf8.Po"; else rm -f "$(DEPDIR)/TestUtf8.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_indexdir)/TestUtf8.cpp' object='TestUtf8.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestUtf8.obj `if test -f '$(test_indexdir)/TestUtf8.cpp'; then $(CYGPATH_W) '$(test_indexdir)/TestUtf8.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_indexdir)/TestUtf8.cpp'; fi` - -TestReuters.o: $(test_indexdir)/TestReuters.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestReuters.o -MD -MP -MF "$(DEPDIR)/TestReuters.Tpo" -c -o TestReuters.o `test -f '$(test_indexdir)/TestReuters.cpp' || echo '$(srcdir)/'`$(test_indexdir)/TestReuters.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestReuters.Tpo" "$(DEPDIR)/TestReuters.Po"; else rm -f "$(DEPDIR)/TestReuters.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_indexdir)/TestReuters.cpp' object='TestReuters.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestReuters.o `test -f '$(test_indexdir)/TestReuters.cpp' || echo '$(srcdir)/'`$(test_indexdir)/TestReuters.cpp - -TestReuters.obj: $(test_indexdir)/TestReuters.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestReuters.obj -MD -MP -MF "$(DEPDIR)/TestReuters.Tpo" -c -o TestReuters.obj `if test -f '$(test_indexdir)/TestReuters.cpp'; then $(CYGPATH_W) '$(test_indexdir)/TestReuters.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_indexdir)/TestReuters.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestReuters.Tpo" "$(DEPDIR)/TestReuters.Po"; else rm -f "$(DEPDIR)/TestReuters.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_indexdir)/TestReuters.cpp' object='TestReuters.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestReuters.obj `if test -f '$(test_indexdir)/TestReuters.cpp'; then $(CYGPATH_W) '$(test_indexdir)/TestReuters.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_indexdir)/TestReuters.cpp'; fi` - -TestQueryParser.o: $(test_queryParserdir)/TestQueryParser.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestQueryParser.o -MD -MP -MF "$(DEPDIR)/TestQueryParser.Tpo" -c -o TestQueryParser.o `test -f '$(test_queryParserdir)/TestQueryParser.cpp' || echo '$(srcdir)/'`$(test_queryParserdir)/TestQueryParser.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestQueryParser.Tpo" "$(DEPDIR)/TestQueryParser.Po"; else rm -f "$(DEPDIR)/TestQueryParser.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_queryParserdir)/TestQueryParser.cpp' object='TestQueryParser.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestQueryParser.o `test -f '$(test_queryParserdir)/TestQueryParser.cpp' || echo '$(srcdir)/'`$(test_queryParserdir)/TestQueryParser.cpp - -TestQueryParser.obj: $(test_queryParserdir)/TestQueryParser.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestQueryParser.obj -MD -MP -MF "$(DEPDIR)/TestQueryParser.Tpo" -c -o TestQueryParser.obj `if test -f '$(test_queryParserdir)/TestQueryParser.cpp'; then $(CYGPATH_W) '$(test_queryParserdir)/TestQueryParser.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_queryParserdir)/TestQueryParser.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestQueryParser.Tpo" "$(DEPDIR)/TestQueryParser.Po"; else rm -f "$(DEPDIR)/TestQueryParser.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_queryParserdir)/TestQueryParser.cpp' object='TestQueryParser.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestQueryParser.obj `if test -f '$(test_queryParserdir)/TestQueryParser.cpp'; then $(CYGPATH_W) '$(test_queryParserdir)/TestQueryParser.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_queryParserdir)/TestQueryParser.cpp'; fi` - -TestDateFilter.o: $(test_searchdir)/TestDateFilter.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestDateFilter.o -MD -MP -MF "$(DEPDIR)/TestDateFilter.Tpo" -c -o TestDateFilter.o `test -f '$(test_searchdir)/TestDateFilter.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestDateFilter.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestDateFilter.Tpo" "$(DEPDIR)/TestDateFilter.Po"; else rm -f "$(DEPDIR)/TestDateFilter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestDateFilter.cpp' object='TestDateFilter.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestDateFilter.o `test -f '$(test_searchdir)/TestDateFilter.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestDateFilter.cpp - -TestDateFilter.obj: $(test_searchdir)/TestDateFilter.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestDateFilter.obj -MD -MP -MF "$(DEPDIR)/TestDateFilter.Tpo" -c -o TestDateFilter.obj `if test -f '$(test_searchdir)/TestDateFilter.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestDateFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestDateFilter.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestDateFilter.Tpo" "$(DEPDIR)/TestDateFilter.Po"; else rm -f "$(DEPDIR)/TestDateFilter.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestDateFilter.cpp' object='TestDateFilter.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestDateFilter.obj `if test -f '$(test_searchdir)/TestDateFilter.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestDateFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestDateFilter.cpp'; fi` - -TestForDuplicates.o: $(test_searchdir)/TestForDuplicates.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestForDuplicates.o -MD -MP -MF "$(DEPDIR)/TestForDuplicates.Tpo" -c -o TestForDuplicates.o `test -f '$(test_searchdir)/TestForDuplicates.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestForDuplicates.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestForDuplicates.Tpo" "$(DEPDIR)/TestForDuplicates.Po"; else rm -f "$(DEPDIR)/TestForDuplicates.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestForDuplicates.cpp' object='TestForDuplicates.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestForDuplicates.o `test -f '$(test_searchdir)/TestForDuplicates.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestForDuplicates.cpp - -TestForDuplicates.obj: $(test_searchdir)/TestForDuplicates.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestForDuplicates.obj -MD -MP -MF "$(DEPDIR)/TestForDuplicates.Tpo" -c -o TestForDuplicates.obj `if test -f '$(test_searchdir)/TestForDuplicates.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestForDuplicates.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestForDuplicates.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestForDuplicates.Tpo" "$(DEPDIR)/TestForDuplicates.Po"; else rm -f "$(DEPDIR)/TestForDuplicates.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestForDuplicates.cpp' object='TestForDuplicates.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestForDuplicates.obj `if test -f '$(test_searchdir)/TestForDuplicates.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestForDuplicates.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestForDuplicates.cpp'; fi` - -TestSearch.o: $(test_searchdir)/TestSearch.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestSearch.o -MD -MP -MF "$(DEPDIR)/TestSearch.Tpo" -c -o TestSearch.o `test -f '$(test_searchdir)/TestSearch.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestSearch.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestSearch.Tpo" "$(DEPDIR)/TestSearch.Po"; else rm -f "$(DEPDIR)/TestSearch.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestSearch.cpp' object='TestSearch.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestSearch.o `test -f '$(test_searchdir)/TestSearch.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestSearch.cpp - -TestSearch.obj: $(test_searchdir)/TestSearch.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestSearch.obj -MD -MP -MF "$(DEPDIR)/TestSearch.Tpo" -c -o TestSearch.obj `if test -f '$(test_searchdir)/TestSearch.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestSearch.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestSearch.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestSearch.Tpo" "$(DEPDIR)/TestSearch.Po"; else rm -f "$(DEPDIR)/TestSearch.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestSearch.cpp' object='TestSearch.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestSearch.obj `if test -f '$(test_searchdir)/TestSearch.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestSearch.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestSearch.cpp'; fi` - -TestSort.o: $(test_searchdir)/TestSort.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestSort.o -MD -MP -MF "$(DEPDIR)/TestSort.Tpo" -c -o TestSort.o `test -f '$(test_searchdir)/TestSort.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestSort.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestSort.Tpo" "$(DEPDIR)/TestSort.Po"; else rm -f "$(DEPDIR)/TestSort.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestSort.cpp' object='TestSort.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestSort.o `test -f '$(test_searchdir)/TestSort.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestSort.cpp - -TestSort.obj: $(test_searchdir)/TestSort.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestSort.obj -MD -MP -MF "$(DEPDIR)/TestSort.Tpo" -c -o TestSort.obj `if test -f '$(test_searchdir)/TestSort.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestSort.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestSort.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestSort.Tpo" "$(DEPDIR)/TestSort.Po"; else rm -f "$(DEPDIR)/TestSort.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestSort.cpp' object='TestSort.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestSort.obj `if test -f '$(test_searchdir)/TestSort.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestSort.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestSort.cpp'; fi` - -TestTermVector.o: $(test_searchdir)/TestTermVector.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestTermVector.o -MD -MP -MF "$(DEPDIR)/TestTermVector.Tpo" -c -o TestTermVector.o `test -f '$(test_searchdir)/TestTermVector.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestTermVector.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestTermVector.Tpo" "$(DEPDIR)/TestTermVector.Po"; else rm -f "$(DEPDIR)/TestTermVector.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestTermVector.cpp' object='TestTermVector.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestTermVector.o `test -f '$(test_searchdir)/TestTermVector.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestTermVector.cpp - -TestTermVector.obj: $(test_searchdir)/TestTermVector.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestTermVector.obj -MD -MP -MF "$(DEPDIR)/TestTermVector.Tpo" -c -o TestTermVector.obj `if test -f '$(test_searchdir)/TestTermVector.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestTermVector.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestTermVector.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestTermVector.Tpo" "$(DEPDIR)/TestTermVector.Po"; else rm -f "$(DEPDIR)/TestTermVector.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestTermVector.cpp' object='TestTermVector.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestTermVector.obj `if test -f '$(test_searchdir)/TestTermVector.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestTermVector.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestTermVector.cpp'; fi` - -TestWildcard.o: $(test_searchdir)/TestWildcard.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestWildcard.o -MD -MP -MF "$(DEPDIR)/TestWildcard.Tpo" -c -o TestWildcard.o `test -f '$(test_searchdir)/TestWildcard.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestWildcard.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestWildcard.Tpo" "$(DEPDIR)/TestWildcard.Po"; else rm -f "$(DEPDIR)/TestWildcard.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestWildcard.cpp' object='TestWildcard.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestWildcard.o `test -f '$(test_searchdir)/TestWildcard.cpp' || echo '$(srcdir)/'`$(test_searchdir)/TestWildcard.cpp - -TestWildcard.obj: $(test_searchdir)/TestWildcard.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestWildcard.obj -MD -MP -MF "$(DEPDIR)/TestWildcard.Tpo" -c -o TestWildcard.obj `if test -f '$(test_searchdir)/TestWildcard.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestWildcard.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestWildcard.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestWildcard.Tpo" "$(DEPDIR)/TestWildcard.Po"; else rm -f "$(DEPDIR)/TestWildcard.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_searchdir)/TestWildcard.cpp' object='TestWildcard.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestWildcard.obj `if test -f '$(test_searchdir)/TestWildcard.cpp'; then $(CYGPATH_W) '$(test_searchdir)/TestWildcard.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_searchdir)/TestWildcard.cpp'; fi` - -TestStore.o: $(test_storedir)/TestStore.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestStore.o -MD -MP -MF "$(DEPDIR)/TestStore.Tpo" -c -o TestStore.o `test -f '$(test_storedir)/TestStore.cpp' || echo '$(srcdir)/'`$(test_storedir)/TestStore.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestStore.Tpo" "$(DEPDIR)/TestStore.Po"; else rm -f "$(DEPDIR)/TestStore.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_storedir)/TestStore.cpp' object='TestStore.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestStore.o `test -f '$(test_storedir)/TestStore.cpp' || echo '$(srcdir)/'`$(test_storedir)/TestStore.cpp - -TestStore.obj: $(test_storedir)/TestStore.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestStore.obj -MD -MP -MF "$(DEPDIR)/TestStore.Tpo" -c -o TestStore.obj `if test -f '$(test_storedir)/TestStore.cpp'; then $(CYGPATH_W) '$(test_storedir)/TestStore.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_storedir)/TestStore.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestStore.Tpo" "$(DEPDIR)/TestStore.Po"; else rm -f "$(DEPDIR)/TestStore.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_storedir)/TestStore.cpp' object='TestStore.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestStore.obj `if test -f '$(test_storedir)/TestStore.cpp'; then $(CYGPATH_W) '$(test_storedir)/TestStore.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_storedir)/TestStore.cpp'; fi` - -TestPriorityQueue.o: $(test_utildir)/TestPriorityQueue.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestPriorityQueue.o -MD -MP -MF "$(DEPDIR)/TestPriorityQueue.Tpo" -c -o TestPriorityQueue.o `test -f '$(test_utildir)/TestPriorityQueue.cpp' || echo '$(srcdir)/'`$(test_utildir)/TestPriorityQueue.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestPriorityQueue.Tpo" "$(DEPDIR)/TestPriorityQueue.Po"; else rm -f "$(DEPDIR)/TestPriorityQueue.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_utildir)/TestPriorityQueue.cpp' object='TestPriorityQueue.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestPriorityQueue.o `test -f '$(test_utildir)/TestPriorityQueue.cpp' || echo '$(srcdir)/'`$(test_utildir)/TestPriorityQueue.cpp - -TestPriorityQueue.obj: $(test_utildir)/TestPriorityQueue.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TestPriorityQueue.obj -MD -MP -MF "$(DEPDIR)/TestPriorityQueue.Tpo" -c -o TestPriorityQueue.obj `if test -f '$(test_utildir)/TestPriorityQueue.cpp'; then $(CYGPATH_W) '$(test_utildir)/TestPriorityQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_utildir)/TestPriorityQueue.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/TestPriorityQueue.Tpo" "$(DEPDIR)/TestPriorityQueue.Po"; else rm -f "$(DEPDIR)/TestPriorityQueue.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_utildir)/TestPriorityQueue.cpp' object='TestPriorityQueue.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TestPriorityQueue.obj `if test -f '$(test_utildir)/TestPriorityQueue.cpp'; then $(CYGPATH_W) '$(test_utildir)/TestPriorityQueue.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_utildir)/TestPriorityQueue.cpp'; fi` - -English.o: $(test_utildir)/English.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT English.o -MD -MP -MF "$(DEPDIR)/English.Tpo" -c -o English.o `test -f '$(test_utildir)/English.cpp' || echo '$(srcdir)/'`$(test_utildir)/English.cpp; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/English.Tpo" "$(DEPDIR)/English.Po"; else rm -f "$(DEPDIR)/English.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_utildir)/English.cpp' object='English.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o English.o `test -f '$(test_utildir)/English.cpp' || echo '$(srcdir)/'`$(test_utildir)/English.cpp - -English.obj: $(test_utildir)/English.cpp -@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT English.obj -MD -MP -MF "$(DEPDIR)/English.Tpo" -c -o English.obj `if test -f '$(test_utildir)/English.cpp'; then $(CYGPATH_W) '$(test_utildir)/English.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_utildir)/English.cpp'; fi`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/English.Tpo" "$(DEPDIR)/English.Po"; else rm -f "$(DEPDIR)/English.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(test_utildir)/English.cpp' object='English.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o English.obj `if test -f '$(test_utildir)/English.cpp'; then $(CYGPATH_W) '$(test_utildir)/English.cpp'; else $(CYGPATH_W) '$(srcdir)/$(test_utildir)/English.cpp'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - echo "XPASS: $$tst"; \ - ;; \ - *) \ - echo "PASS: $$tst"; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ - xfail=`expr $$xfail + 1`; \ - echo "XFAIL: $$tst"; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - echo "FAIL: $$tst"; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - echo "SKIP: $$tst"; \ - fi; \ - done; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ - else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ - else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - echo "$$dashes"; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/$(tstsrcdir) $(distdir)/analysis $(distdir)/debug $(distdir)/document $(distdir)/index $(distdir)/queryParser $(distdir)/search $(distdir)/store $(distdir)/util - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ - mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-recursive - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-info-am - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-TESTS \ - check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ - clean-recursive ctags ctags-recursive distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-info-am - - -#monolithic building -monolithic: - @rm -f CLMonolithic_Test.$(OBJEXT) - $(MAKE) $(AM_MAKEFLAGS) cl_test_monolithic$(EXEEXT) - -CLMonolithic_Test.$(OBJEXT): - $(CXXCOMPILE) -c $(srcdir)/CLMonolithic_Test.cpp - -cl_test_monolithic$(EXEEXT): CLMonolithic_Test.o - @rm -f cl_test_monolithic$(EXEEXT) - $(CXXLINK) CLMonolithic_Test.$(OBJEXT) ../src/CLMonolithic.$(OBJEXT) $(LIBS) -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru clucene-core-0.9.21b/test/queryParser/Makefile.am clucene-core-2.3.3.4/test/queryParser/Makefile.am --- clucene-core-0.9.21b/test/queryParser/Makefile.am 2008-10-23 17:44:28.000000000 +0000 +++ clucene-core-2.3.3.4/test/queryParser/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -test_queryParserdir = $(tstsrcdir)/queryParser - -cl_test_SOURCES += $(test_queryParserdir)/TestQueryParser.cpp diff -Nru clucene-core-0.9.21b/test/queryParser/TestQueryParser.cpp clucene-core-2.3.3.4/test/queryParser/TestQueryParser.cpp --- clucene-core-0.9.21b/test/queryParser/TestQueryParser.cpp 2008-10-23 17:44:28.000000000 +0000 +++ clucene-core-2.3.3.4/test/queryParser/TestQueryParser.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,308 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - -class QPTestFilter: public TokenFilter { -public: - - bool inPhrase; - int32_t savedStart, savedEnd; - - /** - * Filter which discards the token 'stop' and which expands the - * token 'phrase' into 'phrase1 phrase2' - */ - QPTestFilter(TokenStream* in): - TokenFilter(in,true), - inPhrase(false), - savedStart(0), - savedEnd(0) - { - } - - bool next(Token* token) { - if (inPhrase) { - inPhrase = false; - token->set( _T("phrase2"), savedStart, savedEnd); - return true; - }else{ - while( input->next(token) ){ - if ( _tcscmp(token->termText(), _T("phrase")) == 0 ) { - inPhrase = true; - savedStart = token->startOffset(); - savedEnd = token->endOffset(); - token->set( _T("phrase1"), savedStart, savedEnd); - return true; - }else if ( _tcscmp(token->termText(), _T("stop") ) !=0 ){ - return true; - } - } - } - return false; - } -}; - -class QPTestAnalyzer: public Analyzer { -public: - QPTestAnalyzer() { - } - - /** Filters LowerCaseTokenizer with StopFilter. */ - TokenStream* tokenStream(const TCHAR* fieldName, Reader* reader) { - return _CLNEW QPTestFilter(_CLNEW LowerCaseTokenizer(reader)); - } -}; - -Query* getQuery(CuTest *tc,const TCHAR* query, Analyzer* a) { - try{ - bool del = (a==NULL); - if (a == NULL) - a = _CLNEW SimpleAnalyzer(); - - QueryParser qp(_T("field"), a); - Query* ret = qp.parse(query); - - if ( del ) - _CLDELETE(a); - return ret; - }catch(CLuceneError& e){ - CuFail(tc,_T("/%s/ threw an error: %s - "),query, e.twhat()); - CuFail(tc,_T("%s\n"),e.twhat()); - return NULL; - }catch(...){ - CuFail(tc,_T("/%s/ threw an error.\n"),query); - return NULL; - } -} - -void assertQueryEquals(CuTest *tc,const TCHAR* query, Analyzer* a, const TCHAR* result) { - - Query* q = getQuery(tc,query, a); - if ( q == NULL ) - return; - - const TCHAR* s = q->toString(_T("field")); - if ( _tcscmp(s,result) != 0 ) { - CuFail(tc, _T("FAILED Query /%s/ yielded /%s/, expecting /%s/\n"), query, s, - result); - } - _CLDELETE_CARRAY(s); - _CLDELETE(q); - -} - -void assertTrue(CuTest *tc,const TCHAR* query, Analyzer* a, const TCHAR* inst, const TCHAR* msg){ - Query* q = getQuery(tc,query,a); - bool success = q->instanceOf(inst); - _CLDELETE(q); - CuAssert(tc,msg,success); -} - -void testSimple(CuTest *tc) { - StandardAnalyzer a; - assertQueryEquals(tc,_T("term term term"), NULL, _T("term term term")); - - TCHAR tmp1[100]; - -#ifdef _UCS2 - lucene_utf8towcs(tmp1,"t\xc3\xbcrm term term",100); - assertQueryEquals(tc,tmp1, NULL, tmp1); - assertQueryEquals(tc,tmp1, &a, tmp1); - - lucene_utf8towcs(tmp1,"\xc3\xbcmlaut",100); - assertQueryEquals(tc,tmp1, NULL, tmp1); - assertQueryEquals(tc,tmp1, &a, tmp1); -#endif - - assertQueryEquals(tc,_T("a AND b"), NULL, _T("+a +b")); - assertQueryEquals(tc,_T("(a AND b)"), NULL, _T("+a +b")); - assertQueryEquals(tc,_T("c OR (a AND b)"), NULL, _T("c (+a +b)")); - assertQueryEquals(tc,_T("a AND NOT b"), NULL, _T("+a -b")); - assertQueryEquals(tc,_T("a AND -b"), NULL, _T("+a -b")); - assertQueryEquals(tc,_T("a AND !b"), NULL, _T("+a -b")); - assertQueryEquals(tc,_T("a && b"), NULL, _T("+a +b")); - assertQueryEquals(tc,_T("a && ! b"), NULL, _T("+a -b")); - - assertQueryEquals(tc,_T("a OR b"), NULL, _T("a b")); - assertQueryEquals(tc,_T("a || b"), NULL, _T("a b")); - assertQueryEquals(tc,_T("a OR !b"), NULL, _T("a -b")); - assertQueryEquals(tc,_T("a OR ! b"), NULL, _T("a -b")); - assertQueryEquals(tc,_T("a OR -b"), NULL, _T("a -b")); - - assertQueryEquals(tc,_T("+term -term term"), NULL, _T("+term -term term")); - assertQueryEquals(tc,_T("foo:term AND field:anotherTerm"), NULL, - _T("+foo:term +anotherterm")); - assertQueryEquals(tc,_T("term AND \"phrase phrase\""), NULL, - _T("+term +\"phrase phrase\"") ); - assertQueryEquals(tc,_T("\"hello there\""), NULL, _T("\"hello there\"") ); - - assertTrue(tc, _T("a AND b"), NULL,_T("BooleanQuery"),_T("a AND b") ); - assertTrue(tc, _T("hello"), NULL,_T("TermQuery"), _T("hello")); - assertTrue(tc, _T("\"hello there\""), NULL,_T("PhraseQuery"), _T("\"hello there\"")); - - assertQueryEquals(tc,_T("germ term^2.0"), NULL, _T("germ term^2.0")); - assertQueryEquals(tc,_T("term^2.0"), NULL, _T("term^2.0")); - assertQueryEquals(tc,_T("term^2"), NULL, _T("term^2.0")); - assertQueryEquals(tc,_T("term^2.3"), NULL, _T("term^2.3")); - assertQueryEquals(tc,_T("\"germ term\"^2.0"), NULL, _T("\"germ term\"^2.0")); - assertQueryEquals(tc,_T("\"germ term\"^2.02"), NULL, _T("\"germ term\"^2.0")); - assertQueryEquals(tc,_T("\"term germ\"^2"), NULL, _T("\"term germ\"^2.0") ); - - assertQueryEquals(tc,_T("(foo OR bar) AND (baz OR boo)"), NULL, - _T("+(foo bar) +(baz boo)")); - assertQueryEquals(tc,_T("((a OR b) AND NOT c) OR d"), NULL, - _T("(+(a b) -c) d")); - assertQueryEquals(tc,_T("+(apple \"steve jobs\") -(foo bar baz)"), NULL, - _T("+(apple \"steve jobs\") -(foo bar baz)") ); - assertQueryEquals(tc,_T("+title:(dog OR cat) -author:\"bob dole\""), NULL, - _T("+(title:dog title:cat) -author:\"bob dole\"") ); - - //test string buffer - StringBuffer sb; - sb.appendFloat(0.02f,2); - CuAssertStrEquals(tc, _T("appendFloat failed"), _T("0.02"), sb.getBuffer()); -} - -void testPunct(CuTest *tc) { - WhitespaceAnalyzer a; - assertQueryEquals(tc,_T("a&b"), &a, _T("a&b")); - assertQueryEquals(tc,_T("a&&b"), &a, _T("a&&b")); - assertQueryEquals(tc,_T(".NET"), &a, _T(".NET")); -} - -void testSlop(CuTest *tc) { - assertQueryEquals(tc,_T("\"term germ\"~2"), NULL, _T("\"term germ\"~2") ); - assertQueryEquals(tc,_T("\"term germ\"~2 flork"), NULL, _T("\"term germ\"~2 flork") ); - assertQueryEquals(tc,_T("\"term\"~2"), NULL, _T("term")); - assertQueryEquals(tc,_T("\" \"~2 germ"), NULL, _T("germ")); - assertQueryEquals(tc,_T("\"term germ\"~2^2"), NULL, _T("\"term germ\"~2^2.0") ); -} - -void testNumber(CuTest *tc) { - // The numbers go away because SimpleAnalzyer ignores them - assertQueryEquals(tc,_T("3"), NULL, _T("")); - assertQueryEquals(tc,_T("term 1.0 1 2"), NULL, _T("term")); - assertQueryEquals(tc,_T("term term1 term2"), NULL, _T("term term term")); - - StandardAnalyzer a; - assertQueryEquals(tc,_T("3"), &a, _T("3")); - assertQueryEquals(tc,_T("term 1.0 1 2"), &a, _T("term 1.0 1 2")); - assertQueryEquals(tc,_T("term term1 term2"), &a, _T("term term1 term2")); -} - -void testWildcard(CuTest *tc) { - - assertQueryEquals(tc,_T("term*"), NULL, _T("term*")); - assertQueryEquals(tc,_T("term*^2"), NULL, _T("term*^2.0")); - -#ifndef NO_FUZZY_QUERY - assertQueryEquals(tc,_T("term~"), NULL, _T("term~0.5")); - assertQueryEquals(tc,_T("term~^2"), NULL, _T("term^2.0~0.5")); - assertQueryEquals(tc,_T("term^2~"), NULL, _T("term^2.0~0.5")); - assertTrue(tc, _T("term~"), NULL,_T("FuzzyQuery"), _T("term~0.5")); -#endif - assertQueryEquals(tc,_T("term*germ"), NULL, _T("term*germ")); - assertQueryEquals(tc,_T("term*germ^3"), NULL, _T("term*germ^3.0")); - - assertTrue(tc, _T("term*"), NULL,_T("PrefixQuery"), _T("term*")); - assertTrue(tc, _T("term*^2"), NULL,_T("PrefixQuery"), _T("term*^2.0")); - assertTrue(tc, _T("term*germ"), NULL,_T("WildcardQuery"), _T("term*germ")); -} - -void testQPA(CuTest *tc) { - QPTestAnalyzer qpAnalyzer; - assertQueryEquals(tc,_T("term term term"), &qpAnalyzer, _T("term term term") ); - assertQueryEquals(tc,_T("term +stop term"), &qpAnalyzer, _T("term term") ); - assertQueryEquals(tc,_T("term -stop term"), &qpAnalyzer, _T("term term") ); - assertQueryEquals(tc,_T("drop AND stop AND roll"), &qpAnalyzer, _T("+drop +roll") ); - assertQueryEquals(tc,_T("term phrase term"), &qpAnalyzer, - _T("term \"phrase1 phrase2\" term") ); - assertQueryEquals(tc,_T("term AND NOT phrase term"), &qpAnalyzer, - _T("+term -\"phrase1 phrase2\" term") ); - assertQueryEquals(tc,_T("stop"), &qpAnalyzer, _T("") ); - assertTrue(tc, _T("term term term"), &qpAnalyzer,_T("BooleanQuery"), _T("term term term")); - assertTrue(tc, _T("term +stop"), &qpAnalyzer,_T("TermQuery"), _T("term +stop")); -} - -void testRange(CuTest *tc) { - StandardAnalyzer a; - - assertQueryEquals(tc,_T("[ a z]"), NULL, _T("[a TO z]")); - assertTrue(tc, _T("[ a z]"), NULL, _T("RangeQuery"), _T("[ a z]") ); - assertQueryEquals(tc,_T("[ a z ]"), NULL, _T("[a TO z]")); - assertQueryEquals(tc,_T("{ a z}"), NULL, _T("{a TO z}")); - assertQueryEquals(tc,_T("{ a z }"), NULL, _T("{a TO z}")); - assertQueryEquals(tc,_T("{ a z }^2.0"), NULL, _T("{a TO z}^2.0")); - assertQueryEquals(tc,_T("[ a z] OR bar"), NULL, _T("[a TO z] bar")); - assertQueryEquals(tc,_T("[ a z] AND bar"), NULL, _T("+[a TO z] +bar")); - assertQueryEquals(tc,_T("( bar blar { a z}) "), NULL, _T("bar blar {a TO z}")); - assertQueryEquals(tc,_T("gack ( bar blar { a z}) "), NULL, _T("gack (bar blar {a TO z})")); - - assertQueryEquals(tc,_T("[050-070]"), &a, _T("[050 TO -070]")); -} - -void testEscaped(CuTest *tc) { - WhitespaceAnalyzer a; - assertQueryEquals(tc, _T("\\[brackets"), &a, _T("[brackets") ); - assertQueryEquals(tc, _T("\\\\\\[brackets"), &a, _T("\\[brackets") ); - assertQueryEquals(tc,_T("\\[brackets"), NULL, _T("brackets") ); - - assertQueryEquals(tc,_T("a\\-b:c"), &a, _T("a-b:c") ); - assertQueryEquals(tc,_T("a\\+b:c"), &a, _T("a+b:c") ); - assertQueryEquals(tc,_T("a\\:b:c"), &a, _T("a:b:c") ); - assertQueryEquals(tc,_T("a\\\\b:c"), &a, _T("a\\b:c") ); - - assertQueryEquals(tc,_T("a:b\\-c"), &a, _T("a:b-c") ); - assertQueryEquals(tc,_T("a:b\\+c"), &a, _T("a:b+c") ); - assertQueryEquals(tc,_T("a:b\\:c"), &a, _T("a:b:c") ); - assertQueryEquals(tc,_T("a:b\\\\c"), &a, _T("a:b\\c") ); - - assertQueryEquals(tc,_T("a:b\\-c*"), &a, _T("a:b-c*") ); - assertQueryEquals(tc,_T("a:b\\+c*"), &a, _T("a:b+c*") ); - assertQueryEquals(tc,_T("a:b\\:c*"), &a, _T("a:b:c*") ); - - assertQueryEquals(tc,_T("a:b\\\\c*"), &a, _T("a:b\\c*") ); - - assertQueryEquals(tc,_T("a:b\\-?c"), &a, _T("a:b-?c") ); - assertQueryEquals(tc,_T("a:b\\+?c"), &a, _T("a:b+?c") ); - assertQueryEquals(tc,_T("a:b\\:?c"), &a, _T("a:b:?c") ); - - assertQueryEquals(tc,_T("a:b\\\\?c"), &a, _T("a:b\\?c") ); - - assertQueryEquals(tc,_T("a:b\\-c~"), &a, _T("a:b-c~0.5") ); - assertQueryEquals(tc,_T("a:b\\+c~"), &a, _T("a:b+c~0.5") ); - assertQueryEquals(tc,_T("a:b\\:c~"), &a, _T("a:b:c~0.5") ); - assertQueryEquals(tc,_T("a:b\\\\c~"), &a, _T("a:b\\c~0.5") ); - - assertQueryEquals(tc,_T("[ a\\- TO a\\+ ]"), &a, _T("[a- TO a+]") ); - assertQueryEquals(tc,_T("[ a\\: TO a\\~ ]"), &a, _T("[a: TO a~]") ); - assertQueryEquals(tc,_T("[ a\\\\ TO a\\* ]"), &a, _T("[a\\ TO a*]") ); -} - - -CuSuite *testQueryParser(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Query Parser Test")); - - SUITE_ADD_TEST(suite, testSimple); - SUITE_ADD_TEST(suite, testQPA); - SUITE_ADD_TEST(suite, testEscaped); - SUITE_ADD_TEST(suite, testNumber); - SUITE_ADD_TEST(suite, testPunct); - -#ifndef NO_FUZZY_QUERY - SUITE_ADD_TEST(suite, testSlop); -#endif -#ifndef NO_RANGE_QUERY - SUITE_ADD_TEST(suite, testRange); -#endif -#ifndef NO_WILDCARD_QUERY - SUITE_ADD_TEST(suite, testWildcard); -#endif - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/README clucene-core-2.3.3.4/test/README --- clucene-core-0.9.21b/test/README 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/README 1970-01-01 00:00:00.000000000 +0000 @@ -1,239 +0,0 @@ -Writing CLucene tests - -The Full Suite --------------- - -/* The driver function. This must return a CuSuite variable, which will - * then be used to actually run the tests. Essentially, all Suites are a - * collection of tests. The driver will take each Suite, and put it in a - * SuiteList, which is a collection of Suites. - */ -CuSuite *testtime(void) -{ - /* The actual suite, this must be created for each test program. Please - * give it a useful name, that will inform the user of the feature being - * tested. - */ - CuSuite *suite = CuSuiteNew("Test Time"); - - /* Each function must be added to the suite. Each function represents - * a single test. It is possible to test multiple features in a single - * function, although no tests currently do that. - */ - SUITE_ADD_TEST(suite, test_now); - SUITE_ADD_TEST(suite, test_gmtstr); - SUITE_ADD_TEST(suite, test_localstr); - SUITE_ADD_TEST(suite, test_exp_get_gmt); - SUITE_ADD_TEST(suite, test_exp_get_lt); - SUITE_ADD_TEST(suite, test_imp_gmt); - SUITE_ADD_TEST(suite, test_rfcstr); - SUITE_ADD_TEST(suite, test_ctime); - SUITE_ADD_TEST(suite, test_strftime); - SUITE_ADD_TEST(suite, test_strftimesmall); - SUITE_ADD_TEST(suite, test_exp_tz); - SUITE_ADD_TEST(suite, test_strftimeoffset); - - /* You must return the suite so that the driver knows which suites to - * run. - */ - return suite; -} - -Building the full driver ------------------------- - -All you need to do to build the full driver is run: - - make testall - -To run it, run: - - ./testall - -Caveats -------- - -Currently, some tests are known to fail in certain circumstances: - - * 'testpoll' opens 64 sockets concurrently; ensure that resource -limits are high enough to allow this (using ulimit or limit); for -instance, Solaris <=2.7 and HP-UX 11.00 both set the limit to <=64 by -default - - * 'testipsub' will tickle the Solaris 8 getaddrinfo() IPv6 -bug, causing the test to hang. Configure with --disable-ipv6 if using -an unpatched Solaris 8 installation. - - * The 'testdso' tests will not work if configured with ---disable-shared since the loadable modules cannot be built. - -Running individual tests ---------------------------------- - -It is not possible to build individual tests, however it is possible to -run individual tests. When running the test suite, specify the name of the -tests that you want to run on the command line. For example: - - ./testall teststr testrand - -Will run the Strings and Random generator tests. - -Reading the test suite output ------------------------------ - -Once you run the test suite, you will get output like: - -All APR Tests: - Test Strings: .... - Test Time: ............ - -16 tests run: 16 passed, 0 failed, 0 not implemented. - -There are a couple of things to look at with this. First, if you look at the -first function in this document, you should notice that the string passed to -the CuSuiteNew function is in the output. That is why the string should -explain the feature you are testing. - -Second, this test passed completely. This is obvious in two ways. First, and -most obvious, the summary line tells you that 16 tests were run and 16 tests -passed. However, the results can also be found in the lines above. Every -'.' in the output represents a passed test. - -If a test fails, the output will look like: - -All APR Tests: - Test Strings: .... - Test Time: ..F......... - -16 tests run: 15 passed, 1 failed, 0 not implemented. - -This is not very useful, because you don't know which test failed. However, -once you know that a test failed, you can run the suite again, with the --v option. If you do this, you will get something like: - -All APR Tests: - Test Strings: .... - Test Time: ..F......... - -16 tests run: 15 passed, 1 failed, 0 not implemented. -Failed tests: -1) test_localstr: assert failed - -In this case, we know the test_localstr function failed, and there is an -Assert in this that failed (I modified the test to fail for this document). -Now, you can look at what that test does, and why it would have failed. - -There is one other possible output for the test suite (run with -v): - -All APR Tests: - Test Strings: .... - Test Time: ..N......... - -16 tests run: 15 passed, 0 failed, 1 not implemented. - -Not Implemented tests: - -Not Implemented tests: -1) test_localstr: apr_time_exp_lt not implemented on this platform - -The 'N' means that a function has returned APR_ENOTIMPL. This should be -treated as an error, and the function should be implemented as soon as -possible. - -Adding New test Suites to the full driver -------------------------------------------- - -To add a new Suite to the full driver, you must make a couple of modifications. - -1) Edit test_apr.h, and add the prototype for the function. -2) Edit testall.c, and add the function and name to the tests array. -3) Edit Makefile.in, and add the .lo file to the testall target. - -Once those four things are done, your tests will automatically be added -to the suite. - -Writing tests -------------- - -There are a couple of rules for writing good tests for the test suite. - -1) All tests can determine for themselves if it passed or not. This means -that there is no reason for the person running the test suite to interpret -the results of the tests. -2) Never use printf to add to the output of the test suite. The suite -library should be able to print all of the information required to debug -a problem. -3) Functions should be tested with both positive and negative tests. This -means that you should test things that should both succeed and fail. -4) Just checking the return code does _NOT_ make a useful test. You must -check to determine that the test actually did what you expected it to do. - -An example test ---------------- - -Finally, we will look at a quick test: - -/* All tests are passed a CuTest variable. This is how the suite determines - * if the test succeeded or failed. - */ -static void test_localstr(CuTest *tc) -{ - apr_status_t rv; - apr_time_exp_t xt; - time_t os_now; - - rv = apr_time_exp_lt(&xt, now); - os_now = now / APR_USEC_PER_SEC; - - /* If the function can return APR_ENOTIMPL, then you should check for it. - * This allows platform implementors to know if they have to implement - * the function. - */ - if (rv == APR_ENOTIMPL) { - CuNotImpl(tc, "apr_time_exp_lt"); - } - - /* It often helps to ensure that the return code was APR_SUCESS. If it - * wasn't, then we know the test failed. - */ - CuAssertTrue(tc, rv == APR_SUCCESS); - - /* Now that we know APR thinks it worked properly, we need to check the - * output to ensure that we got what we expected. - */ - CuAssertStrEquals(tc, "2002-08-14 12:05:36.186711 -25200 [257 Sat] DST", - print_time(p, &xt)); -} - -Notice, the same test can fail for any of a number of reasons. The first -test to fail ends the test. - -CuTest ------- - -CuTest is an open source test suite written by Asim Jalis. It has been -released under the zlib/libpng license. That license can be found in the -CuTest.c and CuTest.h files. - -The version of CuTest that is included in the APR test suite has been modified -from the original distribution in the following ways: - -1) The original distribution does not have a -v flag, the details are always -printed. -2) The NotImplemented result does not exist. -3) SuiteLists do not exist. In the original distribution, you can add suites -to suites, but it just adds the tests in the first suite to the list of tests -in the original suite. The output wasn't as detailed as I wanted, so I created -SuiteLists. - -The first two modifications have been sent to the original author of CuTest, -but they have not been integrated into the base distribution. The SuiteList -changes will be sent to the original author soon. - -The modified version of CuTest is not currently in any CVS or Subversion -server. In time, it will be hosted at rkbloom.net. - -There are currently no docs for how to write tests, but the teststr and -testtime programs should give an idea of how it is done. In time, a document -should be written to define how tests are written. - diff -Nru clucene-core-0.9.21b/test/search/Makefile.am clucene-core-2.3.3.4/test/search/Makefile.am --- clucene-core-0.9.21b/test/search/Makefile.am 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/search/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -test_searchdir = $(tstsrcdir)/search - -cl_test_SOURCES += $(test_searchdir)/TestDateFilter.cpp -cl_test_SOURCES += $(test_searchdir)/TestForDuplicates.cpp -cl_test_SOURCES += $(test_searchdir)/TestSearch.cpp -cl_test_SOURCES += $(test_searchdir)/TestSort.cpp -cl_test_SOURCES += $(test_searchdir)/TestTermVector.cpp -cl_test_SOURCES += $(test_searchdir)/TestWildcard.cpp diff -Nru clucene-core-0.9.21b/test/search/TestDateFilter.cpp clucene-core-2.3.3.4/test/search/TestDateFilter.cpp --- clucene-core-0.9.21b/test/search/TestDateFilter.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/search/TestDateFilter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,201 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - - void testBefore(CuTest *tc) { - // create an index - char fsdir[CL_MAX_PATH]; - sprintf(fsdir,"%s/%s",cl_tempDir, "dfindex"); - - FSDirectory* indexStore = FSDirectory::getDirectory( fsdir,true); - Analyzer* a = _CLNEW SimpleAnalyzer(); - IndexWriter* writer = _CLNEW IndexWriter(indexStore, a, true); - int64_t now = Misc::currentTimeMillis()/1000; - - Document doc; - // add time that is in the past - TCHAR* tn = DateField::timeToString(now - 1000); - doc.add(*Field::Keyword( _T("datefield"), tn)); - _CLDELETE_CARRAY(tn); - doc.add(*Field::Text(_T("body"), _T("Today is a very sunny day in New York City"))); - writer->addDocument(&doc); - writer->close(); - _CLDELETE( writer ); - - IndexReader* reader = IndexReader::open(indexStore); - IndexSearcher* searcher = _CLNEW IndexSearcher(reader); - - // filter that should preserve matches - DateFilter* df1 = DateFilter::Before(_T("datefield"), now); - - // filter that should discard matches - DateFilter* df2 = DateFilter::Before(_T("datefield"), now - 999999); - - // search something that doesn't exist with DateFilter - Term* term = _CLNEW Term(_T("body"), _T("NoMatchForThis")); - Query* query1 = _CLNEW TermQuery(term); - _CLDECDELETE(term); - - // search for something that does exists - term=_CLNEW Term(_T("body"), _T("sunny")); - Query* query2 = _CLNEW TermQuery(term); - _CLDECDELETE(term); - - Hits* result = NULL; - - // ensure that queries return expected results without DateFilter first - result = searcher->search(query1); - CLUCENE_ASSERT(0 == result->length()); - _CLDELETE(result); - - result = searcher->search(query2); - CLUCENE_ASSERT(1 == result->length()); - _CLDELETE(result); - - // run queries with DateFilter - result = searcher->search(query1, df1); - CLUCENE_ASSERT(0 == result->length()); - _CLDELETE(result); - - result = searcher->search(query1, df2); - CLUCENE_ASSERT(0 == result->length()); - _CLDELETE(result); - - result = searcher->search(query2, df1); - CLUCENE_ASSERT(1 == result->length()); - _CLDELETE(result); - - result = searcher->search(query2, df2); - CLUCENE_ASSERT(0 == result->length()); - _CLDELETE(result); - - reader->close(); - searcher->close(); - _CLDELETE(a) - _CLDELETE(reader); - _CLDELETE(searcher); - _CLDELETE(query1); - _CLDELETE(query2); - _CLDELETE(df1); - _CLDELETE(df2); - - indexStore->close(); - _CLDECDELETE(indexStore); - } - - void testAfter(CuTest *tc) { - // create an index - RAMDirectory* indexStore = _CLNEW RAMDirectory; - Analyzer* a = _CLNEW SimpleAnalyzer(); - IndexWriter* writer = _CLNEW IndexWriter(indexStore, a, true); - int64_t now = Misc::currentTimeMillis()/1000; - - // add time that is in the future - TCHAR* tf = DateField::timeToString(now + 888888); - - Document* doc = _CLNEW Document; - doc->add(*Field::Keyword(_T("datefield"), tf)); - _CLDELETE_CARRAY(tf); - - doc->add(*Field::Text(_T("body"), _T("Today is a very sunny day in New York City"))); - writer->addDocument(doc); - _CLDELETE(doc); - - writer->close(); - _CLDELETE( writer ); - - //read the index - IndexReader* reader = IndexReader::open(indexStore); - IndexSearcher* searcher = _CLNEW IndexSearcher(reader); - - // filter that should preserve matches - DateFilter* df1 = DateFilter::After(_T("datefield"), now); - - // filter that should discard matches - DateFilter* df2 = DateFilter::After(_T("datefield"), now + 999999); - - // search something that doesn't exist with DateFilter - Term* term = _CLNEW Term(_T("body"), _T("NoMatchForThis")); - Query* query1 = _CLNEW TermQuery(term); - _CLDECDELETE(term); - - // search for something that does exists - term=_CLNEW Term(_T("body"), _T("sunny")); - Query* query2 = _CLNEW TermQuery(term); - _CLDECDELETE(term); - - Hits* result = NULL; - - // ensure that queries return expected results without DateFilter first - result = searcher->search(query1); - CLUCENE_ASSERT(0 == result->length()); - _CLDELETE(result); - - result = searcher->search(query2); - CLUCENE_ASSERT(1 == result->length()); - _CLDELETE(result); - - // run queries with DateFilter - result = searcher->search(query1, df1); - CLUCENE_ASSERT(0 == result->length()); - _CLDELETE(result); - - result = searcher->search(query1, df2); - CLUCENE_ASSERT(0 == result->length()); - _CLDELETE(result); - - result = searcher->search(query2, df1); - CLUCENE_ASSERT(1 == result->length()); - _CLDELETE(result); - - result = searcher->search(query2, df2); - CLUCENE_ASSERT(0 == result->length()); - _CLDELETE(result); - - reader->close(); - searcher->close(); - - _CLDELETE(query1); - _CLDELETE(query2); - _CLDELETE(df1); - _CLDELETE(df2); - _CLDELETE(reader); - _CLDELETE(searcher); - _CLDELETE(a); - indexStore->close(); - _CLDECDELETE(indexStore); - } - - void testDateFilterDestructor(CuTest *tc){ - char loc[1024]; - strcpy(loc, clucene_data_location); - strcat(loc, "/reuters-21578-index"); - - CuAssert(tc,_T("Index does not exist"),Misc::dir_Exists(loc)); - IndexReader* reader = IndexReader::open(loc); - int64_t now = Misc::currentTimeMillis()/1000; - DateFilter* df1 = DateFilter::After(_T("datefield"), now); - BitSet* bs = df1->bits(reader); - _CLDELETE(bs); - _CLDELETE(df1); - - reader->close(); - _CLDELETE(reader); - } - - -CuSuite *testdatefilter(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene DateFilter Test")); - - SUITE_ADD_TEST(suite, testDateFilterDestructor); - SUITE_ADD_TEST(suite, testBefore); - SUITE_ADD_TEST(suite, testAfter); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/search/TestForDuplicates.cpp clucene-core-2.3.3.4/test/search/TestForDuplicates.cpp --- clucene-core-0.9.21b/test/search/TestForDuplicates.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/search/TestForDuplicates.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - - static void print_tHits( CuTest *tc, Hits* hits ) { - CuMessageA(tc,"%d total results\n\n", hits->length()); - - for (int32_t i = 0 ; i < hits->length(); i++) { - if ( i < 10 || (i > 94 && i < 105) ) { - const Document& d = hits->doc(i); - CuMessage(tc, _T("%d %s\n"), i, d.get(_T("id")) ); - } - } - } - - void testSearchTestForDuplicatesRaw(CuTest *tc){ - const int MAX_DOCS=1500; - char *strBody[10] = {"test", "value", "why not", "computer", "clucene", - "sun", "program", "main", "database", "code"}; - RAMDirectory ram; - - //--- - WhitespaceAnalyzer an; - IndexWriter* writer = _CLNEW IndexWriter(&ram, &an, true); - Document *doc = 0; - - //--- - TCHAR strDb[1024]; - //printf("Indexing, please wait...\n"); - for (int32_t i = 0; i < MAX_DOCS; i++) { - //**** - //printf("%d/%d=%s\n", i, MAX_DOCS,strBody[i%10]); - doc = _CLNEW Document(); - - //--- - _sntprintf(strDb, 1024, _T("%d"), i); - doc->add( *Field::Keyword(_T("id"), strDb ) ); - - STRCPY_AtoT(strDb, strBody[i%10], 1022); - doc->add(*Field::UnStored(_T("body"), strDb ) ); - //--- - writer->addDocument(doc); - _CLDELETE(doc); - //**** - } - //printf("\nDone.\n"); - - //--- - writer->close(); - _CLDELETE(writer); - - - - IndexSearcher searcher(&ram); - //--- - int32_t dupl = 0; - Query* query = QueryParser::parse(_T("test"), _T("body"), &an); - Hits* result = searcher.search(query); - - CLUCENE_ASSERT(result->length()==((int)MAX_DOCS/10)); - - //printf("Building result map...\n"); - CLSet resMap; - int32_t id; - for (int32_t j = 0; j < result->length(); j++) { - doc = &result->doc(j); - - TCHAR* end; - id = (int32_t)_tcstoi64(doc->get(_T("id")), &end, 10); - if ( !resMap.exists(id) ) { - resMap.put(id, 1); - //printf("Inserted $d\n",id); - } else { - TCHAR tmp[2048]; - _sntprintf(tmp,2048,_T("Duplicated result found - Id: %d\n"), id); - CuAssert(tc,tmp,false); - dupl++; - } - } - //printf("Total duplicated found: %d\n", dupl); - - //--- - _CLDELETE(result); - _CLDELETE(query); - searcher.close(); - ram.close(); - } - - void testSearchTestForDuplicates(CuTest *tc) { - RAMDirectory directory; - SimpleAnalyzer analyzer; - IndexWriter* writer = _CLNEW IndexWriter(&directory, &analyzer, true); - const int32_t MAX_DOCS = 255; - - for (int32_t j = 0; j < MAX_DOCS; j++) { - Document* d = _CLNEW Document(); - d->add(*Field::Text(_T("priority"), _T("high"))); - TCHAR buf[80]; - _i64tot(j,buf,10); - d->add(*Field::Text(_T("id"), buf)); - writer->addDocument(d); - - _CLDELETE(d); - } - writer->close(); - _CLDELETE(writer); - - // try a search without OR - Searcher* searcher = _CLNEW IndexSearcher( &directory ); - QueryParser* parser = _CLNEW QueryParser(_T("priority"), &analyzer); - Hits* hits = NULL; - - Query* query = parser->parse(_T("high")); - TCHAR* tmp = query->toString(_T("priority")); - CuMessage(tc, _T("Query: %s\n"), tmp ); - _CLDELETE_CARRAY(tmp); - - hits = searcher->search(query); - print_tHits(tc, hits); - _CLDELETE(hits); - _CLDELETE(query); - _CLDELETE(parser); - - searcher->close(); - _CLDELETE(searcher); - - - - // try a new search with OR - searcher = _CLNEW IndexSearcher( &directory ); - parser = _CLNEW QueryParser(_T("priority"), &analyzer); - hits = NULL; - - query = parser->parse(_T("high OR medium")); - tmp = query->toString(_T("priority")); - CuMessage(tc, _T("Query: %s\n"), tmp ); - _CLDELETE_CARRAY(tmp); - - hits = searcher->search(query); - print_tHits(tc, hits); - _CLDELETE(hits); - _CLDELETE(query); - _CLDELETE(parser); - - searcher->close(); - _CLDELETE(searcher); - - directory.close(); - } - - -CuSuite *testduplicates(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Duplicates Test")); - - SUITE_ADD_TEST(suite, testSearchTestForDuplicates); - SUITE_ADD_TEST(suite, testSearchTestForDuplicatesRaw); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/search/TestSearch.cpp clucene-core-2.3.3.4/test/search/TestSearch.cpp --- clucene-core-0.9.21b/test/search/TestSearch.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/search/TestSearch.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,368 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - - SimpleAnalyzer a; - StandardAnalyzer aStd; - WhitespaceAnalyzer aWS; - IndexSearcher* s=NULL; - - void _TestSearchesRun( Analyzer* analyzer, Searcher* search, TCHAR* qry){ - Query* q = NULL; - Hits* h = NULL; - try{ - q = QueryParser::parse(qry , _T("contents"), analyzer); - if ( q != NULL ){ - h = search->search( q ); - - if ( h->length() > 0 ){ - //check for explanation memory leaks... - Explanation expl1; - search->explain(q, h->id(0), &expl1); - TCHAR* tmp = expl1.toString(); - _CLDELETE_CARRAY(tmp); - if ( h->length() > 1 ){ //do a second one just in case - Explanation expl2; - search->explain(q, h->id(1), &expl2); - tmp = expl2.toString(); - _CLDELETE_CARRAY(tmp); - } - } - } - }_CLFINALLY( - _CLDELETE(h); - _CLDELETE(q); - ); - } - - void testSrchOpenIndex(CuTest *tc ){ - char loc[1024]; - strcpy(loc, clucene_data_location); - strcat(loc, "/reuters-21578-index"); - - CuAssert(tc,_T("Index does not exist"), Misc::dir_Exists(loc)); - s=_CLNEW IndexSearcher(loc); - } - void testSrchCloseIndex(CuTest *tc ){ - if ( s!=NULL ){ - s->close(); - _CLDELETE(s); - } - } - - void testSrchPunctuation(CuTest *tc ){ - CuAssert(tc,_T("Searcher was not open"),s!=NULL); - - //test punctuation - _TestSearchesRun(&a,s, _T("a&b") ); - _TestSearchesRun(&a,s, _T("a&&b") ); - _TestSearchesRun(&a,s, _T(".NET") ); - } - - void testSrchSlop(CuTest *tc ){ -#ifdef NO_FUZZY_QUERY - CuNotImpl(tc,_T("Fuzzy")); -#else - CuAssert(tc,_T("Searcher was not open"),s!=NULL); - //test slop - _TestSearchesRun(&a,s, _T("\"term germ\"~2") ); - _TestSearchesRun(&a,s, _T("\"term germ\"~2 flork") ); - _TestSearchesRun(&a,s, _T("\"term\"~2") ); - _TestSearchesRun(&a,s, _T("\" \"~2 germ") ); - _TestSearchesRun(&a,s, _T("\"term germ\"~2^2") ); -#endif - } - - void testSrchNumbers(CuTest *tc ){ - CuAssert(tc,_T("Searcher was not open"),s!=NULL); - - // The numbers go away because SimpleAnalzyer ignores them - _TestSearchesRun(&a,s, _T("3") ); - _TestSearchesRun(&a,s, _T("term 1.0 1 2") ); - _TestSearchesRun(&a,s, _T("term term1 term2") ); - - _TestSearchesRun(&aStd,s, _T("3") ); - _TestSearchesRun(&aStd,s, _T("term 1.0 1 2") ); - _TestSearchesRun(&aStd,s, _T("term term1 term2") ); - } - - void testSrchWildcard(CuTest *tc ){ -#ifdef NO_WILDCARD_QUERY - CuNotImpl(tc,_T("Wildcard")); -#else - CuAssert(tc,_T("Searcher was not open"),s!=NULL); - //testWildcard - _TestSearchesRun(&a,s, _T("term*") ); - _TestSearchesRun(&a,s, _T("term*^2") ); - _TestSearchesRun(&a,s, _T("term~") ); - _TestSearchesRun(&a,s, _T("term^2~") ); - _TestSearchesRun(&a,s, _T("term~^2") ); - _TestSearchesRun(&a,s, _T("term*germ") ); - _TestSearchesRun(&a,s, _T("term*germ^3") ); - - //test problem reported by Gary Mangum - BooleanQuery* bq = _CLNEW BooleanQuery(); - Term* upper = _CLNEW Term(_T("contents"),_T("0105")); - Term* lower = _CLNEW Term(_T("contents"),_T("0105")); - RangeQuery* rq=_CLNEW RangeQuery(lower,upper,true); - bq->add(rq,true,true,false); - _CLDECDELETE(upper); - _CLDECDELETE(lower); - - Term* prefix = _CLNEW Term(_T("contents"),_T("reuters21578")); - PrefixQuery* pq = _CLNEW PrefixQuery(prefix); - _CLDECDELETE(prefix); - bq->add(pq,true,true,false); - - Hits* h = NULL; - try{ - h = s->search( bq ); - }_CLFINALLY( - _CLDELETE(h); - _CLDELETE(bq); - ); -#endif - } - - void testSrchEscapes(CuTest *tc ){ - CuAssert(tc,_T("Searcher was not open"),s!=NULL); - //testEscaped - _TestSearchesRun(&aWS,s, _T("\\[brackets") ); - _TestSearchesRun(&a,s, _T("\\[brackets") ); - _TestSearchesRun(&aWS,s, _T("\\\\") ); - _TestSearchesRun(&aWS,s, _T("\\+blah") ); - _TestSearchesRun(&aWS,s, _T("\\(blah") ); - } - - void testSrchRange(CuTest *tc ){ -#ifdef NO_RANGE_QUERY - CuNotImpl(tc,_T("Range")); -#else - CuAssert(tc,_T("Searcher was not open"),s!=NULL); - //testRange - _TestSearchesRun(&a,s, _T("[ j m]") ); - _TestSearchesRun(&a,s, _T("[ j m ]") ); - _TestSearchesRun(&a,s, _T("{ j m}") ); - _TestSearchesRun(&a,s, _T("{ j m }") ); - _TestSearchesRun(&a,s, _T("{a - b}") ); - _TestSearchesRun(&a,s, _T("{ j m }^2.0") ); - _TestSearchesRun(&a,s, _T("[ j m] OR bar") ); - _TestSearchesRun(&a,s, _T("[ j m] AND bar") ); - _TestSearchesRun(&a,s, _T("( bar blar { j m}) ") ); - _TestSearchesRun(&a,s, _T("gack ( bar blar { j m}) ") ); -#endif - } - - void testSrchSimple(CuTest *tc ){ - CuAssert(tc,_T("Searcher was not open"),s!=NULL); - //simple tests - _TestSearchesRun(&a,s, _T("a AND b") ); - - _TestSearchesRun(&a,s, _T("term term term") ); - -#ifdef _UCS2 - TCHAR tmp1[100]; - lucene_utf8towcs(tmp1,"t\xc3\xbcrm term term",100); - _TestSearchesRun(&a,s, tmp1 ); - - lucene_utf8towcs(tmp1,"\xc3\xbcmlaut",100); - _TestSearchesRun(&a,s, tmp1 ); -#endif - - _TestSearchesRun(&a,s, _T("(a AND b)") ); - _TestSearchesRun(&a,s, _T("c OR (a AND b)") ); - _TestSearchesRun(&a,s, _T("a AND NOT b") ); - _TestSearchesRun(&a,s, _T("a AND -b") ); - _TestSearchesRun(&a,s, _T("a AND !b") ); - _TestSearchesRun(&a,s, _T("a && b") ); - _TestSearchesRun(&a,s, _T("a && ! b") ); - - _TestSearchesRun(&a,s, _T("a OR b") ); - _TestSearchesRun(&a,s, _T("a || b") ); - _TestSearchesRun(&a,s, _T("a OR !b") ); - _TestSearchesRun(&a,s, _T("a OR ! b") ); - _TestSearchesRun(&a,s, _T("a OR -b") ); - - _TestSearchesRun(&a,s, _T("+term -term term") ); - _TestSearchesRun(&a,s, _T("foo:term AND field:anotherTerm") ); - _TestSearchesRun(&a,s, _T("term AND \"phrase phrase\"") ); - _TestSearchesRun(&a,s, _T("\"hello there\"") ); - - _TestSearchesRun(&a,s, _T("a AND b") ); - _TestSearchesRun(&a,s, _T("hello") ); - _TestSearchesRun(&a,s, _T("\"hello there\"") ); - - _TestSearchesRun(&a,s, _T("germ term^2.0") ); - _TestSearchesRun(&a,s, _T("term^2.0") ); - _TestSearchesRun(&a,s, _T("term^2") ); - _TestSearchesRun(&a,s, _T("term^2.3") ); - _TestSearchesRun(&a,s, _T("\"germ term\"^2.0") ); - _TestSearchesRun(&a,s, _T("\"term germ\"^2") ); - - _TestSearchesRun(&a,s, _T("(foo OR bar) AND (baz OR boo)") ); - _TestSearchesRun(&a,s, _T("((a OR b) AND NOT c) OR d") ); - _TestSearchesRun(&a,s, _T("+(apple \"steve jobs\") -(foo bar baz)") ); - - _TestSearchesRun(&a,s, _T("+title:(dog OR cat) -author:\"bob dole\"") ); - - - _TestSearchesRun(&a,s, _T(".*") ); - _TestSearchesRun(&a,s, _T("<*") ); - _TestSearchesRun(&a,s, _T("/*") ); - _TestSearchesRun(&a,s, _T(";*") ); - } - -void SearchTest(CuTest *tc) { - uint64_t start = Misc::currentTimeMillis(); - - SimpleAnalyzer analyzer; - RAMDirectory ram; - IndexWriter writer( &ram, &analyzer, true); - writer.setUseCompoundFile(false); - - TCHAR* docs[] = { _T("a b c d e"), - _T("a b c d e a b c d e"), - _T("a b c d e f g h i j"), - _T("a c e"), - _T("e c a"), - _T("a c e a c e"), - _T("a c e a b c") - }; - - for (int j = 0; j < 7; j++) { - Document* d = _CLNEW Document(); - //no need to delete fields... document takes ownership - d->add(*Field::Text(_T("contents"),docs[j])); - - writer.addDocument(d); - _CLDELETE(d); - } - writer.close(); - - IndexReader* reader = IndexReader::open(&ram); - IndexSearcher searcher(reader); - TCHAR* queries[] = { - _T("\"a b\""), - _T("\"a b c\""), - _T("a AND b"), - _T("a c"), - _T("\"a c\""), - _T("\"a c e\""), - }; - int shouldbe[] = {4,4,4,7,3,3}; - Hits* hits = NULL; - QueryParser parser(_T("contents"), &analyzer); - - for (int k = 0; k < 6; k++) { - Query* query = parser.parse(queries[k]); - const TCHAR* qryInfo = query->toString(_T("contents")); - - hits = searcher.search(query); - CLUCENE_ASSERT( hits->length() == shouldbe[k] ); - - _CLDELETE_CARRAY(qryInfo); - _CLDELETE(hits); - _CLDELETE(query); - } - searcher.close(); - reader->close(); - _CLDELETE( reader ); - - CuMessageA (tc,"took %d milliseconds\n", Misc::currentTimeMillis()-start); -} - -void testNormEncoding(CuTest *tc) { - //just a quick test of the default similarity - CLUCENE_ASSERT(Similarity::getDefault()->queryNorm(1)==1.0); - - float_t f = Similarity::getDefault()->queryNorm(9); - f -= (1.0/3.0); - if ( f < 0 ) - f *= -1; - CLUCENE_ASSERT(f < 0.1); - - //test that div by zero is handled - float_t tmp = Similarity::getDefault()->lengthNorm(_T("test"),0); - tmp = Similarity::getDefault()->queryNorm(0); - - //test that norm encoding is working properly - CLUCENE_ASSERT( Similarity::encodeNorm(-1)==0 ); - CLUCENE_ASSERT( Similarity::encodeNorm(0)==0 ); - CLUCENE_ASSERT( Similarity::encodeNorm(1)==124 ); - CLUCENE_ASSERT( Similarity::encodeNorm(1)==124 ); - CLUCENE_ASSERT( Similarity::encodeNorm(7516192768.0 )==255); - - - CLUCENE_ASSERT( Similarity::decodeNorm(124)==1 ); - CLUCENE_ASSERT( Similarity::decodeNorm(255)==7516192768.0 ); - - //well know value: - CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(0.5f) == 120 ); - - //can decode self - CLUCENE_ASSERT( CL_NS(search)::Similarity::encodeNorm(CL_NS(search)::Similarity::decodeNorm(57)) == 57 ); -} - -void testSrchManyHits(CuTest *tc) { - SimpleAnalyzer analyzer; - RAMDirectory ram; - IndexWriter writer( &ram, &analyzer, true); - - TCHAR* docs[] = { _T("a b c d e"), - _T("a b c d e a b c d e"), - _T("a b c d e f g h i j"), - _T("a c e"), - _T("e c a"), - _T("a c e a c e"), - _T("a c e a b c") - }; - - for (int j = 0; j < 140; j++) { - Document* d = _CLNEW Document(); - //no need to delete fields... document takes ownership - int x = j%7; - d->add(*Field::Text(_T("contents"),docs[x])); - - writer.addDocument(d); - _CLDELETE(d); - } - writer.close(); - - IndexSearcher searcher(&ram); - - BooleanQuery query; - Term* t = _CLNEW Term(_T("contents"), _T("a")); - query.add(_CLNEW TermQuery(t),true,false, false); - _CLDECDELETE(t); - Hits* hits = searcher.search(&query); - for ( int32_t x=0;xlength();x++ ){ - Document& doc = hits->doc(x); - } - _CLDELETE(hits); - searcher.close(); -} - -CuSuite *testsearch(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Search Test")); - SUITE_ADD_TEST(suite, SearchTest); - - SUITE_ADD_TEST(suite, testNormEncoding); - SUITE_ADD_TEST(suite, testSrchManyHits); - SUITE_ADD_TEST(suite, testSrchOpenIndex); - SUITE_ADD_TEST(suite, testSrchPunctuation); - SUITE_ADD_TEST(suite, testSrchSlop); - SUITE_ADD_TEST(suite, testSrchNumbers); - SUITE_ADD_TEST(suite, testSrchWildcard); - SUITE_ADD_TEST(suite, testSrchEscapes); - SUITE_ADD_TEST(suite, testSrchRange); - SUITE_ADD_TEST(suite, testSrchSimple); - SUITE_ADD_TEST(suite, testSrchCloseIndex); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/search/TestSort.cpp clucene-core-2.3.3.4/test/search/TestSort.cpp --- clucene-core-0.9.21b/test/search/TestSort.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/search/TestSort.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,532 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" -/** - * Unit tests for sorting code. - * - */ - -Searcher* sort_full; -Searcher* sort_searchX; -Searcher* sort_searchY; -Query* sort_queryX; -Query* sort_queryY; -Query* sort_queryA; -Query* sort_queryF; -Sort* _sort; -SimpleAnalyzer sort_analyser; - -#define sortScores CLHashMap - -// document data: -// the tracer field is used to determine which document was hit -// the contents field is used to search and _sort by relevance -// the int field to _sort by int -// the float field to _sort by float -// the string field to _sort by string -const TCHAR* data[11][6] = { - // tracer contents int float string custom - { _T("A"), _T("x a"), _T("5"), _T("4f"), _T("c"), _T("A-3") }, - { _T("B"), _T("y a"), _T("5"), _T("3.4028235E38"), _T("i"), _T("B-10") }, - { _T("C"), _T("x a b c"), _T("2147483647"), _T("1.0"), _T("j"), _T("A-2") }, - { _T("D"), _T("y a b c"), _T("-1"), _T("0.0f"), _T("a"), _T("C-0") }, - { _T("E"), _T("x a b c d"), _T("5"), _T("2f"), _T("h"), _T("B-8") }, - { _T("F"), _T("y a b c d"), _T("2"), _T("3.14159f"), _T("g"), _T("B-1") }, - { _T("G"), _T("x a b c d"), _T("3"), _T("-1.0"), _T("f"), _T("C-100") }, - { _T("H"), _T("y a b c d"), _T("0"), _T("1.4E-45"), _T("e"), _T("C-88") }, - { _T("I"), _T("x a b c d e f"), _T("-2147483648"), _T("1.0e+0"), _T("d"), _T("A-10") }, - { _T("J"), _T("y a b c d e f"), _T("4"), _T(".5"), _T("b"), _T("C-7") }, - { _T("Z"), _T("f"), NULL, NULL, NULL, NULL } - }; - -Searcher* sort_getIndex (bool even, bool odd){ - RAMDirectory* indexStore = _CLNEW RAMDirectory; - IndexWriter writer(indexStore, &sort_analyser, true); - for (int i=0; i<11; ++i) { - if (((i%2)==0 && even) || ((i%2)==1 && odd)) { - Document doc; - doc.add (*_CLNEW Field ( _T("tracer"), data[i][0], true, false,false)); - doc.add (*_CLNEW Field ( _T("contents"), data[i][1], false, true,true)); - if (data[i][2] != NULL) - doc.add (*_CLNEW Field (_T("int"), data[i][2], false, true, false)); - if (data[i][3] != NULL) - doc.add (*_CLNEW Field (_T("float"), data[i][3], false, true, false)); - if (data[i][4] != NULL) - doc.add (*_CLNEW Field (_T("string"), data[i][4], false, true, false)); - if (data[i][5] != NULL) - doc.add (*_CLNEW Field (_T("custom"), data[i][5], false, true, false)); - writer.addDocument (&doc); - } - } - writer.close (); - IndexSearcher* res = _CLNEW IndexSearcher(indexStore); - _CLDECDELETE(indexStore); - return res; -} - -void testSortSetup(CuTest *tc) { - sort_full = sort_getIndex (true, true); - sort_searchX = sort_getIndex (true, false); - sort_searchY = sort_getIndex (false, true); - - Term* tmp; - - tmp = _CLNEW Term (_T("contents"), _T("x")); - sort_queryX = _CLNEW TermQuery (tmp); - _CLDECDELETE(tmp); - - tmp = _CLNEW Term (_T("contents"), _T("y")); - sort_queryY = _CLNEW TermQuery (tmp); - _CLDECDELETE(tmp); - - tmp = _CLNEW Term (_T("contents"), _T("a")); - sort_queryA = _CLNEW TermQuery (tmp); - _CLDECDELETE(tmp); - - tmp = _CLNEW Term (_T("contents"), _T("f")); - sort_queryF = _CLNEW TermQuery (tmp); - _CLDECDELETE(tmp); - - _sort = _CLNEW Sort(); -} - -void testSortCleanup(CuTest *tc) { - _CLDELETE(sort_full); - _CLDELETE(sort_searchX); - _CLDELETE(sort_searchY); - _CLDELETE(sort_queryX); - _CLDELETE(sort_queryY); - _CLDELETE(sort_queryA); - _CLDELETE(sort_queryF); - _CLDELETE(_sort); -} - -// make sure the documents returned by the search match the expected list -void sortMatches (CuTest *tc, Searcher* searcher, Query* query, Sort* sort, const TCHAR* expectedResult){ - Hits* result = searcher->search (query, sort); - StringBuffer buff(10); - int32_t n = result->length(); - for (int i=0; idoc(i); - TCHAR** v = doc.getValues(_T("tracer")); //todo: should be const??? - for (int j=0; v[j]!=NULL; ++j) { - buff.append (v[j]); - } - _CLDELETE_CARRAY_ALL(v); - } - CuAssertStrEquals (tc, _T("tracer value"), expectedResult, buff.getBuffer()); - - _CLDELETE(result); -} -void sortSameValues (CuTest* tc, sortScores* m1, sortScores* m2, bool deleteM1=false, bool deleteM2=true) { - CuAssertIntEquals (tc, _T("sortScores size not equal"),m1->size(), m2->size()); - sortScores::iterator iter = m1->begin(); - float_t m=pow(10.0,-8); - while (iter != m1->end()) { - TCHAR* key = iter->first; - - sortScores::iterator i1 = m1->find(key); - sortScores::iterator i2 = m2->find(key); - - float_t f1 = i1->second; - float_t f2 = i1->second; - - float_t diff = f1-f2; - if ( diff < 0 ) - diff *= -1; - if ( diff>m ) - CuAssert(tc,_T("sortSameValue f1!=f2"),false); - iter++; - } - - if ( deleteM1 ) - _CLDELETE(m1); - if ( deleteM2 ) - _CLDELETE(m2); -} -// make sure the documents returned by the search match the expected list pattern -void sortMatchesPattern (CuTest* tc, Searcher* searcher, Query* query, Sort* sort, const TCHAR* pattern){ - Hits* result = searcher->search (query, sort); - int32_t n = result->length(); - StringBuffer buff; - for (int i=0; idoc(i); - TCHAR** v = doc.getValues(_T("tracer")); - for (int j=0; v[j]!=NULL; ++j) { - buff.append (v[j]); - } - _CLDELETE_CARRAY_ALL(v); - } - - //todo:need to actually test these matches... don't have regexp... - CuMessage(tc,_T("\nmatching \"%s\" against pattern \"%s\""),buff.getBuffer(),pattern); - // System.out.println ("matching \""+buff+"\" against pattern \""+pattern+"\""); - //assertTrue (Pattern.compile(pattern).matcher(buff.toString()).matches()); - - _CLDELETE(result); -} - -// runs a variety of sorts useful for multisearchers -void sort_runMultiSorts (CuTest* tc, Searcher* multi) { - _sort->setSort (SortField::FIELD_DOC); - sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("[AB]{2}[CD]{2}[EF]{2}[GH]{2}[IJ]{2}")); - - _sort->setSort (_CLNEW SortField (_T("int"), SortField::INT, false)); - sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("IDHFGJ[ABE]{3}C")); - - SortField* sorts1[3]= {_CLNEW SortField (_T("int"), SortField::INT, false), SortField::FIELD_DOC, NULL}; - _sort->setSort ( sorts1 ); - sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("IDHFGJ[AB]{2}EC")); - - _sort->setSort (_T("int")); - sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("IDHFGJ[AB]{2}EC")); - - SortField* sorts2[3] = { _CLNEW SortField (_T("float"), SortField::FLOAT, false), SortField::FIELD_DOC, NULL}; - _sort->setSort (sorts2); - sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("GDHJ[CI]{2}EFAB")); - - _sort->setSort (_T("float")); - sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("GDHJ[CI]{2}EFAB")); - - _sort->setSort (_T("string")); - sortMatches (tc, multi, sort_queryA, _sort, _T("DJAIHGFEBC")); - - _sort->setSort (_T("int"), true); - sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("C[AB]{2}EJGFHDI")); - - _sort->setSort (_T("float"), true); - sortMatchesPattern (tc, multi, sort_queryA, _sort, _T("BAFE[IC]{2}JHDG")); - - _sort->setSort (_T("string"), true); - sortMatches (tc, multi, sort_queryA, _sort, _T("CBEFGHIAJD")); - - //_sort->setSort (_CLNEW SortField[] { _CLNEW SortField (_T("string"), Locale.US) }); - //sortMatches (tc, multi, sort_queryA, _sort, _T("DJAIHGFEBC")); - - //_sort->setSort (_CLNEW SortField[] { _CLNEW SortField (_T("string"), Locale.US, true) }); - //sortMatches (tc, multi, sort_queryA, _sort, _T("CBEFGHIAJD")); - - const TCHAR* sorts3[3] = {_T("int"),_T("float"),NULL}; - _sort->setSort ( sorts3 ); - sortMatches (tc, multi, sort_queryA, _sort, _T("IDHFGJEABC")); - - const TCHAR* sorts4[3] = {_T("float"),_T("string"),NULL}; - _sort->setSort (sorts4); - sortMatches (tc, multi, sort_queryA, _sort, _T("GDHJICEFAB")); - - _sort->setSort (_T("int")); - sortMatches (tc, multi, sort_queryF, _sort, _T("IZJ")); - - _sort->setSort (_T("int"), true); - sortMatches (tc, multi, sort_queryF, _sort, _T("JZI")); - - _sort->setSort (_T("float")); - sortMatches (tc, multi, sort_queryF, _sort, _T("ZJI")); - - _sort->setSort (_T("string")); - sortMatches (tc, multi, sort_queryF, _sort, _T("ZJI")); - - _sort->setSort (_T("string"), true); - sortMatches (tc, multi, sort_queryF, _sort, _T("IJZ")); -} - - sortScores* sort_getScores (CuTest* tc, Hits* hits, bool deleteHits=true){ - sortScores* scoreMap = _CLNEW sortScores(true,false); - int n = hits->length(); - for (int i=0; idoc(i); - TCHAR** v = doc.getValues( _T("tracer")); - - int vLength=0; - while(v[vLength]!=NULL) - vLength++; - - CuAssertIntEquals (tc, _T("tracer values"), vLength, 1); - - scoreMap->put (v[0], hits->score(i) ); - _CLDELETE_ARRAY(v); - } - if ( deleteHits ) - _CLDELETE(hits); - return scoreMap; -} - - - -////////////////////////////////////////////////////////////////////// -// The actual tests -////////////////////////////////////////////////////////////////////// -void testBuiltInSorts(CuTest *tc) { - _CLDELETE(_sort); - _sort = _CLNEW Sort(); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("ACEGI")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("BDFHJ")); - - _sort->setSort(SortField::FIELD_DOC); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("ACEGI")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("BDFHJ")); -} - -// test sorts where the type of field is specified -void testTypedSort(CuTest *tc){ - SortField* sorts1[3] = { _CLNEW SortField (_T("int"), SortField::INT,false), SortField::FIELD_DOC, NULL }; - _sort->setSort (sorts1); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("IGAEC")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("DHFJB")); - - SortField* sorts2[3] = { _CLNEW SortField (_T("float"), SortField::FLOAT,false), SortField::FIELD_DOC, NULL }; - _sort->setSort (sorts2); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("GCIEA")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("DHJFB")); - - SortField* sorts3[3] = { _CLNEW SortField (_T("string"), SortField::STRING,false), SortField::FIELD_DOC, NULL }; - _sort->setSort (sorts3); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("AIGEC")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("DJHFB")); -} - -// test sorts when there's nothing in the index -void testEmptyIndex(CuTest *tc) { - Searcher* empty = sort_getIndex(false,false); - - _CLDELETE(_sort); - _sort = _CLNEW Sort(); - sortMatches (tc, empty, sort_queryX, _sort, _T("")); - - _sort->setSort(SortField::FIELD_DOC); - sortMatches (tc, empty, sort_queryX, _sort, _T("")); - - SortField* sorts1[3] = { _CLNEW SortField (_T("int"), SortField::INT,false), SortField::FIELD_DOC, NULL }; - _sort->setSort (sorts1); - sortMatches (tc, empty, sort_queryX, _sort, _T("")); - - SortField* sorts3[3] = { _CLNEW SortField (_T("string"), SortField::STRING,false), SortField::FIELD_DOC, NULL }; - _sort->setSort (sorts3); - sortMatches (tc, empty, sort_queryX, _sort, _T("")); - - SortField* sorts2[3] = { _CLNEW SortField (_T("float"), SortField::FLOAT,false), SortField::FIELD_DOC, NULL }; - _sort->setSort (sorts2); - sortMatches (tc, empty, sort_queryX, _sort, _T("")); - - _CLDELETE(empty); -} - -// test sorts where the type of field is determined dynamically -void testAutoSort(CuTest *tc) { - _sort->setSort(_T("int")); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("IGAEC")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("DHFJB")); - - _sort->setSort(_T("float")); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("GCIEA")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("DHJFB")); - - _sort->setSort(_T("string")); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("AIGEC")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("DJHFB")); -} - -// test sorts in reverse -void testReverseSort(CuTest *tc){ - /*SortField* sorts[3] = { _CLNEW SortField (NULL, SortField::INT,true), SortField::FIELD_DOC, NULL }; - _sort->setSort (sorts); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("IEGCA")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("JFHDB"));*/ - - _sort->setSort (_CLNEW SortField (NULL, SortField::DOC, true)); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("IGECA")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("JHFDB")); - - _sort->setSort (_T("int"), true); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("CAEGI")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("BJFHD")); - - _sort->setSort (_T("float"), true); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("AECIG")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("BFJHD")); - - _sort->setSort (_T("string"), true); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("CEGIA")); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("BFHJD")); -} - -void testEmptyFieldSort(CuTest *tc) { - _sort->setSort ( _T("string")); - sortMatches (tc, sort_full, sort_queryF, _sort, _T("ZJI")); - - _sort->setSort ( _T("string"), true); - sortMatches (tc, sort_full, sort_queryF, _sort, _T("IJZ")); - - _sort->setSort ( _T("int")); - sortMatches (tc, sort_full, sort_queryF, _sort, _T("IZJ")); - - _sort->setSort ( _T("int"), true); - sortMatches (tc, sort_full, sort_queryF, _sort, _T("JZI")); - - _sort->setSort ( _T("float")); - sortMatches (tc, sort_full, sort_queryF, _sort, _T("ZJI")); - - _sort->setSort ( _T("float"), true); - sortMatches (tc, sort_full, sort_queryF, _sort, _T("IJZ")); -} - - -// test sorts using a series of fields -void testSortCombos(CuTest *tc) { - const TCHAR* sorts1[3]= {_T("int"),_T("float"), NULL}; - _sort->setSort ( sorts1 ); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("IGEAC")); - - SortField* sorts2[3] = { _CLNEW SortField (_T("int"), SortField::AUTO, true), - _CLNEW SortField (NULL, SortField::DOC, true), NULL }; - _sort->setSort ( sorts2); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("CEAGI")); - - const TCHAR* sorts3[3]= {_T("float"),_T("string"), NULL}; - _sort->setSort (sorts3); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("GICEA")); -} - -// test a custom _sort function -/*void testCustomSorts(CuTest *tc) { - _sort->setSort (_CLNEW SortField (_T("custom"), SampleComparable.getComparatorSource())); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("CAIEG")); - - _sort->setSort (_CLNEW SortField (_T("custom"), SampleComparable.getComparatorSource(), true)); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("HJDBF")); - - SortComparator custom = SampleComparable.getComparator(); - _sort->setSort (_CLNEW SortField (_T("custom"), custom)); - sortMatches (tc, sort_full, sort_queryX, _sort, _T("CAIEG")); - - _sort->setSort (_CLNEW SortField (_T("custom"), custom, true)); - sortMatches (tc, sort_full, sort_queryY, _sort, _T("HJDBF")); -}*/ - -// test a variety of sorts using more than one searcher -void testMultiSort(CuTest *tc) { - Searchable* searchables[3] ={ sort_searchX, sort_searchY, NULL }; - MultiSearcher searcher(searchables); - - sort_runMultiSorts (tc, &searcher); - searcher.close(); -} - - -// test that the relevancy scores are the same even if -// hits are sorted -void testNormalizedScores(CuTest *tc) { - - // capture relevancy scores - sortScores* scoresX = sort_getScores (tc, sort_full->search (sort_queryX)); - sortScores* scoresY = sort_getScores (tc, sort_full->search (sort_queryY)); - sortScores* scoresA = sort_getScores (tc, sort_full->search (sort_queryA)); - - // we'll test searching locally, remote and multi - // note: the multi test depends on each separate index containing - // the same documents as our local index, so the computed normalization - // will be the same. so we make a multi searcher over two equal document - // sets - not realistic, but necessary for testing. - //MultiSearcher remote(_CLNEW Searchable[] { getRemote() }); - Searchable* searchables[3] = { sort_full, sort_full,NULL }; - MultiSearcher multi( searchables ); - - // change sorting and make sure relevancy stays the same - - _CLDELETE(_sort); - _sort = _CLNEW Sort(); - sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); - sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); - - _sort->setSort(SortField::FIELD_DOC); - sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); - sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); - - _sort->setSort (_T("int")); - sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); - sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); - - _sort->setSort (_T("float")); - sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); - sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); - - _sort->setSort (_T("string")); - sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); - sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); - - const TCHAR* sorts1[3] = { _T("int"),_T("float"),NULL}; - _sort->setSort ( sorts1 ); - sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); - sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); - - SortField* sorts2[3] = { _CLNEW SortField (_T("int"), SortField::AUTO, true), _CLNEW SortField (NULL, SortField::DOC, true), NULL }; - _sort->setSort ( sorts2 ); - sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); - sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); - - const TCHAR* sorts3[3] = { _T("float"),_T("string"),NULL}; - _sort->setSort (sorts3); - sortSameValues (tc, scoresX, sort_getScores(tc, sort_full->search(sort_queryX,_sort))); - sortSameValues (tc, scoresX, sort_getScores(tc, multi.search(sort_queryX,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, sort_full->search(sort_queryY,_sort))); - sortSameValues (tc, scoresY, sort_getScores(tc, multi.search(sort_queryY,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, sort_full->search(sort_queryA,_sort))); - sortSameValues (tc, scoresA, sort_getScores(tc, multi.search(sort_queryA,_sort))); - - _CLDELETE(scoresX); - _CLDELETE(scoresY); - _CLDELETE(scoresA); -} - -CuSuite *testsort(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Sort Test")); - SUITE_ADD_TEST(suite, testSortSetup); - - SUITE_ADD_TEST(suite, testBuiltInSorts); - SUITE_ADD_TEST(suite, testTypedSort); - SUITE_ADD_TEST(suite, testEmptyIndex); - SUITE_ADD_TEST(suite, testAutoSort); - SUITE_ADD_TEST(suite, testEmptyFieldSort); - SUITE_ADD_TEST(suite, testSortCombos); - //SUITE_ADD_TEST(suite, testCustomSorts); - SUITE_ADD_TEST(suite, testMultiSort); - SUITE_ADD_TEST(suite, testNormalizedScores); - SUITE_ADD_TEST(suite, testReverseSort); - - SUITE_ADD_TEST(suite, testSortCleanup); - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/search/TestTermVector.cpp clucene-core-2.3.3.4/test/search/TestTermVector.cpp --- clucene-core-0.9.21b/test/search/TestTermVector.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/search/TestTermVector.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,262 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - -IndexSearcher* tv_searcher; -RAMDirectory tv_directory; - -void testTermPositionVectors(CuTest *tc) { - CLUCENE_ASSERT(tv_searcher!=NULL); - - Term* term = _CLNEW Term(_T("field"), _T("fifty")); - TermQuery query(term); - _CLDECDELETE(term); - try { - Hits* hits = tv_searcher->search(&query); - CuAssert (tc,_T("hits.length != 100"), 100 == hits->length()); - - for (int32_t i = 0; i < hits->length(); i++) - { - Array vector; - CLUCENE_ASSERT(tv_searcher->getReader()->getTermFreqVectors(hits->id(i), vector)); - CLUCENE_ASSERT(vector.length== 1); - vector.deleteAll(); - } - - _CLDELETE(hits); - } catch (CLuceneError& e) { - if ( e.number() == CL_ERR_IO ) - CuAssert(tc, _T("IO Error"),false); - - throw e; - } -} -void testTermVectors(CuTest *tc) { - CLUCENE_ASSERT(tv_searcher!=NULL); - - Term* term = _CLNEW Term(_T("field"), _T("seventy")); - TermQuery query(term); - _CLDECDELETE(term); - - try { - Hits* hits = tv_searcher->search(&query); - CuAssertIntEquals(tc,_T("hits!=100"), 100, hits->length()); - - for (int32_t i = 0; i < hits->length(); i++) - { - Array vector; - CLUCENE_ASSERT(tv_searcher->getReader()->getTermFreqVectors(hits->id(i), vector)); - CLUCENE_ASSERT(vector.length == 1); - vector.deleteAll(); - } - - //test mem leaks with vectors - Explanation expl; - tv_searcher->explain(&query, hits->id(50), &expl); - TCHAR* tmp = expl.toString(); - _CLDELETE_CARRAY(tmp); - - _CLDELETE(hits); - - } catch (CLuceneError& e) { - if ( e.number() == CL_ERR_IO ) - CuAssert(tc,_T("IO Exception"),false); - else - throw e; - } -} - -void testTVCleanup(CuTest *tc) { - _CLDELETE(tv_searcher); - tv_directory.close(); -} -void testTVSetup(CuTest *tc) { - SimpleAnalyzer a; - IndexWriter writer(&tv_directory, &a, true); - writer.setUseCompoundFile(false); - - TCHAR buf[200]; - for (int32_t i = 0; i < 1000; i++) { //todo: was 1000 - Document doc; - English::IntToEnglish(i,buf,200); - - int mod3 = i % 3; - int mod2 = i % 2; - int termVector = 0; - if (mod2 == 0 && mod3 == 0) - termVector = Field::TERMVECTOR_WITH_POSITIONS; - else if (mod2 == 0) - termVector = Field::TERMVECTOR_WITH_POSITIONS; - else if (mod3 == 0) - termVector = Field::TERMVECTOR_WITH_OFFSETS; - else - termVector = Field::TERMVECTOR_YES; - - doc.add(*new Field(_T("field"), buf, Field::STORE_YES | Field::INDEX_TOKENIZED | termVector )); - writer.addDocument(&doc); - } - writer.close(); - tv_searcher = _CLNEW IndexSearcher(&tv_directory); -} - - -void setupDoc(Document& doc, TCHAR* text) -{ - doc.add(*new Field(_T("field"), text, Field::STORE_YES | - Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES)); -} -void testKnownSetOfDocuments(CuTest *tc) { - TCHAR* test1 = _T("eating chocolate in a computer lab"); //6 terms - TCHAR* test2 = _T("computer in a computer lab"); //5 terms - TCHAR* test3 = _T("a chocolate lab grows old"); //5 terms - TCHAR* test4 = _T("eating chocolate with a chocolate lab in an old chocolate colored computer lab"); //13 terms - - typedef CL_NS(util)::CLHashMap test4MapType; - test4MapType test4Map; - test4Map.put(_T("chocolate"), 3); - test4Map.put(_T("lab"), 2); - test4Map.put(_T("eating"), 1); - test4Map.put(_T("computer"), 1); - test4Map.put(_T("with"), 1); - test4Map.put(_T("a"), 1); - test4Map.put(_T("colored"), 1); - test4Map.put(_T("in"), 1); - test4Map.put(_T("an"), 1); - test4Map.put(_T("computer"), 1); - test4Map.put(_T("old"), 1); - - Document testDoc1; - setupDoc(testDoc1, test1); - Document testDoc2; - setupDoc(testDoc2, test2); - Document testDoc3; - setupDoc(testDoc3, test3); - Document testDoc4; - setupDoc(testDoc4, test4); - - RAMDirectory dir; - - try { - SimpleAnalyzer a; - IndexWriter writer(&dir, &a, true); - - writer.addDocument(&testDoc1); - writer.addDocument(&testDoc2); - writer.addDocument(&testDoc3); - writer.addDocument(&testDoc4); - writer.close(); - - IndexSearcher knownSearcher(&dir); - TermEnum* termEnum = knownSearcher.getReader()->terms(); - TermDocs* termDocs = knownSearcher.getReader()->termDocs(); - - Similarity* sim = knownSearcher.getSimilarity(); - while (termEnum->next() == true) - { - Term* term = termEnum->term(true); - //System.out.println("Term: " + term); - termDocs->seek(term); - - while (termDocs->next()) - { - int32_t docId = termDocs->doc(); - int32_t freq = termDocs->freq(); - //System.out.println("Doc Id: " + docId + " freq " + freq); - TermFreqVector* vector = knownSearcher.getReader()->getTermFreqVector(docId, _T("field")); - float_t tf = sim->tf(freq); - float_t idf = sim->idf(term, &knownSearcher); - //float_t qNorm = sim.queryNorm() - - int termsCount=0; - const TCHAR** terms = vector->getTerms(); - CLUCENE_ASSERT(vector != NULL); - while ( terms && terms[termsCount] != NULL ) - termsCount++; - - //This is fine since we don't have stop words - float_t lNorm = sim->lengthNorm(_T("field"), termsCount); - //float_t coord = sim.coord() - //System.out.println("TF: " + tf + " IDF: " + idf + " LenNorm: " + lNorm); - const TCHAR** vTerms = vector->getTerms(); - const Array* freqs = vector->getTermFrequencies(); - int32_t i=0; - while ( vTerms && vTerms[i] != NULL ) - { - if ( _tcscmp(term->text(), vTerms[i]) == 0 ) - { - CLUCENE_ASSERT((*freqs)[i] == freq); - } - i++; - } - - _CLDELETE(vector); - } - _CLDECDELETE(term); - //System.out.println("--------"); - } - _CLDELETE(termEnum); - _CLDELETE(termDocs); - - - Term* tqTerm = _CLNEW Term(_T("field"), _T("chocolate")); - TermQuery query(tqTerm); - _CLDECDELETE(tqTerm); - - Hits* hits = knownSearcher.search(&query); - //doc 3 should be the first hit b/c it is the shortest match - CLUCENE_ASSERT(hits->length() == 3); - float_t score = hits->score(0); - - CLUCENE_ASSERT(2==hits->id(0) ); - CLUCENE_ASSERT(3==hits->id(1) ); - CLUCENE_ASSERT(0==hits->id(2) ); - - TermFreqVector* vector = knownSearcher.getReader()->getTermFreqVector(hits->id(1), _T("field")); - CLUCENE_ASSERT(vector != NULL); - //System.out.println("Vector: " + vector); - const TCHAR** terms = vector->getTerms(); - const Array* freqs = vector->getTermFrequencies(); - CLUCENE_ASSERT(terms != NULL); - - int termsLength = 0; - while ( terms[termsLength] != NULL ) - termsLength++; - CLUCENE_ASSERT(termsLength == 10); - - for (int32_t i = 0; i < termsLength; i++) { - const TCHAR* term = terms[i]; - //System.out.println("Term: " + term); - int32_t freq = (*freqs)[i]; - CLUCENE_ASSERT( _tcsstr(test4,term) != NULL ); - test4MapType::iterator itr = test4Map.find(term); - CLUCENE_ASSERT( itr != test4Map.end() ); - int32_t freqInt = itr->second; - CLUCENE_ASSERT(freqInt == freq); - } - _CLDELETE(vector); - _CLDELETE(hits); - knownSearcher.close(); - - } catch (CLuceneError& e) { - CuAssert(tc, e.twhat(),false); - } -} - -CuSuite *testtermvector(void) -{ - tv_searcher = NULL; - CuSuite *suite = CuSuiteNew(_T("CLucene Term Vector Test")); - SUITE_ADD_TEST(suite, testTVSetup); - SUITE_ADD_TEST(suite, testKnownSetOfDocuments); - SUITE_ADD_TEST(suite, testTermVectors); - SUITE_ADD_TEST(suite, testTermPositionVectors); - SUITE_ADD_TEST(suite, testTVCleanup); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/search/TestWildcard.cpp clucene-core-2.3.3.4/test/search/TestWildcard.cpp --- clucene-core-0.9.21b/test/search/TestWildcard.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/search/TestWildcard.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,195 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - -#ifndef NO_WILDCARD_QUERY - -void _testWildcard(CuTest* tc, IndexSearcher* searcher, const TCHAR* qt, int expectedLen){ - Term* term = _CLNEW Term(_T("body"), qt); - Query* query = _CLNEW WildcardQuery(term); - - //test the wildcardquery - Hits* result = searcher->search(query); - CLUCENE_ASSERT(expectedLen == result->length()); - _CLDELETE(result); - _CLDELETE(query); - - - //now test wildcardfilter - Filter* filter = _CLNEW WildcardFilter(term); - BitSet* bits = filter->bits(searcher->getReader()); - CLUCENE_ASSERT(expectedLen == bits->count()); - _CLDELETE(filter); - _CLDELETE(bits); - - _CLDECDELETE(term); -} - - void testFuzzyQuery(CuTest *tc){ - RAMDirectory ram; - - //--- - WhitespaceAnalyzer an; - IndexWriter* writer = _CLNEW IndexWriter(&ram, &an, true); - - //--- - Document *doc = 0; - //**** - doc = _CLNEW Document(); - doc->add(*Field::UnStored(_T("body"), _T("test"))); - writer->addDocument(doc); - _CLDELETE(doc); - //**** - doc = _CLNEW Document(); - doc->add(*Field::UnStored(_T("body"), _T("home"))); - writer->addDocument(doc); - _CLDELETE(doc); - //**** - doc = _CLNEW Document(); - doc->add(*Field::UnStored(_T("body"), _T("pc linux"))); - writer->addDocument(doc); - _CLDELETE(doc); - //**** - doc = _CLNEW Document(); - doc->add(*Field::UnStored(_T("body"), _T("tested"))); - writer->addDocument(doc); - _CLDELETE(doc); - //**** - doc = _CLNEW Document(); - doc->add(*Field::UnStored(_T("body"), _T("source"))); - writer->addDocument(doc); - _CLDELETE(doc); - - //--- - writer->close(); - _CLDELETE(writer); - - //--- - IndexSearcher searcher (&ram); - - //--- - Term* term = _CLNEW Term(_T("body"), _T("test~")); - Query* query = _CLNEW FuzzyQuery(term); - Hits* result = searcher.search(query); - - CLUCENE_ASSERT(result && result->length() > 0); - - //--- - _CLDELETE(result); - _CLDELETE(query); - _CLDECDELETE(term); - searcher.close(); - ram.close(); - } - - - void testAsterisk(CuTest *tc){ - RAMDirectory indexStore; - SimpleAnalyzer an; - IndexWriter* writer = _CLNEW IndexWriter(&indexStore, &an, true); - Document doc1; - Document doc2; - doc1.add(*Field::Text(_T("body"), _T("metal"))); - doc2.add(*Field::Text(_T("body"), _T("metals"))); - - writer->addDocument(&doc1); - writer->addDocument(&doc2); - writer->close(); - _CLDELETE(writer); - ////////////////////////////////////////////////// - - IndexReader* reader = IndexReader::open(&indexStore); - IndexSearcher* searcher = _CLNEW IndexSearcher(reader); - - _testWildcard(tc, searcher, _T("metal*"), 2); - _testWildcard(tc, searcher, _T("m*tal"), 1); - _testWildcard(tc, searcher, _T("m*tal*"), 2); - - - Term* term = _CLNEW Term(_T("body"), _T("metal")); - Query* query1 = _CLNEW TermQuery(term); - _CLDECDELETE(term); - - Hits* result = searcher->search(query1); - CLUCENE_ASSERT(1 == result->length()); - _CLDELETE(result); - _CLDELETE(query1); - - - indexStore.close(); - searcher->close(); - reader->close(); - _CLDELETE(reader); - _CLDELETE(searcher); - } - - void testQuestionmark(CuTest *tc){ - RAMDirectory indexStore; - SimpleAnalyzer an; - IndexWriter* writer = _CLNEW IndexWriter(&indexStore, &an, true); - Document doc1; - Document doc2; - Document doc3; - Document doc4; - doc1.add(*Field::Text(_T("body"), _T("metal"))); - doc2.add(*Field::Text(_T("body"), _T("metals"))); - doc3.add(*Field::Text(_T("body"), _T("mXtals"))); - doc4.add(*Field::Text(_T("body"), _T("mXtXls"))); - writer->addDocument(&doc1); - writer->addDocument(&doc2); - writer->addDocument(&doc3); - writer->addDocument(&doc4); - writer->close(); - _CLDELETE(writer); - ////////////////////////////////////////////////////// - - IndexReader* reader = IndexReader::open(&indexStore); - IndexSearcher* searcher = _CLNEW IndexSearcher(reader); - - - _testWildcard(tc, searcher, _T("m?tal"), 1); - _testWildcard(tc, searcher, _T("metal?"), 1); - _testWildcard(tc, searcher, _T("metal??"), 0); - _testWildcard(tc, searcher, _T("meta??"), 1); //metals - _testWildcard(tc, searcher, _T("metals?"), 0); - _testWildcard(tc, searcher, _T("m?t?ls"), 3); - - indexStore.close(); - reader->close(); - searcher->close(); - _CLDELETE(reader); - _CLDELETE(searcher); - } -#else - void _NO_WILDCARD_QUERY(CuTest *tc){ - CuNotImpl(tc,_T("Wildcard")); - } - void _NO_FUZZY_QUERY(CuTest *tc){ - CuNotImpl(tc,_T("Fuzzy")); - } -#endif - - -CuSuite *testwildcard(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Wildcard Test")); - - #ifndef NO_FUZZY_QUERY - SUITE_ADD_TEST(suite, testFuzzyQuery); - #else - SUITE_ADD_TEST(suite, _NO_FUZZY_QUERY); - #endif - #ifndef NO_WILDCARD_QUERY - SUITE_ADD_TEST(suite, testQuestionmark); - SUITE_ADD_TEST(suite, testAsterisk); - #else - SUITE_ADD_TEST(suite, _NO_WILDCARD_QUERY); - #endif - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/store/Makefile.am clucene-core-2.3.3.4/test/store/Makefile.am --- clucene-core-0.9.21b/test/store/Makefile.am 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/store/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -test_storedir = $(tstsrcdir)/store - -cl_test_SOURCES += $(test_storedir)/TestStore.cpp diff -Nru clucene-core-0.9.21b/test/store/TestStore.cpp clucene-core-2.3.3.4/test/store/TestStore.cpp --- clucene-core-0.9.21b/test/store/TestStore.cpp 2008-10-23 17:44:29.000000000 +0000 +++ clucene-core-2.3.3.4/test/store/TestStore.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,127 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" -#include "CLucene/store/Directory.h" -#include "CLucene/store/IndexInput.h" - -void hashTest(CuTest *tc){ - CLHashMap > map(true,true); - map.put(STRDUP_AtoA("a1"),1); - map.put(STRDUP_AtoA("a1"),2); - map.put(STRDUP_AtoA("a2"),3); - map.put(STRDUP_AtoA("a3"),4); - - - CuAssertIntEquals(tc, _T("map size!=3"), 3, map.size()); - - map.remove("a1"); - CuAssertIntEquals(tc, _T("map size!=2"), 2, map.size()); - - map.put(STRDUP_AtoA("a1"),5); - CuAssertIntEquals(tc, _T("mapsize!=3"),3, map.size()); -} - -void StoreTest(CuTest *tc,int32_t count, bool ram){ - srand(1251971); - int32_t i; - - uint64_t veryStart = Misc::currentTimeMillis(); - uint64_t start = Misc::currentTimeMillis(); - - char fsdir[CL_MAX_PATH]; - sprintf(fsdir,"%s/%s",cl_tempDir, "test.store"); - Directory* store = (ram?(Directory*)_CLNEW RAMDirectory():(Directory*)FSDirectory::getDirectory(fsdir, true) ); - int32_t LENGTH_MASK = 0xFFF; - char name[260]; - - for (i = 0; i < count; i++) { - _snprintf(name,260,"%d.dat",i); - - int32_t length = rand() & LENGTH_MASK; - uint8_t b = (uint8_t)(rand() & 0x7F); - - IndexOutput* file = store->createOutput(name); - - for (int32_t j = 0; j < length; j++) - file->writeByte(b); - - file->close(); - _CLDELETE(file); - } - CuMessageA(tc, "%d total milliseconds to create\n", Misc::currentTimeMillis() - start); - - if (!ram){ - store->close(); - _CLDECDELETE(store); - store = (Directory*)FSDirectory::getDirectory(fsdir, false); - } - srand(1251971); - start = Misc::currentTimeMillis(); - - for (i = 0; i < count; i++) { - _snprintf(name,260,"%d.dat",i); - size_t length = rand() & LENGTH_MASK; - uint8_t b = (uint8_t)(rand() & 0x7F); - IndexInput* file = store->openInput(name); - - if (file->length() != length) - _CLTHROWA(CL_ERR_Runtime, "length incorrect" ); - - for (size_t j = 0; j < length; j++){ - if (file->readByte() != b){ - TCHAR buf[100]; - _tprintf(buf,_T("contents incorrect in file %d.dat"),i); - _CLTHROWT(CL_ERR_Runtime, buf); - } - } - - file->close(); - _CLDELETE(file); - } - - CuMessageA(tc,"%d total milliseconds to read\n", Misc::currentTimeMillis() - start); - - srand(1251971); - start = Misc::currentTimeMillis(); - - for (i = 0; i < count; i++) { - _snprintf(name,260,"%d.dat",i); - store->deleteFile(name); - } - - CuMessageA(tc, "%d total milliseconds to delete\n",Misc::currentTimeMillis() - start); - CuMessageA(tc, "%d total milliseconds \n", Misc::currentTimeMillis() - veryStart); - - //test makeLock::toString - CL_NS(store)::LuceneLock* lf = store->makeLock("testlock"); - TCHAR* ts = lf->toString(); - CLUCENE_ASSERT(_tcscmp(ts,_T("fail"))); - _CLDELETE_CARRAY(ts); - _CLDELETE(lf); - - store->close(); - _CLDECDELETE(store); -} - -void ramtest(CuTest *tc){ - StoreTest(tc,10000,true); -} -void fstest(CuTest *tc){ - StoreTest(tc,1000,false); -} - -CuSuite *teststore(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Store Test")); - - SUITE_ADD_TEST(suite, hashTest); - SUITE_ADD_TEST(suite, ramtest); - SUITE_ADD_TEST(suite, fstest); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/test/testall.cpp clucene-core-2.3.3.4/test/testall.cpp --- clucene-core-0.9.21b/test/testall.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/testall.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - -#ifdef _CLCOMPILER_MSVC -#ifdef _DEBUG - #define CRTDBG_MAP_ALLOC - #include - #include -#endif -#endif -char* cl_tempDir; -bool cl_quiet; -char clucene_data_location[1024]; - -int main(int argc, char *argv[]) -{ - #ifdef _CLCOMPILER_MSVC - #ifdef _DEBUG - _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );// | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_CHECK_CRT_DF ); - #endif - #endif - int ret_result = 0; - int i; - int exclude = 0; - int list_provided = 0; - CuSuiteList *alltests = NULL; - CuString *output = CuStringNew(); - bool silent = false; - bool verbose = false; - bool times = false; - uint64_t startTime=0; - - cl_tempDir = NULL; - if ( Misc::dir_Exists("/tmp") ) - cl_tempDir = "/tmp"; - if ( getenv("TEMP") != NULL ) - cl_tempDir = getenv("TEMP"); - else if ( getenv("TMP") != NULL ) - cl_tempDir = getenv("TMP"); - - char* tmp = _CL_NEWARRAY(char,strlen(cl_tempDir)+9); - strcpy(tmp,cl_tempDir); - strcat(tmp,"/clucene"); - _mkdir(tmp); - if ( Misc::dir_Exists(tmp) ) - cl_tempDir=tmp; - - clucene_data_location[0]=0; - if ( CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION1 "/reuters-21578-index/segments") ) - strcpy(clucene_data_location, CLUCENE_DATA_LOCATION1); - else if ( CL_NS(util)::Misc::dir_Exists(CLUCENE_DATA_LOCATION2 "/reuters-21578-index/segments") ) - strcpy(clucene_data_location, CLUCENE_DATA_LOCATION2); - else if ( getenv(CLUCENE_DATA_LOCATIONENV) != NULL ){ - strcpy(clucene_data_location,getenv(CLUCENE_DATA_LOCATIONENV)); - strcat(clucene_data_location,"/data/reuters-21578-index/segments"); - if ( CL_NS(util)::Misc::dir_Exists( clucene_data_location ) ){ - strcpy(clucene_data_location, getenv(CLUCENE_DATA_LOCATIONENV)); - strcat(clucene_data_location, "/data"); - }else - clucene_data_location[0]=0; - } - - /* first check that we are running the test for the correct position */ - //todo: make this configurable - if ( !*clucene_data_location ){ - fprintf(stderr,"%s must be run from a subdirectory of the application's root directory\n",argv[0]); - fprintf(stderr,"ensure that the test data exists in %s or %s\n",CLUCENE_DATA_LOCATION1, CLUCENE_DATA_LOCATION2); - if ( getenv(CLUCENE_DATA_LOCATIONENV) != NULL ) - fprintf(stderr,"%s/data was also checked because of the " CLUCENE_DATA_LOCATIONENV " environment variable", getenv(CLUCENE_DATA_LOCATIONENV)); - ret_result = 1; - goto exit_point; - } - - CuInit(argc, argv); - - /* see if we're in exclude mode, see if list of testcases provided */ - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i],"-h") || !strcmp(argv[i],"--help") || !strcmp(argv[i],"/?")){ - printf("%s [-l list] [-q quiet] [-v verbose] [-t show times] [-p printf messages immediatelly] [-x exclude] [tests...]\n",argv[0]); - goto exit_point; - } - if (!strcmp(argv[i], "-v")) { - verbose = true; - continue; - } - if (!strcmp(argv[i], "-p")) { //used in CuInit - continue; - } - if (!strcmp(argv[i], "-q")) { - silent = true; - continue; - } - if (!strcmp(argv[i], "-x")) { - exclude = 1; - continue; - } - if (!strcmp(argv[i], "-t")) { - times = true; - continue; - } - if (!strcmp(argv[i], "-l")) { - for (i = 0; tests[i].func != NULL; i++) { - printf("%s\n", tests[i].testname); - } - ret_result = 0; - goto exit_point; - } - if (argv[i][0] == '-') { - fprintf(stderr, "invalid option: `%s'\n", argv[i]); - ret_result = 1; - goto exit_point; - } - list_provided = 1; - } - - if (!list_provided) { - /* add everything */ - alltests = CuSuiteListNew(_T("All CLucene Tests")); - for (i = 0; tests[i].func != NULL; i++) { - CuSuiteListAdd(alltests, tests[i].func()); - } - } - else if (exclude) { - /* add everything but the tests listed */ - alltests = CuSuiteListNew(_T("Partial CLucene Tests")); - for (i = 0; tests[i].func != NULL; i++) { - int this_test_excluded = 0; - int j; - - for (j = 1; j < argc && !this_test_excluded; j++) { - if (!strcmp(argv[j], tests[i].testname)) { - this_test_excluded = 1; - } - } - if (!this_test_excluded) { - CuSuiteListAdd(alltests, tests[i].func()); - } - } - } - else { - /* add only the tests listed */ - alltests = CuSuiteListNew(_T("Partial CLucene Tests")); - for (i = 1; i < argc; i++) { - int j; - int found = 0; - - if (argv[i][0] == '-') { - continue; - } - for (j = 0; tests[j].func != NULL; j++) { - if (!strcmp(argv[i], tests[j].testname)) { - CuSuiteListAdd(alltests, tests[j].func()); - found = 1; - } - } - if (!found) { - fprintf(stderr, "invalid test name: `%s'\n", argv[i]); - ret_result = 1; - goto exit_point; - } - } - } - - startTime = Misc::currentTimeMillis(); - - printf("Key: .= pass N=not implemented F=fail\n"); - if ( silent ) - CuSuiteListRun(alltests); - else - CuSuiteListRunWithSummary(alltests,verbose,times); - i = CuSuiteListDetails(alltests, output); - _tprintf(_T("%s\n"), output->buffer); - - if ( times ) - printf("Tests run in %dms\n\n",CL_NS(util)::Misc::currentTimeMillis()-startTime); - - CuSuiteListDelete(alltests); - CuStringFree(output); - _CLDELETE_CaARRAY(cl_tempDir) - -exit_point: - - _lucene_shutdown(); //clears all static memory - //print lucenebase debug -#ifdef LUCENE_ENABLE_MEMLEAKTRACKING - CL_NS(debug)::LuceneBase::__cl_PrintUnclosedObjects(); - //clear memtracking memory (not the unclosed objects) - CL_NS(debug)::LuceneBase::__cl_ClearMemory(); -#endif - - - if ( ret_result != 0 ) - return ret_result; - else - return i > 0 ? 1 : 0; - - //Debuggin techniques: - //For msvc, use this for breaking on memory leaks: - // _crtBreakAlloc - //to break at this clucene item: - // _lucene_counter_break - //run a memory check before deleting objects: - // _lucene_run_objectcheck - //if LUCENE_ENABLE_CONSTRUCTOR_LOG is on, dont do log if this is true: - // _lucene_disable_debuglogging -} - diff -Nru clucene-core-0.9.21b/test/test.h clucene-core-2.3.3.4/test/test.h --- clucene-core-0.9.21b/test/test.h 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/test.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#ifndef TEST_H -#define TEST_H -#include "CLucene.h" - -CL_NS_USE(index) -CL_NS_USE(util) -CL_NS_USE(store) -CL_NS_USE(search) -CL_NS_USE(document) -CL_NS_USE(queryParser) -CL_NS_USE(analysis) -CL_NS_USE2(analysis,standard) - -#include "CuTest.h" - -CuSuite *testindexwriter(void); -CuSuite *teststore(void); -CuSuite *testanalysis(void); -CuSuite *testanalyzers(void); -CuSuite *testhighfreq(void); -CuSuite *testhighlight(void); -CuSuite *testpriorityqueue(void); -CuSuite *testQueryParser(void); -CuSuite *testsearch(void); -CuSuite *testtermvector(void); -CuSuite *testsort(void); -CuSuite *testduplicates(void); -CuSuite *testdatefilter(void); -CuSuite *testwildcard(void); -CuSuite *testdebug(void); -CuSuite *testutf8(void); -CuSuite *testreuters(void); -CuSuite *testdocument(void); - -class English{ -public: - static void IntToEnglish(int32_t i, CL_NS(util)::StringBuffer* result); - static TCHAR* IntToEnglish(int32_t i); - static void IntToEnglish(int32_t i, TCHAR* buf, int32_t buflen); -}; - -extern unittest tests[]; - -#define CLUCENE_DATA_LOCATION1 "../test/data/" -#define CLUCENE_DATA_LOCATION2 "./test/data/" -#define CLUCENE_DATA_LOCATIONENV "srcdir" - -extern char* cl_tempDir; - -#endif diff -Nru clucene-core-0.9.21b/test/tests.cpp clucene-core-2.3.3.4/test/tests.cpp --- clucene-core-0.9.21b/test/tests.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/tests.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" - -unittest tests[] = { - {"document", testdocument}, - {"debug", testdebug}, - {"analysis", testanalysis}, - {"analyzers", testanalyzers}, - {"indexwriter", testindexwriter}, - {"highfreq", testhighfreq}, - {"priorityqueue", testpriorityqueue}, - {"queryparser", testQueryParser}, - {"search", testsearch}, - {"termvector",testtermvector}, - {"sort",testsort}, - {"duplicates", testduplicates}, - {"datefilter", testdatefilter}, - {"wildcard", testwildcard}, - {"store", teststore}, - {"utf8", testutf8}, - {"reuters", testreuters}, - {"LastTest", NULL} -}; diff -Nru clucene-core-0.9.21b/test/util/English.cpp clucene-core-2.3.3.4/test/util/English.cpp --- clucene-core-0.9.21b/test/util/English.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/util/English.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,135 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "CLucene.h" -#include "test.h" -CL_NS_USE(util) - -void English::IntToEnglish(int32_t i, StringBuffer* result) -{ - if (i == 0) - { - result->append(_T("zero")); - return ; - } - if (i < 0) - { - result->append(_T("minus ")); - i = - i; - } - if (i >= 1000000000) - { - // billions - IntToEnglish(i / 1000000000, result); - result->append(_T("billion, ")); - i = i % 1000000000; - } - if (i >= 1000000) - { - // millions - IntToEnglish(i / 1000000, result); - result->append(_T("million, ")); - i = i % 1000000; - } - if (i >= 1000) - { - // thousands - IntToEnglish(i / 1000, result); - result->append(_T("thousand, ")); - i = i % 1000; - } - if (i >= 100) - { - // hundreds - IntToEnglish(i / 100, result); - result->append(_T("hundred ")); - i = i % 100; - } - if (i >= 20) - { - switch (i / 10) - { - - case 9: result->append(_T("ninety")); break; - - case 8: result->append(_T("eighty")); break; - - case 7: result->append(_T("seventy")); break; - - case 6: result->append(_T("sixty")); break; - - case 5: result->append(_T("fifty")); break; - - case 4: result->append(_T("forty")); break; - - case 3: result->append(_T("thirty")); break; - - case 2: result->append(_T("twenty")); break; - } - i = i % 10; - if (i == 0) - result->append(_T(" ")); - else - result->append(_T("-")); - } - switch (i) - { - - case 19: result->append(_T("nineteen ")); break; - - case 18: result->append(_T("eighteen ")); break; - - case 17: result->append(_T("seventeen ")); break; - - case 16: result->append(_T("sixteen ")); break; - - case 15: result->append(_T("fifteen ")); break; - - case 14: result->append(_T("fourteen ")); break; - - case 13: result->append(_T("thirteen ")); break; - - case 12: result->append(_T("twelve ")); break; - - case 11: result->append(_T("eleven ")); break; - - case 10: result->append(_T("ten ")); break; - - case 9: result->append(_T("nine ")); break; - - case 8: result->append(_T("eight ")); break; - - case 7: result->append(_T("seven ")); break; - - case 6: result->append(_T("six ")); break; - - case 5: result->append(_T("five ")); break; - - case 4: result->append(_T("four ")); break; - - case 3: result->append(_T("three ")); break; - - case 2: result->append(_T("two ")); break; - - case 1: result->append(_T("one ")); break; - - case 0: result->append(_T("")); break; - } -} - -TCHAR* English::IntToEnglish(int32_t i) -{ - StringBuffer result; - IntToEnglish(i, &result); - return result.toString(); -} -void English::IntToEnglish(int32_t i, TCHAR* buf, int32_t buflen) -{ - StringBuffer result; - IntToEnglish(i, &result); - _tcsncpy(buf,result.getBuffer(),buflen); -} - diff -Nru clucene-core-0.9.21b/test/util/Makefile.am clucene-core-2.3.3.4/test/util/Makefile.am --- clucene-core-0.9.21b/test/util/Makefile.am 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/util/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -test_utildir = $(tstsrcdir)/util - -cl_test_SOURCES += $(test_utildir)/TestPriorityQueue.cpp -cl_test_SOURCES += $(test_utildir)/English.cpp diff -Nru clucene-core-0.9.21b/test/util/TestPriorityQueue.cpp clucene-core-2.3.3.4/test/util/TestPriorityQueue.cpp --- clucene-core-0.9.21b/test/util/TestPriorityQueue.cpp 2008-10-23 17:44:35.000000000 +0000 +++ clucene-core-2.3.3.4/test/util/TestPriorityQueue.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/*------------------------------------------------------------------------------ -* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team -* -* Distributable under the terms of either the Apache License (Version 2.0) or -* the GNU Lesser General Public License, as specified in the COPYING file. -------------------------------------------------------------------------------*/ -#include "test.h" -#include - - class integerQueue: public CL_NS(util)::PriorityQueue{ - public: - integerQueue(int32_t count) - { - initialize(count,false); - } - protected: - bool lessThan(int32_t a, int32_t b) { - return (a < b); - } - }; - - void _test_PriorityQueue(CuTest *tc,int32_t count){ - integerQueue pq(count); - srand ( (unsigned)time(NULL) ); - int32_t sum = 0, sum2 = 0; - - uint64_t start = CL_NS(util)::Misc::currentTimeMillis(); - - for (int32_t i = 0; i < count; i++) { - int32_t next = -rand(); - //int32_t next = (count+1)-i; - sum += next; - pq.put( next ); - } - CuMessageA(tc,"%d milliseconds/",CL_NS(util)::Misc::currentTimeMillis()-start); - CuMessageA(tc,"%d puts\n",count); - start = CL_NS(util)::Misc::currentTimeMillis(); - - int32_t last = -LUCENE_INT32_MAX_SHOULDBE; - for (int32_t j = 0; j < count; j++) { - int32_t next = pq.pop(); - - if ( next < last ){ - TCHAR buf[1024]; - _sntprintf(buf,1024,_T("next < last at %d (last: %d, next: %d)"),j,last,next); - CuAssert(tc,buf,false); - } - last = next; - sum2 += last; - } - - CuMessageA(tc,"%d milliseconds",(CL_NS(util)::Misc::currentTimeMillis()-start)); - CuMessageA(tc,"/%d pops\n",count); - - CLUCENE_ASSERT(sum == sum); - } - void testPriorityQueue(CuTest *tc){ - _test_PriorityQueue(tc,100000); - } - - -CuSuite *testpriorityqueue(void) -{ - CuSuite *suite = CuSuiteNew(_T("CLucene Priority Queue Test")); - - SUITE_ADD_TEST(suite, testPriorityQueue); - - return suite; -} -// EOF diff -Nru clucene-core-0.9.21b/win32/CLucene.sln clucene-core-2.3.3.4/win32/CLucene.sln --- clucene-core-0.9.21b/win32/CLucene.sln 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/CLucene.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CLucene", "CLucene.vcproj", "{0A6A6ABD-B67D-41D6-916B-718B477E9D4F}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Debug.ActiveCfg = Debug|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Debug.Build.0 = Debug|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Release.ActiveCfg = Release|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff -Nru clucene-core-0.9.21b/win32/CLucene.vcproj clucene-core-2.3.3.4/win32/CLucene.vcproj --- clucene-core-0.9.21b/win32/CLucene.vcproj 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/CLucene.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,1095 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru clucene-core-0.9.21b/win32/demo.dsp clucene-core-2.3.3.4/win32/demo.dsp --- clucene-core-0.9.21b/win32/demo.dsp 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/demo.dsp 1970-01-01 00:00:00.000000000 +0000 @@ -1,129 +0,0 @@ -# Microsoft Developer Studio Project File - Name="demo" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=demo - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "demo.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "demo.mak" CFG="demo - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "demo - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "demo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "demo - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../build" -# PROP Intermediate_Dir "../build/tmp/msvc6/demo/release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX"CLucene/StdHeader.h" /FD /Zm1000 /c -# ADD BASE RSC /l 0xc09 /d "NDEBUG" -# ADD RSC /l 0xc09 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "demo - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../build" -# PROP Intermediate_Dir "../build/tmp/msvc6/demo/debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FR /YX"CLucene/StdHeader.h" /FD /GZ /Zm1000 /c -# ADD BASE RSC /l 0xc09 /d "_DEBUG" -# ADD RSC /l 0xc09 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "demo - Win32 Release" -# Name "demo - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\src\CLucene\CLMonolithic.cpp -# End Source File -# Begin Source File - -SOURCE=..\src\demo\DeleteFiles.cpp -# End Source File -# Begin Source File - -SOURCE=..\src\demo\IndexFiles.cpp -# End Source File -# Begin Source File - -SOURCE=..\src\demo\Main.cpp -# End Source File -# Begin Source File - -SOURCE=..\src\demo\SearchFiles.cpp -# End Source File -# Begin Source File - -SOURCE=..\src\demo\Statistics.cpp -# End Source File -# Begin Source File - -SOURCE=..\src\demo\stdafx.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\src\demo\stdafx.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff -Nru clucene-core-0.9.21b/win32/demo.dsw clucene-core-2.3.3.4/win32/demo.dsw --- clucene-core-0.9.21b/win32/demo.dsw 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/demo.dsw 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "demo"=.\demo.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff -Nru clucene-core-0.9.21b/win32/demo.sln clucene-core-2.3.3.4/win32/demo.sln --- clucene-core-0.9.21b/win32/demo.sln 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/demo.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo", "demo.vcproj", "{B4225D51-7B58-4084-B22E-6999A32CA41E}" - ProjectSection(ProjectDependencies) = postProject - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F} = {0A6A6ABD-B67D-41D6-916B-718B477E9D4F} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CLucene", "CLucene.vcproj", "{0A6A6ABD-B67D-41D6-916B-718B477E9D4F}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {B4225D51-7B58-4084-B22E-6999A32CA41E}.Debug.ActiveCfg = Debug|Win32 - {B4225D51-7B58-4084-B22E-6999A32CA41E}.Debug.Build.0 = Debug|Win32 - {B4225D51-7B58-4084-B22E-6999A32CA41E}.Release.ActiveCfg = Release|Win32 - {B4225D51-7B58-4084-B22E-6999A32CA41E}.Release.Build.0 = Release|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Debug.ActiveCfg = Debug|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Debug.Build.0 = Debug|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Release.ActiveCfg = Release|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff -Nru clucene-core-0.9.21b/win32/demo.vcproj clucene-core-2.3.3.4/win32/demo.vcproj --- clucene-core-0.9.21b/win32/demo.vcproj 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/demo.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru clucene-core-0.9.21b/win32/Makefile.am clucene-core-2.3.3.4/win32/Makefile.am --- clucene-core-0.9.21b/win32/Makefile.am 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -## Makefile.am -- Process this file with automake to produce Makefile.in - -win32srcdir = $(top_srcdir)/win32 - -EXTRA_DIST = $(win32srcdir)/*.dsp \ - $(win32srcdir)/*.dsw \ - $(win32srcdir)/*.vcproj \ - $(win32srcdir)/*.sln - -MAINTAINERCLEANFILES = *.suo Makefile.in - -DISTCLEANFILES = - -MOSTLYCLEANFILES = *.plg *.ncb *.opt diff -Nru clucene-core-0.9.21b/win32/Makefile.in clucene-core-2.3.3.4/win32/Makefile.in --- clucene-core-0.9.21b/win32/Makefile.in 2008-10-23 18:18:26.000000000 +0000 +++ clucene-core-2.3.3.4/win32/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,352 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = win32 -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_cxx_have_std.m4 \ - $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ - $(top_srcdir)/m4/ac_cxx_have_wctype_h.m4 \ - $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ - $(top_srcdir)/m4/ac_define_integer_bits.m4 \ - $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/ax_config_feature.m4 \ - $(top_srcdir)/m4/ax_prefix_config_h.m4 \ - $(top_srcdir)/m4/dps_float_byte.m4 \ - $(top_srcdir)/m4/dps_snprintf_oflow.m4 \ - $(top_srcdir)/m4/dps_static_const_type.m4 \ - $(top_srcdir)/m4/dps_swprintf_works.m4 \ - $(top_srcdir)/m4/mdl_cxx_function_try_blocks.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h.tmp -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLLIB_VERSION = @CLLIB_VERSION@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GREP = @GREP@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POW_LIB = @POW_LIB@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -acx_pthread_config = @acx_pthread_config@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_doxygen = @enable_doxygen@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -win32srcdir = $(top_srcdir)/win32 -EXTRA_DIST = $(win32srcdir)/*.dsp \ - $(win32srcdir)/*.dsw \ - $(win32srcdir)/*.vcproj \ - $(win32srcdir)/*.sln - -MAINTAINERCLEANFILES = *.suo Makefile.in -DISTCLEANFILES = -MOSTLYCLEANFILES = *.plg *.ncb *.opt -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu win32/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu win32/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/$(win32srcdir) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru clucene-core-0.9.21b/win32/test.dsp clucene-core-2.3.3.4/win32/test.dsp --- clucene-core-0.9.21b/win32/test.dsp 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/test.dsp 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../build" -# PROP Intermediate_Dir "../build/tmp/msvc6/test/release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /FR /YX"CLucene/StdHeader" /FD /Zm1000 /c -# ADD BASE RSC /l 0xc09 /d "NDEBUG" -# ADD RSC /l 0xc09 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /profile /machine:I386 - -!ELSEIF "$(CFG)" == "test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../build" -# PROP Intermediate_Dir "../build/tmp/msvc6/test/debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FR /YX"CLucene/StdHeader" /FD /GZ /Zm1000 /c -# ADD BASE RSC /l 0xc09 /d "_DEBUG" -# ADD RSC /l 0xc09 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /profile /debug /machine:I386 - -!ENDIF - -# Begin Target - -# Name "test - Win32 Release" -# Name "test - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\src\CLucene\CLMonolithic.cpp -# End Source File -# Begin Source File - -SOURCE=..\test\CLMonolithic_Test.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\test\CuTest.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff -Nru clucene-core-0.9.21b/win32/test.dsw clucene-core-2.3.3.4/win32/test.dsw --- clucene-core-0.9.21b/win32/test.dsw 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/test.dsw 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "tests"=.\test.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff -Nru clucene-core-0.9.21b/win32/test.sln clucene-core-2.3.3.4/win32/test.sln --- clucene-core-0.9.21b/win32/test.sln 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/test.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{59FA5B1C-9CF6-4EED-AEF4-E8B45C7FD4EA}" - ProjectSection(ProjectDependencies) = postProject - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F} = {0A6A6ABD-B67D-41D6-916B-718B477E9D4F} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CLucene", "CLucene.vcproj", "{0A6A6ABD-B67D-41D6-916B-718B477E9D4F}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {59FA5B1C-9CF6-4EED-AEF4-E8B45C7FD4EA}.Debug.ActiveCfg = Debug|Win32 - {59FA5B1C-9CF6-4EED-AEF4-E8B45C7FD4EA}.Debug.Build.0 = Debug|Win32 - {59FA5B1C-9CF6-4EED-AEF4-E8B45C7FD4EA}.Release.ActiveCfg = Release|Win32 - {59FA5B1C-9CF6-4EED-AEF4-E8B45C7FD4EA}.Release.Build.0 = Release|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Debug.ActiveCfg = Debug|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Debug.Build.0 = Debug|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Release.ActiveCfg = Release|Win32 - {0A6A6ABD-B67D-41D6-916B-718B477E9D4F}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff -Nru clucene-core-0.9.21b/win32/test.vcproj clucene-core-2.3.3.4/win32/test.vcproj --- clucene-core-0.9.21b/win32/test.vcproj 2008-10-23 17:44:44.000000000 +0000 +++ clucene-core-2.3.3.4/win32/test.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,289 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -